Home | History | Annotate | Download | only in python
      1 /*
      2  * Copyright (C) 2007 Kevin Ollivier  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 %module webview
     27 
     28 %{
     29 #include "config.h"
     30 
     31 #include "wx/wxPython/wxPython.h"
     32 #include "wx/wxPython/pyclasses.h"
     33 #include "WebBrowserShell.h"
     34 #include "WebDOMSelection.h"
     35 #include "WebEdit.h"
     36 #include "WebFrame.h"
     37 #include "WebSettings.h"
     38 #include "WebView.h"
     39 
     40 #include "WebDOMAttr.h"
     41 #include "WebDOMCSSStyleDeclaration.h"
     42 #include "WebDOMDocument.h"
     43 #include "WebDOMDocumentFragment.h"
     44 #include "WebDOMDOMSelection.h"
     45 #include "WebDOMElement.h"
     46 #include "WebDOMEventListener.h"
     47 #include "WebDOMNamedNodeMap.h"
     48 #include "WebDOMNode.h"
     49 #include "WebDOMNodeList.h"
     50 #include "WebDOMObject.h"
     51 #include "WebDOMRange.h"
     52 #include "WebDOMWebKitAnimationList.h"
     53 
     54 #ifndef __WXMSW__
     55 PyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn, bool isValueObject)
     56 {
     57     //static wxPyTypeInfoHashMap* typeInfoCache = NULL;
     58 
     59     //if (typeInfoCache == NULL)
     60     //    typeInfoCache = new wxPyTypeInfoHashMap;
     61 
     62     swig_type_info* swigType = 0; //(*typeInfoCache)[name];
     63     char* name = 0;
     64     if (ptr) {
     65         // it wasn't in the cache, so look it up from SWIG
     66         switch (ptr->nodeType()) {
     67             case WebDOMNode::WEBDOM_ELEMENT_NODE:
     68                 name = "WebDOMElement*";
     69                 break;
     70             case WebDOMNode::WEBDOM_ATTRIBUTE_NODE:
     71                 name = "WebDOMAttr*";
     72                 break;
     73             default:
     74                 name = "WebDOMNode*";
     75         }
     76         swigType = SWIG_TypeQuery(name);
     77         if (swigType) {
     78             if (isValueObject) {
     79                 return SWIG_Python_NewPointerObj(new WebDOMNode(*ptr), swigType, setThisOwn);
     80             }
     81 
     82             return SWIG_Python_NewPointerObj(ptr, swigType, setThisOwn);
     83         }
     84         // if it still wasn't found, try looking for a mapped name
     85         //if (swigType) {
     86             // and add it to the map if found
     87         //    (*typeInfoCache)[className] = swigType;
     88         //}
     89     }
     90 
     91     Py_INCREF(Py_None);
     92 
     93     return Py_None;
     94 }
     95 
     96 WebDOMString* createWebDOMString(PyObject* source)
     97 {
     98     if (!PyString_Check(source) && !PyUnicode_Check(source)) {
     99         PyErr_SetString(PyExc_TypeError, "String or Unicode type required");
    100         return new WebDOMString();
    101     }
    102 
    103     char* tmpPtr;
    104     Py_ssize_t tmpSize;
    105 
    106     if (PyString_Check(source))
    107         PyString_AsStringAndSize(source, &tmpPtr, &tmpSize);
    108     else {
    109         PyObject* str = PyUnicode_AsUTF8String(source);
    110         PyString_AsStringAndSize(str, &tmpPtr, &tmpSize);
    111         Py_DECREF(str);
    112     }
    113 
    114     WebDOMString temp = WebDOMString::fromUTF8(tmpPtr);
    115 
    116     return new WebDOMString(temp);
    117 }
    118 
    119 #endif
    120 
    121 
    122 
    123 %}
    124 //---------------------------------------------------------------------------
    125 
    126 %import core.i
    127 %import windows.i
    128 
    129 #ifndef __WXMSW__
    130 %typemap(out) WebDOMNode*             { $result = createDOMNodeSubtype($1, (bool)$owner, 0); }
    131 %typemap(out) WebDOMElement*             { $result = createDOMNodeSubtype($1, (bool)$owner, 0); }
    132 %typemap(out) WebDOMNode             { $result = createDOMNodeSubtype(&$1, (bool)$owner, 1); }
    133 %typemap(out) WebDOMElement             { $result = createDOMNodeSubtype(&$1, (bool)$owner, 1); }
    134 %typemap(in) WebDOMString&            { $1 = createWebDOMString($input); }
    135 %typemap(out) WebDOMString           { $result = PyUnicode_DecodeUTF8($1.utf8().data(), $1.utf8().length(), NULL); }
    136 %typemap(out) WebDOMString&           { $result = PyUnicode_DecodeUTF8($1.utf8().data(), $1.utf8().length(), NULL); }
    137 #endif
    138 
    139 MAKE_CONST_WXSTRING(WebViewNameStr);
    140 
    141 MustHaveApp(wxWebBrowserShell);
    142 MustHaveApp(wxWebFrame);
    143 MustHaveApp(wxWebView);
    144 
    145 %include WebKitDefines.h
    146 
    147 #ifndef __WXMSW__
    148 %include WebDOMObject.h
    149 %include WebDOMNode.h
    150 
    151 %include WebDOMAttr.h
    152 %include WebDOMDOMSelection.h
    153 %include WebDOMElement.h
    154 %include WebDOMNodeList.h
    155 %include WebDOMRange.h
    156 #endif
    157 
    158 %include WebBrowserShell.h
    159 %include WebDOMSelection.h
    160 %include WebEdit.h
    161 %include WebFrame.h
    162 %include WebSettings.h
    163 %include WebView.h
    164 
    165 %constant wxEventType wxEVT_WEBVIEW_BEFORE_LOAD;
    166 %constant wxEventType wxEVT_WEBVIEW_LOAD;
    167 %constant wxEventType wxEVT_WEBVIEW_NEW_WINDOW;
    168 %constant wxEventType wxEVT_WEBVIEW_RIGHT_CLICK;
    169 %constant wxEventType wxEVT_WEBVIEW_CONSOLE_MESSAGE;
    170 %constant wxEventType wxEVT_WEBVIEW_RECEIVED_TITLE;
    171 %constant wxEventType wxEVT_WEBVIEW_CONTENTS_CHANGED;
    172 %constant wxEventType wxEVT_WEBVIEW_SELECTION_CHANGED;
    173 
    174 %pythoncode {
    175 EVT_WEBVIEW_BEFORE_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_BEFORE_LOAD, 1 )
    176 EVT_WEBVIEW_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_LOAD, 1 )
    177 EVT_WEBVIEW_NEW_WINDOW = wx.PyEventBinder( wxEVT_WEBVIEW_NEW_WINDOW, 1 )
    178 EVT_WEBVIEW_RIGHT_CLICK = wx.PyEventBinder( wxEVT_WEBVIEW_RIGHT_CLICK, 1 )
    179 EVT_WEBVIEW_CONSOLE_MESSAGE = wx.PyEventBinder( wxEVT_WEBVIEW_CONSOLE_MESSAGE, 1 )
    180 EVT_WEBVIEW_RECEIVED_TITLE = wx.PyEventBinder( wxEVT_WEBVIEW_RECEIVED_TITLE, 1 )
    181 EVT_WEBVIEW_CONTENTS_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_CONTENTS_CHANGED, 1 )
    182 EVT_WEBVIEW_SELECTION_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_SELECTION_CHANGED, 1 )
    183 }
    184