xj qian
2024-12-05 bd09edf1b441dcc6ab098f277bea86a72c009879
update
已添加4个文件
已删除3个文件
已修改16个文件
已重命名1个文件
7337 ■■■■■ 文件已修改
jrj/ext-jrj/ext-jrj.vcxproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/QuoteFile.cpp 323 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditCode.cpp 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditFlow.cpp 513 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditHtml.cpp 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditPage.hpp 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXApp.cpp 553 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXCode.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXFile.cpp 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXFlow.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXHtml.cpp 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXLayer.cpp 569 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXMSSQL.cpp 981 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXOffice.cpp 613 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXPage.cpp 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXQuery.cpp 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXRuler.cpp 577 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXWKDlg.cpp 577 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/devloper/XDevEditXWorkNode.cpp 577 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/kobject/kutil.hpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/wobject/xutil.hpp 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/xcontrol/xcell.hpp 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/xcontrol/xdwgrid.hpp 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/xcontrol/xdwtable.hpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj
@@ -193,9 +193,9 @@
    <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">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
    <ClInclude Include="..\xframe\devloper\XDevEditPage.hpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClInclude>
    <ClInclude Include="..\xframe\kobject\kapp.hpp" />
    <ClInclude Include="..\xframe\kobject\kbase.hpp" />
@@ -1171,6 +1171,10 @@
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditCode.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditDbmap.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
@@ -1179,7 +1183,7 @@
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXCode.cpp">
    <ClCompile Include="..\xframe\devloper\XDevEditXApp.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
@@ -1191,11 +1195,11 @@
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXFlow.cpp">
    <ClCompile Include="..\xframe\devloper\XDevEditFlow.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
    <ClCompile Include="..\xframe\devloper\XDevEditXHtml.cpp">
    <ClCompile Include="..\xframe\devloper\XDevEditHtml.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
    </ClCompile>
jrj/project/business/QuoteFile.cpp
@@ -254,10 +254,10 @@
    {
        xstring content = L"";
        xstring base = L"";
        base += L"<QuoteNo>" + getBaseItem(cell, L"报价单号:") + L"</QuoteNo>";
        base += L"<ExpDate>" + getBaseItem(cell, L"报价截止日期:") + L"</ExpDate>";
        base += L"<PrjName>" + getBaseItem(cell, L"项目名称:") + L"</PrjName>";
        base += L"<QuoteDate>" + dw_base.GetItemString(1, L"QuoteDate") + L"</QuoteDate>";
        base += L"<QuoteNo>" + getBaseXmlItem(cell, L"报价单号:") + L"</QuoteNo>";
        base += L"<ExpDate>" + getBaseXmlItem(cell, L"报价截止日期:") + L"</ExpDate>";
        base += L"<PrjName>" + getBaseXmlItem(cell, L"项目名称:") + L"</PrjName>";
        base += L"<QuoteDate>" + dw_base.GetItemXmlString(1, L"QuoteDate") + L"</QuoteDate>";
        int startRow = getItemHeadRow(cell);
@@ -313,34 +313,34 @@
            xstring itemStr = L"";
            rowid = getRowID(cell, row);
            itemStr += L"<RowID>" + getRowID(cell, row) + L"</RowID>";
            itemStr += L"<SKUID>" + cell.GetItemString(row, colSKUID) + L"</SKUID>";
            itemStr += L"<SKUID>" + cell.GetItemXmlString(row, colSKUID) + L"</SKUID>";
            itemStr += L"<customer-photo>" + getRowTerm(cell, row, L"customer-photo") + L"</customer-photo>";
            itemStr += L"<supplier-photo>" + getRowTerm(cell, row, L"supplier-photo") + L"</supplier-photo>";
            itemStr += L"<customer-photo-url>" + getImageList(getRowTerm(cell, row, L"customer-photo")) + L"</customer-photo-url>";
            itemStr += L"<supplier-photo-url>" + getImageList(getRowTerm(cell, row, L"supplier-photo")) + L"</supplier-photo-url>";
            itemStr += L"<ItemNo>" + cell.GetItemString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomItemNo>" + cell.GetItemString(row, colCustomerItemNo) + L"</CustomItemNo>";
            itemStr += L"<ItemName>" + cell.GetItemString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + cell.GetItemString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + cell.GetItemString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<CustomerImage>" + cell.GetItemString(row, colCustomerImage) + L"</CustomerImage>";
            itemStr += L"<BuyerPrice>" + cell.GetItemString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<SaleRemark>" + cell.GetItemString(row, colSaleRemark) + L"</SaleRemark>";
            itemStr += L"<ItemNo>" + cell.GetItemXmlString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomItemNo>" + cell.GetItemXmlString(row, colCustomerItemNo) + L"</CustomItemNo>";
            itemStr += L"<ItemName>" + cell.GetItemXmlString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + cell.GetItemXmlString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + cell.GetItemXmlString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<CustomerImage>" + cell.GetItemXmlString(row, colCustomerImage) + L"</CustomerImage>";
            itemStr += L"<BuyerPrice>" + cell.GetItemXmlString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<SaleRemark>" + cell.GetItemXmlString(row, colSaleRemark) + L"</SaleRemark>";
            itemStr += L"<BuyerMOQ>" + cell.GetItemString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + cell.GetItemString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + cell.GetItemString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + cell.GetItemString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + cell.GetItemString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + cell.GetItemString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + cell.GetItemString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + cell.GetItemString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<Packing>" + cell.GetItemString(row, colInnerOuter) + L"</Packing>";
            itemStr += L"<Quantity>" + cell.GetItemString(row, colItemQty) + L"</Quantity>";
            itemStr += L"<Package>" + cell.GetItemString(row, colPackage) + L"</Package>";
            itemStr += L"<Buyer>" + cell.GetItemString(row, colBuyer) + L"</Buyer>";
            itemStr += L"<RemarkS>" + cell.GetItemString(row, colRemark) + L"</RemarkS>";
            itemStr += L"<FOBPrice>" + cell.GetItemString(row, colFOBPrice) + L"</FOBPrice>";
            itemStr += L"<BuyerMOQ>" + cell.GetItemXmlString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + cell.GetItemXmlString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + cell.GetItemXmlString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + cell.GetItemXmlString(row, colGWT)+ L"</GWT>";
            itemStr += L"<NWT>" + cell.GetItemXmlString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + cell.GetItemXmlString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + cell.GetItemXmlString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + cell.GetItemXmlString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<Packing>" + cell.GetItemXmlString(row, colInnerOuter) + L"</Packing>";
            itemStr += L"<Quantity>" + cell.GetItemXmlString(row, colItemQty) + L"</Quantity>";
            itemStr += L"<Package>" + cell.GetItemXmlString(row, colPackage) + L"</Package>";
            itemStr += L"<Buyer>" + cell.GetItemXmlString(row, colBuyer) + L"</Buyer>";
            itemStr += L"<RemarkS>" + cell.GetItemXmlString(row, colRemark) + L"</RemarkS>";
            itemStr += L"<FOBPrice>" + cell.GetItemXmlString(row, colFOBPrice) + L"</FOBPrice>";
            itemStr += L"<PurchedDate>" + sdate + L"</PurchedDate>";
@@ -356,10 +356,10 @@
    {
        xstring content = L"";
        xstring base = L"";
        base += L"<QuoteNo>" + getBaseItem(cell, L"报价单号:") + L"</QuoteNo>";
        base += L"<ExpDate>" + getBaseItem(cell, L"报价截止日期:") + L"</ExpDate>";
        base += L"<PrjName>" + getBaseItem(cell, L"项目名称:") + L"</PrjName>";
        base += L"<QuoteDate>" + dw_base.GetItemString(1, L"QuoteDate") + L"</QuoteDate>";
        base += L"<QuoteNo>" + getBaseXmlItem(cell, L"报价单号:") + L"</QuoteNo>";
        base += L"<ExpDate>" + getBaseXmlItem(cell, L"报价截止日期:") + L"</ExpDate>";
        base += L"<PrjName>" + getBaseXmlItem(cell, L"项目名称:") + L"</PrjName>";
        base += L"<QuoteDate>" + dw_base.GetItemXmlString(1, L"QuoteDate") + L"</QuoteDate>";
        int startRow = getItemHeadRow(cell);
@@ -423,46 +423,46 @@
            xstring itemStr = L"";
            itemStr += L"<RowID>" + getRowID(cell, row) + L"</RowID>";
            itemStr += L"<SKUID>" + cell.GetItemString(row, colSKUID) + L"</SKUID>";
            itemStr += L"<SKUID>" + cell.GetItemXmlString(row, colSKUID) + L"</SKUID>";
            itemStr += L"<customer-photo>" + getRowTerm(cell, row, L"customer-photo") + L"</customer-photo>";
            itemStr += L"<supplier-photo>" + getRowTerm(cell, row, L"supplier-photo") + L"</supplier-photo>";
            itemStr += L"<ItemNo>" + cell.GetItemString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomItemNo>" + cell.GetItemString(row, colCustomerItemNo) + L"</CustomItemNo>";
            itemStr += L"<ItemName>" + cell.GetItemString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + cell.GetItemString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + cell.GetItemString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<CustomerImage>" + cell.GetItemString(row, colCustomerImage) + L"</CustomerImage>";
            itemStr += L"<BuyerPrice>" + cell.GetItemString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<SaleRemark>" + cell.GetItemString(row, colSaleRemark) + L"</SaleRemark>";
            itemStr += L"<ItemNo>" + cell.GetItemXmlString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomItemNo>" + cell.GetItemXmlString(row, colCustomerItemNo) + L"</CustomItemNo>";
            itemStr += L"<ItemName>" + cell.GetItemXmlString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + cell.GetItemXmlString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + cell.GetItemXmlString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<CustomerImage>" + cell.GetItemXmlString(row, colCustomerImage) + L"</CustomerImage>";
            itemStr += L"<BuyerPrice>" + cell.GetItemXmlString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<SaleRemark>" + cell.GetItemXmlString(row, colSaleRemark) + L"</SaleRemark>";
            itemStr += L"<BuyerMOQ>" + cell.GetItemString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + cell.GetItemString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + cell.GetItemString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + cell.GetItemString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + cell.GetItemString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + cell.GetItemString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + cell.GetItemString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + cell.GetItemString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<Packing>" + cell.GetItemString(row, colInnerOuter) + L"</Packing>";
            itemStr += L"<Quantity>" + cell.GetItemString(row, colItemQty) + L"</Quantity>";
            itemStr += L"<Package>" + cell.GetItemString(row, colPackage) + L"</Package>";
            itemStr += L"<Buyer>" + cell.GetItemString(row, colBuyer) + L"</Buyer>";
            itemStr += L"<RemarkS>" + cell.GetItemString(row, colRemark) + L"</RemarkS>";
            itemStr += L"<FOBPrice>" + cell.GetItemString(row, colFOBPrice) + L"</FOBPrice>";
            itemStr += L"<BuyerMOQ>" + cell.GetItemXmlString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + cell.GetItemXmlString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + cell.GetItemXmlString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + cell.GetItemXmlString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + cell.GetItemXmlString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + cell.GetItemXmlString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + cell.GetItemXmlString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + cell.GetItemXmlString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<Packing>" + cell.GetItemXmlString(row, colInnerOuter) + L"</Packing>";
            itemStr += L"<Quantity>" + cell.GetItemXmlString(row, colItemQty) + L"</Quantity>";
            itemStr += L"<Package>" + cell.GetItemXmlString(row, colPackage) + L"</Package>";
            itemStr += L"<Buyer>" + cell.GetItemXmlString(row, colBuyer) + L"</Buyer>";
            itemStr += L"<RemarkS>" + cell.GetItemXmlString(row, colRemark) + L"</RemarkS>";
            itemStr += L"<FOBPrice>" + cell.GetItemXmlString(row, colFOBPrice) + L"</FOBPrice>";
            itemStr += L"<Supplier>" + cell.GetItemString(row, colSupplier) + L"</Supplier>";
            itemStr += L"<Supplier1>" + cell.GetItemString(row, colSupplier1) + L"</Supplier1>";
            itemStr += L"<Supplier2>" + cell.GetItemString(row, colSupplier2) + L"</Supplier2>";
            itemStr += L"<Supplier3>" + cell.GetItemString(row, colSupplier3) + L"</Supplier3>";
            itemStr += L"<POPrice>" + cell.GetItemString(row, colPOPrice) + L"</POPrice>";
            itemStr += L"<POPrice1>" + cell.GetItemString(row, colPOPrice1) + L"</POPrice1>";
            itemStr += L"<POPrice2>" + cell.GetItemString(row, colPOPrice2) + L"</POPrice2>";
            itemStr += L"<POPrice3>" + cell.GetItemString(row, colPOPrice3) + L"</POPrice3>";
            itemStr += L"<Supplier>" + cell.GetItemXmlString(row, colSupplier) + L"</Supplier>";
            itemStr += L"<Supplier1>" + cell.GetItemXmlString(row, colSupplier1) + L"</Supplier1>";
            itemStr += L"<Supplier2>" + cell.GetItemXmlString(row, colSupplier2) + L"</Supplier2>";
            itemStr += L"<Supplier3>" + cell.GetItemXmlString(row, colSupplier3) + L"</Supplier3>";
            itemStr += L"<POPrice>" + cell.GetItemXmlString(row, colPOPrice) + L"</POPrice>";
            itemStr += L"<POPrice1>" + cell.GetItemXmlString(row, colPOPrice1) + L"</POPrice1>";
            itemStr += L"<POPrice2>" + cell.GetItemXmlString(row, colPOPrice2) + L"</POPrice2>";
            itemStr += L"<POPrice3>" + cell.GetItemXmlString(row, colPOPrice3) + L"</POPrice3>";
            itemStr += L"<BOMType>" + cell.GetItemString(row, colBOMType) + L"</BOMType>";
            itemStr += L"<BOMType1>" + cell.GetItemString(row, colBOMType1) + L"</BOMType1>";
            itemStr += L"<BOMType2>" + cell.GetItemString(row, colBOMType2) + L"</BOMType2>";
            itemStr += L"<BOMType3>" + cell.GetItemString(row, colBOMType2) + L"</BOMType3>";
            itemStr += L"<BOMType>" + cell.GetItemXmlString(row, colBOMType) + L"</BOMType>";
            itemStr += L"<BOMType1>" + cell.GetItemXmlString(row, colBOMType1) + L"</BOMType1>";
            itemStr += L"<BOMType2>" + cell.GetItemXmlString(row, colBOMType2) + L"</BOMType2>";
            itemStr += L"<BOMType3>" + cell.GetItemXmlString(row, colBOMType2) + L"</BOMType3>";
            itemStr += L"<PurchedDate>" + sdate + L"</PurchedDate>";
            itemStr += L"<EnquiryLineID>" + getRowTerm(cell, row, L"EnquiryLineID") + L"</EnquiryLineID>";
@@ -474,19 +474,19 @@
                if (cell.GetItemString(row, colItemName) != L"" || cell.GetItemString(row, colItemSpec) != L"") break;
                if (cell.GetItemString(row, colSupplier) == L"")break;
                xstring extStr = L"";
                extStr += L"<Supplier>" + cell.GetItemString(row, colSupplier) + L"</Supplier>";
                extStr += L"<Supplier1>" + cell.GetItemString(row, colSupplier1) + L"</Supplier1>";
                extStr += L"<Supplier2>" + cell.GetItemString(row, colSupplier2) + L"</Supplier2>";
                extStr += L"<Supplier3>" + cell.GetItemString(row, colSupplier3) + L"</Supplier3>";
                extStr += L"<POPrice>" + cell.GetItemString(row, colPOPrice) + L"</POPrice>";
                extStr += L"<POPrice1>" + cell.GetItemString(row, colPOPrice1) + L"</POPrice1>";
                extStr += L"<POPrice2>" + cell.GetItemString(row, colPOPrice2) + L"</POPrice2>";
                extStr += L"<POPrice3>" + cell.GetItemString(row, colPOPrice3) + L"</POPrice3>";
                extStr += L"<Supplier>" + cell.GetItemXmlString(row, colSupplier) + L"</Supplier>";
                extStr += L"<Supplier1>" + cell.GetItemXmlString(row, colSupplier1) + L"</Supplier1>";
                extStr += L"<Supplier2>" + cell.GetItemXmlString(row, colSupplier2) + L"</Supplier2>";
                extStr += L"<Supplier3>" + cell.GetItemXmlString(row, colSupplier3) + L"</Supplier3>";
                extStr += L"<POPrice>" + cell.GetItemXmlString(row, colPOPrice) + L"</POPrice>";
                extStr += L"<POPrice1>" + cell.GetItemXmlString(row, colPOPrice1) + L"</POPrice1>";
                extStr += L"<POPrice2>" + cell.GetItemXmlString(row, colPOPrice2) + L"</POPrice2>";
                extStr += L"<POPrice3>" + cell.GetItemXmlString(row, colPOPrice3) + L"</POPrice3>";
                extStr += L"<BOMType>" + cell.GetItemString(row, colBOMType) + L"</BOMType>";
                extStr += L"<BOMType1>" + cell.GetItemString(row, colBOMType1) + L"</BOMType1>";
                extStr += L"<BOMType2>" + cell.GetItemString(row, colBOMType2) + L"</BOMType2>";
                extStr += L"<BOMType3>" + cell.GetItemString(row, colBOMType2) + L"</BOMType3>";
                extStr += L"<BOMType>" + cell.GetItemXmlString(row, colBOMType) + L"</BOMType>";
                extStr += L"<BOMType1>" + cell.GetItemXmlString(row, colBOMType1) + L"</BOMType1>";
                extStr += L"<BOMType2>" + cell.GetItemXmlString(row, colBOMType2) + L"</BOMType2>";
                extStr += L"<BOMType3>" + cell.GetItemXmlString(row, colBOMType2) + L"</BOMType3>";
                itemStr += L"<ExtItem>" + extStr + L"</ExtItem>"; //备用采购信息
                xstring eid = GetGuid();
@@ -567,6 +567,11 @@
        im.Redraw();
        return 1;
    }
    xstring getBaseXmlItem(xcell dw_cell, xstring colname)
    {
        return xutil::ToXmlText(getBaseItem(dw_cell, colname));
    }
    xstring getBaseItem(xcell dw_cell, xstring colname)
@@ -858,14 +863,14 @@
            xstring itemStr = L"";
            itemStr += L"<RowID>" + getRowID(dw_cell, row) + L"</RowID>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomerItemNo>" + dw_cell.GetItemString(row, colCustomerItemNo) + L"</CustomerItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<BuyerPrice>" + dw_cell.GetItemString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemString(row, colProductInfo1) + L"</ProductInfo1>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemXmlString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomerItemNo>" + dw_cell.GetItemXmlString(row, colCustomerItemNo) + L"</CustomerItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemXmlString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemXmlString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemXmlString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<BuyerPrice>" + dw_cell.GetItemXmlString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemXmlString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemXmlString(row, colProductInfo1) + L"</ProductInfo1>";
            if (dw_cell.GetItemString(row, colBuyerPrice) == L"") return L"采购价格没有录入";
            if (dw_cell.GetItemString(row, colGWT) == L"") return L"毛重没有录入";
@@ -884,14 +889,14 @@
            {
                if (dw_cell.GetItemString(row, colPOPrice1) == L"") return L"采购价格1没有录入";
            }
            itemStr += L"<BuyerMOQ>" + dw_cell.GetItemString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + dw_cell.GetItemString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + dw_cell.GetItemString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + dw_cell.GetItemString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + dw_cell.GetItemString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + dw_cell.GetItemString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + dw_cell.GetItemString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<BuyerMOQ>" + dw_cell.GetItemXmlString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + dw_cell.GetItemXmlString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + dw_cell.GetItemXmlString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + dw_cell.GetItemXmlString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + dw_cell.GetItemXmlString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemXmlString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + dw_cell.GetItemXmlString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + dw_cell.GetItemXmlString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<PurchedDate>" + sdate + L"</PurchedDate>";
            itemStr += L"<EnquiryLineID>" + getRowTerm(dw_cell, row, L"EnquiryLineID") + L"</EnquiryLineID>";
@@ -1057,25 +1062,25 @@
            xstring itemStr = L"";
            xstring issend = L"1";
            itemStr += L"<RowID>" + getRowID(dw_cell, row) + L"</RowID>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemXmlString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemXmlString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemXmlString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemXmlString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<RowNo>" + xstring(row - startRow + 1) + L"</RowNo>";
            itemStr += L"<Purchor>" + dw_cell.GetItemString(row, colBuyer) + L"</Purchor>";
            itemStr += L"<Package>" + dw_cell.GetItemString(row, colPackage) + L"</Package>";
            itemStr += L"<NWT>" + dw_cell.GetItemString(row, colNW) + L"</NWT>";
            itemStr += L"<GWT>" + dw_cell.GetItemString(row, colGW) + L"</GWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Supplier>" + dw_cell.GetItemString(row, colSupplier) + L"</Supplier>";
            itemStr += L"<BuyPrice>" + dw_cell.GetItemString(row, colPOPrice) + L"</BuyPrice>";
            itemStr += L"<Supplier1>" + dw_cell.GetItemString(row, colSupplier1) + L"</Supplier1>";
            itemStr += L"<BuyPrice1>" + dw_cell.GetItemString(row, colPOPrice1) + L"</BuyPrice1>";
            itemStr += L"<BOMType1>" + dw_cell.GetItemString(row, colBOMType1) + L"</BOMType1>";
            itemStr += L"<BOMType>" + dw_cell.GetItemString(row, colBOMType) + L"</BOMType>";
            itemStr += L"<POPrice>" + dw_cell.GetItemString(row, colPrice) + L"</POPrice>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemString(row, colProductInfo1) + L"</ProductInfo1>";
            itemStr += L"<Purchor>" + dw_cell.GetItemXmlString(row, colBuyer) + L"</Purchor>";
            itemStr += L"<Package>" + dw_cell.GetItemXmlString(row, colPackage) + L"</Package>";
            itemStr += L"<NWT>" + dw_cell.GetItemXmlString(row, colNW) + L"</NWT>";
            itemStr += L"<GWT>" + dw_cell.GetItemXmlString(row, colGW) + L"</GWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemXmlString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Supplier>" + dw_cell.GetItemXmlString(row, colSupplier) + L"</Supplier>";
            itemStr += L"<BuyPrice>" + dw_cell.GetItemXmlString(row, colPOPrice) + L"</BuyPrice>";
            itemStr += L"<Supplier1>" + dw_cell.GetItemXmlString(row, colSupplier1) + L"</Supplier1>";
            itemStr += L"<BuyPrice1>" + dw_cell.GetItemXmlString(row, colPOPrice1) + L"</BuyPrice1>";
            itemStr += L"<BOMType1>" + dw_cell.GetItemXmlString(row, colBOMType1) + L"</BOMType1>";
            itemStr += L"<BOMType>" + dw_cell.GetItemXmlString(row, colBOMType) + L"</BOMType>";
            itemStr += L"<POPrice>" + dw_cell.GetItemXmlString(row, colPrice) + L"</POPrice>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemXmlString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemXmlString(row, colProductInfo1) + L"</ProductInfo1>";
            if (dw_cell.GetItemString(row, colBuyer) == L"")issend = L"0";
            itemStr += L"<IsSend>" + issend + L"</IsSend>";
@@ -1123,19 +1128,19 @@
            xstring itemStr = L"";
            xstring issend = L"1";
            itemStr += L"<RowID>" + getRowID(dw_cell, row) + L"</RowID>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomerItemNo>" + dw_cell.GetItemString(row, colCustomerItemNo) + L"</CustomerItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemXmlString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<CustomerItemNo>" + dw_cell.GetItemXmlString(row, colCustomerItemNo) + L"</CustomerItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemXmlString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemXmlString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemXmlString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<RowNo>" + xstring(row - startRow + 1) + L"</RowNo>";
            itemStr += L"<Purchor>" + dw_cell.GetItemString(row, colBuyer) + L"</Purchor>";
            itemStr += L"<Package>" + dw_cell.GetItemString(row, colPackage) + L"</Package>";
            itemStr += L"<NWT>" + dw_cell.GetItemString(row, colNW) + L"</NWT>";
            itemStr += L"<GWT>" + dw_cell.GetItemString(row, colGW) + L"</GWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemString(row, colProductInfo1) + L"</ProductInfo1>";
            itemStr += L"<Purchor>" + dw_cell.GetItemXmlString(row, colBuyer) + L"</Purchor>";
            itemStr += L"<Package>" + dw_cell.GetItemXmlString(row, colPackage) + L"</Package>";
            itemStr += L"<NWT>" + dw_cell.GetItemXmlString(row, colNW) + L"</NWT>";
            itemStr += L"<GWT>" + dw_cell.GetItemXmlString(row, colGW) + L"</GWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemXmlString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemXmlString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemXmlString(row, colProductInfo1) + L"</ProductInfo1>";
            if (dw_cell.GetItemString(row, colBuyer) == L"")issend = L"0";
            itemStr += L"<IsSend>" + issend + L"</IsSend>";
@@ -1177,14 +1182,14 @@
            xstring itemStr = L"";
            xstring issend=L"1";
            itemStr += L"<RowID>"+getRowID(dw_cell,row)+L"</RowID>";
            itemStr += L"<ItemNo>"+dw_cell.GetItemString(row, colItemNo)+L"</ItemNo>";
            itemStr += L"<ItemName>"+dw_cell.GetItemString(row, colItemName)+L"</ItemName>";
            itemStr += L"<ItemCName>"+dw_cell.GetItemString(row, colItemCName)+L"</ItemCName>";
            itemStr += L"<ItemSpec>"+dw_cell.GetItemString(row, colItemSpec)+L"</ItemSpec>";
            itemStr += L"<ItemNo>"+dw_cell.GetItemXmlString(row, colItemNo)+L"</ItemNo>";
            itemStr += L"<ItemName>"+dw_cell.GetItemXmlString(row, colItemName)+L"</ItemName>";
            itemStr += L"<ItemCName>"+dw_cell.GetItemXmlString(row, colItemCName)+L"</ItemCName>";
            itemStr += L"<ItemSpec>"+dw_cell.GetItemXmlString(row, colItemSpec)+L"</ItemSpec>";
            itemStr += L"<RowNo>"+(row - startRow +1).toString()+L"</RowNo>";
            itemStr += L"<Purchor>"+dw_cell.GetItemString(row, colBuyer)+L"</Purchor>";
            itemStr += L"<Package>"+dw_cell.GetItemString(row, colPackage)+L"</Package>";
            if(dw_cell.GetItemString(row, colBuyer) ==L"")issend=L"0";
            itemStr += L"<Purchor>"+dw_cell.GetItemXmlString(row, colBuyer)+L"</Purchor>";
            itemStr += L"<Package>"+dw_cell.GetItemXmlString(row, colPackage)+L"</Package>";
            if(dw_cell.GetItemXmlString(row, colBuyer) ==L"")issend=L"0";
            itemStr += L"<IsSend>"+issend+L"</IsSend>";
            items += L"<Item>"+itemStr+L"</Item>";
@@ -1397,14 +1402,14 @@
            //if(dw_cell.GetItemString(row, colItemName)==L"")continue;
            xstring itemStr = L"";
            itemStr += L"<RowID>" + getRowID(dw_cell, row) + L"</RowID>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<BuyerPrice>" + dw_cell.GetItemString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemString(row, colProductInfo1) + L"</ProductInfo1>";
            itemStr += L"<Buyer>" + dw_cell.GetItemString(row, colPurchor) + L"</Buyer>";
            itemStr += L"<ItemNo>" + dw_cell.GetItemXmlString(row, colItemNo) + L"</ItemNo>";
            itemStr += L"<ItemName>" + dw_cell.GetItemXmlString(row, colItemName) + L"</ItemName>";
            itemStr += L"<ItemCName>" + dw_cell.GetItemXmlString(row, colItemCName) + L"</ItemCName>";
            itemStr += L"<ItemSpec>" + dw_cell.GetItemXmlString(row, colItemSpec) + L"</ItemSpec>";
            itemStr += L"<BuyerPrice>" + dw_cell.GetItemXmlString(row, colBuyerPrice) + L"</BuyerPrice>";
            itemStr += L"<ProductInfo>" + dw_cell.GetItemXmlString(row, colProductInfo) + L"</ProductInfo>";
            itemStr += L"<ProductInfo1>" + dw_cell.GetItemXmlString(row, colProductInfo1) + L"</ProductInfo1>";
            itemStr += L"<Buyer>" + dw_cell.GetItemXmlString(row, colPurchor) + L"</Buyer>";
            /*
            if(dw_cell.GetItemString(row, colBuyerPrice)==L"") return L"采购价格没有录入";
@@ -1437,14 +1442,14 @@
                if(dw_cell.GetItemString(row, colVolDesc)==L"") return L"体积信息没有录入";
            }
            */
            itemStr += L"<BuyerMOQ>" + dw_cell.GetItemString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + dw_cell.GetItemString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + dw_cell.GetItemString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + dw_cell.GetItemString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + dw_cell.GetItemString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + dw_cell.GetItemString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + dw_cell.GetItemString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<BuyerMOQ>" + dw_cell.GetItemXmlString(row, colBuyerMOQ) + L"</BuyerMOQ>";
            itemStr += L"<BuyerRemark>" + dw_cell.GetItemXmlString(row, colBuyerRemark) + L"</BuyerRemark>";
            itemStr += L"<FactoryImage>" + dw_cell.GetItemXmlString(row, colFactoryImage) + L"</FactoryImage>";
            itemStr += L"<GWT>" + dw_cell.GetItemXmlString(row, colGWT) + L"</GWT>";
            itemStr += L"<NWT>" + dw_cell.GetItemXmlString(row, colNWT) + L"</NWT>";
            itemStr += L"<VolDesc>" + dw_cell.GetItemXmlString(row, colVolDesc) + L"</VolDesc>";
            itemStr += L"<Vol>" + dw_cell.GetItemXmlString(row, colVol) + L"</Vol>";
            itemStr += L"<F40HQ>" + dw_cell.GetItemXmlString(row, col40HQ) + L"</F40HQ>";
            itemStr += L"<PurchedDate>" + sdate + L"</PurchedDate>";
            itemStr += L"<supplier-photo>" + getRowTerm(dw_cell, row, L"supplier-photo") + L"</supplier-photo>";
@@ -3882,7 +3887,7 @@
                dw_goods.SetItemString(i, L"ItemID", ItemID);
                xstring Item = L"<Item update.new='1' update.modify='1' guid='" + ItemID + L"'>";
                Item += L"<SKUID>" + ItemID + L"</SKUID>";
                Item += L"<GoodsNo>" + dw_goods.GetItemString(i, L"GoodsNo") + L"</GoodsNo>";
                Item += L"<GoodsNo>" + dw_goods.GetItemXmlString(i, L"GoodsNo") + L"</GoodsNo>";
                xstring SKUNo = GetNo();
                dw_goods.SetItemString(i, L"SKUNo", SKUNo);
                dw_goods.Redraw();
@@ -3893,9 +3898,9 @@
                Item += L"<No>" + SKUNo + L"</No>";
                Item += L"<SKUNo>" + SKUNo + L"</SKUNo>";
                Item += L"<CName>" + dw_goods.GetItemString(i, L"CName") + L"</CName>";
                Item += L"<EName>" + dw_goods.GetItemString(i, L"ItemName") + L"</EName>";
                Item += L"<Packing>" + dw_goods.GetItemString(i, L"Packing") + L"</Packing>";
                Item += L"<CName>" + dw_goods.GetItemXmlString(i, L"CName") + L"</CName>";
                Item += L"<EName>" + dw_goods.GetItemXmlString(i, L"ItemName") + L"</EName>";
                Item += L"<Packing>" + dw_goods.GetItemXmlString(i, L"Packing") + L"</Packing>";
                Item += L"<CategoryID>" + categoryID + L"</CategoryID>";
                Item += L"<FolderID>" + folderID + L"</FolderID>";
@@ -5344,8 +5349,8 @@
                    if (hasParty(dw_cell.GetItemString(row, colSupplier)) == false)
                    {
                        itemStr += L"<Item update.new='1' update.modify='1'>";
                        itemStr += L"<Name>" + dw_cell.GetItemString(row, colSupplier) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemString(row, colSupplier) + L"</ShortName>";
                        itemStr += L"<Name>" + dw_cell.GetItemXmlString(row, colSupplier) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemXmlString(row, colSupplier) + L"</ShortName>";
                        itemStr += L"</Item>";
                    }
                }
@@ -5357,8 +5362,8 @@
                    if (hasParty(dw_cell.GetItemString(row, colSupplier1)) == false)
                    {
                        itemStr += L"<Item update.new='1' update.modify='1'>";
                        itemStr += L"<Name>" + dw_cell.GetItemString(row, colSupplier1) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemString(row, colSupplier1) + L"</ShortName>";
                        itemStr += L"<Name>" + dw_cell.GetItemXmlString(row, colSupplier1) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemXmlString(row, colSupplier1) + L"</ShortName>";
                        itemStr += L"</Item>";
                    }
                }
@@ -5370,8 +5375,8 @@
                    if (hasParty(dw_cell.GetItemString(row, colSupplier2)) == false)
                    {
                        itemStr += L"<Item update.new='1' update.modify='1'>";
                        itemStr += L"<Name>" + dw_cell.GetItemString(row, colSupplier2) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemString(row, colSupplier2) + L"</ShortName>";
                        itemStr += L"<Name>" + dw_cell.GetItemXmlString(row, colSupplier2) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemXmlString(row, colSupplier2) + L"</ShortName>";
                        itemStr += L"</Item>";
                    }
                }
@@ -5383,8 +5388,8 @@
                    if (hasParty(dw_cell.GetItemString(row, colSupplier3)) == false)
                    {
                        itemStr += L"<Item update.new='1' update.modify='1'>";
                        itemStr += L"<Name>" + dw_cell.GetItemString(row, colSupplier3) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemString(row, colSupplier3) + L"</ShortName>";
                        itemStr += L"<Name>" + dw_cell.GetItemXmlString(row, colSupplier3) + L"</Name>";
                        itemStr += L"<ShortName>" + dw_cell.GetItemXmlString(row, colSupplier3) + L"</ShortName>";
                        itemStr += L"</Item>";
                    }
                }
jrj/xframe/devloper/XDevEditCode.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
#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 XDevEditCode : public xwin
{
    public:
    XDevEditCode(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDevEditCode* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditCode* pWin = new XDevEditCode(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xnode    m_agentNode;    //Agent Condition
    string    m_agentCond;    //Agent Node
    int SetAgent()
    {
        /*
        string xfNodeAgentArea  = "agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        var xframeElement =  GetElement();
        var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
        if(agent)
        {
            string s = agent.xml;
            m_agentNode =  SetAgentNodeContent (anode,s);
        }
        */
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(ref TEvent evt,int param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(string comdid)
    {
        if (comdid == "xmFileSaveEx")
        {
            xsedit xc = this.GetControl("codecontent");
            int hCursor = xutil::SetCursorWait();
            string code;
            //save tpp content
            xc.GetContent(code);
            this.SaveContent(code);
            //
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(ref TXCommandEvent evt,int param)
    {
        return OnCmdDispatch(evt.pStrID);
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent("WM_XCOMMAND",OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent("WM_SETFOCUS",OnSetFocus);
    }
    int LoadData()
    {
        if (!this.GetParam()) return 1;
        xwin w = GetFrameWindow();
        xtree tv_folder = w.GetControl("DevExplorer");
        int hItem = this.GetParam();
        IXMLDOMElement e = tv_folder.GetItemData(hItem);
        string caption = e.getAttribute("caption");
        xsedit xc = this.GetControl("codecontent");
        string code = this.GetData();
        if (code == "")code == " ";
       if (caption.find(".vl",0) >= 0 || caption.find(".vm",0) >= 0 || caption.find(".vf",0) >= 0 || caption.find("voc",0) >= 0 || caption.find("vc",0) >= 0)
      {
          xc.LoadContent(code,".vl");
       }
       else if (caption.find(".scm",0) >= 0)
          xc.LoadContent(code,".scm");
       else
          xc.LoadContent(code,".cpp");
        return 1;
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    int onload()
    {
        OnInitial();
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditFlow.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,513 @@
#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>
#include <xcontrol/xflowchart.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDevEditFlow : public XDevEditPage
{
    public:
    XDevEditFlow(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDevEditFlow* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditFlow* pWin = new XDevEditFlow(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xdwgrid    dw_role;
    xdwgrid    dw_node;
    xdwgrid    dw_data;
    xdwgrid    dw_action;
    xdwgrid    dw_stategraph;
    xdwgrid    dw_billaction;
    xdwgrid    dw_roles;
    //xdwgrid    dw_nodes;
    //xdwgrid    dw_actions;
    xdwgrid    dw_do;
    xdwgrid    dw_bills;
    xdwgrid    dw_scenes;
    xdwgrid    dw_states;
    xdwgrid    dw_events;
    xdwgrid    dw_conds;
    xdwgrid    dw_datainterface;
    xdwgrid    dw_dataarg;
    xdwgrid dw_templates;
    xdwgrid dw_pages;
    xdwgrid dw_pageconfigs;
    KXMLDOMElement ele;
    xnode    m_agentNode;    //Agent Condition
    xstring        m_agentCond;    //Agent Node
    xstring     m_config;  //配置类型
    int SetAgent()
    {
        xstring xfNodeAgentArea = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        auto xframeElement = GetElement();
        auto agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"/*[" + m_agentCond + L"]");
        if (agent)
        {
            xstring s = agent.xml();
            m_agentNode = SetAgentNode(anode,s);
        }
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int SetFlowChart(KXMLDOMElement e)
    {
        xstring flowUrl = e.getAttribute(L"flowchart");
        xflowchart flowchart = GetControl(L"flowchart");
        if (flowUrl != L"")
        {
            xml f;
            if (xaserver::FetchXml(GetServerUrl(),flowUrl,L"",f) == 1)
            {
                flowchart.Load(f.documentElement());
            }
        }
        return 1;
    }
    int FillFlowChart(KXMLDOMElement e)
    {
        xstring cid = e.getAttribute(L"id");
        auto fn = e.selectNodes(L"//flows//flow");
        int lenf = fn.length();
        int i = 0;
        xstring sp = L"";
        xcombobox xc = GetControl(L"flowlist");
        for (i = 0; i < lenf; i++)
        {
            sp = L"";
            KXMLDOMElement fe = fn.item(i);
            KXMLDOMElement p = fe.parentNode();
            while ((xstring)p.tagName() == L"flow")
            {
                sp += L"   ";
                p = p.parentNode();
            }
            xstring name = fe.getAttribute(L"name");
            xstring d = fe.getAttribute(L"id");
            xc.AddItem(sp + name);
            if (cid == d)
            {
                xc.SetText(name);
                SetFlowChart(fe);
            }
        }
        return  1;
    }
    int OnRetrieve(KXMLDOMElement ele)
    {
        KXMLDOMNode  node = ele.selectSingleNode(L"//stategraph");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_stategraph.Retrieve(e);
            dw_stategraph.Redraw();
        }
        else
        {
            dw_stategraph.Reset();
            dw_stategraph.Redraw();
        }
        node = ele.selectSingleNode(L"//bill.actions");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_billaction.Retrieve(e);
            dw_billaction.Redraw();
        }
        else
        {
            dw_billaction.Reset();
            dw_billaction.Redraw();
        }
        node = ele.selectSingleNode(L"//roles");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_role.Retrieve(e);
            dw_role.Redraw();
        }
        else
        {
            dw_role.Reset();
            dw_role.Redraw();
        }
        xstring id = ele.getAttribute(L"id");
        node = ele.selectSingleNode(L"//nodes[@for='" + id + L"']");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_node.Retrieve(e);
            dw_node.Redraw();
        }
        else
        {
            dw_node.Reset();
            dw_node.Redraw();
        }
        node = ele.selectSingleNode(L"//actions");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_action.Retrieve(e);
            dw_action.Redraw();
        }
        else
        {
            dw_action.Reset();
            dw_action.Redraw();
        }
        node = ele.selectSingleNode(L"//datas");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_data.Retrieve(e);
            dw_data.Redraw();
        }
        else
        {
            dw_data.Reset();
            dw_data.Redraw();
        }
        node = ele.selectSingleNode(L"//right");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_roles.Retrieve(e);
            dw_roles.Redraw();
        }
        else
        {
            dw_roles.Reset();
            dw_roles.Redraw();
        }
        node = ele.selectSingleNode(L"//bills");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_bills.Retrieve(e);
            dw_bills.Redraw();
        }
        else
        {
            dw_bills.Reset();
            dw_bills.Redraw();
        }
        node = ele.selectSingleNode(L"//events");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_events.Retrieve(e);
            dw_events.Redraw();
        }
        else
        {
            dw_events.Reset();
            dw_events.Redraw();
        }
        node = ele.selectSingleNode(L"//conds");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_conds.Retrieve(e);
            dw_conds.Redraw();
        }
        else
        {
            dw_conds.Reset();
            dw_conds.Redraw();
        }
        node = ele.selectSingleNode(L"//states");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_states.Retrieve(e);
            dw_states.Redraw();
        }
        else
        {
            dw_states.Reset();
            dw_states.Redraw();
        }
        node = ele.selectSingleNode(L"//scenes");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_scenes.Retrieve(e);
            dw_scenes.Redraw();
        }
        else
        {
            dw_scenes.Reset();
            dw_scenes.Redraw();
        }
        node = ele.selectSingleNode(L"//datainterface");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_datainterface.Retrieve(e);
            dw_datainterface.Redraw();
        }
        else
        {
            dw_datainterface.Reset();
            dw_datainterface.Redraw();
        }
        if (dw_datainterface.GetRowCount() > 0)
        {
            KXMLDOMElement e = dw_datainterface.GetRowElement(1);
            node = ele.selectSingleNode(L"//args");
            if (node)
            {
                KXMLDOMElement e = node;
                dw_dataarg.Retrieve(e);
                dw_dataarg.Redraw();
            }
        else
        {
            dw_dataarg.Reset();
            dw_dataarg.Redraw();
        }
        }
        node = ele.selectSingleNode(L"//does");
        if (node)
        {
            KXMLDOMElement e = node;
            dw_do.Retrieve(e);
            dw_do.Redraw();
        }
        else
        {
            dw_do.Reset();
            dw_do.Redraw();
        }
        if (dw_do.GetRowCount() > 0)
        {
            KXMLDOMElement e = dw_do.GetRowElement(1);
            xstring content = e.text();
            xsedit xs = GetControl(L"content");
            xs.SetContent(content,L".cpp");
        }
        FillFlowChart(ele);
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        if (comdid == L"xmFileSave")
        {
            xsedit xs = GetControl(L"xcontent");
            xstring content;
            HCURSOR hCursor = xutil::SetCursorWait();
            //save xml content
            xs.GetContent(content);
            SaveContent(content);
            xutil::RestoreCursor(hCursor);
        }
        else if (comdid == L"flowdef")
        {
            xsedit xs = GetControl(L"xcontent");
            xstring content;
            //save xml content
            xs.GetContent(content);
            xml x = new xml;
            if (x.loadXML(content))
            {
                ele = x.documentElement();
                KXMLDOMElement e = x.selectSingleNode(L"//flows/flow");
                if (e) OnRetrieve(e);
            }
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnFlowSelected(TEvent* evt,LPARAM param)
    {
        //xtree tv_folder = GetControl(L"tv_folder");
        xcombobox cb = GetControl(L"flowlist");
        int nIndex = cb.GetCurSel();
        if (nIndex < 1) nIndex = 1;
        //int hItem = tv_folder.GetCaretItem();
        //KXMLDOMElement ele = tv_folder.GetItemData(hItem);
        KXMLDOMElement e = ele.selectSingleNode(L"(//flows//flow)[" + xstring(nIndex) + L"]");
        SetFlowChart(e);
        return 1;
    }
    int OnRowClickedDo(TEvent* evt,LPARAM param)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        KXMLDOMElement e = dw_do.GetRowElement(row);
        xstring content = e.text();
        xsedit xs = GetControl(L"content");
        xs.SetContent(content,L".cpp");
        return 1;
    }
    int OnRowClicked(TEvent* evt,LPARAM param)
    {
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditFlow::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditFlow::OnSetFocus);
        AttachEvent(L"flowlist",L"CBN_SELCHANGE", (FEvent)&XDevEditFlow::OnFlowSelected);
        AttachEvent(L"dw_do",L"DWV_ROWFOCUSCHANGED", (FEvent)&XDevEditFlow::OnRowClickedDo);
    }
    int OnInitial()
    {
        m_agentCond = L"1";
        SetAgent();
        OnAttachEvent();
        return 1;
    }
    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 onload()
    {
        dw_stategraph = GetControl(L"dw_stategraph");
        dw_stategraph.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/״̬ͼ]");
        dw_billaction = GetControl(L"dw_billaction");
        dw_billaction.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/单据操作]");
        dw_role = GetControl(L"dw_role");
        dw_role.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/角色定义]");
        dw_node = GetControl(L"dw_node");
        dw_node.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/工作节点]");
        dw_data = GetControl(L"dw_data");
        dw_data.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/数据集]");
        dw_action = GetControl(L"dw_action");
        dw_action.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/操作]");
        dw_roles = GetControl(L"dw_roles");
        dw_roles.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/角色权限]");
        //dw_nodes = GetControl(L"dw_nodes");
        //dw_nodes.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/操作数据集]");
        //dw_actions = GetControl(L"dw_actions");
        //dw_actions.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/节点数据集]");
        dw_bills = GetControl(L"dw_bills");
        dw_bills.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/单据]");
        dw_scenes = GetControl(L"dw_scenes");
        dw_scenes.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/场景]");
        dw_states = GetControl(L"dw_states");
        dw_states.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/״̬]");
        dw_events = GetControl(L"dw_events");
        dw_events.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/事件]");
        dw_conds = GetControl(L"dw_conds");
        dw_conds.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/条件]");
        dw_datainterface = GetControl(L"dw_datainterface");
        dw_datainterface.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/数据接口]");
        dw_dataarg = GetControl(L"dw_dataarg");
        dw_dataarg.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/数据接口参数]");
        dw_templates = GetControl(L"dw_templates");
        dw_templates.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/模板文件]");;
        dw_pages = GetControl(L"dw_pages");
        dw_pages.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/页面文件]");;
        dw_pageconfigs = GetControl(L"dw_pageconfigs");
        dw_pageconfigs.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/客户端配置]");
        dw_do = GetControl(L"dw_do");
        dw_do.SetDataObject(GetServerUrl(),L"dev:sheet[XRight.tpl/动作定义]");
        dw_role.SetReadOnly(true);
        dw_node.SetReadOnly(true);
        dw_data.SetReadOnly(true);
        dw_action.SetReadOnly(true);
        dw_do.SetReadOnly(true);
        OnInitial();
        xsedit xs = GetControl(L"content");
        xs.SetContent(L"",L".cpp");
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditHtml.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
#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>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDevEditXHtml : public XDevEditPage
{
    public:
    XDevEditXHtml(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDevEditPage* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditPage* pWin = new XDevEditPage(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 OnCmdDispatch(xstring comdid)
    {
        if (comdid == L"xmFileSave")
        {
            xstring content;
            xsedit xs = GetControl(L"xcontent");
            HCURSOR hCursor = xutil::SetCursorWait();
            //save xml content
            xs.GetContent(content);
            SaveContent(content);
            xutil::RestoreCursor(hCursor);
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXHtml::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXHtml::OnSetFocus);
        return 1;
    }
    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();
        LoadData();
        return 1;
    }
};
jrj/xframe/devloper/XDevEditPage.hpp
ÎļþÃû´Ó jrj/xframe/devloper/XDevEditPage.cpp ÐÞ¸Ä
@@ -5,10 +5,14 @@
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xcombobox.hpp>
#include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp>
using xml = KXMLDOMDocument;
class export XDevEditPage : public xwin
{
public:
    XDevEditPage(void* implPtr,HWND hWnd) :xwin(implPtr,hWnd) {}
public:
    xstring ProcessDevCmd(xstring cmd, xstring ext)
    {
        //trace(ext);
@@ -33,7 +37,7 @@
            typ = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).tagName();
            if (typ == L"project")break;
            pitem = tv_folder.GetParentItem(pitem);
            if (pitem <= 0)break;
            if (!pitem)break;
        }
        return pitem;
    }
@@ -45,7 +49,7 @@
        while (true)
        {
            hDomainItem = tv_folder.GetParentItem(hP2Item);
            if (tv_folder.GetParentItem(hDomainItem) <= 0)break;
            if (!tv_folder.GetParentItem(hDomainItem))break;
            hP2Item = hDomainItem;
        }
        return hP2Item;
@@ -65,7 +69,7 @@
            HTREEITEM hP2Item = 0;
            HTREEITEM hDomainItem = 0;
            if (tv_folder.GetParentItem(hItem) <= 0)
            if (!tv_folder.GetParentItem(hItem))
            {
                hDomainItem = hItem;
            }
@@ -122,7 +126,7 @@
        {
            HTREEITEM hP2Item = 0;
            HTREEITEM hDomainItem = 0;
            if (tv_folder.GetParentItem(hItem) <= 0)
            if (!tv_folder.GetParentItem(hItem))
            {
                hDomainItem = hItem;
            }
@@ -167,4 +171,9 @@
    {
        return SaveContentEx(content, 0);
    }
    xstring GetGuid()
    {
        return publiccode::GetGuid();
    }
};
jrj/xframe/devloper/XDevEditXApp.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,553 @@
#include <wobject/xstring.hpp>
#include <wobject/xwin.hpp>
#include <wobject/xaserver.hpp>
#include <wobject/xaserverarg.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/xreport.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDevEditXApp : public XDevEditPage
{
    public:
    XDevEditXApp(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDevEditXApp* CreateInstance(void* implPtr, void* hWnd)
    {
        XDevEditXApp* pWin = new XDevEditXApp(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xreport dw_param;
    xstring m_type;
    xstring m_mode;
    xtreeview tv_folder;
    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;
    }
    xstring getComboboxData(xcontrol xc)
    {
        int j = SendMessage(xc.GetHWND(),0x0147,0,0);
        if (j > -1)
        {
            xstring s = (wchar_t*)SendMessage(xc.GetHWND(),0x0150,j,0);
            return  xstring(s);
        }
        return L"";
    }
    int OnCombSelChanged()
    {
        xcontrol xc = GetControl(L"image");
        int j = SendMessage(xc.GetHWND(),0x0147,0,0);
        if (j > -1)
        {
            //param s = SendMessage(xc.GetHWND(),0x0150,j,0);
            xnode anode = GetAgentNode(L"image_view");
            xstring p = L"<box name='image_view' width='22'><xtoolbutton caption='' image='" + xstring(j) + L"'/></box>";
            SetAgentNode(anode,p);
        }
    }
    int onClare()
    {
        xcontrol xc = GetControl(L"caption");
        xc.SetText(L"");
        if (m_type == L"file")
        {
            xc = GetControl(L"xpage");
            xc.SetText(L"");
            xc = GetControl(L"image");
            SendMessage(xc.GetHWND(), 0x014E, 16, 0);
            xreport dw_param = GetControl(L"dw_param");
            xml x ;
            xstring str = L"<params>";
            str += L"<param seq='1' name='' value=''></param>";
            str += L"<param seq='2' name='' value=''></param>";
            str += L"<param seq='3' name='' value=''></param>";
            str += L"<param seq='4' name='' value=''></param>";
            str += L"<param seq='5' name='' value=''></param>";
            str += L"<param seq='6' name='' value=''></param>";
            str += L"<param seq='7' name='' value=''></param>";
            str += L"<param seq='8' name='' value=''></param>";
            str += L"</params>";
            x.loadXML(str);
            dw_param.Retrieve(x);
            dw_param.SetReadOnly(false);
            dw_param.Redraw();
        }
        else
        {
            xc = GetControl(L"image");
            SendMessage(xc.GetHWND(), 0x014E, 15, 0);
        }
        xc = GetControl(L"index");
        xc.SetText(L"");
        xc = GetControl(L"code");
        xc.SetText(L"");
        xc = GetControl(L"name");
        xc.SetText(L"");
        xc = GetControl(L"status");
        SendMessage(xc.GetHWND(), 0x014E, 0, 0);
        OnCombSelChanged();
    }
    xstring getTVData(HTREEITEM hitem)
    {
        xstring result = L"";
        HTREEITEM citem = tv_folder.GetChildItem(hitem);
        while (citem > 0)
        {
            xstring str = (wchar_t*)tv_folder.GetItemData(citem);
            xstring name = str.mid(1,str.find(L" ",0));
            result += str.mid(0,str.length() - 2) + L">";
            /*xml x;
            x.loadXML(IXMLDOMElement(ele).xml);
            IXMLDOMElement e = x.documentElement;
            xstring name=e.tagName;
            result += e.xml;
            result = result.mid(0,result.length() - 2)+L">";*/
            xstring tmp = getTVData(citem);
            result += tmp;
            result += L"</" + name + L">";
            citem = tv_folder.GetNextItem(citem);
        }
        return result;
    }
    int onsave()
    {
        HTREEITEM root = tv_folder.GetRootItem();
        xstring str = getTVData(root);
        xstring content = L"<?xml version='1.0' encoding='utf-16'?><favorites guid='" + GetGuid() + L"' caption='' image='17'>" + str + L"</favorites>";
        //trace(content);//
        SaveContent(content);
        onClare();
        m_mode = L"new";
        return 1;
    }
    HTREEITEM getInsertItem(HTREEITEM hitem,xstring s)
    {
        if (tv_folder.GetChildItem(hitem) == 0 || s == L"")
            return 0;
        else
        {
            int index = s.toInt();
            HTREEITEM h = tv_folder.GetChildItem(hitem);
            while (h > 0)
            {
                xstring p = (wchar_t*)tv_folder.GetItemData(h);
                xml x ;
                x.loadXML(p);
                KXMLDOMElement e = x.documentElement();
                xstring str = e.getAttribute(L"index");
                str = L"" + str;
                if (str == L"" && h == tv_folder.GetChildItem(hitem))
                    return h;
                if (str != L"")
                {
                    if (index < str.toInt())
                        return h;
                }
                else
                    return h;
                h = tv_folder.GetNextItem(h);
            }
            return 0;
        }
    }
    int copyNode(HTREEITEM olditem, HTREEITEM newitem)
    {
        HTREEITEM citem = tv_folder.GetChildItem(olditem);
        while (citem)
        {
            xstring str = (wchar_t*)tv_folder.GetItemData(citem);
            xstring name = tv_folder.GetItemLabel(citem);
            int image = tv_folder.GetItemImage(citem);
            HTREEITEM h = tv_folder.InsertChildItem(newitem,name, (LPARAM)str.c_str(true), image);
            copyNode(citem,h);
            citem = tv_folder.GetNextItem(citem);
        }
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        int LayerFlow_UnLayer_ = 0x00000100;
        int LayerFlow_NS_ = 0x00000004;
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"NewFolder")
        {
            m_type = L"folder";
            xnode anode = GetAgentNode(L"file");
            SetAgentNode(anode,L"<vbox/>");
            anode.SetLayerFlow(LayerFlow_UnLayer);
            xcontrol xc = GetControl(L"image");
            SendMessage(xc.GetHWND(), 0x014E, 15, 0);
            m_mode = L"new";
            onClare();
        }
        else if (comdid == L"NewFile")
        {
            m_type = L"file";
            xnode anode = GetAgentNode(L"file");
            anode.SetLayerFlow(LayerFlow_NS);
            KXMLDOMElement e = GetElement().selectSingleNode(L"//vbox[@name='file']");
            SetAgentNode(anode,e.xml());
            xcontrol xc = GetControl(L"image");
            SendMessage(xc.GetHWND(), 0x014E, 16, 0);
            m_mode = L"new";
            onClare();
        }
        else if (comdid == L"param_add")
        {
            //dw_param.InsertRow(0);
        }
        else if (comdid == L"param_del")
        {
            //int row = dw_param.GetRow();
            //if(row<0) return 0;
            //dw_param.DeleteRow(row);
        }
        else if (comdid == L"selectxpage")
        {
            xaserverarg arg;
            //OpenWindow(L"/developer/XDevXWKDlg.xpage",arg);
            OpenWindow(L"dev:xpage[XDevXWKDlg.xpage]",arg);
            xcontrol xc = GetControl(L"xpage");
            xc.SetText(arg.GetArgString(L"caption"));
            xc = GetControl(L"xpageguid");
            xc.SetText(arg.GetArgString(L"guid"));
        }
        else if (comdid == L"delete")
        {
            HTREEITEM hitem = tv_folder.GetSelectedItem();
            if (!hitem) return 0;
            if (hitem == tv_folder.GetRootItem()) return 0;
            if (tv_folder.GetChildItem(hitem)) return 0;
            tv_folder.DeleteItem(hitem);
            onsave();
        }
        else if (comdid == L"save")
        {
            //xstring str=L"<"+m_type+L" ";
            xml x ;
            x.loadXML(L"<" + m_type + L"/>");
            auto r = x.documentElement();
            xcontrol xc = GetControl(L"caption");
            xstring name = xc.GetText();
            if (name == L"")
            {
                alert(L"请填写名称!");
                return 0;
            }
            //str += L"caption='"+name+L"' ";
            r.setAttribute(L"caption",name);
            xstring tmp = GetGuid();
            //str += L"guid='"+tmp+L"' ";
            r.setAttribute(L"guid",tmp);
            if (m_type == L"file")
            {
                xc = GetControl(L"xpage");
                tmp = xc.GetText();
                xstring tmp1 = L"" + tmp + L"?";
                xreport dw_param = GetControl(L"dw_param");
                int i = 1;
                xstring ss = L"";
                for (i = 1; i <= dw_param.GetRowCount(); i++)
                {
                    xstring name1 = dw_param.GetItemString(i,1);
                    xstring value1 = dw_param.GetItemString(i,2);
                    if (name != L"")
                    {
                        xstring s = name1 + L"=" + value1 + L"&";
                        ss += s;
                    }
                }
                ss = ss.mid(0, ss.length() - 1);
                tmp1 += ss;
                //trace(tmp1);
                //str += L"url='worknode:"+tmp+L"/open#1' ";
                r.setAttribute(L"url",L"" + tmp1);
            }
            xc = GetControl(L"index");
            xstring index = xc.GetText();
            r.setAttribute(L"index",index);
            xc = GetControl(L"name");
            tmp = xc.GetText();
            r.setAttribute(L"name",tmp);
            xc = GetControl(L"code");
            tmp = xc.GetText();
            r.setAttribute(L"code",tmp);
            xc = GetControl(L"name");
            tmp = xc.GetText();
            r.setAttribute(L"name",tmp);
            xc = GetControl(L"status");
            //tmp=getComboboxData(xc);
            tmp = xc.GetText();
            //str += L"status='"+tmp+L"' ";
            r.setAttribute(L"status",tmp);
            xc = GetControl(L"image");
            //tmp=getComboboxData(xc);
            tmp = xc.GetText();
            //str += L"image='"+tmp+L"' ";
            r.setAttribute(L"image",tmp);
            //str += L"/>";
            //param p =str;
            //trace(r.xml);
            xstring p = r.xml();
            //tv_folder.InsertChildItem(hitem,name,x.documentElement,tmp.toInt());
            HTREEITEM hitem = tv_folder.GetSelectedItem();
            if (hitem == 0) hitem = tv_folder.GetRootItem();
            HTREEITEM ditem = hitem;
            if (m_mode == L"edit")
                hitem = tv_folder.GetParentItem(ditem);
            HTREEITEM bitem = getInsertItem(hitem,L"" + index);
            HTREEITEM h;
            if (!bitem)
                h = tv_folder.InsertChildItem(hitem,name,p,tmp.toInt());
            else
                h = tv_folder.InsertItem(hitem,bitem,name,p,tmp.toInt());
            if (m_mode == L"edit")
            {
                copyNode(ditem,h);
                tv_folder.DeleteItem(ditem);
            }
            tv_folder.ExpandItemEx(hitem);
            onsave();
        }
        xutil::RestoreCursor(hCursor);
        return 0;
    }
    //命令处理事件
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnTreeDrag(TEvent* evt, LPARAM param)
    {
        TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
        HTREEITEM hItem = nmtv.FromItem;
        tv_folder.DeleteItem(hItem);
        onsave();
        return 1;
    }
    int setXpage(KXMLDOMElement e)
    {
        xcontrol xc = GetControl(L"caption");
        xstring str = e.getAttribute(L"caption");
        xc.SetText(L"" + str);
        if (m_type == L"file")
        {
            xstring str = e.getAttribute(L"url");
            str = L"" + str;
            if (str.find(L"?",0) < 0)
                str = str + L"?";
            xc = GetControl(L"xpage");
            xstring t = str.mid(0,str.find(L"?",0));
            xc.SetText(L"" + t);
            xstring p = str.mid(str.find(L"?",0) + 1, str.length());
            if (p != L"")
            {
                p += L"&";
                int i = 1;
                while (p.find(L"=L",0) > 0)
                {
                    xstring name = p.mid(0, p.find(L"=L",0));
                    xstring value = p.mid(p.find(L"=L",0) + 1, p.find(L"&",0) - p.find(L"=L",0) - 1);
                    xreport dw_param = GetControl(L"dw_param");
                    dw_param.SetItemString(i, 1, L"" + name);
                    dw_param.SetItemString(i, 2, L"" + value);
                    i += 1;
                    p = p.mid(p.find(L"&",0) + 1, p.length());
                }
            }
        }
        xc = GetControl(L"image");
        xstring str = e.getAttribute(L"image");
        //xc.SetText(L""+str);
        SendMessage(xc.GetHWND(), 0x014E, str.toInt(), 0);
        xc = GetControl(L"index");
        xstring str = e.getAttribute(L"index");
        xc.SetText(L"" + str);
        xc = GetControl(L"code");
        xstring str = e.getAttribute(L"code");
        xc.SetText(L"" + str);
        xc = GetControl(L"name");
        xstring str = e.getAttribute(L"name");
        xc.SetText(L"" + str);
        xc = GetControl(L"status");
        xstring str = e.getAttribute(L"status");
        xc.SetText(L"" + str);
        OnCombSelChanged();
    }
    int OnTreeSelChanged(ref TNotifyEvent evt,int param)
    {
        ref NMTREEVIEW nmtv = evt.pnmh;
        int hitem = nmtv.itemNew.hItem;
        onClare();
        m_mode = L"new";
        if (hitem == tv_folder.GetRootItem()) return 0;
        //IXMLDOMElement e = tv_folder.GetItemData(hitem);
        //trace(e.xml);
        param p = tv_folder.GetItemData(hitem);
        xml x ;
        x.loadXML(L"" + xstring(p));
        IXMLDOMElement e = x.documentElement;
        m_type = e.tagName;
        if (m_type == L"file")
            OnCmdDispatch(L"NewFile");
        else
            OnCmdDispatch(L"NewFolder");
        setXpage(e);
        m_mode = L"edit";
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND",OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS",OnSetFocus);
        AttachEvent(L"image", L"CBN_SELCHANGE",OnCombSelChanged);
        AttachEvent(L"tv_folder", L"TVN_ENDDRAG",OnTreeDrag);
        AttachEvent(L"tv_folder", L"TVN_SELCHANGED",OnTreeSelChanged);
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        xcontrol xc = GetControl(L"image");
        int i;
        for (i = 0; i < 35; i++)
        {
            SendMessage(xc.GetHWND(), 0x0143, 0, i.toString());
            //param p=i.toString();
            //SendMessage(xc.GetHWND(), 0x0151, i, p);
        }
        SendMessage(xc.GetHWND(), 0x014E, 15, 0);
        return 1;
    }
    int OnTreeAdd(int hitem, IXMLDOMElement e)
    {
        auto list = e.selectNodes(L"*");
        int i;
        int s = list.length;
        for (i = 0; i < s; i++)
        {
            IXMLDOMElement ele = list.item(i);
            xstring name = ele.getAttribute(L"caption");
            xstring image = ele.getAttribute(L"image");
            image = L"" + image;
            xstring data = ele.xml;
            data = data.mid(0,data.find(L">",1)) + L"/>";
            param p = data;
            int j = tv_folder.InsertChildItem(hitem,name,p,image.toInt());
            OnTreeAdd(j,ele);
        }
        return 1;
    }
    int onload()
    {
        dw_param = GetControl(L"dw_param");
        dw_param.SetReadOnly(false);
        tv_folder = GetControl(L"tv_folder");
        OnInitial();
        m_type = L"folder";
        OnCmdDispatch(L"NewFolder");
        m_mode = L"new";
        if (!GetParam()) return 1;
        xwin w = GetFrameWindow();
        xtree tv = w.GetControl(L"DevExplorer");
        int hItem = GetParam();
        IXMLDOMElement e = tv.GetItemData(hItem);
        xstring name = e.getAttribute(L"caption");
        int root = tv_folder.InsertItem(L"" + name,e,17);
        xstring content = GetData();
        if (content != L"")
        {
            //trace(content);
            xml x ;
            if (x.loadXML(content))
            {
                OnTreeAdd(root,x.documentElement);
                tv_folder.ExpandItemEx(root);
            }
        }
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXCode.cpp
ÎļþÒÑɾ³ý
jrj/xframe/devloper/XDevEditXFile.cpp
@@ -8,12 +8,13 @@
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
#include <xcontrol/xreport.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDevEditXFile : public xwin
class export XDevEditXFile : public XDevEditPage
{
    public:
    XDevEditXFile(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
    XDevEditXFile(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDevEditXFile* CreateInstance(void* implPtr, void* hWnd)
    {
@@ -156,7 +157,7 @@
            xml x;
            if (!x.loadXML(content))
            {
                KXMLDOMParseError pError = x.parseError;
                KXMLDOMParseError pError = x.parseError();
                if (pError)
                {
                    xstring str = pError.srcText();
@@ -255,7 +256,7 @@
                //find project folder
                xstring prjguid = L"";
                int pitem = GetProjectItem(tv_folder,hItem);
                HTREEITEM pitem = GetProjectItem(tv_folder,hItem);
                if (pitem)
                    prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
@@ -267,13 +268,13 @@
                    {
                        auto f = e.selectSingleNode(L"//*[@uri='" + name + L"']");
                        if (f) {
                            xstring guid = KXMLDOMElement(f).selectSingleNode(L"@guid").text;//.getAttribute(L"guid");
                            xstring guid = f.selectSingleNode(L"@guid").text();//.getAttribute(L"guid");
                            if (guid == L"")
                                return "";
                                return L"";
                            arg.AddArg(L"guid",guid);
                        }
    else
       return "";
       return L"";
    }
    KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
    xstring guid = p.getAttribute(L"guid");
@@ -291,9 +292,9 @@
        return L"";
    }
int OnDoubleClicked(ref TNotifyEvent evt,int param)
int OnDoubleClicked(TEvent* evt,LPARAM param)
{
    ref DWNMHDR  hdr = evt.pnmh;
    DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
    int row = hdr.row;
    KXMLDOMElement e = xp.GetRowElement(row);
    xstring filename = e.getAttribute(L"type");
@@ -332,10 +333,10 @@
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND",OnXCommand);
        AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXFile::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS",OnSetFocus);
        AttachEvent(L"xreport",L"DWV_DOUBLECLICKED",OnDoubleClicked);
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXFile::OnSetFocus);
        AttachEvent(L"xreport",L"DWV_DOUBLECLICKED", (FEvent)&XDevEditXFile::OnDoubleClicked);
    }
    int LoadData()
jrj/xframe/devloper/XDevEditXFlow.cpp
ÎļþÒÑɾ³ý
jrj/xframe/devloper/XDevEditXHtml.cpp
ÎļþÒÑɾ³ý
jrj/xframe/devloper/XDevEditXLayer.cpp
@@ -4,544 +4,118 @@
#include <wobject/xaserverarg.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xsedit.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
class export XDevEditXLayer : public XDevEditPage
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
    XDevEditXLayer(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    static XDevEditXLayer* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        XDevEditXLayer* pWin = new XDevEditXLayer(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        xstring t = mle_output.GetText();
        mle_output.SetText(t + msg);
        /*
        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 OnProcessUrl(xstring kind, xstring url)
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        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;
    }
        SetAgent();
    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")
        if (comdid == L"xmFileSaveEx")
        {
            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;
            xsedit xs = GetControl(L"xpagecontent");
            xsedit xc = GetControl(L"xcodecontent");
            HCURSOR hCursor = xutil::SetCursorWait();
            //find project folder
            xstring prjguid = L"";
            HTREEITEM pitem = GetProjectItem(hItem);
            if (pitem)
                prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
            xstring content;
            //save xml content
            xs.GetContent(content);
            SaveContent(content);
            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);
            }
            xstring code;
            //save tpp content
            xc.GetContent(code);
            SaveContentEx(code,1);
            //
            xutil::RestoreCursor(hCursor);
            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)
    int OnXCommand(TEvent* evt,LPARAM 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);
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXLayer::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXLayer::OnSetFocus);
        return 1;
    }
    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".cpp");
        }
        return 1;
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
@@ -549,13 +123,8 @@
    int onload()
    {
        sheet_Count = -1;
        OnInitial();
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        LoadData();
        return 1;
    }
    }
};
jrj/xframe/devloper/XDevEditXMSSQL.cpp
@@ -4,187 +4,177 @@
#include <wobject/xaserverarg.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xdwgrid.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
class export XDevEditXMSSQL : public XDevEditPage
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    XDevEditXMSSQL(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDevEditXMSSQL* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        XDevEditXMSSQL* pWin = new XDevEditXMSSQL(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    xtreeview tv_db;
    xlayersheet list;
    //xnode    m_agentNode;    //Agent Condition
    //xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        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 xfNodeAgentArea  = L"agentarea";
                xnode anode = GetAgentNode(xfNodeAgentArea);
                var xframeElement =  GetElement();
                var agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
                if(agent)
                {
                    xstring guid = e.getAttribute(L"guid");
                    arg.AddArg(L"guid", guid);
                    xstring s = agent.xml;
                    m_agentNode =  SetAgentNodeContent (anode,s);
                }
                KXMLDOMElement p = tv_folder.GetItemData(hP2Item);
                xstring guid = p.getAttribute(L"guid");
                arg.AddArg(L"root.guid", guid);
        */        return 1;
            }
            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 OnSetFocus(TEvent* evt,LPARAM param)
    {
        SetAgent();
        //重置工具条
        return 1;
    }
    int OnTreeDblClick(TEvent* evt, int param)
    xstring getLink(HTREEITEM item)
    {
        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++)
        HTREEITEM p = tv_db.GetParentItem(item);
        while (tv_db.GetParentItem(p) > 0)
        {
            if (hItem == layer.GetParam(i))break;
            item = tv_db.GetParentItem(item);
            p = tv_db.GetParentItem(item);
        }
        if (i < nIndex)
        xstring link = tv_db.GetItemData(item);
        return link;
    }
    KXMLDOMElement OnXQuery(xstring data)
    {
        HTREEITEM item = tv_db.GetSelectedItem();
        xstring link = getLink(item);
        xml x ;
        xaserverarg arg;
        arg.AddArg(L"type",data);
        arg.AddArg(L"link",link);
        if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSQL.list.xq]",arg.GetString(),x) != 1)
        {
            layer.SelectSheet(i);
            trace(x.xml());
            return 1;
        }
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        xstring node = e.tagName();
        if (node == L"File" || node == L"file")
        return x.documentElement();
    }
    int setGrid(KXMLDOMElement e,xstring caption)
    {
        xml x;
        xdwgrid grid = GetControl(caption);
        if (!e.selectSingleNode(L"grid/sheet")) return 0;
        x.loadXML(e.selectSingleNode(L"grid/sheet").xml());
        grid.SetDataObject(x);
        if (!e.selectSingleNode(L"datas")) return 0;
        x.loadXML(e.selectSingleNode(L"datas").xml());
        grid.Retrieve(x);
        grid.Redraw();
        return 1;
    }
    xstring replace(xstring a, xstring b, xstring c, int s=0)
    {
        int k = a.find(b,s);
        if (k > -1)
        {
            //xstring str =  ProcessDevCmd(L"getobject",arg.GetString());
            xstring typ = e.getAttribute(L"type");
            xstring str;
            if (k == 0)
                str = L"" + c + a.right(a.length() - k - b.length());
            else if (k + b.length() == a.length())
                str = L"" + a.left(k) + c;
            else
                str = L"" + a.left(k) + c + a.right(a.length() - k - b.length());
            replace(str, b, c, k + b.length() + 1);
        }
        else
            return a;
    }
            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);
            }
    int OnOpen(xstring caption,xstring node)
    {
        int s = list.GetSheetCount();
        int i;
        xstring pa = node + L"." + caption;
        for (i = 0; i < s; i++)
        {
            xstring p = (wchar_t*)list.GetParam(i);
            if (pa == p)
                break;
        }
        if (i < s)
        {
            list.SelectSheet(i);
            return 0;
        }
        KXMLDOMElement xframeElement = GetElement();
        KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + node + L"/*");
        xstring str = replace(agent.xml(), L"{#1}", caption);
        xml x ;
        x.loadXML(str);
        int k = list.InsertSheet(-1,(LPTSTR)caption.c_str(), x.documentElement());
        list.SelectSheet(k);
        list.SetParam(k,(void*)pa.c_str(true));
        return 1;
    }
    int onShow()
    {
        while (tv_db.GetRootItem() > 0)
            tv_db.DeleteItem(tv_db.GetRootItem());
        xsedit xs = GetControl(L"xcontent");
        xstring content;
        xs.GetContent(content);
        xml x ;
        x.loadXML(content);
        KXMLDOMElement e = x.documentElement();
        xstring name = e.getAttribute(L"name");
        HTREEITEM root = tv_db.InsertItem(name.c_str(), NULL, 16);
        auto lists = e.selectNodes(L"*");
        int i;
        int s = lists.length();
        for (i = 0; i < s; i++)
        {
            KXMLDOMElement ele = lists.item(i);
            xstring name = ele.getAttribute(L"name");
            xstring link = ele.getAttribute(L"link");
            HTREEITEM k = tv_db.InsertChildItem(root,L"" + name,L"" + link,15);
            HTREEITEM j = tv_db.InsertChildItem(k,L"表",L"table",22);
            tv_db.SetItemChild1(j,1);
            j = tv_db.InsertChildItem(k,L"视图",L"view",23);
            tv_db.SetItemChild1(j,1);
            j = tv_db.InsertChildItem(k,L"存储过程",L"procedure",24);
            tv_db.SetItemChild1(j,1);
            j = tv_db.InsertChildItem(k,L"自定义函数",L"function",25);
            tv_db.SetItemChild1(j,1);
        }
        tv_db.ExpandItem(root);
        if (list.GetSheetCount() < 1)
        {
            xstring caption = L"Query";
            if (OnOpen(caption,L"query") == 0) return 0;
            xsedit xs = GetControl(L"sql_" + caption);
            xs.LoadContent(L"",L".sql");
        }
        return 1;
    }
@@ -192,356 +182,411 @@
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        //
        if (comdid == L"xmSqlWatch")
        HCURSOR hCursor = xutil::SetCursorWait();
        xsedit xs = GetControl(L"xcontent");
        xstring content;
        xs.GetContent(content);
        if (comdid == L"xmFileSave")
        {
            OpenWindow(L"dev:xpage[sqlWatch.vx]");
            return 1;
            //save xml content
            SaveContent(content);
        }
        if (comdid == L"xmCheckUrl")
        else if (comdid == L"xmValid")
        {
            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))
            xml x ;
            if (!x.loadXML(content))
            {
                hDomainItem = hItem;
            }
            else
            {
                hP2Item = GetP2Item(hItem);
                hDomainItem = tv_folder.GetParentItem(hP2Item);
            }
            e = tv_folder.GetItemData(hItem);
            if (hP2Item)
            {
                if (hP2Item != hItem)
                KXMLDOMParseError pError = x.parseError();
                if (pError)
                {
                    xstring guid = e.getAttribute(L"guid");
                    arg.AddArg(L"parent.guid", guid);
                    xstring str = pError.srcText();
                    xstring sError = L"\r\nMSSQL错误: " + 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);
                }
                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")
                else
                {
                    if (arg.GetArgString(L"image") == L"")
                        arg.AddArg(L"image", L"15");
                    arg.AddArg(L"folder", L"folder");
                    arg.AddArg(L"type", L"folder");
                    trace(L"XML é”™è¯¯");
                }
                return -1;
            }
            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")
        else if (comdid == L"show")
        {
            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;
            if (OnCmdDispatch(L"xmValid") == -1)
                return -1;
            onShow();
        }
        else if (comdid == L"xmUpdateProject")
        else if (comdid == L"xmQuery")
        {
            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;
            xstring guid = win32::GetGuid();
            xstring caption = L"Query_" + guid.mid(1,8);
            if (OnOpen(caption,L"query") == 0) return 0;
            xsedit xs = GetControl(L"sql_" + caption);
            xs.LoadContent(L"",L".sql");
        }
        else if (comdid == L"xmEditObject")
        else if (comdid.left(8) == L"xmClose_")
        {
            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);
                }
            }
            list.DeleteSheet(list.GetSheetIndex());
        }
        else if (comdid.left(6) == L"xmRun_")
        {
            xstring table = comdid.mid(6,comdid.length());
            xsedit xs = GetControl(L"sql_" + table);
            xstring content;
            xs.GetContent(content);
            xstring sql = L"xquery@" + content + L" for xml path('data'),root('datas'),type";
            KXMLDOMElement e = OnXQuery(sql);
            if (e)
                setGrid(e,L"grid_" + table);
        }
        xutil::RestoreCursor(hCursor);
        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)
    int OnXCommand(TEvent* evt,LPARAM param)
    {
        return OnCmdDispatch(evt->xcommand.pStrID);
    }
    int OnSelChanged(TEvent* evt, int param)
    int OnTreeAdd(HTREEITEM item, xstring data,KXMLDOMElement e)
    {
        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))
        auto list = e.selectNodes(L"*");
        int i;
        int s = list.length();
        for (i = 0; i < s; i++)
        {
            hitem = tv_folder.GetParentItem(hitem);
            xstring p = L"" + tv_folder.GetItemLabel(hitem);
            path = p + L"\\" + path;
            KXMLDOMElement ele = list.item(i);
            xstring name = ele.getAttribute(L"name");
            xstring image = ele.getAttribute(L"image");
            xstring d = ele.getAttribute(L"data");
            image = L"" + image;
            if (d == L"")
                d = data + L"@" + name;
            HTREEITEM j = tv_db.InsertChildItem(item,(LPTSTR)name.c_str(), (LPARAM)d.c_str(true), image.toInt());
            if (image.toInt() > 9)
                tv_db.SetItemChild1(j,1);
            OnTreeAdd(j,d,ele);
        }
        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)
    int OnTreeExpand(HTREEITEM item)
    {
        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)
        xstring data = tv_db.GetItemData(item);
        xstring link = getLink(item);
        xml x ;
        xaserverarg arg;
        arg.AddArg(L"type",data);
        arg.AddArg(L"link",link);
        if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSQL.list.xq]",arg.GetString(),x) != 1)
        {
            void* p = nullptr;
            layer.SetParam(s - 1, p);
            trace(x.xml());
            return 0;
        }
        sheet_Count = s;
        KXMLDOMElement e = x.documentElement();
        OnTreeAdd(item,data,e);
        return 1;
    }
    int OnTreeExpanding(TEvent* evt,LPARAM param)
    {
        NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
        HTREEITEM item = nmtv.itemNew.hItem;
        if (tv_db.GetChildItem(item) > 0) return 0;
        OnTreeExpand(item);
        return 1;
    }
    int OnGroupAction(xstring guid,xstring name,xstring flag)
    {
        xaserverarg arg;
        arg.AddArg(L"type",flag);
        HTREEITEM item = tv_db.GetSelectedItem();
        xstring str = L"<group guid='" + guid + L"' name='" + name + L"'";
        if (flag.mid(5,7) == L".table.")
        {
            str += L"/>";
        }
        else
        {
            xstring link = getLink(item);
            str += L" link='" + link + L"'/>";
        }
        //trace(str);
        arg.AddArg(L"context",str);
        return xaserver::ExecXAction(GetServerUrl(),L"[MSSQL.action.xa]",arg.GetString());
    }
    int OnNewGroup(HTREEITEM item)
    {
        tv_db.ExpandItemEx(item);
        HTREEITEM gitem = tv_db.GetChildItem(item);
        while (gitem > 0)
        {
            xstring data = L"" + tv_db.GetItemData(gitem);
            if (data.left(6) != L"group@") break;
            gitem = tv_db.GetNextItem(gitem);
        }
        xstring guid = win32::GetGuid();
        if (OnGroupAction(guid,L"",L"group.update") != 1) return 0;
        HTREEITEM j = tv_db.InsertItem(item,gitem,L"",L"group@" + guid,25);
        tv_db.ItemEdit(j);
        return 1;
    }
    int OnDel(HTREEITEM item)
    {
        xstring data = tv_db.GetItemData(item);
        if (data.left(6) == L"group@")
        {
            xstring guid = data.mid(6,data.length());
            if (OnGroupAction(guid,L"",L"group.del") != 1) return 0;
            tv_db.DeleteItem(item);
        }
        else if (data.left(6) == L"table@")
        {
            HTREEITEM pitem = tv_db.GetParentItem(item);
            xstring pdata = tv_db.GetItemData(pitem);
            if (pdata.left(6) == L"group@")
            {
                xstring guid = pdata.mid(6,pdata.length());
                xstring table = data.mid(6,data.length());
                if (OnGroupAction(guid,table,L"group.table.del") != 1) return 0;
                tv_db.DeleteItem(item);
            }
        }
        return 1;
    }
    int OnRefresh(HTREEITEM item)
    {
        while (tv_db.GetChildItem(item) > 0)
            tv_db.DeleteItem(tv_db.GetChildItem(item));
        OnTreeExpand(item);
        return 1;
    }
    int OnQuery(xstring caption)
    {
        if (OnOpen(caption,L"query") == 0) return 0;
        KXMLDOMElement e = OnXQuery(L"column@" + caption);
        if (!e) return 0;
        auto list = e.selectNodes(L"columns/column");
        int i;
        int s = list.length();
        xstring str;
        str = L"SELECT TOP 500 \r\n";
        for (i = 0; i < s; i++)
        {
            KXMLDOMElement ele = list.item(i);
            xstring tmp = ele.getAttribute(L"name");
            if (i < s - 1) tmp = tmp + L",L";
            str += L"\t" + tmp + L"\r\n";
        }
        str += L"FROM " + caption;
        xsedit xs = GetControl(L"sql_" + caption);
        xs.LoadContent(str,L".sql");
        setGrid(e,L"grid_" + caption);
        return 1;
    }
    int OnEdit(xstring caption)
    {
        if (OnOpen(caption,L"edit") == 0) return 0;
        KXMLDOMElement e = OnXQuery(L"edit@" + caption);
        if (!e) return 0;
        setGrid(e,L"editgrid_" + caption);
        return 1;
    }
    int OnDesign(xstring caption)
    {
        if (OnOpen(caption,L"design") == 0) return 0;
        KXMLDOMElement e = OnXQuery(L"design@" + caption);
        if (!e) return 0;
        setGrid(e,L"designgrid_" + caption);
        return 1;
    }
    xstring getCaption(xstring str)
    {
        while (str.find(L"@", 0) > 0)
        {
            xstring tmp = str.mid(str.find(L"@", 0) + 1, str.length());
            str = tmp;
        }
        return str;
    }
    int OnTreeRClick(TEvent* evt,int param)
    {
        TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
        HTREEITEM item = nmtv.FromItem;
        xstring data = tv_db.GetItemData(item);
        xstring popup;
        if (data == L"table")
        {
            xstring memu = L"<root>";
            memu += L"<Item>新建表</Item>";
            memu += L"<Item>新建分组</Item>";
            memu += L"<Item>-</Item>";
            memu += L"<Item>刷新</Item>";
            memu += L"</root>";
            xstring str = tv_db.PopupMenu(memu);
            popup = str;
        }
        else if (data.left(6) == L"table@" && data.find(L"@",7) < 0)
        {
            xstring memu = L"<root>";
            memu += L"<Item>新建表</Item>";
            memu += L"<Item>设计</Item>";
            memu += L"<Item>-</Item>";
            memu += L"<Item>打开前500行</Item>";
            memu += L"<Item>编辑前200行</Item>";
            memu += L"<Item>-</Item>";
            memu += L"<Item>重命名</Item>";
            memu += L"<Item>刷新</Item>";
            memu += L"<Item>删除</Item>";
            memu += L"</root>";
            xstring str = tv_db.PopupMenu(memu);
            popup = str;
        }
        else if (data.left(6) == L"group@")
        {
            xstring memu = L"<root>";
            memu += L"<Item>重命名</Item>";
            memu += L"<Item>刷新</Item>";
            memu += L"<Item>删除</Item>";
            memu += L"</root>";
            xstring str = tv_db.PopupMenu(memu);
            popup = str;
        }
        else if (data.left(5) == L"view@" || data.left(10) == L"procedure@" || data.left(9) == L"function@")
        {
            xstring memu = L"<root>";
            memu += L"<Item>重命名</Item>";
            memu += L"<Item>修改</Item>";
            memu += L"<Item>删除</Item>";
            memu += L"</root>";
            xstring str = tv_db.PopupMenu(memu);
            popup = str;
        }
        //trace(L"   "+data+L"-->"+getCaption(data));
        xstring caption = getCaption(data);//data.mid(6,data.length());
        if (popup == L"新建分组")
            OnNewGroup(item);
        else if (popup == L"删除")
            OnDel(item);
        else if (popup == L"刷新")
            OnRefresh(item);
        else if (popup == L"打开前500行")
            OnQuery(caption);
        else if (popup == L"编辑前200行")
            OnEdit(caption);
        else if (popup == L"设计")
            OnDesign(caption);
        else if (popup == L"新建表")
        {
            xstring guid = win32::GetGuid();
            xstring text = L"Table_" + guid.mid(1,8);
            OnDesign(text);
        }
        else if (popup == L"修改")
            OnOpen(caption,L"query");
        return 1;
    }
    int OnTreeBeginDrag(TEvent* evt,LPARAM param)
    {
        NMTREEVIEW& nmtv =*(NMTREEVIEW*) evt->notify.pnmh;
        HTREEITEM item = nmtv.itemNew.hItem;
        xstring data = tv_db.GetItemData(item);
        if (data.left(6) != L"table@" || data.find(L"@",7) > 0)
        {
            int WM_LBUTTONUP = 0x0202;
            SendMessage(tv_db.GetHWND(),WM_LBUTTONUP,0,0);
        }
        return 1;
    }
    int OnTreeEndDrag(TEvent* evt, LPARAM param)
    {
        TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
        HTREEITEM fitem = nmtv.FromItem;
        HTREEITEM titem = nmtv.ToItem;
        xstring fdata = tv_db.GetItemData(fitem);
        xstring tdata = tv_db.GetItemData(titem);
        if (fdata.left(6) == L"table@" && tdata.left(6) == L"group@")
        {
            xstring table = fdata.mid(6,fdata.length());
            xstring guid = tdata.mid(6,tdata.length());
            if (OnGroupAction(guid,table,L"group.table.update") != 1) return 0;
            tv_db.DeleteItem(fitem);
        }
        return 1;
    }
    int OnTreeEndEdit(TEvent* evt, LPARAM param)
    {
        NMTVDISPINFO& nmtv = *(NMTVDISPINFO*)evt->notify.pnmh;
        HTREEITEM item = nmtv.item.hItem;
        xstring pszText = nmtv.item.pszText;
        if (pszText != L"")
        {
            xstring data = tv_db.GetItemData(item);
            if (data.left(6) == L"group@")
            {
                xstring guid = data.mid(6,data.length());
                if (OnGroupAction(guid,pszText,L"group.update") != 1) return 0;
            }
            tv_db.SetItemLabel(item,pszText);
        }
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDeveloper::OnXCommand);
        AttachEvent(L"DevExplorer", L"NM_DBLCLK", (FEvent)&XDeveloper::OnTreeDblClick);
        AttachEvent(L"WM_XCOMMAND",(FEvent)XDevEditXMSSQL::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)XDevEditXMSSQL::OnSetFocus);
        //获得树的展开事件
        //AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING",(FEvent)&XDeveloper::OnTreeExpanding);
        AttachEvent(L"tv_db", L"TVN_ITEMEXPANDING", (FEvent)XDevEditXMSSQL::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);
        //AttachEvent(L"tv_db", L"TVN_SELCHANGED",(FEvent)XDevEditXMSSQL::OnTreeSelChanged);
        AttachEvent(L"tv_db", L"TVN_RCLICK", (FEvent)XDevEditXMSSQL::OnTreeRClick);
        AttachEvent(L"tv_db", L"TVN_BEGINDRAG", (FEvent)XDevEditXMSSQL::OnTreeBeginDrag);
        AttachEvent(L"tv_db", L"TVN_ENDDRAG", (FEvent)XDevEditXMSSQL::OnTreeEndDrag);
        AttachEvent(L"tv_db", L"TVN_ENDLABELEDIT", (FEvent)XDevEditXMSSQL::OnTreeEndEdit);
    }
    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;
@@ -549,13 +594,13 @@
    int onload()
    {
        sheet_Count = -1;
        tv_db = GetControl(L"tv_db");
        list = GetControl(L"list");
        OnInitial();
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        LoadData();
        //OnCmdDispatch(L"xmQuery");
        return 1;
    }
};
jrj/xframe/devloper/XDevEditXOffice.cpp
@@ -4,544 +4,174 @@
#include <wobject/xaserverarg.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/xoffice.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
class export XDevEditXOffice : public XDevEditPage
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
    XDevEditXOffice(void* implPtr, HWND hWnd) : XDevEditPage(implPtr, hWnd) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    static XDevEditXOffice* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        XDevEditXOffice* pWin = new XDevEditXOffice(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    //xdwgrid    dw_list;
    xoffice m_xdoc;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        xstring t = mle_output.GetText();
        mle_output.SetText(t + msg);
        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 OnProcessUrl(xstring kind, xstring url)
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        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;
    }
        SetAgent();
    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")
        xml x ;
        m_xdoc.GetData(x);
        xstring content = x.xml();
        if (comdid == L"xmFileSave")
        {
            OpenWindow(L"dev:xpage[sqlWatch.vx]");
            //save xml content
            SaveContent(content);
            return 1;
        }
        if (comdid == L"xmCheckUrl")
        else if (comdid == L"xmDevPreview")
        {
            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;
            xml x;
            m_xdoc.GetData(x,m_xdoc.GetSelectedSheetIndex());
            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);
            }
            arg.AddArg(L"xml", x.xml());
            OpenWindow(L"dev:xpage[XDevOfficePreview.xpage]", arg);
            return 1;
        }
        else if (comdid == L"xmDeleteObject")
        else if (comdid == L"content")
        {
            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;
            xsedit xs = GetControl(L"rptcontent");
            xs.LoadContent(content,L".txt");
            //xs.SetText(content);
            return 1;
        }
        else if (comdid == L"xmUpdateProject")
        else if (comdid == L"content1")
        {
            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);
            xcontrol xs = GetControl(L"rptcontent1");
            SendMessage(xs.GetHWND(), 0x400 + 53,0,4096 * 4096);
            xs.SetText(content);
            return 1;
        }
        else if (comdid == L"design")
        {
            xsedit xs = GetControl(L"rptcontent");
            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"));
            xs.GetContent(str);
            if (str != L"" && str != content)
            {
                m_xdoc.LoadTemplate(str,0);
                xs.LoadContent(L"",L".txt");
            }
            /*
            xcontrol xs = GetControl(L"rptcontent1");
            xstring str ;
            xstring str = xs.GetText();
            if(str !=L"" && str != content)
            {
                m_xdoc.LoadTemplate(str,0);
                //xs.LoadContent(L"",L".txt");
            }*/
            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)
    int OnXCommand(TEvent* evt,LPARAM 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);
        AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXOffice::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXOffice::OnSetFocus);
        return 1;
    }
    /*
    int  OnRetrieve()
    {
        xstring query=L"[xxx]";
        xml x = new xml;
        xaserverarg arg = new xaserverarg;
        arg.AddArg(L"xxx",L"xxx");
        if (xaserver::ExecXQuery(GetServerUrl(),query,arg.GetString(),x)!=1)
        {
            trace(x.GetXmlDoc().text);
            return -1;
        }else
        {
            dw_list.Retrieve(x);
            dw_list.Redraw();
        }
        return 1;
    }
    */
    int LoadData()
    {
        if (!GetWinParam()) return 1;
        m_xdoc = GetControl(L"rpt");
        xstring content = GetData();
        if (content != L"")
        {
            m_xdoc.LoadTemplate(content,0);
        }
        else
        {
            KXMLDOMElement pElement;
            xml x ;
            auto xdoc = x;
            xdoc.loadXML(L"<root/>");
            m_xdoc.LoadTemplate(x,0);
        }
        return 1;
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
@@ -549,12 +179,13 @@
    int onload()
    {
        sheet_Count = -1;
        OnInitial();
        //dw_list = GetControl(L"dw_list");
        //dw_list.SetDataObject(GetServerUrl(),L"dev:sheet[xxx.tpl/List]");
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        OnInitial();
        LoadData();
        //OnRetrieve();
        return 1;
    }
jrj/xframe/devloper/XDevEditXPage.cpp
@@ -5,12 +5,13 @@
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xsedit.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDevEditXPage : public xwin
class export XDevEditXPage : public XDevEditPage
{
    public:
    XDevEditXPage(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd){}
    XDevEditXPage(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd){}
public:
    static XDevEditXPage* CreateInstance(void* implPtr, void* hWnd)
    {
@@ -87,6 +88,8 @@
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXPage::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXPage::OnSetFocus);
        return 1;
    }
    int LoadData()
jrj/xframe/devloper/XDevEditXQuery.cpp
@@ -7,12 +7,13 @@
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/xsedit.hpp>
#include <xcontrol/xcombobox.hpp>
#include "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDevEditXQuery : public xwin
class export XDevEditXQuery : public XDevEditPage
{
    public:
    XDevEditXQuery(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
    XDevEditXQuery(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDevEditXQuery* CreateInstance(void* implPtr, void* hWnd)
    {
@@ -68,7 +69,7 @@
            xstring v = e1.getAttribute(L"source");
            xc.SetText(L"" + v);
            xc = GetControl(L"linkname");
            xstring v = e1.getAttribute(L"link");
            v = e1.getAttribute(L"link");
            xc.SetText(L"" + v);
            KXMLDOMElement e2 = e.selectSingleNode(L"paras");
@@ -125,7 +126,7 @@
        e.appendChild(e1);
        root.documentElement().appendChild(e);
        xml y ();
        xml y;
        dw_list.DwUpdateTo(y);
        root.documentElement().appendChild(y.documentElement());
        //trace(y.xml());
@@ -249,6 +250,8 @@
    AttachEvent(L"WM_XCOMMAND",(FEvent)&XDevEditXQuery::OnXCommand);
    //获取焦点事件,用于重置工具条
    AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXQuery::OnSetFocus);
    return 1;
}
int OnInitial()
jrj/xframe/devloper/XDevEditXRuler.cpp
@@ -4,544 +4,149 @@
#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 "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
class export XDevEditXRuler : public XDevEditPage
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
    XDevEditXRuler(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    static XDevEditXRuler* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        XDevEditXRuler* pWin = new XDevEditXRuler(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    //xdwgrid    dw_list;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        xstring t = mle_output.GetText();
        mle_output.SetText(t + msg);
        /*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 OnProcessUrl(xstring kind, xstring url)
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        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());
        SetAgent();
        //重置工具条
        return 1;
    }
    xstring ProcessDevCmd(xstring cmd, xstring ext)
    int LoadData()
    {
        int nlen = 0;
        BYTE* pdata=nullptr;
        xaserver::ProcessCmd(GetServerUrl(),( L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext.c_str(), pdata, nlen);
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        if (content != L"")
        {
            xsedit xs = GetControl(L"xcontent");
            xs.LoadContent(content,L".xml");
        }
        return 1;
    }
        xstring str = ((LPARAM)pdata) + L"";
    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 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")
        xstring content;
        xsedit xs = GetControl(L"xcontent");
        xs.GetContent(content);
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"xmFileSave")
        {
            OpenWindow(L"dev:xpage[sqlWatch.vx]");
            return 1;
            //save xml content
            SaveContent(content);
        }
        if (comdid == L"xmCheckUrl")
        else if (comdid == L"xmValid")
        {
            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))
            xml x ;
            if (!x.loadXML(content))
            {
                hDomainItem = hItem;
            }
            else
            {
                hP2Item = GetP2Item(hItem);
                hDomainItem = tv_folder.GetParentItem(hP2Item);
            }
            e = tv_folder.GetItemData(hItem);
            if (hP2Item)
            {
                if (hP2Item != hItem)
                KXMLDOMParseError pError = x.parseError();
                if (pError)
                {
                    xstring guid = e.getAttribute(L"guid");
                    arg.AddArg(L"parent.guid", guid);
                    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);
                }
                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")
                else
                {
                    if (arg.GetArgString(L"image") == L"")
                        arg.AddArg(L"image", L"15");
                    arg.AddArg(L"folder", L"folder");
                    arg.AddArg(L"type", L"folder");
                    trace(L"XML é”™è¯¯");
                }
                return -1;
            }
            else
            /*xstring sType = OnGetType();
            if (sType == L"xml.xsd")
            {
                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;
                xstring sError;
                x.ValidSchema(content, &sError);
                trace(sError);
            }*/
        }
        else if (comdid == L"xmDeleteObject")
        else if (comdid == L"xmEditFind")
        {
            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;
            OpenWindow(L"dev:xpage[xcode.finddlg]");
        }
        else if (comdid == L"xmUpdateProject")
        else if (comdid == L"xmEditReplace")
        {
            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;
            OpenWindow(L"dev:xpage[xcode.replacedlg]");
        }
        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);
                }
            }
        }
        xutil::RestoreCursor(hCursor);
        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)
    int OnXCommand(TEvent* evt,LPARAM 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;
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXRuler::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXRuler::OnSetFocus);
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
@@ -549,12 +154,8 @@
    int onload()
    {
        sheet_Count = -1;
        OnInitial();
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        LoadData();
        return 1;
    }
jrj/xframe/devloper/XDevEditXWKDlg.cpp
@@ -4,544 +4,149 @@
#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 "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
class export XDevEditXRuler : public XDevEditPage
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
    XDevEditXRuler(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    static XDevEditXRuler* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        XDevEditXRuler* pWin = new XDevEditXRuler(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    //xdwgrid    dw_list;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        xstring t = mle_output.GetText();
        mle_output.SetText(t + msg);
        /*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 OnProcessUrl(xstring kind, xstring url)
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        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());
        SetAgent();
        //重置工具条
        return 1;
    }
    xstring ProcessDevCmd(xstring cmd, xstring ext)
    int LoadData()
    {
        int nlen = 0;
        BYTE* pdata=nullptr;
        xaserver::ProcessCmd(GetServerUrl(),( L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext.c_str(), pdata, nlen);
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        if (content != L"")
        {
            xsedit xs = GetControl(L"xcontent");
            xs.LoadContent(content,L".xml");
        }
        return 1;
    }
        xstring str = ((LPARAM)pdata) + L"";
    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 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")
        xstring content;
        xsedit xs = GetControl(L"xcontent");
        xs.GetContent(content);
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"xmFileSave")
        {
            OpenWindow(L"dev:xpage[sqlWatch.vx]");
            return 1;
            //save xml content
            SaveContent(content);
        }
        if (comdid == L"xmCheckUrl")
        else if (comdid == L"xmValid")
        {
            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))
            xml x ;
            if (!x.loadXML(content))
            {
                hDomainItem = hItem;
            }
            else
            {
                hP2Item = GetP2Item(hItem);
                hDomainItem = tv_folder.GetParentItem(hP2Item);
            }
            e = tv_folder.GetItemData(hItem);
            if (hP2Item)
            {
                if (hP2Item != hItem)
                KXMLDOMParseError pError = x.parseError();
                if (pError)
                {
                    xstring guid = e.getAttribute(L"guid");
                    arg.AddArg(L"parent.guid", guid);
                    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);
                }
                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")
                else
                {
                    if (arg.GetArgString(L"image") == L"")
                        arg.AddArg(L"image", L"15");
                    arg.AddArg(L"folder", L"folder");
                    arg.AddArg(L"type", L"folder");
                    trace(L"XML é”™è¯¯");
                }
                return -1;
            }
            else
            /*xstring sType = OnGetType();
            if (sType == L"xml.xsd")
            {
                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;
                xstring sError;
                x.ValidSchema(content, &sError);
                trace(sError);
            }*/
        }
        else if (comdid == L"xmDeleteObject")
        else if (comdid == L"xmEditFind")
        {
            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;
            OpenWindow(L"dev:xpage[xcode.finddlg]");
        }
        else if (comdid == L"xmUpdateProject")
        else if (comdid == L"xmEditReplace")
        {
            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;
            OpenWindow(L"dev:xpage[xcode.replacedlg]");
        }
        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);
                }
            }
        }
        xutil::RestoreCursor(hCursor);
        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)
    int OnXCommand(TEvent* evt,LPARAM 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;
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXRuler::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXRuler::OnSetFocus);
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
@@ -549,12 +154,8 @@
    int onload()
    {
        sheet_Count = -1;
        OnInitial();
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        LoadData();
        return 1;
    }
jrj/xframe/devloper/XDevEditXWorkNode.cpp
@@ -4,544 +4,149 @@
#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 "XDevEditPage.hpp"
using xml = KXMLDOMDocument;
class export XDeveloper : public xwin
class export XDevEditXRuler : public XDevEditPage
{
    public:
    XDeveloper(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd),mle_output(nullptr) {}
    XDevEditXRuler(void* implPtr, HWND hWnd) :XDevEditPage(implPtr, hWnd) {}
public:
    static XDeveloper* CreateInstance(void* implPtr, void* hWnd)
    static XDevEditXRuler* CreateInstance(void* implPtr, void* hWnd)
    {
        XDeveloper* pWin = new XDeveloper(implPtr, (HWND)hWnd);
        XDevEditXRuler* pWin = new XDevEditXRuler(implPtr, (HWND)hWnd);
        return pWin;
    }
private:    //
    xtreeview tv_folder;
    xcontrol mle_output;
    int sheet_Count;
public:
    int trace(xstring msg)
    //xdwgrid    dw_list;
    xnode    m_agentNode;    //Agent Condition
    xstring    m_agentCond;    //Agent Node
    int SetAgent()
    {
        xstring t = mle_output.GetText();
        mle_output.SetText(t + msg);
        /*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 OnProcessUrl(xstring kind, xstring url)
    //焦点激活处理函数
    int OnSetFocus(TEvent* evt,LPARAM param)
    {
        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());
        SetAgent();
        //重置工具条
        return 1;
    }
    xstring ProcessDevCmd(xstring cmd, xstring ext)
    int LoadData()
    {
        int nlen = 0;
        BYTE* pdata=nullptr;
        xaserver::ProcessCmd(GetServerUrl(),( L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext.c_str(), pdata, nlen);
        if (!GetWinParam()) return 1;
        xstring content = GetData();
        if (content != L"")
        {
            xsedit xs = GetControl(L"xcontent");
            xs.LoadContent(content,L".xml");
        }
        return 1;
    }
        xstring str = ((LPARAM)pdata) + L"";
    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 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")
        xstring content;
        xsedit xs = GetControl(L"xcontent");
        xs.GetContent(content);
        HCURSOR hCursor = xutil::SetCursorWait();
        if (comdid == L"xmFileSave")
        {
            OpenWindow(L"dev:xpage[sqlWatch.vx]");
            return 1;
            //save xml content
            SaveContent(content);
        }
        if (comdid == L"xmCheckUrl")
        else if (comdid == L"xmValid")
        {
            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))
            xml x ;
            if (!x.loadXML(content))
            {
                hDomainItem = hItem;
            }
            else
            {
                hP2Item = GetP2Item(hItem);
                hDomainItem = tv_folder.GetParentItem(hP2Item);
            }
            e = tv_folder.GetItemData(hItem);
            if (hP2Item)
            {
                if (hP2Item != hItem)
                KXMLDOMParseError pError = x.parseError();
                if (pError)
                {
                    xstring guid = e.getAttribute(L"guid");
                    arg.AddArg(L"parent.guid", guid);
                    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);
                }
                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")
                else
                {
                    if (arg.GetArgString(L"image") == L"")
                        arg.AddArg(L"image", L"15");
                    arg.AddArg(L"folder", L"folder");
                    arg.AddArg(L"type", L"folder");
                    trace(L"XML é”™è¯¯");
                }
                return -1;
            }
            else
            /*xstring sType = OnGetType();
            if (sType == L"xml.xsd")
            {
                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;
                xstring sError;
                x.ValidSchema(content, &sError);
                trace(sError);
            }*/
        }
        else if (comdid == L"xmDeleteObject")
        else if (comdid == L"xmEditFind")
        {
            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;
            OpenWindow(L"dev:xpage[xcode.finddlg]");
        }
        else if (comdid == L"xmUpdateProject")
        else if (comdid == L"xmEditReplace")
        {
            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;
            OpenWindow(L"dev:xpage[xcode.replacedlg]");
        }
        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);
                }
            }
        }
        xutil::RestoreCursor(hCursor);
        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)
    int OnXCommand(TEvent* evt,LPARAM 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;
        AttachEvent(L"WM_XCOMMAND", (FEvent)&XDevEditXRuler::OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", (FEvent)&XDevEditXRuler::OnSetFocus);
    }
    int OnInitial()
    {
        SetAgent();
        OnAttachEvent();
        return 1;
@@ -549,12 +154,8 @@
    int onload()
    {
        sheet_Count = -1;
        OnInitial();
        tv_folder = GetControl(L"DevExplorer");
        mle_output = GetControl(L"output");
        SetAgent(L"projects");
        LoadData();
        return 1;
    }
jrj/xframe/kobject/kutil.hpp
@@ -30,4 +30,9 @@
namespace Hxsoft { namespace XUtil{
    LPTSTR FormatDecimalString(LPTSTR  str, LPTSTR format, bool& bfree);
    LPTSTR ToXmlTextAndStartSpace(LPCTSTR str);
    LPTSTR ToHtmlTextAndStartSpace(LPCTSTR str);
    LPTSTR ToXmlText(LPCTSTR str);
    LPTSTR ToHtmlText(LPCTSTR str);
    LPTSTR UnXMLText(LPCTSTR str);
}}
jrj/xframe/wobject/xutil.hpp
@@ -58,6 +58,34 @@
        return Hxsoft::XUtil::FormatDecimalString(str, format, bfree);
    }
    static  xstring ToXmlTextAndStartSpace(xstring str)
    {
        wchar_t* xmlStr = Hxsoft::XUtil::ToXmlTextAndStartSpace(str.c_str());
        return xmlStr ? xmlStr : str;
    }
    static  xstring ToHtmlTextAndStartSpace(xstring str)
    {
        wchar_t* htmlStr = Hxsoft::XUtil::ToHtmlTextAndStartSpace(str.c_str());
        return htmlStr ? htmlStr : str;
    }
    static  xstring ToXmlText(xstring str)
    {
        wchar_t* xmlStr = Hxsoft::XUtil::ToXmlText(str.c_str());
        return xmlStr? xmlStr : str;
    }
    static  xstring ToHtmlText(xstring str)
    {
        wchar_t* htmlStr = Hxsoft::XUtil::ToHtmlText(str.c_str());
        return htmlStr? htmlStr : str;
    }
    static  xstring UnXMLText(xstring str)
    {
        wchar_t* xmlStr = Hxsoft::XUtil::UnXMLText(str.c_str());
        return xmlStr? xmlStr:str;
    }
public:
    static xstring GetModulePath()
    {
jrj/xframe/xcontrol/xcell.hpp
@@ -3,6 +3,7 @@
#include "wobject/xcontrol.hpp"
#include "kobject/kcell.hpp"
#include "wobject/xurl.hpp"
#include "wobject/xutil.hpp"
using kcell = Hxsoft::XFrame::XOffice::XCell::IXCell;
class xcell : public xcontrol
@@ -300,6 +301,11 @@
    {
        return GetKCell()->SetFixedCols(value);
    }
    xstring GetItemXmlString(int ARow, int ACol)
    {
        return xutil::ToXmlText(GetKCell()->GetItemString(ARow, ACol));
    }
};
jrj/xframe/xcontrol/xdwgrid.hpp
@@ -572,6 +572,24 @@
        DwRetrieve(ServerUrl, src, arg.GetString());
        return 1;
    }
    xstring GetItemDisplayXmlString(int nRow, int nColumn, kdwgrid::DWBuffer dwBuffer = kdwgrid::dbuf_normal)
    {
        return xutil::ToXmlText(getKReport()->GetItemDisplayString(nRow, nColumn, dwBuffer));
    }
    xstring GetItemDisplayXmlString(int nRow, xstring ColumnName, kdwgrid::DWBuffer dwBuffer = kdwgrid::dbuf_normal)
    {
        return xutil::ToXmlText(getKReport()->GetItemDisplayString(nRow, ColumnName.c_str(), dwBuffer));
    }
    xstring GetItemXmlString(int nRow, int nColumn, kdwgrid::DWBuffer dwBuffer = kdwgrid::dbuf_normal)
    {
        return xutil::ToXmlText(getKReport()->GetItemString_(nRow, nColumn, dwBuffer));
    }
    xstring GetItemXmlString(int nRow, xstring ColumnName, kdwgrid::DWBuffer dwBuffer = kdwgrid::dbuf_normal)
    {
        return xutil::ToXmlText(getKReport()->GetItemString_(nRow, ColumnName.c_str(), dwBuffer));
    }
};
jrj/xframe/xcontrol/xdwtable.hpp
@@ -559,6 +559,13 @@
        return 0;
    }
    xstring GetItemXmlString(int nRow, int nColumn, kdwtable::DWBuffer dwBuffer = kdwtable::dbuf_normal) {
        return xutil::ToXmlText(GetDwTable()->GetItemString_(nRow, nColumn, dwBuffer));
    }
    xstring GetItemXmlString(int nRow, LPCTSTR ColumnName, kdwtable::DWBuffer dwBuffer = kdwtable::dbuf_normal) {
        return xutil::ToXmlText(GetDwTable()->GetItemString_(nRow, ColumnName, dwBuffer));
    }
};