LiFan
2024-07-02 85ba63a61f314bbe19c678fd4ccd32ef0e253875
jrj/project/vindexform.cpp
@@ -10,6 +10,7 @@
#include "xcontrol/xcombobox.hpp"
#include "xcontrol/xlayersheet.hpp"
using xml = KXMLDOMDocument;
class __declspec(dllexport) vindexform: public xwin
{
public:
@@ -21,6 +22,20 @@
   xcombobox cbx_panelNo;
   xcombobox cbx_tab;
   xcombobox memuId; //页签数组
   xcombobox tabNo; //页签顺序数组
   xcombobox panelNo; //页签数组
   xcombobox panelName; //页签顺序数组
   int m_npHwnd; //菜单树窗口句柄
   int m_nHwnd; //菜单树窗口句柄
   int m_cursheet; //当前页签
   int menuShow;
   int m_npHwnd2; //openwindow
   int m_startwin;
public:
   vindexform(void* implPtr,HWND hWnd):xwin(implPtr,hWnd){}
public:
@@ -29,6 +44,54 @@
      return  new vindexform(implPtr,(HWND)hWnd);
   }
public:
   xstring getHomeConfig(xstring att)
   {
      xml x ;
      x.load(L"cache\\config.xml");
      //alert(x.GetXml());
      if (x.xml() == L"") return L"";
      KXMLDOMElement e = x.documentElement();
      if (e.selectSingleNode(L"home"))
      {
         KXMLDOMElement e1 = e.selectSingleNode(L"home");
         if (e1.selectSingleNode(L"@" + att))
            return e1.selectSingleNode(L"@" + att).text();
      }
      return L"";
   }
   int setHomeConfig(xstring att, xstring value)
   {
      xml x ;
      x.load(L"cache\\config.xml");
      if (x.xml() == L"")
      {
         //alert(L"<config><home "+att+L"=L"+value+L"/></config>");
         x.loadXML(L"<config><home " + att + L"='" + value + L"'/></config>");
      }
      else
      {
         KXMLDOMElement e = x.documentElement();
         if (e.selectSingleNode(L"home"))
         {
            KXMLDOMElement e1 = e.selectSingleNode(L"home");
            e1.setAttribute(att, value);
         }
         else
         {
            KXMLDOMElement e2 = x.createElement(L"home");
            e2.setAttribute(att, value);
            e.appendChild(e2);
         }
         //alert(e.xml);
      }
      //alert(x.GetXml());
      xutil::SaveToFile(L"cache\\config.xml", x.xml(), L"", L"", (LPTSTR)L"");
      return 1;
   }
   int OnDWClick(TEvent* evt, int p)
   {
      alert(L"clicked");
@@ -83,28 +146,329 @@
      
      return 1;
   }
   int OnMenuAgent(xstring f)
   {
      int LayerFlow_None = 0x00000001;
      int LayerFlow_UnLayer = 0x00000100;
      int LayerFlow_NS = 0x00000004;
      int LayerFlow_Control = 0x00000010;
      int GWL_STYLE = -16;
      int WS_POPUP = 0x80000000;
      int WS_CHILD = 0x40000000;
      int WS_MAXIMIZE = 0x00010000;
      int SW_MAXIMIZE = 3;
      int HWND_TOPMOST = -1;
      int HWND_NOTOPMOST = -2;
      int SWP_NOSIZE = 0x0001;
      int SWP_NOMOVE = 0x0002;
      int SWP_SHOWWINDOW = 0x0040;
      SetWindowPos(m_nHwnd, HWND_TOPMOST, -1000, -1000, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
      int style = GetWindowLong(m_nHwnd, GWL_STYLE);
      xnode anode = GetAgentNode(L"menuAgent");
      xnode bnode = GetAgentNode(L"xmMenu");
      int isshow = menuShow;
      if (isshow == -1)
      {
         anode.SetLayerFlow(LayerFlow_NS | LayerFlow_Control);
         bnode.SetLayerFlow(LayerFlow_None | LayerFlow_UnLayer);
         style = style - WS_POPUP;
         style = style + WS_CHILD;
         xwin::SetWindowLong(m_nHwnd, GWL_STYLE, style);
         m_npHwnd = xwin::GetParent(m_nHwnd);
         xcontrol xc = GetControl(L"menuAgent");
         xwin::SetParent(m_nHwnd, xc.GetId());
         xwin::ShowWindow(m_nHwnd, SW_MAXIMIZE);
         ///AttachEvent(L"WM_SIZE",OnMenuSizeChanged);
         //AttachEvent(L"WM_PAINT",OnMenuSizeChanged);
         //AttachEvent(L"WM_WINDOWPOSCHANGED",OnMenuSizeChanged);
      }
      else
      {
         bnode.SetLayerFlow(LayerFlow_NS | LayerFlow_Control);
         anode.SetLayerFlow(LayerFlow_None | LayerFlow_UnLayer);
         style = style + WS_POPUP;
         style = style - WS_CHILD;
         xwin::SetWindowLong(m_nHwnd, GWL_STYLE, style);
         xwin::SetParent(m_nHwnd, m_npHwnd);
         OnMenu(L"");
      }
      menuShow = -1 - isshow;
      xcombobox::SetCurSel(memuId.GetId(), menuShow);
      if (f != L"")
         setHomeConfig(L"menuposition", menuShow.toString());
      return 1;
   }
   int ResetMenu()
   {
      //if(m_nHwnd) xwin::CloseWindow(m_nHwnd);
      m_nHwnd = 0;
      menuShow = -1;
      xstring f = getHomeConfig(L"menuposition");
      if (f == L"0")
      {
         OnMenu(L"");
         OnMenuAgent(L"");
      }
      xaserverarg arg;
      int h = GetHWND();
      arg.AddArg(L"hwnd", xstring(h));
      OpenWindow(L"dev:xpage[vindexforold.vx]", arg);
      return 1;
   }
   int ReSetInfo()
   {
      xcombobox::ResetContent(memuId.GetId());
      xcombobox::ResetContent(tabNo.GetId());
      xcombobox::ResetContent(panelNo.GetId());
      xcombobox::ResetContent(panelName.GetId());
      int hItem = mainsheet.GetSheetCount();
      while (hItem > 1)
      {
         //mainsheet.DeleteSheet(hItem - 1);
         SendMessage(GetHWND(), 0x401, L"xmSheetClose", 0);
         hItem = mainsheet.GetSheetCount();
      }
      xml x;
      xaserverarg arg;
      arg.AddArg(L"Assignment", m_Assignment);
      //alert(arg.GetString());
      if (xaserver::ExecXQuery(GetServerUrl(), L"[GetSysInfo.xq]", arg.GetString(), x) != 1)
      {
         //trace(x.GetXml());
         return -1;
      }
      if (x.xml() == L"") return -1;
      KXMLDOMElement e = x.documentElement();
      if (/*m_Assignment == L"" &&*/ e.selectSingleNode(L"AssignmentID"))
      {
         xstring sInfoEx = e.selectSingleNode(L"AssignmentID").text();
         m_Assignment = sInfoEx;
      }
      if (m_Assignment == L"")
         alert(L"获取用户数据失败,请重新登录!");
      else
         xaserver::SetUserId(m_Assignment);
      xcombobox::AddItem(memuId.GetId(), L"开始");
      xcombobox::AddItem(tabNo.GetId(), L"-1");
      //OpenWindow(L"dev:xpage[vstart.vx]");
      xcontrol xc = GetControl(L"statusbar0");
      xc.SetText(L"正在初始化系统,请稍候....");
      HCURSOR hCursor = xutil::SetCursorWait();
      if (e.selectSingleNode(L"name"))
      {
         xstring sInfo = e.selectSingleNode(L"name").text();
         xc.SetText(sInfo + L"  系统版本:" + xaserver::GetVersion());
      }
      ResetMenu();
      xutil::RestoreCursor(hCursor);
      return 1;
   }
   int OnChangeLogin()
   {
      xml x;
      xaserverarg arg ;
      arg.AddArg(L"userno", xaserver::GetUserNo());
      if (xaserver::ExecXQuery(GetServerUrl(), L"[GetSysAssignment.xq]", arg.GetString(), x) != 1)
      {
         trace(x.xml());
         return -1;
      }
      if (x.xml() == L"") return -1;
      KXMLDOMElement e = x.documentElement();
      KXMLDOMNodeList li = e.selectNodes(L"item");
      int i;
      int s = li.length();
      xstring sInfo = m_Assignment;
      if (s > 0)
      {
         int m = xwin::CreatePopupMenu();
         int MF_STRING = 0x00000000;
         int MF_DISABLED = 0x00000002;
         int TPM_RIGHTBUTTON = 0x0002;
         int TPM_RETURNCMD = 0x0100;
         int MF_CHECKED = 0x8;
         for (i = 0; i < s; i++)
         {
            KXMLDOMElement xitem = li.item(i);
            xstring id = xitem.selectSingleNode(L"AssignmentID").text();
            xstring name = xitem.selectSingleNode(L"PositionName").text();
            if (sInfo == id)
               xwin::AppendMenu(m, MF_STRING | MF_CHECKED, i + 1, name);
            else
               xwin::AppendMenu(m, MF_STRING, i + 1, name);
         }
         xrect xr;
         xpoint pt;
         xwin::GetCursorPos(pt);
         int res = xwin::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), xr);
         if (res == 0) return 0;
         KXMLDOMElement ele = li.item(res - 1);
         xstring sInfoEx = ele.selectSingleNode(L"AssignmentID").text();
         if (m_Assignment == sInfoEx) return 0;
         m_Assignment = sInfoEx;
         ReSetInfo();
         /*if(m_nHwnd)
         {
            win32::CloseWindow(m_nHwnd);
         }*/
      }
      return 1;
   }
   int OnAllCaption()
   {
      int m = xwin::CreatePopupMenu();
      int MF_STRING = 0x00000000;
      int MF_DISABLED = 0x00000002;
      int TPM_RIGHTBUTTON = 0x0002;
      int TPM_RETURNCMD = 0x0100;
      int MF_CHECKED = 0x8;
      int k = mainsheet.GetSheetIndex();
      //int cs = xcombobox::GetCount(memuId.GetId());
      int cs = mainsheet.GetSheetCount();
      int i;
      for (i = 0; i < cs; i++) {
         //string str = xcombobox::GetLBText(memuId.GetId(), i);
         xstring str = mainsheet.GetSheetText(i);
         if (i == k)
            xwin::AppendMenu(m, MF_STRING | MF_CHECKED, i + 1, str);
         else
            xwin::AppendMenu(m, MF_STRING, i + 1, str);
      }
      xrect xr;
      xpoint pt;
      xwin::GetCursorPos(pt);
      int res = xwin::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, this.GetHWND(), xr);
      if (res == 0) return 0;
      int nSheet = mainsheet.GetSheetIndex();
      if (nSheet == (res - 1)) return 0;
      mainsheet.SelectSheet(res - 1);
      return 0;
   }
   int OnChangeSheet(xstring sheet)
   {
      if (sheet == L"") return 0;
      int nIndex = sheet.toInt();
      int curIndex = mainsheet.GetSheetIndex();
      if (nIndex == curIndex)
         return 0;
      mainsheet.SelectSheet(nIndex);
      return 1;
   }
   int OnMenuSizeChanged(TEvent* evt, int p)
   {
      /*xrect xr33;
      xcontrol xc = GetControl(L"menuAgent");
      xwin::GetWindowRect(xc.GetId(), xr33);
      int l = xr33.left;
      int b = xr33.right;
      int xx = b - l;*/
      //alert(xx.toString());
      int isshow = menuShow;
      if (isshow == 0)
      {
         int SW_MAXIMIZE = 3;
         xcontrol xc = GetControl(L"menuAgent");
         xwin::SetParent(m_nHwnd, xc.GetId());
         xwin::ShowWindow(m_nHwnd, SW_MAXIMIZE);
      }
      return 1;
   }
   int OnOpen(xstring pa)
   {
      //xwin::SendMessage(m_npHwnd2, 0x401, pa, 0);
      //return 1;
      /*if(xaserver::GetUserNo() == L"admin")
      {
         OpenWindow(L"dev:xpage[vstart.vx]");
         return 1;
      }*/
      int p = pa.toInt();
      xaserverarg arg ;
      xstring isnew = arg.GetArgString(L"_isNewModule");
      xstring vx = arg.GetArgString(L"_ModuelPage");
      if (isnew == L"Y")
      {
         if (vx.find(L".vx", 0) > 0 || vx.find(L".xpage", 0) > 0)
            OpenWindow(L"dev:xpage[" + vx + L"]", p);
         else
            openUrl(vx, p);
         return 1;
      }
      OpenWindow(L"dev:xpage[vindexforold.vx]", p);
      return 1;
   }
   int OnOpenForOld(xstring pa)
   {
      m_npHwnd2 = pa.toInt();
      int GWL_STYLE = -16;
      int WS_POPUP = 0x80000000;
      int WS_CHILD = 0x40000000;
      int SW_MAXIMIZE = 3;
      int style = xwin::GetWindowLong(m_npHwnd2, GWL_STYLE);
      style = style - WS_POPUP;
      style = style + WS_CHILD;
      xwin::SetWindowLong(m_npHwnd2, GWL_STYLE, style);
      xcontrol xc = GetControl(L"openforold");
      xwin::SetParent(m_npHwnd2, xc.GetId());
      xwin::ShowWindow(m_npHwnd2, SW_MAXIMIZE);
      return 1;
   }
   int OnHelp()
   {
      OpenWindow(L"dev:xpage[trade.help3.vx]");
      return 1;
   }
   int OnCmdDispatch(xstring comdid)
   {
      if (comdid == L"xmMenu") OnMenu(0);
      //else if (comdid.find(L"menuid:", 0) >= 0)
      //   return OnMenu((HWND)comdid.mid(comdid.find(L":", 0) + 1, comdid.length()).toInt());
#if 0
      if (comdid ==L "xmAssignment") OnChangeLogin();
      else if (comdid == L"xmAllCaption") OnAllCaption();
      else if (comdid == L"xmMenu") OnMenu(L"");
      else if (comdid == L"xmHelp") return OnHelp();
      else if (comdid.find("menuid:", 0) >= 0) OnMenu(comdid.mid(comdid.find(":", 0) + 1, comdid.length()));
      else if (comdid.find("menuAgent:", 0) >= 0) OnMenuAgent(comdid.mid(comdid.find(":", 0) + 1, comdid.length()));
      else if (comdid.find("changesheet:", 0) >= 0) OnChangeSheet(comdid.mid(comdid.find(":", 0) + 1, comdid.length()));
      else if (comdid.find("openforoldid:", 0) >= 0) OnOpenForOld(comdid.mid(comdid.find(":", 0) + 1, comdid.length()));
      else if (comdid.find("open:", 0) >= 0) OnOpen(comdid.mid(comdid.find(":", 0) + 1, comdid.length()));
      else if (comdid == "xmRefreshTask")
      else if (comdid.find(L"menuid:", 0) >= 0) OnMenu(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
      else if (comdid.find(L"menuAgent:", 0) >= 0) OnMenuAgent(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
      else if (comdid.find(L"changesheet:", 0) >= 0) OnChangeSheet(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
      else if (comdid.find(L"openforoldid:", 0) >= 0) OnOpenForOld(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
      else if (comdid.find(L"open:", 0) >= 0) OnOpen(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
      else if (comdid == L"xmRefreshTask")
      {
         SendMessage(m_startwin, 0x401, comdid, 0);
         return 1;
      }
#endif
      return 0;
   }
   
@@ -116,11 +480,63 @@
   int OnAttachListon()
   {
      AttachEvent(L"WM_XCOMMAND",(FEvent)&vindexform::OnXCommand,this);
      //AttachEvent("mdilayer", "LYSN_SELECTEDSHEET",OnSheetChanged);
      ////AttachEvent("mdilayer", "LYSN_CLOSESHEET",OnCloseSheet);
      //AttachEvent(L"mdilayer", L"LYSN_SELECTEDSHEET",OnSheetChanged);
      ////AttachEvent(L"mdilayer", L"LYSN_CLOSESHEET",OnCloseSheet);
      return 1;
   }
   int OnSheetChanged(TEvent* evt, int p)
   {
      ref LYSNMHDR nmtv = trust(evt.pnmh as ref LYSNMHDR);
      int sheet = nmtv.nSheet;
      int s = mainsheet.GetSheetCount();
      //trace(s);
      int cs = xcombobox::GetCount(memuId.GetId());
      int cursheet = m_cursheet;
      if (s > cs) {
         xcombobox::AddItem(memuId.GetId(), L"自由窗口");
         xcombobox::AddItem(tabNo.GetId(), cursheet.toString());
      }
      if (s < cs) {
         xcombobox::DeleteItem(memuId.GetId(), cursheet);
         int i = 0;
         xstring value = xcombobox::GetLBText(tabNo.GetId(), cursheet);
         for (i = 0; i < cs; i++)
         {
            xstring tabId = xcombobox::GetLBText(tabNo.GetId(), i);
            if (tabId == cursheet.toString())
            {
               xcombobox::DeleteItem(tabNo.GetId(), i);
               xcombobox::InsertString(tabNo.GetId(), i, value);
            }
         }
         xcombobox::DeleteItem(tabNo.GetId(), cursheet);
         if (sheet != value.toInt())
            mainsheet.SelectSheet(value.toInt());
      }
      if (cursheet != mainsheet.GetSheetIndex())
      {
         int hPicture = xwin::FindWindowEx(0, 0, L"XFrameWndClass", L"__ProductPicture");
         if (hPicture > 0)
         {
            int WM_CLOSE = 0x0010;
            xwin::PostMessage(hPicture, WM_CLOSE, 0, 0);
         }
      }
      m_cursheet = mainsheet.GetSheetIndex();
      return 1;
   }
   int OnCloseSheet(TEvent* evt, int p)
   {
      ref LYSNMHDR nmtv = trust(evt.pnmh as ref LYSNMHDR);
      int sheet = nmtv.nSheet;
      //alert(L"xxxx");
      return 1;
   }
   int SetUserID()
   {
      Hxsoft::XFrame::KXMLDOMDocument x;
@@ -147,6 +563,22 @@
      return 1;
   }
   int OnInitial()
   {
      xstring userno = xaserver::GetUserNo();
      if (userno == L"admin" /*|| userno==L"00206" || userno==L"00206" || userno==L"00201" ||userno==L"00101" */)
      {
         xnode anode = GetAgentNode(L"dev");
         int LayerFlow_WE = 0x00000002;
         int LayerFlow_Control = 0x00000010;
         anode.SetLayerFlow(LayerFlow_WE | LayerFlow_Control);
      }
      m_Assignment = L"";
      return 1;
   }
   int Initial()
   {
      SetUserID();