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