summaryrefslogtreecommitdiff
path: root/gladeui/glade-placeholder.c
diff options
context:
space:
mode:
Diffstat (limited to 'gladeui/glade-placeholder.c')
-rw-r--r--gladeui/glade-placeholder.c410
1 files changed, 0 insertions, 410 deletions
diff --git a/gladeui/glade-placeholder.c b/gladeui/glade-placeholder.c
deleted file mode 100644
index 2ca84444..00000000
--- a/gladeui/glade-placeholder.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2003, 2004 Joaquin Cuenca Abela
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Authors:
- * Joaquin Cuenca Abela <e98cuenc@yahoo.com>
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-#include "glade.h"
-#include "glade-placeholder.h"
-#include "glade-xml-utils.h"
-#include "glade-project.h"
-#include "glade-command.h"
-#include "glade-palette.h"
-#include "glade-popup.h"
-#include "glade-cursor.h"
-#include "glade-widget.h"
-#include "glade-app.h"
-
-static void glade_placeholder_class_init (GladePlaceholderClass *klass);
-static void glade_placeholder_init (GladePlaceholder *placeholder);
-static void glade_placeholder_finalize (GObject *object);
-static void glade_placeholder_realize (GtkWidget *widget);
-static void glade_placeholder_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static void glade_placeholder_send_configure (GladePlaceholder *placeholder);
-static gboolean glade_placeholder_expose (GtkWidget *widget,
- GdkEventExpose *event);
-static gboolean glade_placeholder_motion_notify_event (GtkWidget *widget,
- GdkEventMotion *event);
-static gboolean glade_placeholder_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static gboolean glade_placeholder_popup_menu (GtkWidget *widget);
-
-
-static GtkWidgetClass *parent_class = NULL;
-
-static char *placeholder_xpm[] = {
- /* columns rows colors chars-per-pixel */
- "8 8 2 1",
- " c #bbbbbb",
- ". c #d6d6d6",
- /* pixels */
- " . . ",
- ". . ",
- " ..",
- " ..",
- ". . ",
- " . . ",
- " .. ",
- " .. "
-};
-
-/**
- * glade_placeholder_get_type:
- *
- * Creates the typecode for the #GladePlaceholder object type.
- *
- * Returns: the typecode for the #GladePlaceholder object type
- */
-GType
-glade_placeholder_get_type (void)
-{
- static GType placeholder_type = 0;
-
- if (!placeholder_type)
- {
- static const GTypeInfo placeholder_info =
- {
- sizeof (GladePlaceholderClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) glade_placeholder_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GladePlaceholder),
- 0, /* n_preallocs */
- (GInstanceInitFunc) glade_placeholder_init,
- };
-
- placeholder_type = g_type_register_static (GTK_TYPE_WIDGET, "GladePlaceholder",
- &placeholder_info, 0);
- }
-
- return placeholder_type;
-}
-
-static void
-glade_placeholder_class_init (GladePlaceholderClass *klass)
-{
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = glade_placeholder_finalize;
- widget_class->realize = glade_placeholder_realize;
- widget_class->size_allocate = glade_placeholder_size_allocate;
- widget_class->expose_event = glade_placeholder_expose;
- widget_class->motion_notify_event = glade_placeholder_motion_notify_event;
- widget_class->button_press_event = glade_placeholder_button_press;
- widget_class->popup_menu = glade_placeholder_popup_menu;
-}
-
-static void
-glade_placeholder_notify_parent (GObject *gobject,
- GParamSpec *arg1,
- gpointer user_data)
-{
- GladePlaceholder *placeholder = GLADE_PLACEHOLDER (gobject);
- GladeWidget *parent = glade_placeholder_get_parent (placeholder);
-
- if (placeholder->packing_actions)
- {
- g_list_foreach (placeholder->packing_actions, (GFunc)g_object_unref, NULL);
- g_list_free (placeholder->packing_actions);
- placeholder->packing_actions = NULL;
- }
-
- if (parent && parent->adaptor->packing_actions)
- placeholder->packing_actions = glade_widget_adaptor_pack_actions_new (parent->adaptor);
-}
-
-static void
-glade_placeholder_init (GladePlaceholder *placeholder)
-{
- placeholder->placeholder_pixmap = NULL;
- placeholder->packing_actions = NULL;
-
- GTK_WIDGET_SET_FLAGS (GTK_WIDGET (placeholder), GTK_CAN_FOCUS);
-
- gtk_widget_set_size_request (GTK_WIDGET (placeholder),
- GLADE_PLACEHOLDER_WIDTH_REQ,
- GLADE_PLACEHOLDER_HEIGHT_REQ);
-
- g_signal_connect (placeholder, "notify::parent",
- G_CALLBACK (glade_placeholder_notify_parent),
- NULL);
-
- gtk_widget_show (GTK_WIDGET (placeholder));
-}
-
-/**
- * glade_placeholder_new:
- *
- * Returns: a new #GladePlaceholder cast as a #GtkWidget
- */
-GtkWidget *
-glade_placeholder_new (void)
-{
- return g_object_new (GLADE_TYPE_PLACEHOLDER, NULL);
-}
-
-static void
-glade_placeholder_finalize (GObject *object)
-{
- GladePlaceholder *placeholder;
-
- g_return_if_fail (GLADE_IS_PLACEHOLDER (object));
- placeholder = GLADE_PLACEHOLDER (object);
-
- /* placeholder->placeholder_pixmap can be NULL if the placeholder is
- * destroyed before it's realized */
- if (placeholder->placeholder_pixmap)
- g_object_unref (placeholder->placeholder_pixmap);
-
- if (placeholder->packing_actions)
- {
- g_list_foreach (placeholder->packing_actions, (GFunc)g_object_unref, NULL);
- g_list_free (placeholder->packing_actions);
- }
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-glade_placeholder_realize (GtkWidget *widget)
-{
- GladePlaceholder *placeholder;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (GLADE_IS_PLACEHOLDER (widget));
-
- placeholder = GLADE_PLACEHOLDER (widget);
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
- attributes.event_mask =
- gtk_widget_get_events (widget) |
- GDK_EXPOSURE_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK;
-
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
- widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask);
- gdk_window_set_user_data (widget->window, placeholder);
-
- widget->style = gtk_style_attach (widget->style, widget->window);
-
- glade_placeholder_send_configure (GLADE_PLACEHOLDER (widget));
-
- if (!placeholder->placeholder_pixmap)
- {
- placeholder->placeholder_pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
- gtk_widget_get_colormap (GTK_WIDGET (placeholder)),
- NULL, NULL, placeholder_xpm);
- g_assert(G_IS_OBJECT(placeholder->placeholder_pixmap));
- }
-
- gdk_window_set_back_pixmap (GTK_WIDGET (placeholder)->window, placeholder->placeholder_pixmap, FALSE);
-}
-
-static void
-glade_placeholder_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-{
- g_return_if_fail (GLADE_IS_PLACEHOLDER (widget));
- g_return_if_fail (allocation != NULL);
-
- widget->allocation = *allocation;
-
- if (GTK_WIDGET_REALIZED (widget))
- {
- gdk_window_move_resize (widget->window,
- allocation->x, allocation->y,
- allocation->width, allocation->height);
-
- glade_placeholder_send_configure (GLADE_PLACEHOLDER (widget));
- }
-}
-
-static void
-glade_placeholder_send_configure (GladePlaceholder *placeholder)
-{
- GtkWidget *widget;
- GdkEvent *event = gdk_event_new (GDK_CONFIGURE);
-
- widget = GTK_WIDGET (placeholder);
-
- event->configure.window = g_object_ref (widget->window);
- event->configure.send_event = TRUE;
- event->configure.x = widget->allocation.x;
- event->configure.y = widget->allocation.y;
- event->configure.width = widget->allocation.width;
- event->configure.height = widget->allocation.height;
-
- gtk_widget_event (widget, event);
- gdk_event_free (event);
-}
-
-static GladeProject*
-glade_placeholder_get_project (GladePlaceholder *placeholder)
-{
- GladeWidget *parent;
- parent = glade_placeholder_get_parent (placeholder);
- return parent ? GLADE_PROJECT (parent->project) : NULL;
-}
-
-static gboolean
-glade_placeholder_expose (GtkWidget *widget, GdkEventExpose *event)
-{
- GdkGC *light_gc;
- GdkGC *dark_gc;
- gint w, h;
-
- g_return_val_if_fail (GLADE_IS_PLACEHOLDER (widget), FALSE);
-
- light_gc = widget->style->light_gc[GTK_STATE_NORMAL];
- dark_gc = widget->style->dark_gc[GTK_STATE_NORMAL];
- gdk_drawable_get_size (event->window, &w, &h);
-
- gdk_draw_line (event->window, light_gc, 0, 0, w - 1, 0);
- gdk_draw_line (event->window, light_gc, 0, 0, 0, h - 1);
- gdk_draw_line (event->window, dark_gc, 0, h - 1, w - 1, h - 1);
- gdk_draw_line (event->window, dark_gc, w - 1, 0, w - 1, h - 1);
-
- glade_util_queue_draw_nodes (event->window);
-
- return FALSE;
-}
-
-static gboolean
-glade_placeholder_motion_notify_event (GtkWidget *widget, GdkEventMotion *event)
-{
- GladePointerMode pointer_mode;
- GladeWidget *gparent;
-
- g_return_val_if_fail (GLADE_IS_PLACEHOLDER (widget), FALSE);
-
- gparent = glade_placeholder_get_parent (GLADE_PLACEHOLDER (widget));
- pointer_mode = glade_app_get_pointer_mode ();
-
- if (pointer_mode == GLADE_POINTER_SELECT &&
- /* If we are the child of a widget that is in a GladeFixed, then
- * we are the means of drag/resize and we dont want to fight for
- * the cursor (ideally; GladeCursor should somehow deal with such
- * concurrencies I suppose).
- */
- (gparent->parent &&
- GLADE_IS_FIXED (gparent->parent)) == FALSE)
- glade_cursor_set (event->window, GLADE_CURSOR_SELECTOR);
- else if (pointer_mode == GLADE_POINTER_ADD_WIDGET)
- glade_cursor_set (event->window, GLADE_CURSOR_ADD_WIDGET);
-
- return FALSE;
-}
-
-static gboolean
-glade_placeholder_button_press (GtkWidget *widget, GdkEventButton *event)
-{
- GladePlaceholder *placeholder;
- GladeProject *project;
- GladeWidgetAdaptor *adaptor;
- GladePalette *palette;
- gboolean handled = FALSE;
-
- g_return_val_if_fail (GLADE_IS_PLACEHOLDER (widget), FALSE);
-
- adaptor = glade_palette_get_current_item (glade_app_get_palette ());
-
- palette = glade_app_get_palette ();
- placeholder = GLADE_PLACEHOLDER (widget);
- project = glade_placeholder_get_project (placeholder);
-
- if (!GTK_WIDGET_HAS_FOCUS (widget))
- gtk_widget_grab_focus (widget);
-
- if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
- {
- if (adaptor != NULL)
- {
- /* A widget type is selected in the palette.
- * Add a new widget of that type.
- */
- glade_command_create
- (adaptor,
- glade_placeholder_get_parent (placeholder),
- placeholder, project);
-
- glade_palette_deselect_current_item (glade_app_get_palette(), TRUE);
-
- /* reset the cursor */
- glade_cursor_set (event->window, GLADE_CURSOR_SELECTOR);
-
- handled = TRUE;
- }
- }
- else if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
- {
- glade_popup_placeholder_pop (placeholder, event);
- handled = TRUE;
- }
-
- return handled;
-}
-
-static gboolean
-glade_placeholder_popup_menu (GtkWidget *widget)
-{
- g_return_val_if_fail (GLADE_IS_PLACEHOLDER (widget), FALSE);
-
- glade_popup_placeholder_pop (GLADE_PLACEHOLDER (widget), NULL);
-
- return TRUE;
-}
-
-GladeWidget *
-glade_placeholder_get_parent (GladePlaceholder *placeholder)
-{
- GtkWidget *widget;
- GladeWidget *parent = NULL;
-
- g_return_val_if_fail (GLADE_IS_PLACEHOLDER (placeholder), NULL);
-
- for (widget = gtk_widget_get_parent (GTK_WIDGET (placeholder));
- widget != NULL;
- widget = gtk_widget_get_parent (widget))
- {
- if ((parent = glade_widget_get_from_gobject (widget)) != NULL)
- break;
- }
- return parent;
-}