¶Ô±ÈÐÂÎļþ |
| | |
| | | #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; |
| | | } |
| | | }; |