def __init__(self): debug.mainthreadTest() widgetscope.WidgetScope.__init__(self, None) self.gtk = gtk.Window(gtk.WINDOW_TOPLEVEL) self.gtk.set_title(oofname) initial_width, initial_height = map(int, runtimeflags.geometry.split('x')) self.gtk.set_default_size(initial_width, initial_height) gtklogger.newTopLevelWidget(self.gtk, oofname) gtklogger.connect(self.gtk, "delete-event", self.deleteEventCB) gtklogger.connect_passive(self.gtk, "configure-event") self.gtk.connect("destroy", self.destroyCB) guitop.setTop(self) self.mainbox = gtk.VBox() self.gtk.add(self.mainbox) self.menubar = gtk.MenuBar() self.mainbox.pack_start(self.menubar, expand=0, fill=0) accelgrp = gtk.AccelGroup() self.gtk.add_accel_group(accelgrp) self.mainmenu = mainmenu.OOF self.oofmenu = gfxmenu.gtkOOFMenuBar(self.mainmenu, bar=self.menubar, accelgroup=accelgrp) gtklogger.setWidgetName(self.oofmenu, "MenuBar") self.pageChooserFrame = gtk.Frame() self.pageChooserFrame.set_shadow_type(gtk.SHADOW_IN) self.mainbox.pack_start(self.pageChooserFrame, expand=0, fill=0, padding=2) align = gtk.Alignment(xalign=0.5) self.pageChooserFrame.add(align) chooserBox = gtk.HBox() chooserBox.set_border_width(2) gtklogger.setWidgetName(chooserBox, 'Navigation') align.add(chooserBox) self.historian = historian.Historian(self.historianCB, self.sensitizeHistory) label = gtk.Label('Task: ') label.set_alignment(1.0, 0.5) chooserBox.pack_start(label, expand=0, fill=0) self.prevHistoryButton = gtkutils.StockButton(gtk.STOCK_GOTO_FIRST) chooserBox.pack_start(self.prevHistoryButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.prevHistoryButton, 'PrevHist') gtklogger.connect(self.prevHistoryButton, 'clicked', self.historian.prevCB) tooltips.set_tooltip_text( self.prevHistoryButton, "Go to the chronologically previously page.") self.prevPageButton = gtkutils.StockButton(gtk.STOCK_GO_BACK) chooserBox.pack_start(self.prevPageButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.prevPageButton, 'Prev') gtklogger.connect(self.prevPageButton, 'clicked', self.prevPageCB) self.pageChooser = chooser.ChooserWidget([], callback=self.pageChooserCB, name="PageMenu") chooserBox.pack_start(self.pageChooser.gtk, expand=0, fill=0) self.currentPageName = None self.nextPageButton = gtkutils.StockButton(gtk.STOCK_GO_FORWARD) chooserBox.pack_start(self.nextPageButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.nextPageButton, 'Next') gtklogger.connect(self.nextPageButton, 'clicked', self.nextPageCB) self.nextHistoryButton = gtkutils.StockButton(gtk.STOCK_GOTO_LAST) chooserBox.pack_start(self.nextHistoryButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.nextHistoryButton, 'NextHist') gtklogger.connect(self.nextHistoryButton, 'clicked', self.historian.nextCB) tooltips.set_tooltip_text(self.nextHistoryButton, "Go to the chronologically next page.") # Find the font size, so widgets can be sized appropriately. # digitsize and charsize are in pixels. self.digitsize, self.charsize = gtkutils.widgetFontSizes(self.gtk) # Add a GUI callback to the "OOF2" or "OOF3D" windows item. oof_item = getattr(self.mainmenu.Windows, oofname) oof_item.add_gui_callback(self.menu_raise) # Frame around main pages. GUI pages are added and removed # from it by installPage(). self.pageframe = gtk.Frame() self.pageframe.set_shadow_type(gtk.SHADOW_IN) self.mainbox.pack_start(self.pageframe, expand=1, fill=1) # Add pages that may have been created before the main GUI was built. for pagename, i in zip(pagenames, range(len(allPages))): self.addPage(allPages[pagename], i)
def __init__(self, title, menu=None, callback=None, guiloggable=True): debug.mainthreadTest() self.gtk = gtk.Window(gtk.WINDOW_TOPLEVEL) self.gtk.set_title(title) if guiloggable: gtklogger.newTopLevelWidget(self.gtk, title) gtklogger.connect_passive(self.gtk, 'delete-event') gtklogger.connect_passive(self.gtk, 'configure-event') self.mainbox = gtk.VBox() self.gtk.add(self.mainbox) # Checking the type is clumsy; the idea is that the caller # must provide either the name for the auto-generated menu, or # a menu to use instead. TODO 3.1: It would be cleaner for # the Activity Viewer if the SubWindow class could provide the # window-specific (i.e "Close" and "Quit") menu items under # "File" (creating it, if necessary, and prepending it to the # passed-in menu) even when a menu is passed in. This would # prevent duplication of effort by separate subclasses of # subwindow. if type(menu) == types.StringType: # If no menu is provided, then build a non-logging local # one with 'Close' and 'Quit'. self.subwindow_menu = oofmenu.OOFMenuItem(menu, secret=1, gui_only=1, no_log=1) file_item = oofmenu.OOFMenuItem('File', gui_only=1, no_log=1) self.subwindow_menu.addItem(file_item) file_item.addItem( oofmenu.OOFMenuItem('Close', help="Close this window.", callback=self.menu_close, no_log=1, gui_only=1, accel='w')) file_item.addItem( oofmenu.OOFMenuItem('Quit', gui_callback=quit.queryQuit, no_log=1, gui_only=1, help="Quit the OOF application.", accel='q', threadable=oofmenu.UNTHREADABLE)) mainmenu.OOF.addItem(self.subwindow_menu) self._local_menu = menu elif isinstance(menu, oofmenu.OOFMenuItem): self.subwindow_menu = menu self._local_menu = None # Flag indicating menu was passed in. else: raise TypeError("Incorrect type passed as menu to SubWindow.") # Build the menu bar and add it to the window. ## self.menu_bar = None self.accel_group = gtk.AccelGroup() self.gtk.add_accel_group(self.accel_group) self.menu_bar = gfxmenu.gtkOOFMenuBar(self.subwindow_menu, accelgroup=self.accel_group) if guiloggable: gtklogger.setWidgetName(self.menu_bar, "MenuBar") self.mainbox.pack_start(self.menu_bar, fill=0, expand=0) # Add the "Windows" menu to the bar. self.windows_gtk_menu_item = gfxmenu.gtkOOFMenu( mainmenu.OOF.Windows, self.accel_group) self.menu_bar.append(self.windows_gtk_menu_item) self.menu_bar.connect("destroy", self.menu_bar_destroyed) if callback is None: callback = self.destroySubWindow guitop.top().gtk.connect("destroy", callback)
def __init__(self, title, menu=None, callback=None, guiloggable=True): debug.mainthreadTest() self.gtk = gtk.Window(gtk.WINDOW_TOPLEVEL) self.gtk.set_title(title) if guiloggable: gtklogger.newTopLevelWidget(self.gtk, title) gtklogger.connect_passive(self.gtk, 'delete-event') gtklogger.connect_passive(self.gtk, 'configure-event') self.mainbox = gtk.VBox() self.gtk.add(self.mainbox) # Checking the type is clumsy; the idea is that the caller # must provide either the name for the auto-generated menu, or # a menu to use instead. TODO LATER: It would be cleaner for # the Layer Editor and the Activity Viewer if the SubWindow # class could provide the window-specific (i.e "Close" and # "Quit") menu items under "File" (creating it, if necessary, # and prepending it to the passed-in menu) even when a menu is # passed in. This would prevent duplication of effort by # separate subclasses of subwindow. if type(menu)==types.StringType: # If no menu is provided, then build a non-logging local # one with 'Close' and 'Quit'. self.subwindow_menu = oofmenu.OOFMenuItem( menu, secret=1, gui_only=1, no_log=1) file_item = oofmenu.OOFMenuItem('File', gui_only=1, no_log=1) self.subwindow_menu.addItem(file_item) file_item.addItem(oofmenu.OOFMenuItem( 'Close', help="Close this window.", callback=self.menu_close, no_log=1, gui_only=1, accel='w')) file_item.addItem(oofmenu.OOFMenuItem( 'Quit', gui_callback=quit.queryQuit, no_log=1, gui_only=1, help="Quit the OOF application.", accel='q', threadable = oofmenu.UNTHREADABLE)) mainmenu.OOF.addItem(self.subwindow_menu) self._local_menu = menu elif isinstance(menu, oofmenu.OOFMenuItem): self.subwindow_menu = menu self._local_menu = None # Flag indicating menu was passed in. else: raise TypeError("Incorrect type passed as menu to SubWindow.") # Build the menu bar and add it to the window. ## self.menu_bar = None self.accel_group = gtk.AccelGroup() self.gtk.add_accel_group(self.accel_group) self.menu_bar = gfxmenu.gtkOOFMenuBar( self.subwindow_menu, accelgroup=self.accel_group) if guiloggable: gtklogger.setWidgetName(self.menu_bar, "MenuBar") self.mainbox.pack_start(self.menu_bar, fill=0, expand=0) # Add the "Windows" menu to the bar. self.windows_gtk_menu_item = gfxmenu.gtkOOFMenu(mainmenu.OOF.Windows, self.accel_group) self.menu_bar.append(self.windows_gtk_menu_item) self.menu_bar.connect("destroy", self.menu_bar_destroyed) if callback is None: callback = self.destroySubWindow top().gtk.connect("destroy", callback)
def __init__(self): debug.mainthreadTest() widgetscope.WidgetScope.__init__(self, None) self.gtk = gtk.Window(gtk.WINDOW_TOPLEVEL) self.gtk.set_title(oofname) initial_width, initial_height = map(int, runtimeflags.geometry.split("x")) self.gtk.set_default_size(initial_width, initial_height) gtklogger.newTopLevelWidget(self.gtk, oofname) gtklogger.connect(self.gtk, "delete-event", self.deleteEventCB) gtklogger.connect_passive(self.gtk, "configure-event") self.gtk.connect("destroy", self.destroyCB) guitop.setTop(self) self.mainbox = gtk.VBox() self.gtk.add(self.mainbox) self.menubar = gtk.MenuBar() self.mainbox.pack_start(self.menubar, expand=0, fill=0) accelgrp = gtk.AccelGroup() self.gtk.add_accel_group(accelgrp) self.mainmenu = mainmenu.OOF self.oofmenu = gfxmenu.gtkOOFMenuBar(self.mainmenu, bar=self.menubar, accelgroup=accelgrp) gtklogger.setWidgetName(self.oofmenu, "MenuBar") self.pageChooserFrame = gtk.Frame() self.pageChooserFrame.set_shadow_type(gtk.SHADOW_IN) self.mainbox.pack_start(self.pageChooserFrame, expand=0, fill=0, padding=2) align = gtk.Alignment(xalign=0.5) self.pageChooserFrame.add(align) chooserBox = gtk.HBox() chooserBox.set_border_width(2) gtklogger.setWidgetName(chooserBox, "Navigation") align.add(chooserBox) self.historian = historian.Historian(self.historianCB, self.sensitizeHistory) label = gtk.Label("Task: ") label.set_alignment(1.0, 0.5) chooserBox.pack_start(label, expand=0, fill=0) self.prevHistoryButton = gtkutils.StockButton(gtk.STOCK_GOTO_FIRST) chooserBox.pack_start(self.prevHistoryButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.prevHistoryButton, "PrevHist") gtklogger.connect(self.prevHistoryButton, "clicked", self.historian.prevCB) tooltips.set_tooltip_text(self.prevHistoryButton, "Go to the chronologically previously page.") self.prevPageButton = gtkutils.StockButton(gtk.STOCK_GO_BACK) chooserBox.pack_start(self.prevPageButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.prevPageButton, "Prev") gtklogger.connect(self.prevPageButton, "clicked", self.prevPageCB) self.pageChooser = chooser.ChooserWidget([], callback=self.pageChooserCB, name="PageMenu") chooserBox.pack_start(self.pageChooser.gtk, expand=0, fill=0) self.currentPageName = None self.nextPageButton = gtkutils.StockButton(gtk.STOCK_GO_FORWARD) chooserBox.pack_start(self.nextPageButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.nextPageButton, "Next") gtklogger.connect(self.nextPageButton, "clicked", self.nextPageCB) self.nextHistoryButton = gtkutils.StockButton(gtk.STOCK_GOTO_LAST) chooserBox.pack_start(self.nextHistoryButton, expand=0, fill=0, padding=3) gtklogger.setWidgetName(self.nextHistoryButton, "NextHist") gtklogger.connect(self.nextHistoryButton, "clicked", self.historian.nextCB) tooltips.set_tooltip_text(self.nextHistoryButton, "Go to the chronologically next page.") # Find the font size, so widgets can be sized appropriately. # digitsize and charsize are in pixels. self.digitsize, self.charsize = gtkutils.widgetFontSizes(self.gtk) # Add a GUI callback to the "OOF2" windows item. oof2_item = self.mainmenu.Windows.OOF2 oof2_item.add_gui_callback(self.menu_raise) # Frame around main pages. GUI pages are added and removed # from it by installPage(). self.pageframe = gtk.Frame() self.pageframe.set_shadow_type(gtk.SHADOW_IN) self.mainbox.pack_start(self.pageframe, expand=1, fill=1) # Add pages that may have been created before the main GUI was built. for pagename, i in zip(pagenames, range(len(allPages))): self.addPage(allPages[pagename], i)