Forwarding to appropriate list :-)

---------- Forwarded message ----------
From: Steve Borho <st...@borho.org>
Date: Tue, Sep 8, 2009 at 11:28 PM
Subject: [PATCH] Menu bar example
To: mercurial-de...@selenic.com


# HG changeset patch
# User Steve Borho <st...@borho.org>
# Date 1252469635 18000
# Node ID 258118fdf801dd1be81ed98c4e6b6753890472be
# Parent  1d26e04101671caef8e7df927dafde53aa73d6c5
Menu bar example

diff -r 1d26e0410167 -r 258118fdf801 hggtk/commit.py
--- a/hggtk/commit.py   Tue Sep 08 20:32:31 2009 -0500
+++ b/hggtk/commit.py   Tue Sep 08 23:13:55 2009 -0500
@@ -19,7 +19,7 @@
 from mercurial import ui, hg, util, patch, cmdutil

 from thgutil.i18n import _
-from thgutil import shlib, hglib
+from thgutil import shlib, hglib, paths

 from hggtk.status import GStatus, FM_STATUS, FM_CHECKED, FM_PATH_UTF8
 from hggtk.status import DM_REJECTED, DM_CHUNK_ID
@@ -159,6 +159,56 @@
        self.opts['check'] = False


+    def get_menu_bar(self):
+        menubar = gtk.MenuBar()
+        menus = [
+          (_('Launch'), False, False,
+           [(_('Changelog'), self.launch, ['log'], 'menulog.ico'),
+            (_('Datamine'), self.launch, ['datamine'], 'menurepobrowse.ico'),
+            (_('Synchronize'), self.launch, ['synch'], 'menusynch.ico'),
+            (_('Settings'), self.launch, ['repoconfig'],
'settings_repo.ico')]),
+
+          (_('View'), True, False,
+           [(_('Parents'), self.toggleview, ['parents'], self.showparents),
+            (_('Advanced'), self.toggleview, ['advanced'],
self.showadvanced)]),
+
+          (_('Help'), False, True,
+           [(_('Contents'), self.helpcontents, ['commit'], gtk.STOCK_INFO),
+            (_('About'), self.launch, ['about'], gtk.STOCK_ABOUT)])
+          ]
+        for title, aschecks, rightjustified, items in menus:
+            menu = gtk.Menu()
+            for name, func, args, icon_or_var in items:
+                if aschecks:
+                    item = gtk.CheckMenuItem(name)
+                    item.set_active(icon_or_var)
+                    item.set_draw_as_radio(True)
+                elif icon_or_var:
+                    item = gtk.ImageMenuItem(name)
+                    if icon_or_var.startswith('gtk'):
+                        img = gtk.image_new_from_stock(icon_or_var,
+                                                       gtk.ICON_SIZE_MENU)
+                    else:
+                        img = gtk.Image()
+                        ico = paths.get_tortoise_icon(icon_or_var)
+                        if ico: img.set_from_file(ico)
+                    item.set_image(img)
+                else:
+                    item = gtk.MenuItem(name)
+                item.connect('activate', func, *args)
+                menu.append(item)
+            item = gtk.MenuItem(title)
+            item.set_submenu(menu)
+            item.set_right_justified(rightjustified)
+            menubar.append(item)
+        return menubar
+
+    def helpcontents(self, item, app):
+        print 'help contents for', app
+
+    def launch(self, item, app):
+        print 'launch', app
+
    def save_settings(self):
        settings = GStatus.save_settings(self)
        settings['commit-vpane'] = self.vpaned.get_position()
@@ -191,23 +241,6 @@
            self.commit_clicked, tip=_('commit'))
        tbbuttons.insert(0, self.undo_button)
        tbbuttons.insert(0, self.commit_button)
-
-        # append to end of left align area
-        self.changelog_button = self.make_toolbutton(gtk.STOCK_INDEX,
_('Changelog'),
-            self.changelog_clicked, tip=_('view changelog'))
-        tbbuttons.append(self.changelog_button)
-
-        # append to align right
-        sep = gtk.SeparatorToolItem()
-        sep.set_expand(True)
-        sep.set_draw(False)
-        tbbuttons.append(sep)
-
-        self.vmenu = gtk.MenuToolButton('')
-        # hide the Button widget; we want to see only Menu button
-        gobject.idle_add(lambda: self.vmenu.child.get_children()[0].hide())
-        tbbuttons.append(self.vmenu)
-
        return tbbuttons

    def should_live(self, widget=None, event=None):
@@ -329,8 +362,6 @@
        self.parent2_label = plabel()
        vbox2.pack_start(self.parents_frame, False, False)

-        self.vmenu.set_menu(self.view_menu())
-
        self.vpaned = gtk.VPaned()
        self.vpaned.pack1(vbox, shrink=False)
        self.vpaned.pack2(vbox2, shrink=False)
@@ -340,25 +371,7 @@
    ### End of overridable methods ###


-    def view_menu(self):
-        menu = gtk.Menu()
-
-        button = gtk.CheckMenuItem(_('Show Advanced'))
-        button.connect('toggled', self.toggle_view, 'advanced')
-        button.set_active(self.showadvanced)
-        button.set_draw_as_radio(True)
-        menu.append(button)
-
-        button = gtk.CheckMenuItem(_('Show Parents'))
-        button.connect('toggled', self.toggle_view, 'parents')
-        button.set_active(self.showparents)
-        button.set_draw_as_radio(True)
-        menu.append(button)
-
-        menu.show_all()
-        return menu
-
-    def toggle_view(self, button, type):
+    def toggleview(self, button, type):
        show = button.get_active()
        statename = 'show' + type
        if getattr(self, statename) != show:
diff -r 1d26e0410167 -r 258118fdf801 hggtk/gdialog.py
--- a/hggtk/gdialog.py  Tue Sep 08 20:32:31 2009 -0500
+++ b/hggtk/gdialog.py  Tue Sep 08 23:13:55 2009 -0500
@@ -171,6 +171,10 @@
        return []


+    def get_menu_bar(self):
+        return None
+
+
    def get_body(self):
        return None

@@ -359,6 +363,10 @@
        vbox = gtk.VBox(False, 0)
        self.add(vbox)

+        self.menubar = self.get_menu_bar()
+        if self.menubar:
+            vbox.pack_start(self.menubar, False, False, 0)
+
        self.tooltips = gtk.Tooltips()
        toolbar = gtk.Toolbar()
        tbuttons =  self.get_tbbuttons()
diff -r 1d26e0410167 -r 258118fdf801 hggtk/status.py
--- a/hggtk/status.py   Tue Sep 08 20:32:31 2009 -0500
+++ b/hggtk/status.py   Tue Sep 08 23:13:55 2009 -0500
@@ -177,7 +177,6 @@
                    gtk.SeparatorToolItem()]
        return tbuttons

-
    def save_settings(self):
        settings = gdialog.GDialog.save_settings(self)
        settings['gstatus-hpane'] = self.diffpane.get_position()

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Tortoisehg-develop mailing list
Tortoisehg-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to