def __init__(self, parent=None): gtk.Object.__init__(self) self.parent = parent self._gui = load_ui_file("preferences.ui") self.window = self.get_widget('preferences_window') self.window.connect("delete_event", self.on_delete_window) # Translators: 'None' refers here to the Todo list choice in Hamster preferences (Tracking tab) self.activities_sources = [("", _("None")), ("evo", "Evolution"), ("gtg", "Getting Things Gnome"), ("rt", "Request Tracker"), ("redmine", "Redmine"), ("jira", "JIRA")] self.todo_combo = gtk.combo_box_new_text() for code, label in self.activities_sources: self.todo_combo.append_text(label) self.todo_combo.connect("changed", self.on_todo_combo_changed) self.get_widget("todo_pick").add(self.todo_combo) # RT prefs self.rt_url = gtk.Entry() self.rt_url.connect("changed", self.on_rt_url_changed) self.get_widget('rt_url').add(self.rt_url) self.rt_user = gtk.Entry() self.rt_user.connect("changed", self.on_rt_user_changed) self.get_widget('rt_user').add(self.rt_user) self.rt_pass = gtk.Entry() self.rt_pass.set_visibility(False) self.rt_pass.connect("changed", self.on_rt_pass_changed) self.get_widget('rt_pass').add(self.rt_pass) self.rt_query = gtk.Entry() self.rt_query.connect("changed", self.on_rt_query_changed) self.get_widget('rt_query').add(self.rt_query) self.rt_category_field = gtk.Entry() self.rt_category_field.connect("changed", self.on_rt_category_field_changed) self.get_widget('rt_category_field').add(self.rt_category_field) # JIRA prefs self.jira_url = gtk.Entry() self.jira_url.connect("changed", self.on_jira_url_changed) self.get_widget('jira_url').add(self.jira_url) self.jira_user = gtk.Entry() self.jira_user.connect("changed", self.on_jira_user_changed) self.get_widget('jira_user').add(self.jira_user) self.jira_pass = gtk.Entry() self.jira_pass.set_visibility(False) self.jira_pass.connect("changed", self.on_jira_pass_changed) self.get_widget('jira_pass').add(self.jira_pass) self.jira_query = gtk.Entry() self.jira_query.connect("changed", self.on_jira_query_changed) self.get_widget('jira_query').add(self.jira_query) self.jira_category_field = gtk.Entry() self.jira_category_field.connect("changed", self.on_jira_category_field_changed) self.get_widget('jira_category_field').add(self.jira_category_field) # Redmine prefs self.redmine_url = gtk.Entry() self.redmine_url.connect("changed", self.on_redmine_url_changed) self.get_widget('redmine_url').add(self.redmine_url) self.redmine_user = gtk.Entry() self.redmine_user.connect("changed", self.on_redmine_user_changed) self.get_widget('redmine_user').add(self.redmine_user) self.redmine_pass = gtk.Entry() self.redmine_pass.set_visibility(False) self.redmine_pass.connect("changed", self.on_redmine_pass_changed) self.get_widget('redmine_pass').add(self.redmine_pass) self.redmine_query = gtk.Entry() self.redmine_query.connect("changed", self.on_redmine_query_changed) self.get_widget('redmine_query').add(self.redmine_query) # create and fill activity tree self.activity_tree = self.get_widget('activity_list') self.get_widget("activities_label").set_mnemonic_widget( self.activity_tree) self.activity_store = ActivityStore() self.external_listeners = [] self.activityColumn = gtk.TreeViewColumn(_("Name")) self.activityColumn.set_expand(True) self.activityCell = gtk.CellRendererText() self.external_listeners.extend([ (self.activityCell, self.activityCell.connect('edited', self.activity_name_edited_cb, self.activity_store)) ]) self.activityColumn.pack_start(self.activityCell, True) self.activityColumn.set_attributes(self.activityCell, text=1) self.activityColumn.set_sort_column_id(1) self.activity_tree.append_column(self.activityColumn) self.activity_tree.set_model(self.activity_store) self.selection = self.activity_tree.get_selection() self.external_listeners.extend([ (self.selection, self.selection.connect('changed', self.activity_changed, self.activity_store)) ]) # create and fill category tree self.category_tree = self.get_widget('category_list') self.get_widget("categories_label").set_mnemonic_widget( self.category_tree) self.category_store = CategoryStore() self.categoryColumn = gtk.TreeViewColumn(_("Category")) self.categoryColumn.set_expand(True) self.categoryCell = gtk.CellRendererText() self.external_listeners.extend([ (self.categoryCell, self.categoryCell.connect('edited', self.category_edited_cb, self.category_store)) ]) self.categoryColumn.pack_start(self.categoryCell, True) self.categoryColumn.set_attributes(self.categoryCell, text=1) self.categoryColumn.set_sort_column_id(1) self.categoryColumn.set_cell_data_func(self.categoryCell, self.unsorted_painter) self.category_tree.append_column(self.categoryColumn) self.category_store.load() self.category_tree.set_model(self.category_store) selection = self.category_tree.get_selection() self.external_listeners.extend([ (selection, selection.connect('changed', self.category_changed_cb, self.category_store)) ]) self.day_start = widgets.TimeInput(dt.time(5, 30)) self.get_widget("day_start_placeholder").add(self.day_start) self.load_config() # Allow enable drag and drop of rows including row move self.activity_tree.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, self.TARGETS, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE) self.category_tree.enable_model_drag_dest(self.TARGETS, gtk.gdk.ACTION_MOVE) self.activity_tree.connect("drag_data_get", self.drag_data_get_data) self.category_tree.connect("drag_data_received", self.on_category_drop) #select first category selection = self.category_tree.get_selection() selection.select_path((0, )) self.prev_selected_activity = None self.prev_selected_category = None # create and fill workspace tree self.workspace_tree = self.get_widget('workspace_list') self.workspace_store = WorkspaceStore() self.wNameColumn = gtk.TreeViewColumn(_("Name")) self.wNameColumn.set_expand(True) self.wNameCell = gtk.CellRendererText() self.wNameCell.set_property('editable', False) self.wActivityColumn = gtk.TreeViewColumn(_("Activity")) self.wActivityColumn.set_expand(True) self.wActivityCell = gtk.CellRendererText() self.wActivityCell.set_property('editable', True) self.external_listeners.extend([ (self.wActivityCell, self.wActivityCell.connect('edited', self.on_workspace_activity_edited)) ]) self.wNameColumn.pack_start(self.wNameCell, True) self.wNameColumn.set_attributes(self.wNameCell) self.wNameColumn.set_sort_column_id(1) self.wNameColumn.set_cell_data_func(self.wNameCell, self.workspace_name_celldata) self.workspace_tree.append_column(self.wNameColumn) self.wActivityColumn.pack_start(self.wActivityCell, True) self.wActivityColumn.set_attributes(self.wActivityCell, text=2) self.wActivityColumn.set_sort_column_id(1) self.workspace_tree.append_column(self.wActivityColumn) self.workspace_tree.set_model(self.workspace_store) # disable notification thing if pynotify is not available try: import pynotify except: self.get_widget("notification_preference_frame").hide() self.external_listeners.extend([ (self.day_start, self.day_start.connect("time-entered", self.on_day_start_changed)) ]) # disable workspace tracking if wnck is not there if wnck: self.screen = wnck.screen_get_default() for workspace in self.screen.get_workspaces(): self.on_workspace_created(self.screen, workspace) self.external_listeners.extend([ (self.screen, self.screen.connect("workspace-created", self.on_workspace_created)), (self.screen, self.screen.connect("workspace-destroyed", self.on_workspace_deleted)) ]) else: self.get_widget("workspace_tab").hide() if not appindicator: self.get_widget("tray_tab").hide() self._gui.connect_signals(self) self.show()
def __init__(self, parent=None): Controller.__init__(self, parent, ui_file="preferences.ui") # Translators: 'None' refers here to the Todo list choice in Hamster preferences (Tracking tab) self.activities_sources = [("", _("None")), ("evo", "Evolution"), ("gtg", "Getting Things Gnome")] self.todo_combo = gtk.ComboBoxText() for code, label in self.activities_sources: self.todo_combo.append_text(label) self.todo_combo.connect("changed", self.on_todo_combo_changed) self.get_widget("todo_pick").add(self.todo_combo) # create and fill activity tree self.activity_tree = self.get_widget('activity_list') self.get_widget("activities_label").set_mnemonic_widget( self.activity_tree) self.activity_store = ActivityStore() self.external_listeners = [] self.activityColumn = gtk.TreeViewColumn(_("Name")) self.activityColumn.set_expand(True) self.activityCell = gtk.CellRendererText() self.external_listeners.extend([ (self.activityCell, self.activityCell.connect('edited', self.activity_name_edited_cb, self.activity_store)) ]) self.activityColumn.pack_start(self.activityCell, True) self.activityColumn.set_attributes(self.activityCell, text=1) self.activityColumn.set_sort_column_id(1) self.activity_tree.append_column(self.activityColumn) self.activity_tree.set_model(self.activity_store) self.selection = self.activity_tree.get_selection() self.external_listeners.extend([ (self.selection, self.selection.connect('changed', self.activity_changed, self.activity_store)) ]) # create and fill category tree self.category_tree = self.get_widget('category_list') self.get_widget("categories_label").set_mnemonic_widget( self.category_tree) self.category_store = CategoryStore() self.categoryColumn = gtk.TreeViewColumn(_("Category")) self.categoryColumn.set_expand(True) self.categoryCell = gtk.CellRendererText() self.external_listeners.extend([ (self.categoryCell, self.categoryCell.connect('edited', self.category_edited_cb, self.category_store)) ]) self.categoryColumn.pack_start(self.categoryCell, True) self.categoryColumn.set_attributes(self.categoryCell, text=1) self.categoryColumn.set_sort_column_id(1) self.categoryColumn.set_cell_data_func(self.categoryCell, self.unsorted_painter) self.category_tree.append_column(self.categoryColumn) self.category_store.load() self.category_tree.set_model(self.category_store) selection = self.category_tree.get_selection() self.external_listeners.extend([ (selection, selection.connect('changed', self.category_changed_cb, self.category_store)) ]) self.day_start = widgets.TimeInput(dt.time(5, 30)) self.get_widget("day_start_placeholder").add(self.day_start) self.load_config() # Allow enable drag and drop of rows including row move self.activity_tree.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, self.TARGETS, gdk.DragAction.DEFAULT | gdk.DragAction.MOVE) self.category_tree.enable_model_drag_dest(self.TARGETS, gdk.DragAction.MOVE) self.activity_tree.connect("drag_data_get", self.drag_data_get_data) self.category_tree.connect("drag_data_received", self.on_category_drop) #select first category selection = self.category_tree.get_selection() selection.select_path((0, )) self.prev_selected_activity = None self.prev_selected_category = None self.external_listeners.extend([ (self.day_start, self.day_start.connect("time-entered", self.on_day_start_changed)) ]) self.show()
def __init__(self, parent=None, fact_date=None, fact_id=None): gtk.Object.__init__(self) self._gui = load_ui_file("edit_activity.ui") self.window = self.get_widget('custom_fact_window') self.parent, self.fact_id = parent, fact_id start_date, end_date = None, None #TODO - should somehow hint that time is not welcome here self.new_name = widgets.ActivityEntry() self.get_widget("activity_box").add(self.new_name) self.new_tags = widgets.TagsEntry() self.get_widget("tags_box").add(self.new_tags) day_start = conf.get("day_start_minutes") self.day_start = dt.time(day_start / 60, day_start % 60) if fact_id: fact = runtime.storage.get_fact(fact_id) label = fact.activity if fact.category != _("Unsorted"): label += "@%s" % fact.category self.new_name.set_text(label) self.new_tags.set_text(", ".join(fact.tags)) start_date = fact.start_time end_date = fact.end_time buf = gtk.TextBuffer() buf.set_text(fact.description or "") self.get_widget('description').set_buffer(buf) self.get_widget("save_button").set_label("gtk-save") self.window.set_title(_("Update activity")) else: self.get_widget("delete_button").set_sensitive(False) # if there is previous activity with end time - attach to it # otherwise let's start at 8am (unless it is today - in that case # we will assume that the user wants to start from this moment) fact_date = fact_date or dt.date.today() last_activity = runtime.storage.get_facts(fact_date) if last_activity and last_activity[-1].end_time: start_date = last_activity[-1].end_time if fact_date != dt.date.today(): end_date = start_date + dt.timedelta(minutes=30) else: if fact_date == dt.date.today(): start_date = dt.datetime.now() else: start_date = dt.datetime(fact_date.year, fact_date.month, fact_date.day, 8) if not end_date: self.get_widget("in_progress").set_active(True) if (dt.datetime.now() - start_date).days == 0: end_date = dt.datetime.now() start_date = start_date or dt.datetime.now() end_date = end_date or start_date + dt.timedelta(minutes=30) self.start_date = widgets.DateInput(start_date) self.get_widget("start_date_placeholder").add(self.start_date) self.start_time = widgets.TimeInput(start_date) self.get_widget("start_time_placeholder").add(self.start_time) self.end_time = widgets.TimeInput(end_date, start_date) self.get_widget("end_time_placeholder").add(self.end_time) self.set_end_date_label(end_date) self.dayline = widgets.DayLine() self.dayline.connect("on-time-chosen", self.update_time) self._gui.get_object("day_preview").add(self.dayline) self.on_in_progress_toggled(self.get_widget("in_progress")) self.start_date.connect("date-entered", self.on_start_date_entered) self.start_time.connect("time-entered", self.on_start_time_entered) self.new_name.connect("changed", self.on_new_name_changed) self.end_time.connect("time-entered", self.on_end_time_entered) self._gui.connect_signals(self) self.window.show_all()