e622f253f9913f179c567efcd7044c51c3aca56d
[WebKit-https.git] / WebCore / page / FrameView.h
1 /* This file is part of the KDE project
2
3    Copyright (C) 1997 Martin Jones (mjones@kde.org)
4              (C) 1998 Waldo Bastian (bastian@kde.org)
5              (C) 1998, 1999 Torben Weis (weis@kde.org)
6              (C) 1999 Lars Knoll (knoll@kde.org)
7              (C) 1999 Antti Koivisto (koivisto@kde.org)
8    Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
9
10    This library is free software; you can redistribute it and/or
11    modify it under the terms of the GNU Library General Public
12    License as published by the Free Software Foundation; either
13    version 2 of the License, or (at your option) any later version.
14
15    This library is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    Library General Public License for more details.
19
20    You should have received a copy of the GNU Library General Public License
21    along with this library; see the file COPYING.LIB.  If not, write to
22    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23    Boston, MA 02111-1307, USA.
24 */
25
26 #ifndef FrameView_H
27 #define FrameView_H
28
29 #include "ScrollView.h"
30 #include "IntSize.h"
31 #include "PlatformString.h"
32
33 namespace WebCore {
34
35 class AtomicString;
36 class CSSProperty;
37 class CSSStyleSelector;
38 class Clipboard;
39 class DeprecatedStringList;
40 class Document;
41 class Element;
42 class Event;
43 class EventTargetNode;
44 class Frame;
45 class FrameViewPrivate;
46 class GraphicsContext;
47 class HTMLAnchorElement;
48 class HTMLDocument;
49 class HTMLElement;
50 class HTMLFormElement;
51 class HTMLFrameSetElement;
52 class HTMLGenericFormElement;
53 class HTMLTitleElement;
54 class InlineBox;
55 class IntRect;
56 class PlatformKeyboardEvent;
57 class FrameMac;
58 class PlatformMouseEvent;
59 class MouseEventWithHitTestResults;
60 class Node;
61 class RenderBox;
62 class RenderView;
63 class RenderLineEdit;
64 class RenderObject;
65 class RenderPart;
66 class RenderPartObject;
67 class RenderStyle;
68 class RenderWidget;
69 class PlatformWheelEvent;
70 class String;
71
72 template <typename T> class Timer;
73
74 void applyRule(CSSProperty*);
75
76 class FrameView : public ScrollView {
77     friend class CSSStyleSelector;
78     friend class Document;
79     friend class Frame;
80     friend class HTMLAnchorElement;
81     friend class HTMLDocument;
82     friend class HTMLFormElement;
83     friend class HTMLGenericFormElement;
84     friend class HTMLTitleElement;
85     friend class FrameMac;
86     friend class RenderBox;
87     friend class RenderView;
88     friend class RenderLineEdit;
89     friend class RenderObject;
90     friend class RenderPart;
91     friend class RenderPartObject;
92     friend class RenderWidget;
93     friend void applyRule(CSSProperty *prop);
94
95 public:
96     FrameView(Frame*);
97     virtual ~FrameView();
98
99     Frame* frame() const { return m_frame.get(); }
100
101     int frameWidth() const { return m_size.width(); }
102
103     /**
104      * Gets/Sets the margin width/height
105      *
106      * A return value of -1 means the default value will be used.
107      */
108     int marginWidth() const { return m_margins.width(); }
109     int marginHeight() { return  m_margins.height(); }
110     void setMarginWidth(int);
111     void setMarginHeight(int);
112
113     virtual void setVScrollBarMode(ScrollBarMode);
114     virtual void setHScrollBarMode(ScrollBarMode);
115     virtual void setScrollBarsMode(ScrollBarMode);
116     
117     void print();
118
119     void layout(bool allowSubtree = true);
120
121     Node* layoutRoot() const;
122     int layoutCount() const;
123
124     bool needsFullRepaint() const;
125     
126     void addRepaintInfo(RenderObject*, const IntRect&);
127
128     void resetScrollBars();
129
130     void clear();
131
132 public:
133     void clearPart();
134
135     void handleMousePressEvent(const PlatformMouseEvent&);
136     void handleMouseDoubleClickEvent(const PlatformMouseEvent&);
137     void handleMouseMoveEvent(const PlatformMouseEvent&);
138     void handleMouseReleaseEvent(const PlatformMouseEvent&);
139     void handleWheelEvent(PlatformWheelEvent&);
140
141     bool mousePressed();
142
143     void doAutoScroll();
144
145     bool updateDragAndDrop(const PlatformMouseEvent&, Clipboard*);
146     void cancelDragAndDrop(const PlatformMouseEvent&, Clipboard*);
147     bool performDragAndDrop(const PlatformMouseEvent&, Clipboard*);
148
149     void layoutTimerFired(Timer<FrameView>*);
150     void hoverTimerFired(Timer<FrameView>*);
151
152     void repaintRectangle(const IntRect& r, bool immediate);
153
154     bool isTransparent() const;
155     void setTransparent(bool isTransparent);
156     
157     void scheduleRelayout();
158     void scheduleRelayoutOfSubtree(Node*);
159     void unscheduleRelayout();
160     bool haveDelayedLayoutScheduled();
161     bool layoutPending() const;
162
163     void scheduleHoverStateUpdate();
164
165     void adjustViewSize();
166     void initScrollBars();
167     
168     void setHasBorder(bool);
169     bool hasBorder() const;
170     
171     void setResizingFrameSet(HTMLFrameSetElement *);
172
173 #if __APPLE__
174     void updateDashboardRegions();
175 #endif
176
177     virtual void scrollPointRecursively(int x, int y);
178     virtual void setContentsPos(int x, int y);
179
180     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>, bool tempEvent);
181
182     void ref() { ++m_refCount; }
183     void deref() { if (!--m_refCount) delete this; }
184     bool hasOneRef() { return m_refCount == 1; }
185     
186 private:
187     void cleared();
188     void scrollBarMoved();
189
190     void resetCursor();
191     void invalidateClick();
192
193     /**
194      * Get/set the CSS Media Type.
195      *
196      * Media type is set to "screen" for on-screen rendering and "print"
197      * during printing. Other media types lack the proper support in the
198      * renderer and are not activated. The DOM tree and the parser itself,
199      * however, properly handle other media types. To make them actually work
200      * you only need to enable the media type in the view and if necessary
201      * add the media type dependent changes to the renderer.
202      */
203     void setMediaType(const String&);
204     String mediaType() const;
205
206     bool scrollTo(const IntRect&);
207
208     void focusNextPrevNode(bool next);
209
210     bool useSlowRepaints() const;
211     void setUseSlowRepaints();
212     void addSlowRepaintObject();
213     void removeSlowRepaintObject();
214
215     void setIgnoreWheelEvents(bool e);
216
217     void init();
218
219     Node *nodeUnderMouse() const;
220
221     void restoreScrollBar();
222
223     DeprecatedStringList formCompletionItems(const String& name) const;
224     void addFormCompletionItem(const String& name, const String& value);
225
226     MouseEventWithHitTestResults prepareMouseEvent(bool readonly, bool active, bool mouseMove, const PlatformMouseEvent&);
227
228     bool dispatchMouseEvent(const AtomicString& eventType, Node* target,
229         bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
230     bool dispatchDragEvent(const AtomicString& eventType, Node* target,
231         const PlatformMouseEvent&, Clipboard*);
232
233     void applyOverflowToViewport(RenderObject* o, ScrollBarMode& hMode, ScrollBarMode& vMode);
234
235     virtual bool isFrameView() const;
236
237     void updateBorder();
238
239     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
240     void dispatchScheduledEvents();
241         
242     unsigned m_refCount;
243     
244     IntSize m_size;
245     IntSize m_margins;
246     
247     RefPtr<Frame> m_frame;
248     FrameViewPrivate* d;
249 };
250
251 }
252
253 #endif
254