|  |  | 
 |  |  | use "frame.vd" | 
 |  |  | use "publiccode.vd" | 
 |  |  | use "xcontrol.vd" | 
 |  |  | use "xtreeview.vd" | 
 |  |  | #include <wobject/xstring.hpp> | 
 |  |  | #include <xcontrol/xtreeview.hpp> | 
 |  |  | #include <xcontrol/xdwgrid.hpp> | 
 |  |  | #include <wobject/xdouble.hpp> | 
 |  |  | #include <xcontrol/xlayersheet.hpp> | 
 |  |  |  | 
 |  |  | class SimpleMenuConfig : public frame | 
 |  |  | #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" | 
 |  |  | #include "viewobject/view.base.hpp" | 
 |  |  |  | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  |  | 
 |  |  | class  __declspec(dllexport) SimpleMenuConfig : public xframe | 
 |  |  | { | 
 |  |  | public: | 
 |  |  |    xdwgrid dw_list; | 
 |  |  |    xtreeview tv_gs; | 
 |  |  |  | 
 |  |  |    xnode   m_agentNode; | 
 |  |  | public: | 
 |  |  |    SimpleMenuConfig(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} | 
 |  |  | public: | 
 |  |  |    static SimpleMenuConfig* CreateInstance(void* implPtr, void* hWnd) | 
 |  |  |    { | 
 |  |  |       SimpleMenuConfig* pWin = new SimpleMenuConfig(implPtr, (HWND)hWnd); | 
 |  |  |       return pWin; | 
 |  |  |    } | 
 |  |  |    int AddRow() | 
 |  |  |    { | 
 |  |  |       dw_list.InsertRow(0); | 
 |  |  | 
 |  |  |       int i=0; | 
 |  |  |       for(i=1; i<=dw_list.GetRowCount();i++) | 
 |  |  |       { | 
 |  |  |          string seq = dw_list.GetItemString(i, "SeqNo"); | 
 |  |  |          if(seq != i.toString()) | 
 |  |  |             dw_list.SetItemString(i, "SeqNo", i.toString()); | 
 |  |  |          xstring seq = dw_list.GetItemString(i, L"SeqNo"); | 
 |  |  |          if(seq != xstring(i)) | 
 |  |  |             dw_list.SetItemString(i, L"SeqNo", xstring(i)); | 
 |  |  |       } | 
 |  |  |        | 
 |  |  |       xml x=new xml; | 
 |  |  |       x.setNativePointer(xml::CreateInstance()); | 
 |  |  |       xaserverarg arg=new xaserverarg; | 
 |  |  |       arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |       dw_list.DwUpdateAllToEx(x.GetXmlDoc()); | 
 |  |  |       arg.AddArg("content", x.GetXml()); | 
 |  |  |       if(getUrl("/workflow/action/ItemPictureMenu.dbmap/bill.update", arg.GetString(), x) != 1) | 
 |  |  |          alert("保存失败!"); | 
 |  |  |       xml x; | 
 |  |  | 		 | 
 |  |  |       xaserverarg arg; | 
 |  |  | 			 | 
 |  |  |       dw_list.DwUpdateAllToEx(x); | 
 |  |  |       arg.AddArg(L"content", x.xml()); | 
 |  |  |       if(getUrl(L"/workflow/action/ItemPictureMenu.dbmap/bill.update", arg.GetString(), x) != 1) | 
 |  |  |          alert(L"保存失败!"); | 
 |  |  |       else | 
 |  |  |       { | 
 |  |  |          string str = x.GetXml(); | 
 |  |  |          xstring str = x.xml(); | 
 |  |  |          //alert(str); | 
 |  |  |          if(str.find("失败", 0) > 0) | 
 |  |  |             alert("保存失败!"); | 
 |  |  |          if(str.find(L"失败", 0) > 0) | 
 |  |  |             alert(L"保存失败!"); | 
 |  |  |          else | 
 |  |  |          { | 
 |  |  |             //alert("保存成功!"); | 
 |  |  |             //alert(L"保存成功!"); | 
 |  |  |             dw_list.ResetUpdateStatus(); | 
 |  |  |             dw_list.DwUpdateAllToEx(x.GetXmlDoc()); | 
 |  |  |             int hItem = xtreeview::GetSelectedItem(tv_gs.GetId()); | 
 |  |  |             if(hItem > 0) | 
 |  |  |             dw_list.DwUpdateAllToEx(x); | 
 |  |  |             HTREEITEM hItem =tv_gs.GetSelectedItem(); | 
 |  |  |             if(hItem) | 
 |  |  |             { | 
 |  |  |                msxml::IXMLDOMElement e =  x.GetXmlDoc().documentElement; | 
 |  |  |                int p = trust(e as int); | 
 |  |  |                xtreeview::SetItemData(tv_gs.GetId(), hItem, p); | 
 |  |  |                KXMLDOMElement e =  x.documentElement(); | 
 |  |  |                tv_gs.SetItemData(hItem, e); | 
 |  |  |              | 
 |  |  |                while(xtreeview::GetChildItem(tv_gs.GetId(), hItem) > 0) | 
 |  |  |                   xtreeview::DeleteItem(tv_gs.GetId(), xtreeview::GetChildItem(tv_gs.GetId(), hItem)); | 
 |  |  |                while(tv_gs.GetChildItem( hItem)) | 
 |  |  |                   tv_gs.DeleteItem(tv_gs.GetChildItem( hItem)); | 
 |  |  |              | 
 |  |  |                msxml::IXMLDOMNodeList li =  x.GetXmlDoc().selectNodes("item/item"); | 
 |  |  |                int s = li.length; | 
 |  |  |                KXMLDOMNodeList li =  x.selectNodes(L"item/item"); | 
 |  |  |                int s = li.length(); | 
 |  |  |                for(i=0;i<s;i++) | 
 |  |  |                { | 
 |  |  |                   msxml::IXMLDOMElement ele =  li.item(i); | 
 |  |  |                   int pa = trust(ele as int); | 
 |  |  |                   string name = ele.selectSingleNode("Name").text; | 
 |  |  |                   int cItem = xtreeview::InsertChildItem(tv_gs.GetId(), hItem, name, pa, 15); | 
 |  |  |                   if(ele.selectSingleNode("item")) | 
 |  |  |                      xtreeview::SetItemChild1(tv_gs.GetId(), cItem, 1); | 
 |  |  |                   KXMLDOMElement ele =  li.item(i); | 
 |  |  |                   xstring name = ele.selectSingleNode(L"Name").text(); | 
 |  |  |                   HTREEITEM cItem =tv_gs.InsertChildItem( hItem, name, ele, 15); | 
 |  |  |                   if(ele.selectSingleNode(L"item")) | 
 |  |  |                      tv_gs.SetItemChild1(cItem, 1); | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  |              | 
 |  |  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |                    | 
 |  |  |    int OnCmdDispatch(string comdid) | 
 |  |  |    int OnCmdDispatch(xstring comdid) | 
 |  |  |    { | 
 |  |  |       int hCursor = xutil::SetCursorWait(); | 
 |  |  |       if(comdid == "AddRow")  AddRow(); | 
 |  |  |       else if(comdid == "InsertRow")  InsertRow(); | 
 |  |  |       else if(comdid == "DeleteRow")  DeleteRow(); | 
 |  |  |       else if(comdid == "Save")  Save(); | 
 |  |  |       else if(comdid == "UpRow")  UpRow(); | 
 |  |  |       else if(comdid == "DownRow")  DownRow(); | 
 |  |  |       HCURSOR hCursor = xutil::SetCursorWait(); | 
 |  |  |       if(comdid == L"AddRow")  AddRow(); | 
 |  |  |       else if(comdid == L"InsertRow")  InsertRow(); | 
 |  |  |       else if(comdid == L"DeleteRow")  DeleteRow(); | 
 |  |  |       else if(comdid == L"Save")  Save(); | 
 |  |  |       else if(comdid == L"UpRow")  UpRow(); | 
 |  |  |       else if(comdid == L"DownRow")  DownRow(); | 
 |  |  |       xutil::RestoreCursor(hCursor); | 
 |  |  |       return 0; | 
 |  |  |    }       | 
 |  |  |  | 
 |  |  |    int SetAgent() | 
 |  |  |    { | 
 |  |  |       string xfNodeAgentArea  = "agentarea"; | 
 |  |  |       xstring xfNodeAgentArea = L"agentarea"; | 
 |  |  |       xnode anode = GetAgentNode(xfNodeAgentArea); | 
 |  |  |       msxml::IXMLDOMElement xframeElement =  GetElement(); | 
 |  |  |       msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"/*"); | 
 |  |  |       if(agent) | 
 |  |  |       if (m_agentNode) | 
 |  |  |       { | 
 |  |  |          string s = agent.xml; | 
 |  |  |          SetAgentNodeContent(anode,s); | 
 |  |  |          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(ref TEvent evt,int p) | 
 |  |  |    int OnSetFocus(TEvent* evt, LPARAM p) | 
 |  |  |    {       | 
 |  |  |       SetAgent()   ;    | 
 |  |  |       return 1; | 
 |  |  |    }       | 
 |  |  |     | 
 |  |  |    int OnXCommand(ref TXCommandEvent evt,int p) | 
 |  |  |    int OnXCommand(TEvent* evt, LPARAM param) | 
 |  |  |    { | 
 |  |  |       return OnCmdDispatch(evt.pStrID); | 
 |  |  |    }	 | 
 |  |  |       return OnCmdDispatch(evt->xcommand.pStrID); | 
 |  |  |    } | 
 |  |  |        | 
 |  |  |    int OnTreeSelChanged(ref TNotifyEvent evt,int p) | 
 |  |  |    int OnTreeSelChanged(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |       ref NMTREEVIEW nmtv = cast(evt.pnmh as NMTREEVIEW); | 
 |  |  |       int hItem = nmtv.itemNew.hItem; | 
 |  |  |       msxml::IXMLDOMElement e =  trust(xtreeview::GetItemData(tv_gs.GetId(), hItem) as msxml::IXMLDOMElement); | 
 |  |  |       //trace("%s", e.xml); | 
 |  |  |       //string id = e.selectSingleNode("MenuID").text; | 
 |  |  | 		 | 
 |  |  |       NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; | 
 |  |  |       HTREEITEM hItem = nmtv.itemNew.hItem; | 
 |  |  |       KXMLDOMElement e = tv_gs.GetItemData(hItem); | 
 |  |  |       //trace(L"%s", e.xml); | 
 |  |  |       //xstring id = e.selectSingleNode(L"MenuID").text(); | 
 |  |  |       dw_list.AcceptText(); | 
 |  |  |       dw_list.Retrieve(e); | 
 |  |  |       dw_list.Redraw(); | 
 |  |  |       return 1; | 
 |  |  |    }    | 
 |  |  |  | 
 |  |  |    int OnTreeMoveNode(ref TNotifyEvent evt,int p)	 | 
 |  |  |    int OnTreeMoveNode(TEvent* evt, LPARAM p)	 | 
 |  |  |    { | 
 |  |  |       ref TVNNMHDR nmtv = trust(evt.pnmh as ref TVNNMHDR); | 
 |  |  |       int xfrom = nmtv.FromItem; | 
 |  |  |       int xto = nmtv.ToItem; | 
 |  |  |       TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh; | 
 |  |  |       HTREEITEM xfrom = nmtv.FromItem; | 
 |  |  |       HTREEITEM xto = nmtv.ToItem; | 
 |  |  |        | 
 |  |  |       int ret = xwin::MessageBox(this.GetHWND(), "确定移动节点!","提示:",1); | 
 |  |  |       int ret = MessageBox(GetHWND(), L"确定移动节点!",L"提示:",1); | 
 |  |  |       //trace(ret); | 
 |  |  |       if(ret == 2) | 
 |  |  |       { | 
 |  |  |          xtreeview::DeleteItem(tv_gs.GetId(), xto); | 
 |  |  |          tv_gs.DeleteItem(xto); | 
 |  |  |          return -1; | 
 |  |  |       } | 
 |  |  |       KXMLDOMElement fid = tv_gs.GetItemData(xto); | 
 |  |  |       HTREEITEM xpto =tv_gs.GetParentItem(xto); | 
 |  |  |       KXMLDOMElement tid = tv_gs.GetItemData(xto); | 
 |  |  |       //trace(L"%s-------------------------%s",fid.xml,tid.xml); | 
 |  |  |       xml x ; | 
 |  |  |        | 
 |  |  |       msxml::IXMLDOMElement fid = trust(xtreeview::GetItemData(tv_gs.GetId(), xfrom) as msxml::IXMLDOMElement); | 
 |  |  |       int xpto = xtreeview::GetParentItem(tv_gs.GetId(), xto); | 
 |  |  |       msxml::IXMLDOMElement tid = trust(xtreeview::GetItemData(tv_gs.GetId(), xpto) as msxml::IXMLDOMElement); | 
 |  |  |       //trace("%s-------------------------%s",fid.xml,tid.xml); | 
 |  |  |       xml x = new xml; | 
 |  |  |       x.setNativePointer(xml::CreateInstance()); | 
 |  |  |       xaserverarg arg=new xaserverarg; | 
 |  |  |       arg.setNativePointer(arg.CreateInstance());		 | 
 |  |  |       xaserverarg arg; | 
 |  |  | 				 | 
 |  |  |        | 
 |  |  |       string id1 = fid.selectSingleNode("@guid").text; | 
 |  |  |       string id2 = tid.selectSingleNode("@guid").text; | 
 |  |  |       //trace("%s-------------------------%s",id1,id2); | 
 |  |  |       string str = "update ItemPictureMenu set parentid='"+id2+"' where menuid='"+id1+"' "; | 
 |  |  |       str += " select 1 for xml path('root')"; | 
 |  |  |       xstring id1 = fid.selectSingleNode(L"@guid").text(); | 
 |  |  |       xstring id2 = tid.selectSingleNode(L"@guid").text(); | 
 |  |  |       //trace(L"%s-------------------------%s",id1,id2); | 
 |  |  |       xstring str = L"update ItemPictureMenu set parentid='"+id2+L"' where menuid='"+id1+L"' "; | 
 |  |  |       str += L" select 1 for xml path('root')L"; | 
 |  |  |        | 
 |  |  |       arg.AddArg("sql", str); | 
 |  |  |       arg.AddArg(L"sql", str); | 
 |  |  |       if(getSql(arg.GetString(),x)!=1) | 
 |  |  |       { | 
 |  |  |          trace("error:"+x.GetXml()); | 
 |  |  |          alert("移动节点出错!"); | 
 |  |  |          xtreeview::DeleteItem(tv_gs.GetId(), xto); | 
 |  |  |          trace(L"error:"+(xstring)x.xml()); | 
 |  |  |          alert(L"移动节点出错!"); | 
 |  |  |          tv_gs.DeleteItem(xto); | 
 |  |  |          return 0; | 
 |  |  |       } | 
 |  |  |       //trace("================"); | 
 |  |  |       //trace(L"================L"); | 
 |  |  |       // | 
 |  |  |       int xpfrom = xtreeview::GetParentItem(tv_gs.GetId(), xfrom); | 
 |  |  |       trace("%d", xpfrom); | 
 |  |  |       msxml::IXMLDOMElement fe = trust(xtreeview::GetItemData(tv_gs.GetId(), xpfrom) as msxml::IXMLDOMElement); | 
 |  |  |       //trace("%s-------------------------%s",fe.xml,tid.xml); | 
 |  |  |       msxml::IXMLDOMElement fe1 = fe.selectSingleNode("item[@guid='"+id1+"']"); | 
 |  |  |       HTREEITEM xpfrom =tv_gs.GetParentItem(xfrom); | 
 |  |  |       //trace(L"%d", xpfrom); | 
 |  |  |       KXMLDOMElement fe = tv_gs.GetItemData(xpfrom); | 
 |  |  |       //trace(L"%s-------------------------%s",fe.xml,tid.xml); | 
 |  |  |       KXMLDOMElement fe1 = fe.selectSingleNode(L"item[@guid='"+id1+L"']"); | 
 |  |  |       fe.removeChild(fe1); | 
 |  |  |       tid.appendChild(fid); | 
 |  |  |        | 
 |  |  |       xtreeview::DeleteItem(tv_gs.GetId(), xfrom); | 
 |  |  |       tv_gs.DeleteItem(xfrom); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnInitial() | 
 |  |  |    {          | 
 |  |  |       int rItem = xtreeview::GetRootItem(tv_gs.GetId()); | 
 |  |  |       xtreeview::ExpandItemEx(tv_gs.GetId(), rItem); | 
 |  |  |       xtreeview::ItemFocus(tv_gs.GetId(), rItem); | 
 |  |  |       HTREEITEM rItem =tv_gs.GetRootItem(); | 
 |  |  |       tv_gs.ExpandItemEx( rItem); | 
 |  |  |       tv_gs.ItemFocus(rItem); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |        | 
 |  |  |    int OnAttachEvent() | 
 |  |  |    { | 
 |  |  |       AttachEvent("WM_XCOMMAND",OnXCommand); | 
 |  |  |       AttachEvent("WM_SETFOCUS",OnSetFocus); | 
 |  |  |       AttachEvent("tv_gs","TVN_SELCHANGED",OnTreeSelChanged); | 
 |  |  |       AttachEvent("tv_gs", "TVN_ENDDRAG",OnTreeMoveNode); | 
 |  |  |       AttachEvent(L"WM_XCOMMAND", (FEvent)&SimpleMenuConfig::OnXCommand); | 
 |  |  |       AttachEvent(L"WM_SETFOCUS", (FEvent)&SimpleMenuConfig::OnSetFocus); | 
 |  |  |       AttachEvent(L"tv_gs",L"TVN_SELCHANGED", (FEvent)&SimpleMenuConfig::OnTreeSelChanged); | 
 |  |  |       AttachEvent(L"tv_gs", L"TVN_ENDDRAG", (FEvent)&SimpleMenuConfig::OnTreeMoveNode); | 
 |  |  |       return 1; | 
 |  |  |    }       | 
 |  |  |     | 
 |  |  |    int onload() | 
 |  |  |    { | 
 |  |  |       dw_list = GetControl("dw_list"); | 
 |  |  |       dw_list.openUrl("/sale/view/SimpleProduct/template/Simple/Menu"); | 
 |  |  |       dw_list.SetColumnState("SeqNo", false); | 
 |  |  |       dw_list = GetControl(L"dw_list"); | 
 |  |  |       dw_list.openUrl(L"/sale/view/SimpleProduct/template/Simple/Menu"); | 
 |  |  |       dw_list.SetColumnState(L"SeqNo", false); | 
 |  |  |        | 
 |  |  |       tv_gs = GetControl("tv_gs"); | 
 |  |  |       tv_gs = GetControl(L"tv_gs"); | 
 |  |  |        | 
 |  |  |       SetAgent(); | 
 |  |  |       OnAttachEvent(); |