Mercurial > geeqie
comparison src/bar_info.c @ 1223:18d08b10b80e
implemented a possibility to connect keywords with marks
author | nadvornik |
---|---|
date | Thu, 25 Dec 2008 12:39:34 +0000 |
parents | a0c249bcc4ff |
children | 31f50c1b6a9a |
comparison
equal
deleted
inserted
replaced
1222:31dc2f240afb | 1223:18d08b10b80e |
---|---|
357 BAR_SORT_LINK | 357 BAR_SORT_LINK |
358 } SortActionType; | 358 } SortActionType; |
359 | 359 |
360 enum { | 360 enum { |
361 KEYWORD_COLUMN_TOGGLE = 0, | 361 KEYWORD_COLUMN_TOGGLE = 0, |
362 KEYWORD_COLUMN_TEXT | 362 KEYWORD_COLUMN_TEXT, |
363 KEYWORD_COLUMN_MARK | |
363 }; | 364 }; |
364 | 365 |
365 typedef struct _BarInfoData BarInfoData; | 366 typedef struct _BarInfoData BarInfoData; |
366 struct _BarInfoData | 367 struct _BarInfoData |
367 { | 368 { |
407 | 408 |
408 string_list_free(list); | 409 string_list_free(list); |
409 g_free(comment); | 410 g_free(comment); |
410 } | 411 } |
411 | 412 |
413 static gchar *bar_info_get_mark_text(const gchar *key) | |
414 { | |
415 gint i; | |
416 static gchar buf[10]; | |
417 | |
418 for (i = 0; i < FILEDATA_MARKS_SIZE; i++) | |
419 { | |
420 FileDataGetMarkFunc get_mark_func; | |
421 FileDataSetMarkFunc set_mark_func; | |
422 gpointer data; | |
423 file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &data); | |
424 if (get_mark_func == meta_data_get_keyword_mark && strcmp(data, key) == 0) | |
425 { | |
426 sprintf(buf, " %d ", i + 1); | |
427 return buf; | |
428 } | |
429 } | |
430 return " ... "; | |
431 } | |
432 | |
412 static void bar_keyword_list_sync(BarInfoData *bd, GList *keywords) | 433 static void bar_keyword_list_sync(BarInfoData *bd, GList *keywords) |
413 { | 434 { |
414 GList *list; | 435 GList *list; |
415 GtkListStore *store; | 436 GtkListStore *store; |
416 GtkTreeIter iter; | 437 GtkTreeIter iter; |
440 { | 461 { |
441 gchar *key = list->data; | 462 gchar *key = list->data; |
442 | 463 |
443 gtk_list_store_append(store, &iter); | 464 gtk_list_store_append(store, &iter); |
444 gtk_list_store_set(store, &iter, KEYWORD_COLUMN_TOGGLE, find_string_in_list(keywords, key), | 465 gtk_list_store_set(store, &iter, KEYWORD_COLUMN_TOGGLE, find_string_in_list(keywords, key), |
445 KEYWORD_COLUMN_TEXT, key, -1); | 466 KEYWORD_COLUMN_TEXT, key, |
467 KEYWORD_COLUMN_MARK, bar_info_get_mark_text(key), -1); | |
446 | 468 |
447 list = list->prev; | 469 list = list->prev; |
448 } | 470 } |
449 } | 471 } |
450 | 472 |
693 file_data_unregister_notify_func(bar_info_notify_cb, bd); | 715 file_data_unregister_notify_func(bar_info_notify_cb, bd); |
694 bar_info_write(bd); | 716 bar_info_write(bd); |
695 file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); | 717 file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); |
696 } | 718 } |
697 | 719 |
720 static void bar_info_mark_edited (GtkCellRendererText *cell, const gchar *path, const gchar *text, gpointer data) | |
721 { | |
722 BarInfoData *bd = data; | |
723 GtkTreeModel *store; | |
724 GtkTreeIter iter; | |
725 GtkTreePath *tpath; | |
726 gchar *key = NULL; | |
727 gint i; | |
728 FileDataGetMarkFunc get_mark_func; | |
729 FileDataSetMarkFunc set_mark_func; | |
730 gpointer mark_func_data; | |
731 | |
732 file_data_unregister_notify_func(bar_info_notify_cb, bd); | |
733 | |
734 store = gtk_tree_view_get_model(GTK_TREE_VIEW(bd->keyword_treeview)); | |
735 | |
736 tpath = gtk_tree_path_new_from_string(path); | |
737 gtk_tree_model_get_iter(store, &iter, tpath); | |
738 gtk_tree_path_free(tpath); | |
739 | |
740 gtk_tree_model_get(store, &iter, KEYWORD_COLUMN_TEXT, &key, -1); | |
741 | |
742 for (i = 0; i < FILEDATA_MARKS_SIZE; i++) | |
743 { | |
744 file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data); | |
745 if (get_mark_func == meta_data_get_keyword_mark && strcmp(mark_func_data, key) == 0) | |
746 { | |
747 g_free(mark_func_data); | |
748 file_data_register_mark_func(i, NULL, NULL, NULL); | |
749 } | |
750 } | |
751 | |
752 if (sscanf(text, " %d ", &i) &&i >=1 && i <= FILEDATA_MARKS_SIZE) | |
753 { | |
754 i--; | |
755 file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data); | |
756 if (get_mark_func == meta_data_get_keyword_mark && mark_func_data) g_free(mark_func_data); | |
757 file_data_register_mark_func(i, meta_data_get_keyword_mark, meta_data_set_keyword_mark, g_strdup(key)); | |
758 } | |
759 | |
760 g_free(key); | |
761 | |
762 file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); | |
763 bar_info_update(bd); | |
764 } | |
765 | |
698 void bar_info_close(GtkWidget *bar) | 766 void bar_info_close(GtkWidget *bar) |
699 { | 767 { |
700 BarInfoData *bd; | 768 BarInfoData *bd; |
701 | 769 |
702 bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); | 770 bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); |
713 bar_list = g_list_remove(bar_list, bd); | 781 bar_list = g_list_remove(bar_list, bd); |
714 | 782 |
715 file_data_unref(bd->fd); | 783 file_data_unref(bd->fd); |
716 | 784 |
717 g_free(bd); | 785 g_free(bd); |
786 } | |
787 | |
788 static GtkTreeModel *create_marks_list(void) | |
789 { | |
790 GtkListStore *model; | |
791 GtkTreeIter iter; | |
792 gint i; | |
793 | |
794 /* create list store */ | |
795 model = gtk_list_store_new (1, G_TYPE_STRING); | |
796 for (i = 0; i < FILEDATA_MARKS_SIZE; i++) | |
797 { | |
798 char str[10]; | |
799 sprintf(str, " %d ", i + 1); | |
800 gtk_list_store_append (model, &iter); | |
801 gtk_list_store_set(model, &iter, 0, str, -1); | |
802 } | |
803 gtk_list_store_append (model, &iter); | |
804 gtk_list_store_set(model, &iter, 0, " ... ", -1); | |
805 return GTK_TREE_MODEL (model); | |
718 } | 806 } |
719 | 807 |
720 GtkWidget *bar_info_new(FileData *fd, gint metadata_only, GtkWidget *bounding_widget) | 808 GtkWidget *bar_info_new(FileData *fd, gint metadata_only, GtkWidget *bounding_widget) |
721 { | 809 { |
722 BarInfoData *bd; | 810 BarInfoData *bd; |
810 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), | 898 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), |
811 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | 899 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
812 gtk_box_pack_start(GTK_BOX(hbox), scrolled, TRUE, TRUE, 0); | 900 gtk_box_pack_start(GTK_BOX(hbox), scrolled, TRUE, TRUE, 0); |
813 gtk_widget_show(scrolled); | 901 gtk_widget_show(scrolled); |
814 | 902 |
815 store = gtk_list_store_new(2, G_TYPE_BOOLEAN, G_TYPE_STRING); | 903 store = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING); |
816 bd->keyword_treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); | 904 bd->keyword_treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
817 g_object_unref(store); | 905 g_object_unref(store); |
818 | 906 |
819 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(bd->keyword_treeview), FALSE); | 907 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(bd->keyword_treeview), FALSE); |
820 | 908 |
839 renderer = gtk_cell_renderer_text_new(); | 927 renderer = gtk_cell_renderer_text_new(); |
840 gtk_tree_view_column_pack_start(column, renderer, TRUE); | 928 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
841 gtk_tree_view_column_add_attribute(column, renderer, "text", KEYWORD_COLUMN_TEXT); | 929 gtk_tree_view_column_add_attribute(column, renderer, "text", KEYWORD_COLUMN_TEXT); |
842 | 930 |
843 gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), column); | 931 gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), column); |
932 | |
933 column = gtk_tree_view_column_new(); | |
934 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); | |
935 | |
936 renderer = gtk_cell_renderer_combo_new(); | |
937 g_object_set(G_OBJECT(renderer), "editable", (gboolean)TRUE, | |
938 "model", create_marks_list(), | |
939 "text-column", 0, | |
940 "has-entry", FALSE, | |
941 NULL); | |
942 | |
943 gtk_tree_view_column_pack_start(column, renderer, TRUE); | |
944 gtk_tree_view_column_add_attribute(column, renderer, "text", KEYWORD_COLUMN_MARK); | |
945 g_signal_connect (renderer, "edited", | |
946 G_CALLBACK (bar_info_mark_edited), bd); | |
947 gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), column); | |
948 | |
844 | 949 |
845 gtk_container_add(GTK_CONTAINER(scrolled), bd->keyword_treeview); | 950 gtk_container_add(GTK_CONTAINER(scrolled), bd->keyword_treeview); |
846 gtk_widget_show(bd->keyword_treeview); | 951 gtk_widget_show(bd->keyword_treeview); |
847 | 952 |
848 /* comment entry */ | 953 /* comment entry */ |