diff options
Diffstat (limited to 'main/src/ui/util/data_forms.vala')
-rw-r--r-- | main/src/ui/util/data_forms.vala | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/main/src/ui/util/data_forms.vala b/main/src/ui/util/data_forms.vala index 1f598025..d10196ab 100644 --- a/main/src/ui/util/data_forms.vala +++ b/main/src/ui/util/data_forms.vala @@ -6,6 +6,100 @@ using Xmpp.Xep; namespace Dino.Ui.Util { +public static ViewModel.PreferencesRow.Any? get_data_form_field_view_model(DataForms.DataForm.Field field) { + if (field.type_ == null) return null; + + ViewModel.PreferencesRow.Any? view_model = null; + + string? label = null; + string? desc = null; + + if (field.var != null) { + switch (field.var) { + case "muc#roomconfig_roomname": + label = _("Name of the room"); + break; + case "muc#roomconfig_roomdesc": + label = _("Description of the room"); + break; + case "muc#roomconfig_persistentroom": + label = _("Persistent"); + desc = _("The room will persist after the last occupant leaves"); + break; + case "muc#roomconfig_publicroom": + label = _("Publicly searchable"); + break; + case "muc#roomconfig_changesubject": + label = _("Occupants may change the subject"); + break; + case "muc#roomconfig_whois": + label = _("Permission to view JIDs"); + desc = _("Who is allowed to view the occupants' JIDs?"); + break; + case "muc#roomconfig_roomsecret": + label = _("Password"); +// desc = _("A password to restrict access to the room"); + break; + case "muc#roomconfig_moderatedroom": + label = _("Moderated"); + desc = _("Only occupants with voice may send messages"); + break; + case "muc#roomconfig_membersonly": + label = _("Members only"); + desc = _("Only members may enter the room"); + break; +// case "muc#roomconfig_historylength": +// label = _("Message history"); +// desc = _("Maximum amount of backlog issued by the room"); +// break; + } + } + + if (label == null) label = field.label; + + switch (field.type_) { + case DataForms.DataForm.Type.BOOLEAN: + DataForms.DataForm.BooleanField boolean_field = field as DataForms.DataForm.BooleanField; + var toggle_model = new ViewModel.PreferencesRow.Toggle() { subtitle = desc, state = boolean_field.value }; + boolean_field.bind_property("value", toggle_model, "state", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); + view_model = toggle_model; + break; + case DataForms.DataForm.Type.JID_MULTI: + return null; + case DataForms.DataForm.Type.LIST_SINGLE: + DataForms.DataForm.ListSingleField list_single_field = field as DataForms.DataForm.ListSingleField; + var combobox_model = new ViewModel.PreferencesRow.ComboBox(); + for (int i = 0; i < list_single_field.options.size; i++) { + DataForms.DataForm.Option option = list_single_field.options[i]; + combobox_model.items.add(option.label); + if (option.value == list_single_field.value) combobox_model.active_item = i; + } + combobox_model.bind_property("active-item", list_single_field, "value", BindingFlags.DEFAULT, (binding, from, ref to) => { + var src_field = (DataForms.DataForm.ListSingleField) binding.dup_target(); + var active_item = (int) from; + to = list_single_field.options[active_item].value; + return true; + }); + view_model = combobox_model; + break; + case DataForms.DataForm.Type.LIST_MULTI: + return null; + case DataForms.DataForm.Type.TEXT_PRIVATE: + return null; + case DataForms.DataForm.Type.TEXT_SINGLE: + DataForms.DataForm.TextSingleField text_single_field = field as DataForms.DataForm.TextSingleField; + var entry_model = new ViewModel.PreferencesRow.Entry() { text = text_single_field.value }; + text_single_field.bind_property("value", entry_model, "text", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL); + view_model = entry_model; + break; + default: + return null; + } + + view_model.title = label; + return view_model; +} + public static Widget? get_data_form_field_widget(DataForms.DataForm.Field field) { if (field.type_ == null) return null; switch (field.type_) { |