From 03ef0b51103c735077c784c7df81ae2bcc1599ab Mon Sep 17 00:00:00 2001 From: LiFan <2308045698@qq.com> Date: 星期四, 13 二月 2025 18:33:56 +0800 Subject: [PATCH] update --- jrj/xframe/devloper/XDevEditPage.hpp | 218 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 204 insertions(+), 14 deletions(-) diff --git a/jrj/xframe/devloper/XDevEditPage.hpp b/jrj/xframe/devloper/XDevEditPage.hpp index 0eec9ee..b2bac45 100644 --- a/jrj/xframe/devloper/XDevEditPage.hpp +++ b/jrj/xframe/devloper/XDevEditPage.hpp @@ -6,6 +6,9 @@ #include <xcontrol/xlayersheet.hpp> #include <xcontrol/xcombobox.hpp> #include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp> +#include <win32/xfile.hpp> + +#include <tchar.h> using xml = KXMLDOMDocument; class export XDevEditPage : public xwin @@ -15,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 = ((LPARAM)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 ) @@ -115,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") @@ -138,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"); @@ -167,13 +159,211 @@ } 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() { return publiccode::GetGuid(); } + + 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"[not(@delete) and @caption='" + caption + L"']"); + if (!node) + { + //add file folder + arg.AddArg(L"image", ele.getAttribute(L"image")); + //arg.AddArg(L"guid", ele.getAttribute(L"guid")); + arg.AddArg(L"folder", ele.tagName()); + arg.AddArg(L"type", ele.getAttribute(L"type")); + arg.AddArg(L"desc", ele.getAttribute(L"desc")); + arg.AddArg(L"uri", ele.getAttribute(L"uri")); + arg.AddArg(L"src", ele.getAttribute(L"src")); + arg.AddArg(L"name", ele.getAttribute(L"caption")); + + arg.AddArg(L"parent.guid", guid); + arg.AddArg(L"project.guid", prjguid); + arg.AddArg(L"domain.guid", domainguid); + arg.AddArg(L"root.guid", rootguid); + + xstring str = ProcessDevCmd(L"addfolder", arg.GetString()); + if (str != L"") + { + xml x; + x.loadXML(str); + auto e1 = x.documentElement(); + e.appendChild(e1); + int himage = xstring(e1.getAttribute(L"image")).toInt(); + HTREEITEM hNewItem = tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage); + + + 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; + } + 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; + } + + int ImportItems(xstring srcfile, xstring id) + { + xwin w = GetFrameWindow(); + xtreeview tv_folder = w.GetControl(L"DevExplorer"); + HTREEITEM hItem = tv_folder.GetSelectedItem(); + if (!hItem) return 1; + + xml src; + src.load(srcfile); + + 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; + + + //find project folder + xstring prjguid = L""; + xstring domainguid = L""; + xstring rootguid = L""; + + HTREEITEM pitem = GetProjectItem(tv_folder,hItem); + if (pitem && pitem != hItem) + prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid"); + + HTREEITEM hP2Item = 0; + HTREEITEM hDomainItem = 0; + KXMLDOMElement e = tv_folder.GetItemData(hItem); + if (!tv_folder.GetParentItem(hItem)) + { + hDomainItem = hItem; + } + else + { + hP2Item = GetP2Item(tv_folder,hItem); + hDomainItem = tv_folder.GetParentItem(hP2Item); + } + + if (hP2Item) + { + KXMLDOMElement p = tv_folder.GetItemData(hP2Item); + rootguid = p.getAttribute(L"guid"); + } + if (hDomainItem) + { + KXMLDOMElement d = tv_folder.GetItemData(hDomainItem); + domainguid = d.getAttribute(L"guid"); + } + int lens; + KXMLDOMNodeList nodes = srcele.selectNodes(L"node()[not(@delete)]"); + lens = nodes.length(); + for (int i = 0; i < lens; i++) + { + KXMLDOMElement child = nodes.item(i); + ImportItem(szPath,hItem, child, prjguid, domainguid, rootguid); + } + + return 1; + } }; \ No newline at end of file -- Gitblit v1.9.3