#include "WindowAppGvlView.h" #include "DialogNewVariable.h" #include "DialogNewDBVariable.h" #include "DialogDBOption.h" #include "GvlManager.h" #include "PouManager.h" //// 列数 //#define GVL_COLUMN_COUNT 6 //// 表示正确状态的颜色 //#define COLOR_ITEM_OK qRgb(198,239,206) //#define COLOR_ITEM_ERROR qRgb(255,199,206) WindowAppGvlView::WindowAppGvlView(const QString& strTitle, GVL_MODE gvlType, DllTool* pHdwTool, QWidget *parent) : QWidget(parent) , m_strTitle(strTitle) , m_gvlType(gvlType) , m_pHdwTool(pHdwTool) { ui.setupUi(this); // 初始化工具栏 this->initToolbar(); // 初始化变量表格 ui.tableVariable->initTable(m_strTitle, m_gvlType); // UI元素初始化 this->initUI(); // 2022-3-2增加,创建变量表格的同时就顺便创建对应的全局变量组(空) g_pGvlManager->addNewGroup(m_strTitle, TOOL_TYPE::TOOL_TYPE_GLOBAL_VARIABLE, gvlType); #ifdef DEBUG_ON_GVL VARIABLE* pNewVariable = new VARIABLE( m_strTitle, true, "abcd", "QString", "xxxxx", "Comment1" ); this->addNewVariable(pNewVariable); pNewVariable = new VARIABLE( m_strTitle, true, "int_test1", "int", "100", "Comment2" ); this->addNewVariable(pNewVariable); pNewVariable = new VARIABLE( m_strTitle, true, "int_test2", "int", "200", "This value is 200." ); this->addNewVariable(pNewVariable); pNewVariable = new VARIABLE( m_strTitle, true, "abcdfg", "bool", "true", "Comment3" ); this->addNewVariable(pNewVariable); pNewVariable = new VARIABLE( m_strTitle, true, "double_test", "double", "765.4321", "This is a double variable" ); this->addNewVariable(pNewVariable); //// 2022-2-15 尝试增加Pou内部变量(测试) //pNewVariable = new VARIABLE( // m_strTitle, // false, // "counter1", // "int", "1", "This is a internal variable", false //); //this->addNewVariable(pNewVariable); //pNewVariable = new VARIABLE( // m_strTitle, // false, // "counter2", // "int", "100", "This is a internal variable", false //); //this->addNewVariable(pNewVariable); #endif } WindowAppGvlView::~WindowAppGvlView() { } /// /// 在界面中添加新的变量(from序列化文件) /// /// void WindowAppGvlView::addNewVariable(VARIABLE* pNewVariable) { // 2022-2-15增加,内部变量不需要显示在界面中 if (pNewVariable->bShow) { if (m_gvlType == GVL_MODE::GVL_BASIC || m_gvlType == GVL_MODE::GVL_STANDARD) { // 界面中添加新的一行 ui.tableVariable->insertTableLine( pNewVariable->bSerialized, pNewVariable->strName, pNewVariable->strFullName, Utility::getTypeString(pNewVariable->value.type), Utility::getValueString(pNewVariable->value.Ptr, pNewVariable->value.type), pNewVariable->strComment ); } else { // 2022-3-2 ,如果是DB变量,首先要进行有效性检查,需要确保之前绑定了硬件工具指针 Q_ASSERT(pNewVariable->parent() != nullptr); // Q_ASSERT(pNewVariable->pOriginalTool != nullptr); // Q_ASSERT(pNewVariable->pOriginalTool->pHdwDllPtr != nullptr); //if (m_gvlType == GVL_MODE::GVL_DB // && pNewVariable->pOriginalTool->pHdwDllPtr == nullptr) //{ // qDebug() << "[Error] WindowAppGvlView::addNewVariable - Insert new DB variable, but pHdwDllPtr is nullptr."; // return; //} // DB变量需要添加更多的信息 // 界面中添加新的一行 ui.tableVariable->insertTableLine( pNewVariable->strName, pNewVariable->strFullName, Utility::getTypeString(pNewVariable->value.type), Utility::getValueString(pNewVariable->value.Ptr, pNewVariable->value.type), pNewVariable->strCommAddress, pNewVariable->accessMode, pNewVariable->strComment ); } // 绑定新的变量和界面对应关系,方便变更之后及时发送通知 g_pGvlManager->bindUIAndVariable(ui.tableVariable, pNewVariable->strFullName); } } /// /// /// /// void WindowAppGvlView::showEvent(QShowEvent* event) { Q_UNUSED(event); QString str = "绑定对象: "; if (m_gvlType == GVL_MODE::GVL_DB) { POU* pHdwPou = g_pPouManager->getHdwPou(); TOOL* pTool = pHdwPou->GetToolByName(m_strHdwInstName); if (pTool == nullptr) { qWarning() << m_strHdwInstName << " not found in hardware configuration "; } if (pTool != nullptr) { ui.label->setText(str + m_strHdwInstName); ui.label->setStyleSheet("background-color:rgb(70,70,70);"); } else { ui.label->setStyleSheet("background-color:red;"); ui.label->setText(str + " not found in hardware configuration "); } } else { ui.label->setText(str + "系统"); ui.label->setStyleSheet("QLabel{background-color:rgb(70,70,70);}"); } } /// /// UI元素初始化 /// void WindowAppGvlView::initUI() { // 放进Layout中 QVBoxLayout* viewLayout = new QVBoxLayout(); viewLayout->addWidget(m_Toolbar); viewLayout->addWidget(ui.tableVariable); viewLayout->addWidget(ui.label); viewLayout->setContentsMargins(0, 0, 0, 24); viewLayout->setSpacing(0); this->setLayout(viewLayout); // ui.tableVariable->setShowGrid(false); // ui.tableVariable->setStyleSheet( // "QTableWidget::Item{border:0px solid rgb(255,0,0);" // "border-bottom:1px solid rgb(255,0,0);}" // ); if (m_gvlType == GVL_MODE::GVL_DB) { if (m_pHdwTool != nullptr) { m_strHdwInstName = m_pHdwTool->getInstanceName(); } } } /// /// 初始化工具栏 /// void WindowAppGvlView::initToolbar() { m_Toolbar = new QToolBar(this); m_Toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); QAction* actionNew = new QAction(QIcon(":/image/New.png"), ("New")); QAction* actionMoveUp = new QAction(QIcon(":/image/Up.png"), ("Move up")); QAction* actionMoveDown = new QAction(QIcon(":/image/Down.png"), ("Move down")); QAction* actionDel = new QAction(QIcon(":/image/Del.png"), ("Delete")); QAction* actionOption = new QAction(QIcon(":/image/Option.png"), ("Options")); m_Toolbar->addAction(actionNew); m_Toolbar->addSeparator(); m_Toolbar->addAction(actionMoveUp); m_Toolbar->addAction(actionMoveDown); m_Toolbar->addSeparator(); m_Toolbar->addAction(actionDel); if (m_gvlType == GVL_MODE::GVL_DB) { m_Toolbar->addSeparator(); m_Toolbar->addAction(actionOption); } // 增加工具栏的消息响应 connect(actionNew, &QAction::triggered, this, &WindowAppGvlView::onTagNew); connect(actionMoveUp, &QAction::triggered, this, &WindowAppGvlView::onTagMoveUp); connect(actionMoveDown, &QAction::triggered, this, &WindowAppGvlView::onTagMoveDown); connect(actionDel, &QAction::triggered, this, &WindowAppGvlView::onTagDelete); connect(actionOption, &QAction::triggered, this, &WindowAppGvlView::onOption); // 设置为白色背景色 //m_Toolbar->setStyleSheet("background-color:rgb(255,255,255)"); m_Toolbar->setIconSize(QSize(14, 14)); } /// /// Toolbar - New /// void WindowAppGvlView::onTagNew() { // 添加基础和标准模式变量 if (m_gvlType != GVL_MODE::GVL_DB) { onToolNewStandard(); } // 添加DB模式变量 else { onToolNewDB(); } } /// /// 添加基础和标准模式变量 /// void WindowAppGvlView::onToolNewStandard() { // 弹出新增变量对话框 DialogNewVariable dlgNewVar(m_gvlType, this); dlgNewVar.setWindowModality(Qt::WindowModal); dlgNewVar.setGroup(this->m_strTitle); dlgNewVar.setTagNumber(ui.tableVariable->rowCount()); int res = dlgNewVar.exec(); if (res != QDialog::Accepted) { return; } // 根据用户输入构造新的变量 VARIABLE* pNewVariable = new VARIABLE( m_strTitle, dlgNewVar.m_bSerialized, dlgNewVar.m_strName, dlgNewVar.m_strType, dlgNewVar.m_strValue, dlgNewVar.m_strComment, g_pGvlManager->getVariablesCountByGroup(m_strTitle), true ); // 数据结构中添加本变量信息 g_pGvlManager->addNewVariable( m_strTitle, pNewVariable ); // 在界面中添加新变量 this->addNewVariable(pNewVariable); } /// /// 添加DB模式变量 /// void WindowAppGvlView::onToolNewDB() { DialogNewDBVariable dlgNewDb(this); dlgNewDb.setGroup(this->m_strTitle); dlgNewDb.setTagNumber(ui.tableVariable->rowCount()); int res = dlgNewDb.exec(); if (res != QDialog::Accepted) { return; } // 计算这个新变量的索引序号 int nIndex = g_pGvlManager->getVariablesCountByGroup(m_strTitle); // 根据用户输入构造新的变量(构造DB变量会多三个参数) VARIABLE* pNewVariable = new VARIABLE( m_strTitle, false, dlgNewDb.m_strName, dlgNewDb.m_strType, dlgNewDb.m_strValue, dlgNewDb.m_strComment, nIndex, true, dlgNewDb.m_bTrigger, dlgNewDb.m_strCommAddress, dlgNewDb.m_accessMode ); // 数据结构中添加本变量信息 g_pGvlManager->addNewVariable(m_strTitle, pNewVariable); // 在界面中添加新变量 this->addNewVariable(pNewVariable); } /// /// Toolbar - MoveUp /// void WindowAppGvlView::onTagMoveUp() { // qDebug() << "WindowAppGvlView::onToolMoveUp"; ui.tableVariable->onVariableMoveUp(); } /// /// Toolbar - MoveDown /// void WindowAppGvlView::onTagMoveDown() { // qDebug() << "WindowAppGvlView::onToolMoveDown"; ui.tableVariable->onVariableMoveDown(); } /// /// Toolbar - Delete /// void WindowAppGvlView::onTagDelete() { ui.tableVariable->onVariableDelete(); } /// /// Toolbar - Option /// void WindowAppGvlView::onOption() { vDebug() << "WindowAppGvlView::onOption()"; //DialogDBOption dlgDbOption(this); //int res = dlgDbOption.exec(); //Q_UNUSED(res); }