removed typedefs from the widgets/ subdir.

2001-05-03  Michael Natterer  <mitch@gimp.org>

	* app/apptypes.h: removed typedefs from the widgets/ subdir.

	* app/widgets/Makefile.am
	* app/widgets/widgets-types.h: new file.

	* app/widgets/gimpcontainermenu.[ch]
	* app/widgets/gimpcontainerview.[ch]: synced them again and added a
	"get_name_func"

	* app/widgets/gimplistitem.[ch]
	* app/widgets/gimpmenuitem.[ch]: add a "get_name_func" and use it
	to get the item's name.

	* app/widgets/gimpcontainerlistview.c
	* app/widgets/gimpcontainermenuimpl.c: pass the get_name_func to
	the created items.

	* app/widgets/gimpchannellistview.c: gtk_widget_queue_resize() the
	component frame after changing the image.

	* app/widgets/gimpcomponentlistitem.c: set a custom
	get_name_func() so the components are named Red, Green, ... again.

	* app/widgets/gimpimagedock.c: set a custom get_name_func() which
	returns names like in the old L&C dialog's image menu.

	* tools/pdbgen/Makefile.am: don't scan apptypes.h for enums.
This commit is contained in:
Michael Natterer 2001-05-03 22:19:17 +00:00 committed by Michael Natterer
parent 07b8ffd4bd
commit f5f8acf34e
20 changed files with 447 additions and 131 deletions

View File

@ -1,3 +1,33 @@
2001-05-03 Michael Natterer <mitch@gimp.org>
* app/apptypes.h: removed typedefs from the widgets/ subdir.
* app/widgets/Makefile.am
* app/widgets/widgets-types.h: new file.
* app/widgets/gimpcontainermenu.[ch]
* app/widgets/gimpcontainerview.[ch]: synced them again and added a
"get_name_func"
* app/widgets/gimplistitem.[ch]
* app/widgets/gimpmenuitem.[ch]: add a "get_name_func" and use it
to get the item's name.
* app/widgets/gimpcontainerlistview.c
* app/widgets/gimpcontainermenuimpl.c: pass the get_name_func to
the created items.
* app/widgets/gimpchannellistview.c: gtk_widget_queue_resize() the
component frame after changing the image.
* app/widgets/gimpcomponentlistitem.c: set a custom
get_name_func() so the components are named Red, Green, ... again.
* app/widgets/gimpimagedock.c: set a custom get_name_func() which
returns names like in the old L&C dialog's image menu.
* tools/pdbgen/Makefile.am: don't scan apptypes.h for enums.
2001-05-03 Michael Natterer <mitch@gimp.org>
* app/app_procs.c: don't #include "gui/color-select.h"

View File

@ -29,6 +29,10 @@
#include "appenums.h"
#ifdef __GTK_H__
#include "widgets/widgets-types.h"
#endif
/* base objects */
@ -91,48 +95,6 @@ typedef struct _GimpUndo GimpUndo;
typedef struct _GimpUndoStack GimpUndoStack;
/* gui objects */
typedef struct _GimpDialogFactory GimpDialogFactory;
/* widgets */
typedef struct _GimpPreview GimpPreview;
typedef struct _GimpImagePreview GimpImagePreview;
typedef struct _GimpDrawablePreview GimpDrawablePreview;
typedef struct _GimpBrushPreview GimpBrushPreview;
typedef struct _GimpPatternPreview GimpPatternPreview;
typedef struct _GimpPalettePreview GimpPalettePreview;
typedef struct _GimpGradientPreview GimpGradientPreview;
typedef struct _GimpToolInfoPreview GimpToolInfoPreview;
typedef struct _GimpContainerMenu GimpContainerMenu;
typedef struct _GimpContainerMenuImpl GimpContainerMenuImpl;
typedef struct _GimpMenuItem GimpMenuItem;
typedef struct _GimpContainerView GimpContainerView;
typedef struct _GimpContainerListView GimpContainerListView;
typedef struct _GimpContainerGridView GimpContainerGridView;
typedef struct _GimpDataFactoryView GimpDataFactoryView;
typedef struct _GimpDrawableListView GimpDrawableListView;
typedef struct _GimpLayerListView GimpLayerListView;
typedef struct _GimpChannelListView GimpChannelListView;
typedef struct _GimpListItem GimpListItem;
typedef struct _GimpDrawableListItem GimpDrawableListItem;
typedef struct _GimpLayerListItem GimpLayerListItem;
typedef struct _GimpComponentListItem GimpComponentListItem;
typedef struct _GimpDock GimpDock;
typedef struct _GimpImageDock GimpImageDock;
typedef struct _GimpDockable GimpDockable;
typedef struct _GimpDockbook GimpDockbook;
typedef struct _HistogramWidget HistogramWidget;
/* other stuff */
typedef struct _Argument Argument;

View File

@ -68,7 +68,8 @@ libappwidgets_la_SOURCES = \
gtkvwrapbox.c \
gtkvwrapbox.h \
gimpconstrainedhwrapbox.c \
gimpconstrainedhwrapbox.h
gimpconstrainedhwrapbox.h \
widgets-types.h
AM_CPPFLAGS = \
-DG_LOG_DOMAIN=\"Gimp-Widgets\"

View File

@ -333,4 +333,6 @@ gimp_channel_list_view_create_components (GimpChannelListView *view)
}
gtk_list_insert_items (GTK_LIST (view->component_list), list, 0);
gtk_widget_queue_resize (GTK_WIDGET (view->component_frame));
}

View File

@ -333,4 +333,6 @@ gimp_channel_list_view_create_components (GimpChannelListView *view)
}
gtk_list_insert_items (GTK_LIST (view->component_list), list, 0);
gtk_widget_queue_resize (GTK_WIDGET (view->component_frame));
}

View File

@ -37,27 +37,31 @@
#include "gimpimagepreview.h"
#include "gimppreview.h"
#include "libgimp/gimpintl.h"
#include "pixmaps/eye.xpm"
static void gimp_component_list_item_class_init (GimpComponentListItemClass *klass);
static void gimp_component_list_item_init (GimpComponentListItem *list_item);
static void gimp_component_list_item_class_init (GimpComponentListItemClass *klass);
static void gimp_component_list_item_init (GimpComponentListItem *list_item);
static void gimp_component_list_item_set_viewable (GimpListItem *list_item,
GimpViewable *viewable);
static void gimp_component_list_item_set_viewable (GimpListItem *list_item,
GimpViewable *viewable);
static void gimp_component_list_item_eye_toggled (GtkWidget *widget,
gpointer data);
static void gimp_component_list_item_eye_toggled (GtkWidget *widget,
gpointer data);
static void gimp_component_list_item_visibility_changed (GimpImage *gimage,
ChannelType channel,
gpointer data);
static void gimp_component_list_item_visibility_changed (GimpImage *gimage,
ChannelType channel,
gpointer data);
static void gimp_component_list_item_state_changed (GtkWidget *widget,
GtkStateType previous_state);
static void gimp_component_list_item_active_changed (GimpImage *gimage,
ChannelType channel,
gpointer data);
static void gimp_component_list_item_state_changed (GtkWidget *widget,
GtkStateType previous_state);
static void gimp_component_list_item_active_changed (GimpImage *gimage,
ChannelType channel,
gpointer data);
static gchar * gimp_component_list_item_get_name (GtkWidget *widget);
static GimpListItemClass *parent_class = NULL;
@ -152,7 +156,8 @@ gimp_component_list_item_new (GimpImage *gimage,
list_item = gtk_type_new (GIMP_TYPE_COMPONENT_LIST_ITEM);
list_item->preview_size = preview_size;
list_item->preview_size = preview_size;
list_item->get_name_func = gimp_component_list_item_get_name;
GIMP_COMPONENT_LIST_ITEM (list_item)->channel = channel;
@ -399,3 +404,22 @@ gimp_component_list_item_active_changed (GimpImage *gimage,
else
gtk_item_deselect (GTK_ITEM (data));
}
static gchar *
gimp_component_list_item_get_name (GtkWidget *widget)
{
GimpComponentListItem *component_item;
component_item = GIMP_COMPONENT_LIST_ITEM (widget);
switch (component_item->channel)
{
case RED_CHANNEL: return g_strdup (_("Red")); break;
case GREEN_CHANNEL: return g_strdup (_("Green")); break;
case BLUE_CHANNEL: return g_strdup (_("Blue")); break;
case GRAY_CHANNEL: return g_strdup (_("Gray")); break;
case INDEXED_CHANNEL: return g_strdup (_("Indexed")); break;
case ALPHA_CHANNEL: return g_strdup (_("Alpha")); break;
default: return g_strdup ("EEK"); break;
}
}

View File

@ -219,6 +219,9 @@ gimp_container_list_view_insert_item (GimpContainerView *view,
list_item = gimp_list_item_new (viewable, view->preview_size);
gimp_list_item_set_name_func (GIMP_LIST_ITEM (list_item),
view->get_name_func);
gtk_signal_connect (GTK_OBJECT (list_item), "button_press_event",
GTK_SIGNAL_FUNC (gimp_container_list_view_item_activated),
list_view);

View File

@ -40,6 +40,7 @@ enum
REORDER_ITEM,
SELECT_ITEM,
ACTIVATE_ITEM,
CONTEXT_ITEM,
CLEAR_ITEMS,
SET_PREVIEW_SIZE,
LAST_SIGNAL
@ -179,6 +180,17 @@ gimp_container_menu_class_init (GimpContainerMenuClass *klass)
GIMP_TYPE_OBJECT,
GTK_TYPE_POINTER);
menu_signals[CONTEXT_ITEM] =
gtk_signal_new ("context_item",
GTK_RUN_FIRST,
object_class->type,
GTK_SIGNAL_OFFSET (GimpContainerMenuClass,
context_item),
gtk_marshal_NONE__POINTER_POINTER,
GTK_TYPE_NONE, 2,
GIMP_TYPE_OBJECT,
GTK_TYPE_POINTER);
menu_signals[CLEAR_ITEMS] =
gtk_signal_new ("clear_items",
GTK_RUN_FIRST,
@ -207,6 +219,7 @@ gimp_container_menu_class_init (GimpContainerMenuClass *klass)
klass->reorder_item = NULL;
klass->select_item = NULL;
klass->activate_item = NULL;
klass->context_item = NULL;
klass->clear_items = gimp_container_menu_real_clear_items;
klass->set_preview_size = NULL;
}
@ -379,9 +392,25 @@ gimp_container_menu_set_preview_size (GimpContainerMenu *menu,
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (preview_size > 0 && preview_size <= 256 /* FIXME: 64 */);
menu->preview_size = preview_size;
if (menu->preview_size != preview_size)
{
menu->preview_size = preview_size;
gtk_signal_emit (GTK_OBJECT (menu), menu_signals[SET_PREVIEW_SIZE]);
gtk_signal_emit (GTK_OBJECT (menu), menu_signals[SET_PREVIEW_SIZE]);
}
}
void
gimp_container_menu_set_name_func (GimpContainerMenu *menu,
GimpItemGetNameFunc get_name_func)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
if (menu->get_name_func != get_name_func)
{
menu->get_name_func = get_name_func;
}
}
void
@ -417,6 +446,23 @@ gimp_container_menu_activate_item (GimpContainerMenu *menu,
viewable, insert_data);
}
void
gimp_container_menu_context_item (GimpContainerMenu *menu,
GimpViewable *viewable)
{
gpointer insert_data;
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
insert_data = g_hash_table_lookup (menu->hash_table, viewable);
gtk_signal_emit (GTK_OBJECT (menu), menu_signals[CONTEXT_ITEM],
viewable, insert_data);
}
void
gimp_container_menu_item_selected (GimpContainerMenu *menu,
GimpViewable *viewable)
@ -448,6 +494,18 @@ gimp_container_menu_item_activated (GimpContainerMenu *menu,
gimp_container_menu_activate_item (menu, viewable);
}
void
gimp_container_menu_item_context (GimpContainerMenu *menu,
GimpViewable *viewable)
{
g_return_if_fail (menu != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_MENU (menu));
g_return_if_fail (viewable != NULL);
g_return_if_fail (GIMP_IS_VIEWABLE (viewable));
gimp_container_menu_context_item (menu, viewable);
}
static void
gimp_container_menu_clear_items (GimpContainerMenu *menu)
{

View File

@ -40,14 +40,16 @@ typedef struct _GimpContainerMenuClass GimpContainerMenuClass;
struct _GimpContainerMenu
{
GtkMenu parent_instance;
GtkMenu parent_instance;
GimpContainer *container;
GimpContext *context;
GimpContainer *container;
GimpContext *context;
GHashTable *hash_table;
GHashTable *hash_table;
gint preview_size;
gint preview_size;
GimpItemGetNameFunc get_name_func;
};
struct _GimpContainerMenuClass
@ -72,6 +74,9 @@ struct _GimpContainerMenuClass
void (* activate_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* context_item) (GimpContainerMenu *menu,
GimpViewable *object,
gpointer insert_data);
void (* clear_items) (GimpContainerMenu *menu);
void (* set_preview_size) (GimpContainerMenu *menu);
};
@ -79,16 +84,21 @@ struct _GimpContainerMenuClass
GtkType gimp_container_menu_get_type (void);
void gimp_container_menu_set_container (GimpContainerMenu *menu,
GimpContainer *container);
void gimp_container_menu_set_context (GimpContainerMenu *menu,
GimpContext *context);
void gimp_container_menu_set_preview_size (GimpContainerMenu *menu,
gint preview_size);
void gimp_container_menu_select_item (GimpContainerMenu *menu,
GimpViewable *viewable);
void gimp_container_menu_activate_item (GimpContainerMenu *menu,
GimpViewable *viewable);
void gimp_container_menu_set_container (GimpContainerMenu *menu,
GimpContainer *container);
void gimp_container_menu_set_context (GimpContainerMenu *menu,
GimpContext *context);
void gimp_container_menu_set_preview_size (GimpContainerMenu *menu,
gint preview_size);
void gimp_container_menu_set_name_func (GimpContainerMenu *menu,
GimpItemGetNameFunc get_name_func);
void gimp_container_menu_select_item (GimpContainerMenu *menu,
GimpViewable *viewable);
void gimp_container_menu_activate_item (GimpContainerMenu *menu,
GimpViewable *viewable);
void gimp_container_menu_context_item (GimpContainerMenu *menu,
GimpViewable *viewable);
/* private */
@ -97,6 +107,8 @@ void gimp_container_menu_item_selected (GimpContainerMenu *menu,
GimpViewable *item);
void gimp_container_menu_item_activated (GimpContainerMenu *menu,
GimpViewable *item);
void gimp_container_menu_item_context (GimpContainerMenu *menu,
GimpViewable *item);
#endif /* __GIMP_CONTAINER_MENU_H__ */

View File

@ -179,6 +179,9 @@ gimp_container_menu_impl_insert_item (GimpContainerMenu *menu,
menu_item = gimp_menu_item_new (viewable, menu->preview_size);
gimp_menu_item_set_name_func (GIMP_MENU_ITEM (menu_item),
menu->get_name_func);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
GTK_SIGNAL_FUNC (gimp_container_menu_impl_item_selected),
menu);

View File

@ -421,9 +421,25 @@ gimp_container_view_set_preview_size (GimpContainerView *view,
g_return_if_fail (GIMP_IS_CONTAINER_VIEW (view));
g_return_if_fail (preview_size > 0 && preview_size <= 256 /* FIXME: 64 */);
view->preview_size = preview_size;
if (view->preview_size != preview_size)
{
view->preview_size = preview_size;
gtk_signal_emit (GTK_OBJECT (view), view_signals[SET_PREVIEW_SIZE]);
gtk_signal_emit (GTK_OBJECT (view), view_signals[SET_PREVIEW_SIZE]);
}
}
void
gimp_container_view_set_name_func (GimpContainerView *view,
GimpItemGetNameFunc get_name_func)
{
g_return_if_fail (view != NULL);
g_return_if_fail (GIMP_IS_CONTAINER_VIEW (view));
if (view->get_name_func != get_name_func)
{
view->get_name_func = get_name_func;
}
}
void

View File

@ -37,14 +37,16 @@ typedef struct _GimpContainerViewClass GimpContainerViewClass;
struct _GimpContainerView
{
GtkVBox parent_instance;
GtkVBox parent_instance;
GimpContainer *container;
GimpContext *context;
GimpContainer *container;
GimpContext *context;
GHashTable *hash_table;
GHashTable *hash_table;
gint preview_size;
gint preview_size;
GimpItemGetNameFunc get_name_func;
};
struct _GimpContainerViewClass
@ -85,6 +87,9 @@ void gimp_container_view_set_context (GimpContainerView *view,
GimpContext *context);
void gimp_container_view_set_preview_size (GimpContainerView *view,
gint preview_size);
void gimp_container_view_set_name_func (GimpContainerView *view,
GimpItemGetNameFunc get_name_func);
void gimp_container_view_select_item (GimpContainerView *view,
GimpViewable *viewable);
void gimp_container_view_activate_item (GimpContainerView *view,

View File

@ -31,6 +31,8 @@
#include "gimpimagedock.h"
#include "gimpcontainermenuimpl.h"
#include "gimpdockbook.h"
#include "gimpmenuitem.h"
#include "gimppreview.h"
#include "gimpcontainer.h"
#include "gimpcontext.h"
@ -142,6 +144,24 @@ gimp_image_dock_destroy (GtkObject *object)
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
static gchar *
gimp_image_dock_image_name_func (GtkWidget *widget)
{
GimpMenuItem *menu_item;
GimpImage *gimage;
gchar *name;
menu_item = GIMP_MENU_ITEM (widget);
gimage = GIMP_IMAGE (GIMP_PREVIEW (menu_item->preview)->viewable);
name = g_strdup_printf ("%s-%d",
g_basename (gimp_image_filename (gimage)),
gimp_image_get_ID (gimage));
return name;
}
GtkWidget *
gimp_image_dock_new (GimpDialogFactory *factory,
GimpContainer *image_container)
@ -183,8 +203,12 @@ gimp_image_dock_new (GimpDialogFactory *factory,
dock,
GTK_OBJECT (dock));
image_dock->menu = gimp_container_menu_new (image_container,
image_dock->menu = gimp_container_menu_new (NULL,
dock->context, 24);
gimp_container_menu_set_name_func (GIMP_CONTAINER_MENU (image_dock->menu),
gimp_image_dock_image_name_func);
gimp_container_menu_set_container (GIMP_CONTAINER_MENU (image_dock->menu),
image_container);
gtk_option_menu_set_menu (GTK_OPTION_MENU (image_dock->option_menu),
image_dock->menu);
gtk_widget_show (image_dock->menu);

View File

@ -67,7 +67,7 @@ static gboolean gimp_list_item_drag_drop (GtkWidget *widget,
guint time);
static void gimp_list_item_name_changed (GimpViewable *viewable,
GtkLabel *label);
GimpListItem *list_item);
static GimpViewable * gimp_list_item_drag_viewable (GtkWidget *widget,
gpointer data);
@ -139,14 +139,15 @@ gimp_list_item_init (GimpListItem *list_item)
gtk_container_add (GTK_CONTAINER (list_item), list_item->hbox);
gtk_widget_show (list_item->hbox);
list_item->preview = NULL;
list_item->name_label = NULL;
list_item->preview = NULL;
list_item->name_label = NULL;
list_item->preview_size = 0;
list_item->preview_size = 0;
list_item->reorderable = FALSE;
list_item->drop_type = GIMP_DROP_NONE;
list_item->container = NULL;
list_item->reorderable = FALSE;
list_item->drop_type = GIMP_DROP_NONE;
list_item->container = NULL;
list_item->get_name_func = NULL;
}
static void
@ -305,16 +306,17 @@ gimp_list_item_real_set_viewable (GimpListItem *list_item,
FALSE, FALSE, 0);
gtk_widget_show (list_item->preview);
list_item->name_label =
gtk_label_new (gimp_object_get_name (GIMP_OBJECT (viewable)));
list_item->name_label = gtk_label_new (NULL);
gtk_box_pack_start (GTK_BOX (list_item->hbox), list_item->name_label,
FALSE, FALSE, 0);
gtk_widget_show (list_item->name_label);
gimp_list_item_name_changed (viewable, list_item);
gtk_signal_connect_while_alive (GTK_OBJECT (viewable), "name_changed",
GTK_SIGNAL_FUNC (gimp_list_item_name_changed),
list_item->name_label,
GTK_OBJECT (list_item->name_label));
list_item,
GTK_OBJECT (list_item));
gimp_gtk_drag_source_set_by_type (GTK_WIDGET (list_item),
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -356,6 +358,26 @@ gimp_list_item_set_reorderable (GimpListItem *list_item,
}
}
void
gimp_list_item_set_name_func (GimpListItem *list_item,
GimpItemGetNameFunc get_name_func)
{
g_return_if_fail (list_item != NULL);
g_return_if_fail (GIMP_IS_LIST_ITEM (list_item));
if (list_item->get_name_func != get_name_func)
{
GimpViewable *viewable;
list_item->get_name_func = get_name_func;
viewable = GIMP_PREVIEW (list_item->preview)->viewable;
if (viewable)
gimp_list_item_name_changed (viewable, list_item);
}
}
gboolean
gimp_list_item_check_drag (GimpListItem *list_item,
GdkDragContext *context,
@ -468,9 +490,23 @@ gimp_list_item_button_state_changed (GtkWidget *widget,
static void
gimp_list_item_name_changed (GimpViewable *viewable,
GtkLabel *label)
GimpListItem *list_item)
{
gtk_label_set_text (label, gimp_object_get_name (GIMP_OBJECT (viewable)));
if (list_item->get_name_func)
{
gchar *name;
name = list_item->get_name_func (GTK_WIDGET (list_item));
gtk_label_set_text (GTK_LABEL (list_item->name_label), name);
g_free (name);
}
else
{
gtk_label_set_text (GTK_LABEL (list_item->name_label),
gimp_object_get_name (GIMP_OBJECT (viewable)));
}
}
static GimpViewable *

View File

@ -42,20 +42,21 @@ typedef struct _GimpListItemClass GimpListItemClass;
struct _GimpListItem
{
GtkListItem parent_instance;
GtkListItem parent_instance;
GtkWidget *hbox;
GtkWidget *hbox;
GtkWidget *preview;
GtkWidget *name_label;
GtkWidget *preview;
GtkWidget *name_label;
/*< protected >*/
gint preview_size;
gint preview_size;
/*< private >*/
gboolean reorderable;
GimpContainer *container;
GimpDropType drop_type;
gboolean reorderable;
GimpContainer *container;
GimpDropType drop_type;
GimpItemGetNameFunc get_name_func;
};
struct _GimpListItemClass
@ -68,14 +69,16 @@ struct _GimpListItemClass
GtkType gimp_list_item_get_type (void);
GtkWidget * gimp_list_item_new (GimpViewable *viewable,
gint preview_size);
GtkWidget * gimp_list_item_new (GimpViewable *viewable,
gint preview_size);
void gimp_list_item_set_viewable (GimpListItem *list_item,
GimpViewable *viewable);
void gimp_list_item_set_reorderable (GimpListItem *list_item,
gboolean reorderable,
GimpContainer *container);
void gimp_list_item_set_viewable (GimpListItem *list_item,
GimpViewable *viewable);
void gimp_list_item_set_reorderable (GimpListItem *list_item,
gboolean reorderable,
GimpContainer *container);
void gimp_list_item_set_name_func (GimpListItem *list_item,
GimpItemGetNameFunc get_name_func);
/* protected */

View File

@ -31,6 +31,8 @@
#include "gimpimagedock.h"
#include "gimpcontainermenuimpl.h"
#include "gimpdockbook.h"
#include "gimpmenuitem.h"
#include "gimppreview.h"
#include "gimpcontainer.h"
#include "gimpcontext.h"
@ -142,6 +144,24 @@ gimp_image_dock_destroy (GtkObject *object)
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
static gchar *
gimp_image_dock_image_name_func (GtkWidget *widget)
{
GimpMenuItem *menu_item;
GimpImage *gimage;
gchar *name;
menu_item = GIMP_MENU_ITEM (widget);
gimage = GIMP_IMAGE (GIMP_PREVIEW (menu_item->preview)->viewable);
name = g_strdup_printf ("%s-%d",
g_basename (gimp_image_filename (gimage)),
gimp_image_get_ID (gimage));
return name;
}
GtkWidget *
gimp_image_dock_new (GimpDialogFactory *factory,
GimpContainer *image_container)
@ -183,8 +203,12 @@ gimp_image_dock_new (GimpDialogFactory *factory,
dock,
GTK_OBJECT (dock));
image_dock->menu = gimp_container_menu_new (image_container,
image_dock->menu = gimp_container_menu_new (NULL,
dock->context, 24);
gimp_container_menu_set_name_func (GIMP_CONTAINER_MENU (image_dock->menu),
gimp_image_dock_image_name_func);
gimp_container_menu_set_container (GIMP_CONTAINER_MENU (image_dock->menu),
image_container);
gtk_option_menu_set_menu (GTK_OPTION_MENU (image_dock->option_menu),
image_dock->menu);
gtk_widget_show (image_dock->menu);

View File

@ -50,7 +50,7 @@ static void gimp_menu_item_real_set_viewable (GimpMenuItem *menu_item
GimpViewable *viewable);
static void gimp_menu_item_name_changed (GimpViewable *viewable,
GtkLabel *label);
GimpMenuItem *menu_item);
static GimpViewable * gimp_menu_item_drag_viewable (GtkWidget *widget,
gpointer data);
@ -114,10 +114,11 @@ gimp_menu_item_init (GimpMenuItem *menu_item)
gtk_container_add (GTK_CONTAINER (menu_item), menu_item->hbox);
gtk_widget_show (menu_item->hbox);
menu_item->preview = NULL;
menu_item->name_label = NULL;
menu_item->preview = NULL;
menu_item->name_label = NULL;
menu_item->preview_size = 0;
menu_item->preview_size = 0;
menu_item->get_name_func = NULL;
}
GtkWidget *
@ -157,16 +158,17 @@ gimp_menu_item_real_set_viewable (GimpMenuItem *menu_item,
FALSE, FALSE, 0);
gtk_widget_show (menu_item->preview);
menu_item->name_label =
gtk_label_new (gimp_object_get_name (GIMP_OBJECT (viewable)));
menu_item->name_label = gtk_label_new (NULL);
gtk_box_pack_start (GTK_BOX (menu_item->hbox), menu_item->name_label,
FALSE, FALSE, 0);
gtk_widget_show (menu_item->name_label);
gimp_menu_item_name_changed (viewable, menu_item);
gtk_signal_connect_while_alive (GTK_OBJECT (viewable), "name_changed",
GTK_SIGNAL_FUNC (gimp_menu_item_name_changed),
menu_item->name_label,
GTK_OBJECT (menu_item->name_label));
menu_item,
GTK_OBJECT (menu_item));
gimp_gtk_drag_source_set_by_type (GTK_WIDGET (menu_item),
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -178,11 +180,45 @@ gimp_menu_item_real_set_viewable (GimpMenuItem *menu_item,
NULL);
}
void
gimp_menu_item_set_name_func (GimpMenuItem *menu_item,
GimpItemGetNameFunc get_name_func)
{
g_return_if_fail (menu_item != NULL);
g_return_if_fail (GIMP_IS_MENU_ITEM (menu_item));
if (menu_item->get_name_func != get_name_func)
{
GimpViewable *viewable;
menu_item->get_name_func = get_name_func;
viewable = GIMP_PREVIEW (menu_item->preview)->viewable;
if (viewable)
gimp_menu_item_name_changed (viewable, menu_item);
}
}
static void
gimp_menu_item_name_changed (GimpViewable *viewable,
GtkLabel *label)
GimpMenuItem *menu_item)
{
gtk_label_set_text (label, gimp_object_get_name (GIMP_OBJECT (viewable)));
if (menu_item->get_name_func)
{
gchar *name;
name = menu_item->get_name_func (GTK_WIDGET (menu_item));
gtk_label_set_text (GTK_LABEL (menu_item->name_label), name);
g_free (name);
}
else
{
gtk_label_set_text (GTK_LABEL (menu_item->name_label),
gimp_object_get_name (GIMP_OBJECT (viewable)));
}
}
static GimpViewable *

View File

@ -42,15 +42,18 @@ typedef struct _GimpMenuItemClass GimpMenuItemClass;
struct _GimpMenuItem
{
GtkMenuItem parent_instance;
GtkMenuItem parent_instance;
GtkWidget *hbox;
GtkWidget *hbox;
GtkWidget *preview;
GtkWidget *name_label;
GtkWidget *preview;
GtkWidget *name_label;
/*< protected >*/
gint preview_size;
gint preview_size;
/*< private >*/
GimpItemGetNameFunc get_name_func;
};
struct _GimpMenuItemClass
@ -62,9 +65,12 @@ struct _GimpMenuItemClass
};
GtkType gimp_menu_item_get_type (void);
GtkWidget * gimp_menu_item_new (GimpViewable *viewable,
gint preview_size);
GtkType gimp_menu_item_get_type (void);
GtkWidget * gimp_menu_item_new (GimpViewable *viewable,
gint preview_size);
void gimp_menu_item_set_name_func (GimpMenuItem *menu_item,
GimpItemGetNameFunc get_name_func);
#ifdef __cplusplus

View File

@ -0,0 +1,70 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __WIDGETS_TYPES_H__
#define __WIDGETS_TYPES_H__
/* non-widget objects */
typedef struct _GimpDialogFactory GimpDialogFactory;
/* widgets */
typedef struct _GimpPreview GimpPreview;
typedef struct _GimpImagePreview GimpImagePreview;
typedef struct _GimpDrawablePreview GimpDrawablePreview;
typedef struct _GimpBrushPreview GimpBrushPreview;
typedef struct _GimpPatternPreview GimpPatternPreview;
typedef struct _GimpPalettePreview GimpPalettePreview;
typedef struct _GimpGradientPreview GimpGradientPreview;
typedef struct _GimpToolInfoPreview GimpToolInfoPreview;
typedef struct _GimpContainerMenu GimpContainerMenu;
typedef struct _GimpContainerMenuImpl GimpContainerMenuImpl;
typedef struct _GimpMenuItem GimpMenuItem;
typedef struct _GimpContainerView GimpContainerView;
typedef struct _GimpContainerListView GimpContainerListView;
typedef struct _GimpContainerGridView GimpContainerGridView;
typedef struct _GimpDataFactoryView GimpDataFactoryView;
typedef struct _GimpDrawableListView GimpDrawableListView;
typedef struct _GimpLayerListView GimpLayerListView;
typedef struct _GimpChannelListView GimpChannelListView;
typedef struct _GimpListItem GimpListItem;
typedef struct _GimpDrawableListItem GimpDrawableListItem;
typedef struct _GimpLayerListItem GimpLayerListItem;
typedef struct _GimpComponentListItem GimpComponentListItem;
typedef struct _GimpDock GimpDock;
typedef struct _GimpImageDock GimpImageDock;
typedef struct _GimpDockable GimpDockable;
typedef struct _GimpDockbook GimpDockbook;
typedef struct _HistogramWidget HistogramWidget;
/* function types */
typedef gchar * (* GimpItemGetNameFunc) (GtkWidget *widget);
#endif /* __WIDGETS_TYPES_H__ */

View File

@ -50,7 +50,6 @@ EXTRA_DIST = \
enum_headers = \
../../app/appenums.h \
../../app/appenv.h \
../../app/apptypes.h \
../../app/errors.h \
../../app/gimpdrawable-offset.h \
../../app/gimpimage.h \