Skip to content

Commit

Permalink
Changed to a common, template based SimpleSetter for handling all bas…
Browse files Browse the repository at this point in the history
…ic properties of the words
  • Loading branch information
dszoboszlay committed Dec 10, 2011
1 parent b5dcd97 commit 5e99d01
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 89 deletions.
1 change: 1 addition & 0 deletions include/common.hpp
@@ -1,3 +1,4 @@
// Common header files to include in all modules
#include <typeinfo>
#include <QtCore>
#include <QtGui>
8 changes: 1 addition & 7 deletions include/setter.hpp
@@ -1,21 +1,15 @@
#ifndef __setter_hpp_included__
#define __setter_hpp_included__

#include <QObject>

class QGraphicsSimpleTextItem;
class QRegion;
class QTransform;
class CloudDef;
class PropSet;

class Setter : public QObject
class Setter
{
Q_OBJECT

public:
Setter(QObject* parent = 0);

virtual void init(const CloudDef& cloud) = 0;

virtual void apply(const PropSet& word,
Expand Down
108 changes: 108 additions & 0 deletions include/simplesetter.hpp
@@ -0,0 +1,108 @@
#ifndef __simplesetter_hpp_included__
#define __simplesetter_hpp_included__

#include <QBrush>
#include <QColor>
#include <QFont>
#include <QGraphicsSimpleTextItem>
#include <QString>
#include "../include/clouddef.hpp"
#include "../include/propset.hpp"
#include "../include/setter.hpp"

// Default property handlers
template <class T>
const char* getPropName()
{
throw "Not implemented";
}

template <class T>
void applyPropValue(QGraphicsSimpleTextItem&, const T&)
{
throw "Not implemented";
}

// QString = text
template <>
const char* getPropName<QString>()
{
return "text";
}

template <>
void applyPropValue<QString>(QGraphicsSimpleTextItem& item,
const QString& value)
{
item.setText(value);
}

// QFont = font
template <>
const char* getPropName<QFont>()
{
return "font";
}

template <>
void applyPropValue<QFont>(QGraphicsSimpleTextItem& item,
const QFont& value)
{
QFont f(value);
f.setPointSizeF(item.font().pointSizeF());
item.setFont(f);
}

// QColor = color
template <>
const char* getPropName<QColor>()
{
return "color";
}

template <>
void applyPropValue<QColor>(QGraphicsSimpleTextItem& item,
const QColor& value)
{
item.setBrush(QBrush(value));
}

// qreal = size
template <>
const char* getPropName<qreal>()
{
return "size";
}

template <>
void applyPropValue<qreal>(QGraphicsSimpleTextItem& item,
const qreal& value)
{
QFont f(item.font());
f.setPointSizeF(value);
item.setFont(f);
}

// The generic setter implementation
template <class T>
class SimpleSetter : public Setter
{
public:
virtual void init(const CloudDef& cloud)
{
_default = cloud.get<T>(getPropName<T>(), _default);
}

virtual void apply(const PropSet& word,
QGraphicsSimpleTextItem& item,
QTransform&,
const QRegion&)
{
applyPropValue<T>(item, word.get<T>(getPropName<T>(), _default));
}

private:
T _default;
};

#endif
35 changes: 0 additions & 35 deletions include/textsetter.hpp

This file was deleted.

9 changes: 8 additions & 1 deletion priv/test1.ini
@@ -1,17 +1,24 @@
text_mode=normal
text_setter=text
color=#00c000

[1]
text=This is word 0!
size=10

[2]
text=This is word 1!
size=20

[3]
text=This is word 2!
size=30

[something]
text=This is word 3!
size=40

[hello]
text=This is word 4!
size=50
color=#ff0000

4 changes: 1 addition & 3 deletions qloud.pro
Expand Up @@ -6,12 +6,10 @@ HEADERS = include/propset.hpp \
include/clouddef.hpp \
include/factory.hpp \
include/setter.hpp \
include/textsetter.hpp \
include/simplesetter.hpp \
include/cloudgen.hpp
SOURCES = src/propset.cpp \
src/clouddef.cpp \
src/setter.cpp \
src/textsetter.cpp \
src/cloudgen.cpp \
src/main.cpp
FORMS =
Expand Down
33 changes: 26 additions & 7 deletions src/cloudgen.cpp
@@ -1,7 +1,7 @@
#include "../include/common.hpp"
#include "../include/clouddef.hpp"
#include "../include/cloudgen.hpp"
#include "../include/textsetter.hpp"
#include "../include/simplesetter.hpp"

template <class T>
Setter* setterFact() {
Expand All @@ -10,7 +10,7 @@ Setter* setterFact() {

template <class T>
SetterDef setterDef() {
return SetterDef(T::staticMetaObject.className(),
return SetterDef(typeid(T).name(),
setterFact<T>);
}

Expand All @@ -19,17 +19,36 @@ CloudGen::CloudGen(QObject* parent) :
{
SetterDef d;

// Create setter factories
d = setterDef<BasicTextSetter>();
// Create text setter factories
d = setterDef<SimpleSetter<QString> >();
SetterFactory textSetters("text_setter", d);
textSetters.set("text", d);

_setterFactories << textSetters;

// Create font setter factories
d = setterDef<SimpleSetter<QFont> >();
SetterFactory fontSetters("font_setter", d);
fontSetters.set("font", d);

_setterFactories << fontSetters;

// Create color setter factories
d = setterDef<SimpleSetter<QColor> >();
SetterFactory colorSetters("color_setter", d);
colorSetters.set("color", d);

_setterFactories << colorSetters;

// Create size setter factories
d = setterDef<SimpleSetter<qreal> >();
SetterFactory sizeSetters("size_setter", d);
sizeSetters.set("size", d);

_setterFactories << sizeSetters;

/* TODO: add factories for
- font
- size
- color
- weight-scaled size
- orientation
- placement
- word order
Expand Down
7 changes: 0 additions & 7 deletions src/setter.cpp

This file was deleted.

29 changes: 0 additions & 29 deletions src/textsetter.cpp

This file was deleted.

0 comments on commit 5e99d01

Please sign in to comment.