Commit 73436f42 authored by pixhawk's avatar pixhawk

Enabled selection of individual widgets in menu, persistence pending

parent 27737cde
......@@ -133,11 +133,13 @@ macx {
exists(/opt/local/include/libfreenect) {
message("Building support for libfreenect")
message("ENABLED support for libfreenect")
DEPENDENCIES_PRESENT += libfreenect
# Include libfreenect libraries
LIBS += -lfreenect
DEFINES += QGC_LIBFREENECT_ENABLED
} else {
message("DISABLED libfreenect support")
}
# osg/osgEarth dynamic casts might fail without this compiler option.
......
......@@ -14,6 +14,9 @@ namespace QGC
/** @brief Get the current ground time in microseconds */
quint64 groundTimeUsecs();
const QString APPNAME = "QGROUNDCONTROL";
const QString COMPANYNAME = "OPENMAV";
}
#endif // QGC_H
......@@ -165,6 +165,19 @@ HUD::~HUD()
}
void HUD::showEvent(QShowEvent* event)
{
Q_UNUSED(event);
if (isVisible())
{
refreshTimer->start();
}
else
{
refreshTimer->stop();
}
}
void HUD::start()
{
refreshTimer->start();
......
......@@ -123,6 +123,8 @@ protected:
float refLineWidthToPen(float line);
/** @brief Rotate a polygon around a point clockwise */
void rotatePolygonClockWiseRad(QPolygonF& p, float angle, QPointF origin);
/** @brief Override base class show */
virtual void showEvent(QShowEvent* event);
QImage* image; ///< Double buffer image
QImage glImage; ///< The background / camera image
......
......@@ -83,9 +83,13 @@ MainWindow::MainWindow(QWidget *parent) :
adjustSize();
// Set menu
QMenu* widgetMenu = createPopupMenu();
QMenu* widgetMenu = createDockWidgetMenu();
widgetMenu->setTitle("Widgets");
ui.menuBar->addMenu(widgetMenu);
// QMenu* centerMenu = createCenterWidgetMenu();
// centerMenu->setTitle("Center");
// ui.menuBar->addMenu(centerMenu);
this->show();
}
MainWindow::~MainWindow()
......@@ -94,6 +98,46 @@ MainWindow::~MainWindow()
statusBar = NULL;
}
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;
}
//QList<QWidget* >* MainWindow::getMainWidgets()
//{
......@@ -174,59 +218,86 @@ void MainWindow::buildWidgets()
// Dock widgets
controlDockWidget = new QDockWidget(tr("Control"), this);
controlDockWidget->setWidget( new UASControlWidget(this) );
addDockWidget(Qt::LeftDockWidgetArea, controlDockWidget);
controlDockWidget->hide();
infoDockWidget = new QDockWidget(tr("Status Details"), this);
infoDockWidget->setWidget( new UASInfoWidget(this) );
addDockWidget(Qt::LeftDockWidgetArea, infoDockWidget);
//infoDockWidget->hide();
listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
listDockWidget->setWidget( new UASListWidget(this) );
addDockWidget(Qt::BottomDockWidgetArea, listDockWidget);
listDockWidget->hide();
waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this);
waypointsDockWidget->setWidget( new WaypointList(this, NULL) );
infoDockWidget = new QDockWidget(tr("Status Details"), this);
infoDockWidget->setWidget( new UASInfoWidget(this) );
addDockWidget(Qt::BottomDockWidgetArea, waypointsDockWidget);
waypointsDockWidget->hide();
detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
addDockWidget(Qt::RightDockWidgetArea, detectionDockWidget);
detectionDockWidget->hide();
debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
debugConsoleDockWidget->setWidget( new DebugConsole(this) );
addDockWidget(Qt::BottomDockWidgetArea, debugConsoleDockWidget);
parametersDockWidget = new QDockWidget(tr("Onboard Parameters"), this);
parametersDockWidget->setWidget( new ParameterInterface(this) );
addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
watchdogControlDockWidget = new QDockWidget(tr("Process Control"), this);
watchdogControlDockWidget->setWidget( new WatchdogControl(this) );
addDockWidget(Qt::RightDockWidgetArea, watchdogControlDockWidget);
watchdogControlDockWidget->hide();
hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this);
hsiDockWidget->setWidget( new HSIDisplay(this) );
addDockWidget(Qt::LeftDockWidgetArea, hsiDockWidget);
headDown1DockWidget = new QDockWidget(tr("Primary Flight Display"), this);
headDown1DockWidget = new QDockWidget(tr("System Stats"), this);
headDown1DockWidget->setWidget( new HDDisplay(acceptList, this) );
addDockWidget(Qt::RightDockWidgetArea, headDown1DockWidget);
headDown2DockWidget = new QDockWidget(tr("Payload Status"), this);
headDown2DockWidget->setWidget( new HDDisplay(acceptList2, this) );
addDockWidget(Qt::RightDockWidgetArea, headDown2DockWidget);
rcViewDockWidget = new QDockWidget(tr("Radio Control"), this);
rcViewDockWidget->setWidget( new QGCRemoteControlView(this) );
addDockWidget(Qt::BottomDockWidgetArea, rcViewDockWidget);
rcViewDockWidget->hide();
headUpDockWidget = new QDockWidget(tr("Control Indicator"), this);
headUpDockWidget->setWidget( new HUD(320, 240, this));
this->addDockWidget(Qt::LeftDockWidgetArea, headUpDockWidget);
// Dialogue widgets
//FIXME: free memory in destructor
joystick = new JoystickInput();
// SLUGS
slugsDataWidget = new QDockWidget(tr("Slugs Data"), this);
slugsDataWidget->setWidget( new SlugsDataSensorView(this));
addDockWidget(Qt::LeftDockWidgetArea, slugsDataWidget);
slugsDataWidget->hide();
slugsPIDControlWidget = new QDockWidget(tr("PID Control"), this);
slugsPIDControlWidget = new QDockWidget(tr("Slugs PID Control"), this);
slugsPIDControlWidget->setWidget(new SlugsPIDControl(this));
addDockWidget(Qt::BottomDockWidgetArea, slugsPIDControlWidget);
slugsPIDControlWidget->hide();
slugsHilSimWidget = new QDockWidget(tr("Slugs Hil Sim"), this);
slugsHilSimWidget->setWidget( new SlugsHilSim(this));
addDockWidget(Qt::BottomDockWidgetArea, slugsHilSimWidget);
slugsHilSimWidget->hide();
slugsCamControlWidget = new QDockWidget(tr("Video Camera Control"), this);
slugsCamControlWidget = new QDockWidget(tr("Slugs Video Camera Control"), this);
slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this));
addDockWidget(Qt::BottomDockWidgetArea, slugsCamControlWidget);
slugsCamControlWidget->hide();
//FIXME: free memory in destructor
joystick = new JoystickInput();
}
/**
......@@ -332,16 +403,6 @@ void MainWindow::configureWindowName()
#endif
}
void MainWindow::createCenterWidgetMenu()
{
}
void MainWindow::createDockWidgetMenu()
{
}
QStatusBar* MainWindow::createStatusBar()
{
QStatusBar* bar = new QStatusBar();
......@@ -693,7 +754,8 @@ void MainWindow::clearView()
if (dockWidget)
{
// Remove dock widget from main window
this->removeDockWidget(dockWidget);
//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?
......@@ -766,7 +828,6 @@ void MainWindow::loadSlugsView()
addDockWidget(Qt::LeftDockWidgetArea, slugsHilSimWidget);
slugsHilSimWidget->show();
}
this->show();
}
void MainWindow::loadPixhawkView()
......@@ -840,8 +901,6 @@ void MainWindow::loadPixhawkView()
addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
parametersDockWidget->show();
}
this->show();
}
void MainWindow::loadDataView()
......@@ -910,8 +969,6 @@ void MainWindow::loadPilotView()
hdd->start();
}
}
this->show();
}
void MainWindow::loadOperatorView()
......@@ -981,8 +1038,6 @@ void MainWindow::loadOperatorView()
addDockWidget(Qt::RightDockWidgetArea, watchdogControlDockWidget);
watchdogControlDockWidget->show();
}
this->show();
}
void MainWindow::loadGlobalOperatorView()
......@@ -1026,64 +1081,6 @@ void MainWindow::loadGlobalOperatorView()
addDockWidget(Qt::BottomDockWidgetArea, slugsCamControlWidget);
slugsCamControlWidget->show();
}
// // UAS CONTROL
// if (controlDockWidget)
// {
// addDockWidget(Qt::LeftDockWidgetArea, controlDockWidget);
// controlDockWidget->show();
// }
// // UAS LIST
// if (listDockWidget)
// {
// addDockWidget(Qt::BottomDockWidgetArea, listDockWidget);
// listDockWidget->show();
// }
// // UAS STATUS
// if (infoDockWidget)
// {
// addDockWidget(Qt::LeftDockWidgetArea, infoDockWidget);
// infoDockWidget->show();
// }
// // HORIZONTAL SITUATION INDICATOR
// if (hsiDockWidget)
// {
// HSIDisplay* hsi = dynamic_cast<HSIDisplay*>( hsiDockWidget->widget() );
// if (hsi)
// {
// addDockWidget(Qt::BottomDockWidgetArea, hsiDockWidget);
// hsiDockWidget->show();
// hsi->start();
// }
// }
// PROCESS CONTROL
// if (watchdogControlDockWidget)
// {
// addDockWidget(Qt::RightDockWidgetArea, watchdogControlDockWidget);
// watchdogControlDockWidget->show();
// }
// HEAD UP DISPLAY
// if (headUpDockWidget)
// {
// addDockWidget(Qt::RightDockWidgetArea, headUpDockWidget);
// // FIXME Replace with default ->show() call
// HUD* hud = dynamic_cast<HUD*>(headUpDockWidget->widget());
// if (hud)
// {
// headUpDockWidget->show();
// hud->start();
// }
// }
}
void MainWindow::load3DMapView()
......@@ -1135,7 +1132,6 @@ void MainWindow::load3DMapView()
}
}
#endif
this->show();
}
void MainWindow::loadGoogleEarthView()
......@@ -1185,7 +1181,6 @@ void MainWindow::loadGoogleEarthView()
hsiDockWidget->show();
}
}
this->show();
#endif
}
......@@ -1240,8 +1235,6 @@ void MainWindow::load3DView()
}
}
#endif
this->show();
}
void MainWindow::loadEngineerView()
......@@ -1308,8 +1301,6 @@ void MainWindow::loadEngineerView()
addDockWidget(Qt::BottomDockWidgetArea, rcViewDockWidget);
rcViewDockWidget->show();
}
this->show();
}
void MainWindow::loadMAVLinkView()
......@@ -1324,8 +1315,6 @@ void MainWindow::loadMAVLinkView()
centerStack->setCurrentWidget(protocolWidget);
}
}
this->show();
}
void MainWindow::loadAllView()
......@@ -1413,13 +1402,9 @@ void MainWindow::loadAllView()
addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
parametersDockWidget->show();
}
this->show();
}
void MainWindow::loadWidgets()
{
//loadOperatorView();
loadEngineerView();
//loadPilotView();
//loadEngineerView();
}
......@@ -160,8 +160,8 @@ protected:
void arrangeCenterStack();
void configureWindowName();
void createCenterWidgetMenu();
void createDockWidgetMenu();
QMenu* createCenterWidgetMenu();
QMenu* createDockWidgetMenu();
// TODO Should be moved elsewhere, as the protocol does not belong to the UI
MAVLinkProtocol* mavlink;
......@@ -203,6 +203,7 @@ protected:
QPointer<QDockWidget> headUpDockWidget;
QPointer<QDockWidget> hsiDockWidget;
QPointer<QDockWidget> rcViewDockWidget;
QPointer<QDockWidget> hudDockWidget;
QPointer<QDockWidget> slugsDataWidget;
QPointer<QDockWidget> slugsPIDControlWidget;
QPointer<QDockWidget> slugsHilSimWidget;
......
......@@ -7,6 +7,7 @@
#include "ui_XMLCommProtocolWidget.h"
#include "MAVLinkXMLParser.h"
#include "MAVLinkSyntaxHighlighter.h"
#include "QGC.h"
#include <QDebug>
#include <iostream>
......@@ -31,7 +32,7 @@ XMLCommProtocolWidget::XMLCommProtocolWidget(QWidget *parent) :
void XMLCommProtocolWidget::selectXMLFile()
{
//QString fileName = QFileDialog::getOpenFileName(this, tr("Load Protocol Definition File"), ".", "*.xml");
QSettings settings;
QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
const QString mavlinkXML = "MAVLINK_XML_FILE";
QString dirPath = settings.value(mavlinkXML, QCoreApplication::applicationDirPath() + "../").toString();
QFileDialog dialog;
......@@ -92,7 +93,7 @@ void XMLCommProtocolWidget::setXML(const QString& xml)
void XMLCommProtocolWidget::selectOutputDirectory()
{
QSettings settings;
QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
const QString mavlinkOutputDir = "MAVLINK_OUTPUT_DIR";
QString dirPath = settings.value(mavlinkOutputDir, QCoreApplication::applicationDirPath() + "../").toString();
QFileDialog dialog;
......@@ -110,7 +111,7 @@ void XMLCommProtocolWidget::selectOutputDirectory()
{
m_ui->outputDirNameLabel->setText(fileNames.first());
// Store directory for next time
settings.setValue(mavlinkOutputDir, fileNames.first());
settings.setValue(mavlinkOutputDir, QFileInfo(fileNames.first()).absoluteFilePath());
//QFile file(fileName);
}
}
......
......@@ -159,7 +159,9 @@ void LinechartWidget::createLayout()
QToolButton* timeButton = new QToolButton(this);
timeButton->setText(tr("Ground Time"));
timeButton->setCheckable(true);
timeButton->setChecked(false);
bool gTimeDefault = true;
if (activePlot) activePlot->enforceGroundTime(gTimeDefault);
timeButton->setChecked(gTimeDefault);
layout->addWidget(timeButton, 1, 4);
layout->setColumnStretch(4, 0);
connect(timeButton, SIGNAL(clicked(bool)), activePlot, SLOT(enforceGroundTime(bool)));
......@@ -442,6 +444,12 @@ void LinechartWidget::removeCurve(QString curve)
// Remove name
}
void LinechartWidget::showEvent(QShowEvent* event)
{
Q_UNUSED(event);
setActive(isVisible());
}
void LinechartWidget::setActive(bool active)
{
if (activePlot)
......
......@@ -77,6 +77,8 @@ public slots:
void setPlotWindowPosition(int scrollBarValue);
void setPlotWindowPosition(quint64 position);
void setPlotInterval(quint64 interval);
/** @brief Override base class show */
virtual void showEvent(QShowEvent* event);
void setActive(bool active);
/** @brief Set the number of values to average over */
void setAverageWindow(int windowSize);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment