xj qian
2024-12-04 90e3cd57d7cf80588608b28b1301824b40f677ca
update
已修改3个文件
已添加17个文件
7426 ■■■■■ 文件已修改
jrj/ext-jrj/ext-jrj.vcxproj 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditDbmap.cpp 317 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXAction.cpp 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXCode.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXDV.cpp 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXFile.cpp 371 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXFlow.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXHtml.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXLayer.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXML.cpp 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXMSSQL.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXOffice.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXPage.cpp 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXQuery.cpp 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXRuler.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXWKDlg.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXWorkNode.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevFileDlg.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/devloper.cpp 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/kobject/kxml.hpp 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj
@@ -193,7 +193,10 @@
    <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\devloper\XDevEditPage.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
    </ClInclude>
    <ClInclude Include="..\xframe\kobject\kapp.hpp" />
    <ClInclude Include="..\xframe\kobject\kbase.hpp" />
    <ClInclude Include="..\xframe\kobject\kcachemgr.hpp" />
@@ -1168,6 +1171,70 @@
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditDbmap.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXAction.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXCode.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXDV.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXFile.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXFlow.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXHtml.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXLayer.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXML.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXMSSQL.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXOffice.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXPage.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXQuery.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXRuler.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXWKDlg.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXWorkNode.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevItemDlg.cpp" />
    <ClCompile Include="..\xframe\src\nmemory.cpp" />
    <ClCompile Include="..\xframe\src\nstring.cpp" />
jrj/xframe/devloper/XDevEditDbmap.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,317 @@
#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/xsedit.hpp>
using xml = KXMLDOMDocument;
class export XDevEditDbmap : public xwin
{
    public:
    XDevEditDbmap(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
public:
    static XDevEditDbmap* CreateInstance(void* implPtr, void* hWnd)
    {
        return new XDevEditDbmap(implPtr, (HWND)hWnd);
    }
private:    //
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*xstring xfNodeAgentArea  =L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        var xframeElement =  GetElement();
        var agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
        if(agent)
        {
            xstring s = agent.xml;
            m_agentNode =  SetAgentNodeContent (anode,s);
        }*/
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        //trace(content);
        xsedit xs = GetControl(L"content");
        if (content != L"")
        {
            xs.LoadContent(content,L".xml");
        }
    else
       xs.LoadContent(L"",L".xml");
    xsedit xs1 = GetControl(L"xmlcontent");
    xs1.LoadContent(L"",L".xml");
    return 1;
    }
    xstring OnGetType()
    {
        xwin w = GetFrameWindow();
        xtreeview tv_folder = w.GetControl(L"DevExplorer");
        HTREEITEM hItem = (HTREEITEM)GetWinParam();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        xstring str = e.getAttribute(L"type");
        return str;
    }
    xstring OnGetUri()
    {
        xwin w = GetFrameWindow();
        xtreeview tv_folder = w.GetControl(L"DevExplorer");
        HTREEITEM hItem = (HTREEITEM)GetWinParam();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        xstring str = e.getAttribute(L"uri");
        return str;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        xstring content;
        xsedit xs = GetControl(L"content");
        xs.GetContent(content);
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"xmFileSave")
        {
            //save xml content
            SaveContent(content);
        }
        else if (comdid == L"xmRunTest")
        {
            xstring xmlcontent;
            xsedit xs1 = GetControl(L"xmlcontent");
            xs1.GetContent(xmlcontent);
            xaserverarg arg;
            arg.AddArg(L"dbmap",OnGetUri());
            arg.AddArg(L"content",xmlcontent);
            xml x ;
            if (xaserver::ExecXQuery(GetServerUrl(),L"[ObjectSave.xq]",arg.GetString(),x) != 1)
            {
                trace(x.xml());
                return 1;
            }
            xsedit xs2 = GetControl(L"sqlcontent");
            xs2.LoadContent(x.xml(), L".xml");
            trace(x.xml());
        }
        else if (comdid == L"xmTransGetSql")
        {
            xstring xmlcontent;
            xsedit xs1 = GetControl(L"content");
            xs1.GetContent(xmlcontent);
            xaserverarg arg ;
            arg.AddArg(L"content",xmlcontent);
            xml x ;
            if (xaserver::ExecXQuery(GetServerUrl(),L"[GenTransSql.xq]",arg.GetString(),x) != 1)
            {
                trace(x.xml());
                return 1;
            }
            xsedit xs2 = GetControl(L"xmlTransSql");
            xs2.LoadContent(x.text(), L".xml");
            //trace(x.xml());
        }
        else if (comdid == L"xmGetSql")
        {
            xstring xmlcontent;
            xsedit xs1 = GetControl(L"xmlcontent");
            xs1.GetContent(xmlcontent);
            xaserverarg arg ;
            arg.AddArg(L"dbmap",OnGetUri());
            arg.AddArg(L"content",xmlcontent);
            xml x ;
            if (xaserver::ExecXQuery(GetServerUrl(),L"[ObjectSaveSql.xq]",arg.GetString(),x) != 1)
            {
                trace(x.xml());
                return 1;
            }
            xsedit xs2 = GetControl(L"sqlcontent");
            xs2.LoadContent(x.text(), L".sql");
        }
        else if (comdid == L"xmRun")
        {
            xml x ;
            x.loadXML(content);
            KXMLDOMElement e = x.documentElement();
            if (e.selectSingleNode(L"test[1]/@xpage"))
            {
                xstring xpage = e.selectSingleNode(L"test/@xpage").text();
                xaserverarg arg;
                arg.AddArg(L"configxml", content);
                //arg.AddArg(L"config",L"");
                if (e.selectSingleNode(L"test/@EntityID"))
                    arg.AddArg(L"EntityID", e.selectSingleNode(L"test/@EntityID").text());
                OpenWindow(xpage +L"native=true", arg);
            }
        }
        else if (comdid ==L"xmValid")
        {
            xml x;
            if (!x.loadXML(content))
            {
                KXMLDOMParseError pError = x.parseError;
                if (pError)
                {
                    xstring str = pError.srcText();
                    xstring sError =L"\r\nXML错误: " + str.trim() +L"\r\n";
                    int s = pError.errorCode();
                    sError +=L"   ä»£ç : " + xstring(s) + L"\r\n";
                    s = pError.line();
                    sError +=L"   ä½ç½®: ç¬¬" + xstring(s) +L"行,L";
                    s = pError.linepos();
                    sError +=L"第" + xstring(s) +L"列" +L"\r\n";
                    str = pError.reason();
                    sError +=L"   åŽŸå› : " + str;
                    trace(sError);
                }
                else
                {
                    trace(L"XML é”™è¯¯");
                }
                xutil::RestoreCursor(hCursor);
                return -1;
            }
            xstring sType = OnGetType();
            if (sType ==L"xml.xsd")
            {
                xstring sError;
                x.ValidSchema(content, &sError);
                trace(sError);
            }
        }
        else if (comdid ==L"xmEditFind")
        {
            xutil::RestoreCursor(hCursor);
            xsedit xs = GetControl(L"content");
            xs.OnFindDlg();
            return 1;
        }
        else if (comdid ==L"xmEditReplace")
        {
            xutil::RestoreCursor(hCursor);
            xsedit xs = GetControl(L"content");
            xs.OnReplaceDlg();
            return 1;
        }
        xutil::RestoreCursor(hCursor);
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnLButtonDown(TNotifyEvent* evt,LPARAM p)
    {
        xsedit edit_1 = GetControl(L"content");
        int sPos = edit_1.GetSelectionStart();
        int ePos = edit_1.GetSelectionEnd();
        xstring content = edit_1.GetText();
        content = content.mid(sPos, ePos - sPos);
        //trace(content);
        if (content ==L"") return -1;
        xwin w = GetFrameWindow();
        xtreeview tv_folder = w.GetControl(L"DevExplorer");
        HTREEITEM hItem = GetWinParam();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //trace(e.xml);
        xstring str = e.getAttribute(L"type");
        xstring uri = e.getAttribute(L"uri");
        //trace(str);
        xml xl ;
        xstring xtype =L"";
        if (str ==L"iface")
            //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.data.url.xml]",L"",xl);
            xtype =L"data";
        else if (str ==L"vface")
            //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.view.url.xml]",L"",xl);
            xtype =L"view";
        else
            return 0;
        xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale." + xtype +L".url.xml]",L"",xl);
        //trace(xl.xml());
        auto doc = xl;
        auto n = doc.selectSingleNode(L"//item[@src='dev:" + str +L"[" + uri +L"]']/@url");
        //trace(n.xml);
        xstring aurl =L"";
        if (n)
        {
            xstring tmp =L"" + n.text();
            aurl =L"/sale/" + xtype +L"/" + tmp +L"/" + content;
        }
        else
            return -1;
        trace(aurl);
        xml x;
        xaserverarg arg;
        arg.AddArg(L"url",aurl +L"?node");
        if (xaserver::ExecXQuery(GetServerUrl(),L"[service.url.xq]",arg.GetString(),x) != 1)
        {
            trace((xstring)L"error:" + x.xml());
            return 0;
        }
        trace(x.xml());
        xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevEdit.xml]",L"",xl);
        //trace(xl.xml());
        auto n1 = xl.selectSingleNode(L"//editor[@filetype='" + str +L"']/@xpage");
        if (n1)
        {
            xstring xpage = n1.text();
            trace(xpage);
            xstring pa =x.xml();
            OpenWindow(L"dev:xpage[" + xpage +L"]", 0);
        }
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditDbmap::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditDbmap::OnSetFocus);
        //AttachEvent(L"content",L"WM_LBUTTONDOWN", (FEvent)&XDeveloper::OnLButtonDown);
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        OnInitial();
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXAction.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,199 @@
#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/xdwgrid.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
using xml = KXMLDOMDocument;
class export XDevEditAction : public xwin
{
    public:
    XDevEditAction(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
public:
    static XDevEditAction* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditAction* pWin = new XDevEditAction(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xdwgrid    dw_list;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*
        xstring xfNodeAgentArea  = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        auto xframeElement =  GetElement();
        auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
        if(agent)
        {
            xstring s = agent.xml;
            m_agentNode =  SetAgentNodeContent (anode,s);
        }
        */
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,int param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        if (content != L"")
        {
            xsedit xs = GetControl(L"sqlcontent");
            xml x ;
            x.loadXML(content);
            KXMLDOMElement e = x.documentElement();
            auto ele = e.selectSingleNode(L"datasource/sql");
            if (ele)
                xs.LoadContent(ele.text(), L".sql");
            KXMLDOMElement e1 = e.selectSingleNode(L"datasource");
            xcontrol xc = GetControl(L"datasource");
            xstring v = e1.getAttribute(L"source");
            xc.SetText(L"" + v);
            xc = GetControl(L"linkname");
            xstring v = e1.getAttribute(L"link");
            xc.SetText(L"" + v);
            KXMLDOMElement e2 = e.selectSingleNode(L"paras");
            xml y ;
            y.loadXML(e2.xml());
            dw_list.Retrieve(y);
        }
        return 1;
    }
    xstring ProcessDevCmdEx(xstring cmd)
    {
        int nlen = 0;
        BYTE* pdata;
        xaserver::ProcessCmd(GetServerUrl(),L"uri.hxsoft.com/xaserver/xaction:" + cmd,0,pdata,nlen);
        if (nlen > 0)
        {
            xstring str = ((WCHAR*)pdata);
            return str.mid(0,9999999);
        }
else
   return L"";
}
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        if (comdid == L"xmFileSave")
        {
            HCURSOR hCursor = xutil::SetCursorWait();
            xstring content;
            xsedit xs = GetControl(L"sqlcontent");
            xs.GetContent(content);
            xml x ;
            x.loadXML(L"<xquery/>");
            auto root = x;
            KXMLDOMElement e = root.createElement(L"datasource");
            xcontrol xc = GetControl(L"datasource");
            xstring v = xc.GetText();
            e.setAttribute(L"source", L"" + v);
            xc = GetControl(L"linkname");
            v = xc.GetText();
            e.setAttribute(L"link", L"" + v);
            KXMLDOMElement e1 = root.createElement(L"sql");
            e1.settext(content);
            e.appendChild(e1);
            root.documentElement().appendChild(e);
            xml y ;
            dw_list.DwUpdateTo(y);
            root.documentElement().appendChild(y.documentElement());
            //trace(y.xml());
            //trace(x.xml());
            SaveContent(x.xml());
            xutil::RestoreCursor(hCursor);
        }
        else if (comdid == L"xmFilePreview")
        {
            xstring content;
            xsedit xs = GetControl(L"sqlcontent");
            xs.GetContent(content);
            xwin w = GetFrameWindow();
            xtreeview tv_folder = w.GetControl(L"DevExplorer");
            HTREEITEM hItem = (HTREEITEM)GetWinParam();
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring guid = e.getAttribute(L"guid");
            //uri.hxsoft.com/xaserver/xquery:{70CFB15C-7722-4134-9842-0DE692F4B4FC}
            xstring data = ProcessDevCmdEx(guid);
            //trace(data);
            //xlayersheet tab = GetControl(L"detailArea");
            //tab.SelectSheet(1);
            xsedit xc = GetControl(L"resultcontent");
            xc.LoadContent(L"" + data,L".xml");
        }
        else if (comdid == L"argadd")
        {
            dw_list.InsertRow(0);
        }
        else if (comdid == L"argdelete")
        {
            int row = dw_list.GetRow();
            if (row < 1) return 0;
            dw_list.DeleteRow(row);
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent) & XDevEditAction::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditAction::OnSetFocus);
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        dw_list = GetControl(L"parasgrid");
        OnInitial();
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXCode.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXDV.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,184 @@
#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/xdwgrid.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
using xml = KXMLDOMDocument;
class export XDevEditXDV : public xwin
{
    public:
    XDevEditXDV(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
public:
    static XDevEditXDV* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditXDV* pWin = new XDevEditXDV(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        xstring xfNodeAgentArea = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        auto xframeElement = GetElement();
        auto agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
        if (agent)
        {
            xstring s = agent.xml();
            m_agentNode = SetAgentNode(anode,s);
        }
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        if (content != L"")
        {
            xsedit xs = GetControl(L"xcontent");
            xs.LoadContent(content,L".xml");
        }
        return 1;
    }
    xstring OnGetType()
    {
        xwin w = GetFrameWindow();
        xtreeview tv_folder = w.GetControl(L"DevExplorer");
        HTREEITEM hItem = (HTREEITEM)GetWinParam();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        xstring str = e.getAttribute(L"type");
        return str;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        xstring content;
        xsedit xs = GetControl(L"xcontent");
        xs.GetContent(content);
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"xmFileSaveEx")
        {
            //save xml content
            SaveContent(content);
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        else if (comdid == L"xmValidEx")
        {
            xml x;
            if (!x.loadXML(content))
            {
                KXMLDOMParseError pError = x.parseError;
                if (pError)
                {
                    xstring str = pError.srcText();
                    xstring sError = L"\r\nXML错误: " + str.trim() + L"\r\n";
                    int s = pError.errorCode();
                    sError += L"   ä»£ç : " + xstring(s) + L"\r\n";
                    s = pError.line();
                    sError += L"   ä½ç½®: ç¬¬" + xstring(s) + L"行,L";
                    s = pError.linepos();
                    sError += L"第" + xstring(s) + L"列" + L"\r\n";
                    str = pError.reason();
                    sError += L"   åŽŸå› : " + str;
                    trace(sError);
                }
                else
                {
                    trace(L"XML é”™è¯¯");
                }
                xutil::RestoreCursor(hCursor);
                return -1;
            }
            xstring sType = OnGetType();
            if (sType == L"xml.xsd")
            {
                xstring sError;
                x.ValidSchema(content, &sError);
                trace(sError);
            }
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        else if (comdid == L"xmEditFind")
        {
            OpenWindow(L"dev:xpage[xcode.finddlg]");
        }
        else if (comdid == L"xmEditReplace")
        {
            OpenWindow(L"dev:xpage[xcode.replacedlg]");
        }
        xutil::RestoreCursor(hCursor);
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,int param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXDV::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXDV::OnSetFocus);
    }
    /*
    int  OnRetrieve()
    {
        xstring query=L"[xxx]";
        xml x = new xml;
        xaserverarg arg;
        arg.AddArg(L"xxx",L"xxx");
        if (xaserver::ExecXQuery(GetServerUrl(),query,arg.Getxstring(),x)!=1)
        {
            trace(x.text);
            return -1;
        }else
        {
            dw_list.Retrieve(x);
            dw_list.Redraw();
        }
        return 1;
    }
    */
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        OnInitial();
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXFile.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,371 @@
#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/xdwgrid.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
#include <xcontrol/xreport.hpp>
using xml = KXMLDOMDocument;
class export XDevEditXFile : public xwin
{
    public:
    XDevEditXFile(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
public:
    static XDevEditXFile* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditXFile* pWin = new XDevEditXFile(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xreport xp;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*        xstring xfNodeAgentArea  = L"agentarea";
                xnode anode = GetAgentNode(xfNodeAgentArea);
                auto xframeElement =  GetElement();
                auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring s = agent.xml;
                    m_agentNode =  SetAgentNodeContent (anode,s);
                }
        */        return 1;
            }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    xstring OnGetType()
    {
        xwin w = GetFrameWindow();
        xtreeview tv_folder = w.GetControl(L"DevExplorer");
        HTREEITEM hItem = (HTREEITEM)GetWinParam();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        xstring str = e.getAttribute(L"type");
        return str;
    }
    KXMLDOMElement OnRetrieve(KXMLDOMElement ele)
    {
        xml doc;
        doc.loadXML(L"<schema/>");
        auto docroot = doc.documentElement();
        auto list = ele.selectNodes(L"*");
        int i;
        int s = list.length();
        for (i = 0; i < s; i++)
        {
            KXMLDOMElement e = list.item(i);
            xstring name = e.getAttribute(L"name");
            xstring id = e.getAttribute(L"id");
            xstring sechma = e.getAttribute(L"sechma");
            xstring et = e.getAttribute(L"et");
            xml x;
            x.loadXML(L"<item/>");
            auto root = x.documentElement();
            root.setAttribute(L"colname",id);
            root.setAttribute(L"name",name);
            root.setAttribute(L"type",sechma);
            root.setAttribute(L"note",et);
            if (e.hasChildNodes())
            {
                KXMLDOMElement e1 = OnRetrieve(e);
                KXMLDOMNodeList e2 = e1.selectNodes(L"item");
                int k;
                int l = e2.length();
                for (k = 0; k < l; k++)
                    root.appendChild(e2.item(k));
            }
            docroot.appendChild(root);
        }
        return docroot;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        xsedit xs = GetControl(L"xcontent");
        xstring content;
        xs.GetContent(content);
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"xmFileSave")
        {
            //save xml content
            SaveContent(content);
        }
        else if (comdid == L"xmTable")
        {
            xml x;
            xaserverarg arg;
            arg.AddArg(L"content",content);
            if (xaserver::ExecXQuery(GetServerUrl(),L"[GenTableSchema.xq]",arg.GetString(),x) != 1)
            {
                return 1;
            }
            //trace(x.text);
            xsedit xs1 = GetControl(L"gncontent");
            xs1.LoadContent(x.xml(),L".sql");
        }
        else if (comdid == L"xmDDL")
        {
            xml x;
            xaserverarg arg;
            arg.AddArg(L"content",content);
            if (xaserver::ExecXQuery(GetServerUrl(),L"[GenDLLBySchema.xq]",arg.GetString(),x) != 1)
            {
                return 1;
            }
            xsedit xs1 = GetControl(L"gncontent");
            xs1.LoadContent(x.xml(),L".sql");
            //trace(x.text);
        }
        else if (comdid == L"xmDbmap")
        {
            xml x;
            xaserverarg arg;
            arg.AddArg(L"content",content);
            if (xaserver::ExecXQuery(GetServerUrl(),L"[GenDbmapBySchema.xq]",arg.GetString(),x) != 1)
            {
                return 1;
            }
            xsedit xs1 = GetControl(L"gncontent");
            xs1.LoadContent(x.xml(),L".xml");
            //trace(x.xml());
        }
        else if (comdid == L"xmValid")
        {
            if (L"" + content == L"") return 0;
            xml x;
            if (!x.loadXML(content))
            {
                KXMLDOMParseError pError = x.parseError;
                if (pError)
                {
                    xstring str = pError.srcText();
                    xstring sError = L"\r\nXMLaa错误: " + str.trim() + L"\r\n";
                    int s = pError.errorCode();
                    sError += L"   ä»£ç : " + xstring(s) + L"\r\n";
                    s = pError.line();
                    sError += L"   ä½ç½®: ç¬¬" + xstring(s) + L"行,L";
                    s = pError.linepos();
                    sError += L"第" + xstring(s) + L"列" + L"\r\n";
                    str = pError.reason();
                    sError += L"   åŽŸå› : " + str;
                    trace(sError);
                }
                else
                {
                    trace(L"XML é”™è¯¯");
                }
                return -1;
            }
            xstring sType = OnGetType();
            if (sType == L"xml.xsd")
            {
                xstring sError;
                x.ValidSchema(content, &sError);
                trace(sError);
            }
        }
        else if (comdid == L"xview")
        {
            if (L"" + content == L"") return 0;
            if (OnCmdDispatch(L"xmValid") != -1)
            {
                xml x;
                if (x.loadXML(content))
                {
                    xp.Reset();
                    /*                    xp.ResetEx();
                                        while(xp.GetRowCount() > 0)
                                            xp.DeleteRow(1);
                    */                    xp.Redraw();
                                        xstring sType = OnGetType();
                                        if (sType == L"iface")
                                        {
                                            auto e = x.selectSingleNode(L"interface");
                                            if (e) {
                                                KXMLDOMElement ele = OnRetrieve(e);
                                                xp.Retrieve(ele);
                                            }
                                        }
                                        else if (sType == L"xml.xsd")
                                        {
                                            xml doc;
                                            x.GetSchemaXml(content,doc);
                                            //trace(doc.xml());
                                            auto e = doc.selectSingleNode(L"root/schema");
                                            if (e) {
                                                xp.Retrieve(e);
                                            }
                                        }
                                        xp.CreateTree(L"node()", 1, 15, 16);
                                        xp.Redraw();
                                    }
                                }
                            }
                            xutil::RestoreCursor(hCursor);
                            return 0;
                        }
    //命令处理事件
    int OnXCommand(TEvent* evt,int param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    xstring GetXSD(xstring name)
    {
        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"";
                int 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)
                    {
                        auto f = e.selectSingleNode(L"//*[@uri='" + name + L"']");
                        if (f) {
                            xstring guid = KXMLDOMElement(f).selectSingleNode(L"@guid").text;//.getAttribute(L"guid");
                            if (guid == L"")
                                return "";
                            arg.AddArg(L"guid",guid);
                        }
    else
       return "";
    }
    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);
    }
    return ProcessDevCmd(L"getobject",arg.GetString());
    }
    else
        return L"";
    }
int OnDoubleClicked(ref TNotifyEvent evt,int param)
{
    ref DWNMHDR  hdr = evt.pnmh;
    int row = hdr.row;
    KXMLDOMElement e = xp.GetRowElement(row);
    xstring filename = e.getAttribute(L"type");
    if (filename.right(4) == L".xsd")
    {
        xstring xsd = GetXSD(L"" + filename);
        xml x;
        x.GetSchemaXml(xsd,x);
        trace(x.xml());
        /*            xml x = new xml;
                    xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevEdit.xml]",L"",x);
                    auto n = x.selectSingleNode(L"//editor[@filetype='xml.xsd']/@xpage");
                    if(n)
                    {
                        xstring xpage = n.text;
                        xwin w = GetFrameWindow();
                        xlayersheet layer = w.GetControl(L"mdilayer");
                        int i = 0;
                        int nIndex = layer.GetSheetCount();
                        for(i=0;i<nIndex;i++)
                        {
                            if(hItem == layer.GetWinParam(i))break;
                        }
                        if(i<nIndex)return 1;
                        OpenWindow(L"dev:xpage["+xpage+L"]",hItem);
                        if(nIndex < layer.GetSheetCount())
                            layer.SetParam(nIndex,hItem);
                    }
        */
                }
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND",OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS",OnSetFocus);
        AttachEvent(L"xreport",L"DWV_DOUBLECLICKED",OnDoubleClicked);
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xsedit xs = GetControl(L"xcontent");
        xstring content = GetData();
        if (content != L"")
        {
            xs.LoadContent(content,L".xml");
        }
        return 1;
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        OnInitial();
        xp = GetControl(L"xreport");
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXFlow.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXHtml.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXLayer.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXML.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,248 @@
#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/xdwgrid.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
using xml = KXMLDOMDocument;
class export XDevEditXML : public xwin
{
    public:
    XDevEditXML(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
public:
    static XDevEditXML* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditXML* pWin = new XDevEditXML(implPtr, (HWND)hWnd);
        return pWin;
    }
private:
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*xstring xfNodeAgentArea  = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        auto xframeElement =  GetElement();
        auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
        if(agent)
        {
            xstring s = agent.xml;
            m_agentNode =  SetAgentNodeContent (anode,s);
        }*/
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        //trace(content);
        xsedit xs = GetControl(L"content");
        if (content != L"")
        {
            xs.LoadContent(content,L".xml");
        }
else
   xs.LoadContent(L"",L".xml");
return 1;
}
xstring OnGetType()
{
    xwin w = GetFrameWindow();
    xtreeview tv_folder = w.GetControl(L"DevExplorer");
    HTREEITEM hItem = (HTREEITEM)GetWinParam();
    KXMLDOMElement e = tv_folder.GetItemData(hItem);
    xstring str = e.getAttribute(L"type");
    return str;
}
//命令发布函数
int OnCmdDispatch(xstring comdid)
{
    xstring content;
    xsedit xs = GetControl(L"content");
    xs.GetContent(content);
    HCURSOR hCursor = xutil::SetCursorWait();
    if (comdid == L"xmFileSave")
    {
        //save xml content
        SaveContent(content);
    }
    else if (comdid == L"xmRun")
    {
        xml x = new xml;
        x.loadXML(content);
        KXMLDOMElement e = x.documentElement();
        if (e.selectSingleNode(L"test[1]/@xpage"))
        {
            xstring xpage = e.selectSingleNode(L"test/@xpage").text();
            xaserverarg arg;
            arg.AddArg(L"configxml", content);
            //arg.AddArg(L"config", L"");
            if (e.selectSingleNode(L"test/@EntityID"))
                arg.AddArg(L"EntityID", e.selectSingleNode(L"test/@EntityID").text());
            OpenWindow(xpage + L"native=true", arg);
        }
    }
    else if (comdid == L"xmValid")
    {
        xml x;
        if (!x.loadXML(content))
        {
            KXMLDOMParseError pError = x.parseError();
            if (pError)
            {
                xstring str = pError.srcText();
                xstring sError = L"\r\nXML错误: " + str.trim() + L"\r\n";
                int s = pError.errorCode();
                sError += L"   ä»£ç : " + xstring(s) + L"\r\n";
                s = pError.line();
                sError += L"   ä½ç½®: ç¬¬" + xstring(s) + L"行,L";
                s = pError.linepos();
                sError += L"第" + xstring(s) + L"列" + L"\r\n";
                str = pError.reason();
                sError += L"   åŽŸå› : " + str;
                trace(sError);
            }
            else
            {
                trace(L"XML é”™è¯¯");
            }
            xutil::RestoreCursor(hCursor);
            return -1;
        }
        xstring sType = OnGetType();
        if (sType == L"xml.xsd")
        {
            xstring sError;
            x.ValidSchema(content, &sError);
            trace(sError);
        }
    }
    else if (comdid == L"xmEditFind")
    {
        xutil::RestoreCursor(hCursor);
        xsedit xs = GetControl(L"content");
        xs.OnFindDlg();
        return 1;
    }
    else if (comdid == L"xmEditReplace")
    {
        xutil::RestoreCursor(hCursor);
        xsedit xs = GetControl(L"content");
        xs.OnReplaceDlg();
        return 1;
    }
    xutil::RestoreCursor(hCursor);
    return 0;
}
//命令处理事件
int OnXCommand(TEvent* evt,LPARAM param)
{
    return OnCmdDispatch(evt->xcommand.pStrID);
}
int OnLButtonDown(TEvent* evt,LPARAM p)
{
    xsedit edit_1 = GetControl(L"content");
    int sPos = edit_1.GetSelectionStart();
    int ePos = edit_1.GetSelectionEnd();
    xstring content = edit_1.GetText();
    content = content.mid(sPos, ePos - sPos);
    //trace(content);
    if (content == L"") return -1;
    xwin w = GetFrameWindow();
    xtreeview tv_folder = w.GetControl(L"DevExplorer");
    HTREEITEM hItem = (HTREEITEM)GetWinParam();
    KXMLDOMElement e = tv_folder.GetItemData(hItem);
    //trace(e.xml);
    xstring str = e.getAttribute(L"type");
    xstring uri = e.getAttribute(L"uri");
    //trace(str);
    xml xl = new xml;
    xstring xtype = L"";
    if (str == L"iface")
        //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.data.url.xml]",L"",xl);
        xtype = L"data";
    else if (str == L"vface")
        //xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale.view.url.xml]",L"",xl);
        xtype = L"view";
    else
        return 0;
    xaserver::LoadUrl(GetServerUrl(),L"dev:xml[sale." + xtype + L".url.xml]",L"",xl);
    //trace(xl.xml());
    auto doc = xl;
    auto n = doc.selectSingleNode(L"//item[@src='dev:" + str + L"[" + uri + L"]']/@url");
    //trace(n.xml);
    xstring aurl = L"";
    if (n)
    {
        xstring tmp = n.text();
        aurl = L"/sale/" + xtype + L"/" + tmp + L"/" + content;
    }
    else
        return -1;
    trace(aurl);
    xml x = new xml;
    xaserverarg arg;
    arg.AddArg(L"url",aurl + L"?node");
    if (xaserver::ExecXQuery(GetServerUrl(),L"[service.url.xq]",arg.GetString(),x) != 1)
    {
        trace((xstring)L"error:" + x.xml());
        return 0;
    }
    trace(x.xml());
    xaserver::FetchXml(GetServerUrl(),L"dev:xpage[XDevEdit.xml]",L"",xl);
    //trace(xl.xml());
    auto n1 = xl.selectSingleNode(L"//editor[@filetype='" + str + L"']/@xpage");
    if (n1)
    {
        xstring xpage = n1.text();
        trace(xpage);
        OpenWindow(L"dev:xpage[" + xpage + L"]", 0);
    }
    return 1;
}
int OnAttachEvent()
{
    //绑定工具条点击事件
    AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXML::OnXCommand);
    //获取焦点事件,用于重置工具条
    AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXML::OnSetFocus);
    //AttachEvent(L"content",L"WM_LBUTTONDOWN", ,(FEvent)&XDevEditXML::OnLButtonDown);
}
int OnInitial()
{
    SetAgent();
    OnAttachEvent();
    return 1;
}
int onload()
{
    OnInitial();
    LoadData();
    return 1;
}
};
jrj/xframe/devloper/XDevEditXMSSQL.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXOffice.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXPage.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
#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/xsedit.hpp>
using xml = KXMLDOMDocument;
class export XDevEditXPage : public xwin
{
    public:
    XDevEditXPage(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd){}
public:
    static XDevEditXPage* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditXPage* pWin = new XDevEditXPage(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*
        xstring xfNodeAgentArea  = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        var xframeElement =  GetElement();
        var agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
        if(agent)
        {
            xstring s = agent.xml;
            m_agentNode =  SetAgentNodeContent (anode,s);
        }
        */
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        if (comdid == L"xmPreview")
        {
        }
        else if (comdid == L"xmFileSaveEx")
        {
            xsedit xs = GetControl(L"xpagecontent");
            xsedit xc = GetControl(L"xcodecontent");
            HCURSOR hCursor = xutil::SetCursorWait();
            xstring content;
            //save xml content
            xs.GetContent(content);
            SaveContent(content);
            xstring code;
            //save tpp content
            xc.GetContent(code);
            SaveContentEx(code,1);
            //
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXPage::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXPage::OnSetFocus);
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xsedit xs = GetControl(L"xpagecontent");
        xsedit xc = GetControl(L"xcodecontent");
        xstring content = GetData();
        if (content != L"")
        {
            xs.LoadContent(content,L".xml");
        }
        xstring code = GetData(1);
        if (code != L"")
        {
            xc.LoadContent(code,L".vl");
            //xc.LoadContent(code,L".cpp");
        }
        return 1;
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        OnInitial();
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXQuery.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,272 @@
#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/xdwgrid.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
using xml = KXMLDOMDocument;
class export XDevEditXQuery : public xwin
{
    public:
    XDevEditXQuery(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
public:
    static XDevEditXQuery* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditXQuery* pWin = new XDevEditXQuery(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xdwgrid    dw_list;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*
        xstring xfNodeAgentArea  = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        auto xframeElement =  GetElement();
        auto agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
        if(agent)
        {
            xstring s = agent.xml;
            m_agentNode =  SetAgentNodeContent (anode,s);
        }
        */
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        xsedit xs = GetControl(L"sqlcontent");
        if (content != L"")
        {
            xml x;
            x.loadXML(content);
            KXMLDOMElement e = x.documentElement();
            auto ele = e.selectSingleNode(L"datasource/sql");
            if (ele)
                xs.LoadContent(ele.text(), L".sql");
            KXMLDOMElement e1 = e.selectSingleNode(L"datasource");
            xcontrol xc = GetControl(L"datasource");
            xstring v = e1.getAttribute(L"source");
            xc.SetText(L"" + v);
            xc = GetControl(L"linkname");
            xstring v = e1.getAttribute(L"link");
            xc.SetText(L"" + v);
            KXMLDOMElement e2 = e.selectSingleNode(L"paras");
            xml y;
            y.loadXML(e2.xml());
            dw_list.Retrieve(y);
        }
else
{
    xs.LoadContent(L"import 'qx.object.xq'",L".sql");
}
return 1;
}
xstring ProcessDevCmdEx(xstring cmd)
{
    int nlen = 0;
    BYTE* pdata;
    xaserver::ProcessCmd(GetServerUrl(),L"uri.hxsoft.com/xaserver/xquery:" + cmd,0,pdata,nlen);
    if (nlen > 0)
    {
        xstring str = ((WCHAR*)pdata);;
        return str.mid(0,99999999);
    }
else
   return L"";
}
//命令发布函数
int OnCmdDispatch(xstring comdid)
{
    HCURSOR hCursor = xutil::SetCursorWait();
    if (comdid == L"xmFileSaveEx")
    {
        HCURSOR hCursor = xutil::SetCursorWait();
        xstring content;
        xsedit xs = GetControl(L"sqlcontent");
        xs.GetContent(content);
        xml x;
        x.loadXML(L"<xquery/>");
        auto root = x;
        KXMLDOMElement e = root.createElement(L"datasource");
        xcontrol xc = GetControl(L"datasource");
        xstring v = xc.GetText();
        e.setAttribute(L"source", L"" + v);
        xc = GetControl(L"linkname");
        v = xc.GetText();
        e.setAttribute(L"link", L"" + v);
        KXMLDOMElement e1 = root.createElement(L"sql");
        e1.settext(content);
        e.appendChild(e1);
        root.documentElement().appendChild(e);
        xml y ();
        dw_list.DwUpdateTo(y);
        root.documentElement().appendChild(y.documentElement());
        //trace(y.xml());
        //trace(x.xml());
        SaveContent(x.xml());
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    else if (comdid == L"xmFilePreviewEx")
    {
        xstring content;
        xsedit xs = GetControl(L"sqlcontent");
        xs.GetContent(content);
        xcombobox ddlb = GetControl(L"datasource");
        xstring ddlbStr = ddlb.GetText();
        if (ddlbStr == L"VSQLEx")
        {
            xml x ;
            xaserverarg arg ;
            arg.AddArg(L"sql", content);
            xaserver::ExecXQuery(GetServerUrl(), L"[test1.xq]", arg.GetString(), x);
            xstring data = x.xml();
            //xsedit xc = GetControl(L"resultcontent");
            //xc.LoadContent(L""+data,L".xml");
            xsedit xc1 = GetControl(L"frame:vdata");
            xc1.LoadContent(L"" + data,L".xml");
        }
        else
        {
            xwin w = GetFrameWindow();
            xtreeview tv_folder = w.GetControl(L"DevExplorer");
            HTREEITEM hItem = (HTREEITEM)GetWinParam();
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring guid = e.getAttribute(L"guid");
            xstring data;
            if (ddlbStr == L"XQUERY")
            {
                data = ProcessDevCmdEx(L"" + guid);
            }
else
{
    data = ProcessDevCmdEx(L"" + guid);
    xml x ;
    xaserver::ExecXQuery(GetServerUrl(),guid,L"",x);
    data = x.xml();
}
            //xsedit xc = GetControl(L"resultcontent");
            ///*if(data != L"")*/ xc.LoadContent(L""+data,L".xml");
            //xwin xw = GetFrameWindow();
            xsedit xc1 = GetControl(L"frame:vdata");
            trace(data.left(16384));
            //if(data.length() > 16000)
            /*if(data!=L"")
                xc1.LoadContent(L""+data,L".xml");
            else
                xc1.LoadContent(L" ",L".xml");*/
            xc1.SetText(data);
        }
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    else if (comdid == L"argaddEx")
    {
        dw_list.InsertRow(0);
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    else if (comdid == L"argdeleteEx")
    {
        int row = dw_list.GetRow();
        if (row < 1) return 0;
        dw_list.DeleteRow(row);
        xutil::RestoreCursor(hCursor);
        return 1;
    }
else if (comdid == L"xmEntitySel")
{
    xaserverarg arg ;
    OpenWindow(L"dev:xpage[XEntityColumnSelDlg.xpage]",arg);
    xstring str = arg.GetArgString(L"select");
    if (str != L"") trace(L"\r\n---------------------\r\n" + str);
    xutil::RestoreCursor(hCursor);
    return 1;
}
else if (comdid == L"xmEditFind")
{
    xutil::RestoreCursor(hCursor);
    xsedit xs = GetControl(L"sqlcontent");
    xs.OnFindDlg();
    return 1;
}
else if (comdid == L"xmEditReplace")
{
    xutil::RestoreCursor(hCursor);
    xsedit xs = GetControl(L"sqlcontent");
    xs.OnReplaceDlg();
    return 1;
}
xutil::RestoreCursor(hCursor);
return 0;
}
//命令处理事件
int OnXCommand(TEvent* evt,LPARAM param)
{
    return OnCmdDispatch(evt->xcommand.pStrID);
}
int OnAttachEvent()
{
    //绑定工具条点击事件
    AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXQuery::OnXCommand);
    //获取焦点事件,用于重置工具条
    AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXQuery::OnSetFocus);
}
int OnInitial()
{
    SetAgent();
    OnAttachEvent();
    return 1;
}
int onload()
{
    dw_list = GetControl(L"parasgrid");
    OnInitial();
    LoadData();
    return 1;
}
};
jrj/xframe/devloper/XDevEditXRuler.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXWKDlg.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevEditXWorkNode.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/XDevFileDlg.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,561 @@
#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
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
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/devloper/devloper.cpp
@@ -8,6 +8,14 @@
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
jrj/xframe/kobject/kxml.hpp
@@ -13,7 +13,7 @@
    class KXMLDOMTextNode;
    class KXMLDOMProcessingInstruction;
    class KXMLDOMNodeList;
    class KXMLParseError;
    class KXMLDOMParseError;
    enum  KDOMNodeType
    {
@@ -212,7 +212,7 @@
        wchar_t* transformNode(KXMLDOMNode);
        KXMLDOMNode transformNodeToObject(KXMLDOMNode);
        KXMLParseError validate();
        KXMLDOMParseError validate();
        //bool validateNode();
    public:
        KXMLDOMDocument(void* impl);
@@ -284,11 +284,19 @@
using KXMLDOMElement=Hxsoft::XFrame::KXMLDOMElement;
using KXMLDOMNodeList = Hxsoft::XFrame::KXMLDOMNodeList;
class KXMLParseError : public KXMLDOMNode
class KXMLDOMParseError : public KXMLDOMNode
{
public:
    KXMLParseError(KXMLDOMNode& v);
    KXMLParseError(void* impl) :KXMLDOMNode(impl) {}
    KXMLDOMParseError(KXMLDOMNode& v);
    KXMLDOMParseError(void* impl) :KXMLDOMNode(impl) {}
public:
    int errorCode();
    int filepos();
    int line();
    int linepos();
    BSTR reason();
    BSTR srcText();
    BSTR url();
};
class KXMLDOMElementPtr