#include <wobject/xstring.hpp>
|
#include <xcontrol/xtreeview.hpp>
|
#include <xcontrol/xdwgrid.hpp>
|
#include <xcontrol/xcell.hpp>
|
|
|
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
|
#include "viewobject/view.base.hpp"
|
|
using xml = KXMLDOMDocument;
|
class __declspec(dllexport) ViewAdministrativeDepartmentList : public listwin
|
{
|
public:
|
xdwgrid dw_list;
|
xtreeview tv_folder;//hxsoft.com -> Developer -> wface -> vcontrol
|
xstring rows;
|
xstring urlTree;
|
xstring myDataUrl;
|
int changeddlb;
|
|
xnode m_agentNode; //Agent Condition
|
public:
|
ViewAdministrativeDepartmentList(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
|
public:
|
static ViewAdministrativeDepartmentList* CreateInstance(void* implPtr, void* hWnd)
|
{
|
ViewAdministrativeDepartmentList* pWin = new ViewAdministrativeDepartmentList(implPtr, (HWND)hWnd);
|
return pWin;
|
}
|
int SetAgent()
|
{
|
xstring xfNodeAgentArea = L"agentarea";
|
xnode anode = GetAgentNode(xfNodeAgentArea);
|
if (m_agentNode)
|
{
|
SetAgentNode(anode, m_agentNode);
|
}
|
else
|
{
|
KXMLDOMElement xframeElement = GetElement();
|
KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
|
if (agent)
|
{
|
xstring s = agent.xml();
|
m_agentNode = SetAgentNode(anode, s);
|
}
|
}
|
return 1;
|
}
|
|
//Õ¹¿ª·Å½øÊ÷ÀïÃæ
|
int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
|
{
|
/*ÔÚ¾ßÌåÓ¦ÓÃʱ¿ÉÒÔÓÃDOMDocumentµÄLoad·½·¨À´×°ÔØXMLÎĵµ
|
ÓÃIXMLDOMNode µÄselectNodes£¨²éѯµÄ½á¹ûÓжà¸ö£¬µÃµ½´æ·ÅËÑË÷½á¹ûµÄÁ´±í£©
|
»òselectSingleNode£¨²éѯµÄ½á¹ûÓÐÒ»¸ö£¬ÔÚÓжà¸öµÄÇé¿öÏ·µ»ØÕÒµ½µÄµÚÒ»¸ö½Úµã£©·½·¨½øÐвéѯ£¬
|
ÓÃcreateNodeºÍappendChild·½·¨À´´´½¨½ÚµãºÍ×·¼Ó½Úµã£¬
|
ÓÃIXMLDOMElementµÄsetAttributeºÍgetAttribute·½·¨À´ÉèÖúͻñµÃ½ÚµãµÄÊôÐÔ¡£*/
|
KXMLDOMNodeList nlist = ele.selectNodes(L"item");
|
int len = nlist.length();
|
if (len > 0)
|
tv_folder.SetItemChild(hItem, 1);
|
for (int i = 0; i < len; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
xstring name = e.getAttribute(L"name");
|
HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);//trust(e as int)½«e·ÅÈëÊ÷½á¹¹ÀïÃæµÄdataÊôÐÔÖÐ
|
ExpandCatChildFolder(h, e, 35);
|
}
|
return 1;
|
}
|
|
//Õ¹¿ªÎļþ¼ÐÃ÷ϸ
|
int ExpandFolderItem(HTREEITEM hItem, xstring parentid)
|
{
|
xml x = ViewObject::RetrieveData(urlTree, L"status", L"ÓÐЧ", L"parentid", parentid);//»ñÈ¡ºǫ́Êý¾Ý
|
if (!x) {
|
return 0;
|
}
|
KXMLDOMNodeList nlist = x.selectNodes(L"data/Item");
|
int len = nlist.length();
|
for (int i = 0; i < len; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
xstring name = e.selectSingleNode(L"name").text();
|
HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
|
ExpandCatChildFolder(h, e, 35);
|
}
|
return 1;
|
}
|
|
//²éÕÒµ±Ç°Ê÷ÏîµÄ¶¥¼¶Ä¿Â¼
|
HTREEITEM LookupTopFolder(HTREEITEM hItem)
|
{
|
HTREEITEM hRoot = tv_folder.GetRootItem();
|
while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
|
return hItem;
|
}
|
|
//Ê÷Õ¹¿ª
|
int OnTreeExpanding(TEvent* evt, int p)
|
{
|
NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
|
HTREEITEM hItem = nmtv.itemNew.hItem;
|
HTREEITEM hTopItem = LookupTopFolder(hItem);
|
xstring name = tv_folder.GetItemLabel(hTopItem);
|
HTREEITEM child = tv_folder.GetChildItem(hItem);
|
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
xstring parentid = L"";
|
if (name != L"²¿ÃŽṹ")
|
parentid = e.selectSingleNode(L"adid").text();
|
trace(parentid);
|
if (!child) {
|
ExpandFolderItem(hItem, parentid);
|
}
|
return 1;
|
}
|
|
//²éѯ½ÚµãµÄÁбíÊý¾Ý
|
int OnPreRetrieve()
|
{
|
HTREEITEM hItem = tv_folder.GetSelectedItem();
|
if (!hItem ) return 1;
|
|
//int hCursor = xutil::SetCursorWait();
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
xstring name = e.getAttribute(L"name");
|
xml x = 0;
|
xstring parentid = L"";
|
if (name != L"²¿ÃŽṹ")
|
parentid = e.selectSingleNode(L"adid").text();
|
trace(parentid);
|
x = ViewObject::RetrieveData(myDataUrl, L"parentid", parentid);
|
if (x)
|
{
|
//trace(x.xml());
|
dw_list.Retrieve(x);
|
dw_list.Redraw();
|
}
|
else {
|
dw_list.Reset();
|
dw_list.Redraw();
|
}
|
dw_list.SetReadOnly(true);
|
//xutil::RestoreCursor(hCursor);
|
return 1;
|
}
|
|
int OnTreeSelChanged(TEvent* evt, int p)
|
{
|
if (changeddlb)
|
return 1;
|
HTREEITEM hItem = tv_folder.GetSelectedItem();
|
if (!hItem)
|
return 1;
|
HTREEITEM child = tv_folder.GetChildItem(hItem);
|
if (!child) {
|
HCURSOR hCursor = xutil::SetCursorWait();
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
if (!e.getAttribute(L"name")) {
|
xstring adid = e.selectSingleNode(L"adid").text();
|
xstring parentid = adid;
|
ExpandFolderItem(hItem, parentid);
|
}
|
}
|
return OnPreRetrieve();
|
}
|
|
//½¹µã¼¤»î´¦Àíº¯Êý
|
int OnSetFocus(TEvent* evt, LPARAM p)
|
{
|
//ÖØÖù¤¾ßÌõ
|
SetAgent();
|
return 1;
|
}
|
|
int OnAdd()
|
{
|
HTREEITEM hItem = tv_folder.GetSelectedItem();
|
if (!hItem )
|
return 1;
|
HCURSOR hCursor = xutil::SetCursorWait();
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
xstring parentid = L"";//¸¸¼¶id
|
if (!e.getAttribute(L"name"))
|
parentid = e.selectSingleNode(L"adid").text();
|
xaserverarg arg;
|
|
arg.AddArg(L"parentid", parentid);
|
OpenWindow(L"dev:xpage[AdministrativeDepartmentFolder.vx]",arg);
|
|
return 1;
|
}
|
|
int OnUpdate()
|
{
|
/*int hItem = tv_folder.GetSelectedItem();
|
|
if(hItem <=0)
|
return 1;
|
int hCursor = xutil::SetCursorWait();
|
KXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
|
|
if(e.getAttribute(L"name"))
|
return 1;*/
|
|
int row = dw_list.GetRow();
|
if (row < 1)
|
return 1;
|
xstring parentid = L"", adid = L"";
|
/*KXMLDOMElement ele = dw_list.GetRowElement(row);
|
adid = ele.selectSingleNode(L"adid").text();*/
|
adid = dw_list.GetItemString(row, L"adid");
|
parentid = dw_list.GetItemString(row, L"parentid");
|
|
xaserverarg arg;
|
|
/*xstring parentid = L"", adid = L"";//¸¸¼¶id
|
|
if(!e.getAttribute(L"name")){
|
|
parentid = e.selectSingleNode(L"adid").text();
|
adid = e.selectSingleNode(L"adid").text();
|
}*/
|
arg.AddArg(L"parentid", parentid);
|
arg.AddArg(L"adid", adid);
|
OpenWindow(L"dev:xpage[AdministrativeDepartmentFolder.vx]",arg);
|
return 1;
|
}
|
|
int OnDelete()
|
{
|
/*int hItem = tv_folder.GetSelectedItem();
|
if(hItem <=0) return 1;
|
|
int hCursor = xutil::SetCursorWait();
|
KXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
|
xstring name = e.getAttribute(L"name");
|
xstring adid = L"";
|
if(name != L"²¿ÃŽṹ")
|
adid = e.selectSingleNode(L"adid").text();*/
|
|
int row = dw_list.GetRow();
|
if (row < 1)
|
return 1;
|
xstring adid = L"";
|
/*KXMLDOMElement ele = dw_list.GetRowElement(row);
|
adid = ele.selectSingleNode(L"adid").text();*/
|
adid = dw_list.GetItemString(row, L"adid");
|
|
xml x ;
|
|
xaserverarg arg;
|
|
arg.AddArg(L"adid", adid);
|
if (getUrl(L"/sale/data/AdministrativeDepartment/ad_delete", arg.GetString(), x) != 1)
|
{
|
xstring error = x.text();
|
alert(L"err:" + error);
|
return 1;
|
}
|
alert(x.text());
|
dw_list.DeleteRow(row);
|
return 1;
|
}
|
|
int OnRefresh()
|
{
|
OnPreRetrieve();
|
return 1;
|
}
|
|
//ÃüÁî·¢²¼º¯Êý
|
int OnCmdDispatch(xstring comdid)
|
{
|
if (comdid == L"xmUpdate")
|
return OnUpdate();
|
else if (comdid == L"xmAdd")
|
return OnAdd();
|
else if (comdid == L"xmDelete")
|
return OnDelete();
|
else if (comdid == L"xmRefresh")
|
return OnRefresh();
|
return 0;
|
}
|
|
//ÃüÁî´¦Àíʼþ
|
int OnXCommand(TEvent* evt, LPARAM p)
|
{
|
return OnCmdDispatch(evt->xcommand.pStrID);
|
}
|
|
int OnAttachEvent()
|
{
|
AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ViewAdministrativeDepartmentList::OnTreeSelChanged); //Ê÷Ñ¡Ôñ
|
AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ViewAdministrativeDepartmentList::OnTreeExpanding); //Ê÷Õ¹¿ª
|
|
//AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED",OnRowChanged);
|
//AttachEvent(L"cbx_1",L"CBN_SELCHANGE",OnSelectDdlb);
|
//AttachEvent(L"cbx_datashow",L"CBN_SELCHANGE",OnSelectDataShowDdlb);
|
|
//°ó¶¨¹¤¾ßÌõµã»÷ʼþ
|
AttachEvent(L"WM_XCOMMAND", (FEvent)&ViewAdministrativeDepartmentList::OnXCommand);
|
//»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ
|
AttachEvent(L"WM_SETFOCUS", (FEvent)&ViewAdministrativeDepartmentList::OnSetFocus);
|
return 1;
|
}
|
|
/*
|
//¼ÓÔØÖ÷ÌåÊý¾Ý
|
int OnRetrieve()
|
{
|
xml x ;
|
|
xaserverarg arg;
|
|
//arg.AddArg(L"xxx",L"xxx");
|
if (getUrl(myDataUrl,arg.GetString(),x)!=1)
|
{
|
trace(x.text());
|
return -1;
|
}else
|
{
|
dw_list.Retrieve(x);
|
dw_list.Redraw();
|
}
|
return 1;
|
}
|
*/
|
|
//Õ¹¿ª×ÓÎļþ
|
int ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
|
{
|
KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
|
int len = nlist.length();
|
for (int i = 0; i < len; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
xstring name = e.getAttribute(L"name");
|
xstring sImage = e.getAttribute(L"image");
|
xstring child = e.getAttribute(L"child");
|
int image = 18;
|
if (sImage) image = sImage.toInt();
|
HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
|
if (child != L"no")
|
tv_folder.SetItemChild(h, 1);
|
ExpandChildFolder(h, e);
|
}
|
return 1;
|
}
|
|
//³õʼ»¯Îļþ¼Ð
|
int InitialFolder()
|
{
|
KXMLDOMElement xframeElement = GetElement();
|
KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
|
if (e)
|
ExpandChildFolder(0, e);
|
return 1;
|
}
|
|
int onload()
|
{
|
dw_list = GetControl(L"dw_list");
|
dw_list.openUrl(L"/sale/view/AdministrativeDepartment/template/adlist");
|
dw_list.SetColumnState(L"adid", false);
|
dw_list.SetColumnState(L"parentid", false);
|
|
myDataUrl = L"/sale/data/AdministrativeDepartment/ad_list";
|
urlTree = L"/sale/data/AdministrativeDepartment/ad_sidelist";
|
tv_folder = GetControl(L"tv_folder");
|
tv_folder.SetLineAtRoot(true);
|
InitialFolder();
|
OnAttachEvent();
|
|
return 1;
|
}
|
|
int onloaded()
|
{
|
SetAgent();
|
|
return 1;
|
}
|
};
|