#include "xcontrol/xdwgrid.hpp" #include "xcontrol/xdwtable.hpp" #include "wobject/xwin.hpp" #include "wobject/xstring.hpp" #include "wobject/xaserverarg.hpp" #include "wobject/xaserver.hpp" #include "xcontrol/xtreeview.hpp" #include "xcontrol/xcombobox.hpp" #include "xcontrol/xlayersheet.hpp" #include "wobject/xutil.hpp" #include "wobject/xnode.hpp" #include "platform/nstring.hpp" class __declspec(dllexport) vindexmenu: public xwin { public: xtreeview tv_menu; xtreeview tv_menu1; xtreeview tv_menu2; xlayersheet mainfolder; xcombobox cbx_menu; xcombobox cbx_panelName; xcombobox cbx_panelNo; xcombobox cbx_tab; int m_bCanDestroy; HWND m_nHwnd; int tabNo; //int m_panelNo; // 当前菜单组 string m_Assignment; public: vindexmenu(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {} public: static vindexmenu* CreateInstance(void* implPtr, void* hWnd) { vindexmenu* pWin = new vindexmenu(implPtr, (HWND)hWnd); return pWin; } int OnHideWin() { int nIndex = cbx_menu.GetCurSel(); if(nIndex == 0) return 0; HWND HWND_NOTOPMOST= ((HWND)-2); int SWP_NOSIZE = 0x0001; int SWP_NOMOVE = 0x0002; int SWP_HIDEWINDOW = 0x0080; SetWindowPos(GetHandle(), HWND_NOTOPMOST, -1000,-1000,0,0,SWP_NOSIZE | SWP_HIDEWINDOW); return 1; } int OnActive(TEvent* evt,int p) { int WA_INACTIVE = 0; int WA_ACTIVE = 1; int WA_CLICKACTIVE = 2; int SW_HIDE=0x1; WPARAM lw = evt->wParam & 0xffff; int x = m_bCanDestroy; if( lw ==WA_INACTIVE && x==1 ) { //CloseWindow(); //xwin::ShowWindow(this.GetHWND(), SW_HIDE); OnHideWin(); return 1; } if(lw !=WA_INACTIVE) m_bCanDestroy = 1; return 1; } int createPanel() { KXMLDOMDocument x ; xaserverarg arg; arg.AddArg(L"pid",L"null"); arg.AddArg(L"Assignment", m_Assignment); if(xaserver::ExecXQuery(GetServerUrl(),L"[Menu.index.xq]",arg.GetString(),x)!=1) { //trace(x.xml()); return -1; } Hxsoft::XFrame::KXMLDOMNodeList li=x.selectNodes(L"items/item"); int i=0; long s=li.length(); for (i=0;inotify.pnmh; HTREEITEM sitem = nmtv->itemNew.hItem; string id = (string)tv_menu.GetItemData(sitem); HCURSOR hCursor = xutil::SetCursorWait(); createTree(id, sitem); xutil::RestoreCursor(hCursor); return 1; } bool rClick(string str) { HMENU m = CreatePopupMenu(); int MF_STRING = 0x00000000; int TPM_RIGHTBUTTON = 0x0002; int TPM_RETURNCMD = 0x0100; AppendMenuW(m,MF_STRING, 1, str); xrect xr = { 0,0,0,0 }; xpoint pt; GetCursorPos(pt); return TrackPopupMenu (m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, this->GetHandle(), xr); } int OnRClicked(TEvent* evt,int p) { TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh; HTREEITEM hItem = nmtv->FromItem; if(hItem == 0) return 1; int hasChild = tv_menu.GetItemChild1(hItem); if(hasChild > 0) return 1; int ret = rClick(L"收藏菜单"); if(ret == 1) { string id = (string)tv_menu.GetItemData(hItem); KXMLDOMDocument x; xaserverarg arg; arg.AddArg(L"id",id); arg.AddArg(L"flag",L"insert"); if(xaserver::ExecXQuery(GetServerUrl(),L"[menu.user.edit.xq]",arg.GetString(),x)!=1) { trace(x.xml()); //alert("收藏失败!"); return -1; } createTree1(); } return 1; } int dbClick(xtreeview& tid, HTREEITEM hItem) { HCURSOR hCursor = xutil::SetCursorWait(); string id = (string)tid.GetItemData(hItem); string label = tid.GetItemLabel(hItem); KXMLDOMDocument x; xaserverarg* arg = new xaserverarg(); arg->AddArg(L"id",id); if(xaserver::ExecXQuery(GetServerUrl(),L"[Maint.menu.index.xq]",arg->GetString(),x)!=1) { trace(x.xml()); return -1; } if((xstring)x.xml()==L"") return -1; KXMLDOMElement e = x.documentElement(); //alert(x.xml); int nIndex =cbx_menu.FindString(label); if(e.selectSingleNode(L"ModuelMore") && nIndex > - 1) { string mo = e.selectSingleNode(L"ModuelMore").text(); if((xstring)mo != L"Y") { xstring comd = L"changesheet:"+xstring(nIndex); SendMessage(m_nHwnd, 0x401, (LPARAM)comd.c_str(), 0); OnHideWin(); return 0; } } if(e.selectSingleNode(L"ModuelPage")) {} else return -1; cbx_menu.AddItem(label); int sheets = cbx_menu.GetCount(); cbx_tab.AddItem(xstring(sheets - 1).c_str()); xstring vx = e.selectSingleNode(L"ModuelPage").text(); if((xstring)vx == L"") return -1; bool hasArg = false; if(e.selectSingleNode(L"ModuelParam/args")) { KXMLDOMNodeList li=e.selectNodes(L"ModuelParam/args/arg"); int i=0; long s=li.length(); KXMLDOMElement xitem; if(s>0) hasArg = true; for (i=0;iAddArg(name, value); } } //if(xaserver::GetUserNo() == "admin") // alert("000"); SetFocus(m_nHwnd); if(vx.find(L".vx",0)>0 || vx.find(L".xpage",0)>0) OpenWindow((L"dev:xpage["+vx+L"]").c_str(), (LPARAM)arg); else openUrl(vx, arg); OnHideWin(); xutil::RestoreCursor(hCursor); return 1; } int OnDbClick(TNotifyEvent& evt,int p) { HTREEITEM hItem = tv_menu.GetSelectedItem(); dbClick(tv_menu, hItem); return 1; } int SetInitAgent() { int no = GetCurPanel(); xnode anode(GetAgentNode(L"mainmemu")); int p =0; string id=nullptr; int h = cbx_panelNo.FindString(xstring(no).c_str()); if(h < 0) { int i = 0; int s = cbx_panelName.GetCount(); xstring toolStr = L""; for (i=0;i"; if(i == no) { id = hData.selectSingleNode(L"id").text(); str += (xstring)L""; //AttachEvent("panelTree"+no.toString(),"TVN_SELCHANGED",OnTreeSelChanged); xstring panelTree = L"panelTree"+xstring(no); AttachEvent(nstring::clone(panelTree.c_str()),L"TVN_ITEMEXPANDING", (FEvent)&vindexmenu::OnTreeExpanding); AttachEvent(nstring::clone(panelTree.c_str()),L"TVN_RCLICK", (FEvent)&vindexmenu::OnRClicked); AttachEvent(nstring::clone(panelTree.c_str()),L"NM_DBLCLK", (FEvent)&vindexmenu::OnDbClick); } toolStr += str; } toolStr += L""; //alert(toolStr); xnode bnode = this->SetAgentNode(anode,toolStr); int k = cbx_panelNo.AddItem(xstring(no).c_str()); cbx_panelNo.SetItemData(k, (LPARAM)bnode.GetNativePtr()); } else { xnode dnode((void*)cbx_panelNo.GetItemData(h)); SetAgentNode(anode,dnode); } tv_menu = xtreeview(GetControl(L"panelTree"+(xstring)no)); if(h < 0 && (xstring)id != L"") createTree(id, 0); return 1; } int OnQuery() { xcontrol xc = GetControl(L"editQuery"); xstring str = xc.GetText(); if(str.isEmpty()) { alert(L"请输入查询条件!"); return -1; } HTREEITEM rItem = tv_menu2.GetRootItem(); while(rItem) { tv_menu2.DeleteItem(rItem); rItem = tv_menu2.GetRootItem(); } KXMLDOMDocument x; xaserverarg arg; arg.AddArg(L"query",str.c_str()); if(xaserver::ExecXQuery(GetServerUrl(),L"[menu.user.query.xq]",arg.GetString(),x)!=1) { trace(x.xml()); return -1; } createTreeBase(tv_menu2,x); return 1; } int OnMenuAgent() { string s = L"menuAgent:Y"; SendMessage(m_nHwnd, 0x401, (LPARAM)s, 0); OnHideWin(); return 1; } int OnChangePanel(xstring&& xno) { int pno = GetCurPanel(); if(pno == xno.toInt()) cbx_panelName.SetCurSel(-1); else cbx_panelName.SetCurSel(xno.toInt()); SetInitAgent(); return 1; } int OnCmdDispatch(xstring&& comdid) { if (comdid == L"xmAll") mainfolder.SelectSheet(0); else if (comdid == L"xmFav") mainfolder.SelectSheet(1); else if (comdid == L"xmQue") mainfolder.SelectSheet(2); else if (comdid == L"xmQuery") OnQuery(); else if (comdid == L"xmMenuAgent") OnMenuAgent(); else if(comdid.left(8) == L"xmPanel:") OnChangePanel(comdid.mid(8, 99)); return 0; } int OnXCommand(TEvent *evt,int p) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnDbClick1(TNotifyEvent* evt,int p) { //ref TVNNMHDR nmtv = evt.pnmh; //int hItem = nmtv.FromItem; HTREEITEM hItem = tv_menu1.GetSelectedItem(); dbClick(tv_menu1, hItem); return 1; } int OnDbClick2(TNotifyEvent* evt,int p) { //ref TVNNMHDR nmtv = evt.pnmh; //int hItem = nmtv.FromItem; HTREEITEM hItem = tv_menu2.GetSelectedItem(); dbClick(tv_menu2, hItem); return 1; } int OnRClicked1(TNotifyEvent* evt,int p) { TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh; HTREEITEM hItem = nmtv.FromItem; if(!hItem) return 1; int ret = rClick(L"取消收藏"); if(ret == 1) { string id = (string)tv_menu1.GetItemData(hItem); KXMLDOMDocument x; xaserverarg arg; arg.AddArg(L"id",id); arg.AddArg(L"flag",L"del"); if(xaserver::ExecXQuery(GetServerUrl(),L"[menu.user.edit.xq]",arg.GetString(),x)!=1) { trace(x.xml()); alert("取消失败!"); return -1; } tv_menu1.DeleteItem(hItem); } return 1; } int OnAttachEvent() { AttachEvent(L"WM_XCOMMAND",(FEvent)&vindexmenu::OnXCommand); AttachEvent(L"WM_ACTIVATE",(FEvent)&vindexmenu::OnActive); AttachEvent(L"menu1", L"TVN_RCLICK",(FEvent)&vindexmenu::OnRClicked1); AttachEvent(L"menu1", L"NM_DBLCLK",(FEvent)&vindexmenu::OnDbClick1); AttachEvent(L"menu2", L"NM_DBLCLK",(FEvent)&vindexmenu::OnDbClick2); return 1; } int OnInitial() { if(GetWinParam()) { xaserverarg arg = GetArg(); m_nHwnd = (HWND)arg.GetParam(L"hwnd"); cbx_menu = (void*)arg.GetParam(L"memuId"); cbx_tab = (void*)arg.GetParam(L"tabNo"); cbx_panelNo = (void*)arg.GetParam(L"panelNo"); cbx_panelName = (void*)arg.GetParam(L"panelName"); xstring s = L"menuid:"+xstring((LPARAM)GetHWND()); SendMessage(m_nHwnd, 0x401, (LPARAM)s.c_str(), 0); } return 1; } int onload() { SetArg(); m_bCanDestroy = 1; tv_menu1 = GetControl(L"menu1"); tv_menu2 = GetControl(L"menu2"); mainfolder = GetControl(L"mainFolder"); int GWL_STYLE = -16; int WS_CAPTION = 0x00C00000; int style = GetWindowLong(GetHWND(), GWL_STYLE); style = style - WS_CAPTION; SetWindowLong(GetHWND(), GWL_STYLE, style); OnInitial(); OnAttachEvent(); long n = cbx_panelNo.GetCount(); return 1; } int onloaded() { HCURSOR hCursor = xutil::SetCursorWait(); m_Assignment = xaserver::GetUID(); createPanel(); cbx_panelName.SetCurSel(-1); SetInitAgent(); createTree1(); xutil::RestoreCursor(hCursor); //this->Redraw(); return 1; } };