#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/xsedit.hpp>
|
#include <xcontrol/xcombobox.hpp>
|
#include <xcontrol/xreport.hpp>
|
#include <xcontrol/xflowchart.hpp>
|
#include "XDevEditPage.hpp"
|
|
|
using xml = KXMLDOMDocument;
|
class export XDevEditFlow : public XDevEditPage
|
{
|
public:
|
XDevEditFlow(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
|
public:
|
static XDevEditFlow* CreateInstance(void* implPtr, void* hWnd)
|
{
|
XDevEditFlow* pWin = new XDevEditFlow(implPtr, (HWND)hWnd);
|
return pWin;
|
}
|
private: //
|
xdwgrid dw_role;
|
xdwgrid dw_node;
|
xdwgrid dw_data;
|
xdwgrid dw_action;
|
xdwgrid dw_stategraph;
|
xdwgrid dw_billaction;
|
|
xdwgrid dw_roles;
|
//xdwgrid dw_nodes;
|
//xdwgrid dw_actions;
|
xdwgrid dw_do;
|
|
xdwgrid dw_bills;
|
xdwgrid dw_scenes;
|
xdwgrid dw_states;
|
xdwgrid dw_events;
|
xdwgrid dw_conds;
|
|
xdwgrid dw_datainterface;
|
xdwgrid dw_dataarg;
|
|
xdwgrid dw_templates;
|
xdwgrid dw_pages;
|
xdwgrid dw_pageconfigs;
|
|
KXMLDOMElement ele;
|
|
xnode m_agentNode; //Agent Condition
|
xstring m_agentCond; //Agent Node
|
|
xstring m_config; //ÅäÖÃÀàÐÍ
|
public:
|
|
int SetAgent()
|
{
|
xstring xfNodeAgentArea = L"agentarea";
|
xnode anode = GetAgentNode(xfNodeAgentArea);
|
auto xframeElement = GetElement();
|
auto agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"/*[" + m_agentCond + L"]");
|
if (agent)
|
{
|
xstring s = agent.xml();
|
m_agentNode = SetAgentNode(anode,s);
|
}
|
return 1;
|
}
|
|
//½¹µã¼¤»î´¦Àíº¯Êý
|
int OnSetFocus(TEvent* evt,LPARAM param)
|
{
|
SetAgent();
|
|
//ÖØÖù¤¾ßÌõ
|
return 1;
|
}
|
|
int SetFlowChart(KXMLDOMElement e)
|
{
|
xstring flowUrl = e.getAttribute(L"flowchart");
|
xflowchart flowchart = GetControl(L"flowchart");
|
if (flowUrl != L"")
|
{
|
xml f;
|
if (xaserver::FetchXml(GetServerUrl(),flowUrl,L"",f) == 1)
|
{
|
flowchart.Load(f.documentElement());
|
}
|
}
|
return 1;
|
}
|
|
int FillFlowChart(KXMLDOMElement e)
|
{
|
xstring cid = e.getAttribute(L"id");
|
auto fn = e.selectNodes(L"//flows//flow");
|
int lenf = fn.length();
|
|
int i = 0;
|
xstring sp = L"";
|
xcombobox xc = GetControl(L"flowlist");
|
|
for (i = 0; i < lenf; i++)
|
{
|
sp = L"";
|
KXMLDOMElement fe = fn.item(i);
|
KXMLDOMElement p = fe.parentNode();
|
while ((xstring)p.tagName() == L"flow")
|
{
|
sp += L" ";
|
p = p.parentNode();
|
}
|
|
xstring name = fe.getAttribute(L"name");
|
xstring d = fe.getAttribute(L"id");
|
xc.AddItem(sp + name);
|
if (cid == d)
|
{
|
xc.SetText(name);
|
SetFlowChart(fe);
|
}
|
}
|
return 1;
|
}
|
|
int OnRetrieve(KXMLDOMElement ele)
|
{
|
KXMLDOMNode node = ele.selectSingleNode(L"//stategraph");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_stategraph.Retrieve(e);
|
dw_stategraph.Redraw();
|
}
|
else
|
{
|
dw_stategraph.Reset();
|
dw_stategraph.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//bill.actions");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_billaction.Retrieve(e);
|
dw_billaction.Redraw();
|
}
|
else
|
{
|
dw_billaction.Reset();
|
dw_billaction.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//roles");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_role.Retrieve(e);
|
dw_role.Redraw();
|
}
|
else
|
{
|
dw_role.Reset();
|
dw_role.Redraw();
|
}
|
|
xstring id = ele.getAttribute(L"id");
|
node = ele.selectSingleNode(L"//nodes[@for='" + id + L"']");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_node.Retrieve(e);
|
dw_node.Redraw();
|
}
|
else
|
{
|
dw_node.Reset();
|
dw_node.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//actions");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_action.Retrieve(e);
|
dw_action.Redraw();
|
}
|
else
|
{
|
dw_action.Reset();
|
dw_action.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//datas");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_data.Retrieve(e);
|
dw_data.Redraw();
|
}
|
else
|
{
|
dw_data.Reset();
|
dw_data.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//right");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_roles.Retrieve(e);
|
dw_roles.Redraw();
|
}
|
else
|
{
|
dw_roles.Reset();
|
dw_roles.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//bills");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_bills.Retrieve(e);
|
dw_bills.Redraw();
|
}
|
else
|
{
|
dw_bills.Reset();
|
dw_bills.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//events");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_events.Retrieve(e);
|
dw_events.Redraw();
|
}
|
else
|
{
|
dw_events.Reset();
|
dw_events.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//conds");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_conds.Retrieve(e);
|
dw_conds.Redraw();
|
}
|
else
|
{
|
dw_conds.Reset();
|
dw_conds.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//states");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_states.Retrieve(e);
|
dw_states.Redraw();
|
}
|
else
|
{
|
dw_states.Reset();
|
dw_states.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//scenes");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_scenes.Retrieve(e);
|
dw_scenes.Redraw();
|
}
|
else
|
{
|
dw_scenes.Reset();
|
dw_scenes.Redraw();
|
}
|
|
node = ele.selectSingleNode(L"//datainterface");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_datainterface.Retrieve(e);
|
dw_datainterface.Redraw();
|
}
|
else
|
{
|
dw_datainterface.Reset();
|
dw_datainterface.Redraw();
|
}
|
if (dw_datainterface.GetRowCount() > 0)
|
{
|
KXMLDOMElement e = dw_datainterface.GetRowElement(1);
|
node = ele.selectSingleNode(L"//args");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_dataarg.Retrieve(e);
|
dw_dataarg.Redraw();
|
}
|
else
|
{
|
dw_dataarg.Reset();
|
dw_dataarg.Redraw();
|
}
|
}
|
|
node = ele.selectSingleNode(L"//does");
|
if (node)
|
{
|
KXMLDOMElement e = node;
|
dw_do.Retrieve(e);
|
dw_do.Redraw();
|
}
|
else
|
{
|
dw_do.Reset();
|
dw_do.Redraw();
|
}
|
if (dw_do.GetRowCount() > 0)
|
{
|
KXMLDOMElement e = dw_do.GetRowElement(1);
|
xstring content = e.text();
|
|
xsedit xs = GetControl(L"content");
|
xs.SetContent(content,L".cpp");
|
}
|
FillFlowChart(ele);
|
|
return 1;
|
}
|
|
//ÃüÁî·¢²¼º¯Êý
|
int OnCmdDispatch(xstring comdid)
|
{
|
if (comdid == L"xmFileSave")
|
{
|
xsedit xs = GetControl(L"xcontent");
|
xstring content;
|
HCURSOR hCursor = xutil::SetCursorWait();
|
//save xml content
|
xs.GetContent(content);
|
SaveContent(content);
|
xutil::RestoreCursor(hCursor);
|
}
|
else if (comdid == L"flowdef")
|
{
|
xsedit xs = GetControl(L"xcontent");
|
xstring content;
|
//save xml content
|
xs.GetContent(content);
|
xml x = new xml;
|
if (x.loadXML(content))
|
{
|
ele = x.documentElement();
|
KXMLDOMElement e = x.selectSingleNode(L"//flows/flow");
|
if (e) OnRetrieve(e);
|
}
|
}
|
|
return 0;
|
}
|
|
//ÃüÁî´¦Àíʼþ
|
int OnXCommand(TEvent* evt,LPARAM param)
|
{
|
return OnCmdDispatch(evt->xcommand.pStrID);
|
}
|
|
int OnFlowSelected(TEvent* evt,LPARAM param)
|
{
|
//xtree tv_folder = GetControl(L"tv_folder");
|
xcombobox cb = GetControl(L"flowlist");
|
int nIndex = cb.GetCurSel();
|
if (nIndex < 1) nIndex = 1;
|
|
//int hItem = tv_folder.GetCaretItem();
|
|
//KXMLDOMElement ele = tv_folder.GetItemData(hItem);
|
KXMLDOMElement e = ele.selectSingleNode(L"(//flows//flow)[" + xstring(nIndex) + L"]");
|
SetFlowChart(e);
|
|
return 1;
|
}
|
|
int OnRowClickedDo(TEvent* evt,LPARAM param)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
int row = hdr.row;
|
KXMLDOMElement e = dw_do.GetRowElement(row);
|
xstring content = e.text();
|
|
xsedit xs = GetControl(L"content");
|
xs.SetContent(content,L".cpp");
|
|
return 1;
|
}
|
|
int OnRowClicked(TEvent* evt,LPARAM param)
|
{
|
return 1;
|
}
|
|
int OnAttachEvent()
|
{
|
//°ó¶¨¹¤¾ßÌõµã»÷ʼþ
|
AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditFlow::OnXCommand);
|
//»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ
|
AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditFlow::OnSetFocus);
|
|
AttachEvent(L"flowlist",L"CBN_SELCHANGE", (FEvent)&XDevEditFlow::OnFlowSelected);
|
AttachEvent(L"dw_do",L"DWV_ROWFOCUSCHANGED", (FEvent)&XDevEditFlow::OnRowClickedDo);
|
|
return 1;
|
}
|
|
int OnInitial()
|
{
|
m_agentCond = L"1";
|
SetAgent();
|
|
OnAttachEvent();
|
|
return 1;
|
}
|
|
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 onload()
|
{
|
dw_stategraph = GetControl(L"dw_stategraph");
|
dw_stategraph.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/״̬ͼ]");
|
dw_billaction = GetControl(L"dw_billaction");
|
dw_billaction.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/µ¥¾Ý²Ù×÷]");
|
|
dw_role = GetControl(L"dw_role");
|
dw_role.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/½ÇÉ«¶¨Òå]");
|
dw_node = GetControl(L"dw_node");
|
dw_node.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/¹¤×÷½Úµã]");
|
dw_data = GetControl(L"dw_data");
|
dw_data.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/Êý¾Ý¼¯]");
|
dw_action = GetControl(L"dw_action");
|
dw_action.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/²Ù×÷]");
|
|
dw_roles = GetControl(L"dw_roles");
|
dw_roles.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/½ÇɫȨÏÞ]");
|
//dw_nodes = GetControl(L"dw_nodes");
|
//dw_nodes.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/²Ù×÷Êý¾Ý¼¯]");
|
//dw_actions = GetControl(L"dw_actions");
|
//dw_actions.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/½ÚµãÊý¾Ý¼¯]");
|
|
dw_bills = GetControl(L"dw_bills");
|
dw_bills.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/µ¥¾Ý]");
|
dw_scenes = GetControl(L"dw_scenes");
|
dw_scenes.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/³¡¾°]");
|
dw_states = GetControl(L"dw_states");
|
dw_states.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/״̬]");
|
dw_events = GetControl(L"dw_events");
|
dw_events.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/ʼþ]");
|
dw_conds = GetControl(L"dw_conds");
|
dw_conds.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/Ìõ¼þ]");
|
|
dw_datainterface = GetControl(L"dw_datainterface");
|
dw_datainterface.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/Êý¾Ý½Ó¿Ú]");
|
dw_dataarg = GetControl(L"dw_dataarg");
|
dw_dataarg.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/Êý¾Ý½Ó¿Ú²ÎÊý]");
|
|
dw_templates = GetControl(L"dw_templates");
|
dw_templates.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/Ä£°åÎļþ]");;
|
dw_pages = GetControl(L"dw_pages");
|
dw_pages.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/Ò³ÃæÎļþ]");;
|
dw_pageconfigs = GetControl(L"dw_pageconfigs");
|
dw_pageconfigs.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/¿Í»§¶ËÅäÖÃ]");
|
|
|
dw_do = GetControl(L"dw_do");
|
dw_do.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/¶¯×÷¶¨Òå]");
|
|
dw_role.SetReadOnly(true);
|
dw_node.SetReadOnly(true);
|
dw_data.SetReadOnly(true);
|
dw_action.SetReadOnly(true);
|
dw_do.SetReadOnly(true);
|
|
OnInitial();
|
|
xsedit xs = GetControl(L"content");
|
xs.SetContent(L"",L".cpp");
|
|
LoadData();
|
|
return 1;
|
}
|
};
|