#include #include #include #include #include #include #include #include #include #include #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""; 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""; str += L""; str += L""; str += L""; str += L""; str += L""; str += L""; str += L""; str += L""; str += L""; 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""; citem = tv_folder.GetNextItem(citem); } return result; } int onsave() { HTREEITEM root = tv_folder.GetRootItem(); xstring str = getTVData(root); xstring content = L"" + str + L""; //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""); 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; } };