Skip to content
MainWindow.cc 42.5 KiB
Newer Older
/*===================================================================
pixhawk's avatar
pixhawk committed
======================================================================*/

/**
 * @file
 *   @brief Implementation of class MainWindow
 *   @author Lorenz Meier <mail@qgroundcontrol.org>
pixhawk's avatar
pixhawk committed
 */

#include <QSettings>
#include <QDockWidget>
#include <QNetworkInterface>
#include <QMessageBox>
#include <QDebug>
#include <QTimer>
#include <QHostInfo>

#include "MG.h"
#include "QGC.h"
pixhawk's avatar
pixhawk committed
#include "MAVLinkSimulationLink.h"
#include "SerialLink.h"
#include "UDPLink.h"
#include "MAVLinkProtocol.h"
#include "CommConfigurationWindow.h"
#include "WaypointList.h"
#include "MainWindow.h"
#include "JoystickWidget.h"
pixhawk's avatar
pixhawk committed
#include "GAudioOutput.h"
#ifdef QGC_OSG_ENABLED
#include "Q3DWidgetFactory.h"
pixhawk's avatar
pixhawk committed

lm's avatar
lm committed
// FIXME Move
#include "PxQuadMAV.h"
#include "SlugsMAV.h"

pixhawk's avatar
pixhawk committed

#include "LogCompressor.h"

/**
* Create new mainwindow. The constructor instantiates all parts of the user
* interface. It does NOT show the mainwindow. To display it, call the show()
* method.
*
* @see QMainWindow::show()
**/
MainWindow::MainWindow(QWidget *parent) :
pixhawk's avatar
pixhawk committed
        QMainWindow(parent),
        settings()
pixhawk's avatar
pixhawk committed
{
    this->hide();
    this->setVisible(false);

pixhawk's avatar
pixhawk committed
    // Setup user interface
    ui.setupUi(this);

    buildWidgets();

    connectWidgets();

    arrangeCenterStack();

    configureWindowName();
pixhawk's avatar
pixhawk committed

    // Add status bar
    //setStatusBar(createStatusBar());
pixhawk's avatar
pixhawk committed

    // Set the application style (not the same as a style sheet)
    // Set the style to Plastique
    qApp->setStyle("plastique");
pixhawk's avatar
pixhawk committed
    // Set style sheet as last step
    reloadStylesheet();


    // Create actions
    connectActions();

    // Load widgets and show application windowa
    loadWidgets();

    // Adjust the size
    adjustSize();
pixhawk's avatar
pixhawk committed

    // Set menu
    QMenu* widgetMenu = createDockWidgetMenu();
pixhawk's avatar
pixhawk committed
    widgetMenu->setTitle("Widgets");
    ui.menuBar->addMenu(widgetMenu);
//    QMenu* centerMenu = createCenterWidgetMenu();
//    centerMenu->setTitle("Center");
//    ui.menuBar->addMenu(centerMenu);

    // Load previous widget setup

    // FIXME WORK IN PROGRESS
    QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);

    QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
    if (dockwidgets.size())
    {
        settings.beginGroup("mainwindow/dockwidgets");
        for (int i = 0; i < dockwidgets.size(); ++i)
        {
            QDockWidget *dockWidget = dockwidgets.at(i);
            if (dockWidget->parentWidget() == this)
            {
                if (settings.contains(dockWidget->windowTitle()))
                {
                    dockWidget->setVisible(settings.value(dockWidget->windowTitle(), dockWidget->isVisible()).toBool());
                }
            }
        }
        settings.endGroup();
    }



pixhawk's avatar
pixhawk committed
}

pixhawk's avatar
pixhawk committed
MainWindow::~MainWindow()
pixhawk's avatar
pixhawk committed
{
    delete statusBar;
    statusBar = NULL;
}

void MainWindow::storeSettings()
{
    QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);

    QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
    if (dockwidgets.size())
    {
        settings.beginGroup("mainwindow/dockwidgets");
        for (int i = 0; i < dockwidgets.size(); ++i)
        {
            QDockWidget *dockWidget = dockwidgets.at(i);
            if (dockWidget->parentWidget() == this)
            {
                settings.setValue(dockWidget->windowTitle(), QVariant(dockWidget->isVisible()));
            }
        }
        settings.endGroup();
    }
    settings.sync();
}

QMenu* MainWindow::createCenterWidgetMenu()
{
    QMenu* menu = NULL;
    QStackedWidget* centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
    if (centerStack)
    {
        if (centerStack->count() > 0)
        {
            menu = new QMenu(this);
            for (int i = 0; i < centerStack->count(); ++i)
            {
                //menu->addAction(centerStack->widget(i)->actions())
            }
        }
    }
    return menu;
}

QMenu* MainWindow::createDockWidgetMenu()
{
    QMenu *menu = 0;
#ifndef QT_NO_DOCKWIDGET
    QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
    if (dockwidgets.size())
    {
        menu = new QMenu(this);
        for (int i = 0; i < dockwidgets.size(); ++i)
        {
            QDockWidget *dockWidget = dockwidgets.at(i);
            if (dockWidget->parentWidget() == this)
            {
                menu->addAction(dockwidgets.at(i)->toggleViewAction());
            }
        }
        menu->addSeparator();
    }
#endif
    return menu;
}

pixhawk's avatar
pixhawk committed
//QList<QWidget* >* MainWindow::getMainWidgets()
//{

//}

//QMenu* QMainWindow::getDockWidgetMenu()
//{
//    Q_D(QMainWindow);
//    QMenu *menu = 0;
//#ifndef QT_NO_DOCKWIDGET
//    QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
//    if (dockwidgets.size()) {
Loading
Loading full blame...