From e5e592056bc56cb370a42694b6a0728bbef8e21a Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Mon, 27 May 2013 06:53:07 -0400 Subject: [PATCH] Addition of QuickView selection dialog for add/remove of display items --- qgroundcontrol.pro | 9 +- src/ui/MainWindow.cc | 6 +- src/ui/uas/UASQuickView.cc | 189 +++++++++++++++++++++++++- src/ui/uas/UASQuickView.h | 20 ++- src/ui/uas/UASQuickViewItemSelect.cpp | 46 +++++++ src/ui/uas/UASQuickViewItemSelect.h | 26 ++++ src/ui/uas/UASQuickViewItemSelect.ui | 73 ++++++++++ 7 files changed, 357 insertions(+), 12 deletions(-) create mode 100644 src/ui/uas/UASQuickViewItemSelect.cpp create mode 100644 src/ui/uas/UASQuickViewItemSelect.h create mode 100644 src/ui/uas/UASQuickViewItemSelect.ui diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 04f691643..d45b69cac 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -227,7 +227,8 @@ FORMS += src/ui/MainWindow.ui \ src/ui/QGCHilXPlaneConfiguration.ui \ src/ui/designer/QGCComboBox.ui \ src/ui/designer/QGCTextLabel.ui \ - src/ui/uas/UASQuickView.ui + src/ui/uas/UASQuickView.ui \ + src/ui/uas/UASQuickViewItemSelect.ui INCLUDEPATH += src \ src/ui \ src/ui/linechart \ @@ -376,7 +377,8 @@ HEADERS += src/MG.h \ src/ui/submainwindow.h \ src/ui/dockwidgettitlebareventfilter.h \ src/ui/uas/UASQuickView.h \ - src/ui/uas/UASQuickViewItem.h + src/ui/uas/UASQuickViewItem.h \ + src/ui/uas/UASQuickViewItemSelect.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h @@ -544,7 +546,8 @@ SOURCES += src/main.cc \ src/ui/submainwindow.cpp \ src/ui/dockwidgettitlebareventfilter.cpp \ src/ui/uas/UASQuickViewItem.cc \ - src/ui/uas/UASQuickView.cc + src/ui/uas/UASQuickView.cc \ + src/ui/uas/UASQuickViewItemSelect.cpp # Enable Google Earth only on Mac OS and Windows with Visual Studio compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 9766a7b3e..24397e330 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -574,7 +574,11 @@ void MainWindow::buildCommonWidgets() createDockWidget(pilotView,new UASListWidget(this),tr("Unmanned Systems"),"UNMANNED_SYSTEM_LIST_DOCKWIDGET",VIEW_FLIGHT,Qt::RightDockWidgetArea); createDockWidget(pilotView,new HUD(320,240,this),tr("Head Up Display"),"HEAD_UP_DISPLAY_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea,this->width()/1.8); - createDockWidget(pilotView,new UASQuickView(this),tr("Quick View"),"UAS_INFO_QUICKVIEW_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea); + //createDockWidget(pilotView,new UASQuickView(this),tr("Quick View"),"UAS_INFO_QUICKVIEW_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea); + UASQuickView *quickview = new UASQuickView(this); + quickview->addSource(mavlinkDecoder); + createDockWidget(pilotView,quickview,tr("Quick View"),"UAS_INFO_QUICKVIEW_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea); + //hddisplay->addSource(mavlinkDecoder); createDockWidget(pilotView,new HSIDisplay(this),tr("Horizontal Situation"),"HORIZONTAL_SITUATION_INDICATOR_DOCKWIDGET",VIEW_FLIGHT,Qt::LeftDockWidgetArea); pilotView->setTabPosition(Qt::LeftDockWidgetArea,QTabWidget::North); pilotView->tabifyDockWidget((QDockWidget*)centralWidgetToDockWidgetsMap[VIEW_FLIGHT]["HORIZONTAL_SITUATION_INDICATOR_DOCKWIDGET"],(QDockWidget*)centralWidgetToDockWidgetsMap[VIEW_FLIGHT]["UAS_INFO_QUICKVIEW_DOCKWIDGET"]); diff --git a/src/ui/uas/UASQuickView.cc b/src/ui/uas/UASQuickView.cc index 5edd0aa76..652031219 100644 --- a/src/ui/uas/UASQuickView.cc +++ b/src/ui/uas/UASQuickView.cc @@ -1,8 +1,10 @@ #include "UASQuickView.h" #include #include +#include "UASQuickViewItemSelect.h" UASQuickView::UASQuickView(QWidget *parent) : QWidget(parent) { + quickViewSelectDialog=0; ui.setupUi(this); connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(setActiveUAS(UASInterface*))); connect(UASManager::instance(),SIGNAL(UASCreated(UASInterface*)),this,SLOT(addUAS(UASInterface*))); @@ -13,7 +15,7 @@ UASQuickView::UASQuickView(QWidget *parent) : QWidget(parent) this->setContextMenuPolicy(Qt::ActionsContextMenu); - { + /*{ QAction *action = new QAction("latitude",this); action->setCheckable(true); action->setChecked(true); @@ -71,19 +73,79 @@ UASQuickView::UASQuickView(QWidget *parent) : QWidget(parent) item->setTitle("distToWaypoint"); ui.verticalLayout->addWidget(item); uasPropertyToLabelMap["distToWaypoint"] = item; - } + }*/ + valueEnabled("altitude"); + valueEnabled("groundSpeed"); + valueEnabled("distToWaypoint"); + valueEnabled("yaw"); + valueEnabled("roll"); + + QAction *action = new QAction("Add Item",this); + action->setCheckable(false); + connect(action,SIGNAL(triggered()),this,SLOT(actionTriggered())); + this->addAction(action); updateTimer = new QTimer(this); connect(updateTimer,SIGNAL(timeout()),this,SLOT(updateTimerTick())); updateTimer->start(1000); } +void UASQuickView::actionTriggered() +{ + if (quickViewSelectDialog) + { + quickViewSelectDialog->show(); + return; + } + quickViewSelectDialog = new UASQuickViewItemSelect(); + connect(quickViewSelectDialog,SIGNAL(destroyed()),this,SLOT(selectDialogClosed())); + connect(quickViewSelectDialog,SIGNAL(valueDisabled(QString)),this,SLOT(valueDisabled(QString))); + connect(quickViewSelectDialog,SIGNAL(valueEnabled(QString)),this,SLOT(valueEnabled(QString))); + quickViewSelectDialog->setAttribute(Qt::WA_DeleteOnClose,true); + for (QMap::const_iterator i = uasPropertyValueMap.constBegin();i!=uasPropertyValueMap.constEnd();i++) + { + quickViewSelectDialog->addItem(i.key(),uasEnabledPropertyList.contains(i.key())); + } + quickViewSelectDialog->show(); +} +void UASQuickView::valueEnabled(QString value) +{ + UASQuickViewItem *item = new UASQuickViewItem(this); + item->setTitle(value); + ui.verticalLayout->addWidget(item); + uasPropertyToLabelMap[value] = item; + uasEnabledPropertyList.append(value); + if (!uasPropertyValueMap.contains(value)) + { + uasPropertyValueMap[value] = 0; + } +} + +void UASQuickView::valueDisabled(QString value) +{ + if (uasPropertyToLabelMap.contains(value)) + { + UASQuickViewItem *item = uasPropertyToLabelMap[value]; + uasPropertyToLabelMap.remove(value); + item->hide(); + ui.verticalLayout->removeWidget(item); + item->deleteLater(); + uasEnabledPropertyList.removeOne(value); + } +} + +void UASQuickView::selectDialogClosed() +{ + quickViewSelectDialog = 0; +} + void UASQuickView::updateTimerTick() { - for (int i=0;i::const_iterator i = uasPropertyToLabelMap.constBegin(); i != uasPropertyToLabelMap.constEnd();i++) { - if (uasPropertyValueMap.contains(uasPropertyList[i]) && uasPropertyToLabelMap.contains(uasPropertyList[i])) + if (uasPropertyValueMap.contains(i.key())) { - uasPropertyToLabelMap[uasPropertyList[i]]->setValue(uasPropertyValueMap.value(uasPropertyList[i],0)); + i.value()->setValue(uasPropertyValueMap[i.key()]); } } } @@ -107,14 +169,13 @@ void UASQuickView::setActiveUAS(UASInterface* uas) } this->uas = uas; connect(uas,SIGNAL(valueChanged(int,QString,QString,QVariant,quint64)),this,SLOT(valueChanged(int,QString,QString,QVariant,quint64))); - uasPropertyList.clear(); qDebug() << "UASInfoWidget property count:" << uas->metaObject()->propertyCount(); for (int i=0;imetaObject()->propertyCount();i++) { if (uas->metaObject()->property(i).hasNotifySignal()) { qDebug() << "Property:" << i << uas->metaObject()->property(i).name(); - uasPropertyList.append(uas->metaObject()->property(i).name()); + uasPropertyValueMap[uas->metaObject()->property(i).name()] = 0; if (!uasPropertyToLabelMap.contains(uas->metaObject()->property(i).name())) { QAction *action = new QAction(QString(uas->metaObject()->property(i).name()),this); @@ -134,7 +195,121 @@ void UASQuickView::setActiveUAS(UASInterface* uas) } } } + //connect(uas,SIGNAL()) +} +void UASQuickView::addSource(MAVLinkDecoder *decoder) +{ + connect(decoder,SIGNAL(valueChanged(int,QString,QString,double,quint64)),this,SLOT(valueChanged(int,QString,QString,double,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint8,quint64)),this,SLOT(valueChanged(int,QString,QString,qint8,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint16,quint64)),this,SLOT(valueChanged(int,QString,QString,qint16,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint32,quint64)),this,SLOT(valueChanged(int,QString,QString,qint32,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,qint64,quint64)),this,SLOT(valueChanged(int,QString,QString,qint64,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint8,quint64)),this,SLOT(valueChanged(int,QString,QString,quint8,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint16,quint64)),this,SLOT(valueChanged(int,QString,QString,quint16,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint32,quint64)),this,SLOT(valueChanged(int,QString,QString,quint32,quint64))); + connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint64,quint64)),this,SLOT(valueChanged(int,QString,QString,quint64,quint64))); +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint8 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; } + +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint8 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint16 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint16 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint32 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint32 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} +void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec) +{ + if (!uasPropertyValueMap.contains(name)) + { + if (quickViewSelectDialog) + { + quickViewSelectDialog->addItem(name); + } + } + uasPropertyValueMap[name] = value; +} + void UASQuickView::actionTriggered(bool checked) { QAction *senderlabel = qobject_cast(sender()); diff --git a/src/ui/uas/UASQuickView.h b/src/ui/uas/UASQuickView.h index 7a06fecad..cb11848db 100644 --- a/src/ui/uas/UASQuickView.h +++ b/src/ui/uas/UASQuickView.h @@ -8,28 +8,46 @@ #include "uas/UASInterface.h" #include "ui_UASQuickView.h" #include "UASQuickViewItem.h" +#include "MAVLinkDecoder.h" +#include "UASQuickViewItemSelect.h" class UASQuickView : public QWidget { Q_OBJECT public: UASQuickView(QWidget *parent = 0); + void addSource(MAVLinkDecoder *decoder); private: UASInterface *uas; - QList uasPropertyList; + QList uasEnabledPropertyList; QMap uasPropertyValueMap; QMap uasPropertyToLabelMap; QTimer *updateTimer; + UASQuickViewItemSelect *quickViewSelectDialog; protected: Ui::Form ui; signals: public slots: + void valueChanged(const int uasId, const QString& name, const QString& unit, const quint8 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const qint8 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const quint16 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const qint16 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const quint32 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const qint32 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec); + void valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec); + void valueChanged(const int uasid, const QString& name, const QString& unit, const QVariant value,const quint64 msecs); void actionTriggered(bool checked); + void actionTriggered(); void updateTimerTick(); void addUAS(UASInterface* uas); void setActiveUAS(UASInterface* uas); void valChanged(double val,QString type); + void selectDialogClosed(); + void valueEnabled(QString value); + void valueDisabled(QString value); }; #endif // UASQUICKVIEW_H diff --git a/src/ui/uas/UASQuickViewItemSelect.cpp b/src/ui/uas/UASQuickViewItemSelect.cpp new file mode 100644 index 000000000..537d1aafb --- /dev/null +++ b/src/ui/uas/UASQuickViewItemSelect.cpp @@ -0,0 +1,46 @@ +#include "UASQuickViewItemSelect.h" +#include +#include +UASQuickViewItemSelect::UASQuickViewItemSelect(QWidget *parent) : QWidget(parent) +{ + ui.setupUi(this); + currcol = 0; + currrow = 0; +} +void UASQuickViewItemSelect::addItem(QString item,bool enabled) +{ + QCheckBox *label = new QCheckBox(this); + if (enabled) + { + label->setChecked(true); + } + connect(label,SIGNAL(clicked(bool)),this,SLOT(checkBoxClicked(bool))); + label->setText(item); + label->show(); + ui.gridLayout->addWidget(label,currrow,currcol++); + if (currcol > 10) + { + currcol = 0; + currrow++; + } +} +void UASQuickViewItemSelect::checkBoxClicked(bool checked) +{ + QCheckBox *check = qobject_cast(sender()); + if (!check) + { + return; + } + if (checked) + { + emit valueEnabled(check->text()); + } + else + { + emit valueDisabled(check->text()); + } +} + +UASQuickViewItemSelect::~UASQuickViewItemSelect() +{ +} diff --git a/src/ui/uas/UASQuickViewItemSelect.h b/src/ui/uas/UASQuickViewItemSelect.h new file mode 100644 index 000000000..4be402c5e --- /dev/null +++ b/src/ui/uas/UASQuickViewItemSelect.h @@ -0,0 +1,26 @@ +#ifndef UASQUICKVIEWITEMSELECT_H +#define UASQUICKVIEWITEMSELECT_H + +#include +#include "ui_UASQuickViewItemSelect.h" + +class UASQuickViewItemSelect : public QWidget +{ + Q_OBJECT + +public: + explicit UASQuickViewItemSelect(QWidget *parent = 0); + ~UASQuickViewItemSelect(); + void addItem(QString item,bool enabled = false); + int currrow; + int currcol; +private: + Ui::UASQuickViewItemSelect ui; +private slots: + void checkBoxClicked(bool checked); +signals: + void valueEnabled(QString value); + void valueDisabled(QString value); +}; + +#endif // UASQUICKVIEWITEMSELECT_H diff --git a/src/ui/uas/UASQuickViewItemSelect.ui b/src/ui/uas/UASQuickViewItemSelect.ui new file mode 100644 index 000000000..8beb65ab7 --- /dev/null +++ b/src/ui/uas/UASQuickViewItemSelect.ui @@ -0,0 +1,73 @@ + + + UASQuickViewItemSelect + + + + 0 + 0 + 571 + 474 + + + + Form + + + + + 30 + 410 + 75 + 23 + + + + PushButton + + + + + + 230 + 410 + 75 + 23 + + + + PushButton + + + + + + 10 + 10 + 531 + 321 + + + + true + + + + + 0 + 0 + 529 + 319 + + + + + + + + + + + + + -- 2.22.0