- private const int RESPONSE_DELETE = 1;
- private void bridge_edit_dialog (Gtk.ListStore store, Gtk.TreePath? path) {
- var dialog = new Gtk.Dialog ();
- var content = (Gtk.VBox) dialog.get_content_area ();
-
- if (path == null)
- dialog.set_title (_("New bridge relay"));
- else
- dialog.set_title (_("Edit bridge relay"));
-
- var size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.HORIZONTAL);
-
- var hbox = new Gtk.HBox (false, Hildon.MARGIN_DOUBLE);
- var label = new Gtk.Label (_("IP address"));
- label.set_alignment (0, 0.5f);
- size_group.add_widget (label);
- hbox.pack_start (label, false, false, 0);
- var ip_entry = new Hildon.Entry (Hildon.SizeType.FINGER_HEIGHT);
- ip_entry.set ("hildon-input-mode", Hildon.GtkInputMode.NUMERIC |
- Hildon.GtkInputMode.SPECIAL);
- hbox.pack_start (ip_entry, true, true, 0);
- content.pack_start (hbox, false, false, 0);
-
- hbox = new Gtk.HBox (false, Hildon.MARGIN_DOUBLE);
- label = new Gtk.Label (_("Port"));
- label.set_alignment (0, 0.5f);
- size_group.add_widget (label);
- hbox.pack_start (label, false, false, 0);
- var port_entry = new Hildon.Entry (Hildon.SizeType.FINGER_HEIGHT);
- port_entry.set ("hildon-input-mode", Hildon.GtkInputMode.NUMERIC);
- hbox.pack_start (port_entry, true, true, 0);
- content.pack_start (hbox, true, true, 0);
-
- hbox = new Gtk.HBox (false, Hildon.MARGIN_DOUBLE);
- label = new Gtk.Label (_("Fingerprint"));
- label.set_alignment (0, 0.5f);
- size_group.add_widget (label);
- hbox.pack_start (label, false, false, 0);
- var fingerprint_entry = new Hildon.Entry (Hildon.SizeType.FINGER_HEIGHT);
- fingerprint_entry.set ("hildon-input-mode", Hildon.GtkInputMode.HEXA);
- hbox.pack_start (fingerprint_entry, true, true, 0);
- content.pack_start (hbox, true, true, 0);
-
- var iter = Gtk.TreeIter ();
- if (path == null) {
- port_entry.set_text ("443");
- } else if (store.get_iter (out iter, path)) {
- string tmp;
- store.@get (iter, 0, out tmp);
- string[] ip_port = tmp.split (":");
- if (ip_port.length == 2) {
- ip_entry.set_text (ip_port[0]);
- port_entry.set_text (ip_port[1]);
- }
-
- dialog.add_button (_("Delete"), RESPONSE_DELETE);
- }
- dialog.add_button (_("Save"), Gtk.ResponseType.OK);
- dialog.response.connect ((response_id) => {
- var bridges = new SList<string> ();
-
- if (response_id == RESPONSE_DELETE) {
- if (path != null) {
- store.remove (iter);
- string bridge;
- if (store.get_iter_first (out iter)) do {
- store.@get (iter, 0, out bridge);
- bridges.append (bridge);
- } while (store.iter_next (ref iter));
- try {
- gconf.set_list (GCONF_KEY_BRIDGES,
- GConf.ValueType.STRING,
- bridges);
- } catch (Error e) {
- Hildon.Banner.show_information (dialog, null,
- "Failed to save bridge relay list: %s".printf (e.message));
- }
- }
- dialog.destroy ();
- }
- if (response_id == Gtk.ResponseType.OK) {
- if (!is_valid_ip_address (ip_entry.get_text ())) {
- Hildon.Banner.show_information (dialog, null,
- _("Invalid IP address"));
- return;
- }
- int port = port_entry.get_text ().to_int ();
- if (port < 0 || port > 65565) {
- Hildon.Banner.show_information (dialog, null,
- _("Invalid port number"));
- return;
- }
- if (path == null) {
- store.append (out iter);
- }
- store.@set (iter, 0, "%s:%d".printf (ip_entry.get_text (), port));
- try {
- bridges = gconf.get_list (GCONF_KEY_BRIDGES,
- GConf.ValueType.STRING);
- } catch (Error e) {
- Hildon.Banner.show_information (null, null,
- "Error loading bridges: %s".printf (e.message));
- }
- if (path == null) {
- bridges.append ("%s:%d".printf (ip_entry.get_text (), port));
- } else {
- bridges = null;
- string bridge;
- if (store.get_iter_first (out iter)) do {
- store.@get (iter, 0, out bridge);
- bridges.append (bridge);
- } while (store.iter_next (ref iter));
- }
- try {
- gconf.set_list (GCONF_KEY_BRIDGES,
- GConf.ValueType.STRING,
- bridges);
- } catch (Error e) {
- Hildon.Banner.show_information (dialog, null,
- "Failed to save bridge relay list: %s".printf (e.message));
- }
-
- dialog.destroy ();
- }
- });
-
- dialog.show_all ();