qubes-installer-qubes-os/anaconda/pyanaconda/ui/gui/spokes/langsupport.py

145 lines
5.8 KiB
Python
Raw Normal View History

# Language support selection spoke classes
#
# Copyright (C) 2013 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details. You should have received a copy of the
# GNU General Public License along with this program; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
# Red Hat Author(s): Radek Vykydal <rvykydal@redhat.com>
# Vratislav Podzimek <vpodzime@redhat.com>
#
from gi.repository import Pango
from pyanaconda.flags import flags
from pyanaconda.i18n import N_
from pyanaconda.ui.gui.spokes import NormalSpoke
from pyanaconda.ui.gui.categories.localization import LocalizationCategory
from pyanaconda.ui.gui.spokes.lib.lang_locale_handler import LangLocaleHandler
from pyanaconda import localization
import re
import logging
log = logging.getLogger("anaconda")
__all__ = ["LangsupportSpoke"]
class LangsupportSpoke(LangLocaleHandler, NormalSpoke):
builderObjects = ["languageStore", "languageStoreFilter", "localeStore", "langsupportWindow"]
mainWidgetName = "langsupportWindow"
uiFile = "spokes/langsupport.glade"
category = LocalizationCategory
icon = "accessories-character-map-symbolic"
title = N_("_LANGUAGE SUPPORT")
def __init__(self, *args, **kwargs):
NormalSpoke.__init__(self, *args, **kwargs)
LangLocaleHandler.__init__(self)
self._selected_locales = set()
def initialize(self):
self._languageStore = self.builder.get_object("languageStore")
self._languageEntry = self.builder.get_object("languageEntry")
self._languageStoreFilter = self.builder.get_object("languageStoreFilter")
self._langView = self.builder.get_object("languageView")
self._langSelectedRenderer = self.builder.get_object("langSelectedRenderer")
self._langSelectedColumn = self.builder.get_object("langSelectedColumn")
self._langSelection = self.builder.get_object("languageViewSelection")
self._localeStore = self.builder.get_object("localeStore")
self._localeView = self.builder.get_object("localeView")
LangLocaleHandler.initialize(self)
# mark selected locales and languages with selected locales bold
localeNativeColumn = self.builder.get_object("localeNativeName")
localeNativeNameRenderer = self.builder.get_object("localeNativeNameRenderer")
localeNativeColumn.set_cell_data_func(localeNativeNameRenderer,
self._mark_selected_locale_bold)
for col, rend in [("nativeName", "nativeNameRenderer"),
("englishName", "englishNameRenderer")]:
column = self.builder.get_object(col)
renderer = self.builder.get_object(rend)
column.set_cell_data_func(renderer, self._mark_selected_language_bold)
def apply(self):
# store only additional langsupport locales
self.data.lang.addsupport = sorted(self._selected_locales - set([self.data.lang.lang]))
def refresh(self):
self._languageEntry.set_text("")
self._selected_locales = set(self._installed_langsupports)
# select the first locale from the "to be installed" langsupports
self._select_locale(self._installed_langsupports[0])
@property
def _installed_langsupports(self):
return [self.data.lang.lang] + sorted(self.data.lang.addsupport)
@property
def showable(self):
return not flags.livecdInstall
@property
def status(self):
return ", ".join(localization.get_native_name(locale)
for locale in self._installed_langsupports)
@property
def mandatory(self):
return False
@property
def completed(self):
return True
def _add_language(self, store, native, english, lang):
native_span = '<span lang="%s">%s</span>' % (lang, native)
store.append([native_span, english, lang])
def _add_locale(self, store, native, locale):
native_span = '<span lang="%s">%s</span>' % (re.sub(r'\..*', '', locale), native)
# native, locale, selected, additional
store.append([native_span, locale, locale in self._selected_locales,
locale != self.data.lang.lang])
def _mark_selected_locale_bold(self, column, renderer, model, itr, user_data=None):
if model[itr][2]:
renderer.set_property("weight", Pango.Weight.BOLD.real)
else:
renderer.set_property("weight", Pango.Weight.NORMAL.real)
def _mark_selected_language_bold(self, column, renderer, model, itr, user_data=None):
lang_locales = set(localization.get_language_locales(model[itr][2]))
if not lang_locales.isdisjoint(self._selected_locales):
renderer.set_property("weight", Pango.Weight.BOLD.real)
else:
renderer.set_property("weight", Pango.Weight.NORMAL.real)
# Signal handlers.
def on_locale_toggled(self, renderer, path):
itr = self._localeStore.get_iter(path)
row = self._localeStore[itr]
row[2] = not row[2]
if row[2]:
self._selected_locales.add(row[1])
else:
self._selected_locales.remove(row[1])