xj qian
2024-08-21 9e213f03833e59a37306a7a7195d005ab5384d74
update devloper
已添加3个文件
已修改4个文件
894 ■■■■■ 文件已修改
jrj/ext-jrj/ext-jrj.vcxproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj.filters 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/vindexform.cpp 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditPage.cpp 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevItemDlg.cpp 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/devloper.cpp 553 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/wobject/xwin.hpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj
@@ -172,6 +172,7 @@
    <ClInclude Include="..\project\viewobject\shoppingcart.view.hpp" />
    <ClInclude Include="..\project\viewobject\supplier.view.hpp" />
    <ClInclude Include="..\xframe\adt\xarray.hpp" />
    <ClInclude Include="..\xframe\devloper\XDevEditPage.cpp" />
    <ClInclude Include="..\xframe\kobject\kapp.hpp" />
    <ClInclude Include="..\xframe\kobject\kbase.hpp" />
    <ClInclude Include="..\xframe\kobject\kcachemgr.hpp" />
@@ -1084,6 +1085,8 @@
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\devloper.cpp" />
    <ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp" />
    <ClCompile Include="..\xframe\src\nmemory.cpp" />
    <ClCompile Include="..\xframe\src\nstring.cpp" />
    <ClCompile Include="..\xframe\src\xstring.cpp" />
jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -127,6 +127,9 @@
    <Filter Include="project\business\Customer">
      <UniqueIdentifier>{1a6cab16-6910-4b7a-a805-80b24ceac7ac}</UniqueIdentifier>
    </Filter>
    <Filter Include="devloper">
      <UniqueIdentifier>{3df44a8b-be7b-441e-8310-dba7612e94e3}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="framework.h">
@@ -377,6 +380,9 @@
    </ClInclude>
    <ClInclude Include="..\project\business\SystemSettings\SysUser.hpp">
      <Filter>project\business\SystemSettings</Filter>
    </ClInclude>
    <ClInclude Include="..\xframe\devloper\XDevEditPage.cpp">
      <Filter>devloper</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
@@ -1271,5 +1277,11 @@
    <ClCompile Include="..\project\business\AP\list.manageSupplierID.ap.cpp">
      <Filter>project\business\AP</Filter>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\devloper.cpp">
      <Filter>devloper</Filter>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp">
      <Filter>devloper</Filter>
    </ClCompile>
  </ItemGroup>
</Project>
jrj/project/vindexform.cpp
@@ -642,6 +642,16 @@
    int Initial()
    {
        SetUserID();
        xstring userno = xaserver::GetUserNo();
        if (userno == L"admin")
        {
            xnode anode = GetAgentNode(L"dev");
            int LayerFlow_WE_ = 0x00000002;
            int LayerFlow_Control_ = 0x00000010;
            anode.SetLayerFlow(LayerFlow_WE_ | LayerFlow_Control_);
        }
        m_Assignment = L"";
        return 1;
    }
    int onload()
jrj/xframe/devloper/XDevEditPage.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
#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>
using xml = KXMLDOMDocument;
class export XDevEditPage : public xwin
{
    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 = ((LPARAM)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 <= 0)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) <= 0)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) <= 0)
            {
                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) <= 0)
            {
                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);
    }
};
jrj/xframe/devloper/XDevItemDlg.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
#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>
using xml = KXMLDOMDocument;
class export XDevItemDlg : public xwin
{
private:
    xaserverarg arg;
    KXMLDOMElement pr;
public:
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        if (comdid == L"xmDevCancel")
        {
            CloseWindow();
            return 1;
        }
        if (comdid == L"xmDevOk")
        {
            if (arg)
            {
                xcontrol xc= GetControl(L"xmDevType");
                arg.SetArg(L"typename", xc.GetText());
                KXMLDOMElement o = pr.selectSingleNode(L"//folder[@caption='" + xc.GetText() + L"']");
                if (o)
                {
                    xstring image = o.getAttribute(L"image");
                    //alert(image);
                    arg.SetArg(L"image", image);
                }
                xc = GetControl(L"xmDevName");
                arg.SetArg(L"name", xc.GetText());
                xc = GetControl(L"xmDevDesc");
                arg.SetArg(L"desc", xc.GetText());
                xc = GetControl(L"xmDevUri");
                arg.SetArg(L"uri", xc.GetText());
                arg.SetArg(L"__process",L"true");
                arg.SetArg(L"folder",L"folder");
            }
            CloseWindow();
            return 1;
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnCombSelChanged()
    {
        xcontrol xc = GetControl(L"xmDevType");
        LPARAM j = SendMessage(xc.GetHWND(),0x0147,0,0);
        if (j > 0)
        {
            wchar_t str[255];
            SendMessage(xc.GetHWND(),0x0148,j,(LPARAM)str);
            //trace(str);
            xc = GetControl(L"xmDevName");
            xc.SetText(str);
            xc = GetControl(L"xmDevUri");
            xc.SetText(str);
        }
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevItemDlg::OnXCommand);
        //AttachEvent(L"xmDevType", L"CBN_SELCHANGE",(FEvent)&XDevItemDlg::OnCombSelChanged);
        return 1;
    }
    int OnInitial()
    {
        OnAttachEvent();
        xml project;
        xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevProject.xml]",L"",project);
        auto list = project.selectNodes(L"//folder");
        pr = project.documentElement();
        long nlen = list.length();
        int i = 0;
        for (i = 0; i < nlen; i++)
        {
            KXMLDOMElement e = list.item(i);
            xstring name = e.getAttribute(L"caption");
            xcombobox b = GetControl(L"xmDevType");
            b.AddItem(name);
        }
        return 1;
    }
    int onload()
    {
        SetArg();
        OnInitial();
        arg = GetArg();
        if (arg)
        {
            xstring val;
            xcontrol xc(nullptr);
            val = arg.GetArgString(L"typename");
            xc = GetControl(L"xmDevType");
            if (val)xc.SetText(val);
            val = arg.GetArgString(L"name");
            xc = GetControl(L"xmDevName");
            if (val)xc.SetText(val);
            val = arg.GetArgString(L"desc");
            xc = GetControl(L"xmDevDesc");
            if (val)xc.SetText(val);
            val = arg.GetArgString(L"uri");
            xc = GetControl(L"xmDevUri");
            if (val)xc.SetText(val);
            val = arg.GetArgString(L"src");
            xc = GetControl(L"xmDevPath");
            if (val)xc.SetText(val);
            val = arg.GetArgString(L"guid");
            xc = GetControl(L"xmDevGuid");
            if (val)xc.SetText(val);
            val = arg.GetArgString(L"type");
            //xml project = new xml;
            //xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevProject.xml]",L"",project);
            //var list = project.GetXmlDoc().selectNodes(L"//folder");
            //trace(val);
            xc = GetControl(L"xmDevType");
            if (val)xc.SetText(val);
        }
        return 1;
    }
};
jrj/xframe/devloper/devloper.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,553 @@
#include <wobject/xstring.hpp>
#include <wobject/xwin.hpp>
#include <wobject/xaserver.hpp>
#include <wobject/xaserverarg.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
{
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    {
        xstring t = mle_output.GetText();
        mle_output.SetText(t + msg);
        return 1;
    }
    int OnProcessUrl(xstring kind, xstring url)
    {
        xml x ;
        xaserverarg xarg;
        xarg.AddArg(L"url", url);
        xarg.AddArg(L"kind", kind);
        xaserver::ExecXQuery(GetServerUrl(), L"[service.url.info.xq]", xarg.GetString(), x);
        alert(x.xml());
        return 1;
    }
    xstring ProcessDevCmd(xstring cmd, xstring ext)
    {
        int nlen = 0;
        BYTE* pdata=nullptr;
        xaserver::ProcessCmd(GetServerUrl(),( L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext.c_str(), pdata, nlen);
        xstring str = ((LPARAM)pdata) + L"";
        return str;
    }
    int SetAgent(xstring node)
    {
        auto n = GetElement().selectSingleNode(L"agent/projects/node()[1]");
        if (n)
        {
            xstring agent = n.xml();
            xstring xfNodeAgentArea = L"agentarea";
            xnode anode = GetAgentNode(xfNodeAgentArea);
            SetAgentNode(anode, agent);
        }
        return 1;
    }
    HTREEITEM GetProjectItem(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(HTREEITEM hItem)
    {
        HTREEITEM hDomainItem;
        HTREEITEM hP2Item = hItem;
        while (true)
        {
            hDomainItem = tv_folder.GetParentItem(hP2Item);
            if (!tv_folder.GetParentItem(hDomainItem))break;
            hP2Item = hDomainItem;
        }
        return hP2Item;
    }
    //树展开事件
    int OnTreeExpanding(TEvent* evt, HTREEITEM param)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        return 1;
    }
    xstring GetData(HTREEITEM hItem)
    {
        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(hItem);
                hDomainItem = tv_folder.GetParentItem(hP2Item);
            }
            //find project folder
            xstring prjguid = L"";
            HTREEITEM pitem = GetProjectItem(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);
            }
            xstring str = ProcessDevCmd(L"getobject", arg.GetString());
            return str + L"";
        }
        else
            return L"";
    }
    int OnTreeDblClick(TEvent* evt, int param)
    {
        HTREEITEM hItem = tv_folder.GetSelectedItem();
        if (!hItem) return 0;
        xlayersheet layer = GetControl(L"mdilayer");
        int i = 0;
        int nIndex = layer.GetSheetCount();
        for (i = 0; i < nIndex; i++)
        {
            if (hItem == layer.GetParam(i))break;
        }
        if (i < nIndex)
        {
            layer.SelectSheet(i);
            return 1;
        }
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        xstring node = e.tagName();
        if (node == L"File" || node == L"file")
        {
            //xstring str =  ProcessDevCmd(L"getobject",arg.GetString());
            xstring typ = e.getAttribute(L"type");
            xml x ;
            xaserver::FetchXml(GetServerUrl(), L"dev:xpage[XDevEdit.xml]", L"", x);
            auto n = x.selectSingleNode(L"//editor[@filetype='" + typ + L"']/@xpage");
            if (n)
            {
                xstring xpage = n.text();
                OpenWindow(L"dev:xpage[" + xpage + L"]", (LPARAM)hItem);
                //layer.
                if (nIndex < layer.GetSheetCount())
                    layer.SetParam(nIndex, hItem);
            }
        }
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        //
        if (comdid == L"xmSqlWatch")
        {
            OpenWindow(L"dev:xpage[sqlWatch.vx]");
            return 1;
        }
        if (comdid == L"xmCheckUrl")
        {
            xcontrol xc = GetControl(L"url");
            xstring url = xc.GetText();
            return OnProcessUrl(L"info", url);
        }
        else if (comdid == L"xmClearBuffer")
        {
            xcontrol xc = GetControl(L"url");
            xstring url = xc.GetText();
            return OnProcessUrl(L"clearbuffer", url);
        }
        if (comdid == L"xmNewFolder" || comdid == L"xmNewProject" || comdid == L"xmNewFile")
        {
            HTREEITEM hItem = tv_folder.GetSelectedItem();
            if (!hItem) return 1;
            //find project folder
            xstring prjguid = L"";
            HTREEITEM pitem = GetProjectItem(hItem);
            if (pitem)
                prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
            if (comdid == L"xmNewProject" && prjguid != L"") return 1;
            if (comdid == L"xmNewFile" && !tv_folder.GetParentItem(hItem)) return 1;
            xaserverarg arg;
            if (comdid == L"xmNewProject")
                OpenWindow(L"dev:xpage[XDevProjectDlg.xpage]", arg);
            else if (comdid == L"xmNewFolder")
                OpenWindow(L"dev:xpage[XDevItemDlg.xpage]", arg);
            else
                OpenWindow(L"dev:xpage[XDevFileDlg.xpage]", arg);
            if (arg.GetArgString(L"__process") != L"true") return 1;
            arg.SetArg(L"project.guid", prjguid);
            HTREEITEM hP2Item = 0;
            HTREEITEM hDomainItem = 0;
            KXMLDOMElement e;
            if (!tv_folder.GetParentItem(hItem))
            {
                hDomainItem = hItem;
            }
            else
            {
                hP2Item = GetP2Item(hItem);
                hDomainItem = tv_folder.GetParentItem(hP2Item);
            }
            e = tv_folder.GetItemData(hItem);
            if (hP2Item)
            {
                if (hP2Item != hItem)
                {
                    xstring guid = e.getAttribute(L"guid");
                    arg.AddArg(L"parent.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 (hP2Item)
            {
                if (comdid == L"xmNewFolder")
                {
                    if (arg.GetArgString(L"image") == L"")
                        arg.AddArg(L"image", L"15");
                    arg.AddArg(L"folder", L"folder");
                    arg.AddArg(L"type", L"folder");
                }
            }
            else
            {
                if (comdid == L"xmNewFolder")
                {
                    if (arg.GetArgString(L"image") == L"")
                        arg.AddArg(L"image", L"17");
                    arg.AddArg(L"folder", L"folder");
                    arg.AddArg(L"type", L"folder");
                }
            }
            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();
                tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage);
            }
            return 1;
        }
        else if (comdid == L"xmDeleteObject")
        {
            HTREEITEM hItem = tv_folder.GetSelectedItem();
            if (!hItem) return 1;
            //find project folder
            xstring prjguid = L"";
            HTREEITEM pitem = GetProjectItem(hItem);
            if (pitem)
                prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
            HTREEITEM hP2Item = 0;
            HTREEITEM hDomainItem = 0;
            KXMLDOMElement e;
            if (!tv_folder.GetParentItem(hItem) ) return 1;
            hP2Item = hItem;
            while (true)
            {
                hDomainItem = tv_folder.GetParentItem(hP2Item);
                if (!tv_folder.GetParentItem(hDomainItem))break;
                hP2Item = hDomainItem;
            }
            e = tv_folder.GetItemData(hItem);
            xstring guid = e.getAttribute(L"guid");
            xaserverarg arg;
            arg.SetArg(L"project.guid", prjguid);
            arg.AddArg(L"guid", guid);
            KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
            guid = p.getAttribute(L"guid");
            arg.AddArg(L"root.guid", guid);
            int MB_YESNO = 0x00000004;
            int IDYES = 6;
            if (MessageBox(GetHWND(), L"确认删除指定的项", L"提示", MB_YESNO) != IDYES) return 1;
            ProcessDevCmd(L"deletefolder", arg.GetString());
            tv_folder.DeleteItem(hItem);
            return 1;
        }
        else if (comdid == L"xmUpdateProject")
        {
            HTREEITEM hItem = tv_folder.GetSelectedItem();
            if (!hItem) return 1;
            //find project folder
            xstring prjguid = L"";
            HTREEITEM pitem = GetProjectItem(hItem);
            if (pitem && pitem != hItem)
                prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
            HTREEITEM hP2Item = 0;
            HTREEITEM hDomainItem = 0;
            KXMLDOMElement e;
            if (!tv_folder.GetParentItem(hItem) ) return 1;
            hP2Item = hItem;
            while (true)
            {
                hDomainItem = tv_folder.GetParentItem(hP2Item);
                if (!tv_folder.GetParentItem(hDomainItem))break;
                hP2Item = hDomainItem;
            }
            e = tv_folder.GetItemData(hItem);
            xstring guid = e.getAttribute(L"guid");
            xaserverarg arg;
            arg.SetArg(L"project.guid", prjguid);
            arg.AddArg(L"guid", guid);
            KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
            //trace(p.xml);
            guid = p.getAttribute(L"guid");
            arg.AddArg(L"root.guid", guid);
            xstring str;
            str = e.getAttribute(L"caption");
            arg.AddArg(L"name", str);
            str = e.getAttribute(L"desc");
            arg.AddArg(L"desc", str);
            str = e.getAttribute(L"uri");
            arg.AddArg(L"uri", str);
            str = e.getAttribute(L"guid");
            arg.AddArg(L"guid", str);
            str = e.getAttribute(L"src");
            arg.AddArg(L"src", str);
            str = e.getAttribute(L"type");
            arg.AddArg(L"type", str);
            OpenWindow(L"dev:xpage[XDevItemDlg.xpage]", arg);
            if (arg.GetArgString(L"__process") != L"true") return 1;
            ProcessDevCmd(L"updatefolder", arg.GetString());
            str = arg.GetArgString(L"name");
            e.setAttribute(L"caption", str);
            str = arg.GetArgString(L"desc");
            e.setAttribute(L"desc", str);
            str = arg.GetArgString(L"uri");
            e.setAttribute(L"uri", str);
            tv_folder.SetItemLabel(hItem, arg.GetArgString(L"name"));
            return 1;
        }
        else if (comdid == L"xmEditObject")
        {
            HTREEITEM hItem = tv_folder.GetSelectedItem();
            if (!hItem) return 1;
            xlayersheet layer = GetControl(L"mdilayer");
            int i = 0;
            int nIndex = layer.GetSheetCount();
            for (i = 0; i < nIndex; i++)
            {
                if (hItem == layer.GetParam(i))break;
            }
            if (i < nIndex)
            {
                layer.SelectSheet(i);
                return 1;
            }
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring node = e.tagName();
            if (node == L"File" || node == L"file")
            {
                //xstring str =  ProcessDevCmd(L"getobject",arg.GetString());
                xstring typ = e.getAttribute(L"type");
                xml x ;
                xaserver::FetchXml(GetServerUrl(), L"dev:xpage[XDevEdit.xml]", L"", x);
                auto n = x.selectSingleNode((xstring)L"//editor[@filetype='" + L"xml" + L"']/@xpage");
                if (n)
                {
                    xstring xpage = n.text();
                    OpenWindow(L"dev:xpage[" + xpage + L"]", (LPARAM)hItem);
                    //layer.
                    if (nIndex < layer.GetSheetCount())
                        layer.SetParam(nIndex, hItem);
                }
            }
        }
        return 0;
    }
    //树选择事件
    int OnTreeSelChanged(TEvent* evt, LPARAM param)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.itemNew.hItem;
        //root node
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        SetAgent(L"projects");
        return 1;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt, int param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnSelChanged(TEvent* evt, int param)
    {
        xlayersheet layer = GetControl(L"mdilayer");
        LYSNMHDR& nmtv = *(LYSNMHDR*)evt->notify.pnmh;
        int sheet = nmtv.nSheet;
        int s = layer.GetSheetCount();
        //状态栏显示完成路径
        HTREEITEM hitem = tv_folder.GetSelectedItem();
        xstring path = L"" + tv_folder.GetItemLabel(hitem);
        while (tv_folder.GetParentItem(hitem))
        {
            hitem = tv_folder.GetParentItem(hitem);
            xstring p = L"" + tv_folder.GetItemLabel(hitem);
            path = p + L"\\" + path;
        }
        xcontrol xc = GetControl(L"statusbar");
        xc.SetText(L"" + path);
        /*
                if(sheet<s)
                {
                    param p=layer.GetParam(sheet);
                    int hitem = p;
                    onPrintPath(hitem);
                }
        */
        return 1;
    }
    int OnSelChangedEx(TEvent* evt, int param)
    {
        xlayersheet layer = GetControl(L"mdilayer");
        LYSNMHDR& nmtv = *(LYSNMHDR*)evt->notify.pnmh;
        int sheet = nmtv.nSheet;
        int s = layer.GetSheetCount();
        int k = sheet_Count;
        if (k < s)
        {
            void* p = nullptr;
            layer.SetParam(s - 1, p);
        }
        sheet_Count = s;
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDeveloper::OnXCommand);
        AttachEvent(L"DevExplorer", L"NM_DBLCLK", (FEvent)&XDeveloper::OnTreeDblClick);
        //获得树的展开事件
        //AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING",(FEvent)&XDeveloper::OnTreeExpanding);
        //获得树的选择事件
        AttachEvent(L"DevExplorer", L"TVN_SELCHANGED", (FEvent)&XDeveloper::OnTreeSelChanged);
        //改变页签
        //AttachEvent(L"mdilayer", L"LYSN_SELECTEDSHEET",(FEvent)&XDeveloper::OnSelChanged);
        AttachEvent(L"mdilayer", L"LYSN_SELECTEDSHEET", (FEvent)&XDeveloper::OnSelChangedEx);
        return 1;
    }
    int OnInitial()
    {
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        sheet_Count = -1;
        OnInitial();
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        return 1;
    }
};
jrj/xframe/wobject/xwin.hpp
@@ -11,6 +11,7 @@
using kcontrol = Hxsoft::XFrame::IXFControl;
using knode = Hxsoft::XFrame::IXNode;
#define export __declspec(dllexport)
#define DeclWinObject_(ty,pty) class __declspec(dllexport) ty :  public pty
#define CreateWinObject_(ty,pty) \
public:\