src/modules/gui/preferences.py
changeset 2991 75e616731cc3
parent 2990 2cc6693a7d83
child 2992 e48a94cff862
--- a/src/modules/gui/preferences.py	Fri Sep 27 11:21:00 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,823 +0,0 @@
-#!/usr/bin/python
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
-#
-
-import g11nsvc as g11nsvc
-import re
-import sys
-try:
-        import gobject
-        gobject.threads_init()
-        import gtk
-        import pygtk
-        pygtk.require("2.0")
-except ImportError:
-        sys.exit(1)
-import pkg.client.api_errors as api_errors
-import pkg.client.api as api
-import pkg.gui.misc as gui_misc
-import pkg.gui.enumerations as enumerations
-
-PREFERENCES_NOTEBOOK_GENERAL_PAGE = 0
-PREFERENCES_NOTEBOOK_SIG_POL_PAGE = 1
-PREFERENCES_NOTEBOOK_LANGUAGES_PAGE = 2
-GDK_2BUTTON_PRESS = 5     # gtk.gdk._2BUTTON_PRESS causes pylint warning
-LOCALE_PREFIX = "facet.locale."
-LANG_STAR_SUFFIX = "_*"
-
-ALL_LOCALES = "facet.locale.*"
-ALL_DEVEL = "facet.devel"
-ALL_DOC = "facet.doc.*"
-
-LANG_MATCH = re.compile(r'facet\.locale\.([a-z]{2,3})$')
-LANG_STAR_MATCH = re.compile(r'facet\.locale\.([a-z]{2,3})_\*$')
-LOCALE_MATCH = re.compile(r'facet\.locale\.([a-z]{2,3}_[A-Z]{2,3}.*$)')
-
-SYSTEM_G11LOCALE_MATCH = re.compile(r'^([a-z]{2,3}_[A-Z]{2,3})\.*(.*)$')
-SYSTEM_FACETLOCALE_MATCH = re.compile(r'([a-z]{2,3}_[A-Z]{2,3})\(*(.*?)\)*$')
-
-debug = False
-
-class Preferences:
-        def __init__(self, parent, builder, window_icon, gconf):
-                self.gconf = gconf
-                self.parent = parent
-                self.w_preferencesdialog = \
-                    builder.get_object("preferencesdialog")
-                self.w_preferencesdialog.set_icon(window_icon)
-                w_startup_label = \
-                    builder.get_object("startup_label")
-                w_startup_label.hide()
-                w_startup_hbox =  \
-                    builder.get_object("startup_hbox")
-                w_startup_hbox.hide()
-                self.w_startpage_checkbutton = \
-                    builder.get_object("startpage_checkbutton")
-                self.w_exit_checkbutton = \
-                    builder.get_object("exit_checkbutton")
-                self.w_confirm_updateall_checkbutton = \
-                    builder.get_object("confirm_updateall_checkbutton")
-                self.w_confirm_install_checkbutton = \
-                    builder.get_object("confirm_install_checkbutton")
-                self.w_confirm_remove_checkbutton = \
-                    builder.get_object("confirm_remove_checkbutton")
-                self.w_help_button = builder.get_object("preferenceshelp")
-                self.w_close_button = builder.get_object("preferencesclose")
-                self.w_cancel_button = builder.get_object("preferencescancel")
-                self.w_languages_all_radiobutton = \
-                    builder.get_object("lang_install_all_radiobutton")
-                self.w_languages_only_radiobutton = \
-                    builder.get_object("lang_install_only_radiobutton")
-                self.w_feature_devel_checkbutton = \
-                    builder.get_object("feature_devel_checkbutton")
-                self.w_feature_doc_checkbutton = \
-                    builder.get_object("feature_doc_checkbutton")
-
-                self.w_locales_treeview = \
-                    builder.get_object("languages_treeview")
-                self.w_preferences_notebook = builder.get_object(
-                        "preferences_notebook")
-                self.w_languages_treeview = builder.get_object(
-                        "languages_treeview")
-
-                self.w_gsig_ignored_radiobutton =  builder.get_object(
-                    "gsig_ignored_radiobutton")
-                self.w_gsig_optional_radiobutton =  builder.get_object(
-                    "gsig_optional_but_valid_radiobutton")
-                self.w_gsig_valid_radiobutton =  builder.get_object(
-                    "gsig_valid_radiobutton")
-                self.w_gsig_name_radiobutton =  builder.get_object(
-                    "gsig_name_radiobutton")
-                self.w_gsig_name_entry =  builder.get_object(
-                    "gsig_name_entry")
-                self.w_gsig_cert_names_vbox =  builder.get_object(
-                    "gsig_cert_names_vbox")
-
-                self.orig_gsig_policy = None
-
-                self.watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
-                self.orig_lang_locale_count_dict = {}
-                self.orig_facets_dict = {}
-                self.orig_facet_lang_dict = {}
-                self.orig_facet_lang_star_dict = {}
-                self.orig_facet_locale_dict = {}
-                self.facet_g11_locales_dict = {}
-                self.facetlocales_list = []
-                self.facets_to_set = {}
-                self.locales_setup = False
-                self.locales_treeview_selection = []
-                self.locales_list = self.__get_locales_liststore()
-                self.__init_locales_tree_view(self.locales_list)
-                self.__init_locales_list()
-
-        def show_signature_policy(self):
-                self.w_preferences_notebook.set_current_page(
-                    PREFERENCES_NOTEBOOK_SIG_POL_PAGE)
-                self.w_preferencesdialog.show()
-
-        def set_window_icon(self, window_icon):
-                self.w_preferencesdialog.set_icon(window_icon)
-
-        def setup_signals(self):
-                signals_table = [
-                    (self.w_preferencesdialog, "show",
-                     self.__on_preferencesdialog_show),
-                    (self.w_preferencesdialog, "delete_event",
-                     self.__on_preferencesdialog_delete_event),
-                    (self.w_help_button, "clicked",
-                     self.__on_preferenceshelp_clicked),
-                    (self.w_close_button, "clicked",
-                     self.__on_preferencesclose_clicked),
-                    (self.w_cancel_button, "clicked",
-                     self.__on_preferencescancel_clicked),
-                    (self.w_languages_all_radiobutton, "toggled",
-                     self.__on_languages_all_radiobutton_toggled),
-                    (self.w_preferences_notebook, "switch_page",
-                     self.__on_notebook_change),
-                    (self.w_languages_treeview, "button_press_event",
-                     self.__on_languages_treeview_button_and_key_events),
-                    (self.w_languages_treeview, "key_press_event",
-                     self.__on_languages_treeview_button_and_key_events),
-
-                    (self.w_gsig_ignored_radiobutton, "toggled",
-                        self.__on_gsig_radiobutton_toggled),
-                    (self.w_gsig_optional_radiobutton, "toggled",
-                        self.__on_gsig_radiobutton_toggled),
-                    (self.w_gsig_valid_radiobutton, "toggled",
-                        self.__on_gsig_radiobutton_toggled),
-                    (self.w_gsig_name_radiobutton, "toggled",
-                        self.__on_gsig_radiobutton_toggled),
-                     ]
-                for widget, signal_name, callback in signals_table:
-                        widget.connect(signal_name, callback)
-
-        def __on_gsig_radiobutton_toggled(self, widget):
-                self.w_gsig_cert_names_vbox.set_sensitive(
-                    self.w_gsig_name_radiobutton.get_active())
-
-        def __update_img_sig_policy_prop(self, set_props):
-                try:
-                        self.parent.get_api_object().img.set_properties(set_props)
-                except api_errors.ApiException, e:
-                        error_msg = str(e)
-                        msg_title = _("Preferences Error")
-                        msg_type = gtk.MESSAGE_ERROR
-                        gui_misc.error_occurred(None, error_msg, msg_title, msg_type)
-                        return False
-                return True
-
-        def __update_img_sig_policy(self):
-                orig = self.orig_gsig_policy
-                ignore = self.w_gsig_ignored_radiobutton.get_active()
-                verify = self.w_gsig_optional_radiobutton.get_active()
-                req_sigs = self.w_gsig_valid_radiobutton.get_active()
-                req_names = self.w_gsig_name_radiobutton.get_active()
-                names = gui_misc.fetch_signature_policy_names_from_textfield(
-                    self.w_gsig_name_entry.get_text())
-                if req_names and len(names) == 0:
-                        return False
-                set_props = gui_misc.setup_signature_policy_properties(ignore,
-                    verify, req_sigs, req_names, names, orig)
-                if len(set_props) > 0:
-                        return self.__update_img_sig_policy_prop(set_props)
-                return True
-
-        def __prepare_img_signature_policy(self):
-                if self.orig_gsig_policy:
-                        return
-                sig_policy = self.__fetch_img_signature_policy()
-                self.orig_gsig_policy = sig_policy
-                self.w_gsig_ignored_radiobutton.set_active(
-                    sig_policy[gui_misc.SIG_POLICY_IGNORE])
-                self.w_gsig_optional_radiobutton.set_active(
-                    sig_policy[gui_misc.SIG_POLICY_VERIFY])
-                self.w_gsig_valid_radiobutton.set_active(
-                    sig_policy[gui_misc.SIG_POLICY_REQUIRE_SIGNATURES])
-                self.w_gsig_cert_names_vbox.set_sensitive(False)
-
-                if sig_policy[gui_misc.SIG_POLICY_REQUIRE_NAMES]:
-                        self.w_gsig_name_radiobutton.set_active(True)
-                        self.w_gsig_cert_names_vbox.set_sensitive(True)
-
-                names = sig_policy[gui_misc.PROP_SIGNATURE_REQUIRED_NAMES]
-                gui_misc.set_signature_policy_names_for_textfield(
-                    self.w_gsig_name_entry, names)
-
-        def __fetch_img_signature_policy(self):
-                prop_sig_pol = self.parent.get_api_object().img.get_property(
-                    gui_misc.PROP_SIGNATURE_POLICY)
-                prop_sig_req_names = self.parent.get_api_object().img.get_property(
-                    gui_misc.PROP_SIGNATURE_REQUIRED_NAMES)
-                return gui_misc.create_sig_policy_from_property(
-                    prop_sig_pol, prop_sig_req_names)
-
-        def __on_notebook_change(self, widget, event, pagenum):
-                if pagenum == PREFERENCES_NOTEBOOK_LANGUAGES_PAGE:
-                        self.w_preferencesdialog.window.set_cursor(
-                            self.watch )
-                        gobject.idle_add(self.__prepare_locales)
-                elif pagenum == PREFERENCES_NOTEBOOK_SIG_POL_PAGE:
-                        gobject.idle_add(self.__prepare_img_signature_policy)
-
-        @staticmethod
-        def __get_locales_liststore():
-                return gtk.ListStore(
-                        gobject.TYPE_STRING,   # enumerations.LOCALE_NAME
-                                               # - <language> (territory)
-                        gobject.TYPE_STRING,   # enumerations.LOCALE_LANGUAGE
-                                               # - Display <language> name
-                        gobject.TYPE_STRING,   # enumerations.LOCALE_TERRITORY
-                                               # - Display <territory> name
-                        gobject.TYPE_STRING,   # enumerations.LOCALE
-                                               # - <language>_<territory>(code)
-                        gobject.TYPE_BOOLEAN,  # enumerations.LOCALE_SELECTED
-                        )
-
-        def __select_column_clicked(self, data):
-                sort_model = self.w_locales_treeview.get_model()
-                model = sort_model.get_model()
-                iter_next = sort_model.get_iter_first()
-                none_selected = True
-                all_selected = True
-                list_of_paths = []
-                while iter_next != None:
-                        sort_path = sort_model.get_path(iter_next)
-                        path = sort_model.convert_path_to_child_path(sort_path)
-                        list_of_paths.append(path)
-                        app_iter = sort_model.convert_iter_to_child_iter(None,
-                                            iter_next)
-                        val = model.get_value(app_iter,
-                            enumerations.LOCALE_SELECTED)
-                        if val:
-                                none_selected = False
-                        else:
-                                all_selected = False
-                        iter_next = sort_model.iter_next(iter_next)
-
-                some_selected = not all_selected and not none_selected
-                select_all = none_selected or some_selected
-                for path in list_of_paths:
-                        app_iter = model.get_iter(path)
-                        val = model.get_value(app_iter,
-                            enumerations.LOCALE_SELECTED)
-                        if select_all and not val:
-                                model.set_value(app_iter,
-                                    enumerations.LOCALE_SELECTED, True)
-                        elif not select_all and val:
-                                model.set_value(app_iter,
-                                    enumerations.LOCALE_SELECTED, False)
-
-        @staticmethod
-        def __sort_func(treemodel, iter1, iter2, column):
-                col_val1 = treemodel.get_value(iter1, column)
-                col_val2 = treemodel.get_value(iter2, column)
-                ret = cmp(col_val1, col_val2)
-                if ret != 0:
-                        return ret
-                if column == enumerations.LOCALE_LANGUAGE:
-                        ter1 = treemodel.get_value(iter1,
-                            enumerations.LOCALE_TERRITORY)
-                        ter2 = treemodel.get_value(iter2,
-                            enumerations.LOCALE_TERRITORY)
-                        ret = cmp(ter1, ter2)
-                elif column == enumerations.LOCALE_TERRITORY:
-                        lang1 = treemodel.get_value(iter1,
-                            enumerations.LOCALE_LANGUAGE)
-                        lang2 = treemodel.get_value(iter2,
-                            enumerations.LOCALE_LANGUAGE)
-                        ret = cmp(lang1, lang2)
-                return ret
-
-        def __init_locales_tree_view(self, locales_list):
-                locales_sort_model = gtk.TreeModelSort(locales_list)
-                locales_sort_model.set_sort_column_id(enumerations.LOCALE_LANGUAGE,
-                    gtk.SORT_ASCENDING)
-
-                locales_sort_model.set_sort_func(enumerations.LOCALE_LANGUAGE,
-                    self.__sort_func,
-                    enumerations.LOCALE_LANGUAGE)
-                locales_sort_model.set_sort_func(enumerations.LOCALE_TERRITORY,
-                    self.__sort_func,
-                    enumerations.LOCALE_TERRITORY)
-
-                # Selected column - Not sorted
-                toggle_renderer = gtk.CellRendererToggle()
-                column = gtk.TreeViewColumn("",
-                    toggle_renderer, active = enumerations.LOCALE_SELECTED)
-                column.set_expand(False)
-                column.set_clickable(True)
-                column.connect('clicked', self.__select_column_clicked)
-                select_image = self.parent.get_theme_selection_coloumn_image()
-                column.set_widget(select_image)
-                self.w_locales_treeview.append_column(column)
-
-                # Language column - sort using custom __sort_func()
-                lang_renderer = gtk.CellRendererText()
-                column = gtk.TreeViewColumn(_("Language"),
-                    lang_renderer,  text = enumerations.LOCALE_LANGUAGE)
-                column.set_expand(True)
-                column.set_sort_column_id(enumerations.LOCALE_LANGUAGE)
-                column.set_sort_indicator(True)
-                self.w_locales_treeview.append_column(column)
-
-                # Territory column - sort using custom __sort_func()
-                ter_renderer = gtk.CellRendererText()
-                column = gtk.TreeViewColumn(_("Territory"),
-                    ter_renderer,  text = enumerations.LOCALE_TERRITORY)
-                column.set_expand(True)
-                column.set_sort_column_id(enumerations.LOCALE_TERRITORY)
-                column.set_sort_indicator(True)
-                self.w_locales_treeview.append_column(column)
-
-                self.w_locales_treeview.get_selection().set_mode(
-                    gtk.SELECTION_MULTIPLE)
-                self.w_locales_treeview.get_selection().connect('changed',
-                    self.__on_languages_treeview_changed)
-                self.w_locales_treeview.set_model(locales_sort_model)
-
-        def __init_locales_list(self):
-                sorted_model = self.w_locales_treeview.get_model()
-                self.w_locales_treeview.set_model(None)
-                if not sorted_model:
-                        return
-                model = sorted_model.get_model()
-                model.clear()
-                model.insert(0, ["", _("Loading ..."), "", "", False])
-                self.w_locales_treeview.set_model(sorted_model)
-
-        def __prepare_locales(self):
-                try:
-                        if self.locales_setup:
-                                return
-                        self.__prepare_locales_list()
-                finally:
-                        self.w_preferencesdialog.window.set_cursor(None)
-
-        def __api_get_facets(self):
-                facets = {}
-                try:
-                        # XXX facets should be accessible through pkg.client.api
-                        facets = self.parent.get_api_object().img.get_facets()
-                except api_errors.ApiException, ex:
-                        err = str(ex)
-                        self.w_preferencesdialog.hide()
-                        gobject.idle_add(self.parent.error_occurred, err,
-                            None, gtk.MESSAGE_INFO )
-                return facets
-
-        @staticmethod
-        def __strip_g11system_codeset(g11locale):
-                strippedlocale = ""
-                m = re.match(SYSTEM_G11LOCALE_MATCH, g11locale)
-                #Note: for now strip out system locale (code@locale variant)
-                #ignore group(2)
-                if m != None and len(m.groups()) == 2:
-                        strippedlocale = m.group(1)
-                return strippedlocale
-
-        @staticmethod
-        def __facetlocale_to_g11locale(facetlocale):
-                g11locale = ""
-                m = re.match(SYSTEM_FACETLOCALE_MATCH, facetlocale)
-                if m != None and len(m.groups()) == 2:
-                        g11locale = m.group(1)
-                        if m.group(2) != '':
-                                g11locale += "." + m.group(2)
-                return g11locale
-
-        def __prepare_locales_list(self):
-                sorted_model = self.w_locales_treeview.get_model()
-                self.w_locales_treeview.set_model(None)
-                if not sorted_model:
-                        return
-                # Reset api so we have up to date facet list
-                if not self.parent.do_api_reset():
-                        #do_api_reset fails then it will inform the user
-                        return
-
-                model = sorted_model.get_model()
-                self.orig_facets_dict.clear()
-                self.orig_facets_dict = self.__api_get_facets()
-                self.__setup_optional_components_tab(self.orig_facets_dict)
-                self.__process_orig_facets(self.orig_facets_dict)
-
-                # Count selected facet locales for each lang
-                self.orig_lang_locale_count_dict.clear()
-                for locale, selected in  self.orig_facet_locale_dict.items():
-                        lang = locale.split("_")[0]
-                        if not self.orig_lang_locale_count_dict.has_key(lang):
-                                self.orig_lang_locale_count_dict[lang] = 0
-                        if selected:
-                                self.orig_lang_locale_count_dict[lang] += 1
-
-                # Setup locales:
-                # Try to fetch available locales from system/locale package
-                # using __get_system_locales()
-                if self.facet_g11_locales_dict == None or \
-                        len(self.facet_g11_locales_dict) == 0:
-                        facetlocales_list = self.__get_system_locales()
-                        if facetlocales_list == None:
-                                return
-                        for facetlocale in facetlocales_list:
-                                g11locale = self.__facetlocale_to_g11locale(
-                                    facetlocale)
-                                self.facet_g11_locales_dict[facetlocale] = g11locale
-                # Setup locales:
-                # If not available fall back and get the locales installed on
-                # the system using loc_pop.get_valid_locales() and strip any codeset
-                if self.facet_g11_locales_dict == None or \
-                        len(self.facet_g11_locales_dict) == 0:
-                        # pylint: disable=E1101
-                        loc_pop = g11nsvc.G11NSvcLocalePopulate()
-                        g11locales_list = loc_pop.get_valid_locales()
-                        for g11locale in g11locales_list:
-                                strippedlocale = self.__strip_g11system_codeset(
-                                    g11locale)
-                                facetlocale = strippedlocale
-                                self.facet_g11_locales_dict[facetlocale] = \
-                                        strippedlocale
-                # pylint: disable=E1101
-                loc_ops = g11nsvc.G11NSvcLocaleOperations(
-                    self.facet_g11_locales_dict.values())
-
-                # Process facet locales
-                locale_list = []
-                for facetlocale, g11locale in self.facet_g11_locales_dict.items():
-                        if g11locale == "C" or g11locale == "POSIX":
-                                continue
-                        locale_name = loc_ops.get_locale_desc(g11locale)
-                        if locale_name == None or locale_name == "" :
-                                continue
-                        locale_language = loc_ops.get_language_desc(g11locale)
-                        locale_territory = loc_ops.get_territory_desc(g11locale)
-                        locale = facetlocale
-                        is_latin = g11locale.endswith("latin")
-                        if is_latin:
-                                locale_territory += _(" [latin]")
-                        lang = locale.split("_")[0]
-
-                        sel_count = 0
-                        if self.orig_lang_locale_count_dict.has_key(lang):
-                                sel_count = self.orig_lang_locale_count_dict[lang]
-
-                        # Precedence order:
-                        # <lang>_<ter>: <lang>_* e.g. nl_BE: nl_*
-                        selected = False
-                        if sel_count == 0:
-                                if self.orig_facet_lang_star_dict.has_key(
-                                lang):
-                                        selected = \
-                                                self.orig_facet_lang_star_dict[lang]
-                        elif self.orig_facet_locale_dict.has_key(locale):
-                                selected = self.orig_facet_locale_dict[
-                                    locale]
-
-                        # locale row contains:
-                        #
-                        # locale_name = <language> (territory)
-                        # locale_language = Display <language> name
-                        # locale_territory = Display <territory> name
-                        # facetlocale = <language>_<territory>(<codeset>)
-                        # selected = selected
-                        locale_row = [locale_name, locale_language,
-                            locale_territory, facetlocale, selected]
-                        locale_list.append(locale_row)
-                # Sort and setup model
-                model.clear()
-                i = 0
-                locale_list.sort(key=lambda locale_list: locale_list[
-                    enumerations.LOCALE_LANGUAGE])
-                for locale_row in locale_list:
-                        model.insert(i, locale_row)
-                        i += 1
-                self.w_locales_treeview.set_model(sorted_model)
-
-                if debug:
-                        print "DEBUG loaded facets: ", \
-                                self.orig_facet_lang_dict, \
-                                self.orig_facet_lang_star_dict, \
-                                self.orig_facet_locale_dict
-                self.locales_setup = True
-
-        def __get_system_locales(self):
-                try:
-                        api_o = self.parent.get_api_object()
-                        res = api_o.get_pkg_list(
-                            pkg_list = api.ImageInterface.LIST_INSTALLED,
-                            patterns = ['system/locale'],
-                            repos=[],
-                            raise_unmatched=False, return_fmris=True,
-                            variants=True )
-
-                        manifest = None
-                        for entry in res:
-                                manifest = api_o.get_manifest(entry[0],
-                                    all_variants=True, repos=[] )
-                                break
-                        facets = None
-                        if manifest != None:
-                                facets = list(manifest.gen_facets())
-                        if debug and facets != None:
-                                print "DEBUG facets from system/locale:", facets
-
-                        facetlocales = []
-                        if facets == None:
-                                return facetlocales
-
-                        for facet_key in facets:
-                                if not facet_key.startswith(LOCALE_PREFIX):
-                                        continue
-                                m = re.match(LOCALE_MATCH, facet_key)
-                                if m != None and len(m.groups()) == 1:
-                                        locale = m.group(1)
-                                        facetlocales.append(locale)
-                        return facetlocales
-
-                except api_errors.ApiException, ex:
-                        err = str(ex)
-                        self.w_preferencesdialog.hide()
-                        gobject.idle_add(self.parent.error_occurred, err,
-                            None, gtk.MESSAGE_INFO )
-                        return None
-
-        def __setup_optional_components_tab(self, facets):
-                install_all = self.__is_install_all(facets, ALL_LOCALES)
-                self.w_languages_all_radiobutton.set_active(install_all)
-                self.w_languages_only_radiobutton.set_active(not install_all)
-                self.w_locales_treeview.set_sensitive(not install_all)
-
-                install_devel = self.__is_install_all(facets, ALL_DEVEL)
-                self.w_feature_devel_checkbutton.set_active(install_devel)
-                install_doc = self.__is_install_all(facets, ALL_DOC)
-                self.w_feature_doc_checkbutton.set_active(install_doc)
-
-        @staticmethod
-        def __is_install_all(facets, component_type):
-                if facets != None and facets.has_key(component_type):
-                        return facets[component_type]
-                # Default to True if key not present
-                return True
-
-        def __process_orig_facets(self, facets):
-                if debug:
-                        print "DEBUG orig facets", facets
-
-                self.orig_facet_lang_dict.clear()
-                self.orig_facet_lang_star_dict.clear()
-                self.orig_facet_locale_dict.clear()
-
-                # Process facets
-                for facet_key in facets.keys():
-                        val = facets[facet_key]
-                        if not facet_key.startswith(LOCALE_PREFIX):
-                                continue
-                        if facet_key == ALL_LOCALES:
-                                self.orig_facet_lang_dict[ALL_LOCALES] = val
-                                continue
-                        m = re.match(LANG_MATCH, facet_key)
-                        if m != None and len(m.groups()) == 1:
-                                lang = m.group(1)
-                                self.orig_facet_lang_dict[lang] = val
-                                continue
-                        m = re.match(LANG_STAR_MATCH, facet_key)
-                        if m != None and len(m.groups()) == 1:
-                                lang = m.group(1)
-                                self.orig_facet_lang_star_dict[lang] = val
-                                continue
-                        m = re.match(LOCALE_MATCH, facet_key)
-                        if m != None and len(m.groups()) == 1:
-                                locale = m.group(1)
-                                self.orig_facet_locale_dict[locale] = val
-
-        def __dump_locales_list(self):
-                self.facets_to_set = self.__api_get_facets()
-                install_all = self.w_languages_all_radiobutton.get_active()
-                self.facets_to_set[ALL_LOCALES] = install_all
-
-                if install_all:
-                        return
-
-                sorted_model = self.w_locales_treeview.get_model()
-                if not sorted_model:
-                        return
-                model = sorted_model.get_model()
-
-                lang_locale_dict = {}
-                lang_locale_count_dict = {}
-                for row in model:
-                        selected = row[enumerations.LOCALE_SELECTED]
-                        locale = row[enumerations.LOCALE]
-                        lang = locale.split("_")[0]
-
-                        if not lang_locale_dict.has_key(lang):
-                                lang_locale_dict[lang] = {}
-                        lang_locale_dict[lang][locale] = selected
-                        if not lang_locale_count_dict.has_key(lang):
-                                lang_locale_count_dict[lang] = 0
-                        if selected:
-                                lang_locale_count_dict[lang] += 1
-
-                for lang, locales in lang_locale_dict.items():
-                        sel_count = lang_locale_count_dict[lang]
-                        self.__process_locales_to_set(lang, locales, sel_count)
-
-                if debug:
-                        print "DEBUG facets to set:", self.facets_to_set
-
-        def __dump_optional_components(self):
-                install_devel = self.w_feature_devel_checkbutton.get_active()
-                install_doc = self.w_feature_doc_checkbutton.get_active()
-
-                if install_devel == False:
-                        self.facets_to_set[ALL_DEVEL] = False
-                elif self.facets_to_set.has_key(ALL_DEVEL):
-                        del self.facets_to_set[ALL_DEVEL]
-
-                if install_doc == False:
-                        self.facets_to_set[ALL_DOC] = False
-                elif self.facets_to_set.has_key(ALL_DOC):
-                        del self.facets_to_set[ALL_DOC]
-
-        def __process_locales_to_set(self, lang, locales, sel_count):
-                locales_count = len(locales)
-                if locales_count == 0:
-                        return
-
-                # All Selected
-                if sel_count == locales_count:
-                        self.facets_to_set[LOCALE_PREFIX + lang + \
-                                    LANG_STAR_SUFFIX] = True
-                        self.facets_to_set[LOCALE_PREFIX + lang] = True
-                        for item in locales.items():
-                                key = LOCALE_PREFIX + item[0]
-                                if self.facets_to_set.has_key(key):
-                                        del self.facets_to_set[key]
-                # None Selected
-                elif sel_count == 0:
-                        has_orig_star_key = \
-                                self.orig_facet_lang_star_dict.has_key(lang)
-                        has_orig_lang_count_key = \
-                                self.orig_lang_locale_count_dict.has_key(lang)
-                        # Has the user made a change to get us to the None selected state?
-                        # If not then just ignore.
-                        if (has_orig_star_key and
-                                self.orig_facet_lang_star_dict[lang]) or \
-                            (has_orig_lang_count_key and
-                                self.orig_lang_locale_count_dict[lang] > 0):
-                                if self.facets_to_set.has_key(LOCALE_PREFIX +
-                                    lang + LANG_STAR_SUFFIX):
-                                        del self.facets_to_set[LOCALE_PREFIX +
-                                            lang + LANG_STAR_SUFFIX]
-                                if self.facets_to_set.has_key(LOCALE_PREFIX +
-                                    lang):
-                                        del self.facets_to_set[LOCALE_PREFIX +
-                                            lang]
-
-                        for item in locales.items():
-                                key = LOCALE_PREFIX + item[0]
-                                if self.facets_to_set.has_key(key):
-                                        del self.facets_to_set[key]
-                # Some Selected
-                else:
-                        self.facets_to_set[LOCALE_PREFIX + lang] = True
-                        star_key = LOCALE_PREFIX + lang + LANG_STAR_SUFFIX
-                        if self.facets_to_set.has_key(star_key):
-                                del self.facets_to_set[star_key]
-                        for locale, val in locales.items():
-                                key = LOCALE_PREFIX + locale
-                                if val:
-                                        self.facets_to_set[key] = val
-                                else:
-                                        if self.facets_to_set.has_key(key):
-                                                del self.facets_to_set[key]
-
-        def __on_languages_treeview_button_and_key_events(self,
-            treeview, event):
-                if event.type == GDK_2BUTTON_PRESS:
-                        self.__enable_disable()
-
-        def __on_languages_treeview_changed(self, treeselection):
-                selection = treeselection.get_selected_rows()
-                pathlist = selection[1]
-                self.locales_treeview_selection = pathlist
-                if pathlist != None and len(pathlist) == 1:
-                        self.__enable_disable()
-
-        def __enable_disable(self):
-                sorted_model = self.w_locales_treeview.get_model()
-                if sorted_model == None:
-                        return
-                model = sorted_model.get_model()
-                if len(self.locales_treeview_selection) == 0:
-                        return
-
-                path = self.locales_treeview_selection[0]
-                child_path = sorted_model.convert_path_to_child_path(path)
-                itr = model.get_iter(child_path)
-                selected = model.get_value(itr, enumerations.LOCALE_SELECTED)
-                model.set_value(itr, enumerations.LOCALE_SELECTED, not selected)
-
-                for path in self.locales_treeview_selection[1:]:
-                        child_path = sorted_model.convert_path_to_child_path(path)
-                        itr = model.get_iter(child_path)
-                        model.set_value(itr, enumerations.LOCALE_SELECTED,
-                            not selected)
-
-        def set_modal_and_transient(self, parent_window):
-                gui_misc.set_modal_and_transient(self.w_preferencesdialog,
-                    parent_window)
-
-        def __on_preferencesdialog_delete_event(self, widget, event):
-                self.__on_preferencesclose_clicked(None)
-                return True
-
-        def __on_preferencesdialog_show(self, widget):
-                self.orig_gsig_policy = {}
-                self.locales_setup = False
-
-                pagenum = self.w_preferences_notebook.get_current_page()
-                if pagenum == PREFERENCES_NOTEBOOK_LANGUAGES_PAGE:
-                        self.w_preferencesdialog.window.set_cursor(self.watch)
-                        gobject.idle_add(self.__prepare_locales)
-                elif pagenum == PREFERENCES_NOTEBOOK_SIG_POL_PAGE:
-                        gobject.idle_add(self.__prepare_img_signature_policy)
-                return True
-
-        def __on_preferencescancel_clicked(self, widget):
-                self.w_preferencesdialog.hide()
-
-        def __on_preferencesclose_clicked(self, widget):
-                error_dialog_title = _("Preferences")
-                text = self.w_gsig_name_entry.get_text()
-                req_names = self.w_gsig_name_radiobutton.get_active()
-                if not gui_misc.check_sig_required_names_policy(text,
-                    req_names, error_dialog_title):
-                        return
-                if self.orig_gsig_policy and not self.__update_img_sig_policy():
-                        return
-                self.__dump_locales_list()
-                self.__dump_optional_components()
-                self.w_preferencesdialog.hide()
-                ignore_all_default = len(self.orig_facets_dict) == 0 and \
-                        len(self.facets_to_set) == 1 \
-                        and self.facets_to_set.has_key(ALL_LOCALES) and \
-                        self.facets_to_set[ALL_LOCALES] == True
-                if not ignore_all_default and self.orig_facets_dict != {} and \
-                        self.orig_facets_dict != self.facets_to_set:
-                        self.parent.update_facets(self.facets_to_set)
-                self.gconf.set_show_startpage(
-                    self.w_startpage_checkbutton.get_active())
-                self.gconf.set_save_state(
-                    self.w_exit_checkbutton.get_active())
-                self.gconf.set_show_image_update(
-                    self.w_confirm_updateall_checkbutton.get_active())
-                self.gconf.set_show_install(
-                    self.w_confirm_install_checkbutton.get_active())
-                self.gconf.set_show_remove(
-                    self.w_confirm_remove_checkbutton.get_active())
-
-        def __on_preferenceshelp_clicked(self, widget):
-                pagenum = self.w_preferences_notebook.get_current_page()
-                if pagenum == PREFERENCES_NOTEBOOK_SIG_POL_PAGE:
-                        tag = "img-sig-policy"
-                else:
-                        tag = "pkg-mgr-prefs"
-                gui_misc.display_help(tag)
-
-        def __on_languages_all_radiobutton_toggled(self, widget):
-                self.w_locales_treeview.set_sensitive(
-                    not  self.w_languages_all_radiobutton.get_active())
-
-        def activate(self):
-                self.w_startpage_checkbutton.set_active(
-                    self.gconf.show_startpage)
-                self.w_exit_checkbutton.set_active(self.gconf.save_state)
-                self.w_confirm_updateall_checkbutton.set_active(
-                    self.gconf.show_image_update)
-                self.w_confirm_install_checkbutton.set_active(
-                    self.gconf.show_install)
-                self.w_confirm_remove_checkbutton.set_active(
-                    self.gconf.show_remove)
-                self.__setup_optional_components_tab(self.__api_get_facets())
-                self.w_preferencesdialog.show()
-