- global rename, done by script
[WebKit-https.git] / WebCore / bridge / mac / FrameMac.h
1 /*
2  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.  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 #ifndef MacFrame_H
27 #define MacFrame_H
28
29 #include "Frame.h"
30 #include "IntRect.h"
31 #include "ClipboardMac.h"
32 #include "KWQScrollBar.h"
33 #include "PlatformMouseEvent.h"
34 #include "Node.h"
35 #include "WebCoreKeyboardAccess.h"
36 #include "TextAffinity.h"
37 #include <kxmlcore/HashSet.h>
38
39 #import <CoreFoundation/CoreFoundation.h>
40
41 class NPObject;
42
43 namespace KJS {
44     class PausedTimeouts;
45     class SavedProperties;
46     class SavedBuiltins;
47     class ScheduledAction;
48     namespace Bindings {
49         class Instance;
50         class RootObject;
51     }
52 }
53
54 #ifdef __OBJC__
55
56 // Avoid clashes with KJS::DOMElement in KHTML code.
57 @class DOMElement;
58 typedef DOMElement ObjCDOMElement;
59
60 @class KWQPageState;
61 @class NSArray;
62 @class NSAttributedString;
63 @class NSColor;
64 @class NSDictionary;
65 @class NSEvent;
66 @class NSFileWrapper;
67 @class NSFont;
68 @class NSImage;
69 @class NSMutableDictionary;
70 @class NSResponder;
71 @class NSString;
72 @class NSView;
73 @class WebCoreFrameBridge;
74 @class WebScriptObject;
75
76 #else
77
78 // Avoid clashes with KJS::DOMElement in KHTML code.
79 class ObjCDOMElement;
80
81 class KWQPageState;
82 class NSArray;
83 class NSAttributedString;
84 class NSColor;
85 class NSDictionary;
86 class NSEvent;
87 class NSFileWrapper;
88 class NSFont;
89 class NSImage;
90 class NSMutableDictionary;
91 class NSResponder;
92 class NSString;
93 class NSView;
94 class WebCoreFrameBridge;
95 class WebScriptObject;
96
97 typedef int NSWritingDirection;
98
99 #endif
100
101 namespace WebCore {
102
103 class DocumentFragment;
104 class FramePrivate;
105 class HTMLTableCellElement;
106 class RenderObject;
107 class RenderStyle;
108 class VisiblePosition;
109
110 struct DashboardRegionValue;
111
112 enum KWQSelectionDirection {
113     KWQSelectingNext,
114     KWQSelectingPrevious
115 };
116
117 class FrameMac : public Frame
118 {
119 public:
120     FrameMac(Page*, RenderPart*);
121     ~FrameMac();
122     
123     void clear();
124
125     void setBridge(WebCoreFrameBridge *p);
126     WebCoreFrameBridge *bridge() const { return _bridge; }
127     virtual void setView(FrameView*);
128     virtual void frameDetached();
129
130     virtual bool openURL(const KURL &);
131     
132     virtual void openURLRequest(const ResourceRequest&);
133     virtual void submitForm(const ResourceRequest&);
134
135     DeprecatedString advanceToNextMisspelling(bool startBeforeSelection = false);
136     
137     virtual void setTitle(const String &);
138     virtual void setStatusBarText(const String&);
139
140     virtual void urlSelected(const ResourceRequest&);
141
142     virtual ObjectContentType objectContentType(const KURL& url, const DeprecatedString& mimeType);
143     virtual Plugin* createPlugin(const KURL& url, const DeprecatedStringList& paramNames, const DeprecatedStringList& paramValues, const DeprecatedString& mimeType);
144     virtual Frame* createFrame(const KURL& url, const DeprecatedString& name, RenderPart* renderer, const String& referrer);
145
146     virtual void scheduleClose();
147
148     virtual void unfocusWindow();
149     
150     void openURLFromPageCache(KWQPageState *state);
151
152     virtual void saveDocumentState();
153     virtual void restoreDocumentState();
154     
155     virtual void addMessageToConsole(const String& message,  unsigned int lineNumber, const String& sourceID);
156     virtual void setDisplaysWithFocusAttributes(bool flag);
157     
158     NSView *nextKeyView(Node *startingPoint, KWQSelectionDirection);
159     NSView *nextKeyViewInFrameHierarchy(Node *startingPoint, KWQSelectionDirection);
160     static NSView *nextKeyViewForWidget(Widget *startingPoint, KWQSelectionDirection);
161     static bool currentEventIsKeyboardOptionTab();
162     static bool handleKeyboardOptionTabInView(NSView *view);
163     
164     virtual bool tabsToLinks() const;
165     virtual bool tabsToAllControls() const;
166     
167     static bool currentEventIsMouseDownInWidget(Widget *candidate);
168     
169     virtual void runJavaScriptAlert(const String& message);
170     virtual bool runJavaScriptConfirm(const String& message);
171     virtual bool runJavaScriptPrompt(const String& message, const String& defaultValue, String& result);
172     virtual bool locationbarVisible();
173     virtual bool menubarVisible();
174     virtual bool personalbarVisible();
175     virtual bool statusbarVisible();
176     virtual bool toolbarVisible();
177
178     bool shouldClose();
179
180     virtual void createEmptyDocument();
181
182     static WebCoreFrameBridge *bridgeForWidget(const Widget *);
183     
184     virtual DeprecatedString incomingReferrer() const;
185     virtual DeprecatedString userAgent() const;
186
187     virtual DeprecatedString mimeTypeForFileName(const DeprecatedString &) const;
188
189     NSImage *selectionImage() const;
190     NSImage *snapshotDragImage(Node *node, NSRect *imageRect, NSRect *elementRect) const;
191
192     bool dispatchDragSrcEvent(const AtomicString &eventType, const PlatformMouseEvent&) const;
193
194     NSFont *fontForSelection(bool *hasMultipleFonts) const;
195     NSDictionary *fontAttributesForSelectionStart() const;
196     
197     NSWritingDirection baseWritingDirectionForSelectionStart() const;
198
199     virtual void markMisspellingsInAdjacentWords(const VisiblePosition &);
200     virtual void markMisspellings(const SelectionController &);
201
202     NSFileWrapper *fileWrapperForElement(Element *);
203     NSAttributedString *attributedString(Node *startNode, int startOffset, Node *endNode, int endOffset);
204
205     void mouseDown(NSEvent *);
206     void mouseDragged(NSEvent *);
207     void mouseUp(NSEvent *);
208     void mouseMoved(NSEvent *);
209     bool keyEvent(NSEvent *);
210     bool wheelEvent(NSEvent *);
211
212     void sendFakeEventsAfterWidgetTracking(NSEvent *initiatingEvent);
213
214     virtual bool lastEventIsMouseUp() const;
215     void setActivationEventNumber(int num) { _activationEventNumber = num; }
216
217     bool dragHysteresisExceeded(float dragLocationX, float dragLocationY) const;
218     bool eventMayStartDrag(NSEvent *) const;
219     void dragSourceMovedTo(const PlatformMouseEvent&);
220     void dragSourceEndedAt(const PlatformMouseEvent&, NSDragOperation);
221
222     bool mayCut();
223     bool mayCopy();
224     bool mayPaste();
225     bool tryCut();
226     bool tryCopy();
227     bool tryPaste();
228     
229     bool sendContextMenuEvent(NSEvent *);
230
231     virtual bool passMouseDownEventToWidget(Widget *);
232     virtual bool passSubframeEventToSubframe(MouseEventWithHitTestResults &);
233     virtual bool passWheelEventToChildWidget(Node *);
234     
235     virtual void clearRecordedFormValues();
236     virtual void recordFormValue(const DeprecatedString &name, const DeprecatedString &value, HTMLFormElement *element);
237
238     NSString *searchForLabelsAboveCell(RegularExpression *regExp, HTMLTableCellElement *cell);
239     NSString *searchForLabelsBeforeElement(NSArray *labels, Element *element);
240     NSString *matchLabelsAgainstElement(NSArray *labels, Element *element);
241
242     bool findString(NSString *str, bool forward, bool caseFlag, bool wrapFlag);
243
244     virtual void tokenizerProcessedData();
245
246     virtual DeprecatedString overrideMediaType() const;
247     
248     NSColor *bodyBackgroundColor() const;
249     
250     WebCoreKeyboardUIMode keyboardUIMode() const;
251
252     void didTellBridgeAboutLoad(const String& URL);
253     bool haveToldBridgeAboutLoad(const String& URL);
254
255     virtual KJS::Bindings::Instance *getEmbedInstanceForWidget(Widget*);
256     virtual KJS::Bindings::Instance *getObjectInstanceForWidget(Widget*);
257     virtual KJS::Bindings::Instance *getAppletInstanceForWidget(Widget*);
258     void addPluginRootObject(const KJS::Bindings::RootObject *root);
259     void cleanupPluginRootObjects();
260     
261     virtual void registerCommandForUndo(const EditCommandPtr &);
262     virtual void registerCommandForRedo(const EditCommandPtr &);
263     virtual void clearUndoRedoOperations();
264     virtual void issueUndoCommand();
265     virtual void issueRedoCommand();
266     virtual void issueCutCommand();
267     virtual void issueCopyCommand();
268     virtual void issuePasteCommand();
269     virtual void issuePasteAndMatchStyleCommand();
270     virtual void issueTransposeCommand();
271     virtual void respondToChangedSelection(const SelectionController &oldSelection, bool closeTyping);
272     virtual void respondToChangedContents();
273     virtual bool isContentEditable() const;
274     virtual bool shouldChangeSelection(const SelectionController &oldSelection, const SelectionController &newSelection, EAffinity affinity, bool stillSelecting) const;
275     virtual bool shouldBeginEditing(const Range *) const;
276     virtual bool shouldEndEditing(const Range *) const;
277     virtual void didBeginEditing() const;
278     virtual void didEndEditing() const;
279
280     KJS::Bindings::RootObject *executionContextForDOM();
281     KJS::Bindings::RootObject *bindingRootObject();
282     
283     WebScriptObject *windowScriptObject();
284     NPObject *windowScriptNPObject();
285     
286     virtual void partClearedInBegin();
287     
288     // Implementation of CSS property -khtml-user-drag == auto
289     virtual bool shouldDragAutoNode(Node*, int x, int y) const;
290
291     void setMarkedTextRange(const Range *, NSArray *attributes, NSArray *ranges);
292     virtual Range *markedTextRange() const { return m_markedTextRange.get(); }
293
294     virtual bool canGoBackOrForward(int distance) const;
295
296     virtual void didFirstLayout();
297     
298     NSMutableDictionary *dashboardRegionsDictionary();
299     void dashboardRegionsChanged();
300     
301     virtual bool isCharacterSmartReplaceExempt(const QChar &, bool);
302     
303     virtual bool mouseDownMayStartSelect() const { return _mouseDownMayStartSelect; }
304     
305     virtual void handledOnloadEvents();
306
307     virtual bool canPaste() const;
308     virtual bool canRedo() const;
309     virtual bool canUndo() const;
310     virtual void print();
311
312 protected:
313     virtual void startRedirectionTimer();
314     virtual void stopRedirectionTimer();
315     virtual void redirectionTimerFired(Timer<Frame>*);
316
317 private:
318     virtual void handleMousePressEvent(const MouseEventWithHitTestResults&);
319     virtual void handleMouseMoveEvent(const MouseEventWithHitTestResults&);
320     virtual void handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
321     
322     NSView *mouseDownViewIfStillGood();
323
324     NSView *nextKeyViewInFrame(Node *startingPoint, KWQSelectionDirection);
325     static NSView *documentViewForNode(Node *);
326     
327     bool dispatchCPPEvent(const AtomicString &eventType, ClipboardMac::AccessPolicy policy);
328
329     NSImage *imageFromRect(NSRect rect) const;
330
331     void freeClipboard();
332
333     void registerCommandForUndoOrRedo(const EditCommandPtr &cmd, bool isRedo);
334
335     virtual void detachFromView();
336
337     WebCoreFrameBridge *_bridge;
338     
339     NSView *_mouseDownView;
340     bool _mouseDownWasInSubframe;
341     bool _sendingEventToSubview;
342     bool _mouseDownMayStartDrag;
343     bool _mouseDownMayStartSelect;
344     PlatformMouseEvent m_mouseDown;
345     // in our view's coords
346     int _mouseDownX, _mouseDownY;
347     float _mouseDownTimestamp;
348     int _activationEventNumber;
349     
350     static NSEvent *_currentEvent;
351
352     NSMutableDictionary *_formValuesAboutToBeSubmitted;
353     ObjCDOMElement *_formAboutToBeSubmitted;
354
355     bool _haveUndoRedoOperations;
356     
357     HashSet<RefPtr<StringImpl> > urlsBridgeKnowsAbout;
358
359     friend class Frame;
360
361     KJS::Bindings::RootObject *_bindingRoot;  // The root object used for objects
362                                             // bound outside the context of a plugin.
363     DeprecatedPtrList<KJS::Bindings::RootObject> rootObjects;
364     WebScriptObject *_windowScriptObject;
365     NPObject *_windowScriptNPObject;
366     
367     RefPtr<Node> _dragSrc;     // element that may be a drag source, for the current mouse gesture
368     bool _dragSrcIsLink;
369     bool _dragSrcIsImage;
370     bool _dragSrcInSelection;
371     bool _dragSrcMayBeDHTML, _dragSrcMayBeUA;   // Are DHTML and/or the UserAgent allowed to drag out?
372     bool _dragSrcIsDHTML;
373     RefPtr<ClipboardMac> _dragClipboard;   // used on only the source side of dragging
374     
375     RefPtr<Range> m_markedTextRange;
376 };
377
378 inline FrameMac *Mac(Frame *frame) { return static_cast<FrameMac *>(frame); }
379 inline const FrameMac *Mac(const Frame *frame) { return static_cast<const FrameMac *>(frame); }
380
381 }
382
383 #endif