1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
using Gee;
using Gtk;
using Dino.Entities;
using Xmpp.Xep;
namespace Dino.Ui.Util {
public Adw.PreferencesGroup rows_to_preference_group(GLib.ListStore row_view_models, string title) {
var preference_group = new Adw.PreferencesGroup() { title=title };
for (int preference_group_i = 0; preference_group_i < row_view_models.get_n_items(); preference_group_i++) {
var preferences_row = (ViewModel.PreferencesRow.Any) row_view_models.get_item(preference_group_i);
Widget? w = 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 };
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.changed();
});
w = 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(() => {
password_view_model.changed();
});
w = view;
}
var row_text = preferences_row as ViewModel.PreferencesRow.Text;
if (row_text != null) {
w = new Adw.ActionRow() {
title = row_text.title,
subtitle = row_text.text,
#if Adw_1_3
subtitle_selectable = true,
#endif
};
w.add_css_class("property");
Util.force_css(w, "row.property > box.header > box.title > .title { font-weight: 400; font-size: 9pt; opacity: 0.55; }");
Util.force_css(w, "row.property > box.header > box.title > .subtitle { font-size: inherit; opacity: 1; }");
}
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);
w = view;
}
var combobox_view_model = preferences_row as ViewModel.PreferencesRow.ComboBox;
if (combobox_view_model != null) {
var string_list = new StringList(null);
foreach (string text in combobox_view_model.items) {
string_list.append(text);
}
#if Adw_1_4
var view = new Adw.ComboRow() { title = combobox_view_model.title };
view.model = string_list;
combobox_view_model.bind_property("active-item", view, "selected", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
#else
var view = new Adw.ActionRow() { title = combobox_view_model.title };
var drop_down = new DropDown(string_list, null) { valign = Align.CENTER };
combobox_view_model.bind_property("active-item", drop_down, "selected", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
view.activatable_widget = drop_down;
view.add_suffix(drop_down);
#endif
w = view;
}
var widget_view_model = preferences_row as ViewModel.PreferencesRow.WidgetDeprecated;
if (widget_view_model != null) {
var view = new Adw.ActionRow() { title = widget_view_model.title };
view.add_suffix(widget_view_model.widget);
w = view;
}
if (w == null) {
continue;
}
preference_group.add(w);
}
return preference_group;
}
}
|