27 m_parentWidget(parent),
28 m_appInterface(appInterface),
29 m_pluginMenu(nullptr),
30 m_pclAlgorithmMenu(nullptr),
31 m_actionRemovePCLAlgorithm(nullptr),
32 m_pclAlgorithmActions(this),
33 m_mainPluginToolbar(nullptr),
34 m_showPluginToolbar(nullptr),
35 m_pclAlgorithmsToolbar(nullptr),
36 m_showPCLAlgorithmToolbar(nullptr) {
47 m_pluginMenu->setEnabled(
false);
48 m_pclAlgorithmMenu->setEnabled(
false);
50 m_mainPluginToolbar->setVisible(
false);
52 QVector<ccStdPluginInterface *> coreStdPlugins;
53 QVector<ccStdPluginInterface *> thirdPartyStdPlugins;
55 QVector<ccPclPluginInterface *> corePCLPlugins;
56 QVector<ccPclPluginInterface *> thirdPartyPCLPlugins;
59 if (plugin ==
nullptr) {
65 m_plugins.push_back(plugin);
70 const QString pluginName = plugin->getName();
72 Q_ASSERT(!pluginName.isEmpty());
74 if (pluginName.isEmpty()) {
80 switch (plugin->getType()) {
89 coreStdPlugins.append(stdPlugin);
91 thirdPartyStdPlugins.append(stdPlugin);
94 m_plugins.push_back(stdPlugin);
106 QAction *action =
new QAction(pluginName,
this);
109 action->setIcon(pclPlugin->
getIcon());
110 action->setCheckable(
true);
116 v.setValue(pclPlugin);
120 connect(action, &QAction::triggered,
this,
121 &ccPluginUIManager::enablePCLAlgorithm);
123 m_pclAlgorithmActions.addAction(action);
125 if (pclPlugin->
isCore()) {
126 corePCLPlugins.append(pclPlugin);
128 thirdPartyPCLPlugins.append(pclPlugin);
131 m_plugins.push_back(pclPlugin);
140 m_plugins.push_back(ioPlugin);
148 QList<QAction *> actions = plugin->getActions();
150 addActionsToMenu(plugin, actions);
151 addActionsToToolBar(plugin, actions);
157 if (!thirdPartyStdPlugins.isEmpty()) {
158 m_pluginMenu->addSection(
"3rd std Party");
161 QList<QAction *> actions = plugin->getActions();
163 addActionsToMenu(plugin, actions);
164 addActionsToToolBar(plugin, actions);
172 QVector<QList<QAction *>> allModuleActions = plugin->getActions();
173 QVector<QString> moduleNames = plugin->getModuleNames();
174 assert(allModuleActions.size() == moduleNames.size());
176 if (!plugin->getName().isEmpty()) {
177 m_pclAlgorithmMenu->setTitle(plugin->getName());
180 for (
int i = 0; i < moduleNames.size(); ++i) {
181 addActionsToMenu(moduleNames[i], allModuleActions[i]);
182 addActionsToToolBar(moduleNames[i], allModuleActions[i]);
188 if (!thirdPartyPCLPlugins.isEmpty()) {
189 m_pclAlgorithmMenu->addSection(
"3rd pcl Party");
192 QVector<QList<QAction *>> allModuleActions = plugin->getActions();
193 QVector<QString> moduleNames = plugin->getModuleNames();
194 assert(allModuleActions.size() == moduleNames.size());
196 for (
int i = 0; i < moduleNames.size(); ++i) {
197 addActionsToMenu(moduleNames[i], allModuleActions[i]);
198 addActionsToToolBar(moduleNames[i], allModuleActions[i]);
205 m_pluginMenu->setEnabled(!m_pluginMenu->isEmpty());
207 if (m_mainPluginToolbar->isEnabled()) {
208 m_showPluginToolbar->setEnabled(
true);
211 m_pclAlgorithmMenu->setEnabled(!m_pclAlgorithmMenu->isEmpty());
212 m_pclAlgorithmsToolbar->setEnabled(
213 !m_pclAlgorithmMenu->isEmpty());
216 m_showPluginToolbar->setChecked(m_mainPluginToolbar->isEnabled());
218 if (m_pclAlgorithmsToolbar->isEnabled()) {
219 m_showPCLAlgorithmToolbar->setEnabled(
true);
222 m_showPCLAlgorithmToolbar->setChecked(m_pclAlgorithmsToolbar->isEnabled());
228 return m_pclAlgorithmMenu;
234 return m_additionalPluginToolbars;
238 return m_showPluginToolbar;
244 return m_showPCLAlgorithmToolbar;
252 return toolbar->objectName() ==
"Python Plugin";
257 const bool hasActiveView = (active3DView !=
nullptr);
259 const QList<QAction *> actionList = m_pclAlgorithmActions.actions();
261 for (QAction *action : actionList) {
262 action->setEnabled(hasActiveView);
294 void ccPluginUIManager::setupActions() {
301 m_showPluginToolbar =
new QAction(tr(
"Plugins"),
this);
302 m_showPluginToolbar->setCheckable(
true);
303 m_showPluginToolbar->setEnabled(
false);
305 m_showPCLAlgorithmToolbar =
new QAction(tr(
"PCL Algorithm"),
this);
306 m_showPCLAlgorithmToolbar->setCheckable(
true);
307 m_showPCLAlgorithmToolbar->setEnabled(
false);
310 void ccPluginUIManager::setupMenus() {
311 m_pluginMenu =
new QMenu(tr(
"Plugins"), m_parentWidget);
312 m_pclAlgorithmMenu =
new QMenu(tr(
"PCL ALgorithms"), m_parentWidget);
316 const QList<QAction *> &actions) {
318 if (actions.size() > 1) {
319 QMenu *menu =
new QMenu(stdPlugin->
getName(), m_parentWidget);
321 menu->setIcon(stdPlugin->
getIcon());
322 menu->setEnabled(
true);
324 for (QAction *action : actions) {
325 menu->addAction(action);
328 m_pluginMenu->addMenu(menu);
331 Q_ASSERT(actions.count() == 1);
333 m_pluginMenu->addAction(actions.at(0));
338 const QList<QAction *> &actions) {
339 const QString pluginName = stdPlugin->
getName();
342 if (actions.size() > 1) {
343 QToolBar *toolBar =
new QToolBar(
344 pluginName + QStringLiteral(
" toolbar"), m_parentWidget);
346 if (toolBar !=
nullptr) {
347 m_additionalPluginToolbars.push_back(toolBar);
349 toolBar->setObjectName(pluginName);
350 toolBar->setEnabled(
true);
352 for (QAction *action : actions) {
353 toolBar->addAction(action);
358 Q_ASSERT(actions.count() == 1);
360 m_mainPluginToolbar->addAction(actions.at(0));
364 void ccPluginUIManager::addActionsToMenu(
const QString &moduleName,
365 const QList<QAction *> &actions) {
367 if (actions.size() > 1) {
368 QMenu *menu =
new QMenu(moduleName, m_parentWidget);
369 menu->setEnabled(
true);
371 for (QAction *action : actions) {
372 menu->addAction(action);
375 m_pclAlgorithmMenu->addMenu(menu);
378 Q_ASSERT(actions.count() == 1);
380 m_pclAlgorithmMenu->addAction(actions.at(0));
384 void ccPluginUIManager::addActionsToToolBar(
const QString &moduleName,
385 const QList<QAction *> &actions) {
387 if (actions.size() > 1) {
388 if (m_pclAlgorithmsToolbar !=
nullptr) {
389 for (QAction *action : actions) {
390 m_pclAlgorithmsToolbar->addAction(action);
395 Q_ASSERT(actions.count() == 1);
397 m_pclAlgorithmsToolbar->addAction(actions.at(0));
401 void ccPluginUIManager::setupToolbars() {
402 m_mainPluginToolbar =
new QToolBar(tr(
"Plugins"), m_parentWidget);
404 m_mainPluginToolbar->setObjectName(QStringLiteral(
"Main Plugin Toolbar"));
406 connect(m_showPluginToolbar, &QAction::toggled, m_mainPluginToolbar,
407 &QToolBar::setVisible);
409 m_pclAlgorithmsToolbar =
new QToolBar(tr(
"PCL ALgorithms"), m_parentWidget);
411 m_pclAlgorithmsToolbar->setObjectName(QStringLiteral(
"PCL Plugin Toolbar"));
413 connect(m_showPCLAlgorithmToolbar, &QAction::toggled,
414 m_pclAlgorithmsToolbar, &QToolBar::setVisible);
417 void ccPluginUIManager::enablePCLAlgorithm() {
420 if (win ==
nullptr) {
425 QAction *action = qobject_cast<QAction *>(sender());
427 Q_ASSERT(action !=
nullptr);
432 if (plugin ==
nullptr) {
436 m_actionRemovePCLAlgorithm->setEnabled(
true);
439 "Note: go to << PCL ALgorithms >> to disable PCL ALGORITHM");
442 void ccPluginUIManager::disablePCLAlgorithm() {
444 m_actionRemovePCLAlgorithm->setEnabled(
false);
445 m_pclAlgorithmActions.checkedAction()->setChecked(
false);
static bool Warning(const char *format,...)
Prints out a formatted warning message in console.
static bool Print(const char *format,...)
Prints out a formatted message in console.
virtual QString getName() const override
Returns (short) name (for menu entry, etc.)
virtual QString getDescription() const override
Returns long name/description (for tooltip, etc.)
virtual QIcon getIcon() const override
Returns icon.
virtual bool isCore() const override
Is this plugin a core plugin?
std::vector< ccHObject * > Container
Standard instances container (for children, etc.)
I/O filter plugin interface.
Pcl ECV plugin interface.
virtual void onNewSelection(const ccHObject::Container &selectedEntities)
virtual void setMainAppInterface(ecvMainAppInterface *app)
Sets application entry point.
void setPluginPaths(const QStringList &pluginPaths)
void setPluginList(const QList< ccPluginInterface * > &pluginList)
Standard ECV plugin interface.
ccPluginInterfaceList & pluginList()
static ccPluginManager & get()
void showAboutDialog() const
QList< QToolBar * > & additionalPluginToolbars()
void handleSelectionChanged()
QToolBar * mainPluginToolbar()
QMenu * pluginMenu() const
QToolBar * glPclToolbar()
QMenu * pclAlgorithmMenu() const
ccPluginUIManager(ecvMainAppInterface *appInterface, QWidget *parent)
QAction * actionShowPCLAlgorithmToolbar()
static bool isPythonPluginToolbar(QToolBar *toolbar)
QAction * actionShowMainPluginToolbar()
Standard ECV plugin interface.
virtual void setMainAppInterface(ecvMainAppInterface *app)
Sets application entry point.
virtual void onNewSelection(const ccHObject::Container &selectedEntities)
Main application interface (for plugins)
virtual QWidget * getActiveWindow()=0
virtual const ccHObject::Container & getSelectedEntities() const =0
Returns currently selected entities ("read only")
@ ECV_PCL_ALGORITHM_PLUGIN