#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;
|
}
|
};
|