#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=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;
|
}
|
};
|