[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