Skip to content
MainWindow.cc 43.7 KiB
Newer Older

                // FIXME: This type checking might be redundant
                //            if (slugsDataWidget) {
                //              SlugsDataSensorView* dataWidget = dynamic_cast<SlugsDataSensorView*>(slugsDataWidget->widget());
                //              if (dataWidget) {
                //                SlugsMAV* mav2 = dynamic_cast<SlugsMAV*>(uas);
                //                if (mav2) {
                (dynamic_cast<SlugsDataSensorView*>(slugsDataWidget->widget()))->addUAS(uas);
                //                  //loadSlugsView();
                //                  loadGlobalOperatorView();
                //                }
                //              }
                //            }
            }
            break;
        default:
        case (MAV_AUTOPILOT_GENERIC):
        case (MAV_AUTOPILOT_ARDUPILOTMEGA):
        case (MAV_AUTOPILOT_PIXHAWK):
            {
                // Build Pixhawk Widgets
                buildPxWidgets();

                // Connect Pixhawk Widgets
                connectPxWidgets();

                // Arrange Pixhawk Centerstack
                arrangePxCenterStack();

                // Connect Pixhawk Actions
                connectPxActions();

            }
            break;

        }

        // 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()->getActiveUAS() == uas)
        {
            qDebug() << "UPDATING THE VIEW SINCE THIS IS THE FIRST CONNECTED SYSTEM";

            // Load last view if setting is present
            if (settings.contains("VIEW_ON_APPLICATION_CLOSE"))
            {
                int view = settings.value("VIEW_ON_APPLICATION_CLOSE").toInt();
                currentView = (VIEW_SECTIONS) view;
                presentView();
            }
            else
            {
                loadEngineerView();
            }
pixhawk's avatar
pixhawk committed
}

/**
 * Clears the current view completely
 */
pixhawk's avatar
pixhawk committed
void MainWindow::clearView()
pixhawk's avatar
pixhawk committed
{ 
    if (hudWidget) hudWidget->stop();
    // Disable linechart
    if (linechartWidget) linechartWidget->setActive(false);
    // Halt HDDs
    if (headDown1DockWidget)
    {
        HDDisplay* hddWidget = dynamic_cast<HDDisplay*>( headDown1DockWidget->widget() );
        if (hddWidget) hddWidget->stop();
    }
pixhawk's avatar
pixhawk committed
    if (headDown2DockWidget)
    {
        HDDisplay* hddWidget = dynamic_cast<HDDisplay*>( headDown2DockWidget->widget() );
        if (hddWidget) hddWidget->stop();
    }
    // Halt HSI
    if (hsiDockWidget)
    {
        HSIDisplay* hsi = dynamic_cast<HSIDisplay*>( hsiDockWidget->widget() );
        if (hsi) hsi->stop();
    }
pixhawk's avatar
pixhawk committed

    // Halt HUD if in docked widget mode
    if (headUpDockWidget)
    {
        HUD* hud = dynamic_cast<HUD*>( headUpDockWidget->widget() );
        if (hud) hud->stop();
    }

    // Remove all dock widgets from main window
    QObjectList childList( this->children() );
pixhawk's avatar
pixhawk committed

    QObjectList::iterator i;
    QDockWidget* dockWidget;
    for (i = childList.begin(); i != childList.end(); ++i)
pixhawk's avatar
pixhawk committed
    {
        dockWidget = dynamic_cast<QDockWidget*>(*i);
        if (dockWidget)
pixhawk's avatar
pixhawk committed
        {
            // Remove dock widget from main window
            //this->removeDockWidget(dockWidget);
            dockWidget->setVisible(false);
            // Deletion of dockWidget would also delete all child
            // widgets of dockWidget
            // Is there a way to unset a widget from QDockWidget?
lm's avatar
lm committed
{
    clearView();
lm's avatar
lm committed

    currentView = VIEW_ENGINEER;
lm's avatar
lm committed

    presentView();
lm's avatar
lm committed
}

lm's avatar
lm committed
{
lm's avatar
lm committed

lm's avatar
lm committed
}

pixhawk's avatar
pixhawk committed

lm's avatar
lm committed
void MainWindow::presentView()
{
pixhawk's avatar
pixhawk committed


    // 3D map
    if (_3DWidget)
    {
        if (centerStack)
        {
            //map3DWidget->setActive(true);
            centerStack->setCurrentWidget(_3DWidget);
        }
    }
    qDebug() << "LC";
    showTheCentralWidget(CENTRAL_LINECHART, currentView);
    if (linechartWidget)
    {
        qDebug () << buildMenuKey (SUB_SECTION_CHECKED,CENTRAL_LINECHART,currentView) <<
                settings.value(buildMenuKey (SUB_SECTION_CHECKED,CENTRAL_LINECHART,currentView)).toBool() ;
        if (settings.value(buildMenuKey (SUB_SECTION_CHECKED,CENTRAL_LINECHART,currentView)).toBool()){
            if (centerStack) {
                linechartWidget->setActive(true);
                centerStack->setCurrentWidget(linechartWidget);
            }
        } else {
            linechartWidget->setActive(false);
        }
pixhawk's avatar
pixhawk committed

pixhawk's avatar
pixhawk committed

    // MAP
    qDebug() << "MAP";
    showTheCentralWidget(CENTRAL_MAP, currentView);
pixhawk's avatar
pixhawk committed

    // PROTOCOL
    qDebug() << "CP";
    showTheCentralWidget(CENTRAL_PROTOCOL, currentView);
pixhawk's avatar
pixhawk committed

    // HEAD UP DISPLAY
    showTheCentralWidget(CENTRAL_HUD, currentView);
    qDebug() << "HUD";
    if (hudWidget){
        qDebug() << buildMenuKey(SUB_SECTION_CHECKED,CENTRAL_HUD,currentView) <<
                settings.value(buildMenuKey (SUB_SECTION_CHECKED,CENTRAL_HUD,currentView)).toBool();
        if (settings.value(buildMenuKey (SUB_SECTION_CHECKED,CENTRAL_HUD,currentView)).toBool()){
            if (centerStack) {
                centerStack->setCurrentWidget(hudWidget);
                hudWidget->start();
            }
        } else {
            hudWidget->stop();
        }
pixhawk's avatar
pixhawk committed

    // Show docked widgets based on current view and autopilot type
    // UAS CONTROL
    showTheWidget(MENU_UAS_CONTROL, currentView);
    // UAS LIST
    showTheWidget(MENU_UAS_LIST, currentView);
    // WAYPOINT LIST
    showTheWidget(MENU_WAYPOINTS, currentView);
    // UAS STATUS
    showTheWidget(MENU_STATUS, currentView);
    // DETECTION
    showTheWidget(MENU_DETECTION, currentView);
    // DEBUG CONSOLE
    showTheWidget(MENU_DEBUG_CONSOLE, currentView);
    // ONBOARD PARAMETERS
    showTheWidget(MENU_PARAMETERS, currentView);
    // WATCHDOG
    showTheWidget(MENU_WATCHDOG, currentView);
    // HUD
    showTheWidget(MENU_HUD, currentView);
    if (headUpDockWidget)
    {
        HUD* tmpHud = dynamic_cast<HUD*>( headUpDockWidget->widget() );
        if (tmpHud){
            if (settings.value(buildMenuKey (SUB_SECTION_CHECKED,MENU_HUD,currentView)).toBool()){
                tmpHud->start();
                addDockWidget(static_cast <Qt::DockWidgetArea>(settings.value(buildMenuKey (SUB_SECTION_LOCATION,MENU_HUD, currentView)).toInt()),
                              hsiDockWidget);
                headUpDockWidget->show();
            } else {
                tmpHud->stop();
                headUpDockWidget->hide();
            }
    // RC View
    showTheWidget(MENU_RC_VIEW, currentView);
    // SLUGS DATA
    showTheWidget(MENU_SLUGS_DATA, currentView);
    // SLUGS PID
    showTheWidget(MENU_SLUGS_PID, currentView);
    // SLUGS HIL
    showTheWidget(MENU_SLUGS_HIL, currentView);
    // SLUGS CAMERA
    showTheWidget(MENU_SLUGS_CAMERA, currentView);
    // HORIZONTAL SITUATION INDICATOR
    showTheWidget(MENU_HSI, currentView);
    if (hsiDockWidget)
    {
        HSIDisplay* hsi = dynamic_cast<HSIDisplay*>( hsiDockWidget->widget() );
        if (hsi){
            if (settings.value(buildMenuKey (SUB_SECTION_CHECKED,MENU_HSI,currentView)).toBool()){
                hsi->start();
                addDockWidget(static_cast <Qt::DockWidgetArea>(settings.value(buildMenuKey (SUB_SECTION_LOCATION,MENU_HSI, currentView)).toInt()),
                              hsiDockWidget);
                hsiDockWidget->show();
            } else {
                hsi->stop();
                hsiDockWidget->hide();
            }
    // HEAD DOWN 1
    showTheWidget(MENU_HDD_1, currentView);
    if (headDown1DockWidget)
    {
        HDDisplay *hdd = dynamic_cast<HDDisplay*>(headDown1DockWidget->widget());
        if (hdd) {
            if (settings.value(buildMenuKey (SUB_SECTION_CHECKED,MENU_HDD_1,currentView)).toBool()) {
                addDockWidget(static_cast <Qt::DockWidgetArea>(settings.value(buildMenuKey (SUB_SECTION_LOCATION,MENU_HDD_1, currentView)).toInt()),
                              headDown1DockWidget);
                headDown1DockWidget->show();
                hdd->start();
            } else {
                headDown1DockWidget->hide();;
                hdd->stop();
            }

    // HEAD DOWN 2
    showTheWidget(MENU_HDD_2, currentView);
    if (headDown2DockWidget)
    {
        HDDisplay *hdd = dynamic_cast<HDDisplay*>(headDown2DockWidget->widget());
        if (hdd){
            if (settings.value(buildMenuKey (SUB_SECTION_CHECKED,MENU_HDD_2,currentView)).toBool()){
                addDockWidget(static_cast <Qt::DockWidgetArea>(settings.value(buildMenuKey (SUB_SECTION_LOCATION,MENU_HDD_2, currentView)).toInt()),
                              headDown2DockWidget);
                headDown2DockWidget->show();
                hdd->start();
            } else {
                headDown2DockWidget->hide();
                hdd->stop();
            }
    this->show();
void MainWindow::showTheCentralWidget (TOOLS_WIDGET_NAMES centralWidget, VIEW_SECTIONS view)
{
    bool tempVisible;
    QWidget* tempWidget = dockWidgets[centralWidget];
    tempVisible =  settings.value(buildMenuKey (SUB_SECTION_CHECKED,centralWidget,view)).toBool();
    qDebug() << buildMenuKey (SUB_SECTION_CHECKED,centralWidget,view) << tempVisible;
    if (toolsMenuActions[centralWidget])
        toolsMenuActions[centralWidget]->setChecked(tempVisible);
    if (centerStack && tempWidget && tempVisible)
        centerStack->setCurrentWidget(tempWidget);
pixhawk's avatar
pixhawk committed
void MainWindow::loadWidgets()
pixhawk's avatar
pixhawk committed
{
    loadOperatorView();
    //loadMAVLinkView();
pixhawk's avatar
pixhawk committed
    //loadPilotView();
}
void MainWindow::loadDataView()
{
    clearView();

    // DATAPLOT
    if (dataplotWidget)
    {
        QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
        if (centerStack)
            centerStack->setCurrentWidget(dataplotWidget);
    }
}

void MainWindow::loadDataView(QString fileName)
{
    clearView();

    // DATAPLOT
    if (dataplotWidget)
    {
        QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
        if (centerStack)
        {
            centerStack->setCurrentWidget(dataplotWidget);
            dataplotWidget->loadFile(fileName);
        }
    }
}

void MainWindow::load3DMapView()
{
#ifdef QGC_OSGEARTH_ENABLED
    clearView();
    // 3D map
    if (_3DMapWidget)
    {
        QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
        if (centerStack)
        {
            //map3DWidget->setActive(true);
            centerStack->setCurrentWidget(_3DMapWidget);
        }
    }
#if (defined Q_OS_WIN) | (defined Q_OS_MAC)
    clearView();
    // 3D map
    if (gEarthWidget)
    {
        QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
        if (centerStack)
        {
            centerStack->setCurrentWidget(gEarthWidget);
void MainWindow::load3DView()
    clearView();
    // 3D map
    if (_3DWidget)
        QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
        if (centerStack)
        {
            //map3DWidget->setActive(true);
            centerStack->setCurrentWidget(_3DWidget);
        }