LiFan
2025-04-24 9b3b2eb20b09e13da837a28f16e552ba70a090c4
jrj/project/business/BasicCode/Simple.Menu.Config.cpp
@@ -1,13 +1,28 @@
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);
@@ -41,50 +56,48 @@
      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);
               }
            }
            
@@ -117,132 +130,139 @@
      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();