1#!/usr/local/bin/python3.8
2
3from ExtensionCore import ManageSpicesPage, DownloadSpicesPage
4from Spices import Spice_Harvester
5from SettingsWidgets import SidePage
6from xapp.GSettingsWidgets import *
7from gi.repository import GLib, Gtk
8
9class Module:
10    comment = _("Manage your Cinnamon desklets")
11    name = "desklets"
12    category = "prefs"
13
14    def __init__(self, content_box):
15        self.window = None
16        self.sidePage = DeskletsViewSidePage(content_box, self)
17
18    def on_module_selected(self):
19        if not self.loaded:
20            print("Loading Desklets module")
21            self.sidePage.load(self.window)
22
23    def _setParentRef(self, window):
24        self.window = window
25
26class DeskletsViewSidePage(SidePage):
27    collection_type = "desklet"
28
29    def __init__(self, content_box, module):
30        self.RemoveString = _("You can remove specific instances from the desktop via that desklet's context menu")
31        keywords = _("desklet, desktop, slideshow")
32
33        super(DeskletsViewSidePage, self).__init__(_("Desklets"), "cs-desklets", keywords, content_box, module=module)
34
35    def load(self, window):
36        self.window = window
37
38        self.spices = Spice_Harvester(self.collection_type, self.window)
39
40        self.stack = SettingsStack()
41        self.add_widget(self.stack)
42        self.stack.expand = True
43
44        manage_extensions_page = ManageDeskletsPage(self, self.spices, self.window)
45        self.stack.add_titled(manage_extensions_page, 'installed', _("Manage"))
46
47        download_desklets_page = DownloadSpicesPage(self, self.collection_type, self.spices, self.window)
48        self.stack.add_titled(download_desklets_page, 'more', _("Download"))
49
50        page = SettingsPage()
51        self.stack.add_titled(page, 'general', _("General Settings"))
52
53        settings = page.add_section(_("General Desklets Settings"))
54
55        dec = [[0, _("No decoration")], [1, _("Border only")], [2, _("Border and header")]]
56        widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
57        combo_box = GSettingsComboBox(_("Decoration of desklets"), "org.cinnamon", "desklet-decorations", dec, valtype=int)
58        widget.pack_start(combo_box, False, False, 0)
59        line1 = Gtk.Label()
60        line1.set_markup("<i><small>%s</small></i>" % _("Note: Some desklets require the border/header to be always present"))
61        line1.get_style_context().add_class("dim-label")
62        widget.pack_start(line1, True, True, 0)
63        line2 = Gtk.Label()
64        line2.set_markup("<i><small>%s</small></i>" % _("Such requirements override the settings selected here"))
65        line2.get_style_context().add_class("dim-label")
66        widget.pack_start(line2, True, True, 0)
67        settings.add_row(widget)
68
69        settings.add_row(GSettingsSwitch(_("Snap desklets to grid"), "org.cinnamon", "desklet-snap"))
70        settings.add_reveal_row(GSettingsSpinButton(_("Width of desklet snap grid"), "org.cinnamon", "desklet-snap-interval", "", 0, 100, 1, 5), "org.cinnamon", "desklet-snap")
71
72class ManageDeskletsPage(ManageSpicesPage):
73    directories = [("%s/.local/share/cinnamon/desklets") % GLib.get_home_dir(), "/usr/local/share/cinnamon/desklets"]
74    collection_type = "desklet"
75    installed_page_title = _("Installed desklets")
76    instance_button_text = _("Add")
77    remove_button_text = _("Remove")
78    uninstall_button_text = _("Uninstall")
79    restore_button_text = _("Remove all")
80
81    def __init__(self, parent, spices, window):
82        super(ManageDeskletsPage, self).__init__(parent, self.collection_type, spices, window)
83