Пример #1
0
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();
  }
}
Пример #2
0
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());
    }
}