diff --git a/pygtktalog/gtk2/gui.py b/pygtktalog/gtk2/gui.py
index 31da9b7..0f14f25 100644
--- a/pygtktalog/gtk2/gui.py
+++ b/pygtktalog/gtk2/gui.py
@@ -2,113 +2,246 @@
import gtk
+from pygtktalog import logger
+
+UI = """
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+"""
+LOG = logger.get_logger(__name__)
+LOG.setLevel(2)
+
+
+class ConnectedWidgets(object):
+ """grouped widgets"""
+ def __init__(self, toolbar, menu):
+ super(ConnectedWidgets, self).__init__()
+ self.toolbar = toolbar
+ self.menu = menu
+
+ def hide(self):
+ self.toolbar.hide()
+ self.menu.hide()
+
+ def show(self):
+ self.toolbar.show()
+ self.menu.show()
+
+ def set_sensitive(self, state):
+ self.toolbar.set_sensitive(state)
+ self.menu.set_sensitive(state)
+
class MainWindow(object):
- def __init__(self):
+
+ def __init__(self, debug=False):
+ """Initialize window"""
+ LOG.debug("initialize")
self.window = gtk.Window()
+ self.window.set_default_size(650, -1)
self.window.set_title("pygtktalog")
- self.window.connect("delete-event", gtk.main_quit)
+ self.window.connect("delete-event", self.on_quit)
self.recent = None
+ self.toolbar = None
+ self.statusbar = None
+ self.cancel = None
+ self.debug = None
- box = gtk.VBox(False, 0)
+ vbox = gtk.VBox(False, 0)
- vpaned = gtk.VPaned()
+ self._setup_menu_toolbar(vbox)
- menubar = self.get_main_menu()
- box.pack_start(menubar, False, True, 0)
+ # TODO:
+ # 1. toolbar with selected tags
+ # 2. main view (splitter)
+ # 3. treeview with tag cloud (left split)
+ # 4. splitter (right split)
+ # 5. file list (upper split)
+ # 6. details w images and thumb (lower split)
+ # 7. status bar (if needed…)
- box.pack_start(vpaned, True, True, 0)
+ hbox = gtk.HBox(False, 0)
+ vbox.add(hbox)
- self.window.add(box)
- self.window.add(vpaned)
+ self.window.add(vbox)
self.window.show_all()
-
- def menu(self):
- return(gtk.MenuBar())
+ self.debug.hide()
def fake_recent(self):
recent_menu = gtk.Menu()
for i in "one two techno foo bar baz".split():
item = gtk.MenuItem(i)
- item.connect_object("activate", self.on_recent_activate,
+ item.connect_object("activate", self.on_recent,
"/some/fake/path/" + i)
recent_menu.append(item)
item.show()
self.recent.set_submenu(recent_menu)
- def get_main_menu(self):
- menu_items = (("/_File", None, None, 0, ""),
- ("/File/_New", "N", self.on_menu_callback,
- 0, '', gtk.STOCK_NEW),
- ("/File/_Open", "O", self.on_menu_callback,
- 0, '', gtk.STOCK_OPEN),
- ("/File/_Save", "S", self.on_menu_callback,
- 0, '', gtk.STOCK_SAVE),
- ("/File/Save _As", None, self.on_menu_callback, 0,
- '', gtk.STOCK_SAVE_AS),
- ("/File/sep1", None, None, 0, ""),
- ("/File/Import", None, None, 0, None),
- ("/File/Export", None, None, 0, None),
- ("/File/sep2", None, None, 0, ""),
- ("/File/Recent files", None, None, 0, None),
- ("/File/sep3", None, None, 0, ""),
- ("/File/_Quit", "Q", gtk.main_quit, 0,
- '', gtk.STOCK_QUIT),
- ("/_Edit", None, None, 0, ""),
- ("/Edit/_Delete", "Delete", None, 0, '',
- gtk.STOCK_DELETE),
- ("/Edit/sep4", None, None, 0, ""),
- ("/Edit/_Find", "F", None, 0,
- '', gtk.STOCK_FIND),
- ("/Edit/sep5", None, None, 0, ""),
- ("/Edit/_Preferences", None, None, 0,
- '', gtk.STOCK_PREFERENCES),
- ("/_Catalog", None, None, 0, ""),
- ("/Catalog/Add CD\/DVD", "E", None, 0, None),
- ("/Catalog/Add Directory", "D", None, 0, None),
- ("/Catalog/sep6", None, None, 0, ""),
- ("/Catalog/Delete all images", None, None, 0, None),
- ("/Catalog/Delete all thumbnals", None, None, 0, None),
- ("/Catalog/Save all images…", None, None, 0, None),
- ("/Catalog/sep7", None, None, 0, ""),
- ("/Catalog/Catalog _statistics", None, None, 0, None),
- ("/Catalog/sep8", None, None, 0, ""),
- ("/Catalog/Cancel", None, None, 0, '',
- gtk.STOCK_CANCEL),
- ("/_View", None, None, 0, ""),
- ("/View/Toolbar", None, None, 0, ''),
- ("/View/Status bar", None, None, 0, ''),
- ("/_Help", None, None, 0, ""),
- ("/_Help/About", None, self.on_about_activate, 0,
- '', gtk.STOCK_ABOUT))
+ def _setup_menu_toolbar(self, vbox):
+ """Create menu/toolbar using uimanager."""
+ actions = [('File', None, '_File'),
+ ('New', gtk.STOCK_NEW, '_New', None, 'Create new catalog', self.on_new),
+ ('Open', gtk.STOCK_OPEN, '_Open', None, 'Open catalog file', self.on_open),
+ ('Save', gtk.STOCK_SAVE, '_Save', None, 'Save catalog file', self.on_save),
+ ('Save As', gtk.STOCK_SAVE_AS, '_Save As', None, None, self.on_save),
+ ('Import', None, '_Import', None, None, self.on_import),
+ ('Export', None, '_Export', None, None, self.on_export),
+ ('Recent', None, '_Recent files'),
+ ('Quit', gtk.STOCK_QUIT, '_Quit', None, 'Quit the Program', self.on_quit),
+ ('Edit', None, '_Edit'),
+ ('Delete', gtk.STOCK_DELETE, '_Delete', None, None, self.on_delete),
+ ('Find', gtk.STOCK_FIND, '_Find', None, 'Find file', self.on_find),
+ ('Preferences', gtk.STOCK_PREFERENCES, '_Preferences'),
+ ('Catalog', None, '_Catalog'),
+ ('Add_CD', gtk.STOCK_CDROM, '_Add CD', None, 'Add CD/DVD/BR to catalog'),
+ ('Add_Dir', gtk.STOCK_DIRECTORY, '_Add Dir', None, 'Add directory to catalog'),
+ ('Delete_all_images', None, '_Delete all images'),
+ ('Delete_all_thumbnails', None, '_Delete all thumbnails'),
+ ('Save_all_images', None, '_Save all images…'),
+ ('Catalog_statistics', None, '_Catalog statistics'),
+ ('Cancel', gtk.STOCK_CANCEL, '_Cancel'),
+ ('View', None, '_View'),
+ ('Help', None, '_Help'),
+ ('About', gtk.STOCK_ABOUT, '_About'),
+ ('Debug', gtk.STOCK_DIALOG_INFO, 'Debug')]
- accel_group = gtk.AccelGroup()
- item_factory = gtk.ItemFactory(gtk.MenuBar, "", accel_group)
- item_factory.create_items(menu_items)
+ toggles = [('Toolbar', None, '_Toolbar'),
+ ('Statusbar', None, '_Statusbar')]
- # get recent menu item, and build recent submenu
- self.recent = item_factory.get_item('/File/Recent files')
+ mgr = gtk.UIManager()
+ accelgrp = mgr.get_accel_group()
+ self.window.add_accel_group(accelgrp)
+
+ agrp = gtk.ActionGroup("Actions")
+ agrp.add_actions(actions)
+ agrp.add_toggle_actions(toggles)
+
+ mgr.insert_action_group(agrp, 0)
+ mgr.add_ui_from_string(UI)
+
+ help_widget = mgr.get_widget("/MenuBar/Help")
+ help_widget.set_right_justified(True)
+
+ self.recent = mgr.get_widget("/MenuBar/File/Recent")
self.fake_recent()
- self.menu_cancel = item_factory.get_item('/Catalog/Cancel')
- self.menu_cancel.set_sensitive(False)
+ menubar = mgr.get_widget("/MenuBar")
+ vbox.pack_start(menubar)
+ self.toolbar = mgr.get_widget("/ToolBar")
+ vbox.pack_start(self.toolbar)
+ menu_cancel = mgr.get_widget('/MenuBar/Catalog/Cancel')
+ toolbar_cancel = mgr.get_widget('/ToolBar/Cancel')
+ self.cancel = ConnectedWidgets(toolbar_cancel, menu_cancel)
+ self.cancel.set_sensitive(False)
- self.window.add_accel_group(accel_group)
- # Finally, return the actual menu bar created by the item factory.
- return item_factory.get_widget("")
+ self.debug = mgr.get_widget('/ToolBar/Debug')
- def on_menu_callback(self, *args, **kwargs):
+ self.toolbar = mgr.get_widget('/MenuBar/View/Toolbar')
+ self.statusbar = mgr.get_widget('/MenuBar/View/Statusbar')
+
+ def on_new(self, *args, **kwargs):
+ LOG.debug("On new")
return
- def on_about_activate(self, event, menuitem):
- print "about", event, menuitem
+ def on_open(self, *args, **kwargs):
+ LOG.debug("On open")
return
- def on_recent_activate(self, *args, **kwargs):
+ def on_save(self, *args, **kwargs):
+ LOG.debug("On save")
+ return
+
+ def on_save_as(self, *args, **kwargs):
+ LOG.debug("On save as")
+ return
+
+ def on_import(self, *args, **kwargs):
+ LOG.debug("On import")
+ return
+
+ def on_export(self, *args, **kwargs):
+ LOG.debug("On export")
+ return
+
+ def on_recent(self, *args, **kwargs):
+ LOG.debug("On recent")
print args, kwargs
+ def on_quit(self, *args, **kwargs):
+ LOG.debug("on quit")
+ gtk.main_quit()
+
+ def on_delete(self, *args, **kwargs):
+ LOG.debug("On delete")
+ return
+
+ def on_find(self, *args, **kwargs):
+ LOG.debug("On find")
+ return
+
+ def on_about(self, event, menuitem):
+ LOG.debug("about", event, menuitem)
+ return
+
def run():
gui = MainWindow()