public class PipeTap.Ui.Settings : Adw.PreferencesDialog { public Settings() { var overlays = new Adw.PreferencesPage(); overlays.title = _("Overlays"); overlays.add(make_group_for("Main bar", "main-controls-pos")); overlays.add(make_group_for("Exposure bar", "exp-pos")); overlays.add(make_group_for("Contrast bar", "contrast-pos")); overlays.add(make_group_for("Focus bar", "focus-pos")); add(overlays); } Adw.PreferencesGroup make_group_for(string name, string child_name) { var group = new Adw.PreferencesGroup(); group.title = _(name); group.description = _("Set -1 to not anchor to side"); var orientation = new Adw.ComboRow(); orientation.title = _("Orientation"); orientation.model = new Gtk.StringList({ _("Vertical"), _("Horizontal") }); var top = new Adw.SpinRow.with_range(-1, double.MAX, 1); top.title = _("Top spacing"); var bottom = new Adw.SpinRow.with_range(-1, double.MAX, 1); bottom.title = _("Bottom spacing"); var right = new Adw.SpinRow.with_range(-1, double.MAX, 1); right.title = _("Right spacing"); var left = new Adw.SpinRow.with_range(-1, double.MAX, 1); left.title = _("Left spacing"); group.add(orientation); group.add(top); group.add(bottom); group.add(left); group.add(right); var settings = Logic.app.settings.get_child(child_name); settings.bind("margin-top", top, "value", SettingsBindFlags.DEFAULT); settings.bind("margin-bottom", bottom, "value", SettingsBindFlags.DEFAULT); settings.bind("margin-right", right, "value", SettingsBindFlags.DEFAULT); settings.bind("margin-left", left, "value", SettingsBindFlags.DEFAULT); settings.bind("orientation", orientation, "selected", SettingsBindFlags.DEFAULT); return group; } }