aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/util/label_hybrid.vala
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui/util/label_hybrid.vala')
-rw-r--r--main/src/ui/util/label_hybrid.vala129
1 files changed, 129 insertions, 0 deletions
diff --git a/main/src/ui/util/label_hybrid.vala b/main/src/ui/util/label_hybrid.vala
new file mode 100644
index 00000000..4486f25b
--- /dev/null
+++ b/main/src/ui/util/label_hybrid.vala
@@ -0,0 +1,129 @@
+using Gee;
+using Gtk;
+
+namespace Dino.Ui.Util {
+
+public class LabelHybrid : Stack {
+
+ public Label label = new Label("") { visible=true };
+ protected Button button = new Button() { relief=ReliefStyle.NONE, visible=true };
+
+ public void init(Widget widget) {
+ button.add(label);
+ add_named(button, "label");
+ add_named(widget, "widget");
+
+ button.clicked.connect(() => {
+ show_widget();
+ });
+ }
+
+ public void show_widget() {
+ visible_child_name = "widget";
+ }
+
+ public void show_label() {
+ visible_child_name = "label";
+ }
+}
+
+public class EntryLabelHybrid : LabelHybrid {
+
+ public string text {
+ get { return entry.text; }
+ set {
+ entry.text = value;
+ label.label = value;
+ }
+ }
+
+ public bool visibility {
+ get { return entry.visibility; }
+ set { entry.visibility = value; }
+ }
+
+ public float xalign {
+ get { return label.xalign; }
+ set {
+ label.xalign = value;
+ entry.set_alignment(value);
+ }
+ }
+
+ private Entry entry;
+
+ public EntryLabelHybrid(Entry? e = null) {
+ entry = e ?? new Entry() { visible=true };
+ init(entry);
+ update_label();
+
+ entry.key_release_event.connect((event) => {
+ if (event.keyval == Gdk.Key.Return) {
+ show_label();
+ } else {
+ label.label = entry.text;
+ }
+ return false;
+ });
+ }
+
+ private void update_label() {
+ text = text;
+ }
+}
+
+public class ComboBoxTextLabelHybrid : LabelHybrid {
+
+ public int active {
+ get { return combobox.active; }
+ set { combobox.active = value; }
+ }
+
+ public float xalign {
+ get { return label.xalign; }
+ set { label.xalign = value; }
+ }
+
+ private ComboBoxText combobox;
+
+ public ComboBoxTextLabelHybrid(ComboBoxText? cb = null) {
+ combobox = cb ?? new ComboBoxText() { visible=true };
+ init(combobox);
+ update_label();
+
+ combobox.changed.connect(() => {
+ update_label();
+ show_label();
+ });
+ button.clicked.connect(() => {
+ combobox.popup();
+ });
+ }
+
+ public void append(string id, string text) { combobox.append(id, text); }
+ public string get_active_text() { return combobox.get_active_text(); }
+
+ private void update_label() {
+ label.label = combobox.get_active_text();
+ }
+}
+
+public class LabelHybridGroup {
+
+ private Gee.List<LabelHybrid> hybrids = new ArrayList<LabelHybrid>();
+
+ public void add(LabelHybrid hybrid) {
+ hybrids.add(hybrid);
+
+ hybrid.notify["visible-child-name"].connect(() => {
+ if (hybrid.visible_child_name == "label") return;
+ foreach (LabelHybrid h in hybrids) {
+ if (h != hybrid) {
+ h.set_visible_child_name("label");
+ }
+ }
+ });
+ }
+}
+
+} \ No newline at end of file