| #include <wobject/xstring.hpp> | 
| #include <xcontrol/xtreeview.hpp> | 
| #include <xcontrol/xdwgrid.hpp> | 
| #include <wobject/xdouble.hpp> | 
| #include <xcontrol/xlayersheet.hpp> | 
|   | 
| #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" | 
| #include "viewobject/view.base.hpp" | 
|   | 
| using xml = KXMLDOMDocument; | 
| class __declspec(dllexport) SKUItem : public xframe | 
| { | 
| public: | 
|     xtreeview    tv_1; | 
|     xdwgrid    dw_list; | 
|     xstring     m_type; | 
|     xstring CategoryID; | 
|     xnode    m_agentNode;    //Agent Condition | 
|     xstring    m_agentCond;    //Agent Node | 
|     xstring m_searchtxt; | 
| public: | 
|     SKUItem(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} | 
| public: | 
|     static SKUItem* CreateInstance(void* implPtr, void* hWnd) | 
|     { | 
|         SKUItem* pWin = new SKUItem(implPtr, (HWND)hWnd); | 
|         return pWin; | 
|     } | 
|     int SetAgent() | 
|     { | 
|         xstring xfNodeAgentArea = L"agentarea"; | 
|         xnode anode = GetAgentNode(xfNodeAgentArea); | 
|         if (m_agentNode) | 
|         { | 
|             SetAgentNode(anode, m_agentNode); | 
|         } | 
|         else | 
|         { | 
|             KXMLDOMElement xframeElement = GetElement(); | 
|             KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); | 
|             if (agent) | 
|             { | 
|                 xstring s = agent.xml(); | 
|                 m_agentNode = SetAgentNode(anode, s); | 
|             } | 
|         } | 
|         return 1; | 
|     } | 
|   | 
|     //½¹µã¼¤»î´¦Àíº¯Êý | 
|     int OnSetFocus(TEvent* evt, LPARAM p) | 
|     { | 
|         SetAgent(); | 
|   | 
|         //ÖØÖù¤¾ßÌõ | 
|         return 1; | 
|     } | 
|   | 
|     int  OnReTrieve() | 
|     { | 
|         xstring query = L"[SKUItem.tree.xq]"; | 
|         xml x; | 
|   | 
|         xaserverarg arg; | 
|   | 
|         arg.AddArg(L"parentID", CategoryID); | 
|         arg.AddArg(L"query", L""); | 
|         if (xaserver::ExecXQuery(GetServerUrl(), query, arg.GetString(), x) != 1) | 
|         { | 
|             trace(x.text()); | 
|             return -1; | 
|         } | 
|         else | 
|         { | 
|             dw_list.openUrl(L"ÆäËûÉèÖÃ.vface/template/other/SKUItem"); | 
|             dw_list.Retrieve(x); | 
|             dw_list.Redraw(); | 
|         } | 
|         return 1; | 
|     } | 
|   | 
|     int OnTreeSelChanged(TEvent* evt, LPARAM p) | 
|     { | 
|         NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; | 
|         HTREEITEM sitem = nmtv.itemNew.hItem; | 
|   | 
|         HCURSOR hCursor = xutil::SetCursorWait(); | 
|         dw_list.AcceptText(); | 
|         xml z; | 
|   | 
|         z.loadXML(L"<root/>"); | 
|         dw_list.Retrieve(z); | 
|         dw_list.Redraw(); | 
|         dw_list.ResetUpdateStatus(); | 
|   | 
|         KXMLDOMElement ele = tv_1.GetItemData(sitem); | 
|         if (!ele.selectSingleNode(L"ID")) return 0; | 
|         CategoryID = ele.selectSingleNode(L"ID").text(); | 
|         //trace(CategoryID); | 
|         m_searchtxt = L""; | 
|   | 
|         OnReTrieve(); | 
|         xutil::RestoreCursor(hCursor); | 
|         return 1; | 
|     } | 
|   | 
|     int CreateSubTree(HTREEITEM pitem) | 
|     { | 
|         KXMLDOMElement sitemdata = tv_1.GetItemData(pitem); | 
|         xstring sHasChild = sitemdata.selectSingleNode(L"@HasChild").text();//sitemdata.getAttribute(L"HasChild");     | 
|         //trace(sHasChild); | 
|         xstring pid = sitemdata.selectSingleNode(L"ID").text(); | 
|         //trace(sHasChild+L"sdaga"+pid); | 
|         if (sHasChild == L"1") {//Êý¾ÝÓÐ×ӽڵ㠠       | 
|             HTREEITEM citem = tv_1.GetChildItem(pitem); | 
|             //alert(xstring(citem)); | 
|             if (citem == 0) {//Ê÷ÊÓͼÓÐ×Ó½Úµã | 
|                 xml x; | 
|   | 
|                 xaserverarg arg; | 
|   | 
|                 arg.AddArg(L"parentID", pid); | 
|                 arg.AddArg(L"query", L""); | 
|                 if (xaserver::ExecXQuery(GetServerUrl(), L"[SKUItem.tree.xq]", arg.GetString(), x) != 1) | 
|                 { | 
|                     trace(x.xml()); | 
|                     return 0; | 
|                 } | 
|                 //trace(x.xml()); | 
|                 auto list = x.selectNodes(L"root/SKUItem"); | 
|                 int i = 0, s = list.length(); | 
|                 KXMLDOMElement xitem; | 
|                 KXMLDOMNode d; | 
|                 for (i = 0; i < s; i++) { | 
|                     xitem = list.item(s - i - 1); | 
|                     //if(i==0)xitem.setAttribute(L"HasChild",L"1"); | 
|                     xstring Name = xitem.selectSingleNode(L"ItemName").text(); | 
|                     HTREEITEM kitem = tv_1.InsertItem(pitem, 0, Name, xitem, 15); | 
|                     //int kitem=tv_1.InsertChildItem(tv_1.GetId(), pitem,Name,xitem,15);     | 
|                     xstring HasChild = xitem.selectSingleNode(L"@HasChild").text();//item.getAttribute(L"HasChild");     | 
|                     //trace(HasChild, kitem); | 
|                     if (HasChild == L"1") | 
|                         tv_1.SetItemChild1(kitem, 1); | 
|                 } | 
|             } | 
|         } | 
|         return 1; | 
|     } | 
|     int CreateRootTree() { | 
|         xstring id = L"00000000-0000-0000-0000-000000000000"; | 
|         xml x; | 
|   | 
|         x.loadXML(L"<SKUItem HasChild='1' ><ID>" + id + L"</ID></SKUItem>"); | 
|         HTREEITEM hroot = tv_1.InsertItem(L"²úÆ·ÏîÄ¿·ÖÀà", x.documentElement(), 17); | 
|         //trace(hroot); | 
|         CreateSubTree(hroot); | 
|         tv_1.ExpandItemEx(hroot); | 
|         CategoryID = id; | 
|         OnReTrieve(); | 
|         return 1; | 
|     } | 
|     int OnTreeExpanding(TEvent* evt, int p) | 
|     { | 
|         NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; | 
|   | 
|         HTREEITEM sitem = nmtv.itemNew.hItem; | 
|         CreateSubTree(sitem); | 
|         return 1; | 
|     } | 
|     int afterSave() { | 
|         HTREEITEM hitem = tv_1.GetSelectedItem(); | 
|         if (hitem == 0) | 
|             hitem = tv_1.GetRootItem(); | 
|         int rows = dw_list.GetRowCount(); | 
|         KXMLDOMElement ele = tv_1.GetItemData(hitem); | 
|   | 
|         HTREEITEM firstChild = tv_1.GetChildItem(hitem); | 
|         while (firstChild) { | 
|             tv_1.DeleteItem(firstChild); | 
|             firstChild = tv_1.GetChildItem(hitem); | 
|         } | 
|         if (rows > 0) | 
|         { | 
|             tv_1.SetItemChild1(hitem, 1); | 
|             ele.setAttribute(L"HasChild", L"1"); | 
|             //trace(ele.xml); | 
|             tv_1.SetItemData(hitem, ele); | 
|         } | 
|         else | 
|         { | 
|             tv_1.SetItemChild1(hitem, 0); | 
|             ele.setAttribute(L"HasChild", L"0"); | 
|             //trace(ele.xml); | 
|             tv_1.SetItemData(hitem, ele); | 
|         } | 
|         CreateSubTree(hitem); | 
|         if (tv_1.GetRootItem() == hitem) | 
|             tv_1.ExpandItemEx(hitem); | 
|   | 
|         dw_list.ResetUpdateStatus(); | 
|         return 0; | 
|     } | 
|     int OnSave() | 
|     { | 
|         xml x; | 
|   | 
|         dw_list.AcceptText(); | 
|         dw_list.DwUpdateAllToEx(x); | 
|         trace(x.xml()); | 
|         xaserverarg arg; | 
|   | 
|         arg.AddArg(L"content", x.xml()); | 
|         arg.AddArg(L"dbmap", L"SKUItem.dbmap"); | 
|         if (xaserver::ExecXAction(GetServerUrl(), L"[onSave.xa]", arg.GetString(), x) != 1) | 
|         { | 
|             trace(x.documentElement().text()); | 
|             alert(L"±£´æÊ§°Ü"); | 
|         } | 
|         else { | 
|             alert(L"±£´æ³É¹¦"); | 
|         } | 
|         dw_list.ResetUpdateStatus(); | 
|         dw_list.Redraw(); | 
|         afterSave(); | 
|         return 1; | 
|     } | 
|     int OnSetValue(int row) { | 
|         dw_list.SetItemString(row, L"PID", CategoryID); | 
|         dw_list.SetItemString(row, L"ID", publiccode::GetGuid()); | 
|         return 1; | 
|     } | 
|     int OnAddRow() | 
|     { | 
|         int row = dw_list.InsertRow(0); | 
|         int rows = dw_list.GetRowCount(); | 
|         OnSetValue(rows); | 
|         dw_list.SetRow(dw_list.GetRowCount()); | 
|         //trace(row.toString()); | 
|         return 1; | 
|     } | 
|   | 
|     int OnInsertRow() | 
|     { | 
|         int row = dw_list.GetRow(); | 
|         if (row<0 || row>dw_list.GetRowCount()) return 0; | 
|         dw_list.InsertRow(row); | 
|         OnSetValue(row); | 
|         dw_list.SetRow(row); | 
|         return 1; | 
|     } | 
|   | 
|     int OnDeleteRow() | 
|     { | 
|         int row = dw_list.GetRow(); | 
|         if (row<0 || row>dw_list.GetRowCount()) return 0; | 
|         dw_list.DeleteRow(row); | 
|         return 1; | 
|     } | 
|   | 
|   | 
|     //ÃüÁî·¢²¼º¯Êý | 
|     int OnCmdDispatch(xstring comdid) | 
|     { | 
|         if (comdid == L"Save")  OnSave(); | 
|         else if (comdid == L"AddRow") OnAddRow(); | 
|         else if (comdid == L"InsertRow") OnInsertRow(); | 
|         else if (comdid == L"DeleteRow") OnDeleteRow(); | 
|         return 0; | 
|     } | 
|   | 
|     //ÃüÁî´¦Àíʼþ | 
|     int OnXCommand(TEvent* evt, LPARAM param) | 
|     { | 
|         return OnCmdDispatch(evt->xcommand.pStrID); | 
|     } | 
|   | 
|     int OnAttachEvent() | 
|     { | 
|         //°ó¶¨¹¤¾ßÌõµã»÷ʼþ | 
|         AttachEvent(L"WM_XCOMMAND", (FEvent)&SKUItem::OnXCommand); | 
|         //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ | 
|         AttachEvent(L"WM_SETFOCUS", (FEvent)&SKUItem::OnSetFocus); | 
|         //»ñµÃÊ÷µÄÑ¡Ôñʼþ | 
|         AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&SKUItem::OnTreeSelChanged); | 
|         AttachEvent(L"tv_1", L"TVN_ITEMEXPANDING", (FEvent)&SKUItem::OnTreeExpanding); | 
|         return 1; | 
|     } | 
|   | 
|     int OnInitial() | 
|     { | 
|         SetAgent(); | 
|         OnAttachEvent(); | 
|         return 1; | 
|     } | 
|   | 
|     int onload() | 
|     { | 
|         m_type = L"all"; | 
|         tv_1 = GetControl(L"tv_1"); | 
|         dw_list = GetControl(L"dw_list"); | 
|         dw_list.openUrl(L"ÆäËûÉèÖÃ.vface/template/other/SKUItem"); | 
|   | 
|         OnInitial(); | 
|         CreateRootTree(); | 
|   | 
|         return 1; | 
|     } | 
| }; |