diff --git a/ground/src/plugins/emptygadget/emptygadgetwidget.cpp b/ground/src/plugins/emptygadget/emptygadgetwidget.cpp index f64fb4f9d..cc75980e0 100644 --- a/ground/src/plugins/emptygadget/emptygadgetwidget.cpp +++ b/ground/src/plugins/emptygadget/emptygadgetwidget.cpp @@ -40,7 +40,7 @@ EmptyGadgetWidget::EmptyGadgetWidget(QWidget *parent) : QLabel(parent) this-> setText(tr("Choose a gadget to display in this view.\n") + tr("You can also split this view in two.\n\n") + - tr("Maybe you first have to choose Show Toolbars in the Window menu.")); + tr("Maybe you first have to choose Edit Gadgets Mode in the Window menu.")); } EmptyGadgetWidget::~EmptyGadgetWidget() diff --git a/ground/src/plugins/uavobjectbrowser/treeitem.h b/ground/src/plugins/uavobjectbrowser/treeitem.h index b2c9f4acc..3f3dddf5e 100644 --- a/ground/src/plugins/uavobjectbrowser/treeitem.h +++ b/ground/src/plugins/uavobjectbrowser/treeitem.h @@ -53,7 +53,7 @@ public: int childCount() const; int columnCount() const; QVariant data(int column = 1) const; - // only column 1 is changed with setData currently + // only column 1 (TreeItem::dataColumn) is changed with setData currently // other columns are initialized in constructor virtual void setData(QVariant value, int column = 1); int row() const; diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowser.cpp b/ground/src/plugins/uavobjectbrowser/uavobjectbrowser.cpp index c4e40cc75..50cda056d 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowser.cpp +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowser.cpp @@ -42,5 +42,8 @@ UAVObjectBrowser::~UAVObjectBrowser() void UAVObjectBrowser::loadConfiguration(IUAVGadgetConfiguration* config) { UAVObjectBrowserConfiguration *m = qobject_cast(config); + m_widget->setRecentlyUpdatedColor(m->recentlyUpdatedColor()); + m_widget->setManuallyChangedColor(m->manuallyChangedColor()); + m_widget->setRecentlyUpdatedTimeout(m->recentlyUpdatedTimeout()); } diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.cpp b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.cpp index 11c22c37b..0128501d2 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.cpp +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.cpp @@ -29,25 +29,41 @@ #include UAVObjectBrowserConfiguration::UAVObjectBrowserConfiguration(QString classId, const QByteArray &state, QObject *parent) : - IUAVGadgetConfiguration(classId, parent) + IUAVGadgetConfiguration(classId, parent), + m_recentlyUpdatedColor(QColor(255, 230, 230)), + m_manuallyChangedColor(QColor(230, 230, 255)), + m_recentlyUpdatedTimeout(500) { if (state.count() > 0) { QDataStream stream(state); - + QColor recent; + QColor manual; + int timeout; + stream >> recent; + stream >> manual; + stream >> timeout; + m_recentlyUpdatedColor = recent; + m_manuallyChangedColor = manual; + m_recentlyUpdatedTimeout = timeout; } } IUAVGadgetConfiguration *UAVObjectBrowserConfiguration::clone() { UAVObjectBrowserConfiguration *m = new UAVObjectBrowserConfiguration(this->classId()); - return m; + m->m_recentlyUpdatedColor = m_recentlyUpdatedColor; + m->m_manuallyChangedColor = m_manuallyChangedColor; + m->m_recentlyUpdatedTimeout = m_recentlyUpdatedTimeout; + return m; } QByteArray UAVObjectBrowserConfiguration::saveState() const { QByteArray bytes; QDataStream stream(&bytes, QIODevice::WriteOnly); - + stream << m_recentlyUpdatedColor; + stream << m_manuallyChangedColor; + stream << m_recentlyUpdatedTimeout; return bytes; } diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.h b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.h index 9ae234111..d04c80b53 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.h +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserconfiguration.h @@ -29,22 +29,36 @@ #define UAVOBJECTBROWSERCONFIGURATION_H #include +#include using namespace Core; class UAVObjectBrowserConfiguration : public IUAVGadgetConfiguration { Q_OBJECT +Q_PROPERTY(QColor m_recentlyUpdatedColor READ recentlyUpdatedColor WRITE setRecentlyUpdatedColor) +Q_PROPERTY(QColor m_manuallyChangedColor READ manuallyChangedColor WRITE setManuallyChangedColor) +Q_PROPERTY(int m_recentlyUpdatedTimeout READ recentlyUpdatedTimeout WRITE setRecentlyUpdatedTimeout) public: explicit UAVObjectBrowserConfiguration(QString classId, const QByteArray &state = 0, QObject *parent = 0); QByteArray saveState() const; IUAVGadgetConfiguration *clone(); + + QColor recentlyUpdatedColor() const { return m_recentlyUpdatedColor; } + QColor manuallyChangedColor() const { return m_manuallyChangedColor; } + int recentlyUpdatedTimeout() const { return m_recentlyUpdatedTimeout; } + signals: public slots: + void setRecentlyUpdatedColor(QColor color) { m_recentlyUpdatedColor = color; } + void setManuallyChangedColor(QColor color) { m_manuallyChangedColor = color; } + void setRecentlyUpdatedTimeout(int timeout) { m_recentlyUpdatedTimeout = timeout; } private: - + QColor m_recentlyUpdatedColor; + QColor m_manuallyChangedColor; + int m_recentlyUpdatedTimeout; }; #endif // UAVOBJECTBROWSERCONFIGURATION_H diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserfactory.cpp b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserfactory.cpp index dde69afa7..0a5d53d3a 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserfactory.cpp +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserfactory.cpp @@ -53,6 +53,6 @@ IUAVGadgetConfiguration *UAVObjectBrowserFactory::createConfiguration(const QByt IOptionsPage *UAVObjectBrowserFactory::createOptionsPage(IUAVGadgetConfiguration *config) { - return 0;// new UAVObjectBrowserOptionsPage(qobject_cast(config)); + return new UAVObjectBrowserOptionsPage(qobject_cast(config)); } diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.cpp b/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.cpp index f5033b64b..a48146f24 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.cpp +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.cpp @@ -27,11 +27,13 @@ #include "uavobjectbrowseroptionspage.h" #include "uavobjectbrowserconfiguration.h" +#include "ui_uavobjectbrowseroptionspage.h" #include #include -#include +#include #include #include +#include UAVObjectBrowserOptionsPage::UAVObjectBrowserOptionsPage(UAVObjectBrowserConfiguration *config, QObject *parent) : @@ -43,17 +45,102 @@ UAVObjectBrowserOptionsPage::UAVObjectBrowserOptionsPage(UAVObjectBrowserConfigu QWidget *UAVObjectBrowserOptionsPage::createPage(QWidget *parent) { QWidget *widget = new QWidget; + QVBoxLayout *vl = new QVBoxLayout(); + widget->setLayout(vl); + + QHBoxLayout *recentColorLayout = new QHBoxLayout(); + QWidget *ru = new QWidget; + ru->setLayout(recentColorLayout); + QWidget *label = new QLabel(tr("Recently updated highlight color:")); + QHBoxLayout *rubLayout = new QHBoxLayout(); + QWidget *rub = new QWidget; + rub->setLayout(rubLayout); + m_ruLabel = new QLabel(" "); + m_ruLabel->setMinimumWidth(40); + m_ruButton = new QPushButton(tr("Choose")); + rubLayout->addWidget(m_ruLabel); + rubLayout->addWidget(m_ruButton); + recentColorLayout->addWidget(label); + recentColorLayout->addWidget(rub); + + QHBoxLayout *manualColorLayout = new QHBoxLayout(); + QWidget *mc = new QWidget; + mc->setLayout(manualColorLayout); + label = new QLabel(tr("Manually changed color:")); + QHBoxLayout *mcbLayout = new QHBoxLayout(); + QWidget *mcb = new QWidget; + mcb->setLayout(mcbLayout); + m_mcLabel = new QLabel(" "); + m_mcLabel->setMinimumWidth(40); + m_mcButton = new QPushButton(tr("Choose")); + mcbLayout->addWidget(m_mcLabel); + mcbLayout->addWidget(m_mcButton); + manualColorLayout->addWidget(label); + manualColorLayout->addWidget(mcb); + + QHBoxLayout *timeoutLayout = new QHBoxLayout(); + QWidget *x = new QWidget; + x->setLayout(timeoutLayout); + label = new QLabel("Recently updated highlight timeout (ms):"); + m_timeoutSpin = new QSpinBox(); + m_timeoutSpin->setSingleStep(100); + m_timeoutSpin->setMaximum(1000000000); + timeoutLayout->addWidget(label); + timeoutLayout->addWidget(m_timeoutSpin); + + QSpacerItem *spacer = new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding); + + vl->addWidget(ru); + vl->addWidget(mc); + vl->addWidget(x); + vl->addSpacerItem(spacer); + + m_ruColor = m_config->recentlyUpdatedColor(); + QString s = QString("background-color: %1").arg(m_ruColor.name()); + m_ruLabel->setStyleSheet(s); + m_mcColor = m_config->manuallyChangedColor(); + s = QString("background-color: %1").arg(m_mcColor.name()); + m_mcLabel->setStyleSheet(s); + m_timeoutSpin->setValue(m_config->recentlyUpdatedTimeout()); + + connect(m_ruButton, SIGNAL(clicked()), this, SLOT(ruButtonClicked())); + connect(m_mcButton, SIGNAL(clicked()), this, SLOT(mcButtonClicked())); return widget; + } void UAVObjectBrowserOptionsPage::apply() { - + m_config->setRecentlyUpdatedColor(m_ruColor); + m_config->setManuallyChangedColor(m_mcColor); + m_config->setRecentlyUpdatedTimeout(m_timeoutSpin->value()); } void UAVObjectBrowserOptionsPage::finish() { - + disconnect(m_ruButton, SIGNAL(clicked()), this, SLOT(ruButtonClicked())); + disconnect(m_mcButton, SIGNAL(clicked()), this, SLOT(mcButtonClicked())); + delete m_ruButton; + delete m_mcButton; + delete m_ruLabel; + delete m_mcLabel; + delete m_timeoutSpin; +} + +void UAVObjectBrowserOptionsPage::ruButtonClicked() +{ + QColor c = QColorDialog::getColor(m_ruColor); + m_ruColor = c.isValid() ? c : m_ruColor; + QString s = QString("background-color: %1").arg(m_ruColor.name()); + m_ruLabel->setStyleSheet(s); +} + +void UAVObjectBrowserOptionsPage::mcButtonClicked() +{ + QColor c = QColorDialog::getColor(m_mcColor); + m_mcColor = c.isValid() ? c : m_mcColor; + QString s = QString("background-color: %1").arg(m_mcColor.name()); + m_mcLabel->setStyleSheet(s); } diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.h b/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.h index 0f4ef7b4e..9b6db6612 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.h +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowseroptionspage.h @@ -29,13 +29,15 @@ #define UAVOBJECTBROWSEROPTIONSPAGE_H #include "coreplugin/dialogs/ioptionspage.h" +#include namespace Core { class IUAVGadgetConfiguration; } class UAVObjectBrowserConfiguration; +class QLabel; +class QPushButton; class QSpinBox; -class QDoubleSpinBox; using namespace Core; @@ -51,9 +53,18 @@ public: signals: -public slots: +private slots: + void ruButtonClicked(); + void mcButtonClicked(); private: UAVObjectBrowserConfiguration *m_config; + QColor m_ruColor; + QColor m_mcColor; + QLabel *m_ruLabel; + QLabel *m_mcLabel; + QPushButton *m_ruButton; + QPushButton *m_mcButton; + QSpinBox *m_timeoutSpin; }; diff --git a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserwidget.h b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserwidget.h index 02587eb78..6716a69f0 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjectbrowserwidget.h +++ b/ground/src/plugins/uavobjectbrowser/uavobjectbrowserwidget.h @@ -31,6 +31,7 @@ #include #include #include "uavobjects/settingspersistence.h" +#include "uavobjecttreemodel.h" class QPushButton; class ObjectTreeItem; @@ -44,21 +45,25 @@ class UAVObjectBrowserWidget : public QWidget public: UAVObjectBrowserWidget(QWidget *parent = 0); ~UAVObjectBrowserWidget(); + void setRecentlyUpdatedColor(QColor color) { m_model->setRecentlyUpdatedColor(color); } + void setManuallyChangedColor(QColor color) { m_model->setManuallyChangedColor(color); } + void setRecentlyUpdatedTimeout(int timeout) { m_model->setRecentlyUpdatedTimeout(timeout); } + +public slots: + void showMetaData(bool show); private slots: void sendUpdate(); void requestUpdate(); - void showMetaData(bool show); void saveSettings(); void readSettings(); void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - private: QPushButton *m_requestUpdate; QPushButton *m_sendUpdate; Ui_UAVObjectBrowser *m_browser; - QAbstractItemModel *m_model; + UAVObjectTreeModel *m_model; void updateSettings(SettingsPersistence::OperationEnum op); void enableSendRequest(bool enable); diff --git a/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.cpp b/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.cpp index 7fcfd3ff6..3b2461819 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.cpp +++ b/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.cpp @@ -26,7 +26,6 @@ */ #include "uavobjecttreemodel.h" -#include "treeitem.h" #include "fieldtreeitem.h" #include "uavobjects/uavobjectmanager.h" #include "uavobjects/uavdataobject.h" @@ -290,7 +289,7 @@ QVariant UAVObjectTreeModel::data(const QModelIndex &index, int role) const if (!index.isValid()) return QVariant(); - if (index.column() == 1 && role == Qt::EditRole) { + if (index.column() == TreeItem::dataColumn && role == Qt::EditRole) { TreeItem *item = static_cast(index.internalPointer()); return item->data(index.column()); } @@ -304,7 +303,7 @@ QVariant UAVObjectTreeModel::data(const QModelIndex &index, int role) const if (objItem && objItem->highlighted()) return QVariant(m_recentlyUpdatedColor); } - if (index.column() == 1 && role == Qt::BackgroundRole) { + if (index.column() == TreeItem::dataColumn && role == Qt::BackgroundRole) { FieldTreeItem *fieldItem = dynamic_cast(item); if (fieldItem && fieldItem->highlighted()) return QVariant(m_recentlyUpdatedColor); @@ -315,7 +314,7 @@ QVariant UAVObjectTreeModel::data(const QModelIndex &index, int role) const if (role != Qt::DisplayRole) return QVariant(); - if (index.column() == 1) { + if (index.column() == TreeItem::dataColumn) { EnumFieldTreeItem *fieldItem = dynamic_cast(item); if (fieldItem) { int enumIndex = fieldItem->data(index.column()).toInt(); @@ -339,7 +338,7 @@ Qt::ItemFlags UAVObjectTreeModel::flags(const QModelIndex &index) const if (!index.isValid()) return 0; - if (index.column() == 1) { + if (index.column() == TreeItem::dataColumn) { TreeItem *item = static_cast(index.internalPointer()); if (item->isEditable()) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; diff --git a/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.h b/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.h index 08db76b40..e0513b801 100644 --- a/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.h +++ b/ground/src/plugins/uavobjectbrowser/uavobjecttreemodel.h @@ -28,11 +28,11 @@ #ifndef UAVOBJECTTREEMODEL_H #define UAVOBJECTTREEMODEL_H +#include "treeitem.h" #include #include #include -class TreeItem; class TopTreeItem; class ObjectTreeItem; class DataObjectTreeItem; @@ -62,6 +62,12 @@ public: int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; + void setRecentlyUpdatedColor(QColor color) { m_recentlyUpdatedColor = color; } + void setManuallyChangedColor(QColor color) { m_manuallyChangedColor = color; } + void setRecentlyUpdatedTimeout(int timeout) { + m_recentlyUpdatedTimeout = timeout; + TreeItem::setHighlightTime(timeout); + } signals: