def __init__(self): gtk.Dialog.__init__(self) ui = stuff.load_ui_file("stats.ui") self.dialog = ui.get_object('save_report_dialog') self.dialog.set_action(gtk.FILE_CHOOSER_ACTION_SAVE) self.dialog.set_current_folder(os.path.expanduser("~")) self.filters = {} filter = gtk.FileFilter() filter.set_name(_("HTML Report")) filter.add_mime_type("text/html") filter.add_pattern("*.html") filter.add_pattern("*.htm") self.filters[filter] = "html" self.dialog.add_filter(filter) filter = gtk.FileFilter() filter.set_name(_("Tab Separated Values (TSV)")) filter.add_mime_type("text/plain") filter.add_pattern("*.tsv") filter.add_pattern("*.txt") self.filters[filter] = "tsv" self.dialog.add_filter(filter) filter = gtk.FileFilter() filter.set_name(_("XML")) filter.add_mime_type("text/xml") filter.add_pattern("*.xml") self.filters[filter] = "xml" self.dialog.add_filter(filter) filter = gtk.FileFilter() filter.set_name(_("iCal")) filter.add_mime_type("text/calendar") filter.add_pattern("*.ics") self.filters[filter] = "ical" self.dialog.add_filter(filter) filter = gtk.FileFilter() filter.set_name("All files") filter.add_pattern("*") self.dialog.add_filter(filter) self.start_date = widgets.DateInput() ui.get_object('from_date_box').add(self.start_date) self.end_date = widgets.DateInput() ui.get_object('to_date_box').add(self.end_date) self.category_box = ui.get_object('category_box') ui.get_object('save_button').connect("clicked", self.on_save_button_clicked) ui.get_object('cancel_button').connect("clicked", self.on_cancel_button_clicked)
def __init__(self, parent = None, fact_date = None, fact_id = None): self._gui = stuff.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 if fact_id: fact = runtime.storage.get_fact(fact_id) label = fact['name'] if fact['category'] != _("Unsorted"): label += "@%s" % fact['category'] self.get_widget('activity_combo').child.set_text(label) 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) 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() self.get_widget("save_button").set_label("gtk-save") self.window.set_title(_("Update activity")) elif fact_date and fact_date != dt.date.today(): # if there is previous activity with end time - attach to it # otherwise let's start at 8am last_activity = runtime.storage.get_facts(fact_date) if last_activity and last_activity[len(last_activity)-1]["end_time"]: start_date = last_activity[len(last_activity)-1]["end_time"] else: start_date = dt.datetime(fact_date.year, fact_date.month, fact_date.day, 8) 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_date.connect("date-entered", self.on_start_date_entered) self.start_time = widgets.TimeInput(start_date) self.get_widget("start_time_placeholder").add(self.start_time) self.start_time.connect("time-entered", self.on_start_time_entered) self.end_time = widgets.TimeInput(end_date, start_date) self.get_widget("end_time_placeholder").add(self.end_time) self.end_time.connect("time-entered", self.on_end_time_entered) self.set_end_date_label(end_date) self.set_dropdown() self.refresh_menu() self.dayline = Dayline() self.dayline.on_time_changed = self.update_time self.dayline.on_more_data = runtime.storage.get_facts self._gui.get_object("day_preview").add(self.dayline) self.on_in_progress_toggled(self.get_widget("in_progress")) self._gui.connect_signals(self)
def __init__(self, parent = None): self.parent = parent# determine if app shut shut down on close self._gui = stuff.load_ui_file("stats.ui") self.window = self.get_widget('stats_window') self.stat_facts = None #id, caption, duration, date (invisible), description, category self.fact_store = gtk.TreeStore(int, str, str, str, str, str, gobject.TYPE_PYOBJECT) self.setup_tree() #graphs self.background = (0.975,0.975,0.975) self.get_widget("graph_frame").modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(*[int(b*65536.0) for b in self.background])) self.get_widget("explore_frame").modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(*[int(b*65536.0) for b in self.background])) x_offset = 90 # let's nicely align all graphs self.category_chart = charting.BarChart(background = self.background, bar_base_color = (238,221,221), legend_width = x_offset, max_bar_width = 35, show_stack_labels = True ) self.get_widget("totals_by_category").add(self.category_chart) self.day_chart = charting.BarChart(background = self.background, bar_base_color = (220, 220, 220), show_scale = True, max_bar_width = 35, grid_stride = 4, legend_width = 20) self.get_widget("totals_by_day").add(self.day_chart) self.activity_chart = charting.HorizontalBarChart(orient = "horizontal", max_bar_width = 25, values_on_bars = True, stretch_grid = True, legend_width = x_offset, value_format = "%.1f", background = self.background, bars_beveled = False, animate = False) self.get_widget("totals_by_activity").add(self.activity_chart); self.view_date = dt.date.today() #set to monday self.start_date = self.view_date - \ dt.timedelta(self.view_date.weekday() + 1) # look if we need to start on sunday or monday self.start_date = self.start_date + \ dt.timedelta(stuff.locale_first_weekday()) self.end_date = self.start_date + dt.timedelta(6) self.week_view = self.get_widget("week") self.month_view = self.get_widget("month") self.month_view.set_group(self.week_view) #initiate the form in the week view self.week_view.set_active(True) runtime.dispatcher.add_handler('activity_updated', self.after_activity_update) runtime.dispatcher.add_handler('day_updated', self.after_fact_update) selection = self.fact_tree.get_selection() selection.connect('changed', self.on_fact_selection_changed, self.fact_store) self.popular_categories = [cat[0] for cat in runtime.storage.get_popular_categories()] self._gui.connect_signals(self) self.fact_tree.grab_focus() self.timeline = TimeLine() self.get_widget("explore_everything").add(self.timeline) self.get_widget("explore_everything").show_all() self.report_chooser = None self.do_graph() self.init_stats()
def __init__(self, parent = None): self.parent = parent self._gui = stuff.load_ui_file("preferences.ui") self.config = GconfStore() self.window = self.get_widget('preferences_window') # 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.activityColumn = gtk.TreeViewColumn(_("Name")) self.activityColumn.set_expand(True) self.activityCell = gtk.CellRendererText() 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.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.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() selection.connect('changed', self.category_changed_cb, self.category_store) self.load_config() self._gui.connect_signals(self) # 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.activity_tree.enable_model_drag_dest(self.TARGETS, 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.activity_tree.connect("drag_data_received", self.drag_data_received_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 # disable notification thing if pynotify is not available try: import pynotify except: self.get_widget("notification_preference_frame").hide()