def __init__(self): self.builder = Gtk.Builder() self.builder.add_from_file( "/usr/lib/cinnamon-settings/cinnamon-settings.ui") self.window = self.builder.get_object("main_window") self.top_bar = self.builder.get_object("top_bar") self.side_view = {} self.side_view_container = self.builder.get_object("category_box") self.side_view_sw = self.builder.get_object("side_view_sw") self.side_view_sw.show_all() self.content_box = self.builder.get_object("content_box") self.content_box_sw = self.builder.get_object("content_box_sw") self.button_back = self.builder.get_object("button_back") self.button_back.set_label(_("All Settings")) self.button_back.hide() self.search_entry = self.builder.get_object("search_box") self.search_entry.connect("changed", self.onSearchTextChanged) self.search_entry.connect("icon-press", self.onClearSearchBox) self.window.connect("destroy", self.quit) self.window.connect("key-press-event", self.on_keypress) self.window.connect("button-press-event", self.on_buttonpress) self.window.show() self.builder.connect_signals(self) self.window.set_has_resize_grip(False) self.unsortedSidePages = [] self.sidePages = [] self.settings = Gio.Settings.new("org.cinnamon") self.current_cat_widget = None self.current_sidepage = None self.c_manager = capi.CManager() self.content_box.c_manager = self.c_manager self.bar_heights = 0 for i in range(len(modules)): try: mod = modules[i].Module(self.content_box) if self.loadCheck(mod) and self.setParentRefs(mod): self.unsortedSidePages.append( (mod.sidePage, mod.name, mod.category)) except: print "Failed to load module %s" % modules[i] import traceback traceback.print_exc() for item in CONTROL_CENTER_MODULES: ccmodule = SettingsWidgets.CCModule(item[0], item[1], item[2], item[3], item[4], self.content_box) if ccmodule.process(self.c_manager): self.unsortedSidePages.append( (ccmodule.sidePage, ccmodule.name, ccmodule.category)) for item in STANDALONE_MODULES: samodule = SettingsWidgets.SAModule(item[0], item[1], item[2], item[3], item[4], self.content_box) if samodule.process(): self.unsortedSidePages.append( (samodule.sidePage, samodule.name, samodule.category)) # sort the modules alphabetically according to the current locale sidePageNamesToSort = map(lambda m: m[0].name, self.unsortedSidePages) sortedSidePageNames = sorted(sidePageNamesToSort, key=cmp_to_key(locale.strcoll)) for sidePageName in sortedSidePageNames: nextSidePage = None for trySidePage in self.unsortedSidePages: if (trySidePage[0].name == sidePageName): nextSidePage = trySidePage self.sidePages.append(nextSidePage) # create the backing stores for the side nav-view. sidePagesIters = {} self.store = {} self.storeFilter = {} for sidepage in self.sidePages: sp, sp_id, sp_cat = sidepage if not self.store.has_key( sp_cat ): # Label Icon sidePage Category self.store[sidepage[2]] = Gtk.ListStore(str, str, object, str) for category in CATEGORIES: if category["id"] == sp_cat: category["show"] = True # Don't allow item names (and their translations) to be more than 30 chars long. It looks ugly and it creates huge gaps in the icon views name = unicode(sp.name, 'utf-8') if len(name) > 30: name = "%s..." % name[:30] sidePagesIters[sp_id] = (self.store[sp_cat].append( [name, sp.icon, sp, sp_cat]), sp_cat) self.min_label_length = 0 self.min_pix_length = 0 for key in self.store.keys(): char, pix = self.get_label_min_width(self.store[key]) self.min_label_length = max(char, self.min_label_length) self.min_pix_length = max(pix, self.min_pix_length) self.storeFilter[key] = self.store[key].filter_new() self.storeFilter[key].set_visible_func( self.filter_visible_function) self.min_label_length += 2 self.min_pix_length += 4 self.min_label_length = max(self.min_label_length, MIN_LABEL_WIDTH) self.min_pix_length = max(self.min_pix_length, MIN_PIX_WIDTH) self.min_label_length = min(self.min_label_length, MAX_LABEL_WIDTH) self.min_pix_length = min(self.min_pix_length, MAX_PIX_WIDTH) self.displayCategories() # set up larger components. self.window.set_title(_("System Settings")) self.window.connect("destroy", self.quit) self.button_back.connect('clicked', self.back_to_icon_view) self.calculate_bar_heights() # Select the first sidePage if len(sys.argv) > 1 and sys.argv[1] in sidePagesIters.keys(): (iter, cat) = sidePagesIters[sys.argv[1]] path = self.store[cat].get_path(iter) if path: self.go_to_sidepage(cat, path) else: self.search_entry.grab_focus() else: self.search_entry.grab_focus()
def __init__(self): ''' Create the UI ''' self.builder = Gtk.Builder() self.builder.add_from_file(config.currentPath + "/cinnamon-settings.ui") self.window = XApp.GtkWindow(window_position=Gtk.WindowPosition.CENTER, default_width=800, default_height=600) main_box = self.builder.get_object("main_box") self.window.add(main_box) self.top_bar = self.builder.get_object("top_bar") self.side_view = {} self.main_stack = self.builder.get_object("main_stack") self.main_stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE) self.main_stack.set_transition_duration(150) self.header_stack = self.builder.get_object("header_stack") self.header_stack.set_transition_type( Gtk.StackTransitionType.CROSSFADE) self.header_stack.set_transition_duration(150) self.side_view_container = self.builder.get_object("category_box") self.side_view_sw = self.builder.get_object("side_view_sw") context = self.side_view_sw.get_style_context() context.add_class("cs-category-view") context.add_class("view") self.side_view_sw.show_all() self.content_box = self.builder.get_object("content_box") self.content_box_sw = self.builder.get_object("content_box_sw") self.content_box_sw.show_all() self.button_back = self.builder.get_object("button_back") self.button_back.set_tooltip_text(_("Back to all settings")) button_image = self.builder.get_object("image1") button_image.props.icon_size = Gtk.IconSize.MENU self.stack_switcher = self.builder.get_object("stack_switcher") n = self.button_back.get_preferred_width()[1] self.stack_switcher.set_margin_end(n) self.search_entry = self.builder.get_object("search_box") self.search_entry.set_placeholder_text(_("Search")) self.search_entry.connect("changed", self.onSearchTextChanged) self.search_entry.connect("icon-press", self.onClearSearchBox) self.window.connect("destroy", self.quit) self.builder.connect_signals(self) self.unsortedSidePages = [] self.sidePages = [] self.settings = Gio.Settings.new("org.cinnamon") self.current_cat_widget = None self.current_sidepage = None self.c_manager = capi.CManager() self.content_box.c_manager = self.c_manager self.bar_heights = 0 for module in modules: try: mod = module.Module(self.content_box) if self.loadCheck(mod) and self.setParentRefs(mod): self.unsortedSidePages.append( (mod.sidePage, mod.name, mod.category)) except Exception: print("Failed to load module %s" % module) traceback.print_exc() for item in CONTROL_CENTER_MODULES: ccmodule = SettingsWidgets.CCModule(item[0], item[1], item[2], item[3], item[4], self.content_box) if ccmodule.process(self.c_manager): self.unsortedSidePages.append( (ccmodule.sidePage, ccmodule.name, ccmodule.category)) for item in STANDALONE_MODULES: samodule = SettingsWidgets.SAModule(item[0], item[1], item[2], item[3], item[4], self.content_box) if samodule.process(): self.unsortedSidePages.append( (samodule.sidePage, samodule.name, samodule.category)) # sort the modules alphabetically according to the current locale localeStrKey = cmp_to_key(locale.strcoll) # Apply locale key to the field name of each side page. sidePagesKey = lambda m: localeStrKey(m[0].name) self.sidePages = sorted(self.unsortedSidePages, key=sidePagesKey) # create the backing stores for the side nav-view. sidePagesIters = {} self.store = {} self.storeFilter = {} for sidepage in self.sidePages: sp, sp_id, sp_cat = sidepage if sp_cat not in self.store: # Label Icon sidePage Category self.store[sidepage[2]] = Gtk.ListStore(str, str, object, str) for category in CATEGORIES: if category["id"] == sp_cat: category["show"] = True # Don't allow item names (and their translations) to be more than 30 chars long. It looks ugly and it creates huge gaps in the icon views name = sp.name if len(name) > 30: name = "%s..." % name[:30] sidePagesIters[sp_id] = (self.store[sp_cat].append( [name, sp.icon, sp, sp_cat]), sp_cat) self.min_label_length = 0 self.min_pix_length = 0 for key in self.store: char, pix = self.get_label_min_width(self.store[key]) self.min_label_length = max(char, self.min_label_length) self.min_pix_length = max(pix, self.min_pix_length) self.storeFilter[key] = self.store[key].filter_new() self.storeFilter[key].set_visible_func( self.filter_visible_function) self.min_label_length += 2 self.min_pix_length += 4 self.min_label_length = max(self.min_label_length, MIN_LABEL_WIDTH) self.min_pix_length = max(self.min_pix_length, MIN_PIX_WIDTH) self.min_label_length = min(self.min_label_length, MAX_LABEL_WIDTH) self.min_pix_length = min(self.min_pix_length, MAX_PIX_WIDTH) self.displayCategories() # set up larger components. self.window.set_title(_("System Settings")) self.button_back.connect('clicked', self.back_to_icon_view) self.calculate_bar_heights() # Select the first sidePage if len(sys.argv) > 1 and sys.argv[1] in sidePagesIters: # If we're launching a module directly, set the WM class so GWL # can consider it as a standalone app and give it its own # group. wm_class = "cinnamon-settings %s" % sys.argv[1] self.window.set_wmclass(wm_class, wm_class) self.button_back.hide() (_iter, cat) = sidePagesIters[sys.argv[1]] path = self.store[cat].get_path(_iter) if path: self.go_to_sidepage(cat, path, user_action=False) else: self.search_entry.grab_focus() else: self.search_entry.grab_focus() self.window.connect("key-press-event", self.on_keypress) self.window.connect("button-press-event", self.on_buttonpress) self.window.show()
def __init__(self): self.builder = Gtk.Builder() self.builder.set_translation_domain('cinnamon') # let it translate! self.builder.add_from_file(config.currentPath + "/cinnamon-settings.ui") self.window = XApp.GtkWindow(window_position=Gtk.WindowPosition.CENTER, default_width=800, default_height=600) main_box = self.builder.get_object("main_box") self.window.add(main_box) self.top_bar = self.builder.get_object("top_bar") self.side_view = {} self.main_stack = self.builder.get_object("main_stack") self.main_stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE) self.main_stack.set_transition_duration(150) self.header_stack = self.builder.get_object("header_stack") self.header_stack.set_transition_type( Gtk.StackTransitionType.CROSSFADE) self.header_stack.set_transition_duration(150) self.side_view_container = self.builder.get_object("category_box") self.side_view_sw = self.builder.get_object("side_view_sw") context = self.side_view_sw.get_style_context() context.add_class("cs-category-view") context.add_class("view") self.side_view_sw.show_all() self.content_box = self.builder.get_object("content_box") self.content_box_sw = self.builder.get_object("content_box_sw") self.content_box_sw.show_all() self.button_back = self.builder.get_object("button_back") self.button_back.set_tooltip_text(_("Back to all settings")) button_image = self.builder.get_object("image1") button_image.props.icon_size = Gtk.IconSize.MENU self.stack_switcher = self.builder.get_object("stack_switcher") self.search_entry = self.builder.get_object("search_box") self.search_entry.set_placeholder_text(_("Search")) self.search_entry.connect("changed", self.onSearchTextChanged) self.search_entry.connect("icon-press", self.onClearSearchBox) self.window.connect("destroy", self.quit) self.builder.connect_signals(self) self.unsortedSidePages = [] self.sidePages = [] self.settings = Gio.Settings.new("org.cinnamon") self.current_cat_widget = None self.current_sidepage = None self.c_manager = capi.CManager() self.content_box.c_manager = self.c_manager self.bar_heights = 0 for module in modules: try: mod = module.Module(self.content_box) if self.loadCheck(mod) and self.setParentRefs(mod): self.unsortedSidePages.append( (mod.sidePage, mod.name, mod.category)) except: print("Failed to load module %s" % module) traceback.print_exc() for item in CONTROL_CENTER_MODULES: ccmodule = SettingsWidgets.CCModule(item[0], item[1], item[2], item[3], item[4], self.content_box) if ccmodule.process(self.c_manager): self.unsortedSidePages.append( (ccmodule.sidePage, ccmodule.name, ccmodule.category)) for item in STANDALONE_MODULES: samodule = SettingsWidgets.SAModule(item[0], item[1], item[2], item[3], item[4], self.content_box) if samodule.process(): self.unsortedSidePages.append( (samodule.sidePage, samodule.name, samodule.category)) # sort the modules alphabetically according to the current locale localeStrKey = cmp_to_key(locale.strcoll) # Apply locale key to the field name of each side page. sidePagesKey = lambda m: localeStrKey(m[0].name) self.sidePages = sorted(self.unsortedSidePages, key=sidePagesKey) # create the backing stores for the side nav-view. sidePagesIters = {} self.store = {} self.storeFilter = {} for sidepage in self.sidePages: sp, sp_id, sp_cat = sidepage if sp_cat not in self.store: # Label Icon sidePage Category self.store[sidepage[2]] = Gtk.ListStore(str, str, object, str) for category in CATEGORIES: if category["id"] == sp_cat: category["show"] = True # Don't allow item names (and their translations) to be more than 30 chars long. It looks ugly and it creates huge gaps in the icon views name = sp.name if len(name) > 30: name = "%s..." % name[:30] sidePagesIters[sp_id] = (self.store[sp_cat].append( [name, sp.icon, sp, sp_cat]), sp_cat) self.min_label_length = 0 self.min_pix_length = 0 for key in self.store: char, pix = self.get_label_min_width(self.store[key]) self.min_label_length = max(char, self.min_label_length) self.min_pix_length = max(pix, self.min_pix_length) self.storeFilter[key] = self.store[key].filter_new() self.storeFilter[key].set_visible_func( self.filter_visible_function) self.min_label_length += 2 self.min_pix_length += 4 self.min_label_length = max(self.min_label_length, MIN_LABEL_WIDTH) self.min_pix_length = max(self.min_pix_length, MIN_PIX_WIDTH) self.min_label_length = min(self.min_label_length, MAX_LABEL_WIDTH) self.min_pix_length = min(self.min_pix_length, MAX_PIX_WIDTH) self.displayCategories() # set up larger components. self.window.set_title(_("System Settings")) self.button_back.connect('clicked', self.back_to_icon_view) self.calculate_bar_heights() self.tab = 0 # open 'manage' tab by default self.sort = 1 # sorted by 'score' by default # Select the first sidePage if len(sys.argv) > 1: arg1 = sys.argv[1] if arg1 in ARG_REWRITE.keys(): arg1 = ARG_REWRITE[arg1] if len(sys.argv) > 1 and arg1 in sidePagesIters: # Analyses arguments to know the tab to open # and the sort to apply if the tab is the 'more' one. # Examples: # cinnamon-settings.py applets --tab=more --sort=date # cinnamon-settings.py applets --tab=1 --sort=2 # cinnamon-settings.py applets --tab=more --sort=date # cinnamon-settings.py applets --tab=1 -s 2 # cinnamon-settings.py applets -t 1 -s installed # cinnamon-settings.py desklets -t 2 # Please note that useless or wrong arguments are ignored. opts = [] sorts_literal = { "name": 0, "score": 1, "date": 2, "installed": 3, "update": 4 } tabs_literal = {"default": 0} if arg1 in TABS.keys(): tabs_literal = TABS[arg1] try: if len(sys.argv) > 2: opts = getopt.getopt(sys.argv[2:], "t:s:", ["tab=", "sort="])[0] except getopt.GetoptError: pass for opt, arg in opts: if opt in ("-t", "--tab"): if arg.isdecimal(): self.tab = int(arg) elif arg in tabs_literal.keys(): self.tab = tabs_literal[arg] if opt in ("-s", "--sort"): if arg.isdecimal(): self.sort = int(arg) elif arg in sorts_literal.keys(): self.sort = sorts_literal[arg] # If we're launching a module directly, set the WM class so GWL # can consider it as a standalone app and give it its own # group. wm_class = "cinnamon-settings %s" % arg1 self.window.set_wmclass(wm_class, wm_class) self.button_back.hide() (iter, cat) = sidePagesIters[arg1] path = self.store[cat].get_path(iter) if path: self.go_to_sidepage(cat, path, user_action=False) self.window.show() if arg1 in ("mintlocale", "blueberry", "system-config-printer", "mintlocale-im", "nvidia-settings"): # These modules do not need to leave the System Settings window open, # when selected by command line argument. self.window.close() else: self.search_entry.grab_focus() self.window.show() else: self.search_entry.grab_focus() self.window.connect("key-press-event", self.on_keypress) self.window.connect("button-press-event", self.on_buttonpress) self.window.show()
def __init__(self): self.builder = Gtk.Builder() self.builder.add_from_file( "/usr/lib/cinnamon-settings/cinnamon-settings.ui") self.window = self.builder.get_object("main_window") self.top_bar = self.builder.get_object("top_bar") self.bottom_bar = self.builder.get_object("bottom_bar") self.side_view = {} self.side_view_container = self.builder.get_object("category_box") self.side_view_sw = self.builder.get_object("side_view_sw") self.side_view_sw.show_all() self.content_box = self.builder.get_object("content_box") self.content_box_sw = self.builder.get_object("content_box_sw") self.button_cancel = self.builder.get_object("button_cancel") self.button_back = self.builder.get_object("button_back") self.button_back.set_label(_("All Settings")) self.button_back.hide() self.search_entry = self.builder.get_object("search_box") self.search_entry.connect("changed", self.onSearchTextChanged) self.search_entry.connect("icon-press", self.onClearSearchBox) self.window.connect("destroy", Gtk.main_quit) self.builder.connect_signals(self) self.window.set_has_resize_grip(False) self.sidePages = [] self.settings = Gio.Settings.new("org.cinnamon") self.advanced_mode = self.settings.get_boolean(ADVANCED_GSETTING) self.mode_label = self.builder.get_object("mode_label") if self.advanced_mode: self.mode_label.set_text(AdvancedMode) else: self.mode_label.set_text(NormalMode) self.current_sidepage = None self.c_manager = capi.CManager() self.content_box.c_manager = self.c_manager self.bar_heights = 0 self.opacity = 0 for i in range(len(modules)): mod = modules[i].Module(self.content_box) if self.loadCheck(mod) and self.setParentRefs(mod): self.sidePages.append((mod.sidePage, mod.name, mod.category)) for item in CONTROL_CENTER_MODULES: ccmodule = SettingsWidgets.CCModule(item[0], item[1], item[2], item[3], item[4], item[5], self.content_box) if ccmodule.process(self.c_manager): self.sidePages.append( (ccmodule.sidePage, ccmodule.name, ccmodule.category)) for item in STANDALONE_MODULES: samodule = SettingsWidgets.SAModule(item[0], item[1], item[2], item[3], item[4], item[5], self.content_box) if samodule.process(): self.sidePages.append( (samodule.sidePage, samodule.name, samodule.category)) # create the backing stores for the side nav-view. sidePagesIters = {} self.store = {} self.storeFilter = {} for sidepage in self.sidePages: sp, sp_id, sp_cat = sidepage if not self.store.has_key( sp_cat ): # Label Icon sidePage Category self.store[sidepage[2]] = Gtk.ListStore( str, GdkPixbuf.Pixbuf, object, str) for category in CATEGORIES: if category["id"] == sp_cat: category["show"] = True iconFile = "/usr/lib/cinnamon-settings/data/icons/%s" % sp.icon if os.path.exists(iconFile): img = GdkPixbuf.Pixbuf.new_from_file_at_size(iconFile, 48, 48) else: img = None sidePagesIters[sp_id] = self.store[sp_cat].append( [sp.name, img, sp, sp_cat]) for key in self.store.keys(): self.storeFilter[key] = self.store[key].filter_new() self.storeFilter[key].set_visible_func( self.filter_visible_function) self.displayCategories() # set up larger components. self.window.set_title(_("System Settings")) self.window.connect("destroy", Gtk.main_quit) self.button_cancel.connect("clicked", Gtk.main_quit) self.button_back.connect('clicked', self.back_to_icon_view) self.window.set_opacity(self.opacity) self.window.show() self.calculate_bar_heights() # Select the first sidePage if len(sys.argv) > 1 and sys.argv[1] in sidePagesIters.keys(): first_page_iter = sidePagesIters[sys.argv[1]] self.findPath(first_page_iter) else: self.search_entry.grab_focus() GObject.idle_add(self.start_fade_in)