language: always show all languages
This commit is contained in:
@@ -1,58 +1,29 @@
|
||||
using Gtk 4.0;
|
||||
using Gio 2.0;
|
||||
|
||||
template $LanguagePage : Stack
|
||||
{
|
||||
vhomogeneous: false;
|
||||
transition-type: crossfade;
|
||||
|
||||
StackPage {
|
||||
name: "default";
|
||||
template $LanguagePage : Box {
|
||||
ScrolledWindow {
|
||||
propagate-natural-height: true;
|
||||
styles ["embedded"]
|
||||
child: Box {
|
||||
orientation: vertical;
|
||||
spacing: 12;
|
||||
|
||||
ScrolledWindow {
|
||||
propagate-natural-height: true;
|
||||
styles ["embedded"]
|
||||
child: Box {
|
||||
orientation: vertical;
|
||||
spacing: 6;
|
||||
ListBox suggested_list {
|
||||
hexpand: true;
|
||||
/* Margin is set here, in case this list is empty */
|
||||
margin-bottom: 12;
|
||||
row-activated => $language_row_activated();
|
||||
styles ["boxed-list", "bottom-spacing"]
|
||||
}
|
||||
|
||||
ListBox default_list {
|
||||
hexpand: true;
|
||||
/* In case there is no show all button */
|
||||
margin-bottom: 6;
|
||||
row-activated => $language_row_activated();
|
||||
styles ["boxed-list"]
|
||||
}
|
||||
|
||||
Button show_all_button {
|
||||
focusable: true;
|
||||
halign: center;
|
||||
clicked => $show_all_button_clicked();
|
||||
styles ["pill", "bottom-button"]
|
||||
|
||||
Image {
|
||||
icon-name: "view-more-symbolic";
|
||||
width-request: 32;
|
||||
}
|
||||
}
|
||||
};
|
||||
ListBox other_list {
|
||||
hexpand: true;
|
||||
row-activated => $language_row_activated();
|
||||
styles ["boxed-list", "bottom-spacing"]
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
StackPage {
|
||||
name: "all";
|
||||
child: ScrolledWindow {
|
||||
propagate-natural-height: true;
|
||||
styles ["embedded"]
|
||||
child: ListBox all_list {
|
||||
hexpand: true;
|
||||
valign: start;
|
||||
row-activated => $language_row_activated();
|
||||
styles ["boxed-list", "bottom-spacing"]
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Gio.ListStore suggested_model {}
|
||||
Gio.ListStore other_model {}
|
||||
@@ -75,7 +75,7 @@ class LanguageProvider:
|
||||
def _assert_languages_loaded(self):
|
||||
with self.languages_loading_lock:
|
||||
if not self.languages_loaded:
|
||||
self.suggested_languages, self.all_languages = self.languages.result()
|
||||
self.all_languages, self.suggested, self.other = self.languages.result()
|
||||
self.languages = None
|
||||
self.languages_loaded = True
|
||||
|
||||
@@ -134,14 +134,17 @@ class LanguageProvider:
|
||||
unavailable_languages)
|
||||
all_languages.sort(key=lambda k: k.name)
|
||||
|
||||
suggested_languages = []
|
||||
suggested = []
|
||||
other = []
|
||||
suggested_codes = global_state.get_config('suggested_languages')
|
||||
if suggested_codes and len(suggested_codes) > 0:
|
||||
for language_info in all_languages:
|
||||
if language_info.language_code in suggested_codes:
|
||||
suggested_languages.append(language_info)
|
||||
suggested.append(language_info)
|
||||
else:
|
||||
other.append(language_info)
|
||||
|
||||
return (suggested_languages, all_languages)
|
||||
return (all_languages, suggested, other)
|
||||
|
||||
### public methods ###
|
||||
|
||||
@@ -169,7 +172,11 @@ class LanguageProvider:
|
||||
|
||||
def get_suggested_languages(self):
|
||||
self._assert_languages_loaded()
|
||||
return self.suggested_languages
|
||||
return self.suggested
|
||||
|
||||
def get_other_languages(self):
|
||||
self._assert_languages_loaded()
|
||||
return self.other
|
||||
|
||||
def has_additional_languages(self):
|
||||
self._assert_languages_loaded()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from gi.repository import Gio, Gtk
|
||||
from gi.repository import Gtk
|
||||
|
||||
from .global_state import global_state
|
||||
from .language_provider import language_provider
|
||||
@@ -10,41 +10,27 @@ from .widgets import reset_model, ProgressRow
|
||||
|
||||
|
||||
@Gtk.Template(resource_path='/com/github/p3732/os-installer/ui/pages/language.ui')
|
||||
class LanguagePage(Gtk.Stack, Page):
|
||||
class LanguagePage(Gtk.Box, Page):
|
||||
__gtype_name__ = __qualname__
|
||||
image = 'language-symbolic'
|
||||
|
||||
default_list = Gtk.Template.Child()
|
||||
show_all_button = Gtk.Template.Child()
|
||||
all_list = Gtk.Template.Child()
|
||||
suggested_list = Gtk.Template.Child()
|
||||
suggested_model = Gtk.Template.Child()
|
||||
|
||||
default_model = Gio.ListStore()
|
||||
all_model = Gio.ListStore()
|
||||
other_list = Gtk.Template.Child()
|
||||
other_model = Gtk.Template.Child()
|
||||
|
||||
all_shown = False
|
||||
language_chosen = False
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
Gtk.Stack.__init__(self, **kwargs)
|
||||
Gtk.Box.__init__(self, **kwargs)
|
||||
|
||||
# models
|
||||
self.default_list.bind_model(self.default_model, lambda o: ProgressRow(o.name, o))
|
||||
self.all_list.bind_model(self.all_model, lambda o: ProgressRow(o.name, o))
|
||||
|
||||
def _setup_all(self):
|
||||
languages = language_provider.get_all_languages()
|
||||
reset_model(self.all_model, languages)
|
||||
|
||||
self.set_visible_child_name('all')
|
||||
self.all_shown = True
|
||||
self.suggested_list.bind_model(self.suggested_model, lambda o: ProgressRow(o.name, o))
|
||||
self.other_list.bind_model(self.other_model, lambda o: ProgressRow(o.name, o))
|
||||
|
||||
### callbacks ###
|
||||
|
||||
@Gtk.Template.Callback('show_all_button_clicked')
|
||||
def _show_all_button_clicked(self, button):
|
||||
if not self.all_shown:
|
||||
self._setup_all()
|
||||
|
||||
@Gtk.Template.Callback('language_row_activated')
|
||||
def _language_row_activated(self, list_box, row):
|
||||
if (not self.language_chosen or
|
||||
@@ -58,9 +44,11 @@ class LanguagePage(Gtk.Stack, Page):
|
||||
|
||||
def load_once(self):
|
||||
suggested_languages = language_provider.get_suggested_languages()
|
||||
if len(suggested_languages) > 0:
|
||||
reset_model(self.default_model, suggested_languages)
|
||||
present_show_all = language_provider.has_additional_languages()
|
||||
self.show_all_button.set_visible(present_show_all)
|
||||
else:
|
||||
self._setup_all()
|
||||
other_languages = language_provider.get_other_languages()
|
||||
if not suggested_languages:
|
||||
self.suggested_list.set_visible(False)
|
||||
if not other_languages:
|
||||
self.other_list.set_visible(False)
|
||||
|
||||
reset_model(self.suggested_model, suggested_languages)
|
||||
reset_model(self.other_model, other_languages)
|
||||
|
||||
Reference in New Issue
Block a user