zeitgeist team mailing list archive
-
zeitgeist team
-
Mailing list archive
-
Message #03496
[Merge] lp:~and471/activity-log-manager/ui-tweaks into lp:activity-log-manager
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):
Follow ups