def onPopupMenu(self, statusIcon, button, time): """ The user asks for the popup menu """ if self.popupMenu is None: wTree = loadGladeFile('StatusIconMenu.ui') self.menuPlay = wTree.get_object('item-play') self.menuStop = wTree.get_object('item-stop') self.menuNext = wTree.get_object('item-next') self.popupMenu = wTree.get_object('menu-popup') self.menuPause = wTree.get_object('item-pause') self.menuPrevious = wTree.get_object('item-previous') self.menuSeparator = wTree.get_object('item-separator') # Connect handlers wTree.get_object('item-quit').connect('activate', lambda btn: modules.postQuitMsg()) wTree.get_object('item-preferences').connect('activate', lambda btn: modules.showPreferences()) self.menuPlay.connect('activate', lambda btn: modules.postMsg(consts.MSG_CMD_TOGGLE_PAUSE)) self.menuStop.connect('activate', lambda btn: modules.postMsg(consts.MSG_CMD_STOP)) self.menuNext.connect('activate', lambda btn: modules.postMsg(consts.MSG_CMD_NEXT)) self.menuPrevious.connect('activate', lambda btn: modules.postMsg(consts.MSG_CMD_PREVIOUS)) self.menuPause.connect('activate', lambda btn: modules.postMsg(consts.MSG_CMD_TOGGLE_PAUSE)) self.popupMenu.show_all() # Enable only relevant menu entries self.menuStop.set_sensitive(self.isPlaying) self.menuNext.set_sensitive(self.isPlaying and self.trackHasNext) self.menuPause.set_sensitive(self.isPlaying and not self.isPaused) self.menuPrevious.set_sensitive(self.isPlaying and self.trackHasPrev) self.menuPlay.set_sensitive((not (self.isPlaying or self.emptyTracklist)) or self.isPaused) self.popupMenu.popup(None, None, gtk.status_icon_position_menu, button, time, statusIcon)
def realStartup(): """ Perform all the initialization stuff which is not mandatory to display the window This function should be called within the GTK main loop, once the window has been displayed """ import atexit, dbus.mainloop.glib, gui.about, modules, webbrowser def onDelete(win, event): """ Use our own quit sequence, that will itself destroy the window """ window.hide() modules.postQuitMsg() return True def onResize(win, rect): """ Save the new size of the window """ if win.window is not None and not win.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED: prefs.set(__name__, 'win-width', rect.width) prefs.set(__name__, 'win-height', rect.height) if prefs.get(__name__, 'view-mode', DEFAULT_VIEW_MODE)in (consts.VIEW_MODE_FULL, consts.VIEW_MODE_PLAYLIST): prefs.set(__name__, 'full-win-height', rect.height) def onState(win, evt): """ Save the new state of the window """ prefs.set(__name__, 'win-is-maximized', bool(evt.new_window_state & gtk.gdk.WINDOW_STATE_MAXIMIZED)) def atExit(): """ Final function, called just before exiting the Python interpreter """ prefs.save() log.logger.info('Stopped') # D-Bus dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) # Make sure to perform a few actions before exiting the Python interpreter atexit.register(atExit) signal.signal(signal.SIGTERM, lambda sig, frame: onDelete(window, None)) # GTK handlers window.connect('delete-event', onDelete) window.connect('size-allocate', onResize) window.connect('window-state-event', onState) paned.connect('size-allocate', lambda win, rect: prefs.set(__name__, 'paned-pos', paned.get_position())) wTree.get_widget('menu-mode-mini').connect('activate', onViewMode, consts.VIEW_MODE_MINI) wTree.get_widget('menu-mode-full').connect('activate', onViewMode, consts.VIEW_MODE_FULL) wTree.get_widget('menu-mode-playlist').connect('activate', onViewMode, consts.VIEW_MODE_PLAYLIST) wTree.get_widget('menu-quit').connect('activate', lambda item: onDelete(window, None)) wTree.get_widget('menu-about').connect('activate', lambda item: gui.about.show(window)) wTree.get_widget('menu-help').connect('activate', lambda item: webbrowser.open(consts.urlHelp)) wTree.get_widget('menu-preferences').connect('activate', lambda item: modules.showPreferences()) # Let's go modules.postMsg(consts.MSG_EVT_APP_STARTED)
def onAppStarted(self): """ Real initialization function, called when this module has been loaded """ self.currTrackLength = 0 self.sclBeingDragged = False # Widgets wTree = prefs.getWidgetsTree() self.btnPlay = wTree.get_object('btn-play') self.btnNext = wTree.get_object('btn-next') self.btnPrev = wTree.get_object('btn-previous') self.sclSeek = wTree.get_object('scl-position') # GTK handlers self.btnNext.connect('clicked', lambda widget: modules.postMsg(consts.MSG_CMD_NEXT)) self.btnPrev.connect('clicked', lambda widget: modules.postMsg(consts.MSG_CMD_PREVIOUS)) self.btnPlay.connect('clicked', lambda widget: modules.postMsg(consts.MSG_CMD_TOGGLE_PAUSE)) self.sclSeek.connect('change-value', self.onSeekChangingValue) self.sclSeek.connect('value-changed', self.onSeekValueChanged) # Left mouse click jumps to current position self.sclSeek.connect('button-press-event', self.onSeekButtonPressed) self.sclSeek.connect('button-release-event', self.onSeekButtonReleased) # Add pref button self.uimanager = gtk.UIManager() self.main_window = wTree.get_object('win-main') menu_xml = ''' <ui> <popup name="ButtonMenu"> <menuitem action="Options"/> <menuitem action="About"/> </popup> </ui>''' # Create an ActionGroup actiongroup = gtk.ActionGroup('MainActionGroup') # Create actions actiongroup.add_actions([ ('ButtonMenu', None, None), #('Quit', gtk.STOCK_QUIT, None, None, None, # lambda widget: self.onDelete(self.main_window, None)), ('Options', gtk.STOCK_PREFERENCES, None, '<Ctrl>p', None, lambda item: modules.showPreferences()), #('Help', gtk.STOCK_HELP, None, # '<Ctrl>h', None, self.on_help_menu_item_activate), ('About', gtk.STOCK_ABOUT, None, None, None, self.onAbout), ]) # Add the actiongroup to the uimanager self.uimanager.insert_action_group(actiongroup, 0) # Add a UI description self.uimanager.add_ui_from_string(menu_xml) # Create a Menu button_menu = self.uimanager.get_widget('/ButtonMenu') menu_button = gtk.MenuToolButton(None, None) hbox = menu_button.get_child() button, toggle_button = hbox.get_children() hbox.remove(button) img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_SMALL_TOOLBAR) arrow = toggle_button.get_child() toggle_button.remove(arrow) hbox = gtk.HBox() hbox.add(img) toggle_button.add(hbox) menu_button.show() toolbar_hbox = wTree.get_object('hbox4') toolbar_hbox.pack_end(menu_button, False) # Move it to the right toolbar_hbox.reorder_child(menu_button, 0) menu_button.set_menu(button_menu) self.set_tooltips(self.uimanager) accelgroup = self.uimanager.get_accel_group() self.main_window.add_accel_group(accelgroup)
def onShowPreferences(self, item): """ Show preferences """ import modules modules.showPreferences()