From 9e213f03833e59a37306a7a7195d005ab5384d74 Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期三, 21 八月 2024 14:35:48 +0800
Subject: [PATCH] update devloper
---
jrj/xframe/devloper/devloper.cpp | 553 ++++++++++++++++++++++++++++++++++++
jrj/xframe/devloper/XDevEditPage.cpp | 170 +++++++++++
jrj/project/vindexform.cpp | 10
jrj/xframe/devloper/XDevItemDlg.cpp | 145 +++++++++
jrj/xframe/wobject/xwin.hpp | 1
jrj/ext-jrj/ext-jrj.vcxproj | 3
jrj/ext-jrj/ext-jrj.vcxproj.filters | 12
7 files changed, 894 insertions(+), 0 deletions(-)
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index a5b384d..c621bcb 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -172,6 +172,7 @@
<ClInclude Include="..\project\viewobject\shoppingcart.view.hpp" />
<ClInclude Include="..\project\viewobject\supplier.view.hpp" />
<ClInclude Include="..\xframe\adt\xarray.hpp" />
+ <ClInclude Include="..\xframe\devloper\XDevEditPage.cpp" />
<ClInclude Include="..\xframe\kobject\kapp.hpp" />
<ClInclude Include="..\xframe\kobject\kbase.hpp" />
<ClInclude Include="..\xframe\kobject\kcachemgr.hpp" />
@@ -1084,6 +1085,8 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
</ClCompile>
+ <ClCompile Include="..\xframe\devloper\devloper.cpp" />
+ <ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp" />
<ClCompile Include="..\xframe\src\nmemory.cpp" />
<ClCompile Include="..\xframe\src\nstring.cpp" />
<ClCompile Include="..\xframe\src\xstring.cpp" />
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters
index 1280bd9..71a8754 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj.filters
+++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -127,6 +127,9 @@
<Filter Include="project\business\Customer">
<UniqueIdentifier>{1a6cab16-6910-4b7a-a805-80b24ceac7ac}</UniqueIdentifier>
</Filter>
+ <Filter Include="devloper">
+ <UniqueIdentifier>{3df44a8b-be7b-441e-8310-dba7612e94e3}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="framework.h">
@@ -377,6 +380,9 @@
</ClInclude>
<ClInclude Include="..\project\business\SystemSettings\SysUser.hpp">
<Filter>project\business\SystemSettings</Filter>
+ </ClInclude>
+ <ClInclude Include="..\xframe\devloper\XDevEditPage.cpp">
+ <Filter>devloper</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
@@ -1271,5 +1277,11 @@
<ClCompile Include="..\project\business\AP\list.manageSupplierID.ap.cpp">
<Filter>project\business\AP</Filter>
</ClCompile>
+ <ClCompile Include="..\xframe\devloper\devloper.cpp">
+ <Filter>devloper</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp">
+ <Filter>devloper</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
diff --git a/jrj/project/vindexform.cpp b/jrj/project/vindexform.cpp
index f6b9c8b..b8bf763 100644
--- a/jrj/project/vindexform.cpp
+++ b/jrj/project/vindexform.cpp
@@ -642,6 +642,16 @@
int Initial()
{
SetUserID();
+ xstring userno = xaserver::GetUserNo();
+ if (userno == L"admin")
+ {
+ 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 onload()
diff --git a/jrj/xframe/devloper/XDevEditPage.cpp b/jrj/xframe/devloper/XDevEditPage.cpp
new file mode 100644
index 0000000..f45f2db
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditPage.cpp
@@ -0,0 +1,170 @@
+#include <wobject/xstring.hpp>
+#include <wobject/xwin.hpp>
+#include <wobject/xaserver.hpp>
+#include <wobject/xaserverarg.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditPage : public xwin
+{
+ 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"";
+ }
+
+ HTREEITEM GetProjectItem(xtreeview tv_folder, HTREEITEM hItem )
+ {
+ HTREEITEM pitem = hItem;
+ xstring typ;
+ while (true)
+ {
+ typ = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).tagName();
+ if (typ == L"project")break;
+ pitem = tv_folder.GetParentItem(pitem);
+ if (pitem <= 0)break;
+ }
+ return pitem;
+ }
+
+ HTREEITEM GetP2Item(xtreeview tv_folder, HTREEITEM hItem )
+ {
+ HTREEITEM hDomainItem;
+ HTREEITEM hP2Item = hItem;
+ while (true)
+ {
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ if (tv_folder.GetParentItem(hDomainItem) <= 0)break;
+ hP2Item = hDomainItem;
+ }
+ return hP2Item;
+ }
+
+ xstring GetData(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")
+ {
+ xstring caption = e.getAttribute(L"caption");
+ SetWindowText(GetHWND(), caption);
+
+ HTREEITEM hP2Item = 0;
+ HTREEITEM hDomainItem = 0;
+ if (tv_folder.GetParentItem(hItem) <= 0)
+ {
+ hDomainItem = hItem;
+ }
+ else
+ {
+ hP2Item = GetP2Item(tv_folder, hItem);
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ }
+
+ //find project folder
+ xstring prjguid = L"";
+ HTREEITEM pitem = GetProjectItem(tv_folder, hItem);
+ if (pitem)
+ prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
+
+ xaserverarg arg;
+ arg.AddArg(L"project.guid", prjguid);
+ if (hP2Item)
+ {
+ if (hP2Item != hItem)
+ {
+ xstring guid = e.getAttribute(L"guid");
+ arg.AddArg(L"guid", guid);
+ }
+ KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
+ xstring guid = p.getAttribute(L"guid");
+ arg.AddArg(L"root.guid", guid);
+ }
+ else if (hDomainItem)
+ {
+ KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
+ xstring guid = d.getAttribute(L"guid");
+ arg.AddArg(L"domain.guid", guid);
+ }
+ if (bcode)arg.AddArg(L"iscode", L"yes");
+ return ProcessDevCmd(L"getobject", arg.GetString());
+ }
+ else
+ return L"";
+ }
+ xstring GetData()
+ {
+ return GetData(0);
+ }
+
+ int SaveContentEx(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")
+ {
+ HTREEITEM hP2Item = 0;
+ HTREEITEM hDomainItem = 0;
+ if (tv_folder.GetParentItem(hItem) <= 0)
+ {
+ hDomainItem = hItem;
+ }
+ else
+ {
+ hP2Item = GetP2Item(tv_folder, hItem);
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ }
+
+ //find project folder
+ xstring prjguid = L"";
+ HTREEITEM pitem = GetProjectItem(tv_folder, hItem);
+ if (pitem)
+ prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
+
+ xaserverarg arg;
+ arg.AddArg(L"project.guid", prjguid);
+ if (hP2Item)
+ {
+ if (hP2Item != hItem)
+ {
+ xstring guid = e.getAttribute(L"guid");
+ arg.AddArg(L"guid", guid);
+ }
+ KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
+ xstring guid = p.getAttribute(L"guid");
+ arg.AddArg(L"root.guid", guid);
+ }
+ else if (hDomainItem)
+ {
+ KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
+ xstring guid = d.getAttribute(L"guid");
+ arg.AddArg(L"domain.guid", guid);
+ }
+ arg.AddArg(L"content", content);
+ if (bcode)arg.AddArg(L"iscode", L"yes");
+ ProcessDevCmd(L"saveobject", arg.GetString());
+ }
+ return 1;
+ }
+ int SaveContent(xstring content)
+ {
+ return SaveContentEx(content, 0);
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevItemDlg.cpp b/jrj/xframe/devloper/XDevItemDlg.cpp
new file mode 100644
index 0000000..1ae19fa
--- /dev/null
+++ b/jrj/xframe/devloper/XDevItemDlg.cpp
@@ -0,0 +1,145 @@
+#include <wobject/xstring.hpp>
+#include <wobject/xwin.hpp>
+#include <wobject/xaserver.hpp>
+#include <wobject/xaserverarg.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevItemDlg : public xwin
+{
+private:
+ xaserverarg arg;
+ KXMLDOMElement pr;
+public:
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ if (comdid == L"xmDevCancel")
+ {
+ CloseWindow();
+ return 1;
+ }
+ if (comdid == L"xmDevOk")
+ {
+ if (arg)
+ {
+ xcontrol xc= GetControl(L"xmDevType");
+ arg.SetArg(L"typename", xc.GetText());
+ KXMLDOMElement o = pr.selectSingleNode(L"//folder[@caption='" + xc.GetText() + L"']");
+ if (o)
+ {
+ xstring image = o.getAttribute(L"image");
+ //alert(image);
+ arg.SetArg(L"image", image);
+ }
+
+ xc = GetControl(L"xmDevName");
+ arg.SetArg(L"name", xc.GetText());
+ xc = GetControl(L"xmDevDesc");
+ arg.SetArg(L"desc", xc.GetText());
+ xc = GetControl(L"xmDevUri");
+ arg.SetArg(L"uri", xc.GetText());
+ arg.SetArg(L"__process",L"true");
+ arg.SetArg(L"folder",L"folder");
+ }
+ CloseWindow();
+
+ return 1;
+ }
+ return 0;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt,LPARAM param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnCombSelChanged()
+ {
+ xcontrol xc = GetControl(L"xmDevType");
+ LPARAM j = SendMessage(xc.GetHWND(),0x0147,0,0);
+ if (j > 0)
+ {
+ wchar_t str[255];
+ SendMessage(xc.GetHWND(),0x0148,j,(LPARAM)str);
+ //trace(str);
+ xc = GetControl(L"xmDevName");
+ xc.SetText(str);
+ xc = GetControl(L"xmDevUri");
+ xc.SetText(str);
+ }
+ return 1;
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevItemDlg::OnXCommand);
+ //AttachEvent(L"xmDevType", L"CBN_SELCHANGE",(FEvent)&XDevItemDlg::OnCombSelChanged);
+ return 1;
+ }
+
+ int OnInitial()
+ {
+ OnAttachEvent();
+
+ xml project;
+ xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevProject.xml]",L"",project);
+ auto list = project.selectNodes(L"//folder");
+ pr = project.documentElement();
+
+ long nlen = list.length();
+ int i = 0;
+ for (i = 0; i < nlen; i++)
+ {
+ KXMLDOMElement e = list.item(i);
+ xstring name = e.getAttribute(L"caption");
+ xcombobox b = GetControl(L"xmDevType");
+ b.AddItem(name);
+ }
+
+ return 1;
+ }
+
+ int onload()
+ {
+ SetArg();
+ OnInitial();
+ arg = GetArg();
+ if (arg)
+ {
+ xstring val;
+ xcontrol xc(nullptr);
+ val = arg.GetArgString(L"typename");
+ xc = GetControl(L"xmDevType");
+ if (val)xc.SetText(val);
+ val = arg.GetArgString(L"name");
+ xc = GetControl(L"xmDevName");
+ if (val)xc.SetText(val);
+ val = arg.GetArgString(L"desc");
+ xc = GetControl(L"xmDevDesc");
+ if (val)xc.SetText(val);
+ val = arg.GetArgString(L"uri");
+ xc = GetControl(L"xmDevUri");
+ if (val)xc.SetText(val);
+ val = arg.GetArgString(L"src");
+ xc = GetControl(L"xmDevPath");
+ if (val)xc.SetText(val);
+ val = arg.GetArgString(L"guid");
+ xc = GetControl(L"xmDevGuid");
+ if (val)xc.SetText(val);
+ val = arg.GetArgString(L"type");
+ //xml project = new xml;
+ //xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevProject.xml]",L"",project);
+ //var list = project.GetXmlDoc().selectNodes(L"//folder");
+ //trace(val);
+ xc = GetControl(L"xmDevType");
+ if (val)xc.SetText(val);
+ }
+
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/devloper.cpp b/jrj/xframe/devloper/devloper.cpp
new file mode 100644
index 0000000..b586ae3
--- /dev/null
+++ b/jrj/xframe/devloper/devloper.cpp
@@ -0,0 +1,553 @@
+#include <wobject/xstring.hpp>
+#include <wobject/xwin.hpp>
+#include <wobject/xaserver.hpp>
+#include <wobject/xaserverarg.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDeveloper : public xwin
+{
+private: //
+ xtreeview tv_folder;
+ xcontrol mle_output;
+ int sheet_Count;
+public:
+ int trace(xstring msg)
+ {
+ xstring t = mle_output.GetText();
+ mle_output.SetText(t + msg);
+ return 1;
+ }
+
+ int OnProcessUrl(xstring kind, xstring url)
+ {
+ xml x ;
+ xaserverarg xarg;
+ xarg.AddArg(L"url", url);
+ xarg.AddArg(L"kind", kind);
+ xaserver::ExecXQuery(GetServerUrl(), L"[service.url.info.xq]", xarg.GetString(), x);
+ alert(x.xml());
+ return 1;
+ }
+
+ xstring ProcessDevCmd(xstring cmd, xstring ext)
+ {
+ int nlen = 0;
+ BYTE* pdata=nullptr;
+ xaserver::ProcessCmd(GetServerUrl(),( L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext.c_str(), pdata, nlen);
+
+ xstring str = ((LPARAM)pdata) + L"";
+ return str;
+ }
+
+ int SetAgent(xstring node)
+ {
+ auto n = GetElement().selectSingleNode(L"agent/projects/node()[1]");
+ if (n)
+ {
+ xstring agent = n.xml();
+ xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ SetAgentNode(anode, agent);
+ }
+
+ return 1;
+ }
+
+ HTREEITEM GetProjectItem(HTREEITEM hItem)
+ {
+ HTREEITEM pitem = hItem;
+ xstring typ;
+ while (true)
+ {
+ typ = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).tagName();
+ if (typ == L"project")break;
+ pitem = tv_folder.GetParentItem(pitem);
+ if (!pitem )break;
+ }
+ return pitem;
+ }
+
+ HTREEITEM GetP2Item(HTREEITEM hItem)
+ {
+ HTREEITEM hDomainItem;
+ HTREEITEM hP2Item = hItem;
+ while (true)
+ {
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ if (!tv_folder.GetParentItem(hDomainItem))break;
+ hP2Item = hDomainItem;
+ }
+ return hP2Item;
+ }
+
+ //树展开事件
+ int OnTreeExpanding(TEvent* evt, HTREEITEM param)
+ {
+ NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+ HTREEITEM hItem = nmtv.itemNew.hItem;
+
+ return 1;
+ }
+
+ xstring GetData(HTREEITEM hItem)
+ {
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring node = e.tagName();
+ if (node == L"File" || node == L"file")
+ {
+ HTREEITEM hP2Item = 0;
+ HTREEITEM hDomainItem = 0;
+ if (!tv_folder.GetParentItem(hItem))
+ {
+ hDomainItem = hItem;
+ }
+ else
+ {
+ hP2Item = GetP2Item(hItem);
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ }
+
+ //find project folder
+ xstring prjguid = L"";
+ HTREEITEM pitem = GetProjectItem(hItem);
+ if (pitem)
+ prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
+
+ xaserverarg arg;
+ arg.AddArg(L"project.guid", prjguid);
+ if (hP2Item)
+ {
+ if (hP2Item != hItem)
+ {
+ xstring guid = e.getAttribute(L"guid");
+ arg.AddArg(L"guid", guid);
+ }
+ KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
+ xstring guid = p.getAttribute(L"guid");
+ arg.AddArg(L"root.guid", guid);
+ }
+ else if (hDomainItem)
+ {
+ KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
+ xstring guid = d.getAttribute(L"guid");
+ arg.AddArg(L"domain.guid", guid);
+ }
+ xstring str = ProcessDevCmd(L"getobject", arg.GetString());
+ return str + L"";
+ }
+ else
+ return L"";
+ }
+
+ int OnTreeDblClick(TEvent* evt, int param)
+ {
+ HTREEITEM hItem = tv_folder.GetSelectedItem();
+ if (!hItem) return 0;
+
+ xlayersheet layer = GetControl(L"mdilayer");
+ int i = 0;
+ int nIndex = layer.GetSheetCount();
+ for (i = 0; i < nIndex; i++)
+ {
+ if (hItem == layer.GetParam(i))break;
+ }
+ if (i < nIndex)
+ {
+ layer.SelectSheet(i);
+ return 1;
+ }
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring node = e.tagName();
+ if (node == L"File" || node == L"file")
+ {
+ //xstring str = ProcessDevCmd(L"getobject",arg.GetString());
+ xstring typ = e.getAttribute(L"type");
+
+ xml x ;
+ xaserver::FetchXml(GetServerUrl(), L"dev:xpage[XDevEdit.xml]", L"", x);
+ auto n = x.selectSingleNode(L"//editor[@filetype='" + typ + L"']/@xpage");
+ if (n)
+ {
+ xstring xpage = n.text();
+ OpenWindow(L"dev:xpage[" + xpage + L"]", (LPARAM)hItem);
+ //layer.
+ if (nIndex < layer.GetSheetCount())
+ layer.SetParam(nIndex, hItem);
+ }
+
+ }
+ return 1;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ //
+ if (comdid == L"xmSqlWatch")
+ {
+ OpenWindow(L"dev:xpage[sqlWatch.vx]");
+ return 1;
+ }
+ if (comdid == L"xmCheckUrl")
+ {
+ xcontrol xc = GetControl(L"url");
+ xstring url = xc.GetText();
+ return OnProcessUrl(L"info", url);
+ }
+ else if (comdid == L"xmClearBuffer")
+ {
+ xcontrol xc = GetControl(L"url");
+ xstring url = xc.GetText();
+ return OnProcessUrl(L"clearbuffer", url);
+ }
+ if (comdid == L"xmNewFolder" || comdid == L"xmNewProject" || comdid == L"xmNewFile")
+ {
+ HTREEITEM hItem = tv_folder.GetSelectedItem();
+ if (!hItem) return 1;
+
+
+ //find project folder
+ xstring prjguid = L"";
+ HTREEITEM pitem = GetProjectItem(hItem);
+ if (pitem)
+ prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
+
+ if (comdid == L"xmNewProject" && prjguid != L"") return 1;
+ if (comdid == L"xmNewFile" && !tv_folder.GetParentItem(hItem)) return 1;
+
+ xaserverarg arg;
+ if (comdid == L"xmNewProject")
+ OpenWindow(L"dev:xpage[XDevProjectDlg.xpage]", arg);
+ else if (comdid == L"xmNewFolder")
+ OpenWindow(L"dev:xpage[XDevItemDlg.xpage]", arg);
+ else
+ OpenWindow(L"dev:xpage[XDevFileDlg.xpage]", arg);
+ if (arg.GetArgString(L"__process") != L"true") return 1;
+
+ arg.SetArg(L"project.guid", prjguid);
+
+ HTREEITEM hP2Item = 0;
+ HTREEITEM hDomainItem = 0;
+ KXMLDOMElement e;
+ if (!tv_folder.GetParentItem(hItem))
+ {
+ hDomainItem = hItem;
+ }
+ else
+ {
+ hP2Item = GetP2Item(hItem);
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ }
+
+ e = tv_folder.GetItemData(hItem);
+ if (hP2Item)
+ {
+ if (hP2Item != hItem)
+ {
+ xstring guid = e.getAttribute(L"guid");
+ arg.AddArg(L"parent.guid", guid);
+ }
+ KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
+ xstring guid = p.getAttribute(L"guid");
+ arg.AddArg(L"root.guid", guid);
+ }
+ else if (hDomainItem)
+ {
+ KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
+ xstring guid = d.getAttribute(L"guid");
+ arg.AddArg(L"domain.guid", guid);
+ }
+
+
+ if (hP2Item)
+ {
+ if (comdid == L"xmNewFolder")
+ {
+ if (arg.GetArgString(L"image") == L"")
+ arg.AddArg(L"image", L"15");
+ arg.AddArg(L"folder", L"folder");
+ arg.AddArg(L"type", L"folder");
+ }
+ }
+ else
+ {
+ if (comdid == L"xmNewFolder")
+ {
+ if (arg.GetArgString(L"image") == L"")
+ arg.AddArg(L"image", L"17");
+ arg.AddArg(L"folder", L"folder");
+ arg.AddArg(L"type", L"folder");
+ }
+ }
+
+ 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();
+ tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage);
+ }
+
+ return 1;
+ }
+ else if (comdid == L"xmDeleteObject")
+ {
+ HTREEITEM hItem = tv_folder.GetSelectedItem();
+ if (!hItem) return 1;
+
+ //find project folder
+ xstring prjguid = L"";
+ HTREEITEM pitem = GetProjectItem(hItem);
+ if (pitem)
+ prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
+
+ HTREEITEM hP2Item = 0;
+ HTREEITEM hDomainItem = 0;
+ KXMLDOMElement e;
+ if (!tv_folder.GetParentItem(hItem) ) return 1;
+
+ hP2Item = hItem;
+ while (true)
+ {
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ if (!tv_folder.GetParentItem(hDomainItem))break;
+ hP2Item = hDomainItem;
+ }
+
+ e = tv_folder.GetItemData(hItem);
+ xstring guid = e.getAttribute(L"guid");
+ xaserverarg arg;
+
+ arg.SetArg(L"project.guid", prjguid);
+ arg.AddArg(L"guid", guid);
+
+ KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
+ guid = p.getAttribute(L"guid");
+ arg.AddArg(L"root.guid", guid);
+
+ int MB_YESNO = 0x00000004;
+ int IDYES = 6;
+
+ if (MessageBox(GetHWND(), L"确认删除指定的项", L"提示", MB_YESNO) != IDYES) return 1;
+ ProcessDevCmd(L"deletefolder", arg.GetString());
+ tv_folder.DeleteItem(hItem);
+
+ return 1;
+ }
+ else if (comdid == L"xmUpdateProject")
+ {
+ HTREEITEM hItem = tv_folder.GetSelectedItem();
+ if (!hItem) return 1;
+
+ //find project folder
+ xstring prjguid = L"";
+ HTREEITEM pitem = GetProjectItem(hItem);
+ if (pitem && pitem != hItem)
+ prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
+
+ HTREEITEM hP2Item = 0;
+ HTREEITEM hDomainItem = 0;
+ KXMLDOMElement e;
+ if (!tv_folder.GetParentItem(hItem) ) return 1;
+
+ hP2Item = hItem;
+ while (true)
+ {
+ hDomainItem = tv_folder.GetParentItem(hP2Item);
+ if (!tv_folder.GetParentItem(hDomainItem))break;
+ hP2Item = hDomainItem;
+ }
+
+ e = tv_folder.GetItemData(hItem);
+ xstring guid = e.getAttribute(L"guid");
+ xaserverarg arg;
+
+ arg.SetArg(L"project.guid", prjguid);
+ arg.AddArg(L"guid", guid);
+
+ KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
+ //trace(p.xml);
+ guid = p.getAttribute(L"guid");
+ arg.AddArg(L"root.guid", guid);
+
+ xstring str;
+ str = e.getAttribute(L"caption");
+ arg.AddArg(L"name", str);
+
+ str = e.getAttribute(L"desc");
+ arg.AddArg(L"desc", str);
+
+ str = e.getAttribute(L"uri");
+ arg.AddArg(L"uri", str);
+
+ str = e.getAttribute(L"guid");
+ arg.AddArg(L"guid", str);
+
+ str = e.getAttribute(L"src");
+ arg.AddArg(L"src", str);
+
+ str = e.getAttribute(L"type");
+ arg.AddArg(L"type", str);
+
+ OpenWindow(L"dev:xpage[XDevItemDlg.xpage]", arg);
+ if (arg.GetArgString(L"__process") != L"true") return 1;
+
+ ProcessDevCmd(L"updatefolder", arg.GetString());
+ str = arg.GetArgString(L"name");
+ e.setAttribute(L"caption", str);
+
+ str = arg.GetArgString(L"desc");
+ e.setAttribute(L"desc", str);
+
+ str = arg.GetArgString(L"uri");
+ e.setAttribute(L"uri", str);
+
+ tv_folder.SetItemLabel(hItem, arg.GetArgString(L"name"));
+
+ return 1;
+ }
+ else if (comdid == L"xmEditObject")
+ {
+ HTREEITEM hItem = tv_folder.GetSelectedItem();
+ if (!hItem) return 1;
+
+ xlayersheet layer = GetControl(L"mdilayer");
+ int i = 0;
+ int nIndex = layer.GetSheetCount();
+ for (i = 0; i < nIndex; i++)
+ {
+ if (hItem == layer.GetParam(i))break;
+ }
+ if (i < nIndex)
+ {
+ layer.SelectSheet(i);
+ return 1;
+ }
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring node = e.tagName();
+ if (node == L"File" || node == L"file")
+ {
+ //xstring str = ProcessDevCmd(L"getobject",arg.GetString());
+ xstring typ = e.getAttribute(L"type");
+
+ xml x ;
+ xaserver::FetchXml(GetServerUrl(), L"dev:xpage[XDevEdit.xml]", L"", x);
+ auto n = x.selectSingleNode((xstring)L"//editor[@filetype='" + L"xml" + L"']/@xpage");
+ if (n)
+ {
+ xstring xpage = n.text();
+ OpenWindow(L"dev:xpage[" + xpage + L"]", (LPARAM)hItem);
+ //layer.
+ if (nIndex < layer.GetSheetCount())
+ layer.SetParam(nIndex, hItem);
+ }
+
+ }
+
+ }
+ return 0;
+ }
+
+ //树选择事件
+ int OnTreeSelChanged(TEvent* evt, LPARAM param)
+ {
+ NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+ HTREEITEM hItem = nmtv.itemNew.hItem;
+
+ //root node
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ SetAgent(L"projects");
+
+ return 1;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt, int param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnSelChanged(TEvent* evt, int param)
+ {
+ xlayersheet layer = GetControl(L"mdilayer");
+ LYSNMHDR& nmtv = *(LYSNMHDR*)evt->notify.pnmh;
+ int sheet = nmtv.nSheet;
+ int s = layer.GetSheetCount();
+
+ //状态栏显示完成路径
+ HTREEITEM hitem = tv_folder.GetSelectedItem();
+ xstring path = L"" + tv_folder.GetItemLabel(hitem);
+ while (tv_folder.GetParentItem(hitem))
+ {
+ hitem = tv_folder.GetParentItem(hitem);
+ xstring p = L"" + tv_folder.GetItemLabel(hitem);
+ path = p + L"\\" + path;
+ }
+ xcontrol xc = GetControl(L"statusbar");
+ xc.SetText(L"" + path);
+ /*
+ if(sheet<s)
+ {
+ param p=layer.GetParam(sheet);
+ int hitem = p;
+ onPrintPath(hitem);
+ }
+ */
+
+ return 1;
+ }
+ int OnSelChangedEx(TEvent* evt, int param)
+ {
+ xlayersheet layer = GetControl(L"mdilayer");
+ LYSNMHDR& nmtv = *(LYSNMHDR*)evt->notify.pnmh;
+ int sheet = nmtv.nSheet;
+ int s = layer.GetSheetCount();
+ int k = sheet_Count;
+ if (k < s)
+ {
+ void* p = nullptr;
+ layer.SetParam(s - 1, p);
+ }
+ sheet_Count = s;
+ return 1;
+ }
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND", (FEvent)&XDeveloper::OnXCommand);
+ AttachEvent(L"DevExplorer", L"NM_DBLCLK", (FEvent)&XDeveloper::OnTreeDblClick);
+ //获得树的展开事件
+ //AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING",(FEvent)&XDeveloper::OnTreeExpanding);
+ //获得树的选择事件
+ AttachEvent(L"DevExplorer", L"TVN_SELCHANGED", (FEvent)&XDeveloper::OnTreeSelChanged);
+ //改变页签
+ //AttachEvent(L"mdilayer", L"LYSN_SELECTEDSHEET",(FEvent)&XDeveloper::OnSelChanged);
+ AttachEvent(L"mdilayer", L"LYSN_SELECTEDSHEET", (FEvent)&XDeveloper::OnSelChangedEx);
+
+ return 1;
+ }
+
+ int OnInitial()
+ {
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onload()
+ {
+ sheet_Count = -1;
+ OnInitial();
+
+ tv_folder = GetControl(L"DevExplorer");
+ mle_output = GetControl(L"output");
+ SetAgent(L"projects");
+
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/wobject/xwin.hpp b/jrj/xframe/wobject/xwin.hpp
index 011b1d2..4afb28e 100644
--- a/jrj/xframe/wobject/xwin.hpp
+++ b/jrj/xframe/wobject/xwin.hpp
@@ -11,6 +11,7 @@
using kcontrol = Hxsoft::XFrame::IXFControl;
using knode = Hxsoft::XFrame::IXNode;
+#define export __declspec(dllexport)
#define DeclWinObject_(ty,pty) class __declspec(dllexport) ty : public pty
#define CreateWinObject_(ty,pty) \
public:\
--
Gitblit v1.9.3