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);