1
0
mirror of https://github.com/gryf/pygtktalog.git synced 2025-12-17 11:30:19 +01:00

WIP: Continue with gtk interface mockup

This commit is contained in:
2016-08-31 21:55:35 +02:00
parent b22fbd5864
commit 5d9c90e4ad

View File

@@ -2,113 +2,246 @@
import gtk import gtk
from pygtktalog import logger
UI = """
<ui>
<menubar name="MenuBar">
<menu action="File">
<menuitem action="New"/>
<menuitem action="Open"/>
<menuitem action="Save"/>
<menuitem action="Save As"/>
<separator/>
<menuitem action="Import"/>
<menuitem action="Export"/>
<separator/>
<menuitem action="Recent"/>
<separator/>
<menuitem action="Quit"/>
</menu>
<menu action="Edit">
<menuitem action="Delete"/>
<separator/>
<menuitem action="Find"/>
<separator/>
<menuitem action="Preferences"/>
</menu>
<menu action="Catalog">
<menuitem action="Add_CD"/>
<menuitem action="Add_Dir"/>
<separator/>
<menuitem action="Delete_all_images"/>
<menuitem action="Delete_all_thumbnails"/>
<menuitem action="Save_all_images"/>
<separator/>
<menuitem action="Catalog_statistics"/>
<separator/>
<menuitem action="Cancel"/>
</menu>
<menu action="View">
<menuitem action="Toolbar"/>
<menuitem action="Statusbar"/>
</menu>
<menu action="Help">
<menuitem action="About"/>
</menu>
</menubar>
<toolbar name="ToolBar">
<toolitem action="New"/>
<toolitem action="Open"/>
<toolitem action="Save"/>
<separator/>
<toolitem action="Add_CD"/>
<toolitem action="Add_Dir"/>
<toolitem action="Find"/>
<separator/>
<toolitem action="Cancel"/>
<toolitem action="Quit"/>
<toolitem action="Debug"/>
</toolbar>
</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): class MainWindow(object):
def __init__(self):
def __init__(self, debug=False):
"""Initialize window"""
LOG.debug("initialize")
self.window = gtk.Window() self.window = gtk.Window()
self.window.set_default_size(650, -1)
self.window.set_title("pygtktalog") 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.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() # TODO:
box.pack_start(menubar, False, True, 0) # 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(vbox)
self.window.add(vpaned)
self.window.show_all() self.window.show_all()
self.debug.hide()
def menu(self):
return(gtk.MenuBar())
def fake_recent(self): def fake_recent(self):
recent_menu = gtk.Menu() recent_menu = gtk.Menu()
for i in "one two techno foo bar baz".split(): for i in "one two techno foo bar baz".split():
item = gtk.MenuItem(i) item = gtk.MenuItem(i)
item.connect_object("activate", self.on_recent_activate, item.connect_object("activate", self.on_recent,
"/some/fake/path/" + i) "/some/fake/path/" + i)
recent_menu.append(item) recent_menu.append(item)
item.show() item.show()
self.recent.set_submenu(recent_menu) self.recent.set_submenu(recent_menu)
def get_main_menu(self): def _setup_menu_toolbar(self, vbox):
menu_items = (("/_File", None, None, 0, "<Branch>"), """Create menu/toolbar using uimanager."""
("/File/_New", "<control>N", self.on_menu_callback, actions = [('File', None, '_File'),
0, '<StockItem>', gtk.STOCK_NEW), ('New', gtk.STOCK_NEW, '_New', None, 'Create new catalog', self.on_new),
("/File/_Open", "<control>O", self.on_menu_callback, ('Open', gtk.STOCK_OPEN, '_Open', None, 'Open catalog file', self.on_open),
0, '<StockItem>', gtk.STOCK_OPEN), ('Save', gtk.STOCK_SAVE, '_Save', None, 'Save catalog file', self.on_save),
("/File/_Save", "<control>S", self.on_menu_callback, ('Save As', gtk.STOCK_SAVE_AS, '_Save As', None, None, self.on_save),
0, '<StockItem>', gtk.STOCK_SAVE), ('Import', None, '_Import', None, None, self.on_import),
("/File/Save _As", None, self.on_menu_callback, 0, ('Export', None, '_Export', None, None, self.on_export),
'<StockItem>', gtk.STOCK_SAVE_AS), ('Recent', None, '_Recent files'),
("/File/sep1", None, None, 0, "<Separator>"), ('Quit', gtk.STOCK_QUIT, '_Quit', None, 'Quit the Program', self.on_quit),
("/File/Import", None, None, 0, None), ('Edit', None, '_Edit'),
("/File/Export", None, None, 0, None), ('Delete', gtk.STOCK_DELETE, '_Delete', None, None, self.on_delete),
("/File/sep2", None, None, 0, "<Separator>"), ('Find', gtk.STOCK_FIND, '_Find', None, 'Find file', self.on_find),
("/File/Recent files", None, None, 0, None), ('Preferences', gtk.STOCK_PREFERENCES, '_Preferences'),
("/File/sep3", None, None, 0, "<Separator>"), ('Catalog', None, '_Catalog'),
("/File/_Quit", "<control>Q", gtk.main_quit, 0, ('Add_CD', gtk.STOCK_CDROM, '_Add CD', None, 'Add CD/DVD/BR to catalog'),
'<StockItem>', gtk.STOCK_QUIT), ('Add_Dir', gtk.STOCK_DIRECTORY, '_Add Dir', None, 'Add directory to catalog'),
("/_Edit", None, None, 0, "<Branch>"), ('Delete_all_images', None, '_Delete all images'),
("/Edit/_Delete", "Delete", None, 0, '<StockItem>', ('Delete_all_thumbnails', None, '_Delete all thumbnails'),
gtk.STOCK_DELETE), ('Save_all_images', None, '_Save all images…'),
("/Edit/sep4", None, None, 0, "<Separator>"), ('Catalog_statistics', None, '_Catalog statistics'),
("/Edit/_Find", "<control>F", None, 0, ('Cancel', gtk.STOCK_CANCEL, '_Cancel'),
'<StockItem>', gtk.STOCK_FIND), ('View', None, '_View'),
("/Edit/sep5", None, None, 0, "<Separator>"), ('Help', None, '_Help'),
("/Edit/_Preferences", None, None, 0, ('About', gtk.STOCK_ABOUT, '_About'),
'<StockItem>', gtk.STOCK_PREFERENCES), ('Debug', gtk.STOCK_DIALOG_INFO, 'Debug')]
("/_Catalog", None, None, 0, "<Branch>"),
("/Catalog/Add CD\/DVD", "<control>E", None, 0, None),
("/Catalog/Add Directory", "<control>D", None, 0, None),
("/Catalog/sep6", None, None, 0, "<Separator>"),
("/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, "<Separator>"),
("/Catalog/Catalog _statistics", None, None, 0, None),
("/Catalog/sep8", None, None, 0, "<Separator>"),
("/Catalog/Cancel", None, None, 0, '<StockItem>',
gtk.STOCK_CANCEL),
("/_View", None, None, 0, "<Branch>"),
("/View/Toolbar", None, None, 0, '<ToggleItem>'),
("/View/Status bar", None, None, 0, '<ToggleItem>'),
("/_Help", None, None, 0, "<LastBranch>"),
("/_Help/About", None, self.on_about_activate, 0,
'<StockItem>', gtk.STOCK_ABOUT))
accel_group = gtk.AccelGroup() toggles = [('Toolbar', None, '_Toolbar'),
item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group) ('Statusbar', None, '_Statusbar')]
item_factory.create_items(menu_items)
# get recent menu item, and build recent submenu mgr = gtk.UIManager()
self.recent = item_factory.get_item('/File/Recent files') 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.fake_recent()
self.menu_cancel = item_factory.get_item('/Catalog/Cancel') menubar = mgr.get_widget("/MenuBar")
self.menu_cancel.set_sensitive(False) 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) self.debug = mgr.get_widget('/ToolBar/Debug')
# Finally, return the actual menu bar created by the item factory.
return item_factory.get_widget("<main>")
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 return
def on_about_activate(self, event, menuitem): def on_open(self, *args, **kwargs):
print "about", event, menuitem LOG.debug("On open")
return 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 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(): def run():
gui = MainWindow() gui = MainWindow()