locale: simplify stack nesting

This commit is contained in:
Peter Eisenmann
2022-10-04 12:32:59 +02:00
parent c71b1f7bbe
commit d74ec09ff4
2 changed files with 52 additions and 57 deletions

View File

@@ -90,49 +90,30 @@ template LocalePage : Stack {
}
StackPage {
name: "list";
name: "timezone";
child: Box {
orientation: vertical;
spacing: 12;
Stack text_stack {
Label {
valign: start;
StackPage {
name: "timezone";
child: Label {
valign: start;
/* Translators: Above list of continents and countries */
label: _("Select Location");
justify: center;
wrap: true;
styles ["heading"]
};
}
StackPage {
name: "formats";
child: Label {
valign: start;
/* Translators: Above list of format locales */
label: _("Select Region");
justify: center;
wrap: true;
styles ["heading"]
};
}
/* Translators: Above list of continents and countries */
label: _("Select Location");
justify: center;
wrap: true;
styles ["heading"]
}
ScrolledWindow {
hexpand: true;
propagate-natural-height: true;
styles ["embedded"]
child: Stack list_stack {
child: Stack timezone_stack {
vhomogeneous: false;
transition-type: crossfade;
StackPage {
name: "timezone_continents";
name: "continents";
child: ListBox continents_list {
row-activated => timezone_selected();
styles ["boxed-list"]
@@ -140,7 +121,7 @@ template LocalePage : Stack {
}
StackPage {
name: "timezone_countries";
name: "countries";
child: ListBox countries_list {
row-activated => timezone_selected();
styles ["boxed-list"]
@@ -148,20 +129,39 @@ template LocalePage : Stack {
}
StackPage {
name: "timezone_subzones";
name: "subzones";
child: ListBox subzones_list {
row-activated => timezone_selected();
styles ["boxed-list"]
};
}
StackPage {
name: "formats";
child: ListBox formats_list {
row-activated => formats_selected();
styles ["boxed-list"]
};
}
};
}
};
}
StackPage {
name: "formats";
child: Box {
orientation: vertical;
spacing: 12;
Label {
valign: start;
/* Translators: Above list of format locales */
label: _("Select Region");
justify: center;
wrap: true;
styles ["heading"]
}
ScrolledWindow {
hexpand: true;
propagate-natural-height: true;
styles ["embedded"]
child: ListBox formats_list {
row-activated => formats_selected();
styles ["boxed-list"]
};
}
};

View File

@@ -26,9 +26,6 @@ class LocalePage(Gtk.Stack, Page):
__gtype_name__ = __qualname__
image = 'globe-symbolic'
text_stack = Gtk.Template.Child()
list_stack = Gtk.Template.Child()
# overview
formats_label = Gtk.Template.Child()
timezone_label = Gtk.Template.Child()
@@ -39,7 +36,9 @@ class LocalePage(Gtk.Stack, Page):
formats_list_model = Gio.ListStore()
# locale
timezone_stack = Gtk.Template.Child()
continents_list = Gtk.Template.Child()
continents_list_loaded = False
countries_list = Gtk.Template.Child()
subzones_list = Gtk.Template.Child()
@@ -47,7 +46,6 @@ class LocalePage(Gtk.Stack, Page):
countries_list_model = Gio.ListStore()
subzones_list_model = Gio.ListStore()
continents_list_loaded = False
def __init__(self, **kwargs):
Gtk.Stack.__init__(self, **kwargs)
@@ -68,15 +66,14 @@ class LocalePage(Gtk.Stack, Page):
continents.append(continent)
reset_model(self.continents_list_model, continents)
self.set_visible_child_name('list')
self.list_stack.set_visible_child_name('timezone_continents')
self.text_stack.set_visible_child_name('timezone')
self.set_visible_child_name('timezone')
self.timezone_stack.set_visible_child_name('continents')
def _load_countries_list(self, continent):
countries = get_location_children(continent)
reset_model(self.countries_list_model, countries)
self.list_stack.set_visible_child_name('timezone_countries')
self.timezone_stack.set_visible_child_name('countries')
def _load_formats_list(self):
if not self.formats_list_loaded:
@@ -84,9 +81,7 @@ class LocalePage(Gtk.Stack, Page):
formats = get_formats()
reset_model(self.formats_list_model, formats)
self.set_visible_child_name('list')
self.text_stack.set_visible_child_name('formats')
self.list_stack.set_visible_child_name('formats')
self.set_visible_child_name('formats')
def _load_subzones_list(self, country):
subzones = []
@@ -95,7 +90,7 @@ class LocalePage(Gtk.Stack, Page):
subzones.append(subzone)
reset_model(self.subzones_list_model, subzones)
self.list_stack.set_visible_child_name('timezone_subzones')
self.timezone_stack.set_visible_child_name('subzones')
def _set_formats(self, formats_locale, name):
set_system_formats(formats_locale, name)
@@ -156,10 +151,10 @@ class LocalePage(Gtk.Stack, Page):
global_state.set_config('timezone', timezone)
def navigate_backward(self):
current_list = self.list_stack.get_visible_child()
if current_list == self.formats_list or current_list == self.continents_list:
self._show_overview()
elif current_list == self.countries_list:
self.list_stack.set_visible_child_name('timezone_continents')
elif current_list == self.subzones_list:
self.list_stack.set_visible_child_name('timezone_countries')
match (self.get_visible_child_name(), self.timezone_stack.get_visible_child_name()):
case ("timezone", 'countries'):
self.timezone_stack.set_visible_child_name('continents')
case ("timezone", 'subzones'):
self.timezone_stack.set_visible_child_name('countries')
case _,_:
self._show_overview()