#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(tv_gs.GetParentItem(hItem)<=0) 
 | 
                { 
 | 
                    hDomainItem = hItem; 
 | 
                }else 
 | 
                { 
 | 
                    hP2Item = GetP2Item(hItem); 
 | 
                    hDomainItem =tv_gs.GetParentItem(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; 
 | 
             
 | 
            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; 
 | 
        }         
 | 
    }; 
 |