Andrew has proposed merging lp:~and471/activity-log-manager/ui-tweaks into lp:activity-log-manager.
Requested reviews: Activity Log Manager (activity-log-manager) For more details, see: https://code.launchpad.net/~and471/activity-log-manager/ui-tweaks/+merge/61427 Just some small tweaks of the UI, I tried to make better use of the space available and just some small fixes. Results can be seen here http://i.imgur.com/V8ZoO.png -- https://code.launchpad.net/~and471/activity-log-manager/ui-tweaks/+merge/61427 Your team Activity Log Manager is requested to review the proposed merge of lp:~and471/activity-log-manager/ui-tweaks into lp:activity-log-manager.
=== modified file 'src/window.py' --- src/window.py 2011-05-17 17:29:23 +0000 +++ src/window.py 2011-05-18 15:29:23 +0000 @@ -25,6 +25,7 @@ import pango import logging import time +import glib from datetime import date @@ -45,13 +46,13 @@ self.is_incognito = self.zg.get_incognito() self.incognito_disabled_text = _("Logging stopped") self.incognito_enabled_text = _("Logging active") - self.set_border_width(6) + self.set_border_width(12) self._set_up_ui() self.show_all() def _set_up_ui(self): self.set_title(_("Activity Log Manager")) - self.set_default_size(600, 400) + self.set_default_size(500, 400) self.set_position(gtk.WIN_POS_CENTER_ALWAYS) self._notebook = gtk.Notebook() @@ -62,9 +63,9 @@ self._set_up_file_tab() self.pix_indicator_disabled = gtk.image_new_from_stock(gtk.STOCK_NO, - gtk.ICON_SIZE_LARGE_TOOLBAR) + gtk.ICON_SIZE_MENU) self.pix_indicator_enabled = gtk.image_new_from_stock(gtk.STOCK_YES, - gtk.ICON_SIZE_LARGE_TOOLBAR) + gtk.ICON_SIZE_MENU) self.incognito_bar = IncognitoBar() if not self.zg.get_incognito(): @@ -78,7 +79,7 @@ self.incognito_bar.connect('clicked', self._on_incognito_toggled) - general_vbox = gtk.VBox(False) + general_vbox = gtk.VBox(False, 6) hbox = gtk.HBox() hbox.pack_end(self.incognito_bar, False, False) general_vbox.pack_end(hbox, False, False) @@ -134,19 +135,23 @@ def __init__(self): - gtk.VBox.__init__(self, spacing=4) + gtk.VBox.__init__(self, spacing=12) self.zg = ZG self._set_up_ui() def _set_up_ui(self): - self.set_border_width(10) + self.set_border_width(12) + + recent_past_records_vbox = gtk.VBox(False, 6) + self.pack_start(recent_past_records_vbox, False, False) + label = gtk.Label() - label.set_markup("<b>%s</b>" % _("Forget my activities for the last...")) + label.set_markup("<b>%s</b>" % _("Forget my activities for the last:")) label.set_alignment(0.0, 0.5) - self.pack_start(label, False, False, 6) + recent_past_records_vbox.pack_start(label, False, False) - self._past_records_box = gtk.HBox(False, 6) - self.pack_start(self._past_records_box, False, False, 6) + recent_past_records_hbox = gtk.HBox(False, 6) + recent_past_records_vbox.pack_start(recent_past_records_hbox, False, False) self._combo_box = gtk.combo_box_new_text() temp_records = self._past_records.keys() @@ -155,30 +160,34 @@ self._combo_box.append_text(self._past_records[record]) self._combo_box.set_active(0) - self.clear_button = gtk.Button(stock=gtk.STOCK_DELETE) + self.clear_button = gtk.Button(label=_("Forget")) self.clear_button.connect("clicked", self._on_clear_button_clicked) - self._past_records_box.pack_start(self._combo_box, False) - self._past_records_box.pack_start(self.clear_button, False) - - separator = gtk.HSeparator() - self.pack_start(separator, False, True) + hbuttonbox = gtk.HButtonBox() + hbuttonbox.pack_start(self.clear_button, False, False); + + recent_past_records_hbox.pack_start(self._combo_box, False) + recent_past_records_hbox.pack_start(hbuttonbox, False) + + old_past_records_vbox = gtk.VBox(False, 6) + self.pack_start(old_past_records_vbox, False, False) label = gtk.Label() label.set_markup("<b>%s</b>" % \ _("Forget my activities in the following timerange:")) label.set_alignment(0.0, 0.5) - self.pack_start(label, False, False, 6) - - markup = '<span size="smaller" font-weight="bold" >%s</span>' + old_past_records_vbox.pack_start(label, False, False, 6) + + old_past_records_hbox = gtk.HBox(False, 12) + old_past_records_vbox.pack_start(old_past_records_hbox, False, False) + from_label = gtk.Label() - from_label.set_markup(markup % _("From:")) - from_label.set_alignment(0.0, 0.5) + from_label.set_markup(_("From:")) + from_label.set_alignment(1, 0.5) to_label = gtk.Label() - to_label.set_markup(markup % _("To:")) - to_label.set_alignment(0.0, 0.5) + to_label.set_markup(_("To:")) + to_label.set_alignment(1, 0.5) self.from_entry = gtk.Entry() - self.from_entry.set_width_chars(30) self.from_button = gtk.Button() arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_IN) self.from_button.add(arrow) @@ -187,7 +196,6 @@ self.from_button.connect("clicked", self.show_calendar, 0) self.to_entry = gtk.Entry() - self.to_entry.set_width_chars(30) self.to_button = gtk.Button() arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_IN) self.to_button.add(arrow) @@ -195,35 +203,37 @@ self.to_entry.set_editable(False) self.to_button.connect("clicked", self.show_calendar, 1) - hbox = gtk.HBox(False) - hbox.pack_start(self.from_entry, False) - hbox.pack_start(self.from_button, False) - vbox_from = gtk.VBox(False, 5) - vbox_from.pack_start(from_label, False) - vbox_from.pack_start(hbox, False) - - hbox = gtk.HBox(False) - hbox.pack_start(self.to_entry, False) - hbox.pack_start(self.to_button, False) - vbox_to = gtk.VBox(False, 5) - vbox_to.pack_start(to_label, False) - vbox_to.pack_end(hbox, False) - - self.clear_button2 = gtk.Button(stock=gtk.STOCK_DELETE) + old_past_records_table = gtk.Table(2, 3, False); + old_past_records_table.set_row_spacings(6); + old_past_records_table.attach(from_label, 0, 1, 0, 1, xpadding=6) + old_past_records_table.attach(self.from_entry, 1, 2, 0, 1) + old_past_records_table.attach(self.from_button, 2, 3, 0, 1) + old_past_records_table.attach(to_label, 0, 1, 1, 2, xpadding=6) + old_past_records_table.attach(self.to_entry, 1, 2, 1, 2) + old_past_records_table.attach(self.to_button, 2, 3, 1, 2) + + self.clear_button2 = gtk.Button(label=_("Forget")) self.clear_button2.connect("clicked", self._on_clear_button2_clicked) self.clear_button2.set_sensitive(False) - align = gtk.Alignment(xalign=0.0) - align.add(self.clear_button2) + + hbuttonbox2 = gtk.HButtonBox() + hbuttonbox2.pack_start(self.clear_button2, False, False); + align = gtk.Alignment(yalign=0.5) + align.add(hbuttonbox2) self._error_label = gtk.Label() - hbox_delete = gtk.HBox(False, 4) + hbox_delete = gtk.HBox(False, 6) hbox_delete.pack_start(align, False) hbox_delete.pack_start(self._error_label, False, padding=10) - self.pack_start(vbox_from, False) - self.pack_start(vbox_to, False) - self.pack_start(hbox_delete, False, padding=10) + calendar_sizegroup = gtk.SizeGroup(gtk.SIZE_GROUP_VERTICAL); + for widget in [self.to_entry, self.to_button, + self.from_entry, self.from_button]: + calendar_sizegroup.add_widget(widget); + + old_past_records_hbox.pack_start(old_past_records_table, False) + old_past_records_hbox.pack_start(hbox_delete, False) #used for discriminate if the user is choosing the from or to date entry self._n_current_entry = -1 @@ -341,38 +351,36 @@ class ApplicationsTab(gtk.VBox): def __init__(self): - gtk.VBox.__init__(self, spacing=10) + gtk.VBox.__init__(self, spacing=6) self.app_chooser_dialog = ApplicationsChooserDialog() self.zg = ZG self._set_up_ui() self.buttons = {} def _set_up_ui(self): - self.set_border_width(10) + self.set_border_width(12) self.treeview = _ApplicationsTreeView() - button_box = gtk.VButtonBox() + button_box = gtk.HButtonBox() + button_box.set_spacing(6) button_box.set_layout(gtk.BUTTONBOX_START) self.add_button = gtk.Button(stock=gtk.STOCK_ADD) self.add_button.connect("clicked", self._on_add_application) button_box.pack_start(self.add_button) - self.delete_button = gtk.Button(stock=gtk.STOCK_DELETE) + self.delete_button = gtk.Button(stock=gtk.STOCK_REMOVE) self.delete_button.connect("clicked", self._on_delete_application) button_box.pack_start(self.delete_button) label = gtk.Label() label.set_markup("<b>%s</b>" % \ _("Do not log the activity of these applications:")) - align = gtk.Alignment(xalign=0, yalign=1) - align.add(label) - self.pack_start(align, False) + label.set_alignment(0, 0.5) - general_hbox = gtk.HBox(False, 5) - general_hbox.pack_start(self.treeview) - general_hbox.pack_start(button_box, False) - self.pack_start(general_hbox) + self.pack_start(label, False, False) + self.pack_start(self.treeview, True, True) + self.pack_start(button_box, False, False) self._applications = [t[4:] for t in self.zg.all_templates.iterkeys() \ if t.startswith("app-")] @@ -392,8 +400,8 @@ if app is not None and not self.duplicate: self.treeview.store.append(app) e = Event() - e.actor = "application://"+app[3] - self.zg.add_blacklist_template("app-"+app[3], e) + e.actor = "application://"+app[2] + self.zg.add_blacklist_template("app-"+app[2], e) self.app_chooser_dialog.hide() @@ -419,7 +427,16 @@ self.treeview.store.foreach(self._is_duplicate, app_name) if app_info is not None and not self.duplicate: pix = self.treeview._get_pixbuf_from_gio_icon(app_info.get_icon()) - self.treeview.store.append([app_name, app_info.get_description(), pix, app_info.get_id()]) + + name = app_name + description = app_info.get_description() + + if description == None: + description = _("No description provided") + + markup = "<b>%s</b>\n%s" % (glib.markup_escape_text(name), + glib.markup_escape_text(description)) + self.treeview.store.append([markup, pix, app_info.get_id()]) except RuntimeError: log.warning(_("Failed to load %s") % app) continue @@ -455,21 +472,23 @@ dirs_blacklist_dict = {} def __init__(self): - gtk.VBox.__init__(self, spacing=10) + gtk.VBox.__init__(self, spacing=12) self.zg = ZG self._set_up_ui() def _set_up_ui(self): - self.set_border_width(10) + self.set_border_width(12) + + vbox_file_types = gtk.VBox(False, 6) + self.pack_start(vbox_file_types, False, False) label = gtk.Label() label.set_markup("<b>%s</b>" % \ _("Prevent logging for the following file types:")) - align = gtk.Alignment(xalign=0, yalign=1) - align.add(label) - self.pack_start(align, False) + label.set_alignment(0, 0.5) + vbox_file_types.pack_start(label, False) - checkbox_table = gtk.Table(3,3) + checkbox_table = gtk.Table(3, 3) i = 0 self.button_list = [] for t in sorted(self.mime_dict.keys()): @@ -477,33 +496,28 @@ self.button_list.append(button) if "interpretation-%s" % t.lower() in self.zg.all_templates: button.set_active(True) - button.connect("toggled", self._on_ckeckbox_toggled, t) + button.connect("toggled", self._on_checkbox_toggled, t) if i == 3: checkbox_table.attach(button, 0, 1, 1, 2) elif i == 7: checkbox_table.attach(button, 1, 2, 2, 3) else: checkbox_table.attach(button, i%3, (i%3) + 1 , i%4, (i%4) + 1) i += 1 - self.pack_start(checkbox_table, False) + vbox_file_types.pack_start(checkbox_table, False) + + vbox_folders = gtk.VBox(False, 6) + self.pack_start(vbox_folders, True, True) label = gtk.Label() label.set_markup("<b>%s</b>" % \ _("Prevent logging files in the following folders:")) - align = gtk.Alignment(xalign=0, yalign=1) - align.add(label) - self.pack_start(align, False) - - file_chooser_hbox = gtk.HBox(False, 5) - file_chooser_dialog = gtk.FileChooserDialog( - _("Select a directory to blacklist"), - action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, - buttons = (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL)) - self.file_chooser = gtk.FileChooserButton(file_chooser_dialog) - file_chooser_hbox.pack_start(self.file_chooser, True) - add_button = gtk.Button(stock=gtk.STOCK_ADD) - add_button.connect("clicked", self._on_add_blacklist_dir) - #file_chooser_hbox.pack_end(add_button, False) - #self.pack_start(file_chooser_hbox, False) + label.set_alignment(0, 0.5) + vbox_folders.pack_start(label, False) + + file_chooser_vbox = gtk.VBox(False, 6) + vbox_folders.pack_start(file_chooser_vbox, True, True) + + add_button = gtk.Button(label=_("Add...")) + add_button.connect("clicked", self._on_add_button_clicked) #Store fields: #1) Directory's Path @@ -526,37 +540,25 @@ scroll.add(self.treeview) scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scroll.set_shadow_type(gtk.SHADOW_IN) - scroll.set_border_width(1) - - hbox_other = gtk.HBox(False, 5) - button_box = gtk.VButtonBox() + + file_chooser_vbox.pack_start(scroll, True, True) + + button_box = gtk.HButtonBox() + button_box.set_spacing(6) button_box.set_layout(gtk.BUTTONBOX_START) - remove_button = gtk.Button(stock=gtk.STOCK_DELETE) + remove_button = gtk.Button(stock=gtk.STOCK_REMOVE) remove_button.connect("clicked", self._on_remove_blacklist_dir) - #hbox_other.pack_start(scroll, True) - #button_box.pack_start(remove_button) - #hbox_other.pack_start(button_box, False) - - #self.pack_start(hbox_other, True) - - hbox = gtk.HBox(False, 6) - self.pack_start(hbox) - - vbox = gtk.VBox() - hbox.pack_start(vbox) - vbox.pack_start(file_chooser_hbox, False, False) - vbox.pack_start(scroll, True, True) - - vbox = gtk.VBox() - hbox.pack_start(vbox, False, False) - vbox.pack_start(add_button, False, False) - vbox.pack_start(remove_button, False, False) + + button_box.pack_start(add_button, False, False) + button_box.pack_start(remove_button, False, False) + + file_chooser_vbox.pack_start(button_box, False, False) for t in self.zg.all_templates.iterkeys(): if t.startswith("dir-"): self.store.append([t[4:]]) - def _on_ckeckbox_toggled(self, checkbox, label): + def _on_checkbox_toggled(self, checkbox, label): is_active = checkbox.get_active() self.blacklist_dict[self.mime_dict[label]] = is_active if is_active: @@ -568,14 +570,27 @@ else: self.zg.remove_blacklist_template("interpretation-"+label.lower()) - def _on_add_blacklist_dir(self, button): + def _on_add_button_clicked(self, button): + file_chooser = gtk.FileChooserDialog( + _("Select a directory to blacklist"), + action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, + buttons = (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, + gtk.RESPONSE_CANCEL)) + + result = file_chooser.run() + file_chooser.hide() + + if result == gtk.RESPONSE_OK: + self._on_add_blacklist_dir(file_chooser) + + def _on_add_blacklist_dir(self, file_chooser): def is_duplicate(model, path, iter, user_data): if model.get_value(iter, 0) == user_data: self.duplicate = True return True self.duplicate = False - filename = self.file_chooser.get_filename() + filename = file_chooser.get_filename() self.store.foreach(is_duplicate, filename) if not self.duplicate: self.dirs_blacklist_dict[filename] = True @@ -631,11 +646,10 @@ gtk.VBox.__init__(self) self._icon_theme = gtk.icon_theme_get_default() #Store fields: - #1) Name - #2) Description - #3) Pixbuf - #4) Desktop file - self.store = gtk.ListStore(str, str, gtk.gdk.Pixbuf, str) + #1) Name and Description + #2) Pixbuf + #3) Desktop file + self.store = gtk.ListStore(str, gtk.gdk.Pixbuf, str) self.treeview = gtk.TreeView(self.store) self.treeview.set_headers_visible(False) self.treeview.set_rules_hint(True) @@ -645,20 +659,13 @@ column_pix_name = gtk.TreeViewColumn(_('Name')) self.treeview.append_column(column_pix_name) pix_rend = gtk.CellRendererPixbuf() - column_pix_name.pack_start(pix_rend) - column_pix_name.add_attribute(pix_rend, "pixbuf", 2) + column_pix_name.pack_start(pix_rend, False) + column_pix_name.add_attribute(pix_rend, "pixbuf", 1) name_rend = gtk.CellRendererText() + name_rend.set_property("ellipsize", pango.ELLIPSIZE_END) column_pix_name.pack_start(name_rend) - column_pix_name.add_attribute(name_rend, "text", 0) + column_pix_name.add_attribute(name_rend, "markup", 0) column_pix_name.set_resizable(True) - column_pix_name.set_max_width(350) - - column_desc = gtk.TreeViewColumn(_('Description')) - self.treeview.append_column(column_desc) - desc_rend = gtk.CellRendererText() - desc_rend.set_property("ellipsize", pango.ELLIPSIZE_END) - column_desc.pack_start(desc_rend) - column_desc.add_attribute(desc_rend, "text", 1) scroll = gtk.ScrolledWindow() scroll.add(self.treeview) @@ -686,20 +693,28 @@ pix = self._get_pixbuf_from_gio_icon(icon) else: pix = None - self.store.append([app.get_name(), app.get_description(), pix, app.get_id()]) + + name = app.get_name() + description = app.get_description() + if description == None: + description = _("No description provided") + + markup = "<b>%s</b>\n%s" % (glib.markup_escape_text(name), + glib.markup_escape_text(description)) + self.store.append([markup, pix, app.get_id()]) def get_selected_app(self): selection = self.treeview.get_selection() model,_iter = selection.get_selected() if _iter is not None: - return model.get(_iter, 0, 1, 2, 3) + return model.get(_iter, 0, 1, 2) return None def remove_selected_app(self): selection = self.treeview.get_selection() model,_iter = selection.get_selected() if _iter is not None: - app = model[_iter][3] + app = model[_iter][2] return model.remove(_iter), app class ApplicationsChooserDialog(gtk.Dialog): @@ -710,6 +725,7 @@ self.set_destroy_with_parent(True) self.set_size_request(600, 400) self.set_skip_taskbar_hint(True) + self.set_border_width(12) self._set_up_ui() def _set_up_ui(self): @@ -730,18 +746,15 @@ self.message_image = gtk.Image() self.set_relief(gtk.RELIEF_NONE) - self.markup = '<span size="smaller" font-weight="bold">%s</span>' - self.message_hbox = gtk.HBox() - #self.message_hbox.pack_start(gtk.Label()) - self.message_hbox.pack_end(self.message_image, False, False, 3) - self.message_hbox.pack_end(self.message_label, False, False, 3) - #self.message_hbox.pack_start(gtk.Label()) + self.message_hbox = gtk.HBox(False, 6) + self.message_hbox.pack_start(self.message_image, False, False) + self.message_hbox.pack_start(self.message_label, False, False) self.add(self.message_hbox) def set_text(self, text): if text is not None: - self.message_label.set_markup(self.markup % text) + self.message_label.set_markup(text) def set_image(self, pix): if pix is not None: @@ -749,10 +762,8 @@ self.message_hbox.remove(i) self.message_image = pix - #self.message_hbox.pack_start(gtk.Label()) - self.message_hbox.pack_end(self.message_image, False, False, 3) - self.message_hbox.pack_end(self.message_label, False, False, 3) - #self.message_hbox.pack_start(gtk.Label()) + self.message_hbox.pack_start(self.message_image, False, False) + self.message_hbox.pack_start(self.message_label, False, False) self.show_all() def set_in_incognito(self, in_incognito):
_______________________________________________ Mailing list: https://launchpad.net/~zeitgeist Post to : zeitgeist@lists.launchpad.net Unsubscribe : https://launchpad.net/~zeitgeist More help : https://help.launchpad.net/ListHelp