aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-gns-gtk_zone.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gns/gnunet-gns-gtk_zone.c')
-rw-r--r--src/gns/gnunet-gns-gtk_zone.c124
1 files changed, 110 insertions, 14 deletions
diff --git a/src/gns/gnunet-gns-gtk_zone.c b/src/gns/gnunet-gns-gtk_zone.c
index 0d6fff3a..890ef80d 100644
--- a/src/gns/gnunet-gns-gtk_zone.c
+++ b/src/gns/gnunet-gns-gtk_zone.c
@@ -54,9 +54,101 @@ enum LIST_COLUMNS
54 54
55 55
56void 56void
57check_record_validity () 57check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path)
58{ 58{
59 GNUNET_break (0); 59 GtkTreeIter it;
60 GtkTreeIter parent;
61 int children;
62 int c;
63 int valid = GNUNET_YES;
64
65 char *n_name;
66 int n_type;
67 gboolean n_public;
68 char *n_exp_color;
69 guint64 n_exp_time;
70 char *n_exp_str;
71 gboolean n_is_relative;
72 char *n_value;
73 char *n_value_color;
74
75
76 gtk_tree_model_get_iter_from_string(gns->tm, &it, path);
77
78 if (TRUE == gtk_tree_model_iter_parent (gns->tm, &parent, &it))
79 {
80 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Has parent\n");
81 }
82 else
83 {
84 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "No parent\n");
85 parent = it;
86 }
87
88 children = gtk_tree_model_iter_n_children (gns->tm, &parent);
89 if (children < 1)
90 {
91 GNUNET_break (0);
92 return;
93 }
94
95 struct GNUNET_NAMESTORE_RecordData rd[children];
96
97 if (FALSE == gtk_tree_model_iter_children (gns->tm, &it, &parent))
98 {
99 GNUNET_break (0);
100 return;
101 }
102 for (c = 0; c < children; c++)
103 {
104 gtk_tree_model_get(gns->tm, &it,
105 TREE_COL_NAME, &n_name,
106 TREE_COL_RECORD_TYPE, &n_type,
107 TREE_COL_IS_PUBLIC, &n_public,
108 TREE_COL_EXP_TIME_COLOR, &n_exp_color,
109 TREE_COL_EXP_TIME, &n_exp_time,
110 TREE_COL_EXP_TIME_IS_REL, &n_is_relative,
111 TREE_COL_EXP_TIME_AS_STR, &n_exp_str,
112 TREE_COL_VAL_AS_STR, &n_value,
113 TREE_COL_VAL_COLOR, &n_value_color,
114 -1);
115
116 /* valid name */
117 if (NULL == n_name)
118 valid = GNUNET_NO;
119
120 /* valid record type */
121 if (0 == n_type)
122 valid = GNUNET_NO;
123
124 /* valid expiration */
125 if ((n_exp_color != NULL) || (NULL == n_exp_str) || (0 == n_exp_time))
126 valid = GNUNET_NO;
127
128 /* valid value */
129 if ((n_value_color != NULL) || (NULL == n_value))
130 valid = GNUNET_NO;
131
132 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Child [%u] is %s\n", c, (GNUNET_NO == valid) ? "INVALID" : "VALID");
133
134 g_free (n_name);
135 g_free (n_exp_color);
136 g_free (n_exp_str);
137 g_free (n_value);
138 g_free (n_value_color);
139
140 if ((GNUNET_NO == valid) || (FALSE == gtk_tree_model_iter_next (gns->tm, &it)))
141 break;
142 }
143
144 if (GNUNET_NO == valid)
145 {
146 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Not valid\n");
147 }
148 else
149 {
150 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Valid\n");
151 }
60} 152}
61 153
62 154
@@ -147,8 +239,7 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo,
147 gtk_tree_store_set (gns->ts, &child, TREE_COL_VAL_COLOR, "red", -1); 239 gtk_tree_store_set (gns->ts, &child, TREE_COL_VAL_COLOR, "red", -1);
148 } 240 }
149 241
150 check_record_validity (); 242 check_name_validity_and_commit (gns, path);
151
152} 243}
153 244
154 245
@@ -168,13 +259,13 @@ GNUNET_GNS_GTK_ispublic_cellrenderertoggle_toggled_cb (GtkCellRendererToggle *ce
168 struct GNUNET_GNS_Context *gns = user_data; 259 struct GNUNET_GNS_Context *gns = user_data;
169 GtkTreeIter it; 260 GtkTreeIter it;
170 GtkTreeModel *tm = GTK_TREE_MODEL(gns->ts); 261 GtkTreeModel *tm = GTK_TREE_MODEL(gns->ts);
171 int value; 262 gboolean value;
172 263
173 gtk_tree_model_get_iter_from_string(tm, &it, path); 264 gtk_tree_model_get_iter_from_string(tm, &it, path);
174 gtk_tree_model_get(tm, &it, TREE_COL_IS_PUBLIC, &value, -1); 265 gtk_tree_model_get(tm, &it, TREE_COL_IS_PUBLIC, &value, -1);
175 gtk_tree_store_set(gns->ts, &it, TREE_COL_IS_PUBLIC, !value, -1); 266 gtk_tree_store_set(gns->ts, &it, TREE_COL_IS_PUBLIC, !value, -1);
176 267
177 GNUNET_break (0); // FIXME, not implemented 268 check_name_validity_and_commit (gns, path);
178} 269}
179 270
180 271
@@ -243,8 +334,8 @@ GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (GtkCellRendererText *rende
243 TREE_COL_EXP_TIME, abstime.abs_value, 334 TREE_COL_EXP_TIME, abstime.abs_value,
244 TREE_COL_EXP_TIME_COLOR, NULL, 335 TREE_COL_EXP_TIME_COLOR, NULL,
245 -1); 336 -1);
337 check_name_validity_and_commit (gns, path);
246 } 338 }
247 check_record_validity ();
248} 339}
249 340
250 341
@@ -282,14 +373,13 @@ GNUNET_GNS_GTK_value_cellrenderertext_edited_cb (GtkCellRendererText *renderer,
282 { 373 {
283 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, NULL, -1); 374 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, NULL, -1);
284 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_AS_STR, new_text, -1); 375 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_AS_STR, new_text, -1);
376 check_name_validity_and_commit (gns, path);
285 } 377 }
286 else 378 else
287 { 379 {
288 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, "red", -1); 380 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, "red", -1);
289 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_AS_STR, new_text, -1); 381 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_AS_STR, new_text, -1);
290 } 382 }
291
292 check_record_validity ();
293 } 383 }
294} 384}
295 385
@@ -317,22 +407,25 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer,
317 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "New text for `%s' is `%s'\n", path, new_text); 407 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "New text for `%s' is `%s'\n", path, new_text);
318 if ((0 == strcmp (new_text, NEW_NAME_STR)) || (0 == strcmp (new_text, ""))) 408 if ((0 == strcmp (new_text, NEW_NAME_STR)) || (0 == strcmp (new_text, "")))
319 return; 409 return;
410
320 gtk_tree_model_get_iter_from_string(tm, &it, path); 411 gtk_tree_model_get_iter_from_string(tm, &it, path);
321 gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, &not_dummy, -1); 412 gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, &not_dummy, -1);
322 413
323 if (not_dummy == GNUNET_NO) 414 if (not_dummy == GNUNET_NO)
324 { 415 {
325 /* update name */ 416 /* update name */
326 gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1); 417 gtk_tree_store_set (gns->ts, &it,
327 gtk_tree_store_set (gns->ts, &it, TREE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR), -1); 418 TREE_COL_NAME, new_text,
328 gtk_tree_store_set (gns->ts, &it, TREE_COL_NOT_DUMMY_ROW, GNUNET_YES, -1); 419 TREE_COL_RECORD_TYPE, 0,
420 TREE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR),
421 TREE_COL_NOT_DUMMY_ROW, GNUNET_YES,
422 -1);
329 423
330 /* add a new dummy line */ 424 /* add a new dummy line */
331 gtk_tree_store_insert_with_values (gns->ts, &it,NULL, 0, 425 gtk_tree_store_insert_with_values (gns->ts, &it,NULL, 0,
332 TREE_COL_NAME, _(NEW_NAME_STR), 426 TREE_COL_NAME, _(NEW_NAME_STR),
333 TREE_COL_NAME_IS_VISIBLE, TRUE, 427 TREE_COL_NAME_IS_VISIBLE, TRUE,
334 TREE_COL_RECORD_TYPE, 1, 428 TREE_COL_RECORD_TYPE, 1,
335 TREE_COL_NAME_IS_VISIBLE, 1,
336 TREE_COL_NOT_DUMMY_ROW, GNUNET_NO, 429 TREE_COL_NOT_DUMMY_ROW, GNUNET_NO,
337 TREE_COL_IS_RECORD_ROW, GNUNET_NO, 430 TREE_COL_IS_RECORD_ROW, GNUNET_NO,
338 -1); 431 -1);
@@ -342,6 +435,7 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer,
342 /* update name */ 435 /* update name */
343 gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1); 436 gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1);
344 } 437 }
438 check_name_validity_and_commit (gns, path);
345} 439}
346 440
347/** 441/**
@@ -600,9 +694,10 @@ void GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem,
600 GtkTreeSelection * ts = gtk_tree_view_get_selection(tv); 694 GtkTreeSelection * ts = gtk_tree_view_get_selection(tv);
601 695
602 gtk_tree_selection_get_selected (ts, &tm, &it); 696 gtk_tree_selection_get_selected (ts, &tm, &it);
697
603 gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, &not_dummy, -1); 698 gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, &not_dummy, -1);
604 if (GNUNET_NO == not_dummy) 699 if (GNUNET_NO == not_dummy)
605 return; 700 return; /* do not delete the dummy line */
606 701
607 /* Has parent? */ 702 /* Has parent? */
608 has_parent = gtk_tree_model_iter_parent (tm, &parent, &it); 703 has_parent = gtk_tree_model_iter_parent (tm, &parent, &it);
@@ -712,6 +807,7 @@ void zone_iteration_proc (void *cls,
712 gtk_tree_store_set(zc_ctx->gns->ts, &iter_name, 807 gtk_tree_store_set(zc_ctx->gns->ts, &iter_name,
713 TREE_COL_NAME, name, 808 TREE_COL_NAME, name,
714 TREE_COL_NAME_IS_VISIBLE, TRUE, 809 TREE_COL_NAME_IS_VISIBLE, TRUE,
810 TREE_COL_RECORD_TYPE, 0,
715 TREE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR), 811 TREE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR),
716 TREE_COL_IS_RECORD_ROW, GNUNET_NO, 812 TREE_COL_IS_RECORD_ROW, GNUNET_NO,
717 TREE_COL_NOT_DUMMY_ROW, GNUNET_YES, 813 TREE_COL_NOT_DUMMY_ROW, GNUNET_YES,