gimp r26026 - in branches/soc-2008-tagging: . app/widgets
- From: aurisj svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r26026 - in branches/soc-2008-tagging: . app/widgets
- Date: Mon, 30 Jun 2008 19:57:29 +0000 (UTC)
Author: aurisj
Date: Mon Jun 30 19:57:29 2008
New Revision: 26026
URL: http://svn.gnome.org/viewvc/gimp?rev=26026&view=rev
Log:
2008-06-30 Aurimas JuÅka <aurisj svn gnome org>
* app/widgets/gimpdatafactoryview.[ch]
* app/widgets/gimptagentry.[ch]: tag assignment GUI support.
Modified:
branches/soc-2008-tagging/ChangeLog
branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.c
branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.h
branches/soc-2008-tagging/app/widgets/gimptagentry.c
branches/soc-2008-tagging/app/widgets/gimptagentry.h
Modified: branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.c
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.c (original)
+++ branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.c Mon Jun 30 19:57:29 2008
@@ -54,6 +54,8 @@
static void gimp_data_factory_view_activate_item (GimpContainerEditor *editor,
GimpViewable *viewable);
+static void gimp_data_factory_view_select_item (GimpContainerEditor *editor,
+ GimpViewable *viewable);
static void gimp_data_factory_view_tree_name_edited (GtkCellRendererText *cell,
const gchar *path,
const gchar *name,
@@ -70,6 +72,7 @@
{
GimpContainerEditorClass *editor_class = GIMP_CONTAINER_EDITOR_CLASS (klass);
+ editor_class->select_item = gimp_data_factory_view_select_item;
editor_class->activate_item = gimp_data_factory_view_activate_item;
}
@@ -83,6 +86,8 @@
view->refresh_button = NULL;
view->filtered_container = NULL;
+
+ view->selected_items = NULL;
}
GtkWidget *
@@ -134,7 +139,6 @@
{
GimpContainerEditor *editor;
gchar *str;
- GtkWidget *tag_query_entry;
g_return_val_if_fail (GIMP_IS_DATA_FACTORY_VIEW (factory_view), FALSE);
g_return_val_if_fail (GIMP_IS_DATA_FACTORY (factory), FALSE);
@@ -221,23 +225,60 @@
gimp_ui_manager_update (GIMP_EDITOR (editor->view)->ui_manager, editor);
- tag_query_entry = gimp_tag_entry_new (GIMP_FILTERED_CONTAINER (factory_view->filtered_container),
- GIMP_TAG_ENTRY_MODE_QUERY);
- gtk_widget_show (tag_query_entry);
-
editor = GIMP_CONTAINER_EDITOR (factory_view);
+ factory_view->query_tag_entry =
+ gimp_tag_entry_new (GIMP_FILTERED_CONTAINER (factory_view->filtered_container),
+ GIMP_TAG_ENTRY_MODE_QUERY);
+ gtk_widget_show (factory_view->query_tag_entry);
gtk_box_pack_start (GTK_BOX (editor->view),
- tag_query_entry,
+ factory_view->query_tag_entry,
FALSE, FALSE, 0);
gtk_box_reorder_child (GTK_BOX (editor->view),
- tag_query_entry, 0);
+ factory_view->query_tag_entry, 0);
+ factory_view->assign_tag_entry =
+ gimp_tag_entry_new (GIMP_FILTERED_CONTAINER (factory_view->filtered_container),
+ GIMP_TAG_ENTRY_MODE_ASSIGN);
+ gimp_tag_entry_set_selected_items (GIMP_TAG_ENTRY (factory_view->assign_tag_entry),
+ factory_view->selected_items);
+ g_list_free (factory_view->selected_items);
+ factory_view->selected_items = NULL;
+ gtk_widget_show (factory_view->assign_tag_entry);
+ gtk_box_pack_end (GTK_BOX (editor->view),
+ factory_view->assign_tag_entry,
+ FALSE, FALSE, 0);
return TRUE;
}
static void
+gimp_data_factory_view_select_item (GimpContainerEditor *editor,
+ GimpViewable *viewable)
+{
+ GimpDataFactoryView *view = GIMP_DATA_FACTORY_VIEW (editor);
+ GList *active_items = NULL;
+
+ if (GIMP_CONTAINER_EDITOR_CLASS (parent_class)->select_item)
+ GIMP_CONTAINER_EDITOR_CLASS (parent_class)->select_item (editor, viewable);
+
+ if (view->assign_tag_entry)
+ {
+ if (viewable)
+ {
+ active_items = g_list_append (active_items, viewable);
+ }
+ gimp_tag_entry_set_selected_items (GIMP_TAG_ENTRY (view->assign_tag_entry),
+ active_items);
+ g_list_free (active_items);
+ }
+ else
+ {
+ active_items = g_list_append (active_items, viewable);
+ }
+}
+
+static void
gimp_data_factory_view_activate_item (GimpContainerEditor *editor,
GimpViewable *viewable)
{
Modified: branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.h
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.h (original)
+++ branches/soc-2008-tagging/app/widgets/gimpdatafactoryview.h Mon Jun 30 19:57:29 2008
@@ -43,6 +43,10 @@
GimpDataFactory *factory;
GimpContainer *filtered_container;
+ GtkWidget *query_tag_entry;
+ GtkWidget *assign_tag_entry;
+ GList *selected_items;
+
GtkWidget *edit_button;
GtkWidget *new_button;
GtkWidget *duplicate_button;
Modified: branches/soc-2008-tagging/app/widgets/gimptagentry.c
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimptagentry.c (original)
+++ branches/soc-2008-tagging/app/widgets/gimptagentry.c Mon Jun 30 19:57:29 2008
@@ -31,15 +31,21 @@
#include "core/gimpfilteredcontainer.h"
#include "core/gimpcontext.h"
#include "core/gimpviewable.h"
+#include "core/gimptagged.h"
#include "gimptagentry.h"
-
+static void gimp_tag_entry_activate (GtkEntry *entry,
+ gpointer unused);
static void gimp_tag_entry_changed (GtkEntry *entry,
- GimpTagEntry *view);
+ gpointer unused);
static void gimp_tag_entry_query_tag (GimpTagEntry *entry);
+static void gimp_tag_entry_assign_tags (GimpTagEntry *tag_entry);
+static void gimp_tag_entry_item_set_tags (GimpTagged *entry,
+ GList *tags);
+
static gchar ** gimp_tag_entry_parse_tags (GimpTagEntry *entry);
G_DEFINE_TYPE (GimpTagEntry, gimp_tag_entry, GTK_TYPE_ENTRY);
@@ -50,15 +56,22 @@
static void
gimp_tag_entry_class_init (GimpTagEntryClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ /*GObjectClass *object_class = G_OBJECT_CLASS (klass);*/
}
static void
gimp_tag_entry_init (GimpTagEntry *entry)
{
+ entry->tagged_container = NULL;
+ entry->selected_items = NULL;
+ entry->mode = GIMP_TAG_ENTRY_MODE_QUERY;
+
+ g_signal_connect (entry, "activate",
+ G_CALLBACK (gimp_tag_entry_activate),
+ NULL);
g_signal_connect (entry, "changed",
G_CALLBACK (gimp_tag_entry_changed),
- entry);
+ NULL);
}
GtkWidget *
@@ -79,18 +92,30 @@
}
static void
+gimp_tag_entry_activate (GtkEntry *entry,
+ gpointer unused)
+{
+ GimpTagEntry *tag_entry;
+
+ tag_entry = GIMP_TAG_ENTRY (entry);
+
+ if (tag_entry->mode == GIMP_TAG_ENTRY_MODE_ASSIGN)
+ {
+ gimp_tag_entry_assign_tags (GIMP_TAG_ENTRY (entry));
+ }
+}
+
+static void
gimp_tag_entry_changed (GtkEntry *entry,
- GimpTagEntry *view)
+ gpointer unused)
{
GimpTagEntry *tag_entry;
tag_entry = GIMP_TAG_ENTRY (entry);
- switch (tag_entry->mode)
+ if (tag_entry->mode == GIMP_TAG_ENTRY_MODE_QUERY)
{
- case GIMP_TAG_ENTRY_MODE_QUERY:
- gimp_tag_entry_query_tag (entry);
- break;
+ gimp_tag_entry_query_tag (GIMP_TAG_ENTRY (entry));
}
}
@@ -120,6 +145,65 @@
query_list);
}
+static void
+gimp_tag_entry_assign_tags (GimpTagEntry *tag_entry)
+{
+ GList *selected_iterator = NULL;
+ GimpTagged *selected_item;
+ gchar **parsed_tags;
+ gint count;
+ gint i;
+ GimpTag tag;
+ GList *tag_list = NULL;
+
+ parsed_tags = gimp_tag_entry_parse_tags (tag_entry);
+ count = g_strv_length (parsed_tags);
+ for (i = 0; i < count; i++)
+ {
+ if (strlen (parsed_tags[i]) > 0)
+ {
+ tag = g_quark_from_string (parsed_tags[i]);
+ tag_list = g_list_append (tag_list, GUINT_TO_POINTER (tag));
+ }
+ }
+ g_strfreev (parsed_tags);
+
+ selected_iterator = tag_entry->selected_items;
+ while (selected_iterator)
+ {
+ selected_item = GIMP_TAGGED (selected_iterator->data);
+ gimp_tag_entry_item_set_tags (selected_item, tag_list);
+ selected_iterator = g_list_next (selected_iterator);
+ }
+ g_list_free (tag_list);
+}
+
+static void
+gimp_tag_entry_item_set_tags (GimpTagged *tagged,
+ GList *tags)
+{
+ GList *old_tags;
+ GList *tags_iterator;
+
+ old_tags = g_list_copy (gimp_tagged_get_tags (tagged));
+ tags_iterator = old_tags;
+ while (tags_iterator)
+ {
+ gimp_tagged_remove_tag (tagged,
+ GPOINTER_TO_UINT (tags_iterator->data));
+ tags_iterator = g_list_next (tags_iterator);
+ }
+ g_list_free (old_tags);
+
+ tags_iterator = tags;
+ while (tags_iterator)
+ {
+ printf ("tagged: %s\n", g_quark_to_string (GPOINTER_TO_UINT (tags_iterator->data)));
+ gimp_tagged_add_tag (tagged, GPOINTER_TO_UINT (tags_iterator->data));
+ tags_iterator = g_list_next (tags_iterator);
+ }
+}
+
static gchar **
gimp_tag_entry_parse_tags (GimpTagEntry *entry)
{
@@ -129,7 +213,7 @@
gint length;
gint i;
- tag_str = gtk_entry_get_text (GIMP_TAG_ENTRY (entry));
+ tag_str = gtk_entry_get_text (GTK_ENTRY (entry));
split_tags = g_strsplit (tag_str, ",", 0);
length = g_strv_length (split_tags);
parsed_tags = g_malloc ((length + 1) * sizeof (gchar **));
@@ -143,3 +227,16 @@
return parsed_tags;
}
+void
+gimp_tag_entry_set_selected_items (GimpTagEntry *entry,
+ GList *items)
+{
+ if (entry->selected_items)
+ {
+ g_list_free (entry->selected_items);
+ entry->selected_items = NULL;
+ }
+
+ entry->selected_items = g_list_copy (items);
+}
+
Modified: branches/soc-2008-tagging/app/widgets/gimptagentry.h
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimptagentry.h (original)
+++ branches/soc-2008-tagging/app/widgets/gimptagentry.h Mon Jun 30 19:57:29 2008
@@ -34,7 +34,7 @@
typedef enum
{
GIMP_TAG_ENTRY_MODE_QUERY,
- GIMP_TAG_ENTRY_MODE_ENTER,
+ GIMP_TAG_ENTRY_MODE_ASSIGN,
} GimpTagEntryMode;
typedef struct _GimpTagEntryClass GimpTagEntryClass;
@@ -44,6 +44,7 @@
GtkEntry parent_instance;
GimpFilteredContainer *tagged_container;
+ GList *selected_items;
GimpTagEntryMode mode;
};
@@ -58,5 +59,8 @@
GtkWidget * gimp_tag_entry_new (GimpFilteredContainer *tagged_container,
GimpTagEntryMode mode);
+void gimp_tag_entry_set_selected_items (GimpTagEntry *tag_entry,
+ GList *items);
+
#endif /* __GIMP_TAG_ENTRY_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]