def __init_plugin_engine(self): self.pengine = PluginEngine(GTG.PLUGIN_DIR) # initializes the plugin api class self.plugin_api = PluginAPI(self.req, self) self.pengine.register_api(self.plugin_api) # checks the conf for user settings try: plugins_enabled = self.plugins_config.get("enabled") except configparser.Error: plugins_enabled = [] for plugin in self.pengine.get_plugins(): plugin.enabled = plugin.module_name in plugins_enabled # initializes and activates each plugin (that is enabled) self.pengine.activate_plugins()
def init_plugin_engine(self): """Setup the plugin engine.""" self.plugin_engine = PluginEngine() plugin_api = PluginAPI(self.req, self) self.plugin_engine.register_api(plugin_api) try: enabled_plugins = self.config_plugins.get("enabled") except configparser.Error: enabled_plugins = [] for plugin in self.plugin_engine.get_plugins(): plugin.enabled = plugin.module_name in enabled_plugins self.plugin_engine.activate_plugins()
def __init__(self, requester, app, task, thisisnew=False, clipboard=None): """ req is the requester app is the view manager thisisnew is True when a new task is created and opened """ self.req = requester self.app = app self.browser_config = self.req.get_config('browser') self.config = self.req.get_task_config(task.get_id()) self.time = None self.clipboard = clipboard self.builder = Gtk.Builder() self.builder.add_from_file(self.EDITOR_UI_FILE) self.donebutton = self.builder.get_object("mark_as_done") self.undonebutton = self.builder.get_object("mark_as_undone") self.dismissbutton = self.builder.get_object("dismiss") self.undismissbutton = self.builder.get_object("undismiss") self.add_subtask = self.builder.get_object("add_subtask") self.tag_store = self.builder.get_object("tag_store") self.parent_button = self.builder.get_object("parent") # Closed date self.closed_popover = self.builder.get_object("closed_popover") self.closed_entry = self.builder.get_object("closeddate_entry") self.closed_calendar = self.builder.get_object("calendar_closed") # Start date self.start_popover = self.builder.get_object("start_popover") self.start_entry = self.builder.get_object("startdate_entry") self.start_calendar = self.builder.get_object("calendar_start") # Due date self.due_popover = self.builder.get_object("due_popover") self.due_entry = self.builder.get_object("duedate_entry") self.due_calendar = self.builder.get_object("calendar_due") # Recurrence self.recurring_menu = RecurringMenu(self.req, task.tid, self.builder) # Create our dictionary and connect it dic = { "on_tags_popover": self.open_tags_popover, "on_tag_toggled": self.on_tag_toggled, "on_move": self.on_move, "set_recurring_term_every_day": self.set_recurring_term_every_day, "set_recurring_term_every_otherday": self.set_recurring_term_every_otherday, "set_recurring_term_every_week": self.set_recurring_term_every_week, "set_recurring_term_every_month": self.set_recurring_term_every_month, "set_recurring_term_every_year": self.set_recurring_term_every_year, "set_recurring_term_week_day": self.set_recurring_term_week_day, "set_recurring_term_calender_month": self.set_recurring_term_month, "set_recurring_term_calender_year": self.set_recurring_term_year, "toggle_recurring_status": self.toggle_recurring_status, "on_repeat_icon_toggled": self.on_repeat_icon_toggled, "show_popover_start": self.show_popover_start, "startingdate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_START), "startdate_cleared": lambda w: self.on_date_cleared(w, GTGCalendar.DATE_KIND_START), "startdate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_START ), "show_popover_due": self.show_popover_due, "duedate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_DUE), "duedate_now_selected": lambda w: self.on_duedate_fuzzy(w, Date.now()), "duedate_soon_selected": lambda w: self.on_duedate_fuzzy(w, Date.soon()), "duedate_someday_selected": lambda w: self.on_duedate_fuzzy(w, Date.someday()), "duedate_cleared": lambda w: self.on_date_cleared(w, GTGCalendar.DATE_KIND_DUE), "duedate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_DUE), "show_popover_closed": self.show_popover_closed, "closeddate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_CLOSED), "closeddate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_CLOSED ), } self.window = self.builder.get_object("TaskEditor") self.builder.connect_signals(dic) self.window.set_application(app) if task.has_parent(): self.parent_button.set_label(_('Open Parent')) else: self.parent_button.set_label(_('Add Parent')) # Connect signals for the calendar self.start_handle = self.start_calendar.connect( 'day-selected', lambda c: self.on_date_selected(c, GTGCalendar.DATE_KIND_START)) self.due_handle = self.due_calendar.connect( 'day-selected', lambda c: self.on_date_selected(c, GTGCalendar.DATE_KIND_DUE)) self.closed_handle = self.closed_calendar.connect( 'day-selected', lambda c: self.on_date_selected(c, GTGCalendar.DATE_KIND_CLOSED)) # Removing the Normal textview to replace it by our own # So don't try to change anything with glade, this is a home-made # widget textview = self.builder.get_object("textview") scrolled = self.builder.get_object("scrolledtask") scrolled.remove(textview) self.textview = TaskView(self.req, self.clipboard) self.textview.show() scrolled.add(self.textview) conf_font_value = self.browser_config.get("font_name") if conf_font_value != "": self.textview.override_font(Pango.FontDescription(conf_font_value)) self.textview.browse_tag_cb = app.select_tag self.textview.new_subtask_cb = self.new_subtask self.textview.get_subtasks_cb = task.get_children self.textview.delete_subtask_cb = self.remove_subtask self.textview.rename_subtask_cb = self.rename_subtask self.textview.open_subtask_cb = self.open_subtask self.textview.save_cb = self.light_save self.textview.add_tasktag_cb = task.tag_added self.textview.remove_tasktag_cb = task.remove_tag self.textview.refresh_cb = self.refresh_editor self.textview.get_tagslist_cb = task.get_tags_name self.textview.tid = task.tid # Voila! it's done self.textview.connect('focus-in-event', self.on_textview_focus_in) self.textview.connect('focus-out-event', self.on_textview_focus_out) """ TODO(jakubbrindza): Once all the functionality in editor is back and working, bring back also the accelerators! Dayleft_label needs to be brought back, however its position is unsure. """ # self.dayleft_label = self.builder.get_object("dayleft") self.task = task tags = task.get_tags() text = self.task.get_text() title = self.task.get_title() self.textview.buffer.set_text(f"{title}\n") if text: self.textview.insert(text) # Insert any remaining tags if tags: tag_names = [t.get_name() for t in tags] self.textview.insert_tags(tag_names) else: # If not text, we insert tags if tags: tag_names = [t.get_name() for t in tags] self.textview.insert_tags(tag_names) start = self.textview.buffer.get_end_iter() self.textview.buffer.insert(start, '\n') # Insert subtasks if they weren't inserted in the text subtasks = task.get_children() for sub in subtasks: if sub not in self.textview.subtasks['tags']: self.textview.insert_existing_subtask(sub) if thisisnew: self.textview.select_title() else: self.task.set_to_keep() self.window.connect("destroy", self.destruction) # Connect search field to tags popup self.tags_entry = self.builder.get_object("tags_entry") self.tags_tree = self.builder.get_object("tags_tree") self.tags_tree.set_search_entry(self.tags_entry) self.tags_tree.set_search_equal_func(self.search_function, None) # plugins self.pengine = PluginEngine() self.plugin_api = PluginAPI(self.req, self.app, self) self.pengine.register_api(self.plugin_api) self.pengine.onTaskLoad(self.plugin_api) # Putting the refresh callback at the end make the start a lot faster self.refresh_editor() self.textview.grab_focus() self.init_dimensions() self.window.insert_action_group('app', app) self.window.insert_action_group('win', app.browser) self.textview.set_editable(True) self.window.set_transient_for(self.app.browser) self.window.show()
def __init__(self, requester, vmanager, task, taskconfig=None, thisisnew=False, clipboard=None): ''' req is the requester vmanager is the view manager taskconfig is a ConfigObj dic to save infos about tasks thisisnew is True when a new task is created and opened ''' self.req = requester self.browser_config = self.req.get_config('browser') self.vmanager = vmanager self.config = taskconfig self.time = None self.clipboard = clipboard self.builder = gtk.Builder() self.builder.add_from_file(GnomeConfig.GLADE_FILE) self.donebutton = self.builder.get_object("mark_as_done_editor") self.dismissbutton = self.builder.get_object("dismiss_editor") self.deletebutton = self.builder.get_object("delete_editor") self.deletebutton.set_tooltip_text(GnomeConfig.DELETE_TOOLTIP) self.subtask_button = self.builder.get_object("insert_subtask") self.subtask_button.set_tooltip_text(GnomeConfig.SUBTASK_TOOLTIP) self.inserttag_button = self.builder.get_object("inserttag") self.inserttag_button.set_tooltip_text(GnomeConfig.TAG_TOOLTIP) # Create our dictionary and connect it dic = { "mark_as_done_clicked": self.change_status, "on_dismiss": self.dismiss, "delete_clicked": self.delete_task, "on_duedate_pressed": (self.on_date_pressed, GTGCalendar.DATE_KIND_DUE), "on_startdate_pressed": (self.on_date_pressed, GTGCalendar.DATE_KIND_START), "on_closeddate_pressed": (self.on_date_pressed, GTGCalendar.DATE_KIND_CLOSED), "close_clicked": self.close, "duedate_changed": (self.date_changed, GTGCalendar.DATE_KIND_DUE), "duedate_focus_out": (self.date_focus_out, GTGCalendar.DATE_KIND_DUE), "startingdate_changed": (self.date_changed, GTGCalendar.DATE_KIND_START), "startdate_focus_out": (self.date_focus_out, GTGCalendar.DATE_KIND_START), "closeddate_changed": (self.date_changed, GTGCalendar.DATE_KIND_CLOSED), "closeddate_focus_out": (self.date_focus_out, GTGCalendar.DATE_KIND_CLOSED), "on_insert_subtask_clicked": self.insert_subtask, "on_inserttag_clicked": self.inserttag_clicked, "on_move": self.on_move, } self.builder.connect_signals(dic) self.window = self.builder.get_object("TaskEditor") # Removing the Normal textview to replace it by our own # So don't try to change anything with glade, this is a home-made # widget textview = self.builder.get_object("textview") scrolled = self.builder.get_object("scrolledtask") scrolled.remove(textview) self.textview = TaskView(self.req, self.clipboard) self.textview.show() self.textview.set_subtask_callback(self.new_subtask) self.textview.open_task_callback(self.vmanager.open_task) self.textview.set_left_margin(7) self.textview.set_right_margin(5) scrolled.add(self.textview) conf_font_value = self.browser_config.get("font_name") if conf_font_value != "": self.textview.modify_font(pango.FontDescription(conf_font_value)) # Voila! it's done self.calendar = GTGCalendar(self.builder) self.duedate_widget = self.builder.get_object("duedate_entry") self.startdate_widget = self.builder.get_object("startdate_entry") self.closeddate_widget = self.builder.get_object("closeddate_entry") self.dayleft_label = self.builder.get_object("dayleft") self.tasksidebar = self.builder.get_object("tasksidebar") # Define accelerator keys self.init_accelerators() self.task = task tags = task.get_tags() self.textview.subtasks_callback(task.get_children) self.textview.removesubtask_callback(task.remove_child) self.textview.set_get_tagslist_callback(task.get_tags_name) self.textview.set_add_tag_callback(task.add_tag) self.textview.set_remove_tag_callback(task.remove_tag) self.textview.save_task_callback(self.light_save) texte = self.task.get_text() title = self.task.get_title() # the first line is the title self.textview.set_text("%s\n" % title) # we insert the rest of the task if texte: self.textview.insert("%s" % texte) else: # If not text, we insert tags if tags: for t in tags: self.textview.insert_text("%s, " % t.get_name()) self.textview.insert_text("\n") # If we don't have text, we still need to insert subtasks if any subtasks = task.get_children() if subtasks: self.textview.insert_subtasks(subtasks) # We select the title if it's a new task if thisisnew: self.textview.select_title() else: self.task.set_to_keep() self.textview.modified(full=True) self.window.connect("destroy", self.destruction) self.calendar.connect("date-changed", self.on_date_changed) # plugins self.pengine = PluginEngine() self.plugin_api = PluginAPI(self.req, self.vmanager, self) self.pengine.register_api(self.plugin_api) self.pengine.onTaskLoad(self.plugin_api) # Putting the refresh callback at the end make the start a lot faster self.textview.refresh_callback(self.refresh_editor) self.refresh_editor() self.textview.grab_focus() # restoring size and position, spatial tasks if self.config: tid = self.task.get_id() if tid in self.config: if "position" in self.config[tid]: pos_x, pos_y = self.config[tid]["position"] self.move(int(pos_x), int(pos_y)) if "size" in self.config[tid]: width, height = self.config[tid]["size"] self.window.resize(int(width), int(height)) self.textview.set_editable(True) self.window.show()
def __init__(self, requester, app, task, thisisnew=False, clipboard=None): """ req is the requester app is the view manager thisisnew is True when a new task is created and opened """ self.req = requester self.app = app self.browser_config = self.req.get_config('browser') self.config = self.req.get_task_config(task.get_id()) self.time = None self.clipboard = clipboard self.builder = Gtk.Builder() self.builder.add_from_file(self.EDITOR_UI_FILE) self.donebutton = self.builder.get_object("mark_as_done") self.undonebutton = self.builder.get_object("mark_as_undone") self.dismissbutton = self.builder.get_object("dismiss") self.undismissbutton = self.builder.get_object("undismiss") self.add_subtask = self.builder.get_object("add_subtask") self.tag_store = self.builder.get_object("tag_store") self.parent_button = self.builder.get_object("parent") # Closed date self.closed_popover = self.builder.get_object("closed_popover") self.closed_entry = self.builder.get_object("closeddate_entry") self.closed_calendar = self.builder.get_object("calendar_closed") # Start date self.start_popover = self.builder.get_object("start_popover") self.start_entry = self.builder.get_object("startdate_entry") self.start_calendar = self.builder.get_object("calendar_start") # Due date self.due_popover = self.builder.get_object("due_popover") self.due_entry = self.builder.get_object("duedate_entry") self.due_calendar = self.builder.get_object("calendar_due") # Create our dictionary and connect it dic = { "on_tags_popover": self.open_tags_popover, "on_tag_toggled": self.on_tag_toggled, "on_move": self.on_move, "show_popover_start": self.show_popover_start, "startingdate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_START), "startdate_cleared": lambda w: self.on_date_cleared(w, GTGCalendar.DATE_KIND_START), "startdate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_START ), "show_popover_due": self.show_popover_due, "duedate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_DUE), "duedate_now_selected": lambda w: self.on_duedate_fuzzy(w, Date.now()), "duedate_soon_selected": lambda w: self.on_duedate_fuzzy(w, Date.soon()), "duedate_someday_selected": lambda w: self.on_duedate_fuzzy(w, Date.someday()), "duedate_cleared": lambda w: self.on_date_cleared(w, GTGCalendar.DATE_KIND_DUE), "duedate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_DUE), "show_popover_closed": self.show_popover_closed, "closeddate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_CLOSED), "closeddate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_CLOSED ), } self.builder.connect_signals(dic) self.window = self.builder.get_object("TaskEditor") self.window.set_application(app) # Connect signals for the calendar self.start_handle = self.start_calendar.connect( 'day-selected', lambda c: self.on_date_selected(c, GTGCalendar.DATE_KIND_START)) self.due_handle = self.due_calendar.connect( 'day-selected', lambda c: self.on_date_selected(c, GTGCalendar.DATE_KIND_DUE)) self.closed_handle = self.closed_calendar.connect( 'day-selected', lambda c: self.on_date_selected(c, GTGCalendar.DATE_KIND_CLOSED)) # Removing the Normal textview to replace it by our own # So don't try to change anything with glade, this is a home-made # widget textview = self.builder.get_object("textview") scrolled = self.builder.get_object("scrolledtask") scrolled.remove(textview) self.textview = TaskView(self.req, self.clipboard) self.textview.show() self.textview.set_subtask_callback(self.new_subtask) self.textview.open_task_callback(self.app.open_task) self.textview.set_left_margin(20) self.textview.set_right_margin(20) scrolled.add(self.textview) conf_font_value = self.browser_config.get("font_name") if conf_font_value != "": self.textview.override_font(Pango.FontDescription(conf_font_value)) # Voila! it's done """ TODO(jakubbrindza): Once all the functionality in editor is back and working, bring back also the accelerators! Dayleft_label needs to be brought back, however its position is unsure. """ # self.dayleft_label = self.builder.get_object("dayleft") self.task = task tags = task.get_tags() self.textview.subtasks_callback(task.get_children) self.textview.removesubtask_callback(task.remove_child) self.textview.set_get_tagslist_callback(task.get_tags_name) self.textview.set_add_tag_callback(task.add_tag) self.textview.set_remove_tag_callback(task.remove_tag) self.textview.save_task_callback(self.light_save) texte = self.task.get_text() title = self.task.get_title() # the first line is the title self.textview.set_text(f"{title}\n") # we insert the rest of the task if texte: self.textview.insert(f"{texte}") else: # If not text, we insert tags if tags: for t in tags: self.textview.insert_text("%s, " % t.get_name()) self.textview.insert_text("\n") # If we don't have text, we still need to insert subtasks if any subtasks = task.get_children() if subtasks: self.textview.insert_subtasks(subtasks) # We select the title if it's a new task if thisisnew: self.textview.select_title() else: self.task.set_to_keep() self.textview.modified(full=True) self.window.connect("destroy", self.destruction) # Connect search field to tags popup self.tags_entry = self.builder.get_object("tags_entry") self.tags_tree = self.builder.get_object("tags_tree") self.tags_tree.set_search_entry(self.tags_entry) self.tags_tree.set_search_equal_func(self.search_function, None) # plugins self.pengine = PluginEngine() self.plugin_api = PluginAPI(self.req, self.app, self) self.pengine.register_api(self.plugin_api) self.pengine.onTaskLoad(self.plugin_api) # Putting the refresh callback at the end make the start a lot faster self.textview.refresh_callback(self.refresh_editor) self.refresh_editor() self.textview.grab_focus() self.init_dimensions() self.window.insert_action_group('app', app) self.window.insert_action_group('win', app.browser) self._set_actions() self.textview.set_editable(True) self.window.set_transient_for(self.app.browser) self.window.show()
def __init__(self, requester, vmanager, task, thisisnew=False, clipboard=None): ''' req is the requester vmanager is the view manager thisisnew is True when a new task is created and opened ''' self.req = requester self.vmanager = vmanager self.browser_config = self.req.get_config('browser') self.config = self.req.get_task_config(task.get_id()) self.time = None self.clipboard = clipboard self.builder = Gtk.Builder() self.builder.add_from_file(self.EDITOR_UI_FILE) self.donebutton = self.builder.get_object("mark_as_done") self.undonebutton = self.builder.get_object("mark_as_undone") self.dismissbutton = self.builder.get_object("dismiss") self.undismissbutton = self.builder.get_object("undismiss") self.add_subtask = self.builder.get_object("add_subtask") self.tag_store = self.builder.get_object("tag_store") self.parent_button = self.builder.get_object("parent") # Create our dictionary and connect it dic = { "on_mark_as_done": self.change_status, "on_dismiss": self.dismiss, "delete_clicked": self.delete_task, "on_duedate_pressed": lambda w: self.on_date_pressed(w, GTGCalendar.DATE_KIND_DUE), "on_tags_popover": self.open_tags_popover, "on_startdate_pressed": lambda w: self.on_date_pressed(w, GTGCalendar.DATE_KIND_START), "on_closeddate_pressed": lambda w: self.on_date_pressed(w, GTGCalendar.DATE_KIND_CLOSED), "duedate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_DUE), "duedate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_DUE), "startingdate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_START), "startdate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_START ), "closeddate_changed": lambda w: self.date_changed(w, GTGCalendar.DATE_KIND_CLOSED), "closeddate_focus_out": lambda w, e: self.date_focus_out(w, e, GTGCalendar.DATE_KIND_CLOSED ), "on_insert_subtask_clicked": self.insert_subtask, "on_inserttag_clicked": self.inserttag_clicked, "on_parent_select": self.on_parent_select, "on_move": self.on_move, "show_popover_start": self.show_popover_start, "show_popover_due": self.show_popover_due, "show_popover_closed": self.show_popover_closed, "on_tag_toggled": self.on_tag_toggled, } self.builder.connect_signals(dic) self.window = self.builder.get_object("TaskEditor") # Removing the Normal textview to replace it by our own # So don't try to change anything with glade, this is a home-made # widget textview = self.builder.get_object("textview") scrolled = self.builder.get_object("scrolledtask") scrolled.remove(textview) self.textview = TaskView(self.req, self.clipboard) self.textview.show() self.textview.set_subtask_callback(self.new_subtask) self.textview.open_task_callback(self.vmanager.open_task) self.textview.set_left_margin(7) self.textview.set_right_margin(5) scrolled.add(self.textview) conf_font_value = self.browser_config.get("font_name") if conf_font_value != "": self.textview.override_font(Pango.FontDescription(conf_font_value)) # Voila! it's done self.calendar = GTGCalendar() self.calendar.set_transient_for(self.window) self.calendar.set_decorated(False) self.duedate_widget = self.builder.get_object("duedate_entry") self.startdate_widget = self.builder.get_object("startdate_entry") self.closeddate_widget = self.builder.get_object("closeddate_entry") ''' TODO(jakubbrindza): Once all the functionality in editor is back and working, bring back also the accelerators! Dayleft_label needs to be brought back, however its position is unsure. ''' # self.dayleft_label = self.builder.get_object("dayleft") # Define accelerator keys self.init_accelerators() self.task = task tags = task.get_tags() self.textview.subtasks_callback(task.get_children) self.textview.removesubtask_callback(task.remove_child) self.textview.set_get_tagslist_callback(task.get_tags_name) self.textview.set_add_tag_callback(task.add_tag) self.textview.set_remove_tag_callback(task.remove_tag) self.textview.save_task_callback(self.light_save) texte = self.task.get_text() title = self.task.get_title() # the first line is the title self.textview.set_text("%s\n" % title) # we insert the rest of the task if texte: self.textview.insert("%s" % texte) else: # If not text, we insert tags if tags: for t in tags: self.textview.insert_text("%s, " % t.get_name()) self.textview.insert_text("\n") # If we don't have text, we still need to insert subtasks if any subtasks = task.get_children() if subtasks: self.textview.insert_subtasks(subtasks) # We select the title if it's a new task if thisisnew: self.textview.select_title() else: self.task.set_to_keep() self.textview.modified(full=True) self.window.connect("destroy", self.destruction) ''' TODO(jakubbrindza): make on_date_changed work alongside the new popover calendar ''' # self.calendar.connect("date-changed", self.on_date_changed) # plugins self.pengine = PluginEngine() self.plugin_api = PluginAPI(self.req, self.vmanager, self) self.pengine.register_api(self.plugin_api) self.pengine.onTaskLoad(self.plugin_api) # Putting the refresh callback at the end make the start a lot faster self.textview.refresh_callback(self.refresh_editor) self.refresh_editor() self.textview.grab_focus() self.init_dimensions() self.textview.set_editable(True) self.window.show()
def deactivate(self, api: PluginAPI) -> None: """Deactivates the plugin.""" api.remove_menu_item(self.menu_btn)