Mercurial > geeqie.yaz
comparison src/metadata.c @ 1425:80462be81410
fixed keyword to mark connection
author | nadvornik |
---|---|
date | Fri, 13 Mar 2009 09:03:06 +0000 |
parents | 6ce1f7171d48 |
children | 3019f5d3a3c7 |
comparison
equal
deleted
inserted
replaced
1424:0061979f7f6d | 1425:80462be81410 |
---|---|
625 */ | 625 */ |
626 | 626 |
627 | 627 |
628 gboolean meta_data_get_keyword_mark(FileData *fd, gint n, gpointer data) | 628 gboolean meta_data_get_keyword_mark(FileData *fd, gint n, gpointer data) |
629 { | 629 { |
630 /* FIXME: do not use global keyword_tree */ | |
631 GList *path = data; | |
630 GList *keywords; | 632 GList *keywords; |
631 gboolean found = FALSE; | 633 gboolean found = FALSE; |
632 keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN); | 634 keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN); |
633 if (keywords) | 635 if (keywords) |
634 { | 636 { |
635 GList *work = keywords; | 637 GtkTreeIter iter; |
636 | 638 if (keyword_tree_get_iter(GTK_TREE_MODEL(keyword_tree), &iter, path) && |
637 while (work) | 639 keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords)) |
638 { | 640 found = TRUE; |
639 gchar *kw = work->data; | 641 |
640 work = work->next; | |
641 | |
642 if (strcmp(kw, data) == 0) | |
643 { | |
644 found = TRUE; | |
645 break; | |
646 } | |
647 } | |
648 string_list_free(keywords); | |
649 } | 642 } |
650 return found; | 643 return found; |
651 } | 644 } |
652 | 645 |
653 gboolean meta_data_set_keyword_mark(FileData *fd, gint n, gboolean value, gpointer data) | 646 gboolean meta_data_set_keyword_mark(FileData *fd, gint n, gboolean value, gpointer data) |
654 { | 647 { |
648 GList *path = data; | |
655 GList *keywords = NULL; | 649 GList *keywords = NULL; |
656 gboolean found = FALSE; | 650 GtkTreeIter iter; |
657 gboolean changed = FALSE; | 651 |
658 GList *work; | 652 if (!keyword_tree_get_iter(GTK_TREE_MODEL(keyword_tree), &iter, path)) return FALSE; |
653 | |
659 keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN); | 654 keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN); |
660 | 655 |
661 work = keywords; | 656 if (!!keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords) != !!value) |
662 | 657 { |
663 while (work) | 658 if (value) |
664 { | 659 { |
665 gchar *kw = work->data; | 660 keyword_tree_set(GTK_TREE_MODEL(keyword_tree), &iter, &keywords); |
666 | 661 } |
667 if (strcmp(kw, data) == 0) | 662 else |
668 { | 663 { |
669 found = TRUE; | 664 keyword_tree_reset(GTK_TREE_MODEL(keyword_tree), &iter, &keywords); |
670 if (!value) | 665 } |
671 { | 666 metadata_write_list(fd, KEYWORD_KEY, keywords); |
672 changed = TRUE; | 667 } |
673 keywords = g_list_delete_link(keywords, work); | |
674 g_free(kw); | |
675 } | |
676 break; | |
677 } | |
678 work = work->next; | |
679 } | |
680 if (value && !found) | |
681 { | |
682 changed = TRUE; | |
683 keywords = g_list_append(keywords, g_strdup(data)); | |
684 } | |
685 | |
686 if (changed) metadata_write_list(fd, KEYWORD_KEY, keywords); | |
687 | 668 |
688 string_list_free(keywords); | 669 string_list_free(keywords); |
689 return TRUE; | 670 return TRUE; |
690 } | 671 } |
672 | |
673 | |
674 | |
675 void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter *kw_iter, gint mark) | |
676 { | |
677 | |
678 FileDataGetMarkFunc get_mark_func; | |
679 FileDataSetMarkFunc set_mark_func; | |
680 gpointer mark_func_data; | |
681 | |
682 gint i; | |
683 | |
684 for (i = 0; i < FILEDATA_MARKS_SIZE; i++) | |
685 { | |
686 file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data); | |
687 if (get_mark_func == meta_data_get_keyword_mark) | |
688 { | |
689 GtkTreeIter old_kw_iter; | |
690 GList *old_path = mark_func_data; | |
691 | |
692 if (keyword_tree_get_iter(keyword_tree, &old_kw_iter, old_path) && | |
693 (i == mark || /* release any previous connection of given mark */ | |
694 keyword_compare(keyword_tree, &old_kw_iter, kw_iter) == 0)) /* or given keyword */ | |
695 { | |
696 file_data_register_mark_func(i, NULL, NULL, NULL, NULL); | |
697 gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), &old_kw_iter, KEYWORD_COLUMN_MARK, "", -1); | |
698 } | |
699 } | |
700 } | |
701 | |
702 | |
703 if (mark >= 0 && mark < FILEDATA_MARKS_SIZE) | |
704 { | |
705 GList *path; | |
706 gchar *mark_str; | |
707 path = keyword_tree_get_path(keyword_tree, kw_iter); | |
708 file_data_register_mark_func(mark, meta_data_get_keyword_mark, meta_data_set_keyword_mark, path, (GDestroyNotify)string_list_free); | |
709 | |
710 mark_str = g_strdup_printf("%d", mark + 1); | |
711 gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), kw_iter, KEYWORD_COLUMN_MARK, mark_str, -1); | |
712 g_free(mark_str); | |
713 } | |
714 } | |
715 | |
691 | 716 |
692 /* | 717 /* |
693 *------------------------------------------------------------------- | 718 *------------------------------------------------------------------- |
694 * keyword tree | 719 * keyword tree |
695 *------------------------------------------------------------------- | 720 *------------------------------------------------------------------- |