[tepl] AbstractFactory: add create_tab()
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] AbstractFactory: add create_tab()
- Date: Sat, 29 Jul 2017 17:31:19 +0000 (UTC)
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]