1/*
2 * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef WXWEBFRAME_H
29#define WXWEBFRAME_H
30
31#include "wx/wxprec.h"
32#ifndef WX_PRECOMP
33    #include "wx/wx.h"
34#endif
35
36#include "WebKitDefines.h"
37
38class WebFramePrivate;
39class WebViewFrameData;
40class wxWebView;
41
42namespace WebCore {
43    class ChromeClientWx;
44    class FrameLoaderClientWx;
45    class EditorClientWx;
46    class Frame;
47}
48
49class WXDLLIMPEXP_WEBKIT wxWebViewDOMElementInfo
50{
51public:
52    wxWebViewDOMElementInfo();
53
54    ~wxWebViewDOMElementInfo() { }
55
56    wxString GetTagName() const { return m_tagName; }
57    void SetTagName(const wxString& name) { m_tagName = name; }
58
59    bool IsSelected() const { return m_isSelected; }
60    void SetSelected(bool sel) { m_isSelected = sel; }
61
62    wxString GetText() const { return m_text; }
63    void SetText(const wxString& text) { m_text = text; }
64
65    wxString GetImageSrc() const { return m_imageSrc; }
66    void SetImageSrc(const wxString& src) { m_imageSrc = src; }
67
68    wxString GetLink() const { return m_link; }
69    void SetLink(const wxString& link) { m_link = link; }
70
71private:
72    void* m_domElement;
73    bool m_isSelected;
74    wxString m_tagName;
75    wxString m_text;
76    wxString m_imageSrc;
77    wxString m_link;
78};
79
80// based on enums in WebCore/dom/Document.h
81enum wxWebKitParseMode { Compat, AlmostStrict, Strict, NoDocument };
82
83class WXDLLIMPEXP_WEBKIT wxWebFrame
84{
85    // ChromeClientWx needs to get the Page* stored by the wxWebView
86    // for the createWindow function.
87    friend class WebCore::ChromeClientWx;
88    friend class WebCore::FrameLoaderClientWx;
89    friend class WebCore::EditorClientWx;
90    friend class wxWebView;
91
92public:
93    wxWebFrame(wxWebView* container, wxWebFrame* parent = NULL, WebViewFrameData* data = NULL);
94
95    ~wxWebFrame();
96
97    void LoadURL(const wxString& url);
98    bool GoBack();
99    bool GoForward();
100    void Stop();
101    void Reload();
102
103    bool CanGoBack();
104    bool CanGoForward();
105
106    bool CanCut();
107    bool CanCopy();
108    bool CanPaste();
109
110    void Cut();
111    void Copy();
112    void Paste();
113
114    bool CanUndo();
115    bool CanRedo();
116
117    void Undo();
118    void Redo();
119
120    wxString GetPageSource();
121    void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString);
122
123    wxString GetInnerText();
124    wxString GetAsMarkup();
125    wxString GetExternalRepresentation();
126
127    wxString RunScript(const wxString& javascript);
128
129    bool FindString(const wxString& string, bool forward = true,
130        bool caseSensitive = false, bool wrapSelection = true,
131        bool startInSelection = true);
132
133    bool CanIncreaseTextSize() const;
134    void IncreaseTextSize();
135    bool CanDecreaseTextSize() const;
136    void DecreaseTextSize();
137    void ResetTextSize();
138    void MakeEditable(bool enable);
139    bool IsEditable() const { return m_isEditable; }
140
141    WebCore::Frame* GetFrame();
142
143    wxWebViewDOMElementInfo HitTest(const wxPoint& post) const;
144
145    bool ShouldClose() const;
146
147    wxWebKitParseMode GetParseMode() const;
148
149private:
150    float m_textMagnifier;
151    bool m_isEditable;
152    bool m_isInitialized;
153    bool m_beingDestroyed;
154    WebFramePrivate* m_impl;
155
156};
157
158#endif // ifndef WXWEBFRAME_H
159