Skip to content
Snippets Groups Projects
MainWindow.cc 54.2 KiB
Newer Older
  • Learn to ignore specific revisions
  •     // Mark the right one as selected
        if (currentView == VIEW_ENGINEER) ui.actionEngineersView->setChecked(true);
        if (currentView == VIEW_MAVLINK) ui.actionMavlinkView->setChecked(true);
        if (currentView == VIEW_PILOT) ui.actionPilotsView->setChecked(true);
        if (currentView == VIEW_OPERATOR) ui.actionOperatorsView->setChecked(true);
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        if (currentView == VIEW_FIRMWAREUPDATE) ui.actionFirmwareUpdateView->setChecked(true);
    
        if (currentView == VIEW_UNCONNECTED) ui.actionUnconnectedView->setChecked(true);
    
        // The UAS actions are not enabled without connection to system
        ui.actionLiftoff->setEnabled(false);
        ui.actionLand->setEnabled(false);
        ui.actionEmergency_Kill->setEnabled(false);
        ui.actionEmergency_Land->setEnabled(false);
        ui.actionShutdownMAV->setEnabled(false);
    
    
    pixhawk's avatar
    pixhawk committed
        // Connect actions from ui
        connect(ui.actionAdd_Link, SIGNAL(triggered()), this, SLOT(addLink()));
    
        // Connect internal actions
        connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(UASCreated(UASInterface*)));
    
        connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)));
    
    pixhawk's avatar
    pixhawk committed
    
    
    pixhawk's avatar
    pixhawk committed
        connect(ui.actionLiftoff, SIGNAL(triggered()), UASManager::instance(), SLOT(launchActiveUAS()));
        connect(ui.actionLand, SIGNAL(triggered()), UASManager::instance(), SLOT(returnActiveUAS()));
        connect(ui.actionEmergency_Land, SIGNAL(triggered()), UASManager::instance(), SLOT(stopActiveUAS()));
        connect(ui.actionEmergency_Kill, SIGNAL(triggered()), UASManager::instance(), SLOT(killActiveUAS()));
    
        connect(ui.actionShutdownMAV, SIGNAL(triggered()), UASManager::instance(), SLOT(shutdownActiveUAS()));
    
    pixhawk's avatar
    pixhawk committed
        connect(ui.actionConfiguration, SIGNAL(triggered()), UASManager::instance(), SLOT(configureActiveUAS()));
    
    
        connect(ui.actionPilotsView, SIGNAL(triggered()), this, SLOT(loadPilotView()));
    
        connect(ui.actionEngineersView, SIGNAL(triggered()), this, SLOT(loadEngineerView()));
    
        connect(ui.actionOperatorsView, SIGNAL(triggered()), this, SLOT(loadOperatorView()));
    
        connect(ui.actionUnconnectedView, SIGNAL(triggered()), this, SLOT(loadUnconnectedView()));
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        connect(ui.actionFirmwareUpdateView, SIGNAL(triggered()), this, SLOT(loadFirmwareUpdateView()));
    
        connect(ui.actionMavlinkView, SIGNAL(triggered()), this, SLOT(loadMAVLinkView()));
    
        connect(ui.actionReloadStylesheet, SIGNAL(triggered()), this, SLOT(reloadStylesheet()));
        connect(ui.actionSelectStylesheet, SIGNAL(triggered()), this, SLOT(selectStylesheet()));
    
        connect(ui.actionOnline_Documentation, SIGNAL(triggered()), this, SLOT(showHelp()));
    
        connect(ui.actionDeveloper_Credits, SIGNAL(triggered()), this, SLOT(showCredits()));
    
        connect(ui.actionProject_Roadmap_2, SIGNAL(triggered()), this, SLOT(showRoadMap()));
    
    
        // Custom widget actions
        connect(ui.actionNewCustomWidget, SIGNAL(triggered()), this, SLOT(createCustomWidget()));
    
        connect(ui.actionLoadCustomWidgetFile, SIGNAL(triggered()), this, SLOT(loadCustomWidget()));
    
    
        // Audio output
        ui.actionMuteAudioOutput->setChecked(GAudioOutput::instance()->isMuted());
    
        connect(GAudioOutput::instance(), SIGNAL(mutedChanged(bool)), ui.actionMuteAudioOutput, SLOT(setChecked(bool)));
    
        connect(ui.actionMuteAudioOutput, SIGNAL(triggered(bool)), GAudioOutput::instance(), SLOT(mute(bool)));
    
    
        // User interaction
        // NOTE: Joystick thread is not started and
        // configuration widget is not instantiated
        // unless it is actually used
        // so no ressources spend on this.
        ui.actionJoystickSettings->setVisible(true);
    
        connect(ui.actionJoystickSettings, SIGNAL(triggered()), this, SLOT(configure()));
    
        // Application Settings
        connect(ui.actionSettings, SIGNAL(triggered()), this, SLOT(showSettings()));
    
    void MainWindow::showHelp()
    {
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        if(!QDesktopServices::openUrl(QUrl("http://qgroundcontrol.org/users/start")))
        {
    
            QMessageBox msgBox;
            msgBox.setIcon(QMessageBox::Critical);
            msgBox.setText("Could not open help in browser");
            msgBox.setInformativeText("To get to the online help, please open http://qgroundcontrol.org/user_guide in a browser.");
            msgBox.setStandardButtons(QMessageBox::Ok);
            msgBox.setDefaultButton(QMessageBox::Ok);
            msgBox.exec();
        }
    }
    
    void MainWindow::showCredits()
    {
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        if(!QDesktopServices::openUrl(QUrl("http://qgroundcontrol.org/credits")))
        {
    
            QMessageBox msgBox;
            msgBox.setIcon(QMessageBox::Critical);
            msgBox.setText("Could not open credits in browser");
            msgBox.setInformativeText("To get to the online help, please open http://qgroundcontrol.org/credits in a browser.");
            msgBox.setStandardButtons(QMessageBox::Ok);
            msgBox.setDefaultButton(QMessageBox::Ok);
            msgBox.exec();
        }
    }
    
    void MainWindow::showRoadMap()
    {
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        if(!QDesktopServices::openUrl(QUrl("http://qgroundcontrol.org/dev/roadmap")))
        {
    
            QMessageBox msgBox;
            msgBox.setIcon(QMessageBox::Critical);
            msgBox.setText("Could not open roadmap in browser");
            msgBox.setInformativeText("To get to the online help, please open http://qgroundcontrol.org/roadmap in a browser.");
            msgBox.setStandardButtons(QMessageBox::Ok);
            msgBox.setDefaultButton(QMessageBox::Ok);
            msgBox.exec();
        }
    }
    
    
    pixhawk's avatar
    pixhawk committed
    void MainWindow::configure()
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        if (!joystickWidget)
        {
            if (!joystick->isRunning())
            {
    
                joystick->start();
            }
            joystickWidget = new JoystickWidget(joystick);
        }
        joystickWidget->show();
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    void MainWindow::showSettings()
    {
        QGCSettingsWidget* settings = new QGCSettingsWidget(this);
        settings->show();
    }
    
    
    pixhawk's avatar
    pixhawk committed
    void MainWindow::addLink()
    
    pixhawk's avatar
    pixhawk committed
    {
        SerialLink* link = new SerialLink();
        // TODO This should be only done in the dialog itself
    
    
        LinkManager::instance()->add(link);
    
    pixhawk's avatar
    pixhawk committed
        LinkManager::instance()->addProtocol(link, mavlink);
    
    
        // Go fishing for this link's configuration window
        QList<QAction*> actions = ui.menuNetwork->actions();
    
    pixhawk's avatar
    pixhawk committed
    
    
    oberion's avatar
    oberion committed
    	const int32_t& linkIndex(LinkManager::instance()->getLinks().indexOf(link));
    	const int32_t& linkID(LinkManager::instance()->getLinks()[linkIndex]->getId());
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        foreach (QAction* act, actions)
        {
            if (act->data().toInt() == linkID)
            { // LinkManager::instance()->getLinks().indexOf(link)
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    pixhawk's avatar
    pixhawk committed
    void MainWindow::addLink(LinkInterface *link)
    {
    
        // IMPORTANT! KEEP THESE TWO LINES
        // THEY MAKE SURE THE LINK IS PROPERLY REGISTERED
        // BEFORE LINKING THE UI AGAINST IT
        // Register (does nothing if already registered)
    
        LinkManager::instance()->add(link);
    
        LinkManager::instance()->addProtocol(link, mavlink);
    
        // Go fishing for this link's configuration window
        QList<QAction*> actions = ui.menuNetwork->actions();
    
    oberion's avatar
    oberion committed
        bool found(false);
    
    oberion's avatar
    oberion committed
    	const int32_t& linkIndex(LinkManager::instance()->getLinks().indexOf(link));
    	const int32_t& linkID(LinkManager::instance()->getLinks()[linkIndex]->getId());
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        foreach (QAction* act, actions)
        {
            if (act->data().toInt() == linkID)
            { // LinkManager::instance()->getLinks().indexOf(link)
    
    oberion's avatar
    oberion committed
        //UDPLink* udp = dynamic_cast<UDPLink*>(link);
    
    Lorenz Meier's avatar
    Lorenz Meier committed
        if (!found)
        {  //  || udp
    
            CommConfigurationWindow* commWidget = new CommConfigurationWindow(link, mavlink, this);
            QAction* action = commWidget->getAction();
            ui.menuNetwork->addAction(action);
    
            // Error handling
            connect(link, SIGNAL(communicationError(QString,QString)), this, SLOT(showCriticalMessage(QString,QString)), Qt::QueuedConnection);
            // Special case for simulationlink
            MAVLinkSimulationLink* sim = dynamic_cast<MAVLinkSimulationLink*>(link);
    
                connect(ui.actionSimulate, SIGNAL(triggered(bool)), sim, SLOT(connectLink(bool)));
            }
    
    void MainWindow::setActiveUAS(UASInterface* uas)
    {
        // Enable and rename menu
        ui.menuUnmanned_System->setTitle(uas->getUASName());
        if (!ui.menuUnmanned_System->isEnabled()) ui.menuUnmanned_System->setEnabled(true);
    }
    
    
    void MainWindow::UASSpecsChanged(int uas)
    {
        UASInterface* activeUAS = UASManager::instance()->getActiveUAS();
    
        if (activeUAS)
        {
            if (activeUAS->getUASID() == uas)
            {
    
                ui.menuUnmanned_System->setTitle(activeUAS->getUASName());
            }
        }
    }
    
    
    pixhawk's avatar
    pixhawk committed
    void MainWindow::UASCreated(UASInterface* uas)
    
    pixhawk's avatar
    pixhawk committed
    {
    
    pixhawk's avatar
    pixhawk committed
        // Connect the UAS to the full user interface
    
    
    pixhawk's avatar
    pixhawk committed
        //if (uas != NULL)
        //{
    
            // The pilot, operator and engineer views were not available on startup, enable them now
    
            ui.actionPilotsView->setEnabled(true);
    
            ui.actionOperatorsView->setEnabled(true);
            ui.actionEngineersView->setEnabled(true);
    
            // The UAS actions are not enabled without connection to system
            ui.actionLiftoff->setEnabled(true);
            ui.actionLand->setEnabled(true);
            ui.actionEmergency_Kill->setEnabled(true);
            ui.actionEmergency_Land->setEnabled(true);
            ui.actionShutdownMAV->setEnabled(true);
    
            switch (uas->getSystemType())
    		{
            case MAV_TYPE_GENERIC:
    
                icon = QIcon(":files/images/mavs/fixed-wing.svg");
    
                icon = QIcon(":files/images/mavs/quadrotor.svg");
    
                icon = QIcon(":files/images/mavs/helicopter.svg");
    
                icon = QIcon(":files/images/mavs/groundstation.svg");
    
            QAction* uasAction = new QAction(icon, tr("Select %1 for control").arg(uas->getUASName()), ui.menuConnected_Systems);
            connect(uas, SIGNAL(systemRemoved()), uasAction, SLOT(deleteLater()));
            connect(uasAction, SIGNAL(triggered()), uas, SLOT(setSelected()));
    
            connect(uas, SIGNAL(systemSpecsChanged(int)), this, SLOT(UASSpecsChanged(int)));
    
    
            ui.menuConnected_Systems->addAction(uasAction);
    
    
            // FIXME Should be not inside the mainwindow
    
            if (debugConsoleDockWidget)
            {
    
    pixhawk's avatar
    pixhawk committed
                DebugConsole *debugConsole = dynamic_cast<DebugConsole*>(debugConsoleDockWidget->widget());
    
                if (debugConsole)
                {
    
    pixhawk's avatar
    pixhawk committed
                    connect(uas, SIGNAL(textMessageReceived(int,int,int,QString)),
                            debugConsole, SLOT(receiveTextMessage(int,int,int,QString)));
                }
    
    
            // Health / System status indicator
    
            if (infoDockWidget)
            {
    
    pixhawk's avatar
    pixhawk committed
                UASInfoWidget *infoWidget = dynamic_cast<UASInfoWidget*>(infoDockWidget->widget());
    
                if (infoWidget)
                {
    
    pixhawk's avatar
    pixhawk committed
                    infoWidget->addUAS(uas);
                }
    
    lm's avatar
    lm committed
            if (listDockWidget)
            {
    
    pixhawk's avatar
    pixhawk committed
                UASListWidget *listWidget = dynamic_cast<UASListWidget*>(listDockWidget->widget());
    
    lm's avatar
    lm committed
                if (listWidget)
                {
    
    pixhawk's avatar
    pixhawk committed
                    listWidget->addUAS(uas);
                }
    
            // Line chart
            if (!linechartWidget)
    
    lm's avatar
    lm committed
            {
    
    LM's avatar
    LM committed
                linechartWidget = new Linecharts(this);
    
                linechartWidget->addSource(mavlinkDecoder);
    
                addCentralWidget(linechartWidget, tr("Realtime Plot"));
    
    LM's avatar
    LM committed
            // Load default custom widgets for this autopilot type
    
    lm's avatar
    lm committed
            loadCustomWidgetsFromDefaults(uas->getSystemTypeName(), uas->getAutopilotTypeName());
    
    lm's avatar
    lm committed
            if (uas->getAutopilotType() == MAV_AUTOPILOT_PIXHAWK)
            {
                // Dock widgets
                if (!detectionDockWidget)
                {
                    detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
    
                    detectionDockWidget->setWidget( new ObjectDetectionView("files/images/patterns", this) );
    
    lm's avatar
    lm committed
                    detectionDockWidget->setObjectName("OBJECT_DETECTION_DOCK_WIDGET");
                    addTool(detectionDockWidget, tr("Object Recognition"), Qt::RightDockWidgetArea);
                }
    
    
                if (!watchdogControlDockWidget)
                {
    
    lm's avatar
    lm committed
                    watchdogControlDockWidget = new QDockWidget(tr("Process Control"), this);
                    watchdogControlDockWidget->setWidget( new WatchdogControl(this) );
                    watchdogControlDockWidget->setObjectName("WATCHDOG_CONTROL_DOCKWIDGET");
                    addTool(watchdogControlDockWidget, tr("Process Control"), Qt::BottomDockWidgetArea);
                }
    
            }
    
            // Change the view only if this is the first UAS
    
            // If this is the first connected UAS, it is both created as well as
            // the currently active UAS
    
            if (UASManager::instance()->getUASList().size() == 1)
            {
    
                // Load last view if setting is present
    
                if (settings.contains("CURRENT_VIEW_WITH_UAS_CONNECTED"))
                {
    
                    int view = settings.value("CURRENT_VIEW_WITH_UAS_CONNECTED").toInt();
    
    Lorenz Meier's avatar
    Lorenz Meier committed
                    switch (view)
                    {
    
                    case VIEW_ENGINEER:
                        loadEngineerView();
                        break;
                    case VIEW_MAVLINK:
                        loadMAVLinkView();
                        break;
    
    Lorenz Meier's avatar
    Lorenz Meier committed
                    case VIEW_FIRMWAREUPDATE:
                        loadFirmwareUpdateView();
                        break;
    
                    case VIEW_PILOT:
                        loadPilotView();
                        break;
                    case VIEW_UNCONNECTED:
                        loadUnconnectedView();
                        break;
                    case VIEW_OPERATOR:
                    default:
                        loadOperatorView();
                        break;
    
                    loadOperatorView();
    
    pixhawk's avatar
    pixhawk committed
        //}
    
    
        if (!ui.menuConnected_Systems->isEnabled()) ui.menuConnected_Systems->setEnabled(true);
    
    lm's avatar
    lm committed
    
    
        // Reload view state in case new widgets were added
        loadViewState();
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
     * Stores the current view state
    
    void MainWindow::storeViewState()
    
    pixhawk's avatar
    pixhawk committed
        if (!aboutToCloseFlag)
    
    lm's avatar
    lm committed
        {
    
    pixhawk's avatar
    pixhawk committed
            // Save current state
            settings.setValue(getWindowStateKey(), saveState(QGC::applicationVersion()));
            settings.setValue(getWindowStateKey()+"CENTER_WIDGET", centerStack->currentIndex());
            // Although we want save the state of the window, we do not want to change the top-leve state (minimized, maximized, etc)
            // therefore this state is stored here and restored after applying the rest of the settings in the new
            // perspective.
            windowStateVal = this->windowState();
            settings.setValue(getWindowGeometryKey(), saveGeometry());
    
    void MainWindow::loadViewState()
    {
        // Restore center stack state
    
    lm's avatar
    lm committed
        int index = settings.value(getWindowStateKey()+"CENTER_WIDGET", -1).toInt();
    
    LM's avatar
    LM committed
        // The offline plot view is usually the consequence of a logging run, always show the realtime view first
        if (centerStack->indexOf(dataplotWidget) == index)
        {
            // Rewrite to realtime plot
            index = centerStack->indexOf(linechartWidget);
        }
    
    pixhawk's avatar
    pixhawk committed
    
    
    lm's avatar
    lm committed
        if (index != -1)
        {
            centerStack->setCurrentIndex(index);
        }
        else
        {
    
            // Hide custom widgets
            if (detectionDockWidget) detectionDockWidget->hide();
            if (watchdogControlDockWidget) watchdogControlDockWidget->hide();
    
    
    lm's avatar
    lm committed
            // Load defaults
            switch (currentView)
            {
            case VIEW_ENGINEER:
                centerStack->setCurrentWidget(linechartWidget);
    
    lm's avatar
    lm committed
                controlDockWidget->hide();
                listDockWidget->hide();
                waypointsDockWidget->hide();
                infoDockWidget->hide();
                debugConsoleDockWidget->show();
                logPlayerDockWidget->show();
                mavlinkInspectorWidget->show();
    
    lm's avatar
    lm committed
                parametersDockWidget->show();
                hsiDockWidget->hide();
                headDown1DockWidget->hide();
                headDown2DockWidget->hide();
                rcViewDockWidget->hide();
                headUpDockWidget->hide();
                video1DockWidget->hide();
                video2DockWidget->hide();
    
    lm's avatar
    lm committed
                break;
            case VIEW_PILOT:
                centerStack->setCurrentWidget(hudWidget);
    
    lm's avatar
    lm committed
                controlDockWidget->hide();
                listDockWidget->hide();
                waypointsDockWidget->hide();
                infoDockWidget->hide();
                debugConsoleDockWidget->hide();
                logPlayerDockWidget->hide();
                mavlinkInspectorWidget->hide();
                parametersDockWidget->hide();
                hsiDockWidget->show();
                headDown1DockWidget->show();
                headDown2DockWidget->show();
                rcViewDockWidget->hide();
                headUpDockWidget->hide();
    
                video1DockWidget->hide();
    
    lm's avatar
    lm committed
                video2DockWidget->hide();
    
    lm's avatar
    lm committed
                break;
            case VIEW_MAVLINK:
                centerStack->setCurrentWidget(protocolWidget);
    
    lm's avatar
    lm committed
                controlDockWidget->hide();
                listDockWidget->hide();
                waypointsDockWidget->hide();
                infoDockWidget->hide();
                debugConsoleDockWidget->hide();
                logPlayerDockWidget->hide();
    
    Lorenz Meier's avatar
    Lorenz Meier committed
                mavlinkInspectorWidget->show();
    
    Lorenz Meier's avatar
    Lorenz Meier committed
                parametersDockWidget->hide();
                hsiDockWidget->hide();
                headDown1DockWidget->hide();
                headDown2DockWidget->hide();
                rcViewDockWidget->hide();
                headUpDockWidget->hide();
                video1DockWidget->hide();
                video2DockWidget->hide();
                break;
            case VIEW_FIRMWAREUPDATE:
                centerStack->setCurrentWidget(firmwareUpdateWidget);
                controlDockWidget->hide();
                listDockWidget->hide();
                waypointsDockWidget->hide();
                infoDockWidget->hide();
                debugConsoleDockWidget->hide();
                logPlayerDockWidget->hide();
    
    lm's avatar
    lm committed
                mavlinkInspectorWidget->hide();
    
    lm's avatar
    lm committed
                parametersDockWidget->hide();
                hsiDockWidget->hide();
                headDown1DockWidget->hide();
                headDown2DockWidget->hide();
                rcViewDockWidget->hide();
                headUpDockWidget->hide();
                video1DockWidget->hide();
                video2DockWidget->hide();
    
    lm's avatar
    lm committed
                break;
            case VIEW_OPERATOR:
    
                centerStack->setCurrentWidget(mapWidget);
                controlDockWidget->hide();
                listDockWidget->show();
                waypointsDockWidget->show();
                infoDockWidget->hide();
                debugConsoleDockWidget->show();
                logPlayerDockWidget->show();
                parametersDockWidget->hide();
                hsiDockWidget->show();
                headDown1DockWidget->hide();
                headDown2DockWidget->hide();
                rcViewDockWidget->hide();
                headUpDockWidget->show();
                video1DockWidget->hide();
                video2DockWidget->hide();
                mavlinkInspectorWidget->hide();
                break;
    
    lm's avatar
    lm committed
            case VIEW_UNCONNECTED:
            case VIEW_FULL:
            default:
                centerStack->setCurrentWidget(mapWidget);
    
                controlDockWidget->hide();
    
    lm's avatar
    lm committed
                listDockWidget->show();
    
                waypointsDockWidget->hide();
                infoDockWidget->hide();
    
    lm's avatar
    lm committed
                debugConsoleDockWidget->show();
                logPlayerDockWidget->show();
                parametersDockWidget->hide();
    
                hsiDockWidget->hide();
    
    lm's avatar
    lm committed
                headDown1DockWidget->hide();
                headDown2DockWidget->hide();
                rcViewDockWidget->hide();
                headUpDockWidget->show();
                video1DockWidget->hide();
                video2DockWidget->hide();
    
                mavlinkInspectorWidget->show();
    
    lm's avatar
    lm committed
                break;
    
    pixhawk's avatar
    pixhawk committed
            }
        }
    
    
        // Restore the widget positions and size
        if (settings.contains(getWindowStateKey()))
        {
            restoreState(settings.value(getWindowStateKey()).toByteArray(), QGC::applicationVersion());
    
    pixhawk's avatar
    pixhawk committed
        }
    }
    
    
    lm's avatar
    lm committed
    {
    
        if (currentView != VIEW_ENGINEER)
        {
    
            currentView = VIEW_ENGINEER;
            ui.actionEngineersView->setChecked(true);
    
    lm's avatar
    lm committed
    }
    
    
    lm's avatar
    lm committed
    {
    
        if (currentView != VIEW_OPERATOR)
        {
    
            currentView = VIEW_OPERATOR;
            ui.actionOperatorsView->setChecked(true);
    
    lm's avatar
    lm committed
    
    
    void MainWindow::loadUnconnectedView()
    {
    
        if (currentView != VIEW_UNCONNECTED)
        {
            storeViewState();
    
            currentView = VIEW_UNCONNECTED;
            ui.actionUnconnectedView->setChecked(true);
    
    lm's avatar
    lm committed
    }
    
    
        if (currentView != VIEW_PILOT)
        {
            storeViewState();
    
            currentView = VIEW_PILOT;
            ui.actionPilotsView->setChecked(true);
    
        if (currentView != VIEW_MAVLINK)
        {
            storeViewState();
    
            currentView = VIEW_MAVLINK;
            ui.actionMavlinkView->setChecked(true);
    
    Lorenz Meier's avatar
    Lorenz Meier committed
    void MainWindow::loadFirmwareUpdateView()
    {
        if (currentView != VIEW_FIRMWAREUPDATE)
        {
            storeViewState();
            currentView = VIEW_FIRMWAREUPDATE;
            ui.actionFirmwareUpdateView->setChecked(true);
            loadViewState();
        }
    }
    
    
    void MainWindow::loadDataView(QString fileName)
    {
    
        // Plot is now selected, now load data from file
    
        if (dataplotWidget)
        {
            dataplotWidget->loadFile(fileName);
        }
        QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
        if (centerStack)
        {
            centerStack->setCurrentWidget(dataplotWidget);
    
            dataplotWidget->loadFile(fileName);
    
    oberion's avatar
    oberion committed
    QList<QAction*> MainWindow::listLinkMenuActions(void)
    {
    
    lm's avatar
    lm committed
        return ui.menuNetwork->actions();