Jelajahi Sumber

【软件版本】
V
【模块名称】
测试精灵工具,远程场测使用。
【问题原因】
添加一键转换旧的xml信号文件;
【修改描述】

【测试结果】
验证OK。

sat23 3 tahun lalu
induk
melakukan
4a20fdcb9a

+ 8 - 3
TestWizardTool/TestWizardTool/Global.cpp

@@ -243,13 +243,20 @@ namespace Global
 		g_Config.twSignaldir = szValue;
 		memset(szValue, 0, MAX_PATH);
 
+        GetPrivateProfileString(_T("TestWizard"), _T("oldxmlpath"), NULL, szValue, MAX_PATH, szConfigpath);
+        g_Config.twOldSignaldir = szValue;
+        memset(szValue, 0, MAX_PATH);
+
         GetPrivateProfileString(_T("TestWizard"), _T("useSignal"), NULL, szValue, MAX_PATH, szConfigpath);
         g_Config.twUseSignal = szValue;
         memset(szValue, 0, MAX_PATH);
 
 		GetPrivateProfileString(_T("TestWizard"), _T("Com"), NULL, szValue, MAX_PATH, szConfigpath);
         g_Config.twPort = szValue;
-	}
+
+        if ( !PathFileExists(g_Config.twSignaldir.c_str()) )
+            MKDIR(g_Config.twSignaldir.c_str());
+    }
 
 
     void MKDIR(LPCTSTR dir)
@@ -286,6 +293,4 @@ namespace Global
 		} while (nIndex != -1);
 	}
 
-	
-
 }

+ 1 - 0
TestWizardTool/TestWizardTool/Global.h

@@ -38,6 +38,7 @@ namespace Global
         std::string twPort;
 		std::string twSignaldir;
 		std::string twUseSignal;
+        std::string twOldSignaldir;
 	}STConfig, * pSTConfig;
 
 	//////////////////////////////////////////////////////////////////////////

+ 3 - 1
TestWizardTool/TestWizardTool/TestWizardTool.ini

@@ -4,4 +4,6 @@ Com=COM27
 ;信号集路径
 xmlpath=D:\SAT\resource\RCU\TW2
 ;使用的信号集;
-useSignal=memory
+useSignal=02_AP_6122A_00BF_BT
+;旧的信号集路径;
+oldxmlpath=D:\SAT\resource\RCU\TW

+ 184 - 4
TestWizardTool/TestWizardTool/TestWizardToolDlg.cpp

@@ -144,6 +144,8 @@ void CTestWizardToolDlg::DoDataExchange(CDataExchange* pDX)
     CDialog::DoDataExchange(pDX);
     DDX_Control(pDX, COMBO_COM, m_cbCOM);
     DDX_Control(pDX, COMBO_SINGALS, m_cbSignals);
+    DDX_Control(pDX, BTN_OPEN_COM, m_btnOpen);
+    DDX_Control(pDX, BTN_RELOAD_SIGNAL, m_btnReload);
 }
 
 BEGIN_MESSAGE_MAP(CTestWizardToolDlg, CDialog)
@@ -196,6 +198,8 @@ BOOL CTestWizardToolDlg::OnInitDialog()
     SetIcon(m_hIcon, FALSE);		// 设置小图标
 
     // TODO: 在此添加额外的初始化代码
+    InitBtnStyle();
+
     GetSysSerialPort(m_vtPorts);
     InitSerialCombobox();
     m_cbCOM.SelectString(0, Global::g_Config.twPort.c_str());
@@ -295,7 +299,7 @@ void CTestWizardToolDlg::AdjustLayout()
     CRect rcCtrl;
     CRect rectClient;
     GetClientRect(rectClient);
-    TRACE2(_T("更新后的大小:%d,%d"), rectClient.Width(), rectClient.Height());
+    TRACE2(_T("更新后的大小:%d,%d\n"), rectClient.Width(), rectClient.Height());
     m_cbCOM.GetWindowRect(rcCtrl);
     ScreenToClient(rcCtrl);
 
@@ -407,7 +411,7 @@ void CTestWizardToolDlg::LoadKeyInfo(std::vector<KeyInfo> &vtKeyInfo, std::strin
                         keyInfo.pbtnInfo = pbtnInfo;
                     }
                     SetBTNStatus(keyInfo.pbtnInfo, TRUE);
-                    
+
                     vtKeyInfo.push_back(keyInfo);
                 }
 
@@ -445,7 +449,7 @@ void CTestWizardToolDlg::LoadKeyInfo(std::vector<KeyInfo> &vtKeyInfo, std::strin
             // 设置鼠标形状;
             it->pbtnInfo->pBTN->SetMouseCursorHand();
         }
-       
+
         // 设置背景色;
         it->pbtnInfo->pBTN->SetFaceColor(it->color, TRUE);
         // 显示窗口;
@@ -469,6 +473,122 @@ void CTestWizardToolDlg::LoadKeyInfo(std::vector<KeyInfo> &vtKeyInfo, std::strin
     AdjustLayout();
 }
 
+void CTestWizardToolDlg::ConvertOldSignalsToNew(std::string strOldSignal, std::string strNewSignal)
+{
+    typedef struct
+    {
+        std::string name;
+        std::string protocol;
+        std::string key;
+        //std::string color;
+    }OldXML, *pOldXML;
+
+    std::vector<OldXML> vtOldXML;
+    tinyxml2::XMLDocument doc;
+    if (tinyxml2::XML_SUCCESS != doc.LoadFile(strOldSignal.c_str()))
+    {
+        return;
+    }
+
+    tinyxml2::XMLElement* pXmlRoot = NULL;
+    if ((pXmlRoot = doc.RootElement()) != NULL)
+    {
+        if (_tcsicmp(pXmlRoot->Value(), "KeyList") == 0)
+        {
+            // 子项;
+            tinyxml2::XMLElement* pXmlElent = pXmlRoot->FirstChildElement();
+            while (pXmlElent)
+            {
+                if (_tcsicmp(pXmlElent->Value(), _T("ITEM")) == 0)
+                {
+                    OldXML oldxml;
+                    tinyxml2::XMLElement* pItem = pXmlElent->FirstChildElement();
+                    while (pItem)
+                    {
+                        if (_tcsicmp(pItem->Value(), _T("KeyName")) == 0)
+                        {
+                            oldxml.name = pItem->GetText();
+                        }
+                        else if (_tcsicmp(pItem->Value(), _T("KeyType")) == 0)
+                        {
+                            oldxml.protocol = pItem->GetText();
+                        }
+                        else if (_tcsicmp(pItem->Value(), _T("KeyCode")) == 0)
+                        {
+                            oldxml.key = pItem->GetText();
+                        }
+                        else if (_tcsicmp(pItem->Value(), _T("KeyCode")) == 0)
+                        {
+                            oldxml.key = pItem->GetText();
+                        }
+
+                        pItem = pItem->NextSiblingElement();
+                    }
+
+                    vtOldXML.push_back(oldxml);
+                }
+
+                pXmlElent = pXmlElent->NextSiblingElement();
+            }
+        }
+    }
+
+    if ( vtOldXML.size() == 0 )
+        return;
+
+    // 创建新的xml文件;
+    const char* declaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+    doc.Parse(declaration); // 覆盖之前的xml;
+
+    pXmlRoot = doc.NewElement("KeyList");
+    if ( pXmlRoot )
+    {
+        pXmlRoot->SetAttribute(_T("cols"), _T("4"));
+        pXmlRoot->SetAttribute(_T("with"), _T("60"));
+        pXmlRoot->SetAttribute(_T("height"), _T("25"));
+        pXmlRoot->SetAttribute(_T("rowSpacing"), _T("5"));
+        pXmlRoot->SetAttribute(_T("colSpacing"), _T("3"));
+        pXmlRoot->SetAttribute(_T("leftMargin"), _T("8"));
+        pXmlRoot->SetAttribute(_T("topMargin"), _T("8"));
+        pXmlRoot->SetAttribute(_T("ver"), _T("1.0.0.1"));
+        pXmlRoot->SetAttribute(_T("desc"), _T("key info"));
+        doc.InsertEndChild(pXmlRoot);
+
+        for (std::vector<OldXML>::iterator it = vtOldXML.begin(); it != vtOldXML.end(); it++ )
+        {
+            tinyxml2::XMLElement* pXmlElent = doc.NewElement("ITEM");
+            if ( pXmlElent )
+            {
+                pXmlElent->SetAttribute(_T("color"), _T("87CEFA"));
+                // 赋值各元素节点;
+                tinyxml2::XMLElement *pUse = doc.NewElement("USE");
+                pUse->SetText(1);
+                pXmlElent->InsertEndChild(pUse);
+
+                tinyxml2::XMLElement *pName = doc.NewElement("NAME");
+                pName->SetText(it->name.c_str());
+                pXmlElent->InsertEndChild(pName);
+
+                tinyxml2::XMLElement *pDesc = doc.NewElement("DESC");
+                pDesc->SetText(_T(""));
+                pXmlElent->InsertEndChild(pDesc);
+
+                tinyxml2::XMLElement *pType = doc.NewElement("TYPE");
+                pType->SetText(it->protocol.c_str());
+                pXmlElent->InsertEndChild(pType);
+
+                tinyxml2::XMLElement *pValue = doc.NewElement("VALUE");
+                pValue->SetText(it->key.c_str());
+                pXmlElent->InsertEndChild(pValue);
+
+                pXmlRoot->InsertEndChild(pXmlElent);
+            }
+        }
+    }
+
+    doc.SaveFile(strNewSignal.c_str());
+}
+
 BTNInfo *CTestWizardToolDlg::GetUnUseBTN()
 {
     for (std::vector<BTNInfo*>::iterator it = m_vtBTNInfo.begin(); it != m_vtBTNInfo.end(); it++ )
@@ -675,7 +795,7 @@ void CTestWizardToolDlg::OnBnClickedReloadSignal() // 
 void CTestWizardToolDlg::OnDestroy()
 {
     CDialog::OnDestroy();
-    
+
     // TODO: 在此处添加消息处理程序代码
     ClearAllBTNInfo();
 }
@@ -686,3 +806,63 @@ void CTestWizardToolDlg::OnOK()
 
     //CDialog::OnOK();
 }
+
+void CTestWizardToolDlg::InitBtnStyle()
+{
+    // 设置透明false以显示背景色
+    m_btnOpen.m_bTransparent = FALSE;
+    //m_btnOpen.m_bDontUseWinXPTheme = TRUE;
+    // 消除单击时黑色内圈;
+    m_btnOpen.m_bDrawFocus = FALSE;
+    // 设置按钮扁平样式;
+    //m_btnOpen.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
+    // 设置鼠标形状;
+    m_btnOpen.SetMouseCursorHand();
+    // 设置背景色;
+    m_btnOpen.SetFaceColor(RGB(250,80,80), TRUE);
+    // 显示窗口;
+    m_btnOpen.ShowWindow(SW_SHOW);
+    m_btnOpen.SetTooltip(_T("Open the serial port"));
+
+    // 设置透明false以显示背景色
+    m_btnReload.m_bTransparent = FALSE;
+    //m_btnReload.m_bDontUseWinXPTheme = TRUE;
+    // 消除单击时黑色内圈;
+    m_btnReload.m_bDrawFocus = FALSE;
+    // 设置按钮扁平样式;
+    //m_btnReload.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
+    // 设置鼠标形状;
+    m_btnReload.SetMouseCursorHand();
+    // 设置背景色;
+    m_btnReload.SetFaceColor(RGB(135,220,238), TRUE);
+    // 显示窗口;
+    m_btnReload.ShowWindow(SW_SHOW);
+    m_btnReload.SetTooltip(_T("Reload the signal file"));
+}
+
+BOOL CTestWizardToolDlg::PreTranslateMessage(MSG* pMsg)
+{
+    // TODO: 在此添加专用代码和/或调用基类
+    if (pMsg->message == WM_KEYDOWN)
+    {
+        if (pMsg->wParam == VK_F3)
+        {
+            // 查找目录文件;
+            filehelper fh;
+            std::vector<std::string> vtSignals;
+            fh.getfiles_findout_subfolder(Global::g_Config.twOldSignaldir.c_str(), _T("*.xml"), &vtSignals);
+            // 逐个文件转换;
+            for ( std::vector<std::string>::iterator it = vtSignals.begin(); it != vtSignals.end(); it++ )
+            {
+                std::string newfile = Global::g_Config.twSignaldir + _T("\\") + filehelper::getfilename(it->c_str()) + _T(".xml");
+                ConvertOldSignalsToNew(*it, newfile);
+            }
+
+            MessageBox(_T("Convert old signals ok!"), _T("Convert"), MB_OK);
+            OnBnClickedReloadSignal();
+
+            return TRUE;
+        }
+    }
+    return CDialog::PreTranslateMessage(pMsg);
+}

+ 6 - 0
TestWizardTool/TestWizardTool/TestWizardToolDlg.h

@@ -94,6 +94,7 @@ public:
 
     void LoadSignals();
     void LoadKeyInfo(std::vector<KeyInfo> &vtKeyInfo, std::string path);
+    void ConvertOldSignalsToNew(std::string strOldSignal, std::string strNewSignal);
     BTNInfo *GetUnUseBTN();
     void SetBTNStatus(BTNInfo *pbtnInfo, BOOL bStatus = TRUE);
     void SetAllBTNUnUsed();
@@ -110,4 +111,9 @@ public:
     afx_msg void OnDestroy();
 protected:
     virtual void OnOK();
+public:
+    CMFCButton m_btnOpen;
+    CMFCButton m_btnReload;
+    void InitBtnStyle();
+    virtual BOOL PreTranslateMessage(MSG* pMsg);
 };