123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- #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()
- {
- }
- /// <summary>
- /// 在界面中添加新的变量(from序列化文件)
- /// </summary>
- /// <param name="pNewVariable"></param>
- 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);
- }
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="event"></param>
- 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);}");
- }
- }
- /// <summary>
- /// UI元素初始化
- /// </summary>
- 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();
- }
- }
-
- }
- /// <summary>
- /// 初始化工具栏
- /// </summary>
- 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));
- }
- /// <summary>
- /// Toolbar - New
- /// </summary>
- void WindowAppGvlView::onTagNew()
- {
- // 添加基础和标准模式变量
- if (m_gvlType != GVL_MODE::GVL_DB)
- {
- onToolNewStandard();
- }
- // 添加DB模式变量
- else
- {
- onToolNewDB();
- }
- }
- /// <summary>
- /// 添加基础和标准模式变量
- /// </summary>
- 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);
- }
- /// <summary>
- /// 添加DB模式变量
- /// </summary>
- 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);
- }
- /// <summary>
- /// Toolbar - MoveUp
- /// </summary>
- void WindowAppGvlView::onTagMoveUp()
- {
- // qDebug() << "WindowAppGvlView::onToolMoveUp";
- ui.tableVariable->onVariableMoveUp();
- }
- /// <summary>
- /// Toolbar - MoveDown
- /// </summary>
- void WindowAppGvlView::onTagMoveDown()
- {
- // qDebug() << "WindowAppGvlView::onToolMoveDown";
- ui.tableVariable->onVariableMoveDown();
- }
- /// <summary>
- /// Toolbar - Delete
- /// </summary>
- void WindowAppGvlView::onTagDelete()
- {
- ui.tableVariable->onVariableDelete();
- }
- /// <summary>
- /// Toolbar - Option
- /// </summary>
- void WindowAppGvlView::onOption()
- {
- vDebug() << "WindowAppGvlView::onOption()";
- //DialogDBOption dlgDbOption(this);
- //int res = dlgDbOption.exec();
- //Q_UNUSED(res);
- }
|