diff options
Diffstat (limited to 'src/setup/gnunet-setup-gns-edit.c')
-rw-r--r-- | src/setup/gnunet-setup-gns-edit.c | 143 |
1 files changed, 121 insertions, 22 deletions
diff --git a/src/setup/gnunet-setup-gns-edit.c b/src/setup/gnunet-setup-gns-edit.c index 3286f7b4..f4e6de65 100644 --- a/src/setup/gnunet-setup-gns-edit.c +++ b/src/setup/gnunet-setup-gns-edit.c | |||
@@ -26,6 +26,57 @@ | |||
26 | 26 | ||
27 | 27 | ||
28 | /** | 28 | /** |
29 | * Editing dialog was closed, get the data and call the | ||
30 | * continuation. | ||
31 | * | ||
32 | * @param dialog editing dialog | ||
33 | * @param user_data the 'struct EditDialogContext' | ||
34 | */ | ||
35 | void | ||
36 | GNS_edit_a_dialog_response_cb (GtkDialog *dialog, | ||
37 | gint response_id, | ||
38 | gpointer user_data) | ||
39 | { | ||
40 | struct EditDialogContext *edc = user_data; | ||
41 | |||
42 | fprintf (stderr, "response CB %d!\n", response_id); | ||
43 | /* FIXME: resync dialog elements back into 'edc'! */ | ||
44 | gtk_widget_destroy (GTK_WIDGET (edc->dialog)); | ||
45 | g_object_unref (edc->builder); | ||
46 | edc->builder = NULL; | ||
47 | edc->cont (edc, response_id); | ||
48 | } | ||
49 | |||
50 | |||
51 | /** | ||
52 | * Disable 'save' button, dialog state is not acceptable. | ||
53 | * | ||
54 | * @param edc dialog to modify | ||
55 | */ | ||
56 | static void | ||
57 | edit_dialog_disable_save (struct EditDialogContext *edc) | ||
58 | { | ||
59 | gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (edc->builder, | ||
60 | "edit_dialog_save_button")), | ||
61 | FALSE); | ||
62 | } | ||
63 | |||
64 | |||
65 | /** | ||
66 | * Enable 'save' button, dialog state is acceptable. | ||
67 | * | ||
68 | * @param edc dialog to modify | ||
69 | */ | ||
70 | static void | ||
71 | edit_dialog_enable_save (struct EditDialogContext *edc) | ||
72 | { | ||
73 | gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (edc->builder, | ||
74 | "edit_dialog_save_button")), | ||
75 | TRUE); | ||
76 | } | ||
77 | |||
78 | |||
79 | /** | ||
29 | * Initialize widgets of the edit dialog that are the same regardless of | 80 | * Initialize widgets of the edit dialog that are the same regardless of |
30 | * the type of the record. | 81 | * the type of the record. |
31 | * | 82 | * |
@@ -39,9 +90,7 @@ edit_dialog_setup_common_elements (struct EditDialogContext *edc) | |||
39 | { | 90 | { |
40 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, | 91 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, |
41 | "edit_dialog_delete_button"))); | 92 | "edit_dialog_delete_button"))); |
42 | gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (edc->builder, | 93 | edit_dialog_disable_save (edc); |
43 | "edit_dialog_save_button")), | ||
44 | FALSE); | ||
45 | } | 94 | } |
46 | gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, | 95 | gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, |
47 | "edit_dialog_name_entry")), | 96 | "edit_dialog_name_entry")), |
@@ -54,6 +103,7 @@ edit_dialog_setup_common_elements (struct EditDialogContext *edc) | |||
54 | edc->n_is_shadow); | 103 | edc->n_is_shadow); |
55 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value == edc->n_exp_time) | 104 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value == edc->n_exp_time) |
56 | { | 105 | { |
106 | fprintf (stderr, "forever\n"); | ||
57 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (edc->builder, | 107 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (edc->builder, |
58 | "edit_dialog_expiration_never_radiobutton")), | 108 | "edit_dialog_expiration_never_radiobutton")), |
59 | TRUE); | 109 | TRUE); |
@@ -70,16 +120,22 @@ edit_dialog_setup_common_elements (struct EditDialogContext *edc) | |||
70 | { | 120 | { |
71 | struct GNUNET_TIME_Relative rt; | 121 | struct GNUNET_TIME_Relative rt; |
72 | 122 | ||
123 | fprintf (stderr, "relative\n"); | ||
73 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (edc->builder, | 124 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (edc->builder, |
74 | "edit_dialog_expiration_relative_radiobutton")), | 125 | "edit_dialog_expiration_relative_radiobutton")), |
75 | TRUE); | 126 | TRUE); |
76 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, | 127 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, |
77 | "edit_dialog_expiration_relative_combobox"))); | 128 | "edit_dialog_expiration_absolute_calendar"))); |
129 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, | ||
130 | "edit_dialog_expiration_absolute_hbox"))); | ||
78 | rt.rel_value = edc->n_exp_time; | 131 | rt.rel_value = edc->n_exp_time; |
79 | gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, | 132 | #if 0 |
80 | "edit_dialog_expiration_relative_combobox")), | 133 | /* FIXME: gtk_combo_box_set_text does not exist, we need to |
81 | GNUNET_STRINGS_relative_time_to_string (rt, GNUNET_NO)); | 134 | update the model and then select the respective element... */ |
82 | 135 | gtk_combo_box_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, | |
136 | "edit_dialog_expiration_relative_combobox")), | ||
137 | GNUNET_STRINGS_relative_time_to_string (rt, GNUNET_NO)); | ||
138 | #endif | ||
83 | } | 139 | } |
84 | else | 140 | else |
85 | { | 141 | { |
@@ -88,13 +144,13 @@ edit_dialog_setup_common_elements (struct EditDialogContext *edc) | |||
88 | struct tm *ymd; | 144 | struct tm *ymd; |
89 | GtkCalendar *cal; | 145 | GtkCalendar *cal; |
90 | 146 | ||
147 | fprintf (stderr, "absolute\n"); | ||
91 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (edc->builder, | 148 | gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (edc->builder, |
92 | "edit_dialog_expiration_absolute_radiobutton")), | 149 | "edit_dialog_expiration_absolute_radiobutton")), |
93 | TRUE); | 150 | TRUE); |
151 | |||
94 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, | 152 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, |
95 | "edit_dialog_expiration_absolute_calendar"))); | 153 | "edit_dialog_expiration_relative_combobox"))); |
96 | gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (edc->builder, | ||
97 | "edit_dialog_expiration_absolute_hbox"))); | ||
98 | at.abs_value = edc->n_exp_time; | 154 | at.abs_value = edc->n_exp_time; |
99 | tp = (time_t) (at.abs_value / 1000LL); /* convert to seconds */ | 155 | tp = (time_t) (at.abs_value / 1000LL); /* convert to seconds */ |
100 | ymd = gmtime (&tp); | 156 | ymd = gmtime (&tp); |
@@ -120,6 +176,51 @@ edit_dialog_setup_common_elements (struct EditDialogContext *edc) | |||
120 | 176 | ||
121 | 177 | ||
122 | /** | 178 | /** |
179 | * Run the edit dialog. Performs all of the common initialization | ||
180 | * steps to run an edit dialog for records. | ||
181 | * | ||
182 | * @param edc editing context | ||
183 | */ | ||
184 | static void | ||
185 | run_edit_dialog (struct EditDialogContext *edc) | ||
186 | { | ||
187 | edit_dialog_setup_common_elements (edc); | ||
188 | edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, | ||
189 | "edit_a_dialog")); | ||
190 | gtk_dialog_set_default_response (edc->dialog, | ||
191 | GTK_RESPONSE_OK); | ||
192 | gtk_window_present (GTK_WINDOW (edc->dialog)); | ||
193 | } | ||
194 | |||
195 | |||
196 | /* ************************ A records *********************** */ | ||
197 | |||
198 | /** | ||
199 | * The user has edited the A record value. Enable/disable 'save' | ||
200 | * button depending on the validity of the value. | ||
201 | * | ||
202 | * @param entry editing widget | ||
203 | * @param preedit new value | ||
204 | * @param user_data the 'struct EditDialogContext' of the dialog | ||
205 | */ | ||
206 | void | ||
207 | GNS_edit_dialog_a_entry_changed_cb (GtkEditable *entry, | ||
208 | gpointer user_data) | ||
209 | { | ||
210 | struct EditDialogContext *edc = user_data; | ||
211 | const gchar *preedit; | ||
212 | struct in_addr v4; | ||
213 | |||
214 | preedit = gtk_editable_get_chars (entry, 0, -1); | ||
215 | if ( (NULL != preedit) && | ||
216 | (1 == inet_pton (AF_INET, preedit, &v4)) ) | ||
217 | edit_dialog_enable_save (edc); | ||
218 | else | ||
219 | edit_dialog_disable_save (edc); | ||
220 | } | ||
221 | |||
222 | |||
223 | /** | ||
123 | * Run an GNS Edit dialog for an 'A' Record. | 224 | * Run an GNS Edit dialog for an 'A' Record. |
124 | * | 225 | * |
125 | * @param cont continuation to call when done | 226 | * @param cont continuation to call when done |
@@ -128,8 +229,6 @@ edit_dialog_setup_common_elements (struct EditDialogContext *edc) | |||
128 | void | 229 | void |
129 | GNS_edit_dialog_a (struct EditDialogContext *edc) | 230 | GNS_edit_dialog_a (struct EditDialogContext *edc) |
130 | { | 231 | { |
131 | GtkDialog *dialog; | ||
132 | |||
133 | edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_a.glade", | 232 | edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_a.glade", |
134 | edc); | 233 | edc); |
135 | if (NULL == edc->builder) | 234 | if (NULL == edc->builder) |
@@ -138,15 +237,15 @@ GNS_edit_dialog_a (struct EditDialogContext *edc) | |||
138 | edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ | 237 | edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ |
139 | return; | 238 | return; |
140 | } | 239 | } |
141 | edit_dialog_setup_common_elements (edc); | 240 | if (GNUNET_YES == |
142 | dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, | 241 | edc->old_record_in_namestore) |
143 | "edit_a_dialog")); | 242 | { |
144 | gtk_dialog_set_default_response (GTK_DIALOG (dialog), | 243 | /* set A record */ |
145 | GTK_RESPONSE_OK); | 244 | gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, |
146 | gtk_window_present (GTK_WINDOW (dialog)); | 245 | "edit_dialog_a_entry")), |
147 | 246 | edc->n_value); | |
148 | GNUNET_break (0); /* not implemented */ | 247 | } |
149 | edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ | 248 | run_edit_dialog (edc); |
150 | } | 249 | } |
151 | 250 | ||
152 | 251 | ||