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