aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/util/preference_group.vala
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2026-03-14 13:42:58 +0800
committerMarvin W <git@larma.de>2026-04-08 19:02:44 +0200
commit64757cbe2572259ad201f4c691aeb545088ae42a (patch)
tree6c3de38252417500ab1234687bd413e29dcc4d1b /main/src/ui/util/preference_group.vala
parent82da21c1a67d5a50d0a4940b5e3c687929b041c2 (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.vala65
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