diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-03-21 15:15:46 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-03-21 15:15:46 +0000 |
commit | 172f8f70eb9c8553cc46420e902b2dac439fb3ae (patch) | |
tree | 7fc197d8ad932e78750785527c7442705761df1c | |
parent | 526656d4ae436ab751b92ecdffe5beacfa44cf3a (diff) | |
download | gnunet-gtk-172f8f70eb9c8553cc46420e902b2dac439fb3ae.tar.gz gnunet-gtk-172f8f70eb9c8553cc46420e902b2dac439fb3ae.zip |
- validity check
-rw-r--r-- | src/gns/gnunet-gns-gtk_zone.c | 124 |
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 | ||
56 | void | 56 | void |
57 | check_record_validity () | 57 | check_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, ¬_dummy, -1); | 412 | gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, ¬_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, ¬_dummy, -1); | 698 | gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, ¬_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, |