From 2ed003307b4cd600058b8a6193594a7135aa07a1 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Thu, 29 Dec 2022 14:34:56 +0800 Subject: [PATCH 1/3] add CDlgInput files --- cfg-tools/apps/scanner-check/CDlgInput.cpp | 55 ++++++++++++++++++++++ cfg-tools/apps/scanner-check/CDlgInput.h | 34 +++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 cfg-tools/apps/scanner-check/CDlgInput.cpp create mode 100644 cfg-tools/apps/scanner-check/CDlgInput.h diff --git a/cfg-tools/apps/scanner-check/CDlgInput.cpp b/cfg-tools/apps/scanner-check/CDlgInput.cpp new file mode 100644 index 0000000..107db72 --- /dev/null +++ b/cfg-tools/apps/scanner-check/CDlgInput.cpp @@ -0,0 +1,55 @@ +// CDlgInput.cpp: 实现文件 +// + +#include "pch.h" +#include "scanner-check.h" +#include "CDlgInput.h" +#include "afxdialogex.h" + + +// CDlgInput 对话框 + +IMPLEMENT_DYNAMIC(CDlgInput, CDialogEx) + +CDlgInput::CDlgInput(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_INPUT, pParent), val_(L""), title_(L"\u4FEE\u6539") +{ + +} + +CDlgInput::~CDlgInput() +{ +} + +void CDlgInput::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CDlgInput, CDialogEx) + ON_BN_CLICKED(IDOK, &CDlgInput::OnBnClickedOk) +END_MESSAGE_MAP() + + +// CDlgInput 消息处理程序 +BOOL CDlgInput::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + ::SetWindowTextW(m_hWnd, title_.c_str()); + ::SetDlgItemTextW(m_hWnd, IDC_EDIT1, val_.c_str()); + + return FALSE; +} + +void CDlgInput::OnBnClickedOk() +{ + // TODO: 在此添加控件通知处理程序代码 + wchar_t val[128] = { 0 }; + + ::GetDlgItemTextW(m_hWnd, IDC_EDIT1, val, _countof(val) - 1); + val_ = val; + + CDialogEx::OnOK(); +} diff --git a/cfg-tools/apps/scanner-check/CDlgInput.h b/cfg-tools/apps/scanner-check/CDlgInput.h new file mode 100644 index 0000000..3ae0713 --- /dev/null +++ b/cfg-tools/apps/scanner-check/CDlgInput.h @@ -0,0 +1,34 @@ +#pragma once + + +// CDlgInput 对话框 +#include + +class CDlgInput : public CDialogEx +{ + DECLARE_DYNAMIC(CDlgInput) + +public: + CDlgInput(CWnd* pParent = nullptr); // 标准构造函数 + virtual ~CDlgInput(); + + std::wstring val_; + std::wstring title_; + +// 对话框数据 +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_INPUT }; +#endif + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 + virtual BOOL OnInitDialog(); + + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedOk(); + void set_title(const wchar_t* title) + { + title_ = title ? title : L"\u4FEE\u6539"; + } +}; From d326b6a3be5e6e16b75a78edf3415e3ab785d5c6 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Thu, 29 Dec 2022 15:47:57 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=B0=83=E6=95=B4json=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?json=E6=8F=8F=E8=BF=B0=E5=AD=97=E6=AE=B5=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cfg-tools/apps/scanner-check/CDlgInput.cpp | 33 +++++++++++++++++-- cfg-tools/apps/scanner-check/CDlgInput.h | 3 +- cfg-tools/apps/scanner-check/CDlgItemMgr.cpp | 33 ++++++++++--------- cfg-tools/apps/scanner-check/scannercheck.rc | Bin 19444 -> 19564 bytes cfg-tools/solution/Release/config/stored.txt | Bin 2126 -> 5284 bytes cfg-tools/solution/Release/scanner-check.exe | Bin 278528 -> 278528 bytes 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/cfg-tools/apps/scanner-check/CDlgInput.cpp b/cfg-tools/apps/scanner-check/CDlgInput.cpp index 107db72..ead99ad 100644 --- a/cfg-tools/apps/scanner-check/CDlgInput.cpp +++ b/cfg-tools/apps/scanner-check/CDlgInput.cpp @@ -1,4 +1,4 @@ -// CDlgInput.cpp: 实现文件 +// CDlgInput.cpp: 实现文件 // #include "pch.h" @@ -29,6 +29,7 @@ void CDlgInput::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CDlgInput, CDialogEx) ON_BN_CLICKED(IDOK, &CDlgInput::OnBnClickedOk) + ON_EN_CHANGE(IDC_EDIT1, &CDlgInput::OnEnChangeEdit1) END_MESSAGE_MAP() @@ -38,6 +39,15 @@ BOOL CDlgInput::OnInitDialog() CDialogEx::OnInitDialog(); ::SetWindowTextW(m_hWnd, title_.c_str()); + + size_t pos = val_.find(L"\\n"); + while (pos != std::wstring::npos) + { + val_.replace(pos, 2, L"\r\n"); + pos = val_.find(L"\\n"); + } + while ((pos = val_.find(L"\\t")) != std::wstring::npos) + val_.replace(pos, 2, L"\t"); ::SetDlgItemTextW(m_hWnd, IDC_EDIT1, val_.c_str()); return FALSE; @@ -46,10 +56,29 @@ BOOL CDlgInput::OnInitDialog() void CDlgInput::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 - wchar_t val[128] = { 0 }; + wchar_t val[1024] = { 0 }; ::GetDlgItemTextW(m_hWnd, IDC_EDIT1, val, _countof(val) - 1); val_ = val; + size_t pos = val_.find(L"\r\n"); + while (pos != std::wstring::npos) + { + val_.replace(pos, 2, L"\\n"); + pos = val_.find(L"\r\n"); + } + while ((pos = val_.find(L"\t")) != std::wstring::npos) + val_.replace(pos, 1, L"\\t"); CDialogEx::OnOK(); } + + +void CDlgInput::OnEnChangeEdit1() +{ + // TODO: 如果该控件是 RICHEDIT 控件,它将不 + // 发送此通知,除非重写 CDialogEx::OnInitDialog() + // 函数并调用 CRichEditCtrl().SetEventMask(), + // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 + + // TODO: 在此添加控件通知处理程序代码 +} diff --git a/cfg-tools/apps/scanner-check/CDlgInput.h b/cfg-tools/apps/scanner-check/CDlgInput.h index 3ae0713..e07dbe7 100644 --- a/cfg-tools/apps/scanner-check/CDlgInput.h +++ b/cfg-tools/apps/scanner-check/CDlgInput.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once // CDlgInput 对话框 @@ -31,4 +31,5 @@ public: { title_ = title ? title : L"\u4FEE\u6539"; } + afx_msg void OnEnChangeEdit1(); }; diff --git a/cfg-tools/apps/scanner-check/CDlgItemMgr.cpp b/cfg-tools/apps/scanner-check/CDlgItemMgr.cpp index 10ed44d..1b55dc2 100644 --- a/cfg-tools/apps/scanner-check/CDlgItemMgr.cpp +++ b/cfg-tools/apps/scanner-check/CDlgItemMgr.cpp @@ -1,4 +1,4 @@ -// CDlgItemMgr.cpp: 实现文件 +// CDlgItemMgr.cpp: 实现文件 // #include "pch.h" @@ -78,7 +78,7 @@ END_MESSAGE_MAP() void CDlgItemMgr::OnBnClickedButtonAdd() { // TODO: 在此添加控件通知处理程序代码 - wchar_t text[128] = { 0 }, name[128] = { 0 }, desc[128] = { 0 }; + wchar_t text[1024] = { 0 }, name[1024] = { 0 }, desc[1024] = { 0 }; bool online = is_checked(this, IDC_CHECK_ONLINE), fatal = is_checked(this, IDC_CHECK_FATAL); int ind = -1; @@ -91,7 +91,7 @@ void CDlgItemMgr::OnBnClickedButtonAdd() } for (int i = 0; i < list_.GetItemCount(); ++i) { - wchar_t val[128] = { 0 }; + wchar_t val[1024] = { 0 }; list_.GetItemText(i, 1, val, _countof(val) - 1); if (wcscmp(name, val) == 0) { @@ -141,7 +141,7 @@ void CDlgItemMgr::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) { if (pos.x <= width[i]) { - wchar_t text[128] = { 0 }; + wchar_t text[1024] = { 0 }; if (i < 3) { std::wstring tips(L"\u5220\u9664\u6D4B\u8BD5\u9879\uFF1A"); @@ -170,7 +170,7 @@ void CDlgItemMgr::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) else { CDlgInput input; - wchar_t val[128] = { 0 }; + wchar_t val[1024] = { 0 }; std::wstring def(L""); list_.GetItemText(ind, 2, val, _countof(val) - 1); @@ -215,22 +215,24 @@ std::wstring CDlgItemMgr::get_stored_config_file(void) } void CDlgItemMgr::get_item(int ind, page_config::ITEM* item) { - wchar_t text[128] = { 0 }; + size_t len = 1024; + wchar_t *text = (wchar_t*)malloc(len + 1); - list_.GetItemText(ind, 1, text, _countof(text) - 1); + list_.GetItemText(ind, 1, text, len); item->name = text; - list_.GetItemText(ind, 2, text, _countof(text) - 1); + list_.GetItemText(ind, 2, text, len); item->title = text; - list_.GetItemText(ind, 3, text, _countof(text) - 1); + list_.GetItemText(ind, 3, text, len); item->man = wcscmp(text, L"false") == 0; - list_.GetItemText(ind, 4, text, _countof(text) - 1); + list_.GetItemText(ind, 4, text, len); item->fatal = wcscmp(text, L"true") == 0; - list_.GetItemText(ind, 5, text, _countof(text) - 1); + list_.GetItemText(ind, 5, text, len); item->desc = text; + free(text); } void CDlgItemMgr::load_from_file(const wchar_t* file) { - wchar_t path[MAX_PATH] = { 0 }, + wchar_t *path = (wchar_t*)malloc(MAX_PATH * 4), *sn = path, *n = sn + 40, *t = n + 40, @@ -272,6 +274,7 @@ void CDlgItemMgr::load_from_file(const wchar_t* file) cont.erase(0, pos + 2); } ::PostMessage(GetParent()->m_hWnd, WM_TEST_ITEM_CHANGED, 0, 0); + free(path); } void CDlgItemMgr::load_stored_config(void) { @@ -299,7 +302,7 @@ void CDlgItemMgr::item_changed(void) } bool CDlgItemMgr::get_name(const wchar_t* title, page_config::ITEM* item) { - wchar_t text[128] = { 0 }; + wchar_t text[1024] = { 0 }; for (size_t i = 0; i < list_.GetItemCount(); ++i) { @@ -316,7 +319,7 @@ bool CDlgItemMgr::get_name(const wchar_t* title, page_config::ITEM* item) } bool CDlgItemMgr::get_title(const wchar_t* name, page_config::ITEM* item) { - wchar_t text[128] = { 0 }; + wchar_t text[1024] = { 0 }; for (size_t i = 0; i < list_.GetItemCount(); ++i) { @@ -333,7 +336,7 @@ bool CDlgItemMgr::get_title(const wchar_t* name, page_config::ITEM* item) } void CDlgItemMgr::get_all_items(std::vector& items) { - wchar_t text[128] = { 0 }; + wchar_t text[1024] = { 0 }; for (size_t i = 0; i < list_.GetItemCount(); ++i) { diff --git a/cfg-tools/apps/scanner-check/scannercheck.rc b/cfg-tools/apps/scanner-check/scannercheck.rc index 0fe3a169d6259c875788c78d4746c181e59948a0..8ee34fc36e56f62aa9e2faaf6d08d68f919ce11c 100644 GIT binary patch delta 128 zcmew|o$<{K#tl#OSPdBr8O$f^iy3Z~(D!0wH)k+m&|z?$yjM+}Re_;~L1FSl4cW;J zGCY&@WThr=5*1W^U$&D_Go3rehcmZL^7qtKY diff --git a/cfg-tools/solution/Release/config/stored.txt b/cfg-tools/solution/Release/config/stored.txt index a99b2f04dc08910ad752a676ad04929de62c0e22..e20804b0efd88910fb9da166fce795ebc423affa 100644 GIT binary patch literal 5284 zcmbVQZA@F&89vSu2w+I6N|ok-a*;BPg{7FUmN*ep`XL83T-*1$7-X==b*}9NFs=cQ zrNw+Koj`^e|44|MiFQ>X`O#L{eoR!8+N??zsY~YN$D(T0)@)U~sz2JOnb4Gq+?~hA zC)gK^>4cDd?|t6qp7XxX`*Ey27$zziBE#emsV4&c`&==M67P_sIyn0ZuKlE!^izbI zekxF8gp6dava#i)ls@BJ4Qce1;HQDZQ*jsgUX|7+3i0Xjxtxt@&UfR*U8Q34NYwNG z%*SrxwFG__G5oj?^X68${7nzn{M&)3ztwN~Ss_-emt%9en$ujnLPf(XF?k+)4~@PN zFT|(E=W;%g<}C3&einRJg3k>U;&aoO_K@b0`4Fs1d}U%Ijbw%MgJi3^PwOTj;wB9g zk^7z})9?9pJgioq+T-2Md$O^)TrFv?Q+>ZuIZw8Ja@E99xeSNX3`NpPta-!|D9nOL zf0S5>eIg%sl#7!yt?F|Fe~quij2iU9bx`3f?`pR}Ii`#sihaew$(g76dkFl}O|`sR zt0yHIv<8(`IE@PdAU^C`1!ptiWbsv5Q94qu;Oi_2x= z_g}I`jM@_~R5)+S{fVM(T)(N9r7xq!!FF3{Je#5MAp>@PxAWeD!Q7wNKW{K!kd{4d zFIru`z824J?TGmP%mL{wmA)@02kVJB?YpN*8)0e z$P})6Wuta)@{w*@AG};OxF1$i$sWRWGnihGrm z9a!LgGxeauU_N-NH}Fo(U=BKNEiU*?^YVP#i#xn6o_*SG?M}!3k&EIHaXerpjp-Fz zNmKgs-{I%IXQFlfGto~(!>CcKab25kPa>XQ$!ilPTc^9mbv*LJK)HBWZchsHdljq{ zZ!Z^T-NWkTq25`e=IQ>Wh}Gb#MB8E3$B0$kBcdhn=kr!2JF~YJr54ZCnJ4Lb1LQHK zCH*NYVHtX7k)aycBx?0!vxt4T_(mK#Vbsb+`?(!vRw44m1-XRGxSl9GeMmG?9a;jj zPG}W7G1>YPm!!?Ig4-dZ4u}Uupudo7Tu{zm5+|k^9})i(1%pw;{cgL`_qeW3)l-E* z%`ea0?fh4N^(mL@N~ULR&vUtX-kkQ`tP`v))SJ)Cf|pm0olf|Y*7S@g*E9UaLzGE7 zMw-b7@~2{{XzBj1oBN;Ju*_mP170vTe2XYRY3L#P`owmBgev%=Z#+;cHqDg;YR8I$ zm4b4hO3>$r(K(!WFIF@@;A^QW8*xwX)tRF~MB`-#5XcIvi=m_yRrs#zdRrxZ`cHQqW>;jw<0XrBb-Mh;MXd^qJK~WbR#b zdf0#S(#Nsaq_Mo`ua=;klIFB=W^3Zpj7orT)g>?(y966X{6uM*Ie?sndEZme}| z`h&j(+y35QN8vr^&nKoL7CAm0LM_nI>#@P`#<~HEAqTU-#1l|XOry3VHbxD0V>BP= z`Zx49Hcg_2Z-3pa?qUY{|GHcLnFJl~+H_wh>u@|X*6R+|$@|$#Oz@sQ{{tx%yH4jx zc^)~3m@Uy9L-gyrzBk7*u9x;(7CWQ1Hi77VHgk*4TPgeXt1}xr6EH01-Qcvca7W!U+1qb0*SOfM*nPH% z#x*p)v+Is}Yw;ag^$v*20&2+)GqXenK@-S*u&hn|V&-kw&8&yW?F@8R&Whu_C{+=u?y z%z}B^e(tD!y<4(`K;$&rb;5m*_jAPaGErU7|d4s{}kEjERs^mqxKpX zn{D-WsE~XuCT(*}6UF@9-{!#TOj=`R=G5mqY!OL#W5{E1!9QDTBpaElk%r94{${ey ziI{E8gNUFi@qOUUv+li$QNuTu8wUeR%6HEW$rcg!&_|5gZTUX^%>W8CYWz)lCZGYJ#?7{^_qh?T=Ve`r;cWKE)VJl<+vxfE zZviJlQ7#;ag{?b-REgYriVAcBFcxe0)oAA@EJ;+gdj`cHtwGSPh z{Z5fTzBu=Dq@HX2^l$MldkS;mcLI*g<-*wx`>_Nr2hodL?c4cHLXXySveO%8Li8+l zm4Bz}I6V(L$?)gwsxVK3?nH!Yf<1B`c2$_CaRU$2eq6pFVP80>Y^{ZCq<(K)=O@qo SEi|0KZ$(>k?Fy|U!Sz2P^bRNh delta 155 zcmZ3Yc}`%0)kH6ciSyhh{daC*Jko2UKOx-7r)KqYy1|I69gP4ZxL{s z%p>SFIY-cL@*Y8pNkSHrU4(2VPXOXOLJpG+gsmo50Pz7J<`A)&93o=F!pp$L005_o BGlT#D diff --git a/cfg-tools/solution/Release/scanner-check.exe b/cfg-tools/solution/Release/scanner-check.exe index 9605584ecf84ce2f511e19b465e9af95fe7b7814..4e26d5caab93037d2e848743c9b42652b97bb790 100644 GIT binary patch delta 42025 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 Siy8U# Date: Thu, 29 Dec 2022 17:54:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=B0=E4=BD=8F?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=B8=AD=E4=B8=8D=E8=83=BD=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/HGProductionTool/ProductionTool_zh_CN.qm | Bin 9248 -> 9330 bytes app/HGProductionTool/ProductionTool_zh_CN.ts | 111 ++++++++++--------- app/HGProductionTool/dialog_login.cpp | 31 ++++-- app/HGProductionTool/form_maininterface.cpp | 32 ++++++ app/HGProductionTool/form_maininterface.h | 5 + app/HGProductionTool/hgscanner.cpp | 37 +++++-- app/HGProductionTool/mainwindow.cpp | 56 +++++++++- app/HGProductionTool/mainwindow.h | 5 +- 8 files changed, 202 insertions(+), 75 deletions(-) diff --git a/app/HGProductionTool/ProductionTool_zh_CN.qm b/app/HGProductionTool/ProductionTool_zh_CN.qm index 69bc9ae386994e89505b77fba8060f491769d5ce..665de748b94533598e74e34bfa36c8a52cc950bd 100644 GIT binary patch delta 301 zcmZ4B@yTO?2;+i@qJB(r?h{k>8GlclTF;m>S(MS8aq{F?Mn5TeMaFX>EDQ|N0*uc; zY+ztu-@^F(UkH%Db@EY0d&c>bS()ZZ$w{-G)G=XTkP&4)&ka;8yMy&Umnx8cJ9#gY zIA=ba@tqW)tkdMXO!9(P*ck&w7#M`j*j?W?GB8MmPG)6RXN;e$%Ph{=J=v96owJ22 zD$o>Y#mmX1%&!;s*~5S@@;;~qAX>}0926c-F?+h_dief_n`lQ#Z%w@ rXXF41Gq3@%q-U{0NosLPW?s6ELQ1|uUVe!}a!!76s^aGFa+<6FV~|#) delta 249 zcmez5vA|=32;+>2qJB)Wex}0@SQr?jjxj#} zuz`VreGB9Be<2JE(%F-bGTJkSPG)7ACnbB4^`wpoQ1CSCd2XO$**wLYVrL8#VPFt8o6O6sE-A`k-`~o>AaR#-a&svIgGeXmoI3>! z4DybXeVNrct+=8BO@TV+Pp)NlXDpa}l-W#5>NgL=y)Fg@rVl)9tAUa-VLY5y76C0| un=Hy=E?CFg^9tw$p*-IIjjll1{gY!^Vi@x#FBFp9e4WKoYIBsl1S - + OK 确定 - + Cancel 取消 - + tips 提示 - + please input valid contents 请输入有效内容 @@ -545,88 +545,88 @@ 下一步 - + Device has connected 设备已连接 - + Device hasnot connected 设备未连接 - + Device type: 设备型号: - + SerialNum: 序列号: - + connect status: 设备连接状态: - + load last image which uploaded last time 加载上一次上传的图片 - - + + tips 提示 - + yes 确定 - + no 取消 - + ID 序号 - + Test items 测试项 - + status 测试状态 - + not test 未测试 - + not pass 不通过 - + not support 不支持 - + pass 通过 - + no image 无图 @@ -692,7 +692,7 @@ 上传配置文件 - + Account login elsewhere 账户在其他地方登录 @@ -701,94 +701,104 @@ 网络连接断开 - + You have been forced offline by the administrator account 你已被管理员账户强制下线 - + Data base error 数据库错误 - - - - - - - + + + + + + + + + + tips 提示 - + + + + Is testing, do not close! + 测试中,请勿关闭! + + + Are you sure to connect the new device 检测到设备连接,是否启动测试? - + yes 确定 - + no 取消 - - + + cannot create more table 不能创建更多项目 - + The device has disconnected 设备已断开连接 - + save 保存 - + xls(*.xls) xls表格(*.xls) - + export succeed 导出成功 - + export failed 导出失败 - + Illegal user 非法的用户 - + Wrong password 密码错误 - + Database error 数据库错误 - + connect error 连接错误 - + Failed 错误 @@ -796,18 +806,19 @@ QObject - + success: success 成功: - + + failed: 失败: - + Not find test item 没有找到该测试项 diff --git a/app/HGProductionTool/dialog_login.cpp b/app/HGProductionTool/dialog_login.cpp index ff73a60..486e366 100644 --- a/app/HGProductionTool/dialog_login.cpp +++ b/app/HGProductionTool/dialog_login.cpp @@ -23,17 +23,21 @@ Dialog_logIn::Dialog_logIn(QWidget *parent) : ui->pbtn_setting->setToolTip(tr("Set host and port")); ui->pbtn_minum->setToolTip(tr("Minimize")); ui->pbtn_close->setToolTip(tr("Close")); - ui->label_title->setText(tr("LogIn")); + ui->lineEdit_password->setEchoMode(QLineEdit::EchoMode::Password); QString account("root"); + QString dbHost("192.168.1.70"); + QString dbPort("3306"); + QString ftpHost("192.168.1.70"); + QString ftpPort("21"); + ui->lineEdit_account->setText(getCfgValue("login", "account", account)); -// ui->lineEdit_password->setText("123456"); - ui->lineEdit_password->setEchoMode(QLineEdit::EchoMode::Password); - ui->lineEdit_dbHost->setText("192.168.1.70"); - ui->lineEdit_dbPort->setText("3306"); - ui->lineEdit_ftpHost->setText("192.168.1.70"); - ui->lineEdit_ftpPort->setText("21"); + + ui->lineEdit_dbHost->setText(getCfgValue("login", "dbHost", dbHost)); + ui->lineEdit_dbPort->setText(getCfgValue("login", "dbPort", dbPort)); + ui->lineEdit_ftpHost->setText(getCfgValue("login", "ftpHost", ftpHost)); + ui->lineEdit_ftpPort->setText(getCfgValue("login", "ftpPort", ftpPort)); ui->label_dbHost->setVisible(false); ui->label_dbPort->setVisible(false); @@ -96,12 +100,19 @@ void Dialog_logIn::on_pbtn_login_clicked() { QString account = ui->lineEdit_account->text(); QString password = ui->lineEdit_password->text(); - QString host = ui->lineEdit_dbHost->text(); - QString port = ui->lineEdit_dbPort->text(); + QString dbHost = ui->lineEdit_dbHost->text(); + QString dbPort = ui->lineEdit_dbPort->text(); + QString ftpHost = ui->lineEdit_ftpHost->text(); + QString ftpPort = ui->lineEdit_ftpPort->text(); + saveCfgValue("login", "account", account); + saveCfgValue("login", "dbHost", dbHost); + saveCfgValue("login", "dbPort", dbPort); + saveCfgValue("login", "ftpHost", ftpHost); + saveCfgValue("login", "ftpPort", ftpPort); HGPdtToolDbUserMgr pdtToolDbuserMgr = nullptr; - HGResult ret = HGPdtToolDb_CreateUserMgr(host.toStdString().c_str(), port.toInt(), account.toStdString().c_str(), password.toStdString().c_str(), + HGResult ret = HGPdtToolDb_CreateUserMgr(dbHost.toStdString().c_str(), dbPort.toInt(), account.toStdString().c_str(), password.toStdString().c_str(), &pdtToolDbuserMgr); if (NULL != pdtToolDbuserMgr) { diff --git a/app/HGProductionTool/form_maininterface.cpp b/app/HGProductionTool/form_maininterface.cpp index a4b4683..dab538f 100644 --- a/app/HGProductionTool/form_maininterface.cpp +++ b/app/HGProductionTool/form_maininterface.cpp @@ -70,6 +70,7 @@ Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, SANE_Handle ha , m_devType(devType) , m_devName(devName) , m_devFwNum(devFwNum) + , m_isTesting(false) { ui->setupUi(this); @@ -79,6 +80,7 @@ Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, SANE_Handle ha connect(this, SIGNAL(testResult(QString)), this, SLOT(on_testResult(QString)), Qt::QueuedConnection); connect(this, SIGNAL(testResultImg(void*)), this, SLOT(on_testResultImg(void*)), Qt::QueuedConnection); + connect(this, SIGNAL(testFinish()), this, SLOT(on_testFinish()), Qt::QueuedConnection); QString str; if (m_handle) @@ -121,6 +123,11 @@ Form_mainInterface::~Form_mainInterface() delete ui; } +bool Form_mainInterface::isTesting() +{ + return m_isTesting; +} + QString Form_mainInterface::getSn() { return m_serialNum; @@ -178,6 +185,12 @@ void Form_mainInterface::on_testDistortion(QString name, void *data) } } +void Form_mainInterface::on_testFinish() +{ + updateUiEnabled(true); + m_isTesting = false; +} + void Form_mainInterface::on_pbtn_preStep_clicked() { int row = ui->tableWidget->currentRow(); @@ -445,6 +458,20 @@ QString Form_mainInterface::getCacheFileName() return fileName; } +void Form_mainInterface::updateUiEnabled(bool enable) +{ + ui->tableWidget->setEnabled(enable); + ui->pbtn_preStep->setEnabled(enable); + ui->pbtn_nextStep->setEnabled(enable); + ui->pbtn_pass->setEnabled(enable); + ui->pbtn_fail->setEnabled(enable); + ui->pbtn_start->setEnabled(enable); + ui->pbtn_showImg->setEnabled(enable); + ui->pbtn_leftRotate->setEnabled(enable); + ui->pbtn_rightRotate->setEnabled(enable); + ui->pbtn_stop->setEnabled(enable); +} + void Form_mainInterface::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous) { (void)previous; @@ -480,6 +507,11 @@ void Form_mainInterface::on_pbtn_start_clicked() QString title = item->text(); QString name = m_map_title_name.value(title).name; int ret = func_test_go(name.toStdWString().c_str(), L"null", m_hg); + if (ret == 0) + { + updateUiEnabled(false); + m_isTesting = true; + } } void Form_mainInterface::on_pbtn_showImg_clicked() diff --git a/app/HGProductionTool/form_maininterface.h b/app/HGProductionTool/form_maininterface.h index 32880d4..47610cb 100644 --- a/app/HGProductionTool/form_maininterface.h +++ b/app/HGProductionTool/form_maininterface.h @@ -24,6 +24,7 @@ public: const QString &serialNum, const QString &devType, const QString &devName, const QString &devFwNum); ~Form_mainInterface(); + bool isTesting(); QString getSn(); QString getDevName(); SANE_Handle getDevHandle(); @@ -36,11 +37,13 @@ signals: void testResult(QString text); void testResultImg(void* img); void testDistortion(QString title, void *data); + void testFinish(); private slots: void on_testResult(QString text); void on_testResultImg(void* img); void on_testDistortion(QString title, void *data); + void on_testFinish(); private slots: void on_pbtn_preStep_clicked(); @@ -71,6 +74,7 @@ private: QString getItemStatusStr(HGUInt status); QString getCachePath(); QString getCacheFileName(); + void updateUiEnabled(bool enable); private: Ui::Form_mainInterface *ui; @@ -88,6 +92,7 @@ private: QString m_devType; QString m_devName; QString m_devFwNum; + bool m_isTesting; QMap m_map_title_name; }; diff --git a/app/HGProductionTool/hgscanner.cpp b/app/HGProductionTool/hgscanner.cpp index cb49541..25b324f 100644 --- a/app/HGProductionTool/hgscanner.cpp +++ b/app/HGProductionTool/hgscanner.cpp @@ -34,22 +34,37 @@ void hgscanner::test_callback(const wchar_t* name, test_event ev, void* data, si if (ev == TEST_EVENT_TIPS) { - } - else if (ev == TEST_EVENT_RESULT) - { - QString ret; - QString info = QString::fromStdWString((const wchar_t*)data); - if (flag) - ret = QObject::tr("success: ") + info; - else - ret = QObject::tr("failed: ") + info; - - emit m_interface->testResult(ret); } else if (ev == TEST_EVENT_NOT_FIND_TEST) { QString info = QObject::tr("Not find test item"); emit m_interface->testResult(info); + emit m_interface->testFinish(); + } + else if (ev == TEST_EVENT_IO_FAIL) + { + QString info = QString::fromStdWString((const wchar_t*)data); + info = QObject::tr("failed: ") + info; + + emit m_interface->testResult(info); + emit m_interface->testFinish(); + } + else if (ev == TEST_EVENT_MANUAL_CONFIRMATION) + { + QString info = QString::fromStdWString((const wchar_t*)data); + emit m_interface->testResult(info); + emit m_interface->testFinish(); + } + else if (ev == TEST_EVENT_RESULT) + { + QString info = QString::fromStdWString((const wchar_t*)data); + if (flag) + info = QObject::tr("success: ") + info; + else + info = QObject::tr("failed: ") + info; + + emit m_interface->testResult(info); + emit m_interface->testFinish(); } else if (ev == TEST_EVENT_DISTORTION) { diff --git a/app/HGProductionTool/mainwindow.cpp b/app/HGProductionTool/mainwindow.cpp index 27df5b0..307b7ff 100644 --- a/app/HGProductionTool/mainwindow.cpp +++ b/app/HGProductionTool/mainwindow.cpp @@ -232,6 +232,42 @@ bool MainWindow::RemoveInterface(Form_mainInterface *interface) return true; } +bool MainWindow::isTesting() +{ + bool isTesting = false; + for (int i = 0; i < m_top_splitter->count(); ++i) + { + Form_mainInterface *interface = (Form_mainInterface *)m_top_splitter->widget(i); + if (interface->isTesting()) + { + isTesting = true; + break; + } + } + if (!isTesting) + { + for (int i = 0; i < m_bot_splitter->count(); ++i) + { + Form_mainInterface *interface = (Form_mainInterface *)m_bot_splitter->widget(i); + if (interface->isTesting()) + { + isTesting = true; + break; + } + } + } + return isTesting; +} + +void MainWindow::closeEvent(QCloseEvent *event) +{ + if (isTesting()) + { + QMessageBox::information(this, tr("tips"), tr("Is testing, do not close!")); + event->ignore(); + } +} + int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigned int *len, void *param) { MainWindow* p = (MainWindow*)param; @@ -387,9 +423,12 @@ void MainWindow::on_update_userStatus() if (!tips.isEmpty()) { - QMessageBox::information(this, (tr("tips")), tips); - m_isLogOut = true; - close(); + if (!isTesting()) + { + QMessageBox::information(this, (tr("tips")), tips); + m_isLogOut = true; + close(); + } } } @@ -440,6 +479,11 @@ void MainWindow::on_act_export_triggered() void MainWindow::on_act_logOut_triggered() { + if (isTesting()) + { + QMessageBox::information(this, tr("tips"), tr("Is testing, do not close!")); + return; + } m_isLogOut = true; close(); } @@ -447,6 +491,12 @@ void MainWindow::on_act_logOut_triggered() void MainWindow::on_act_close_triggered() { + if (isTesting()) + { + QMessageBox::information(this, tr("tips"), tr("Is testing, do not close!")); + return; + } + close(); } diff --git a/app/HGProductionTool/mainwindow.h b/app/HGProductionTool/mainwindow.h index 4928556..31cd0dd 100644 --- a/app/HGProductionTool/mainwindow.h +++ b/app/HGProductionTool/mainwindow.h @@ -30,7 +30,10 @@ public: Form_mainInterface* FindInterface(SANE_Handle handle); bool AddInterface(Form_mainInterface *interface); bool RemoveInterface(Form_mainInterface *interface); - + bool isTesting(); + +protected: + void closeEvent(QCloseEvent *event); private: static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);