From 90e3cd57d7cf80588608b28b1301824b40f677ca Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期三, 04 十二月 2024 08:30:31 +0800
Subject: [PATCH] update
---
jrj/xframe/devloper/XDevEditDbmap.cpp | 317 ++
jrj/xframe/devloper/XDevEditXHtml.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXCode.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXLayer.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXOffice.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXRuler.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXMSSQL.cpp | 561 ++++
jrj/xframe/kobject/kxml.hpp | 18
jrj/xframe/devloper/XDevEditXFlow.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXWKDlg.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXPage.cpp | 130 +
jrj/xframe/devloper/devloper.cpp | 8
jrj/xframe/devloper/XDevEditXQuery.cpp | 272 ++
jrj/xframe/devloper/XDevEditXDV.cpp | 184 +
jrj/xframe/devloper/XDevFileDlg.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXWorkNode.cpp | 561 ++++
jrj/xframe/devloper/XDevEditXAction.cpp | 199 +
jrj/ext-jrj/ext-jrj.vcxproj | 69
jrj/xframe/devloper/XDevEditXFile.cpp | 371 ++
jrj/xframe/devloper/XDevEditXML.cpp | 248 ++
20 files changed, 7,420 insertions(+), 6 deletions(-)
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index f37cf40..063c9ef 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -193,7 +193,10 @@
<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\devloper\XDevEditPage.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
+ </ClInclude>
<ClInclude Include="..\xframe\kobject\kapp.hpp" />
<ClInclude Include="..\xframe\kobject\kbase.hpp" />
<ClInclude Include="..\xframe\kobject\kcachemgr.hpp" />
@@ -1168,6 +1171,70 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
</ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditDbmap.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXAction.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXCode.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXDV.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXFile.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXFlow.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXHtml.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXLayer.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXML.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXMSSQL.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXOffice.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXPage.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXQuery.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXRuler.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXWKDlg.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\xframe\devloper\XDevEditXWorkNode.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
<ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp" />
<ClCompile Include="..\xframe\src\nmemory.cpp" />
<ClCompile Include="..\xframe\src\nstring.cpp" />
diff --git a/jrj/xframe/devloper/XDevEditDbmap.cpp b/jrj/xframe/devloper/XDevEditDbmap.cpp
new file mode 100644
index 0000000..3b3cd2d
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditDbmap.cpp
@@ -0,0 +1,317 @@
+#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/xsedit.hpp>
+
+
+using xml = KXMLDOMDocument;
+class export XDevEditDbmap : public xwin
+{
+ public:
+ XDevEditDbmap(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static XDevEditDbmap* CreateInstance(void* implPtr, void* hWnd)
+ {
+ return new XDevEditDbmap(implPtr, (HWND)hWnd);
+ }
+private: //
+ xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ /*xstring xfNodeAgentArea =L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ var xframeElement = GetElement();
+ var agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+ if(agent)
+ {
+ xstring s = agent.xml;
+ m_agentNode = SetAgentNodeContent (anode,s);
+ }*/
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,LPARAM param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+ xstring content = GetData();
+ //trace(content);
+ xsedit xs = GetControl(L"content");
+ if (content != L"")
+ {
+ xs.LoadContent(content,L".xml");
+ }
+ else
+ xs.LoadContent(L"",L".xml");
+
+ xsedit xs1 = GetControl(L"xmlcontent");
+ xs1.LoadContent(L"",L".xml");
+
+ return 1;
+ }
+
+ xstring OnGetType()
+ {
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring str = e.getAttribute(L"type");
+ return str;
+ }
+
+ xstring OnGetUri()
+ {
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring str = e.getAttribute(L"uri");
+ return str;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ xstring content;
+ xsedit xs = GetControl(L"content");
+ xs.GetContent(content);
+
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (comdid == L"xmFileSave")
+ {
+ //save xml content
+ SaveContent(content);
+ }
+ else if (comdid == L"xmRunTest")
+ {
+ xstring xmlcontent;
+ xsedit xs1 = GetControl(L"xmlcontent");
+ xs1.GetContent(xmlcontent);
+ xaserverarg arg;
+
+ arg.AddArg(L"dbmap",OnGetUri());
+ arg.AddArg(L"content",xmlcontent);
+ xml x ;
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[ObjectSave.xq]",arg.GetString(),x) != 1)
+ {
+ trace(x.xml());
+ return 1;
+ }
+ xsedit xs2 = GetControl(L"sqlcontent");
+ xs2.LoadContent(x.xml(), L".xml");
+ trace(x.xml());
+ }
+ else if (comdid == L"xmTransGetSql")
+ {
+ xstring xmlcontent;
+ xsedit xs1 = GetControl(L"content");
+ xs1.GetContent(xmlcontent);
+ xaserverarg arg ;
+
+ arg.AddArg(L"content",xmlcontent);
+ xml x ;
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[GenTransSql.xq]",arg.GetString(),x) != 1)
+ {
+ trace(x.xml());
+ return 1;
+ }
+ xsedit xs2 = GetControl(L"xmlTransSql");
+ xs2.LoadContent(x.text(), L".xml");
+ //trace(x.xml());
+ }
+
+ else if (comdid == L"xmGetSql")
+ {
+ xstring xmlcontent;
+ xsedit xs1 = GetControl(L"xmlcontent");
+ xs1.GetContent(xmlcontent);
+ xaserverarg arg ;
+
+ arg.AddArg(L"dbmap",OnGetUri());
+ arg.AddArg(L"content",xmlcontent);
+ xml x ;
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[ObjectSaveSql.xq]",arg.GetString(),x) != 1)
+ {
+ trace(x.xml());
+ return 1;
+ }
+ xsedit xs2 = GetControl(L"sqlcontent");
+ xs2.LoadContent(x.text(), L".sql");
+ }
+ else if (comdid == L"xmRun")
+ {
+ xml x ;
+ x.loadXML(content);
+ KXMLDOMElement e = x.documentElement();
+ if (e.selectSingleNode(L"test[1]/@xpage"))
+ {
+ xstring xpage = e.selectSingleNode(L"test/@xpage").text();
+ xaserverarg arg;
+ arg.AddArg(L"configxml", content);
+ //arg.AddArg(L"config",L"");
+ if (e.selectSingleNode(L"test/@EntityID"))
+ arg.AddArg(L"EntityID", e.selectSingleNode(L"test/@EntityID").text());
+ OpenWindow(xpage +L"native=true", arg);
+ }
+ }
+ else if (comdid ==L"xmValid")
+ {
+ xml x;
+ if (!x.loadXML(content))
+ {
+ KXMLDOMParseError pError = x.parseError;
+ if (pError)
+ {
+ xstring str = pError.srcText();
+ xstring sError =L"\r\nXML错误: " + str.trim() +L"\r\n";
+ int s = pError.errorCode();
+ sError +=L" 代码: " + xstring(s) + L"\r\n";
+ s = pError.line();
+ sError +=L" 位置: 第" + xstring(s) +L"行,L";
+ s = pError.linepos();
+ sError +=L"第" + xstring(s) +L"列" +L"\r\n";
+ str = pError.reason();
+ sError +=L" 原因: " + str;
+ trace(sError);
+ }
+ else
+ {
+ trace(L"XML 错误");
+ }
+ xutil::RestoreCursor(hCursor);
+ return -1;
+ }
+ xstring sType = OnGetType();
+ if (sType ==L"xml.xsd")
+ {
+ xstring sError;
+ x.ValidSchema(content, &sError);
+ trace(sError);
+ }
+ }
+ else if (comdid ==L"xmEditFind")
+ {
+ xutil::RestoreCursor(hCursor);
+ xsedit xs = GetControl(L"content");
+ xs.OnFindDlg();
+ return 1;
+ }
+ else if (comdid ==L"xmEditReplace")
+ {
+ xutil::RestoreCursor(hCursor);
+ xsedit xs = GetControl(L"content");
+ xs.OnReplaceDlg();
+ return 1;
+ }
+ xutil::RestoreCursor(hCursor);
+ return 0;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt,LPARAM param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnLButtonDown(TNotifyEvent* evt,LPARAM p)
+ {
+ xsedit edit_1 = GetControl(L"content");
+ int sPos = edit_1.GetSelectionStart();
+ int ePos = edit_1.GetSelectionEnd();
+ xstring content = edit_1.GetText();
+ content = content.mid(sPos, ePos - sPos);
+ //trace(content);
+ if (content ==L"") return -1;
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ //trace(e.xml);
+ xstring str = e.getAttribute(L"type");
+ xstring uri = e.getAttribute(L"uri");
+ //trace(str);
+ xml xl ;
+ xstring xtype =L"";
+ if (str ==L"iface")
+ //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.data.url.xml]",L"",xl);
+ xtype =L"data";
+ else if (str ==L"vface")
+ //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.view.url.xml]",L"",xl);
+ xtype =L"view";
+ else
+ return 0;
+ xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale." + xtype +L".url.xml]",L"",xl);
+ //trace(xl.xml());
+ auto doc = xl;
+ auto n = doc.selectSingleNode(L"//item[@src='dev:" + str +L"[" + uri +L"]']/@url");
+ //trace(n.xml);
+ xstring aurl =L"";
+ if (n)
+ {
+ xstring tmp =L"" + n.text();
+ aurl =L"/sale/" + xtype +L"/" + tmp +L"/" + content;
+ }
+ else
+ return -1;
+ trace(aurl);
+ xml x;
+ xaserverarg arg;
+ arg.AddArg(L"url",aurl +L"?node");
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[service.url.xq]",arg.GetString(),x) != 1)
+ {
+ trace((xstring)L"error:" + x.xml());
+ return 0;
+ }
+ trace(x.xml());
+ xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevEdit.xml]",L"",xl);
+ //trace(xl.xml());
+ auto n1 = xl.selectSingleNode(L"//editor[@filetype='" + str +L"']/@xpage");
+ if (n1)
+ {
+ xstring xpage = n1.text();
+ trace(xpage);
+ xstring pa =x.xml();
+ OpenWindow(L"dev:xpage[" + xpage +L"]", 0);
+ }
+
+ return 1;
+ }
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditDbmap::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditDbmap::OnSetFocus);
+ //AttachEvent(L"content",L"WM_LBUTTONDOWN", (FEvent)&XDeveloper::OnLButtonDown);
+ }
+
+ int OnInitial()
+ {
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onload()
+ {
+ OnInitial();
+ LoadData();
+
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXAction.cpp b/jrj/xframe/devloper/XDevEditXAction.cpp
new file mode 100644
index 0000000..2d29c07
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXAction.cpp
@@ -0,0 +1,199 @@
+#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/xdwgrid.hpp>
+#include <xcontrol/xsedit.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditAction : public xwin
+{
+ public:
+ XDevEditAction(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static XDevEditAction* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDevEditAction* pWin = new XDevEditAction(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+private: //
+ xdwgrid dw_list;
+
+ xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ /*
+ xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ auto xframeElement = GetElement();
+ auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+ if(agent)
+ {
+ xstring s = agent.xml;
+ m_agentNode = SetAgentNodeContent (anode,s);
+ }
+ */
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,int param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+ xstring content = GetData();
+ if (content != L"")
+ {
+ xsedit xs = GetControl(L"sqlcontent");
+ xml x ;
+ x.loadXML(content);
+ KXMLDOMElement e = x.documentElement();
+ auto ele = e.selectSingleNode(L"datasource/sql");
+ if (ele)
+ xs.LoadContent(ele.text(), L".sql");
+
+ KXMLDOMElement e1 = e.selectSingleNode(L"datasource");
+ xcontrol xc = GetControl(L"datasource");
+ xstring v = e1.getAttribute(L"source");
+ xc.SetText(L"" + v);
+ xc = GetControl(L"linkname");
+ xstring v = e1.getAttribute(L"link");
+ xc.SetText(L"" + v);
+
+ KXMLDOMElement e2 = e.selectSingleNode(L"paras");
+ xml y ;
+ y.loadXML(e2.xml());
+ dw_list.Retrieve(y);
+ }
+ return 1;
+ }
+
+ xstring ProcessDevCmdEx(xstring cmd)
+ {
+ int nlen = 0;
+ BYTE* pdata;
+ xaserver::ProcessCmd(GetServerUrl(),L"uri.hxsoft.com/xaserver/xaction:" + cmd,0,pdata,nlen);
+ if (nlen > 0)
+ {
+ xstring str = ((WCHAR*)pdata);
+ return str.mid(0,9999999);
+ }
+else
+ return L"";
+}
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ if (comdid == L"xmFileSave")
+ {
+ HCURSOR hCursor = xutil::SetCursorWait();
+
+ xstring content;
+ xsedit xs = GetControl(L"sqlcontent");
+ xs.GetContent(content);
+
+ xml x ;
+ x.loadXML(L"<xquery/>");
+ auto root = x;
+ KXMLDOMElement e = root.createElement(L"datasource");
+ xcontrol xc = GetControl(L"datasource");
+ xstring v = xc.GetText();
+ e.setAttribute(L"source", L"" + v);
+ xc = GetControl(L"linkname");
+ v = xc.GetText();
+ e.setAttribute(L"link", L"" + v);
+ KXMLDOMElement e1 = root.createElement(L"sql");
+ e1.settext(content);
+ e.appendChild(e1);
+ root.documentElement().appendChild(e);
+
+ xml y ;
+ dw_list.DwUpdateTo(y);
+ root.documentElement().appendChild(y.documentElement());
+ //trace(y.xml());
+
+ //trace(x.xml());
+ SaveContent(x.xml());
+
+ xutil::RestoreCursor(hCursor);
+ }
+ else if (comdid == L"xmFilePreview")
+ {
+ xstring content;
+ xsedit xs = GetControl(L"sqlcontent");
+ xs.GetContent(content);
+
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring guid = e.getAttribute(L"guid");
+
+ //uri.hxsoft.com/xaserver/xquery:{70CFB15C-7722-4134-9842-0DE692F4B4FC}
+ xstring data = ProcessDevCmdEx(guid);
+ //trace(data);
+
+ //xlayersheet tab = GetControl(L"detailArea");
+ //tab.SelectSheet(1);
+
+ xsedit xc = GetControl(L"resultcontent");
+ xc.LoadContent(L"" + data,L".xml");
+ }
+ else if (comdid == L"argadd")
+ {
+ dw_list.InsertRow(0);
+ }
+ else if (comdid == L"argdelete")
+ {
+ int row = dw_list.GetRow();
+ if (row < 1) return 0;
+ dw_list.DeleteRow(row);
+ }
+ return 0;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt,LPARAM param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND", (FEvent) & XDevEditAction::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditAction::OnSetFocus);
+ }
+
+ int OnInitial()
+ {
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onload()
+ {
+ dw_list = GetControl(L"parasgrid");
+
+ OnInitial();
+ LoadData();
+
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXCode.cpp b/jrj/xframe/devloper/XDevEditXCode.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXCode.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXDV.cpp b/jrj/xframe/devloper/XDevEditXDV.cpp
new file mode 100644
index 0000000..621b492
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXDV.cpp
@@ -0,0 +1,184 @@
+#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/xdwgrid.hpp>
+#include <xcontrol/xsedit.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditXDV : public xwin
+{
+ public:
+ XDevEditXDV(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static XDevEditXDV* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDevEditXDV* pWin = new XDevEditXDV(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+private: //
+xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ auto xframeElement = GetElement();
+ auto agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+ if (agent)
+ {
+ xstring s = agent.xml();
+ m_agentNode = SetAgentNode(anode,s);
+ }
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,LPARAM param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+ xstring content = GetData();
+ if (content != L"")
+ {
+ xsedit xs = GetControl(L"xcontent");
+ xs.LoadContent(content,L".xml");
+ }
+ return 1;
+ }
+
+ xstring OnGetType()
+ {
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring str = e.getAttribute(L"type");
+ return str;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ xstring content;
+ xsedit xs = GetControl(L"xcontent");
+ xs.GetContent(content);
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (comdid == L"xmFileSaveEx")
+ {
+ //save xml content
+ SaveContent(content);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else if (comdid == L"xmValidEx")
+ {
+ xml x;
+ if (!x.loadXML(content))
+ {
+ KXMLDOMParseError pError = x.parseError;
+ if (pError)
+ {
+ xstring str = pError.srcText();
+ xstring sError = L"\r\nXML错误: " + str.trim() + L"\r\n";
+ int s = pError.errorCode();
+ sError += L" 代码: " + xstring(s) + L"\r\n";
+ s = pError.line();
+ sError += L" 位置: 第" + xstring(s) + L"行,L";
+ s = pError.linepos();
+ sError += L"第" + xstring(s) + L"列" + L"\r\n";
+ str = pError.reason();
+ sError += L" 原因: " + str;
+ trace(sError);
+ }
+ else
+ {
+ trace(L"XML 错误");
+ }
+ xutil::RestoreCursor(hCursor);
+ return -1;
+ }
+ xstring sType = OnGetType();
+ if (sType == L"xml.xsd")
+ {
+ xstring sError;
+ x.ValidSchema(content, &sError);
+ trace(sError);
+ }
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else if (comdid == L"xmEditFind")
+ {
+ OpenWindow(L"dev:xpage[xcode.finddlg]");
+ }
+ else if (comdid == L"xmEditReplace")
+ {
+ OpenWindow(L"dev:xpage[xcode.replacedlg]");
+ }
+ xutil::RestoreCursor(hCursor);
+ return 0;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt,int param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXDV::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXDV::OnSetFocus);
+ }
+
+ /*
+ int OnRetrieve()
+ {
+ xstring query=L"[xxx]";
+ xml x = new xml;
+ xaserverarg arg;
+ arg.AddArg(L"xxx",L"xxx");
+ if (xaserver::ExecXQuery(GetServerUrl(),query,arg.Getxstring(),x)!=1)
+ {
+ trace(x.text);
+ return -1;
+ }else
+ {
+ dw_list.Retrieve(x);
+ dw_list.Redraw();
+ }
+ return 1;
+ }
+ */
+
+ int OnInitial()
+ {
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onload()
+ {
+
+ OnInitial();
+ LoadData();
+
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXFile.cpp b/jrj/xframe/devloper/XDevEditXFile.cpp
new file mode 100644
index 0000000..50e0dea
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXFile.cpp
@@ -0,0 +1,371 @@
+#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/xdwgrid.hpp>
+#include <xcontrol/xsedit.hpp>
+#include <xcontrol/xcombobox.hpp>
+#include <xcontrol/xreport.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditXFile : public xwin
+{
+ public:
+ XDevEditXFile(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static XDevEditXFile* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDevEditXFile* pWin = new XDevEditXFile(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+private: //
+ xreport xp;
+
+ xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ /* xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ auto xframeElement = GetElement();
+ auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+ if(agent)
+ {
+ xstring s = agent.xml;
+ m_agentNode = SetAgentNodeContent (anode,s);
+ }
+ */ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,LPARAM param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ xstring OnGetType()
+ {
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring str = e.getAttribute(L"type");
+ return str;
+ }
+
+ KXMLDOMElement OnRetrieve(KXMLDOMElement ele)
+ {
+ xml doc;
+ doc.loadXML(L"<schema/>");
+ auto docroot = doc.documentElement();
+
+ auto list = ele.selectNodes(L"*");
+ int i;
+ int s = list.length();
+ for (i = 0; i < s; i++)
+ {
+ KXMLDOMElement e = list.item(i);
+ xstring name = e.getAttribute(L"name");
+ xstring id = e.getAttribute(L"id");
+ xstring sechma = e.getAttribute(L"sechma");
+ xstring et = e.getAttribute(L"et");
+
+ xml x;
+ x.loadXML(L"<item/>");
+ auto root = x.documentElement();
+ root.setAttribute(L"colname",id);
+ root.setAttribute(L"name",name);
+ root.setAttribute(L"type",sechma);
+ root.setAttribute(L"note",et);
+
+ if (e.hasChildNodes())
+ {
+ KXMLDOMElement e1 = OnRetrieve(e);
+ KXMLDOMNodeList e2 = e1.selectNodes(L"item");
+ int k;
+ int l = e2.length();
+ for (k = 0; k < l; k++)
+ root.appendChild(e2.item(k));
+ }
+
+ docroot.appendChild(root);
+ }
+ return docroot;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ xsedit xs = GetControl(L"xcontent");
+ xstring content;
+ xs.GetContent(content);
+
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (comdid == L"xmFileSave")
+ {
+ //save xml content
+ SaveContent(content);
+ }
+ else if (comdid == L"xmTable")
+ {
+ xml x;
+ xaserverarg arg;
+ arg.AddArg(L"content",content);
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[GenTableSchema.xq]",arg.GetString(),x) != 1)
+ {
+ return 1;
+ }
+ //trace(x.text);
+ xsedit xs1 = GetControl(L"gncontent");
+ xs1.LoadContent(x.xml(),L".sql");
+ }
+ else if (comdid == L"xmDDL")
+ {
+ xml x;
+ xaserverarg arg;
+ arg.AddArg(L"content",content);
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[GenDLLBySchema.xq]",arg.GetString(),x) != 1)
+ {
+ return 1;
+ }
+ xsedit xs1 = GetControl(L"gncontent");
+ xs1.LoadContent(x.xml(),L".sql");
+ //trace(x.text);
+ }
+ else if (comdid == L"xmDbmap")
+ {
+ xml x;
+ xaserverarg arg;
+ arg.AddArg(L"content",content);
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[GenDbmapBySchema.xq]",arg.GetString(),x) != 1)
+ {
+ return 1;
+ }
+ xsedit xs1 = GetControl(L"gncontent");
+ xs1.LoadContent(x.xml(),L".xml");
+ //trace(x.xml());
+ }
+ else if (comdid == L"xmValid")
+ {
+ if (L"" + content == L"") return 0;
+ xml x;
+ if (!x.loadXML(content))
+ {
+ KXMLDOMParseError pError = x.parseError;
+ if (pError)
+ {
+ xstring str = pError.srcText();
+ xstring sError = L"\r\nXMLaa错误: " + str.trim() + L"\r\n";
+ int s = pError.errorCode();
+ sError += L" 代码: " + xstring(s) + L"\r\n";
+ s = pError.line();
+ sError += L" 位置: 第" + xstring(s) + L"行,L";
+ s = pError.linepos();
+ sError += L"第" + xstring(s) + L"列" + L"\r\n";
+ str = pError.reason();
+ sError += L" 原因: " + str;
+ trace(sError);
+ }
+ else
+ {
+ trace(L"XML 错误");
+ }
+ return -1;
+ }
+ xstring sType = OnGetType();
+ if (sType == L"xml.xsd")
+ {
+ xstring sError;
+ x.ValidSchema(content, &sError);
+ trace(sError);
+ }
+ }
+ else if (comdid == L"xview")
+ {
+ if (L"" + content == L"") return 0;
+ if (OnCmdDispatch(L"xmValid") != -1)
+ {
+ xml x;
+ if (x.loadXML(content))
+ {
+ xp.Reset();
+ /* xp.ResetEx();
+ while(xp.GetRowCount() > 0)
+ xp.DeleteRow(1);
+ */ xp.Redraw();
+ xstring sType = OnGetType();
+ if (sType == L"iface")
+ {
+ auto e = x.selectSingleNode(L"interface");
+ if (e) {
+ KXMLDOMElement ele = OnRetrieve(e);
+ xp.Retrieve(ele);
+ }
+ }
+ else if (sType == L"xml.xsd")
+ {
+ xml doc;
+ x.GetSchemaXml(content,doc);
+ //trace(doc.xml());
+ auto e = doc.selectSingleNode(L"root/schema");
+ if (e) {
+ xp.Retrieve(e);
+ }
+ }
+ xp.CreateTree(L"node()", 1, 15, 16);
+ xp.Redraw();
+ }
+ }
+ }
+ xutil::RestoreCursor(hCursor);
+ return 0;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt,int param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ xstring GetXSD(xstring name)
+ {
+ 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"";
+ int 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)
+ {
+ auto f = e.selectSingleNode(L"//*[@uri='" + name + L"']");
+ if (f) {
+ xstring guid = KXMLDOMElement(f).selectSingleNode(L"@guid").text;//.getAttribute(L"guid");
+ if (guid == L"")
+ return "";
+ arg.AddArg(L"guid",guid);
+ }
+ else
+ return "";
+ }
+ 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);
+ }
+ return ProcessDevCmd(L"getobject",arg.GetString());
+ }
+ else
+ return L"";
+ }
+
+int OnDoubleClicked(ref TNotifyEvent evt,int param)
+{
+ ref DWNMHDR hdr = evt.pnmh;
+ int row = hdr.row;
+ KXMLDOMElement e = xp.GetRowElement(row);
+ xstring filename = e.getAttribute(L"type");
+ if (filename.right(4) == L".xsd")
+ {
+ xstring xsd = GetXSD(L"" + filename);
+ xml x;
+ x.GetSchemaXml(xsd,x);
+ trace(x.xml());
+
+ /* xml x = new xml;
+ xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevEdit.xml]",L"",x);
+ auto n = x.selectSingleNode(L"//editor[@filetype='xml.xsd']/@xpage");
+ if(n)
+ {
+ xstring xpage = n.text;
+ xwin w = GetFrameWindow();
+ xlayersheet layer = w.GetControl(L"mdilayer");
+ int i = 0;
+ int nIndex = layer.GetSheetCount();
+ for(i=0;i<nIndex;i++)
+ {
+ if(hItem == layer.GetWinParam(i))break;
+ }
+ if(i<nIndex)return 1;
+
+ OpenWindow(L"dev:xpage["+xpage+L"]",hItem);
+ if(nIndex < layer.GetSheetCount())
+ layer.SetParam(nIndex,hItem);
+ }
+ */
+ }
+ return 1;
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND",OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+ AttachEvent(L"xreport",L"DWV_DOUBLECLICKED",OnDoubleClicked);
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+ xsedit xs = GetControl(L"xcontent");
+ xstring content = GetData();
+ if (content != L"")
+ {
+ xs.LoadContent(content,L".xml");
+ }
+ return 1;
+ }
+
+ int OnInitial()
+ {
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onload()
+ {
+ OnInitial();
+
+ xp = GetControl(L"xreport");
+
+ LoadData();
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXFlow.cpp b/jrj/xframe/devloper/XDevEditXFlow.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXFlow.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXHtml.cpp b/jrj/xframe/devloper/XDevEditXHtml.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXHtml.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXLayer.cpp b/jrj/xframe/devloper/XDevEditXLayer.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXLayer.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXML.cpp b/jrj/xframe/devloper/XDevEditXML.cpp
new file mode 100644
index 0000000..1467847
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXML.cpp
@@ -0,0 +1,248 @@
+#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/xdwgrid.hpp>
+#include <xcontrol/xsedit.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditXML : public xwin
+{
+ public:
+ XDevEditXML(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static XDevEditXML* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDevEditXML* pWin = new XDevEditXML(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+private:
+ xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ /*xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ auto xframeElement = GetElement();
+ auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+ if(agent)
+ {
+ xstring s = agent.xml;
+ m_agentNode = SetAgentNodeContent (anode,s);
+ }*/
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,LPARAM param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+ xstring content = GetData();
+ //trace(content);
+ xsedit xs = GetControl(L"content");
+ if (content != L"")
+ {
+ xs.LoadContent(content,L".xml");
+ }
+else
+ xs.LoadContent(L"",L".xml");
+return 1;
+}
+
+xstring OnGetType()
+{
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring str = e.getAttribute(L"type");
+ return str;
+}
+
+//命令发布函数
+int OnCmdDispatch(xstring comdid)
+{
+ xstring content;
+ xsedit xs = GetControl(L"content");
+ xs.GetContent(content);
+
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (comdid == L"xmFileSave")
+ {
+ //save xml content
+ SaveContent(content);
+ }
+ else if (comdid == L"xmRun")
+ {
+ xml x = new xml;
+ x.loadXML(content);
+ KXMLDOMElement e = x.documentElement();
+ if (e.selectSingleNode(L"test[1]/@xpage"))
+ {
+ xstring xpage = e.selectSingleNode(L"test/@xpage").text();
+ xaserverarg arg;
+ arg.AddArg(L"configxml", content);
+ //arg.AddArg(L"config", L"");
+ if (e.selectSingleNode(L"test/@EntityID"))
+ arg.AddArg(L"EntityID", e.selectSingleNode(L"test/@EntityID").text());
+ OpenWindow(xpage + L"native=true", arg);
+ }
+ }
+ else if (comdid == L"xmValid")
+ {
+ xml x;
+ if (!x.loadXML(content))
+ {
+ KXMLDOMParseError pError = x.parseError();
+ if (pError)
+ {
+ xstring str = pError.srcText();
+ xstring sError = L"\r\nXML错误: " + str.trim() + L"\r\n";
+ int s = pError.errorCode();
+ sError += L" 代码: " + xstring(s) + L"\r\n";
+ s = pError.line();
+ sError += L" 位置: 第" + xstring(s) + L"行,L";
+ s = pError.linepos();
+ sError += L"第" + xstring(s) + L"列" + L"\r\n";
+ str = pError.reason();
+ sError += L" 原因: " + str;
+ trace(sError);
+ }
+ else
+ {
+ trace(L"XML 错误");
+ }
+ xutil::RestoreCursor(hCursor);
+ return -1;
+ }
+ xstring sType = OnGetType();
+ if (sType == L"xml.xsd")
+ {
+ xstring sError;
+ x.ValidSchema(content, &sError);
+ trace(sError);
+ }
+ }
+ else if (comdid == L"xmEditFind")
+ {
+ xutil::RestoreCursor(hCursor);
+ xsedit xs = GetControl(L"content");
+ xs.OnFindDlg();
+ return 1;
+ }
+ else if (comdid == L"xmEditReplace")
+ {
+ xutil::RestoreCursor(hCursor);
+ xsedit xs = GetControl(L"content");
+ xs.OnReplaceDlg();
+ return 1;
+ }
+ xutil::RestoreCursor(hCursor);
+ return 0;
+}
+
+//命令处理事件
+int OnXCommand(TEvent* evt,LPARAM param)
+{
+ return OnCmdDispatch(evt->xcommand.pStrID);
+}
+
+int OnLButtonDown(TEvent* evt,LPARAM p)
+{
+ xsedit edit_1 = GetControl(L"content");
+ int sPos = edit_1.GetSelectionStart();
+ int ePos = edit_1.GetSelectionEnd();
+ xstring content = edit_1.GetText();
+ content = content.mid(sPos, ePos - sPos);
+ //trace(content);
+ if (content == L"") return -1;
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ //trace(e.xml);
+ xstring str = e.getAttribute(L"type");
+ xstring uri = e.getAttribute(L"uri");
+ //trace(str);
+ xml xl = new xml;
+ xstring xtype = L"";
+ if (str == L"iface")
+ //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.data.url.xml]",L"",xl);
+ xtype = L"data";
+ else if (str == L"vface")
+ //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.view.url.xml]",L"",xl);
+ xtype = L"view";
+ else
+ return 0;
+ xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale." + xtype + L".url.xml]",L"",xl);
+ //trace(xl.xml());
+ auto doc = xl;
+ auto n = doc.selectSingleNode(L"//item[@src='dev:" + str + L"[" + uri + L"]']/@url");
+ //trace(n.xml);
+ xstring aurl = L"";
+ if (n)
+ {
+ xstring tmp = n.text();
+ aurl = L"/sale/" + xtype + L"/" + tmp + L"/" + content;
+ }
+ else
+ return -1;
+ trace(aurl);
+ xml x = new xml;
+ xaserverarg arg;
+ arg.AddArg(L"url",aurl + L"?node");
+ if (xaserver::ExecXQuery(GetServerUrl(),L"[service.url.xq]",arg.GetString(),x) != 1)
+ {
+ trace((xstring)L"error:" + x.xml());
+ return 0;
+ }
+ trace(x.xml());
+ xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevEdit.xml]",L"",xl);
+ //trace(xl.xml());
+ auto n1 = xl.selectSingleNode(L"//editor[@filetype='" + str + L"']/@xpage");
+ if (n1)
+ {
+ xstring xpage = n1.text();
+ trace(xpage);
+ OpenWindow(L"dev:xpage[" + xpage + L"]", 0);
+ }
+
+ return 1;
+}
+int OnAttachEvent()
+{
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXML::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXML::OnSetFocus);
+ //AttachEvent(L"content",L"WM_LBUTTONDOWN", ,(FEvent)&XDevEditXML::OnLButtonDown);
+}
+
+int OnInitial()
+{
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+}
+
+int onload()
+{
+ OnInitial();
+ LoadData();
+
+ return 1;
+}
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXMSSQL.cpp b/jrj/xframe/devloper/XDevEditXMSSQL.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXMSSQL.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXOffice.cpp b/jrj/xframe/devloper/XDevEditXOffice.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXOffice.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXPage.cpp b/jrj/xframe/devloper/XDevEditXPage.cpp
new file mode 100644
index 0000000..0e63798
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXPage.cpp
@@ -0,0 +1,130 @@
+#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/xsedit.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditXPage : public xwin
+{
+ public:
+ XDevEditXPage(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd){}
+public:
+ static XDevEditXPage* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDevEditXPage* pWin = new XDevEditXPage(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+private: //
+ xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ /*
+ xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ var xframeElement = GetElement();
+ var agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+ if(agent)
+ {
+ xstring s = agent.xml;
+ m_agentNode = SetAgentNodeContent (anode,s);
+ }
+ */
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,LPARAM param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ if (comdid == L"xmPreview")
+ {
+ }
+ else if (comdid == L"xmFileSaveEx")
+ {
+ xsedit xs = GetControl(L"xpagecontent");
+ xsedit xc = GetControl(L"xcodecontent");
+
+ HCURSOR hCursor = xutil::SetCursorWait();
+
+ xstring content;
+ //save xml content
+ xs.GetContent(content);
+ SaveContent(content);
+
+ xstring code;
+ //save tpp content
+ xc.GetContent(code);
+ SaveContentEx(code,1);
+ //
+ xutil::RestoreCursor(hCursor);
+
+ return 1;
+ }
+ return 0;
+ }
+
+ //命令处理事件
+ int OnXCommand(TEvent* evt,LPARAM param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXPage::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXPage::OnSetFocus);
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+
+ xsedit xs = GetControl(L"xpagecontent");
+ xsedit xc = GetControl(L"xcodecontent");
+
+ xstring content = GetData();
+ if (content != L"")
+ {
+ xs.LoadContent(content,L".xml");
+ }
+ xstring code = GetData(1);
+ if (code != L"")
+ {
+
+ xc.LoadContent(code,L".vl");
+ //xc.LoadContent(code,L".cpp");
+ }
+
+ return 1;
+ }
+
+ int OnInitial()
+ {
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onload()
+ {
+ OnInitial();
+ LoadData();
+ return 1;
+ }
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXQuery.cpp b/jrj/xframe/devloper/XDevEditXQuery.cpp
new file mode 100644
index 0000000..9d50fc8
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXQuery.cpp
@@ -0,0 +1,272 @@
+#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/xdwgrid.hpp>
+#include <xcontrol/xsedit.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+using xml = KXMLDOMDocument;
+class export XDevEditXQuery : public xwin
+{
+ public:
+ XDevEditXQuery(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static XDevEditXQuery* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDevEditXQuery* pWin = new XDevEditXQuery(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+private: //
+ xdwgrid dw_list;
+
+ xnode m_agentNode; //Agent Condition
+ xstring m_agentCond; //Agent Node
+ int SetAgent()
+ {
+ /*
+ xstring xfNodeAgentArea = L"agentarea";
+ xnode anode = GetAgentNode(xfNodeAgentArea);
+ auto xframeElement = GetElement();
+ auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+ if(agent)
+ {
+ xstring s = agent.xml;
+ m_agentNode = SetAgentNodeContent (anode,s);
+ }
+ */
+ return 1;
+ }
+
+ //焦点激活处理函数
+ int OnSetFocus(TEvent* evt,LPARAM param)
+ {
+ SetAgent();
+
+ //重置工具条
+ return 1;
+ }
+
+ int LoadData()
+ {
+ if (!GetWinParam()) return 1;
+ xstring content = GetData();
+ xsedit xs = GetControl(L"sqlcontent");
+ if (content != L"")
+ {
+ xml x;
+ x.loadXML(content);
+ KXMLDOMElement e = x.documentElement();
+ auto ele = e.selectSingleNode(L"datasource/sql");
+ if (ele)
+ xs.LoadContent(ele.text(), L".sql");
+
+ KXMLDOMElement e1 = e.selectSingleNode(L"datasource");
+ xcontrol xc = GetControl(L"datasource");
+ xstring v = e1.getAttribute(L"source");
+ xc.SetText(L"" + v);
+ xc = GetControl(L"linkname");
+ xstring v = e1.getAttribute(L"link");
+ xc.SetText(L"" + v);
+
+ KXMLDOMElement e2 = e.selectSingleNode(L"paras");
+ xml y;
+ y.loadXML(e2.xml());
+ dw_list.Retrieve(y);
+ }
+else
+{
+ xs.LoadContent(L"import 'qx.object.xq'",L".sql");
+}
+
+return 1;
+}
+
+xstring ProcessDevCmdEx(xstring cmd)
+{
+ int nlen = 0;
+ BYTE* pdata;
+ xaserver::ProcessCmd(GetServerUrl(),L"uri.hxsoft.com/xaserver/xquery:" + cmd,0,pdata,nlen);
+ if (nlen > 0)
+ {
+ xstring str = ((WCHAR*)pdata);;
+ return str.mid(0,99999999);
+ }
+else
+ return L"";
+}
+
+//命令发布函数
+int OnCmdDispatch(xstring comdid)
+{
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (comdid == L"xmFileSaveEx")
+ {
+ HCURSOR hCursor = xutil::SetCursorWait();
+
+ xstring content;
+ xsedit xs = GetControl(L"sqlcontent");
+ xs.GetContent(content);
+
+ xml x;
+ x.loadXML(L"<xquery/>");
+ auto root = x;
+ KXMLDOMElement e = root.createElement(L"datasource");
+ xcontrol xc = GetControl(L"datasource");
+ xstring v = xc.GetText();
+ e.setAttribute(L"source", L"" + v);
+ xc = GetControl(L"linkname");
+ v = xc.GetText();
+ e.setAttribute(L"link", L"" + v);
+ KXMLDOMElement e1 = root.createElement(L"sql");
+ e1.settext(content);
+ e.appendChild(e1);
+ root.documentElement().appendChild(e);
+
+ xml y ();
+ dw_list.DwUpdateTo(y);
+ root.documentElement().appendChild(y.documentElement());
+ //trace(y.xml());
+
+ //trace(x.xml());
+ SaveContent(x.xml());
+
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else if (comdid == L"xmFilePreviewEx")
+ {
+ xstring content;
+ xsedit xs = GetControl(L"sqlcontent");
+ xs.GetContent(content);
+
+ xcombobox ddlb = GetControl(L"datasource");
+ xstring ddlbStr = ddlb.GetText();
+ if (ddlbStr == L"VSQLEx")
+ {
+ xml x ;
+ xaserverarg arg ;
+ arg.AddArg(L"sql", content);
+ xaserver::ExecXQuery(GetServerUrl(), L"[test1.xq]", arg.GetString(), x);
+ xstring data = x.xml();
+ //xsedit xc = GetControl(L"resultcontent");
+ //xc.LoadContent(L""+data,L".xml");
+ xsedit xc1 = GetControl(L"frame:vdata");
+ xc1.LoadContent(L"" + data,L".xml");
+ }
+ else
+ {
+
+ xwin w = GetFrameWindow();
+ xtreeview tv_folder = w.GetControl(L"DevExplorer");
+ HTREEITEM hItem = (HTREEITEM)GetWinParam();
+ KXMLDOMElement e = tv_folder.GetItemData(hItem);
+ xstring guid = e.getAttribute(L"guid");
+
+ xstring data;
+ if (ddlbStr == L"XQUERY")
+ {
+ data = ProcessDevCmdEx(L"" + guid);
+ }
+else
+{
+ data = ProcessDevCmdEx(L"" + guid);
+ xml x ;
+ xaserver::ExecXQuery(GetServerUrl(),guid,L"",x);
+ data = x.xml();
+}
+
+ //xsedit xc = GetControl(L"resultcontent");
+ ///*if(data != L"")*/ xc.LoadContent(L""+data,L".xml");
+
+ //xwin xw = GetFrameWindow();
+ xsedit xc1 = GetControl(L"frame:vdata");
+ trace(data.left(16384));
+ //if(data.length() > 16000)
+ /*if(data!=L"")
+ xc1.LoadContent(L""+data,L".xml");
+ else
+ xc1.LoadContent(L" ",L".xml");*/
+ xc1.SetText(data);
+
+ }
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else if (comdid == L"argaddEx")
+ {
+ dw_list.InsertRow(0);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else if (comdid == L"argdeleteEx")
+ {
+ int row = dw_list.GetRow();
+ if (row < 1) return 0;
+ dw_list.DeleteRow(row);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+else if (comdid == L"xmEntitySel")
+{
+ xaserverarg arg ;
+ OpenWindow(L"dev:xpage[XEntityColumnSelDlg.xpage]",arg);
+ xstring str = arg.GetArgString(L"select");
+ if (str != L"") trace(L"\r\n---------------------\r\n" + str);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+}
+else if (comdid == L"xmEditFind")
+{
+ xutil::RestoreCursor(hCursor);
+ xsedit xs = GetControl(L"sqlcontent");
+ xs.OnFindDlg();
+ return 1;
+}
+else if (comdid == L"xmEditReplace")
+{
+ xutil::RestoreCursor(hCursor);
+ xsedit xs = GetControl(L"sqlcontent");
+ xs.OnReplaceDlg();
+ return 1;
+}
+
+xutil::RestoreCursor(hCursor);
+return 0;
+}
+
+//命令处理事件
+int OnXCommand(TEvent* evt,LPARAM param)
+{
+ return OnCmdDispatch(evt->xcommand.pStrID);
+}
+
+int OnAttachEvent()
+{
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXQuery::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXQuery::OnSetFocus);
+}
+
+int OnInitial()
+{
+ SetAgent();
+
+ OnAttachEvent();
+
+ return 1;
+}
+
+int onload()
+{
+ dw_list = GetControl(L"parasgrid");
+
+ OnInitial();
+ LoadData();
+
+ return 1;
+}
+};
\ No newline at end of file
diff --git a/jrj/xframe/devloper/XDevEditXRuler.cpp b/jrj/xframe/devloper/XDevEditXRuler.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXRuler.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXWKDlg.cpp b/jrj/xframe/devloper/XDevEditXWKDlg.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXWKDlg.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevEditXWorkNode.cpp b/jrj/xframe/devloper/XDevEditXWorkNode.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevEditXWorkNode.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/XDevFileDlg.cpp b/jrj/xframe/devloper/XDevFileDlg.cpp
new file mode 100644
index 0000000..f26ab17
--- /dev/null
+++ b/jrj/xframe/devloper/XDevFileDlg.cpp
@@ -0,0 +1,561 @@
+#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
+{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
+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/devloper/devloper.cpp b/jrj/xframe/devloper/devloper.cpp
index b586ae3..f26ab17 100644
--- a/jrj/xframe/devloper/devloper.cpp
+++ b/jrj/xframe/devloper/devloper.cpp
@@ -8,6 +8,14 @@
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
{
+ public:
+ XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+public:
+ static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+ {
+ XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+ return pWin;
+ }
private: //
xtreeview tv_folder;
xcontrol mle_output;
diff --git a/jrj/xframe/kobject/kxml.hpp b/jrj/xframe/kobject/kxml.hpp
index 00fcbb1..8606072 100644
--- a/jrj/xframe/kobject/kxml.hpp
+++ b/jrj/xframe/kobject/kxml.hpp
@@ -13,7 +13,7 @@
class KXMLDOMTextNode;
class KXMLDOMProcessingInstruction;
class KXMLDOMNodeList;
- class KXMLParseError;
+ class KXMLDOMParseError;
enum KDOMNodeType
{
@@ -212,7 +212,7 @@
wchar_t* transformNode(KXMLDOMNode);
KXMLDOMNode transformNodeToObject(KXMLDOMNode);
- KXMLParseError validate();
+ KXMLDOMParseError validate();
//bool validateNode();
public:
KXMLDOMDocument(void* impl);
@@ -284,11 +284,19 @@
using KXMLDOMElement=Hxsoft::XFrame::KXMLDOMElement;
using KXMLDOMNodeList = Hxsoft::XFrame::KXMLDOMNodeList;
-class KXMLParseError : public KXMLDOMNode
+class KXMLDOMParseError : public KXMLDOMNode
{
public:
- KXMLParseError(KXMLDOMNode& v);
- KXMLParseError(void* impl) :KXMLDOMNode(impl) {}
+ KXMLDOMParseError(KXMLDOMNode& v);
+ KXMLDOMParseError(void* impl) :KXMLDOMNode(impl) {}
+public:
+ int errorCode();
+ int filepos();
+ int line();
+ int linepos();
+ BSTR reason();
+ BSTR srcText();
+ BSTR url();
};
class KXMLDOMElementPtr
--
Gitblit v1.9.3