#include #include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) DeveloperSynch : public xframe { public: xtreeview tv_gs; xsedit dw_log; int nItems; int nCount; xstring sContent; public: DeveloperSynch(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} public: static DeveloperSynch* CreateInstance(void* implPtr, void* hWnd) { DeveloperSynch* pWin = new DeveloperSynch(implPtr, (HWND)hWnd); return pWin; } xstring ProcessDevCmd(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false) { if(aurl == L"") aurl = GetServerUrl(); //alert(aurl); xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin); return d; } xstring ProcessDevCmd2(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false) { if(aurl == L"") aurl = GetServerUrl(); //alert(aurl); xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin); return d; } int GetProjectItem(int hItem) { int pitem = hItem; xstring typ; while(true) { int h =tv_gs.GetItemData(tv_gs.GetId(), pitem); KXMLDOMElement e = trust(h as KXMLDOMElement); typ = GetEleString(e, L"@tagname"); if(typ==L"project")break; pitem =tv_gs.GetParentItem(tv_gs.GetId(), pitem); if(pitem<=0)break; } return pitem; } int GetP2Item(int hItem) { int hDomainItem; int hP2Item = hItem; while(true) { hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item); if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break; hP2Item = hDomainItem; } return hP2Item; } xstring GetItemGuid(int hItem) { int h =tv_gs.GetItemData(tv_gs.GetId(), hItem); KXMLDOMElement e = trust(h as KXMLDOMElement); xstring guid = e.GetAttribute(L"guid"); return guid; } xaserverarg GetDataArg(int hItem, xaserverarg arg) { int h =tv_gs.GetItemData(tv_gs.GetId(), hItem); KXMLDOMElement e = trust(h as KXMLDOMElement); xstring node = GetEleString(e, L"@tagname"); //WriteLog(e.xml); if(node==L"File" || node==L"file") { xstring caption = e.getAttribute(L"caption"); int hP2Item = 0; int hDomainItem = 0; if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0) { hDomainItem = hItem; }else { hP2Item = GetP2Item(hItem); hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item); } //find project folder xstring prjguid=L""; int pitem = GetProjectItem(hItem); if(pitem > 0) prjguid = GetItemGuid(pitem); //xaserverarg arg ; //; arg.AddArg(L"project.guid",prjguid); if(hP2Item) { if(hP2Item != hItem) { xstring guid = e.getAttribute(L"guid"); arg.AddArg(L"guid",guid); } xstring guid2 = GetItemGuid(hP2Item); arg.AddArg(L"root.guid",guid2); }else if(hDomainItem > 0) { xstring guid3 = GetItemGuid(hDomainItem); arg.AddArg(L"domain.guid",guid3); } return 1; } else if(node==L"folder" || node==L"project") return 2; else return 0; } int SaveData(int hItem) { xcontrol xc = GetControl(L"surl"); xstring surl = xc.GetText(); if(surl == L"") { alert(L"ÇëÊäÈëͬ²½·þÎñÆ÷µØÖ·"); return 1; } xstring name =tv_gs.GetItemLabel(hItem); xaserverarg arg ; ; int ret = GetDataArg(hItem, arg); //alert(arg.GetString()); if(ret == 0) { WriteLog(name+L" ʧ°Ü, Ô­Òò:»ñÈ¡¹¤³Ì»òÎļþ¼Ðʧ°Ü!"); return -1; } else if(ret == 2) { ret = SynchFolder(hItem); if(ret == -1) WriteLog(name+L" ʧ°Ü, Ô­Òò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü!"); else if(ret == 0) WriteLog(name+L" ʧ°Ü, Ô­Òò:¸´ÖÆÎļþʧ°Ü!"); else WriteLog(name); return -1; } SynchFolder(hItem); arg.AddArg(L"__name",name); arg.AddArg(L"__url",surl); synchServer(arg); if(name.right(3) == L".vx" || name.right(5) == L".xpage") { arg.AddArg(L"__name",name + L"[Code]"); arg.AddArg(L"iscode",L"yes"); synchServer(arg); } return 1; } xstring GetFolderPath(int hItem) { int k = hItem; if(k == 0) return L""; xstring src = L""; //xstring name = L""; while(k > 0) { int h =tv_gs.GetItemData(tv_gs.GetId(), k); k =tv_gs.GetParentItem(tv_gs.GetId(), k); KXMLDOMElement e = trust(h as KXMLDOMElement); xstring node = GetEleString(e, L"@tagname"); if(node != L"File" && node != L"file") { xstring tmp = GetEleString(e, L"@src"); //if(name == L"") name = GetEleString(e, L"@caption"); if(tmp != L"") { SynchFolder(k); if(src == L"") src = tmp; else { int j = 1; int s = tmp.length()(); xstring t = tmp.right(j).left(1); while(t != L"\\" && j < s) { //WriteLog(t); j++; t = tmp.right(j).left(1); } if(j >= s) src = tmp+ L"\\" + src; else src = tmp.left(s - j)+ L"\\" + src; } } } } if(src == L"") { //WriteLog(name+L" ͬ²½Ê§°Ü, Ô­Òò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü0!"); return L""; } //if(src.left(9) ==L"Projects\\") src = src.mid(9, src.length()()); src = L"\\" + src;//.replace(L"Projects\\",L""); //WriteLog(src); return src; } int SynchFolder(int hItem) { xstring src = GetFolderPath(hItem); if(src== L"") return -1; if(xaserver::FileCopy(L"devfolder8001", src, L"devfolder5001", src) != 1) return 0; //WriteLog(src); return 1; } int synchServer(xaserverarg arg) { xstring name = arg.GetArgString(L"__name"); xstring surl = arg.GetArgString(L"__url"); xstring d = ProcessDevCmd(L"getobject",arg.GetString()); if(d == L"") { WriteLog(name+L" ʧ°Ü, Ô­Òò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü!"); return -1; } //WriteLog(d); arg.AddArg(L"content",d); ProcessDevCmd(L"saveobject",arg.GetString(), surl,true); WriteLog(name); return 1; } int WriteLog(xstring str) { if(sContent == L"") sContent = str; else sContent += L"\r\n" + str; //alert(sContent); dw_log.SetContent(sContent, L""); return 1; } //½¹µã¼¤»î´¦Àíº¯Êý int OnSetFocus(TEvent* evt, LPARAM param) { //ÖØÖù¤¾ßÌõ SetAgent(); return 1; } int Add(int hItem) { if(nCount >99) { alert(L"ͬʱͬ²½µÄÊýÁ¿²»ÄÜ´óÓÚ100¸ö!"); return 1; } nItems[nCount] = hItem; nCount++; return 1; } int Del(int hItem) { for(int i=0; inotify.pnmh; int hItem = nmtv.FromItem; HCURSOR hCursor = xutil::SetCursorWait(); int hwnd = nmtv.hwndFrom; int c = 1 -tv_gs.GetChecked(hwnd, hItem); if(c == 1) Add(hItem); else Del(hItem); xutil::RestoreCursor(hCursor); return 1; } //ÃüÁî´¦Àíʼþ int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnAttachEvent() { //°ó¶¨¹¤¾ßÌõµã»÷ʼþ AttachEvent(L"WM_XCOMMAND", (FEvent)&DeveloperSynch::OnXCommand); //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ //AttachEvent(L"WM_SETFOCUS",OnSetFocus); AttachEvent(L"DevExplorer",L"TVN_CHECKBOXSEL", (FEvent)&DeveloperSynch::OnTreeCheckBoxSel); AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING", (FEvent)&DeveloperSynch::OnTreeExpanding); return 1; } int OnTreeExpanding(TEvent* evt, LPARAM lparam) { TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh; int hItem = nmtv.itemNew.hItem; int cItem=xtreeview::GetChildItem(tv_gs.GetId(), hItem); if(cItem > 0) return 1; int p =tv_gs.GetItemData(tv_gs.GetId(), hItem); KXMLDOMElement ele = trust(p as KXMLDOMElement); xstring src =GetEleString(ele, L"@src"); xstring tagname =GetEleString(ele, L"@tagname"); if (src == L"" || tagname == L"file" || tagname == L"File") return 1; OnSetTree(hItem, GetFolderPath(hItem)); return 1; } int OnSetTree(int pItem, KXMLDOMElement e) { KXMLDOMNodeList li=e.selectNodes(L"*"); int i=0; int s=li.length(); for (i=0;i