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/XDevEditXPage.cpp | 17 +++- jrj/xframe/devloper/XDevEditPage.hpp | 106 ++++++++++++++++++++++++-- jrj/xframe/src/xfile.cpp | 70 +++++++++++++++++ jrj/xframe/win32/win.hpp | 3 jrj/ext-jrj/ext-jrj.vcxproj | 1 jrj/xframe/win32/xfile.hpp | 4 + jrj/ext-jrj/ext-jrj.vcxproj.filters | 3 7 files changed, 189 insertions(+), 15 deletions(-) diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj index 59e8fae..de96cfb 100644 --- a/jrj/ext-jrj/ext-jrj.vcxproj +++ b/jrj/ext-jrj/ext-jrj.vcxproj @@ -1248,6 +1248,7 @@ <ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp" /> <ClCompile Include="..\xframe\src\nmemory.cpp" /> <ClCompile Include="..\xframe\src\nstring.cpp" /> + <ClCompile Include="..\xframe\src\xfile.cpp" /> <ClCompile Include="..\xframe\src\xstring.cpp" /> <ClCompile Include="dllmain.cpp" /> <ClCompile Include="JAllocImpl.cpp" /> diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters index ef3306a..f1f5505 100644 --- a/jrj/ext-jrj/ext-jrj.vcxproj.filters +++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters @@ -1589,6 +1589,9 @@ <ClCompile Include="..\project\business\Expense\ManageCostList.cpp"> <Filter>project\business\Expense</Filter> </ClCompile> + <ClCompile Include="..\xframe\src\xfile.cpp"> + <Filter>xframe\src</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <None Include="ext-jrj.def"> 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; diff --git a/jrj/xframe/devloper/XDevEditXPage.cpp b/jrj/xframe/devloper/XDevEditXPage.cpp index f20dc2c..a548ce2 100644 --- a/jrj/xframe/devloper/XDevEditXPage.cpp +++ b/jrj/xframe/devloper/XDevEditXPage.cpp @@ -55,10 +55,19 @@ } else if (comdid == L"xmImport") { - ImportItems(L"file://D:/jrjhome/developer-yh/projects/mherp.com.cn/前端策略/works/供应链.xml", - L"Profit3.vface");// L"{94124797-1F4A-4BAC-8839-B5A119895C92}"); - //ImportItems(L"file://D:/jrjhome/developer-yh/projects/mherp.com.cn/数据中心/works/trade.xml", - // L"Profit3.iface");// L"{94124797-1F4A-4BAC-8839-B5A119895C92}"); + xwin w = GetFrameWindow(); + xtreeview tv_folder = w.GetControl(L"DevExplorer"); + HTREEITEM hItem = tv_folder.GetSelectedItem(); + if (!hItem) return 1; + + KXMLDOMElement e = tv_folder.GetItemData(hItem); + xstring src = e.getAttribute(L"src"); + if(src==L"Profit3.vface") + ImportItems(L"file://D:/jrjhome/developer-yh/projects/mherp.com.cn/前端策略/works/供应链.xml", + L"Profit3.vface"); + else if (src == L"Profit3.iface") + ImportItems(L"file://D:/jrjhome/developer-yh/projects/mherp.com.cn/数据中心/works/trade.xml", + L"Profit3.iface"); return 1; } diff --git a/jrj/xframe/src/xfile.cpp b/jrj/xframe/src/xfile.cpp new file mode 100644 index 0000000..3af7449 --- /dev/null +++ b/jrj/xframe/src/xfile.cpp @@ -0,0 +1,70 @@ +#include "wobject/xbase.hpp" +#include "wobject/xstring.hpp" +#include "win32/xfile.hpp" +#include <vector> + +xstring xfile::GetString(xstring path) +{ + int nLen = 0; + const wchar_t* file = path.c_str(false); + if (file[0] == 'f' && file[1] == 'i' && file[2] == 'l' && file[3] == 'e' && file[4] == ':' && file[5] == '/' && file[6] == '/') + file += 7; + BYTE* lpBuffer = xfile::GetBuffer(file, nLen); + if (!lpBuffer)return L""; + void* p = lpBuffer; + if (nLen > 2) + { + if ((lpBuffer[0] == 0xff && lpBuffer[1] == 0xfe) || (lpBuffer[0] == 0xfe && lpBuffer[1] == 0xff))lpBuffer = lpBuffer + 2; + } + xstring str = (wchar_t*)lpBuffer; + if (p)delete p; + return str; +} + +BYTE* xfile::GetBuffer(xstring path, int& Length) +{ + TCHAR buf[255]; + TCHAR* pToken = NULL; + int len = 0; + + DWORD dwFileSize = 0; + DWORD dwReadSize = 0; + + DWORD GENERIC_READ = (0x80000000L); + DWORD GENERIC_WRITE = (0x40000000L); + DWORD GENERIC_EXECUTE = (0x20000000L); + DWORD GENERIC_ALL = (0x10000000L); + + DWORD FILE_SHARE_READ = 0x00000001; + DWORD FILE_SHARE_WRITE = 0x00000002; + DWORD FILE_SHARE_DELETE = 0x00000004; + DWORD FILE_ATTRIBUTE_NORMAL =0x00000080; + DWORD OPEN_ALWAYS = 4; + DWORD OPEN_EXISTING = 3; + + HANDLE INVALID_HANDLE_VALUE = ((HANDLE)(LONG_PTR)-1); + + try { + HANDLE hFile = xfile::CreateFile(path.c_str(false), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + dwFileSize = ::GetFileSize(hFile, NULL); + BYTE* lpBuffer = new BYTE[dwFileSize+2]; + lpBuffer[dwFileSize] = 0; + lpBuffer[dwFileSize+1] = 0; + ReadFile(hFile, lpBuffer, dwFileSize, &dwReadSize, NULL); + Length = dwReadSize; + if (hFile != INVALID_HANDLE_VALUE)CloseHandle(hFile); + return lpBuffer; + } + } + catch (...) + { + + } + return nullptr; +} + + + + diff --git a/jrj/xframe/win32/win.hpp b/jrj/xframe/win32/win.hpp index 8f8ebfc..145e03a 100644 --- a/jrj/xframe/win32/win.hpp +++ b/jrj/xframe/win32/win.hpp @@ -109,7 +109,8 @@ int WINAPI GetModuleFileNameW(HMODULE hModule ,string lpFileName, int nSize);//native from "kernel32.dll" alias "GetModuleFileNameW"; void WINAPI GetLocalTime(SYSTEMTIME& lpSystemTime) ;//native from "kernel32.dll" alias "GetLocalTime"; int WINAPI PathRemoveFileSpecW(string lpFileName);// native from "shlwapi.dll" alias "PathRemoveFileSpecW"; - + int WINAPI PathRemoveExtensionW(string lpFileName);// native from "shlwapi.dll" alias "PathRemoveExtensionW"; + } #define SendMessage SendMessageW #define PostMessage PostMessageW diff --git a/jrj/xframe/win32/xfile.hpp b/jrj/xframe/win32/xfile.hpp index fc74fd5..14ab6a0 100644 --- a/jrj/xframe/win32/xfile.hpp +++ b/jrj/xframe/win32/xfile.hpp @@ -2,6 +2,7 @@ #include "system/base.hpp" #include "win.hpp" +#include "wobject/xstring.hpp" #if _XWIN #define CALLBACK __stdcall @@ -151,5 +152,8 @@ { return ::GetFileSize(hFile, &lpFileSizeHigh); } + + static xstring GetString(xstring path); + static BYTE* GetBuffer(xstring path,int& Length); }; -- Gitblit v1.9.3