From 70ff820e660f2e7fb4666f00d6823950d49a0382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 16 Jun 2019 19:24:15 +0200 Subject: [PATCH] Allow customizing Dict keys order We add a sequence attribute to the key definition and use it for sorting. This attribute is filled by the field sequence if it exists (using sequence_ordered) or by the key name. issue8373 review275431002 --- CHANGELOG | 1 + .../window/view_form/view/form_gtk/dictionary.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a20ce586ec..a0b366b144 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Order Dict keys by sequence * Support relation fields in domain parser * Add Dict widget for tree view * Add handle to reordable line of tree views diff --git a/tryton/gui/window/view_form/view/form_gtk/dictionary.py b/tryton/gui/window/view_form/view/form_gtk/dictionary.py index a193b159b6..cf37bcca63 100644 --- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py +++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py @@ -473,9 +473,16 @@ class DictWidget(Widget): if new_key_names: self.field.add_keys(list(new_key_names), self.record) decoder = PYSONDecoder() - for key, val in sorted(value.items()): - if key not in self.field.keys: - continue + + def filter_func(item): + key, value = item + return key in self.field.keys + + def key(item): + key, value = item + return self.field.keys[key]['sequence'] or 0 + + for key, val in sorted(filter(filter_func, value.items()), key=key): if key not in self.fields: self.add_line(key) widget = self.fields[key]