void ctkPlugin::start(const StartOptions& options) { Q_D(ctkPlugin); if (d->state == UNINSTALLED) { throw std::logic_error("ctkPlugin is uninstalled"); } // Initialize the activation; checks initialization of lazy // activation. //TODO 1: If activating or deactivating, wait a litle // we don't use mutliple threads to start plugins for now //waitOnActivation(lock, "ctkPlugin::start", false); //2: start() is idempotent, i.e., nothing to do when already started if (d->state == ACTIVE) { return; } //3: Record non-transient start requests. if ((options & START_TRANSIENT) == 0) { d->setAutostartSetting(options); } //4: Resolve plugin (if needed) d->getUpdatedState(); //5: Eager? if ((options & START_ACTIVATION_POLICY) && !d->eagerActivation ) { if (STARTING == d->state) return; d->state = STARTING; d->pluginContext.reset(new ctkPluginContext(this->d_func())); ctkPluginEvent pluginEvent(ctkPluginEvent::LAZY_ACTIVATION, d->q_ptr); d->fwCtx->listeners.emitPluginChanged(pluginEvent); } else { d->finalizeActivation(); } }
ctkPluginBrowser::ctkPluginBrowser(ctkPluginFramework* framework) : framework(framework) { pluginEventTypeToString[ctkPluginEvent::INSTALLED] = "Installed"; pluginEventTypeToString[ctkPluginEvent::LAZY_ACTIVATION] = "Lazy Activation"; pluginEventTypeToString[ctkPluginEvent::RESOLVED] = "Resolved"; pluginEventTypeToString[ctkPluginEvent::STARTED] = "Started"; pluginEventTypeToString[ctkPluginEvent::STARTING] = "Starting"; pluginEventTypeToString[ctkPluginEvent::STOPPED] = "Stopped"; pluginEventTypeToString[ctkPluginEvent::STOPPING] = "Stopping"; pluginEventTypeToString[ctkPluginEvent::UNINSTALLED] = "Uninstalled"; pluginEventTypeToString[ctkPluginEvent::UNRESOLVED] = "Unresolved"; pluginEventTypeToString[ctkPluginEvent::UPDATED] = "Updated"; framework->getPluginContext()->connectFrameworkListener(this, SLOT(frameworkEvent(ctkPluginFrameworkEvent))); framework->getPluginContext()->connectPluginListener(this, SLOT(pluginEvent(ctkPluginEvent))); framework->getPluginContext()->connectServiceListener(this, "serviceEvent"); QStringList pluginDirs; #ifdef CMAKE_INTDIR pluginDirs << CTK_PLUGIN_DIR CMAKE_INTDIR "/"; #else pluginDirs << CTK_PLUGIN_DIR; #endif QStringListIterator dirIt(pluginDirs); while (dirIt.hasNext()) { QApplication::addLibraryPath(dirIt.next()); } QStringList libFilter; libFilter << "*.dll" << "*.so" << "*.dylib"; QDirIterator dirIter(pluginDirs.at(0), libFilter, QDir::Files); while(dirIter.hasNext()) { try { framework->getPluginContext()->installPlugin(QUrl::fromLocalFile(dirIter.next()).toString()); //plugin->start(ctkPlugin::START_ACTIVATION_POLICY); } catch (const ctkPluginException& e) { qCritical() << e.what(); } } framework->start(); ui.setupUi(this); tabifyDockWidget(ui.qtResourcesDockWidget, ui.pluginResourcesDockWidget); editors = new ctkPluginBrowserEditors(ui.centralwidget); QAbstractItemModel* pluginTableModel = new ctkPluginTableModel(framework->getPluginContext(), this); ui.pluginsTableView->setModel(pluginTableModel); QAbstractItemModel* qtresourcesTreeModel = new ctkQtResourcesTreeModel(this); ui.qtResourcesTreeView->setModel(qtresourcesTreeModel); connect(ui.pluginsTableView, SIGNAL(clicked(QModelIndex)), this, SLOT(pluginSelected(QModelIndex))); connect(ui.pluginsTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(pluginDoubleClicked(QModelIndex))); connect(ui.pluginResourcesTreeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(dbResourceDoubleClicked(QModelIndex))); connect(ui.qtResourcesTreeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(qtResourceDoubleClicked(QModelIndex))); startPluginNowAction = new QAction(QIcon(":/pluginbrowser/images/run-now.png"), "Start Plugin (ignore activation policy)", this); startPluginAction = new QAction(QIcon(":/pluginbrowser/images/run.png"), "Start Plugin", this); stopPluginAction = new QAction(QIcon(":/pluginbrowser/images/stop.png"), "Stop Plugin", this); connect(startPluginNowAction, SIGNAL(triggered()), this, SLOT(startPluginNow())); connect(startPluginAction, SIGNAL(triggered()), this, SLOT(startPlugin())); connect(stopPluginAction, SIGNAL(triggered()), this, SLOT(stopPlugin())); startPluginNowAction->setEnabled(false); startPluginAction->setEnabled(false); stopPluginAction->setEnabled(false); ui.pluginToolBar->addAction(startPluginNowAction); ui.pluginToolBar->addAction(startPluginAction); ui.pluginToolBar->addAction(stopPluginAction); QSettings settings; if(settings.contains(SETTINGS_WND_GEOM)) { this->restoreGeometry(settings.value(SETTINGS_WND_GEOM).toByteArray()); } if (settings.contains(SETTINGS_WND_STATE)) { this->restoreState(settings.value(SETTINGS_WND_STATE).toByteArray()); } }