#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/xdwgrid.hpp>
|
#include <xcontrol/xreport.hpp>
|
#include <xcontrol/xsedit.hpp>
|
#include <xcontrol/xcombobox.hpp>
|
#include "XDevEditPage.hpp"
|
|
using xml = KXMLDOMDocument;
|
class export XDevEditXApp : public XDevEditPage
|
{
|
public:
|
XDevEditXApp(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
|
public:
|
static XDevEditXApp* CreateInstance(void* implPtr, void* hWnd)
|
{
|
XDevEditXApp* pWin = new XDevEditXApp(implPtr, (HWND)hWnd);
|
return pWin;
|
}
|
private: //
|
xreport dw_param;
|
xstring m_type;
|
xstring m_mode;
|
xtreeview tv_folder;
|
|
xnode m_agentNode; //Agent Condition
|
xstring m_agentCond; //Agent Node
|
public:
|
int SetAgent()
|
{
|
xstring xfNodeAgentArea = L"agentarea";
|
xnode anode = GetAgentNode(xfNodeAgentArea);
|
auto xframeElement = GetElement();
|
auto agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
|
if (agent)
|
{
|
xstring s = agent.xml();
|
m_agentNode = SetAgentNode(anode,s);
|
}
|
return 1;
|
}
|
|
//½¹µã¼¤»î´¦Àíº¯Êý
|
int OnSetFocus(TEvent* evt,LPARAM param)
|
{
|
SetAgent();
|
|
//ÖØÖù¤¾ßÌõ
|
return 1;
|
}
|
|
xstring getComboboxData(xcontrol xc)
|
{
|
int j = SendMessage(xc.GetHWND(),0x0147,0,0);
|
if (j > -1)
|
{
|
xstring s = (wchar_t*)SendMessage(xc.GetHWND(),0x0150,j,0);
|
return xstring(s);
|
}
|
return L"";
|
}
|
|
int OnCombSelChanged()
|
{
|
xcontrol xc = GetControl(L"image");
|
int j = SendMessage(xc.GetHWND(),0x0147,0,0);
|
if (j > -1)
|
{
|
//param s = SendMessage(xc.GetHWND(),0x0150,j,0);
|
xnode anode = GetAgentNode(L"image_view");
|
xstring p = L"<box name='image_view' width='22'><xtoolbutton caption='' image='" + xstring(j) + L"'/></box>";
|
SetAgentNode(anode,p);
|
}
|
|
return 1;
|
}
|
|
int onClare()
|
{
|
xcontrol xc = GetControl(L"caption");
|
xc.SetText(L"");
|
|
if (m_type == L"file")
|
{
|
xc = GetControl(L"xpage");
|
xc.SetText(L"");
|
|
xc = GetControl(L"image");
|
SendMessage(xc.GetHWND(), 0x014E, 16, 0);
|
|
xreport dw_param = GetControl(L"dw_param");
|
xml x ;
|
xstring str = L"<params>";
|
str += L"<param seq='1' name='' value=''></param>";
|
str += L"<param seq='2' name='' value=''></param>";
|
str += L"<param seq='3' name='' value=''></param>";
|
str += L"<param seq='4' name='' value=''></param>";
|
str += L"<param seq='5' name='' value=''></param>";
|
str += L"<param seq='6' name='' value=''></param>";
|
str += L"<param seq='7' name='' value=''></param>";
|
str += L"<param seq='8' name='' value=''></param>";
|
str += L"</params>";
|
x.loadXML(str);
|
dw_param.Retrieve(x);
|
dw_param.SetReadOnly(false);
|
dw_param.Redraw();
|
}
|
else
|
{
|
xc = GetControl(L"image");
|
SendMessage(xc.GetHWND(), 0x014E, 15, 0);
|
}
|
|
xc = GetControl(L"index");
|
xc.SetText(L"");
|
|
xc = GetControl(L"code");
|
xc.SetText(L"");
|
|
xc = GetControl(L"name");
|
xc.SetText(L"");
|
|
xc = GetControl(L"status");
|
SendMessage(xc.GetHWND(), 0x014E, 0, 0);
|
|
OnCombSelChanged();
|
|
return 1;
|
}
|
|
xstring getTVData(HTREEITEM hitem)
|
{
|
xstring result = L"";
|
HTREEITEM citem = tv_folder.GetChildItem(hitem);
|
while (citem)
|
{
|
xstring str = (wchar_t*)tv_folder.GetItemData(citem);
|
xstring name = str.mid(1,str.find(L" ",0));
|
result += str.mid(0,str.length() - 2) + L">";
|
/*xml x;
|
x.loadXML(IXMLDOMElement(ele).xml);
|
IXMLDOMElement e = x.documentElement;
|
xstring name=e.tagName;
|
result += e.xml;
|
result = result.mid(0,result.length() - 2)+L">";*/
|
xstring tmp = getTVData(citem);
|
result += tmp;
|
result += L"</" + name + L">";
|
citem = tv_folder.GetNextItem(citem);
|
}
|
return result;
|
}
|
|
int onsave()
|
{
|
HTREEITEM root = tv_folder.GetRootItem();
|
xstring str = getTVData(root);
|
xstring content = L"<?xml version='1.0' encoding='utf-16'?><favorites guid='" + GetGuid() + L"' caption='' image='17'>" + str + L"</favorites>";
|
//trace(content);//
|
SaveContent(content);
|
onClare();
|
m_mode = L"new";
|
return 1;
|
}
|
|
HTREEITEM getInsertItem(HTREEITEM hitem,xstring s)
|
{
|
if (tv_folder.GetChildItem(hitem) == 0 || s == L"")
|
return 0;
|
else
|
{
|
int index = s.toInt();
|
HTREEITEM h = tv_folder.GetChildItem(hitem);
|
while (h)
|
{
|
xstring p = (wchar_t*)tv_folder.GetItemData(h);
|
xml x ;
|
x.loadXML(p);
|
KXMLDOMElement e = x.documentElement();
|
xstring str = e.getAttribute(L"index");
|
str = L"" + str;
|
if (str == L"" && h == tv_folder.GetChildItem(hitem))
|
return h;
|
if (str != L"")
|
{
|
if (index < str.toInt())
|
return h;
|
}
|
else
|
return h;
|
h = tv_folder.GetNextItem(h);
|
}
|
return 0;
|
}
|
}
|
|
int copyNode(HTREEITEM olditem, HTREEITEM newitem)
|
{
|
HTREEITEM citem = tv_folder.GetChildItem(olditem);
|
while (citem)
|
{
|
xstring str = (wchar_t*)tv_folder.GetItemData(citem);
|
xstring name = tv_folder.GetItemLabel(citem);
|
int image = tv_folder.GetItemImage(citem);
|
HTREEITEM h = tv_folder.InsertChildItem(newitem,name, (LPARAM)str.c_str(true), image);
|
copyNode(citem,h);
|
citem = tv_folder.GetNextItem(citem);
|
}
|
return 1;
|
}
|
|
//ÃüÁî·¢²¼º¯Êý
|
int OnCmdDispatch(xstring comdid)
|
{
|
int LayerFlow_UnLayer_ = 0x00000100;
|
int LayerFlow_NS_ = 0x00000004;
|
HCURSOR hCursor = xutil::SetCursorWait();
|
|
if (comdid == L"NewFolder")
|
{
|
m_type = L"folder";
|
xnode anode = GetAgentNode(L"file");
|
SetAgentNode(anode,L"<vbox/>");
|
anode.SetLayerFlow(LayerFlow_UnLayer);
|
xcontrol xc = GetControl(L"image");
|
SendMessage(xc.GetHWND(), 0x014E, 15, 0);
|
m_mode = L"new";
|
onClare();
|
}
|
else if (comdid == L"NewFile")
|
{
|
m_type = L"file";
|
xnode anode = GetAgentNode(L"file");
|
anode.SetLayerFlow(LayerFlow_NS);
|
KXMLDOMElement e = GetElement().selectSingleNode(L"//vbox[@name='file']");
|
SetAgentNode(anode,e.xml());
|
xcontrol xc = GetControl(L"image");
|
SendMessage(xc.GetHWND(), 0x014E, 16, 0);
|
m_mode = L"new";
|
onClare();
|
}
|
else if (comdid == L"param_add")
|
{
|
//dw_param.InsertRow(0);
|
}
|
else if (comdid == L"param_del")
|
{
|
//int row = dw_param.GetRow();
|
//if(row<0) return 0;
|
//dw_param.DeleteRow(row);
|
}
|
else if (comdid == L"selectxpage")
|
{
|
xaserverarg arg;
|
//OpenWindow(L"/developer/XDevXWKDlg.xpage",arg);
|
OpenWindow(L"dev:xpage[XDevXWKDlg.xpage]",arg);
|
xcontrol xc = GetControl(L"xpage");
|
xc.SetText(arg.GetArgString(L"caption"));
|
xc = GetControl(L"xpageguid");
|
xc.SetText(arg.GetArgString(L"guid"));
|
}
|
else if (comdid == L"delete")
|
{
|
HTREEITEM hitem = tv_folder.GetSelectedItem();
|
if (!hitem) return 0;
|
if (hitem == tv_folder.GetRootItem()) return 0;
|
if (tv_folder.GetChildItem(hitem)) return 0;
|
tv_folder.DeleteItem(hitem);
|
onsave();
|
}
|
else if (comdid == L"save")
|
{
|
//xstring str=L"<"+m_type+L" ";
|
|
xml x ;
|
x.loadXML(L"<" + m_type + L"/>");
|
auto r = x.documentElement();
|
|
xcontrol xc = GetControl(L"caption");
|
xstring name = xc.GetText();
|
if (name == L"")
|
{
|
alert(L"ÇëÌîдÃû³Æ!");
|
return 0;
|
}
|
//str += L"caption='"+name+L"' ";
|
r.setAttribute(L"caption",name);
|
|
xstring tmp = GetGuid();
|
//str += L"guid='"+tmp+L"' ";
|
r.setAttribute(L"guid",tmp);
|
|
if (m_type == L"file")
|
{
|
xc = GetControl(L"xpage");
|
tmp = xc.GetText();
|
xstring tmp1 = L"" + tmp + L"?";
|
xreport dw_param = GetControl(L"dw_param");
|
int i = 1;
|
xstring ss = L"";
|
for (i = 1; i <= dw_param.GetRowCount(); i++)
|
{
|
xstring name1 = dw_param.GetItemString(i,1);
|
xstring value1 = dw_param.GetItemString(i,2);
|
if (name != L"")
|
{
|
xstring s = name1 + L"=" + value1 + L"&";
|
ss += s;
|
}
|
}
|
ss = ss.mid(0, ss.length() - 1);
|
tmp1 += ss;
|
//trace(tmp1);
|
//str += L"url='worknode:"+tmp+L"/open#1' ";
|
r.setAttribute(L"url",L"" + tmp1);
|
}
|
|
xc = GetControl(L"index");
|
xstring index = xc.GetText();
|
r.setAttribute(L"index",index);
|
|
xc = GetControl(L"name");
|
tmp = xc.GetText();
|
r.setAttribute(L"name",tmp);
|
|
xc = GetControl(L"code");
|
tmp = xc.GetText();
|
r.setAttribute(L"code",tmp);
|
|
|
xc = GetControl(L"name");
|
tmp = xc.GetText();
|
r.setAttribute(L"name",tmp);
|
xc = GetControl(L"status");
|
//tmp=getComboboxData(xc);
|
tmp = xc.GetText();
|
//str += L"status='"+tmp+L"' ";
|
r.setAttribute(L"status",tmp);
|
|
xc = GetControl(L"image");
|
//tmp=getComboboxData(xc);
|
tmp = xc.GetText();
|
//str += L"image='"+tmp+L"' ";
|
r.setAttribute(L"image",tmp);
|
|
//str += L"/>";
|
//param p =str;
|
//trace(r.xml);
|
xstring p = r.xml();
|
|
//tv_folder.InsertChildItem(hitem,name,x.documentElement,tmp.toInt());
|
HTREEITEM hitem = tv_folder.GetSelectedItem();
|
if (hitem == 0) hitem = tv_folder.GetRootItem();
|
HTREEITEM ditem = hitem;
|
if (m_mode == L"edit")
|
hitem = tv_folder.GetParentItem(ditem);
|
HTREEITEM bitem = getInsertItem(hitem,L"" + index);
|
HTREEITEM h;
|
if (!bitem)
|
h = tv_folder.InsertChildItem(hitem,name,p,tmp.toInt());
|
else
|
h = tv_folder.InsertItem(hitem,bitem,name,p,tmp.toInt());
|
if (m_mode == L"edit")
|
{
|
copyNode(ditem,h);
|
tv_folder.DeleteItem(ditem);
|
}
|
tv_folder.ExpandItemEx(hitem);
|
onsave();
|
}
|
xutil::RestoreCursor(hCursor);
|
return 0;
|
}
|
|
//ÃüÁî´¦Àíʼþ
|
int OnXCommand(TEvent* evt,LPARAM param)
|
{
|
return OnCmdDispatch(evt->xcommand.pStrID);
|
}
|
|
int OnTreeDrag(TEvent* evt, LPARAM param)
|
{
|
TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
|
HTREEITEM hItem = nmtv.FromItem;
|
tv_folder.DeleteItem(hItem);
|
onsave();
|
return 1;
|
}
|
|
int setXpage(KXMLDOMElement e)
|
{
|
xcontrol xc = GetControl(L"caption");
|
xstring str = e.getAttribute(L"caption");
|
xc.SetText(L"" + str);
|
|
if (m_type == L"file")
|
{
|
xstring str = e.getAttribute(L"url");
|
str = L"" + str;
|
if (str.find(L"?",0) < 0)
|
str = str + L"?";
|
|
xc = GetControl(L"xpage");
|
xstring t = str.mid(0,str.find(L"?",0));
|
xc.SetText(L"" + t);
|
|
xstring p = str.mid(str.find(L"?",0) + 1, str.length());
|
if (p != L"")
|
{
|
p += L"&";
|
int i = 1;
|
while (p.find(L"=L",0) > 0)
|
{
|
xstring name = p.mid(0, p.find(L"=L",0));
|
xstring value = p.mid(p.find(L"=L",0) + 1, p.find(L"&",0) - p.find(L"=L",0) - 1);
|
xreport dw_param = GetControl(L"dw_param");
|
dw_param.SetItemString(i, 1, L"" + name);
|
dw_param.SetItemString(i, 2, L"" + value);
|
i += 1;
|
p = p.mid(p.find(L"&",0) + 1, p.length());
|
}
|
}
|
}
|
xc = GetControl(L"image");
|
str = e.getAttribute(L"image");
|
//xc.SetText(L""+str);
|
SendMessage(xc.GetHWND(), 0x014E, str.toInt(), 0);
|
|
xc = GetControl(L"index");
|
str = e.getAttribute(L"index");
|
xc.SetText(L"" + str);
|
|
xc = GetControl(L"code");
|
str = e.getAttribute(L"code");
|
xc.SetText(L"" + str);
|
|
xc = GetControl(L"name");
|
str = e.getAttribute(L"name");
|
xc.SetText(L"" + str);
|
|
xc = GetControl(L"status");
|
str = e.getAttribute(L"status");
|
xc.SetText(L"" + str);
|
|
OnCombSelChanged();
|
|
return 1;
|
}
|
|
int OnTreeSelChanged(TEvent* evt,LPARAM param)
|
{
|
NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
|
HTREEITEM hitem = nmtv.itemNew.hItem;
|
|
onClare();
|
m_mode = L"new";
|
if (hitem == tv_folder.GetRootItem()) return 0;
|
//IXMLDOMElement e = tv_folder.GetItemData(hitem);
|
//trace(e.xml);
|
xstring p = (wchar_t*)tv_folder.GetItemData(hitem);
|
xml x ;
|
x.loadXML(p);
|
KXMLDOMElement e = x.documentElement();
|
m_type = e.tagName();
|
if (m_type == L"file")
|
OnCmdDispatch(L"NewFile");
|
else
|
OnCmdDispatch(L"NewFolder");
|
setXpage(e);
|
m_mode = L"edit";
|
}
|
|
int OnAttachEvent()
|
{
|
//°ó¶¨¹¤¾ßÌõµã»÷ʼþ
|
AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXApp::OnXCommand);
|
//»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ
|
AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXApp::OnSetFocus);
|
AttachEvent(L"image", L"CBN_SELCHANGE", (FEvent)&XDevEditXApp::OnCombSelChanged);
|
AttachEvent(L"tv_folder", L"TVN_ENDDRAG", (FEvent)&XDevEditXApp::OnTreeDrag);
|
AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&XDevEditXApp::OnTreeSelChanged);
|
|
return 1;
|
}
|
|
int OnInitial()
|
{
|
SetAgent();
|
|
OnAttachEvent();
|
|
xcontrol xc = GetControl(L"image");
|
int i;
|
for (i = 0; i < 35; i++)
|
{
|
SendMessage(xc.GetHWND(), 0x0143, 0, (LPARAM)xstring(i).c_str());
|
//param p=i.toString();
|
//SendMessage(xc.GetHWND(), 0x0151, i, p);
|
}
|
SendMessage(xc.GetHWND(), 0x014E, 15, 0);
|
|
return 1;
|
}
|
|
int OnTreeAdd(HTREEITEM hitem, KXMLDOMElement e)
|
{
|
auto list = e.selectNodes(L"*");
|
int i;
|
int s = list.length();
|
for (i = 0; i < s; i++)
|
{
|
KXMLDOMElement ele = list.item(i);
|
xstring name = ele.getAttribute(L"caption");
|
xstring image = ele.getAttribute(L"image");
|
xstring data = ele.xml();
|
data = data.mid(0,data.find(L">",1)) + L"/>";
|
HTREEITEM j = tv_folder.InsertChildItem(hitem,name.c_str(), (LPARAM)data.c_str(true), image.toInt());
|
OnTreeAdd(j,ele);
|
}
|
return 1;
|
}
|
|
int onload()
|
{
|
dw_param = GetControl(L"dw_param");
|
dw_param.SetReadOnly(false);
|
|
tv_folder = GetControl(L"tv_folder");
|
|
OnInitial();
|
|
m_type = L"folder";
|
OnCmdDispatch(L"NewFolder");
|
m_mode = L"new";
|
|
if (!GetWinParam()) return 1;
|
xwin w = GetFrameWindow();
|
xtreeview tv = w.GetControl(L"DevExplorer");
|
HTREEITEM hItem = (HTREEITEM)GetWinParam();
|
KXMLDOMElement e = tv.GetItemData(hItem);
|
xstring name = e.getAttribute(L"caption");
|
HTREEITEM root = tv_folder.InsertItem(name.c_str(), e, 17);
|
xstring content = GetData();
|
if (content != L"")
|
{
|
//trace(content);
|
xml x ;
|
if (x.loadXML(content))
|
{
|
OnTreeAdd(root,x.documentElement());
|
tv_folder.ExpandItemEx(root);
|
}
|
}
|
|
return 1;
|
}
|
};
|