#include "../pch/pch.h" #include "OrderListUI.h" #include "CWaimaiOrderItemUI.h" #include "ControlEx.h" void OrderListUI::Refresh() { std::string url; if (m_status == 1) { url = "/waimaiorder/getopenlist"; } else if (m_status == 2) { url = "/waimaiorder/getconfirmedlist"; } else if (m_status == 3) { url = "/waimaiorder/getdeliverylist"; } else if (m_status == 4) { url = "/waimaiorder/getsucceededlist"; } else if (m_status == 5) { url = "/waimaiorder/getfailedlist"; } else if (m_status == 6) { url = "/waimaiorder/getrefundlist"; } //请求外卖的未处理订单,直接用当前的page值去请求 std::map params; params["page"] = to_string(m_page); std::string response; CZhipuziHttpClient::RequestOld(url.c_str(), params, response); //请求成功之后,清空之前的数据 this->RemoveAll(); rapidjson::Document document; document.Parse(response.c_str()); if (document.HasParseError()) { LOG_INFO("parse response error!"); return; } if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data")) { LOG_INFO("json error!"); return; } rapidjson::Value& v_errcode = document["errcode"]; int errcode = v_errcode.GetInt(); if (errcode != 0) { LOG_INFO("response failed! message:" << document["errmsg"].GetString()); return; } //获得数据成功 rapidjson::Value& data = document["data"]; rapidjson::Value& v_count = data["count"]; string count = v_count.GetString(); //处理页数 int nCount = atoi(count.c_str()); m_total_page = (int)ceil(nCount / 20.0); if (m_total_page < 1) { m_total_page = 1; } if (m_page <= 1) { m_page = 1; CButtonUI* pControl = static_cast(m_pManager->FindControl(_T("waimai_order_list_last"))); pControl->SetEnabled(false); } if (m_page >= m_total_page) { m_page = m_total_page; CButtonUI* pControl = static_cast(m_pManager->FindControl(_T("waimai_order_list_next"))); pControl->SetEnabled(false); } CLabelUI* pControl = static_cast(m_pManager->FindControl(_T("waimai_order_list_page"))); wstring pageinfo = _T("第 ") + CLewaimaiString::ANSIToUnicode(to_string(m_page)) + _T("页/共 ") + CLewaimaiString::ANSIToUnicode(to_string(m_total_page)) + _T("页"); pControl->SetText(pageinfo.c_str()); rapidjson::Value& v_rows = data["rows"]; for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i) { rapidjson::Value& v_row_i = v_rows[i]; //创建一个对象 CDialogBuilder builder; CDialogBuilderCallbackEx cb; CWaimaiOrderItemUI* pDesk = static_cast(builder.Create(_T("desk.xml"), (UINT)0, &cb, m_pManager)); if (pDesk != NULL) { //初始化该对应的数据 pDesk->SetStatus(m_status); pDesk->SetData(v_row_i); this->Add(pDesk); pDesk = NULL; } } //重置滚动条的位置 tagSIZE size; size.cx = 0; size.cy = 0; this->SetScrollPos(size); } void OrderListUI::LastPage() { m_page--; if (m_page < 1) { m_page = 1; } if (m_page == 1) { CButtonUI* pControl = static_cast(m_pManager->FindControl(_T("waimai_order_list_last"))); pControl->SetEnabled(false); } Refresh(); } void OrderListUI::NextPage() { m_page++; if (m_page > m_total_page) { m_page = m_total_page; } if (m_page == m_total_page) { CButtonUI* pControl = static_cast(m_pManager->FindControl(_T("waimai_order_list_next"))); pControl->SetEnabled(false); } Refresh(); } void OrderListUI::DoEvent(TEventUI& event) { if (!IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND) { if (m_pParent != NULL) { m_pParent->DoEvent(event); } else { CListUI::DoEvent(event); } return; } if (event.Type == UIEVENT_TIMER && event.wParam == SCROLL_TIMERID) { if ((m_uButtonState & UISTATE_CAPTURED) != 0) { POINT pt = m_pManager->GetMousePos(); LONG cy = (pt.y - m_ptLastMouse.y); m_ptLastMouse = pt; SIZE sz = GetScrollPos(); sz.cy -= cy; SetScrollPos(sz); return; } else if (m_dwDelayLeft > 0) { --m_dwDelayLeft; SIZE sz = GetScrollPos(); LONG lDeltaY = (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY); if ((lDeltaY > 0 && sz.cy != 0) || (lDeltaY < 0 && sz.cy != GetScrollRange().cy)) { sz.cy -= lDeltaY; SetScrollPos(sz); return; } } m_dwDelayDeltaY = 0; m_dwDelayNum = 0; m_dwDelayLeft = 0; m_pManager->KillTimer(this, SCROLL_TIMERID); return; } if (event.Type == UIEVENT_BUTTONDOWN && IsEnabled()) { m_uButtonState |= UISTATE_CAPTURED; m_ptLastMouse = event.ptMouse; m_dwDelayDeltaY = 0; m_dwDelayNum = 0; m_dwDelayLeft = 0; ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND))); m_pManager->SetTimer(this, SCROLL_TIMERID, 50U); return; } if (event.Type == UIEVENT_BUTTONUP) { if ((m_uButtonState & UISTATE_CAPTURED) != 0) { m_uButtonState &= ~UISTATE_CAPTURED; ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW))); if (m_ptLastMouse.y != event.ptMouse.y) { m_dwDelayDeltaY = (event.ptMouse.y - m_ptLastMouse.y); if (m_dwDelayDeltaY > 120) { m_dwDelayDeltaY = 120; } else if (m_dwDelayDeltaY < -120) { m_dwDelayDeltaY = -120; } m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5; m_dwDelayLeft = m_dwDelayNum; } else { m_pManager->KillTimer(this, SCROLL_TIMERID); } } return; } if (event.Type == UIEVENT_SCROLLWHEEL) { LONG lDeltaY = 0; if (m_dwDelayNum > 0) { lDeltaY = (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY); } switch (LOWORD(event.wParam)) { case SB_LINEUP: if (m_dwDelayDeltaY >= 0) { m_dwDelayDeltaY = lDeltaY + 8; } else { m_dwDelayDeltaY = lDeltaY + 12; } break; case SB_LINEDOWN: if (m_dwDelayDeltaY <= 0) { m_dwDelayDeltaY = lDeltaY - 8; } else { m_dwDelayDeltaY = lDeltaY - 12; } break; } if (m_dwDelayDeltaY > 100) { m_dwDelayDeltaY = 100; } else if (m_dwDelayDeltaY < -100) { m_dwDelayDeltaY = -100; } m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5; m_dwDelayLeft = m_dwDelayNum; m_pManager->SetTimer(this, SCROLL_TIMERID, 50U); return; } CListUI::DoEvent(event); }