language: always show all languages

This commit is contained in:
Peter Eisenmann
2023-08-28 02:48:25 +02:00
parent b4fcf933b8
commit b13c99fd7c
3 changed files with 48 additions and 82 deletions

View File

@@ -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 {}

View File

@@ -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()

View File

@@ -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)