From 6dc80508b1c0f431007f8a8c947c152ec00c3d15 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期一, 08 九月 2025 09:24:05 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/Servo/CPageGlassList.cpp |  573 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 573 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/Servo/CPageGlassList.cpp b/SourceCode/Bond/Servo/CPageGlassList.cpp
new file mode 100644
index 0000000..4a35061
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageGlassList.cpp
@@ -0,0 +1,573 @@
+锘�// CPageGlassList.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "CPageGlassList.h"
+#include "afxdialogex.h"
+#include "GlassJson.h"
+
+
+#define PAGE_SIZE						100
+#define PAGE_BACKGROUND_COLOR			RGB(252, 252, 255)
+
+// CPageGlassList 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CPageGlassList, CDialogEx)
+
+CPageGlassList::CPageGlassList(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_PAGE_GLASS_LIST, pParent)
+{
+	m_crBkgnd = PAGE_BACKGROUND_COLOR;
+	m_hbrBkgnd = nullptr;
+	m_pObserver = nullptr;
+
+	m_strStatus = "";
+	m_strKeyword = "";
+	m_nCurPage = 0;
+	m_nTotalPages = 0;
+
+	memset(m_szTimeStart, 0, sizeof(m_szTimeStart));
+	memset(m_szTimeEnd, 0, sizeof(m_szTimeEnd));
+	m_szTimeStart[0] = '\0';
+	m_szTimeEnd[0] = '\0';
+}
+
+CPageGlassList::~CPageGlassList()
+{
+	if (m_hbrBkgnd != nullptr) {
+		::DeleteObject(m_hbrBkgnd);
+	}
+	if (m_pObserver != nullptr) {
+		m_pObserver->unsubscribe();
+		m_pObserver = nullptr;
+	}
+}
+
+void CPageGlassList::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_DATETIMEPICKER_START, m_dateTimeStart);
+	DDX_Control(pDX, IDC_DATETIMEPICKER_END, m_dateTimeEnd);
+	DDX_Control(pDX, IDC_LIST_ALARM, m_listCtrl);
+}
+
+
+BEGIN_MESSAGE_MAP(CPageGlassList, CDialogEx)
+	ON_WM_CTLCOLOR()
+	ON_WM_DESTROY()
+	ON_WM_SIZE()
+	ON_WM_TIMER()
+	ON_CBN_SELCHANGE(IDC_COMBO_DATETIME, &CPageGlassList::OnCbnSelchangeComboDatetime)
+	ON_CBN_SELCHANGE(IDC_COMBO_STATUS_FILTER, &CPageGlassList::OnCbnSelchangeComboStatusFilter)
+	ON_BN_CLICKED(IDC_BUTTON_SEARCH, &CPageGlassList::OnBnClickedButtonSearch)
+	ON_BN_CLICKED(IDC_BUTTON_EXPORT, &CPageGlassList::OnBnClickedButtonExport)
+	ON_BN_CLICKED(IDC_BUTTON_PREV_PAGE, &CPageGlassList::OnBnClickedButtonPrevPage)
+	ON_BN_CLICKED(IDC_BUTTON_NEXT_PAGE, &CPageGlassList::OnBnClickedButtonNextPage)
+END_MESSAGE_MAP()
+
+
+// CPageGlassList 娑堟伅澶勭悊绋嬪簭
+void CPageGlassList::InitRxWindow()
+{
+	/* code */
+	// 璁㈤槄鏁版嵁
+	IRxWindows* pRxWindows = RX_GetRxWindows();
+	pRxWindows->enableLog(5);
+	if (m_pObserver == NULL) {
+		m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
+			// onNext
+			pAny->addRef();
+			int code = pAny->getCode();
+
+			if (RX_CODE_EQ_ROBOT_TASK == code) {
+				UpdatePageData();
+			}
+
+			pAny->release();
+			}, [&]() -> void {
+				// onComplete
+			}, [&](IThrowable* pThrowable) -> void {
+				// onErrorm
+				pThrowable->printf();
+			});
+
+		theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())->subscribe(m_pObserver);
+	}
+}
+
+void CPageGlassList::Resize()
+{
+	CRect rcClient;
+	GetClientRect(&rcClient);
+
+	// ===== 甯搁噺瀹氫箟 =====
+	const int nLeft = 12;
+	const int nRight = 12;
+	const int nTop = 58;
+	const int nButtonHeight = 28;
+	const int nButtonMarginBottom = 12;
+	const int nSpacing = 8;
+	const int nButtonWidth = 80;
+	const int nLabelWidth = 100;
+
+	// ===== 鍒嗛〉鎺т欢甯冨眬 =====
+	int yBottom = rcClient.bottom - nButtonMarginBottom - nButtonHeight;
+	int xRight = rcClient.Width() - nRight;
+
+	CWnd* pBtnNext = GetDlgItem(IDC_BUTTON_NEXT_PAGE);
+	CWnd* pBtnPrev = GetDlgItem(IDC_BUTTON_PREV_PAGE);
+	CWnd* pLabelPage = GetDlgItem(IDC_LABEL_PAGE_NUMBER);
+
+	if (pBtnNext && pBtnPrev && pLabelPage) {
+		// 鑾峰彇鍒嗛〉鏂囨湰瀹藉害浼扮畻
+		//CString strLabel;
+		//GetDlgItemText(IDC_LABEL_PAGE_NUMBER, strLabel);
+		//if (strLabel.IsEmpty()) {
+		//	strLabel = _T("绗� 1 / 1 椤�");
+		//}
+		//int nCharWidth = 8;
+		//int nLabelWidth = strLabel.GetLength() * nCharWidth + 20;
+
+		// 璁剧疆鎸夐挳鍜屾爣绛句綅缃�
+		pBtnNext->MoveWindow(xRight - nButtonWidth, yBottom, nButtonWidth, nButtonHeight);
+		xRight -= nButtonWidth + nSpacing;
+
+		pLabelPage->MoveWindow(xRight - nLabelWidth, yBottom, nLabelWidth, nButtonHeight);
+		xRight -= nLabelWidth + nSpacing;
+
+		pBtnPrev->MoveWindow(xRight - nButtonWidth, yBottom, nButtonWidth, nButtonHeight);
+	}
+
+	// ===== 琛ㄦ牸鍖哄煙甯冨眬 =====
+	if (nullptr != m_listCtrl.m_hWnd) {
+		int listHeight = yBottom - nTop - nSpacing;
+		m_listCtrl.MoveWindow(nLeft, nTop, rcClient.Width() - nLeft - nRight, listHeight);
+	}
+}
+
+void CPageGlassList::InitStatusCombo()
+{
+	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_STATUS_FILTER);
+	if (nullptr != pComboBox) {
+		pComboBox->ResetContent();
+		pComboBox->AddString(_T("鍏ㄩ儴"));
+		pComboBox->AddString(_T("Ready"));
+		pComboBox->AddString(_T("Running"));
+		pComboBox->AddString(_T("Error"));
+		pComboBox->AddString(_T("Abort"));
+		pComboBox->AddString(_T("Completed"));
+		pComboBox->SetCurSel(0);
+	}
+}
+
+void CPageGlassList::InitTimeRangeCombo()
+{
+	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_DATETIME);
+	if (nullptr != pComboBox) {
+		pComboBox->ResetContent();
+		pComboBox->AddString(_T("涓嶉檺"));
+		pComboBox->AddString(_T("浠婂ぉ"));
+		pComboBox->AddString(_T("涓冨ぉ鍐�"));
+		pComboBox->AddString(_T("鏈湀"));
+		pComboBox->AddString(_T("浠婂勾"));
+		pComboBox->AddString(_T("鑷畾涔�"));
+		pComboBox->SetCurSel(0);
+	}
+}
+
+void CPageGlassList::InitDateTimeControls()
+{
+	if (m_dateTimeStart.m_hWnd == nullptr || m_dateTimeEnd.m_hWnd == nullptr) {
+		return;
+	}
+
+	// 绂佺敤鍒濆鐘舵��
+	m_dateTimeStart.EnableWindow(FALSE);
+	m_dateTimeEnd.EnableWindow(FALSE);
+
+	// 璁剧疆鏍煎紡锛氭樉绀烘棩鏈� + 鏃堕棿
+	//m_dateTimeStart.SetFormat(_T("yyyy/MM/dd HH:mm:ss"));
+	//m_dateTimeEnd.SetFormat(_T("yyyy/MM/dd HH:mm:ss"));
+
+	// 淇敼鏍峰紡浠ユ敮鎸佹椂闂存牸寮�
+	//DWORD dwStyleStart = m_dateTimeStart.GetStyle();
+	//DWORD dwStyleEnd = m_dateTimeEnd.GetStyle();
+
+	//m_dateTimeStart.ModifyStyle(0, DTS_TIMEFORMAT | DTS_UPDOWN);
+	//m_dateTimeEnd.ModifyStyle(0, DTS_TIMEFORMAT);
+}
+
+void CPageGlassList::LoadTransfers()
+{
+	m_nCurPage = 1;
+	UpdatePageData();
+}
+
+void CPageGlassList::UpdatePageData()
+{
+	/*
+	TransferData filter;
+	filter.strStatus = m_strStatus;
+	filter.strDescription = m_strKeyword;
+	filter.strCreateTime = m_szTimeStart;
+	filter.strEndTime = m_szTimeEnd;
+	auto vecData = TransferManager::getInstance().getTransfers(filter, m_nCurPage, PAGE_SIZE);
+	FillDataToListCtrl(vecData);
+
+	int nTotalRecords = TransferManager::getInstance().getFilteredTransferCount(filter);
+	m_nTotalPages = (nTotalRecords + PAGE_SIZE - 1) / PAGE_SIZE;
+	UpdatePageControls();
+	*/
+}
+
+void CPageGlassList::UpdatePageControls()
+{
+	CString strPage;
+	strPage.Format(_T("绗� %d / %d 椤�"), m_nCurPage, m_nTotalPages);
+	SetDlgItemText(IDC_LABEL_PAGE_NUMBER, strPage);
+	GetDlgItem(IDC_BUTTON_PREV_PAGE)->EnableWindow(m_nCurPage > 1);
+	GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurPage < m_nTotalPages);
+
+	Resize();
+}
+
+void CPageGlassList::UpdateDateFilter()
+{
+	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_DATETIME);
+	if (nullptr != pComboBox) {
+		int nIndex = pComboBox->GetCurSel();
+		if (nIndex == 0) {
+			memset(m_szTimeStart, 0, sizeof(m_szTimeStart));
+			memset(m_szTimeEnd, 0, sizeof(m_szTimeEnd));
+			m_szTimeStart[0] = '\0';
+			m_szTimeEnd[0] = '\0';
+		}
+		else {
+			CTime time = CTime::GetCurrentTime();
+			if (nIndex == 1) {
+				sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d 00:00:00", time.GetYear(), time.GetMonth(), time.GetDay());
+				sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", time.GetYear(), time.GetMonth(), time.GetDay());
+			}
+			else if (nIndex == 2) {
+				CTime time2 = time - CTimeSpan(7, 0, 0, 0);
+				sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d 00:00:00", time2.GetYear(), time2.GetMonth(), time2.GetDay());
+				sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", time.GetYear(), time.GetMonth(), time.GetDay());
+			}
+			else if (nIndex == 3) {
+				sprintf_s(m_szTimeStart, 64, "%d-%02d-01 00:00:00", time.GetYear(), time.GetMonth());
+				sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", time.GetYear(), time.GetMonth(), time.GetDay());
+			}
+			else if (nIndex == 4) {
+				sprintf_s(m_szTimeStart, 64, "%d-01-01 00:00:00", time.GetYear());
+				sprintf_s(m_szTimeEnd, 64, "%d-12-31 23:59:59", time.GetYear());
+			}
+			else if (nIndex == 5) {
+				SYSTEMTIME t1, t2;
+				m_dateTimeStart.GetTime(&t1);
+				m_dateTimeEnd.GetTime(&t2);
+				//sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d %02d:%02d:%02d", t1.wYear, t1.wMonth, t1.wDay, t1.wHour, t1.wMinute, t1.wSecond);
+				//sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d %02d:%02d:%02d", t2.wYear, t2.wMonth, t2.wDay, t2.wHour, t2.wMinute, t2.wSecond);
+
+				sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d 00:00:00", t1.wYear, t1.wMonth, t1.wDay);
+				sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", t2.wYear, t2.wMonth, t2.wDay);
+			}
+		}
+	}
+}
+
+/*
+void CPageGlassList::FillDataToListCtrl(const std::vector<TransferData>& vecData)
+{
+	if (m_listCtrl.m_hWnd == nullptr) {
+		return;
+	}
+
+	m_listCtrl.DeleteAllItems();
+	for (const auto& item : vecData) {
+		InsertTransferData(item);
+	}
+}
+
+void CPageGlassList::InsertTransferData(const TransferData& data)
+{
+	if (m_listCtrl.m_hWnd == nullptr) {
+		return;
+	}
+
+	int nIndex = m_listCtrl.GetItemCount();
+	if (nIndex < 0) {
+		return;
+	}
+
+	int nItem = m_listCtrl.InsertItem(nIndex, _T(""));
+	CString str;
+	str.Format(_T("%d"), data.nRecordId);
+	m_listCtrl.SetItemText(nItem, 1, str);
+	m_listCtrl.SetItemText(nItem, 2, CString(data.strStatus.c_str()));
+	m_listCtrl.SetItemText(nItem, 3, CString(data.strClassID.c_str()));
+	m_listCtrl.SetItemText(nItem, 4, CString(data.strCreateTime.c_str()));
+	m_listCtrl.SetItemText(nItem, 5, CString(data.strPickTime.c_str()));
+	m_listCtrl.SetItemText(nItem, 6, CString(data.strPlaceTime.c_str()));
+	m_listCtrl.SetItemText(nItem, 7, CString(data.strEndTime.c_str()));
+	m_listCtrl.SetItemText(nItem, 8, CString(data.strDescription.c_str()));
+}
+*/
+// CPageTransferLog 娑堟伅澶勭悊绋嬪簭
+
+BOOL CPageGlassList::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	// TODO:  鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+	SetTimer(1, 3000, nullptr);
+
+	// 涓嬫媺妗嗘帶浠�
+	InitStatusCombo();
+	InitTimeRangeCombo();
+
+	// 鏃ユ湡鎺т欢
+	InitDateTimeControls();
+
+	// 鎶ヨ〃鎺т欢
+	CString strIniFile, strItem;
+	strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+
+	DWORD dwStyle = m_listCtrl.GetExtendedStyle();
+	dwStyle |= LVS_EX_FULLROWSELECT;
+	dwStyle |= LVS_EX_GRIDLINES;
+	m_listCtrl.SetExtendedStyle(dwStyle);
+
+	HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
+	ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL);
+
+	CString headers[] = { 
+		_T(""), 
+		_T("Cassette Sequence No"),
+		_T("Job Sequence No"),
+		_T("Class ID"),
+		_T("鐗╂枡绫诲瀷"),
+		_T("鐘舵��"),
+		_T("宸ヨ壓寮�濮嬫椂闂�"), 
+		_T("宸ヨ壓缁撴潫鏃堕棿"),
+		_T("閭﹀畾Glass ID"),
+		_T("AOI妫�娴嬬粨鏋�"),
+		_T("璺緞"),
+		_T("宸ヨ壓鍙傛暟") 
+	};
+	int widths[] = { 0, 80, 80, 100, 120, 120, 120, 120, 200, 200, 200, 200 };
+	for (int i = 0; i < _countof(headers); ++i) {
+		strItem.Format(_T("Col_%d_Width"), i);
+		widths[i] = GetPrivateProfileInt("GlassListCtrl", strItem, widths[i], strIniFile);
+		m_listCtrl.InsertColumn(i, headers[i], LVCFMT_LEFT, widths[i]);
+	}
+	m_listCtrl.SetColumnWidth(10, LVSCW_AUTOSIZE_USEHEADER);
+
+
+	// 璁$畻鎬婚〉鏁�
+	/*
+	int nTotalRecords = TransferManager::getInstance().getTotalTransferCountAll();
+	m_nTotalPages = (nTotalRecords + PAGE_SIZE - 1) / PAGE_SIZE;
+	m_nCurPage = 1;
+	*/
+
+	Resize();
+	LoadTransfers();
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+	// 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+HBRUSH CPageGlassList::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	if (nCtlColor == CTLCOLOR_STATIC) {
+		pDC->SetBkColor(m_crBkgnd);
+	}
+
+	if (m_hbrBkgnd == nullptr) {
+		m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
+	}
+
+	return m_hbrBkgnd;
+}
+
+void CPageGlassList::OnDestroy()
+{
+	CDialogEx::OnDestroy();
+	if (m_hbrBkgnd != nullptr) {
+		::DeleteObject(m_hbrBkgnd);
+		m_hbrBkgnd = nullptr;
+	}
+	if (m_pObserver != nullptr) {
+		m_pObserver->unsubscribe();
+		m_pObserver = nullptr;
+	}
+
+	// 淇濆瓨鍒楀
+	CString strIniFile, strItem, strTemp;
+	strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+	CHeaderCtrl* pHeader = m_listCtrl.GetHeaderCtrl();
+	for (int i = 0; i < pHeader->GetItemCount(); i++) {
+		RECT rect;
+		pHeader->GetItemRect(i, &rect);
+		strItem.Format(_T("Col_%d_Width"), i);
+		strTemp.Format(_T("%d"), rect.right - rect.left);
+		WritePrivateProfileString("GlassListCtrl", strItem, strTemp, strIniFile);
+	}
+}
+
+void CPageGlassList::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+	Resize();
+}
+
+void CPageGlassList::OnTimer(UINT_PTR nIDEvent)
+{
+	if (nIDEvent == 1) {
+		KillTimer(1);
+		InitRxWindow();
+	}
+	CDialogEx::OnTimer(nIDEvent);
+}
+
+void CPageGlassList::OnCbnSelchangeComboDatetime()
+{
+	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_DATETIME);
+	int nIndex = pComboBox->GetCurSel();
+	int nCount = pComboBox->GetCount();
+	m_dateTimeStart.EnableWindow(nIndex == nCount - 1);
+	m_dateTimeEnd.EnableWindow(nIndex == nCount - 1);
+
+	// 鏇存柊鏃ユ湡杩囨护鍣ㄥ拰椤甸潰鏁版嵁
+	UpdateDateFilter();
+	LoadTransfers();
+}
+
+void CPageGlassList::OnCbnSelchangeComboStatusFilter()
+{
+	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_STATUS_FILTER);
+	int nIndex = pComboBox->GetCurSel();
+	if (nIndex == 0) {
+		m_strStatus.clear();
+	}
+	else {
+		CString cstrText;
+		pComboBox->GetLBText(nIndex, cstrText);
+		m_strStatus = CT2A(cstrText);
+	}
+	LoadTransfers();
+}
+
+void CPageGlassList::OnBnClickedButtonSearch()
+{
+	// 鑾峰彇鍏抽敭瀛楄緭鍏ユ鍐呭
+	CString strKeyword;
+	GetDlgItemText(IDC_EDIT_KEYWORD, strKeyword);
+	m_strKeyword = CT2A(strKeyword);
+
+	// 鏇存柊鏃ユ湡杩囨护鍣ㄥ拰椤甸潰鏁版嵁
+	UpdateDateFilter();
+	LoadTransfers();
+}
+
+void CPageGlassList::OnBnClickedButtonExport()
+{
+	CFileDialog fileDialog(FALSE, _T("csv"), NULL, OFN_HIDEREADONLY, _T("CSV Files (*.csv)|*.csv||"));
+	if (fileDialog.DoModal() != IDOK) {
+		return;
+	}
+
+	CStdioFile file;
+	if (!file.Open(fileDialog.GetPathName(), CFile::modeCreate | CFile::modeWrite | CFile::typeText)) {
+		AfxMessageBox(_T("鍒涘缓鏂囦欢澶辫触锛�"));
+		return;
+	}
+
+	CString strHeader = _T("浠诲姟ID,鐘舵��,ClassID,鍒涘缓鏃堕棿,鍙栫墖鏃堕棿,鏀剧墖鏃堕棿,缁撴潫鏃堕棿,鎻忚堪\n");
+	file.WriteString(strHeader);
+
+	for (int i = 0; i < m_listCtrl.GetItemCount(); ++i) {
+		CString row;
+		for (int j = 1; j <= 8; ++j) {
+			row += m_listCtrl.GetItemText(i, j);
+			if (j != 8) {
+				row += ",";
+			}
+		}
+		row += "\n";
+		file.WriteString(row);
+	}
+	file.Close();
+}
+
+void CPageGlassList::OnBnClickedButtonPrevPage()
+{
+	SERVO::CGlass g;
+	g.setID("GLS-001");
+	g.setType(SERVO::MaterialsType::G1);
+	g.setOriginPort(1, 5);
+	g.setScheduledForProcessing(TRUE);
+	g.m_failReason = "none";
+	g.markQueued();
+	g.markStart();
+
+
+	// 娣诲姞鍙傛暟
+	CParam p1("鏍℃瀵逛綅寤舵椂", "P001", "ms", 123);
+	CParam p2("娓╁害", "P002", "degC", 25.5);
+	g.getParams().push_back(p1);
+	g.getParams().push_back(p2);
+
+	// 璁剧疆 JobDataS
+	SERVO::CJobDataS* js = g.getJobDataS();
+	js->setCassetteSequenceNo(10);
+	js->setJobSequenceNo(20);
+	js->setLotId("LOT-ABC");
+	js->setGlass1Id("GLS-001");
+
+	// 娣诲姞 Path
+	g.addPath(100, 1);
+	SERVO::CPath* tail = g.getPath()->getTailPath();
+	tail->setInTime(111111);
+	tail->setOutTime(222222);
+	tail->setInspResult(SERVO::InspResult::Pass);
+	tail->processEnd();
+	return;
+	// 2. 杞负 JSON
+	std::string jsonText = GlassJson::ToPrettyString(g);
+	TRACE("搴忓垪鍖栫粨鏋�:\n%s\n\n", jsonText.c_str());
+
+	// 3. 鍙嶅簭鍒楀寲
+	SERVO::CGlass g2;
+	std::string err;
+	if (!GlassJson::FromString(jsonText, g2, &err)) {
+		TRACE("瑙f瀽澶辫触: %s\n", err.c_str());
+		return;
+	}
+
+	// 4. 鎵撳嵃楠岃瘉
+	TRACE("鍙嶅簭鍒楀寲鍚庣殑ID: %s\n", g2.getID().c_str());
+	TRACE("鍙嶅簭鍒楀寲鍚庣殑鍙傛暟鏁伴噺: %d\n", (int)g2.getParams().size());
+	if (!g2.getParams().empty()) {
+		TRACE("绗竴涓弬鏁板悕: %s 鍊�=%d\n",
+			g2.getParams()[0].getName().c_str(),
+			g2.getParams()[0].getIntValue());
+	}
+
+
+
+	if (m_nCurPage > 1) {
+		m_nCurPage--;
+		UpdatePageData();
+	}
+	
+}
+
+void CPageGlassList::OnBnClickedButtonNextPage()
+{
+	if (m_nCurPage < m_nTotalPages) {
+		m_nCurPage++;
+		UpdatePageData();
+	}
+}
\ No newline at end of file

--
Gitblit v1.9.3