From 06b2164e72a30ada44d933b008f701904acdb982 Mon Sep 17 00:00:00 2001 From: xj qian <qianxj15@sina.com> Date: 星期二, 09 七月 2024 15:54:10 +0800 Subject: [PATCH] update document datetimepick --- jrj/project/tradedocument/DocFileSaveDlg.cpp | 235 +++++++++++ jrj/xframe/xcontrol/xlistview.hpp | 5 jrj/xframe/xcontrol/xdatetimepick.hpp | 58 ++ jrj/project/tradedocument/DocSelectDlg.cpp | 134 ++++++ jrj/ext-jrj/ext-jrj.vcxproj | 5 jrj/project/tradedocument/TDocumentWin.cpp | 494 ++++++++++++++++++++++++ jrj/xframe/kobject/kxml.hpp | 4 jrj/ext-jrj/ext-jrj.vcxproj.filters | 18 jrj/project/tradedocument/HelpDocWin.cpp | 235 +++++++++++ 9 files changed, 1,187 insertions(+), 1 deletions(-) diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj index 61bf544..29a0f16 100644 --- a/jrj/ext-jrj/ext-jrj.vcxproj +++ b/jrj/ext-jrj/ext-jrj.vcxproj @@ -226,6 +226,7 @@ <ClInclude Include="..\xframe\xcontrol\xcell.hpp" /> <ClInclude Include="..\xframe\xcontrol\xcheckbox.hpp" /> <ClInclude Include="..\xframe\xcontrol\xcombobox.hpp" /> + <ClInclude Include="..\xframe\xcontrol\xdatetimepick.hpp" /> <ClInclude Include="..\xframe\xcontrol\xdwgrid.hpp" /> <ClInclude Include="..\xframe\xcontrol\xdwpages.hpp" /> <ClInclude Include="..\xframe\xcontrol\xdwtable.hpp" /> @@ -541,6 +542,10 @@ </ClCompile> <ClCompile Include="..\project\start.vframe.vbusiness.cpp" /> <ClCompile Include="..\project\total3\ViewTotalWin.cpp" /> + <ClCompile Include="..\project\tradedocument\DocFileSaveDlg.cpp" /> + <ClCompile Include="..\project\tradedocument\DocSelectDlg.cpp" /> + <ClCompile Include="..\project\tradedocument\HelpDocWin.cpp" /> + <ClCompile Include="..\project\tradedocument\TDocumentWin.cpp" /> <ClCompile Include="..\project\viewobject\view.base.hpp" /> <ClCompile Include="..\project\vindexform.cpp" /> <ClCompile Include="..\project\vindexformex.cpp" /> diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters index e72e70b..e057028 100644 --- a/jrj/ext-jrj/ext-jrj.vcxproj.filters +++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters @@ -100,6 +100,9 @@ <Filter Include="vbusiness\analysis"> <UniqueIdentifier>{27c3e1cb-c8de-4a10-8a61-bacae62112e3}</UniqueIdentifier> </Filter> + <Filter Include="vbusiness\tradedoucment"> + <UniqueIdentifier>{6a683d68-f569-41c4-a72d-4acb7b71ab4e}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClInclude Include="framework.h"> @@ -343,6 +346,9 @@ <Filter>xframe\kobject</Filter> </ClInclude> <ClInclude Include="..\xframe\xcontrol\xcheckbox.hpp"> + <Filter>xframe\xcontrol</Filter> + </ClInclude> + <ClInclude Include="..\xframe\xcontrol\xdatetimepick.hpp"> <Filter>xframe\xcontrol</Filter> </ClInclude> </ItemGroup> @@ -659,5 +665,17 @@ <ClCompile Include="..\project\total3\ViewTotalWin.cpp"> <Filter>vbusiness\total</Filter> </ClCompile> + <ClCompile Include="..\project\tradedocument\TDocumentWin.cpp"> + <Filter>vbusiness\tradedoucment</Filter> + </ClCompile> + <ClCompile Include="..\project\tradedocument\HelpDocWin.cpp"> + <Filter>vbusiness\tradedoucment</Filter> + </ClCompile> + <ClCompile Include="..\project\tradedocument\DocFileSaveDlg.cpp"> + <Filter>vbusiness\tradedoucment</Filter> + </ClCompile> + <ClCompile Include="..\project\tradedocument\DocSelectDlg.cpp"> + <Filter>vbusiness\tradedoucment</Filter> + </ClCompile> </ItemGroup> </Project> \ No newline at end of file diff --git a/jrj/project/tradedocument/DocFileSaveDlg.cpp b/jrj/project/tradedocument/DocFileSaveDlg.cpp new file mode 100644 index 0000000..5e13743 --- /dev/null +++ b/jrj/project/tradedocument/DocFileSaveDlg.cpp @@ -0,0 +1,235 @@ +#include <wobject/xstring.hpp> +#include <xcontrol/xtreeview.hpp> +#include <xcontrol/xdwgrid.hpp> +#include <xcontrol/xlayersheet.hpp> +#include <xcontrol/xcell.hpp> +#include <xcontrol/xlistview.hpp> + +#include "vbusiness/vframe/maint.vframe.vbusiness.hpp" +#include "viewobject/view.base.hpp" + +using xml = KXMLDOMDocument; +class __declspec(dllexport) HelpDocWin : public xframe +{ +public: + HelpDocWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} +public: + static HelpDocWin* CreateInstance(void* implPtr, void* hWnd) + { + return new HelpDocWin(implPtr, (HWND)hWnd); + } + +public: + //xdwgrid dw_list; + xlistview lv_view; + xnode m_agentNode; //Agent Condition + int columnCount; + + int SetAgent() + { + xstring xfNodeAgentArea = L"agentarea"; + xnode anode = GetAgentNode(xfNodeAgentArea); + if (m_agentNode) + { + SetAgentNode(anode, m_agentNode); + } + else + { + KXMLDOMElement xframeElement = GetElement(); + KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); + if (agent) + { + xstring s = agent.xml(); + m_agentNode = SetAgentNode(anode, s); + } + } + return 1; + } + + //焦点激活处理函数 + int OnSetFocus(TEvent* evt,LPARAM param) + { + //重置工具条 + SetAgent(); + return 1; + } + + int OnListViewDoubleClicked(TEvent* evt,LPARAM param) + { + //重置工具条 + //SetAgent(); + OnDocumentOpen(); + CloseWindow(); + return 1; + } + + int OnDocumentOpen() + { + int LVNI_ALL = 0x0000; + int LVNI_FOCUSED = 0x0001; + int LVNI_SELECTED = 0x0002; + int LVNI_CUT = 0x0004; + int LVNI_DROPHILITED = 0x0008; + + int nItem = lv_view.GetNextItem( -1, LVNI_FOCUSED); + if (nItem < 0) return 1; + + int LVIF_PARAM = 0x0004; + + lvitem lvItem; + lvItem.iItem = nItem; + lvItem.iSubItem = 0; + lvItem.mask = LVIF_PARAM; + + lv_view.GetItem( lvItem); + KXMLDOMElement ele = lvItem.lParam; + + xstring src = ele.getAttribute(L"url"); + xstring file = L""; + if (src.find(L"/file/") > 0) file = src.mid(src.find(L"/file/") + 6, 9999); + if (file.find(L"/file/") >= 0) file = file.mid(file.find(L"/file/") + 6, 9999); + if (file.find(L"file/") >= 0) file = file.mid(file.find(L"file/") + 5, 9999); + if (file == L"") return 1; + //alert(file); + xstring name = ele.getAttribute(L"caption"); + /* + const xstring d = m_Html.GetData(p.object); + if(d == L"") return -1; + xstring file = d.mid(0, d.find(L"|##@@|",0)); + xstring name = d.mid(d.find(L"|##@@|",0)+6, d.length()); + */ + + xaserver::CreateDirectory(L"C:/Temp"); + xstring str = file.left(2); + xstring ext = L""; + if (name.find(L".") >= 0) ext = name.mid(name.find(L"."), name.length()); + xstring sfile = file;// file.left(file.length() - 4); + //trace(L"--"+ext +L" " + L"/business/attachment/"+str+L"/"+ file); + //int openRet = xaserver::DownLoadFile(GetServerUrl(),L"/business/attachment/"+str+L"/"+ file,name,L"C:/Temp/"+name); + int openRet = xaserver::DownLoadFile(GetServerUrl(), L"/business/attachment/" + str + L"/" + file + L".jpg", L"", L"C:/Temp/" + sfile + ext); + + //alert(L"/business/attachment/"+str+L"/"+ file+L".jpg"); + if (openRet < 0) + { + alert(L"文件打开失败1!"); + return -1; + } + //openRet = win32::ShellExecute(0,L"open",L"C:/Temp/"+name,L"",L"",5); + openRet = ShellExecuteW(0, L"open", L"C:/Temp/" + sfile + ext, L"", L"", 5); + if (openRet < 32) + { + alert(L"文件打开失败2!"); + return -1; + } + + return -1; + } + + + //命令发布函数 + int OnCmdDispatch(xstring comdid) + { + return 0; + } + + //命令处理事件 + int OnXCommand(TEvent* evt, int param) + { + return OnCmdDispatch(evt->xcommand.pStrID); + } + + int OnAttachEvent() + { + //绑定工具条点击事件 + AttachEvent(L"WM_XCOMMAND", (FEvent)&HelpDocWin::OnXCommand); + //获取焦点事件,用于重置工具条 + AttachEvent(L"WM_SETFOCUS", (FEvent)&HelpDocWin::OnSetFocus); + return 1; + } + + /* + int OnRetrieve() + { + xml x = new xml; + x.setNativePointer(xml::CreateInstance()); + xaserverarg arg = new xaserverarg; + arg.setNativePointer(arg.CreateInstance()); + arg.AddArg(L"xxx",L"xxx"); + if (getUrl(L"",arg.GetString(),x)!=1) + { + trace(x.GetXmlDoc().text); + return -1; + }else + { + //dw_list.Retrieve(x); + //dw_list.Redraw(); + } + return 1; + } + */ + + int SetListViewHeaderColumn(xstring Url) + { + const int LVCFMT_LEFT = 0; + for (int i = 0; i < 3; i++) lv_view.DeleteColumn( 1); + //if(Url==L"") + //{ + lv_view.InsertColumn( 0, L"创建日期", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn( 0, L"创建人员", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn( 0, L"名称", 0, 180, 0); + columnCount = 3; + //} + return 1; + } + + int Retrieve() + { + xstring src = L"object/knowledge"; + //xstring src=L"data/SettleExchange"; + xml x = ViewObject::RetrieveData(L"/sale/data/TDocument3/FolderListHelp"); + if (x) + { + //alert(x.GetXml()); + KXMLDOMElement ele = x.documentElement(); + KXMLDOMNodeList nlist = ele.selectNodes(L"*"); + int s = nlist.length(); + if (s > 0) + { + for (int i = 0; i < s; i++) + { + KXMLDOMElement e = nlist.item(i); + xstring name = e.getAttribute(L"caption"); + int nItem = lv_view.InsertItemEx( 0, name, 14, e); + + lv_view.SetItemText( nItem, 1, e.getAttribute(L"Creator")); + lv_view.SetItemText( nItem, 2, e.getAttribute(L"CreateDate")); + + } + } + } + return 1; + } + + int onload() + { + //dw_list = GetControl(L"xxx"); + //dw_list.openUrl(L"xxx"); + lv_view = GetControl(L"lv_view"); + + columnCount = 0; + SetListViewHeaderColumn(L""); + + AttachEvent(L"lv_view", L"NM_DBLCLK", (FEvent)&HelpDocWin::OnListViewDoubleClicked); + + Retrieve(); + + return 1; + } + + int onloaded() + { + SetAgent(); + + return 1; + } +}; \ No newline at end of file diff --git a/jrj/project/tradedocument/DocSelectDlg.cpp b/jrj/project/tradedocument/DocSelectDlg.cpp new file mode 100644 index 0000000..e656d33 --- /dev/null +++ b/jrj/project/tradedocument/DocSelectDlg.cpp @@ -0,0 +1,134 @@ +#include <wobject/xstring.hpp> +#include <xcontrol/xtreeview.hpp> +#include <xcontrol/xdwgrid.hpp> +#include <xcontrol/xlayersheet.hpp> +#include <xcontrol/xcell.hpp> +#include <xcontrol/xlistview.hpp> + +#include "vbusiness/vframe/maint.vframe.vbusiness.hpp" +#include "viewobject/view.base.hpp" + +using xml = KXMLDOMDocument; +class __declspec(dllexport) DocFileSaveDlg : public xframe +{ +public: + DocFileSaveDlg(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} +public: + static DocFileSaveDlg* CreateInstance(void* implPtr, void* hWnd) + { + return new DocFileSaveDlg(implPtr, (HWND)hWnd); + } + + + xlistview lv_view; + xnode m_agentNode; //Agent Condition + int columnCount; + + //焦点激活处理函数 + int OnSetFocus(TEvent* evt, LPARAM param) + { + //重置工具条 + return 1; + } + + + //命令发布函数 + int OnCmdDispatch(string comdid) + { + if (comdid == L"xmOk") + { + string filename = xcontrol(GetControl(L"filename")).GetText(); + if (filename == L"") return 1; + xaserverarg arg = GetArg(); + if (!arg) return 1; + arg.AddArg(L"result", L"ok"); + arg.AddArg(L"filename", filename); + CloseWindow(); + return 1; + } + else if (comdid == L"xmCancel") + { + CloseWindow(); + return 1; + } + return 0; + } + + //命令处理事件 + int OnXCommand(TEvent* evt, int param) + { + return OnCmdDispatch(evt->xcommand.pStrID); + } + + int OnAttachEvent() + { + //绑定工具条点击事件 + AttachEvent(L"WM_XCOMMAND", (FEvent)& DocFileSaveDlg::OnXCommand); + //获取焦点事件,用于重置工具条 + AttachEvent(L"WM_SETFOCUS", (FEvent)&DocFileSaveDlg::OnSetFocus); + + return 1; + } + + + int SetListViewHeaderColumn(string Url) + { + const int LVCFMT_LEFT = 0; + for (int i = 0; i < 3; i++) lv_view.DeleteColumn( 1); + lv_view.InsertColumn( 0, L"创建人员", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn( 0, L"创建日期", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn( 0, L"名称", 0, 120, 0); + columnCount = 3; + return 1; + } + + int Retrieve(string src) + { + xml x = ViewObject::RetrieveData(L"/sale/data/TDocument3/folder/list", L"src", src); + if (x) + { + KXMLDOMNodeList nlist = x.documentElement().selectNodes(L"*"); + int s = nlist.length(); + if (s > 0) + { + for (int i = 0; i < s; i++) + { + KXMLDOMElement e = nlist.item(i); + string name = e.getAttribute(L"caption"); + int nItem = lv_view.InsertItemEx(0, name, 23, e); + + lv_view.SetItemText(nItem, 1, e.getAttribute(L"Creator")); + lv_view.SetItemText(nItem, 2, e.getAttribute(L"CreateDate")); + } + } + } + return 1; + } + + int onload() + { + SetArg(); + lv_view = GetControl(L"lv_view"); + //lv_list.SetdwStyle0); + + columnCount = 0; + SetListViewHeaderColumn(L""); + OnAttachEvent(); + + if (GetWinParam()) + { + xaserverarg arg = GetArg(); + string src = arg.GetArgString(L"src"); + Retrieve(src); + } + + return 1; + } + + int onloaded() + { + //SetAgent(); + + return 1; + } +}; \ No newline at end of file diff --git a/jrj/project/tradedocument/HelpDocWin.cpp b/jrj/project/tradedocument/HelpDocWin.cpp new file mode 100644 index 0000000..5e13743 --- /dev/null +++ b/jrj/project/tradedocument/HelpDocWin.cpp @@ -0,0 +1,235 @@ +#include <wobject/xstring.hpp> +#include <xcontrol/xtreeview.hpp> +#include <xcontrol/xdwgrid.hpp> +#include <xcontrol/xlayersheet.hpp> +#include <xcontrol/xcell.hpp> +#include <xcontrol/xlistview.hpp> + +#include "vbusiness/vframe/maint.vframe.vbusiness.hpp" +#include "viewobject/view.base.hpp" + +using xml = KXMLDOMDocument; +class __declspec(dllexport) HelpDocWin : public xframe +{ +public: + HelpDocWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} +public: + static HelpDocWin* CreateInstance(void* implPtr, void* hWnd) + { + return new HelpDocWin(implPtr, (HWND)hWnd); + } + +public: + //xdwgrid dw_list; + xlistview lv_view; + xnode m_agentNode; //Agent Condition + int columnCount; + + int SetAgent() + { + xstring xfNodeAgentArea = L"agentarea"; + xnode anode = GetAgentNode(xfNodeAgentArea); + if (m_agentNode) + { + SetAgentNode(anode, m_agentNode); + } + else + { + KXMLDOMElement xframeElement = GetElement(); + KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); + if (agent) + { + xstring s = agent.xml(); + m_agentNode = SetAgentNode(anode, s); + } + } + return 1; + } + + //焦点激活处理函数 + int OnSetFocus(TEvent* evt,LPARAM param) + { + //重置工具条 + SetAgent(); + return 1; + } + + int OnListViewDoubleClicked(TEvent* evt,LPARAM param) + { + //重置工具条 + //SetAgent(); + OnDocumentOpen(); + CloseWindow(); + return 1; + } + + int OnDocumentOpen() + { + int LVNI_ALL = 0x0000; + int LVNI_FOCUSED = 0x0001; + int LVNI_SELECTED = 0x0002; + int LVNI_CUT = 0x0004; + int LVNI_DROPHILITED = 0x0008; + + int nItem = lv_view.GetNextItem( -1, LVNI_FOCUSED); + if (nItem < 0) return 1; + + int LVIF_PARAM = 0x0004; + + lvitem lvItem; + lvItem.iItem = nItem; + lvItem.iSubItem = 0; + lvItem.mask = LVIF_PARAM; + + lv_view.GetItem( lvItem); + KXMLDOMElement ele = lvItem.lParam; + + xstring src = ele.getAttribute(L"url"); + xstring file = L""; + if (src.find(L"/file/") > 0) file = src.mid(src.find(L"/file/") + 6, 9999); + if (file.find(L"/file/") >= 0) file = file.mid(file.find(L"/file/") + 6, 9999); + if (file.find(L"file/") >= 0) file = file.mid(file.find(L"file/") + 5, 9999); + if (file == L"") return 1; + //alert(file); + xstring name = ele.getAttribute(L"caption"); + /* + const xstring d = m_Html.GetData(p.object); + if(d == L"") return -1; + xstring file = d.mid(0, d.find(L"|##@@|",0)); + xstring name = d.mid(d.find(L"|##@@|",0)+6, d.length()); + */ + + xaserver::CreateDirectory(L"C:/Temp"); + xstring str = file.left(2); + xstring ext = L""; + if (name.find(L".") >= 0) ext = name.mid(name.find(L"."), name.length()); + xstring sfile = file;// file.left(file.length() - 4); + //trace(L"--"+ext +L" " + L"/business/attachment/"+str+L"/"+ file); + //int openRet = xaserver::DownLoadFile(GetServerUrl(),L"/business/attachment/"+str+L"/"+ file,name,L"C:/Temp/"+name); + int openRet = xaserver::DownLoadFile(GetServerUrl(), L"/business/attachment/" + str + L"/" + file + L".jpg", L"", L"C:/Temp/" + sfile + ext); + + //alert(L"/business/attachment/"+str+L"/"+ file+L".jpg"); + if (openRet < 0) + { + alert(L"文件打开失败1!"); + return -1; + } + //openRet = win32::ShellExecute(0,L"open",L"C:/Temp/"+name,L"",L"",5); + openRet = ShellExecuteW(0, L"open", L"C:/Temp/" + sfile + ext, L"", L"", 5); + if (openRet < 32) + { + alert(L"文件打开失败2!"); + return -1; + } + + return -1; + } + + + //命令发布函数 + int OnCmdDispatch(xstring comdid) + { + return 0; + } + + //命令处理事件 + int OnXCommand(TEvent* evt, int param) + { + return OnCmdDispatch(evt->xcommand.pStrID); + } + + int OnAttachEvent() + { + //绑定工具条点击事件 + AttachEvent(L"WM_XCOMMAND", (FEvent)&HelpDocWin::OnXCommand); + //获取焦点事件,用于重置工具条 + AttachEvent(L"WM_SETFOCUS", (FEvent)&HelpDocWin::OnSetFocus); + return 1; + } + + /* + int OnRetrieve() + { + xml x = new xml; + x.setNativePointer(xml::CreateInstance()); + xaserverarg arg = new xaserverarg; + arg.setNativePointer(arg.CreateInstance()); + arg.AddArg(L"xxx",L"xxx"); + if (getUrl(L"",arg.GetString(),x)!=1) + { + trace(x.GetXmlDoc().text); + return -1; + }else + { + //dw_list.Retrieve(x); + //dw_list.Redraw(); + } + return 1; + } + */ + + int SetListViewHeaderColumn(xstring Url) + { + const int LVCFMT_LEFT = 0; + for (int i = 0; i < 3; i++) lv_view.DeleteColumn( 1); + //if(Url==L"") + //{ + lv_view.InsertColumn( 0, L"创建日期", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn( 0, L"创建人员", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn( 0, L"名称", 0, 180, 0); + columnCount = 3; + //} + return 1; + } + + int Retrieve() + { + xstring src = L"object/knowledge"; + //xstring src=L"data/SettleExchange"; + xml x = ViewObject::RetrieveData(L"/sale/data/TDocument3/FolderListHelp"); + if (x) + { + //alert(x.GetXml()); + KXMLDOMElement ele = x.documentElement(); + KXMLDOMNodeList nlist = ele.selectNodes(L"*"); + int s = nlist.length(); + if (s > 0) + { + for (int i = 0; i < s; i++) + { + KXMLDOMElement e = nlist.item(i); + xstring name = e.getAttribute(L"caption"); + int nItem = lv_view.InsertItemEx( 0, name, 14, e); + + lv_view.SetItemText( nItem, 1, e.getAttribute(L"Creator")); + lv_view.SetItemText( nItem, 2, e.getAttribute(L"CreateDate")); + + } + } + } + return 1; + } + + int onload() + { + //dw_list = GetControl(L"xxx"); + //dw_list.openUrl(L"xxx"); + lv_view = GetControl(L"lv_view"); + + columnCount = 0; + SetListViewHeaderColumn(L""); + + AttachEvent(L"lv_view", L"NM_DBLCLK", (FEvent)&HelpDocWin::OnListViewDoubleClicked); + + Retrieve(); + + return 1; + } + + int onloaded() + { + SetAgent(); + + return 1; + } +}; \ No newline at end of file diff --git a/jrj/project/tradedocument/TDocumentWin.cpp b/jrj/project/tradedocument/TDocumentWin.cpp new file mode 100644 index 0000000..df1a1c6 --- /dev/null +++ b/jrj/project/tradedocument/TDocumentWin.cpp @@ -0,0 +1,494 @@ +#include <wobject/xstring.hpp> +#include <xcontrol/xtreeview.hpp> +#include <xcontrol/xdwgrid.hpp> +#include <xcontrol/xlayersheet.hpp> +#include <xcontrol/xcell.hpp> +#include <xcontrol/xlistview.hpp> + +#include "vbusiness/vframe/maint.vframe.vbusiness.hpp" +#include "viewobject/view.base.hpp" + +using xml = KXMLDOMDocument; +class __declspec(dllexport) TDocumentWin : public xframe +{ +public: + TDocumentWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} +public: + static TDocumentWin* CreateInstance(void* implPtr, void* hWnd) + { + return new TDocumentWin(implPtr, (HWND)hWnd); + } + +public: + //xdwgrid dw_list; + xtreeview tv_folder; + xlistview lv_view; + xnode m_agentNode; //Agent Condition + int columnCount; + + int SetAgent() + { + xstring xfNodeAgentArea = L"agentarea"; + xnode anode = GetAgentNode(xfNodeAgentArea); + if (m_agentNode) + { + SetAgentNode(anode, m_agentNode); + } + else + { + KXMLDOMElement xframeElement = GetElement(); + KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); + if (agent) + { + xstring s = agent.xml(); + m_agentNode = SetAgentNode(anode, s); + } + } + return 1; + } + + //焦点激活处理函数 + int OnSetFocus(TEvent* evt, LPARAM param) + { + //重置工具条 + SetAgent(); + return 1; + } + + int OnListViewDoubleClicked(TEvent* evt,LPARAM param) + { + //重置工具条 + //SetAgent(); + return OnDocumentOpen(); + } + + int OnDocumentOpen() + { + int LVNI_ALL = 0x0000; + int LVNI_FOCUSED = 0x0001; + int LVNI_SELECTED = 0x0002; + int LVNI_CUT = 0x0004; + int LVNI_DROPHILITED = 0x0008; + + int nItem = lv_view.GetNextItem(-1, LVNI_FOCUSED); + if (nItem < 0) return 1; + + int LVIF_PARAM = 0x0004; + + lvitem lvItem; + lvItem.iItem = nItem; + lvItem.iSubItem = 0; + lvItem.mask = LVIF_PARAM; + + lv_view.GetItem( lvItem); + KXMLDOMElement ele =lvItem.lParam; + + xstring src = ele.getAttribute(L"url"); + xstring file = L""; + if (src.find(L"/file/") > 0) file = src.mid(src.find(L"/file/") + 6, 9999); + if (file.find(L"/file/") >= 0) file = file.mid(file.find(L"/file/") + 6, 9999); + if (file.find(L"file/") >= 0) file = file.mid(file.find(L"file/") + 5, 9999); + if (file == L"") return 1; + //alert(file); + xstring name = ele.getAttribute(L"caption"); + /* + const xstring d = m_Html.GetData(p.object); + if(d == L"") return -1; + xstring file = d.mid(0, d.find(L"|##@@|",0)); + xstring name = d.mid(d.find(L"|##@@|",0)+6, d.length()); + */ + + xaserver::CreateDirectory(L"C:/Temp"); + xstring str = file.left(2); + xstring ext = L""; + if (name.find(L".") >= 0) ext = name.mid(name.find(L"."), name.length()); + xstring sfile = file;// file.left(file.length() - 4); + //trace(L"--"+ext +L" " + L"/business/attachment/"+str+L"/"+ file); + //int openRet = xaserver::DownLoadFile(GetServerUrl(),L"/business/attachment/"+str+L"/"+ file,name,L"C:/Temp/"+name); + int openRet = xaserver::DownLoadFile(GetServerUrl(), L"/business/attachment/" + str + L"/" + file + L".jpg", L"", L"C:/Temp/" + sfile + ext); + + //alert(L"/business/attachment/"+str+L"/"+ file+L".jpg"); + if (openRet < 0) + { + alert(L"文件打开失败1!"); + return -1; + } + //openRet =ShellExecute(0,L"open",L"C:/Temp/"+name,L"",L"",5); + openRet =ShellExecuteW(0, L"open", L"C:/Temp/" + sfile + ext, L"", L"", 5); + if (openRet < 32) + { + alert(L"文件打开失败2!"); + return -1; + } + + return -1; + } + + int OnAddAttachment() + { + xstring sguid = publiccode::GetGuid(); + xstring sname = sguid; + xstring str = sname.mid(0, 2); + str = str.toUpper(); + xstring suri = L"attachment" + str; + xstring ret = xaserver::UploadFile(suri, sname + L".jpg", GetHWND(), L"", false); + if (ret == L"-1") + { + alert(L"上传的文件没选择!"); + return 0; + } + else + { + while (ret.find(L"\\", 0) >= 0) + ret = ret.mid(ret.find(L"\\", 0) + 1, 9999); + + HTREEITEM h = tv_folder.GetSelectedItem(); + KXMLDOMElement ele = tv_folder.GetItemData(h); + xstring myurl = ele.getAttribute(L"url"); + //alert(myurl); + + xml x ; + xaserverarg args; + args.setNativePointer(args.CreateInstance()); + args.AddArg(L"myurl", myurl); + args.AddArg(L"name", ret); + args.AddArg(L"filepath", sname); + args.AddArg(L"fileext", L""); + args.AddArg(L"filesource", ret); + + xml x1 = ViewObject::RetrieveData(L"/sale/data/TDocument3/attachment/GetFileFormat", L"Name", ret); + KXMLDOMNodeList items = x1.selectNodes(L"data/Item"); + KXMLDOMNode t = items.item(0); + xstring FileFormat = L""; + if (t.selectSingleNode(L"FileFormat"))FileFormat = t.selectSingleNode(L"FileFormat").text(); + if (FileFormat != L"pdf" && FileFormat != L"PDF" && FileFormat != L"mp4" && FileFormat != L"avi" && FileFormat != L"wmv" && FileFormat != L"mpg" + && FileFormat != L"mpeg" && FileFormat != L"mov" && FileFormat != L"rm" && FileFormat != L"ram" && FileFormat != L"swf" && FileFormat != L"flv") + { + alert(L"文件格式错误,请上传PDF文档或者视频!"); + return 0; + } + + if (xurl::get(L"/sale/data/TDocument3/attachment/add", args.GetString(), x) != 1) + { + alert(L"保存出错了!"); + return 0; + } + else + { + alert(x.text()); + //OnRetrieve(); + } + } + return 0; + } + + int OnDeleteFile() + { + int LVNI_ALL = 0x0000; + int LVNI_FOCUSED = 0x0001; + int LVNI_SELECTED = 0x0002; + int LVNI_CUT = 0x0004; + int LVNI_DROPHILITED = 0x0008; + + int nItem = lv_view.GetNextItem( -1, LVNI_FOCUSED); + if (nItem < 0) return 1; + + int LVIF_PARAM = 0x0004; + + lvitem lvItem; + lvItem.iItem = nItem; + lvItem.iSubItem = 0; + lvItem.mask = LVIF_PARAM; + + lv_view.GetItem( lvItem); + KXMLDOMElement ele =lvItem.lParam; + + xstring src = ele.getAttribute(L"url"); + xstring file = L""; + if (src.find(L"/file/") > 0) file = src.mid(src.find(L"/file/") + 6, 9999); + if (file.find(L"/file/") >= 0) file = file.mid(file.find(L"/file/") + 6, 9999); + if (file.find(L"file/") >= 0) file = file.mid(file.find(L"file/") + 5, 9999); + if (file == L"") return 1; + + xstring name = ele.getAttribute(L"caption"); + if (MessageBox(GetHWND(), L"确定要删除文件" + name + L"?", L"提示", 1) == 2) + return 0; + + xaserverarg arg; + arg.AddArg(L"filepath", file); + xml x; + if (xurl::get(L"/sale/data/TDocument3/file/delete", arg.GetString(), x) != 1) + { + alert(L"删除出错了!"); + return 1; + } + else + { + //alert(x.text); + lv_view.DeleteItem(nItem); + } + + return 1; + } + + //命令发布函数 + int OnCmdDispatch(xstring comdid) + { + xstring userno = publiccode::GetUser().no; + HTREEITEM h = tv_folder.GetSelectedItem(); + KXMLDOMElement ele = tv_folder.GetItemData(h); + xstring caption = ele.getAttribute(L"caption"); + + if (comdid == L"xmUpload") + { + + /* if(caption ==L"采购部" || caption ==L"跟单部" || caption ==L"业务部" ||caption ==L"公司共享" ) + { + + if(userno ==L"admin" || userno ==L"00301" || userno ==L"00601" || userno ==L"00701" ) + { + OnAddAttachment(); + } + }*/ + /* if(caption ==L"业务部优秀案例" || caption ==L"采购部优秀案例" ) + {*/ + + if (userno == L"admin" || userno == L"00301" || userno == L"00601" || userno == L"00701" || userno == L"00102" || userno == L"00201") + { + OnAddAttachment(); + } + //} + return 1; + } + if (comdid == L"xmOpen") + { + return OnDocumentOpen(); + } + if (comdid == L"xmDelete") + { + /*if(caption ==L"采购部" || caption ==L"跟单部" || caption ==L"外销部" ||caption ==L"公司共享" ) + { + + if(userno ==L"admin" || userno ==L"00301" || userno ==L"00601" || userno ==L"00701" ) + { + OnDeleteFile(); + } + } + if(caption ==L"业务部优秀案例" || caption ==L"采购部优秀案例" ) + {*/ + + + if (userno == L"admin" || userno == L"00301" || userno == L"00601" || userno == L"00701" || userno == L"00102" || userno == L"00201") + { + OnDeleteFile(); + } + //} + return 1; + } + if (comdid == L"xmSearch") + { + OnRetrieve(); + return 1; + } + + return 0; + } + + int OnRetrieve() + { + xstring urlEx = L""; + xcontrol xc = GetControl(L"frame:sle_search"); + xstring Search = xc.GetText(); + HTREEITEM h = tv_folder.GetSelectedItem(); + KXMLDOMElement ele = tv_folder.GetItemData(h); + urlEx = ele.getAttribute(L"url"); + + trace(Search + L"******" + urlEx); + if (urlEx == L"") + { + alert(L"选择文件目录!"); + return 1; + } + else + { + xaserverarg arg ; + arg.AddArg(L"url", urlEx); + arg.AddArg(L"Search", Search); + OpenWindow(L"dev:xpage[trade.helpEx.vx]", arg); + return 1; + } + + return 1; + } + + //命令处理事件 + int OnXCommand(TEvent* evt, LPARAM param) + { + return OnCmdDispatch(evt->xcommand.pStrID); + } + + int OnAttachEvent() + { + //绑定工具条点击事件 + AttachEvent(L"WM_XCOMMAND", (FEvent)&TDocumentWin::OnXCommand); + //获取焦点事件,用于重置工具条 + AttachEvent(L"WM_SETFOCUS", (FEvent) & TDocumentWin::OnSetFocus); + + return 1; + } + + int createSubTree(HTREEITEM h, KXMLDOMElement ele) + { + KXMLDOMNodeList nlist = ele.selectNodes(L"folder"); + int i; + int s = nlist.length(); + if (s > 0) + { + for (i = 0; i < s; i++) + { + KXMLDOMElement e = nlist.item(i); + xstring name = e.getAttribute(L"caption"); + HTREEITEM hw = tv_folder.InsertChildItem(h, name, e, 15); + createSubTree(hw, e); + } + } + return 1; + } + + int OnCreateTree() + { + xml x; + if (xurl::get(L"/sale/data/TDocument3/folder/root", L"", x) != 1) + { + return -1; + } + else + { + KXMLDOMNodeList nlist = x.selectNodes(L"folders/folder"); + int len = nlist.length(); + + if (len > 0) + { + int i; + for (i = 0; i < len; i++) + { + KXMLDOMElement e = nlist.item(i); + xstring name = e.getAttribute(L"caption"); + HTREEITEM h =tv_folder.InsertChildItem( 0, name, e, 17); + createSubTree(h, e); + if (len == 1) tv_folder.ExpandItem(h); + } + tv_folder.ExpandItem(0); + } + } + return 1; + } + + //树选择 + int OnTreeSelChanged(TEvent* evt, int p) + { + xstring name; + lv_view.DeleteItemAll(); + + HTREEITEM h = tv_folder.GetSelectedItem(); + KXMLDOMElement ele = tv_folder.GetItemData(h); + KXMLDOMNodeList nlist = ele.selectNodes(L"folder"); + + int i; + int s = nlist.length(); + if (s > 0) + { + for (i = 0; i < s; i++) + { + KXMLDOMElement e = nlist.item(i); + name = e.getAttribute(L"caption"); + lv_view.InsertItemEx(0, name, 0, e); + } + } + + xstring src = ele.getAttribute(L"url"); + trace(L"\r\n" + src); + xml x = ViewObject::RetrieveData(L"/sale/data/TDocument3/folder/list", L"src", src); + if (x) + { + //alert(x.GetXml()); + nlist = x.documentElement().selectNodes(L"*"); + s = nlist.length(); + if (s > 0) + { + for (i = 0; i < s; i++) + { + KXMLDOMElement e = nlist.item(i); + name = e.getAttribute(L"caption"); + int nItem = lv_view.InsertItemEx( 0, name, 23, e); + + lv_view.SetItemText( nItem, 1, e.getAttribute(L"Creator")); + lv_view.SetItemText( nItem, 2, e.getAttribute(L"CreateDate")); + } + } + } + lv_view.Redraw(); + + return 1; + } + + int SetListViewHeaderColumn(xstring Url) + { + const int LVCFMT_LEFT = 0; + for (int i = 0; i < 3; i++) lv_view.DeleteColumn( 1); + //if(Url==L"") + //{ + lv_view.InsertColumn(0, L"创建日期", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn(0, L"创建人员", LVCFMT_LEFT, 80, 0); + lv_view.InsertColumn(0, L"名称", 0, 180, 0); + columnCount = 3; + //} + return 1; + } + + /* + int OnRetrieve() + { + xml x = new xml; + x.setNativePointer(xml::CreateInstance()); + xaserverarg arg = new xaserverarg; + arg.setNativePointer(arg.CreateInstance()); + arg.AddArg(L"xxx",L"xxx"); + if (getUrl(L"",arg.GetString(),x)!=1) + { + trace(x.text); + return -1; + }else + { + //dw_list.Retrieve(x); + //dw_list.Redraw(); + } + return 1; + } + */ + + int onload() + { + tv_folder = GetControl(L"tv_folder"); + lv_view = GetControl(L"lv_view"); + + columnCount = 0; + SetListViewHeaderColumn(L""); + + AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&TDocumentWin::OnTreeSelChanged); + AttachEvent(L"lv_view", L"NM_DBLCLK", (FEvent)&TDocumentWin::OnListViewDoubleClicked); + + OnCreateTree(); + OnAttachEvent(); + + tv_folder.ExpandItem(tv_folder.GetRootItem()); + return 1; + } + + int onloaded() + { + SetAgent(); + + return 1; + } +}; \ No newline at end of file diff --git a/jrj/xframe/kobject/kxml.hpp b/jrj/xframe/kobject/kxml.hpp index ebcdfbe..dcf125c 100644 --- a/jrj/xframe/kobject/kxml.hpp +++ b/jrj/xframe/kobject/kxml.hpp @@ -156,7 +156,9 @@ KXMLDOMElement(void* impl) :KXMLDOMNode(impl) {} KXMLDOMElement() :KXMLDOMNode() {} public: - KXMLDOMElement(LPARAM p) :KXMLDOMNode((void*)p) {} + KXMLDOMElement(LPARAM p) :KXMLDOMNode((void*)p) { + AddRef(); + } }; class KXMLDOMDocument : public KXMLDOMNode diff --git a/jrj/xframe/xcontrol/xdatetimepick.hpp b/jrj/xframe/xcontrol/xdatetimepick.hpp new file mode 100644 index 0000000..e4c8c76 --- /dev/null +++ b/jrj/xframe/xcontrol/xdatetimepick.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include "wobject/xcontrol.hpp" +#include "win32/win.hpp" + +struct SYSTEMTIME +{ + short wYear; + short wMonth; + short wDayOfWeek; //星期,0=星期日,1=星期一 + short wDay; + short wHour; + short wMinute; + short wSecond; + short wMilliseconds; //毫秒 +}; + +class xdatetimepick: public xcontrol +{ +public: + xdatetimepick() :xcontrol(nullptr) {} + xdatetimepick(void* implptr) :xcontrol(implptr) {} + + int SetDatetime(int wYear, int wMonth, int wDay) + { + SYSTEMTIME fdate; + fdate.wYear = wYear; + fdate.wMonth = wMonth; + fdate.wDay = wDay; + //fdate.wDayOfWeek=0; + //fdate.wHour=0; + //fdate.wMinute=0; + //fdate.wSecond=0; + //fdate.wMilliseconds=0; + + int GDT_VALID = 0x0; + int DTM_FIRST = 0x1000; + int DTM_SETSYSTEMTIME = DTM_FIRST + 2; + int WM_KILLFOCUS = 0x0008; + int WM_SETFOCUS = 0x0007; + SendMessage(GetHWND(), DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM) & fdate); + return 1; + } + + int IsChecked() + { + int GDT_VALID = 0x0; + int GDT_NONE = 0x1; + + int DTM_FIRST = 0x1000; + int DTM_GETSYSTEMTIME = DTM_FIRST + 1; + + SYSTEMTIME fdate; + int ret = SendMessage(GetHWND(), 0x1001, 0, (LPARAM)&fdate); + if (ret == GDT_NONE) return 0; + return 1; + } +}; \ No newline at end of file diff --git a/jrj/xframe/xcontrol/xlistview.hpp b/jrj/xframe/xcontrol/xlistview.hpp index bd01730..78e6cd8 100644 --- a/jrj/xframe/xcontrol/xlistview.hpp +++ b/jrj/xframe/xcontrol/xlistview.hpp @@ -562,6 +562,11 @@ return InsertItem(GetHWND(),xIndex, label, pictureindex); } + int InsertItemEx(int xIndex, string label, int pictureindex , KXMLDOMElement data )//only the label and picture index need to be specified + { + return InsertItemEx(GetHWND(), xIndex, label, pictureindex, data.ptr()); + } + int InsertItemEx(int xIndex, string label, int pictureindex = 0,LPARAM data=0)//only the label and picture index need to be specified { return InsertItemEx(GetHWND(), xIndex, label, pictureindex , data); -- Gitblit v1.9.3