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/XDevEditXRuler.cpp |  577 ++++++++------------------------------------------------
 1 files changed, 89 insertions(+), 488 deletions(-)

diff --git a/jrj/xframe/devloper/XDevEditXRuler.cpp b/jrj/xframe/devloper/XDevEditXRuler.cpp
index f26ab17..a62cce0 100644
--- a/jrj/xframe/devloper/XDevEditXRuler.cpp
+++ b/jrj/xframe/devloper/XDevEditXRuler.cpp
@@ -4,544 +4,149 @@
 #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 "XDevEditPage.hpp"
 
 using xml = KXMLDOMDocument;
-class export XDeveloper : public xwin
+class export XDevEditXRuler : public XDevEditPage
 {
 	public:
-	XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
+	XDevEditXRuler(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
 public:
-	static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
+	static XDevEditXRuler* CreateInstance(void* implPtr, void* hWnd)
 	{
-		XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
+		XDevEditXRuler* pWin = new XDevEditXRuler(implPtr, (HWND)hWnd);
 		return pWin;
 	}
 private:	//
-	xtreeview tv_folder;
-	xcontrol mle_output;
-	int sheet_Count;
-public:
-	int trace(xstring msg)
+	//xdwgrid	dw_list;
+
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+	int SetAgent()
 	{
-		xstring t = mle_output.GetText();
-		mle_output.SetText(t + msg);
+		/*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 OnProcessUrl(xstring kind, xstring url)
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt,LPARAM param)
 	{
-		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());
+		SetAgent();
+
+		//重置工具条
 		return 1;
 	}
 
-	xstring ProcessDevCmd(xstring cmd, xstring ext)
+	int LoadData()
 	{
-		int nlen = 0;
-		BYTE* pdata=nullptr;
-		xaserver::ProcessCmd(GetServerUrl(),( L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext.c_str(), pdata, nlen);
+		if (!GetWinParam()) return 1;
+		xstring content = GetData();
+		if (content != L"")
+		{
+			xsedit xs = GetControl(L"xcontent");
+			xs.LoadContent(content,L".xml");
+		}
+		return 1;
+	}
 
-		xstring str = ((LPARAM)pdata) + L"";
+	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 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")
+		xstring content;
+		xsedit xs = GetControl(L"xcontent");
+		xs.GetContent(content);
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		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\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);
 				}
-				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
+			/*xstring sType = OnGetType();
+			if (sType == L"xml.xsd")
 			{
-				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;
+				xstring sError;
+				x.ValidSchema(content, &sError);
+				trace(sError);
+			}*/
 		}
-		else if (comdid == L"xmDeleteObject")
+		else if (comdid == L"xmEditFind")
 		{
-			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;
+			OpenWindow(L"dev:xpage[xcode.finddlg]");
 		}
-		else if (comdid == L"xmUpdateProject")
+		else if (comdid == L"xmEditReplace")
 		{
-			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;
+			OpenWindow(L"dev:xpage[xcode.replacedlg]");
 		}
-		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);
-				}
-
-			}
-
-		}
+		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)
-	{
-		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;
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXRuler::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXRuler::OnSetFocus);
 	}
 
 	int OnInitial()
 	{
+		SetAgent();
+
 		OnAttachEvent();
 
 		return 1;
@@ -549,12 +154,8 @@
 
 	int onload()
 	{
-		sheet_Count = -1;
 		OnInitial();
-
-		tv_folder = GetControl(L"DevExplorer");
-		mle_output = GetControl(L"output");
-		SetAgent(L"projects");
+		LoadData();
 
 		return 1;
 	}

--
Gitblit v1.9.3