meld r1182 - in trunk: . glade2
- From: kaiw svn gnome org
- To: svn-commits-list gnome org
- Subject: meld r1182 - in trunk: . glade2
- Date: Wed, 25 Feb 2009 17:24:42 +0000 (UTC)
Author: kaiw
Date: Wed Feb 25 17:24:41 2009
New Revision: 1182
URL: http://svn.gnome.org/viewvc/meld?rev=1182&view=rev
Log:
Consolidate user-defined filters into a dropdown menu on the toolbar
Since the previously split toolbars were combined, it became very easy to have
user-defined filters take up a lot of toolbar space. This fixes that problem
by having a single "Filters" dropdown menu on the toolbar containing all
user-defined filters.
Menu positioning code taken from Epiphany.
Modified:
trunk/dirdiff.py
trunk/glade2/dirdiff-ui.xml
trunk/misc.py
Modified: trunk/dirdiff.py
==============================================================================
--- trunk/dirdiff.py (original)
+++ trunk/dirdiff.py Wed Feb 25 17:24:41 2009
@@ -200,6 +200,8 @@
("ShowSame", gtk.STOCK_APPLY, _("Same"), None, _("Show identical"), self.on_filter_state_normal_toggled, True),
("ShowNew", gtk.STOCK_ADD, _("New"), None, _("Show new"), self.on_filter_state_new_toggled, True),
("ShowModified", gtk.STOCK_REMOVE, _("Modified"), None, _("Show modified"), self.on_filter_state_modified_toggled, True),
+
+ ("CustomFilterMenu", None, _("Filters"), None, _("Set active filters"), self.on_custom_filter_menu_toggled, False),
)
self.ui_file = paths.share_dir("glade2/dirdiff-ui.xml")
self.actiongroup = gtk.ActionGroup('DirdiffToolbarActions')
@@ -209,7 +211,7 @@
self.create_name_filters()
for button in ("DirCompare", "DirCopyLeft", "DirCopyRight",
"DirDelete", "Hide", "IgnoreCase", "ShowSame",
- "ShowNew", "ShowModified"):
+ "ShowNew", "ShowModified", "CustomFilterMenu"):
self.actiongroup.get_action(button).props.is_important = True
self.map_widgets_into_lists( ["treeview", "fileentry", "diffmap", "scrolledwindow", "linkmap"] )
self.set_num_panes(num_panes)
@@ -254,6 +256,15 @@
misc.run_dialog(
text=_("Error converting pattern '%s' to regular expression") % r.value )
+ def _custom_popup_deactivated(self, popup):
+ self.filter_menu_button.set_active(False)
+
+ def on_custom_filter_menu_toggled(self, item):
+ if item.get_active():
+ self.custom_popup.connect("deactivate", self._custom_popup_deactivated)
+ self.custom_popup.popup(None, None, misc.position_menu_under_widget,
+ 1, gtk.get_current_event_time(), self.filter_menu_button)
+
def on_container_switch_in_event(self, ui):
melddoc.MeldDoc.on_container_switch_in_event(self, ui)
ui.insert_action_group(self.filter_actiongroup)
@@ -261,6 +272,11 @@
for x in self.filter_ui:
ui.add_ui(self.custom_merge_id, *x)
self.popup_deactivate_id = self.popup_menu.connect("deactivate", self.on_popup_deactivate_event)
+ self.custom_popup = ui.get_widget("/CustomPopup")
+ self.filter_menu_button = ui.get_widget("/Toolbar/FilterActions/CustomFilterMenu")
+ label = misc.make_tool_button_widget(self.filter_menu_button.props.label)
+ self.filter_menu_button.set_label_widget(label)
+
if self.treeview_focussed:
self.scheduler.add_task(self.treeview_focussed.grab_focus)
self.scheduler.add_task(self.on_treeview_cursor_changed)
@@ -295,8 +311,8 @@
for i,f in enumerate(self.name_filters_available):
name = "Hide%d" % i
callback = lambda b, i=i: self._update_name_filter(b, i)
- actions.append((name, gtk.STOCK_FIND, f.label, "", _("Hide %s") % f.label, callback, f.active))
- self.filter_ui.append(["/Toolbar/FilterActions/FilterButtons" , name, name, gtk.UI_MANAGER_TOOLITEM, False])
+ actions.append((name, None, f.label, None, _("Hide %s") % f.label, callback, f.active))
+ self.filter_ui.append(["/CustomPopup" , name, name, gtk.UI_MANAGER_MENUITEM, False])
self.filter_ui.append(["/Menubar/ViewMenu/FileFilters" , name, name, gtk.UI_MANAGER_MENUITEM, False])
self.filter_actiongroup = gtk.ActionGroup("DirdiffFilterActions")
Modified: trunk/glade2/dirdiff-ui.xml
==============================================================================
--- trunk/glade2/dirdiff-ui.xml (original)
+++ trunk/glade2/dirdiff-ui.xml Wed Feb 25 17:24:41 2009
@@ -29,6 +29,7 @@
<toolitem action="ShowNew" />
<toolitem action="ShowModified" />
<separator/>
+ <toolitem action="CustomFilterMenu"/>
<placeholder name="FilterButtons" />
</placeholder>
</toolbar>
@@ -43,5 +44,8 @@
<separator/>
<menuitem action="DirDelete" />
</popup>
+
+ <popup name="CustomPopup">
+ </popup>
</ui>
Modified: trunk/misc.py
==============================================================================
--- trunk/misc.py (original)
+++ trunk/misc.py Wed Feb 25 17:24:41 2009
@@ -73,6 +73,50 @@
except ImportError:
pass
+# Taken from epiphany
+def position_menu_under_widget(menu, widget):
+ container = widget.get_ancestor(gtk.Container)
+
+ widget_width, widget_height = widget.size_request()
+ menu_width, menu_height = menu.size_request()
+
+ screen = menu.get_screen()
+ monitor_num = screen.get_monitor_at_window(widget.window)
+ if monitor_num < 0:
+ monitor_num = 0
+ monitor = screen.get_monitor_geometry(monitor_num)
+
+ x, y = widget.window.get_origin()
+ if widget.flags() & gtk.NO_WINDOW:
+ x += widget.allocation.x
+ y += widget.allocation.y
+
+ if container.get_direction() == gtk.TEXT_DIR_LTR:
+ x += widget.allocation.width - widget_width
+ else:
+ x += widget_width - menu_width
+
+ if (y + widget.allocation.height + menu_height) <= monitor.y + monitor.height:
+ y += widget.allocation.height
+ elif (y - menu_height) >= monitor.y:
+ y -= menu_height
+ elif monitor.y + monitor.height - (y + widget.allocation.height) > y:
+ y += widget.allocation.height
+ else:
+ y -= menu_height
+
+ return (x, y, False)
+
+def make_tool_button_widget(label):
+ """Make a GtkToolButton label-widget suggestive of a menu dropdown"""
+ arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE)
+ label = gtk.Label(label)
+ hbox = gtk.HBox(spacing=3)
+ hbox.pack_end(arrow)
+ hbox.pack_end(label)
+ hbox.show_all()
+ return hbox
+
class struct(object):
"""Similar to a dictionary except that members may be accessed as s.member.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]