#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>
|
|
#include <tchar.h>
|
|
using xml = KXMLDOMDocument;
|
class export XDevEditPage : public xwin
|
{
|
public:
|
XDevEditPage(void* implPtr,HWND hWnd) :xwin(implPtr,hWnd) {}
|
public:
|
xstring ProcessDevCmd(xstring cmd, xstring ext)
|
{
|
return xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext);
|
}
|
|
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(HTREEITEM hItem,xstring content, int bcode)
|
{
|
xwin w = GetFrameWindow();
|
xtreeview tv_folder = w.GetControl(L"DevExplorer");
|
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 SaveContentEx(xstring content, int bcode)
|
{
|
HTREEITEM hItem = (HTREEITEM)GetWinParam();
|
return SaveContentEx(hItem,content,bcode);
|
}
|
|
int SaveContent(HTREEITEM hItem,xstring content)
|
{
|
return SaveContentEx(hItem,content, 0);
|
}
|
|
int SaveContent(xstring content)
|
{
|
return SaveContentEx(content, 0);
|
}
|
|
int SaveContentEx(xstring prjguid, xstring domainguid, xstring rootguid, xstring guid,xstring content, int bcode)
|
{
|
xaserverarg arg;
|
arg.AddArg(L"project.guid", prjguid);
|
arg.AddArg(L"root.guid", rootguid);
|
arg.AddArg(L"domain.guid", domainguid);
|
arg.AddArg(L"guid", guid);
|
arg.AddArg(L"content", content);
|
if (bcode)arg.AddArg(L"iscode", L"yes");
|
ProcessDevCmd(L"saveobject", arg.GetString());
|
return 1;
|
}
|
|
xstring GetGuid()
|
{
|
return publiccode::GetGuid();
|
}
|
|
int ImportItem(xstring baseFolder,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 uri = ele.getAttribute(L"uri");
|
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"[not(@delete) and @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 lens;
|
KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]");
|
lens = nodes.length();
|
for (int i = 0; i < lens; i++)
|
{
|
KXMLDOMElement child = nodes.item(i);
|
ImportItem(baseFolder,hNewItem, child, prjguid, domainguid, rootguid);
|
}
|
}
|
return 1;
|
}
|
else
|
{
|
//update content
|
if (typ == L"file" && node.selectSingleNode(L"@guid") && node.selectSingleNode(L"@src"))
|
{
|
wchar_t path[MAX_PATH]=L"";
|
xstring src = node.selectSingleNode(L"@src").text();
|
trace(L"\r\n" + src);
|
wcscat_s(path, MAX_PATH, baseFolder);
|
wcscat_s(path, MAX_PATH, L"/");
|
wcscat_s(path, MAX_PATH, src.c_str());
|
xstring xs = xfile::GetString(path);
|
const wchar_t* val = xs.c_str();
|
xstring myguid = node.selectSingleNode(L"@guid").text();
|
xstring mytype = node.selectSingleNode(L"@type") ? node.selectSingleNode(L"@type").text() : L"";
|
|
if (xs != L"")
|
{
|
this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, false);
|
if (mytype == L"xpage")
|
{
|
::PathRemoveExtensionW(path);
|
wcscat_s(path, MAX_PATH, L".xss");
|
xs = xfile::GetString(path);
|
if (xs != L"")this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, true);
|
}
|
}
|
}
|
|
HTREEITEM hNewItem = tv_folder.GetChildItem(hItem);
|
KXMLDOMElement e2 = node;
|
xstring url2 = e2.getAttribute(L"uri");
|
while (hNewItem)
|
{
|
KXMLDOMElement e1 = tv_folder.GetItemData(hNewItem);
|
wchar_t* uri1 = e1.getAttribute(L"uri");
|
wchar_t* uri2 = e2.getAttribute(L"uri");
|
if (url2 == e1.getAttribute(L"uri"))break;
|
hNewItem = tv_folder.GetNextItem(hNewItem);
|
}
|
|
if (hNewItem)
|
{
|
int lens;
|
KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]");
|
lens = nodes.length();
|
for (int i = 0; i < lens; i++)
|
{
|
KXMLDOMElement child = nodes.item(i);
|
ImportItem(baseFolder, hNewItem, child, prjguid, domainguid, rootguid);
|
}
|
}
|
|
}
|
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);
|
|
TCHAR szPath[MAX_PATH]=L"";
|
wcscat_s(szPath, MAX_PATH,srcfile.c_str());
|
::PathRemoveExtensionW(szPath);
|
|
xstring path = L"//*[(name()='file' or name()='folder') and not(@delete) 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()[not(@delete)]");
|
lens = nodes.length();
|
for (int i = 0; i < lens; i++)
|
{
|
KXMLDOMElement child = nodes.item(i);
|
ImportItem(szPath,hItem, child, prjguid, domainguid, rootguid);
|
}
|
|
return 1;
|
}
|
};
|