[Tux4kids-commits] r1227 - in tux4kids-admin/trunk: libtux4kidsadmin tux4kids-admin/plugins tux4kids-admin/src

Michał Świtakowski swistakers-guest at alioth.debian.org
Fri Jul 17 22:10:17 UTC 2009


Author: swistakers-guest
Date: 2009-07-17 22:10:17 +0000 (Fri, 17 Jul 2009)
New Revision: 1227

Added:
   tux4kids-admin/trunk/libtux4kidsadmin/objectFactory.h
   tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.cpp
   tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.h
   tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory_p.h
Modified:
   tux4kids-admin/trunk/libtux4kidsadmin/CMakeLists.txt
   tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.cpp
   tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.pro
   tux4kids-admin/trunk/libtux4kidsadmin/profileDir.cpp
   tux4kids-admin/trunk/libtux4kidsadmin/schoolData.cpp
   tux4kids-admin/trunk/libtux4kidsadmin/studentDir.cpp
   tux4kids-admin/trunk/tux4kids-admin/plugins/pluginInterface.h
   tux4kids-admin/trunk/tux4kids-admin/src/errorLog.h
Log:
object factories

Modified: tux4kids-admin/trunk/libtux4kidsadmin/CMakeLists.txt
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/CMakeLists.txt	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/libtux4kidsadmin/CMakeLists.txt	2009-07-17 22:10:17 UTC (rev 1227)
@@ -5,7 +5,8 @@
 	libtux4kidsadmin.cpp
 	profileDir.cpp 
 	schoolData.cpp
-	studentDir.cpp )
+	studentDir.cpp 
+	profileDirFactory.cpp )
 
 SET(LIBTUX4KIDSADMIN_MOC_HEADERS 
 	profileDir.h 

Modified: tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.cpp	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.cpp	2009-07-17 22:10:17 UTC (rev 1227)
@@ -1,6 +1,5 @@
 #include "libtux4kidsadmin.h"
 
-
 Libtux4kidsadmin::Libtux4kidsadmin()
 {
 

Modified: tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.pro
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.pro	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/libtux4kidsadmin/libtux4kidsadmin.pro	2009-07-17 22:10:17 UTC (rev 1227)
@@ -5,7 +5,8 @@
 SOURCES += libtux4kidsadmin.cpp \
     profileDir.cpp \
     schoolData.cpp \
-    studentDir.cpp
+    studentDir.cpp \
+    profileDirFactory.cpp
 HEADERS += libtux4kidsadmin.h \
     libtux4kidsadmin_global.h \
     profileDir.h \
@@ -13,4 +14,6 @@
     schoolData_p.h \
     profileDir_p.h \
     studentDir.h \
-    studentDir_p.h
+    studentDir_p.h \
+    profileDirFactory.h \
+    profileDirFactory_p.h

Added: tux4kids-admin/trunk/libtux4kidsadmin/objectFactory.h
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/objectFactory.h	                        (rev 0)
+++ tux4kids-admin/trunk/libtux4kidsadmin/objectFactory.h	2009-07-17 22:10:17 UTC (rev 1227)
@@ -0,0 +1,162 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// The folowing implementation is based on Robert Geiman's ideas published on:
+// http://www.gamedev.net/reference/articles/article841.asp
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+// ObjectFactory
+//
+// The ObjectFactory class is a object factory implementation.  It allows users
+// to register and unregister classes during run-time by specifying a
+// user-defined unique identifier per class.  Instances of any registered class
+// can then be instantiated simply by calling the create method and passing the
+// proper unique identifier.
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (C) 2004 Robert Geiman.
+//
+// Permission to copy, modify, and use this code for personal and commercial
+// software is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without any expressed or implied warranty.
+//
+// Any comments or questions can be sent to: rgeiman at buckeye-express.com
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OBJECT_FACTORY_H
+#define OBJECT_FACTORY_H
+
+#include <QMap>
+
+/****************************** 0 parameters *************************/
+
+template <typename CtorSignature, typename UniqueIdType> class ObjectFactory;
+
+template<typename BaseClassType, typename ClassType>
+BaseClassType createObject()
+{
+	return new ClassType();
+}
+
+template<typename BaseClassType, typename UniqueIdType>
+class ObjectFactory<BaseClassType (), UniqueIdType>
+{
+protected:
+	typedef BaseClassType (*CreateObjectFunc)();
+
+public:
+	template<typename ClassType>
+	bool registerType(UniqueIdType uniqueId)
+	{
+		if (m_objectCreator.contains(uniqueId))
+			return false;
+		m_objectCreator[uniqueId] = &createObject<BaseClassType, ClassType>;
+			return true;
+	}
+
+	bool unregisterType(UniqueIdType uniqueId)
+	{
+		return (m_objectCreator.remove(uniqueId) >= 1);
+	}
+
+	BaseClassType create(UniqueIdType uniqueId)
+	{
+		if (!m_objectCreator.contains(uniqueId))
+			return 0;
+		else
+			return new BaseClassType();
+	}
+
+protected:
+	QMap <UniqueIdType, CreateObjectFunc> m_objectCreator;
+};
+
+/****************************** 1 parameter *************************/
+
+template<typename BaseClassType, typename Param1Type, typename ClassType>
+BaseClassType createObject(Param1Type param1)
+{
+	return new ClassType(param1);
+}
+
+template<typename BaseClassType, typename Param1Type, typename UniqueIdType>
+class ObjectFactory<BaseClassType (Param1Type), UniqueIdType>
+{
+protected:
+	typedef BaseClassType (*CreateObjectFunc)(Param1Type);
+
+public:
+
+	template<typename ClassType>
+	bool registerType(UniqueIdType uniqueId)
+	{
+		if (m_objectCreator.contains(uniqueId))
+			return false;
+		m_objectCreator[uniqueId] = &createObject<BaseClassType, Param1Type, ClassType>;
+			return true;
+	}
+
+	bool unregisterType(UniqueIdType uniqueId)
+	{
+		return (m_objectCreator.remove(uniqueId) >= 1);
+	}
+
+	BaseClassType create(UniqueIdType uniqueId, Param1Type param1)
+	{
+		if (!m_objectCreator.contains(uniqueId))
+			return 0;
+		else
+			return new BaseClassType(param1);
+	}
+
+protected:
+	QMap <UniqueIdType, CreateObjectFunc> m_objectCreator;
+
+};
+
+/****************************** 2 parameters *************************/
+
+template<typename BaseClassType, typename Param1Type, typename Param2Type, typename ClassType>
+BaseClassType createObject(Param1Type param1, Param2Type param2)
+{
+	return new ClassType(param1, param2);
+}
+
+template<typename BaseClassType, typename Param1Type, typename Param2Type, typename UniqueIdType>
+class ObjectFactory<BaseClassType (Param1Type, Param2Type), UniqueIdType>
+{
+protected:
+	typedef BaseClassType (*CreateObjectFunc)(Param1Type);
+
+public:
+
+	template<typename ClassType>
+	bool registerType(UniqueIdType uniqueId)
+	{
+		if (m_objectCreator.contains(uniqueId))
+			return false;
+		m_objectCreator[uniqueId] = &createObject<BaseClassType, Param1Type, ClassType>;
+			return true;
+	}
+
+	bool unregisterType(UniqueIdType uniqueId)
+	{
+		return (m_objectCreator.remove(uniqueId) >= 1);
+	}
+
+	BaseClassType create(UniqueIdType uniqueId, Param1Type param1, Param2Type param2)
+	{
+		if (!m_objectCreator.contains(uniqueId))
+			return 0;
+		else
+			return new BaseClassType(param1, param2);
+	}
+
+protected:
+	QMap <UniqueIdType, CreateObjectFunc> m_objectCreator;
+};
+
+#endif
+

Modified: tux4kids-admin/trunk/libtux4kidsadmin/profileDir.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/profileDir.cpp	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/libtux4kidsadmin/profileDir.cpp	2009-07-17 22:10:17 UTC (rev 1227)
@@ -1,5 +1,6 @@
 #include "profileDir.h"
 #include "profileDir_p.h"
+#include "objectFactory.h"
 
 #include <QString>
 

Added: tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.cpp	                        (rev 0)
+++ tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.cpp	2009-07-17 22:10:17 UTC (rev 1227)
@@ -0,0 +1,69 @@
+#include "profileDirFactory.h"
+#include "profileDirFactory_p.h"
+
+#include <QDebug>
+
+ProfileDirFactory *ProfileDirFactory::m_instance = 0;
+
+/************************* ProfileDirFactoryCleaner *******************/
+
+class ProfileDirFactoryCleaner
+{
+public:
+	ProfileDirFactoryCleaner() {}
+	~ProfileDirFactoryCleaner()
+	{
+		ProfileDirFactory::destroy();
+		qDebug() << "destroying ProfileDirFactory";
+	}
+};
+
+static const ProfileDirFactoryCleaner ProfileDirFactoryCleanerInstance;
+
+/************************* ProfileDirFactoryPrivate *******************/
+
+ProfileDirFactoryPrivate::ProfileDirFactoryPrivate()
+{
+}
+
+ProfileDirFactoryPrivate::~ProfileDirFactoryPrivate()
+{
+}
+
+/************************* ProfileDirFactory *******************/
+
+ProfileDirFactory::ProfileDirFactory()
+		: d_ptr(new ProfileDirFactoryPrivate)
+{
+	Q_D(ProfileDirFactory);
+	d->q_ptr = this;
+}
+
+ProfileDirFactory::ProfileDirFactory(ProfileDirFactoryPrivate &dd)
+		: d_ptr(&dd)
+{
+}
+
+ProfileDirFactory::~ProfileDirFactory()
+{
+	Q_D(ProfileDirFactory);
+	delete d;
+}
+
+ProfileDirFactory &ProfileDirFactory::instance()
+{
+	if (m_instance == 0) {
+		m_instance = new ProfileDirFactory();
+	}
+	return *m_instance;
+}
+
+void ProfileDirFactory::destroy()
+{
+	if(m_instance != 0)
+	{
+		delete m_instance;
+		m_instance = 0;
+	}
+}
+

Added: tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.h
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.h	                        (rev 0)
+++ tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory.h	2009-07-17 22:10:17 UTC (rev 1227)
@@ -0,0 +1,34 @@
+#ifndef PROFILEDIRFACTORY_H
+#define PROFILEDIRFACTORY_H
+
+#include <QtGlobal>
+#include <QString>
+
+#include "profileDirFactory_p.h"
+
+class ProfileDirFactory
+{
+public:
+	ProfileDirFactory();
+	~ProfileDirFactory();
+
+	static ProfileDirFactory &instance();
+	static void destroy();
+	template<typename ClassType>
+	bool registerType(QString uniqueId)
+	{
+		Q_D(ProfileDirFactory);
+		return d->objectFactory.registerType<ClassType>(uniqueId);
+	}
+
+protected:
+	ProfileDirFactoryPrivate * const d_ptr;
+	ProfileDirFactory(ProfileDirFactoryPrivate &dd);
+
+	static ProfileDirFactory* m_instance;
+
+private:
+	Q_DECLARE_PRIVATE(ProfileDirFactory)
+};
+
+#endif // PROFILEDIRFACTORY_H

Added: tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory_p.h
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory_p.h	                        (rev 0)
+++ tux4kids-admin/trunk/libtux4kidsadmin/profileDirFactory_p.h	2009-07-17 22:10:17 UTC (rev 1227)
@@ -0,0 +1,24 @@
+#ifndef PROFILEDIRFACTORY_P_H
+#define PROFILEDIRFACTORY_P_H
+
+#include <QtGlobal>
+#include "objectFactory.h"
+
+class ProfileDir;
+class ProfileDirFactory;
+class QObject;
+class QString;
+
+class ProfileDirFactoryPrivate
+{
+public:
+	Q_DECLARE_PUBLIC(ProfileDirFactory)
+	ProfileDirFactoryPrivate();
+	virtual ~ProfileDirFactoryPrivate();
+
+	ProfileDirFactory *q_ptr;
+	ObjectFactory<ProfileDir (QString, QObject), QString> objectFactory;
+
+};
+
+#endif // PROFILEDIRFACTORY_P_H

Modified: tux4kids-admin/trunk/libtux4kidsadmin/schoolData.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/schoolData.cpp	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/libtux4kidsadmin/schoolData.cpp	2009-07-17 22:10:17 UTC (rev 1227)
@@ -61,6 +61,11 @@
 	d->q_ptr = this;
 }
 
+SchoolData::SchoolData(SchoolDataPrivate &dd, QObject *parent)
+		: QObject(parent), d_ptr(&dd)
+{
+}
+
 SchoolData::~SchoolData()
 {
 	Q_D(SchoolData);

Modified: tux4kids-admin/trunk/libtux4kidsadmin/studentDir.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/studentDir.cpp	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/libtux4kidsadmin/studentDir.cpp	2009-07-17 22:10:17 UTC (rev 1227)
@@ -40,6 +40,11 @@
 	d->q_ptr = this;
 }
 
+StudentDir::StudentDir(StudentDirPrivate &dd, QObject *parent)
+		: QObject(parent), d_ptr(&dd)
+{
+}
+
 StudentDir::~StudentDir()
 {
 	Q_D(StudentDir);

Modified: tux4kids-admin/trunk/tux4kids-admin/plugins/pluginInterface.h
===================================================================
--- tux4kids-admin/trunk/tux4kids-admin/plugins/pluginInterface.h	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/tux4kids-admin/plugins/pluginInterface.h	2009-07-17 22:10:17 UTC (rev 1227)
@@ -14,7 +14,7 @@
 	virtual QString name() const = 0;
 	virtual QString version() const = 0;
 
-	virtual ProfileDir *newProfileDir(QString path) const = 0;
+//	virtual ProfileDir *newProfileDir(QString path) const = 0;
 
 	virtual QWidget *mainWidget() = 0;
 

Modified: tux4kids-admin/trunk/tux4kids-admin/src/errorLog.h
===================================================================
--- tux4kids-admin/trunk/tux4kids-admin/src/errorLog.h	2009-07-17 21:37:30 UTC (rev 1226)
+++ tux4kids-admin/trunk/tux4kids-admin/src/errorLog.h	2009-07-17 22:10:17 UTC (rev 1227)
@@ -9,9 +9,9 @@
 	ErrorLog();
 	static ErrorLog* Instance();
 	static void Destroy();
+	static void log(const QString &message, const QString &userMessage = QString());
 
-	static void log(const QString &message, const QString &userMessage = QString());
-private:
+protected:
 	static ErrorLog* instance;
 
 	QFile *logFile;




More information about the Tux4kids-commits mailing list