Mercurial > geeqie.yaz
comparison src/advanced_exif.c @ 1392:d1b32a69b40a
dnd in keywords tree
improved dnd in advanced exif
author | nadvornik |
---|---|
date | Sun, 08 Mar 2009 09:56:40 +0000 |
parents | 2ecdff667841 |
children | 79b32088ecc4 |
comparison
equal
deleted
inserted
replaced
1391:9e0df7903581 | 1392:d1b32a69b40a |
---|---|
43 GtkWidget *vbox; | 43 GtkWidget *vbox; |
44 GtkWidget *scrolled; | 44 GtkWidget *scrolled; |
45 GtkWidget *listview; | 45 GtkWidget *listview; |
46 | 46 |
47 FileData *fd; | 47 FileData *fd; |
48 gchar *sel_key; | |
49 }; | 48 }; |
50 | 49 |
51 enum { | 50 enum { |
52 EXIF_ADVCOL_ENABLED = 0, | 51 EXIF_ADVCOL_ENABLED = 0, |
53 EXIF_ADVCOL_TAG, | 52 EXIF_ADVCOL_TAG, |
228 { "text/plain", 0, TARGET_TEXT_PLAIN } | 227 { "text/plain", 0, TARGET_TEXT_PLAIN } |
229 }; | 228 }; |
230 static gint n_exif_drag_types = 1; | 229 static gint n_exif_drag_types = 1; |
231 | 230 |
232 | 231 |
233 static void advanced_exif_dnd_get(GtkWidget *entry, GdkDragContext *context, | 232 static void advanced_exif_dnd_get(GtkWidget *listview, GdkDragContext *context, |
234 GtkSelectionData *selection_data, guint info, | 233 GtkSelectionData *selection_data, guint info, |
235 guint time, gpointer data) | 234 guint time, gpointer data) |
236 { | |
237 ExifWin *ew = data; | |
238 | |
239 gtk_selection_data_set_text(selection_data, ew->sel_key, -1); | |
240 } | |
241 | |
242 static void advanced_exif_dnd_begin(GtkWidget *listview, GdkDragContext *context, gpointer data) | |
243 { | 235 { |
244 ExifWin *ew = data; | 236 ExifWin *ew = data; |
245 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); | 237 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); |
246 GtkTreeIter iter; | 238 GtkTreeIter iter; |
247 ew->sel_key = NULL; | |
248 | 239 |
249 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) | 240 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) |
250 { | 241 { |
251 GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview)); | 242 GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview)); |
252 | 243 gchar *key; |
253 gtk_tree_model_get(store, &iter, EXIF_ADVCOL_NAME, &ew->sel_key, -1); | 244 |
254 printf("%s\n",ew->sel_key); | 245 gtk_tree_model_get(store, &iter, EXIF_ADVCOL_NAME, &key, -1); |
255 } | 246 gtk_selection_data_set_text(selection_data, key, -1); |
256 | 247 printf("%s\n",key); |
248 g_free(key); | |
249 } | |
250 | |
257 } | 251 } |
258 | 252 |
259 static void advanced_exif_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) | 253 static void advanced_exif_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) |
260 { | 254 { |
255 GtkWidget *window = data; | |
256 gtk_widget_destroy(window); | |
257 } | |
258 | |
259 static void advanced_exif_dnd_begin(GtkWidget *listview, GdkDragContext *context, gpointer data) | |
260 { | |
261 ExifWin *ew = data; | 261 ExifWin *ew = data; |
262 g_free(ew->sel_key); | 262 GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); |
263 ew->sel_key = NULL; | 263 GtkTreeIter iter; |
264 } | 264 |
265 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
266 { | |
267 GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview)); | |
268 gchar *key; | |
269 GtkWidget *window; | |
270 GtkWidget *label; | |
271 | |
272 gtk_tree_model_get(store, &iter, EXIF_ADVCOL_NAME, &key, -1); | |
273 | |
274 window = gtk_window_new(GTK_WINDOW_POPUP); | |
275 gtk_widget_realize (window); | |
276 | |
277 label = gtk_label_new(key); | |
278 gtk_container_add(GTK_CONTAINER (window), label); | |
279 gtk_widget_show(label); | |
280 gtk_drag_set_icon_widget(context, window, -15, 10); | |
281 g_signal_connect(G_OBJECT(listview), "drag_end", | |
282 G_CALLBACK(advanced_exif_dnd_end), window); | |
283 | |
284 g_free(key); | |
285 } | |
286 } | |
287 | |
265 | 288 |
266 | 289 |
267 static void advanced_exif_add_column(GtkWidget *listview, const gchar *title, gint n, gint sizable) | 290 static void advanced_exif_add_column(GtkWidget *listview, const gchar *title, gint n, gint sizable) |
268 { | 291 { |
269 GtkTreeViewColumn *column; | 292 GtkTreeViewColumn *column; |
340 | 363 |
341 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(ew->listview), TRUE); | 364 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(ew->listview), TRUE); |
342 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(ew->listview), TRUE); | 365 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(ew->listview), TRUE); |
343 | 366 |
344 gtk_tree_view_set_search_column(GTK_TREE_VIEW(ew->listview), EXIF_ADVCOL_NAME); | 367 gtk_tree_view_set_search_column(GTK_TREE_VIEW(ew->listview), EXIF_ADVCOL_NAME); |
345 | |
346 // advanced_exif_add_column_check(ew->listview, "", EXIF_ADVCOL_ENABLED); | |
347 | 368 |
348 advanced_exif_add_column(ew->listview, _("Description"), EXIF_ADVCOL_DESCRIPTION, FALSE); | 369 advanced_exif_add_column(ew->listview, _("Description"), EXIF_ADVCOL_DESCRIPTION, FALSE); |
349 advanced_exif_add_column(ew->listview, _("Value"), EXIF_ADVCOL_VALUE, TRUE); | 370 advanced_exif_add_column(ew->listview, _("Value"), EXIF_ADVCOL_VALUE, TRUE); |
350 advanced_exif_add_column(ew->listview, _("Name"), EXIF_ADVCOL_NAME, FALSE); | 371 advanced_exif_add_column(ew->listview, _("Name"), EXIF_ADVCOL_NAME, FALSE); |
351 advanced_exif_add_column(ew->listview, _("Tag"), EXIF_ADVCOL_TAG, FALSE); | 372 advanced_exif_add_column(ew->listview, _("Tag"), EXIF_ADVCOL_TAG, FALSE); |
352 advanced_exif_add_column(ew->listview, _("Format"), EXIF_ADVCOL_FORMAT, FALSE); | 373 advanced_exif_add_column(ew->listview, _("Format"), EXIF_ADVCOL_FORMAT, FALSE); |
353 advanced_exif_add_column(ew->listview, _("Elements"), EXIF_ADVCOL_ELEMENTS, FALSE); | 374 advanced_exif_add_column(ew->listview, _("Elements"), EXIF_ADVCOL_ELEMENTS, FALSE); |
354 | 375 |
355 gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(ew->listview), | 376 gtk_drag_source_set(ew->listview, |
356 GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, | 377 GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, |
357 advanced_exif_drag_types, n_exif_drag_types, | 378 advanced_exif_drag_types, n_exif_drag_types, |
358 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); | 379 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); |
359 | 380 |
360 g_signal_connect(G_OBJECT(ew->listview), "drag_data_get", | 381 g_signal_connect(G_OBJECT(ew->listview), "drag_data_get", |
361 G_CALLBACK(advanced_exif_dnd_get), ew); | 382 G_CALLBACK(advanced_exif_dnd_get), ew); |
362 | 383 |
363 g_signal_connect(G_OBJECT(ew->listview), "drag_begin", | 384 g_signal_connect(G_OBJECT(ew->listview), "drag_begin", |
364 G_CALLBACK(advanced_exif_dnd_begin), ew); | 385 G_CALLBACK(advanced_exif_dnd_begin), ew); |
365 g_signal_connect(G_OBJECT(ew->listview), "drag_end", | |
366 G_CALLBACK(advanced_exif_dnd_end), ew); | |
367 | 386 |
368 ew->scrolled = gtk_scrolled_window_new(NULL, NULL); | 387 ew->scrolled = gtk_scrolled_window_new(NULL, NULL); |
369 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ew->scrolled), GTK_SHADOW_IN); | 388 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ew->scrolled), GTK_SHADOW_IN); |
370 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ew->scrolled), | 389 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ew->scrolled), |
371 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | 390 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); |