#include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) QuickCode_Tree : public listwin { public: xdwgrid dw_list; xtreeview tv_1; xstring m_config; xstring m_agent; xstring m_id; xstring m_dbmap; xstring treexquery; xstring c_type; KXMLDOMDocument m_configDoc; xstring kpstr; xstring strtpl; xstring m_QueryTxt; xnode m_agentNode; public: QuickCode_Tree(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static QuickCode_Tree* CreateInstance(void* implPtr, void* hWnd) { QuickCode_Tree* pWin = new QuickCode_Tree(implPtr, (HWND)hWnd); return pWin; } int SetAgent() { xstring xfNodeAgentArea = L"agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); if (m_agentNode) { SetAgentNode(anode, m_agentNode); } else { KXMLDOMElement xframeElement = GetElement(); //KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); KXMLDOMElement agent = m_configDoc.selectSingleNode(L"Config/" + xfNodeAgentArea + L"[1]/*"); if (agent) { xstring s = agent.xml(); m_agentNode = SetAgentNode(anode, s); } } return 1; } int OnRetrieve() { dw_list.AcceptText(); xml x; xaserverarg arg; arg.AddArg(L"id", m_id); arg.AddArg(L"sType", c_type); arg.AddArg(L"QueryTxt", m_QueryTxt); //trace(arg.GetString()); /*if (TDataSet::exec(m_config, L"query1", arg.GetString(),x) != 1) { trace(x.text()); return -1; }*/ if (xurl::get(L"QuickCode/entity/listaddtree", arg.GetString(), x) != 1) { trace(x.text()); return -1; } //trace(x.xml()); if ((xstring)x.xml() == L"") { xml xx; xx.loadXML(L""); dw_list.Retrieve(xx); dw_list.Redraw(); } else { dw_list.Retrieve(x); dw_list.Redraw(); } return 1; } int OnTreeSelChanged(TEvent* evt, LPARAM p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; HTREEITEM hitem = tv_1.GetSelectedItem(); //c_type=dw_type.GetItemLabel(hitem); //Èç¹ûÊǸú½Úµã HTREEITEM roothitem = tv_1.GetRootItem(); if (hitem == roothitem) { c_type = L""; } else { c_type = tv_1.GetItemLabel(hitem); } OnRetrieve(); return 1; } int adduomfolder() { xaserverarg arg; arg.AddArg(L"note", L"ÐÂÔö"); arg.AddArg(L"m_id", m_id); //win::OpenWindow(L"dev:xpage[AddUomGroup.vx]",arg); openUrl(L"¹«¹²ÉèÖÃ.vface/xpage/quickcode/AddGroup", arg); xstring ok = arg.GetArgString(L"return"); if (ok == L"ok") { xstring GroupName = arg.GetArgString(L"GroupName"); xml xx; xaserverarg args; args.AddArg(L"GroupName", GroupName); args.AddArg(L"OldGroupName", L""); args.AddArg(L"m_id", m_id); /*if(TFile::exec(m_config,L"updateuomtype",args,xx)!=1) { trace(L"error:"+xx.xml()); alert(L"±£´æ³ö´í!"); return 0; }*/ if (xurl::get(L"QuickCode/pref/quickcode_tree.updateGroup", args.GetString(), xx) != 1) { trace(L"error:" + (xstring)xx.xml()); alert(L"±£´æ³ö´í!"); return 0; } else { xstring vv = xx.documentElement().text(); xml x; x.loadXML(L""); HTREEITEM root = tv_1.GetRootItem(); if (vv == L"OK") { tv_1.InsertChildItem(root, GroupName, x.documentElement(), 15); } } } return 1; } int modifyuomfolder() { HTREEITEM h = tv_1.GetSelectedItem(); if (!h) { alert(L"ÇëÑ¡ÔñÐèÒªÐ޸ĵÄ×éÃû"); return 0; } HTREEITEM roothitem = tv_1.GetRootItem(); if (h == roothitem) { alert(L"²»ÄÜÐ޸ĸù½ÚµãÃû³Æ£¡"); } else { KXMLDOMElement e = tv_1.GetItemData(h); trace(e.xml()); //xstring OldGroupName= e.SelectSingleNode(L"@GroupName").text(); xstring OldGroupName = tv_1.GetItemLabel(h); xaserverarg arg; arg.AddArg(L"note", L"ÐÞ¸Ä"); arg.AddArg(L"m_id", m_id); arg.AddArg(L"GroupName", OldGroupName); OpenWindow(L"dev:xpage[AddUomGroup.vx]", arg); xstring ok = arg.GetArgString(L"return"); if (ok == L"ok") { xstring NewGroupName = arg.GetArgString(L"GroupName"); xml xx; xaserverarg args; args.AddArg(L"GroupName", NewGroupName); args.AddArg(L"OldGroupName", OldGroupName); args.AddArg(L"m_id", m_id); /*if(TFile::exec(m_config,L"updateuomtype",args,xx)!=1) { trace(L"error:"+xx.xml()); alert(L"±£´æ³ö´í!"); return 0; }*/ if (xurl::get(L"QuickCode/pref/quickcode_tree.updateGroup", args.GetString(), xx) != 1) { trace(L"error:" + (xstring)xx.xml()); alert(L"±£´æ³ö´í!"); return 0; } else { trace(xx.xml()); xstring vv = xx.documentElement().text(); if (vv == L"OK") { tv_1.SetItemLabel(h, NewGroupName); } } } } return 1; } int deluomfolder() { HTREEITEM hitem = tv_1.GetSelectedItem(); if (!hitem) { alert(L"ÇëÑ¡ÔñÐèҪɾ³ýµÄ×éÃû"); return 0; } else { int s = dw_list.GetRowCount(); if (s > 0) { alert(L"¸Ã·Ö×éÏÂÃæ´æÔÚÊý¾Ý£¬²»ÄÜɾ³ý£¡"); return 0; } HTREEITEM roothitem = tv_1.GetRootItem(); if (hitem == roothitem) { alert(L"²»ÄÜɾ³ý¸ù½Úµã£¡"); } else { //ȱÉÙÅжÏɾ³ýµÄÌõ¼þ xstring GroupName = tv_1.GetItemLabel(hitem); if (MessageBox(GetHWND(), L"È·¶¨É¾³ý×éÃû£º" + GroupName + L" Âð£¿", L"Ìáʾ", 1) == 1) { xml xx; xaserverarg arg; arg.AddArg(L"GroupName", GroupName); arg.AddArg(L"m_id", m_id); trace(GroupName); trace(m_id); /*if (xaserver::ExecXAction(GetServerUrl(),L"[delete.type.FND_UOM.xa]",arg.GetString()) == 1) { tv_1.DeleteItem(wid,hitem); //OnTreeSelChanged(); }*/ if (xurl::get(L"QuickCode/pref/quickcode_tree.deleteGroup", arg.GetString(), xx) == 1) { tv_1.DeleteItem(hitem); } else alert(L"ɾ³ýʧ°Ü£¡"); } } } return 1; } xdwgrid getDW() { return dw_list; } int GridSearch() { xml x; xaserver::LoadUrl(L"", L"dev:vface[¹«¹²ÉèÖÃ.vface]", L"", x); //trace(x.xml()); //trace(strtpl); xstring aa = strtpl; auto doc = x; auto n = doc.selectSingleNode(L"//resource[@url='" + aa + L"']/@src"); //trace(n.text()); xaserverarg arg; arg.AddArg(L"sheet", n.text()); arg.AddArg(L"search", listwin::m_QueryTxt); openUrl(L"view.dlg.vface/xpage/grid/column/search", arg); xstring ok = arg.GetArgString(L"return"); if (ok == L"ok") { xstring txt = arg.GetArgString(L"search"); if (txt != L"") { m_QueryTxt = txt; //trace(txt); OnRetrieve(); } } return 0; } int OnCmdDispatch(xstring comdid) { HCURSOR hCursor = xutil::SetCursorWait(); xdwgrid dw = getDW(); if (comdid == L"save") { dw_list.AcceptText(); xml x; xaserverarg arg; dw_list.DwUpdateAllToEx(x); KXMLDOMElement e = x.documentElement(); e.setAttribute(L"id", m_id); //arg.AddArg(L"id",m_id); //trace(m_id); //trace(m_dbmap); if (m_id == L"¿ªÆ±ÒøÐÐ") { xml kp; kp.loadXML(L""); KXMLDOMElement ele = kp.documentElement(); auto list = e.selectNodes(L"item[@update.modify='1' or @update.delete='1' ]"); int j; int k = list.length(); for (j = 0; j < k; j++) { KXMLDOMElement ele1 = list.item(j); ele.appendChild(ele1); } kpstr = ele.xml(); trace(ele.xml()); } if (m_id == L"¿ªÆ±ÒøÐÐ") { arg.AddArg(L"content", kpstr); } else { arg.AddArg(L"content", e.xml()); } arg.AddArg(L"dbmap", m_dbmap); /*if(TFile::exec(m_config,L"save",arg,x)!=1) { trace(L"error:"+x.xml()); alert(L"±£´æ³ö´í!"); return 0; }*/ trace(m_dbmap + L"\r\n" + e.xml()); if (xurl::get(L"QuickCode/pref/quickcode.save", arg.GetString(), x) != 1) { xstring error = x.text(); trace(error); } //trace(arg.GetString()); if (x.selectSingleNode(L"error")) { alert(L"±£´æ³ö´í2!"); return 0; } dw_list.ResetUpdateStatus(); alert(L"±£´æ³É¹¦!"); } else if (comdid == L"add") { dw.InsertRow(0); int rows = dw.GetRowCount(); dw.SetItemString(rows, L"GroupName", c_type); dw.SetItemString(rows, L"BankName", c_type); } else if (comdid == L"insert") { int row = dw.GetRow(); if (row<1 || row>dw.GetRowCount()) return 0; dw.InsertRow(row); dw.SetItemString(row, L"GroupName", c_type); } else if (comdid == L"delet") { dw_list.AcceptText(); int row2 = dw.GetRow(); if (row2<1 || row2>dw.GetRowCount()) return 0; dw.DeleteRow(row2); } else if (comdid == L"adduomfolder") adduomfolder(); else if (comdid == L"modifyuomfolder") modifyuomfolder(); else if (comdid == L"deluomfolder") deluomfolder(); else if (comdid == L"search") GridSearch(); xutil::RestoreCursor(hCursor); return 0; } int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnSetFocus(TEvent* evt, LPARAM p) { SetAgent(); tv_1 = GetControl(L"tv_1"); HTREEITEM root = tv_1.GetRootItem(); tv_1.ExpandItem(root); return 1; } int OnDoubleClicked(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; if (row<1 || row > dw_list.GetRowCount()) return 0; xaserverarg arg; //xstring str = hdr.data; xstring colname = hdr.colname; xstring str = dw_list.GetItemString(row, colname.c_str()); arg.AddArg(L"value", str); openUrl(L"/sale/view/view.dlg/xpage/memo/edit", arg); xstring comdid = arg.GetArgString(L"comdid"); if (comdid == L"xmOK") { xstring value = arg.GetArgString(L"value"); dw_list.SetItemString(row, colname.c_str(), value); dw_list.Redraw(); } return 1; } int ItemOutput() { xstring d = publiccode::GetCurrentDate(); d = d.left(10) + L""; dw_list.SaveAs(d); return 1; } int OnSelectAllRow() { int rows = dw_list.GetRowCount(); if (rows < 1) return -1; dw_list.SelectRow(1, rows, true); dw_list.Redraw(); return 1; } int OnRowCopy() { int rows = dw_list.GetRowCount(); if (rows < 1) return -1; int cols = dw_list.GetColumnCount(); xstring str = L""; int row = dw_list.GetNextSelectRow(1); int i; while (row > 0) { xstring tmp1 = L""; for (i = 1; i < cols; i++) { int w = dw_list.GetColumnWidth(i); if (w < 5) continue; xstring tmp; if (dw_list.GetItemDisplayString(row, i + 1)) tmp = dw_list.GetItemDisplayString(row, i + 1); else tmp = dw_list.GetItemString(row, i + 1); tmp1 += tmp + L"\t"; } str += tmp1 + L"\r\n"; row = dw_list.GetNextSelectRow(row + 1); } dw_list.SetDataToClip(str); return 1; } int OnColCopy(xstring col) { int rows = dw_list.GetRowCount(); if (rows < 1) return -1; xstring str = L""; int row = dw_list.GetNextSelectRow(1); while (row > 0) { xstring tmp; if (dw_list.GetItemDisplayString(row, col.c_str())) tmp = dw_list.GetItemDisplayString(row, col.c_str()); else tmp = dw_list.GetItemString(row, col.c_str()); str += tmp + L"\r\n"; row = dw_list.GetNextSelectRow(row + 1); } dw_list.SetDataToClip(str); return 1; } int OnRClick(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; HMENU m = CreatePopupMenu(); int MF_STRING = 0x00000000; int MF_DISABLED = 0x00000002; int TPM_RIGHTBUTTON = 0x0002; int TPM_RETURNCMD = 0x0100; int MF_CHECKED = 0x8; int MF_SEPARATOR = 0x0800; AppendMenu(m, MF_STRING, 1, L"¸´ÖÆÐÐ"); AppendMenu(m, MF_STRING, 101, L"¸´ÖÆÁÐ"); AppendMenu(m, MF_SEPARATOR, -1, L""); AppendMenu(m, MF_STRING, 2, L"ȫѡ"); AppendMenu(m, MF_SEPARATOR, -1, L""); AppendMenu(m, MF_STRING, 4, L"µ¼³öµ½Excel"); AppendMenu(m, MF_SEPARATOR, -1, L""); AppendMenu(m, MF_STRING, 6, L"ÏÔʾÁÐÉèÖÃ"); RECT xr; xpoint pt; GetCursorPos(pt); int ret = TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), &xr); //trace(ret); HCURSOR hCursor = xutil::SetCursorWait(); if (ret == 1) { OnRowCopy(); } else if (ret == 101) { xstring colname = hdr.colname; if (colname != L"") OnColCopy(colname); } else if (ret == 2) { OnSelectAllRow(); } else if (ret == 4) { ItemOutput(); } else if (ret == 6) {} xutil::RestoreCursor(hCursor); return 1; } int OnAttachEvent() { //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ AttachEvent(L"WM_SETFOCUS", (FEvent)&QuickCode_Tree::OnSetFocus); //°ó¶¨¹¤¾ßÌõµã»÷ʼþ AttachEvent(L"WM_XCOMMAND", (FEvent)&QuickCode_Tree::OnXCommand); //»ñµÃÊ÷µÄÑ¡Ôñʼþ AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&QuickCode_Tree::OnTreeSelChanged); AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&QuickCode_Tree::OnDoubleClicked);//ÐÐË«»÷ AttachEvent(L"dw_list", L"DWV_RCLICKED", (FEvent)&QuickCode_Tree::OnRClick);//Êó±êÓÒ¼ü return 1; } xstring jxParam(xstring p, xstring n) { if (p != L"") { p += L"&"; int i = 1; while (p.find(L"=", 0) > 0) { xstring name = p.mid(0, p.find(L"=", 0)); xstring value = p.mid(p.find(L"=", 0) + 1, p.find(L"&", 0) - p.find(L"=", 0) - 1); if (name == n) return L"" + value; i += 1; p = p.mid(p.find(L"&", 0) + 1, p.length()); } } return L""; } int getURLParam() { if (GetWinParam()) { xaserverarg arg = GetArg(); xstring config = arg.GetArgString(L"config"); xml x; if (config == L"") { xstring configXml = arg.GetArgString(L"configxml"); x.loadXML(configXml); } else { getUrl(config, L"", x); } m_configDoc = x; } return 1; } int loaded() { getURLParam(); KXMLDOMDocument ee = m_configDoc; xstring id = m_id; auto n = ee.selectSingleNode(L"//list/dwview[@type='dwgrid'][@id='" + id + L"']"); if (n) { KXMLDOMElement e = n; //trace(e.xml); xstring vface = m_configDoc.selectSingleNode(L"//vface[1]").text(); xstring dwname = L"";//e.selectsingleNode(L"@name").text(); xstring tpl = L"";//e.selectsingleNode(L"@url").text(); xstring dbmap = L""; xstring strtreexquery = L""; if (e.selectSingleNode(L"@name")) dwname = e.selectSingleNode(L"@name").text(); if (e.selectSingleNode(L"@url")) tpl = e.selectSingleNode(L"@url").text(); if (e.selectSingleNode(L"@dbmap")) dbmap = e.selectSingleNode(L"@dbmap").text(); if (e.selectSingleNode(L"@treexquery")) strtreexquery = e.selectSingleNode(L"@treexquery").text(); m_dbmap = dbmap; treexquery = strtreexquery; //trace(vface +L"/"+ tpl); //trace(selectmode); dw_list = new xdwgrid; dw_list.setNativePointer(GetControl(dwname)); dw_list.openUrl(vface + L"/" + tpl); strtpl = tpl; trace(tpl); } return 1; } int onload() { SetArg(); m_config = L"QuickCode.config"; m_agent = L""; dw_list = new xdwtable; dw_list.setNativePointer(GetControl(L"dw_list")); if (GetWinParam()) { xaserverarg arg = GetArg(); //trace(arg.GetString()); xstring id = arg.GetArgString(L"id"); if (id == L"") return 0; m_id = id; loaded(); /*xstring tpl = arg.GetArgString(L"tpl"); if(tpl == L"") tpl = L"QuickCode.tpl/QuickCode"; dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]"); //dw_list.SetColHeaderHeight(0); //dw_list.SetRowSelectorWidth(0); xstring dbmap = arg.GetArgString(L"dbmap"); if(dbmap == L"") dbmap = L"QuickCode.dbmap"; m_dbmap = dbmap; xstring txquery=arg.GetArgString(L"treexquery"); treexquery=txquery; xstring title = arg.GetArgString(L"title"); if(title != L"") win::SetWindowText(GetHWND(),title);*/ OnRetrieve(); } SetAgent(); xstring aa = treexquery; xstring xfNodeAgentArea2 = L"treeagent"; xnode tnode = new xnode; tnode.setNativePointer(GetAgentNode(xfNodeAgentArea2)); xstring stree = L""; stree += L""; stree += L""; SetAgentNode(tnode, stree); tv_1 = GetControl(L"tv_1"); HTREEITEM root = tv_1.GetRootItem(); tv_1.ExpandItem( root); OnAttachEvent(); return 1; } };