class pluginclass( object ): def __init__( self, mintMenuWin, toggleButton, de ): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read UI file builder = Gtk.Builder() builder.add_from_file(os.path.join( os.path.dirname( __file__ ), "places.glade" )) self.placesBtnHolder = builder.get_object( "places_button_holder" ) self.editableBtnHolder = builder.get_object( "editable_button_holder" ) self.scrolledWindow=builder.get_object("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = builder.get_object( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("Places") # This should be the first item added to the window in glade self.content_holder = builder.get_object( "Places" ) # Items to get custom colors self.itemstocolor = [ builder.get_object( "viewport2" ) ] # Settings self.settings = EasyGSettings("com.linuxmint.mintmenu.plugins.places") self.settings.notifyAdd( "icon-size", self.RegenPlugin ) self.settings.notifyAdd( "show-computer", self.RegenPlugin ) self.settings.notifyAdd( "show-desktop", self.RegenPlugin ) self.settings.notifyAdd( "show-home_folder", self.RegenPlugin ) self.settings.notifyAdd( "show-network", self.RegenPlugin ) self.settings.notifyAdd( "show-trash", self.RegenPlugin ) self.settings.notifyAdd( "custom-names", self.RegenPlugin ) self.settings.notifyAdd( "allow-scrollbar", self.RegenPlugin ) self.settings.notifyAdd( "show-gtk-bookmarks", self.RegenPlugin ) self.settings.notifyAdd( "height", self.changePluginSize ) self.settings.notifyAdd( "width", self.changePluginSize ) self.loadSettings() self.content_holder.set_size_request( self.width, self.height ) def wake (self) : if ( self.showtrash == True ): self.refreshTrash() def destroy( self ): self.settings.notifyRemoveAll() def changePluginSize( self, settings, key, args = None): self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar" ) self.width = self.settings.get( "int", "width" ) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER ) else: self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) self.height = self.settings.get( "int", "height" ) self.content_holder.set_size_request( self.width, self.height ) def RegenPlugin( self, *args, **kargs ): self.loadSettings() self.ClearAll() self.do_standard_places() self.do_custom_places() self.do_gtk_bookmarks() def loadSettings( self ): self.width = self.settings.get( "int", "width" ) self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar" ) self.showGTKBookmarks = self.settings.get( "bool", "show-gtk-bookmarks" ) self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) self.height = self.settings.get( "int", "height" ) self.content_holder.set_size_request( self.width, self.height ) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER ) self.content_holder.set_size_request( self.width, self.height ) self.iconsize = self.settings.get( "int", "icon-size" ) # Check default items self.showcomputer = self.settings.get( "bool", "show-computer" ) self.showhomefolder = self.settings.get( "bool", "show-home-folder" ) self.shownetwork = self.settings.get( "bool", "show-network" ) self.showdesktop = self.settings.get( "bool", "show-desktop" ) self.showtrash = self.settings.get( "bool", "show-trash" ) # Get paths for custom items self.custompaths = self.settings.get( "list-string", "custom-paths" ) # Get names for custom items self.customnames = self.settings.get( "list-string", "custom-names" ) # Hide vertical dotted separator self.hideseparator = self.settings.get( "bool", "hide-separator" ) # Plugin icon self.icon = self.settings.get( "string", "icon" ) # Allow plugin to be minimized to the left plugin pane self.sticky = self.settings.get( "bool", "sticky") self.minimized = self.settings.get( "bool", "minimized") 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 == "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, 0) 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, 0) self.mintMenuWin.setTooltip( Button2, _("Open your personal folder") ) if ( self.shownetwork == True and self.de == "mate"): mate_settings = Gio.Settings.new("org.mate.interface") icon_theme = mate_settings.get_string( "icon-theme" ) 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, 0) 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( "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, 0) 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:" ) elif self.de == "mate": self.trashButton.connect( "clicked", self.ButtonClicked, "caja 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, 0) self.mintMenuWin.setTooltip( self.trashButton, _("Browse deleted files") )
class pluginclass(object): def __init__(self, mintMenuWin, toggleButton, de): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de # Read UI file builder = Gtk.Builder() builder.add_from_file( os.path.join(os.path.dirname(__file__), "places.glade")) self.placesBtnHolder = builder.get_object("places_button_holder") self.editableBtnHolder = builder.get_object("editable_button_holder") self.scrolledWindow = builder.get_object("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = builder.get_object("mainWindow") # Set 'heading' property for plugin self.heading = _("Places") # This should be the first item added to the window in glade self.content_holder = builder.get_object("Places") # Items to get custom colors self.itemstocolor = [builder.get_object("viewport2")] # Settings self.settings = EasyGSettings("com.linuxmint.mintmenu.plugins.places") self.settings.notifyAdd("icon-size", self.RegenPlugin) self.settings.notifyAdd("show-computer", self.RegenPlugin) self.settings.notifyAdd("show-desktop", self.RegenPlugin) self.settings.notifyAdd("show-home_folder", self.RegenPlugin) self.settings.notifyAdd("show-network", self.RegenPlugin) self.settings.notifyAdd("show-trash", self.RegenPlugin) self.settings.notifyAdd("custom-names", self.RegenPlugin) self.settings.notifyAdd("allow-scrollbar", self.RegenPlugin) self.settings.notifyAdd("show-gtk-bookmarks", self.RegenPlugin) self.settings.notifyAdd("height", self.changePluginSize) self.settings.notifyAdd("width", self.changePluginSize) self.loadSettings() self.content_holder.set_size_request(self.width, self.height) def wake(self): if (self.showtrash == True): self.refreshTrash() def destroy(self): self.settings.notifyRemoveAll() def changePluginSize(self, settings, key, args=None): self.allowScrollbar = self.settings.get("bool", "allow-scrollbar") self.width = self.settings.get("int", "width") if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) else: self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.height = self.settings.get("int", "height") self.content_holder.set_size_request(self.width, self.height) def RegenPlugin(self, *args, **kargs): self.loadSettings() self.ClearAll() self.do_standard_places() self.do_custom_places() self.do_gtk_bookmarks() def loadSettings(self): self.width = self.settings.get("int", "width") self.allowScrollbar = self.settings.get("bool", "allow-scrollbar") self.showGTKBookmarks = self.settings.get("bool", "show-gtk-bookmarks") self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.height = self.settings.get("int", "height") self.content_holder.set_size_request(self.width, self.height) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) self.content_holder.set_size_request(self.width, self.height) self.iconsize = self.settings.get("int", "icon-size") # Check default items self.showcomputer = self.settings.get("bool", "show-computer") self.showhomefolder = self.settings.get("bool", "show-home-folder") self.shownetwork = self.settings.get("bool", "show-network") self.showdesktop = self.settings.get("bool", "show-desktop") self.showtrash = self.settings.get("bool", "show-trash") # Get paths for custom items self.custompaths = self.settings.get("list-string", "custom-paths") # Get names for custom items self.customnames = self.settings.get("list-string", "custom-names") # Hide vertical dotted separator self.hideseparator = self.settings.get("bool", "hide-separator") # Plugin icon self.icon = self.settings.get("string", "icon") # Allow plugin to be minimized to the left plugin pane self.sticky = self.settings.get("bool", "sticky") self.minimized = self.settings.get("bool", "minimized") 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 == "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, 0) 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, 0) self.mintMenuWin.setTooltip(Button2, _("Open your personal folder")) if (self.shownetwork == True and self.de == "mate"): mate_settings = Gio.Settings.new("org.mate.interface") icon_theme = mate_settings.get_string("icon-theme") 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, 0) 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'] if os.path.exists(os.path.expandvars(tmpdesktopDir)): desktopDir = tmpdesktopDir except Exception, detail: print detail Button4 = easyButton("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, 0) 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:") elif self.de == "mate": self.trashButton.connect("clicked", self.ButtonClicked, "caja 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, 0) self.mintMenuWin.setTooltip(self.trashButton, _("Browse deleted files"))
class pluginclass: """This is the main class for the plugin""" """It MUST be named pluginclass""" def __init__( self, mintMenuWin, toggleButton, de ): self.Win = mintMenuWin self.toggleButton = toggleButton self.de = de self.builder = Gtk.Builder() #The Glade file for the plugin self.builder.add_from_file (os.path.join( os.path.dirname( __file__ ), "recent.glade" )) #Set 'window' property for the plugin (Must be the root widget) self.window = self.builder.get_object( "window1" ) #Set 'heading' property for plugin self.heading = _("Recently used") #This should be the first item added to the window in glade self.content_holder = self.builder.get_object( "eventbox1" ) self.recentBox = self.builder.get_object("RecentBox") self.recentAppBox = self.builder.get_object("RecentApps") RecentHelper.recentAppBox = self.recentAppBox #self.recentApps = [] self.recentVBox = self.builder.get_object( "vbox1" ) #Specify plugin width self.width = 250 #Plugin icon self.icon = 'mate-folder.png' self.settings = EasyGSettings ("com.linuxmint.mintmenu.plugins.recent") self.settings.notifyAdd( 'height', self.RegenPlugin ) self.settings.notifyAdd( 'width', self.RegenPlugin ) self.settings.notifyAdd( 'num-recent-docs', self.RegenPlugin ) self.settings.notifyAdd( 'recent-font-size', self.RegenPlugin ) self.appSettings = EasyGSettings( "com.linuxmint.mintmenu.plugins.applications" ) self.appSettings.notifyAdd( "icon-size", self.RegenPlugin ) self.FileList=[] self.RecManagerInstance = Gtk.RecentManager.get_default() self.recentManagerId = self.RecManagerInstance.connect("changed", self.DoRecent) self.RegenPlugin() self.builder.get_object( "RecentTabs" ).set_current_page(0) #Connect event handlers self.builder.get_object("ClrBtn").connect("clicked", self.clrmenu) def wake (self) : pass def destroy( self ): self.recentBox.destroy() self.recentVBox.destroy() self.builder.get_object( "RecentTabs" ).destroy() self.builder.get_object("ClrBtn").destroy() self.content_holder.destroy() self.settings.notifyRemoveAll() if self.recentManagerId: self.RecManagerInstance.disconnect(self.recentManagerId) def RegenPlugin( self, *args, **kargs ): self.GetGSettingsEntries() def GetGSettingsEntries( self ): self.recenth = self.settings.get( 'int', 'height' ) self.recentw = self.settings.get( 'int', 'width' ) self.numentries = self.settings.get( 'int', 'num-recent-docs' ) RecentHelper.numentries = self.numentries self.recentfontsize = self.settings.get( 'int', 'recent-font-size' ) # Hide vertical dotted separator self.hideseparator = self.settings.get( "bool", "hide-separator" ) # Plugin icon self.icon = self.settings.get( "string", 'icon' ) # Allow plugin to be minimized to the left plugin pane self.sticky = self.settings.get( "bool", "sticky" ) self.minimized = self.settings.get( "bool", "minimized" ) RecentHelper.iconSize = self.appSettings.get( "int", "icon-size") self.RebuildPlugin() def SetHidden( self, state ): if state == True: self.settings.set( "bool", "minimized", True ) else: self.settings.set( "bool", "minimized", False ) def RebuildPlugin(self): self.content_holder.set_size_request(self.recentw, self.recenth ) self.DoRecent() def DoRecent( self, *args, **kargs ): for i in self.recentBox.get_children(): i.destroy() self.recentVBox.set_size_request( self.recentw, self.recenth ) if len( self.recentBox.get_children() ) < self.numentries: n=len( self.recentBox.get_children() )-1 else: n=self.numentries-1 while n >= 0: self.recentBox.remove( self.recentBox.get_children()[n] ) n-=1 self.FileList, self.IconList = self.GetRecent() loc = 0 for Name in self.FileList: if Name != None: self.AddRecentBtn( Name, self.IconList[loc] ) loc = loc + 1 RecentHelper.doRecentApps() return True def clrmenu(self, *args, **kargs): self.RecManagerInstance.purge_items() self.DoRecent() return def AddRecentBtn( self, Name, RecentImage ): DispName=os.path.basename( Name ) AButton = Gtk.Button( "", "ok", True ) AButton.remove( AButton.get_children()[0] ) AButton.set_size_request( 200, -1 ) AButton.set_relief( Gtk.ReliefStyle.NONE ) AButton.connect( "clicked", self.callback, Name ) AButton.show() Box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5) ButtonIcon = Gtk.Image() ButtonIcon.set_size_request(20, -1) ButtonIcon.set_from_pixbuf(RecentImage) Box1.add(ButtonIcon) Label1 = Gtk.Label( DispName ) Label1.set_ellipsize( Pango.EllipsizeMode.END ) Box1.add( Label1 ) AButton.add( Box1 ) AButton.show_all() self.recentBox.pack_start( AButton, False, True, 0 ) def callback(self, widget, filename=None): self.Win.hide() x = os.system("gvfs-open \""+filename+"\"") if x == 256: dia = Gtk.Dialog('File not found!', None, #the toplevel wgt of your app Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, #binary flags or'ed together ("Ok", 77)) dia.vbox.pack_start(Gtk.Label('The location or file could not be found!'), False, False, 0) dia.vbox.show_all() dia.show() result = dia.run() if result == 77: dia.destroy() def GetRecent(self, *args, **kargs): FileString=[] IconString=[] RecentInfo=self.RecManagerInstance.get_items() # print RecentInfo[0].get_icon(Gtk.IconSize.MENU) count=0 MaxEntries=self.numentries if self.numentries == -1: MaxEntries=len(RecentInfo) for items in RecentInfo: FileString.append(items.get_uri_display()) IconString.append(items.get_icon(Gtk.IconSize.MENU)) count+=1 if count >= MaxEntries: break return FileString, IconString def ButtonClicked( self, widget, event, Exec ): self.press_x = event.x self.press_y = event.y self.Exec = Exec def ButtonReleased( self, w, ev, ev2 ): if ev.button == 1: if not hasattr( self, "press_x" ) or \ not w.drag_check_threshold( int( self.press_x ), int( self.press_y ), int( ev.x ), int( ev.y ) ): if self.Win.pinmenu == False: self.Win.wTree.get_widget( "window1" ).hide() if "applications" in self.Win.plugins: self.Win.plugins["applications"].wTree.get_widget( "entry1" ).grab_focus() Execute( w, self.Exec ) def do_plugin(self): self.DoRecent()
class pluginclass(object): def __init__(self, mintMenuWin, toggleButton, de): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de self.builder = Gtk.Builder() self.builder.add_from_file( os.path.join(os.path.dirname(__file__), "system_management.glade")) self.systemBtnHolder = self.builder.get_object("system_button_holder") self.editableBtnHolder = self.builder.get_object( "editable_button_holder") self.scrolledWindow = self.builder.get_object("scrolledwindow2") # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = self.builder.get_object("mainWindow") # Set 'heading' property for plugin self.heading = _("System") # This should be the first item added to the window in glade self.content_holder = self.builder.get_object("System") # Items to get custom colors self.itemstocolor = [self.builder.get_object("viewport2")] # Gconf stuff self.settings = EasyGSettings( "com.linuxmint.mintmenu.plugins.system_management") self.settings.notifyAdd("icon-size", self.RegenPlugin) self.settings.notifyAdd("show-control-center", self.RegenPlugin) self.settings.notifyAdd("show-lock-screen", self.RegenPlugin) self.settings.notifyAdd("show-logout", self.RegenPlugin) self.settings.notifyAdd("show-package-manager", self.RegenPlugin) self.settings.notifyAdd("show-software-manager", self.RegenPlugin) self.settings.notifyAdd("show-terminal", self.RegenPlugin) self.settings.notifyAdd("show-quit", self.RegenPlugin) self.settings.notifyAdd("allow-scrollbar", self.RegenPlugin) self.settings.notifyAdd("height", self.changePluginSize) self.settings.notifyAdd("width", self.changePluginSize) self.settings.bindGSettingsEntryToVar("bool", "sticky", self, "sticky") self.GetGSettingsEntries() self.content_holder.set_size_request(self.width, self.height) def destroy(self): self.settings.notifyRemoveAll() def wake(self): pass def changePluginSize(self, settings, key, args): self.allowScrollbar = self.settings.get("bool", "allow-scrollbar") if key == "width": self.width = settings.get_int(key) elif key == "height": if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) else: self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.height = settings.get_int(key) self.content_holder.set_size_request(self.width, self.height) def RegenPlugin(self, *args, **kargs): self.GetGSettingsEntries() self.ClearAll() self.do_standard_items() def GetGSettingsEntries(self): self.width = self.settings.get("int", "width") self.allowScrollbar = self.settings.get("bool", "allow-scrollbar") self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.height = self.settings.get("int", "height") self.content_holder.set_size_request(self.width, self.height) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) self.content_holder.set_size_request(self.width, self.height) self.iconsize = self.settings.get("int", "icon-size") # Check toggles self.showSoftwareManager = self.settings.get("bool", "show-software-manager") self.showPackageManager = self.settings.get("bool", "show-package-manager") self.showControlCenter = self.settings.get("bool", "show-control-center") self.showTerminal = self.settings.get("bool", "show-terminal") self.showLockScreen = self.settings.get("bool", "show-lock-screen") self.showLogout = self.settings.get("bool", "show-logout") self.showQuit = self.settings.get("bool", "show-quit") # Hide vertical dotted separator self.hideseparator = self.settings.get("bool", "hide-separator") # Plugin icon self.icon = self.settings.get("string", "icon") # Allow plugin to be minimized to the left plugin pane self.sticky = self.settings.get("bool", "sticky") self.minimized = self.settings.get("bool", "minimized") 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, "gksu mintinstall") Button1.show() self.systemBtnHolder.pack_start(Button1, False, False, 0) 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, 0) 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, 0) 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, 0) 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, 0) 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, 0) 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, 0) 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, 0) 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 pluginclass( object ): def __init__( self, mintMenuWin, toggleButton, de ): self.mintMenuWin = mintMenuWin self.toggleButton = toggleButton self.de = de self.builder = Gtk.Builder() self.builder.add_from_file (os.path.join( os.path.dirname( __file__ ), "system_management.glade" )) self.systemBtnHolder = self.builder.get_object( "system_button_holder" ) self.editableBtnHolder = self.builder.get_object( "editable_button_holder" ) self.scrolledWindow = self.builder.get_object( "scrolledwindow2" ) # These properties are NECESSARY to maintain consistency # Set 'window' property for the plugin (Must be the root widget) self.window = self.builder.get_object( "mainWindow" ) # Set 'heading' property for plugin self.heading = _("System") # This should be the first item added to the window in glade self.content_holder = self.builder.get_object( "System" ) # Items to get custom colors self.itemstocolor = [ self.builder.get_object( "viewport2" ) ] # Gconf stuff self.settings = EasyGSettings( "com.linuxmint.mintmenu.plugins.system_management" ) self.settings.notifyAdd( "icon-size", self.RegenPlugin ) self.settings.notifyAdd( "show-control-center", self.RegenPlugin ) self.settings.notifyAdd( "show-lock-screen", self.RegenPlugin ) self.settings.notifyAdd( "show-logout", self.RegenPlugin ) self.settings.notifyAdd( "show-package-manager", self.RegenPlugin ) self.settings.notifyAdd( "show-software-manager", self.RegenPlugin ) self.settings.notifyAdd( "show-terminal", self.RegenPlugin ) self.settings.notifyAdd( "show-quit", self.RegenPlugin ) self.settings.notifyAdd( "allow-scrollbar", self.RegenPlugin ) self.settings.notifyAdd( "height", self.changePluginSize ) self.settings.notifyAdd( "width", self.changePluginSize ) self.settings.bindGSettingsEntryToVar( "bool", "sticky", self, "sticky" ) self.GetGSettingsEntries() self.content_holder.set_size_request( self.width, self.height ) def destroy( self ): self.settings.notifyRemoveAll() def wake (self) : pass def changePluginSize( self, settings, key, args ): self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar") if key == "width": self.width = settings.get_int(key) elif key == "height": if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER ) else: self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) self.height = settings.get_int(key) self.content_holder.set_size_request( self.width, self.height ) def RegenPlugin( self, *args, **kargs ): self.GetGSettingsEntries() self.ClearAll() self.do_standard_items() def GetGSettingsEntries( self ): self.width = self.settings.get( "int", "width") self.allowScrollbar = self.settings.get( "bool", "allow-scrollbar") self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) self.height = self.settings.get( "int", "height") self.content_holder.set_size_request( self.width, self.height ) if (self.allowScrollbar == False): self.height = -1 self.scrolledWindow.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER ) self.content_holder.set_size_request( self.width, self.height ) self.iconsize = self.settings.get( "int","icon-size") # Check toggles self.showSoftwareManager = self.settings.get( "bool", "show-software-manager") self.showPackageManager = self.settings.get( "bool", "show-package-manager") self.showControlCenter = self.settings.get( "bool", "show-control-center") self.showTerminal = self.settings.get( "bool", "show-terminal") self.showLockScreen = self.settings.get( "bool", "show-lock-screen") self.showLogout = self.settings.get( "bool", "show-logout") self.showQuit = self.settings.get( "bool", "show-quit") if self.de == "cinnamon": self.lock_cmd = "cinnamon-screensaver-command --lock" self.logout_cmd = "cinnamon-session-quit --logout" self.shutdown_cmd = "cinnamon-session-quit --power-off" self.terminal_cmd = "/usr/bin/gnome-terminal" self.settings_cmd = "cinnamon-settings" elif self.de == "xfce": self.lock_cmd = "xdg-screensaver lock" self.logout_cmd = "xfce4-session-logout" self.shutdown_cmd = "" self.terminal_cmd = "/usr/bin/gnome-terminal" self.settings_cmd = "xfce4-settings-manager" self.showLockScreen = False self.showQuit = False else: self.lock_cmd = "mate-screensaver-command -l" self.logout_cmd = "mate-session-save --logout-dialog" self.shutdown_cmd = "mate-session-save --shutdown-dialog" self.terminal_cmd = "/usr/bin/mate-terminal" self.settings_cmd = "mate-control-center" # Hide vertical dotted separator self.hideseparator = self.settings.get( "bool", "hide-separator") # Plugin icon self.icon = self.settings.get( "string", "icon" ) # Allow plugin to be minimized to the left plugin pane self.sticky = self.settings.get( "bool", "sticky") self.minimized = self.settings.get( "bool", "minimized") 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/bin/mintinstall"): Button1 = easyButton( "mintinstall", self.iconsize, [_("Software Manager")], -1, -1 ) Button1.connect( "clicked", self.ButtonClicked, "mintinstall" ) Button1.show() self.systemBtnHolder.pack_start( Button1, False, False, 0) 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, "synaptic-pkexec" ) Button2.show() self.systemBtnHolder.pack_start( Button2, False, False, 0 ) self.mintMenuWin.setTooltip( Button2, _("Install, remove and upgrade software packages") ) if ( self.showControlCenter == True ): Button3 = easyButton( "gtk-preferences", self.iconsize, [_("Control Center")], -1, -1 ) Button3.connect( "clicked", self.ButtonClicked, self.settings_cmd ) Button3.show() self.systemBtnHolder.pack_start( Button3, False, False, 0 ) self.mintMenuWin.setTooltip( Button3, _("Configure your system") ) if ( self.showTerminal == True ): Button4 = easyButton( "terminal", self.iconsize, [_("Terminal")], -1, -1 ) if os.path.exists(self.terminal_cmd): Button4.connect( "clicked", self.ButtonClicked, self.terminal_cmd ) else: Button4.connect( "clicked", self.ButtonClicked, "x-terminal-emulator" ) Button4.show() self.systemBtnHolder.pack_start( Button4, False, False, 0 ) self.mintMenuWin.setTooltip( Button4, _("Use the command line") ) if ( self.showLockScreen == True ): Button5 = easyButton( "system-lock-screen", self.iconsize, [_("Lock Screen")], -1, -1 ) Button5.connect( "clicked", self.ButtonClicked, self.lock_cmd ) Button5.show() self.systemBtnHolder.pack_start( Button5, False, False, 0 ) 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, self.logout_cmd ) Button6.show() self.systemBtnHolder.pack_start( Button6, False, False, 0 ) 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, self.shutdown_cmd ) Button7.show() self.systemBtnHolder.pack_start( Button7, False, False, 0 ) 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 pluginclass: """This is the main class for the plugin""" """It MUST be named pluginclass""" def __init__(self, mintMenuWin, toggleButton, de): self.Win = mintMenuWin self.toggleButton = toggleButton self.de = de self.builder = Gtk.Builder() #The Glade file for the plugin self.builder.add_from_file( os.path.join(os.path.dirname(__file__), "recent.glade")) #Set 'window' property for the plugin (Must be the root widget) self.window = self.builder.get_object("window1") #Set 'heading' property for plugin self.heading = _("Recent documents") #This should be the first item added to the window in glade self.content_holder = self.builder.get_object("eventbox1") self.recentBox = self.builder.get_object("RecentBox") self.recentVBox = self.builder.get_object("vbox1") #Specify plugin width self.width = 250 #Plugin icon self.icon = 'mate-folder.png' self.settings = EasyGSettings("com.linuxmint.mintmenu.plugins.recent") self.settings.notifyAdd('height', self.RegenPlugin) self.settings.notifyAdd('width', self.RegenPlugin) self.settings.notifyAdd('num-recent-docs', self.RegenPlugin) self.settings.notifyAdd('recent-font-size', self.RegenPlugin) self.FileList = [] self.RecManagerInstance = Gtk.RecentManager.get_default() self.recentManagerId = self.RecManagerInstance.connect( "changed", self.DoRecent) self.RegenPlugin() self.builder.get_object("RecentTabs").set_current_page(1) #Connect event handlers self.builder.get_object("ClrBtn").connect("clicked", self.clrmenu) def wake(self): pass def destroy(self): self.recentBox.destroy() self.recentVBox.destroy() self.builder.get_object("RecentTabs").destroy() self.builder.get_object("ClrBtn").destroy() self.content_holder.destroy() self.settings.notifyRemoveAll() if self.recentManagerId: self.RecManagerInstance.disconnect(self.recentManagerId) def RegenPlugin(self, *args, **kargs): self.GetGSettingsEntries() def GetGSettingsEntries(self): self.recenth = self.settings.get('int', 'height') self.recentw = self.settings.get('int', 'width') self.numentries = self.settings.get('int', 'num-recent-docs') self.recentfontsize = self.settings.get('int', 'recent-font-size') # Hide vertical dotted separator self.hideseparator = self.settings.get("bool", "hide-separator") # Plugin icon self.icon = self.settings.get("string", 'icon') # Allow plugin to be minimized to the left plugin pane self.sticky = self.settings.get("bool", "sticky") self.minimized = self.settings.get("bool", "minimized") self.RebuildPlugin() def SetHidden(self, state): if state == True: self.settings.set("bool", "minimized", True) else: self.settings.set("bool", "minimized", False) def RebuildPlugin(self): self.content_holder.set_size_request(self.recentw, self.recenth) self.DoRecent() def DoRecent(self, *args, **kargs): for i in self.recentBox.get_children(): i.destroy() self.recentVBox.set_size_request(self.recentw, self.recenth) if len(self.recentBox.get_children()) < self.numentries: n = len(self.recentBox.get_children()) - 1 else: n = self.numentries - 1 while n >= 0: self.recentBox.remove(self.recentBox.get_children()[n]) n -= 1 self.FileList, self.IconList = self.GetRecent() loc = 0 for Name in self.FileList: if Name != None: self.AddRecentBtn(Name, self.IconList[loc]) loc = loc + 1 return True def clrmenu(self, *args, **kargs): self.RecManagerInstance.purge_items() self.DoRecent() return def AddRecentBtn(self, Name, RecentImage): DispName = os.path.basename(Name) AButton = Gtk.Button("", "ok", True) AButton.remove(AButton.get_children()[0]) AButton.set_size_request(200, -1) AButton.set_relief(Gtk.ReliefStyle.NONE) AButton.connect("clicked", self.callback, Name) Align1 = Gtk.Alignment() Align1.set(0, 0.5, 0, 0) Align1.set_padding(0, 0, 0, 0) HBox1 = Gtk.HBox(False, 5) VBox1 = Gtk.VBox(False, 2) VBox1.show() req = Gtk.Requisition() AButton.size_request(req) Label1 = Gtk.Label(DispName) Label1.set_size_request(req.width - 20, -1) Label1.set_ellipsize(Pango.EllipsizeMode.END) Label1.show() VBox1.add(Label1) ButtonIcon = Gtk.Image() ButtonIcon.set_from_pixbuf(RecentImage) HBox1.add(ButtonIcon) ButtonIcon.show() HBox1.add(VBox1) HBox1.show() Align1.add(HBox1) Align1.show() AButton.add(Align1) AButton.show() self.recentBox.pack_start(AButton, False, True, 0) def callback(self, widget, filename=None): self.Win.hide() x = os.system("gvfs-open \"" + filename + "\"") if x == 256: dia = Gtk.Dialog( 'File not found!', None, #the toplevel wgt of your app Gtk.DialogFlags.MODAL | Gtk.DialogFlags. DESTROY_WITH_PARENT, #binary flags or'ed together ("Ok", 77)) dia.vbox.pack_start( Gtk.Label('The location or file could not be found!'), False, False, 0) dia.vbox.show_all() dia.show() result = dia.run() if result == 77: dia.destroy() def GetRecent(self, *args, **kargs): FileString = [] IconString = [] RecentInfo = self.RecManagerInstance.get_items() # print RecentInfo[0].get_icon(gtk.ICON_SIZE_MENU) count = 0 MaxEntries = self.numentries if self.numentries == -1: MaxEntries = len(RecentInfo) for items in RecentInfo: FileString.append(items.get_uri_display()) IconString.append(items.get_icon(Gtk.IconSize.MENU)) count += 1 if count >= MaxEntries: break return FileString, IconString def ButtonClicked(self, widget, event, Exec): self.press_x = event.x self.press_y = event.y self.Exec = Exec def ButtonReleased(self, w, ev, ev2): if ev.button == 1: if not hasattr( self, "press_x" ) or \ not w.drag_check_threshold( int( self.press_x ), int( self.press_y ), int( ev.x ), int( ev.y ) ): if self.Win.pinmenu == False: self.Win.wTree.get_widget("window1").hide() if "applications" in self.Win.plugins: self.Win.plugins["applications"].wTree.get_widget( "entry1").grab_focus() Execute(w, self.Exec) def do_plugin(self): self.DoRecent()