comparison src/bar_keywords.c @ 1806:022456247824

Add the feature to add single keywords to selection This patch adds a context menu entry to keywords to ad the current keyword to all selected images.
author mow
date Sat, 27 Feb 2010 20:35:26 +0000
parents 956aab097ea7
children c416d099a3dc
comparison
equal deleted inserted replaced
1805:fccac8fde6c0 1806:022456247824
1083 PaneKeywordsData *pkd = data; 1083 PaneKeywordsData *pkd = data;
1084 pkd->hide_unchecked = !pkd->hide_unchecked; 1084 pkd->hide_unchecked = !pkd->hide_unchecked;
1085 bar_keyword_tree_sync(pkd); 1085 bar_keyword_tree_sync(pkd);
1086 } 1086 }
1087 1087
1088 /**
1089 * \brief Callback for adding selected keyword to all selected images.
1090 */
1091 static void bar_pane_keywords_add_to_selected_cb(GtkWidget *menu_widget, gpointer data)
1092 {
1093 PaneKeywordsData *pkd = data;
1094 GtkTreeIter iter; /* This is the iter which initial holds the current keyword */
1095 GtkTreeIter child_iter;
1096 GtkTreeModel *model;
1097 GtkTreeModel *keyword_tree;
1098 GList *list, *work;
1099 GList *keywords = NULL;
1100
1101 GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pkd->keyword_view));
1102
1103 /* Aquire selected keyword */
1104 if (pkd->click_tpath)
1105 {
1106 gboolean is_keyword = TRUE;
1107
1108 model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview));
1109 if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return;
1110 gtk_tree_model_get(model, &iter, FILTER_KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1);
1111 if (!is_keyword) return;
1112 }
1113 else
1114 return;
1115
1116 keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
1117 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter);
1118
1119 list = keyword_list_pull(pkd->keyword_view); /* Get the left keyword view */
1120
1121 /* Now set the current image */
1122 keyword_tree_set(keyword_tree, &child_iter, &list);
1123
1124 keyword_list_push(pkd->keyword_view, list); /* Set the left keyword view */
1125 string_list_free(list);
1126
1127 bar_pane_keywords_changed(keyword_buffer, pkd); /* Get list of all keywords in the hierarchy */
1128
1129 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter);
1130 keywords = keyword_tree_get(keyword_tree, &child_iter);
1131
1132 list = layout_selection_list(pkd->pane.lw);
1133 work = list;
1134 while (work)
1135 {
1136 FileData *fd = work->data;
1137 work = work->next;
1138 metadata_append_list(fd, KEYWORD_KEY, keywords);
1139 }
1140 filelist_free(list);
1141 string_list_free(keywords);
1142 }
1143
1088 static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pkd, gint x, gint y) 1144 static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pkd, gint x, gint y)
1089 { 1145 {
1090 GtkWidget *menu; 1146 GtkWidget *menu;
1091 GtkWidget *item; 1147 GtkWidget *item;
1092 GtkWidget *submenu; 1148 GtkWidget *submenu;
1098 1154
1099 menu = popup_menu_short_lived(); 1155 menu = popup_menu_short_lived();
1100 1156
1101 menu_item_add_stock(menu, _("Add keyword"), GTK_STOCK_EDIT, G_CALLBACK(bar_pane_keywords_add_dialog_cb), pkd); 1157 menu_item_add_stock(menu, _("Add keyword"), GTK_STOCK_EDIT, G_CALLBACK(bar_pane_keywords_add_dialog_cb), pkd);
1102 1158
1159 menu_item_add_divider(menu);
1160
1161 menu_item_add(menu, _("Add keyword to all selected images"), G_CALLBACK(bar_pane_keywords_add_to_selected_cb), pkd);
1162
1103 menu_item_add_divider(menu); 1163 menu_item_add_divider(menu);
1104 1164
1105 if (pkd->click_tpath) 1165 if (pkd->click_tpath)
1106 { 1166 {
1107 /* for the entry */ 1167 /* for the entry */