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 *-------------------------------------------------------------------