[elbe-devel] [PATCH 05/14] Debianize - Radio buttons widget
dion at linutronix.de
dion at linutronix.de
Thu Aug 1 14:14:04 CEST 2019
From: Olivier Dion <dion at linutronix.de>
Radio buttons can be grouped either vertically (default) or
horizontally. This is decided within the ctor with the policy
variable argument.
The calle should provides an enumeration type and a member of the
enumeration type to use by default.
Signed-off-by: Olivier Dion <dion at linutronix.de>
---
elbepack/debianize/widgets/radio.py | 53 +++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
create mode 100644 elbepack/debianize/widgets/radio.py
diff --git a/elbepack/debianize/widgets/radio.py b/elbepack/debianize/widgets/radio.py
new file mode 100644
index 00000000..2caccf39
--- /dev/null
+++ b/elbepack/debianize/widgets/radio.py
@@ -0,0 +1,53 @@
+# ELBE - Debian Based Embedded Rootfilesystem Builder
+# Copyright (c) 2019 Olivier Dion <dion at linutronix.de>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+
+from enum import IntEnum
+
+from urwid import (
+ LineBox,
+ RadioButton,
+ Text
+)
+
+from elbepack.debianize.widgets.grid import Grid
+
+
+class RadioPolicy(IntEnum):
+ HORIZONTAL = 0
+ VERTICAL = 1
+
+
+class RadioGroup(Grid):
+ def __init__(self, title, enum_type, starting_value, policy=RadioPolicy.VERTICAL):
+ self.selected_value = starting_value
+ self.enum_type = enum_type
+
+ self.radio_group = []
+ for choice in enum_type:
+ RadioButton(self.radio_group,
+ label=choice.name.capitalize(),
+ state=choice is starting_value)
+
+ rows = [
+ [Text(("header", title))]
+ ]
+
+ if policy is RadioPolicy.VERTICAL:
+ for radio in self.radio_group:
+ rows.append([radio])
+ else:
+ col = []
+ for radio in self.radio_group:
+ col.append(radio)
+ rows.append(col)
+
+ super().__init__(rows)
+ self._w = LineBox(self._w)
+
+ def get_data(self):
+ for radio in self.radio_group:
+ if radio.state:
+ return self.enum_type[radio.label.upper()]
--
2.11.0
More information about the elbe-devel
mailing list