summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/plugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/plugin.cpp')
-rw-r--r--umbrello/umbrello/plugin.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/umbrello/umbrello/plugin.cpp b/umbrello/umbrello/plugin.cpp
new file mode 100644
index 00000000..1447afcd
--- /dev/null
+++ b/umbrello/umbrello/plugin.cpp
@@ -0,0 +1,167 @@
+/***************************************************************************
+ plugin.h
+ -------------------
+ begin : Mon Jan 13 2003
+ copyright : (C) 2003 by Andrew Sutton
+ email : ansutton@kent.edu
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program 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. *
+ * *
+ ***************************************************************************/
+
+// own header
+#include "plugin.h"
+
+// KDE includes
+#include <kdebug.h>
+#include <kapplication.h>
+#include <kconfig.h>
+
+// app includes
+#include "pluginloader.h"
+
+using namespace Umbrello;
+
+Plugin::Plugin(QObject *parent,
+ const char *name,
+ const QStringList & /* args */) :
+ QObject(parent, name),
+ Configurable(),
+ _ref(0),
+ _instanceName(name),
+ _config(NULL)
+{
+}
+
+Plugin::~Plugin()
+{
+}
+
+void
+Plugin::ref()
+{
+ _ref++;
+}
+
+void
+Plugin::unload()
+{
+ _ref--;
+ if(_ref == 0) {
+ // save the name
+ QString pluginName = _instanceName;
+
+ // shutdown and delete
+ shutdown();
+ delete this;
+
+ // once the object is destroyed, we can have the plugin loader unload
+ // the library.
+ PluginLoader::instance()->unloadPlugin(pluginName);
+ }
+}
+
+bool
+Plugin::init()
+{
+ bool ret = true;
+
+ // initialize this plugin first - then load other plugins
+ ret = onInit();
+ if(!ret) {
+ kdError() << "failed to initialize " << instanceName() << endl;
+ }
+
+ // configure on load plugins
+ if(ret) {
+ ret = configure();
+ if(!ret) {
+ kdError() << "failed configuration " << instanceName() << endl;
+ }
+ }
+
+ return true;
+}
+
+bool
+Plugin::shutdown()
+{
+ bool ret = true;
+
+ // always unload plugins, even if things are failing
+ unloadPlugins();
+
+ // shutdown this plugin
+ ret = onShutdown();
+ if(!ret) {
+ kdError() << "failed to shutdown " << instanceName() << endl;
+ }
+
+ return true;
+}
+
+QCString
+Plugin::instanceName() const
+{
+ return _instanceName;
+}
+
+KConfig *
+Plugin::config()
+{
+ return _config;
+}
+
+bool
+Plugin::onInit()
+{
+ return true;
+}
+
+bool
+Plugin::onShutdown()
+{
+ return true;
+}
+
+bool
+Plugin::configure()
+{
+ bool ret = true;
+
+ // grab the OnStartup map
+ KConfig *conf = config();
+ if(!conf) {
+ kdDebug() << "no configuration for " << instanceName() << endl;
+ ret = false;
+ }
+
+ if(ret) {
+ // set the config group to Load Actions
+ conf->setGroup("Load Actions");
+
+ // load standard plugins by default
+ loadPlugins(conf, "Load");
+
+ // only load GUI plugins if this is not a terminal app
+ if(KApplication::kApplication()->type() != QApplication::Tty) {
+ loadPlugins(conf, "LoadGUI");
+ }
+ }
+
+ return ret;
+}
+
+QString
+Plugin::category()
+{
+ return QString("miscellaneous");
+}
+
+#include "plugin.moc"