Example #1
0
class pluginclass:
    """This is the main class for the plugin"""
    """It MUST be named pluginclass"""

    def __init__(self, mateMenuWin, toggleButton):

        self.Win = mateMenuWin
        self.toggleButton = toggleButton

        self.builder = Gtk.Builder()
        #The Glade file for the plugin
        self.builder.add_from_file (os.path.join( '/', 'usr', 'share', 'mate-menu',  'plugins', 'recent.glade' ))

        #Set 'window' property for the plugin (Must be the root widget)
        self.window = self.builder.get_object( "window1" )

        #Set 'heading' property for plugin
        self.heading = _("Recent documents")

        #This should be the first item added to the window in glade
        self.content_holder = self.builder.get_object( "eventbox1" )

        self.recentBox = self.builder.get_object("RecentBox")
        self.recentVBox = self.builder.get_object( "vbox1" )

        #Specify plugin width
        self.width = 250

        #Plugin icon
        self.icon = 'mate-folder.png'

        self.settings = EasyGSettings ("org.mate.mate-menu.plugins.recent")

        self.settings.notifyAdd( 'height', self.RegenPlugin )
        self.settings.notifyAdd( 'width', self.RegenPlugin )
        self.settings.notifyAdd( 'num-recent-docs', self.RegenPlugin )
        self.settings.notifyAdd( 'recent-font-size', self.RegenPlugin )

        self.FileList=[]
        self.RecManagerInstance = Gtk.RecentManager.get_default()
        self.recentManagerId = self.RecManagerInstance.connect("changed", self.DoRecent)

        self.RegenPlugin()
        self.builder.get_object( "RecentTabs" ).set_current_page(1)

        #Connect event handlers
        self.builder.get_object("ClrBtn").connect("clicked", self.clrmenu)

    def wake (self) :
        pass

    def destroy( self ):
        self.recentBox.destroy()
        self.recentVBox.destroy()
        self.builder.get_object( "RecentTabs" ).destroy()
        self.builder.get_object("ClrBtn").destroy()
        self.content_holder.destroy()
        self.settings.notifyRemoveAll()
        if self.recentManagerId:
            self.RecManagerInstance.disconnect(self.recentManagerId)

    def RegenPlugin( self, *args, **kargs ):
        self.GetGSettingsEntries()

    def GetGSettingsEntries( self ):
        self.recenth = self.settings.get( 'int', 'height' )
        self.recentw = self.settings.get( 'int', 'width' )
        self.numentries = self.settings.get( 'int', 'num-recent-docs' )
        self.recentfontsize = self.settings.get( 'int', 'recent-font-size' )

        # Plugin icon
        self.icon = self.settings.get( "string", 'icon' )
        # Allow plugin to be minimized to the left plugin pane
        self.sticky = self.settings.get( "bool", "sticky" )
        self.minimized = self.settings.get( "bool", "minimized" )
        self.RebuildPlugin()

    def SetHidden( self, state ):
        if state == True:
            self.settings.set( "bool", "minimized", True )
        else:
            self.settings.set( "bool", "minimized", False )


    def RebuildPlugin(self):
        self.content_holder.set_size_request(self.recentw, self.recenth )
        self.DoRecent()


    def DoRecent( self, *args, **kargs ):
        for i in self.recentBox.get_children():
            i.destroy()

        self.recentVBox.set_size_request( self.recentw, self.recenth )
        if len( self.recentBox.get_children() ) < self.numentries:
            n=len( self.recentBox.get_children() )-1
        else:
            n=self.numentries-1
        while n >= 0:
            self.recentBox.remove( self.recentBox.get_children()[n] )
            n-=1

        self.FileList, self.IconList = self.GetRecent()
        loc = 0
        for Name in self.FileList:
            if Name != None:
                self.AddRecentBtn( Name, self.IconList[loc] )
            loc = loc + 1
        return True

    def clrmenu(self, *args, **kargs):
        self.RecManagerInstance.purge_items()
        self.DoRecent()
        return

    def AddRecentBtn( self, Name, RecentImage ):
        DispName=os.path.basename( Name )

        AButton = Gtk.Button( "", "ok", True )
        AButton.remove( AButton.get_children()[0] )
        AButton.set_size_request( 200, -1 )
        AButton.set_relief( Gtk.ReliefStyle.NONE )
        AButton.connect( "clicked", self.callback, Name )

        Align1 = Gtk.Alignment()
        Align1.set( 0, 0.5, 0, 0)
        Align1.set_padding( 0, 0, 0, 0 )
        HBox1 = Gtk.HBox( False, 5 )
        VBox1 = Gtk.VBox( False, 2 )

        VBox1.show()

        req = Gtk.Requisition()
        AButton.size_request(req)

        Label1 = Gtk.Label( DispName )
        Label1.set_size_request( req.width-20, -1 )
        Label1.set_ellipsize( Pango.EllipsizeMode.END )
        Label1.show()
        VBox1.add( Label1 )

        ButtonIcon = Gtk.Image()
        ButtonIcon.set_from_pixbuf(RecentImage)
        HBox1.add( ButtonIcon )

        ButtonIcon.show()
        HBox1.add( VBox1 )
        HBox1.show()
        Align1.add( HBox1 )
        Align1.show()
        AButton.add( Align1 )
        AButton.show()

        self.recentBox.pack_start( AButton, False, True, 0 )

    def callback(self, widget, filename=None):
        self.Win.hide()

        x = os.system("gvfs-open \""+filename+"\"")
        if x == 256:
            dia = Gtk.Dialog('File not found!',
                             None,  #the toplevel wgt of your app
                             Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,  #binary flags or'ed together
                             ("Ok", 77))
            dia.vbox.pack_start(Gtk.Label('The location or file could not be found!'), False, False, 0)
            dia.vbox.show_all()
            dia.show()
            result = dia.run()
            if result == 77:
                dia.destroy()



    def GetRecent(self, *args, **kargs):
        FileString=[]
        IconString=[]
        RecentInfo=self.RecManagerInstance.get_items()
        # print RecentInfo[0].get_icon(gtk.ICON_SIZE_MENU)
        count=0
        MaxEntries=self.numentries
        if self.numentries == -1:
            MaxEntries=len(RecentInfo)
        for items in RecentInfo:
            FileString.append(items.get_uri_display())
            IconString.append(items.get_icon(Gtk.IconSize.MENU))
            count+=1
            if count >= MaxEntries:
                break
        return FileString,  IconString


    def ButtonClicked( self, widget, event, Exec ):
        self.press_x = event.x
        self.press_y = event.y
        self.Exec = Exec

    def ButtonReleased( self, w, ev, ev2 ):
        if ev.button == 1:
            if not hasattr( self, "press_x" ) or \
                    not w.drag_check_threshold( int( self.press_x ),
                                                                             int( self.press_y ),
                                                                             int( ev.x ),
                                                                             int( ev.y ) ):
                if self.Win.pinmenu == False:
                    self.Win.wTree.get_widget( "window1" ).hide()
                if "applications" in self.Win.plugins:
                    self.Win.plugins["applications"].wTree.get_widget( "entry1" ).grab_focus()
                Execute( w, self.Exec )

    def do_plugin(self):
        self.DoRecent()
Example #2
0
class mateMenuConfig(object):
    def __init__(self):

        self.data_path = os.path.join('/', 'usr', 'share', 'mate-menu')

        # Load glade file and extract widgets
        self.builder = Gtk.Builder()

        self.builder.add_from_file(
            os.path.join(self.data_path, "mate-menu-config.glade"))
        self.mainWindow = self.builder.get_object("mainWindow")

        #i18n
        self.mainWindow.set_title(_("Menu preferences"))
        self.mainWindow.set_icon_from_file(
            "/usr/share/mate-menu/icons/mate-logo.svg")

        self.builder.get_object("startWithFavorites").set_label(
            _("Always start with favorites pane"))
        self.builder.get_object("showButtonIcon").set_label(
            _("Show button icon"))
        self.builder.get_object("useCustomColors").set_label(
            _("Use custom colors"))
        self.builder.get_object("showRecentPlugin").set_label(
            _("Show recent documents plugin"))
        self.builder.get_object("showApplicationsPlugin").set_label(
            _("Show applications plugin"))
        self.builder.get_object("showSystemPlugin").set_label(
            _("Show system plugin"))
        self.builder.get_object("showPlacesPlugin").set_label(
            _("Show places plugin"))

        self.builder.get_object("showAppComments").set_label(
            _("Show application comments"))
        self.builder.get_object("showCategoryIcons").set_label(
            _("Show category icons"))
        self.builder.get_object("hover").set_label(_("Hover"))
        self.builder.get_object("remember_filter").set_label(
            _("Remember the last category or search"))
        self.builder.get_object("swapGeneric").set_label(
            _("Swap name and generic name"))

        self.builder.get_object("label11").set_text(_("Border width:"))
        self.builder.get_object("label25").set_text(_("pixels"))

        self.builder.get_object("buttonTextLabel").set_text(_("Button text:"))
        self.builder.get_object("label1").set_text(_("Options"))
        self.builder.get_object("applicationsLabel").set_text(
            _("Applications"))

        self.builder.get_object("colorsLabel").set_text(_("Theme"))
        self.builder.get_object("favLabel").set_text(_("Favorites"))
        self.builder.get_object("mainbuttonLabel").set_text(_("Main button"))
        self.builder.get_object("pluginsLabel").set_text(_("Plugins"))

        self.builder.get_object("always_show_search").set_label(
            _("Always show search suggestions"))
        self.builder.get_object("searchEngineTitleLabel").set_text(
            _("Search Engines:"))
        self.builder.get_object("enable_ddg").set_label(_("DuckDuckGo"))
        self.builder.get_object("enable_google").set_label(_("Google"))
        self.builder.get_object("enable_wikipedia").set_label(_("Wikipedia"))
        self.builder.get_object("enable_dictionary").set_label(_("Dictionary"))
        self.builder.get_object("enable_computer").set_label(_("Computer"))

        self.builder.get_object("backgroundColorLabel").set_text(
            _("Background:"))
        self.builder.get_object("headingColorLabel").set_text(_("Headings:"))
        self.builder.get_object("borderColorLabel").set_text(_("Borders:"))
        self.builder.get_object("themeLabel").set_text(_("Theme:"))

        #self.builder.get_object("applicationsLabel").set_text(_("Applications"))
        #self.builder.get_object("favoritesLabel").set_text(_("Favorites"))
        self.builder.get_object("numberColumnsLabel").set_text(
            _("Number of columns:"))
        self.builder.get_object("iconSizeLabel").set_text(_("Icon size:"))
        self.builder.get_object("iconSizeLabel2").set_text(_("Icon size:"))
        self.builder.get_object("placesIconSizeLabel").set_text(
            _("Icon size:"))
        self.builder.get_object("systemIconSizeLabel").set_text(
            _("Icon size:"))
        self.builder.get_object("hoverLabel").set_text(_("Hover delay (ms):"))
        self.builder.get_object("label4").set_text(_("Button icon:"))
        self.builder.get_object("label5").set_text(_("Search command:"))

        self.builder.get_object("placesLabel").set_text(_("Places"))
        self.builder.get_object("allowscrollbarcheckbutton").set_label(
            _("Allow Scrollbar"))
        self.builder.get_object("showgtkbookmarkscheckbutton").set_label(
            _("Show GTK+ Bookmarks"))
        self.builder.get_object("placesHeightEntryLabel").set_text(
            _("Height:"))
        self.builder.get_object("defaultPlacesFrameLabel").set_text(
            _("Toggle Default Places:"))
        self.builder.get_object("computercheckbutton").set_label(_("Computer"))
        self.builder.get_object("homecheckbutton").set_label(_("Home Folder"))
        self.builder.get_object("networkcheckbutton").set_label(_("Network"))
        self.builder.get_object("desktopcheckbutton").set_label(_("Desktop"))
        self.builder.get_object("trashcheckbutton").set_label(_("Trash"))
        self.builder.get_object("customPlacesFrameLabel").set_text(
            _("Custom Places:"))

        self.builder.get_object("systemLabel").set_text(_("System"))
        self.builder.get_object("allowscrollbarcheckbutton1").set_label(
            _("Allow Scrollbar"))
        self.builder.get_object("systemHeightEntryLabel").set_text(
            _("Height:"))
        self.builder.get_object("defaultItemsFrameLabel").set_text(
            _("Toggle Default Items:"))
        self.builder.get_object("packagemanagercheckbutton").set_label(
            _("Package Manager"))
        self.builder.get_object("controlcentercheckbutton").set_label(
            _("Control Center"))
        self.builder.get_object("terminalcheckbutton").set_label(_("Terminal"))
        self.builder.get_object("lockcheckbutton").set_label(_("Lock Screen"))
        self.builder.get_object("logoutcheckbutton").set_label(_("Log Out"))
        self.builder.get_object("quitcheckbutton").set_label(_("Quit"))

        self.editPlaceDialogTitle = (_("Edit Place"))
        self.newPlaceDialogTitle = (_("New Place"))
        self.folderChooserDialogTitle = (_("Select a folder"))

        self.startWithFavorites = self.builder.get_object("startWithFavorites")
        self.showAppComments = self.builder.get_object("showAppComments")
        self.showCategoryIcons = self.builder.get_object("showCategoryIcons")
        self.showRecentPlugin = self.builder.get_object("showRecentPlugin")
        self.showApplicationsPlugin = self.builder.get_object(
            "showApplicationsPlugin")
        self.showSystemPlugin = self.builder.get_object("showSystemPlugin")
        self.showPlacesPlugin = self.builder.get_object("showPlacesPlugin")
        self.swapGeneric = self.builder.get_object("swapGeneric")
        self.hover = self.builder.get_object("hover")
        self.hoverDelay = self.builder.get_object("hoverDelay")
        self.rememberFilter = self.builder.get_object("remember_filter")
        self.alwaysShowSearch = self.builder.get_object("always_show_search")
        self.enableDdg = self.builder.get_object("enable_ddg")
        self.enableGoogle = self.builder.get_object("enable_google")
        self.enableWikipedia = self.builder.get_object("enable_wikipedia")
        self.enableDictionary = self.builder.get_object("enable_dictionary")
        self.enableComputer = self.builder.get_object("enable_computer")
        self.iconSize = self.builder.get_object("iconSize")
        self.favIconSize = self.builder.get_object("favIconSize")
        self.placesIconSize = self.builder.get_object("placesIconSize")
        self.systemIconSize = self.builder.get_object("systemIconSize")
        self.favCols = self.builder.get_object("numFavCols")
        self.borderWidth = self.builder.get_object("borderWidth")
        self.useCustomColors = self.builder.get_object("useCustomColors")
        self.backgroundColor = self.builder.get_object("backgroundColor")
        self.borderColor = self.builder.get_object("borderColor")
        self.headingColor = self.builder.get_object("headingColor")
        self.backgroundColorLabel = self.builder.get_object(
            "backgroundColorLabel")
        self.borderColorLabel = self.builder.get_object("borderColorLabel")
        self.headingColorLabel = self.builder.get_object("headingColorLabel")
        self.showButtonIcon = self.builder.get_object("showButtonIcon")
        self.buttonText = self.builder.get_object("buttonText")
        self.hotkeyWidget = keybinding.KeybindingWidget(
            _("Keyboard shortcut:"))
        grid = self.builder.get_object("main_grid")
        grid.attach(self.hotkeyWidget, 0, 2, 2, 1)
        self.buttonIcon = self.builder.get_object("buttonIcon")
        self.buttonIconChooser = self.builder.get_object("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 = self.builder.get_object("image_button_icon")
        self.searchCommand = self.builder.get_object("search_command")
        self.computertoggle = self.builder.get_object("computercheckbutton")
        self.homefoldertoggle = self.builder.get_object("homecheckbutton")
        self.networktoggle = self.builder.get_object("networkcheckbutton")
        self.desktoptoggle = self.builder.get_object("desktopcheckbutton")
        self.trashtoggle = self.builder.get_object("trashcheckbutton")
        self.customplacestree = self.builder.get_object("customplacestree")
        self.allowPlacesScrollbarToggle = self.builder.get_object(
            "allowscrollbarcheckbutton")
        self.showgtkbookmarksToggle = self.builder.get_object(
            "showgtkbookmarkscheckbutton")
        self.placesHeightButton = self.builder.get_object(
            "placesHeightSpinButton")
        if (self.allowPlacesScrollbarToggle.get_active() == False):
            self.placesHeightButton.set_sensitive(False)
        self.allowPlacesScrollbarToggle.connect("toggled",
                                                self.togglePlacesHeightEnabled)
        self.packageManagerToggle = self.builder.get_object(
            "packagemanagercheckbutton")
        self.controlCenterToggle = self.builder.get_object(
            "controlcentercheckbutton")
        self.terminalToggle = self.builder.get_object("terminalcheckbutton")
        self.lockToggle = self.builder.get_object("lockcheckbutton")
        self.logoutToggle = self.builder.get_object("logoutcheckbutton")
        self.quitToggle = self.builder.get_object("quitcheckbutton")
        self.allowSystemScrollbarToggle = self.builder.get_object(
            "allowscrollbarcheckbutton1")
        self.systemHeightButton = self.builder.get_object(
            "systemHeightSpinButton")
        if (self.allowSystemScrollbarToggle.get_active() == False):
            self.systemHeightButton.set_sensitive(False)
        self.allowSystemScrollbarToggle.connect("toggled",
                                                self.toggleSystemHeightEnabled)
        self.builder.get_object("closeButton").connect("clicked",
                                                       Gtk.main_quit)

        self.settings = EasyGSettings("org.mate.mate-menu")
        self.settingsApplications = EasyGSettings(
            "org.mate.mate-menu.plugins.applications")
        self.settingsPlaces = EasyGSettings(
            "org.mate.mate-menu.plugins.places")
        self.settingsSystem = EasyGSettings(
            "org.mate.mate-menu.plugins.system_management")

        self.useCustomColors.connect("toggled", self.toggleUseCustomColors)

        self.bindGSettingsValueToWidget(self.settings, "bool",
                                        "start-with-favorites",
                                        self.startWithFavorites, "toggled",
                                        self.startWithFavorites.set_active,
                                        self.startWithFavorites.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "show-application-comments",
                                        self.showAppComments, "toggled",
                                        self.showAppComments.set_active,
                                        self.showAppComments.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "show-category-icons",
                                        self.showCategoryIcons, "toggled",
                                        self.showCategoryIcons.set_active,
                                        self.showCategoryIcons.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "categories-mouse-over", self.hover,
                                        "toggled", self.hover.set_active,
                                        self.hover.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "swap-generic-name", self.swapGeneric,
                                        "toggled", self.swapGeneric.set_active,
                                        self.swapGeneric.get_active)

        self.bindGSettingsValueToWidget(self.settingsApplications, "int",
                                        "category-hover-delay",
                                        self.hoverDelay, "value-changed",
                                        self.hoverDelay.set_value,
                                        self.hoverDelay.get_value)
        self.bindGSettingsValueToWidget(self.settingsApplications, "int",
                                        "icon-size", self.iconSize,
                                        "value-changed",
                                        self.iconSize.set_value,
                                        self.iconSize.get_value)
        self.bindGSettingsValueToWidget(self.settingsApplications, "int",
                                        "favicon-size", self.favIconSize,
                                        "value-changed",
                                        self.favIconSize.set_value,
                                        self.favIconSize.get_value)
        self.bindGSettingsValueToWidget(self.settingsApplications, "int",
                                        "fav-cols", self.favCols,
                                        "value-changed",
                                        self.favCols.set_value,
                                        self.favCols.get_value)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "remember-filter", self.rememberFilter,
                                        "toggled",
                                        self.rememberFilter.set_active,
                                        self.rememberFilter.get_active)

        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "always-show-search",
                                        self.alwaysShowSearch, "toggled",
                                        self.alwaysShowSearch.set_active,
                                        self.alwaysShowSearch.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "enable-ddg", self.enableDdg,
                                        "toggled", self.enableDdg.set_active,
                                        self.enableDdg.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "enable-google", self.enableGoogle,
                                        "toggled",
                                        self.enableGoogle.set_active,
                                        self.enableGoogle.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "enable-wikipedia",
                                        self.enableWikipedia, "toggled",
                                        self.enableWikipedia.set_active,
                                        self.enableWikipedia.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "enable-dictionary",
                                        self.enableDictionary, "toggled",
                                        self.enableDictionary.set_active,
                                        self.enableDictionary.get_active)
        self.bindGSettingsValueToWidget(self.settingsApplications, "bool",
                                        "enable-computer", self.enableComputer,
                                        "toggled",
                                        self.enableComputer.set_active,
                                        self.enableComputer.get_active)

        self.bindGSettingsValueToWidget(self.settingsPlaces, "int",
                                        "icon-size", self.placesIconSize,
                                        "value-changed",
                                        self.placesIconSize.set_value,
                                        self.placesIconSize.get_value)
        self.bindGSettingsValueToWidget(self.settingsSystem, "int",
                                        "icon-size", self.systemIconSize,
                                        "value-changed",
                                        self.systemIconSize.set_value,
                                        self.systemIconSize.get_value)

        self.bindGSettingsValueToWidget(self.settings, "int", "border-width",
                                        self.borderWidth, "value-changed",
                                        self.borderWidth.set_value,
                                        self.borderWidth.get_value_as_int)
        self.bindGSettingsValueToWidget(self.settings, "bool",
                                        "use-custom-color",
                                        self.useCustomColors, "toggled",
                                        self.useCustomColors.set_active,
                                        self.useCustomColors.get_active)
        self.bindGSettingsValueToWidget(self.settings, "color", "custom-color",
                                        self.backgroundColor, "color-set",
                                        self.backgroundColor.set_rgba,
                                        self.getBackgroundColor)
        self.bindGSettingsValueToWidget(self.settings, "color",
                                        "custom-heading-color",
                                        self.headingColor, "color-set",
                                        self.headingColor.set_rgba,
                                        self.getHeadingColor)
        self.bindGSettingsValueToWidget(self.settings, "color",
                                        "custom-border-color",
                                        self.borderColor, "color-set",
                                        self.borderColor.set_rgba,
                                        self.getBorderColor)
        self.bindGSettingsValueToWidget(self.settings, "bool",
                                        "hide-applet-icon",
                                        self.showButtonIcon, "toggled",
                                        self.setShowButtonIcon,
                                        self.getShowButtonIcon)
        self.bindGSettingsValueToWidget(self.settings, "string", "applet-text",
                                        self.buttonText, "changed",
                                        self.buttonText.set_text,
                                        self.buttonText.get_text)
        self.bindGSettingsValueToWidget(self.settings, "string", "hot-key",
                                        self.hotkeyWidget, "accel-edited",
                                        self.hotkeyWidget.set_val,
                                        self.hotkeyWidget.get_val)
        self.bindGSettingsValueToWidget(self.settings, "string", "applet-icon",
                                        self.buttonIconChooser, "file-set",
                                        self.setButtonIcon,
                                        self.buttonIconChooser.get_filename)
        self.bindGSettingsValueToWidget(self.settingsApplications, "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.bindGSettingsValueToWidget(self.settingsPlaces, "bool",
                                        "show-computer", self.computertoggle,
                                        "toggled",
                                        self.computertoggle.set_active,
                                        self.computertoggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsPlaces, "bool",
                                        "show-home-folder",
                                        self.homefoldertoggle, "toggled",
                                        self.homefoldertoggle.set_active,
                                        self.homefoldertoggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsPlaces, "bool",
                                        "show-network", self.networktoggle,
                                        "toggled",
                                        self.networktoggle.set_active,
                                        self.networktoggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsPlaces, "bool",
                                        "show-desktop", self.desktoptoggle,
                                        "toggled",
                                        self.desktoptoggle.set_active,
                                        self.desktoptoggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsPlaces, "bool",
                                        "show-trash", self.trashtoggle,
                                        "toggled", self.trashtoggle.set_active,
                                        self.trashtoggle.get_active)
        self.bindGSettingsValueToWidget(
            self.settingsPlaces, "int", "height", self.placesHeightButton,
            "value-changed", self.placesHeightButton.set_value,
            self.placesHeightButton.get_value_as_int)
        self.bindGSettingsValueToWidget(
            self.settingsPlaces, "bool", "allow-scrollbar",
            self.allowPlacesScrollbarToggle, "toggled",
            self.allowPlacesScrollbarToggle.set_active,
            self.allowPlacesScrollbarToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsPlaces, "bool",
                                        "show-gtk-bookmarks",
                                        self.showgtkbookmarksToggle, "toggled",
                                        self.showgtkbookmarksToggle.set_active,
                                        self.showgtkbookmarksToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsSystem, "bool",
                                        "show-package-manager",
                                        self.packageManagerToggle, "toggled",
                                        self.packageManagerToggle.set_active,
                                        self.packageManagerToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsSystem, "bool",
                                        "show-control-center",
                                        self.controlCenterToggle, "toggled",
                                        self.controlCenterToggle.set_active,
                                        self.controlCenterToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsSystem, "bool",
                                        "show-terminal", self.terminalToggle,
                                        "toggled",
                                        self.terminalToggle.set_active,
                                        self.terminalToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsSystem, "bool",
                                        "show-lock-screen", self.lockToggle,
                                        "toggled", self.lockToggle.set_active,
                                        self.lockToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsSystem, "bool",
                                        "show-logout", self.logoutToggle,
                                        "toggled",
                                        self.logoutToggle.set_active,
                                        self.logoutToggle.get_active)
        self.bindGSettingsValueToWidget(self.settingsSystem, "bool",
                                        "show-quit", self.quitToggle,
                                        "toggled", self.quitToggle.set_active,
                                        self.quitToggle.get_active)
        self.bindGSettingsValueToWidget(
            self.settingsSystem, "int", "height", self.systemHeightButton,
            "value-changed", self.systemHeightButton.set_value,
            self.systemHeightButton.get_value_as_int)
        self.bindGSettingsValueToWidget(
            self.settingsSystem, "bool", "allow-scrollbar",
            self.allowSystemScrollbarToggle, "toggled",
            self.allowSystemScrollbarToggle.set_active,
            self.allowSystemScrollbarToggle.get_active)

        self.customplacepaths = self.settingsPlaces.get(
            "list-string", "custom-paths")
        self.customplacenames = self.settingsPlaces.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-inserted",
                                           self.updatePlacesGSettings)
        self.customplacestreemodel.connect("row-deleted",
                                           self.updatePlacesGSettings)
        self.customplacestreemodel.connect("rows-reordered",
                                           self.updatePlacesGSettings)
        self.customplacestreemodel.connect("row-changed",
                                           self.updatePlacesGSettings)
        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)
        self.builder.get_object("newButton").connect("clicked", self.newPlace)
        self.builder.get_object("editButton").connect("clicked",
                                                      self.editPlace)
        self.builder.get_object("upButton").connect("clicked", self.moveUp)
        self.builder.get_object("downButton").connect("clicked", self.moveDown)
        self.builder.get_object("removeButton").connect(
            "clicked", self.removePlace)

        #Detect themes and show theme here
        theme_name = self.settings.get("string", "theme-name")
        process = subprocess.Popen(
            ['find', '/usr/share/themes', '-name', 'gtkrc'],
            stdout=subprocess.PIPE)
        out, err = process.communicate()
        themes = out.decode("utf-8").split("\n")
        model = Gtk.ListStore(str, str)
        self.builder.get_object("themesCombo").set_model(model)
        selected_theme = model.append([_("Desktop theme"), "default"])
        for theme in sorted(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
        self.builder.get_object("themesCombo").set_active_iter(selected_theme)
        self.builder.get_object("themesCombo").connect("changed",
                                                       self.set_theme)

        self.toggleUseCustomColors(self.useCustomColors)
        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)
        self.settings.set("string", "theme-name", theme_name)

    def getPluginsToggle(self):
        array = self.settings.get("list-string", "plugins-list")
        if "recent" in array:
            self.showRecentPlugin.set_active(True)
        else:
            self.showRecentPlugin.set_active(False)
        if "applications" in array:
            self.showApplicationsPlugin.set_active(True)
        else:
            self.showApplicationsPlugin.set_active(False)
        if "system_management" in array:
            self.showSystemPlugin.set_active(True)
        else:
            self.showSystemPlugin.set_active(False)
        if "places" in array:
            self.showPlacesPlugin.set_active(True)
        else:
            self.showPlacesPlugin.set_active(False)

    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")
        self.settings.set("list-string", "plugins-list", visiblePlugins)

    def setShowButtonIcon(self, value):
        self.showButtonIcon.set_active(not value)

    def setButtonIcon(self, value):
        self.buttonIconChooser.set_filename(value)
        pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(value, -1, 22)
        self.buttonIconImage.set_from_pixbuf(pixbuf)

    def getShowButtonIcon(self):
        return not self.showButtonIcon.get_active()

    def bindGSettingsValueToWidget(self, settings, setting_type, key, widget,
                                   changeEvent, setter, getter):
        settings.notifyAdd(key, self.callSetter, args=[setting_type, setter])
        if setting_type == "color":
            color = Gdk.RGBA()
            color.parse(settings.get(setting_type, key))
            setter(color)
        else:
            setter(settings.get(setting_type, key))
        widget.connect(
            changeEvent,
            lambda *args: self.callGetter(settings, setting_type, key, getter))

    def callSetter(self, settings, key, args):
        if args[0] == "bool":
            args[1](settings.get_boolean(key))
        elif args[0] == "string":
            args[1](settings.get_string(key))
        elif args[0] == "int":
            args[1](settings.get_int(key))
        elif args[0] == "color":
            color = Gdk.RGBA()
            color.parse(settings.get_string(key))
            args[1](color)

    def callGetter(self, settings, setting_type, key, getter):
        if (setting_type == "int"):
            settings.set(setting_type, key, int(getter()))
        else:
            settings.set(setting_type, key, 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):
        color = self.backgroundColor.get_rgba()
        return self.gdkRGBAToString(color)

    def getBorderColor(self):
        color = self.borderColor.get_rgba()
        return self.gdkRGBAToString(color)

    def getHeadingColor(self):
        color = self.headingColor.get_rgba()
        return self.gdkRGBAToString(color)

    def gdkRGBAToString(self, gdkRGBA):
        return "#%.2X%.2X%.2X" % (int(
            gdkRGBA.red * 256), int(
                gdkRGBA.green * 256), int(gdkRGBA.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):
        self.builder.get_object("label2").set_text(_("Name:"))
        self.builder.get_object("label1").set_text(_("Path:"))
        newPlaceDialog = self.builder.get_object("editPlaceDialog")
        folderChooserDialog = self.builder.get_object("fileChooserDialog")
        newPlaceDialog.set_transient_for(self.mainWindow)
        newPlaceDialog.set_icon_from_file(
            "/usr/share/mate-menu/icons/mate-logo.svg")
        newPlaceDialog.set_title(self.newPlaceDialogTitle)
        folderChooserDialog.set_title(self.folderChooserDialogTitle)
        newPlaceDialog.set_default_response(Gtk.ResponseType.OK)
        newPlaceName = self.builder.get_object("nameEntryBox")
        newPlacePath = self.builder.get_object("pathEntryBox")
        folderButton = self.builder.get_object("folderButton")

        def chooseFolder(folderButton):
            currentPath = newPlacePath.get_text()
            if (currentPath != ""):
                folderChooserDialog.select_filename(currentPath)
            response = folderChooserDialog.run()
            folderChooserDialog.hide()
            if (response == Gtk.ResponseType.OK):
                newPlacePath.set_text(folderChooserDialog.get_filenames()[0])

        folderButton.connect("clicked", chooseFolder)

        response = newPlaceDialog.run()
        newPlaceDialog.hide()
        if (response == Gtk.ResponseType.OK):
            name = newPlaceName.get_text()
            path = newPlacePath.get_text()
            if (name != "" and path != ""):
                self.customplacestreemodel.append((name, path))

    def editPlace(self, editButton):
        self.builder.get_object("label2").set_text(_("Name:"))
        self.builder.get_object("label1").set_text(_("Path:"))
        editPlaceDialog = self.builder.get_object("editPlaceDialog")
        folderChooserDialog = self.builder.get_object("fileChooserDialog")
        editPlaceDialog.set_transient_for(self.mainWindow)
        editPlaceDialog.set_icon_from_file(
            "/usr/share/mate-menu/icons/mate-logo.svg")
        editPlaceDialog.set_title(self.editPlaceDialogTitle)
        folderChooserDialog.set_title(self.folderChooserDialogTitle)
        editPlaceDialog.set_default_response(Gtk.ResponseType.OK)
        editPlaceName = self.builder.get_object("nameEntryBox")
        editPlacePath = self.builder.get_object("pathEntryBox")
        folderButton = self.builder.get_object("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.ResponseType.OK):
                    editPlacePath.set_text(
                        folderChooserDialog.get_filenames()[0])

            folderButton.connect("clicked", chooseFolder)
            response = editPlaceDialog.run()
            editPlaceDialog.hide()
            if (response == Gtk.ResponseType.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 updatePlacesGSettings(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.settingsPlaces.set("list-string", "custom-paths",
                                    customplacepaths)
            self.settingsPlaces.set("list-string", "custom-names",
                                    customplacenames)
Example #3
0
class pluginclass:
    """This is the main class for the plugin"""
    """It MUST be named pluginclass"""
    def __init__(self, mateMenuWin, toggleButton):

        self.Win = mateMenuWin
        self.toggleButton = toggleButton

        self.builder = Gtk.Builder()
        #The Glade file for the plugin
        self.builder.add_from_file(
            os.path.join('/', 'usr', 'share', 'mate-menu', 'plugins',
                         'recent.glade'))

        #Set 'window' property for the plugin (Must be the root widget)
        self.window = self.builder.get_object("window1")

        #Set 'heading' property for plugin
        self.heading = _("Recent documents")

        #This should be the first item added to the window in glade
        self.content_holder = self.builder.get_object("eventbox1")

        self.recentBox = self.builder.get_object("RecentBox")
        self.recentVBox = self.builder.get_object("vbox1")

        #Specify plugin width
        self.width = 250

        #Plugin icon
        self.icon = 'folder.png'

        self.settings = EasyGSettings("org.mate.mate-menu.plugins.recent")

        self.settings.notifyAdd('height', self.RegenPlugin)
        self.settings.notifyAdd('width', self.RegenPlugin)
        self.settings.notifyAdd('num-recent-docs', self.RegenPlugin)
        self.settings.notifyAdd('recent-font-size', self.RegenPlugin)

        self.FileList = []
        self.RecManagerInstance = Gtk.RecentManager.get_default()
        self.recentManagerId = self.RecManagerInstance.connect(
            "changed", self.DoRecent)

        self.RegenPlugin()
        self.builder.get_object("RecentTabs").set_current_page(1)

        #Connect event handlers
        clr_btn = self.builder.get_object("ClrBtn")
        clr_btn.connect("clicked", self.clrmenu)
        clr_btn.connect("enter-notify-event", self.onEnter)
        clr_btn.connect("focus-in-event", self.onFocusIn)
        clr_btn.connect("focus-out-event", self.onFocusOut)

    def wake(self):
        pass

    def destroy(self):
        self.recentBox.destroy()
        self.recentVBox.destroy()
        self.builder.get_object("RecentTabs").destroy()
        self.builder.get_object("ClrBtn").destroy()
        self.content_holder.destroy()
        self.settings.notifyRemoveAll()
        if self.recentManagerId:
            self.RecManagerInstance.disconnect(self.recentManagerId)

    def RegenPlugin(self, *args, **kargs):
        self.GetGSettingsEntries()

    def GetGSettingsEntries(self):
        self.recenth = self.settings.get('int', 'height')
        self.recentw = self.settings.get('int', 'width')
        self.numentries = self.settings.get('int', 'num-recent-docs')
        self.recentfontsize = self.settings.get('int', 'recent-font-size')

        # Plugin icon
        self.icon = self.settings.get("string", 'icon')
        # Allow plugin to be minimized to the left plugin pane
        self.sticky = self.settings.get("bool", "sticky")
        self.minimized = self.settings.get("bool", "minimized")
        self.RebuildPlugin()

    def SetHidden(self, state):
        if state == True:
            self.settings.set("bool", "minimized", True)
        else:
            self.settings.set("bool", "minimized", False)

    def RebuildPlugin(self):
        self.content_holder.set_size_request(self.recentw, self.recenth)
        self.DoRecent()

    def DoRecent(self, *args, **kargs):
        for i in self.recentBox.get_children():
            i.destroy()

        self.recentVBox.set_size_request(self.recentw, self.recenth)
        if len(self.recentBox.get_children()) < self.numentries:
            n = len(self.recentBox.get_children()) - 1
        else:
            n = self.numentries - 1
        while n >= 0:
            self.recentBox.remove(self.recentBox.get_children()[n])
            n -= 1

        self.FileList, self.IconList = self.GetRecent()
        loc = 0
        for Name in self.FileList:
            if Name != None:
                self.AddRecentBtn(Name, self.IconList[loc])
            loc = loc + 1
        return True

    def clrmenu(self, *args, **kargs):
        self.RecManagerInstance.purge_items()
        self.DoRecent()
        return

    def AddRecentBtn(self, Name, RecentImage):
        DispName = os.path.basename(Name)

        AButton = Gtk.Button("", "ok", True)
        AButton.remove(AButton.get_children()[0])
        AButton.set_size_request(200, -1)
        AButton.set_relief(Gtk.ReliefStyle.NONE)
        AButton.connect("enter-notify-event", self.onEnter)
        AButton.connect("focus-in-event", self.onFocusIn)
        AButton.connect("focus-out-event", self.onFocusOut)
        AButton.connect("clicked", self.callback, Name)
        AButton.show()

        Box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)

        ButtonIcon = Gtk.Image()
        ButtonIcon.set_size_request(20, -1)
        ButtonIcon.set_from_pixbuf(RecentImage)
        Box1.add(ButtonIcon)

        Label1 = Gtk.Label(DispName)
        Label1.set_ellipsize(Pango.EllipsizeMode.END)
        Box1.add(Label1)

        AButton.add(Box1)
        AButton.show_all()

        self.recentBox.pack_start(AButton, False, True, 0)

    def onEnter(self, widget, event):
        widget.grab_focus()

    def onFocusIn(self, widget, event):
        widget.set_state_flags(Gtk.StateFlags.PRELIGHT, False)

    def onFocusOut(self, widget, event):
        widget.unset_state_flags(Gtk.StateFlags.PRELIGHT)

    def callback(self, widget, filename=None):
        self.Win.hide()

        x = os.system("gio open \"" + filename + "\"")
        if x == 256:
            dia = Gtk.Dialog(
                'File not found!',
                None,  #the toplevel wgt of your app
                Gtk.DialogFlags.MODAL | Gtk.DialogFlags.
                DESTROY_WITH_PARENT,  #binary flags or'ed together
                ("Ok", 77))
            dia.vbox.pack_start(
                Gtk.Label('The location or file could not be found!'), False,
                False, 0)
            dia.vbox.show_all()
            dia.show()
            result = dia.run()
            if result == 77:
                dia.destroy()

    def GetRecent(self, *args, **kargs):
        FileString = []
        IconString = []
        RecentInfo = self.RecManagerInstance.get_items()
        # print(RecentInfo[0].get_icon(Gtk.IconSize.MENU))
        count = 0
        MaxEntries = self.numentries
        if self.numentries == -1:
            MaxEntries = len(RecentInfo)
        for items in RecentInfo:
            FileString.append(items.get_uri_display())
            IconString.append(items.get_icon(Gtk.IconSize.MENU))
            count += 1
            if count >= MaxEntries:
                break
        return FileString, IconString

    def ButtonClicked(self, widget, event, Exec):
        self.press_x = event.x
        self.press_y = event.y
        self.Exec = Exec

    def ButtonReleased(self, w, ev, ev2):
        if ev.button == 1:
            if not hasattr( self, "press_x" ) or \
                    not w.drag_check_threshold( int( self.press_x ),
                                                                             int( self.press_y ),
                                                                             int( ev.x ),
                                                                             int( ev.y ) ):
                if self.Win.pinmenu == False:
                    self.Win.wTree.get_widget("window1").hide()
                if "applications" in self.Win.plugins:
                    self.Win.plugins["applications"].wTree.get_widget(
                        "entry1").grab_focus()
                Execute(w, self.Exec)

    def do_plugin(self):
        self.DoRecent()