Skip to content
MainWindow.cc 41.5 KiB
Newer Older
                //              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()
    // 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()
{
    qDebug() << "LC";
    showTheCentralWidget(CENTRAL_LINECHART, currentView);
    // 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);
pixhawk's avatar
pixhawk committed

    // GOOGLE EARTH
    showTheCentralWidget(CENTRAL_GOOGLE_EARTH, currentView);

    // LOCAL 3D VIEW
    showTheCentralWidget(CENTRAL_3D_LOCAL, currentView);

    // GLOBAL 3D VIEW
    showTheCentralWidget(CENTRAL_3D_MAP, currentView);


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()){
                addDockWidget(static_cast <Qt::DockWidgetArea>(settings.value(buildMenuKey (SUB_SECTION_LOCATION,MENU_HUD, currentView)).toInt()),
                              hsiDockWidget);
                headUpDockWidget->show();
            } else {
                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()){
//                addDockWidget(static_cast <Qt::DockWidgetArea>(settings.value(buildMenuKey (SUB_SECTION_LOCATION,MENU_HSI, currentView)).toInt()),
//                              hsiDockWidget);
//            }
//        }
//    }
    // 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 _MSC_VER) | (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);
        }