Commit e5e59205 authored by Michael Carpenter's avatar Michael Carpenter

Addition of QuickView selection dialog for add/remove of display items

parent 89696feb
......@@ -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
......
......@@ -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"]);
......
#include "UASQuickView.h"
#include <QMetaMethod>
#include <QDebug>
#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<QString,double>::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<uasPropertyList.size();i++)
//uasPropertyValueMap
for (QMap<QString,UASQuickViewItem*>::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;i<uas->metaObject()->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<QAction*>(sender());
......
......@@ -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<QString> uasPropertyList;
QList<QString> uasEnabledPropertyList;
QMap<QString,double> uasPropertyValueMap;
QMap<QString,UASQuickViewItem*> 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
#include "UASQuickViewItemSelect.h"
#include <QLabel>
#include <QCheckBox>
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<QCheckBox*>(sender());
if (!check)
{
return;
}
if (checked)
{
emit valueEnabled(check->text());
}
else
{
emit valueDisabled(check->text());
}
}
UASQuickViewItemSelect::~UASQuickViewItemSelect()
{
}
#ifndef UASQUICKVIEWITEMSELECT_H
#define UASQUICKVIEWITEMSELECT_H
#include <QWidget>
#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
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>UASQuickViewItemSelect</class>
<widget class="QWidget" name="UASQuickViewItemSelect">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>571</width>
<height>474</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>30</x>
<y>410</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>230</x>
<y>410</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
<widget class="QScrollArea" name="scrollArea">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>531</width>
<height>321</height>
</rect>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>529</width>
<height>319</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout"/>
</item>
</layout>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>
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