xj qian
2024-07-16 7a91c3a1ed37b0332d4ff0ebeae60bd6da3665c0
jrj/project/business/BasicCode/Simple.Menu.Config.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,276 @@
#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) 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);
      return 1;
   }
   int InsertRow()
   {
      dw_list.AcceptText();
      int row = dw_list.GetRow();
      if(row < 1 || row >dw_list.GetRowCount())
         AddRow();
      else
         dw_list.InsertRow(row);
      return 1;
   }
   int DeleteRow()
   {
      dw_list.AcceptText();
      int row = dw_list.GetRow();
      if(row < 1 || row >dw_list.GetRowCount())
         return 1;
      dw_list.DeleteRow(row);
      return 1;
   }
   int Save()
   {
      dw_list.AcceptText();
      int i=0;
      for(i=1; i<=dw_list.GetRowCount();i++)
      {
         xstring seq = dw_list.GetItemString(i, L"SeqNo");
         if(seq != xstring(i))
            dw_list.SetItemString(i, L"SeqNo", xstring(i));
      }
      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
      {
         xstring str = x.xml();
         //alert(str);
         if(str.find(L"失败", 0) > 0)
            alert(L"保存失败!");
         else
         {
            //alert(L"保存成功!");
            dw_list.ResetUpdateStatus();
            dw_list.DwUpdateAllToEx(x);
            HTREEITEM hItem =tv_gs.GetSelectedItem();
            if(hItem > 0)
            {
               KXMLDOMElement e =  x.documentElement();
               int p = trust(e);
               tv_gs.SetItemData(hItem, p);
               while(tv_gs.GetChildItem( hItem) > 0)
                  tv_gs.DeleteItem(tv_gs.GetChildItem( hItem));
               KXMLDOMNodeList li =  x.selectNodes(L"item/item");
               int s = li.length();
               for(i=0;i<s;i++)
               {
                  KXMLDOMElement ele =  li.item(i);
                  int pa = trust(ele);
                  xstring name = ele.selectSingleNode(L"Name").text();
                  HTREEITEM cItem =tv_gs.InsertChildItem( hItem, name, pa, 15);
                  if(ele.selectSingleNode(L"item"))
                     tv_gs.SetItemChild1(cItem, 1);
               }
            }
         }
      }
      return 1;
   }
   int UpRow()
   {
      dw_list.AcceptText();
      int row = dw_list.GetRow();
      if(row < 2 || row > dw_list.GetRowCount())
         return 1;
      dw_list.SetRowMove(row, -1);
      dw_list.SetRow(row - 1);
      dw_list.Redraw();
      return 1;
   }
   int DownRow()
   {
      dw_list.AcceptText();
      int row = dw_list.GetRow();
      if(row < 1 || row > dw_list.GetRowCount() - 1)
         return 1;
      dw_list.SetRowMove(row, 1);
      dw_list.SetRow(row + 1);
      dw_list.Redraw();
      return 1;
   }
   int OnCmdDispatch(xstring comdid)
   {
      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()
   {
      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 OnXCommand(TEvent* evt, LPARAM param)
   {
      return OnCmdDispatch(evt->xcommand.pStrID);
   }
   int OnTreeSelChanged(TEvent* evt, LPARAM p)
   {
      NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
      HTREEITEM hItem = nmtv.itemNew.hItem;
      KXMLDOMElement& e = *(KXMLDOMElement*)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(TEvent* evt, LPARAM p)
   {
      TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
      HTREEITEM xfrom = nmtv.FromItem;
      HTREEITEM xto = nmtv.ToItem;
      int ret = MessageBox(GetHWND(), L"确定移动节点!",L"提示:",1);
      //trace(ret);
      if(ret == 2)
      {
         tv_gs.DeleteItem(xto);
         return -1;
      }
      KXMLDOMElement& fid = *(KXMLDOMElement*)tv_gs.GetItemData(xto);
      HTREEITEM xpto =tv_gs.GetParentItem(xto);
      KXMLDOMElement& tid = *(KXMLDOMElement*)tv_gs.GetItemData(xto);
      //trace(L"%s-------------------------%s",fid.xml,tid.xml);
      xml x ;
      xaserverarg arg;
      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(L"sql", str);
      if(getSql(arg.GetString(),x)!=1)
      {
         trace(L"error:"+(xstring)x.xml());
         alert(L"移动节点出错!");
         tv_gs.DeleteItem(xto);
         return 0;
      }
      //trace(L"================L");
      //
      HTREEITEM xpfrom =tv_gs.GetParentItem(xfrom);
      //trace(L"%d", xpfrom);
      KXMLDOMElement& fe = *(KXMLDOMElement*)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);
      tv_gs.DeleteItem(xfrom);
      return 1;
   }
   int OnInitial()
   {
      HTREEITEM rItem =tv_gs.GetRootItem();
      tv_gs.ExpandItemEx( rItem);
      tv_gs.ItemFocus(rItem);
      return 1;
   }
   int OnAttachEvent()
   {
      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(L"dw_list");
      dw_list.openUrl(L"/sale/view/SimpleProduct/template/Simple/Menu");
      dw_list.SetColumnState(L"SeqNo", false);
      tv_gs = GetControl(L"tv_gs");
      SetAgent();
      OnAttachEvent();
      OnInitial();
      return 1;
   }
};