[tepl] AbstractFactory: add create_tab()



commit 9c3ab37320e093ce97b6115ca05dc41c8b8954a3
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sat Jul 29 19:23:04 2017 +0200

    AbstractFactory: add create_tab()

 docs/reference/tepl-3.0-sections.txt |    1 +
 tepl/tepl-abstract-factory.c         |   24 ++++++++++++++++++++++++
 tepl/tepl-abstract-factory.h         |   10 ++++++++++
 tepl/tepl-application-window.c       |    8 +++++---
 4 files changed, 40 insertions(+), 3 deletions(-)
---
diff --git a/docs/reference/tepl-3.0-sections.txt b/docs/reference/tepl-3.0-sections.txt
index 1d0c19f..9e4d97e 100644
--- a/docs/reference/tepl-3.0-sections.txt
+++ b/docs/reference/tepl-3.0-sections.txt
@@ -181,6 +181,7 @@ TeplAbstractFactory
 TeplAbstractFactoryClass
 tepl_abstract_factory_set_singleton
 tepl_abstract_factory_get_singleton
+tepl_abstract_factory_create_tab
 <SUBSECTION Standard>
 TEPL_ABSTRACT_FACTORY
 TEPL_ABSTRACT_FACTORY_CLASS
diff --git a/tepl/tepl-abstract-factory.c b/tepl/tepl-abstract-factory.c
index 10da36d..0015ab5 100644
--- a/tepl/tepl-abstract-factory.c
+++ b/tepl/tepl-abstract-factory.c
@@ -18,6 +18,7 @@
  */
 
 #include "tepl-abstract-factory.h"
+#include "tepl-tab.h"
 
 /**
  * SECTION:abstract-factory
@@ -54,12 +55,20 @@ tepl_abstract_factory_finalize (GObject *object)
        G_OBJECT_CLASS (tepl_abstract_factory_parent_class)->finalize (object);
 }
 
+static TeplTab *
+tepl_abstract_factory_create_tab_default (TeplAbstractFactory *factory)
+{
+       return tepl_tab_new ();
+}
+
 static void
 tepl_abstract_factory_class_init (TeplAbstractFactoryClass *klass)
 {
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
        object_class->finalize = tepl_abstract_factory_finalize;
+
+       klass->create_tab = tepl_abstract_factory_create_tab_default;
 }
 
 static void
@@ -131,3 +140,18 @@ _tepl_abstract_factory_unref_singleton (void)
         * count reaches 0).
         */
 }
+
+/**
+ * tepl_abstract_factory_create_tab:
+ * @factory: the #TeplAbstractFactory.
+ *
+ * Returns: (transfer floating): a new #TeplTab.
+ * Since: 3.0
+ */
+TeplTab *
+tepl_abstract_factory_create_tab (TeplAbstractFactory *factory)
+{
+       g_return_val_if_fail (TEPL_IS_ABSTRACT_FACTORY (factory), NULL);
+
+       return TEPL_ABSTRACT_FACTORY_GET_CLASS (factory)->create_tab (factory);
+}
diff --git a/tepl/tepl-abstract-factory.h b/tepl/tepl-abstract-factory.h
index 8cb2183..d232d19 100644
--- a/tepl/tepl-abstract-factory.h
+++ b/tepl/tepl-abstract-factory.h
@@ -43,10 +43,18 @@ struct _TeplAbstractFactory
        GObject parent;
 };
 
+/**
+ * TeplAbstractFactoryClass:
+ * @parent_class: The parent class.
+ * @create_tab: Virtual function pointer for tepl_abstract_factory_create_tab().
+ *   By default the #TeplTab is created with tepl_tab_new().
+ */
 struct _TeplAbstractFactoryClass
 {
        GObjectClass parent_class;
 
+       TeplTab *       (* create_tab)          (TeplAbstractFactory *factory);
+
        /*< private >*/
        gpointer padding[12];
 };
@@ -57,6 +65,8 @@ void                  tepl_abstract_factory_set_singleton             (TeplAbstractFactory 
*factory);
 
 TeplAbstractFactory *  tepl_abstract_factory_get_singleton             (void);
 
+TeplTab *              tepl_abstract_factory_create_tab                (TeplAbstractFactory *factory);
+
 G_GNUC_INTERNAL
 void                   _tepl_abstract_factory_unref_singleton          (void);
 
diff --git a/tepl/tepl-application-window.c b/tepl/tepl-application-window.c
index 89f5da1..494c407 100644
--- a/tepl/tepl-application-window.c
+++ b/tepl/tepl-application-window.c
@@ -19,8 +19,8 @@
 
 #include "tepl-application-window.h"
 #include <amtk/amtk.h>
+#include "tepl-abstract-factory.h"
 #include "tepl-tab-group.h"
-#include "tepl-tab.h"
 #include "tepl-view.h"
 #include "tepl-signal-group.h"
 
@@ -99,11 +99,13 @@ new_file_cb (GSimpleAction *action,
             gpointer       user_data)
 {
        TeplApplicationWindow *tepl_window = TEPL_APPLICATION_WINDOW (user_data);
+       TeplAbstractFactory *factory;
        TeplTab *new_tab;
 
-       /* TODO: implement an Abstract Factory to create the TeplTab. */
-       new_tab = tepl_tab_new ();
+       factory = tepl_abstract_factory_get_singleton ();
+       new_tab = tepl_abstract_factory_create_tab (factory);
        gtk_widget_show (GTK_WIDGET (new_tab));
+
        tepl_tab_group_append_tab (TEPL_TAB_GROUP (tepl_window), new_tab, TRUE);
 }
 


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