[glade] GladeEditorTable: Make the editor page type a property.



commit 9ce0b07fb9b01482dfa354cd0abe31e65518c68a
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sat Apr 13 23:16:58 2013 +0900

    GladeEditorTable: Make the editor page type a property.
    
    This way we can build/embed GladeEditorTable widgets in other editors.

 gladeui/glade-editor-table.c | 94 ++++++++++++++++++++++++++++++++++----------
 gladeui/glade.h              |  1 +
 2 files changed, 75 insertions(+), 20 deletions(-)
---
diff --git a/gladeui/glade-editor-table.c b/gladeui/glade-editor-table.c
index 3a8448f..4b99bb1 100644
--- a/gladeui/glade-editor-table.c
+++ b/gladeui/glade-editor-table.c
@@ -20,18 +20,46 @@
  */
 
 #include <config.h>
-#include <gladeui/glade.h>
 #include <glib/gi18n-lib.h>
+#include "glade.h"
+#include "gladeui-enum-types.h"
 
 #include "glade-editor-table.h"
 
+
+#define BLOCK_NAME_ENTRY_CB(table)                                     \
+       do { if (table->priv->name_entry)                                       \
+                       g_signal_handlers_block_by_func (G_OBJECT (table->priv->name_entry), \
+                                                        G_CALLBACK (widget_name_edited), table); \
+       } while (0);
+
+#define UNBLOCK_NAME_ENTRY_CB(table)                                   \
+       do { if (table->priv->name_entry)                                       \
+                       g_signal_handlers_unblock_by_func (G_OBJECT (table->priv->name_entry), \
+                                                          G_CALLBACK (widget_name_edited), table); \
+       } while (0);
+
+
+
 static void glade_editor_table_init          (GladeEditorTable * self);
 static void glade_editor_table_class_init    (GladeEditorTableClass * klass);
-static void glade_editor_table_dispose       (GObject * object);
+
+static void glade_editor_table_dispose       (GObject         *object);
+static void glade_editor_table_set_property  (GObject         *object,
+                                             guint            prop_id,
+                                             const GValue    *value,
+                                             GParamSpec      *pspec);
+
 static void glade_editor_table_editable_init (GladeEditableIface * iface);
 static void glade_editor_table_realize       (GtkWidget * widget);
 static void glade_editor_table_grab_focus    (GtkWidget * widget);
 
+static void append_name_field (GladeEditorTable   *table);
+static void append_items      (GladeEditorTable   *table,
+                              GladeWidgetAdaptor *adaptor,
+                              GladeEditorPageType type);
+
+
 struct _GladeEditorTablePrivate
 {
   GladeWidgetAdaptor *adaptor; /* The GladeWidgetAdaptor this
@@ -62,24 +90,15 @@ struct _GladeEditorTablePrivate
   gint rows;
 };
 
+enum {
+  PROP_0,
+  PROP_PAGE_TYPE,
+};
+
 G_DEFINE_TYPE_WITH_CODE (GladeEditorTable, glade_editor_table, GTK_TYPE_GRID,
                          G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE,
                                                 glade_editor_table_editable_init));
 
-
-#define BLOCK_NAME_ENTRY_CB(table)                                     \
-       do { if (table->priv->name_entry)                                       \
-                       g_signal_handlers_block_by_func (G_OBJECT (table->priv->name_entry), \
-                                                        G_CALLBACK (widget_name_edited), table); \
-       } while (0);
-
-#define UNBLOCK_NAME_ENTRY_CB(table)                                   \
-       do { if (table->priv->name_entry)                                       \
-                       g_signal_handlers_unblock_by_func (G_OBJECT (table->priv->name_entry), \
-                                                          G_CALLBACK (widget_name_edited), table); \
-       } while (0);
-
-
 static void
 glade_editor_table_class_init (GladeEditorTableClass * klass)
 {
@@ -87,9 +106,18 @@ glade_editor_table_class_init (GladeEditorTableClass * klass)
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   object_class->dispose = glade_editor_table_dispose;
+  object_class->set_property = glade_editor_table_set_property;
+
   widget_class->realize = glade_editor_table_realize;
   widget_class->grab_focus = glade_editor_table_grab_focus;
 
+  g_object_class_install_property
+      (object_class, PROP_PAGE_TYPE,
+       g_param_spec_enum ("page-type", _("Page Type"),
+                         _("The editor page type to create this GladeEditorTable for"),
+                         GLADE_TYPE_EDITOR_PAGE_TYPE, GLADE_PAGE_GENERAL,
+                         G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+
   g_type_class_add_private (klass, sizeof (GladeEditorTablePrivate));
 }
 
@@ -123,6 +151,24 @@ glade_editor_table_dispose (GObject * object)
   G_OBJECT_CLASS (glade_editor_table_parent_class)->dispose (object);
 }
 
+static void
+glade_editor_table_set_property (GObject         *object,
+                                guint            prop_id,
+                                const GValue    *value,
+                                GParamSpec      *pspec)
+{
+  GladeEditorTable *table = GLADE_EDITOR_TABLE (object);
+
+  switch (prop_id)
+    {
+    case PROP_PAGE_TYPE:
+      table->priv->type = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
 
 static void
 glade_editor_table_realize (GtkWidget * widget)
@@ -213,6 +259,17 @@ glade_editor_table_load (GladeEditable * editable, GladeWidget * widget)
   GladeEditorProperty *property;
   GList *list;
 
+  /* Setup the table the first time the widget is loaded */
+  if (widget && table->priv->adaptor == NULL)
+    {
+      table->priv->adaptor = glade_widget_get_adaptor (widget);
+
+      if (table->priv->type == GLADE_PAGE_GENERAL)
+       append_name_field (table);
+
+      append_items (table, table->priv->adaptor, table->priv->type);
+    }
+
   /* abort mission */
   if (table->priv->loaded_widget == widget)
     return;
@@ -458,16 +515,13 @@ glade_editor_table_new (GladeWidgetAdaptor * adaptor, GladeEditorPageType type)
 
   g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
 
-  table = g_object_new (GLADE_TYPE_EDITOR_TABLE, NULL);
+  table = g_object_new (GLADE_TYPE_EDITOR_TABLE, "page-type", type, NULL);
   table->priv->adaptor = adaptor;
-  table->priv->type = type;
 
   if (type == GLADE_PAGE_GENERAL)
     append_name_field (table);
 
   append_items (table, adaptor, type);
 
-  gtk_widget_show (GTK_WIDGET (table));
-
   return GTK_WIDGET (table);
 }
diff --git a/gladeui/glade.h b/gladeui/glade.h
index a6195e4..88f6dc6 100644
--- a/gladeui/glade.h
+++ b/gladeui/glade.h
@@ -35,6 +35,7 @@
 #include <gladeui/glade-command.h>
 #include <gladeui/glade-design-view.h>
 #include <gladeui/glade-editor.h>
+#include <gladeui/glade-editor-skeleton.h>
 #include <gladeui/glade-editor-property.h>
 #include <gladeui/glade-palette.h>
 #include <gladeui/glade-clipboard.h>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]