|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* glade-palette.c
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Copyright (C) 2006 The GNOME Foundation.
|
|
Packit |
1e8aac |
* Copyright (C) 2001-2005 Ximian, Inc.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Authors:
|
|
Packit |
1e8aac |
* Chema Celorio
|
|
Packit |
1e8aac |
* Joaquin Cuenca Abela <e98cuenc@yahoo.com>
|
|
Packit |
1e8aac |
* Vincent Geddes <vgeddes@metroweb.co.za>
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
1e8aac |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
1e8aac |
* the Free Software Foundation; either version 2 of the License, or
|
|
Packit |
1e8aac |
* (at your option) any later version.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
1e8aac |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
1e8aac |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
1e8aac |
* GNU General Public License for more details.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* You should have received a copy of the GNU General Public License
|
|
Packit |
1e8aac |
* along with this program; if not, write to the Free Software
|
|
Packit |
1e8aac |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
#ifdef HAVE_CONFIG_H
|
|
Packit |
1e8aac |
#include <config.h>
|
|
Packit |
1e8aac |
#endif
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* SECTION:glade-palette
|
|
Packit |
1e8aac |
* @Short_Description: A widget to select a #GladeWidgetClass for addition.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* #GladePalette is responsible for displaying the list of available
|
|
Packit |
1e8aac |
* #GladeWidgetClass types and publishing the currently selected class
|
|
Packit |
1e8aac |
* to the Glade core.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include "glade.h"
|
|
Packit |
1e8aac |
#include "gladeui-enum-types.h"
|
|
Packit |
1e8aac |
#include "glade-app.h"
|
|
Packit |
1e8aac |
#include "glade-palette.h"
|
|
Packit |
1e8aac |
#include "glade-catalog.h"
|
|
Packit |
1e8aac |
#include "glade-project.h"
|
|
Packit |
1e8aac |
#include "glade-widget.h"
|
|
Packit |
1e8aac |
#include "glade-widget-adaptor.h"
|
|
Packit |
1e8aac |
#include "glade-popup.h"
|
|
Packit |
1e8aac |
#include "glade-design-private.h"
|
|
Packit |
1e8aac |
#include "glade-dnd.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
#include <gdk/gdk.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
struct _GladePalettePrivate
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
const GList *catalogs; /* List of widget catalogs */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeProject *project;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GtkWidget *selector_hbox;
|
|
Packit |
1e8aac |
GtkWidget *selector_button;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GtkWidget *toolpalette;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeItemAppearance item_appearance;
|
|
Packit |
1e8aac |
gboolean use_small_item_icons;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *local_selection;
|
|
Packit |
1e8aac |
GHashTable *button_table;
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
enum
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
REFRESH,
|
|
Packit |
1e8aac |
LAST_SIGNAL
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
enum
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
PROP_0,
|
|
Packit |
1e8aac |
PROP_ITEM_APPEARANCE,
|
|
Packit |
1e8aac |
PROP_USE_SMALL_ITEM_ICONS,
|
|
Packit |
1e8aac |
PROP_SHOW_SELECTOR_BUTTON,
|
|
Packit |
1e8aac |
PROP_PROJECT,
|
|
Packit |
1e8aac |
N_PROPERTIES
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GParamSpec *properties[N_PROPERTIES];
|
|
Packit |
1e8aac |
static guint glade_palette_signals[LAST_SIGNAL] = { 0 };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void glade_palette_append_item_group (GladePalette *palette,
|
|
Packit |
1e8aac |
GladeWidgetGroup *group);
|
|
Packit |
1e8aac |
static void palette_item_toggled_cb (GtkToggleToolButton *button,
|
|
Packit |
1e8aac |
GladePalette *palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_DEFINE_TYPE_WITH_PRIVATE (GladePalette, glade_palette, GTK_TYPE_BOX)
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/*******************************************************
|
|
Packit |
1e8aac |
* Project Signals *
|
|
Packit |
1e8aac |
*******************************************************/
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
palette_item_refresh_cb (GladePalette *palette,
|
|
Packit |
1e8aac |
GtkWidget *item)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeProject *project;
|
|
Packit |
1e8aac |
GladeSupportMask support;
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor;
|
|
Packit |
1e8aac |
gchar *warning, *text;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
adaptor = g_object_get_data (G_OBJECT (item), "glade-widget-adaptor");
|
|
Packit |
1e8aac |
g_assert (adaptor);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if ((project = palette->priv->project) &&
|
|
Packit |
1e8aac |
(warning = glade_project_verify_widget_adaptor (project, adaptor,
|
|
Packit |
1e8aac |
&support)) != NULL)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
/* set sensitivity */
|
|
Packit |
1e8aac |
gtk_widget_set_sensitive (GTK_WIDGET (item),
|
|
Packit |
1e8aac |
!(support & GLADE_SUPPORT_MISMATCH));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item),
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_icon_name (adaptor));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* prepend widget title */
|
|
Packit |
1e8aac |
text = g_strdup_printf ("%s: %s", glade_widget_adaptor_get_title (adaptor), warning);
|
|
Packit |
1e8aac |
gtk_widget_set_tooltip_text (item, text);
|
|
Packit |
1e8aac |
g_free (text);
|
|
Packit |
1e8aac |
g_free (warning);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_widget_set_tooltip_text (GTK_WIDGET (item),
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_title (adaptor));
|
|
Packit |
1e8aac |
gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE);
|
|
Packit |
1e8aac |
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item),
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_icon_name (adaptor));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_refresh (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_PALETTE (palette));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_emit (G_OBJECT (palette), glade_palette_signals[REFRESH], 0);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
project_add_item_changed_cb (GladeProject *project,
|
|
Packit |
1e8aac |
GParamSpec *pspec,
|
|
Packit |
1e8aac |
GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkToggleToolButton *selection = NULL;
|
|
Packit |
1e8aac |
GladePalettePrivate *priv = palette->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (priv->local_selection)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
selection = g_hash_table_lookup (priv->button_table,
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_name (priv->local_selection));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (selection, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
gtk_toggle_tool_button_set_active (selection, FALSE);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (selection, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_project_set_pointer_mode (priv->project, GLADE_POINTER_SELECT);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv->local_selection = glade_project_get_add_item (priv->project);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (priv->local_selection)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
selection = g_hash_table_lookup (priv->button_table,
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_name (priv->local_selection));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (selection, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
gtk_toggle_tool_button_set_active (selection, TRUE);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (selection, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_project_set_pointer_mode (priv->project, GLADE_POINTER_ADD_WIDGET);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/*******************************************************
|
|
Packit |
1e8aac |
* Local Signals *
|
|
Packit |
1e8aac |
*******************************************************/
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
selector_button_toggled_cb (GtkToggleButton *button,
|
|
Packit |
1e8aac |
GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv = palette->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!priv->project)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gtk_toggle_button_get_active (button))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (priv->project, project_add_item_changed_cb, palette);
|
|
Packit |
1e8aac |
glade_project_set_add_item (priv->project, NULL);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (priv->project, project_add_item_changed_cb, palette);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else if (glade_project_get_add_item (priv->project) == NULL)
|
|
Packit |
1e8aac |
gtk_toggle_button_set_active (button, TRUE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
palette_item_toggled_cb (GtkToggleToolButton *button, GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv = palette->priv;
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor;
|
|
Packit |
1e8aac |
GtkToggleToolButton *selection = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!priv->project)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
adaptor = g_object_get_data (G_OBJECT (button), "glade-widget-adaptor");
|
|
Packit |
1e8aac |
if (!adaptor)
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Start by unselecting the currently selected item if any */
|
|
Packit |
1e8aac |
if (priv->local_selection)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
selection = g_hash_table_lookup (priv->button_table,
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_name (priv->local_selection));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (selection, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
gtk_toggle_tool_button_set_active (selection, FALSE);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (selection, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv->local_selection = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (priv->project, project_add_item_changed_cb, palette);
|
|
Packit |
1e8aac |
glade_project_set_add_item (priv->project, NULL);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (priv->project, project_add_item_changed_cb, palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->selector_button), TRUE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_project_set_pointer_mode (priv->project, GLADE_POINTER_SELECT);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!gtk_toggle_tool_button_get_active (button))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Auto-create toplevel types */
|
|
Packit |
1e8aac |
if (GWA_IS_TOPLEVEL (adaptor))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_command_create (adaptor, NULL, NULL, priv->project);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (button, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
gtk_toggle_tool_button_set_active (button, FALSE);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (button, palette_item_toggled_cb, palette);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_signal_handlers_block_by_func (priv->project, project_add_item_changed_cb, palette);
|
|
Packit |
1e8aac |
glade_project_set_add_item (priv->project, adaptor);
|
|
Packit |
1e8aac |
g_signal_handlers_unblock_by_func (priv->project, project_add_item_changed_cb, palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->selector_button), FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv->local_selection = adaptor;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_project_set_pointer_mode (priv->project, GLADE_POINTER_ADD_WIDGET);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_drag_begin (GtkWidget *widget,
|
|
Packit |
1e8aac |
GdkDragContext *context,
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
_glade_dnd_set_icon_widget (context,
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_icon_name (adaptor),
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_name (adaptor));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_drag_data_get (GtkWidget *widget,
|
|
Packit |
1e8aac |
GdkDragContext *context,
|
|
Packit |
1e8aac |
GtkSelectionData *data,
|
|
Packit |
1e8aac |
guint info,
|
|
Packit |
1e8aac |
guint time,
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
_glade_dnd_set_data (data, G_OBJECT (adaptor));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gint
|
|
Packit |
1e8aac |
palette_item_button_press_cb (GtkWidget *button,
|
|
Packit |
1e8aac |
GdkEventButton *event,
|
|
Packit |
1e8aac |
GtkToolItem *item)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalette *palette = g_object_get_data (G_OBJECT (item), "glade-palette");
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor = g_object_get_data (G_OBJECT (item), "glade-widget-adaptor");
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (glade_popup_is_popup_event (event))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
glade_popup_palette_pop (palette, adaptor, event);
|
|
Packit |
1e8aac |
return TRUE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return FALSE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/*******************************************************
|
|
Packit |
1e8aac |
* Building Widgets/Populating catalog *
|
|
Packit |
1e8aac |
*******************************************************/
|
|
Packit |
1e8aac |
static GtkWidget *
|
|
Packit |
1e8aac |
glade_palette_new_item (GladePalette *palette, GladeWidgetAdaptor *adaptor)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *item, *button, *label, *box;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
item = (GtkWidget *) gtk_toggle_tool_button_new ();
|
|
Packit |
1e8aac |
g_object_set_data (G_OBJECT (item), "glade-widget-adaptor", adaptor);
|
|
Packit |
1e8aac |
g_object_set_data (G_OBJECT (item), "glade-palette", palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
button = gtk_bin_get_child (GTK_BIN (item));
|
|
Packit |
1e8aac |
g_assert (GTK_IS_BUTTON (button));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Add a box to avoid the ellipsize on the items */
|
|
Packit |
1e8aac |
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
|
Packit |
1e8aac |
label = gtk_label_new (glade_widget_adaptor_get_title (adaptor));
|
|
Packit |
1e8aac |
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
|
Packit |
1e8aac |
gtk_widget_show (label);
|
|
Packit |
1e8aac |
gtk_widget_show (box);
|
|
Packit |
1e8aac |
gtk_container_add (GTK_CONTAINER (box), label);
|
|
Packit |
1e8aac |
gtk_tool_button_set_label_widget (GTK_TOOL_BUTTON (item), box);
|
|
Packit |
1e8aac |
palette_item_refresh_cb (palette, item);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Update selection when the item is pushed */
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (item), "toggled",
|
|
Packit |
1e8aac |
G_CALLBACK (palette_item_toggled_cb), palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Update palette item when active project state changes */
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (palette), "refresh",
|
|
Packit |
1e8aac |
G_CALLBACK (palette_item_refresh_cb), item);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Fire Glade palette popup menus */
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (button), "button-press-event",
|
|
Packit |
1e8aac |
G_CALLBACK (palette_item_button_press_cb), item);
|
|
Packit |
1e8aac |
g_signal_connect_object (button, "drag-begin",
|
|
Packit |
1e8aac |
G_CALLBACK (glade_palette_drag_begin), adaptor, 0);
|
|
Packit |
1e8aac |
g_signal_connect_object (button, "drag-data-get",
|
|
Packit |
1e8aac |
G_CALLBACK (glade_palette_drag_data_get), adaptor, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_drag_source_set (button, GDK_BUTTON1_MASK, _glade_dnd_get_target (), 1, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_show (item);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_hash_table_insert (palette->priv->button_table,
|
|
Packit |
1e8aac |
(gchar *)glade_widget_adaptor_get_name (adaptor),
|
|
Packit |
1e8aac |
item);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return item;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GtkWidget *
|
|
Packit |
1e8aac |
glade_palette_new_item_group (GladePalette *palette, GladeWidgetGroup *group)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *item_group, *item, *label;
|
|
Packit |
1e8aac |
GList *l;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Give the item group a left aligned label */
|
|
Packit |
1e8aac |
label = gtk_label_new (glade_widget_group_get_title (group));
|
|
Packit |
1e8aac |
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
|
Packit |
1e8aac |
gtk_widget_show (label);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
item_group = gtk_tool_item_group_new ("");
|
|
Packit |
1e8aac |
gtk_tool_item_group_set_label_widget (GTK_TOOL_ITEM_GROUP (item_group),
|
|
Packit |
1e8aac |
label);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Tell the item group to ellipsize our custom label for us */
|
|
Packit |
1e8aac |
gtk_tool_item_group_set_ellipsize (GTK_TOOL_ITEM_GROUP (item_group),
|
|
Packit |
1e8aac |
PANGO_ELLIPSIZE_END);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_set_tooltip_text (item_group,
|
|
Packit |
1e8aac |
glade_widget_group_get_title (group));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Go through all the widget classes in this catalog. */
|
|
Packit |
1e8aac |
for (l = (GList *) glade_widget_group_get_adaptors (group); l; l = l->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor = GLADE_WIDGET_ADAPTOR (l->data);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Create/append new item */
|
|
Packit |
1e8aac |
item = glade_palette_new_item (palette, adaptor);
|
|
Packit |
1e8aac |
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (item_group),
|
|
Packit |
1e8aac |
GTK_TOOL_ITEM (item), -1);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* set default expanded state */
|
|
Packit |
1e8aac |
gtk_tool_item_group_set_collapsed (GTK_TOOL_ITEM_GROUP (item_group),
|
|
Packit |
1e8aac |
glade_widget_group_get_expanded (group) == FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_show (item_group);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return item_group;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_append_item_group (GladePalette *palette, GladeWidgetGroup *group)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv = palette->priv;
|
|
Packit |
1e8aac |
GtkWidget *item_group;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if ((item_group = glade_palette_new_item_group (palette, group)) != NULL)
|
|
Packit |
1e8aac |
gtk_container_add (GTK_CONTAINER (priv->toolpalette), item_group);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_populate (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *l;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_PALETTE (palette));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = (GList *) glade_app_get_catalogs (); l; l = l->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *groups = glade_catalog_get_widget_groups (GLADE_CATALOG (l->data));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (; groups; groups = groups->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidgetGroup *group = GLADE_WIDGET_GROUP (groups->data);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (glade_widget_group_get_adaptors (group))
|
|
Packit |
1e8aac |
glade_palette_append_item_group (palette, group);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GtkWidget *
|
|
Packit |
1e8aac |
glade_palette_create_selector_button (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *selector;
|
|
Packit |
1e8aac |
GtkWidget *image;
|
|
Packit |
1e8aac |
gchar *path;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* create selector button */
|
|
Packit |
1e8aac |
selector = gtk_toggle_button_new ();
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_set_border_width (GTK_CONTAINER (selector), 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
path = g_build_filename (glade_app_get_pixmaps_dir (), "selector.png", NULL);
|
|
Packit |
1e8aac |
image = gtk_image_new_from_file (path);
|
|
Packit |
1e8aac |
gtk_widget_show (image);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_add (GTK_CONTAINER (selector), image);
|
|
Packit |
1e8aac |
gtk_button_set_relief (GTK_BUTTON (selector), GTK_RELIEF_NONE);
|
|
Packit |
1e8aac |
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (selector), TRUE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (selector), "toggled",
|
|
Packit |
1e8aac |
G_CALLBACK (selector_button_toggled_cb), palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (path);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return selector;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/*******************************************************
|
|
Packit |
1e8aac |
* Class & methods *
|
|
Packit |
1e8aac |
*******************************************************/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* override GtkWidget::show_all since we have internal widgets we wish to keep
|
|
Packit |
1e8aac |
* hidden unless we decide otherwise, like the hidden selector button.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_show_all (GtkWidget *widget)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_widget_show (widget);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_set_property (GObject *object,
|
|
Packit |
1e8aac |
guint prop_id,
|
|
Packit |
1e8aac |
const GValue *value,
|
|
Packit |
1e8aac |
GParamSpec *pspec)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalette *palette = GLADE_PALETTE (object);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (prop_id)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PROP_PROJECT:
|
|
Packit |
1e8aac |
glade_palette_set_project (palette, (GladeProject *)g_value_get_object (value));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PROP_USE_SMALL_ITEM_ICONS:
|
|
Packit |
1e8aac |
glade_palette_set_use_small_item_icons (palette,
|
|
Packit |
1e8aac |
g_value_get_boolean (value));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PROP_ITEM_APPEARANCE:
|
|
Packit |
1e8aac |
glade_palette_set_item_appearance (palette, g_value_get_enum (value));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PROP_SHOW_SELECTOR_BUTTON:
|
|
Packit |
1e8aac |
glade_palette_set_show_selector_button (palette,
|
|
Packit |
1e8aac |
g_value_get_boolean (value));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_get_property (GObject *object,
|
|
Packit |
1e8aac |
guint prop_id,
|
|
Packit |
1e8aac |
GValue *value,
|
|
Packit |
1e8aac |
GParamSpec *pspec)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalette *palette = GLADE_PALETTE (object);
|
|
Packit |
1e8aac |
GladePalettePrivate *priv = palette->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (prop_id)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PROP_PROJECT:
|
|
Packit |
1e8aac |
g_value_set_object (value, priv->project);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PROP_USE_SMALL_ITEM_ICONS:
|
|
Packit |
1e8aac |
g_value_set_boolean (value, priv->use_small_item_icons);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PROP_SHOW_SELECTOR_BUTTON:
|
|
Packit |
1e8aac |
g_value_set_boolean (value,
|
|
Packit |
1e8aac |
gtk_widget_get_visible (priv->selector_button));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PROP_ITEM_APPEARANCE:
|
|
Packit |
1e8aac |
g_value_set_enum (value, priv->item_appearance);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_dispose (GObject *object)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv = GLADE_PALETTE (object)->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv->catalogs = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_palette_set_project (GLADE_PALETTE (object), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_OBJECT_CLASS (glade_palette_parent_class)->dispose (object);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_finalize (GObject *object)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv = GLADE_PALETTE (object)->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_hash_table_destroy (priv->button_table);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_OBJECT_CLASS (glade_palette_parent_class)->finalize (object);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_class_init (GladePaletteClass *klass)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GObjectClass *object_class;
|
|
Packit |
1e8aac |
GtkWidgetClass *widget_class;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
object_class = G_OBJECT_CLASS (klass);
|
|
Packit |
1e8aac |
widget_class = GTK_WIDGET_CLASS (klass);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
object_class->get_property = glade_palette_get_property;
|
|
Packit |
1e8aac |
object_class->set_property = glade_palette_set_property;
|
|
Packit |
1e8aac |
object_class->dispose = glade_palette_dispose;
|
|
Packit |
1e8aac |
object_class->finalize = glade_palette_finalize;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
widget_class->show_all = glade_palette_show_all;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_palette_signals[REFRESH] =
|
|
Packit |
1e8aac |
g_signal_new ("refresh",
|
|
Packit |
1e8aac |
G_TYPE_FROM_CLASS (object_class),
|
|
Packit |
1e8aac |
G_SIGNAL_RUN_LAST,
|
|
Packit |
1e8aac |
G_STRUCT_OFFSET (GladePaletteClass, refresh),
|
|
Packit |
1e8aac |
NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
properties[PROP_PROJECT] =
|
|
Packit |
1e8aac |
g_param_spec_object ("project",
|
|
Packit |
1e8aac |
"Project",
|
|
Packit |
1e8aac |
"This palette's current project",
|
|
Packit |
1e8aac |
GLADE_TYPE_PROJECT,
|
|
Packit |
1e8aac |
G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
properties[PROP_ITEM_APPEARANCE] =
|
|
Packit |
1e8aac |
g_param_spec_enum ("item-appearance",
|
|
Packit |
1e8aac |
"Item Appearance",
|
|
Packit |
1e8aac |
"The appearance of the palette items",
|
|
Packit |
1e8aac |
GLADE_TYPE_ITEM_APPEARANCE,
|
|
Packit |
1e8aac |
GLADE_ITEM_ICON_ONLY,
|
|
Packit |
1e8aac |
G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
properties[PROP_USE_SMALL_ITEM_ICONS] =
|
|
Packit |
1e8aac |
g_param_spec_boolean ("use-small-item-icons",
|
|
Packit |
1e8aac |
"Use Small Item Icons",
|
|
Packit |
1e8aac |
"Whether to use small icons to represent items",
|
|
Packit |
1e8aac |
FALSE,
|
|
Packit |
1e8aac |
G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
properties[PROP_SHOW_SELECTOR_BUTTON] =
|
|
Packit |
1e8aac |
g_param_spec_boolean ("show-selector-button",
|
|
Packit |
1e8aac |
"Show Selector Button",
|
|
Packit |
1e8aac |
"Whether to show the internal selector button",
|
|
Packit |
1e8aac |
TRUE,
|
|
Packit |
1e8aac |
G_PARAM_READWRITE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Install all properties */
|
|
Packit |
1e8aac |
g_object_class_install_properties (object_class, N_PROPERTIES, properties);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_palette_init (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv;
|
|
Packit |
1e8aac |
GtkWidget *sw;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_orientable_set_orientation (GTK_ORIENTABLE (palette),
|
|
Packit |
1e8aac |
GTK_ORIENTATION_VERTICAL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv = palette->priv = glade_palette_get_instance_private (palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv->button_table = g_hash_table_new (g_str_hash, g_str_equal);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv->item_appearance = GLADE_ITEM_ICON_ONLY;
|
|
Packit |
1e8aac |
priv->use_small_item_icons = FALSE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* create selector button */
|
|
Packit |
1e8aac |
priv->selector_button = glade_palette_create_selector_button (palette);
|
|
Packit |
1e8aac |
priv->selector_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
|
Packit |
1e8aac |
gtk_box_pack_start (GTK_BOX (priv->selector_hbox), priv->selector_button,
|
|
Packit |
1e8aac |
FALSE, FALSE, 0);
|
|
Packit |
1e8aac |
gtk_box_pack_start (GTK_BOX (palette), priv->selector_hbox, FALSE, FALSE, 0);
|
|
Packit |
1e8aac |
gtk_widget_show (priv->selector_button);
|
|
Packit |
1e8aac |
gtk_widget_show (priv->selector_hbox);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_set_tooltip_text (priv->selector_button, _("Widget selector"));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* The GtkToolPalette */
|
|
Packit |
1e8aac |
priv->toolpalette = gtk_tool_palette_new ();
|
|
Packit |
1e8aac |
gtk_tool_palette_set_style (GTK_TOOL_PALETTE (priv->toolpalette),
|
|
Packit |
1e8aac |
GTK_TOOLBAR_ICONS);
|
|
Packit |
1e8aac |
gtk_tool_palette_set_icon_size (GTK_TOOL_PALETTE (priv->toolpalette),
|
|
Packit |
1e8aac |
GTK_ICON_SIZE_LARGE_TOOLBAR);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
sw = gtk_scrolled_window_new (NULL, NULL);
|
|
Packit |
1e8aac |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
|
Packit |
1e8aac |
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
|
Packit |
1e8aac |
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
|
Packit |
1e8aac |
GTK_SHADOW_NONE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_add (GTK_CONTAINER (sw), priv->toolpalette);
|
|
Packit |
1e8aac |
gtk_box_pack_start (GTK_BOX (palette), sw, TRUE, TRUE, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_show (sw);
|
|
Packit |
1e8aac |
gtk_widget_show (priv->toolpalette);
|
|
Packit |
1e8aac |
gtk_widget_set_no_show_all (GTK_WIDGET (palette), TRUE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_palette_populate (palette);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/*******************************************************
|
|
Packit |
1e8aac |
* API *
|
|
Packit |
1e8aac |
*******************************************************/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_new:
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Creates a new #GladePalette widget
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: a new #GladePalette
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
GtkWidget *
|
|
Packit |
1e8aac |
glade_palette_new (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalette *palette;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
palette = g_object_new (GLADE_TYPE_PALETTE,
|
|
Packit |
1e8aac |
"spacing", 2,
|
|
Packit |
1e8aac |
"item-appearance", GLADE_ITEM_ICON_ONLY,
|
|
Packit |
1e8aac |
NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return GTK_WIDGET (palette);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeProject *
|
|
Packit |
1e8aac |
glade_palette_get_project (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_PALETTE (palette), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return palette->priv->project;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_palette_set_project (GladePalette *palette, GladeProject *project)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_PALETTE (palette));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (palette->priv->project != project)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (palette->priv->project)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_signal_handlers_disconnect_by_func (G_OBJECT (palette->priv->project),
|
|
Packit |
1e8aac |
G_CALLBACK (glade_palette_refresh),
|
|
Packit |
1e8aac |
palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_handlers_disconnect_by_func (G_OBJECT (palette->priv->project),
|
|
Packit |
1e8aac |
G_CALLBACK (project_add_item_changed_cb),
|
|
Packit |
1e8aac |
palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_unref (palette->priv->project);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
palette->priv->project = project;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (palette->priv->project)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_signal_connect_swapped (G_OBJECT (palette->priv->project), "targets-changed",
|
|
Packit |
1e8aac |
G_CALLBACK (glade_palette_refresh), palette);
|
|
Packit |
1e8aac |
g_signal_connect_swapped (G_OBJECT (palette->priv->project), "parse-finished",
|
|
Packit |
1e8aac |
G_CALLBACK (glade_palette_refresh), palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (palette->priv->project), "notify::add-item",
|
|
Packit |
1e8aac |
G_CALLBACK (project_add_item_changed_cb), palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_ref (palette->priv->project);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
project_add_item_changed_cb (project, NULL, palette);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_palette_refresh (palette);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_PROJECT]);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_set_item_appearance:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
* @item_appearance: the item appearance
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Sets the appearance of the palette items.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_palette_set_item_appearance (GladePalette *palette,
|
|
Packit |
1e8aac |
GladeItemAppearance item_appearance)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_PALETTE (palette));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
priv = palette->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (priv->item_appearance != item_appearance)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkToolbarStyle style;
|
|
Packit |
1e8aac |
priv->item_appearance = item_appearance;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (item_appearance)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case GLADE_ITEM_ICON_AND_LABEL:
|
|
Packit |
1e8aac |
style = GTK_TOOLBAR_BOTH_HORIZ;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case GLADE_ITEM_ICON_ONLY:
|
|
Packit |
1e8aac |
style = GTK_TOOLBAR_ICONS;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case GLADE_ITEM_LABEL_ONLY:
|
|
Packit |
1e8aac |
style = GTK_TOOLBAR_TEXT;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
g_assert_not_reached ();
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tool_palette_set_style (GTK_TOOL_PALETTE (priv->toolpalette), style);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_ITEM_APPEARANCE]);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_set_use_small_item_icons:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
* @use_small_item_icons: Whether to use small item icons
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Sets whether to use small item icons.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_palette_set_use_small_item_icons (GladePalette *palette,
|
|
Packit |
1e8aac |
gboolean use_small_item_icons)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv;
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_PALETTE (palette));
|
|
Packit |
1e8aac |
priv = palette->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (priv->use_small_item_icons != use_small_item_icons)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
priv->use_small_item_icons = use_small_item_icons;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tool_palette_set_icon_size (GTK_TOOL_PALETTE (priv->toolpalette),
|
|
Packit |
1e8aac |
(use_small_item_icons) ?
|
|
Packit |
1e8aac |
GTK_ICON_SIZE_SMALL_TOOLBAR :
|
|
Packit |
1e8aac |
GTK_ICON_SIZE_LARGE_TOOLBAR);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_USE_SMALL_ITEM_ICONS]);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_set_show_selector_button:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
* @show_selector_button: whether to show selector button
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Sets whether to show the internal widget selector button
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_palette_set_show_selector_button (GladePalette *palette,
|
|
Packit |
1e8aac |
gboolean show_selector_button)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladePalettePrivate *priv;
|
|
Packit |
1e8aac |
g_return_if_fail (GLADE_IS_PALETTE (palette));
|
|
Packit |
1e8aac |
priv = palette->priv;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gtk_widget_get_visible (priv->selector_hbox) != show_selector_button)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (show_selector_button)
|
|
Packit |
1e8aac |
gtk_widget_show (priv->selector_hbox);
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
gtk_widget_hide (priv->selector_hbox);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_notify_by_pspec (G_OBJECT (palette), properties[PROP_SHOW_SELECTOR_BUTTON]);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_get_item_appearance:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: The appearance of the palette items
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
GladeItemAppearance
|
|
Packit |
1e8aac |
glade_palette_get_item_appearance (GladePalette *palette)
|
|
Packit |
1e8aac |
{;
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_PALETTE (palette), GLADE_ITEM_ICON_ONLY);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return palette->priv->item_appearance;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_get_use_small_item_icons:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: Whether small item icons are used
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
gboolean
|
|
Packit |
1e8aac |
glade_palette_get_use_small_item_icons (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_PALETTE (palette), FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return palette->priv->use_small_item_icons;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_get_show_selector_button:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: Whether the selector button is visible
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
gboolean
|
|
Packit |
1e8aac |
glade_palette_get_show_selector_button (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_PALETTE (palette), FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return gtk_widget_get_visible (palette->priv->selector_hbox);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**
|
|
Packit |
1e8aac |
* glade_palette_get_tool_palette:
|
|
Packit |
1e8aac |
* @palette: a #GladePalette
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Returns: the GtkToolPalette associated to this palette.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
GtkToolPalette *
|
|
Packit |
1e8aac |
glade_palette_get_tool_palette (GladePalette *palette)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_return_val_if_fail (GLADE_IS_PALETTE (palette), FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return GTK_TOOL_PALETTE (palette->priv->toolpalette);
|
|
Packit |
1e8aac |
}
|