From bd09edf1b441dcc6ab098f277bea86a72c009879 Mon Sep 17 00:00:00 2001 From: xj qian <qianxj15@sina.com> Date: 星期四, 05 十二月 2024 17:30:21 +0800 Subject: [PATCH] update --- jrj/xframe/devloper/XDevEditXMSSQL.cpp | 981 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 513 insertions(+), 468 deletions(-) diff --git a/jrj/xframe/devloper/XDevEditXMSSQL.cpp b/jrj/xframe/devloper/XDevEditXMSSQL.cpp index f26ab17..d17d8bc 100644 --- a/jrj/xframe/devloper/XDevEditXMSSQL.cpp +++ b/jrj/xframe/devloper/XDevEditXMSSQL.cpp @@ -4,187 +4,177 @@ #include <wobject/xaserverarg.hpp> #include <xcontrol/xtreeview.hpp> #include <xcontrol/xlayersheet.hpp> +#include <xcontrol/xtreeview.hpp> +#include <xcontrol/xlayersheet.hpp> +#include <xcontrol/xsedit.hpp> +#include <xcontrol/xdwgrid.hpp> +#include "XDevEditPage.hpp" using xml = KXMLDOMDocument; -class export XDeveloper : public xwin +class export XDevEditXMSSQL : public XDevEditPage { - public: - XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {} public: - static XDeveloper* CreateInstance(void* implPtr, void* hWnd) + XDevEditXMSSQL(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {} +public: + static XDevEditXMSSQL* CreateInstance(void* implPtr, void* hWnd) { - XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd); + XDevEditXMSSQL* pWin = new XDevEditXMSSQL(implPtr, (HWND)hWnd); return pWin; } private: // - xtreeview tv_folder; - xcontrol mle_output; - int sheet_Count; -public: - int trace(xstring msg) + xtreeview tv_db; + xlayersheet list; + + //xnode m_agentNode; //Agent Condition + //xstring m_agentCond; //Agent Node + int SetAgent() { - 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 xfNodeAgentArea = L"agentarea"; + xnode anode = GetAgentNode(xfNodeAgentArea); + var xframeElement = GetElement(); + var agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*"); + if(agent) { - xstring guid = e.getAttribute(L"guid"); - arg.AddArg(L"guid", guid); + xstring s = agent.xml; + m_agentNode = SetAgentNodeContent (anode,s); } - KXMLDOMElement p = tv_folder.GetItemData(hP2Item); - xstring guid = p.getAttribute(L"guid"); - arg.AddArg(L"root.guid", guid); + */ return 1; } - 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 OnSetFocus(TEvent* evt,LPARAM param) + { + SetAgent(); + + //重置工具条 + return 1; } - int OnTreeDblClick(TEvent* evt, int param) + xstring getLink(HTREEITEM item) { - 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++) + HTREEITEM p = tv_db.GetParentItem(item); + while (tv_db.GetParentItem(p) > 0) { - if (hItem == layer.GetParam(i))break; + item = tv_db.GetParentItem(item); + p = tv_db.GetParentItem(item); } - if (i < nIndex) + xstring link = tv_db.GetItemData(item); + return link; + } + + KXMLDOMElement OnXQuery(xstring data) + { + HTREEITEM item = tv_db.GetSelectedItem(); + xstring link = getLink(item); + xml x ; + xaserverarg arg; + arg.AddArg(L"type",data); + arg.AddArg(L"link",link); + if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSQL.list.xq]",arg.GetString(),x) != 1) { - layer.SelectSheet(i); + trace(x.xml()); return 1; } - KXMLDOMElement e = tv_folder.GetItemData(hItem); - xstring node = e.tagName(); - if (node == L"File" || node == L"file") + return x.documentElement(); + } + + int setGrid(KXMLDOMElement e,xstring caption) + { + xml x; + xdwgrid grid = GetControl(caption); + if (!e.selectSingleNode(L"grid/sheet")) return 0; + x.loadXML(e.selectSingleNode(L"grid/sheet").xml()); + grid.SetDataObject(x); + if (!e.selectSingleNode(L"datas")) return 0; + x.loadXML(e.selectSingleNode(L"datas").xml()); + grid.Retrieve(x); + grid.Redraw(); + return 1; + } + + xstring replace(xstring a, xstring b, xstring c, int s=0) + { + int k = a.find(b,s); + if (k > -1) { - //xstring str = ProcessDevCmd(L"getobject",arg.GetString()); - xstring typ = e.getAttribute(L"type"); + xstring str; + if (k == 0) + str = L"" + c + a.right(a.length() - k - b.length()); + else if (k + b.length() == a.length()) + str = L"" + a.left(k) + c; + else + str = L"" + a.left(k) + c + a.right(a.length() - k - b.length()); + replace(str, b, c, k + b.length() + 1); + } + else + return a; + } - 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); - } + int OnOpen(xstring caption,xstring node) + { + int s = list.GetSheetCount(); + int i; + xstring pa = node + L"." + caption; + for (i = 0; i < s; i++) + { + xstring p = (wchar_t*)list.GetParam(i); + if (pa == p) + break; + } + if (i < s) + { + list.SelectSheet(i); + return 0; + } + KXMLDOMElement xframeElement = GetElement(); + KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + node + L"/*"); + xstring str = replace(agent.xml(), L"{#1}", caption); + xml x ; + x.loadXML(str); + int k = list.InsertSheet(-1,(LPTSTR)caption.c_str(), x.documentElement()); + list.SelectSheet(k); + list.SetParam(k,(void*)pa.c_str(true)); + return 1; + } + int onShow() + { + while (tv_db.GetRootItem() > 0) + tv_db.DeleteItem(tv_db.GetRootItem()); + xsedit xs = GetControl(L"xcontent"); + xstring content; + xs.GetContent(content); + xml x ; + x.loadXML(content); + KXMLDOMElement e = x.documentElement(); + xstring name = e.getAttribute(L"name"); + HTREEITEM root = tv_db.InsertItem(name.c_str(), NULL, 16); + auto lists = e.selectNodes(L"*"); + int i; + int s = lists.length(); + for (i = 0; i < s; i++) + { + KXMLDOMElement ele = lists.item(i); + xstring name = ele.getAttribute(L"name"); + xstring link = ele.getAttribute(L"link"); + HTREEITEM k = tv_db.InsertChildItem(root,L"" + name,L"" + link,15); + HTREEITEM j = tv_db.InsertChildItem(k,L"表",L"table",22); + tv_db.SetItemChild1(j,1); + j = tv_db.InsertChildItem(k,L"视图",L"view",23); + tv_db.SetItemChild1(j,1); + j = tv_db.InsertChildItem(k,L"存储过程",L"procedure",24); + tv_db.SetItemChild1(j,1); + j = tv_db.InsertChildItem(k,L"自定义函数",L"function",25); + tv_db.SetItemChild1(j,1); + } + tv_db.ExpandItem(root); + + if (list.GetSheetCount() < 1) + { + xstring caption = L"Query"; + if (OnOpen(caption,L"query") == 0) return 0; + xsedit xs = GetControl(L"sql_" + caption); + xs.LoadContent(L"",L".sql"); } return 1; } @@ -192,356 +182,411 @@ //命令发布函数 int OnCmdDispatch(xstring comdid) { - // - if (comdid == L"xmSqlWatch") + HCURSOR hCursor = xutil::SetCursorWait(); + xsedit xs = GetControl(L"xcontent"); + xstring content; + xs.GetContent(content); + + if (comdid == L"xmFileSave") { - OpenWindow(L"dev:xpage[sqlWatch.vx]"); - return 1; + //save xml content + SaveContent(content); } - if (comdid == L"xmCheckUrl") + else if (comdid == L"xmValid") { - 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)) + xml x ; + if (!x.loadXML(content)) { - hDomainItem = hItem; - } - else - { - hP2Item = GetP2Item(hItem); - hDomainItem = tv_folder.GetParentItem(hP2Item); - } - - e = tv_folder.GetItemData(hItem); - if (hP2Item) - { - if (hP2Item != hItem) + KXMLDOMParseError pError = x.parseError(); + if (pError) { - xstring guid = e.getAttribute(L"guid"); - arg.AddArg(L"parent.guid", guid); + xstring str = pError.srcText(); + xstring sError = L"\r\nMSSQL错误: " + 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); } - 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") + else { - if (arg.GetArgString(L"image") == L"") - arg.AddArg(L"image", L"15"); - arg.AddArg(L"folder", L"folder"); - arg.AddArg(L"type", L"folder"); + trace(L"XML 错误"); } + return -1; } - 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") + else if (comdid == L"show") { - 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; + if (OnCmdDispatch(L"xmValid") == -1) + return -1; + onShow(); } - else if (comdid == L"xmUpdateProject") + else if (comdid == L"xmQuery") { - 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; + xstring guid = win32::GetGuid(); + xstring caption = L"Query_" + guid.mid(1,8); + if (OnOpen(caption,L"query") == 0) return 0; + xsedit xs = GetControl(L"sql_" + caption); + xs.LoadContent(L"",L".sql"); } - else if (comdid == L"xmEditObject") + else if (comdid.left(8) == L"xmClose_") { - 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); - } - - } - + list.DeleteSheet(list.GetSheetIndex()); } + else if (comdid.left(6) == L"xmRun_") + { + xstring table = comdid.mid(6,comdid.length()); + xsedit xs = GetControl(L"sql_" + table); + xstring content; + xs.GetContent(content); + xstring sql = L"xquery@" + content + L" for xml path('data'),root('datas'),type"; + KXMLDOMElement e = OnXQuery(sql); + if (e) + setGrid(e,L"grid_" + table); + } + xutil::RestoreCursor(hCursor); 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) + int OnXCommand(TEvent* evt,LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } - int OnSelChanged(TEvent* evt, int param) + int OnTreeAdd(HTREEITEM item, xstring data,KXMLDOMElement e) { - 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)) + auto list = e.selectNodes(L"*"); + int i; + int s = list.length(); + for (i = 0; i < s; i++) { - hitem = tv_folder.GetParentItem(hitem); - xstring p = L"" + tv_folder.GetItemLabel(hitem); - path = p + L"\\" + path; + KXMLDOMElement ele = list.item(i); + xstring name = ele.getAttribute(L"name"); + xstring image = ele.getAttribute(L"image"); + xstring d = ele.getAttribute(L"data"); + image = L"" + image; + if (d == L"") + d = data + L"@" + name; + HTREEITEM j = tv_db.InsertChildItem(item,(LPTSTR)name.c_str(), (LPARAM)d.c_str(true), image.toInt()); + if (image.toInt() > 9) + tv_db.SetItemChild1(j,1); + OnTreeAdd(j,d,ele); } - 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) + + int OnTreeExpand(HTREEITEM item) { - 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) + xstring data = tv_db.GetItemData(item); + xstring link = getLink(item); + xml x ; + xaserverarg arg; + arg.AddArg(L"type",data); + arg.AddArg(L"link",link); + if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSQL.list.xq]",arg.GetString(),x) != 1) { - void* p = nullptr; - layer.SetParam(s - 1, p); + trace(x.xml()); + return 0; } - sheet_Count = s; + KXMLDOMElement e = x.documentElement(); + OnTreeAdd(item,data,e); return 1; } + + int OnTreeExpanding(TEvent* evt,LPARAM param) + { + NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; + HTREEITEM item = nmtv.itemNew.hItem; + if (tv_db.GetChildItem(item) > 0) return 0; + OnTreeExpand(item); + return 1; + } + + int OnGroupAction(xstring guid,xstring name,xstring flag) + { + xaserverarg arg; + arg.AddArg(L"type",flag); + HTREEITEM item = tv_db.GetSelectedItem(); + xstring str = L"<group guid='" + guid + L"' name='" + name + L"'"; + if (flag.mid(5,7) == L".table.") + { + str += L"/>"; + } + else + { + xstring link = getLink(item); + str += L" link='" + link + L"'/>"; + } + //trace(str); + arg.AddArg(L"context",str); + return xaserver::ExecXAction(GetServerUrl(),L"[MSSQL.action.xa]",arg.GetString()); + } + + int OnNewGroup(HTREEITEM item) + { + tv_db.ExpandItemEx(item); + HTREEITEM gitem = tv_db.GetChildItem(item); + while (gitem > 0) + { + xstring data = L"" + tv_db.GetItemData(gitem); + if (data.left(6) != L"group@") break; + gitem = tv_db.GetNextItem(gitem); + } + xstring guid = win32::GetGuid(); + if (OnGroupAction(guid,L"",L"group.update") != 1) return 0; + HTREEITEM j = tv_db.InsertItem(item,gitem,L"",L"group@" + guid,25); + tv_db.ItemEdit(j); + return 1; + } + + int OnDel(HTREEITEM item) + { + xstring data = tv_db.GetItemData(item); + if (data.left(6) == L"group@") + { + xstring guid = data.mid(6,data.length()); + if (OnGroupAction(guid,L"",L"group.del") != 1) return 0; + tv_db.DeleteItem(item); + } + else if (data.left(6) == L"table@") + { + HTREEITEM pitem = tv_db.GetParentItem(item); + xstring pdata = tv_db.GetItemData(pitem); + if (pdata.left(6) == L"group@") + { + xstring guid = pdata.mid(6,pdata.length()); + xstring table = data.mid(6,data.length()); + if (OnGroupAction(guid,table,L"group.table.del") != 1) return 0; + tv_db.DeleteItem(item); + } + } + return 1; + } + + int OnRefresh(HTREEITEM item) + { + while (tv_db.GetChildItem(item) > 0) + tv_db.DeleteItem(tv_db.GetChildItem(item)); + OnTreeExpand(item); + return 1; + } + + int OnQuery(xstring caption) + { + if (OnOpen(caption,L"query") == 0) return 0; + KXMLDOMElement e = OnXQuery(L"column@" + caption); + if (!e) return 0; + auto list = e.selectNodes(L"columns/column"); + int i; + int s = list.length(); + xstring str; + str = L"SELECT TOP 500 \r\n"; + for (i = 0; i < s; i++) + { + KXMLDOMElement ele = list.item(i); + xstring tmp = ele.getAttribute(L"name"); + if (i < s - 1) tmp = tmp + L",L"; + str += L"\t" + tmp + L"\r\n"; + } + str += L"FROM " + caption; + xsedit xs = GetControl(L"sql_" + caption); + xs.LoadContent(str,L".sql"); + setGrid(e,L"grid_" + caption); + return 1; + } + + int OnEdit(xstring caption) + { + if (OnOpen(caption,L"edit") == 0) return 0; + KXMLDOMElement e = OnXQuery(L"edit@" + caption); + if (!e) return 0; + setGrid(e,L"editgrid_" + caption); + return 1; + } + + int OnDesign(xstring caption) + { + if (OnOpen(caption,L"design") == 0) return 0; + KXMLDOMElement e = OnXQuery(L"design@" + caption); + if (!e) return 0; + setGrid(e,L"designgrid_" + caption); + return 1; + } + + xstring getCaption(xstring str) + { + while (str.find(L"@", 0) > 0) + { + xstring tmp = str.mid(str.find(L"@", 0) + 1, str.length()); + str = tmp; + } + return str; + } + + int OnTreeRClick(TEvent* evt,int param) + { + TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh; + HTREEITEM item = nmtv.FromItem; + xstring data = tv_db.GetItemData(item); + xstring popup; + if (data == L"table") + { + xstring memu = L"<root>"; + memu += L"<Item>新建表</Item>"; + memu += L"<Item>新建分组</Item>"; + memu += L"<Item>-</Item>"; + memu += L"<Item>刷新</Item>"; + memu += L"</root>"; + xstring str = tv_db.PopupMenu(memu); + popup = str; + } + else if (data.left(6) == L"table@" && data.find(L"@",7) < 0) + { + xstring memu = L"<root>"; + memu += L"<Item>新建表</Item>"; + memu += L"<Item>设计</Item>"; + memu += L"<Item>-</Item>"; + memu += L"<Item>打开前500行</Item>"; + memu += L"<Item>编辑前200行</Item>"; + memu += L"<Item>-</Item>"; + memu += L"<Item>重命名</Item>"; + memu += L"<Item>刷新</Item>"; + memu += L"<Item>删除</Item>"; + memu += L"</root>"; + xstring str = tv_db.PopupMenu(memu); + popup = str; + } + else if (data.left(6) == L"group@") + { + xstring memu = L"<root>"; + memu += L"<Item>重命名</Item>"; + memu += L"<Item>刷新</Item>"; + memu += L"<Item>删除</Item>"; + memu += L"</root>"; + xstring str = tv_db.PopupMenu(memu); + popup = str; + } + else if (data.left(5) == L"view@" || data.left(10) == L"procedure@" || data.left(9) == L"function@") + { + xstring memu = L"<root>"; + memu += L"<Item>重命名</Item>"; + memu += L"<Item>修改</Item>"; + memu += L"<Item>删除</Item>"; + memu += L"</root>"; + xstring str = tv_db.PopupMenu(memu); + popup = str; + } + + //trace(L" "+data+L"-->"+getCaption(data)); + xstring caption = getCaption(data);//data.mid(6,data.length()); + if (popup == L"新建分组") + OnNewGroup(item); + else if (popup == L"删除") + OnDel(item); + else if (popup == L"刷新") + OnRefresh(item); + else if (popup == L"打开前500行") + OnQuery(caption); + else if (popup == L"编辑前200行") + OnEdit(caption); + else if (popup == L"设计") + OnDesign(caption); + else if (popup == L"新建表") + { + xstring guid = win32::GetGuid(); + xstring text = L"Table_" + guid.mid(1,8); + OnDesign(text); + } + else if (popup == L"修改") + OnOpen(caption,L"query"); + return 1; + } + + int OnTreeBeginDrag(TEvent* evt,LPARAM param) + { + NMTREEVIEW& nmtv =*(NMTREEVIEW*) evt->notify.pnmh; + HTREEITEM item = nmtv.itemNew.hItem; + xstring data = tv_db.GetItemData(item); + if (data.left(6) != L"table@" || data.find(L"@",7) > 0) + { + int WM_LBUTTONUP = 0x0202; + SendMessage(tv_db.GetHWND(),WM_LBUTTONUP,0,0); + } + return 1; + } + + int OnTreeEndDrag(TEvent* evt, LPARAM param) + { + TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh; + HTREEITEM fitem = nmtv.FromItem; + HTREEITEM titem = nmtv.ToItem; + xstring fdata = tv_db.GetItemData(fitem); + xstring tdata = tv_db.GetItemData(titem); + if (fdata.left(6) == L"table@" && tdata.left(6) == L"group@") + { + xstring table = fdata.mid(6,fdata.length()); + xstring guid = tdata.mid(6,tdata.length()); + if (OnGroupAction(guid,table,L"group.table.update") != 1) return 0; + tv_db.DeleteItem(fitem); + } + return 1; + } + + int OnTreeEndEdit(TEvent* evt, LPARAM param) + { + NMTVDISPINFO& nmtv = *(NMTVDISPINFO*)evt->notify.pnmh; + HTREEITEM item = nmtv.item.hItem; + xstring pszText = nmtv.item.pszText; + if (pszText != L"") + { + xstring data = tv_db.GetItemData(item); + if (data.left(6) == L"group@") + { + xstring guid = data.mid(6,data.length()); + if (OnGroupAction(guid,pszText,L"group.update") != 1) return 0; + } + tv_db.SetItemLabel(item,pszText); + } + return 1; + } + int OnAttachEvent() { //绑定工具条点击事件 - AttachEvent(L"WM_XCOMMAND", (FEvent)&XDeveloper::OnXCommand); - AttachEvent(L"DevExplorer", L"NM_DBLCLK", (FEvent)&XDeveloper::OnTreeDblClick); + AttachEvent(L"WM_XCOMMAND",(FEvent)XDevEditXMSSQL::OnXCommand); + //获取焦点事件,用于重置工具条 + AttachEvent(L"WM_SETFOCUS", (FEvent)XDevEditXMSSQL::OnSetFocus); //获得树的展开事件 - //AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING",(FEvent)&XDeveloper::OnTreeExpanding); + AttachEvent(L"tv_db", L"TVN_ITEMEXPANDING", (FEvent)XDevEditXMSSQL::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); + //AttachEvent(L"tv_db", L"TVN_SELCHANGED",(FEvent)XDevEditXMSSQL::OnTreeSelChanged); + AttachEvent(L"tv_db", L"TVN_RCLICK", (FEvent)XDevEditXMSSQL::OnTreeRClick); + AttachEvent(L"tv_db", L"TVN_BEGINDRAG", (FEvent)XDevEditXMSSQL::OnTreeBeginDrag); + AttachEvent(L"tv_db", L"TVN_ENDDRAG", (FEvent)XDevEditXMSSQL::OnTreeEndDrag); + AttachEvent(L"tv_db", L"TVN_ENDLABELEDIT", (FEvent)XDevEditXMSSQL::OnTreeEndEdit); + } + 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; @@ -549,13 +594,13 @@ int onload() { - sheet_Count = -1; + tv_db = GetControl(L"tv_db"); + list = GetControl(L"list"); + OnInitial(); - tv_folder = GetControl(L"DevExplorer"); - mle_output = GetControl(L"output"); - SetAgent(L"projects"); - + LoadData(); + //OnCmdDispatch(L"xmQuery"); return 1; } }; \ No newline at end of file -- Gitblit v1.9.3