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, 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()