#include "../pch/pch.h" #include "CShangpinPageUI.h" #include "../control/ControlEx.h" #include "../tool/CSqlite3.h" #include "../wnd/CMainWnd.h" #include "../wnd/CShangpinNewTypeWnd.h" CShangpinPageUI::CShangpinPageUI() { } CShangpinPageUI::~CShangpinPageUI() { } //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用 void CShangpinPageUI::InitShow() { //先初始化商品分类 this->InitFoodtypeShow(); //再初始化商品显示 this->InitFoodShow(); } void CShangpinPageUI::RefreshShow() { //初始化商品显示(因为这里要刷新商品库存状态) this->InitFoodShow(); } void CShangpinPageUI::InitFoodtypeShow() { //初始化商品渲染相关的信息 m_foodtype_mutex.lock(); m_foodtypeLayout = static_cast(this->FindSubControl(_T("shangpin_fenlei_layout"))); m_foodtypeLayout->RemoveAll(); CSqlite3 sqlite; m_types = sqlite.GetFoodtypes(); //只包含收银机显示的分类 if (m_types.size() > 0) { m_cur_type_id = m_types[0].id; } m_curFoodtypeOption = NULL; //接下来开始处理商品分类 for (std::vector::iterator it = m_types.begin(); it != m_types.end(); it++) { CFoodType type = *it; CDialogBuilder builder; CDialogBuilderCallbackEx cb; CFoodtypeOptionUI* pItem = static_cast(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager)); pItem->SetName(CLewaimaiString::UTF8ToUnicode(type.name)); pItem->SetTypeId(type.id); pItem->SetGroup(L"shangpin_foodtype"); m_foodtypeLayout->Add(pItem); if (m_cur_type_id == type.id) { m_curFoodtypeOption = pItem; } } m_foodtype_mutex.unlock(); if (m_curFoodtypeOption != NULL) { m_curFoodtypeOption->SetBkColor(0xFF3CB371); } //如果不是一个分类都没有,选中第一个分类 if (m_cur_type_id != "") { CFoodtypeOptionUI* curTypeUI = static_cast(m_foodtypeLayout->GetItemAt(0)); curTypeUI->Selected(true, false); } UpdateFoodtypePos(); } void CShangpinPageUI::UpdateFoodtypePos() { int nFoodtypeNum = m_types.size(); //添加支付方式 int nWidth = m_nPageWidth; if (nWidth == 0) { return; } //根据宽度计算每行显示的数量 int nMeihangNum = (nWidth - 321) / 140; int num = 0; m_foodtype_mutex.lock(); CHorizontalLayoutUI* pFenleiLayout = static_cast(this->FindSubControl(_T("shangpin_fenlei_layout"))); for (int i = 0; i < nFoodtypeNum; i++) { CButtonUI* curItem = static_cast(pFenleiLayout->GetItemAt(i)); int curRow = num / nMeihangNum + 1; int curCol = num % nMeihangNum + 1; RECT rect; rect.left = (curCol - 1) * 140 + 10; rect.right = rect.left + 130; rect.top = (curRow - 1) * 52 + 10; rect.bottom = rect.top + 42; // 强制设置固定大小和位置 SIZE size; size.cx = rect.left; size.cy = rect.top; curItem->SetFixedXY(size); curItem->SetFixedWidth(rect.right - rect.left); curItem->SetFixedHeight(rect.bottom - rect.top); num++; } m_foodtype_mutex.unlock(); //调整区域高度 int lastRow = (num - 1) / nMeihangNum + 1; pFenleiLayout->SetFixedHeight(lastRow * 52 + 10); //处理滚动条问题 CVerticalLayoutUI* pFenleiScrollLayout = static_cast(this->FindSubControl(_T("shangpin_fenlei_layout_scrolllayout"))); if (lastRow > 2) { lastRow = 2; } pFenleiScrollLayout->SetFixedHeight(lastRow * 52 + 10); SIZE size; size.cx = 0; size.cy = 0; pFenleiScrollLayout->SetScrollPos(size); } void CShangpinPageUI::InitFoodShow() { bool is_youtu; if (CSetting::GetInstance()->GetParam("setting_xianshi_is_youtu") == "1") { is_youtu = true; } else { is_youtu = false; } m_foodLayout = static_cast(this->FindSubControl(_T("shangpin_foodlist"))); m_foodLayout->RemoveAll(); std::wstring xml_name; if (is_youtu) { SIZE itemsize; itemsize.cx = 130; itemsize.cy = 220; m_foodLayout->SetItemSize(itemsize); xml_name = _T("shangpin_fooditem.xml"); } else { SIZE itemsize; itemsize.cx = 130; itemsize.cy = 90; m_foodLayout->SetItemSize(itemsize); xml_name = _T("shangpin_fooditem_wutu.xml"); } //如果当前一个分类都没有,那么就不处理了 if (m_cur_type_id == "") { return; } else if (m_cur_type_id == "sousuo") { if (CLewaimaiString::is_only_number(m_sousuo_foodname)) { //说明是纯数字,按商品条码来搜索 CSqlite3 sqlite; CFood food; bool ret = sqlite.GetFoodByBarcode(m_sousuo_foodname, food); if (ret) { CDialogBuilder builder; CDialogBuilderCallbackEx cb; CShangpinFoodItemUI* pItem = static_cast(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager)); pItem->SetYoutuModel(is_youtu); pItem->SetFoodInfo(food); pItem->UpdateShow(); m_foodLayout->Add(pItem); } } else { //当商品名字来搜索 CSqlite3 sqlite; std::vector foodlist = sqlite.GetFoodByFoodname(m_sousuo_foodname); for (std::vector::iterator it = foodlist.begin(); it != foodlist.end(); it++) { CFood food = *it; CDialogBuilder builder; CDialogBuilderCallbackEx cb; CShangpinFoodItemUI* pItem = static_cast(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager)); pItem->SetYoutuModel(is_youtu); pItem->SetFoodInfo(food); pItem->UpdateShow(); m_foodLayout->Add(pItem); } } } else { //选择的是普通商品分类 CSqlite3 sqlite; std::vector foodlist = sqlite.GetFoodByTypeid(m_cur_type_id); for (std::vector::iterator it = foodlist.begin(); it != foodlist.end(); it++) { CFood food = *it; CDialogBuilder builder; CDialogBuilderCallbackEx cb; CShangpinFoodItemUI* pItem = static_cast(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager)); pItem->SetYoutuModel(is_youtu); pItem->SetFoodInfo(food); pItem->UpdateShow(); m_foodLayout->Add(pItem); } } } //处理按钮点击类事件 void CShangpinPageUI::HandleClickMsg(TNotifyUI& msg) { CDuiString name = msg.pSender->GetName(); if (name == L"shangpin_fooditem") { CShangpinFoodItemUI* fooditemUI = static_cast(msg.pSender); m_cur_click_food_item = fooditemUI; this->ClickFoodAction(); } else if (name == L"shangpin_food_search_clear") { CEditUI* m_pEdit = static_cast(m_pManager->FindControl(_T("shangpin_food_search_edit"))); m_pEdit->SetText(L""); StopSerachFood(); } else if (name == L"shangpin_page_add_btn") { CShangpinCreatePageUI* page = static_cast(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_CREATE)); m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_CREATE); } else if (name == L"shangpin_page_add_type_btn") { ShowNewtype(); } } //处理option切换事件 void CShangpinPageUI::HandleSelectChangeMsg(TNotifyUI& msg) { CDuiString name = msg.pSender->GetName(); COptionUI* curOption = static_cast(msg.pSender); std::wstring groupname = curOption->GetGroup(); if (groupname == L"shangpin_foodtype") { //商品分类切换 CFoodtypeOptionUI* typeUI = static_cast(curOption); std::string id = typeUI->GetTypeId(); if (m_cur_type_id != id) { //切换了商品分类 m_curFoodtypeOption->SetBkColor(0xFFECECEC); msg.pSender->SetBkColor(0xFF3CB371); m_curFoodtypeOption = static_cast(msg.pSender); m_cur_type_id = id; this->InitFoodShow(); return; } } } //处理下拉框、radio的切换事件 void CShangpinPageUI::HandleItemSelectMsg(TNotifyUI& msg) { } //处理编辑框输入内容改变事件 void CShangpinPageUI::HandleTextChangedMsg(TNotifyUI& msg) { CDuiString name = msg.pSender->GetName(); if (name == L"shangpin_food_search_edit") { //商品搜索框的输入事件 CEditUI* m_pEdit = static_cast(m_pManager->FindControl(_T("shangpin_food_search_edit"))); std::wstring ws_Value = m_pEdit->GetText(); std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value); if (strValue.length() == 0) { //搜索词被清空了,退出搜索 this->StopSerachFood(); } else { //搜索词没清空,进入搜索 this->StartSearchFood(strValue); } } } //处理扫码枪捕捉到的扫码信息 void CShangpinPageUI::HandleTextCapture(std::string content) { } void CShangpinPageUI::ClickFoodAction() { //点击普通商品之后的处理逻辑 CFood foodinfo = m_cur_click_food_item->GetFoodInfo(); //点击了这个商品,进入商品修改页面 CShangpinUpdatePageUI* page = static_cast(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_UPDATE)); page->SetFoodinfo(foodinfo); m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_UPDATE); } //开始搜索某个商品名字 void CShangpinPageUI::StartSearchFood(std::string foodname) { //展示删除按钮 CButtonUI* pClear = static_cast(this->FindSubControl(_T("shangpin_food_search_clear"))); pClear->SetVisible(true); //隐藏商品分类展示 CVerticalLayoutUI* pFoodtype = static_cast(this->FindSubControl(_T("shangpin_fenlei_layout_scrolllayout"))); pFoodtype->SetVisible(false); if (m_cur_type_id != "sousuo") { m_type_id_before_sousuo = m_cur_type_id; } m_cur_type_id = "sousuo"; m_sousuo_foodname = foodname; CLabelUI* pTishi = static_cast(this->FindSubControl(_T("shangpin_food_search_tishi"))); pTishi->SetVisible(false); this->InitFoodShow(); } //停止搜索商品 void CShangpinPageUI::StopSerachFood() { //隐藏删除按钮 CButtonUI* pClear = static_cast(this->FindSubControl(_T("shangpin_food_search_clear"))); pClear->SetVisible(false); //展示商品分类展示 CVerticalLayoutUI* pFoodtype = static_cast(this->FindSubControl(_T("shangpin_fenlei_layout_scrolllayout"))); pFoodtype->SetVisible(true); m_cur_type_id = m_type_id_before_sousuo; CLabelUI* pTishi = static_cast(this->FindSubControl(_T("shangpin_food_search_tishi"))); pTishi->SetVisible(true); this->InitFoodShow(); } void CShangpinPageUI::SetPos(RECT rc, bool bNeedInvalidate) { m_nPageWidth = rc.right - rc.left; //更新分类位置 UpdateFoodtypePos(); CContainerUI::SetPos(rc, bNeedInvalidate); } void CShangpinPageUI::ShowNewtype() { if (m_is_show_modal_wnd == true) { return; } CShangpinNewTypeWnd* pMemoDlg = new CShangpinNewTypeWnd(); if (pMemoDlg != NULL) { m_is_show_modal_wnd = true; m_curModalWnd = pMemoDlg; pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE); pMemoDlg->SetIcon(IDI_ICON_DUILIB); pMemoDlg->CenterWindow(); UINT ret = pMemoDlg->ShowModal(); if (ret == IDOK) { //这里表示添加分类成功了,刷新分类显示 InitFoodtypeShow(); m_is_show_modal_wnd = false; delete pMemoDlg; } else { m_is_show_modal_wnd = false; delete pMemoDlg; return; } } }