aboutsummaryrefslogtreecommitdiff
path: root/src/setup/gnunet-setup-gns-edit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/setup/gnunet-setup-gns-edit.c')
-rw-r--r--src/setup/gnunet-setup-gns-edit.c143
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 */
35void
36GNS_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 */
56static void
57edit_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 */
70static void
71edit_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 */
184static void
185run_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 */
206void
207GNS_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)
128void 229void
129GNS_edit_dialog_a (struct EditDialogContext *edc) 230GNS_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