/*************************************************************************** * This file is part of the KDE project * copyright (C) 2005 by Sebastian Sauer (mail@dipe.org) * copyright (C) 2005 by Tobi Krebs (tobi.krebs@gmail.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * This program 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 * Library General Public License for more details. * You should have received a copy of the GNU Library General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. ***************************************************************************/ #include "manager.h" #include "action.h" #include "function.h" #include "macro.h" #include "exception.h" #include #include #include #include #include using namespace KoMacro; namespace KoMacro { /** * @internal d-pointer class to be more flexible on future extension of the * functionality without to much risk to break the binary compatibility. */ class Manager::Private { public: KXMLGUIClient* const xmlguiclient; TQMap > macros; TQStringList actionnames; TQMap > actions; TQMap > objects; Private(KXMLGUIClient* const xmlguiclient) : xmlguiclient(xmlguiclient) { } }; /// Pointer to our static singleton. static ::KoMacro::Manager* _self = 0; /// Automatically deletes our singleton on termination. static KStaticDeleter< ::KoMacro::Manager > _manager; } void Manager::init(KXMLGUIClient* xmlguiclient) { if(! _self) { ::KoMacro::Manager* manager = new ::KoMacro::Manager(xmlguiclient); _manager.setObject(_self, manager); } else { throw Exception("Already initialized."); } } Manager* Manager::self() { //Q_ASSERT(_self); return _self; } Manager::Manager(KXMLGUIClient* const xmlguiclient) : d( new Private(xmlguiclient) ) // create the private d-pointer instance. { kdDebug() << "Manager::Manager() Ctor" << endl; TQObject* obj = dynamic_cast(xmlguiclient); if(obj) { d->objects.tqreplace(obj->name(), obj); } //TESTCASE d->objects.tqreplace("TestCase", new TQWidget()); } Manager::~Manager() { // destroy the private d-pointer instance. delete d; } KXMLGUIClient* Manager::guiClient() const { return d->xmlguiclient; } bool Manager::hasMacro(const TQString& macroname) { return d->macros.tqcontains(macroname); } KSharedPtr Manager::getMacro(const TQString& macroname) { return d->macros[macroname]; } void Manager::addMacro(const TQString& macroname, KSharedPtr macro) { d->macros.tqreplace(macroname, macro); } void Manager::removeMacro(const TQString& macroname) { d->macros.remove(macroname); } KSharedPtr Manager::createMacro(const TQString& macroname) { KSharedPtr macro = KSharedPtr( new Macro(macroname) ); return macro; } KSharedPtr Manager::action(const TQString& name) const { return d->actions[name]; } Action::Map Manager::actions() const { return d->actions; } TQStringList Manager::actionNames() const { return d->actionnames; } void Manager::publishAction(KSharedPtr action) { const TQString name = action->name(); if(! d->actions.tqcontains(name)) { d->actionnames.append(name); } d->actions.tqreplace(name, action); } void Manager::publishObject(const TQString& name, TQObject* object) { Q_ASSERT(! d->objects.tqcontains(name)); d->objects.tqreplace(name, object); } TQGuardedPtr Manager::object(const TQString& name) const { return d->objects[name]; } TQMap > Manager::objects() const { return d->objects; }