diff options
Diffstat (limited to 'lib/wx/c_src/wxePrintout.cpp')
-rw-r--r-- | lib/wx/c_src/wxePrintout.cpp | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/lib/wx/c_src/wxePrintout.cpp b/lib/wx/c_src/wxePrintout.cpp new file mode 100644 index 0000000000..ea1c76edcc --- /dev/null +++ b/lib/wx/c_src/wxePrintout.cpp @@ -0,0 +1,210 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2008-2009. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ + +#include <wx/wx.h> +#include "wxe_impl.h" +#include "wxe_return.h" + +/* *****************************************************************/ +/* Special Class impls */ + + +/* Printing special */ + +wxEPrintout::~wxEPrintout() { + clear_cb(onPrintPage); + clear_cb(onPreparePrinting); + clear_cb(onBeginPrinting); + clear_cb(onEndPrinting); + clear_cb(onBeginDocument); + clear_cb(onEndDocument); + clear_cb(hasPage); + clear_cb(getPageInfo); + + ((WxeApp *)wxTheApp)->clearPtr(this); +} + +bool wxEPrintout::OnBeginDocument(int startPage, int endPage) +{ + if(onBeginDocument) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + char * bp = ((WxeApp *) wxTheApp)->cb_buff; + + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(onBeginDocument); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.addInt(startPage); + rt.addInt(endPage); + rt.endList(3); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + return *(int*) bp; + } else { + return wxPrintout::OnBeginDocument(startPage,endPage); + } +} + +void wxEPrintout::OnEndDocument() +{ + if(onEndDocument) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(onEndDocument); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.endList(1); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + } else { + wxPrintout::OnEndDocument(); + } +} + +void wxEPrintout::OnBeginPrinting() +{ + + if(onBeginPrinting) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(onBeginPrinting); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.endList(1); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + } else { + wxPrintout::OnBeginPrinting(); + } +} + +void wxEPrintout::OnEndPrinting() +{ + + if(onEndPrinting) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(onEndPrinting); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.endList(1); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + } else { + wxPrintout::OnEndPrinting(); + } +} + +void wxEPrintout::OnPreparePrinting() +{ + + if(onPreparePrinting) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(onPreparePrinting); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.endList(1); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + } else { + wxPrintout::OnPreparePrinting(); + } +} + +bool wxEPrintout::HasPage(int page) +{ + + if(hasPage) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(hasPage); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.addInt(page); + rt.endList(2); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + char * bp = ((WxeApp *) wxTheApp)->cb_buff; + handle_callback_batch(port); + return *(int*) bp; + } else { + return wxPrintout::HasPage(page); + } +} + +bool wxEPrintout::OnPrintPage(int page) +{ + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(onPrintPage); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.addInt(page); + rt.endList(2); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + //fprintf(stderr,"%d ", __LINE__);handle_callback_batch(port); fprintf(stderr,"%d\r\n", __LINE__); + char * bp = ((WxeApp *) wxTheApp)->cb_buff; + return *(int*) bp; +} + +void wxEPrintout::GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo) +{ + if(getPageInfo) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + rt.addInt(getPageInfo); + rt.addRef(((WxeApp *) wxTheApp)->getRef((void *)this, memenv), "wxPrintout"); + rt.endList(1); + rt.addAtom("_wx_invoke_cb_"); + rt.addTupleCount(3); + rt.send(); + handle_callback_batch(port); + //fprintf(stderr,"%d ", __LINE__);handle_callback_batch(port); fprintf(stderr,"%d\r\n", __LINE__); + + char * bp = ((WxeApp *) wxTheApp)->cb_buff; + *minPage = *(int *) bp; bp += 4; + *maxPage = *(int *) bp; bp += 4; + *pageFrom = *(int *) bp; bp += 4; + *pageTo = *(int *) bp; bp += 4; + } else { + wxPrintout::GetPageInfo(minPage, maxPage, pageFrom, pageTo); + } +} + +void wxEPrintout::clear_cb(int callback) +{ + if(callback > 0) { + wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); + wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false); + // NOTE: Remove this later when changing from funs to gen_server + rt.addAtom("wx_delete_cb"); + rt.addInt(callback); + rt.addTupleCount(2); + rt.send(); + } +} + |