diff options
| author | Marvin W <git@larma.de> | 2026-03-14 13:42:58 +0800 |
|---|---|---|
| committer | Marvin W <git@larma.de> | 2026-04-08 19:02:44 +0200 |
| commit | 64757cbe2572259ad201f4c691aeb545088ae42a (patch) | |
| tree | 6c3de38252417500ab1234687bd413e29dcc4d1b /main/src/ui/util/preference_group.vala | |
| parent | 82da21c1a67d5a50d0a4940b5e3c687929b041c2 (diff) | |
Add implementation for XEP-0202 Entity Time
Diffstat (limited to 'main/src/ui/util/preference_group.vala')
| -rw-r--r-- | main/src/ui/util/preference_group.vala | 65 |
1 files changed, 30 insertions, 35 deletions
diff --git a/main/src/ui/util/preference_group.vala b/main/src/ui/util/preference_group.vala index aa680e68..3911bb80 100644 --- a/main/src/ui/util/preference_group.vala +++ b/main/src/ui/util/preference_group.vala @@ -47,63 +47,55 @@ namespace Dino.Ui.Util { return preference_group; } + private static bool null_string_to_empty(GLib.Binding binding, GLib.Value from_value, ref GLib.Value to_value) { + var str = (string) from_value; + to_value = str ?? ""; + return true; + } + public Adw.PreferencesRow? row_to_preference_row(ViewModel.PreferencesRow.Any preferences_row) { + Adw.PreferencesRow? view = null; + var entry_view_model = preferences_row as ViewModel.PreferencesRow.Entry; if (entry_view_model != null) { - Adw.EntryRow view = new Adw.EntryRow() { title = entry_view_model.title, show_apply_button=true }; + view = new Adw.EntryRow() { show_apply_button=true }; if (preferences_row.media_uri != null) { var bytes = Xmpp.get_data_for_uri(preferences_row.media_uri); Picture picture = new Picture.for_paintable(Texture.from_bytes(bytes)); - view.add_suffix(picture); + ((Adw.EntryRow) view).add_suffix(picture); } - entry_view_model.bind_property("text", view, "text", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL, (_, from, ref to) => { - var str = (string) from; - to = str ?? ""; - return true; - }); - view.apply.connect(() => { + entry_view_model.bind_property("text", view, "text", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL, null_string_to_empty); + ((Adw.EntryRow) view).apply.connect(() => { entry_view_model.changed(); }); - return view; } var password_view_model = preferences_row as ViewModel.PreferencesRow.PrivateText; if (password_view_model != null) { - Adw.PasswordEntryRow view = new Adw.PasswordEntryRow() { title = password_view_model.title, show_apply_button=true }; - password_view_model.bind_property("text", view, "text", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL, (_, from, ref to) => { - var str = (string) from; - to = str ?? ""; - return true; - }); - view.apply.connect(() => { + view = new Adw.PasswordEntryRow() { show_apply_button=true }; + password_view_model.bind_property("text", view, "text", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL, null_string_to_empty); + ((Adw.EntryRow) view).apply.connect(() => { password_view_model.changed(); }); - - return view; } var row_text = preferences_row as ViewModel.PreferencesRow.Text; if (row_text != null) { - var view = new Adw.ActionRow() { - title = row_text.title, - subtitle = row_text.text, + view = new Adw.ActionRow() { subtitle_selectable = true }; + row_text.bind_property("text", view, "subtitle", BindingFlags.SYNC_CREATE, null_string_to_empty); view.add_css_class("property"); Util.force_css(view, "row.property > box.header > box.title > .title { font-weight: 400; font-size: 9pt; opacity: 0.55; }"); Util.force_css(view, "row.property > box.header > box.title > .subtitle { font-size: inherit; opacity: 1; }"); - return view; } var toggle_view_model = preferences_row as ViewModel.PreferencesRow.Toggle; if (toggle_view_model != null) { - var view = new Adw.ActionRow() { title = toggle_view_model.title, subtitle = toggle_view_model.subtitle ?? "" }; - var toggle = new Switch() { valign = Align.CENTER }; - view.activatable_widget = toggle; - view.add_suffix(toggle); - toggle_view_model.bind_property("state", toggle, "active", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); - return view; + view = new Adw.SwitchRow(); + toggle_view_model.bind_property("subtitle", view, "subtitle", BindingFlags.SYNC_CREATE, null_string_to_empty); + toggle_view_model.bind_property("state", view, "active", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); } var combobox_view_model = preferences_row as ViewModel.PreferencesRow.ComboBox; @@ -112,21 +104,24 @@ namespace Dino.Ui.Util { foreach (string text in combobox_view_model.items) { string_list.append(text); } - var view = new Adw.ComboRow() { title = combobox_view_model.title, subtitle = combobox_view_model.subtitle ?? "" }; - view.model = string_list; + view = new Adw.ComboRow(); + combobox_view_model.bind_property("subtitle", view, "subtitle", BindingFlags.SYNC_CREATE, null_string_to_empty); + ((Adw.ComboRow)view).model = string_list; combobox_view_model.bind_property("active-item", view, "selected", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); - return view; } var button_view_model = preferences_row as ViewModel.PreferencesRow.Button; if (button_view_model != null) { - var view = new Adw.ActionRow() { title = button_view_model.title, subtitle = button_view_model.subtitle ?? "" }; + view = new Adw.ActionRow(); + button_view_model.bind_property("subtitle", view, "subtitle", BindingFlags.SYNC_CREATE, null_string_to_empty); var button = new Button.with_label(button_view_model.button_text) { valign = Align.CENTER }; - view.add_suffix(button); + ((Adw.ActionRow)view).add_suffix(button); button.clicked.connect(() => button_view_model.clicked()); - return view; } - return null; + preferences_row.bind_property("title", view, "title", BindingFlags.SYNC_CREATE); + preferences_row.bind_property("visible", view, "visible", BindingFlags.SYNC_CREATE); + + return view; } }
\ No newline at end of file |
