Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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()