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__
55PyObject* 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
96WebDOMString* 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
139MAKE_CONST_WXSTRING(WebViewNameStr);
140
141MustHaveApp(wxWebBrowserShell);
142MustHaveApp(wxWebFrame);
143MustHaveApp(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 {
175EVT_WEBVIEW_BEFORE_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_BEFORE_LOAD, 1 )
176EVT_WEBVIEW_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_LOAD, 1 )
177EVT_WEBVIEW_NEW_WINDOW = wx.PyEventBinder( wxEVT_WEBVIEW_NEW_WINDOW, 1 )
178EVT_WEBVIEW_RIGHT_CLICK = wx.PyEventBinder( wxEVT_WEBVIEW_RIGHT_CLICK, 1 )
179EVT_WEBVIEW_CONSOLE_MESSAGE = wx.PyEventBinder( wxEVT_WEBVIEW_CONSOLE_MESSAGE, 1 )
180EVT_WEBVIEW_RECEIVED_TITLE = wx.PyEventBinder( wxEVT_WEBVIEW_RECEIVED_TITLE, 1 )
181EVT_WEBVIEW_CONTENTS_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_CONTENTS_CHANGED, 1 )
182EVT_WEBVIEW_SELECTION_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_SELECTION_CHANGED, 1 )
183}
184