| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- #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<CHorizontalLayoutUI*>(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<CFoodType>::iterator it = m_types.begin(); it != m_types.end(); it++)
- {
- CFoodType type = *it;
- CDialogBuilder builder;
- CDialogBuilderCallbackEx cb;
- CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(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<CFoodtypeOptionUI*>(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<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
- for (int i = 0; i < nFoodtypeNum; i++)
- {
- CButtonUI* curItem = static_cast<CButtonUI*>(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;
- curItem->SetFloat(true);
- curItem->SetPos(rect);
- num++;
- }
- m_foodtype_mutex.unlock();
- //调整区域高度
- int lastRow = (num - 1) / nMeihangNum + 1;
- pFenleiLayout->SetFixedHeight(lastRow * 52 + 10);
- //处理滚动条问题
- CVerticalLayoutUI* pFenleiScrollLayout = static_cast<CVerticalLayoutUI*>(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<CTileLayoutUI*>(this->FindSubControl(_T("shangpin_foodlist")));
- m_foodLayout->RemoveAll();
- std::wstring xml_name;
- if (is_youtu)
- {
- SIZE itemsize;
- itemsize.cx = 140;
- itemsize.cy = 230;
- m_foodLayout->SetItemSize(itemsize);
- xml_name = _T("shangpin_fooditem.xml");
- }
- else
- {
- SIZE itemsize;
- itemsize.cx = 140;
- itemsize.cy = 100;
- 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<CShangpinFoodItemUI*>(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<CFood> foodlist = sqlite.GetFoodByFoodname(m_sousuo_foodname);
- for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
- {
- CFood food = *it;
- CDialogBuilder builder;
- CDialogBuilderCallbackEx cb;
- CShangpinFoodItemUI* pItem = static_cast<CShangpinFoodItemUI*>(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<CFood> foodlist = sqlite.GetFoodByTypeid(m_cur_type_id);
- for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
- {
- CFood food = *it;
- CDialogBuilder builder;
- CDialogBuilderCallbackEx cb;
- CShangpinFoodItemUI* pItem = static_cast<CShangpinFoodItemUI*>(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<CShangpinFoodItemUI*>(msg.pSender);
- m_cur_click_food_item = fooditemUI;
- this->ClickFoodAction();
- }
- else if (name == L"shangpin_food_search_clear")
- {
- CEditUI* m_pEdit = static_cast<CEditUI*>(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<CShangpinCreatePageUI*>(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<COptionUI*>(msg.pSender);
- std::wstring groupname = curOption->GetGroup();
- if (groupname == L"shangpin_foodtype")
- {
- //商品分类切换
- CFoodtypeOptionUI* typeUI = static_cast<CFoodtypeOptionUI*>(curOption);
- std::string id = typeUI->GetTypeId();
- if (m_cur_type_id != id)
- {
- //切换了商品分类
- m_curFoodtypeOption->SetBkColor(0xFFECECEC);
- msg.pSender->SetBkColor(0xFF3CB371);
- m_curFoodtypeOption = static_cast<CControlUI*>(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<CEditUI*>(m_pManager->FindControl(_T("shangpin_food_search_edit")));
- wstring ws_Value = m_pEdit->GetText();
- 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<CShangpinUpdatePageUI*>(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<CButtonUI*>(this->FindSubControl(_T("shangpin_food_search_clear")));
- pClear->SetVisible(true);
- //隐藏商品分类展示
- CVerticalLayoutUI* pFoodtype = static_cast<CVerticalLayoutUI*>(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<CLabelUI*>(this->FindSubControl(_T("shangpin_food_search_tishi")));
- pTishi->SetVisible(false);
- this->InitFoodShow();
- }
- //停止搜索商品
- void CShangpinPageUI::StopSerachFood()
- {
- //隐藏删除按钮
- CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("shangpin_food_search_clear")));
- pClear->SetVisible(false);
- //展示商品分类展示
- CVerticalLayoutUI* pFoodtype = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout_scrolllayout")));
- pFoodtype->SetVisible(true);
- m_cur_type_id = m_type_id_before_sousuo;
- CLabelUI* pTishi = static_cast<CLabelUI*>(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;
- }
- }
- }
|