mintmenu/usr/lib/linuxmint/mintMenu/plugins/recent.py

221 lines
7.3 KiB
Python
Raw Normal View History

#!/usr/bin/python2
2014-03-28 15:44:13 +00:00
import os
import subprocess
2013-03-08 01:53:03 +00:00
import gi
2016-09-06 15:58:34 +01:00
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
import plugins.recentHelper as RecentHelper
from plugins.easygsettings import EasyGSettings
from plugins.execute import Execute
2013-03-08 01:53:03 +00:00
2009-07-27 11:45:34 +01:00
class pluginclass:
""" This is the main class for the plugin.
It MUST be named pluginclass
"""
2009-07-27 11:45:34 +01:00
def __init__(self, mintMenuWin, toggleButton, de):
2009-07-27 11:45:34 +01:00
2011-03-30 19:02:13 +01:00
self.Win = mintMenuWin
self.toggleButton = toggleButton
self.de = de
2009-07-27 11:45:34 +01:00
2013-03-08 01:53:03 +00:00
self.builder = Gtk.Builder()
2011-03-30 19:02:13 +01:00
#The Glade file for the plugin
self.builder.add_from_file(os.path.join(os.path.dirname(__file__), "recent.glade"))
2009-07-27 11:45:34 +01:00
2011-03-30 19:02:13 +01:00
#Set 'window' property for the plugin (Must be the root widget)
self.window = self.builder.get_object("window1")
2011-03-30 19:02:13 +01:00
#Set 'heading' property for plugin
self.heading = _("Recently used")
2011-03-30 19:02:13 +01:00
#This should be the first item added to the window in glade
self.content_holder = self.builder.get_object("eventbox1")
2011-03-30 19:02:13 +01:00
2013-05-21 16:24:01 +01:00
self.recentBox = self.builder.get_object("RecentBox")
self.recentAppBox = self.builder.get_object("RecentApps")
RecentHelper.recentAppBox = self.recentAppBox
#self.recentApps = []
self.recentVBox = self.builder.get_object("vbox1")
2013-05-21 16:24:01 +01:00
2011-03-30 19:02:13 +01:00
#Specify plugin width
self.width = 250
2009-07-27 11:45:34 +01:00
2011-03-30 19:02:13 +01:00
#Plugin icon
self.icon = 'mate-folder.png'
2009-07-27 11:45:34 +01:00
self.settings = EasyGSettings("com.linuxmint.mintmenu.plugins.recent")
self.settings.notifyAdd('height', self.RegenPlugin)
self.settings.notifyAdd('width', self.RegenPlugin)
self.settings.notifyAdd('num-recent-docs', self.RegenPlugin)
self.settings.notifyAdd('recent-font-size', self.RegenPlugin)
2013-03-08 01:53:03 +00:00
self.appSettings = EasyGSettings("com.linuxmint.mintmenu.plugins.applications")
self.appSettings.notifyAdd("icon-size", self.RegenPlugin)
2009-07-27 11:45:34 +01:00
2011-03-30 19:02:13 +01:00
self.FileList=[]
2013-03-08 01:53:03 +00:00
self.RecManagerInstance = Gtk.RecentManager.get_default()
2013-05-21 18:15:39 +01:00
self.recentManagerId = self.RecManagerInstance.connect("changed", self.DoRecent)
2011-03-30 19:02:13 +01:00
self.RegenPlugin()
self.builder.get_object("RecentTabs").set_current_page(0)
2011-03-30 19:02:13 +01:00
#Connect event handlers
2013-03-08 01:53:03 +00:00
self.builder.get_object("ClrBtn").connect("clicked", self.clrmenu)
2009-07-27 11:45:34 +01:00
@staticmethod
def wake():
return
2011-03-30 19:02:13 +01:00
def destroy(self):
2013-05-21 18:15:39 +01:00
self.recentBox.destroy()
self.recentVBox.destroy()
self.builder.get_object("RecentTabs").destroy()
2013-05-21 18:15:39 +01:00
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):
2013-03-08 01:53:03 +00:00
self.GetGSettingsEntries()
2011-03-30 19:02:13 +01:00
def GetGSettingsEntries(self):
self.recenth = self.settings.get('int', 'height')
self.recentw = self.settings.get('int', 'width')
self.numentries = self.settings.get('int', 'num-recent-docs')
RecentHelper.numentries = self.numentries
self.recentfontsize = self.settings.get('int', 'recent-font-size')
2011-03-30 19:02:13 +01:00
# Hide vertical dotted separator
self.hideseparator = self.settings.get("bool", "hide-separator")
2011-03-30 19:02:13 +01:00
# Plugin icon
self.icon = self.settings.get("string", 'icon')
2011-03-30 19:02:13 +01:00
# Allow plugin to be minimized to the left plugin pane
self.sticky = self.settings.get("bool", "sticky")
self.minimized = self.settings.get("bool", "minimized")
RecentHelper.iconSize = self.appSettings.get("int", "icon-size")
2011-03-30 19:02:13 +01:00
self.RebuildPlugin()
def SetHidden(self, minimized):
if minimized:
self.settings.set("bool", "minimized", True)
2011-03-30 19:02:13 +01:00
else:
self.settings.set("bool", "minimized", False)
2011-03-30 19:02:13 +01:00
def RebuildPlugin(self):
self.content_holder.set_size_request(self.recentw, self.recenth)
2011-03-30 19:02:13 +01:00
self.DoRecent()
def DoRecent(self, *args, **kargs):
2013-05-21 16:24:01 +01:00
for i in self.recentBox.get_children():
2011-03-30 19:02:13 +01:00
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
2011-03-30 19:02:13 +01:00
else:
n=self.numentries-1
while n >= 0:
self.recentBox.remove(self.recentBox.get_children()[n])
2011-03-30 19:02:13 +01:00
n-=1
self.FileList, self.IconList = self.GetRecent()
loc = 0
for Name in self.FileList:
if Name != None:
self.AddRecentBtn(Name, self.IconList[loc])
2011-03-30 19:02:13 +01:00
loc = loc + 1
RecentHelper.doRecentApps()
2011-03-30 19:02:13 +01:00
return True
def clrmenu(self, *args, **kargs):
self.RecManagerInstance.purge_items()
self.DoRecent()
def AddRecentBtn(self, Name, RecentImage):
DispName=os.path.basename(Name)
2011-03-30 19:02:13 +01:00
AButton = Gtk.Button("", "ok", True)
AButton.remove(AButton.get_children()[0])
AButton.set_size_request(200, -1)
AButton.set_relief(Gtk.ReliefStyle.NONE)
AButton.connect("clicked", self.callback, Name)
AButton.show()
2011-03-30 19:02:13 +01:00
Box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
2011-03-30 19:02:13 +01:00
ButtonIcon = Gtk.Image()
ButtonIcon.set_size_request(20, -1)
ButtonIcon.set_from_pixbuf(RecentImage)
Box1.add(ButtonIcon)
2011-03-30 19:02:13 +01:00
Label1 = Gtk.Label(DispName)
Label1.set_ellipsize(3)
Box1.add(Label1)
2011-03-30 19:02:13 +01:00
AButton.add(Box1)
AButton.show_all()
2011-03-30 19:02:13 +01:00
self.recentBox.pack_start(AButton, False, True, 0)
2011-03-30 19:02:13 +01:00
def callback(self, widget, filename):
2011-03-30 19:02:13 +01:00
self.Win.hide()
try:
subprocess.check_call(["xdg-open", filename])
except subprocess.CalledProcessError:
dialog = Gtk.MessageDialog(self.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, _("The file or location could not be opened."))
dialog.set_title("mintMenu")
dialog.run()
dialog.destroy()
2011-03-30 19:02:13 +01:00
def GetRecent(self, *args, **kargs):
FileString=[]
IconString=[]
RecentInfo=self.RecManagerInstance.get_items()
count=0
MaxEntries=self.numentries
if self.numentries == -1:
MaxEntries=len(RecentInfo)
for items in RecentInfo:
FileString.append(items.get_uri_display())
2013-03-08 01:53:03 +00:00
IconString.append(items.get_icon(Gtk.IconSize.MENU))
2011-03-30 19:02:13 +01:00
count+=1
if count >= MaxEntries:
break
return FileString, IconString
2011-03-30 19:02:13 +01:00
def ButtonClicked(self, widget, event, Exec):
2011-03-30 19:02:13 +01:00
self.press_x = event.x
self.press_y = event.y
self.Exec = Exec
def ButtonReleased(self, w, ev, ev2):
2011-03-30 19:02:13 +01:00
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)):
2011-03-30 19:02:13 +01:00
if self.Win.pinmenu == False:
self.Win.wTree.get_widget("window1").hide()
2011-03-30 19:02:13 +01:00
if "applications" in self.Win.plugins:
self.Win.plugins["applications"].wTree.get_widget("entry1").grab_focus()
Execute(w, self.Exec)
2011-03-30 19:02:13 +01:00
@staticmethod
def do_plugin():
return