#include <wobject/xstring.hpp>
|
#include <wobject/xwin.hpp>
|
#include <wobject/xaserver.hpp>
|
#include <wobject/xaserverarg.hpp>
|
#include <xcontrol/xtreeview.hpp>
|
#include <xcontrol/xlayersheet.hpp>
|
#include <xcontrol/xcombobox.hpp>
|
#include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp>
|
#include <win32/xfile.hpp>
|
|
using xml = KXMLDOMDocument;
|
class export XDevEditPage : public xwin
|
{
|
public:
|
XDevEditPage(void* implPtr,HWND hWnd) :xwin(implPtr,hWnd) {}
|
public:
|
xstring ProcessDevCmd(xstring cmd, xstring ext)
|
{
|
//trace(ext);
|
int nlen = 0;
|
BYTE* pdata;
|
xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext, pdata, nlen);
|
if (nlen > 0)
|
{
|
xstring str = ((wchar_t*)pdata);
|
return str.mid(1, 9999999);
|
}
|
else
|
return L"";
|
}
|
|
HTREEITEM GetProjectItem(xtreeview tv_folder, HTREEITEM hItem )
|
{
|
HTREEITEM pitem = hItem;
|
xstring typ;
|
while (true)
|
{
|
typ = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).tagName();
|
if (typ == L"project")break;
|
pitem = tv_folder.GetParentItem(pitem);
|
if (!pitem)break;
|
}
|
return pitem;
|
}
|
|
HTREEITEM GetP2Item(xtreeview tv_folder, HTREEITEM hItem )
|
{
|
HTREEITEM hDomainItem;
|
HTREEITEM hP2Item = hItem;
|
while (true)
|
{
|
hDomainItem = tv_folder.GetParentItem(hP2Item);
|
if (!tv_folder.GetParentItem(hDomainItem))break;
|
hP2Item = hDomainItem;
|
}
|
return hP2Item;
|
}
|
|
xstring GetData(int bcode)
|
{
|
xwin w = GetFrameWindow();
|
xtreeview tv_folder = w.GetControl(L"DevExplorer");
|
HTREEITEM hItem = (HTREEITEM)GetWinParam();
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
xstring node = e.tagName();
|
if (node == L"File" || node == L"file")
|
{
|
xstring caption = e.getAttribute(L"caption");
|
SetWindowText(GetHWND(), caption);
|
|
HTREEITEM hP2Item = 0;
|
HTREEITEM hDomainItem = 0;
|
if (!tv_folder.GetParentItem(hItem))
|
{
|
hDomainItem = hItem;
|
}
|
else
|
{
|
hP2Item = GetP2Item(tv_folder, hItem);
|
hDomainItem = tv_folder.GetParentItem(hP2Item);
|
}
|
|
//find project folder
|
xstring prjguid = L"";
|
HTREEITEM pitem = GetProjectItem(tv_folder, hItem);
|
if (pitem)
|
prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
|
|
xaserverarg arg;
|
arg.AddArg(L"project.guid", prjguid);
|
if (hP2Item)
|
{
|
if (hP2Item != hItem)
|
{
|
xstring guid = e.getAttribute(L"guid");
|
arg.AddArg(L"guid", guid);
|
}
|
KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
|
xstring guid = p.getAttribute(L"guid");
|
arg.AddArg(L"root.guid", guid);
|
}
|
else if (hDomainItem)
|
{
|
KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
|
xstring guid = d.getAttribute(L"guid");
|
arg.AddArg(L"domain.guid", guid);
|
}
|
if (bcode)arg.AddArg(L"iscode", L"yes");
|
return ProcessDevCmd(L"getobject", arg.GetString());
|
}
|
else
|
return L"";
|
}
|
xstring GetData()
|
{
|
return GetData(0);
|
}
|
|
int SaveContentEx(xstring content, int bcode)
|
{
|
xwin w = GetFrameWindow();
|
xtreeview tv_folder = w.GetControl(L"DevExplorer");
|
HTREEITEM hItem = (HTREEITEM)GetWinParam();
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
xstring node = e.tagName();
|
if (node == L"File" || node == L"file")
|
{
|
HTREEITEM hP2Item = 0;
|
HTREEITEM hDomainItem = 0;
|
if (!tv_folder.GetParentItem(hItem))
|
{
|
hDomainItem = hItem;
|
}
|
else
|
{
|
hP2Item = GetP2Item(tv_folder, hItem);
|
hDomainItem = tv_folder.GetParentItem(hP2Item);
|
}
|
|
//find project folder
|
xstring prjguid = L"";
|
HTREEITEM pitem = GetProjectItem(tv_folder, hItem);
|
if (pitem)
|
prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
|
|
xaserverarg arg;
|
arg.AddArg(L"project.guid", prjguid);
|
if (hP2Item)
|
{
|
if (hP2Item != hItem)
|
{
|
xstring guid = e.getAttribute(L"guid");
|
arg.AddArg(L"guid", guid);
|
}
|
KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
|
xstring guid = p.getAttribute(L"guid");
|
arg.AddArg(L"root.guid", guid);
|
}
|
else if (hDomainItem)
|
{
|
KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
|
xstring guid = d.getAttribute(L"guid");
|
arg.AddArg(L"domain.guid", guid);
|
}
|
arg.AddArg(L"content", content);
|
if (bcode)arg.AddArg(L"iscode", L"yes");
|
ProcessDevCmd(L"saveobject", arg.GetString());
|
}
|
return 1;
|
}
|
int SaveContent(xstring content)
|
{
|
return SaveContentEx(content, 0);
|
}
|
|
xstring GetGuid()
|
{
|
return publiccode::GetGuid();
|
}
|
|
int ImportItem(HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid)
|
{
|
xwin w = GetFrameWindow();
|
xtreeview tv_folder = w.GetControl(L"DevExplorer");
|
xstring caption = ele.getAttribute(L"src");
|
xstring guid = ((KXMLDOMElement)tv_folder.GetItemData(hItem)).getAttribute(L"guid");
|
xstring typ = ele.tagName();
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
|
|
xaserverarg arg;
|
KXMLDOMNode node = e.selectSingleNode(typ + L"[@caption='" + caption + L"']");
|
if (!node)
|
{
|
//add file folder
|
arg.AddArg(L"image", ele.getAttribute(L"image"));
|
//arg.AddArg(L"guid", ele.getAttribute(L"guid"));
|
arg.AddArg(L"folder", ele.tagName());
|
arg.AddArg(L"type", ele.getAttribute(L"type"));
|
arg.AddArg(L"desc", ele.getAttribute(L"desc"));
|
arg.AddArg(L"uri", ele.getAttribute(L"uri"));
|
arg.AddArg(L"src", ele.getAttribute(L"src"));
|
arg.AddArg(L"name", ele.getAttribute(L"caption"));
|
|
arg.AddArg(L"parent.guid", guid);
|
arg.AddArg(L"project.guid", prjguid);
|
arg.AddArg(L"domain.guid", domainguid);
|
arg.AddArg(L"root.guid", rootguid);
|
|
xstring str = ProcessDevCmd(L"addfolder", arg.GetString());
|
if (str != L"")
|
{
|
xml x;
|
x.loadXML(str);
|
auto e1 = x.documentElement();
|
e.appendChild(e1);
|
int himage = xstring(e1.getAttribute(L"image")).toInt();
|
HTREEITEM hNewItem = tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage);
|
|
/*
|
int GENERIC_READ = 0x80000000;
|
int GENERIC_WRITE = 0x40000000;
|
int FILE_SHARE_READ = 0x00000001;
|
int FILE_SHARE_WRITE = 0x00000002;
|
int OPEN_EXISTING = 3;
|
int FILE_ATTRIBUTE_ARCHIVE = 0x00000020;
|
HANDLE hFile = xfile::CreateFile(L"D:\\jrjhome\\developer-yh\\projects\\mherp.com.cn\\ǰ¶Ë²ßÂÔ\works\\¹©Ó¦Á´\\" + sTemplName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
|
if (hFile > 0)
|
{
|
//int GMEM_MOVEABLE=0x0002;
|
//int GMEM_ZEROINIT=0x0040;
|
//int MEMSIZE;
|
//int hMemory = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,MEMSIZE);
|
//int pMemory = GlobalLock(hMemory);
|
//int SizeReadWrite;
|
//xwin::ReadFile(hFile,pMemory,MEMSIZE - 1,SizeReadWrite,0);
|
DWORD FileSizeHigh = 0;
|
int filesize = xfile::GetFileSize(hFile,FileSizeHigh);
|
char * buffer = new char[filesize+2];
|
DWORD readsize;
|
xfile:ReadFile(hFile, buffer, filesize, &readsize, 0);
|
xfile::CloseHandle(hFile);
|
}*/
|
|
|
int lens;
|
KXMLDOMNodeList nodes = ele.selectNodes(L"node()");
|
lens = nodes.length();
|
for (int i = 0; i < lens; i++)
|
{
|
KXMLDOMElement child = nodes.item(i);
|
ImportItem(hNewItem, child, prjguid, domainguid, rootguid);
|
}
|
}
|
return 1;
|
}
|
return 1;
|
}
|
|
int ImportItems(xstring srcfile, xstring id)
|
{
|
xwin w = GetFrameWindow();
|
xtreeview tv_folder = w.GetControl(L"DevExplorer");
|
HTREEITEM hItem = tv_folder.GetSelectedItem();
|
if (!hItem) return 1;
|
|
xml src;
|
src.load(srcfile);
|
xstring path = L"//*[(name()='file' or name()='folder') and @src='" + id + L"']";
|
const wchar_t* str = src.xml();
|
KXMLDOMElement srcele = src.selectSingleNode(path);
|
if (!srcele) return 1;
|
|
|
//find project folder
|
xstring prjguid = L"";
|
xstring domainguid = L"";
|
xstring rootguid = L"";
|
|
HTREEITEM pitem = GetProjectItem(tv_folder,hItem);
|
if (pitem && pitem != hItem)
|
prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
|
|
HTREEITEM hP2Item = 0;
|
HTREEITEM hDomainItem = 0;
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
if (!tv_folder.GetParentItem(hItem))
|
{
|
hDomainItem = hItem;
|
}
|
else
|
{
|
hP2Item = GetP2Item(tv_folder,hItem);
|
hDomainItem = tv_folder.GetParentItem(hP2Item);
|
}
|
|
if (hP2Item)
|
{
|
KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
|
rootguid = p.getAttribute(L"guid");
|
}
|
if (hDomainItem)
|
{
|
KXMLDOMElement d = tv_folder.GetItemData(hDomainItem);
|
domainguid = d.getAttribute(L"guid");
|
}
|
int lens;
|
KXMLDOMNodeList nodes = srcele.selectNodes(L"node()");
|
lens = nodes.length();
|
for (int i = 0; i < lens; i++)
|
{
|
KXMLDOMElement child = nodes.item(i);
|
ImportItem(hItem, child, prjguid, domainguid, rootguid);
|
}
|
|
return 1;
|
}
|
};
|