|
@@ -17,6 +17,8 @@
|
|
|
#include "MainFrm.h"
|
|
|
#include "SATHelper.h"
|
|
|
#include <filehelper.h>
|
|
|
+#include "SATClient.h"
|
|
|
+#include "SVNProc.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
#undef THIS_FILE
|
|
@@ -37,7 +39,150 @@ extern CMainFrame* g_pMainFrame;
|
|
|
|
|
|
CDevicesWnd::CDevicesWnd() noexcept
|
|
|
{
|
|
|
- m_nComboHeight = 0;
|
|
|
+ m_bEnd = FALSE;
|
|
|
+}
|
|
|
+
|
|
|
+int CDevicesWnd::InitCtrl()
|
|
|
+{
|
|
|
+ CRect rectDummy(0, 0, 50, 23);
|
|
|
+ m_lb_Actuator.Create(_T("执行器:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
|
|
|
+ m_lb_IP.Create(_T("电视IP:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
|
|
|
+ m_lb_TaskId.Create(_T("任务ID:"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
|
|
|
+ m_lb_TaskStatus.Create(_T("任务状态"), SS_CENTER | SS_CENTERIMAGE | WS_CHILD | WS_VISIBLE, rectDummy, this, IDC_STATIC);
|
|
|
+
|
|
|
+ if (!m_edit_TaskId.Create(WS_BORDER | WS_CHILD | WS_VISIBLE | ES_READONLY | WS_TABSTOP, rectDummy, this, TX_TASKID))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_edit_Actuator.Create(WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, IDC_EDIT_RUNNER_NAME))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_edit_TVIP.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP, CRect(0,0,135,23), this, LABLE_IP))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_btnModify.Create(_T("修改"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, BTN_MODIFY_RUNNER_NAME))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_btnAddAndroid.Create(_T("添加"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, BTN_ADD_ANDROID))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_btnMIInit.Create(_T("mi Init"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, BTN_MI_INIT))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_btnSCBCInit.Create(_T("scbc Init"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, BTN_SCBC_INIT))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_btnSVNUpdate.Create(_T("SAT Update"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rectDummy, this, BTN_SVN_UPDATE))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_listDevices.Create(WS_CHILD | WS_VISIBLE| LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, rectDummy, this, IDC_LIST_DEVICES))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!m_listTask.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP, rectDummy, this, IDC_LIST_TASK))
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ SetDlgItemText(IDC_EDIT_RUNNER_NAME, Global::g_Config.strActuator.c_str());
|
|
|
+
|
|
|
+ int nIndex = 0;
|
|
|
+ // 初始化设备列表;
|
|
|
+ m_listDevices.InsertColumn(nIndex, "类型");
|
|
|
+ m_listDevices.SetColumnWidth(nIndex++, 38);
|
|
|
+ m_listDevices.InsertColumn(nIndex, "TV名称");
|
|
|
+ m_listDevices.SetColumnWidth(nIndex++, 115);
|
|
|
+ m_listDevices.InsertColumn(nIndex, "状态");
|
|
|
+ m_listDevices.SetColumnWidth(nIndex++, 38);
|
|
|
+ m_listDevices.SetExtendedStyle(m_listDevices.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
|
|
|
+
|
|
|
+ // 初始化任务列表;
|
|
|
+ m_listTask.InsertColumn(0, "No");
|
|
|
+ m_listTask.SetColumnWidth(0, 25);
|
|
|
+ m_listTask.InsertColumn(1, "脚本名称");
|
|
|
+ m_listTask.SetColumnWidth(1, 130);
|
|
|
+ m_listTask.InsertColumn(2, "执行状态");
|
|
|
+ m_listTask.SetColumnWidth(2, 60);
|
|
|
+ m_listTask.InsertColumn(3, "结果状态");
|
|
|
+ m_listTask.SetColumnWidth(3, 60);
|
|
|
+ m_listTask.InsertColumn(4, "日志");
|
|
|
+ m_listTask.SetColumnWidth(4, 55);
|
|
|
+ m_listTask.SetExtendedStyle(m_listTask.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
|
|
|
+
|
|
|
+ COLORREF color = RGB(0x87, 0xCE, 0xFA);
|
|
|
+ // 修改按钮默认样式;
|
|
|
+ m_btnModify.m_bTransparent = FALSE;
|
|
|
+ m_btnModify.m_bDontUseWinXPTheme = TRUE;
|
|
|
+ // 设置背景色;
|
|
|
+ m_btnModify.SetFaceColor(color, TRUE);
|
|
|
+ // 消除单击时黑色内圈;
|
|
|
+ m_btnModify.m_bDrawFocus = FALSE;
|
|
|
+ // 设置按钮扁平样式;
|
|
|
+ m_btnModify.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
|
|
|
+ // 设置鼠标形状;
|
|
|
+ m_btnModify.SetMouseCursorHand();
|
|
|
+
|
|
|
+ m_btnAddAndroid.m_bTransparent = FALSE;
|
|
|
+ m_btnAddAndroid.m_bDontUseWinXPTheme = TRUE;
|
|
|
+ // 设置背景色;
|
|
|
+ m_btnAddAndroid.SetFaceColor(color, TRUE);
|
|
|
+ // 消除单击时黑色内圈;
|
|
|
+ m_btnAddAndroid.m_bDrawFocus = FALSE;
|
|
|
+ // 设置按钮扁平样式;
|
|
|
+ m_btnAddAndroid.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
|
|
|
+ // 设置鼠标形状;
|
|
|
+ m_btnAddAndroid.SetMouseCursorHand();
|
|
|
+
|
|
|
+ //color = RGB(0x87, 0xCE, 0xFA);
|
|
|
+ m_btnMIInit.m_bTransparent = FALSE;
|
|
|
+ m_btnMIInit.m_bDontUseWinXPTheme = TRUE;
|
|
|
+ // 设置背景色;
|
|
|
+ m_btnMIInit.SetFaceColor(color, TRUE);
|
|
|
+ // 消除单击时黑色内圈;
|
|
|
+ m_btnMIInit.m_bDrawFocus = FALSE;
|
|
|
+ // 设置按钮扁平样式;
|
|
|
+ m_btnMIInit.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
|
|
|
+ // 设置鼠标形状;
|
|
|
+ m_btnMIInit.SetMouseCursorHand();
|
|
|
+
|
|
|
+ m_btnSCBCInit.m_bTransparent = FALSE;
|
|
|
+ m_btnSCBCInit.m_bDontUseWinXPTheme = TRUE;
|
|
|
+ // 设置背景色;
|
|
|
+ m_btnSCBCInit.SetFaceColor(color, TRUE);
|
|
|
+ // 消除单击时黑色内圈;
|
|
|
+ m_btnSCBCInit.m_bDrawFocus = FALSE;
|
|
|
+ // 设置按钮扁平样式;
|
|
|
+ m_btnSCBCInit.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
|
|
|
+ // 设置鼠标形状;
|
|
|
+ m_btnSCBCInit.SetMouseCursorHand();
|
|
|
+
|
|
|
+ color = RGB(237, 28, 36);
|
|
|
+ m_btnSVNUpdate.m_bTransparent = FALSE;
|
|
|
+ m_btnSVNUpdate.m_bDontUseWinXPTheme = TRUE;
|
|
|
+ // 设置背景色;
|
|
|
+ m_btnSVNUpdate.SetFaceColor(color, TRUE);
|
|
|
+ // 消除单击时黑色内圈;
|
|
|
+ m_btnSVNUpdate.m_bDrawFocus = FALSE;
|
|
|
+ // 设置按钮扁平样式;
|
|
|
+ m_btnSVNUpdate.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
|
|
|
+ // 设置鼠标形状;
|
|
|
+ m_btnSVNUpdate.SetMouseCursorHand();
|
|
|
}
|
|
|
|
|
|
CDevicesWnd::~CDevicesWnd()
|
|
@@ -49,6 +194,18 @@ CDevicesWnd::~CDevicesWnd()
|
|
|
BEGIN_MESSAGE_MAP(CDevicesWnd, CDockablePane)
|
|
|
ON_WM_CREATE()
|
|
|
ON_WM_SIZE()
|
|
|
+ // 按钮;
|
|
|
+ ON_COMMAND(BTN_MODIFY_RUNNER_NAME, OnBtnActuatorClick)
|
|
|
+ ON_UPDATE_COMMAND_UI(BTN_MODIFY_RUNNER_NAME, OnUpdateBtnActuator)
|
|
|
+ ON_COMMAND(BTN_ADD_ANDROID, OnBtnAddTVIPClick)
|
|
|
+ ON_UPDATE_COMMAND_UI(BTN_ADD_ANDROID, OnUpdateBtnAddTVIP)
|
|
|
+ ON_COMMAND(BTN_MI_INIT, OnBtnMiInitClick)
|
|
|
+ ON_UPDATE_COMMAND_UI(BTN_MI_INIT, OnUpdateBtnMiInit)
|
|
|
+ ON_COMMAND(BTN_SCBC_INIT, OnBtnScbcInitClick)
|
|
|
+ ON_UPDATE_COMMAND_UI(BTN_SCBC_INIT, OnUpdateBtnScbcInit)
|
|
|
+ ON_COMMAND(BTN_SVN_UPDATE, OnBtnSATUpdateClick)
|
|
|
+ ON_UPDATE_COMMAND_UI(BTN_SVN_UPDATE, OnUpdateBtnSATUpdate)
|
|
|
+ // end
|
|
|
ON_COMMAND(ID_EXPAND_ALL, OnExpandAllProperties)
|
|
|
ON_UPDATE_COMMAND_UI(ID_EXPAND_ALL, OnUpdateExpandAllProperties)
|
|
|
ON_COMMAND(ID_SORTPROPERTIES, OnSortProperties)
|
|
@@ -60,8 +217,11 @@ BEGIN_MESSAGE_MAP(CDevicesWnd, CDockablePane)
|
|
|
ON_WM_SETFOCUS()
|
|
|
ON_WM_SETTINGCHANGE()
|
|
|
ON_WM_PAINT()
|
|
|
-
|
|
|
+ ON_WM_CTLCOLOR()
|
|
|
ON_WM_CONTEXTMENU()
|
|
|
+ ON_COMMAND(ID_DEVICES_DEL, &CDevicesWnd::OnDevicesDel)
|
|
|
+ ON_NOTIFY(NM_DBLCLK, IDC_LIST_TASK, &CDevicesWnd::OnNMDblclkListTask)
|
|
|
+ ON_NOTIFY(NM_RCLICK, IDC_LIST_DEVICES, &CDlgService::OnNMRClickListDevices)
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
@@ -73,11 +233,93 @@ void CDevicesWnd::AdjustLayout()
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+#if 0
|
|
|
CRect rectClient;
|
|
|
GetClientRect(rectClient);
|
|
|
m_dlgService.SetWindowPos(nullptr, rectClient.left, rectClient.top, rectClient.Width() - 5, rectClient.Height(), SWP_NOACTIVATE);
|
|
|
-
|
|
|
+#else
|
|
|
+ CRect rcCtrl;
|
|
|
+ // 获取窗口大小;
|
|
|
+ CRect rectClient;
|
|
|
+ // 控件;
|
|
|
+ GetClientRect(&rectClient);
|
|
|
+
|
|
|
+ int nWidth = 0;
|
|
|
+ const int dr = 3; // 行间距
|
|
|
+ const int dc = 5; // 列间距;
|
|
|
+ const int top = 10; // 离顶部距离;
|
|
|
+ const int margin = 6;
|
|
|
+ int nHeight = top;
|
|
|
+
|
|
|
+ // 第一行;
|
|
|
+ m_lb_Actuator.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_lb_Actuator.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + top, rcCtrl.Width(), m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ nWidth = rcCtrl.Width() + margin + dc;
|
|
|
+
|
|
|
+ m_edit_Actuator.SetWindowPos(nullptr, nWidth, rectClient.top + top, (rectClient.Width() - nWidth - dc - margin) * 5 / 7, m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ m_edit_Actuator.GetWindowRect(rcCtrl);
|
|
|
+ nWidth += rcCtrl.Width() + dc;
|
|
|
+
|
|
|
+ m_btnModify.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_btnModify.SetWindowPos(nullptr, nWidth, rectClient.top + top, rectClient.Width() - nWidth - margin, m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ nHeight += m_nNormalHeight + dr;
|
|
|
+
|
|
|
+ // 第二行;
|
|
|
+ m_lb_IP.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_lb_IP.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, rcCtrl.Width(), m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ nWidth = rcCtrl.Width() + margin + dc;
|
|
|
+
|
|
|
+ m_edit_TVIP.SetWindowPos(nullptr, nWidth, rectClient.top + nHeight, (rectClient.Width() - nWidth - dc - margin) * 5 / 7, m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ m_edit_TVIP.GetWindowRect(rcCtrl);
|
|
|
+ nWidth += rcCtrl.Width() + dc;
|
|
|
+
|
|
|
+ m_btnAddAndroid.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_btnAddAndroid.SetWindowPos(nullptr, nWidth, rectClient.top + nHeight, rectClient.Width() - nWidth - margin, m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ nHeight += m_nNormalHeight + dr;
|
|
|
+
|
|
|
+ // 第三行;
|
|
|
+ m_listDevices.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, rectClient.Width() - margin*2, 120, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ m_listDevices.GetWindowRect(rcCtrl);
|
|
|
+ nHeight += 120 + dr;
|
|
|
+
|
|
|
+ // 第四行;
|
|
|
+ nWidth = (rectClient.Width() - margin * 2 - dc * 2) / 3;
|
|
|
+ m_btnMIInit.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_btnMIInit.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, nWidth, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+
|
|
|
+ m_btnMIInit.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_btnSCBCInit.SetWindowPos(nullptr, rectClient.left + margin + nWidth + dc, rectClient.top + nHeight, nWidth, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+
|
|
|
+ m_btnSCBCInit.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_btnSVNUpdate.SetWindowPos(nullptr, rectClient.left + margin + nWidth * 2 + dc * 2, rectClient.top + nHeight, nWidth, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ nHeight += rcCtrl.Height() + 30;
|
|
|
+
|
|
|
+ // 第五行;
|
|
|
+ m_lb_TaskId.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ nWidth = rcCtrl.Width();
|
|
|
+ m_lb_TaskId.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, rcCtrl.Width(), m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+
|
|
|
+
|
|
|
+ m_edit_TaskId.SetWindowPos(nullptr, rcCtrl.right + dc, rectClient.top + nHeight, rectClient.Width() - 2 * nWidth - margin * 2 - dc * 2, m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ m_edit_TaskId.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+
|
|
|
+ m_lb_TaskStatus.SetWindowPos(nullptr, rcCtrl.right + dc, rectClient.top + nHeight, nWidth, m_nNormalHeight, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+ nHeight += rcCtrl.Height() + dr;
|
|
|
+
|
|
|
+ // 第六行;
|
|
|
+ m_listTask.GetWindowRect(rcCtrl);
|
|
|
+ ScreenToClient(&rcCtrl);
|
|
|
+ m_listTask.SetWindowPos(nullptr, rectClient.left + margin, rectClient.top + nHeight, rectClient.Width() - margin*2, rectClient.Height() - nHeight - 10, SWP_NOACTIVATE | SWP_NOZORDER);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
int CDevicesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
@@ -91,12 +333,15 @@ int CDevicesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
|
// 创建组合:
|
|
|
const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_BORDER | CBS_SORT | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
|
|
|
|
|
|
+#if 0
|
|
|
if (!m_dlgService.Create(IDD_DLG_SERVICE, this))
|
|
|
{
|
|
|
TRACE0("未能创建遥控器主窗口 \n");
|
|
|
return -1; // 未能创建
|
|
|
}
|
|
|
m_dlgService.ShowWindow(SW_SHOW);
|
|
|
+#endif
|
|
|
+ InitCtrl();
|
|
|
|
|
|
// 设置最小窗体;
|
|
|
SetMinSize((530, 260));
|
|
@@ -104,6 +349,91 @@ int CDevicesWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
|
// 校正布局;
|
|
|
AdjustLayout();
|
|
|
|
|
|
+ SetCtrlFont();
|
|
|
+
|
|
|
+
|
|
|
+ std::thread t([](CDevicesWnd* p) {
|
|
|
+ while (!p->m_bEnd)
|
|
|
+ {
|
|
|
+ std::this_thread::sleep_for(std::chrono::milliseconds(2500));
|
|
|
+ {
|
|
|
+ CSATClient::GetInstance()->TCPQueryDevices(FALSE);
|
|
|
+ int nIndex = 0;
|
|
|
+ TCHAR szValue[MAX_PATH] = { 0 };
|
|
|
+ p->m_listDevices.DeleteAllItems();
|
|
|
+ for (std::vector<SATPROTO::Device>::iterator it = SATData::devices.begin(); it != SATData::devices.end(); it++) {
|
|
|
+ _itoa_s(nIndex, szValue, 10);
|
|
|
+ p->m_listDevices.InsertItem(nIndex, szValue);
|
|
|
+ if (it->nType == 0)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 0, "虚拟");
|
|
|
+ else if (it->nType == 1)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 0, "USB");
|
|
|
+ else if (it->nType == 2)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 0, "网络");
|
|
|
+ // 名称;
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 1, it->szName);
|
|
|
+
|
|
|
+ if (it->nStatus == 0)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 2, "在线");
|
|
|
+ else if (it->nStatus == 1)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 2, "离线");
|
|
|
+ else if (it->nStatus == 2)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 2, "掉线");
|
|
|
+ else if (it->nStatus == 3)
|
|
|
+ p->m_listDevices.SetItemText(nIndex, 2, "未认证");
|
|
|
+ nIndex++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ OutputDebugString("退出刷新设备线程\n");
|
|
|
+ }, this);
|
|
|
+ t.detach();
|
|
|
+
|
|
|
+ std::thread t2([](CDevicesWnd* p) {
|
|
|
+ while (!p->m_bEnd)
|
|
|
+ {
|
|
|
+ std::this_thread::sleep_for(std::chrono::milliseconds(10000));
|
|
|
+ {
|
|
|
+ CSATClient::GetInstance()->TCPQueryTasks(FALSE);
|
|
|
+ int nIndex = 0;
|
|
|
+ p->m_listTask.DeleteAllItems();
|
|
|
+ TCHAR szValue[MAX_PATH] = { 0 };
|
|
|
+
|
|
|
+ for (int i = 0; i < SATData::task_resp.nSize; i++) {
|
|
|
+ // 任务编号;
|
|
|
+ p->m_edit_TaskId.SetWindowText(_T(""));
|
|
|
+ p->m_edit_TaskId.SetWindowText(SATData::task_resp.ssTasks[i].szTaskNo);
|
|
|
+ // 任务状态;
|
|
|
+ p->m_lb_TaskStatus.SetWindowText(_T(""));
|
|
|
+ p->m_lb_TaskStatus.SetWindowText(SATData::task_resp.ssTasks[i].szStatus);
|
|
|
+
|
|
|
+ if (SATData::task_resp.ssTasks[i].nCaseSize) {
|
|
|
+ // 遍历出所有用例;
|
|
|
+ TCHAR szIndex[8] = { 0 };
|
|
|
+ // 脚本数量;
|
|
|
+ int nSize = SATData::task_resp.ssTasks[i].nCaseSize;
|
|
|
+ if (nSize > SATPROTO::MAX_CASES)
|
|
|
+ nSize = SATPROTO::MAX_CASES;
|
|
|
+ for (int k = 0; k < nSize; k++) {
|
|
|
+ _itoa_s(k, szIndex, 10);
|
|
|
+ SATPROTO::CaseInfo& caseInfo = SATData::task_resp.ssTasks[i].ssCases[k];
|
|
|
+ p->m_listTask.InsertItem(nIndex, szIndex);
|
|
|
+ p->m_listTask.SetItemText(nIndex, 1, caseInfo.szCaseName);
|
|
|
+ p->m_listTask.SetItemText(nIndex, 2, caseInfo.szExecStatus);
|
|
|
+ p->m_listTask.SetItemText(nIndex, 3, caseInfo.szResultStatus);
|
|
|
+ p->m_listTask.SetItemText(nIndex, 4, caseInfo.szCaseLogPath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ nIndex++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ OutputDebugString("退出刷新任务线程\n");
|
|
|
+ }, this);
|
|
|
+ t2.detach();
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -166,7 +496,7 @@ void CDevicesWnd::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
|
|
|
//SetPropListFont();
|
|
|
}
|
|
|
|
|
|
-void CDevicesWnd::SetPropListFont()
|
|
|
+void CDevicesWnd::SetCtrlFont()
|
|
|
{
|
|
|
::DeleteObject(m_fntPropList.Detach());
|
|
|
|
|
@@ -185,6 +515,21 @@ void CDevicesWnd::SetPropListFont()
|
|
|
m_fntPropList.CreateFontIndirect(&lf);
|
|
|
|
|
|
//m_wndObjectCombo.SetFont(&m_fntPropList);
|
|
|
+ m_lb_Actuator.SetFont(&m_fntPropList);
|
|
|
+ m_lb_IP.SetFont(&m_fntPropList);
|
|
|
+ m_edit_Actuator.SetFont(&m_fntPropList);
|
|
|
+ m_edit_TVIP.SetFont(&m_fntPropList);
|
|
|
+ m_btnModify.SetFont(&m_fntPropList);
|
|
|
+ m_btnAddAndroid.SetFont(&m_fntPropList);
|
|
|
+ m_listDevices.SetFont(&m_fntPropList);
|
|
|
+ m_btnMIInit.SetFont(&m_fntPropList);
|
|
|
+ m_btnSCBCInit.SetFont(&m_fntPropList);
|
|
|
+ m_btnSVNUpdate.SetFont(&m_fntPropList);
|
|
|
+ m_listTask.SetFont(&m_fntPropList);
|
|
|
+
|
|
|
+ m_lb_TaskId.SetFont(&m_fntPropList);
|
|
|
+ m_edit_TaskId.SetFont(&m_fntPropList);
|
|
|
+ m_lb_TaskStatus.SetFont(&m_fntPropList);
|
|
|
}
|
|
|
|
|
|
// 如果CDockablePane无控件,改变大小时背景会刷新失败;
|
|
@@ -206,3 +551,174 @@ void CDevicesWnd::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
|
|
|
{
|
|
|
// TODO: 在此处添加消息处理程序代码
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+HBRUSH CDevicesWnd::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
|
|
+{
|
|
|
+ HBRUSH hbr = CDockablePane::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
|
+
|
|
|
+ // TODO: 在此更改 DC 的任何特性
|
|
|
+ if (nCtlColor == CTLCOLOR_STATIC || pWnd->GetDlgCtrlID() == IDC_STATIC) //静态文本颜色,并且指定控件ID号 && pWnd->GetDlgCtrlID() == IDC_STATIC
|
|
|
+ {
|
|
|
+ pDC->SetTextColor(RGB(255, 0, 0));
|
|
|
+ //pDC->SetBkColor(RGB(191,219,255)); //静态控件的背景颜色设置,红字蓝底。
|
|
|
+ pDC->SetBkMode(TRANSPARENT); //静态文本框背景设置为透明
|
|
|
+ HBRUSH brush;
|
|
|
+ brush = CreateSolidBrush(0xFFEFD5);//对话框的RGB值
|
|
|
+ hbr = (HBRUSH)brush;
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO: 如果默认的不是所需画笔,则返回另一个画笔
|
|
|
+ return hbr;
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnBtnActuatorClick()
|
|
|
+{
|
|
|
+ CString strActuator;
|
|
|
+ GetDlgItemText(IDC_EDIT_RUNNER_NAME, strActuator);
|
|
|
+
|
|
|
+ Global::g_Config.strActuator = strActuator.GetString();
|
|
|
+ WritePrivateProfileString(_T("SATService"), _T("Actuator"), strActuator, Global::g_szConfig);
|
|
|
+ CSATClient::GetInstance()->TCPLogin(Global::g_Config.strSATUserName, Global::g_Config.strSATPassword, Global::g_Config.strActuator);
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnUpdateBtnActuator(CCmdUI* pCmdUI)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnBtnAddTVIPClick()
|
|
|
+{
|
|
|
+ // 获取IP地址;
|
|
|
+ BYTE nf1, nf2, nf3, nf4;
|
|
|
+ m_edit_TVIP.GetAddress(nf1, nf2, nf3, nf4);
|
|
|
+ CString str;
|
|
|
+ str.Format("%d.%d.%d.%d", nf1, nf2, nf3, nf4);//这里的nf得到的值是IP值了
|
|
|
+ if (str.IsEmpty())
|
|
|
+ return;
|
|
|
+
|
|
|
+ CSATClient::GetInstance()->TCPAddDevice(str.GetString());
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnUpdateBtnAddTVIP(CCmdUI* pCmdUI)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnBtnMiInitClick()
|
|
|
+{
|
|
|
+ if (Global::g_Config.strMIInitBat.size())
|
|
|
+ {
|
|
|
+ //WinExec(Global::g_Config.strMIInitBat.c_str(), SW_HIDE);
|
|
|
+ ShellExecute(NULL, _T("open"), Global::g_Config.strMIInitBat.c_str(), NULL, NULL, SW_SHOW);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnUpdateBtnMiInit(CCmdUI* pCmdUI)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnBtnScbcInitClick()
|
|
|
+{
|
|
|
+ if (Global::g_Config.strSCBCInitBat.size())
|
|
|
+ {
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ //WinExec(Global::g_Config.strMIInitBat.c_str(), SW_HIDE);
|
|
|
+ ShellExecute(NULL, _T("open"), Global::g_Config.strSCBCInitBat.c_str(), NULL, NULL, SW_SHOW);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnUpdateBtnScbcInit(CCmdUI* pCmdUI)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnBtnSATUpdateClick()
|
|
|
+{
|
|
|
+ CSVNMgr::GetInstance()->Update();
|
|
|
+ if (CSVNMgr::GetInstance()->HasNewVersion())
|
|
|
+ {
|
|
|
+ // 还要更新,则表示失败;
|
|
|
+ MessageBox(_T("更新失败"), _T("更新结果:"), MB_OK | MB_ICONWARNING);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox(_T("更新成功,版本号为 ") + CSVNMgr::GetInstance()->GetVersion(), _T("更新结果:"), MB_OK);
|
|
|
+ CString strVersionInfo;
|
|
|
+ strVersionInfo.Format(_T("SATHelper 版本 %s, SAT 版本 %s"), Global::g_szVersion, CSVNMgr::GetInstance()->GetVersion());
|
|
|
+ AfxGetMainWnd()->SetWindowText(strVersionInfo);
|
|
|
+ CSVNMgr::GetInstance()->Store();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CDevicesWnd::OnUpdateBtnSATUpdate(CCmdUI* pCmdUI)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void CDevicesWnd::OnNMRClickListDevices(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
+{
|
|
|
+ LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
|
+ if (pNMListView->iItem != -1)
|
|
|
+ {
|
|
|
+ CString strType = m_listDevices.GetItemText(pNMListView->iItem, 0);
|
|
|
+ // 过滤掉虚拟设备;
|
|
|
+ if (!strType.CompareNoCase(_T("虚拟")))
|
|
|
+ return;
|
|
|
+
|
|
|
+ DWORD dwPos = GetMessagePos();
|
|
|
+ CPoint point(LOWORD(dwPos), HIWORD(dwPos));
|
|
|
+ CMenu menu;
|
|
|
+ //添加线程操作
|
|
|
+ if (!menu.LoadMenu(IDR_POPUP_DEVICES)) //这里是我们在1中定义的MENU的文件名称
|
|
|
+ return;
|
|
|
+ CMenu* popup = menu.GetSubMenu(0);
|
|
|
+ ASSERT(popup != NULL);
|
|
|
+ popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
|
|
|
+ }
|
|
|
+
|
|
|
+ *pResult = 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void CDevicesWnd::OnNMDblclkListTask(NMHDR* pNMHDR, LRESULT* pResult)
|
|
|
+{
|
|
|
+ LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ *pResult = 0;
|
|
|
+
|
|
|
+ NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
|
+ if (pNMListView->iItem != -1)
|
|
|
+ {
|
|
|
+ CString strLogPath = m_listTask.GetItemText(pNMListView->iItem, 4);
|
|
|
+ // 路径不存在,退出;
|
|
|
+ if (!PathFileExists(strLogPath))
|
|
|
+ return;
|
|
|
+
|
|
|
+ ShellExecute(NULL, _T("open"), strLogPath.GetString(), NULL, NULL, SW_SHOW);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void CDevicesWnd::OnDevicesDel()
|
|
|
+{
|
|
|
+ // TODO: 在此添加命令处理程序代码
|
|
|
+ // 获取选中的设备;
|
|
|
+ POSITION pos = m_listDevices.GetFirstSelectedItemPosition();
|
|
|
+ if (pos != NULL)
|
|
|
+ {
|
|
|
+ int nSelCur = m_listDevices.GetNextSelectedItem(pos);
|
|
|
+ if (nSelCur != -1)
|
|
|
+ {
|
|
|
+ CString strDeviceType = m_listDevices.GetItemText(nSelCur, 0);
|
|
|
+ CString strDeviceName = m_listDevices.GetItemText(nSelCur, 1);
|
|
|
+ if (!strDeviceName.IsEmpty() && strDeviceType.CompareNoCase(_T("虚拟")))
|
|
|
+ {
|
|
|
+ MessageBox(_T("即将删除设备:") + strDeviceName, _T("温馨提示!"), MB_ICONWARNING);
|
|
|
+ CSATClient::GetInstance()->TCPDelDevice(strDeviceName.GetString());
|
|
|
+ // 同时删除该项;
|
|
|
+ m_listDevices.DeleteItem(nSelCur);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|