diff --git a/ground/src/plugins/coreplugin/coreimpl.cpp b/ground/src/plugins/coreplugin/coreimpl.cpp index c7d366226..87584c1d3 100644 --- a/ground/src/plugins/coreplugin/coreimpl.cpp +++ b/ground/src/plugins/coreplugin/coreimpl.cpp @@ -87,11 +87,10 @@ MessageManager *CoreImpl::messageManager() const return m_mainwindow->messageManager(); } -UAVGadgetManager *CoreImpl::uavGadgetManager() const -{ - return m_mainwindow->uavGadgetManager(); -} - +//UAVGadgetManager *CoreImpl::uavGadgetManager() const +//{ +// return m_mainwindow->uavGadgetManager(); +//} VariableManager *CoreImpl::variableManager() const { diff --git a/ground/src/plugins/coreplugin/coreimpl.h b/ground/src/plugins/coreplugin/coreimpl.h index d2376473f..b1c0f3a75 100644 --- a/ground/src/plugins/coreplugin/coreimpl.h +++ b/ground/src/plugins/coreplugin/coreimpl.h @@ -55,7 +55,7 @@ public: ActionManager *actionManager() const; UniqueIDManager *uniqueIDManager() const; MessageManager *messageManager() const; - UAVGadgetManager *uavGadgetManager() const; +// UAVGadgetManager *uavGadgetManager() const; VariableManager *variableManager() const; ModeManager *modeManager() const; MimeDatabase *mimeDatabase() const; diff --git a/ground/src/plugins/coreplugin/coreplugin.cpp b/ground/src/plugins/coreplugin/coreplugin.cpp index 34b2db61a..43241cf29 100644 --- a/ground/src/plugins/coreplugin/coreplugin.cpp +++ b/ground/src/plugins/coreplugin/coreplugin.cpp @@ -27,6 +27,7 @@ */ #include "coreplugin.h" +#include "coreimpl.h" #include "mainwindow.h" #include "modemanager.h" #include "uavgadgetmode.h" @@ -39,16 +40,19 @@ using namespace Core::Internal; CorePlugin::CorePlugin() : - m_mainWindow(new MainWindow), - m_uavGadgetMode(0) + m_mainWindow(new MainWindow) +// m_uavGadgetMode(0) { } CorePlugin::~CorePlugin() { - if (m_uavGadgetMode) { - removeObject(m_uavGadgetMode); - delete m_uavGadgetMode; + if (m_uavGadgetModes.count() > 0) { + foreach (UAVGadgetMode *mode, m_uavGadgetModes) + { + removeObject(mode); + delete mode; + } } delete m_mainWindow; } @@ -58,9 +62,21 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage) Q_UNUSED(arguments) const bool success = m_mainWindow->init(errorMessage); if (success) { - UAVGadgetManager *uavGadgetManager = m_mainWindow->uavGadgetManager(); - m_uavGadgetMode = new UAVGadgetMode(uavGadgetManager); - addObject(m_uavGadgetMode); + UAVGadgetMode *uavGadgetMode; + UAVGadgetManager *m_uavGadgetManager = new UAVGadgetManager(CoreImpl::instance(), m_mainWindow); + m_uavGadgetManager->hide(); + uavGadgetMode = new UAVGadgetMode(m_uavGadgetManager, QString("Mode 1"), + QIcon(":/core/images/openpilot_logo_64.png"), 80, QString("Mode1")); + m_uavGadgetManager->setUAVGadgetMode(uavGadgetMode); + m_uavGadgetModes.append(uavGadgetMode); + addObject(uavGadgetMode); + m_uavGadgetManager = new UAVGadgetManager(CoreImpl::instance(), m_mainWindow); + m_uavGadgetManager->hide(); + uavGadgetMode = new UAVGadgetMode(m_uavGadgetManager, QString("Mode 2"), + QIcon(":/core/images/plus.png"), 60, QString("Mode2")); + m_uavGadgetManager->setUAVGadgetMode(uavGadgetMode); + m_uavGadgetModes.append(uavGadgetMode); + addObject(uavGadgetMode); } return success; } diff --git a/ground/src/plugins/coreplugin/coreplugin.h b/ground/src/plugins/coreplugin/coreplugin.h index e2f3e234e..241b635bc 100644 --- a/ground/src/plugins/coreplugin/coreplugin.h +++ b/ground/src/plugins/coreplugin/coreplugin.h @@ -54,7 +54,7 @@ public slots: private: MainWindow *m_mainWindow; - UAVGadgetMode *m_uavGadgetMode; + QList m_uavGadgetModes; }; } // namespace Internal diff --git a/ground/src/plugins/coreplugin/icore.h b/ground/src/plugins/coreplugin/icore.h index 7ab30f785..cd26a3a52 100644 --- a/ground/src/plugins/coreplugin/icore.h +++ b/ground/src/plugins/coreplugin/icore.h @@ -76,7 +76,7 @@ public: virtual MessageManager *messageManager() const = 0; virtual VariableManager *variableManager() const = 0; virtual ModeManager *modeManager() const = 0; - virtual UAVGadgetManager *uavGadgetManager() const = 0; +// virtual UAVGadgetManager *uavGadgetManager() const = 0; virtual MimeDatabase *mimeDatabase() const = 0; virtual QSettings *settings() const = 0; diff --git a/ground/src/plugins/coreplugin/mainwindow.cpp b/ground/src/plugins/coreplugin/mainwindow.cpp index bc9296a6d..bb6549a1f 100644 --- a/ground/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/src/plugins/coreplugin/mainwindow.cpp @@ -110,11 +110,11 @@ MainWindow::MainWindow() : this)), m_actionManager(new ActionManagerPrivate(this)), m_variableManager(new VariableManager(this)), - m_viewManager(0), +// m_viewManager(0), m_modeManager(0), m_uavGadgetManager(0), m_mimeDatabase(new MimeDatabase), - m_rightPaneWidget(0), +// m_rightPaneWidget(0), m_versionDialog(0), m_activeContext(0), m_generalSettings(new GeneralSettings), @@ -163,18 +163,17 @@ MainWindow::MainWindow() : registerDefaultContainers(); registerDefaultActions(); - m_rightPaneWidget = new RightPaneWidget(); +// m_rightPaneWidget = new RightPaneWidget(); m_modeStack = new FancyTabWidget(this); m_modeManager = new ModeManager(this, m_modeStack); //m_modeManager->addWidget(m_progressManager->progressView()); - m_viewManager = new ViewManager(this); +// m_viewManager = new ViewManager(this); m_messageManager = new MessageManager; - m_uavGadgetManager = new UAVGadgetManager(m_coreImpl, this); - m_uavGadgetManager->hide(); +// m_uavGadgetManager = new UAVGadgetManager(m_coreImpl, this); +// m_uavGadgetManager->hide(); setCentralWidget(m_modeStack); - connect(QApplication::instance(), SIGNAL(focusChanged(QWidget*,QWidget*)), this, SLOT(updateFocusWidget(QWidget*,QWidget*))); @@ -204,15 +203,15 @@ MainWindow::~MainWindow() delete m_uniqueIDManager; m_uniqueIDManager = 0; - delete m_viewManager; - m_viewManager = 0; +// delete m_viewManager; +// m_viewManager = 0; pm->removeObject(m_coreImpl); delete m_coreImpl; m_coreImpl = 0; - delete m_rightPaneWidget; - m_rightPaneWidget = 0; +// delete m_rightPaneWidget; +// m_rightPaneWidget = 0; delete m_modeManager; m_modeManager = 0; @@ -226,7 +225,7 @@ bool MainWindow::init(QString *errorMessage) ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); pm->addObject(m_coreImpl); - m_viewManager->init(); +// m_viewManager->init(); m_modeManager->init(); pm->addObject(m_generalSettings); @@ -242,7 +241,7 @@ void MainWindow::modeChanged(Core::IMode */*mode*/) void MainWindow::extensionsInitialized() { - m_viewManager->extensionsInitalized(); +// m_viewManager->extensionsInitalized(); m_messageManager->init(); @@ -382,6 +381,7 @@ void MainWindow::registerDefaultContainers() menubar->addMenu(mwindow, Constants::G_WINDOW); mwindow->menu()->setTitle(tr("&Window")); mwindow->appendGroup(Constants::G_WINDOW_SIZE); + mwindow->appendGroup(Constants::G_WINDOW_HIDE_TOOLBAR); mwindow->appendGroup(Constants::G_WINDOW_PANES); mwindow->appendGroup(Constants::G_WINDOW_SPLIT); mwindow->appendGroup(Constants::G_WINDOW_NAVIGATE); @@ -869,7 +869,7 @@ void MainWindow::readSettings() m_settings->endGroup(); - m_rightPaneWidget->readSettings(m_settings); +// m_rightPaneWidget->readSettings(m_settings); } void MainWindow::writeSettings() @@ -889,7 +889,7 @@ void MainWindow::writeSettings() m_settings->endGroup(); - m_viewManager->saveSettings(m_settings); +// m_viewManager->saveSettings(m_settings); m_actionManager->saveSettings(m_settings); } diff --git a/ground/src/plugins/coreplugin/mainwindow.h b/ground/src/plugins/coreplugin/mainwindow.h index 4a19d88f3..a12c7af69 100644 --- a/ground/src/plugins/coreplugin/mainwindow.h +++ b/ground/src/plugins/coreplugin/mainwindow.h @@ -162,12 +162,12 @@ private: ActionManagerPrivate *m_actionManager; MessageManager *m_messageManager; VariableManager *m_variableManager; - ViewManager *m_viewManager; +// ViewManager *m_viewManager; ModeManager *m_modeManager; UAVGadgetManager *m_uavGadgetManager; MimeDatabase *m_mimeDatabase; FancyTabWidget *m_modeStack; - RightPaneWidget *m_rightPaneWidget; +// RightPaneWidget *m_rightPaneWidget; Core::BaseView *m_outputView; VersionDialog *m_versionDialog; diff --git a/ground/src/plugins/coreplugin/modemanager.cpp b/ground/src/plugins/coreplugin/modemanager.cpp index f0d4fa6aa..50dbc24b3 100644 --- a/ground/src/plugins/coreplugin/modemanager.cpp +++ b/ground/src/plugins/coreplugin/modemanager.cpp @@ -67,7 +67,7 @@ ModeManager::ModeManager(Internal::MainWindow *mainWindow, FancyTabWidget *modeS m_instance = this; m_actionBar = new FancyActionBar(modeStack); - m_modeStack->addCornerWidget(m_actionBar); +// m_modeStack->addCornerWidget(m_actionBar); connect(m_modeStack, SIGNAL(currentAboutToShow(int)), SLOT(currentTabAboutToChange(int))); connect(m_modeStack, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int))); @@ -92,7 +92,9 @@ void ModeManager::addWidget(QWidget *widget) IMode *ModeManager::currentMode() const { - return m_modes.at(m_modeStack->currentIndex()); + if (m_modes.count() > 0) + return m_modes.at(m_modeStack->currentIndex()); + return 0; } int ModeManager::indexOf(const QString &id) const diff --git a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.cpp b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.cpp index 1b4279eb9..5ffa02545 100644 --- a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.cpp +++ b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.cpp @@ -28,6 +28,7 @@ #include "uavgadgetmanager.h" #include "uavgadgetview.h" +#include "uavgadgetmode.h" #include "iuavgadgetfactory.h" #include "iuavgadget.h" #include "icore.h" @@ -77,46 +78,51 @@ static inline ExtensionSystem::PluginManager *pluginManager() //===================UAVGadgetManager===================== -UAVGadgetManagerPlaceHolder *UAVGadgetManagerPlaceHolder::m_current = 0; +//UAVGadgetManagerPlaceHolder *UAVGadgetManagerPlaceHolder::m_current = 0; -UAVGadgetManagerPlaceHolder::UAVGadgetManagerPlaceHolder(Core::IMode *mode, QWidget *parent) - : QWidget(parent), m_mode(mode) +UAVGadgetManagerPlaceHolder::UAVGadgetManagerPlaceHolder(Core::Internal::UAVGadgetMode *mode, QWidget *parent) + : QWidget(parent), + m_current(0), + m_uavGadgetMode(mode) { + m_mode = dynamic_cast(mode); setLayout(new QVBoxLayout); layout()->setMargin(0); connect(Core::ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode *)), this, SLOT(currentModeChanged(Core::IMode *))); - //Julien: this line is crashing (I guess when no mode are added yet) - //currentModeChanged(Core::ModeManager::instance()->currentMode()); + currentModeChanged(Core::ModeManager::instance()->currentMode()); } UAVGadgetManagerPlaceHolder::~UAVGadgetManagerPlaceHolder() { if (m_current == this) { - UAVGadgetManager::instance()->setParent(0); - UAVGadgetManager::instance()->hide(); + m_uavGadgetMode->uavGadgetManager()->setParent(0); + m_uavGadgetMode->uavGadgetManager()->hide(); } } void UAVGadgetManagerPlaceHolder::currentModeChanged(Core::IMode *mode) { +// qDebug() << Q_FUNC_INFO << mode; + UAVGadgetManager *gm = m_uavGadgetMode->uavGadgetManager(); if (m_current == this) { m_current = 0; - UAVGadgetManager::instance()->setParent(0); - UAVGadgetManager::instance()->hide(); + gm->setParent(0); + gm->hide(); } if (m_mode == mode) { m_current = this; - layout()->addWidget(UAVGadgetManager::instance()); - UAVGadgetManager::instance()->show(); + layout()->addWidget(gm); + gm->hideToolbars(gm->toolbarsHidden()); + gm->show(); } } -UAVGadgetManagerPlaceHolder* UAVGadgetManagerPlaceHolder::current() -{ - return m_current; -} +//UAVGadgetManagerPlaceHolder* UAVGadgetManagerPlaceHolder::current() +//{ +// return m_current; +//} // ---------------- UAVGadgetManager @@ -134,23 +140,28 @@ struct UAVGadgetManagerPrivate { ICore *m_core; // actions - QAction *m_hideToolbarsAction; - QAction *m_splitAction; - QAction *m_splitSideBySideAction; - QAction *m_removeCurrentSplitAction; - QAction *m_removeAllSplitsAction; - QAction *m_gotoOtherSplitAction; - QAction *m_closeCurrentUAVGadgetAction; + static QAction *m_hideToolbarsAction; + static QAction *m_splitAction; + static QAction *m_splitSideBySideAction; + static QAction *m_removeCurrentSplitAction; + static QAction *m_removeAllSplitsAction; + static QAction *m_gotoOtherSplitAction; Internal::UAVGadgetClosingCoreListener *m_coreListener; }; } +QAction *UAVGadgetManagerPrivate::m_hideToolbarsAction = 0; +QAction *UAVGadgetManagerPrivate::m_splitAction = 0; +QAction *UAVGadgetManagerPrivate::m_splitSideBySideAction = 0; +QAction *UAVGadgetManagerPrivate::m_removeCurrentSplitAction = 0; +QAction *UAVGadgetManagerPrivate::m_removeAllSplitsAction = 0; +QAction *UAVGadgetManagerPrivate::m_gotoOtherSplitAction = 0; + UAVGadgetManagerPrivate::UAVGadgetManagerPrivate(ICore *core, QWidget *parent) : m_view(0), m_splitterOrView(0), m_core(core), - m_closeCurrentUAVGadgetAction(new QAction(UAVGadgetManager::tr("Close"), parent)), m_coreListener(0) { } @@ -159,29 +170,18 @@ UAVGadgetManagerPrivate::~UAVGadgetManagerPrivate() { } -UAVGadgetManager *UAVGadgetManager::m_instance = 0; - -/*static Command *createSeparator(ActionManager *am, QObject *parent, - const QString &name, - const QList &context) -{ - QAction *tmpaction = new QAction(parent); - tmpaction->setSeparator(true); - Command *cmd = am->registerAction(tmpaction, name, context); - return cmd; -}*/ - UAVGadgetManager::UAVGadgetManager(ICore *core, QWidget *parent) : QWidget(parent), + m_hidden(false), m_d(new UAVGadgetManagerPrivate(core, parent)) { //qDebug() << Q_FUNC_INFO; - m_instance = this; +// m_instance = this; // //qDebug() << Q_FUNC_INFO << m_d->m_core->resourcePath(); connect(m_d->m_core, SIGNAL(contextAboutToChange(Core::IContext *)), this, SLOT(handleContextChange(Core::IContext *))); - const QList gc = QList() << Constants::C_GLOBAL_ID; +// const QList gc = QList() << Constants::C_GLOBAL_ID; const QList uavGadgetManagerContext = QList() << m_d->m_core->uniqueIDManager()->uniqueIdentifier(Constants::C_UAVGADGETMANAGER); @@ -189,77 +189,91 @@ UAVGadgetManager::UAVGadgetManager(ICore *core, QWidget *parent) : //Window Menu ActionContainer *mwindow = am->actionContainer(Constants::M_WINDOW); + Command *cmd; - //Window menu separators - QAction *tmpaction = new QAction(this); - tmpaction->setSeparator(true); - Command *cmd = am->registerAction(tmpaction, QLatin1String("OpenPilot.Window.Sep.Split"), uavGadgetManagerContext); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + // The actions m_d->m_hideToolbarsAction etc are common to all instances of UAVGadgetManager + // which means that they share the menu items/signals in the Window menu. + // That is, they all connect their slots to the same signal and have to check in the slot + // if the current mode is their mode, otherwise they just ignore the signal. + // The first UAVGadgetManager creates the actions, and the following just use them + // (This also implies that they share the same context.) + if (m_d->m_hideToolbarsAction == 0) + { + //Window menu separators + QAction *tmpaction = new QAction(this); + tmpaction->setSeparator(true); + cmd = am->registerAction(tmpaction, QLatin1String("OpenPilot.Window.Sep.Split"), uavGadgetManagerContext); + mwindow->addAction(cmd, Constants::G_WINDOW_HIDE_TOOLBAR); - m_d->m_hideToolbarsAction = new QAction(tr("Hide toolbars"), this); - m_d->m_hideToolbarsAction->setCheckable(true); - cmd = am->registerAction(m_d->m_hideToolbarsAction, Constants::HIDE_TOOLBARS, uavGadgetManagerContext); - cmd->setDefaultKeySequence(QKeySequence("Ctrl+Shift+F10")); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + m_d->m_hideToolbarsAction = new QAction(tr("Hide toolbars"), this); + m_d->m_hideToolbarsAction->setCheckable(true); + cmd = am->registerAction(m_d->m_hideToolbarsAction, Constants::HIDE_TOOLBARS, uavGadgetManagerContext); + cmd->setDefaultKeySequence(QKeySequence("Ctrl+Shift+F10")); + mwindow->addAction(cmd, Constants::G_WINDOW_HIDE_TOOLBAR); + + //Window menu separators + QAction *tmpaction2 = new QAction(this); + tmpaction2->setSeparator(true); + cmd = am->registerAction(tmpaction2, QLatin1String("OpenPilot.Window.Sep.Split2"), uavGadgetManagerContext); + mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + } connect(m_d->m_hideToolbarsAction, SIGNAL(triggered(bool)), this, SLOT(hideToolbars(bool))); -// //Window menu separators - QAction *tmpaction2 = new QAction(this); - tmpaction2->setSeparator(true); - cmd = am->registerAction(tmpaction2, QLatin1String("OpenPilot.Window.Sep.Split2"), uavGadgetManagerContext); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); - - //Close Action -// //qDebug() << Q_FUNC_INFO << "close cmd" << m_d->m_closeCurrentUAVGadgetAction; - cmd = am->registerAction(m_d->m_closeCurrentUAVGadgetAction, Constants::CLOSE, uavGadgetManagerContext); -// cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+W"))); - cmd->setAttribute(Core::Command::CA_UpdateText); - cmd->setDefaultText(m_d->m_closeCurrentUAVGadgetAction->text()); - connect(m_d->m_closeCurrentUAVGadgetAction, SIGNAL(triggered()), this, SLOT(closeUAVGadget())); - #ifdef Q_WS_MAC QString prefix = tr("Meta+E"); #else QString prefix = tr("Ctrl+E"); #endif - - m_d->m_splitAction = new QAction(tr("Split"), this); - cmd = am->registerAction(m_d->m_splitAction, Constants::SPLIT, uavGadgetManagerContext); - cmd->setDefaultKeySequence(QKeySequence(tr("%1,2").arg(prefix))); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + if (m_d->m_splitAction == 0) + { + m_d->m_splitAction = new QAction(tr("Split"), this); + cmd = am->registerAction(m_d->m_splitAction, Constants::SPLIT, uavGadgetManagerContext); + cmd->setDefaultKeySequence(QKeySequence(tr("%1,2").arg(prefix))); + mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + } connect(m_d->m_splitAction, SIGNAL(triggered()), this, SLOT(split())); - m_d->m_splitSideBySideAction = new QAction(tr("Split Side by Side"), this); - cmd = am->registerAction(m_d->m_splitSideBySideAction, Constants::SPLIT_SIDE_BY_SIDE, uavGadgetManagerContext); - cmd->setDefaultKeySequence(QKeySequence(tr("%1,3").arg(prefix))); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + if (m_d->m_splitSideBySideAction == 0) + { + m_d->m_splitSideBySideAction = new QAction(tr("Split Side by Side"), this); + cmd = am->registerAction(m_d->m_splitSideBySideAction, Constants::SPLIT_SIDE_BY_SIDE, uavGadgetManagerContext); + cmd->setDefaultKeySequence(QKeySequence(tr("%1,3").arg(prefix))); + mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + } connect(m_d->m_splitSideBySideAction, SIGNAL(triggered()), this, SLOT(splitSideBySide())); - m_d->m_removeCurrentSplitAction = new QAction(tr("Remove Current Split"), this); - cmd = am->registerAction(m_d->m_removeCurrentSplitAction, Constants::REMOVE_CURRENT_SPLIT, uavGadgetManagerContext); - cmd->setDefaultKeySequence(QKeySequence(tr("%1,0").arg(prefix))); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + if (m_d->m_removeCurrentSplitAction == 0) + { + m_d->m_removeCurrentSplitAction = new QAction(tr("Remove Current Split"), this); + cmd = am->registerAction(m_d->m_removeCurrentSplitAction, Constants::REMOVE_CURRENT_SPLIT, uavGadgetManagerContext); + cmd->setDefaultKeySequence(QKeySequence(tr("%1,0").arg(prefix))); + mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + } connect(m_d->m_removeCurrentSplitAction, SIGNAL(triggered()), this, SLOT(removeCurrentSplit())); - m_d->m_removeAllSplitsAction = new QAction(tr("Remove All Splits"), this); - cmd = am->registerAction(m_d->m_removeAllSplitsAction, Constants::REMOVE_ALL_SPLITS, uavGadgetManagerContext); - cmd->setDefaultKeySequence(QKeySequence(tr("%1,1").arg(prefix))); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + if (m_d->m_removeAllSplitsAction == 0) + { + m_d->m_removeAllSplitsAction = new QAction(tr("Remove All Splits"), this); + cmd = am->registerAction(m_d->m_removeAllSplitsAction, Constants::REMOVE_ALL_SPLITS, uavGadgetManagerContext); + cmd->setDefaultKeySequence(QKeySequence(tr("%1,1").arg(prefix))); + mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + } connect(m_d->m_removeAllSplitsAction, SIGNAL(triggered()), this, SLOT(removeAllSplits())); - m_d->m_gotoOtherSplitAction = new QAction(tr("Goto Other Split"), this); - cmd = am->registerAction(m_d->m_gotoOtherSplitAction, Constants::GOTO_OTHER_SPLIT, uavGadgetManagerContext); - cmd->setDefaultKeySequence(QKeySequence(tr("%1,o").arg(prefix))); - mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + if (m_d->m_gotoOtherSplitAction == 0) + { + m_d->m_gotoOtherSplitAction = new QAction(tr("Goto Other Split"), this); + cmd = am->registerAction(m_d->m_gotoOtherSplitAction, Constants::GOTO_OTHER_SPLIT, uavGadgetManagerContext); + cmd->setDefaultKeySequence(QKeySequence(tr("%1,o").arg(prefix))); + mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT); + } connect(m_d->m_gotoOtherSplitAction, SIGNAL(triggered()), this, SLOT(gotoOtherSplit())); - // other setup - m_d->m_splitterOrView = new SplitterOrView(0, true); + m_d->m_splitterOrView = new SplitterOrView(this, 0, true); m_d->m_view = m_d->m_splitterOrView->view(); - QHBoxLayout *layout = new QHBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); @@ -430,7 +444,7 @@ bool UAVGadgetManager::closeAllUAVGadgets() { // if (closeUAVGadgets(openedUAVGadgets())) { // m_d->clearNavigationHistory(); - return true; +// return true; // } return true; } @@ -614,7 +628,7 @@ void UAVGadgetManager::ensureUAVGadgetManagerVisible() { //qDebug() << Q_FUNC_INFO; if (!isVisible()) - m_d->m_core->modeManager()->activateMode(Constants::MODE_UAVGADGET); + m_d->m_core->modeManager()->activateMode(m_uavGadgetMode->uniqueModeName()); } void UAVGadgetManager::updateActions() @@ -752,6 +766,8 @@ void UAVGadgetManager::readSettings() void UAVGadgetManager::split(Qt::Orientation orientation) { + if (m_d->m_core->modeManager()->currentMode() != m_uavGadgetMode) + return; //qDebug() << Q_FUNC_INFO; SplitterOrView *view = m_d->m_currentView; // //qDebug() << Q_FUNC_INFO << view << m_d->m_currentUAVGadget; @@ -779,6 +795,8 @@ void UAVGadgetManager::splitSideBySide() void UAVGadgetManager::removeCurrentSplit() { + if (m_d->m_core->modeManager()->currentMode() != m_uavGadgetMode) + return; //qDebug() << Q_FUNC_INFO; SplitterOrView *viewToClose = m_d->m_currentView; if (!viewToClose && m_d->m_currentUAVGadget) @@ -793,6 +811,8 @@ void UAVGadgetManager::removeCurrentSplit() void UAVGadgetManager::removeAllSplits() { + if (m_d->m_core->modeManager()->currentMode() != m_uavGadgetMode) + return; if (!m_d->m_splitterOrView->isSplitter()) return; IUAVGadget *uavGadget = m_d->m_currentUAVGadget; @@ -805,6 +825,8 @@ void UAVGadgetManager::removeAllSplits() void UAVGadgetManager::gotoOtherSplit() { + if (m_d->m_core->modeManager()->currentMode() != m_uavGadgetMode) + return; if (m_d->m_splitterOrView->isSplitter()) { SplitterOrView *currentView = m_d->m_currentView; if (!currentView && m_d->m_currentUAVGadget) @@ -827,7 +849,11 @@ void UAVGadgetManager::gotoOtherSplit() void UAVGadgetManager::hideToolbars(bool hide) { - //qDebug() << Q_FUNC_INFO; + if (m_d->m_core->modeManager()->currentMode() != m_uavGadgetMode) + return; + m_d->m_hideToolbarsAction->setChecked(hide); + m_hidden = hide; + //qDebug() << Q_FUNC_INFO; QList views; SplitterOrView *next = m_d->m_splitterOrView->findFirstView(); //qDebug() << Q_FUNC_INFO << next->m_isRoot; diff --git a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.h b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.h index c23033100..ab9aafba4 100644 --- a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.h +++ b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetmanager.h @@ -54,6 +54,7 @@ struct UAVGadgetManagerPrivate; namespace Internal { +class UAVGadgetMode; class UAVGadgetView; class SplitterOrView; @@ -66,14 +67,15 @@ class CORE_EXPORT UAVGadgetManagerPlaceHolder : public QWidget { Q_OBJECT public: - UAVGadgetManagerPlaceHolder(Core::IMode *mode, QWidget *parent = 0); + UAVGadgetManagerPlaceHolder(Core::Internal::UAVGadgetMode *mode, QWidget *parent = 0); ~UAVGadgetManagerPlaceHolder(); - static UAVGadgetManagerPlaceHolder* current(); +// static UAVGadgetManagerPlaceHolder* current(); private slots: void currentModeChanged(Core::IMode *); private: Core::IMode *m_mode; - static UAVGadgetManagerPlaceHolder* m_current; + Core::Internal::UAVGadgetMode *m_uavGadgetMode; + UAVGadgetManagerPlaceHolder* m_current; }; class CORE_EXPORT UAVGadgetManager : public QWidget @@ -86,7 +88,9 @@ public: explicit UAVGadgetManager(ICore *core, QWidget *parent); virtual ~UAVGadgetManager(); void init(); - static UAVGadgetManager *instance() { return m_instance; } + // setUAVGadgetMode should be called exactly once + // right after the mode has been created, and never thereafter + void setUAVGadgetMode(Core::Internal::UAVGadgetMode *mode) { m_uavGadgetMode = mode; } void ensureUAVGadgetManagerVisible(); @@ -100,6 +104,7 @@ public: void saveSettings(); void readSettings(); + bool toolbarsHidden() { return m_hidden; } UAVGadgetFactoryList uavGadgetFactories() const; @@ -141,8 +146,9 @@ private: Core::Internal::UAVGadgetView *currentUAVGadgetView() const; IUAVGadget *pickUnusedUAVGadget() const; - static UAVGadgetManager *m_instance; UAVGadgetManagerPrivate *m_d; + Core::Internal::UAVGadgetMode *m_uavGadgetMode; + bool m_hidden; friend class Core::Internal::SplitterOrView; friend class Core::Internal::UAVGadgetView; diff --git a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 283298484..87ce49078 100644 --- a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -63,8 +63,9 @@ using namespace Core::Internal; // ================UAVGadgetView==================== -UAVGadgetView::UAVGadgetView(IUAVGadget *uavGadget, QWidget *parent) : +UAVGadgetView::UAVGadgetView(UAVGadgetManager *uavGadgetManager, IUAVGadget *uavGadget, QWidget *parent) : QWidget(parent), + m_uavGadgetManager(uavGadgetManager), m_uavGadget(uavGadget), m_toolBar(new QWidget), m_defaultToolBar(new QWidget(this)), @@ -116,8 +117,8 @@ UAVGadgetView::UAVGadgetView(IUAVGadget *uavGadget, QWidget *parent) : // //qDebug() << Q_FUNC_INFO << uavGadget; ActionManager *am = ICore::instance()->actionManager(); // //qDebug() << Q_FUNC_INFO << uavGadget << am; - connect(am->command(Constants::CLOSE), SIGNAL(keySequenceChanged()), - this, SLOT(updateActionShortcuts())); +// connect(am->command(Constants::CLOSE), SIGNAL(keySequenceChanged()), +// this, SLOT(updateActionShortcuts())); updateActionShortcuts(); // updateActions(); @@ -140,8 +141,7 @@ void UAVGadgetView::hideToolbar(bool hide) void UAVGadgetView::closeView() { // m_top->hide(); - UAVGadgetManager *gm = CoreImpl::instance()->uavGadgetManager(); - gm->closeView(this); + m_uavGadgetManager->closeView(this); //qDebug() << Q_FUNC_INFO; /* removeUAVGadget(); if (m_uavGadget) @@ -228,17 +228,18 @@ void UAVGadgetView::listSelectionActivated(int index) void UAVGadgetView::updateActionShortcuts() { //qDebug() << Q_FUNC_INFO; - ActionManager *am = ICore::instance()->actionManager(); - m_closeButton->setToolTip(am->command(Constants::CLOSE)->stringWithAppendedShortcut(UAVGadgetManager::tr("Close"))); +// ActionManager *am = ICore::instance()->actionManager(); +// m_closeButton->setToolTip(am->command(Constants::CLOSE)->stringWithAppendedShortcut(UAVGadgetManager::tr("Close"))); } -SplitterOrView::SplitterOrView(Core::IUAVGadget *uavGadget, bool isRoot) +SplitterOrView::SplitterOrView(UAVGadgetManager *uavGadgetManager, Core::IUAVGadget *uavGadget, bool isRoot) : + m_uavGadgetManager(uavGadgetManager), + m_isRoot(isRoot) { //qDebug() << Q_FUNC_INFO << uavGadget << isRoot; - m_isRoot = isRoot; // //qDebug() << Q_FUNC_INFO << uavGadget << isRoot; - m_view = new UAVGadgetView(uavGadget); + m_view = new UAVGadgetView(m_uavGadgetManager, uavGadget); m_layout = new QStackedLayout(this); m_splitter = 0; m_layout->addWidget(m_view); @@ -258,13 +259,13 @@ void SplitterOrView::mousePressEvent(QMouseEvent *e) if (e->button() != Qt::LeftButton) return; setFocus(Qt::MouseFocusReason); - CoreImpl::instance()->uavGadgetManager()->setCurrentView(this); + m_uavGadgetManager->setCurrentView(this); } void SplitterOrView::paintEvent(QPaintEvent *) { // //qDebug() << Q_FUNC_INFO; - if (CoreImpl::instance()->uavGadgetManager()->currentSplitterOrView() != this) + if (m_uavGadgetManager->currentSplitterOrView() != this) return; if (!m_view || hasUAVGadgets()) @@ -464,18 +465,17 @@ void SplitterOrView::split(Qt::Orientation orientation) m_splitter = new MiniSplitter(this); m_splitter->setOrientation(orientation); m_layout->addWidget(m_splitter); - UAVGadgetManager *gm = CoreImpl::instance()->uavGadgetManager(); Core::IUAVGadget *e = m_view->currentUAVGadget(); SplitterOrView *view = 0; SplitterOrView *otherView = 0; if (e) { m_view->removeUAVGadget(); - m_splitter->addWidget((view = new SplitterOrView(e))); - m_splitter->addWidget((otherView = new SplitterOrView())); + m_splitter->addWidget((view = new SplitterOrView(m_uavGadgetManager, e))); + m_splitter->addWidget((otherView = new SplitterOrView(m_uavGadgetManager))); } else { - m_splitter->addWidget((otherView = new SplitterOrView())); - m_splitter->addWidget((view = new SplitterOrView())); + m_splitter->addWidget((otherView = new SplitterOrView(m_uavGadgetManager))); + m_splitter->addWidget((view = new SplitterOrView(m_uavGadgetManager))); } // QWidget *w = m_layout->currentWidget(); @@ -483,12 +483,12 @@ void SplitterOrView::split(Qt::Orientation orientation) // m_layout->removeWidget(w); if (m_view && !m_isRoot) { - gm->emptyView(m_view); + m_uavGadgetManager->emptyView(m_view); delete m_view; m_view = 0; } - gm->setCurrentView(view); + m_uavGadgetManager->setCurrentView(view); } void SplitterOrView::unsplitAll() @@ -505,7 +505,7 @@ void SplitterOrView::unsplitAll_helper() { //qDebug() << Q_FUNC_INFO; if (!m_isRoot && m_view) - CoreImpl::instance()->uavGadgetManager()->emptyView(m_view); + m_uavGadgetManager->emptyView(m_view); if (m_splitter) { for (int i = 0; i < m_splitter->count(); ++i) { if (SplitterOrView *splitterOrView = qobject_cast(m_splitter->widget(i))) { @@ -522,7 +522,6 @@ void SplitterOrView::unsplit() return; Q_ASSERT(m_splitter->count() == 1); - UAVGadgetManager *em = CoreImpl::instance()->uavGadgetManager(); SplitterOrView *childSplitterOrView = qobject_cast(m_splitter->widget(0)); QSplitter *oldSplitter = m_splitter; m_splitter = 0; @@ -540,7 +539,7 @@ void SplitterOrView::unsplit() childView->removeUAVGadget(); m_view->setCurrentUAVGadget(e); } - em->emptyView(childView); + m_uavGadgetManager->emptyView(childView); } else { m_view = childSplitterOrView->takeView(); m_layout->addWidget(m_view); @@ -548,71 +547,71 @@ void SplitterOrView::unsplit() m_layout->setCurrentWidget(m_view); } delete oldSplitter; - em->setCurrentView(findFirstView()); + m_uavGadgetManager->setCurrentView(findFirstView()); } QByteArray SplitterOrView::saveState() const { QByteArray bytes; - /* QDataStream stream(&bytes, QIODevice::WriteOnly); - - if (m_splitter) { - stream << QByteArray("splitter") - << (qint32)m_splitter->orientation() - << m_splitter->saveState() - << static_cast(m_splitter->widget(0))->saveState() - << static_cast(m_splitter->widget(1))->saveState(); - } else { - IUAVGadget* e = uavGadget(); - UAVGadgetManager *em = CoreImpl::instance()->uavGadgetManager(); - - if (e && e == em->currentUAVGadget()) { - stream << QByteArray("currentuavGadget") - << e->file()->fileName() << e->kind() << e->saveState(); - } else if (e) { - stream << QByteArray("uavGadget") - << e->file()->fileName() << e->kind() << e->saveState(); - } else { - stream << QByteArray("empty"); - } - }*/ +// QDataStream stream(&bytes, QIODevice::WriteOnly); +// +// if (m_splitter) { +// stream << QByteArray("splitter") +// << (qint32)m_splitter->orientation() +// << m_splitter->saveState() +// << static_cast(m_splitter->widget(0))->saveState() +// << static_cast(m_splitter->widget(1))->saveState(); +// } else { +// IUAVGadget* e = uavGadget(); +// UAVGadgetManager *em = CoreImpl::instance()->uavGadgetManager(); +// +// if (e && e == em->currentUAVGadget()) { +// stream << QByteArray("currentuavGadget") +// << e->file()->fileName() << e->kind() << e->saveState(); +// } else if (e) { +// stream << QByteArray("uavGadget") +// << e->file()->fileName() << e->kind() << e->saveState(); +// } else { +// stream << QByteArray("empty"); +// } +// } return bytes; } void SplitterOrView::restoreState(const QByteArray &state) { - /* QDataStream stream(state); - QByteArray mode; - stream >> mode; - if (mode == "splitter") { - qint32 orientation; - QByteArray splitter, first, second; - stream >> orientation >> splitter >> first >> second; - split((Qt::Orientation)orientation); - m_splitter->restoreState(splitter); - static_cast(m_splitter->widget(0))->restoreState(first); - static_cast(m_splitter->widget(1))->restoreState(second); - } else if (mode == "uavGadget" || mode == "currentuavGadget") { - UAVGadgetManager *em = CoreImpl::instance()->uavGadgetManager(); - QString fileName; - QByteArray kind; - QByteArray uavGadgetState; - stream >> fileName >> kind >> uavGadgetState; - IUAVGadget *e = em->openUAVGadget(view(), fileName, kind, Core::UAVGadgetManager::IgnoreNavigationHistory - | Core::UAVGadgetManager::NoActivate); - - if (!e) { - QModelIndex idx = em->openedUAVGadgetsModel()->firstRestoredUAVGadget(); - if (idx.isValid()) - em->activateUAVGadget(idx, view(), Core::UAVGadgetManager::IgnoreNavigationHistory - | Core::UAVGadgetManager::NoActivate); - } - - if (e) { - e->restoreState(uavGadgetState); - if (mode == "currentuavGadget") - em->setCurrentUAVGadget(e); - } - }*/ +// QDataStream stream(state); +// QByteArray mode; +// stream >> mode; +// if (mode == "splitter") { +// qint32 orientation; +// QByteArray splitter, first, second; +// stream >> orientation >> splitter >> first >> second; +// split((Qt::Orientation)orientation); +// m_splitter->restoreState(splitter); +// static_cast(m_splitter->widget(0))->restoreState(first); +// static_cast(m_splitter->widget(1))->restoreState(second); +// } else if (mode == "uavGadget" || mode == "currentuavGadget") { +// UAVGadgetManager *em = CoreImpl::instance()->uavGadgetManager(); +// QString fileName; +// QByteArray kind; +// QByteArray uavGadgetState; +// stream >> fileName >> kind >> uavGadgetState; +// IUAVGadget *e = em->openUAVGadget(view(), fileName, kind, Core::UAVGadgetManager::IgnoreNavigationHistory +// | Core::UAVGadgetManager::NoActivate); +// +// if (!e) { +// QModelIndex idx = em->openedUAVGadgetsModel()->firstRestoredUAVGadget(); +// if (idx.isValid()) +// em->activateUAVGadget(idx, view(), Core::UAVGadgetManager::IgnoreNavigationHistory +// | Core::UAVGadgetManager::NoActivate); +// } +// +// if (e) { +// e->restoreState(uavGadgetState); +// if (mode == "currentuavGadget") +// em->setCurrentUAVGadget(e); +// } +// } } diff --git a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h index 51d5a860e..7a9a8f17b 100644 --- a/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h +++ b/ground/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.h @@ -54,6 +54,7 @@ class StyledBar; namespace Core { class IUAVGadget; +class UAVGadgetManager; namespace Internal { @@ -62,7 +63,7 @@ class UAVGadgetView : public QWidget Q_OBJECT public: - UAVGadgetView(IUAVGadget *uavGadget = 0, QWidget *parent = 0); + UAVGadgetView(UAVGadgetManager *uavGadgetManager, IUAVGadget *uavGadget = 0, QWidget *parent = 0); virtual ~UAVGadgetView(); void removeUAVGadget(); @@ -81,6 +82,7 @@ private slots: private: void updateToolBar(); + UAVGadgetManager *m_uavGadgetManager; IUAVGadget *m_uavGadget; QWidget *m_toolBar; QWidget *m_defaultToolBar; @@ -96,7 +98,7 @@ class SplitterOrView : public QWidget { Q_OBJECT public: - SplitterOrView(Core::IUAVGadget *uavGadget = 0, bool root = false); + SplitterOrView(UAVGadgetManager *uavGadgetManager, Core::IUAVGadget *uavGadget = 0, bool root = false); ~SplitterOrView(); void split(Qt::Orientation orientation); @@ -135,13 +137,11 @@ protected: void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *e); - private: void unsplitAll_helper(); SplitterOrView *findNextView_helper(SplitterOrView *view, bool *found); -public: + UAVGadgetManager *m_uavGadgetManager; bool m_isRoot; -private: QStackedLayout *m_layout; UAVGadgetView *m_view; QSplitter *m_splitter; diff --git a/ground/src/plugins/coreplugin/uavgadgetmode.cpp b/ground/src/plugins/coreplugin/uavgadgetmode.cpp index fc1a57160..513cbd690 100644 --- a/ground/src/plugins/coreplugin/uavgadgetmode.cpp +++ b/ground/src/plugins/coreplugin/uavgadgetmode.cpp @@ -37,7 +37,6 @@ #include "iuavgadget.h" #include -#include #include #include #include @@ -45,8 +44,11 @@ using namespace Core; using namespace Core::Internal; -UAVGadgetMode::UAVGadgetMode(UAVGadgetManager *uavGadgetManager) : +UAVGadgetMode::UAVGadgetMode(UAVGadgetManager *uavGadgetManager, QString name, QIcon icon, int priority, QString uniqueName) : m_uavGadgetManager(uavGadgetManager), + m_name(name), + m_icon(icon), + m_priority(0), m_widget(new QWidget), m_layout(new QVBoxLayout) { @@ -54,26 +56,18 @@ UAVGadgetMode::UAVGadgetMode(UAVGadgetManager *uavGadgetManager) : m_layout->setMargin(0); m_widget->setLayout(m_layout); m_layout->insertWidget(0, new Core::UAVGadgetManagerPlaceHolder(this)); - -// MiniSplitter *rightPaneSplitter = new MiniSplitter; -// rightPaneSplitter->insertWidget(0, rightSplitWidget); -// rightPaneSplitter->insertWidget(1, new RightPanePlaceHolder(this)); -// rightPaneSplitter->setStretchFactor(0, 1); -// rightPaneSplitter->setStretchFactor(1, 0); -// -// MiniSplitter *splitter = new MiniSplitter; -// splitter->setOrientation(Qt::Vertical); -// splitter->insertWidget(0, rightPaneSplitter); -// splitter->insertWidget(1, new Core::OutputPanePlaceHolder(this)); -// splitter->setStretchFactor(0, 3); -// splitter->setStretchFactor(1, 0); -// -// m_splitter->insertWidget(0, new NavigationWidgetPlaceHolder(this)); -// m_splitter->insertWidget(1, splitter); -// m_splitter->setStretchFactor(0, 0); -// m_splitter->setStretchFactor(1, 1); + if (0 <= priority && priority <= 100) + m_priority = priority; ModeManager *modeManager = ModeManager::instance(); + // checking that the mode name is unique gives harmless + // warnings on the console output + if (!modeManager->mode(uniqueName)) { + m_uniqueName = uniqueName; + } else { + // this shouldn't happen + m_uniqueName = uniqueName + QString::number(quint64(this)); + } connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(grabUAVGadgetManager(Core::IMode*))); m_widget->setFocusProxy(m_uavGadgetManager); @@ -81,6 +75,7 @@ UAVGadgetMode::UAVGadgetMode(UAVGadgetManager *uavGadgetManager) : UAVGadgetMode::~UAVGadgetMode() { + // TODO: see if this leftover from Qt Creator still applies // Make sure the uavGadget manager does not get deleted m_uavGadgetManager->setParent(0); delete m_widget; @@ -88,17 +83,17 @@ UAVGadgetMode::~UAVGadgetMode() QString UAVGadgetMode::name() const { - return tr("UavGadget"); + return m_name; } QIcon UAVGadgetMode::icon() const { - return QIcon(QLatin1String(":/core/images/openpilot_logo_64.png")); + return m_icon; } int UAVGadgetMode::priority() const { - return Constants::P_MODE_UAVGADGET; + return m_priority; } QWidget* UAVGadgetMode::widget() @@ -108,7 +103,7 @@ QWidget* UAVGadgetMode::widget() const char* UAVGadgetMode::uniqueModeName() const { - return Constants::MODE_UAVGADGET; + return m_uniqueName.toAscii().data(); } QList UAVGadgetMode::context() const diff --git a/ground/src/plugins/coreplugin/uavgadgetmode.h b/ground/src/plugins/coreplugin/uavgadgetmode.h index ccc3999ff..401f6d6f6 100644 --- a/ground/src/plugins/coreplugin/uavgadgetmode.h +++ b/ground/src/plugins/coreplugin/uavgadgetmode.h @@ -32,10 +32,12 @@ #include #include +#include QT_BEGIN_NAMESPACE class QSplitter; class QWidget; +class QIcon; class QVBoxLayout; QT_END_NAMESPACE @@ -50,7 +52,7 @@ class UAVGadgetMode : public Core::IMode Q_OBJECT public: - UAVGadgetMode(UAVGadgetManager *uavGadgetManager); + UAVGadgetMode(UAVGadgetManager *uavGadgetManager, QString name, QIcon icon, int priority, QString uniqueName); ~UAVGadgetMode(); // IMode @@ -60,6 +62,7 @@ public: QWidget* widget(); const char* uniqueModeName() const; QList context() const; + UAVGadgetManager* uavGadgetManager() const { return m_uavGadgetManager; } private slots: void grabUAVGadgetManager(Core::IMode *mode); @@ -68,6 +71,10 @@ private: UAVGadgetManager *m_uavGadgetManager; QWidget *m_widget; QVBoxLayout *m_layout; + QString m_name; + QIcon m_icon; + QString m_uniqueName; + int m_priority; }; } // namespace Internal