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