From 0792cf13f1a288644a9a90c023547bbe6e26a3e7 Mon Sep 17 00:00:00 2001 From: xj qian <qianxj15@sina.com> Date: 星期二, 11 二月 2025 16:03:15 +0800 Subject: [PATCH] update --- jrj/xframe/devloper/XDevEditPage.hpp | 106 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 96 insertions(+), 10 deletions(-) diff --git a/jrj/xframe/devloper/XDevEditPage.hpp b/jrj/xframe/devloper/XDevEditPage.hpp index 77e20dc..b2bac45 100644 --- a/jrj/xframe/devloper/XDevEditPage.hpp +++ b/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 { @@ -106,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") @@ -129,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"); @@ -158,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() @@ -168,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 @@ -209,15 +236,69 @@ 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; } @@ -231,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; @@ -270,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; -- Gitblit v1.9.3