1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/* This file is part of Step.
Copyright (C) 2007 Vladimir Kuznetsov <ks.vladimir@gmail.com>
Step is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Step is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Step; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef STEP_WORLD_FACTORY_H
#define STEP_WORLD_FACTORY_H
#include <stepcore/factory.h>
class QGraphicsItem;
class QGraphicsScene;
class WorldModel;
class WorldScene;
class WorldGraphicsItem;
class ItemCreator;
class ItemMenuHandler;
class KIcon;
namespace StepCore {
class Item;
}
struct ExtMetaObject
{
ItemCreator* (*newItemCreator)(const QString& className,
WorldModel* worldModel, WorldScene* worldScene);
WorldGraphicsItem* (*newGraphicsItem)(StepCore::Item*, WorldModel*);
ItemMenuHandler* (*newItemMenuHandler)(StepCore::Object*, WorldModel*, QObject*);
bool hasIcon;
KIcon* icon;
};
/** \brief Factory for creation StepCore::Items and
* querying various static properties. */
class WorldFactory: public StepCore::Factory
{
public:
WorldFactory();
~WorldFactory();
/** Get ExtMetaObject for given StepCore::MetaObject */
const ExtMetaObject* extMetaObject(const StepCore::MetaObject* mObject) const
{ return _extMetaObjects.value(mObject, NULL); }
/** Get ExtMetaObject by class name */
const ExtMetaObject* extMetaObject(const QString& name) const
{ return extMetaObject(metaObject(name)); }
/** Create ItemCreator for given class */
ItemCreator* newItemCreator(const QString& className,
WorldModel* worldModel, WorldScene* worldScene) const;
/** Create WorldGraphicsItem for given item */
WorldGraphicsItem* newGraphicsItem(StepCore::Item* item, WorldModel* worldModel) const;
/** Create ItemMenuHandler for given object */
ItemMenuHandler* newItemMenuHandler(StepCore::Object* object,
WorldModel* worldModel, QObject* parent) const;
/** Returns true if the object has associated icon */
bool hasObjectIcon(const StepCore::MetaObject* mObject) const;
/** Get associated icon for given object */
const KIcon& objectIcon(const StepCore::MetaObject* mObject) const;
/** Get class names of the objects on ItemPalette */
QList<QString> paletteMetaObjects() const { return _paletteMetaObjects; }
/** Get class names of the objects in the order of creation */
QList<QString> orderedMetaObjects() const { return _orderedMetaObjects; }
private:
void loadIcon(const StepCore::MetaObject* metaObject, ExtMetaObject* extMetaObject);
QHash<const void*, const ExtMetaObject*> _extMetaObjects;
QList<QString> _paletteMetaObjects;
QList<QString> _orderedMetaObjects;
KIcon* _nullIcon;
};
#endif
|