class BarPlugin(object): def __init__(self, editor): self.editor = editor self.signals = Signals() self.signals.connect_signals(self) self.triggers = TriggerManager(editor) self.triggers.connect_triggers(self) def load(self): pass def unload(self): pass @trigger def activate(self, sender): message = "Witness the awesome power of Bar!" title = "Real Bar Power" self.signals.show_message.emit(message) self.signals.show_info.emit(title, message) return False @Signals.show_message def show_message(self, sender, message): # Update the message bar. self.editor.update_message(message, "yes", 10) return False @Signals.show_info(idle=True, after=True) def show_info(self, sender, title, message): # Show a window containing Bar message. self.editor.show_info(title, message, self.editor.window) return False
class BookmarkPlugin(object): def __init__(self, editor): self.editor = editor self.signals = Signals() self.signals.connect_signals(self) self.triggers = TriggerManager(editor) self.triggers.connect_triggers(self) # WTF? in original plugin there is no popup menu item, so commented #editor.textview.connect("populate-popup", self.pupulate_popup) create_bookmark_image(editor) self.feedback_manager = Feedback(self.signals, editor) self.mark_reseter = Reseter(self.signals, editor) self.mark_updater = Updater(self.signals, editor) self.marker = Marker(self.signals, editor) self.gui_manager = GuiManager(self.signals, editor) weak_connect(editor, "loaded-file", self, 'restore_bookmarks', idle_priority=9999) idle_add(self.restore_bookmarks, priority=9999) @trigger_toggle def toggle(self, sender): self.signals.toggle.emit() return False @trigger_show def show(self, sender): self.signals.show.emit() return False @trigger_remove def remove(self, sender): self.signals.remove_all.emit(True) return False def populate_popup(self, textview, menu): from PopupMenuItem import PopupMenuItem self.editor.add_to_popup(PopupMenuItem(self.editor)) return False @Signals.scroll_to_line def scroll_to_line(self, sender, line): iterator = self.editor.textbuffer.get_iter_at_line(line) self.editor.response() self.editor.textbuffer.place_cursor(iterator) self.editor.textview.scroll_to_iter(iterator, 0.001, use_align=True, xalign=1.0) self.editor.response() return False @Signals.add def mark_add(self, sender, line, feedback=None): self.editor.response() iterator = self.editor.textbuffer.get_iter_at_line(line) self.editor.textbuffer.create_source_mark(None, BOOKMARK_NAME, iterator) self.editor.response() return False @Signals.bookmark_lines def mark_lines(self, sender, lines): [self.mark_add(sender, line) for line in lines] return False def mark_region(self, line=None): if line is None: return self.editor.textbuffer.get_bounds() start = self.editor.textbuffer.get_iter_at_line(line) end = self.editor.forward_to_line_end(start.copy()) return start, end @Signals.remove def mark_remove(self, sender, line=None, feedback=None): start, end = self.mark_region(line) self.editor.response() self.editor.textbuffer.remove_source_marks(start, end, BOOKMARK_NAME) self.editor.response() return False @Signals.remove_all def mark_remove_all(self, sender, feedback=None): self.mark_remove(sender) return False @Signals.lines def margin_toggle(self, sender, lines): self.editor.textview.set_show_line_marks(bool(lines)) return False @Signals.lines def save_bookmarks(self, sender, lines): uri = self.editor.uri if not uri: return False self.editor.response() set_value(str(uri), lines) self.editor.response() return False def restore_bookmarks(self, *args): uri = self.editor.uri if not uri: return False self.editor.response() lines = get_value(str(uri)) self.editor.response() if not lines: return False self.signals.bookmark_lines.emit(lines) return False def unload(self): self.mark_updater.update()