| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #include <wobject/xstring.hpp> |
| | | #include <xcontrol/xtreeview.hpp> |
| | | #include <xcontrol/xdwgrid.hpp> |
| | | #include <wobject/xdouble.hpp> |
| | | #include <xcontrol/xlayersheet.hpp> |
| | | #include <xcontrol/xdatetimepick.hpp> |
| | | |
| | | |
| | | #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; i<nCount; i++) |
| | | { |
| | | int p = nItems[i]; |
| | | if(p == hItem) break; |
| | | } |
| | | if(i<nCount) |
| | | { |
| | | for(int j=i; j<nCount - 1; j++) |
| | | { |
| | | int k = nItems[j + 1]; |
| | | nItems[j] = k; |
| | | } |
| | | nCount --; |
| | | } |
| | | return 1; |
| | | } |
| | | |
| | | //å½ä»¤åå¸å½æ° |
| | | int OnCmdDispatch(xstring comdid) |
| | | { |
| | | if(comdid != L"synch") return 1; |
| | | |
| | | HCURSOR hCursor = xutil::SetCursorWait(); |
| | | sContent = L""; |
| | | for(int i=0; i<nCount; i++) |
| | | { |
| | | int p = nItems[i]; |
| | | //int h =tv_gs.GetItemData(tv_gs.GetId(), p); |
| | | //KXMLDOMElement e = trust(h as KXMLDOMElement); |
| | | //alert(e.xml); |
| | | SaveData(p); |
| | | xtreeview::SetChecked(tv_gs.GetId(), p,0); |
| | | } |
| | | xutil::RestoreCursor(hCursor); |
| | | nCount = 0; |
| | | return 0; |
| | | } |
| | | |
| | | int OnTreeCheckBoxSel(TEvent* evt, LPARAM p) |
| | | { |
| | | TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.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<s;i++){ |
| | | KXMLDOMElement ele= li.item(s - i - 1); |
| | | xstring caption = GetEleString(ele, L"@caption"); |
| | | xstring src =GetEleString(ele, L"@src"); |
| | | xstring image =GetEleString(ele, L"@image"); |
| | | int p = trust(ele as int); |
| | | int hItem=xtreeview::InsertItem(tv_gs.GetId(), pItem,0,caption,p,image.toInt()); |
| | | xstring tagname =GetEleString(ele, L"@tagname"); |
| | | if (src != L"" && tagname != L"file" && tagname != L"File") |
| | | xtreeview::SetItemChild1(tv_gs.GetId(), hItem,1); |
| | | OnSetTree(hItem, ele); |
| | | } |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | int OnSetTree(int hItem, xstring src) |
| | | { |
| | | xml x=new xml; |
| | | |
| | | xaserverarg arg; |
| | | ; |
| | | arg.AddArg(L"src",src); |
| | | if(xaserver::ExecXQuery(GetServerUrl(),L"[Developer.Tree.xq]",arg.GetString(),x)!=1) |
| | | { |
| | | alert(L"读åèç¹å¤±è´¥!"); |
| | | return 1; |
| | | } |
| | | KXMLDOMElement e = x.documentElement(); |
| | | OnSetTree(hItem, e); |
| | | return 1; |
| | | } |
| | | |
| | | int onload() |
| | | { |
| | | nCount = 0; |
| | | tv_gs = GetControl(L"DevExplorer"); |
| | | dw_log = GetControl(L"xlog"); |
| | | OnAttachEvent(); |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | int onloaded() |
| | | { |
| | | OnSetTree(0, L"Projects/projects.xhw"); |
| | | return 1; |
| | | } |
| | | }; |