manager.cpp
1/***************************************************************************
2 * This file is part of the KDE project
3 * copyright (C) 2005 by Sebastian Sauer (mail@dipe.org)
4 * copyright (C) 2005 by Tobi Krebs (tobi.krebs@gmail.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this program; see the file COPYING. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 ***************************************************************************/
19
20#include "manager.h"
21#include "action.h"
22#include "function.h"
23#include "macro.h"
24#include "exception.h"
25
26#include <tqobject.h>
27#include <tqwidget.h>
28#include <tqdom.h>
29#include <kxmlguibuilder.h>
30#include <kdebug.h>
31
32using namespace KoMacro;
33
34namespace KoMacro {
35
40 class Manager::Private
41 {
42 public:
43 KXMLGUIClient* const xmlguiclient;
44 TQMap<TQString, TDESharedPtr<Macro > > macros;
45
46 TQStringList actionnames;
47 TQMap<TQString, TDESharedPtr<Action> > actions;
48
49 TQMap<TQString, TQGuardedPtr<TQObject> > objects;
50
51 Private(KXMLGUIClient* const xmlguiclient)
52 : xmlguiclient(xmlguiclient)
53 {
54 }
55 };
56
58 static ::KoMacro::Manager* _self = 0;
59
61 static KStaticDeleter< ::KoMacro::Manager > _manager;
62
63}
64
65void Manager::init(KXMLGUIClient* xmlguiclient)
66{
67 if(! _self) {
68 ::KoMacro::Manager* manager = new ::KoMacro::Manager(xmlguiclient);
69 _manager.setObject(_self, manager);
70 }
71 else {
72 throw Exception("Already initialized.");
73 }
74}
75
77{
78 //Q_ASSERT(_self);
79 return _self;
80}
81
82Manager::Manager(KXMLGUIClient* const xmlguiclient)
83 : d( new Private(xmlguiclient) ) // create the private d-pointer instance.
84{
85 kdDebug() << "Manager::Manager() Ctor" << endl;
86 TQObject* obj = dynamic_cast<TQObject*>(xmlguiclient);
87 if(obj) {
88 d->objects.replace(obj->name(), obj);
89 }
90
91 //TESTCASE
92 d->objects.replace("TestCase", new TQWidget());
93}
94
95Manager::~Manager()
96{
97 // destroy the private d-pointer instance.
98 delete d;
99}
100
101KXMLGUIClient* Manager::guiClient() const
102{
103 return d->xmlguiclient;
104}
105
106bool Manager::hasMacro(const TQString& macroname)
107{
108 return d->macros.contains(macroname);
109}
110
111TDESharedPtr<Macro> Manager::getMacro(const TQString& macroname)
112{
113 return d->macros[macroname];
114}
115
116void Manager::addMacro(const TQString& macroname, TDESharedPtr<Macro> macro)
117{
118 d->macros.replace(macroname, macro);
119}
120
121void Manager::removeMacro(const TQString& macroname)
122{
123 d->macros.remove(macroname);
124}
125
126TDESharedPtr<Macro> Manager::createMacro(const TQString& macroname)
127{
128 TDESharedPtr<Macro> macro = TDESharedPtr<Macro>( new Macro(macroname) );
129 return macro;
130}
131
132TDESharedPtr<Action> Manager::action(const TQString& name) const
133{
134 return d->actions[name];
135}
136
138{
139 return d->actions;
140}
141
142TQStringList Manager::actionNames() const
143{
144 return d->actionnames;
145}
146
147void Manager::publishAction(TDESharedPtr<Action> action)
148{
149 const TQString name = action->name();
150 if(! d->actions.contains(name)) {
151 d->actionnames.append(name);
152 }
153 d->actions.replace(name, action);
154}
155
156void Manager::publishObject(const TQString& name, TQObject* object)
157{
158 Q_ASSERT(! d->objects.contains(name));
159 d->objects.replace(name, object);
160}
161
162TQGuardedPtr<TQObject> Manager::object(const TQString& name) const
163{
164 return d->objects[name];
165}
166
167TQMap<TQString, TQGuardedPtr<TQObject> > Manager::objects() const
168{
169 return d->objects;
170}
TQMap< TQString, TDESharedPtr< Action > > Map
Property to get/set the name.
Definition action.h:59
Base Exception class.
Definition exception.h:35
The Macro class implements all the action-handling.
Definition macro.h:45
The Manager class acts as window-wide manager for macros.
Definition manager.h:76
TQGuardedPtr< TQObject > object(const TQString &name) const
Definition manager.cpp:162
TQMap< TQString, TQGuardedPtr< TQObject > > objects() const
Definition manager.cpp:167
TDESharedPtr< Macro > createMacro(const TQString &macroname)
Factory function to create a new Macro instances.
Definition manager.cpp:126
void publishObject(const TQString &name, TQObject *object)
Publish the passed TQObject object.
Definition manager.cpp:156
bool hasMacro(const TQString &macroname)
Definition manager.cpp:106
static void init(KXMLGUIClient *xmlguiclient)
Initialize this Manager singleton.
Definition manager.cpp:65
static Manager * self()
Definition manager.cpp:76
TDESharedPtr< Action > action(const TQString &name) const
Definition manager.cpp:132
KXMLGUIClient * guiClient() const
Definition manager.cpp:101
void addMacro(const TQString &macroname, TDESharedPtr< Macro > macro)
Add a new Macro to the list of known macros.
Definition manager.cpp:116
TQMap< TQString, TDESharedPtr< Action > > actions() const
Definition manager.cpp:137
void publishAction(TDESharedPtr< Action > action)
Publish the Action action .
Definition manager.cpp:147
void removeMacro(const TQString &macroname)
Remove the Macro defined with macroname .
Definition manager.cpp:121
TQStringList actionNames() const
Definition manager.cpp:142
TDESharedPtr< Macro > getMacro(const TQString &macroname)
Definition manager.cpp:111