mintmenu/usr/lib/linuxmint/mintMenu/preferences.py

299 lines
17 KiB
Python
Raw Normal View History

#!/usr/bin/python3
import gettext
import glob
import locale
import setproctitle
import gi
gi.require_version("Gtk", "3.0")
gi.require_version('XApp', '1.0')
from gi.repository import Gtk, Gdk, GdkPixbuf, XApp
import keybinding
from xapp.GSettingsWidgets import *
# i18n
gettext.install("mintmenu", "/usr/share/linuxmint/locale")
locale.bindtextdomain("mintmenu", "/usr/share/linuxmint/locale")
locale.textdomain("mintmenu")
class CustomPlaceDialog (Gtk.Dialog):
def __init__(self):
Gtk.Dialog.__init__(self, title=_("Custom Place"), flags=Gtk.DialogFlags.MODAL,
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OK, Gtk.ResponseType.OK))
self.set_default_size(150, 100)
grid = Gtk.Grid()
grid.set_row_spacing(12)
grid.set_column_spacing(12)
grid.set_border_width(12)
self.name = Gtk.Entry()
grid.attach(Gtk.Label(_("Name:")), 0, 0, 1, 1)
grid.attach(self.name, 1, 0, 1, 1)
self.filechooser_button = Gtk.FileChooserButton()
self.filechooser_button.set_title(_("Select a folder"))
self.filechooser_button.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
grid.attach(Gtk.Label(_("Folder:")), 0, 1, 1, 1)
grid.attach(self.filechooser_button, 1, 1, 1, 1)
self.get_content_area().add(grid)
self.show_all()
class mintMenuPreferences():
def __init__(self):
self.settings = Gio.Settings("com.linuxmint.mintmenu")
self.places_settings = Gio.Settings("com.linuxmint.mintmenu.plugins.places")
self.builder = Gtk.Builder()
self.builder.set_translation_domain("mintmenu")
self.builder.add_from_file("/usr/share/linuxmint/mintmenu/preferences.ui")
self.window = self.builder.get_object("main_window")
self.window.set_title(_("Menu preferences"))
self.window.set_icon_name("linuxmint-logo")
self.window.connect("destroy", Gtk.main_quit)
page = SettingsPage()
self.builder.get_object("box_general").add(page)
section = page.add_section(_("Menu button"), _("Applet button in the panel"))
section.add_row(GSettingsSwitch(_("Show button icon"), "com.linuxmint.mintmenu", "show-applet-icon"))
section.add_reveal_row(GSettingsEntry(_("Button text"), "com.linuxmint.mintmenu", "applet-text"), "com.linuxmint.mintmenu", "show-applet-icon")
section.add_reveal_row(GSettingsIconChooser(_("Button icon"), "com.linuxmint.mintmenu", "applet-icon"), "com.linuxmint.mintmenu", "show-applet-icon")
binding_widget = keybinding.KeybindingWidget()
binding_widget.set_val(self.settings.get_string("hot-key"))
binding_widget.connect("accel-edited", self.set_keyboard_shortcut)
label = SettingsLabel(_("Keyboard shortcut"))
setting_widget = SettingsWidget()
setting_widget.pack_start(label, False, False, 0)
setting_widget.pack_end(binding_widget, False, False, 0)
section.add_row(setting_widget)
section = page.add_section(_("Options"), _("General applet options"))
self.system_switch = Switch(_("Show system management"))
self.system_switch.content_widget.connect("notify::active", self.set_plugins)
section.add_row(self.system_switch)
self.places_switch = Switch(_("Show places"))
self.places_switch.content_widget.connect("notify::active", self.set_plugins)
section.add_row(self.places_switch)
self.recent_switch = Switch(_("Show recently used documents and applications"))
self.recent_switch.content_widget.connect("notify::active", self.set_plugins)
section.add_row(self.recent_switch)
self.set_plugins_switches()
section.add_row(GSettingsSwitch(_("Show tooltips"), "com.linuxmint.mintmenu", "tooltips-enabled"))
page = SettingsPage()
self.builder.get_object("box_appearance").add(page)
section = page.add_section(_("Colors"), _("Custom colors and theme"))
section.add_row(GSettingsSwitch(_("Use custom colors"), "com.linuxmint.mintmenu", "use-custom-color"))
section.add_reveal_row(GSettingsColorChooser(_("Headings"), "com.linuxmint.mintmenu", "custom-heading-color"), "com.linuxmint.mintmenu", "use-custom-color")
section.add_reveal_row(GSettingsColorChooser(_("Background"), "com.linuxmint.mintmenu", "custom-color"), "com.linuxmint.mintmenu", "use-custom-color")
options = []
options.append(["default", _("Desktop theme"), "default"])
themes = glob.glob("/usr/share/themes/*/*/gtkrc")
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()
options.append([theme, theme])
section.add_row(GSettingsComboBox(_("Theme:"), "com.linuxmint.mintmenu", "theme-name", options))
section = page.add_section(_("Icon sizes"), _("The size of the icons"))
section.add_row(GSettingsSpinButton(_("Favorites"), "com.linuxmint.mintmenu.plugins.applications", "favicon-size", mini=1, maxi=128, step=1, page=2))
section.add_row(GSettingsSpinButton(_("Applications"), "com.linuxmint.mintmenu.plugins.applications", "icon-size", mini=1, maxi=128, step=1, page=2))
section.add_row(GSettingsSpinButton(_("System"), "com.linuxmint.mintmenu.plugins.system_management", "icon-size", mini=1, maxi=128, step=1, page=2))
section.add_row(GSettingsSpinButton(_("Places"), "com.linuxmint.mintmenu.plugins.places", "icon-size", mini=1, maxi=128, step=1, page=2))
page = SettingsPage()
self.builder.get_object("box_applications").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSwitch(_("Show search bar on top"), "com.linuxmint.mintmenu.plugins.applications", "search-on-top"))
section.add_row(GSettingsSwitch(_("Show applications comments"), "com.linuxmint.mintmenu.plugins.applications", "show-application-comments"))
section = page.add_section(_("Categories"), _("Applications categories"))
section.add_row(GSettingsSwitch(_("Show category icons"), "com.linuxmint.mintmenu.plugins.applications", "show-category-icons"))
section.add_row(GSettingsSwitch(_("Switch categories on hover"), "com.linuxmint.mintmenu.plugins.applications", "categories-mouse-over"))
section.add_reveal_row(GSettingsSpinButton(_("Hover delay"), "com.linuxmint.mintmenu.plugins.applications", "category-hover-delay", units=_("milliseconds"), mini=1, maxi=500, step=1, page=10), "com.linuxmint.mintmenu.plugins.applications", "categories-mouse-over")
section = page.add_section(_("Search"), _("Search options"))
section.add_row(GSettingsSwitch(_("Search for packages to install"), "com.linuxmint.mintmenu.plugins.applications", "use-apt"))
section.add_row(GSettingsSwitch(_("Remember the last category or search"), "com.linuxmint.mintmenu.plugins.applications", "remember-filter"))
section.add_row(GSettingsSwitch(_("Enable Internet search"), "com.linuxmint.mintmenu.plugins.applications", "enable-internet-search"))
section.add_row(GSettingsEntry(_("Search command"), "com.linuxmint.mintmenu.plugins.applications", "search-command"))
page = SettingsPage()
self.builder.get_object("box_favorites").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSpinButton(_("Number of columns"), "com.linuxmint.mintmenu.plugins.applications", "fav-cols", mini=1, maxi=5, step=1, page=1))
section.add_row(GSettingsSwitch(_("Swap name and generic name"), "com.linuxmint.mintmenu.plugins.applications", "swap-generic-name"))
section.add_row(GSettingsSwitch(_("Show favorites when the menu is open"), "com.linuxmint.mintmenu", "start-with-favorites"))
page = SettingsPage()
self.builder.get_object("box_system").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSwitch(_("Custom height"), "com.linuxmint.mintmenu.plugins.system_management", "allow-scrollbar"))
section.add_reveal_row(GSettingsSpinButton(_("Height"), "com.linuxmint.mintmenu.plugins.system_management", "height", mini=1, maxi=800, step=1, page=2), "com.linuxmint.mintmenu.plugins.system_management", "allow-scrollbar")
section = page.add_section(_("Items"), _("Toggle default items"))
section.add_row(GSettingsSwitch(_("Software Manager"), "com.linuxmint.mintmenu.plugins.system_management", "show-software-manager"))
section.add_row(GSettingsSwitch(_("Package Manager"), "com.linuxmint.mintmenu.plugins.system_management", "show-package-manager"))
section.add_row(GSettingsSwitch(_("Control Center"), "com.linuxmint.mintmenu.plugins.system_management", "show-control-center"))
section.add_row(GSettingsSwitch(_("Terminal"), "com.linuxmint.mintmenu.plugins.system_management", "show-terminal"))
section.add_row(GSettingsSwitch(_("Lock Screen"), "com.linuxmint.mintmenu.plugins.system_management", "show-lock-screen"))
section.add_row(GSettingsSwitch(_("Logout"), "com.linuxmint.mintmenu.plugins.system_management", "show-logout"))
section.add_row(GSettingsSwitch(_("Quit"), "com.linuxmint.mintmenu.plugins.system_management", "show-quit"))
page = SettingsPage()
self.builder.get_object("box_places").add(page)
section = page.add_section(_("Layout"), _("Section layout"))
section.add_row(GSettingsSwitch(_("Custom height"), "com.linuxmint.mintmenu.plugins.places", "allow-scrollbar"))
section.add_reveal_row(GSettingsSpinButton(_("Height"), "com.linuxmint.mintmenu.plugins.places", "height", mini=1, maxi=800, step=1, page=2), "com.linuxmint.mintmenu.plugins.places", "allow-scrollbar")
section = page.add_section(_("Items"), _("Toggle default items"))
section.add_row(GSettingsSwitch(_("Computer"), "com.linuxmint.mintmenu.plugins.places", "show-computer"))
section.add_row(GSettingsSwitch(_("Home Folder"), "com.linuxmint.mintmenu.plugins.places", "show-home-folder"))
section.add_row(GSettingsSwitch(_("Network"), "com.linuxmint.mintmenu.plugins.places", "show-network"))
section.add_row(GSettingsSwitch(_("Desktop"), "com.linuxmint.mintmenu.plugins.places", "show-desktop"))
section.add_row(GSettingsSwitch(_("Trash"), "com.linuxmint.mintmenu.plugins.places", "show-trash"))
section.add_row(GSettingsSwitch(_("GTK Bookmarks"), "com.linuxmint.mintmenu.plugins.places", "show-gtk-bookmarks"))
section = page.add_section(_("Custom places"), _("You can add your own places in the menu"))
box = self.builder.get_object("custom_places_box")
section.add(box)
self.custom_places_tree = self.builder.get_object("custom_places_tree")
self.custom_places_paths = self.places_settings.get_strv("custom-paths")
self.custom_places_names = self.places_settings.get_strv("custom-names")
self.custom_places_model = Gtk.ListStore(str, str)
self.cell = Gtk.CellRendererText()
for count in range(len(self.custom_places_paths)):
self.custom_places_model.append([self.custom_places_names[count], self.custom_places_paths[count]])
self.custom_places_model.connect("row-inserted", self.save_custom_places)
self.custom_places_model.connect("row-deleted", self.save_custom_places)
self.custom_places_model.connect("rows-reordered", self.save_custom_places)
self.custom_places_model.connect("row-changed", self.save_custom_places)
self.custom_places_tree.set_model(self.custom_places_model)
self.custom_places_tree.append_column(Gtk.TreeViewColumn(_("Name"), self.cell, text=0))
self.custom_places_tree.append_column(Gtk.TreeViewColumn(_("Path"), self.cell, text=1))
self.builder.get_object("newButton").connect("clicked", self.add_custom_place)
self.builder.get_object("editButton").connect("clicked", self.edit_custom_place)
self.builder.get_object("upButton").connect("clicked", self.move_up)
self.builder.get_object("downButton").connect("clicked", self.move_down)
self.builder.get_object("removeButton").connect("clicked", self.remove_custom_place)
self.window.show_all()
return
def set_keyboard_shortcut(self, widget):
self.settings.set_string("hot-key", widget.get_val())
def set_plugins_switches(self):
plugins = self.settings.get_strv("plugins-list")
self.recent_switch.content_widget.set_active("recent" in plugins)
self.system_switch.content_widget.set_active("system_management" in plugins)
self.places_switch.content_widget.set_active("places" in plugins)
def set_plugins(self, widget, param):
visible_plugins = []
if self.places_switch.content_widget.get_active():
visible_plugins.append("places")
if self.system_switch.content_widget.get_active():
visible_plugins.append("system_management")
if self.places_switch.content_widget.get_active() or self.system_switch.content_widget.get_active():
visible_plugins.append("newpane")
visible_plugins.append("applications")
if self.recent_switch.content_widget.get_active():
visible_plugins.append("newpane")
visible_plugins.append("recent")
self.settings.set_strv("plugins-list", visible_plugins)
def add_custom_place(self, newButton):
dialog = CustomPlaceDialog()
response = dialog.run()
if response == Gtk.ResponseType.OK:
name = dialog.name.get_text()
path = dialog.filechooser_button.get_filename()
if name and path and name != "":
self.custom_places_model.append((name, path))
dialog.destroy()
return
def edit_custom_place(self, editButton):
dialog = CustomPlaceDialog()
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
if currentiter:
initName = self.custom_places_model.get_value(currentiter, 0)
initPath = self.custom_places_model.get_value(currentiter, 1)
dialog.name.set_text(initName)
dialog.filechooser_button.set_filename(initPath)
response = dialog.run()
if response == Gtk.ResponseType.OK:
name = dialog.name.get_text()
path = dialog.filechooser_button.get_filename()
if name and path and name != "":
self.custom_places_model.set_value(currentiter, 0, name)
self.custom_places_model.set_value(currentiter, 1, path)
dialog.destroy()
def move_up(self, upButton):
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
if treeselection:
lagiter = self.custom_places_model.get_iter_first()
nextiter = self.custom_places_model.get_iter_first()
while nextiter and self.custom_places_model.get_path(nextiter) != \
self.custom_places_model.get_path(currentiter):
lagiter = nextiter
nextiter = self.custom_places_model.iter_next(nextiter)
if nextiter:
self.custom_places_model.swap(currentiter, lagiter)
return
def move_down(self, downButton):
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
nextiter = self.custom_places_model.iter_next(currentiter)
if nextiter:
self.custom_places_model.swap(currentiter, nextiter)
return
def remove_custom_place(self, removeButton):
treeselection = self.custom_places_tree.get_selection()
currentiter = treeselection.get_selected()[1]
if currentiter:
self.custom_places_model.remove(currentiter)
return
def save_custom_places(self, treemodel, path, iter = None, new_order = None):
if not iter or self.custom_places_model.get_value(iter, 1):
treeiter = self.custom_places_model.get_iter_first()
custom_places_names = []
custom_places_paths = []
while treeiter:
custom_places_names = custom_places_names + [self.custom_places_model.get_value(treeiter, 0)]
custom_places_paths = custom_places_paths + [self.custom_places_model.get_value(treeiter, 1)]
treeiter = self.custom_places_model.iter_next(treeiter)
self.places_settings.set_strv("custom-paths", custom_places_paths)
self.places_settings.set_strv("custom-names", custom_places_names)
if __name__ == "__main__":
setproctitle.setproctitle('mintmenu-preferences')
preferences = mintMenuPreferences()
Gtk.main()