WebCore:
[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 Color;
37 class CSSProperty;
38 class CSSStyleSelector;
39 class Clipboard;
40 class DeprecatedStringList;
41 class Document;
42 class Element;
43 class Event;
44 class EventTargetNode;
45 class Frame;
46 class FrameViewPrivate;
47 class GraphicsContext;
48 class HTMLAnchorElement;
49 class HTMLDocument;
50 class HTMLElement;
51 class HTMLFormElement;
52 class HTMLFrameSetElement;
53 class HTMLGenericFormElement;
54 class HTMLTitleElement;
55 class InlineBox;
56 class IntRect;
57 class PlatformKeyboardEvent;
58 class FrameMac;
59 class PlatformMouseEvent;
60 class MouseEventWithHitTestResults;
61 class Node;
62 class RenderBox;
63 class RenderView;
64 class RenderLineEdit;
65 class RenderObject;
66 class RenderPart;
67 class RenderPartObject;
68 class RenderStyle;
69 class RenderWidget;
70 class PlatformWheelEvent;
71 class String;
72
73 template <typename T> class Timer;
74
75 void applyRule(CSSProperty*);
76
77 class FrameView : public ScrollView {
78     friend class CSSStyleSelector;
79     friend class Document;
80     friend class Frame;
81     friend class HTMLAnchorElement;
82     friend class HTMLDocument;
83     friend class HTMLFormElement;
84     friend class HTMLGenericFormElement;
85     friend class HTMLTitleElement;
86     friend class FrameMac;
87     friend class RenderBox;
88     friend class RenderView;
89     friend class RenderLineEdit;
90     friend class RenderObject;
91     friend class RenderPart;
92     friend class RenderPartObject;
93     friend class RenderWidget;
94     friend void applyRule(CSSProperty *prop);
95
96 public:
97     FrameView(Frame*);
98     virtual ~FrameView();
99
100     Frame* frame() const { return m_frame.get(); }
101
102     int frameWidth() const { return m_size.width(); }
103
104     /**
105      * Gets/Sets the margin width/height
106      *
107      * A return value of -1 means the default value will be used.
108      */
109     int marginWidth() const { return m_margins.width(); }
110     int marginHeight() { return  m_margins.height(); }
111     void setMarginWidth(int);
112     void setMarginHeight(int);
113
114     virtual void setVScrollBarMode(ScrollBarMode);
115     virtual void setHScrollBarMode(ScrollBarMode);
116     virtual void setScrollBarsMode(ScrollBarMode);
117     
118     void print();
119
120     void layout(bool allowSubtree = true);
121
122     Node* layoutRoot() const;
123     int layoutCount() const;
124
125     bool needsFullRepaint() const;
126     
127     void addRepaintInfo(RenderObject*, const IntRect&);
128
129     void resetScrollBars();
130
131     void clear();
132
133 public:
134     void clearPart();
135
136     void handleMousePressEvent(const PlatformMouseEvent&);
137     void handleMouseDoubleClickEvent(const PlatformMouseEvent&);
138     void handleMouseMoveEvent(const PlatformMouseEvent&);
139     void handleMouseReleaseEvent(const PlatformMouseEvent&);
140     void handleWheelEvent(PlatformWheelEvent&);
141
142     bool mousePressed();
143
144     void doAutoScroll();
145
146     bool updateDragAndDrop(const PlatformMouseEvent&, Clipboard*);
147     void cancelDragAndDrop(const PlatformMouseEvent&, Clipboard*);
148     bool performDragAndDrop(const PlatformMouseEvent&, Clipboard*);
149
150     void layoutTimerFired(Timer<FrameView>*);
151     void hoverTimerFired(Timer<FrameView>*);
152
153     void repaintRectangle(const IntRect& r, bool immediate);
154
155     bool isTransparent() const;
156     void setTransparent(bool isTransparent);
157
158     Color baseBackgroundColor() const;
159     void setBaseBackgroundColor(Color);
160
161     void scheduleRelayout();
162     void scheduleRelayoutOfSubtree(Node*);
163     void unscheduleRelayout();
164     bool haveDelayedLayoutScheduled();
165     bool layoutPending() const;
166
167     void scheduleHoverStateUpdate();
168
169     void adjustViewSize();
170     void initScrollBars();
171     
172     void setHasBorder(bool);
173     bool hasBorder() const;
174     
175     void setResizingFrameSet(HTMLFrameSetElement *);
176
177 #if __APPLE__
178     void updateDashboardRegions();
179 #endif
180
181     virtual void scrollPointRecursively(int x, int y);
182     virtual void setContentsPos(int x, int y);
183
184     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>, bool tempEvent);
185
186     void ref() { ++m_refCount; }
187     void deref() { if (!--m_refCount) delete this; }
188     bool hasOneRef() { return m_refCount == 1; }
189     
190 private:
191     void cleared();
192     void scrollBarMoved();
193
194     void resetCursor();
195     void invalidateClick();
196
197     /**
198      * Get/set the CSS Media Type.
199      *
200      * Media type is set to "screen" for on-screen rendering and "print"
201      * during printing. Other media types lack the proper support in the
202      * renderer and are not activated. The DOM tree and the parser itself,
203      * however, properly handle other media types. To make them actually work
204      * you only need to enable the media type in the view and if necessary
205      * add the media type dependent changes to the renderer.
206      */
207     void setMediaType(const String&);
208     String mediaType() const;
209
210     bool scrollTo(const IntRect&);
211
212     void focusNextPrevNode(bool next);
213
214     bool useSlowRepaints() const;
215     void setUseSlowRepaints();
216     void addSlowRepaintObject();
217     void removeSlowRepaintObject();
218
219     void setIgnoreWheelEvents(bool e);
220
221     void init();
222
223     Node *nodeUnderMouse() const;
224
225     void restoreScrollBar();
226
227     DeprecatedStringList formCompletionItems(const String& name) const;
228     void addFormCompletionItem(const String& name, const String& value);
229
230     MouseEventWithHitTestResults prepareMouseEvent(bool readonly, bool active, bool mouseMove, const PlatformMouseEvent&);
231
232     bool dispatchMouseEvent(const AtomicString& eventType, Node* target,
233         bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
234     bool dispatchDragEvent(const AtomicString& eventType, Node* target,
235         const PlatformMouseEvent&, Clipboard*);
236
237     void applyOverflowToViewport(RenderObject* o, ScrollBarMode& hMode, ScrollBarMode& vMode);
238
239     virtual bool isFrameView() const;
240
241     void updateBorder();
242
243     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
244     void dispatchScheduledEvents();
245         
246     unsigned m_refCount;
247     
248     IntSize m_size;
249     IntSize m_margins;
250     
251     RefPtr<Frame> m_frame;
252     FrameViewPrivate* d;
253 };
254
255 }
256
257 #endif
258