def do_standard_places(self): if (self.showcomputer == True): Button1 = easyButton("computer", self.iconsize, [_("Computer")], -1, -1) Button1.connect("clicked", self.ButtonClicked, "nautilus computer:") Button1.show() self.placesBtnHolder.pack_start(Button1, False, False) self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer" )) if (self.showhomefolder == True): Button2 = easyButton("user-home", self.iconsize, [_("Home Folder")], -1, -1) Button2.connect("clicked", self.ButtonClicked, "nautilus") Button2.show() self.placesBtnHolder.pack_start(Button2, False, False) self.mintMenuWin.setTooltip(Button2, _("Open your personal folder")) if (self.shownetwork == True): gconftheme = EasyGConf("/desktop/gnome/interface/") icon_theme = gconftheme.get("string", "icon_theme", "Mint-X") if "Mint-X" in icon_theme: Button3 = easyButton("notification-network-ethernet-connected", self.iconsize, [_("Network")], -1, -1) else: Button3 = easyButton("network-workgroup", self.iconsize, [_("Network")], -1, -1) Button3.connect("clicked", self.ButtonClicked, "nautilus network:") Button3.show() self.placesBtnHolder.pack_start(Button3, False, False) self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations")) if (self.showdesktop == True): # Determine where the Desktop folder is (could be localized) desktopDir = home + "/Desktop" try: import sys sys.path.append('/usr/lib/linuxmint/common') from configobj import ConfigObj config = ConfigObj(home + "/.config/user-dirs.dirs") tmpdesktopDir = config['XDG_DESKTOP_DIR'] tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) if os.path.exists(tmpdesktopDir): desktopDir = tmpdesktopDir except Exception, detail: print detail Button4 = easyButton("gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1) Button4.connect("clicked", self.ButtonClicked, "nautilus \"" + desktopDir + "\"") Button4.show() self.placesBtnHolder.pack_start(Button4, False, False) self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop"))
def do_standard_places( self ): if ( self.showcomputer == True ): Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 ) if self.de == "mate": Button1.connect( "clicked", self.ButtonClicked, "caja computer:" ) else: Button1.connect( "clicked", self.ButtonClicked, "xdg-open /" ) Button1.show() self.placesBtnHolder.pack_start( Button1, False, False ) self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") ) if ( self.showhomefolder == True ): Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 ) if self.de == "mate": Button2.connect( "clicked", self.ButtonClicked, "caja %s " % home ) else: Button2.connect( "clicked", self.ButtonClicked, "xdg-open %s " % home ) Button2.show() self.placesBtnHolder.pack_start( Button2, False, False ) self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") ) if ( self.shownetwork == True and self.de == "mate"): gconftheme = EasyGConf( "/desktop/mate/interface/" ) icon_theme = gconftheme.get("string", "icon_theme", "Mint-X") if "Mint-X" in icon_theme: Button3 = easyButton( "notification-network-ethernet-connected", self.iconsize, [_("Network")], -1, -1) else: Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1) if self.de == "mate": Button3.connect( "clicked", self.ButtonClicked, "caja network:" ) else: Button3.connect( "clicked", self.ButtonClicked, "xdg-open network:" ) Button3.show() self.placesBtnHolder.pack_start( Button3, False, False ) self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") ) if ( self.showdesktop == True ): # Determine where the Desktop folder is (could be localized) desktopDir = home + "/Desktop" try: import sys sys.path.append('/usr/lib/linuxmint/common') from configobj import ConfigObj config = ConfigObj(home + "/.config/user-dirs.dirs") tmpdesktopDir = config['XDG_DESKTOP_DIR'] tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) if os.path.exists(tmpdesktopDir): desktopDir = tmpdesktopDir except Exception, detail: print detail Button4 = easyButton( "mate-fs-desktop", self.iconsize, [_("Desktop")], -1, -1 ) if self.de == "mate": Button4.connect( "clicked", self.ButtonClicked, "caja \"" + desktopDir + "\"") else: Button4.connect( "clicked", self.ButtonClicked, "xdg-open \"" + desktopDir + "\"") Button4.show() self.placesBtnHolder.pack_start( Button4, False, False ) self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") )
def __init__(self, applet, iid): self.applet = applet self.gconf = EasyGConf("/apps/mintMenu/") self.gconf.notifyAdd("applet_text", self.gconfEntriesChanged) self.gconf.notifyAdd("theme_name", self.changeTheme) self.gconf.notifyAdd("hot_key", self.gconfEntriesChanged) self.gconf.notifyAdd("applet_icon", self.gconfEntriesChanged) self.gconf.notifyAdd("hide_applet_icon", self.gconfEntriesChanged) self.gconf.notifyAdd("applet_icon_size", self.gconfEntriesChanged) self.getGconfEntries() self.gconftheme = EasyGConf("/desktop/gnome/interface/") self.gconftheme.notifyAdd("gtk_theme", self.changeTheme) self.createPanelButton() self.applet.set_applet_flags(gnomeapplet.EXPAND_MINOR) self.applet.connect("button-press-event", self.showMenu) self.applet.connect("change-orient", self.changeOrientation) self.applet.connect("change-background", self.changeBackground) self.applet.connect("enter-notify-event", self.enter_notify) self.applet.connect("leave-notify-event", self.leave_notify) self.mainwin = MainWindow(self.button_box) self.mainwin.window.connect("map-event", lambda *args: self.applet.set_state(gtk.STATE_SELECTED)) self.mainwin.window.connect("unmap-event", lambda *args: self.applet.set_state(gtk.STATE_NORMAL)) self.mainwin.window.connect("size-allocate", lambda *args: self.positionMenu()) self.mainwin.window.set_name("mintmenu") # Name used in Gtk RC files icon = iconManager.getIcon(self.mainwin.icon, 1) if icon: gtk.window_set_default_icon(icon) self.propxml = """ <popup name="button3"> <menuitem name="Item 1" verb="Preferences" label="%s" pixtype="stock" pixname="gtk-preferences" /> <menuitem name="Item 1" verb="Edit" label="%s" pixtype="stock" pixname="gtk-edit" /> <menuitem name="Item 2" verb="Reload" label="%s" pixtype="stock" pixname="gtk-refresh" /> <menuitem name="Item 3" verb="About" label="%s" pixtype="stock" pixname="gtk-about" /> </popup> """ % ( _("Preferences"), _("Edit menu"), _("Reload plugins"), _("About"), ) self.verbs = [ ("Preferences", self.showPreferences), ("Edit", self.showMenuEditor), ("About", self.showAboutDialog), ("Reload", self.mainwin.RegenPlugins), ] self.bind_hot_key()
def __init__(self, applet, iid): self.applet = applet self.gconf = EasyGConf("/apps/mintMenu/") self.gconf.notifyAdd("applet_text", self.gconfEntriesChanged) self.gconf.notifyAdd("theme_name", self.changeTheme) self.gconf.notifyAdd("hot_key", self.gconfEntriesChanged) self.gconf.notifyAdd("applet_icon", self.gconfEntriesChanged) self.gconf.notifyAdd("hide_applet_icon", self.gconfEntriesChanged) self.gconf.notifyAdd("applet_icon_size", self.gconfEntriesChanged) self.getGconfEntries() self.gconftheme = EasyGConf("/desktop/gnome/interface/") self.gconftheme.notifyAdd("gtk_theme", self.changeTheme) self.createPanelButton() self.applet.set_applet_flags(gnomeapplet.EXPAND_MINOR) self.applet.connect("button-press-event", self.showMenu) self.applet.connect("change-orient", self.changeOrientation) self.applet.connect("change-background", self.changeBackground) self.applet.connect("enter-notify-event", self.enter_notify) self.applet.connect("leave-notify-event", self.leave_notify) self.mainwin = MainWindow(self.button_box) self.mainwin.window.connect( "map-event", lambda *args: self.applet.set_state(gtk.STATE_SELECTED)) self.mainwin.window.connect( "unmap-event", lambda *args: self.applet.set_state(gtk.STATE_NORMAL)) self.mainwin.window.connect("size-allocate", lambda *args: self.positionMenu()) self.mainwin.window.set_name("mintmenu") # Name used in Gtk RC files icon = iconManager.getIcon(self.mainwin.icon, 1) if icon: gtk.window_set_default_icon(icon) self.propxml = """ <popup name="button3"> <menuitem name="Item 1" verb="Preferences" label="%s" pixtype="stock" pixname="gtk-preferences" /> <menuitem name="Item 1" verb="Edit" label="%s" pixtype="stock" pixname="gtk-edit" /> <menuitem name="Item 2" verb="Reload" label="%s" pixtype="stock" pixname="gtk-refresh" /> <menuitem name="Item 3" verb="About" label="%s" pixtype="stock" pixname="gtk-about" /> </popup> """ % (_("Preferences"), _("Edit menu"), _("Reload plugins"), _("About")) self.verbs = [("Preferences", self.showPreferences), ("Edit", self.showMenuEditor), ("About", self.showAboutDialog), ("Reload", self.mainwin.RegenPlugins)] self.bind_hot_key()
def __init__(self, mintMenuWin, toggleButton, de): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join(os.path.dirname(__file__), "system_management.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.systemBtnHolder = wTree.get_widget("system_button_holder") self.editableBtnHolder = wTree.get_widget("editable_button_holder") self.scrolledWindow = wTree.get_widget("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget("mainWindow") # Set 'heading' property for plugin self.heading = _("System") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget("System") # Items to get custom colors self.itemstocolor = [wTree.get_widget("viewport2")] # Gconf stuff self.gconf = EasyGConf("/apps/mintMenu/plugins/system-management/") self.gconf.notifyAdd("icon_size", self.RegenPlugin) self.gconf.notifyAdd("show_control_center", self.RegenPlugin) self.gconf.notifyAdd("show_lock_screen", self.RegenPlugin) self.gconf.notifyAdd("show_logout", self.RegenPlugin) self.gconf.notifyAdd("show_package_manager", self.RegenPlugin) self.gconf.notifyAdd("show_software_manager", self.RegenPlugin) self.gconf.notifyAdd("show_terminal", self.RegenPlugin) self.gconf.notifyAdd("show_quit", self.RegenPlugin) self.gconf.notifyAdd("allowScrollbar", self.RegenPlugin) self.gconf.notifyAdd("height", self.changePluginSize) self.gconf.notifyAdd("width", self.changePluginSize) self.gconf.bindGconfEntryToVar("bool", "sticky", self, "sticky") self.GetGconfEntries() self.content_holder.set_size_request(self.width, self.height)
def __init__( self, toggleButton ): self.path = PATH sys.path.append( os.path.join( self.path, "plugins") ) self.icon = ICON self.toggle = toggleButton # Load glade file and extract widgets gladefile = os.path.join( self.path, "mintMenu.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.window = wTree.get_widget( "mainWindow" ) self.paneholder = wTree.get_widget( "paneholder" ) self.border = wTree.get_widget( "border" ) self.panesToColor = [ ] self.headingsToColor = [ ] self.window.connect( "map-event", self.onMap ) self.window.connect( "show", self.onShow ) self.window.connect( "unmap-event", self.onUnmap ) self.window.connect( "button-press-event", self.onButtonPress ) self.window.connect( "key-press-event", self.onKeyPress ) self.window.connect( "grab-broken-event", self.onGrabBroken ) self.window.stick() plugindir = os.path.join( os.path.expanduser( "~" ), ".linuxmint/mintMenu/plugins" ) sys.path.append( plugindir ) dic = {"on_window1_destroy" : self.quit_cb} wTree.signal_autoconnect( dic ) self.gconf = EasyGConf( "/apps/mintMenu/" ) self.getSetGconfEntries() self.SetupMintMenuBorder() self.SetupMintMenuOpacity() self.tooltips = gtk.Tooltips() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() self.PopulatePlugins(); self.gconf.notifyAdd( "plugins_list", self.RegenPlugins ) self.gconf.notifyAdd( "start_with_favorites", self.toggleStartWithFavorites ) self.gconf.notifyAdd( "/apps/panel/global/tooltips_enabled", self.toggleTooltipsEnabled ) self.gconf.notifyAdd( "tooltips_enabled", self.toggleTooltipsEnabled ) self.gconf.notifyAdd( "use_custom_color", self.toggleUseCustomColor ) self.gconf.notifyAdd( "custom_border_color", self.toggleCustomBorderColor ) self.gconf.notifyAdd( "custom_heading_color", self.toggleCustomHeadingColor ) self.gconf.notifyAdd( "custom_color", self.toggleCustomBackgroundColor ) self.gconf.notifyAdd( "border_width", self.toggleBorderWidth ) self.gconf.notifyAdd( "opacity", self.toggleOpacity )
def __init__(self, mintMenuWin, toggleButton, de): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join(os.path.dirname(__file__), "places.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.placesBtnHolder = wTree.get_widget("places_button_holder") self.editableBtnHolder = wTree.get_widget("editable_button_holder") self.scrolledWindow = wTree.get_widget("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget("mainWindow") # Set 'heading' property for plugin self.heading = _("Places") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget("Places") # Items to get custom colors self.itemstocolor = [wTree.get_widget("viewport2")] # Gconf stuff self.gconf = EasyGConf("/apps/mintMenu/plugins/places/") self.gconf.notifyAdd("icon_size", self.RegenPlugin) self.gconf.notifyAdd("show_computer", self.RegenPlugin) self.gconf.notifyAdd("show_desktop", self.RegenPlugin) self.gconf.notifyAdd("show_home_folder", self.RegenPlugin) self.gconf.notifyAdd("show_network", self.RegenPlugin) self.gconf.notifyAdd("show_trash", self.RegenPlugin) self.gconf.notifyAdd("custom_names", self.RegenPlugin) self.gconf.notifyAdd("custom_paths", self.RegenPlugin) self.gconf.notifyAdd("allowScrollbar", self.RegenPlugin) self.gconf.notifyAdd("show_gtk_bookmarks", self.RegenPlugin) self.gconf.notifyAdd("height", self.changePluginSize) self.gconf.notifyAdd("width", self.changePluginSize) self.gconf.bindGconfEntryToVar("bool", "sticky", self, "sticky") self.GetGconfEntries() self.content_holder.set_size_request(self.width, self.height)
class MenuWin( object ): def __init__( self, applet, iid ): self.applet = applet self.gconf = EasyGConf( "/apps/mintMenu/" ) self.gconf.notifyAdd( "applet_text", self.gconfEntriesChanged ) self.gconf.notifyAdd( "hot_key", self.gconfEntriesChanged ) self.gconf.notifyAdd( "applet_icon", self.gconfEntriesChanged ) self.gconf.notifyAdd( "hide_applet_icon", self.gconfEntriesChanged ) self.gconf.notifyAdd( "applet_icon_size", self.gconfEntriesChanged ) self.getGconfEntries() self.createPanelButton() self.applet.set_applet_flags( gnomeapplet.EXPAND_MINOR ) self.applet.connect( "button-press-event", self.showMenu ) self.applet.connect( "change-orient", self.changeOrientation ) self.applet.connect( "change-background", self.changeBackground ) self.applet.connect("enter-notify-event", self.enter_notify) self.applet.connect("leave-notify-event", self.leave_notify) self.mainwin = MainWindow( self.button_box ) self.mainwin.window.connect( "map-event", lambda *args: self.applet.set_state( gtk.STATE_SELECTED ) ) self.mainwin.window.connect( "unmap-event", lambda *args: self.applet.set_state( gtk.STATE_NORMAL ) ) self.mainwin.window.connect( "size-allocate", lambda *args: self.positionMenu() ) icon = iconManager.getIcon( self.mainwin.icon, 1 ) if icon: gtk.window_set_default_icon( icon ) self.propxml = """ <popup name="button3"> <menuitem name="Item 1" verb="Preferences" label="%s" pixtype="stock" pixname="gtk-preferences" /> <menuitem name="Item 1" verb="Edit" label="%s" pixtype="stock" pixname="gtk-edit" /> <menuitem name="Item 2" verb="Reload" label="%s" pixtype="stock" pixname="gtk-refresh" /> <menuitem name="Item 3" verb="About" label="%s" pixtype="stock" pixname="gtk-about" /> </popup> """ % ( _("Preferences"), _("Edit menu"), _("Reload plugins"), _("About") ) self.verbs = [ ("Preferences", self.showPreferences), ("Edit", self.showMenuEditor), ("About", self.showAboutDialog), ("Reload",self.mainwin.RegenPlugins) ] self.bind_hot_key() def onBindingPress(self): try: if self.mainwin.window.flags() & gtk.VISIBLE: self.mainwin.window.hide() self.mainwin.toggle.set_active(False) else: MenuWin.showMenu(self,self.mainwin.toggle) self.mainwin.window.show() #self.mainwin.wTree.get_widget( 'PluginTabs' ).set_curremenu_editor = SetGconf( self.client, "string", "/apps/usp/menu_editor", "alacarte" ) except Exception, cause: print cause
def __init__( self, mintMenuWin, toggleButton, de ): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join( os.path.dirname( __file__ ), "system_management.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.systemBtnHolder = wTree.get_widget( "system_button_holder" ) self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) self.scrolledWindow = wTree.get_widget( "scrolledwindow2" ) # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("System") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget( "System" ) # Items to get custom colors self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] # Gconf stuff self.gconf = EasyGConf( "/apps/mintMenu/plugins/system-management/" ) self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) self.gconf.notifyAdd( "show_control_center", self.RegenPlugin ) self.gconf.notifyAdd( "show_lock_screen", self.RegenPlugin ) self.gconf.notifyAdd( "show_logout", self.RegenPlugin ) self.gconf.notifyAdd( "show_package_manager", self.RegenPlugin ) self.gconf.notifyAdd( "show_software_manager", self.RegenPlugin ) self.gconf.notifyAdd( "show_terminal", self.RegenPlugin ) self.gconf.notifyAdd( "show_quit", self.RegenPlugin ) self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) self.GetGconfEntries() self.content_holder.set_size_request( self.width, self.height )
def __init__( self, mintMenuWin, toggleButton, de ): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join( os.path.dirname( __file__ ), "places.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.placesBtnHolder = wTree.get_widget( "places_button_holder" ) self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) self.scrolledWindow=wTree.get_widget("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("Places") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget( "Places" ) # Items to get custom colors self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] # Gconf stuff self.gconf = EasyGConf( "/apps/mintMenu/plugins/places/" ) self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) self.gconf.notifyAdd( "show_computer", self.RegenPlugin ) self.gconf.notifyAdd( "show_desktop", self.RegenPlugin ) self.gconf.notifyAdd( "show_home_folder", self.RegenPlugin ) self.gconf.notifyAdd( "show_network", self.RegenPlugin ) self.gconf.notifyAdd( "show_trash", self.RegenPlugin ) self.gconf.notifyAdd( "custom_names", self.RegenPlugin ) self.gconf.notifyAdd( "custom_paths", self.RegenPlugin ) self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) self.gconf.notifyAdd( "show_gtk_bookmarks", self.RegenPlugin ) self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) self.GetGconfEntries() self.content_holder.set_size_request( self.width, self.height )
class pluginclass(object): def __init__(self, mintMenuWin, toggleButton, de): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join(os.path.dirname(__file__), "system_management.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.systemBtnHolder = wTree.get_widget("system_button_holder") self.editableBtnHolder = wTree.get_widget("editable_button_holder") self.scrolledWindow = wTree.get_widget("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget("mainWindow") # Set 'heading' property for plugin self.heading = _("System") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget("System") # Items to get custom colors self.itemstocolor = [wTree.get_widget("viewport2")] # Gconf stuff self.gconf = EasyGConf("/apps/mintMenu/plugins/system-management/") self.gconf.notifyAdd("icon_size", self.RegenPlugin) self.gconf.notifyAdd("show_control_center", self.RegenPlugin) self.gconf.notifyAdd("show_lock_screen", self.RegenPlugin) self.gconf.notifyAdd("show_logout", self.RegenPlugin) self.gconf.notifyAdd("show_package_manager", self.RegenPlugin) self.gconf.notifyAdd("show_software_manager", self.RegenPlugin) self.gconf.notifyAdd("show_terminal", self.RegenPlugin) self.gconf.notifyAdd("show_quit", self.RegenPlugin) self.gconf.notifyAdd("allowScrollbar", self.RegenPlugin) self.gconf.notifyAdd("height", self.changePluginSize) self.gconf.notifyAdd("width", self.changePluginSize) self.gconf.bindGconfEntryToVar("bool", "sticky", self, "sticky") self.GetGconfEntries() self.content_holder.set_size_request(self.width, self.height) def destroy(self): self.gconf.notifyRemoveAll() def wake(self): pass def changePluginSize(self, client, connection_id, entry, args): self.allowScrollbar = self.gconf.get("bool", "allowScrollbar", False) if entry.get_key() == self.gconf.gconfDir + "width": self.width = entry.get_value().get_int() elif entry.get_key() == self.gconf.gconfDir + "height": if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) else: self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.height = entry.get_value().get_int() self.content_holder.set_size_request(self.width, self.height) def RegenPlugin(self, *args, **kargs): self.GetGconfEntries() self.ClearAll() self.do_standard_items() def GetGconfEntries(self): self.width = self.gconf.get("int", "width", 200) self.allowScrollbar = self.gconf.get("bool", "allowScrollbar", False) self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.height = self.gconf.get("int", "height", 180) self.content_holder.set_size_request(self.width, self.height) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) self.content_holder.set_size_request(self.width, self.height) self.iconsize = self.gconf.get("int", "icon_size", 16) # Check toggles self.showSoftwareManager = self.gconf.get("bool", "show_software_manager", True) self.showPackageManager = self.gconf.get("bool", "show_package_manager", True) self.showControlCenter = self.gconf.get("bool", "show_control_center", True) self.showTerminal = self.gconf.get("bool", "show_terminal", True) self.showLockScreen = self.gconf.get("bool", "show_lock_screen", True) self.showLogout = self.gconf.get("bool", "show_logout", True) self.showQuit = self.gconf.get("bool", "show_quit", True) # Hide vertical dotted separator self.hideseparator = self.gconf.get("bool", "hide_separator", False) # Plugin icon self.icon = self.gconf.get("string", 'icon', "preferences-system") # Allow plugin to be minimized to the left plugin pane self.sticky = self.gconf.get("bool", "sticky", False) self.minimized = self.gconf.get("bool", "minimized", False) def ClearAll(self): for child in self.systemBtnHolder.get_children(): child.destroy() for child in self.editableBtnHolder.get_children(): child.destroy() #Add standard items def do_standard_items(self): if (self.showSoftwareManager == True): if os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg"): Button1 = easyButton("applications-other", self.iconsize, [_("Software Manager")], -1, -1) Button1.connect("clicked", self.ButtonClicked, "mintinstall") Button1.show() self.systemBtnHolder.pack_start(Button1, False, False) self.mintMenuWin.setTooltip( Button1, _("Browse and install available software")) if (self.showPackageManager == True): Button2 = easyButton("applications-system", self.iconsize, [_("Package Manager")], -1, -1) Button2.connect("clicked", self.ButtonClicked, "gksu /usr/sbin/synaptic") Button2.show() self.systemBtnHolder.pack_start(Button2, False, False) self.mintMenuWin.setTooltip( Button2, _("Install, remove and upgrade software packages")) if (self.showControlCenter == True): Button3 = easyButton("gtk-preferences", self.iconsize, [_("Control Center")], -1, -1) if self.de == "xfce": Button3.connect("clicked", self.ButtonClicked, "xfce4-settings-manager") else: Button3.connect("clicked", self.ButtonClicked, "gnome-control-center") Button3.show() self.systemBtnHolder.pack_start(Button3, False, False) self.mintMenuWin.setTooltip(Button3, _("Configure your system")) if (self.showTerminal == True): Button4 = easyButton("gnome-terminal", self.iconsize, [_("Terminal")], -1, -1) Button4.connect("clicked", self.ButtonClicked, "x-terminal-emulator") Button4.show() self.systemBtnHolder.pack_start(Button4, False, False) self.mintMenuWin.setTooltip(Button4, _("Use the command line")) if self.de == "xfce": Button6 = easyButton("system-log-out", self.iconsize, [_("Logout")], -1, -1) Button6.connect("clicked", self.ButtonClicked, "xfce4-session-logout") Button6.show() self.systemBtnHolder.pack_start(Button6, False, False) self.mintMenuWin.setTooltip(Button6, _("Log out or switch user")) else: if (self.showLockScreen == True): Button5 = easyButton("system-lock-screen", self.iconsize, [_("Lock Screen")], -1, -1) Button5.connect("clicked", self.ButtonClicked, "xdg-screensaver lock") Button5.show() self.systemBtnHolder.pack_start(Button5, False, False) self.mintMenuWin.setTooltip(Button5, _("Requires password to unlock")) if (self.showLogout == True): Button6 = easyButton("system-log-out", self.iconsize, [_("Logout")], -1, -1) Button6.connect("clicked", self.ButtonClicked, "gnome-session-save --logout-dialog") Button6.show() self.systemBtnHolder.pack_start(Button6, False, False) self.mintMenuWin.setTooltip(Button6, _("Log out or switch user")) if (self.showQuit == True): Button7 = easyButton("system-shutdown", self.iconsize, [_("Quit")], -1, -1) Button7.connect("clicked", self.ButtonClicked, "gnome-session-save --shutdown-dialog") Button7.show() self.systemBtnHolder.pack_start(Button7, False, False) self.mintMenuWin.setTooltip( Button7, _("Shutdown, restart, suspend or hibernate")) def ButtonClicked(self, widget, Exec): self.mintMenuWin.hide() if Exec: Execute(Exec) def do_plugin(self): self.do_standard_items()
def __init__( self ): self.path = os.path.abspath( os.path.dirname( sys.argv[0] ) ) # Load glade file and extract widgets gladefile = os.path.join( self.path, "mintMenuConfig.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.mainWindow=wTree.get_widget("mainWindow") #i18n self.mainWindow.set_title(_("Menu preferences")) self.mainWindow.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg") wTree.get_widget("startWithFavorites").set_label(_("Always start with favorites pane")) wTree.get_widget("showSidepane").set_label(_("Show sidepane")) wTree.get_widget("showButtonIcon").set_label(_("Show button icon")) wTree.get_widget("useCustomColors").set_label(_("Use custom colors")) wTree.get_widget("showRecentPlugin").set_label(_("Show recent documents")) wTree.get_widget("showAppComments").set_label(_("Show application comments")) wTree.get_widget("showCategoryIcons").set_label(_("Show category icons")) wTree.get_widget("hover").set_label(_("Hover")) wTree.get_widget("swapGeneric").set_label(_("Swap name and generic name")) wTree.get_widget("label11").set_text(_("Border width:")) wTree.get_widget("label2").set_text(_("pixels")) wTree.get_widget("label8").set_text(_("Opacity:")) wTree.get_widget("label9").set_text("%") wTree.get_widget("buttonTextLabel").set_text(_("Button text:")) wTree.get_widget("label1").set_text(_("Options")) wTree.get_widget("label23").set_text(_("Applications")) wTree.get_widget("colorsLabel").set_text(_("Colors")) wTree.get_widget("favLabel").set_text(_("Favorites")) wTree.get_widget("label3").set_text(_("Main button")) wTree.get_widget("backgroundColorLabel").set_text(_("Background:")) wTree.get_widget("headingColorLabel").set_text(_("Headings:")) wTree.get_widget("borderColorLabel").set_text(_("Borders:")) #wTree.get_widget("applicationsLabel").set_text(_("Applications")) #wTree.get_widget("favoritesLabel").set_text(_("Favorites")) wTree.get_widget("numberColumnsLabel").set_text(_("Number of columns:")) wTree.get_widget("iconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("iconSizeLabel2").set_text(_("Icon size:")) wTree.get_widget("label44").set_text(_("Icon size:")) wTree.get_widget("hoverLabel").set_text(_("Hover delay (ms):")) wTree.get_widget("label4").set_text(_("Button icon:")) wTree.get_widget("label5").set_text(_("Search command:")) wTree.get_widget("placesLabel").set_text(_("Places")) wTree.get_widget("allowscrollbarcheckbutton").set_label(_("Allow Scrollbar")) wTree.get_widget("placesHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultPlacesFrameLabel").set_text(_("Toggle Default Places:")) wTree.get_widget("computercheckbutton").set_label(_("Computer")) wTree.get_widget("homecheckbutton").set_label(_("Home Folder")) wTree.get_widget("networkcheckbutton").set_label(_("Network")) wTree.get_widget("desktopcheckbutton").set_label(_("Desktop")) wTree.get_widget("trashcheckbutton").set_label(_("Trash")) wTree.get_widget("customPlacesFrameLabel").set_text(_("Custom Places:")) wTree.get_widget("systemLabel").set_text(_("System")) wTree.get_widget("allowscrollbarcheckbutton1").set_label(_("Allow Scrollbar")) wTree.get_widget("systemHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultItemsFrameLabel").set_text(_("Toggle Default Items:")) wTree.get_widget("softwaremanagercheckbutton").set_label(_("Software Manager")) wTree.get_widget("packagemanagercheckbutton").set_label(_("Package Manager")) wTree.get_widget("controlcentercheckbutton").set_label(_("Control Center")) wTree.get_widget("terminalcheckbutton").set_label(_("Terminal")) wTree.get_widget("lockcheckbutton").set_label(_("Lock Screen")) wTree.get_widget("logoutcheckbutton").set_label(_("Log Out")) wTree.get_widget("quitcheckbutton").set_label(_("Quit")) self.editPlaceDialogTitle = (_("Edit Place")) self.newPlaceDialogTitle = (_("New Place")) self.folderChooserDialogTitle = (_("Select a folder")) wTree.get_widget("hotkey_label").set_text(_("Keyboard shortcut:")) self.startWithFavorites = wTree.get_widget( "startWithFavorites" ) self.showSidepane = wTree.get_widget( "showSidepane" ) self.showAppComments = wTree.get_widget( "showAppComments" ) self.showCategoryIcons = wTree.get_widget( "showCategoryIcons" ) self.showRecentPlugin = wTree.get_widget( "showRecentPlugin" ) self.swapGeneric = wTree.get_widget("swapGeneric") self.hover = wTree.get_widget( "hover" ) self.hoverDelay = wTree.get_widget( "hoverDelay" ) self.bttniconSize = wTree.get_widget( "main_button_icon_size" ) self.iconSize = wTree.get_widget( "iconSize" ) self.favIconSize = wTree.get_widget( "favIconSize" ) self.favCols = wTree.get_widget( "numFavCols" ) self.borderWidth = wTree.get_widget( "borderWidth" ) self.opacity = wTree.get_widget( "opacity" ) self.useCustomColors = wTree.get_widget( "useCustomColors" ) self.backgroundColor = wTree.get_widget( "backgroundColor" ) self.borderColor = wTree.get_widget( "borderColor" ) self.headingColor = wTree.get_widget( "headingColor" ) self.backgroundColorLabel = wTree.get_widget( "backgroundColorLabel" ) self.borderColorLabel = wTree.get_widget( "borderColorLabel" ) self.headingColorLabel = wTree.get_widget( "headingColorLabel" ) self.showButtonIcon = wTree.get_widget( "showButtonIcon" ) self.buttonText = wTree.get_widget( "buttonText" ) self.hotkeyText = wTree.get_widget( "hotkeyText" ) self.buttonIcon = wTree.get_widget( "buttonIcon" ) self.buttonIconImage = wTree.get_widget( "image_button_icon" ) self.searchCommand = wTree.get_widget( "search_command" ) self.computertoggle = wTree.get_widget( "computercheckbutton" ) self.homefoldertoggle = wTree.get_widget( "homecheckbutton" ) self.networktoggle = wTree.get_widget( "networkcheckbutton" ) self.desktoptoggle = wTree.get_widget( "desktopcheckbutton" ) self.trashtoggle = wTree.get_widget( "trashcheckbutton" ) self.customplacestree = wTree.get_widget( "customplacestree" ) self.allowPlacesScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton" ) self.placesHeightButton = wTree.get_widget( "placesHeightSpinButton" ) if (self.allowPlacesScrollbarToggle.get_active() == False): self.placesHeightButton.set_sensitive(False) self.allowPlacesScrollbarToggle.connect("toggled", self.togglePlacesHeightEnabled ) self.softwareManagerToggle = wTree.get_widget( "softwaremanagercheckbutton" ) self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton" ) self.controlCenterToggle = wTree.get_widget( "controlcentercheckbutton" ) self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton" ) self.terminalToggle = wTree.get_widget( "terminalcheckbutton" ) self.lockToggle = wTree.get_widget( "lockcheckbutton" ) self.logoutToggle = wTree.get_widget( "logoutcheckbutton" ) self.quitToggle = wTree.get_widget( "quitcheckbutton" ) self.allowSystemScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton1" ) self.systemHeightButton = wTree.get_widget( "systemHeightSpinButton" ) if (self.allowSystemScrollbarToggle.get_active() == False): self.systemHeightButton.set_sensitive(False) self.allowSystemScrollbarToggle.connect("toggled", self.toggleSystemHeightEnabled ) if os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg"): wTree.get_widget( "softwaremanagercheckbutton" ).show() else: wTree.get_widget( "softwaremanagercheckbutton" ).hide() wTree.get_widget( "closeButton" ).connect("clicked", gtk.main_quit ) self.gconf = EasyGConf( "/apps/mintMenu/" ) self.gconfApplications = EasyGConf( "/apps/mintMenu/plugins/applications/" ) self.gconfPlaces = EasyGConf( "/apps/mintMenu/plugins/places/" ) self.gconfSystem = EasyGConf( "/apps/mintMenu/plugins/system-management/" ) self.useCustomColors.connect( "toggled", self.toggleUseCustomColors ) self.bindGconfValueToWidget( self.gconf, "bool", "start_with_favorites", self.startWithFavorites, "toggled", self.startWithFavorites.set_active, self.startWithFavorites.get_active ) self.bindGconfValueToWidget( self.gconf, "bool", "show_side_pane", self.showSidepane, "toggled", self.showSidepane.set_active, self.showSidepane.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "show_application_comments", self.showAppComments, "toggled", self.showAppComments.set_active, self.showAppComments.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "show_category_icons", self.showCategoryIcons, "toggled", self.showCategoryIcons.set_active, self.showCategoryIcons.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "categories_mouse_over", self.hover, "toggled", self.hover.set_active, self.hover.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "swap_generic_name", self.swapGeneric, "toggled", self.swapGeneric.set_active, self.swapGeneric.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "int", "category_hover_delay", self.hoverDelay, "value-changed", self.hoverDelay.set_value, self.hoverDelay.get_value ) self.bindGconfValueToWidget( self.gconfApplications, "int", "icon_size", self.iconSize, "value-changed", self.iconSize.set_value, self.iconSize.get_value ) self.bindGconfValueToWidget( self.gconf, "int", "applet_icon_size", self.bttniconSize, "value-changed", self.bttniconSize.set_value, self.bttniconSize.get_value ) self.bindGconfValueToWidget( self.gconfApplications, "int", "favicon_size", self.favIconSize, "value-changed", self.favIconSize.set_value, self.favIconSize.get_value ) self.bindGconfValueToWidget( self.gconfApplications, "int", "fav_cols", self.favCols, "value-changed", self.favCols.set_value, self.favCols.get_value ) self.bindGconfValueToWidget( self.gconf, "int", "border_width", self.borderWidth, "value-changed", self.borderWidth.set_value, self.borderWidth.get_value_as_int ) self.bindGconfValueToWidget( self.gconf, "int", "opacity", self.opacity, "value-changed", self.opacity.set_value, self.opacity.get_value_as_int ) self.bindGconfValueToWidget( self.gconf, "bool", "use_custom_color", self.useCustomColors, "toggled", self.useCustomColors.set_active, self.useCustomColors.get_active ) self.bindGconfValueToWidget( self.gconf, "color", "custom_color", self.backgroundColor, "color-set", self.backgroundColor.set_color, self.getBackgroundColor ) self.bindGconfValueToWidget( self.gconf, "color", "custom_heading_color", self.headingColor, "color-set", self.headingColor.set_color, self.getHeadingColor ) self.bindGconfValueToWidget( self.gconf, "color", "custom_border_color", self.borderColor, "color-set", self.borderColor.set_color, self.getBorderColor ) self.bindGconfValueToWidget( self.gconf, "bool", "hide_applet_icon", self.showButtonIcon, "toggled", self.setShowButtonIcon, self.getShowButtonIcon ) self.bindGconfValueToWidget( self.gconf, "string", "applet_text", self.buttonText, "changed", self.buttonText.set_text, self.buttonText.get_text ) self.bindGconfValueToWidget( self.gconf, "string", "hot_key", self.hotkeyText, "changed", self.hotkeyText.set_text, self.hotkeyText.get_text ) self.bindGconfValueToWidget( self.gconf, "string", "applet_icon", self.buttonIcon, "changed", self.setButtonIcon, self.buttonIcon.get_text ) self.bindGconfValueToWidget( self.gconfApplications, "string", "search_command", self.searchCommand, "changed", self.searchCommand.set_text, self.searchCommand.get_text ) self.showRecentPlugin.connect("toggled", self.toggleRecent ) self.showRecentPlugin.set_active( self.getRecentToggle() ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_computer", self.computertoggle, "toggled", self.computertoggle.set_active, self.computertoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_home_folder", self.homefoldertoggle, "toggled", self.homefoldertoggle.set_active, self.homefoldertoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_network", self.networktoggle, "toggled", self.networktoggle.set_active, self.networktoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_desktop", self.desktoptoggle, "toggled", self.desktoptoggle.set_active, self.desktoptoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_trash", self.trashtoggle, "toggled", self.trashtoggle.set_active, self.trashtoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "int", "height", self.placesHeightButton, "value-changed", self.placesHeightButton.set_value, self.placesHeightButton.get_value_as_int ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "allowScrollbar", self.allowPlacesScrollbarToggle, "toggled", self.allowPlacesScrollbarToggle.set_active, self.allowPlacesScrollbarToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_software_manager", self.softwareManagerToggle, "toggled", self.softwareManagerToggle.set_active, self.softwareManagerToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_package_manager", self.packageManagerToggle, "toggled", self.packageManagerToggle.set_active, self.packageManagerToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_control_center", self.controlCenterToggle, "toggled", self.controlCenterToggle.set_active, self.controlCenterToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_terminal", self.terminalToggle, "toggled", self.terminalToggle.set_active, self.terminalToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_lock_screen", self.lockToggle, "toggled", self.lockToggle.set_active, self.lockToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_logout", self.logoutToggle, "toggled", self.logoutToggle.set_active, self.logoutToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_quit", self.quitToggle, "toggled", self.quitToggle.set_active, self.quitToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "int", "height", self.systemHeightButton, "value-changed", self.systemHeightButton.set_value, self.systemHeightButton.get_value_as_int ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "allowScrollbar", self.allowSystemScrollbarToggle, "toggled", self.allowSystemScrollbarToggle.set_active, self.allowSystemScrollbarToggle.get_active ) self.customplacepaths = self.gconfPlaces.get( "list-string", "custom_paths", [ ] ) self.customplacenames = self.gconfPlaces.get( "list-string", "custom_names", [ ] ) self.customplacestreemodel = gtk.ListStore( str, str) self.cell = gtk.CellRendererText() for count in range( len(self.customplacepaths) ): self.customplacestreemodel.append( [ self.customplacenames[count], self.customplacepaths[count] ] ) self.customplacestreemodel.connect("row-changed", self.updatePlacesGconf) self.customplacestreemodel.connect("row-deleted", self.updatePlacesGconf) self.customplacestreemodel.connect("rows-reordered", self.updatePlacesGconf) self.customplacestree.set_model( self.customplacestreemodel ) self.namescolumn = gtk.TreeViewColumn( _("Name"), self.cell, text = 0 ) self.placescolumn = gtk.TreeViewColumn( _("Path"), self.cell, text = 1 ) self.customplacestree.append_column( self.namescolumn ) self.customplacestree.append_column( self.placescolumn ) wTree.get_widget("newButton").connect("clicked", self.newPlace) wTree.get_widget("editButton").connect("clicked", self.editPlace) wTree.get_widget("upButton").connect("clicked", self.moveUp) wTree.get_widget("downButton").connect("clicked", self.moveDown) wTree.get_widget("removeButton").connect("clicked", self.removePlace) self.mainWindow.present() self.getBackgroundColor()
class mintMenuConfig( object ): def __init__( self ): self.path = os.path.abspath( os.path.dirname( sys.argv[0] ) ) # Load glade file and extract widgets gladefile = os.path.join( self.path, "mintMenuConfig.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.mainWindow=wTree.get_widget("mainWindow") #i18n self.mainWindow.set_title(_("Menu preferences")) self.mainWindow.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg") wTree.get_widget("startWithFavorites").set_label(_("Always start with favorites pane")) wTree.get_widget("showSidepane").set_label(_("Show sidepane")) wTree.get_widget("showButtonIcon").set_label(_("Show button icon")) wTree.get_widget("useCustomColors").set_label(_("Use custom colors")) wTree.get_widget("showRecentPlugin").set_label(_("Show recent documents")) wTree.get_widget("showAppComments").set_label(_("Show application comments")) wTree.get_widget("showCategoryIcons").set_label(_("Show category icons")) wTree.get_widget("hover").set_label(_("Hover")) wTree.get_widget("swapGeneric").set_label(_("Swap name and generic name")) wTree.get_widget("label11").set_text(_("Border width:")) wTree.get_widget("label2").set_text(_("pixels")) wTree.get_widget("label8").set_text(_("Opacity:")) wTree.get_widget("label9").set_text("%") wTree.get_widget("buttonTextLabel").set_text(_("Button text:")) wTree.get_widget("label1").set_text(_("Options")) wTree.get_widget("label23").set_text(_("Applications")) wTree.get_widget("colorsLabel").set_text(_("Colors")) wTree.get_widget("favLabel").set_text(_("Favorites")) wTree.get_widget("label3").set_text(_("Main button")) wTree.get_widget("backgroundColorLabel").set_text(_("Background:")) wTree.get_widget("headingColorLabel").set_text(_("Headings:")) wTree.get_widget("borderColorLabel").set_text(_("Borders:")) #wTree.get_widget("applicationsLabel").set_text(_("Applications")) #wTree.get_widget("favoritesLabel").set_text(_("Favorites")) wTree.get_widget("numberColumnsLabel").set_text(_("Number of columns:")) wTree.get_widget("iconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("iconSizeLabel2").set_text(_("Icon size:")) wTree.get_widget("label44").set_text(_("Icon size:")) wTree.get_widget("hoverLabel").set_text(_("Hover delay (ms):")) wTree.get_widget("label4").set_text(_("Button icon:")) wTree.get_widget("label5").set_text(_("Search command:")) wTree.get_widget("placesLabel").set_text(_("Places")) wTree.get_widget("allowscrollbarcheckbutton").set_label(_("Allow Scrollbar")) wTree.get_widget("placesHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultPlacesFrameLabel").set_text(_("Toggle Default Places:")) wTree.get_widget("computercheckbutton").set_label(_("Computer")) wTree.get_widget("homecheckbutton").set_label(_("Home Folder")) wTree.get_widget("networkcheckbutton").set_label(_("Network")) wTree.get_widget("desktopcheckbutton").set_label(_("Desktop")) wTree.get_widget("trashcheckbutton").set_label(_("Trash")) wTree.get_widget("customPlacesFrameLabel").set_text(_("Custom Places:")) wTree.get_widget("systemLabel").set_text(_("System")) wTree.get_widget("allowscrollbarcheckbutton1").set_label(_("Allow Scrollbar")) wTree.get_widget("systemHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultItemsFrameLabel").set_text(_("Toggle Default Items:")) wTree.get_widget("softwaremanagercheckbutton").set_label(_("Software Manager")) wTree.get_widget("packagemanagercheckbutton").set_label(_("Package Manager")) wTree.get_widget("controlcentercheckbutton").set_label(_("Control Center")) wTree.get_widget("terminalcheckbutton").set_label(_("Terminal")) wTree.get_widget("lockcheckbutton").set_label(_("Lock Screen")) wTree.get_widget("logoutcheckbutton").set_label(_("Log Out")) wTree.get_widget("quitcheckbutton").set_label(_("Quit")) self.editPlaceDialogTitle = (_("Edit Place")) self.newPlaceDialogTitle = (_("New Place")) self.folderChooserDialogTitle = (_("Select a folder")) wTree.get_widget("hotkey_label").set_text(_("Keyboard shortcut:")) self.startWithFavorites = wTree.get_widget( "startWithFavorites" ) self.showSidepane = wTree.get_widget( "showSidepane" ) self.showAppComments = wTree.get_widget( "showAppComments" ) self.showCategoryIcons = wTree.get_widget( "showCategoryIcons" ) self.showRecentPlugin = wTree.get_widget( "showRecentPlugin" ) self.swapGeneric = wTree.get_widget("swapGeneric") self.hover = wTree.get_widget( "hover" ) self.hoverDelay = wTree.get_widget( "hoverDelay" ) self.bttniconSize = wTree.get_widget( "main_button_icon_size" ) self.iconSize = wTree.get_widget( "iconSize" ) self.favIconSize = wTree.get_widget( "favIconSize" ) self.favCols = wTree.get_widget( "numFavCols" ) self.borderWidth = wTree.get_widget( "borderWidth" ) self.opacity = wTree.get_widget( "opacity" ) self.useCustomColors = wTree.get_widget( "useCustomColors" ) self.backgroundColor = wTree.get_widget( "backgroundColor" ) self.borderColor = wTree.get_widget( "borderColor" ) self.headingColor = wTree.get_widget( "headingColor" ) self.backgroundColorLabel = wTree.get_widget( "backgroundColorLabel" ) self.borderColorLabel = wTree.get_widget( "borderColorLabel" ) self.headingColorLabel = wTree.get_widget( "headingColorLabel" ) self.showButtonIcon = wTree.get_widget( "showButtonIcon" ) self.buttonText = wTree.get_widget( "buttonText" ) self.hotkeyText = wTree.get_widget( "hotkeyText" ) self.buttonIcon = wTree.get_widget( "buttonIcon" ) self.buttonIconImage = wTree.get_widget( "image_button_icon" ) self.searchCommand = wTree.get_widget( "search_command" ) self.computertoggle = wTree.get_widget( "computercheckbutton" ) self.homefoldertoggle = wTree.get_widget( "homecheckbutton" ) self.networktoggle = wTree.get_widget( "networkcheckbutton" ) self.desktoptoggle = wTree.get_widget( "desktopcheckbutton" ) self.trashtoggle = wTree.get_widget( "trashcheckbutton" ) self.customplacestree = wTree.get_widget( "customplacestree" ) self.allowPlacesScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton" ) self.placesHeightButton = wTree.get_widget( "placesHeightSpinButton" ) if (self.allowPlacesScrollbarToggle.get_active() == False): self.placesHeightButton.set_sensitive(False) self.allowPlacesScrollbarToggle.connect("toggled", self.togglePlacesHeightEnabled ) self.softwareManagerToggle = wTree.get_widget( "softwaremanagercheckbutton" ) self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton" ) self.controlCenterToggle = wTree.get_widget( "controlcentercheckbutton" ) self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton" ) self.terminalToggle = wTree.get_widget( "terminalcheckbutton" ) self.lockToggle = wTree.get_widget( "lockcheckbutton" ) self.logoutToggle = wTree.get_widget( "logoutcheckbutton" ) self.quitToggle = wTree.get_widget( "quitcheckbutton" ) self.allowSystemScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton1" ) self.systemHeightButton = wTree.get_widget( "systemHeightSpinButton" ) if (self.allowSystemScrollbarToggle.get_active() == False): self.systemHeightButton.set_sensitive(False) self.allowSystemScrollbarToggle.connect("toggled", self.toggleSystemHeightEnabled ) if os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg"): wTree.get_widget( "softwaremanagercheckbutton" ).show() else: wTree.get_widget( "softwaremanagercheckbutton" ).hide() wTree.get_widget( "closeButton" ).connect("clicked", gtk.main_quit ) self.gconf = EasyGConf( "/apps/mintMenu/" ) self.gconfApplications = EasyGConf( "/apps/mintMenu/plugins/applications/" ) self.gconfPlaces = EasyGConf( "/apps/mintMenu/plugins/places/" ) self.gconfSystem = EasyGConf( "/apps/mintMenu/plugins/system-management/" ) self.useCustomColors.connect( "toggled", self.toggleUseCustomColors ) self.bindGconfValueToWidget( self.gconf, "bool", "start_with_favorites", self.startWithFavorites, "toggled", self.startWithFavorites.set_active, self.startWithFavorites.get_active ) self.bindGconfValueToWidget( self.gconf, "bool", "show_side_pane", self.showSidepane, "toggled", self.showSidepane.set_active, self.showSidepane.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "show_application_comments", self.showAppComments, "toggled", self.showAppComments.set_active, self.showAppComments.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "show_category_icons", self.showCategoryIcons, "toggled", self.showCategoryIcons.set_active, self.showCategoryIcons.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "categories_mouse_over", self.hover, "toggled", self.hover.set_active, self.hover.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "bool", "swap_generic_name", self.swapGeneric, "toggled", self.swapGeneric.set_active, self.swapGeneric.get_active ) self.bindGconfValueToWidget( self.gconfApplications, "int", "category_hover_delay", self.hoverDelay, "value-changed", self.hoverDelay.set_value, self.hoverDelay.get_value ) self.bindGconfValueToWidget( self.gconfApplications, "int", "icon_size", self.iconSize, "value-changed", self.iconSize.set_value, self.iconSize.get_value ) self.bindGconfValueToWidget( self.gconf, "int", "applet_icon_size", self.bttniconSize, "value-changed", self.bttniconSize.set_value, self.bttniconSize.get_value ) self.bindGconfValueToWidget( self.gconfApplications, "int", "favicon_size", self.favIconSize, "value-changed", self.favIconSize.set_value, self.favIconSize.get_value ) self.bindGconfValueToWidget( self.gconfApplications, "int", "fav_cols", self.favCols, "value-changed", self.favCols.set_value, self.favCols.get_value ) self.bindGconfValueToWidget( self.gconf, "int", "border_width", self.borderWidth, "value-changed", self.borderWidth.set_value, self.borderWidth.get_value_as_int ) self.bindGconfValueToWidget( self.gconf, "int", "opacity", self.opacity, "value-changed", self.opacity.set_value, self.opacity.get_value_as_int ) self.bindGconfValueToWidget( self.gconf, "bool", "use_custom_color", self.useCustomColors, "toggled", self.useCustomColors.set_active, self.useCustomColors.get_active ) self.bindGconfValueToWidget( self.gconf, "color", "custom_color", self.backgroundColor, "color-set", self.backgroundColor.set_color, self.getBackgroundColor ) self.bindGconfValueToWidget( self.gconf, "color", "custom_heading_color", self.headingColor, "color-set", self.headingColor.set_color, self.getHeadingColor ) self.bindGconfValueToWidget( self.gconf, "color", "custom_border_color", self.borderColor, "color-set", self.borderColor.set_color, self.getBorderColor ) self.bindGconfValueToWidget( self.gconf, "bool", "hide_applet_icon", self.showButtonIcon, "toggled", self.setShowButtonIcon, self.getShowButtonIcon ) self.bindGconfValueToWidget( self.gconf, "string", "applet_text", self.buttonText, "changed", self.buttonText.set_text, self.buttonText.get_text ) self.bindGconfValueToWidget( self.gconf, "string", "hot_key", self.hotkeyText, "changed", self.hotkeyText.set_text, self.hotkeyText.get_text ) self.bindGconfValueToWidget( self.gconf, "string", "applet_icon", self.buttonIcon, "changed", self.setButtonIcon, self.buttonIcon.get_text ) self.bindGconfValueToWidget( self.gconfApplications, "string", "search_command", self.searchCommand, "changed", self.searchCommand.set_text, self.searchCommand.get_text ) self.showRecentPlugin.connect("toggled", self.toggleRecent ) self.showRecentPlugin.set_active( self.getRecentToggle() ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_computer", self.computertoggle, "toggled", self.computertoggle.set_active, self.computertoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_home_folder", self.homefoldertoggle, "toggled", self.homefoldertoggle.set_active, self.homefoldertoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_network", self.networktoggle, "toggled", self.networktoggle.set_active, self.networktoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_desktop", self.desktoptoggle, "toggled", self.desktoptoggle.set_active, self.desktoptoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "show_trash", self.trashtoggle, "toggled", self.trashtoggle.set_active, self.trashtoggle.get_active ) self.bindGconfValueToWidget( self.gconfPlaces, "int", "height", self.placesHeightButton, "value-changed", self.placesHeightButton.set_value, self.placesHeightButton.get_value_as_int ) self.bindGconfValueToWidget( self.gconfPlaces, "bool", "allowScrollbar", self.allowPlacesScrollbarToggle, "toggled", self.allowPlacesScrollbarToggle.set_active, self.allowPlacesScrollbarToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_software_manager", self.softwareManagerToggle, "toggled", self.softwareManagerToggle.set_active, self.softwareManagerToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_package_manager", self.packageManagerToggle, "toggled", self.packageManagerToggle.set_active, self.packageManagerToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_control_center", self.controlCenterToggle, "toggled", self.controlCenterToggle.set_active, self.controlCenterToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_terminal", self.terminalToggle, "toggled", self.terminalToggle.set_active, self.terminalToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_lock_screen", self.lockToggle, "toggled", self.lockToggle.set_active, self.lockToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_logout", self.logoutToggle, "toggled", self.logoutToggle.set_active, self.logoutToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "show_quit", self.quitToggle, "toggled", self.quitToggle.set_active, self.quitToggle.get_active ) self.bindGconfValueToWidget( self.gconfSystem, "int", "height", self.systemHeightButton, "value-changed", self.systemHeightButton.set_value, self.systemHeightButton.get_value_as_int ) self.bindGconfValueToWidget( self.gconfSystem, "bool", "allowScrollbar", self.allowSystemScrollbarToggle, "toggled", self.allowSystemScrollbarToggle.set_active, self.allowSystemScrollbarToggle.get_active ) self.customplacepaths = self.gconfPlaces.get( "list-string", "custom_paths", [ ] ) self.customplacenames = self.gconfPlaces.get( "list-string", "custom_names", [ ] ) self.customplacestreemodel = gtk.ListStore( str, str) self.cell = gtk.CellRendererText() for count in range( len(self.customplacepaths) ): self.customplacestreemodel.append( [ self.customplacenames[count], self.customplacepaths[count] ] ) self.customplacestreemodel.connect("row-changed", self.updatePlacesGconf) self.customplacestreemodel.connect("row-deleted", self.updatePlacesGconf) self.customplacestreemodel.connect("rows-reordered", self.updatePlacesGconf) self.customplacestree.set_model( self.customplacestreemodel ) self.namescolumn = gtk.TreeViewColumn( _("Name"), self.cell, text = 0 ) self.placescolumn = gtk.TreeViewColumn( _("Path"), self.cell, text = 1 ) self.customplacestree.append_column( self.namescolumn ) self.customplacestree.append_column( self.placescolumn ) wTree.get_widget("newButton").connect("clicked", self.newPlace) wTree.get_widget("editButton").connect("clicked", self.editPlace) wTree.get_widget("upButton").connect("clicked", self.moveUp) wTree.get_widget("downButton").connect("clicked", self.moveDown) wTree.get_widget("removeButton").connect("clicked", self.removePlace) self.mainWindow.present() self.getBackgroundColor() def toggleRecent(self, widget): if self.showRecentPlugin.get_active(): os.system("gconftool-2 --type list --list-type string --set /apps/mintMenu/plugins_list [newpane,places,system_management,newpane,applications,newpane,recent]") else: os.system("gconftool-2 --type list --list-type string --set /apps/mintMenu/plugins_list [newpane,places,system_management,newpane,applications]") def getRecentToggle(self): if (commands.getoutput("gconftool-2 --get /apps/mintMenu/plugins_list | grep recent | wc -l") == "0"): return False else: return True def setShowButtonIcon( self, value ): self.showButtonIcon.set_active(not value ) def setButtonIcon( self, value ): self.buttonIcon.set_text(value) self.buttonIconImage.set_from_file(value) def getShowButtonIcon( self ): return not self.showButtonIcon.get_active() def bindGconfValueToWidget( self, gconf, gconfType, gconfPath, widget, changeEvent, setter, getter ): widget.connect( changeEvent, lambda *args: self.callGetter( gconf, gconfType, gconfPath, getter ) ) gconf.notifyAdd( gconfPath, self.callSetter, args = [ gconfType, setter ] ) if gconfType == "color": setter( gtk.gdk.color_parse( gconf.get( gconfType, gconfPath ) ) ) else: setter( gconf.get( gconfType, gconfPath ) ) def callSetter( self, client, connection_id, entry, args ): if args[0] == "bool": args[1]( entry.get_value().get_bool() ) elif args[0] == "string": args[1]( entry.get_value().get_string() ) elif args[0] == "int": args[1]( entry.get_value().get_int() ) elif args[0] == "color": args[1]( gtk.gdk.color_parse( entry.get_value().get_string() ) ) def callGetter( self, gconf, gconfType, gconfPath, getter ): gconf.set( gconfType, gconfPath, getter() ) def toggleUseCustomColors( self, widget ): self.backgroundColor.set_sensitive( widget.get_active() ) self.borderColor.set_sensitive( widget.get_active() ) self.headingColor.set_sensitive( widget.get_active() ) self.backgroundColorLabel.set_sensitive( widget.get_active() ) self.borderColorLabel.set_sensitive( widget.get_active() ) self.headingColorLabel.set_sensitive( widget.get_active() ) def getBackgroundColor( self ): return self.gdkColorToString( self.backgroundColor.get_color() ) def getBorderColor( self ): return self.gdkColorToString( self.borderColor.get_color() ) def getHeadingColor( self ): return self.gdkColorToString( self.headingColor.get_color() ) def gdkColorToString( self, gdkColor ): return "#%.2X%.2X%.2X" % ( gdkColor.red / 256, gdkColor.green / 256, gdkColor.blue / 256 ) def moveUp( self, upButton ): treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] if ( treeselection != None ): lagiter = self.customplacestreemodel.get_iter_first() nextiter = self.customplacestreemodel.get_iter_first() while ( (self.customplacestreemodel.get_path(nextiter) != self.customplacestreemodel.get_path(currentiter)) & (nextiter != None)): lagiter = nextiter nextiter = self.customplacestreemodel.iter_next(nextiter) if (nextiter != None): self.customplacestreemodel.swap(currentiter, lagiter) return def newPlace(self, newButton): gladefile = os.path.join( self.path, "mintMenuConfig.glade" ) wTree = gtk.glade.XML( gladefile, "editPlaceDialog" ) wTree.get_widget("label2").set_text(_("Name:")) wTree.get_widget("label1").set_text(_("Path:")) folderChooserTree = gtk.glade.XML( gladefile, "fileChooserDialog" ) newPlaceDialog = wTree.get_widget( "editPlaceDialog" ) folderChooserDialog = folderChooserTree.get_widget( "fileChooserDialog" ) newPlaceDialog.set_transient_for(self.mainWindow) newPlaceDialog.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg") newPlaceDialog.set_title(self.newPlaceDialogTitle) folderChooserDialog.set_title(self.folderChooserDialogTitle) newPlaceDialog.set_default_response(gtk.RESPONSE_OK) newPlaceName = wTree.get_widget( "nameEntryBox" ) newPlacePath = wTree.get_widget( "pathEntryBox" ) folderButton = wTree.get_widget( "folderButton" ) def chooseFolder(folderButton): currentPath = newPlacePath.get_text() if (currentPath!=""): folderChooserDialog.select_filename(currentPath) response = folderChooserDialog.run() folderChooserDialog.hide() if (response == gtk.RESPONSE_OK): newPlacePath.set_text( folderChooserDialog.get_filenames()[0] ) folderButton.connect("clicked", chooseFolder) response = newPlaceDialog.run() newPlaceDialog.hide() if (response == gtk.RESPONSE_OK ): name = newPlaceName.get_text() path = newPlacePath.get_text() if (name != "" and path !=""): self.customplacestreemodel.append( (name, path) ) def editPlace(self, editButton): gladefile = os.path.join( self.path, "mintMenuConfig.glade" ) wTree = gtk.glade.XML( gladefile, "editPlaceDialog" ) wTree.get_widget("label2").set_text(_("Name:")) wTree.get_widget("label1").set_text(_("Path:")) folderChooserTree = gtk.glade.XML( gladefile, "fileChooserDialog" ) editPlaceDialog = wTree.get_widget( "editPlaceDialog" ) folderChooserDialog = folderChooserTree.get_widget( "fileChooserDialog" ) editPlaceDialog.set_transient_for(self.mainWindow) editPlaceDialog.set_icon_from_file("/usr/lib/linuxmint/mintMenu/icon.svg") editPlaceDialog.set_title(self.editPlaceDialogTitle) folderChooserDialog.set_title(self.folderChooserDialogTitle) editPlaceDialog.set_default_response(gtk.RESPONSE_OK) editPlaceName = wTree.get_widget( "nameEntryBox" ) editPlacePath = wTree.get_widget( "pathEntryBox" ) folderButton = wTree.get_widget( "folderButton" ) treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] if (currentiter != None): initName = self.customplacestreemodel.get_value(currentiter, 0) initPath = self.customplacestreemodel.get_value(currentiter, 1) editPlaceName.set_text(initName) editPlacePath.set_text(initPath) def chooseFolder(folderButton): currentPath = editPlacePath.get_text() if (currentPath!=""): folderChooserDialog.select_filename(currentPath) response = folderChooserDialog.run() folderChooserDialog.hide() if (response == gtk.RESPONSE_OK): editPlacePath.set_text( folderChooserDialog.get_filenames()[0] ) folderButton.connect("clicked", chooseFolder) response = editPlaceDialog.run() editPlaceDialog.hide() if (response == gtk.RESPONSE_OK): name = editPlaceName.get_text() path = editPlacePath.get_text() if (name != "" and path != ""): self.customplacestreemodel.set_value(currentiter, 0, name) self.customplacestreemodel.set_value(currentiter, 1, path) def moveDown(self, downButton): treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] nextiter = self.customplacestreemodel.iter_next(currentiter) if (nextiter != None): self.customplacestreemodel.swap(currentiter, nextiter) return def removePlace(self, removeButton): treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] if (currentiter != None): self.customplacestreemodel.remove(currentiter) return def togglePlacesHeightEnabled(self, toggle): if (toggle.get_active() == True): self.placesHeightButton.set_sensitive(True) else: self.placesHeightButton.set_sensitive(False) def toggleSystemHeightEnabled(self, toggle): if (toggle.get_active() == True): self.systemHeightButton.set_sensitive(True) else: self.systemHeightButton.set_sensitive(False) def updatePlacesGconf(self, treemodel, path, iter = None, new_order = None): # Do only if not partway though an append operation; Append = insert+change+change and each creates a signal if ((iter == None) or (self.customplacestreemodel.get_value(iter, 1) != None)): treeiter = self.customplacestreemodel.get_iter_first() customplacenames = [ ] customplacepaths = [ ] while( treeiter != None ): customplacenames = customplacenames + [ self.customplacestreemodel.get_value(treeiter, 0 ) ] customplacepaths = customplacepaths + [ self.customplacestreemodel.get_value(treeiter, 1 ) ] treeiter = self.customplacestreemodel.iter_next(treeiter) self.gconfPlaces.set( "list-string", "custom_paths", customplacepaths) self.gconfPlaces.set( "list-string", "custom_names", customplacenames)
class pluginclass( object ): def __init__( self, mintMenuWin, toggleButton, de ): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join( os.path.dirname( __file__ ), "system_management.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.systemBtnHolder = wTree.get_widget( "system_button_holder" ) self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) self.scrolledWindow = wTree.get_widget( "scrolledwindow2" ) # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("System") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget( "System" ) # Items to get custom colors self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] # Gconf stuff self.gconf = EasyGConf( "/apps/mintMenu/plugins/system-management/" ) self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) self.gconf.notifyAdd( "show_control_center", self.RegenPlugin ) self.gconf.notifyAdd( "show_lock_screen", self.RegenPlugin ) self.gconf.notifyAdd( "show_logout", self.RegenPlugin ) self.gconf.notifyAdd( "show_package_manager", self.RegenPlugin ) self.gconf.notifyAdd( "show_software_manager", self.RegenPlugin ) self.gconf.notifyAdd( "show_terminal", self.RegenPlugin ) self.gconf.notifyAdd( "show_quit", self.RegenPlugin ) self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) self.GetGconfEntries() self.content_holder.set_size_request( self.width, self.height ) def destroy( self ): self.gconf.notifyRemoveAll() def wake (self) : pass def changePluginSize( self, client, connection_id, entry, args ): self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) if entry.get_key() == self.gconf.gconfDir+"width": self.width = entry.get_value().get_int() elif entry.get_key() == self.gconf.gconfDir+"height": if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) else: self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) self.height = entry.get_value().get_int() self.content_holder.set_size_request( self.width, self.height ) def RegenPlugin( self, *args, **kargs ): self.GetGconfEntries() self.ClearAll() self.do_standard_items() def GetGconfEntries( self ): self.width = self.gconf.get( "int", "width", 200 ) self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) self.height = self.gconf.get( "int", "height", 180 ) self.content_holder.set_size_request( self.width, self.height ) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) self.content_holder.set_size_request( self.width, self.height ) self.iconsize = self.gconf.get( "int","icon_size", 16 ) # Check toggles self.showSoftwareManager = self.gconf.get( "bool", "show_software_manager", True ) self.showPackageManager = self.gconf.get( "bool", "show_package_manager", True ) self.showControlCenter = self.gconf.get( "bool", "show_control_center", True ) self.showTerminal = self.gconf.get( "bool", "show_terminal", True ) self.showLockScreen = self.gconf.get( "bool", "show_lock_screen", True ) self.showLogout = self.gconf.get( "bool", "show_logout", True ) self.showQuit = self.gconf.get( "bool", "show_quit", True ) # Hide vertical dotted separator self.hideseparator = self.gconf.get( "bool", "hide_separator", False ) # Plugin icon self.icon = self.gconf.get( "string", 'icon', "preferences-system" ) # Allow plugin to be minimized to the left plugin pane self.sticky = self.gconf.get( "bool", "sticky", False ) self.minimized = self.gconf.get( "bool", "minimized", False ) def ClearAll(self): for child in self.systemBtnHolder.get_children(): child.destroy() for child in self.editableBtnHolder.get_children(): child.destroy() #Add standard items def do_standard_items( self ): if ( self.showSoftwareManager == True ): if os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg"): Button1 = easyButton( "/usr/lib/linuxmint/mintInstall/icon.svg", self.iconsize, [_("Software Manager")], -1, -1 ) Button1.connect( "clicked", self.ButtonClicked, "mintinstall" ) Button1.show() self.systemBtnHolder.pack_start( Button1, False, False ) self.mintMenuWin.setTooltip( Button1, _("Browse and install available software") ) if ( self.showPackageManager == True ): Button2 = easyButton( "applications-system", self.iconsize, [_("Package Manager")], -1, -1 ) Button2.connect( "clicked", self.ButtonClicked, "gksu /usr/sbin/synaptic" ) Button2.show() self.systemBtnHolder.pack_start( Button2, False, False ) self.mintMenuWin.setTooltip( Button2, _("Install, remove and upgrade software packages") ) if ( self.showControlCenter == True ): Button3 = easyButton( "gtk-preferences", self.iconsize, [_("Control Center")], -1, -1 ) if self.de == "xfce": Button3.connect( "clicked", self.ButtonClicked, "xfce4-settings-manager" ) else: Button3.connect( "clicked", self.ButtonClicked, "mate-control-center" ) Button3.show() self.systemBtnHolder.pack_start( Button3, False, False ) self.mintMenuWin.setTooltip( Button3, _("Configure your system") ) if ( self.showTerminal == True ): Button4 = easyButton( "terminal", self.iconsize, [_("Terminal")], -1, -1 ) if os.path.exists("/usr/bin/mate-terminal"): Button4.connect( "clicked", self.ButtonClicked, "mate-terminal" ) else: Button4.connect( "clicked", self.ButtonClicked, "x-terminal-emulator" ) Button4.show() self.systemBtnHolder.pack_start( Button4, False, False ) self.mintMenuWin.setTooltip( Button4, _("Use the command line") ) if self.de == "xfce": Button6 = easyButton( "system-log-out", self.iconsize, [_("Logout")], -1, -1 ) Button6.connect( "clicked", self.ButtonClicked, "xfce4-session-logout" ) Button6.show() self.systemBtnHolder.pack_start( Button6, False, False ) self.mintMenuWin.setTooltip( Button6, _("Log out or switch user") ) else: if ( self.showLockScreen == True ): Button5 = easyButton( "system-lock-screen", self.iconsize, [_("Lock Screen")], -1, -1 ) if os.path.exists("/usr/bin/mate-screensaver-command"): Button5.connect( "clicked", self.ButtonClicked, "mate-screensaver-command -l" ) else: Button5.connect( "clicked", self.ButtonClicked, "xdg-screensaver lock" ) Button5.show() self.systemBtnHolder.pack_start( Button5, False, False ) self.mintMenuWin.setTooltip( Button5, _("Requires password to unlock") ) if ( self.showLogout == True ): Button6 = easyButton( "system-log-out", self.iconsize, [_("Logout")], -1, -1 ) Button6.connect( "clicked", self.ButtonClicked, "mate-session-save --logout-dialog" ) Button6.show() self.systemBtnHolder.pack_start( Button6, False, False ) self.mintMenuWin.setTooltip( Button6, _("Log out or switch user") ) if ( self.showQuit == True ): Button7 = easyButton( "system-shutdown", self.iconsize, [_("Quit")], -1, -1 ) Button7.connect( "clicked", self.ButtonClicked, "mate-session-save --shutdown-dialog" ) Button7.show() self.systemBtnHolder.pack_start( Button7, False, False ) self.mintMenuWin.setTooltip( Button7, _("Shutdown, restart, suspend or hibernate") ) def ButtonClicked( self, widget, Exec ): self.mintMenuWin.hide() if Exec: Execute( Exec ) def do_plugin( self ): self.do_standard_items()
class MainWindow( object ): """This is the main class for the application""" def __init__( self, toggleButton ): self.path = PATH sys.path.append( os.path.join( self.path, "plugins") ) self.detect_desktop_environment() self.icon = ICON self.toggle = toggleButton # Load glade file and extract widgets gladefile = os.path.join( self.path, "mintMenu.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.window = wTree.get_widget( "mainWindow" ) self.paneholder = wTree.get_widget( "paneholder" ) self.border = wTree.get_widget( "border" ) self.panesToColor = [ ] self.headingsToColor = [ ] self.window.connect( "map-event", self.onMap ) self.window.connect( "show", self.onShow ) self.window.connect( "unmap-event", self.onUnmap ) self.window.connect( "button-press-event", self.onButtonPress ) self.window.connect( "key-press-event", self.onKeyPress ) self.window.connect( "grab-broken-event", self.onGrabBroken ) self.window.stick() plugindir = os.path.join( os.path.expanduser( "~" ), ".linuxmint/mintMenu/plugins" ) sys.path.append( plugindir ) dic = {"on_window1_destroy" : self.quit_cb} wTree.signal_autoconnect( dic ) self.gconf = EasyGConf( "/apps/mintMenu/" ) self.getSetGconfEntries() self.SetupMintMenuBorder() self.SetupMintMenuOpacity() self.tooltips = gtk.Tooltips() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() self.PopulatePlugins(); self.gconf.notifyAdd( "plugins_list", self.RegenPlugins ) self.gconf.notifyAdd( "start_with_favorites", self.toggleStartWithFavorites ) self.gconf.notifyAdd( "/apps/panel/global/tooltips_enabled", self.toggleTooltipsEnabled ) self.gconf.notifyAdd( "tooltips_enabled", self.toggleTooltipsEnabled ) self.gconf.notifyAdd( "use_custom_color", self.toggleUseCustomColor ) self.gconf.notifyAdd( "custom_border_color", self.toggleCustomBorderColor ) self.gconf.notifyAdd( "custom_heading_color", self.toggleCustomHeadingColor ) self.gconf.notifyAdd( "custom_color", self.toggleCustomBackgroundColor ) self.gconf.notifyAdd( "border_width", self.toggleBorderWidth ) self.gconf.notifyAdd( "opacity", self.toggleOpacity ) def quit_cb (self): gtk.main_quit() sys.exit(0) def wakePlugins( self ): # Call each plugin and let them know we're showing up for plugin in self.plugins.values(): if hasattr( plugin, "destroy" ): plugin.wake() def toggleTooltipsEnabled( self, client, connection_id, entry, args ): if entry.get_key() == "/apps/panel/global/tooltips_enabled": self.globalEnableTooltips = entry.get_value().get_bool() else: self.enableTooltips = entry.get_value().get_bool() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() def toggleStartWithFavorites( self, client, connection_id, entry, args ): self.startWithFavorites = entry.get_value().get_bool() def toggleBorderWidth( self, client, connection_id, entry, args ): self.borderwidth = entry.get_value().get_int() self.SetupMintMenuBorder() def toggleOpacity( self, client, connection_id, entry, args ): self.opacity = entry.get_value().get_int() self.SetupMintMenuOpacity() def toggleUseCustomColor( self, client, connection_id, entry, args ): self.usecustomcolor = entry.get_value().get_bool() self.SetupMintMenuBorder() self.SetPaneColors( self.panesToColor ) self.SetHeadingStyle( self.headingsToColor ) def toggleCustomBorderColor( self, client, connection_id, entry, args ): self.custombordercolor = entry.get_value().get_string() self.SetupMintMenuBorder() def toggleCustomBackgroundColor( self, client, connection_id, entry, args ): self.customcolor = entry.get_value().get_string() self.SetPaneColors( self.panesToColor ) def toggleCustomHeadingColor( self, client, connection_id, entry, args ): self.customheadingcolor = entry.get_value().get_string() self.SetHeadingStyle( self.headingsToColor ) def getSetGconfEntries( self ): self.pluginlist = self.gconf.get( "list-string", "plugins_list",['places', 'system_management', 'newpane', 'applications'] ) self.dottedfile = os.path.join( self.path, "dotted.png") self.usecustomcolor = self.gconf.get( "bool", "use_custom_color", False ) self.customcolor = self.gconf.get( "color", "custom_color", "#EEEEEE" ) self.customheadingcolor = self.gconf.get( "color", "custom_heading_color", "#001155" ) self.custombordercolor = self.gconf.get( "color", "custom_border_color", "#001155" ) self.borderwidth = self.gconf.get( "int", "border_width", 1 ) self.opacity = self.gconf.get( "int", "opacity", 98 ) self.offset = self.gconf.get( "int", "mintMenu_offset", 0 ) self.enableTooltips = self.gconf.get( "bool", "tooltips_enabled", True ) self.globalEnableTooltips = self.gconf.get( "bool", "/apps/panel/global/tooltips_enabled", True ) self.startWithFavorites = self.gconf.get( "bool", "start_with_favorites", False ) def SetupMintMenuBorder( self ): if self.usecustomcolor: self.window.modify_bg( gtk.STATE_NORMAL, gtk.gdk.color_parse( self.custombordercolor ) ) else: self.window.modify_bg( gtk.STATE_NORMAL, self.window.rc_get_style().bg[ gtk.STATE_SELECTED ] ) self.border.set_padding( self.borderwidth, self.borderwidth, self.borderwidth, self.borderwidth ) def SetupMintMenuOpacity( self ): print "Opacity is: " + str(self.opacity) opacity = float(self.opacity) / float(100) print "Setting opacity to: " + str(opacity) self.window.set_opacity(opacity) def detect_desktop_environment (self): self.de = "mate" try: de = os.environ["DESKTOP_SESSION"] if de in ["gnome", "gnome-shell", "mate", "kde", "xfce"]: self.de = de except Exception, detail: print detail
def __init__( self, mintMenuWin, toggleButton ): self.mintMenuWin = mintMenuWin self.mainMenus = [ ] self.toggleButton = toggleButton # The Glade file for the plugin self.gladefile = os.path.join( os.path.dirname( __file__ ), "applications.glade" ) # Read GLADE file self.wTree = gtk.glade.XML( self.gladefile, "mainWindow" ) self.searchEntry = self.wTree.get_widget( "searchEntry" ) self.searchButton = self.wTree.get_widget( "searchButton" ) self.showAllAppsButton = self.wTree.get_widget( "showAllAppsButton" ) self.showFavoritesButton = self.wTree.get_widget( "showFavoritesButton" ) self.applicationsBox = self.wTree.get_widget( "applicationsBox" ) self.categoriesBox = self.wTree.get_widget( "categoriesBox" ) self.favoritesBox = self.wTree.get_widget( "favoritesBox" ) self.applicationsScrolledWindow = self.wTree.get_widget( "applicationsScrolledWindow" ) #i18n self.wTree.get_widget("searchLabel").set_text("<span weight='bold'>" + _("Filter:") + "</span>") self.wTree.get_widget("searchLabel").set_use_markup(True) self.wTree.get_widget("label6").set_text("<span weight='bold'>" + _("Favorites") + "</span>") self.wTree.get_widget("label6").set_use_markup(True) self.wTree.get_widget("label7").set_text(_("All applications")) self.wTree.get_widget("label2").set_text("<span weight='bold'>" + _("All applications") + "</span>") self.wTree.get_widget("label2").set_use_markup(True) self.wTree.get_widget("label3").set_text(_("Favorites")) self.numApps = 0 # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = self.wTree.get_widget( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("Applications") # This should be the first item added to the window in glade self.content_holder = self.wTree.get_widget( "Applications" ) # Items to get custom colors self.itemstocolor = [ self.wTree.get_widget( "viewport1" ), self.wTree.get_widget( "viewport2" ), self.wTree.get_widget( "viewport3" ), self.wTree.get_widget( "notebook2" ) ] # Unset all timers self.filterTimer = None self.menuChangedTimer = None # Hookup for text input self.content_holder.connect( "key-press-event", self.keyPress ) self.favoritesBox.connect( "drag_data_received", self.ReceiveCallback ) self.favoritesBox.drag_dest_set( gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, self.toButton, gtk.gdk.ACTION_COPY ) self.showFavoritesButton.connect( "drag_data_received", self.ReceiveCallback ) self.showFavoritesButton.drag_dest_set( gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, self.toButton, gtk.gdk.ACTION_COPY ) self.searchButton.connect( "button_release_event", self.SearchWithButton ) self.gconfHandlers = [] # Gconf stuff self.gconf = EasyGConf( "/apps/mintMenu/plugins/applications/" ) self.GetGconfEntries() self.gconf.notifyAdd( "icon_size", self.changeIconSize ) self.gconf.notifyAdd( "favicon_size", self.changeFavIconSize ) self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.notifyAdd( "categories_mouse_over", self.changeCategoriesMouseOver ) self.gconf.notifyAdd( "swap_generic_name", self.changeSwapGenericName ) self.gconf.notifyAdd( "show_category_icons", self.changeShowCategoryIcons ) self.gconf.notifyAdd( "show_application_comments", self.changeShowApplicationComments ) self.gconf.notifyAdd( "fav_cols", self.changeFavCols ) self.gconf.bindGconfEntryToVar( "int", "category_hover_delay", self, "categoryhoverdelay" ) self.gconf.bindGconfEntryToVar( "bool", "do_not_filter", self, "donotfilterapps" ) self.gconf.bindGconfEntryToVar( "string", "search_command", self, "searchtool" ) self.gconf.bindGconfEntryToVar( "int", "default_tab", self, "defaultTab" ) self.currentFavCol = 0 self.favorites = [] self.content_holder.set_size_request( self.width, self.height ) self.categoriesBox.set_size_request( self.width / 3, -1 ) self.applicationsBox.set_size_request( self.width / 2, -1 ) self.buildingButtonList = False self.stopBuildingButtonList = False self.categoryList = [] self.applicationList = [] self.menuFileMonitors = [] self.rebuildLock = False self.activeFilter = (1, "") self.adminMenu = None for mainitems in [ "applications.menu", "settings.menu" ]: mymenu = Menu( mainitems ) mymenu.tree.add_monitor( self.menuChanged, None ) #for f in mymenu.directory.Files: # self.menuFileMonitors.append( filemonitor.addMonitor(f, self.onMenuChanged, mymenu.directory.Filename ) ) #for f in mymenu.directory.AppDirs: # self.menuFileMonitors.append( filemonitor.addMonitor(f, self.onMenuChanged, mymenu.directory.Filename ) ) sizeIcon = 0 if isinstance(self.iconSize, int): if self.iconSize >= 4: sizeIcon = gtk.ICON_SIZE_DIALOG elif self.iconSize == 3: sizeIcon = gtk.ICON_SIZE_DND elif self.iconSize == 2: sizeIcon = gtk.ICON_SIZE_BUTTON elif self.iconSize == 1: sizeIcon = gtk.ICON_SIZE_MENU elif self.iconSize <= 0: return ( 0, 0 ) #sizeIcon = gtk.icon_size_lookup( sizeIcon ) self.suggestSearchAppButton = SuggestionButton(gtk.STOCK_FIND, self.iconSize, "") self.suggestSearchButton = SuggestionButton(gtk.STOCK_FIND, self.iconSize, "") self.suggestShowButton = SuggestionButton(gtk.STOCK_INFO, self.iconSize, "") self.suggestInstallButton = SuggestionButton(gtk.STOCK_ADD, self.iconSize, "") self.suggestSearchAppButton.connect("clicked", self.search_mint) self.suggestSearchButton.connect("clicked", self.search_apt) self.suggestShowButton.connect("clicked", self.show_apt) self.suggestInstallButton.connect("clicked", self.install_apt)
class pluginclass(object): def __init__(self, mintMenuWin, toggleButton, de): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read GLADE file gladefile = os.path.join(os.path.dirname(__file__), "places.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.placesBtnHolder = wTree.get_widget("places_button_holder") self.editableBtnHolder = wTree.get_widget("editable_button_holder") self.scrolledWindow = wTree.get_widget("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget("mainWindow") # Set 'heading' property for plugin self.heading = _("Places") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget("Places") # Items to get custom colors self.itemstocolor = [wTree.get_widget("viewport2")] # Gconf stuff self.gconf = EasyGConf("/apps/mintMenu/plugins/places/") self.gconf.notifyAdd("icon_size", self.RegenPlugin) self.gconf.notifyAdd("show_computer", self.RegenPlugin) self.gconf.notifyAdd("show_desktop", self.RegenPlugin) self.gconf.notifyAdd("show_home_folder", self.RegenPlugin) self.gconf.notifyAdd("show_network", self.RegenPlugin) self.gconf.notifyAdd("show_trash", self.RegenPlugin) self.gconf.notifyAdd("custom_names", self.RegenPlugin) self.gconf.notifyAdd("custom_paths", self.RegenPlugin) self.gconf.notifyAdd("allowScrollbar", self.RegenPlugin) self.gconf.notifyAdd("show_gtk_bookmarks", self.RegenPlugin) self.gconf.notifyAdd("height", self.changePluginSize) self.gconf.notifyAdd("width", self.changePluginSize) self.gconf.bindGconfEntryToVar("bool", "sticky", self, "sticky") self.GetGconfEntries() self.content_holder.set_size_request(self.width, self.height) def wake(self): if (self.showtrash == True): self.refreshTrash() def destroy(self): self.gconf.notifyRemoveAll() def changePluginSize(self, client, connection_id, entry, args): self.allowScrollbar = self.gconf.get("bool", "allowScrollbar", False) if entry.get_key() == self.gconf.gconfDir + "width": self.width = entry.get_value().get_int() elif entry.get_key() == self.gconf.gconfDir + "height": if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) else: self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.height = entry.get_value().get_int() self.content_holder.set_size_request(self.width, self.height) def RegenPlugin(self, *args, **kargs): self.GetGconfEntries() self.ClearAll() self.do_standard_places() self.do_custom_places() self.do_gtk_bookmarks() def GetGconfEntries(self): self.width = self.gconf.get("int", "width", 200) self.allowScrollbar = self.gconf.get("bool", "allowScrollbar", False) self.showGTKBookmarks = self.gconf.get("bool", "show_gtk_bookmarks", False) self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.height = self.gconf.get("int", "height", 180) self.content_holder.set_size_request(self.width, self.height) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) self.content_holder.set_size_request(self.width, self.height) self.execapp = self.gconf.get("string", "execute_app", "nautilus") self.iconsize = self.gconf.get("int", "icon_size", 16) # Check default items self.showcomputer = self.gconf.get("bool", "show_computer", True) self.showhomefolder = self.gconf.get("bool", "show_home_folder", True) self.shownetwork = self.gconf.get("bool", "show_network", True) self.showdesktop = self.gconf.get("bool", "show_desktop", True) self.showtrash = self.gconf.get("bool", "show_trash", True) # Get paths for custom items self.custompaths = self.gconf.get("list-string", "custom_paths", []) # Get names for custom items self.customnames = self.gconf.get("list-string", "custom_names", []) # Hide vertical dotted separator self.hideseparator = self.gconf.get("bool", "hide_separator", False) # Plugin icon self.icon = self.gconf.get("string", 'icon', "gnome-fs-directory.png") # Allow plugin to be minimized to the left plugin pane self.sticky = self.gconf.get("bool", "sticky", False) self.minimized = self.gconf.get("bool", "minimized", False) def ClearAll(self): for child in self.placesBtnHolder.get_children(): child.destroy() for child in self.editableBtnHolder.get_children(): child.destroy() #Add standard places def do_standard_places(self): if (self.showcomputer == True): Button1 = easyButton("computer", self.iconsize, [_("Computer")], -1, -1) if self.de == "gnome": Button1.connect("clicked", self.ButtonClicked, "nautilus computer:") else: Button1.connect("clicked", self.ButtonClicked, "xdg-open /") Button1.show() self.placesBtnHolder.pack_start(Button1, False, False) self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer" )) if (self.showhomefolder == True): Button2 = easyButton("user-home", self.iconsize, [_("Home Folder")], -1, -1) Button2.connect("clicked", self.ButtonClicked, "xdg-open %s " % home) Button2.show() self.placesBtnHolder.pack_start(Button2, False, False) self.mintMenuWin.setTooltip(Button2, _("Open your personal folder")) if (self.shownetwork == True and self.de == "gnome"): gconftheme = EasyGConf("/desktop/gnome/interface/") icon_theme = gconftheme.get("string", "icon_theme", "Mint-X") if "Mint-X" in icon_theme: Button3 = easyButton("notification-network-ethernet-connected", self.iconsize, [_("Network")], -1, -1) else: Button3 = easyButton("network-workgroup", self.iconsize, [_("Network")], -1, -1) Button3.connect("clicked", self.ButtonClicked, "nautilus network:") Button3.show() self.placesBtnHolder.pack_start(Button3, False, False) self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations")) if (self.showdesktop == True): # Determine where the Desktop folder is (could be localized) desktopDir = home + "/Desktop" try: import sys sys.path.append('/usr/lib/linuxmint/common') from configobj import ConfigObj config = ConfigObj(home + "/.config/user-dirs.dirs") tmpdesktopDir = config['XDG_DESKTOP_DIR'] tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) if os.path.exists(tmpdesktopDir): desktopDir = tmpdesktopDir except Exception, detail: print detail Button4 = easyButton("gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1) Button4.connect("clicked", self.ButtonClicked, "xdg-open \"" + desktopDir + "\"") Button4.show() self.placesBtnHolder.pack_start(Button4, False, False) self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop")) if (self.showtrash == True): self.trashButton = easyButton("user-trash", self.iconsize, [_("Trash")], -1, -1) if self.de == "xfce": self.trashButton.connect("clicked", self.ButtonClicked, "thunar trash:") else: self.trashButton.connect("clicked", self.ButtonClicked, "xdg-open trash:") self.trashButton.show() self.trashButton.connect("button-release-event", self.trashPopup) self.refreshTrash() self.placesBtnHolder.pack_start(self.trashButton, False, False) self.mintMenuWin.setTooltip(self.trashButton, _("Browse deleted files"))
class mintMenuConfig(object): def __init__(self): self.path = os.path.abspath(os.path.dirname(sys.argv[0])) # Load glade file and extract widgets gladefile = os.path.join(self.path, "mintMenuConfig.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.mainWindow = wTree.get_widget("mainWindow") #i18n self.mainWindow.set_title(_("Menu preferences")) self.mainWindow.set_icon_from_file( "/usr/lib/linuxmint/mintMenu/icon.svg") wTree.get_widget("startWithFavorites").set_label( _("Always start with favorites pane")) wTree.get_widget("showButtonIcon").set_label(_("Show button icon")) wTree.get_widget("useCustomColors").set_label(_("Use custom colors")) wTree.get_widget("showRecentPlugin").set_label( _("Show recent documents plugin")) wTree.get_widget("showApplicationsPlugin").set_label( _("Show applications plugin")) wTree.get_widget("showSystemPlugin").set_label(_("Show system plugin")) wTree.get_widget("showPlacesPlugin").set_label(_("Show places plugin")) wTree.get_widget("showAppComments").set_label( _("Show application comments")) wTree.get_widget("showCategoryIcons").set_label( _("Show category icons")) wTree.get_widget("hover").set_label(_("Hover")) wTree.get_widget("use_apt").set_label( _("Search for packages to install")) wTree.get_widget("swapGeneric").set_label( _("Swap name and generic name")) wTree.get_widget("label11").set_text(_("Border width:")) wTree.get_widget("label2").set_text(_("pixels")) wTree.get_widget("label8").set_text(_("Opacity:")) wTree.get_widget("label9").set_text("%") wTree.get_widget("buttonTextLabel").set_text(_("Button text:")) wTree.get_widget("label1").set_text(_("Options")) wTree.get_widget("label23").set_text(_("Applications")) wTree.get_widget("colorsLabel").set_text(_("Theme")) wTree.get_widget("favLabel").set_text(_("Favorites")) wTree.get_widget("label3").set_text(_("Main button")) wTree.get_widget("backgroundColorLabel").set_text(_("Background:")) wTree.get_widget("headingColorLabel").set_text(_("Headings:")) wTree.get_widget("borderColorLabel").set_text(_("Borders:")) wTree.get_widget("themeLabel").set_text(_("Theme:")) #wTree.get_widget("applicationsLabel").set_text(_("Applications")) #wTree.get_widget("favoritesLabel").set_text(_("Favorites")) wTree.get_widget("numberColumnsLabel").set_text( _("Number of columns:")) wTree.get_widget("iconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("iconSizeLabel2").set_text(_("Icon size:")) wTree.get_widget("placesIconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("systemIconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("hoverLabel").set_text(_("Hover delay (ms):")) wTree.get_widget("label4").set_text(_("Button icon:")) wTree.get_widget("label5").set_text(_("Search command:")) wTree.get_widget("placesLabel").set_text(_("Places")) wTree.get_widget("allowscrollbarcheckbutton").set_label( _("Allow Scrollbar")) wTree.get_widget("showgtkbookmarkscheckbutton").set_label( _("Show GTK Bookmarks")) wTree.get_widget("placesHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultPlacesFrameLabel").set_text( _("Toggle Default Places:")) wTree.get_widget("computercheckbutton").set_label(_("Computer")) wTree.get_widget("homecheckbutton").set_label(_("Home Folder")) wTree.get_widget("networkcheckbutton").set_label(_("Network")) wTree.get_widget("desktopcheckbutton").set_label(_("Desktop")) wTree.get_widget("trashcheckbutton").set_label(_("Trash")) wTree.get_widget("customPlacesFrameLabel").set_text( _("Custom Places:")) wTree.get_widget("systemLabel").set_text(_("System")) wTree.get_widget("allowscrollbarcheckbutton1").set_label( _("Allow Scrollbar")) wTree.get_widget("systemHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultItemsFrameLabel").set_text( _("Toggle Default Items:")) wTree.get_widget("softwaremanagercheckbutton").set_label( _("Software Manager")) wTree.get_widget("packagemanagercheckbutton").set_label( _("Package Manager")) wTree.get_widget("controlcentercheckbutton").set_label( _("Control Center")) wTree.get_widget("terminalcheckbutton").set_label(_("Terminal")) wTree.get_widget("lockcheckbutton").set_label(_("Lock Screen")) wTree.get_widget("logoutcheckbutton").set_label(_("Log Out")) wTree.get_widget("quitcheckbutton").set_label(_("Quit")) self.editPlaceDialogTitle = (_("Edit Place")) self.newPlaceDialogTitle = (_("New Place")) self.folderChooserDialogTitle = (_("Select a folder")) wTree.get_widget("hotkey_label").set_text(_("Keyboard shortcut:")) self.startWithFavorites = wTree.get_widget("startWithFavorites") self.showAppComments = wTree.get_widget("showAppComments") self.useAPT = wTree.get_widget("use_apt") self.showCategoryIcons = wTree.get_widget("showCategoryIcons") self.showRecentPlugin = wTree.get_widget("showRecentPlugin") self.showApplicationsPlugin = wTree.get_widget( "showApplicationsPlugin") self.showSystemPlugin = wTree.get_widget("showSystemPlugin") self.showPlacesPlugin = wTree.get_widget("showPlacesPlugin") self.swapGeneric = wTree.get_widget("swapGeneric") self.hover = wTree.get_widget("hover") self.hoverDelay = wTree.get_widget("hoverDelay") self.iconSize = wTree.get_widget("iconSize") self.favIconSize = wTree.get_widget("favIconSize") self.placesIconSize = wTree.get_widget("placesIconSize") self.systemIconSize = wTree.get_widget("systemIconSize") self.favCols = wTree.get_widget("numFavCols") self.borderWidth = wTree.get_widget("borderWidth") self.opacity = wTree.get_widget("opacity") self.useCustomColors = wTree.get_widget("useCustomColors") self.backgroundColor = wTree.get_widget("backgroundColor") self.borderColor = wTree.get_widget("borderColor") self.headingColor = wTree.get_widget("headingColor") self.backgroundColorLabel = wTree.get_widget("backgroundColorLabel") self.borderColorLabel = wTree.get_widget("borderColorLabel") self.headingColorLabel = wTree.get_widget("headingColorLabel") self.showButtonIcon = wTree.get_widget("showButtonIcon") self.buttonText = wTree.get_widget("buttonText") self.hotkeyText = wTree.get_widget("hotkeyText") self.buttonIcon = wTree.get_widget("buttonIcon") self.buttonIconChooser = wTree.get_widget("button_icon_chooser") self.image_filter = gtk.FileFilter() self.image_filter.set_name(_("Images")) self.image_filter.add_pattern("*.png") self.image_filter.add_pattern("*.jpg") self.image_filter.add_pattern("*.jpeg") self.image_filter.add_pattern("*.bmp") self.image_filter.add_pattern("*.ico") self.image_filter.add_pattern("*.xpm") self.image_filter.add_pattern("*.svg") self.buttonIconChooser.add_filter(self.image_filter) self.buttonIconChooser.set_filter(self.image_filter) self.buttonIconImage = wTree.get_widget("image_button_icon") self.searchCommand = wTree.get_widget("search_command") self.computertoggle = wTree.get_widget("computercheckbutton") self.homefoldertoggle = wTree.get_widget("homecheckbutton") self.networktoggle = wTree.get_widget("networkcheckbutton") self.desktoptoggle = wTree.get_widget("desktopcheckbutton") self.trashtoggle = wTree.get_widget("trashcheckbutton") self.customplacestree = wTree.get_widget("customplacestree") self.allowPlacesScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton") self.showgtkbookmarksToggle = wTree.get_widget( "showgtkbookmarkscheckbutton") self.placesHeightButton = wTree.get_widget("placesHeightSpinButton") if (self.allowPlacesScrollbarToggle.get_active() == False): self.placesHeightButton.set_sensitive(False) self.allowPlacesScrollbarToggle.connect("toggled", self.togglePlacesHeightEnabled) self.softwareManagerToggle = wTree.get_widget( "softwaremanagercheckbutton") self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton") self.controlCenterToggle = wTree.get_widget("controlcentercheckbutton") self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton") self.terminalToggle = wTree.get_widget("terminalcheckbutton") self.lockToggle = wTree.get_widget("lockcheckbutton") self.logoutToggle = wTree.get_widget("logoutcheckbutton") self.quitToggle = wTree.get_widget("quitcheckbutton") self.allowSystemScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton1") self.systemHeightButton = wTree.get_widget("systemHeightSpinButton") if (self.allowSystemScrollbarToggle.get_active() == False): self.systemHeightButton.set_sensitive(False) self.allowSystemScrollbarToggle.connect("toggled", self.toggleSystemHeightEnabled) if os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg"): wTree.get_widget("softwaremanagercheckbutton").show() else: wTree.get_widget("softwaremanagercheckbutton").hide() wTree.get_widget("closeButton").connect("clicked", gtk.main_quit) self.gconf = EasyGConf("/apps/mintMenu/") self.gconfApplications = EasyGConf( "/apps/mintMenu/plugins/applications/") self.gconfPlaces = EasyGConf("/apps/mintMenu/plugins/places/") self.gconfSystem = EasyGConf( "/apps/mintMenu/plugins/system-management/") self.useCustomColors.connect("toggled", self.toggleUseCustomColors) self.bindGconfValueToWidget(self.gconf, "bool", "start_with_favorites", self.startWithFavorites, "toggled", self.startWithFavorites.set_active, self.startWithFavorites.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "show_application_comments", self.showAppComments, "toggled", self.showAppComments.set_active, self.showAppComments.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "use_apt", self.useAPT, "toggled", self.useAPT.set_active, self.useAPT.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "show_category_icons", self.showCategoryIcons, "toggled", self.showCategoryIcons.set_active, self.showCategoryIcons.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "categories_mouse_over", self.hover, "toggled", self.hover.set_active, self.hover.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "swap_generic_name", self.swapGeneric, "toggled", self.swapGeneric.set_active, self.swapGeneric.get_active) self.bindGconfValueToWidget(self.gconfApplications, "int", "category_hover_delay", self.hoverDelay, "value-changed", self.hoverDelay.set_value, self.hoverDelay.get_value) self.bindGconfValueToWidget(self.gconfApplications, "int", "icon_size", self.iconSize, "value-changed", self.iconSize.set_value, self.iconSize.get_value) self.bindGconfValueToWidget(self.gconfApplications, "int", "favicon_size", self.favIconSize, "value-changed", self.favIconSize.set_value, self.favIconSize.get_value) self.bindGconfValueToWidget(self.gconfApplications, "int", "fav_cols", self.favCols, "value-changed", self.favCols.set_value, self.favCols.get_value) self.bindGconfValueToWidget(self.gconfPlaces, "int", "icon_size", self.placesIconSize, "value-changed", self.placesIconSize.set_value, self.placesIconSize.get_value) self.bindGconfValueToWidget(self.gconfSystem, "int", "icon_size", self.systemIconSize, "value-changed", self.systemIconSize.set_value, self.systemIconSize.get_value) self.bindGconfValueToWidget(self.gconf, "int", "border_width", self.borderWidth, "value-changed", self.borderWidth.set_value, self.borderWidth.get_value_as_int) self.bindGconfValueToWidget(self.gconf, "int", "opacity", self.opacity, "value-changed", self.opacity.set_value, self.opacity.get_value_as_int) self.bindGconfValueToWidget(self.gconf, "bool", "use_custom_color", self.useCustomColors, "toggled", self.useCustomColors.set_active, self.useCustomColors.get_active) self.bindGconfValueToWidget(self.gconf, "color", "custom_color", self.backgroundColor, "color-set", self.backgroundColor.set_color, self.getBackgroundColor) self.bindGconfValueToWidget(self.gconf, "color", "custom_heading_color", self.headingColor, "color-set", self.headingColor.set_color, self.getHeadingColor) self.bindGconfValueToWidget(self.gconf, "color", "custom_border_color", self.borderColor, "color-set", self.borderColor.set_color, self.getBorderColor) self.bindGconfValueToWidget(self.gconf, "bool", "hide_applet_icon", self.showButtonIcon, "toggled", self.setShowButtonIcon, self.getShowButtonIcon) self.bindGconfValueToWidget(self.gconf, "string", "applet_text", self.buttonText, "changed", self.buttonText.set_text, self.buttonText.get_text) self.bindGconfValueToWidget(self.gconf, "string", "hot_key", self.hotkeyText, "changed", self.hotkeyText.set_text, self.hotkeyText.get_text) self.bindGconfValueToWidget(self.gconf, "string", "applet_icon", self.buttonIconChooser, "file-set", self.setButtonIcon, self.buttonIconChooser.get_filename) self.bindGconfValueToWidget(self.gconfApplications, "string", "search_command", self.searchCommand, "changed", self.searchCommand.set_text, self.searchCommand.get_text) self.getPluginsToggle() self.showRecentPlugin.connect("toggled", self.setPluginsLayout) self.showApplicationsPlugin.connect("toggled", self.setPluginsLayout) self.showSystemPlugin.connect("toggled", self.setPluginsLayout) self.showPlacesPlugin.connect("toggled", self.setPluginsLayout) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_computer", self.computertoggle, "toggled", self.computertoggle.set_active, self.computertoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_home_folder", self.homefoldertoggle, "toggled", self.homefoldertoggle.set_active, self.homefoldertoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_network", self.networktoggle, "toggled", self.networktoggle.set_active, self.networktoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_desktop", self.desktoptoggle, "toggled", self.desktoptoggle.set_active, self.desktoptoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_trash", self.trashtoggle, "toggled", self.trashtoggle.set_active, self.trashtoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "int", "height", self.placesHeightButton, "value-changed", self.placesHeightButton.set_value, self.placesHeightButton.get_value_as_int) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "allowScrollbar", self.allowPlacesScrollbarToggle, "toggled", self.allowPlacesScrollbarToggle.set_active, self.allowPlacesScrollbarToggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_gtk_bookmarks", self.showgtkbookmarksToggle, "toggled", self.showgtkbookmarksToggle.set_active, self.showgtkbookmarksToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_software_manager", self.softwareManagerToggle, "toggled", self.softwareManagerToggle.set_active, self.softwareManagerToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_package_manager", self.packageManagerToggle, "toggled", self.packageManagerToggle.set_active, self.packageManagerToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_control_center", self.controlCenterToggle, "toggled", self.controlCenterToggle.set_active, self.controlCenterToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_terminal", self.terminalToggle, "toggled", self.terminalToggle.set_active, self.terminalToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_lock_screen", self.lockToggle, "toggled", self.lockToggle.set_active, self.lockToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_logout", self.logoutToggle, "toggled", self.logoutToggle.set_active, self.logoutToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_quit", self.quitToggle, "toggled", self.quitToggle.set_active, self.quitToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "int", "height", self.systemHeightButton, "value-changed", self.systemHeightButton.set_value, self.systemHeightButton.get_value_as_int) self.bindGconfValueToWidget(self.gconfSystem, "bool", "allowScrollbar", self.allowSystemScrollbarToggle, "toggled", self.allowSystemScrollbarToggle.set_active, self.allowSystemScrollbarToggle.get_active) self.customplacepaths = self.gconfPlaces.get("list-string", "custom_paths", []) self.customplacenames = self.gconfPlaces.get("list-string", "custom_names", []) self.customplacestreemodel = gtk.ListStore(str, str) self.cell = gtk.CellRendererText() for count in range(len(self.customplacepaths)): self.customplacestreemodel.append( [self.customplacenames[count], self.customplacepaths[count]]) self.customplacestreemodel.connect("row-changed", self.updatePlacesGconf) self.customplacestreemodel.connect("row-deleted", self.updatePlacesGconf) self.customplacestreemodel.connect("rows-reordered", self.updatePlacesGconf) self.customplacestree.set_model(self.customplacestreemodel) self.namescolumn = gtk.TreeViewColumn(_("Name"), self.cell, text=0) self.placescolumn = gtk.TreeViewColumn(_("Path"), self.cell, text=1) self.customplacestree.append_column(self.namescolumn) self.customplacestree.append_column(self.placescolumn) wTree.get_widget("newButton").connect("clicked", self.newPlace) wTree.get_widget("editButton").connect("clicked", self.editPlace) wTree.get_widget("upButton").connect("clicked", self.moveUp) wTree.get_widget("downButton").connect("clicked", self.moveDown) wTree.get_widget("removeButton").connect("clicked", self.removePlace) #Detect themes and show theme here theme_name = commands.getoutput( "gconftool-2 --get /apps/mintMenu/theme_name").strip() themes = commands.getoutput("find /usr/share/themes -name gtkrc") themes = themes.split("\n") model = gtk.ListStore(str, str) wTree.get_widget("themesCombo").set_model(model) selected_theme = model.append([_("Desktop theme"), "default"]) for theme in themes: if theme.startswith("/usr/share/themes") and theme.endswith( "/gtk-2.0/gtkrc"): theme = theme.replace("/usr/share/themes/", "") theme = theme.replace("gtk-2.0", "") theme = theme.replace("gtkrc", "") theme = theme.replace("/", "") theme = theme.strip() iter = model.append([theme, theme]) if theme == theme_name: selected_theme = iter wTree.get_widget("themesCombo").set_active_iter(selected_theme) wTree.get_widget("themesCombo").connect("changed", self.set_theme) self.mainWindow.present() self.getBackgroundColor() def set_theme(self, widget): model = widget.get_model() iter = widget.get_active_iter() theme_name = model.get_value(iter, 1) os.system( "gconftool-2 --type string --set /apps/mintMenu/theme_name \"%s\"" % theme_name) def getPluginsToggle(self): if (commands.getoutput( "gconftool-2 --get /apps/mintMenu/plugins_list | grep recent | wc -l" ) == "0"): self.showRecentPlugin.set_active(False) else: self.showRecentPlugin.set_active(True) if (commands.getoutput( "gconftool-2 --get /apps/mintMenu/plugins_list | grep applications | wc -l" ) == "0"): self.showApplicationsPlugin.set_active(False) else: self.showApplicationsPlugin.set_active(True) if (commands.getoutput( "gconftool-2 --get /apps/mintMenu/plugins_list | grep system_management | wc -l" ) == "0"): self.showSystemPlugin.set_active(False) else: self.showSystemPlugin.set_active(True) if (commands.getoutput( "gconftool-2 --get /apps/mintMenu/plugins_list | grep places | wc -l" ) == "0"): self.showPlacesPlugin.set_active(False) else: self.showPlacesPlugin.set_active(True) def setPluginsLayout(self, widget): visiblePlugins = [] if self.showPlacesPlugin.get_active(): visiblePlugins.append("places") if self.showSystemPlugin.get_active(): visiblePlugins.append("system_management") if self.showApplicationsPlugin.get_active(): if self.showPlacesPlugin.get_active( ) or self.showSystemPlugin.get_active(): visiblePlugins.append("newpane") visiblePlugins.append("applications") if self.showRecentPlugin.get_active(): if self.showApplicationsPlugin.get_active( ) or self.showPlacesPlugin.get_active( ) or self.showSystemPlugin.get_active(): visiblePlugins.append("newpane") visiblePlugins.append("recent") layout = "" for plugin in visiblePlugins: layout = layout + plugin + "," if len(layout) > 0 and layout[-1] == ",": layout = layout[0:-1] os.system( "gconftool-2 --type list --list-type string --set /apps/mintMenu/plugins_list [%s]" % layout) def setShowButtonIcon(self, value): self.showButtonIcon.set_active(not value) def setButtonIcon(self, value): self.buttonIconChooser.set_filename(value) self.buttonIconImage.set_from_file(value) def getShowButtonIcon(self): return not self.showButtonIcon.get_active() def bindGconfValueToWidget(self, gconf, gconfType, gconfPath, widget, changeEvent, setter, getter): widget.connect( changeEvent, lambda *args: self.callGetter(gconf, gconfType, gconfPath, getter)) gconf.notifyAdd(gconfPath, self.callSetter, args=[gconfType, setter]) if gconfType == "color": setter(gtk.gdk.color_parse(gconf.get(gconfType, gconfPath))) else: setter(gconf.get(gconfType, gconfPath)) def callSetter(self, client, connection_id, entry, args): if args[0] == "bool": args[1](entry.get_value().get_bool()) elif args[0] == "string": args[1](entry.get_value().get_string()) elif args[0] == "int": args[1](entry.get_value().get_int()) elif args[0] == "color": args[1](gtk.gdk.color_parse(entry.get_value().get_string())) def callGetter(self, gconf, gconfType, gconfPath, getter): gconf.set(gconfType, gconfPath, getter()) def toggleUseCustomColors(self, widget): self.backgroundColor.set_sensitive(widget.get_active()) self.borderColor.set_sensitive(widget.get_active()) self.headingColor.set_sensitive(widget.get_active()) self.backgroundColorLabel.set_sensitive(widget.get_active()) self.borderColorLabel.set_sensitive(widget.get_active()) self.headingColorLabel.set_sensitive(widget.get_active()) def getBackgroundColor(self): return self.gdkColorToString(self.backgroundColor.get_color()) def getBorderColor(self): return self.gdkColorToString(self.borderColor.get_color()) def getHeadingColor(self): return self.gdkColorToString(self.headingColor.get_color()) def gdkColorToString(self, gdkColor): return "#%.2X%.2X%.2X" % (gdkColor.red / 256, gdkColor.green / 256, gdkColor.blue / 256) def moveUp(self, upButton): treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] if (treeselection != None): lagiter = self.customplacestreemodel.get_iter_first() nextiter = self.customplacestreemodel.get_iter_first() while ((self.customplacestreemodel.get_path(nextiter) != self.customplacestreemodel.get_path(currentiter)) & (nextiter != None)): lagiter = nextiter nextiter = self.customplacestreemodel.iter_next(nextiter) if (nextiter != None): self.customplacestreemodel.swap(currentiter, lagiter) return def newPlace(self, newButton): gladefile = os.path.join(self.path, "mintMenuConfig.glade") wTree = gtk.glade.XML(gladefile, "editPlaceDialog") wTree.get_widget("label2").set_text(_("Name:")) wTree.get_widget("label1").set_text(_("Path:")) folderChooserTree = gtk.glade.XML(gladefile, "fileChooserDialog") newPlaceDialog = wTree.get_widget("editPlaceDialog") folderChooserDialog = folderChooserTree.get_widget("fileChooserDialog") newPlaceDialog.set_transient_for(self.mainWindow) newPlaceDialog.set_icon_from_file( "/usr/lib/linuxmint/mintMenu/icon.svg") newPlaceDialog.set_title(self.newPlaceDialogTitle) folderChooserDialog.set_title(self.folderChooserDialogTitle) newPlaceDialog.set_default_response(gtk.RESPONSE_OK) newPlaceName = wTree.get_widget("nameEntryBox") newPlacePath = wTree.get_widget("pathEntryBox") folderButton = wTree.get_widget("folderButton") def chooseFolder(folderButton): currentPath = newPlacePath.get_text() if (currentPath != ""): folderChooserDialog.select_filename(currentPath) response = folderChooserDialog.run() folderChooserDialog.hide() if (response == gtk.RESPONSE_OK): newPlacePath.set_text(folderChooserDialog.get_filenames()[0]) folderButton.connect("clicked", chooseFolder) response = newPlaceDialog.run() newPlaceDialog.hide() if (response == gtk.RESPONSE_OK): name = newPlaceName.get_text() path = newPlacePath.get_text() if (name != "" and path != ""): self.customplacestreemodel.append((name, path)) def editPlace(self, editButton): gladefile = os.path.join(self.path, "mintMenuConfig.glade") wTree = gtk.glade.XML(gladefile, "editPlaceDialog") wTree.get_widget("label2").set_text(_("Name:")) wTree.get_widget("label1").set_text(_("Path:")) folderChooserTree = gtk.glade.XML(gladefile, "fileChooserDialog") editPlaceDialog = wTree.get_widget("editPlaceDialog") folderChooserDialog = folderChooserTree.get_widget("fileChooserDialog") editPlaceDialog.set_transient_for(self.mainWindow) editPlaceDialog.set_icon_from_file( "/usr/lib/linuxmint/mintMenu/icon.svg") editPlaceDialog.set_title(self.editPlaceDialogTitle) folderChooserDialog.set_title(self.folderChooserDialogTitle) editPlaceDialog.set_default_response(gtk.RESPONSE_OK) editPlaceName = wTree.get_widget("nameEntryBox") editPlacePath = wTree.get_widget("pathEntryBox") folderButton = wTree.get_widget("folderButton") treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] if (currentiter != None): initName = self.customplacestreemodel.get_value(currentiter, 0) initPath = self.customplacestreemodel.get_value(currentiter, 1) editPlaceName.set_text(initName) editPlacePath.set_text(initPath) def chooseFolder(folderButton): currentPath = editPlacePath.get_text() if (currentPath != ""): folderChooserDialog.select_filename(currentPath) response = folderChooserDialog.run() folderChooserDialog.hide() if (response == gtk.RESPONSE_OK): editPlacePath.set_text( folderChooserDialog.get_filenames()[0]) folderButton.connect("clicked", chooseFolder) response = editPlaceDialog.run() editPlaceDialog.hide() if (response == gtk.RESPONSE_OK): name = editPlaceName.get_text() path = editPlacePath.get_text() if (name != "" and path != ""): self.customplacestreemodel.set_value(currentiter, 0, name) self.customplacestreemodel.set_value(currentiter, 1, path) def moveDown(self, downButton): treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] nextiter = self.customplacestreemodel.iter_next(currentiter) if (nextiter != None): self.customplacestreemodel.swap(currentiter, nextiter) return def removePlace(self, removeButton): treeselection = self.customplacestree.get_selection() currentiter = (treeselection.get_selected())[1] if (currentiter != None): self.customplacestreemodel.remove(currentiter) return def togglePlacesHeightEnabled(self, toggle): if (toggle.get_active() == True): self.placesHeightButton.set_sensitive(True) else: self.placesHeightButton.set_sensitive(False) def toggleSystemHeightEnabled(self, toggle): if (toggle.get_active() == True): self.systemHeightButton.set_sensitive(True) else: self.systemHeightButton.set_sensitive(False) def updatePlacesGconf(self, treemodel, path, iter=None, new_order=None): # Do only if not partway though an append operation; Append = insert+change+change and each creates a signal if ((iter == None) or (self.customplacestreemodel.get_value(iter, 1) != None)): treeiter = self.customplacestreemodel.get_iter_first() customplacenames = [] customplacepaths = [] while (treeiter != None): customplacenames = customplacenames + [ self.customplacestreemodel.get_value(treeiter, 0) ] customplacepaths = customplacepaths + [ self.customplacestreemodel.get_value(treeiter, 1) ] treeiter = self.customplacestreemodel.iter_next(treeiter) self.gconfPlaces.set("list-string", "custom_paths", customplacepaths) self.gconfPlaces.set("list-string", "custom_names", customplacenames)
class pluginclass( object ): TARGET_TYPE_TEXT = 80 toButton = [ ( "text/uri-list", 0, TARGET_TYPE_TEXT ) ] TARGET_TYPE_FAV = 81 toFav = [ ( "FAVORITES", gtk.TARGET_SAME_APP, TARGET_TYPE_FAV ), ( "text/plain", 0, 100 ), ( "text/uri-list", 0, 101 ) ] fromFav = [ ( "FAVORITES", gtk.TARGET_SAME_APP, TARGET_TYPE_FAV ) ] def __init__( self, mintMenuWin, toggleButton ): self.mintMenuWin = mintMenuWin self.mainMenus = [ ] self.toggleButton = toggleButton # The Glade file for the plugin self.gladefile = os.path.join( os.path.dirname( __file__ ), "applications.glade" ) # Read GLADE file self.wTree = gtk.glade.XML( self.gladefile, "mainWindow" ) self.searchEntry = self.wTree.get_widget( "searchEntry" ) self.searchButton = self.wTree.get_widget( "searchButton" ) self.showAllAppsButton = self.wTree.get_widget( "showAllAppsButton" ) self.showFavoritesButton = self.wTree.get_widget( "showFavoritesButton" ) self.applicationsBox = self.wTree.get_widget( "applicationsBox" ) self.categoriesBox = self.wTree.get_widget( "categoriesBox" ) self.favoritesBox = self.wTree.get_widget( "favoritesBox" ) self.applicationsScrolledWindow = self.wTree.get_widget( "applicationsScrolledWindow" ) #i18n self.wTree.get_widget("searchLabel").set_text("<span weight='bold'>" + _("Filter:") + "</span>") self.wTree.get_widget("searchLabel").set_use_markup(True) self.wTree.get_widget("label6").set_text("<span weight='bold'>" + _("Favorites") + "</span>") self.wTree.get_widget("label6").set_use_markup(True) self.wTree.get_widget("label7").set_text(_("All applications")) self.wTree.get_widget("label2").set_text("<span weight='bold'>" + _("All applications") + "</span>") self.wTree.get_widget("label2").set_use_markup(True) self.wTree.get_widget("label3").set_text(_("Favorites")) self.numApps = 0 # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = self.wTree.get_widget( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("Applications") # This should be the first item added to the window in glade self.content_holder = self.wTree.get_widget( "Applications" ) # Items to get custom colors self.itemstocolor = [ self.wTree.get_widget( "viewport1" ), self.wTree.get_widget( "viewport2" ), self.wTree.get_widget( "viewport3" ), self.wTree.get_widget( "notebook2" ) ] # Unset all timers self.filterTimer = None self.menuChangedTimer = None # Hookup for text input self.content_holder.connect( "key-press-event", self.keyPress ) self.favoritesBox.connect( "drag_data_received", self.ReceiveCallback ) self.favoritesBox.drag_dest_set( gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, self.toButton, gtk.gdk.ACTION_COPY ) self.showFavoritesButton.connect( "drag_data_received", self.ReceiveCallback ) self.showFavoritesButton.drag_dest_set( gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, self.toButton, gtk.gdk.ACTION_COPY ) self.searchButton.connect( "button_release_event", self.SearchWithButton ) self.gconfHandlers = [] # Gconf stuff self.gconf = EasyGConf( "/apps/mintMenu/plugins/applications/" ) self.GetGconfEntries() self.gconf.notifyAdd( "icon_size", self.changeIconSize ) self.gconf.notifyAdd( "favicon_size", self.changeFavIconSize ) self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.notifyAdd( "categories_mouse_over", self.changeCategoriesMouseOver ) self.gconf.notifyAdd( "swap_generic_name", self.changeSwapGenericName ) self.gconf.notifyAdd( "show_category_icons", self.changeShowCategoryIcons ) self.gconf.notifyAdd( "show_application_comments", self.changeShowApplicationComments ) self.gconf.notifyAdd( "fav_cols", self.changeFavCols ) self.gconf.bindGconfEntryToVar( "int", "category_hover_delay", self, "categoryhoverdelay" ) self.gconf.bindGconfEntryToVar( "bool", "do_not_filter", self, "donotfilterapps" ) self.gconf.bindGconfEntryToVar( "string", "search_command", self, "searchtool" ) self.gconf.bindGconfEntryToVar( "int", "default_tab", self, "defaultTab" ) self.currentFavCol = 0 self.favorites = [] self.content_holder.set_size_request( self.width, self.height ) self.categoriesBox.set_size_request( self.width / 3, -1 ) self.applicationsBox.set_size_request( self.width / 2, -1 ) self.buildingButtonList = False self.stopBuildingButtonList = False self.categoryList = [] self.applicationList = [] self.menuFileMonitors = [] self.rebuildLock = False self.activeFilter = (1, "") self.adminMenu = None for mainitems in [ "applications.menu", "settings.menu" ]: mymenu = Menu( mainitems ) mymenu.tree.add_monitor( self.menuChanged, None ) #for f in mymenu.directory.Files: # self.menuFileMonitors.append( filemonitor.addMonitor(f, self.onMenuChanged, mymenu.directory.Filename ) ) #for f in mymenu.directory.AppDirs: # self.menuFileMonitors.append( filemonitor.addMonitor(f, self.onMenuChanged, mymenu.directory.Filename ) ) sizeIcon = 0 if isinstance(self.iconSize, int): if self.iconSize >= 4: sizeIcon = gtk.ICON_SIZE_DIALOG elif self.iconSize == 3: sizeIcon = gtk.ICON_SIZE_DND elif self.iconSize == 2: sizeIcon = gtk.ICON_SIZE_BUTTON elif self.iconSize == 1: sizeIcon = gtk.ICON_SIZE_MENU elif self.iconSize <= 0: return ( 0, 0 ) #sizeIcon = gtk.icon_size_lookup( sizeIcon ) self.suggestSearchAppButton = SuggestionButton(gtk.STOCK_FIND, self.iconSize, "") self.suggestSearchButton = SuggestionButton(gtk.STOCK_FIND, self.iconSize, "") self.suggestShowButton = SuggestionButton(gtk.STOCK_INFO, self.iconSize, "") self.suggestInstallButton = SuggestionButton(gtk.STOCK_ADD, self.iconSize, "") self.suggestSearchAppButton.connect("clicked", self.search_mint) self.suggestSearchButton.connect("clicked", self.search_apt) self.suggestShowButton.connect("clicked", self.show_apt) self.suggestInstallButton.connect("clicked", self.install_apt) def search_mint(self, widget): os.system("/usr/bin/mint-search-portal " + self.suggestion + " &") self.mintMenuWin.hide() def search_apt(self, widget): os.system("/usr/bin/mint-search-apt " + self.suggestion + " &") self.mintMenuWin.hide() def show_apt(self, widget): os.system("/usr/bin/mint-show-apt " + self.suggestion + " &") self.mintMenuWin.hide() def install_apt(self, widget): os.system("/usr/bin/mint-make-cmd " + self.suggestion + " &") self.mintMenuWin.hide() def __del__( self ): print u"Applications plugin deleted" def wake (self) : pass def destroy( self ): self.content_holder.destroy() self.searchEntry.destroy() self.searchButton.destroy() self.showAllAppsButton.destroy() self.showFavoritesButton.destroy() self.applicationsBox.destroy() self.categoriesBox.destroy() self.favoritesBox.destroy() self.gconf.notifyRemoveAll() for mId in self.menuFileMonitors: filemonitor.removeMonitor( mId ) def changePluginSize( self, client, connection_id, entry, args ): if entry.get_key() == self.gconf.gconfDir+"width": self.width = entry.get_value().get_int() self.categoriesBox.set_size_request( self.width / 3, -1 ) self.applicationsBox.set_size_request( self.width / 2, -1 ) elif entry.get_key() == self.gconf.gconfDir+"height": self.heigth = entry.get_value().get_int() self.content_holder.set_size_request( self.width, self.height ) def changeSwapGenericName( self, client, connection_id, entry, args ): self.swapgeneric = entry.get_value().get_bool() for child in self.favoritesBox: if isinstance( child, FavApplicationLauncher): child.setSwapGeneric( self.swapgeneric ) def changeShowCategoryIcons( self, client, connection_id, entry, args ): self.showcategoryicons = entry.get_value().get_bool() if self.showcategoryicons: categoryIconSize = self.iconSize else: categoryIconSize = 0 for child in self.categoriesBox: child.setIconSize( categoryIconSize ) def changeIconSize( self, client, connection_id, entry, args ): self.iconSize = entry.get_value().get_int() if self.showcategoryicons: categoryIconSize = self.iconSize else: categoryIconSize = 0 for child in self.categoriesBox: child.setIconSize( categoryIconSize ) for child in self.applicationsBox: try: child.setIconSize( self.iconSize ) except: pass self.suggestSearchAppButton.set_icon_size( self.iconSize ) self.suggestSearchButton.set_icon_size( self.iconSize ) self.suggestShowButton.set_icon_size( self.iconSize ) self.suggestInstallButton.set_icon_size( self.iconSize ) def changeFavIconSize( self, client, connection_id, entry, args ): self.faviconsize = entry.get_value().get_int() for child in self.favoritesBox: if isinstance( child, FavApplicationLauncher): child.setIconSize( self.faviconsize ) def changeShowApplicationComments( self, client, connection_id, entry, args ): self.showapplicationcomments = entry.get_value().get_bool() for child in self.applicationsBox: child.setShowComment( self.showapplicationcomments ) def changeCategoriesMouseOver( self, client, connection_id, entry, args ): self.categories_mouse_over = entry.get_value().get_bool() for child in self.categoriesBox: if self.categories_mouse_over and not child.mouseOverHandlerIds: startId = child.connect( "enter", self.StartFilter, child.filter ) stopId = child.connect( "leave", self.StopFilter ) child.mouseOverHandlerIds = ( startId, stopId ) elif self.categories_mouse_over and child.mouseOverHandlerIds: child.disconnect( child.mouseOverHandlerIds[0] ) child.disconnect( child.mouseOverHandlerIds[1] ) child.mouseOverHandlerIds = None def changeFavCols(self, client, connection_id, entry, args): self.favCols = entry.get_value().get_int() for fav in self.favorites: self.favoritesBox.remove( fav ) self.favoritesPositionOnGrid( fav ) def RegenPlugin( self, *args, **kargs ): # save old config - this is necessary because the app will notified when it sets the default values and you don't want the to reload itself several times oldcategories_mouse_over = self.categories_mouse_over oldtotalrecent = self.totalrecent oldsticky = self.sticky oldminimized = self.minimized oldicon = self.icon oldhideseparator = self.hideseparator oldshowapplicationcomments = self.showapplicationcomments self.GetGconfEntries() # if the config hasn't changed return if oldcategories_mouse_over == self.categories_mouse_over and oldiconsize == self.iconSize and oldfaviconsize == self.faviconsize and oldtotalrecent == self.totalrecent and oldswapgeneric == self.swapgeneric and oldshowcategoryicons == self.showcategoryicons and oldcategoryhoverdelay == self.categoryhoverdelay and oldsticky == self.sticky and oldminimized == self.minimized and oldicon == self.icon and oldhideseparator == self.hideseparator and oldshowapplicationcomments == self.showapplicationcomments: return self.Todos() self.buildFavorites() self.RebuildPlugin() def GetGconfEntries( self ): self.categories_mouse_over = self.gconf.get( "bool", "categories_mouse_over", True ) self.width = self.gconf.get( "int", "width", 480 ) self.height = self.gconf.get( "int", "height", 410 ) self.donotfilterapps = self.gconf.get( "bool", "do_not_filter", False ) self.iconSize = self.gconf.get( "int", "icon_size", 2 ) self.faviconsize = self.gconf.get( "int", "favicon_size", 3 ) self.favCols = self.gconf.get( "int", "fav_cols", 2 ) self.swapgeneric = self.gconf.get( "bool", "swap_generic_name", False ) self.showcategoryicons = self.gconf.get( "bool", "show_category_icons", True ) self.categoryhoverdelay = self.gconf.get( "int", "category_hover_delay", 50 ) self.showapplicationcomments = self.gconf.get( "bool", "show_application_comments", True ) self.lastActiveTab = self.gconf.get( "int", "last_active_tab", 0 ) self.defaultTab = self.gconf.get( "int", "default_tab", -1 ) # Allow plugin to be minimized to the left plugin pane self.sticky = self.gconf.get( "bool", "sticky", False ) self.minimized = self.gconf.get( "bool", "minimized", False ) # Search tool self.searchtool = self.gconf.get( "string", "search_command", "gnome-search-tool --named \"%s\" --start" ) if self.searchtool == "beagle-search SEARCH_STRING": self.searchtool = "gnome-search-tool --named \"%s\" --start" self.gconf.set( "string", "search_command", "gnome-search-tool --named \"%s\" --start" ) # Plugin icon self.icon = self.gconf.get( "string", "icon", "applications-accessories" ) # Hide vertical dotted separator self.hideseparator = self.gconf.get( "bool", "hide_separator", False ) def SetHidden( self, state ): if state == True: self.gconf.set( "bool", "minimized", True ) else: self.gconf.set( "bool", "minimized", False ) def RebuildPlugin(self): self.content_holder.set_size_request( self.width, self.height ) def checkMintMenuFolder( self ): if os.path.exists( os.path.join( os.path.expanduser( "~" ), ".linuxmint", "mintMenu", "applications" ) ): return True try: os.makedirs( os.path.join( os.path.expanduser( "~" ), ".linuxmint", "mintMenu", "applications" ) ) return True except: pass return False def onShowMenu( self ): if len( self.favorites ): if self.defaultTab == -1: self.changeTab( self.lastActiveTab) else: self.changeTab( (self.defaultTab - 1) * -1 ) else: self.changeTab( 1 ) self.searchEntry.select_region( 0, -1 ) def onHideMenu( self ): self.gconf.set( "int", "last_active_tab", self.lastActiveTab ) def changeTab( self, tabNum ): notebook = self.wTree.get_widget( "notebook2" ) if tabNum == 0: notebook.set_current_page( 0 ) elif tabNum == 1: notebook.set_current_page( 1 ) self.lastActiveTab = tabNum self.focusSearchEntry() def Todos( self ): self.searchEntry.connect( "changed", self.Filter ) self.searchEntry.connect( "activate", self.Search ) self.showAllAppsButton.connect( "clicked", lambda widget: self.changeTab( 1 ) ) self.showFavoritesButton.connect( "clicked", lambda widget: self.changeTab( 0 ) ) self.buildButtonList() def focusSearchEntry( self ): # grab_focus() does select all text, as this is an unwanted behaviour we restore the old selection sel = self.searchEntry.get_selection_bounds() if len(sel) == 0: # no selection sel = ( self.searchEntry.get_position(), self.searchEntry.get_position() ) self.searchEntry.grab_focus() self.searchEntry.select_region( sel[0], sel[1] ) def buildButtonList( self ): if self.buildingButtonList: self.stopBuildingButtonList = True gobject.timeout_add( 100, self.buildButtonList ) return self.stopBuildingButtonList = False gobject.idle_add( self.updateBoxes ) def categoryBtnFocus( self, widget, event, category ): self.scrollItemIntoView( widget ) self.StartFilter( widget, category ) def StartFilter( self, widget, category ): # if there is a timer for a different category running stop it if self.filterTimer: gobject.source_remove( self.filterTimer ) self.filterTimer = gobject.timeout_add( self.categoryhoverdelay, self.Filter, widget, category ) def StopFilter( self, widget ): if self.filterTimer: gobject.source_remove( self.filterTimer ) self.filterTimer = None def Filter( self, widget, category = None ): self.filterTimer = None start = time.time() #print "FILTER" self.applicationsBox.remove(self.suggestSearchAppButton) self.applicationsBox.remove(self.suggestSearchButton) self.applicationsBox.remove(self.suggestShowButton) self.applicationsBox.remove(self.suggestInstallButton) if widget == self.searchEntry: if self.donotfilterapps: widget.set_text( "" ) else: self.changeTab( 1 ) text = widget.get_text() showns = False # Are any app shown? for i in self.applicationsBox.get_children(): shown = i.filterText( text ) if (shown): showns = True if (not showns and os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg")): self.suggestion = text self.applicationsBox.add(self.suggestSearchAppButton) self.suggestSearchAppButton.set_text(_("Search portal for '%s'") % text) self.suggestSearchAppButton.set_tooltip_text(_("Search portal for '%s'") % text) self.applicationsBox.add(self.suggestSearchButton) self.suggestSearchButton.set_text(_("Search repositories for '%s'") % text) self.suggestSearchButton.set_tooltip_text(_("Search repositories for '%s'") % text) self.applicationsBox.add(self.suggestShowButton) self.suggestShowButton.set_text(_("Show package '%s'") % text) self.suggestShowButton.set_tooltip_text(_("Show package '%s'") % text) self.applicationsBox.add(self.suggestInstallButton) self.suggestInstallButton.set_text(_("Install package '%s'") % text) self.suggestInstallButton.set_tooltip_text(_("Install package '%s'") % text) for i in self.categoriesBox.get_children(): i.set_relief( gtk.RELIEF_NONE ) allButton = self.categoriesBox.get_children()[0]; allButton.set_relief( gtk.RELIEF_HALF ) self.activeFilter = (0, text) else: #print "CATFILTER" self.activeFilter = (1, category) if category == "": for i in self.applicationsBox.get_children(): i.show_all() else: for i in self.applicationsBox.get_children(): i.filterCategory( category ) for i in self.applicationsBox.get_children(): i.filterCategory( category ) for i in self.categoriesBox.get_children(): i.set_relief( gtk.RELIEF_NONE ) widget.set_relief( gtk.RELIEF_HALF ) widget.grab_focus() self.searchEntry.set_text( "" ) self.applicationsScrolledWindow.get_vadjustment().set_value( 0 ) #print u"Filtertime: ", (time.time() - start), "s" # Forward all text to the search box def keyPress( self, widget, event ): if event.string.strip() != "" or event.keyval == gtk.keysyms.BackSpace: self.searchEntry.event( event ) return True if event.keyval == gtk.keysyms.Down and self.searchEntry.is_focus(): self.applicationsBox.get_children()[0].grab_focus() return False def favPopup( self, widget, ev ): if ev.button == 3: if ev.y > widget.get_allocation().height / 2: insertBefore = False else: insertBefore = True if widget.type == "location": mTree = gtk.glade.XML( self.gladefile, "favoritesMenu" ) #i18n launchMenuItem = gtk.MenuItem(_("Launch")) removeFromFavMenuItem = gtk.MenuItem(_("Remove from favorites")) startupMenuItem = gtk.CheckMenuItem(_("Launch when I log in")) separator = gtk.SeparatorMenuItem() insertSpaceMenuItem = gtk.MenuItem(_("Insert space")) insertSeparatorMenuItem = gtk.MenuItem(_("Insert separator")) launchMenuItem.connect( "activate", self.onLaunchApp, widget) removeFromFavMenuItem.connect( "activate", self.onFavoritesRemove, widget ) insertSpaceMenuItem.connect( "activate", self.onFavoritesInsertSpace, widget, insertBefore ) insertSeparatorMenuItem.connect( "activate", self.onFavoritesInsertSeparator, widget, insertBefore ) mTree.get_widget("favoritesMenu").append(launchMenuItem) mTree.get_widget("favoritesMenu").append(removeFromFavMenuItem) mTree.get_widget("favoritesMenu").append(startupMenuItem) mTree.get_widget("favoritesMenu").append(separator) mTree.get_widget("favoritesMenu").append(insertSpaceMenuItem) mTree.get_widget("favoritesMenu").append(insertSeparatorMenuItem) mTree.get_widget("favoritesMenu").show_all() mTree.get_widget( "favoritesMenu" ).popup( None, None, None, ev.button, ev.time ) if widget.isInStartup(): startupMenuItem.set_active( True ) startupMenuItem.connect( "toggled", self.onRemoveFromStartup, widget ) else: startupMenuItem.set_active( False ) startupMenuItem.connect( "toggled", self.onAddToStartup, widget ) else: mTree = gtk.glade.XML( self.gladefile, "favoritesMenuExtra" ) #i18n removeMenuItem = gtk.MenuItem(_("Remove")) insertSpaceMenuItem = gtk.MenuItem(_("Insert space")) insertSeparatorMenuItem = gtk.MenuItem(_("Insert separator")) mTree.get_widget("favoritesMenuExtra").append(removeMenuItem) mTree.get_widget("favoritesMenuExtra").append(insertSpaceMenuItem) mTree.get_widget("favoritesMenuExtra").append(insertSeparatorMenuItem) mTree.get_widget("favoritesMenuExtra").show_all() removeMenuItem.connect( "activate", self.onFavoritesRemove, widget ) insertSpaceMenuItem.connect( "activate", self.onFavoritesInsertSpace, widget, insertBefore ) insertSeparatorMenuItem.connect( "activate", self.onFavoritesInsertSeparator, widget, insertBefore ) mTree.get_widget( "favoritesMenuExtra" ).popup( None, None, None, ev.button, ev.time ) def menuPopup( self, widget, event ): if event.button == 3: mTree = gtk.glade.XML( self.gladefile, "applicationsMenu" ) #i18n launchMenuItem = gtk.MenuItem(_("Launch")) favoriteMenuItem = gtk.CheckMenuItem(_("Show in my favorites")) startupMenuItem = gtk.CheckMenuItem(_("Launch when I log in")) separator = gtk.SeparatorMenuItem() uninstallMenuItem = gtk.MenuItem(_("Uninstall")) mTree.get_widget("applicationsMenu").append(launchMenuItem) mTree.get_widget("applicationsMenu").append(favoriteMenuItem) mTree.get_widget("applicationsMenu").append(startupMenuItem) mTree.get_widget("applicationsMenu").append(separator) mTree.get_widget("applicationsMenu").append(uninstallMenuItem) mTree.get_widget("applicationsMenu").show_all() launchMenuItem.connect( "activate", self.onLaunchApp, widget ) uninstallMenuItem.connect ( "activate", self.onUninstallApp, widget ) if self.isLocationInFavorites( widget.desktopFile ): favoriteMenuItem.set_active( True ) favoriteMenuItem.connect( "toggled", self.onRemoveFromFavorites, widget ) else: favoriteMenuItem.set_active( False ) favoriteMenuItem.connect( "toggled", self.onAddToFavorites, widget ) if widget.isInStartup(): startupMenuItem.set_active( True ) startupMenuItem.connect( "toggled", self.onRemoveFromStartup, widget ) else: startupMenuItem.set_active( False ) startupMenuItem.connect( "toggled", self.onAddToStartup, widget ) mTree.get_widget( "applicationsMenu" ).popup( None, None, None, event.button, event.time ) def onLaunchApp( self, menu, widget ): widget.execute() self.mintMenuWin.hide() def onUninstallApp( self, menu, widget ): widget.uninstall() self.mintMenuWin.hide() def onFavoritesInsertSpace( self, menu, widget, insertBefore ): if insertBefore: self.favoritesAdd( self.favoritesBuildSpace(), widget.position ) else: self.favoritesAdd( self.favoritesBuildSpace(), widget.position + 1 ) def onFavoritesInsertSeparator( self, menu, widget, insertBefore ): if insertBefore: self.favoritesAdd( self.favoritesBuildSeparator(), widget.position ) else: self.favoritesAdd( self.favoritesBuildSeparator(), widget.position + 1 ) def onFavoritesRemove( self, menu, widget ): self.favoritesRemove( widget.position ) def onAddToStartup( self, menu, widget ): widget.addToStartup() def onRemoveFromStartup( self, menu, widget ): widget.removeFromStartup() def onAddToFavorites( self, menu, widget ): self.favoritesAdd( self.favoritesBuildLauncher( widget.desktopFile ) ) def onRemoveFromFavorites( self, menu, widget ): self.favoritesRemoveLocation( widget.desktopFile ) def ReceiveCallback( self, widget, context, x, y, selection, targetType, time ): if targetType == self.TARGET_TYPE_TEXT: for uri in selection.get_uris(): self.favoritesAdd( self.favoritesBuildLauncher( uri ) ) def Search( self, widget ): text = self.searchEntry.get_text().strip() if text != "": self.searchEntry.set_text( "" ) self.mintMenuWin.hide() fullstring = self.searchtool.replace( "%s", text ) newstring = fullstring.split() Execute( newstring ) def SearchWithButton( self, widget, event ): self.Search( widget ) def do_plugin( self ): self.Todos() self.buildFavorites() # Scroll button into view def scrollItemIntoView( self, widget, event = None ): viewport = widget.parent while not isinstance( viewport, gtk.Viewport ): if not viewport.parent: return viewport = viewport.parent aloc = widget.get_allocation() viewport.get_vadjustment().clamp_page(aloc.y, aloc.y + aloc.height) def favoritesBuildSpace( self ): space = gtk.EventBox() space.set_size_request( -1, 20 ) space.connect( "button_release_event", self.favPopup ) space.type = "space" self.mintMenuWin.SetPaneColors( [ space ] ) space.show() return space def favoritesBuildSeparator( self ): separator = gtk.EventBox() separator.add( gtk.HSeparator() ) separator.set_size_request( -1, 20 ) separator.connect( "button_release_event", self.favPopup ) separator.type = "separator" self.mintMenuWin.SetPaneColors( [ separator ] ) separator.show_all() return separator def favoritesBuildLauncher( self, location ): try: ButtonIcon = None # For Folders and Network Shares location = string.join( location.split( "%20" ) ) if location.startswith( "file" ): ButtonIcon = "gnome-fs-directory" if location.startswith( "smb" ) or location.startswith( "ssh" ) or location.startswith( "network" ): ButtonIcon = "gnome-fs-network" #For Special locations if location == "x-nautilus-desktop:///computer": location = "/usr/share/applications/nautilus-computer.desktop" elif location == "x-nautilus-desktop:///home": location = "/usr/share/applications/nautilus-home.desktop" elif location == "x-nautilus-desktop:///network": location = "/usr/share/applications/network-scheme.desktop" elif location.startswith( "x-nautilus-desktop:///" ): location = "/usr/share/applications/nautilus-computer.desktop" if location.startswith( "file://" ): location = location[7:] # Don't add a location twice for fav in self.favorites: if fav.type == "location" and fav.desktopFile == location: return None favButton = FavApplicationLauncher( location, self.faviconsize, self.swapgeneric ) if favButton.appExec: favButton.show() favButton.connect( "popup-menu", self.favPopup ) favButton.connect( "button_release_event", self.favPopup ) favButton.connect( "focus-in-event", self.scrollItemIntoView ) favButton.connect( "clicked", lambda w: self.mintMenuWin.hide() ) self.mintMenuWin.setTooltip( favButton, favButton.getTooltip() ) favButton.type = "location" return favButton except Exception, e: print u"File in favorites not found: '" + location + "'", e return None
class MainWindow( object ): """This is the main class for the application""" def __init__( self, toggleButton ): self.path = PATH sys.path.append( os.path.join( self.path, "plugins") ) self.icon = ICON self.toggle = toggleButton # Load glade file and extract widgets gladefile = os.path.join( self.path, "mintMenu.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.window = wTree.get_widget( "mainWindow" ) self.paneholder = wTree.get_widget( "paneholder" ) self.sidepane = wTree.get_widget( "sidepane" ) self.pinbutton = wTree.get_widget( "pin_button" ) self.pinholder = wTree.get_widget( "pinholder" ) self.border = wTree.get_widget( "border" ) self.panesToColor = [ ] self.headingsToColor = [ ] self.window.connect( "map-event", self.onMap ) self.window.connect( "show", self.onShow ) self.window.connect( "unmap-event", self.onUnmap ) self.window.connect( "button-press-event", self.onButtonPress ) self.window.connect( "key-press-event", self.onKeyPress ) self.window.connect( "grab-broken-event", self.onGrabBroken ) self.window.stick() plugindir = os.path.join( os.path.expanduser( "~" ), ".linuxmint/mintMenu/plugins" ) sys.path.append( plugindir ) dic = {"on_window1_destroy" : self.quit_cb, "on_pin_button_toggled" : self.PinMenu} wTree.signal_autoconnect( dic ) self.gconf = EasyGConf( "/apps/mintMenu/" ) self.gconftheme = EasyGConf( "/desktop/gnome/interface/" ) self.getSetGconfEntries() self.SetupMintMenuBorder() self.tooltips = gtk.Tooltips() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() self.PopulatePlugins(); self.gconf.notifyAdd( "plugins_list", self.RegenPlugins ) self.gconftheme.notifyAdd( "gtk_theme", self.RegenPlugins ) self.gconf.notifyAdd( "show_side_pane", self.toggleShowSidepane ) self.gconf.notifyAdd( "start_with_favorites", self.toggleStartWithFavorites ) self.gconf.notifyAdd( "/apps/panel/global/tooltips_enabled", self.toggleTooltipsEnabled ) self.gconf.notifyAdd( "tooltips_enabled", self.toggleTooltipsEnabled ) self.gconf.notifyAdd( "use_custom_color", self.toggleUseCustomColor ) self.gconf.notifyAdd( "custom_border_color", self.toggleCustomBorderColor ) self.gconf.notifyAdd( "custom_heading_color", self.toggleCustomHeadingColor ) self.gconf.notifyAdd( "custom_color", self.toggleCustomBackgroundColor ) self.gconf.notifyAdd( "border_width", self.toggleBorderWidth ) def quit_cb (self): gtk.main_quit() sys.exit(0) def wakePlugins( self ): # Call each plugin and let them know we're showing up for plugin in self.plugins.values(): if hasattr( plugin, "destroy" ): plugin.wake() def toggleTooltipsEnabled( self, client, connection_id, entry, args ): if entry.get_key() == "/apps/panel/global/tooltips_enabled": self.globalEnableTooltips = entry.get_value().get_bool() else: self.enableTooltips = entry.get_value().get_bool() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() def toggleStartWithFavorites( self, client, connection_id, entry, args ): self.startWithFavorites = entry.get_value().get_bool() def toggleShowSidepane( self, client, connection_id, entry, args ): self.sidepanevisible = entry.get_value().get_bool() if self.sidepanevisible == False and self.pinmenu == False: self.sidepane.hide() else: self.sidepane.show() def toggleBorderWidth( self, client, connection_id, entry, args ): self.borderwidth = entry.get_value().get_int() self.SetupMintMenuBorder() def toggleUseCustomColor( self, client, connection_id, entry, args ): self.usecustomcolor = entry.get_value().get_bool() self.SetupMintMenuBorder() self.SetPaneColors( self.panesToColor ) self.SetHeadingStyle( self.headingsToColor ) def toggleCustomBorderColor( self, client, connection_id, entry, args ): self.custombordercolor = entry.get_value().get_string() self.SetupMintMenuBorder() def toggleCustomBackgroundColor( self, client, connection_id, entry, args ): self.customcolor = entry.get_value().get_string() self.SetPaneColors( self.panesToColor ) def toggleCustomHeadingColor( self, client, connection_id, entry, args ): self.customheadingcolor = entry.get_value().get_string() self.SetHeadingStyle( self.headingsToColor ) def getSetGconfEntries( self ): self.pluginlist = self.gconf.get( "list-string", "plugins_list",['newpane','places', 'system_management', 'newpane', 'applications'] ) self.dottedfile = os.path.join( self.path, "dotted.png") self.usecustomcolor = self.gconf.get( "bool", "use_custom_color", False ) self.customcolor = self.gconf.get( "color", "custom_color", "#EEEEEE" ) self.customheadingcolor = self.gconf.get( "color", "custom_heading_color", "#001155" ) self.custombordercolor = self.gconf.get( "color", "custom_border_color", "#001155" ) self.borderwidth = self.gconf.get( "int", "border_width", 1 ) self.offset = self.gconf.get( "int", "mintMenu_offset", 0 ) self.pinmenu = self.gconf.get( "bool", "pin_menu", False ) self.enableTooltips = self.gconf.get( "bool", "tooltips_enabled", True ) self.globalEnableTooltips = self.gconf.get( "bool", "/apps/panel/global/tooltips_enabled", True ) self.sidepanevisible = self.gconf.get( "bool", "show_side_pane", False ) self.startWithFavorites = self.gconf.get( "bool", "start_with_favorites", False ) def PinMenu(self, *args, **kargs): self.pinmenu = self.pinbutton.get_active() self.gconf.set("bool", "pin_menu", self.pinmenu) if self.pinmenu == True: self.sidepane.show() elif not self.sidepanevisible: self.sidepane.hide() def SetupMintMenuBorder( self ): if self.usecustomcolor: self.window.modify_bg( gtk.STATE_NORMAL, gtk.gdk.color_parse( self.custombordercolor ) ) else: self.window.modify_bg( gtk.STATE_NORMAL, self.window.rc_get_style().bg[ gtk.STATE_SELECTED ] ) self.border.set_padding( self.borderwidth, self.borderwidth, self.borderwidth, self.borderwidth ) self.SetPaneColors( [ self.sidepane ] ) self.pinbutton.set_active( self.pinmenu ) if self.sidepanevisible == False and self.pinmenu == False: self.sidepane.hide() else: self.sidepane.show() def PopulatePlugins( self ): self.panesToColor = [ ] self.headingsToColor = [ ] start = time.time() PluginPane = gtk.EventBox() PluginPane.show() PaneLadder = gtk.VBox( False, 0 ) PluginPane.add( PaneLadder ) self.SetPaneColors( [ PluginPane ] ) ImageBox = gtk.EventBox() self.SetPaneColors( [ ImageBox ] ) ImageBox.show() seperatorImage = gtk.gdk.pixbuf_new_from_file( self.dottedfile ) self.plugins = {} for plugin in self.pluginlist: if plugin in self.plugins: print u"Duplicate plugin in list: ", plugin continue if plugin != "newpane": try: X = __import__( plugin ) # If no parameter passed to plugin it is autonomous if X.pluginclass.__init__.func_code.co_argcount == 1: MyPlugin = X.pluginclass() else: # pass mintMenu and togglebutton instance so that the plugin can use it MyPlugin = X.pluginclass( self, self.toggle ) if not MyPlugin.icon: MyPlugin.icon = "gnome-logo-icon.png" if hasattr( MyPlugin, "hideseparator" ) and not MyPlugin.hideseparator: Image1 = gtk.Image() Image1.set_from_pixbuf( seperatorImage ) if not ImageBox.get_child(): ImageBox.add( Image1 ) Image1.show() #print u"Loading plugin '" + plugin + "' : sucessful" except Exception, e: MyPlugin = gtk.EventBox() #Fake class for MyPlugin MyPlugin.heading = _("Couldn't load plugin:") + " " + plugin MyPlugin.content_holder = gtk.EventBox() # create traceback info = sys.exc_info() errorLabel = gtk.Label( "\n".join(traceback.format_exception( info[0], info[1], info[2] )).replace("\\n", "\n") ) errorLabel.set_selectable( True ) errorLabel.set_line_wrap( True ) errorLabel.set_alignment( 0.0, 0.0 ) errorLabel.set_padding( 5, 5 ) errorLabel.show() MyPlugin.content_holder.add( errorLabel ) MyPlugin.add( MyPlugin.content_holder ) MyPlugin.width = 270 MyPlugin.icon = 'gnome-logo-icon.png' print u"Unable to load " + plugin + " plugin :-(" self.SetPaneColors( [MyPlugin.content_holder] ) MyPlugin.content_holder.show() if MyPlugin.heading != "": VBox1 = gtk.VBox( False, 0 ) Label1 = gtk.Label( MyPlugin.heading ) Align1 = gtk.Alignment( 0, 0.5, 0, 0 ) Align1.set_padding( 0, 0, 0, 0 ) Align1.add( Label1 ) self.SetHeadingStyle( [Label1] ) Align1.show() Label1.show() if not hasattr( MyPlugin, 'sticky' ) or MyPlugin.sticky == True: heading = gtk.EventBox() Align1.set_padding( 0, 0, 10, 0 ) self.SetPaneColors( [heading] ) heading.set_size_request( MyPlugin.width, 30 ) else: heading = gtk.Button() heading.set_relief( gtk.RELIEF_NONE ) heading.set_size_request( MyPlugin.width, -1 ) heading.connect( "button_press_event", self.TogglePluginView, VBox1, MyPlugin.icon, MyPlugin.heading, MyPlugin ) heading.add( Align1 ) heading.show() VBox1.pack_start( heading, False ) VBox1.show() MyPlugin.container = VBox1 #Add plugin to Plugin Box under heading button MyPlugin.content_holder.reparent( VBox1 ) #Add plugin to main window PaneLadder.pack_start( VBox1 ) PaneLadder.show() if MyPlugin.window: MyPlugin.window.destroy() try: if hasattr( MyPlugin, 'do_plugin' ): MyPlugin.do_plugin() if hasattr( MyPlugin, 'height' ): MyPlugin.content_holder.set_size_request( -1, MyPlugin.height ) if hasattr( MyPlugin, 'itemstocolor' ): self.SetPaneColors( MyPlugin.itemstocolor ) if hasattr( MyPlugin, 'minimized' ) and MyPlugin.minimized: self.HidePlugin( MyPlugin.container, MyPlugin.icon, MyPlugin.heading, MyPlugin ) except: # create traceback info = sys.exc_info() error = _("Couldn't initialize plugin") + " " + plugin + " : " + "\n".join(traceback.format_exception( info[0], info[1], info[2] )).replace("\\n", "\n") msgDlg = gtk.MessageDialog( None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, error ) msgDlg.run(); msgDlg.destroy(); self.plugins[plugin] = MyPlugin else: self.paneholder.pack_start( ImageBox, False, False, 0 ) self.paneholder.pack_start( PluginPane, False, False, 0 ) PluginPane = gtk.EventBox() PaneLadder = gtk.VBox( False, 0 ) PluginPane.add( PaneLadder ) self.SetPaneColors( [PluginPane] ) ImageBox = gtk.EventBox() self.SetPaneColors( [ImageBox] ) ImageBox.show() PluginPane.show_all() if self.plugins and hasattr( MyPlugin, 'hideseparator' ) and not MyPlugin.hideseparator: Image1 = gtk.Image() Image1.set_from_pixbuf( seperatorImage ) Image1.show() ImageBox.add( Image1 ) self.paneholder.pack_start( ImageBox, False, False, 0 ) self.paneholder.pack_start( PluginPane, False, False, 0 ) self.tooltips.disable()
def __init__(self): self.path = os.path.abspath(os.path.dirname(sys.argv[0])) # Load glade file and extract widgets gladefile = os.path.join(self.path, "mintMenuConfig.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.mainWindow = wTree.get_widget("mainWindow") #i18n self.mainWindow.set_title(_("Menu preferences")) self.mainWindow.set_icon_from_file( "/usr/lib/linuxmint/mintMenu/icon.svg") wTree.get_widget("startWithFavorites").set_label( _("Always start with favorites pane")) wTree.get_widget("showButtonIcon").set_label(_("Show button icon")) wTree.get_widget("useCustomColors").set_label(_("Use custom colors")) wTree.get_widget("showRecentPlugin").set_label( _("Show recent documents plugin")) wTree.get_widget("showApplicationsPlugin").set_label( _("Show applications plugin")) wTree.get_widget("showSystemPlugin").set_label(_("Show system plugin")) wTree.get_widget("showPlacesPlugin").set_label(_("Show places plugin")) wTree.get_widget("showAppComments").set_label( _("Show application comments")) wTree.get_widget("showCategoryIcons").set_label( _("Show category icons")) wTree.get_widget("hover").set_label(_("Hover")) wTree.get_widget("use_apt").set_label( _("Search for packages to install")) wTree.get_widget("swapGeneric").set_label( _("Swap name and generic name")) wTree.get_widget("label11").set_text(_("Border width:")) wTree.get_widget("label2").set_text(_("pixels")) wTree.get_widget("label8").set_text(_("Opacity:")) wTree.get_widget("label9").set_text("%") wTree.get_widget("buttonTextLabel").set_text(_("Button text:")) wTree.get_widget("label1").set_text(_("Options")) wTree.get_widget("label23").set_text(_("Applications")) wTree.get_widget("colorsLabel").set_text(_("Theme")) wTree.get_widget("favLabel").set_text(_("Favorites")) wTree.get_widget("label3").set_text(_("Main button")) wTree.get_widget("backgroundColorLabel").set_text(_("Background:")) wTree.get_widget("headingColorLabel").set_text(_("Headings:")) wTree.get_widget("borderColorLabel").set_text(_("Borders:")) wTree.get_widget("themeLabel").set_text(_("Theme:")) #wTree.get_widget("applicationsLabel").set_text(_("Applications")) #wTree.get_widget("favoritesLabel").set_text(_("Favorites")) wTree.get_widget("numberColumnsLabel").set_text( _("Number of columns:")) wTree.get_widget("iconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("iconSizeLabel2").set_text(_("Icon size:")) wTree.get_widget("placesIconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("systemIconSizeLabel").set_text(_("Icon size:")) wTree.get_widget("hoverLabel").set_text(_("Hover delay (ms):")) wTree.get_widget("label4").set_text(_("Button icon:")) wTree.get_widget("label5").set_text(_("Search command:")) wTree.get_widget("placesLabel").set_text(_("Places")) wTree.get_widget("allowscrollbarcheckbutton").set_label( _("Allow Scrollbar")) wTree.get_widget("showgtkbookmarkscheckbutton").set_label( _("Show GTK Bookmarks")) wTree.get_widget("placesHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultPlacesFrameLabel").set_text( _("Toggle Default Places:")) wTree.get_widget("computercheckbutton").set_label(_("Computer")) wTree.get_widget("homecheckbutton").set_label(_("Home Folder")) wTree.get_widget("networkcheckbutton").set_label(_("Network")) wTree.get_widget("desktopcheckbutton").set_label(_("Desktop")) wTree.get_widget("trashcheckbutton").set_label(_("Trash")) wTree.get_widget("customPlacesFrameLabel").set_text( _("Custom Places:")) wTree.get_widget("systemLabel").set_text(_("System")) wTree.get_widget("allowscrollbarcheckbutton1").set_label( _("Allow Scrollbar")) wTree.get_widget("systemHeightEntryLabel").set_text(_("Height:")) wTree.get_widget("defaultItemsFrameLabel").set_text( _("Toggle Default Items:")) wTree.get_widget("softwaremanagercheckbutton").set_label( _("Software Manager")) wTree.get_widget("packagemanagercheckbutton").set_label( _("Package Manager")) wTree.get_widget("controlcentercheckbutton").set_label( _("Control Center")) wTree.get_widget("terminalcheckbutton").set_label(_("Terminal")) wTree.get_widget("lockcheckbutton").set_label(_("Lock Screen")) wTree.get_widget("logoutcheckbutton").set_label(_("Log Out")) wTree.get_widget("quitcheckbutton").set_label(_("Quit")) self.editPlaceDialogTitle = (_("Edit Place")) self.newPlaceDialogTitle = (_("New Place")) self.folderChooserDialogTitle = (_("Select a folder")) wTree.get_widget("hotkey_label").set_text(_("Keyboard shortcut:")) self.startWithFavorites = wTree.get_widget("startWithFavorites") self.showAppComments = wTree.get_widget("showAppComments") self.useAPT = wTree.get_widget("use_apt") self.showCategoryIcons = wTree.get_widget("showCategoryIcons") self.showRecentPlugin = wTree.get_widget("showRecentPlugin") self.showApplicationsPlugin = wTree.get_widget( "showApplicationsPlugin") self.showSystemPlugin = wTree.get_widget("showSystemPlugin") self.showPlacesPlugin = wTree.get_widget("showPlacesPlugin") self.swapGeneric = wTree.get_widget("swapGeneric") self.hover = wTree.get_widget("hover") self.hoverDelay = wTree.get_widget("hoverDelay") self.iconSize = wTree.get_widget("iconSize") self.favIconSize = wTree.get_widget("favIconSize") self.placesIconSize = wTree.get_widget("placesIconSize") self.systemIconSize = wTree.get_widget("systemIconSize") self.favCols = wTree.get_widget("numFavCols") self.borderWidth = wTree.get_widget("borderWidth") self.opacity = wTree.get_widget("opacity") self.useCustomColors = wTree.get_widget("useCustomColors") self.backgroundColor = wTree.get_widget("backgroundColor") self.borderColor = wTree.get_widget("borderColor") self.headingColor = wTree.get_widget("headingColor") self.backgroundColorLabel = wTree.get_widget("backgroundColorLabel") self.borderColorLabel = wTree.get_widget("borderColorLabel") self.headingColorLabel = wTree.get_widget("headingColorLabel") self.showButtonIcon = wTree.get_widget("showButtonIcon") self.buttonText = wTree.get_widget("buttonText") self.hotkeyText = wTree.get_widget("hotkeyText") self.buttonIcon = wTree.get_widget("buttonIcon") self.buttonIconChooser = wTree.get_widget("button_icon_chooser") self.image_filter = gtk.FileFilter() self.image_filter.set_name(_("Images")) self.image_filter.add_pattern("*.png") self.image_filter.add_pattern("*.jpg") self.image_filter.add_pattern("*.jpeg") self.image_filter.add_pattern("*.bmp") self.image_filter.add_pattern("*.ico") self.image_filter.add_pattern("*.xpm") self.image_filter.add_pattern("*.svg") self.buttonIconChooser.add_filter(self.image_filter) self.buttonIconChooser.set_filter(self.image_filter) self.buttonIconImage = wTree.get_widget("image_button_icon") self.searchCommand = wTree.get_widget("search_command") self.computertoggle = wTree.get_widget("computercheckbutton") self.homefoldertoggle = wTree.get_widget("homecheckbutton") self.networktoggle = wTree.get_widget("networkcheckbutton") self.desktoptoggle = wTree.get_widget("desktopcheckbutton") self.trashtoggle = wTree.get_widget("trashcheckbutton") self.customplacestree = wTree.get_widget("customplacestree") self.allowPlacesScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton") self.showgtkbookmarksToggle = wTree.get_widget( "showgtkbookmarkscheckbutton") self.placesHeightButton = wTree.get_widget("placesHeightSpinButton") if (self.allowPlacesScrollbarToggle.get_active() == False): self.placesHeightButton.set_sensitive(False) self.allowPlacesScrollbarToggle.connect("toggled", self.togglePlacesHeightEnabled) self.softwareManagerToggle = wTree.get_widget( "softwaremanagercheckbutton") self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton") self.controlCenterToggle = wTree.get_widget("controlcentercheckbutton") self.packageManagerToggle = wTree.get_widget( "packagemanagercheckbutton") self.terminalToggle = wTree.get_widget("terminalcheckbutton") self.lockToggle = wTree.get_widget("lockcheckbutton") self.logoutToggle = wTree.get_widget("logoutcheckbutton") self.quitToggle = wTree.get_widget("quitcheckbutton") self.allowSystemScrollbarToggle = wTree.get_widget( "allowscrollbarcheckbutton1") self.systemHeightButton = wTree.get_widget("systemHeightSpinButton") if (self.allowSystemScrollbarToggle.get_active() == False): self.systemHeightButton.set_sensitive(False) self.allowSystemScrollbarToggle.connect("toggled", self.toggleSystemHeightEnabled) if os.path.exists("/usr/lib/linuxmint/mintInstall/icon.svg"): wTree.get_widget("softwaremanagercheckbutton").show() else: wTree.get_widget("softwaremanagercheckbutton").hide() wTree.get_widget("closeButton").connect("clicked", gtk.main_quit) self.gconf = EasyGConf("/apps/mintMenu/") self.gconfApplications = EasyGConf( "/apps/mintMenu/plugins/applications/") self.gconfPlaces = EasyGConf("/apps/mintMenu/plugins/places/") self.gconfSystem = EasyGConf( "/apps/mintMenu/plugins/system-management/") self.useCustomColors.connect("toggled", self.toggleUseCustomColors) self.bindGconfValueToWidget(self.gconf, "bool", "start_with_favorites", self.startWithFavorites, "toggled", self.startWithFavorites.set_active, self.startWithFavorites.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "show_application_comments", self.showAppComments, "toggled", self.showAppComments.set_active, self.showAppComments.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "use_apt", self.useAPT, "toggled", self.useAPT.set_active, self.useAPT.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "show_category_icons", self.showCategoryIcons, "toggled", self.showCategoryIcons.set_active, self.showCategoryIcons.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "categories_mouse_over", self.hover, "toggled", self.hover.set_active, self.hover.get_active) self.bindGconfValueToWidget(self.gconfApplications, "bool", "swap_generic_name", self.swapGeneric, "toggled", self.swapGeneric.set_active, self.swapGeneric.get_active) self.bindGconfValueToWidget(self.gconfApplications, "int", "category_hover_delay", self.hoverDelay, "value-changed", self.hoverDelay.set_value, self.hoverDelay.get_value) self.bindGconfValueToWidget(self.gconfApplications, "int", "icon_size", self.iconSize, "value-changed", self.iconSize.set_value, self.iconSize.get_value) self.bindGconfValueToWidget(self.gconfApplications, "int", "favicon_size", self.favIconSize, "value-changed", self.favIconSize.set_value, self.favIconSize.get_value) self.bindGconfValueToWidget(self.gconfApplications, "int", "fav_cols", self.favCols, "value-changed", self.favCols.set_value, self.favCols.get_value) self.bindGconfValueToWidget(self.gconfPlaces, "int", "icon_size", self.placesIconSize, "value-changed", self.placesIconSize.set_value, self.placesIconSize.get_value) self.bindGconfValueToWidget(self.gconfSystem, "int", "icon_size", self.systemIconSize, "value-changed", self.systemIconSize.set_value, self.systemIconSize.get_value) self.bindGconfValueToWidget(self.gconf, "int", "border_width", self.borderWidth, "value-changed", self.borderWidth.set_value, self.borderWidth.get_value_as_int) self.bindGconfValueToWidget(self.gconf, "int", "opacity", self.opacity, "value-changed", self.opacity.set_value, self.opacity.get_value_as_int) self.bindGconfValueToWidget(self.gconf, "bool", "use_custom_color", self.useCustomColors, "toggled", self.useCustomColors.set_active, self.useCustomColors.get_active) self.bindGconfValueToWidget(self.gconf, "color", "custom_color", self.backgroundColor, "color-set", self.backgroundColor.set_color, self.getBackgroundColor) self.bindGconfValueToWidget(self.gconf, "color", "custom_heading_color", self.headingColor, "color-set", self.headingColor.set_color, self.getHeadingColor) self.bindGconfValueToWidget(self.gconf, "color", "custom_border_color", self.borderColor, "color-set", self.borderColor.set_color, self.getBorderColor) self.bindGconfValueToWidget(self.gconf, "bool", "hide_applet_icon", self.showButtonIcon, "toggled", self.setShowButtonIcon, self.getShowButtonIcon) self.bindGconfValueToWidget(self.gconf, "string", "applet_text", self.buttonText, "changed", self.buttonText.set_text, self.buttonText.get_text) self.bindGconfValueToWidget(self.gconf, "string", "hot_key", self.hotkeyText, "changed", self.hotkeyText.set_text, self.hotkeyText.get_text) self.bindGconfValueToWidget(self.gconf, "string", "applet_icon", self.buttonIconChooser, "file-set", self.setButtonIcon, self.buttonIconChooser.get_filename) self.bindGconfValueToWidget(self.gconfApplications, "string", "search_command", self.searchCommand, "changed", self.searchCommand.set_text, self.searchCommand.get_text) self.getPluginsToggle() self.showRecentPlugin.connect("toggled", self.setPluginsLayout) self.showApplicationsPlugin.connect("toggled", self.setPluginsLayout) self.showSystemPlugin.connect("toggled", self.setPluginsLayout) self.showPlacesPlugin.connect("toggled", self.setPluginsLayout) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_computer", self.computertoggle, "toggled", self.computertoggle.set_active, self.computertoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_home_folder", self.homefoldertoggle, "toggled", self.homefoldertoggle.set_active, self.homefoldertoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_network", self.networktoggle, "toggled", self.networktoggle.set_active, self.networktoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_desktop", self.desktoptoggle, "toggled", self.desktoptoggle.set_active, self.desktoptoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_trash", self.trashtoggle, "toggled", self.trashtoggle.set_active, self.trashtoggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "int", "height", self.placesHeightButton, "value-changed", self.placesHeightButton.set_value, self.placesHeightButton.get_value_as_int) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "allowScrollbar", self.allowPlacesScrollbarToggle, "toggled", self.allowPlacesScrollbarToggle.set_active, self.allowPlacesScrollbarToggle.get_active) self.bindGconfValueToWidget(self.gconfPlaces, "bool", "show_gtk_bookmarks", self.showgtkbookmarksToggle, "toggled", self.showgtkbookmarksToggle.set_active, self.showgtkbookmarksToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_software_manager", self.softwareManagerToggle, "toggled", self.softwareManagerToggle.set_active, self.softwareManagerToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_package_manager", self.packageManagerToggle, "toggled", self.packageManagerToggle.set_active, self.packageManagerToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_control_center", self.controlCenterToggle, "toggled", self.controlCenterToggle.set_active, self.controlCenterToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_terminal", self.terminalToggle, "toggled", self.terminalToggle.set_active, self.terminalToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_lock_screen", self.lockToggle, "toggled", self.lockToggle.set_active, self.lockToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_logout", self.logoutToggle, "toggled", self.logoutToggle.set_active, self.logoutToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "bool", "show_quit", self.quitToggle, "toggled", self.quitToggle.set_active, self.quitToggle.get_active) self.bindGconfValueToWidget(self.gconfSystem, "int", "height", self.systemHeightButton, "value-changed", self.systemHeightButton.set_value, self.systemHeightButton.get_value_as_int) self.bindGconfValueToWidget(self.gconfSystem, "bool", "allowScrollbar", self.allowSystemScrollbarToggle, "toggled", self.allowSystemScrollbarToggle.set_active, self.allowSystemScrollbarToggle.get_active) self.customplacepaths = self.gconfPlaces.get("list-string", "custom_paths", []) self.customplacenames = self.gconfPlaces.get("list-string", "custom_names", []) self.customplacestreemodel = gtk.ListStore(str, str) self.cell = gtk.CellRendererText() for count in range(len(self.customplacepaths)): self.customplacestreemodel.append( [self.customplacenames[count], self.customplacepaths[count]]) self.customplacestreemodel.connect("row-changed", self.updatePlacesGconf) self.customplacestreemodel.connect("row-deleted", self.updatePlacesGconf) self.customplacestreemodel.connect("rows-reordered", self.updatePlacesGconf) self.customplacestree.set_model(self.customplacestreemodel) self.namescolumn = gtk.TreeViewColumn(_("Name"), self.cell, text=0) self.placescolumn = gtk.TreeViewColumn(_("Path"), self.cell, text=1) self.customplacestree.append_column(self.namescolumn) self.customplacestree.append_column(self.placescolumn) wTree.get_widget("newButton").connect("clicked", self.newPlace) wTree.get_widget("editButton").connect("clicked", self.editPlace) wTree.get_widget("upButton").connect("clicked", self.moveUp) wTree.get_widget("downButton").connect("clicked", self.moveDown) wTree.get_widget("removeButton").connect("clicked", self.removePlace) #Detect themes and show theme here theme_name = commands.getoutput( "gconftool-2 --get /apps/mintMenu/theme_name").strip() themes = commands.getoutput("find /usr/share/themes -name gtkrc") themes = themes.split("\n") model = gtk.ListStore(str, str) wTree.get_widget("themesCombo").set_model(model) selected_theme = model.append([_("Desktop theme"), "default"]) for theme in themes: if theme.startswith("/usr/share/themes") and theme.endswith( "/gtk-2.0/gtkrc"): theme = theme.replace("/usr/share/themes/", "") theme = theme.replace("gtk-2.0", "") theme = theme.replace("gtkrc", "") theme = theme.replace("/", "") theme = theme.strip() iter = model.append([theme, theme]) if theme == theme_name: selected_theme = iter wTree.get_widget("themesCombo").set_active_iter(selected_theme) wTree.get_widget("themesCombo").connect("changed", self.set_theme) self.mainWindow.present() self.getBackgroundColor()
def __init__(self, toggleButton): self.path = PATH sys.path.append(os.path.join(self.path, "plugins")) self.icon = ICON self.toggle = toggleButton # Load glade file and extract widgets gladefile = os.path.join(self.path, "mintMenu.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.window = wTree.get_widget("mainWindow") self.paneholder = wTree.get_widget("paneholder") self.border = wTree.get_widget("border") self.panesToColor = [] self.headingsToColor = [] self.window.connect("map-event", self.onMap) self.window.connect("show", self.onShow) self.window.connect("unmap-event", self.onUnmap) self.window.connect("button-press-event", self.onButtonPress) self.window.connect("key-press-event", self.onKeyPress) self.window.connect("grab-broken-event", self.onGrabBroken) self.window.stick() plugindir = os.path.join(os.path.expanduser("~"), ".linuxmint/mintMenu/plugins") sys.path.append(plugindir) dic = {"on_window1_destroy": self.quit_cb} wTree.signal_autoconnect(dic) self.gconf = EasyGConf("/apps/mintMenu/") self.getSetGconfEntries() self.SetupMintMenuBorder() self.SetupMintMenuOpacity() self.tooltips = gtk.Tooltips() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() self.PopulatePlugins() self.gconf.notifyAdd("plugins_list", self.RegenPlugins) self.gconf.notifyAdd("start_with_favorites", self.toggleStartWithFavorites) self.gconf.notifyAdd("/apps/panel/global/tooltips_enabled", self.toggleTooltipsEnabled) self.gconf.notifyAdd("tooltips_enabled", self.toggleTooltipsEnabled) self.gconf.notifyAdd("use_custom_color", self.toggleUseCustomColor) self.gconf.notifyAdd("custom_border_color", self.toggleCustomBorderColor) self.gconf.notifyAdd("custom_heading_color", self.toggleCustomHeadingColor) self.gconf.notifyAdd("custom_color", self.toggleCustomBackgroundColor) self.gconf.notifyAdd("border_width", self.toggleBorderWidth) self.gconf.notifyAdd("opacity", self.toggleOpacity)
class MainWindow(object): """This is the main class for the application""" def __init__(self, toggleButton): self.path = PATH sys.path.append(os.path.join(self.path, "plugins")) self.icon = ICON self.toggle = toggleButton # Load glade file and extract widgets gladefile = os.path.join(self.path, "mintMenu.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.window = wTree.get_widget("mainWindow") self.paneholder = wTree.get_widget("paneholder") self.border = wTree.get_widget("border") self.panesToColor = [] self.headingsToColor = [] self.window.connect("map-event", self.onMap) self.window.connect("show", self.onShow) self.window.connect("unmap-event", self.onUnmap) self.window.connect("button-press-event", self.onButtonPress) self.window.connect("key-press-event", self.onKeyPress) self.window.connect("grab-broken-event", self.onGrabBroken) self.window.stick() plugindir = os.path.join(os.path.expanduser("~"), ".linuxmint/mintMenu/plugins") sys.path.append(plugindir) dic = {"on_window1_destroy": self.quit_cb} wTree.signal_autoconnect(dic) self.gconf = EasyGConf("/apps/mintMenu/") self.getSetGconfEntries() self.SetupMintMenuBorder() self.SetupMintMenuOpacity() self.tooltips = gtk.Tooltips() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() self.PopulatePlugins() self.gconf.notifyAdd("plugins_list", self.RegenPlugins) self.gconf.notifyAdd("start_with_favorites", self.toggleStartWithFavorites) self.gconf.notifyAdd("/apps/panel/global/tooltips_enabled", self.toggleTooltipsEnabled) self.gconf.notifyAdd("tooltips_enabled", self.toggleTooltipsEnabled) self.gconf.notifyAdd("use_custom_color", self.toggleUseCustomColor) self.gconf.notifyAdd("custom_border_color", self.toggleCustomBorderColor) self.gconf.notifyAdd("custom_heading_color", self.toggleCustomHeadingColor) self.gconf.notifyAdd("custom_color", self.toggleCustomBackgroundColor) self.gconf.notifyAdd("border_width", self.toggleBorderWidth) self.gconf.notifyAdd("opacity", self.toggleOpacity) def quit_cb(self): gtk.main_quit() sys.exit(0) def wakePlugins(self): # Call each plugin and let them know we're showing up for plugin in self.plugins.values(): if hasattr(plugin, "destroy"): plugin.wake() def toggleTooltipsEnabled(self, client, connection_id, entry, args): if entry.get_key() == "/apps/panel/global/tooltips_enabled": self.globalEnableTooltips = entry.get_value().get_bool() else: self.enableTooltips = entry.get_value().get_bool() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() def toggleStartWithFavorites(self, client, connection_id, entry, args): self.startWithFavorites = entry.get_value().get_bool() def toggleBorderWidth(self, client, connection_id, entry, args): self.borderwidth = entry.get_value().get_int() self.SetupMintMenuBorder() def toggleOpacity(self, client, connection_id, entry, args): self.opacity = entry.get_value().get_int() self.SetupMintMenuOpacity() def toggleUseCustomColor(self, client, connection_id, entry, args): self.usecustomcolor = entry.get_value().get_bool() self.SetupMintMenuBorder() self.SetPaneColors(self.panesToColor) self.SetHeadingStyle(self.headingsToColor) def toggleCustomBorderColor(self, client, connection_id, entry, args): self.custombordercolor = entry.get_value().get_string() self.SetupMintMenuBorder() def toggleCustomBackgroundColor(self, client, connection_id, entry, args): self.customcolor = entry.get_value().get_string() self.SetPaneColors(self.panesToColor) def toggleCustomHeadingColor(self, client, connection_id, entry, args): self.customheadingcolor = entry.get_value().get_string() self.SetHeadingStyle(self.headingsToColor) def getSetGconfEntries(self): self.pluginlist = self.gconf.get( "list-string", "plugins_list", ['places', 'system_management', 'newpane', 'applications']) self.dottedfile = os.path.join(self.path, "dotted.png") self.usecustomcolor = self.gconf.get("bool", "use_custom_color", False) self.customcolor = self.gconf.get("color", "custom_color", "#EEEEEE") self.customheadingcolor = self.gconf.get("color", "custom_heading_color", "#001155") self.custombordercolor = self.gconf.get("color", "custom_border_color", "#001155") self.borderwidth = self.gconf.get("int", "border_width", 1) self.opacity = self.gconf.get("int", "opacity", 98) self.offset = self.gconf.get("int", "mintMenu_offset", 0) self.enableTooltips = self.gconf.get("bool", "tooltips_enabled", True) self.globalEnableTooltips = self.gconf.get( "bool", "/apps/panel/global/tooltips_enabled", True) self.startWithFavorites = self.gconf.get("bool", "start_with_favorites", False) def SetupMintMenuBorder(self): if self.usecustomcolor: self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.custombordercolor)) else: self.window.modify_bg( gtk.STATE_NORMAL, self.window.rc_get_style().bg[gtk.STATE_SELECTED]) self.border.set_padding(self.borderwidth, self.borderwidth, self.borderwidth, self.borderwidth) def SetupMintMenuOpacity(self): print "Opacity is: " + str(self.opacity) opacity = float(self.opacity) / float(100) print "Setting opacity to: " + str(opacity) self.window.set_opacity(opacity) def PopulatePlugins(self): self.panesToColor = [] self.headingsToColor = [] start = time.time() PluginPane = gtk.EventBox() PluginPane.show() PaneLadder = gtk.VBox(False, 0) PluginPane.add(PaneLadder) self.SetPaneColors([PluginPane]) ImageBox = gtk.EventBox() self.SetPaneColors([ImageBox]) ImageBox.show() seperatorImage = gtk.gdk.pixbuf_new_from_file(self.dottedfile) self.plugins = {} for plugin in self.pluginlist: if plugin in self.plugins: print u"Duplicate plugin in list: ", plugin continue if plugin != "newpane": try: X = __import__(plugin) # If no parameter passed to plugin it is autonomous if X.pluginclass.__init__.func_code.co_argcount == 1: MyPlugin = X.pluginclass() else: # pass mintMenu and togglebutton instance so that the plugin can use it MyPlugin = X.pluginclass(self, self.toggle) if not MyPlugin.icon: MyPlugin.icon = "gnome-logo-icon.png" #if hasattr( MyPlugin, "hideseparator" ) and not MyPlugin.hideseparator: # Image1 = gtk.Image() # Image1.set_from_pixbuf( seperatorImage ) # if not ImageBox.get_child(): # ImageBox.add( Image1 ) # Image1.show() #print u"Loading plugin '" + plugin + "' : sucessful" except Exception, e: MyPlugin = gtk.EventBox() #Fake class for MyPlugin MyPlugin.heading = _( "Couldn't load plugin:") + " " + plugin MyPlugin.content_holder = gtk.EventBox() # create traceback info = sys.exc_info() errorLabel = gtk.Label("\n".join( traceback.format_exception(info[0], info[1], info[2])).replace( "\\n", "\n")) errorLabel.set_selectable(True) errorLabel.set_line_wrap(True) errorLabel.set_alignment(0.0, 0.0) errorLabel.set_padding(5, 5) errorLabel.show() MyPlugin.content_holder.add(errorLabel) MyPlugin.add(MyPlugin.content_holder) MyPlugin.width = 270 MyPlugin.icon = 'gnome-logo-icon.png' print u"Unable to load " + plugin + " plugin :-(" self.SetPaneColors([MyPlugin.content_holder]) MyPlugin.content_holder.show() VBox1 = gtk.VBox(False, 0) if MyPlugin.heading != "": Label1 = gtk.Label(MyPlugin.heading) Align1 = gtk.Alignment(0, 0, 0, 0) Align1.set_padding(10, 5, 10, 0) Align1.add(Label1) self.SetHeadingStyle([Label1]) Align1.show() Label1.show() if not hasattr(MyPlugin, 'sticky') or MyPlugin.sticky == True: heading = gtk.EventBox() Align1.set_padding(0, 0, 10, 0) self.SetPaneColors([heading]) heading.set_size_request(MyPlugin.width, 30) else: heading = gtk.HBox() #heading.set_relief( gtk.RELIEF_NONE ) heading.set_size_request(MyPlugin.width, -1) #heading.set_sensitive(False) #heading.connect( "button_press_event", self.TogglePluginView, VBox1, MyPlugin.icon, MyPlugin.heading, MyPlugin ) heading.add(Align1) heading.show() VBox1.pack_start(heading, False) VBox1.show() MyPlugin.container = VBox1 #Add plugin to Plugin Box under heading button MyPlugin.content_holder.reparent(VBox1) #Add plugin to main window PaneLadder.pack_start(VBox1) PaneLadder.show() if MyPlugin.window: MyPlugin.window.destroy() try: if hasattr(MyPlugin, 'do_plugin'): MyPlugin.do_plugin() if hasattr(MyPlugin, 'height'): MyPlugin.content_holder.set_size_request( -1, MyPlugin.height) if hasattr(MyPlugin, 'itemstocolor'): self.SetPaneColors(MyPlugin.itemstocolor) except: # create traceback info = sys.exc_info() error = _("Couldn't initialize plugin" ) + " " + plugin + " : " + "\n".join( traceback.format_exception( info[0], info[1], info[2])).replace( "\\n", "\n") msgDlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, error) msgDlg.run() msgDlg.destroy() self.plugins[plugin] = MyPlugin else: self.paneholder.pack_start(ImageBox, False, False, 0) self.paneholder.pack_start(PluginPane, False, False, 0) PluginPane = gtk.EventBox() PaneLadder = gtk.VBox(False, 0) PluginPane.add(PaneLadder) self.SetPaneColors([PluginPane]) ImageBox = gtk.EventBox() self.SetPaneColors([ImageBox]) ImageBox.show() PluginPane.show_all() if self.plugins and hasattr( MyPlugin, 'hideseparator') and not MyPlugin.hideseparator: Image1 = gtk.Image() Image1.set_from_pixbuf(seperatorImage) Image1.show() #ImageBox.add( Image1 ) Align1 = gtk.Alignment() Align1.set_padding(0, 0, 6, 6) Align1.add(Image1) ImageBox.add(Align1) ImageBox.show_all() self.paneholder.pack_start(ImageBox, False, False, 0) self.paneholder.pack_start(PluginPane, False, False, 0) self.tooltips.disable()
class pluginclass( object ): def __init__( self, mintMenuWin, toggleButton ): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton # Read GLADE file gladefile = os.path.join( os.path.dirname( __file__ ), "places.glade" ) wTree = gtk.glade.XML( gladefile, "mainWindow" ) self.placesBtnHolder = wTree.get_widget( "places_button_holder" ) self.editableBtnHolder = wTree.get_widget( "editable_button_holder" ) self.scrolledWindow=wTree.get_widget("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = wTree.get_widget( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("Places") # This should be the first item added to the window in glade self.content_holder = wTree.get_widget( "Places" ) # Items to get custom colors self.itemstocolor = [ wTree.get_widget( "viewport2" ) ] # Gconf stuff self.gconf = EasyGConf( "/apps/mintMenu/plugins/places/" ) self.gconf.notifyAdd( "icon_size", self.RegenPlugin ) self.gconf.notifyAdd( "show_computer", self.RegenPlugin ) self.gconf.notifyAdd( "show_desktop", self.RegenPlugin ) self.gconf.notifyAdd( "show_home_folder", self.RegenPlugin ) self.gconf.notifyAdd( "show_network", self.RegenPlugin ) self.gconf.notifyAdd( "show_trash", self.RegenPlugin ) self.gconf.notifyAdd( "custom_names", self.RegenPlugin ) self.gconf.notifyAdd( "custom_paths", self.RegenPlugin ) self.gconf.notifyAdd( "allowScrollbar", self.RegenPlugin ) self.gconf.notifyAdd( "height", self.changePluginSize ) self.gconf.notifyAdd( "width", self.changePluginSize ) self.gconf.bindGconfEntryToVar( "bool", "sticky", self, "sticky" ) self.GetGconfEntries() self.content_holder.set_size_request( self.width, self.height ) def wake (self) : if ( self.showtrash == True ): self.refreshTrash() def destroy( self ): self.gconf.notifyRemoveAll() def changePluginSize( self, client, connection_id, entry, args ): self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) if entry.get_key() == self.gconf.gconfDir+"width": self.width = entry.get_value().get_int() elif entry.get_key() == self.gconf.gconfDir+"height": if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) else: self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) self.height = entry.get_value().get_int() self.content_holder.set_size_request( self.width, self.height ) def RegenPlugin( self, *args, **kargs ): self.GetGconfEntries() self.ClearAll() self.do_standard_places() self.do_custom_places() def GetGconfEntries( self ): self.width = self.gconf.get( "int", "width", 200 ) self.allowScrollbar = self.gconf.get( "bool", "allowScrollbar", False) self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC ) self.height = self.gconf.get( "int", "height", 180 ) self.content_holder.set_size_request( self.width, self.height ) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER ) self.content_holder.set_size_request( self.width, self.height ) self.execapp = self.gconf.get( "string", "execute_app", "nautilus" ) self.iconsize = self.gconf.get( "int","icon_size", 2 ) # Check default items self.showcomputer = self.gconf.get( "bool", "show_computer", True ) self.showhomefolder = self.gconf.get( "bool", "show_home_folder", True ) self.shownetwork = self.gconf.get( "bool", "show_network", True ) self.showdesktop = self.gconf.get( "bool", "show_desktop", True ) self.showtrash = self.gconf.get( "bool", "show_trash", True ) # Get paths for custom items self.custompaths = self.gconf.get( "list-string", "custom_paths", [ ] ) # Get names for custom items self.customnames = self.gconf.get( "list-string", "custom_names", [ ] ) # Hide vertical dotted separator self.hideseparator = self.gconf.get( "bool", "hide_separator", False ) # Plugin icon self.icon = self.gconf.get( "string", 'icon', "gnome-fs-directory.png" ) # Allow plugin to be minimized to the left plugin pane self.sticky = self.gconf.get( "bool", "sticky", False ) self.minimized = self.gconf.get( "bool", "minimized", False ) def ClearAll(self): for child in self.placesBtnHolder.get_children(): child.destroy() for child in self.editableBtnHolder.get_children(): child.destroy() #Add standard places def do_standard_places( self ): if ( self.showcomputer == True ): Button1 = easyButton( "computer", self.iconsize, [_("Computer")], -1, -1 ) Button1.connect( "clicked", self.ButtonClicked, "nautilus computer:" ) Button1.show() self.placesBtnHolder.pack_start( Button1, False, False ) self.mintMenuWin.setTooltip( Button1, _("Browse all local and remote disks and folders accessible from this computer") ) if ( self.showhomefolder == True ): Button2 = easyButton( "user-home", self.iconsize, [_("Home Folder")], -1, -1 ) Button2.connect( "clicked", self.ButtonClicked, "nautilus" ) Button2.show() self.placesBtnHolder.pack_start( Button2, False, False ) self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") ) if ( self.shownetwork == True ): Button3 = easyButton( "network-workgroup", self.iconsize, [_("Network")], -1, -1 ) Button3.connect( "clicked", self.ButtonClicked, "nautilus network:" ) Button3.show() self.placesBtnHolder.pack_start( Button3, False, False ) self.mintMenuWin.setTooltip( Button3, _("Browse bookmarked and local network locations") ) if ( self.showdesktop == True ): # Determine where the Desktop folder is (could be localized) desktopDir = home + "/Desktop" try: import sys sys.path.append('/usr/lib/linuxmint/common') from configobj import ConfigObj config = ConfigObj(home + "/.config/user-dirs.dirs") tmpdesktopDir = config['XDG_DESKTOP_DIR'] tmpdesktopDir = commands.getoutput("echo " + tmpdesktopDir) if os.path.exists(tmpdesktopDir): desktopDir = tmpdesktopDir except Exception, detail: print detail Button4 = easyButton( "gnome-fs-desktop", self.iconsize, [_("Desktop")], -1, -1 ) Button4.connect( "clicked", self.ButtonClicked, "nautilus \"" + desktopDir + "\"") Button4.show() self.placesBtnHolder.pack_start( Button4, False, False ) self.mintMenuWin.setTooltip( Button4, _("Browse items placed on the desktop") ) if ( self.showtrash == True ): self.trashButton = easyButton( "user-trash", self.iconsize, [_("Trash")], -1, -1 ) self.trashButton.connect( "clicked", self.ButtonClicked, "nautilus trash:" ) self.trashButton.show() self.trashButton.connect( "button-release-event", self.trashPopup ) self.refreshTrash() self.placesBtnHolder.pack_start( self.trashButton, False, False ) self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") )
class MainWindow(object): """This is the main class for the application""" def __init__(self, toggleButton): self.path = PATH sys.path.append(os.path.join(self.path, "plugins")) self.detect_desktop_environment() self.icon = ICON self.toggle = toggleButton # Load glade file and extract widgets gladefile = os.path.join(self.path, "mintMenu.glade") wTree = gtk.glade.XML(gladefile, "mainWindow") self.window = wTree.get_widget("mainWindow") self.paneholder = wTree.get_widget("paneholder") self.border = wTree.get_widget("border") self.panesToColor = [] self.headingsToColor = [] self.window.connect("map-event", self.onMap) self.window.connect("show", self.onShow) self.window.connect("unmap-event", self.onUnmap) self.window.connect("button-press-event", self.onButtonPress) self.window.connect("key-press-event", self.onKeyPress) self.window.connect("grab-broken-event", self.onGrabBroken) self.window.stick() plugindir = os.path.join(os.path.expanduser("~"), ".linuxmint/mintMenu/plugins") sys.path.append(plugindir) dic = {"on_window1_destroy": self.quit_cb} wTree.signal_autoconnect(dic) self.gconf = EasyGConf("/apps/mintMenu/") self.getSetGconfEntries() self.SetupMintMenuBorder() self.SetupMintMenuOpacity() self.tooltips = gtk.Tooltips() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() self.PopulatePlugins() self.gconf.notifyAdd("plugins_list", self.RegenPlugins) self.gconf.notifyAdd("start_with_favorites", self.toggleStartWithFavorites) self.gconf.notifyAdd("/apps/panel/global/tooltips_enabled", self.toggleTooltipsEnabled) self.gconf.notifyAdd("tooltips_enabled", self.toggleTooltipsEnabled) self.gconf.notifyAdd("use_custom_color", self.toggleUseCustomColor) self.gconf.notifyAdd("custom_border_color", self.toggleCustomBorderColor) self.gconf.notifyAdd("custom_heading_color", self.toggleCustomHeadingColor) self.gconf.notifyAdd("custom_color", self.toggleCustomBackgroundColor) self.gconf.notifyAdd("border_width", self.toggleBorderWidth) self.gconf.notifyAdd("opacity", self.toggleOpacity) def quit_cb(self): gtk.main_quit() sys.exit(0) def wakePlugins(self): # Call each plugin and let them know we're showing up for plugin in self.plugins.values(): if hasattr(plugin, "destroy"): plugin.wake() def toggleTooltipsEnabled(self, client, connection_id, entry, args): if entry.get_key() == "/apps/panel/global/tooltips_enabled": self.globalEnableTooltips = entry.get_value().get_bool() else: self.enableTooltips = entry.get_value().get_bool() if self.globalEnableTooltips and self.enableTooltips: self.tooltips.enable() else: self.tooltips.disable() def toggleStartWithFavorites(self, client, connection_id, entry, args): self.startWithFavorites = entry.get_value().get_bool() def toggleBorderWidth(self, client, connection_id, entry, args): self.borderwidth = entry.get_value().get_int() self.SetupMintMenuBorder() def toggleOpacity(self, client, connection_id, entry, args): self.opacity = entry.get_value().get_int() self.SetupMintMenuOpacity() def toggleUseCustomColor(self, client, connection_id, entry, args): self.usecustomcolor = entry.get_value().get_bool() self.SetupMintMenuBorder() self.SetPaneColors(self.panesToColor) self.SetHeadingStyle(self.headingsToColor) def toggleCustomBorderColor(self, client, connection_id, entry, args): self.custombordercolor = entry.get_value().get_string() self.SetupMintMenuBorder() def toggleCustomBackgroundColor(self, client, connection_id, entry, args): self.customcolor = entry.get_value().get_string() self.SetPaneColors(self.panesToColor) def toggleCustomHeadingColor(self, client, connection_id, entry, args): self.customheadingcolor = entry.get_value().get_string() self.SetHeadingStyle(self.headingsToColor) def getSetGconfEntries(self): self.pluginlist = self.gconf.get( "list-string", "plugins_list", ['places', 'system_management', 'newpane', 'applications']) self.dottedfile = os.path.join(self.path, "dotted.png") self.usecustomcolor = self.gconf.get("bool", "use_custom_color", False) self.customcolor = self.gconf.get("color", "custom_color", "#EEEEEE") self.customheadingcolor = self.gconf.get("color", "custom_heading_color", "#001155") self.custombordercolor = self.gconf.get("color", "custom_border_color", "#001155") self.borderwidth = self.gconf.get("int", "border_width", 1) self.opacity = self.gconf.get("int", "opacity", 98) self.offset = self.gconf.get("int", "mintMenu_offset", 0) self.enableTooltips = self.gconf.get("bool", "tooltips_enabled", True) self.globalEnableTooltips = self.gconf.get( "bool", "/apps/panel/global/tooltips_enabled", True) self.startWithFavorites = self.gconf.get("bool", "start_with_favorites", False) def SetupMintMenuBorder(self): if self.usecustomcolor: self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.custombordercolor)) else: self.window.modify_bg( gtk.STATE_NORMAL, self.window.rc_get_style().bg[gtk.STATE_SELECTED]) self.border.set_padding(self.borderwidth, self.borderwidth, self.borderwidth, self.borderwidth) def SetupMintMenuOpacity(self): print "Opacity is: " + str(self.opacity) opacity = float(self.opacity) / float(100) print "Setting opacity to: " + str(opacity) self.window.set_opacity(opacity) def detect_desktop_environment(self): self.de = "gnome" try: de = commands.getoutput("/usr/lib/linuxmint/mintMenu/detectDE") if de in ["gnome", "kde", "xfce"]: self.de = de except Exception, detail: print detail