diff --git a/ground/openpilotgcs/src/plugins/notify/NotificationItem.h b/ground/openpilotgcs/src/plugins/notify/NotificationItem.h index e64609a53..1475fd64f 100644 --- a/ground/openpilotgcs/src/plugins/notify/NotificationItem.h +++ b/ground/openpilotgcs/src/plugins/notify/NotificationItem.h @@ -49,7 +49,10 @@ class NotificationItem : public QObject public: enum { eDefaultTimeout = 15 }; // in sec - enum {equal,bigger,smaller,inrange}; + enum {never,beforeFirst,beforeSecond,afterSecond}; + enum {repeatOncePerUpdate,repeatOnce,repeatInstantly,repeat10seconds, + repeat30seconds,repeat1minute}; + explicit NotificationItem(QObject *parent = 0); void copyTo(NotificationItem*) const; @@ -64,8 +67,8 @@ public: int getCondition() const { return _condition; } void setCondition(int value) { _condition = value; } - QString getSayOrder() const { return _sayOrder; } - void setSayOrder(QString text) { _sayOrder = text; } + int getSayOrder() const { return _sayOrder; } + void setSayOrder(int text) { _sayOrder = text; } QVariant singleValue() const { return _singleValue; } void setSingleValue(QVariant value) { _singleValue = value; } @@ -88,8 +91,8 @@ public: QStringList getMessageSequence() const { return _messageSequence; } void setMessageSequence(QStringList sequence) { _messageSequence = sequence; } - QString retryString() const { return _repeatString; } - void setRetryString(QString value) { _repeatString = value; } + int retryValue() const { return _repeatValue; } + void setRetryValue(int value) { _repeatValue = value; } int lifetime() const { return _expireTimeout; } void setLifetime(int value) { _expireTimeout = value; } @@ -189,7 +192,7 @@ private: QString _sound3; //! order in what sounds 1-3 will be played - QString _sayOrder; + int _sayOrder; //! one-side range, value(numeric or ENUM type) maybe lower, greater or in range QVariant _singleValue; @@ -199,7 +202,7 @@ private: double _valueRange2; //! how often or what periodicaly notification should be played - QString _repeatString; + int _repeatValue; //! time after event occured till notification became invalid //! and will be removed from list diff --git a/ground/openpilotgcs/src/plugins/notify/notificationitem.cpp b/ground/openpilotgcs/src/plugins/notify/notificationitem.cpp index 68674bc90..0506840ec 100644 --- a/ground/openpilotgcs/src/plugins/notify/notificationitem.cpp +++ b/ground/openpilotgcs/src/plugins/notify/notificationitem.cpp @@ -40,18 +40,7 @@ #include "notifylogging.h" -static const QString cStrNever("Never"); -static const QString cStrBefore1st("Before first"); -static const QString cStrBefore2nd("Before second"); -static const QString cStrAfter2nd("After second"); -static const QString cStrRetryOncePUpdate("Repeat Once per update"); -static const QString cStrRetryOnce("Repeat Once"); - -static const QString cStrRetryInstantly("Repeat Instantly"); -static const QString cStrRetry10sec("Repeat 10 seconds"); -static const QString cStrRetry30sec("Repeat 30 seconds"); -static const QString cStrRetry1min("Repeat 1 minute"); QStringList NotificationItem::sayOrderValues; @@ -73,26 +62,27 @@ NotificationItem::NotificationItem(QObject *parent) , _sound1("") , _sound2("") , _sound3("") - , _sayOrder(cStrNever) + , _sayOrder(never) , _singleValue(0) , _valueRange2(0) - , _repeatString(cStrRetryInstantly) + , _repeatValue(repeatInstantly) , _expireTimeout(eDefaultTimeout) , _mute(false) { + NotificationItem::sayOrderValues.clear(); - NotificationItem::sayOrderValues.append(cStrNever); - NotificationItem::sayOrderValues.append(cStrBefore1st); - NotificationItem::sayOrderValues.append(cStrBefore2nd); - NotificationItem::sayOrderValues.append(cStrAfter2nd); + NotificationItem::sayOrderValues.insert(never,QString(tr("Never"))); + NotificationItem::sayOrderValues.insert(beforeFirst,QString(tr("Before first"))); + NotificationItem::sayOrderValues.insert(beforeSecond,QString(tr("Before second"))); + NotificationItem::sayOrderValues.insert(afterSecond,QString(tr("After second"))); NotificationItem::retryValues.clear(); - NotificationItem::retryValues.append(cStrRetryOnce); - NotificationItem::retryValues.append(cStrRetryOncePUpdate); - NotificationItem::retryValues.append(cStrRetryInstantly); - NotificationItem::retryValues.append(cStrRetry10sec); - NotificationItem::retryValues.append(cStrRetry30sec); - NotificationItem::retryValues.append(cStrRetry1min); + NotificationItem::retryValues.insert(repeatOnce,QString(tr("Repeat Once"))); + NotificationItem::retryValues.insert(repeatOncePerUpdate,QString(tr("Repeat Once per update"))); + NotificationItem::retryValues.insert(repeatInstantly,QString(tr("Repeat Instantly"))); + NotificationItem::retryValues.insert(repeat10seconds,QString(tr("Repeat 10 seconds"))); + NotificationItem::retryValues.insert(repeat30seconds,QString(tr("Repeat 30 seconds"))); + NotificationItem::retryValues.insert(repeat1minute,QString(tr("Repeat 1 minute"))); } @@ -112,7 +102,7 @@ void NotificationItem::copyTo(NotificationItem* that) const that->_sayOrder = _sayOrder; that->_singleValue = _singleValue; that->_valueRange2 = _valueRange2; - that->_repeatString = _repeatString; + that->_repeatValue = _repeatValue; that->_expireTimeout = _expireTimeout; that->_mute = _mute; @@ -132,7 +122,7 @@ void NotificationItem::saveState(QSettings* settings) const settings->setValue(QLatin1String("Sound2"), getSound2()); settings->setValue(QLatin1String("Sound3"), getSound3()); settings->setValue(QLatin1String("SayOrder"), getSayOrder()); - settings->setValue(QLatin1String("Repeat"), retryString()); + settings->setValue(QLatin1String("Repeat"), retryValue()); settings->setValue(QLatin1String("ExpireTimeout"), lifetime()); settings->setValue(QLatin1String("Mute"), mute()); } @@ -148,11 +138,11 @@ void NotificationItem::restoreState(QSettings* settings) setSound1(settings->value(QLatin1String("Sound1"), tr("")).toString()); setSound2(settings->value(QLatin1String("Sound2"), tr("")).toString()); setSound3(settings->value(QLatin1String("Sound3"), tr("")).toString()); - setSayOrder(settings->value(QLatin1String("SayOrder"), tr("")).toString()); + setSayOrder(settings->value(QLatin1String("SayOrder"), tr("")).toInt()); QVariant value = settings->value(QLatin1String("Value1"), tr("")); setSingleValue(value); setValueRange2(settings->value(QLatin1String("Value2"), tr("")).toDouble()); - setRetryString(settings->value(QLatin1String("Repeat"), tr("")).toString()); + setRetryValue(settings->value(QLatin1String("Repeat"), tr("")).toInt()); setLifetime(settings->value(QLatin1String("ExpireTimeout"), tr("")).toInt()); setMute(settings->value(QLatin1String("Mute"), tr("")).toInt()); } @@ -171,7 +161,7 @@ void NotificationItem::serialize(QDataStream& stream) stream << this->_sayOrder; stream << this->_singleValue; stream << this->_valueRange2; - stream << this->_repeatString; + stream << this->_repeatValue; stream << this->_expireTimeout; stream << this->_mute; } @@ -189,7 +179,7 @@ void NotificationItem::deserialize(QDataStream& stream) stream >> this->_sayOrder; stream >> this->_singleValue; stream >> this->_valueRange2; - stream >> this->_repeatString; + stream >> this->_repeatValue; stream >> this->_expireTimeout; stream >> this->_mute; } @@ -356,7 +346,7 @@ QString NotificationItem::toString() UAVObjectField* field = getUAVObjectField(); QString value = stringFromValue(singleValue(), field); - int pos = getValuePosition(getSayOrder().trimmed()); + int pos = getSayOrder()-1; QStringList lst; lst.append(getSoundCaption(getSound1())); lst.append(getSoundCaption(getSound2())); @@ -391,7 +381,7 @@ QStringList& NotificationItem::toSoundList() // generate queue of sound files to play _messageSequence.clear(); - int pos = getValuePosition(getSayOrder().trimmed()); + int pos = getSayOrder()-1; QStringList lst; if(!getSound1().isEmpty()) lst.append(getSound1()); diff --git a/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp b/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp index 601bd157d..9acb4b6f3 100644 --- a/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp +++ b/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp @@ -246,8 +246,8 @@ void SoundNotifyPlugin::on_arrived_Notification(UAVObject *object) // notification can be accepted again; // 2. Once time notifications, they removed immediately after first playing; // 3. Instant notifications(played one by one without interval); - if (ntf->retryString() != "Repeat Instantly" && ntf->retryString() != "Repeat Once per update" && - ntf->retryString() != "Repeat Once" && ntf->_isPlayed) + if (ntf->retryValue() != NotificationItem::repeatInstantly && ntf->retryValue() != NotificationItem::repeatOncePerUpdate && + ntf->retryValue() != NotificationItem::repeatOnce && ntf->_isPlayed) continue; qNotifyDebug() << QString("new notification: | %1 | %2 | val1: %3 | val2: %4") @@ -363,7 +363,7 @@ bool checkRange(QString fieldValue, QString enumValue, QStringList values, int d bool ret = false; switch(direction) { - case NotificationItem::equal: + case NotifyPluginOptionsPage::equal: ret = !QString::compare(enumValue, fieldValue, Qt::CaseInsensitive) ? true : false; break; @@ -377,18 +377,18 @@ bool checkRange(QString fieldValue, QString enumValue, QStringList values, int d bool checkRange(double fieldValue, double min, double max, int direction) { bool ret = false; - Q_ASSERT(min < max); + //Q_ASSERT(min < max); switch(direction) { - case NotificationItem::equal: + case NotifyPluginOptionsPage::equal: ret = (fieldValue == min); break; - case NotificationItem::bigger: + case NotifyPluginOptionsPage::bigger: ret = (fieldValue > min); break; - case NotificationItem::smaller: + case NotifyPluginOptionsPage::smaller: ret = (fieldValue < min); break; @@ -445,7 +445,7 @@ void SoundNotifyPlugin::checkNotificationRule(NotificationItem* notification, UA notification->setCurrentUpdatePlayed(false); return; } - if(notification->retryString() == "Repeat Once per update" && notification->getCurrentUpdatePlayed()) + if(notification->retryValue() == NotificationItem::repeatOncePerUpdate && notification->getCurrentUpdatePlayed()) return; volatile QMutexLocker lock(&_mutex); @@ -484,17 +484,17 @@ bool SoundNotifyPlugin::playNotification(NotificationItem* notification) _nowPlayingNotification = notification; notification->stopExpireTimer(); - if (notification->retryString() == "Repeat Once") { + if (notification->retryValue() == NotificationItem::repeatOnce) { _toRemoveNotifications.append(_notificationList.takeAt(_notificationList.indexOf(notification))); } - else if(notification->retryString() == "Repeat Once per update") + else if(notification->retryValue() == NotificationItem::repeatOncePerUpdate) notification->setCurrentUpdatePlayed(true); else { - if (notification->retryString() != "Repeat Instantly") { + if (notification->retryValue() != NotificationItem::repeatInstantly) { QRegExp rxlen("(\\d+)"); QString value; - int timer_value; - int pos = rxlen.indexIn(notification->retryString()); + int timer_value=0; + int pos = rxlen.indexIn(NotificationItem::retryValues.at(notification->retryValue())); if (pos > -1) { value = rxlen.cap(1); // "189" diff --git a/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp b/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp index 5eaf13efa..b7cc977c6 100644 --- a/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp +++ b/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp @@ -47,11 +47,7 @@ #include "notifytablemodel.h" #include "notifylogging.h" -static const char* cStrEqualTo = "Equal to"; -static const char* cStrLargeThan = "Large than"; -static const char* cStrLowerThan = "Lower than"; -static const char* cStrInRange = "In range"; - +QStringList NotifyPluginOptionsPage::conditionValues; NotifyPluginOptionsPage::NotifyPluginOptionsPage(QObject *parent) : IOptionsPage(parent) @@ -63,7 +59,13 @@ NotifyPluginOptionsPage::NotifyPluginOptionsPage(QObject *parent) , _sayOrder(NULL) , _form(NULL) , _selectedNotification(NULL) -{} +{ + NotifyPluginOptionsPage::conditionValues.insert(equal,tr("Equal to")); + NotifyPluginOptionsPage::conditionValues.insert(bigger,tr("Large than")); + NotifyPluginOptionsPage::conditionValues.insert(smaller,tr("Lower than")); + NotifyPluginOptionsPage::conditionValues.insert(inrange,tr("In range")); + +} NotifyPluginOptionsPage::~NotifyPluginOptionsPage() {} @@ -246,41 +248,19 @@ void NotifyPluginOptionsPage::addDynamicField(UAVObjectField* objField) } disconnect(_dynamicFieldCondition, SIGNAL(currentIndexChanged(QString)), - this, SLOT(on_changedIndex_rangeValue(QString))); + this, SLOT(on_changedIndex_rangeValue(QString))); _dynamicFieldCondition->clear(); - QStringList rangeValues; - QList rangeCode; + _dynamicFieldCondition->addItems(NotifyPluginOptionsPage::conditionValues); if (UAVObjectField::ENUM == objField->getType()) { - rangeValues << cStrEqualTo << cStrInRange; - rangeCode<addItem(value,rangeCode[x]); - if(_selectedNotification->getCondition()==rangeCode[x]) - selected=x; - ++x; - } - qNotifyDebug()<<"setcurrentindex"<setCurrentIndex(selected); - - } else { - rangeValues << cStrEqualTo << cStrLargeThan << cStrLowerThan << cStrInRange; - rangeCode<addItem(value,rangeCode[x]); - if(_selectedNotification->getCondition()==rangeCode[x]) - selected=x; - ++x; - } - qNotifyDebug()<<"setcurrentindex"<setCurrentIndex(selected); - connect(_dynamicFieldCondition, SIGNAL(currentIndexChanged(QString)), - this, SLOT(on_changedIndex_rangeValue(QString))); + _dynamicFieldCondition->removeItem(smaller); + _dynamicFieldCondition->removeItem(bigger); } + _dynamicFieldCondition->setCurrentIndex(_dynamicFieldCondition->findText(NotifyPluginOptionsPage::conditionValues.at(_selectedNotification->getCondition()))); + + connect(_dynamicFieldCondition, SIGNAL(currentIndexChanged(QString)), + this, SLOT(on_changedIndex_rangeValue(QString))); + addDynamicFieldWidget(objField); } @@ -315,7 +295,7 @@ void NotifyPluginOptionsPage::addDynamicFieldWidget(UAVObjectField* objField) default: Q_ASSERT(_dynamicFieldCondition); - if (_dynamicFieldCondition->currentText() == cStrInRange) { + if (NotifyPluginOptionsPage::conditionValues.indexOf(_dynamicFieldCondition->currentText()) == NotifyPluginOptionsPage::inrange) { _dynamicFieldWidget = new QLineEdit(_form); (static_cast(_dynamicFieldWidget))->setInputMask("#999.99 : #999.99;"); @@ -369,9 +349,8 @@ void NotifyPluginOptionsPage::getOptionsPageValues(NotificationItem* notificatio notification->setSound1(_optionsPage->Sound1->currentText()); notification->setSound2(_optionsPage->Sound2->currentText()); notification->setSound3(_optionsPage->Sound3->currentText()); - notification->setSayOrder(_sayOrder->currentText()); - notification->setCondition(_dynamicFieldCondition->itemData(_dynamicFieldCondition->currentIndex()).toInt()); - qNotifyDebug()<<"getOptionsPageValues SETRANGE"<<_dynamicFieldCondition->currentIndex()<<_dynamicFieldCondition->itemData(_dynamicFieldCondition->currentIndex()).toInt(); + notification->setSayOrder(_sayOrder->currentIndex()); + notification->setCondition(NotifyPluginOptionsPage::conditionValues.indexOf(_dynamicFieldCondition->currentText())); if (QDoubleSpinBox* spinValue = dynamic_cast(_dynamicFieldWidget)) notification->setSingleValue(spinValue->value()); else { @@ -455,15 +434,10 @@ void NotifyPluginOptionsPage::updateConfigView(NotificationItem* notification) _optionsPage->SoundCollectionList->setCurrentIndex(_optionsPage->SoundCollectionList->findText("default")); _optionsPage->Sound3->setCurrentIndex(_optionsPage->Sound3->findText(notification->getSound3())); } - for(int x=0;x<_dynamicFieldCondition->count();++x) - { - if (_dynamicFieldCondition->itemData(x)==notification->getCondition()) { - _dynamicFieldCondition->setCurrentIndex(x); - } - } - if (-1 != _sayOrder->findText(notification->getSayOrder())) { - _sayOrder->setCurrentIndex(_sayOrder->findText(notification->getSayOrder())); - } + + _dynamicFieldCondition->setCurrentIndex(_dynamicFieldCondition->findText(NotifyPluginOptionsPage::conditionValues.at(notification->getCondition()))); + + _sayOrder->setCurrentIndex(notification->getSayOrder()); setDynamicFieldValue(notification); @@ -613,7 +587,7 @@ void NotifyPluginOptionsPage::on_clicked_buttonAddNotification() delete notification; return; } else { - notification->setSayOrder(_sayOrder->currentText()); + notification->setSayOrder(_sayOrder->currentIndex()); } _notifyRulesModel->entryAdded(notification); @@ -638,7 +612,7 @@ void NotifyPluginOptionsPage::on_clicked_buttonModifyNotification() { NotificationItem* notification = new NotificationItem; getOptionsPageValues(notification); - notification->setRetryString(_privListNotifications.at(_notifyRulesSelection->currentIndex().row())->retryString()); + notification->setRetryValue(_privListNotifications.at(_notifyRulesSelection->currentIndex().row())->retryValue()); notification->setLifetime(_privListNotifications.at(_notifyRulesSelection->currentIndex().row())->lifetime()); notification->setMute(_privListNotifications.at(_notifyRulesSelection->currentIndex().row())->mute()); diff --git a/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h b/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h index 317515aaf..fb3c2885d 100644 --- a/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h +++ b/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h @@ -60,7 +60,7 @@ class NotifyPluginOptionsPage : public IOptionsPage Q_OBJECT public: - + enum {equal,bigger,smaller,inrange}; explicit NotifyPluginOptionsPage(QObject *parent = 0); ~NotifyPluginOptionsPage(); QString id() const { return QLatin1String("settings"); } @@ -72,6 +72,7 @@ public: void apply(); void finish(); void restoreFromSettings(); + static QStringList conditionValues; signals: void updateNotifications(QList list); diff --git a/ground/openpilotgcs/src/plugins/notify/notifytablemodel.cpp b/ground/openpilotgcs/src/plugins/notify/notifytablemodel.cpp index ed4eb0e56..d4913ed97 100644 --- a/ground/openpilotgcs/src/plugins/notify/notifytablemodel.cpp +++ b/ground/openpilotgcs/src/plugins/notify/notifytablemodel.cpp @@ -52,7 +52,7 @@ bool NotifyTableModel::setData(const QModelIndex &index, } if (index.isValid() && role == Qt::EditRole) { if (eRepeatValue == index.column()) - _list.at(index.row())->setRetryString(value.toString()); + _list.at(index.row())->setRetryValue(NotificationItem::retryValues.indexOf(value.toString())); else { if (eExpireTimer == index.column()) _list.at(index.row())->setLifetime(value.toInt()); @@ -85,7 +85,7 @@ QVariant NotifyTableModel::data(const QModelIndex &index, int role) const return _list.at(index.row())->toString(); case eRepeatValue: - return _list.at(index.row())->retryString(); + return (NotificationItem::retryValues.at(_list.at(index.row())->retryValue())); case eExpireTimer: return _list.at(index.row())->lifetime();