18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Kevin Ollivier  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%module webview
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%{
29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "config.h"
30dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "wx/wxPython/wxPython.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "wx/wxPython/pyclasses.h"
33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebBrowserShell.h"
340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMSelection.h"
350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebEdit.h"
36cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "WebFrame.h"
37d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebSettings.h"
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebView.h"
390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
400617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMAttr.h"
410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMCSSStyleDeclaration.h"
420617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMDocument.h"
430617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMDocumentFragment.h"
440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMDOMSelection.h"
450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMElement.h"
460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMEventListener.h"
470617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMNamedNodeMap.h"
480617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMNode.h"
490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMNodeList.h"
500617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMObject.h"
510617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDOMRange.h"
522bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebDOMWebKitAnimationList.h"
530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
54f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#ifndef __WXMSW__
555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenPyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn, bool isValueObject)
560617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{
570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    //static wxPyTypeInfoHashMap* typeInfoCache = NULL;
580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    //if (typeInfoCache == NULL)
600617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    //    typeInfoCache = new wxPyTypeInfoHashMap;
610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    swig_type_info* swigType = 0; //(*typeInfoCache)[name];
630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    char* name = 0;
640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (ptr) {
650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        // it wasn't in the cache, so look it up from SWIG
660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        switch (ptr->nodeType()) {
670617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            case WebDOMNode::WEBDOM_ELEMENT_NODE:
680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                name = "WebDOMElement*";
690617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                break;
700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            case WebDOMNode::WEBDOM_ATTRIBUTE_NODE:
710617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                name = "WebDOMAttr*";
720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                break;
730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            default:
740617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                name = "WebDOMNode*";
750617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        }
760617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        swigType = SWIG_TypeQuery(name);
775ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        if (swigType) {
785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            if (isValueObject) {
795ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen                return SWIG_Python_NewPointerObj(new WebDOMNode(*ptr), swigType, setThisOwn);
805ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            }
815ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
820617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            return SWIG_Python_NewPointerObj(ptr, swigType, setThisOwn);
835ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        }
840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        // if it still wasn't found, try looking for a mapped name
850617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        //if (swigType) {
860617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            // and add it to the map if found
870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        //    (*typeInfoCache)[className] = swigType;
880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        //}
890617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    }
900617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
910617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Py_INCREF(Py_None);
920617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
930617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    return Py_None;
940617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen}
955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenWebDOMString* createWebDOMString(PyObject* source)
975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{
985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    if (!PyString_Check(source) && !PyUnicode_Check(source)) {
995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        PyErr_SetString(PyExc_TypeError, "String or Unicode type required");
1005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        return new WebDOMString();
1015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
1025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    char* tmpPtr;
1045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    Py_ssize_t tmpSize;
1055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    if (PyString_Check(source))
1075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        PyString_AsStringAndSize(source, &tmpPtr, &tmpSize);
1085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    else {
1095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        PyObject* str = PyUnicode_AsUTF8String(source);
1105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        PyString_AsStringAndSize(str, &tmpPtr, &tmpSize);
1115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        Py_DECREF(str);
1125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
1135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    WebDOMString temp = WebDOMString::fromUTF8(tmpPtr);
1155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1165ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    return new WebDOMString(temp);
1175ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen}
1185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
119f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif
1200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
1215ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1225ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%}
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//---------------------------------------------------------------------------
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%import core.i
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%import windows.i
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
129f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#ifndef __WXMSW__
1305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(out) WebDOMNode*             { $result = createDOMNodeSubtype($1, (bool)$owner, 0); }
1315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(out) WebDOMElement*             { $result = createDOMNodeSubtype($1, (bool)$owner, 0); }
1325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(out) WebDOMNode             { $result = createDOMNodeSubtype(&$1, (bool)$owner, 1); }
1335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(out) WebDOMElement             { $result = createDOMNodeSubtype(&$1, (bool)$owner, 1); }
1345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(in) WebDOMString&            { $1 = createWebDOMString($input); }
1355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(out) WebDOMString           { $result = PyUnicode_DecodeUTF8($1.utf8().data(), $1.utf8().length(), NULL); }
1365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%typemap(out) WebDOMString&           { $result = PyUnicode_DecodeUTF8($1.utf8().data(), $1.utf8().length(), NULL); }
137f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif
1380617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
139563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkMAKE_CONST_WXSTRING(WebViewNameStr);
140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
141d0825bca7fe65beaee391d30da42e937db621564Steve BlockMustHaveApp(wxWebBrowserShell);
142cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockMustHaveApp(wxWebFrame);
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectMustHaveApp(wxWebView);
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
145d0825bca7fe65beaee391d30da42e937db621564Steve Block%include WebKitDefines.h
146d0825bca7fe65beaee391d30da42e937db621564Steve Block
147f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#ifndef __WXMSW__
1480617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMObject.h
1490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMNode.h
1500617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
1510617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMAttr.h
1520617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMDOMSelection.h
1530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMElement.h
1540617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMNodeList.h
1550617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMRange.h
156f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif
1570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
158d0825bca7fe65beaee391d30da42e937db621564Steve Block%include WebBrowserShell.h
1590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebDOMSelection.h
1600617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen%include WebEdit.h
161cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block%include WebFrame.h
162d0825bca7fe65beaee391d30da42e937db621564Steve Block%include WebSettings.h
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%include WebView.h
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%constant wxEventType wxEVT_WEBVIEW_BEFORE_LOAD;
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%constant wxEventType wxEVT_WEBVIEW_LOAD;
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%constant wxEventType wxEVT_WEBVIEW_NEW_WINDOW;
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%constant wxEventType wxEVT_WEBVIEW_RIGHT_CLICK;
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%constant wxEventType wxEVT_WEBVIEW_CONSOLE_MESSAGE;
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%constant wxEventType wxEVT_WEBVIEW_RECEIVED_TITLE;
1715ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%constant wxEventType wxEVT_WEBVIEW_CONTENTS_CHANGED;
1725ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen%constant wxEventType wxEVT_WEBVIEW_SELECTION_CHANGED;
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%pythoncode {
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEVT_WEBVIEW_BEFORE_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_BEFORE_LOAD, 1 )
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEVT_WEBVIEW_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_LOAD, 1 )
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEVT_WEBVIEW_NEW_WINDOW = wx.PyEventBinder( wxEVT_WEBVIEW_NEW_WINDOW, 1 )
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEVT_WEBVIEW_RIGHT_CLICK = wx.PyEventBinder( wxEVT_WEBVIEW_RIGHT_CLICK, 1 )
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEVT_WEBVIEW_CONSOLE_MESSAGE = wx.PyEventBinder( wxEVT_WEBVIEW_CONSOLE_MESSAGE, 1 )
1805ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenEVT_WEBVIEW_RECEIVED_TITLE = wx.PyEventBinder( wxEVT_WEBVIEW_RECEIVED_TITLE, 1 )
1815ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenEVT_WEBVIEW_CONTENTS_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_CONTENTS_CHANGED, 1 )
1825ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenEVT_WEBVIEW_SELECTION_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_SELECTION_CHANGED, 1 )
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
184