diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-03-16 18:25:36 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-03-16 18:25:36 +0000 |
commit | b628f20c4833b178031834864402d8958a632da3 (patch) | |
tree | 3b07119f93860495c0a77eda9138310252ee08fe | |
parent | 59498b0d3a3370b440d7e6a499fc2d3219d9fc54 (diff) | |
download | gnunet-gtk-b628f20c4833b178031834864402d8958a632da3.tar.gz gnunet-gtk-b628f20c4833b178031834864402d8958a632da3.zip |
- changes
-rw-r--r-- | contrib/gnunet_gns_gtk_main_window.glade | 15 | ||||
-rw-r--r-- | src/gns/gnunet-gns-gtk_zone.c | 73 |
2 files changed, 82 insertions, 6 deletions
diff --git a/contrib/gnunet_gns_gtk_main_window.glade b/contrib/gnunet_gns_gtk_main_window.glade index 079c9966..9699deb3 100644 --- a/contrib/gnunet_gns_gtk_main_window.glade +++ b/contrib/gnunet_gns_gtk_main_window.glade | |||
@@ -2,6 +2,19 @@ | |||
2 | <interface> | 2 | <interface> |
3 | <requires lib="gtk+" version="2.20"/> | 3 | <requires lib="gtk+" version="2.20"/> |
4 | <!-- interface-naming-policy project-wide --> | 4 | <!-- interface-naming-policy project-wide --> |
5 | <object class="GtkMenu" id="GNUNET_GNS_GTK_delete_popup_menu"> | ||
6 | <property name="visible">True</property> | ||
7 | <property name="can_focus">False</property> | ||
8 | <child> | ||
9 | <object class="GtkMenuItem" id="GNUNET_GNS_GTK_delete_button"> | ||
10 | <property name="visible">True</property> | ||
11 | <property name="can_focus">False</property> | ||
12 | <property name="use_action_appearance">False</property> | ||
13 | <property name="label" translatable="yes">Delete Record</property> | ||
14 | <signal name="activate" handler="GNUNET_GNS_GTK_delete_popup_menu_delete_cb" swapped="no"/> | ||
15 | </object> | ||
16 | </child> | ||
17 | </object> | ||
5 | <object class="GtkWindow" id="GNUNET_GNS_GTK_main_window"> | 18 | <object class="GtkWindow" id="GNUNET_GNS_GTK_main_window"> |
6 | <property name="can_focus">False</property> | 19 | <property name="can_focus">False</property> |
7 | <property name="default_height">500</property> | 20 | <property name="default_height">500</property> |
@@ -223,6 +236,8 @@ | |||
223 | <property name="visible">True</property> | 236 | <property name="visible">True</property> |
224 | <property name="can_focus">True</property> | 237 | <property name="can_focus">True</property> |
225 | <property name="model">GNUNET_GNS_GTK_treestore</property> | 238 | <property name="model">GNUNET_GNS_GTK_treestore</property> |
239 | <signal name="button-press-event" handler="GNUNET_GNS_GTK_main_treeview_button_press_popup_menu_cb" swapped="no"/> | ||
240 | <signal name="key-press-event" handler="GNUNET_GNS_GTK_main_treeview_key_press_popup_menu_cb" after="yes" swapped="no"/> | ||
226 | <signal name="realize" handler="GNUNET_GNS_GTK_main_treeview_realize_cb" swapped="no"/> | 241 | <signal name="realize" handler="GNUNET_GNS_GTK_main_treeview_realize_cb" swapped="no"/> |
227 | <signal name="popup-menu" handler="GNUNET_GNS_GTK_main_treeview_popup_menu_cb" swapped="no"/> | 242 | <signal name="popup-menu" handler="GNUNET_GNS_GTK_main_treeview_popup_menu_cb" swapped="no"/> |
228 | <child> | 243 | <child> |
diff --git a/src/gns/gnunet-gns-gtk_zone.c b/src/gns/gnunet-gns-gtk_zone.c index 39f6f6ef..f0630ed2 100644 --- a/src/gns/gnunet-gns-gtk_zone.c +++ b/src/gns/gnunet-gns-gtk_zone.c | |||
@@ -244,13 +244,17 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, | |||
244 | struct GNUNET_GNS_Context *gns = user_data; | 244 | struct GNUNET_GNS_Context *gns = user_data; |
245 | GtkTreeIter it; | 245 | GtkTreeIter it; |
246 | GtkTreeModel *tm = GTK_TREE_MODEL(gns->ts); | 246 | GtkTreeModel *tm = GTK_TREE_MODEL(gns->ts); |
247 | int not_dummy; | ||
247 | 248 | ||
248 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "New text for `%s' is `%s'\n", path, new_text); | 249 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "New text for `%s' is `%s'\n", path, new_text); |
249 | if ((0 == strcmp (path, "0")) && (0 != strcmp (new_text, NEW_NAME_STR)) ) | 250 | if ((0 == strcmp (new_text, NEW_NAME_STR)) || (0 == strcmp (new_text, ""))) |
251 | return; | ||
252 | gtk_tree_model_get_iter_from_string(tm, &it, path); | ||
253 | gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, ¬_dummy, -1); | ||
254 | |||
255 | if (not_dummy == GNUNET_NO) | ||
250 | { | 256 | { |
251 | GNUNET_break (0); | ||
252 | /* update name */ | 257 | /* update name */ |
253 | gtk_tree_model_get_iter_from_string(tm, &it, path); | ||
254 | gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1); | 258 | gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1); |
255 | gtk_tree_store_set (gns->ts, &it, TREE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR), -1); | 259 | gtk_tree_store_set (gns->ts, &it, TREE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR), -1); |
256 | gtk_tree_store_set (gns->ts, &it, TREE_COL_NOT_DUMMY_ROW, GNUNET_YES, -1); | 260 | gtk_tree_store_set (gns->ts, &it, TREE_COL_NOT_DUMMY_ROW, GNUNET_YES, -1); |
@@ -267,12 +271,10 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, | |||
267 | else | 271 | else |
268 | { | 272 | { |
269 | /* update name */ | 273 | /* update name */ |
270 | gtk_tree_model_get_iter_from_string(tm, &it, path); | ||
271 | gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1); | 274 | gtk_tree_store_set (gns->ts, &it, TREE_COL_NAME, new_text, -1); |
272 | } | 275 | } |
273 | } | 276 | } |
274 | 277 | ||
275 | |||
276 | /** | 278 | /** |
277 | * The zone treeview pop up menu is supposed to be created. | 279 | * The zone treeview pop up menu is supposed to be created. |
278 | * (Note: this is not the only method that might need to be | 280 | * (Note: this is not the only method that might need to be |
@@ -287,7 +289,50 @@ gboolean | |||
287 | GNUNET_GNS_GTK_main_treeview_popup_menu_cb (GtkWidget *widget, | 289 | GNUNET_GNS_GTK_main_treeview_popup_menu_cb (GtkWidget *widget, |
288 | gpointer user_data) | 290 | gpointer user_data) |
289 | { | 291 | { |
290 | GNUNET_break (0); // FIXME, not implemented | 292 | struct GNUNET_GNS_Context *gns = user_data; |
293 | GtkTreeView *tv; | ||
294 | GtkTreeModel *tm; | ||
295 | GtkTreeIter it; | ||
296 | GtkMenu *popup; | ||
297 | GtkTreeSelection * ts; | ||
298 | int not_dummy; | ||
299 | |||
300 | |||
301 | |||
302 | tv = GTK_TREE_VIEW(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_main_treeview")); | ||
303 | ts = gtk_tree_view_get_selection(tv); | ||
304 | gtk_tree_selection_get_selected (ts, &tm, &it); | ||
305 | gtk_tree_model_get(GTK_TREE_MODEL(gns->ts), &it, TREE_COL_NOT_DUMMY_ROW, ¬_dummy, -1); | ||
306 | if (GNUNET_NO == not_dummy) | ||
307 | return TRUE; | ||
308 | |||
309 | popup = GTK_MENU(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_delete_popup_menu")); | ||
310 | gtk_widget_show_all (GTK_WIDGET(popup)); | ||
311 | gtk_menu_popup(popup, NULL, NULL, NULL, NULL, 0, 0); | ||
312 | return TRUE; | ||
313 | } | ||
314 | |||
315 | gboolean | ||
316 | GNUNET_GNS_GTK_main_treeview_button_press_popup_menu_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data) | ||
317 | { | ||
318 | /* Check for right click*/ | ||
319 | if (event->type == GDK_BUTTON_PRESS && event->button == 3) | ||
320 | { | ||
321 | GNUNET_GNS_GTK_main_treeview_popup_menu_cb (widget, user_data); | ||
322 | |||
323 | } | ||
324 | return FALSE; | ||
325 | } | ||
326 | |||
327 | gboolean | ||
328 | GNUNET_GNS_GTK_main_treeview_key_press_popup_menu_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data) | ||
329 | { | ||
330 | /* Check for delete key */ | ||
331 | if ((event->type == GDK_KEY_PRESS) && (GDK_Delete == event->keyval)) | ||
332 | { | ||
333 | GNUNET_GNS_GTK_main_treeview_popup_menu_cb (widget, user_data); | ||
334 | |||
335 | } | ||
291 | return FALSE; | 336 | return FALSE; |
292 | } | 337 | } |
293 | 338 | ||
@@ -298,6 +343,22 @@ struct ZoneIteration_Context | |||
298 | struct GNUNET_NAMESTORE_ZoneIterator * it; | 343 | struct GNUNET_NAMESTORE_ZoneIterator * it; |
299 | }; | 344 | }; |
300 | 345 | ||
346 | void GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem, | ||
347 | gpointer user_data) | ||
348 | { | ||
349 | struct GNUNET_GNS_Context *gns = user_data; | ||
350 | GtkTreeIter it; | ||
351 | int not_dummy; | ||
352 | |||
353 | GtkTreeView *tv = GTK_TREE_VIEW(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_main_treeview")); | ||
354 | GtkTreeModel *tm; | ||
355 | GtkTreeSelection * ts = gtk_tree_view_get_selection(tv); | ||
356 | |||
357 | gtk_tree_selection_get_selected (ts, &tm, &it); | ||
358 | gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, ¬_dummy, -1); | ||
359 | if (GNUNET_YES == not_dummy) | ||
360 | gtk_tree_store_remove (gns->ts, &it); | ||
361 | } | ||
301 | 362 | ||
302 | void zone_iteration_proc (void *cls, | 363 | void zone_iteration_proc (void *cls, |
303 | const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key, | 364 | const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key, |