Beispiel #1
0
    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"))
Beispiel #2
0
    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") )
Beispiel #3
0
    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()
Beispiel #4
0
    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()
Beispiel #5
0
    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)
Beispiel #6
0
    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 )
Beispiel #7
0
    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)
Beispiel #8
0
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 )
Beispiel #10
0
    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 )                            
Beispiel #11
0
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)
Beispiel #14
0
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()
Beispiel #15
0
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
Beispiel #16
0
	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)	
Beispiel #17
0
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"))
Beispiel #18
0
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)
Beispiel #19
0
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
Beispiel #20
0
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()
Beispiel #21
0
    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()
Beispiel #22
0
    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)
Beispiel #23
0
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()
Beispiel #24
0
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") )
Beispiel #25
0
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