diff --git a/config_mgr.cpp b/config_mgr.cpp index 4193d53..f8b5736 100644 --- a/config_mgr.cpp +++ b/config_mgr.cpp @@ -566,6 +566,7 @@ int ConfigMgr::Save(QString & file_path) { qDebug() << "ch" << ch << ptr->single_relay[ch].logic_expression; channel_item.insert("logic_expression", ptr->single_relay[ch].logic_expression); channel_item.insert("active", ptr->single_relay[ch].active); + channel_item.insert("group",ptr->single_relay[ch].group); } }else if(card_type_[i] == kCardRelayTMRPrimary){ diff --git a/data_config.h b/data_config.h index 7198e28..c2d049c 100644 --- a/data_config.h +++ b/data_config.h @@ -559,6 +559,7 @@ typedef struct SingleRelayS_{ active = false; vote = false; count_vote = 0; + group = 1; } } SingleRelayS; diff --git a/singlerelay.cpp b/singlerelay.cpp index bcd2fbb..74b2549 100644 --- a/singlerelay.cpp +++ b/singlerelay.cpp @@ -4,6 +4,7 @@ #include #include #include +#include SingleRelay::SingleRelay(int slot,CardType cardtype,QWidget *parent) : QDialog(parent) @@ -12,6 +13,7 @@ SingleRelay::SingleRelay(int slot,CardType cardtype,QWidget *parent) slot_no = slot; car_type = cardtype; ui->label_slot_no->setText(QString::number(slot_no)); + ui->comboBox_relay_ch->setView(new QListView()); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); QVBoxLayout *layout_available = new QVBoxLayout(ui->widget_available); list_widget_available = new QListWidget(); diff --git a/singlerelay_nok.cpp b/singlerelay_nok.cpp index e59e7c5..920e4de 100644 --- a/singlerelay_nok.cpp +++ b/singlerelay_nok.cpp @@ -4,6 +4,7 @@ #include #include #include +#include SingleRelay_NOK::SingleRelay_NOK(int slot,CardType cardtype,QWidget *parent) : QWidget(parent), @@ -13,6 +14,9 @@ SingleRelay_NOK::SingleRelay_NOK(int slot,CardType cardtype,QWidget *parent) : slot_no = slot; car_type = cardtype; ui->label_slot_no->setText(QString::number(slot_no)); + ui->comboBox_relay_ch->setView(new QListView()); + ui->comboBox_group->setView(new QListView()); + current_slot_btn = nullptr; setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); QVBoxLayout *layout_available = new QVBoxLayout(ui->widget_available); list_widget_available = new QListWidget(); @@ -182,39 +186,74 @@ void SingleRelay_NOK::on_pushButton_cancel_clicked() { this->close(); } -void SingleRelay_NOK::OnButtonGroup(QAbstractButton *slot_btn) { - if (slot_btn != NULL) { - list_widget_available->clear(); - QString object_name = slot_btn->objectName(); - qDebug() << object_name ; - int button_id = object_name.right(object_name.length() - 15).toInt(); +void SingleRelay_NOK::updateAvailable(QAbstractButton *slot_btn){ + list_widget_available->clear(); + QString object_name = slot_btn->objectName(); + qDebug() << object_name ; + int button_id = object_name.right(object_name.length() - 15).toInt(); + std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(button_id); + std::shared_ptr ptr = std::dynamic_pointer_cast(base_ptr); + if(ptr == nullptr) + return; + QListWidgetItem *item_and = new QListWidgetItem("AND"); + item_and->setData(Qt::UserRole, "*"); + list_widget_available->addItem(item_and); + + QListWidgetItem *item_or = new QListWidgetItem("OR"); + item_or->setData(Qt::UserRole, "+"); + list_widget_available->addItem(item_or); + + for(int var = 0; var < CHANNEL_COUNT ; ++var){ std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(button_id); - std::shared_ptr ptr = std::dynamic_pointer_cast(base_ptr); - if(ptr == nullptr) - return; - QListWidgetItem *item_and = new QListWidgetItem("AND"); - item_and->setData(Qt::UserRole, "*"); - list_widget_available->addItem(item_and); + std::shared_ptr variable_base = ptr->GetChannelPtr(var + 1); + if(variable_base == nullptr) + continue; + if(base_ptr->card_type_ == kCardVibSingle){ + QString item_str = QString("%1 (槽位 %2 通道 %3 非OK)").arg(ptr->base_config_[var].point_name).arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + QListWidgetItem *item = new QListWidgetItem(item_str); + QString item_data_nok = QString("S%1C%2P##NO").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item->setData(Qt::UserRole, item_data_nok); + list_widget_available->addItem(item); - QListWidgetItem *item_or = new QListWidgetItem("OR"); - item_or->setData(Qt::UserRole, "+"); - list_widget_available->addItem(item_or); - - for(int var = 0; var < CHANNEL_COUNT ; ++var){ - std::shared_ptr base_ptr = ConfigMgr::Instance()->GetSlotPtr(button_id); - std::shared_ptr variable_base = ptr->GetChannelPtr(var + 1); - if(variable_base == nullptr) - continue; - if(base_ptr->card_type_ == kCardVibSingle){ - QString item_str = QString("%1 (槽位 %2 通道 %3 非OK)").arg(ptr->base_config_[var].point_name).arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + QString item_data; + if(variable_base->alert_high.enable && (ui->comboBox_relay_ch->currentIndex() == 10 || ui->comboBox_relay_ch->currentIndex() == 11)){ + QString item_str = QString("%1 (槽位 %3 通道 %4 警报高)").arg(ptr->base_config_[var].point_name).arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); QListWidgetItem *item = new QListWidgetItem(item_str); - QString item_data_nok = QString("S%1C%2P##NO").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); - item->setData(Qt::UserRole, item_data_nok); + item_data = QString("S%1C%2A2").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item->setData(Qt::UserRole, item_data); + list_widget_available->addItem(item); + } + + if(variable_base->danger_high.enable && (ui->comboBox_relay_ch->currentIndex() == 10 || ui->comboBox_relay_ch->currentIndex() == 11)){ + QString item_str = QString("%1 (槽位 %3 通道 %4 危险高)").arg(ptr->base_config_[var].point_name).arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + QListWidgetItem *item = new QListWidgetItem(item_str); + item_data = QString("S%1C%2A1").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item->setData(Qt::UserRole, item_data); + list_widget_available->addItem(item); + } + if(variable_base->danger_low.enable && (ui->comboBox_relay_ch->currentIndex() == 10 || ui->comboBox_relay_ch->currentIndex() == 11)){ + QString item_str = QString("%1 (槽位 %3 通道 %4 危险低)").arg(ptr->base_config_[var].point_name).arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + QListWidgetItem *item = new QListWidgetItem(item_str); + item_data = QString("S%1C%2A4").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item->setData(Qt::UserRole, item_data); + list_widget_available->addItem(item); + } + if(variable_base->alert_low.enable && (ui->comboBox_relay_ch->currentIndex() == 10 || ui->comboBox_relay_ch->currentIndex() == 11)){ + QString item_str = QString("%1 (槽位 %3 通道 %4 警报低)").arg(ptr->base_config_[var].point_name).arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + QListWidgetItem *item = new QListWidgetItem(item_str); + item_data = QString("S%1C%2A3").arg(QString::number(button_id, 10).rightJustified(2, '0')).arg(QString::number(var+1, 10).rightJustified(2, '0')); + item->setData(Qt::UserRole, item_data); list_widget_available->addItem(item); } } } } +void SingleRelay_NOK::OnButtonGroup(QAbstractButton *slot_btn) { + if (slot_btn != NULL) { + current_slot_btn = slot_btn; + updateAvailable(slot_btn); + } +} QString SingleRelay_NOK::buildLogicExpression(QStandardItem *item) { if (!item) return ""; @@ -277,6 +316,8 @@ void SingleRelay_NOK::onComboBoxIndexChanged(int index){ qDebug() << "active" << relay_data->single_relay[index].active; ui->checkBox_active->setChecked(relay_data->single_relay[index].active); + if(current_slot_btn != nullptr) + updateAvailable(current_slot_btn); } ExprNode* SingleRelay_NOK::parseExpression(const QString& expr, int& pos) { auto skipSpaces = [&]() { diff --git a/singlerelay_nok.h b/singlerelay_nok.h index 6289287..a757b8c 100644 --- a/singlerelay_nok.h +++ b/singlerelay_nok.h @@ -50,6 +50,7 @@ private: int current_index; int vote_current_index; QMap channelNameMap; + QAbstractButton *current_slot_btn; void Init(); void buildTreeFromExpression(QTreeView *treeView, const QString &expr); @@ -58,6 +59,7 @@ private: void setExpressionToTreeView(QTreeView* treeView, const QString& expr); QString buildLogicExpression(QStandardItem *item); ExprValidationResult validateLogicExpression(const QString& expr); + void updateAvailable(QAbstractButton *slot_btn); }; #endif // SINGLERELAY_NOK_H diff --git a/tmrrelayassociation.cpp b/tmrrelayassociation.cpp index ba55396..594d62f 100644 --- a/tmrrelayassociation.cpp +++ b/tmrrelayassociation.cpp @@ -4,6 +4,7 @@ #include #include #include +#include TMRRelayAssociation::TMRRelayAssociation(int slot,CardType cardtype,QWidget *parent) : QDialog(parent) @@ -16,6 +17,7 @@ TMRRelayAssociation::TMRRelayAssociation(int slot,CardType cardtype,QWidget *par ui->checkBox_sgcc->setVisible(0); } ui->label_slot_no->setText(QString::number(slot_no)); + ui->comboBox_relay_ch->setView(new QListView()); QVBoxLayout *layout_available = new QVBoxLayout(ui->widget_available); list_widget_available = new QListWidget(); layout_available->addWidget(list_widget_available);