| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- #include "../pch/pch.h"
- #include "CDiandanPageUI.h"
- #include "../control/ControlEx.h"
- #include "../tool/CSqlite3.h"
- #include "../wnd/CDiandanNatureWnd.h"
- #include "../wnd/CMemoWnd.h"
- CDiandanPageUI::CDiandanPageUI()
- {
- }
- CDiandanPageUI::~CDiandanPageUI()
- {
- }
- //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
- void CDiandanPageUI::InitShow()
- {
- m_foodLayout = static_cast<CTileLayoutUI*>(this->FindSubControl(_T("diandan_foodlist")));
- m_foodtypeLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
- CSqlite3 sqlite;
- m_nFoodpackageNum = sqlite.GetFoodpackageNum();
- m_types = sqlite.GetFoodtypes(); //只包含收银机显示的分类
- if (m_nFoodpackageNum > 0)
- {
- //默认选中的分类是商品套餐
- m_cur_type_id = "taocan";
- }
- else
- {
- //没有套餐,默认选中第一个商品分类
- if (m_types.size() > 0)
- {
- m_cur_type_id = m_types[0].id;
- }
- }
- //先初始化商品分类
- this->InitFoodtypeShow();
- //如果不是一个分类都没有,选中第一个分类
- if (m_cur_type_id != "")
- {
- CFoodtypeOptionUI* curTypeUI = static_cast<CFoodtypeOptionUI*>(m_foodtypeLayout->GetItemAt(0));
- curTypeUI->Selected(true, false);
- }
- this->RefreshFoodlist();
- }
- //处理按钮点击类事件
- void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
- {
- CDuiString name = msg.pSender->GetName();
- if (name == L"diandan_fooditem")
- {
- CDiandanFoodItemUI* fooditemUI = static_cast<CDiandanFoodItemUI*>(msg.pSender);
- m_cur_click_food_item = fooditemUI;
- this->ClickFoodAction();
- }
- else if (name == L"btn_diandan_jia")
- {
- this->ClickAdd();
- }
- else if (name == L"btn_diandan_jian")
- {
- this->ClickDel();
- }
- else if (name == L"btn_diandan_shanchu")
- {
- this->ClickRemove();
- }
- else if (name == L"btn_diandan_guige")
- {
- this->ClickGuige();
- }
- else if (name == L"btn_diandan_qingkong")
- {
- this->ClickQingkong();
- }
- else if (name == L"btn_diandan_zhengdanbeizhu")
- {
- this->ClickZhengdanMemo();
- }
- }
- //处理option切换事件
- void CDiandanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
- {
- COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
- std::wstring groupname = curOption->GetGroup();
- if (groupname == L"diandan_foodtype")
- {
- //商品分类切换
- CFoodtypeOptionUI* typeUI = static_cast<CFoodtypeOptionUI*>(curOption);
- std::string id = typeUI->GetTypeId();
- m_cur_type_id = id;
- this->RefreshFoodlist();
- }
- }
- //处理下拉框、radio的切换事件
- void CDiandanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
- {
- }
- void CDiandanPageUI::InitFoodtypeShow()
- {
- //先判断有没有套餐分类
- if (m_nFoodpackageNum > 0)
- {
- CDialogBuilder builder;
- CDialogBuilderCallbackEx cb;
- CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager));
- pItem->SetName(L"商品套餐");
- pItem->SetTypeId("taocan");
- pItem->SetTaocan();
- pItem->SetGroup(L"diandan_foodtype");
- m_foodtypeLayout->Add(pItem);
- }
- //接下来开始处理商品分类
- 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"diandan_foodtype");
- m_foodtypeLayout->Add(pItem);
- }
- }
- void CDiandanPageUI::RefreshFoodlist()
- {
- m_foodLayout->RemoveAll();
- //如果当前一个分类都没有,那么就不处理了
- if (m_cur_type_id == "")
- {
- return;
- }
- else if (m_cur_type_id == "taocan")
- {
- //选择的是套餐分类
- CSqlite3 sqlite;
- std::vector<CFoodpackage> foodlist = sqlite.GetFoodpackages(true);
- for (std::vector<CFoodpackage>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
- {
- CFoodpackage food = *it;
- CDialogBuilder builder;
- CDialogBuilderCallbackEx cb;
- CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(_T("diandan_fooditem.xml"), (UINT)0, &cb, m_pManager));
- pItem->SetFoodpackageInfo(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;
- CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(_T("diandan_fooditem.xml"), (UINT)0, &cb, m_pManager));
- pItem->SetFoodInfo(food);
- pItem->UpdateShow();
- m_foodLayout->Add(pItem);
- }
- }
- }
- void CDiandanPageUI::AddDiandanOrderItemShow(int index)
- {
- CDiandanOrderItem item = m_cur_diandan_order.getDiandanOrderItem(index);
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- CDialogBuilder builder;
- CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("diandan_cart_item.xml"), (UINT)0, NULL, m_pManager));
- pList->Add(pEle);
- CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
- pName->SetText(CLewaimaiString::UTF8ToUnicode(item.food_name).c_str());
- CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
- pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
- CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
- pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
- CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
- if (item.is_nature)
- {
- pEle->SetFixedHeight(84);
- pNature->SetVisible(true);
- pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
- }
- else
- {
- pEle->SetFixedHeight(42);
- pNature->SetVisible(false);
- }
- //更新总价显示
- CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
- pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
- }
- void CDiandanPageUI::UpdateDiandanOrderItemShow(int index)
- {
- CDiandanOrderItem item = m_cur_diandan_order.getDiandanOrderItem(index);
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(pList->GetItemAt(index));
- CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
- pName->SetText(CLewaimaiString::UTF8ToUnicode(item.food_name).c_str());
- CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
- pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
- CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
- pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
- CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
- if (item.is_nature)
- {
- pEle->SetFixedHeight(84);
- pNature->SetVisible(true);
- pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
- }
- else
- {
- pEle->SetFixedHeight(42);
- pNature->SetVisible(false);
- }
- //更新总价显示
- CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
- pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
- }
- void CDiandanPageUI::DelDiandanOrderItemShow(int index)
- {
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- pList->RemoveAt(index);
- //更新总价显示
- CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
- pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
- }
- void CDiandanPageUI::ClearDiandanOrderItemShow()
- {
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- pList->RemoveAll();
- //更新总价显示
- CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
- pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
- }
- void CDiandanPageUI::ClickFoodAction()
- {
- bool is_taocan = m_cur_click_food_item->GetIsTaocan();
- if (is_taocan)
- {
- //点击套餐之后的处理逻辑
- }
- else
- {
- //点击普通商品之后的处理逻辑
- CFood foodinfo = m_cur_click_food_item->GetFoodInfo();
- CDiandanOrderItem clickItem;
- clickItem.food_id = foodinfo.id;
- clickItem.food_name = foodinfo.name;
- clickItem.type_id = foodinfo.type_id;
- clickItem.price = foodinfo.price;
- clickItem.is_dabao = "";
- clickItem.num = "1";
- clickItem.is_foodpackage = "0";
- clickItem.is_weight = "0";
- //把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
- clickItem.SetFoodInfo(m_cur_click_food_item->GetFoodInfo());
- clickItem.SetFoodpackageInfo(m_cur_click_food_item->GetFoodpackageInfo());
- clickItem.SetIsTaocan(m_cur_click_food_item->GetIsTaocan());
- if (foodinfo.is_nature == "1")
- {
- //商品有商品属性
- clickItem.is_nature = true;
- //先弹框进行选择属性
- CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
- pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
- if (pNatureFrame != NULL)
- {
- pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
- pNatureFrame->SetIcon(IDI_ICON_DUILIB);
- pNatureFrame->CenterWindow();
- UINT ret = pNatureFrame->ShowModal();
- if (ret == IDOK)
- {
- //保存选择的属性
- std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
- clickItem.natureSelectedArray = natureSelectedArray;
- delete pNatureFrame;
- }
- else
- {
- delete pNatureFrame;
- return;
- }
- }
- }
-
- //商品没有商品属性
- bool is_add_new = false;
- int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
- if (is_add_new)
- {
- //说明是新增了一项,要刷新一下购物车展示
- this->AddDiandanOrderItemShow(index);
- }
- else
- {
- //没有新增,而是修改了一项
- this->UpdateDiandanOrderItemShow(index);
- }
- }
- }
- void CDiandanPageUI::ClickAdd()
- {
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- int nIndex = pList->GetCurSel();
- if (nIndex == -1)
- {
- return;
- }
- m_cur_diandan_order.AddNum(nIndex);
- //没有新增,而是修改了一项
- this->UpdateDiandanOrderItemShow(nIndex);
- }
- void CDiandanPageUI::ClickDel()
- {
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- int nIndex = pList->GetCurSel();
- if (nIndex == -1)
- {
- return;
- }
- bool is_del = m_cur_diandan_order.DelNum(nIndex);
- //如果是删掉了,那么就刷新显示
- if (is_del)
- {
- this->DelDiandanOrderItemShow(nIndex);
- }
- else
- {
- this->UpdateDiandanOrderItemShow(nIndex);
- }
- }
- void CDiandanPageUI::ClickRemove()
- {
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- int nIndex = pList->GetCurSel();
- if (nIndex == -1)
- {
- return;
- }
- m_cur_diandan_order.Remove(nIndex);
- this->DelDiandanOrderItemShow(nIndex);
- }
- void CDiandanPageUI::ClickGuige()
- {
- CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
- int nIndex = pList->GetCurSel();
- if (nIndex == -1)
- {
- return;
- }
- bool is_nature = m_cur_diandan_order.getDiandanOrderItem(nIndex).is_nature;
- if (!is_nature)
- {
- //当前商品没有商品属性
- return;
- }
- //弹出属性框,开始重新选择属性
- CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
- pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
- if (pNatureFrame != NULL)
- {
- pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
- pNatureFrame->SetIcon(IDI_ICON_DUILIB);
- pNatureFrame->CenterWindow();
- UINT ret = pNatureFrame->ShowModal();
- if (ret == IDOK)
- {
- //保存选择的属性
- std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
- m_cur_diandan_order.UpdateItemGuige(nIndex, natureSelectedArray);
- delete pNatureFrame;
- //然后要刷新这个item的显示
- this->UpdateDiandanOrderItemShow(nIndex);
- }
- else
- {
- return;
- }
- }
- }
- void CDiandanPageUI::ClickQingkong()
- {
- m_cur_diandan_order.Clear();
- this->ClearDiandanOrderItemShow();
- }
- void CDiandanPageUI::ClickZhengdanMemo()
- {
- CMemoWnd* pMemoDlg = new CMemoWnd();
- if (pMemoDlg != NULL)
- {
- pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
- pMemoDlg->SetIcon(IDI_ICON_DUILIB);
- pMemoDlg->CenterWindow();
- pMemoDlg->SetTitle(L"整单备注");
- UINT ret = pMemoDlg->ShowModal();
- if (ret == IDOK)
- {
- //保存选择的属性
- std::string sMemo = pMemoDlg->getMemo();
- //渲染整单备注的展示
- CLabelUI* pLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_label_zhengdanbeizhu")));
- pLabel->SetText((L"整单备注:" + CLewaimaiString::UTF8ToUnicode(sMemo)).c_str());
- //保存备注,提交订单的时候用
- m_cur_diandan_order.SetMemo(sMemo);
- delete pMemoDlg;
- }
- else
- {
- delete pMemoDlg;
- return;
- }
- }
- }
|