LiFan
2025-02-13 03ef0b51103c735077c784c7df81ae2bcc1599ab
jrj/xframe/devloper/XDevEditPage.hpp
@@ -8,6 +8,8 @@
#include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp>
#include <win32/xfile.hpp>
#include <tchar.h>
using xml = KXMLDOMDocument;
class export XDevEditPage : public xwin
{
@@ -16,17 +18,7 @@
public:
   xstring ProcessDevCmd(xstring cmd, xstring ext)
   {
      //trace(ext);
      int nlen = 0;
      BYTE* pdata;
      xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext, pdata, nlen);
      if (nlen > 0)
      {
         xstring str = ((wchar_t*)pdata);
         return str.mid(1, 9999999);
      }
      else
         return L"";
      return  xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext);
   }
   HTREEITEM GetProjectItem(xtreeview tv_folder, HTREEITEM hItem )
@@ -116,11 +108,10 @@
      return GetData(0);
   }
   int SaveContentEx(xstring content, int bcode)
   int SaveContentEx(HTREEITEM hItem,xstring content, int bcode)
   {
      xwin w = GetFrameWindow();
      xtreeview tv_folder = w.GetControl(L"DevExplorer");
      HTREEITEM hItem  = (HTREEITEM)GetWinParam();
      KXMLDOMElement e = tv_folder.GetItemData(hItem);
      xstring node = e.tagName();
      if (node == L"File" || node == L"file")
@@ -139,7 +130,7 @@
         //find project folder
         xstring prjguid = L"";
         HTREEITEM pitem  = GetProjectItem(tv_folder, hItem);
         HTREEITEM pitem = GetProjectItem(tv_folder, hItem);
         if (pitem)
            prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
@@ -168,9 +159,34 @@
      }
      return 1;
   }
   int SaveContentEx(xstring content, int bcode)
   {
      HTREEITEM hItem  = (HTREEITEM)GetWinParam();
      return SaveContentEx(hItem,content,bcode);
   }
   int SaveContent(HTREEITEM hItem,xstring content)
   {
      return SaveContentEx(hItem,content, 0);
   }
   int SaveContent(xstring content)
   {
      return SaveContentEx(content, 0);
   }
   int SaveContentEx(xstring prjguid, xstring domainguid, xstring rootguid, xstring guid,xstring content, int bcode)
   {
      xaserverarg arg;
      arg.AddArg(L"project.guid", prjguid);
      arg.AddArg(L"root.guid", rootguid);
      arg.AddArg(L"domain.guid", domainguid);
      arg.AddArg(L"guid", guid);
      arg.AddArg(L"content", content);
      if (bcode)arg.AddArg(L"iscode", L"yes");
      ProcessDevCmd(L"saveobject", arg.GetString());
      return 1;
   }
   xstring GetGuid()
@@ -178,18 +194,19 @@
      return publiccode::GetGuid();
   }
   int ImportItem(HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid)
   int ImportItem(xstring baseFolder,HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid)
   {
      xwin w = GetFrameWindow();
      xtreeview tv_folder = w.GetControl(L"DevExplorer");
      xstring caption = ele.getAttribute(L"src");
      xstring uri = ele.getAttribute(L"uri");
      xstring guid = ((KXMLDOMElement)tv_folder.GetItemData(hItem)).getAttribute(L"guid");
      xstring typ = ele.tagName();
      KXMLDOMElement e = tv_folder.GetItemData(hItem);
      xaserverarg arg;
      KXMLDOMNode node = e.selectSingleNode(typ + L"[@caption='" + caption + L"']");
      KXMLDOMNode node = e.selectSingleNode(typ + L"[not(@delete) and @caption='" + caption + L"']");
      if (!node)
      {
         //add file folder
@@ -217,42 +234,71 @@
            int himage = xstring(e1.getAttribute(L"image")).toInt();
            HTREEITEM hNewItem = tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage);
            /*
            int GENERIC_READ = 0x80000000;
            int GENERIC_WRITE = 0x40000000;
            int FILE_SHARE_READ = 0x00000001;
            int FILE_SHARE_WRITE = 0x00000002;
            int OPEN_EXISTING = 3;
            int FILE_ATTRIBUTE_ARCHIVE = 0x00000020;
            HANDLE hFile = xfile::CreateFile(L"D:\\jrjhome\\developer-yh\\projects\\mherp.com.cn\\前端策略\works\\供应链\\" + sTemplName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
            if (hFile > 0)
            {
               //int GMEM_MOVEABLE=0x0002;
               //int GMEM_ZEROINIT=0x0040;
               //int MEMSIZE;
               //int hMemory = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,MEMSIZE);
               //int pMemory = GlobalLock(hMemory);
               //int SizeReadWrite;
               //xwin::ReadFile(hFile,pMemory,MEMSIZE - 1,SizeReadWrite,0);
               DWORD FileSizeHigh = 0;
               int filesize = xfile::GetFileSize(hFile,FileSizeHigh);
               char * buffer = new char[filesize+2];
               DWORD readsize;
               xfile:ReadFile(hFile, buffer, filesize, &readsize, 0);
               xfile::CloseHandle(hFile);
            }*/
            int lens;
            KXMLDOMNodeList nodes = ele.selectNodes(L"node()");
            KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]");
            lens = nodes.length();
            for (int i = 0; i < lens; i++)
            {
               KXMLDOMElement child = nodes.item(i);
               ImportItem(hNewItem, child, prjguid, domainguid, rootguid);
               ImportItem(baseFolder,hNewItem, child, prjguid, domainguid, rootguid);
            }
         }
         return 1;
      }
      else
      {
         //update content
         if (typ == L"file" && node.selectSingleNode(L"@guid") && node.selectSingleNode(L"@src"))
         {
            wchar_t path[MAX_PATH]=L"";
            xstring src = node.selectSingleNode(L"@src").text();
            trace(L"\r\n" + src);
            wcscat_s(path, MAX_PATH, baseFolder);
            wcscat_s(path, MAX_PATH, L"/");
            wcscat_s(path, MAX_PATH, src.c_str());
            xstring xs = xfile::GetString(path);
            const wchar_t* val = xs.c_str();
            xstring myguid = node.selectSingleNode(L"@guid").text();
            xstring mytype = node.selectSingleNode(L"@type") ? node.selectSingleNode(L"@type").text() : L"";
            if (xs != L"")
            {
               this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, false);
               if (mytype == L"xpage")
               {
                  ::PathRemoveExtensionW(path);
                  wcscat_s(path, MAX_PATH, L".xss");
                  xs = xfile::GetString(path);
                  if (xs != L"")this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, true);
               }
            }
         }
         HTREEITEM hNewItem = tv_folder.GetChildItem(hItem);
         KXMLDOMElement e2 = node;
         xstring url2 = e2.getAttribute(L"uri");
         while (hNewItem)
         {
            KXMLDOMElement e1 = tv_folder.GetItemData(hNewItem);
            wchar_t* uri1 = e1.getAttribute(L"uri");
            wchar_t* uri2 = e2.getAttribute(L"uri");
            if (url2 == e1.getAttribute(L"uri"))break;
            hNewItem = tv_folder.GetNextItem(hNewItem);
         }
         if (hNewItem)
         {
            int lens;
            KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]");
            lens = nodes.length();
            for (int i = 0; i < lens; i++)
            {
               KXMLDOMElement child = nodes.item(i);
               ImportItem(baseFolder, hNewItem, child, prjguid, domainguid, rootguid);
            }
         }
      }
      return 1;
   }
@@ -266,7 +312,12 @@
      xml src;
      src.load(srcfile);
      xstring path = L"//*[(name()='file' or name()='folder') and @src='" + id + L"']";
      TCHAR szPath[MAX_PATH]=L"";
      wcscat_s(szPath, MAX_PATH,srcfile.c_str());
      ::PathRemoveExtensionW(szPath);
      xstring path = L"//*[(name()='file' or name()='folder') and not(@delete) and @src='" + id + L"']";
      const wchar_t* str = src.xml();
      KXMLDOMElement srcele = src.selectSingleNode(path);
      if (!srcele) return 1;
@@ -305,12 +356,12 @@
         domainguid = d.getAttribute(L"guid");
      }
      int lens;
      KXMLDOMNodeList nodes = srcele.selectNodes(L"node()");
      KXMLDOMNodeList nodes = srcele.selectNodes(L"node()[not(@delete)]");
      lens = nodes.length();
      for (int i = 0; i < lens; i++)
      {
         KXMLDOMElement child = nodes.item(i);
         ImportItem(hItem, child, prjguid, domainguid, rootguid);
         ImportItem(szPath,hItem, child, prjguid, domainguid, rootguid);
      }
      return 1;