app: Add methods to enable multiple selection in GimpContainerView

Enable multiple selection in GimpDataFactoryView now. It remains
disabled everywhere else.
This commit is contained in:
Aurimas Juška 2010-03-11 17:40:00 +02:00
parent 9e2723d390
commit b46a89a302
6 changed files with 92 additions and 0 deletions

View file

@ -184,6 +184,19 @@ gimp_container_editor_construct (GimpContainerEditor *editor,
return TRUE;
}
gboolean
gimp_container_editor_get_multiple_selection (GimpContainerEditor *editor)
{
return gimp_container_view_get_multiple_selection (GIMP_CONTAINER_VIEW (editor->view));
}
void
gimp_container_editor_set_multiple_selection (GimpContainerEditor *editor,
gboolean value)
{
gimp_container_view_set_multiple_selection (GIMP_CONTAINER_VIEW (editor->view),
value);
}
/* private functions */

View file

@ -54,6 +54,10 @@ struct _GimpContainerEditorClass
GType gimp_container_editor_get_type (void) G_GNUC_CONST;
gboolean gimp_container_editor_get_multiple_selection (GimpContainerEditor *editor);
void gimp_container_editor_set_multiple_selection (GimpContainerEditor *editor,
gboolean value);
/* protected */

View file

@ -57,6 +57,9 @@ static void gimp_container_tree_view_set_container (GimpContainerVi
GimpContainer *container);
static void gimp_container_tree_view_set_context (GimpContainerView *view,
GimpContext *context);
static void gimp_container_tree_view_set_multiple_selection (GimpContainerView *view,
gboolean value);
static gpointer gimp_container_tree_view_insert_item (GimpContainerView *view,
GimpViewable *viewable,
gpointer parent_insert_data,
@ -143,8 +146,12 @@ gimp_container_tree_view_view_iface_init (GimpContainerViewInterface *iface)
{
parent_view_iface = g_type_interface_peek_parent (iface);
if (! parent_view_iface)
parent_view_iface = g_type_default_interface_peek (GIMP_TYPE_CONTAINER_VIEW);
iface->set_container = gimp_container_tree_view_set_container;
iface->set_context = gimp_container_tree_view_set_context;
iface->set_multiple_selection = gimp_container_tree_view_set_multiple_selection;
iface->insert_item = gimp_container_tree_view_insert_item;
iface->remove_item = gimp_container_tree_view_remove_item;
iface->reorder_item = gimp_container_tree_view_reorder_item;
@ -607,6 +614,19 @@ gimp_container_tree_view_set_context (GimpContainerView *view,
}
}
static void
gimp_container_tree_view_set_multiple_selection (GimpContainerView *view,
gboolean value)
{
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view);
gtk_tree_selection_set_mode (tree_view->priv->selection,
value ? GTK_SELECTION_MULTIPLE :
GTK_SELECTION_NONE);
parent_view_iface->set_multiple_selection (view, value);
}
static gpointer
gimp_container_tree_view_insert_item (GimpContainerView *view,
GimpViewable *viewable,

View file

@ -65,6 +65,7 @@ struct _GimpContainerViewPrivate
gint view_size;
gint view_border_width;
gboolean reorderable;
gboolean multiple_selection;
/* initialized by subclass */
GtkWidget *dnd_widget;
@ -82,6 +83,8 @@ static void gimp_container_view_real_set_container (GimpContainerView *view,
GimpContainer *container);
static void gimp_container_view_real_set_context (GimpContainerView *view,
GimpContext *context);
static void gimp_container_view_real_set_multiple_selection (GimpContainerView *view,
gboolean value);
static void gimp_container_view_clear_items (GimpContainerView *view);
static void gimp_container_view_real_clear_items (GimpContainerView *view);
@ -207,6 +210,7 @@ gimp_container_view_iface_base_init (GimpContainerViewInterface *view_iface)
view_iface->set_container = gimp_container_view_real_set_container;
view_iface->set_context = gimp_container_view_real_set_context;
view_iface->set_multiple_selection = gimp_container_view_real_set_multiple_selection;
view_iface->insert_item = NULL;
view_iface->insert_item_after = NULL;
view_iface->remove_item = NULL;
@ -231,6 +235,12 @@ gimp_container_view_iface_base_init (GimpContainerViewInterface *view_iface)
GIMP_TYPE_CONTEXT,
GIMP_PARAM_READWRITE));
g_object_interface_install_property (view_iface,
g_param_spec_boolean ("multiple-selection",
NULL, NULL,
FALSE,
GIMP_PARAM_READWRITE));
g_object_interface_install_property (view_iface,
g_param_spec_boolean ("reorderable",
NULL, NULL,
@ -338,6 +348,9 @@ gimp_container_view_install_properties (GObjectClass *klass)
g_object_class_override_property (klass,
GIMP_CONTAINER_VIEW_PROP_CONTEXT,
"context");
g_object_class_override_property (klass,
GIMP_CONTAINER_VIEW_PROP_MULTIPLE_SELECTION,
"multiple-selection");
g_object_class_override_property (klass,
GIMP_CONTAINER_VIEW_PROP_REORDERABLE,
"reorderable");
@ -486,6 +499,32 @@ gimp_container_view_real_set_context (GimpContainerView *view,
}
}
gboolean
gimp_container_view_get_multiple_selection (GimpContainerView *view)
{
GimpContainerViewPrivate *private = GIMP_CONTAINER_VIEW_GET_PRIVATE (view);
return private->multiple_selection;
}
void
gimp_container_view_set_multiple_selection (GimpContainerView *view,
gboolean value)
{
g_return_if_fail (GIMP_IS_CONTAINER_VIEW (view));
GIMP_CONTAINER_VIEW_GET_INTERFACE (view)->set_multiple_selection (view, value);
}
static void
gimp_container_view_real_set_multiple_selection (GimpContainerView *view,
gboolean value)
{
GimpContainerViewPrivate *private = GIMP_CONTAINER_VIEW_GET_PRIVATE (view);
private->multiple_selection = value;
}
gint
gimp_container_view_get_view_size (GimpContainerView *view,
gint *view_border_width)
@ -839,6 +878,9 @@ gimp_container_view_set_property (GObject *object,
case GIMP_CONTAINER_VIEW_PROP_CONTEXT:
gimp_container_view_set_context (view, g_value_get_object (value));
break;
case GIMP_CONTAINER_VIEW_PROP_MULTIPLE_SELECTION:
gimp_container_view_set_multiple_selection (view, g_value_get_boolean (value));
break;
case GIMP_CONTAINER_VIEW_PROP_REORDERABLE:
gimp_container_view_set_reorderable (view, g_value_get_boolean (value));
break;
@ -879,6 +921,9 @@ gimp_container_view_get_property (GObject *object,
case GIMP_CONTAINER_VIEW_PROP_CONTEXT:
g_value_set_object (value, gimp_container_view_get_context (view));
break;
case GIMP_CONTAINER_VIEW_PROP_MULTIPLE_SELECTION:
g_value_set_boolean (value, gimp_container_view_get_multiple_selection (view));
break;
case GIMP_CONTAINER_VIEW_PROP_REORDERABLE:
g_value_set_boolean (value, gimp_container_view_get_reorderable (view));
break;

View file

@ -27,6 +27,7 @@ typedef enum
GIMP_CONTAINER_VIEW_PROP_0,
GIMP_CONTAINER_VIEW_PROP_CONTAINER,
GIMP_CONTAINER_VIEW_PROP_CONTEXT,
GIMP_CONTAINER_VIEW_PROP_MULTIPLE_SELECTION,
GIMP_CONTAINER_VIEW_PROP_REORDERABLE,
GIMP_CONTAINER_VIEW_PROP_VIEW_SIZE,
GIMP_CONTAINER_VIEW_PROP_VIEW_BORDER_WIDTH,
@ -62,6 +63,9 @@ struct _GimpContainerViewInterface
GimpContainer *container);
void (* set_context) (GimpContainerView *view,
GimpContext *context);
void (* set_multiple_selection) (GimpContainerView *view,
gboolean value);
gpointer (* insert_item) (GimpContainerView *view,
GimpViewable *object,
gpointer parent_insert_data,
@ -101,6 +105,10 @@ GimpContext * gimp_container_view_get_context (GimpContainerView *view);
void gimp_container_view_set_context (GimpContainerView *view,
GimpContext *context);
gboolean gimp_container_view_get_multiple_selection (GimpContainerView *view);
void gimp_container_view_set_multiple_selection (GimpContainerView *view,
gboolean value);
gint gimp_container_view_get_view_size (GimpContainerView *view,
gint *view_border_width);
void gimp_container_view_set_view_size (GimpContainerView *view,

View file

@ -239,6 +239,8 @@ gimp_data_factory_view_construct (GimpDataFactoryView *factory_view,
editor = GIMP_CONTAINER_EDITOR (factory_view);
gimp_container_editor_set_multiple_selection (editor, TRUE);
if (GIMP_IS_CONTAINER_TREE_VIEW (editor->view))
{
GimpContainerTreeView *tree_view;