#ifndef KWQKHTMLPart_H
#define KWQKHTMLPart_H
#import "khtml_part.h"
#import "dom_nodeimpl.h"
#import "dom2_range.h"
#import "WebCoreKeyboardAccess.h"
#import <CoreFoundation/CoreFoundation.h>
#import <JavaScriptCore/jni_jsobject.h>
#import <JavaScriptCore/npruntime.h>
#import <JavaScriptCore/NP_jsobject.h>
#import <JavaScriptCore/runtime.h>
#import "KWQDict.h"
#import "KWQClipboard.h"
#import "KWQScrollBar.h"
class KHTMLPartPrivate;
class KWQWindowWidget;
namespace DOM {
class DocumentFragmentImpl;
class HTMLTableCellElementImpl;
}
namespace khtml {
class RenderObject;
class RenderStyle;
class VisiblePosition;
struct DashboardRegionValue;
}
namespace KJS {
class SavedProperties;
class SavedBuiltins;
class ScheduledAction;
}
#ifdef __OBJC__
@class DOMElement;
typedef DOMElement ObjCDOMElement;
@class KWQPageState;
@class NSArray;
@class NSAttributedString;
@class NSColor;
@class NSDictionary;
@class NSEvent;
@class NSFileWrapper;
@class NSFont;
@class NSImage;
@class NSMutableDictionary;
@class NSResponder;
@class NSString;
@class NSView;
@class WebCoreBridge;
@class WebScriptObject;
#else
class ObjCDOMElement;
class KWQPageState;
class NSArray;
class NSAttributedString;
class NSColor;
class NSDictionary;
class NSEvent;
class NSFileWrapper;
class NSFont;
class NSImage;
class NSMutableDictionary;
class NSResponder;
class NSString;
class NSView;
class WebCoreBridge;
class WebScriptObject;
typedef int NSWritingDirection;
#endif
enum KWQSelectionDirection {
KWQSelectingNext,
KWQSelectingPrevious
};
class KWQKHTMLPart : public KHTMLPart
{
public:
KWQKHTMLPart();
~KWQKHTMLPart();
void clear();
void setBridge(WebCoreBridge *p);
WebCoreBridge *bridge() const { return _bridge; }
void setView(KHTMLView *view);
KHTMLView *view() const;
void provisionalLoadStarted();
virtual bool openURL(const KURL &);
virtual bool closeURL();
void didNotOpenURL(const KURL &);
void openURLRequest(const KURL &, const KParts::URLArgs &);
void submitForm(const KURL &, const KParts::URLArgs &);
void scheduleHistoryNavigation( int steps );
void scrollToAnchor(const KURL &);
void jumpToSelection();
QString advanceToNextMisspelling(bool startBeforeSelection = false);
bool scrollOverflow(KWQScrollDirection direction, KWQScrollGranularity granularity);
bool scrollOverflowWithScrollWheelEvent(NSEvent *event);
void setEncoding(const QString &encoding, bool userChosen);
void addData(const char *bytes, int length);
void setTitle(const DOM::DOMString &);
void setStatusBarText(const QString &status);
void urlSelected(const KURL &url, int button, int state, const KParts::URLArgs &args);
KParts::ReadOnlyPart *createPart(const khtml::ChildFrame &child, const KURL &url, const QString &mimeType);
void scheduleClose();
void unfocusWindow();
QMap<int, KJS::ScheduledAction*> *pauseActions(const void *key);
void resumeActions(QMap<int, KJS::ScheduledAction*> *actions, const void *key);
bool canCachePage();
void saveWindowProperties(KJS::SavedProperties *windowProperties);
void saveLocationProperties(KJS::SavedProperties *locationProperties);
void restoreWindowProperties(KJS::SavedProperties *windowProperties);
void restoreLocationProperties(KJS::SavedProperties *locationProperties);
void saveInterpreterBuiltins(KJS::SavedBuiltins &interpreterBuiltins);
void restoreInterpreterBuiltins(const KJS::SavedBuiltins &interpreterBuiltins);
void openURLFromPageCache(KWQPageState *state);
void saveDocumentState();
void restoreDocumentState();
bool isFrameSet() const;
void updatePolicyBaseURL();
NSView *nextKeyView(DOM::NodeImpl *startingPoint, KWQSelectionDirection);
NSView *nextKeyViewInFrameHierarchy(DOM::NodeImpl *startingPoint, KWQSelectionDirection);
static NSView *nextKeyViewForWidget(QWidget *startingPoint, KWQSelectionDirection);
static bool currentEventIsKeyboardOptionTab();
static bool handleKeyboardOptionTabInView(NSView *view);
virtual bool tabsToLinks() const;
virtual bool tabsToAllControls() const;
static bool currentEventIsMouseDownInWidget(QWidget *candidate);
static void setDocumentFocus(QWidget *);
static void clearDocumentFocus(QWidget *);
void runJavaScriptAlert(const QString &message);
bool runJavaScriptConfirm(const QString &message);
bool runJavaScriptPrompt(const QString &message, const QString &defaultValue, QString &result);
bool locationbarVisible();
bool menubarVisible();
bool personalbarVisible();
bool scrollbarsVisible();
bool statusbarVisible();
bool toolbarVisible();
void KWQKHTMLPart::addMessageToConsole(const QString &message, unsigned int lineNumber, const QString &sourceID);
using KHTMLPart::xmlDocImpl;
khtml::RenderObject *renderer() const;
void forceLayout();
void forceLayoutWithPageWidthRange(float minPageWidth, float maxPageWidth);
void sendResizeEvent();
void sendScrollEvent();
void paint(QPainter *, const QRect &);
void adjustPageHeight(float *newBottom, float oldTop, float oldBottom, float bottomLimit);
void createEmptyDocument();
static WebCoreBridge *bridgeForWidget(const QWidget *);
static KWQKHTMLPart *partForWidget(const QWidget *);
QString requestedURLString() const;
QString incomingReferrer() const;
QString userAgent() const;
QString mimeTypeForFileName(const QString &) const;
DOM::NodeImpl *selectionStart() const;
int selectionStartOffset() const;
DOM::NodeImpl *selectionEnd() const;
int selectionEndOffset() const;
QRect selectionRect() const;
NSRect visibleSelectionRect() const;
void centerSelectionInVisibleArea() const;
NSImage *selectionImage() const;
NSImage *snapshotDragImage(DOM::Node node, NSRect *imageRect, NSRect *elementRect) const;
NSFont *fontForSelection(bool *hasMultipleFonts) const;
NSDictionary *fontAttributesForSelectionStart() const;
NSWritingDirection baseWritingDirectionForSelectionStart() const;
void markMisspellingsInAdjacentWords(const khtml::VisiblePosition &);
void markMisspellings(const khtml::Selection &);
NSFileWrapper *fileWrapperForElement(DOM::ElementImpl *);
NSAttributedString *attributedString(DOM::NodeImpl *startNode, int startOffset, DOM::NodeImpl *endNode, int endOffset);
void addMetaData(const QString &key, const QString &value);
void mouseDown(NSEvent *);
void mouseDragged(NSEvent *);
void mouseUp(NSEvent *);
void sendFakeEventsAfterWidgetTracking(NSEvent *initiatingEvent);
void mouseMoved(NSEvent *);
bool keyEvent(NSEvent *);
bool lastEventIsMouseUp() const;
void setActivationEventNumber(int num) { _activationEventNumber = num; }
bool eventMayStartDrag(NSEvent *) const;
void dragSourceMovedTo(const QPoint &loc);
void dragSourceEndedAt(const QPoint &loc, NSDragOperation operation);
bool mayCut();
bool mayCopy();
bool mayPaste();
bool tryCut();
bool tryCopy();
bool tryPaste();
bool sendContextMenuEvent(NSEvent *);
void prepareForUserAction();
void clearTimers();
static void clearTimers(KHTMLView *);
bool passSubframeEventToSubframe(DOM::NodeImpl::MouseEvent &);
void redirectionTimerStartedOrStopped();
static const QPtrList<KWQKHTMLPart> &instances() { return mutableInstances(); }
void clearRecordedFormValues();
void recordFormValue(const QString &name, const QString &value, DOM::HTMLFormElementImpl *element);
DOM::HTMLFormElementImpl *currentForm() const;
NSString *searchForLabelsAboveCell(QRegExp *regExp, DOM::HTMLTableCellElementImpl *cell);
NSString *searchForLabelsBeforeElement(NSArray *labels, DOM::ElementImpl *element);
NSString *matchLabelsAgainstElement(NSArray *labels, DOM::ElementImpl *element);
bool findString(NSString *str, bool forward, bool caseFlag, bool wrapFlag);
void setSettings(KHTMLSettings *);
KWQWindowWidget *topLevelWidget();
void tokenizerProcessedData();
QString overrideMediaType() const;
void setMediaType(const QString &);
void setSelectionFromNone();
void setDisplaysWithFocusAttributes(bool flag);
bool displaysWithFocusAttributes() const;
void setWindowHasFocus(bool flag);
QChar backslashAsCurrencySymbol() const;
NSColor *bodyBackgroundColor() const;
WebCoreKeyboardUIMode keyboardUIMode() const;
void setName(const QString &name);
void didTellBridgeAboutLoad(const QString &urlString);
bool haveToldBridgeAboutLoad(const QString &urlString);
KJS::Bindings::Instance *getEmbedInstanceForView(NSView *aView);
KJS::Bindings::Instance *getObjectInstanceForView(NSView *aView);
KJS::Bindings::Instance *getAppletInstanceForView(NSView *aView);
void addPluginRootObject(const KJS::Bindings::RootObject *root);
void cleanupPluginRootObjects();
void registerCommandForUndo(const khtml::EditCommandPtr &);
void registerCommandForRedo(const khtml::EditCommandPtr &);
void clearUndoRedoOperations();
void issueUndoCommand();
void issueRedoCommand();
void issueCutCommand();
void issueCopyCommand();
void issuePasteCommand();
void issuePasteAndMatchStyleCommand();
void respondToChangedSelection(const khtml::Selection &oldSelection, bool closeTyping);
void respondToChangedContents();
virtual bool isContentEditable() const;
virtual bool shouldBeginEditing(const DOM::Range &) const;
virtual bool shouldEndEditing(const DOM::Range &) const;
KJS::Bindings::RootObject *executionContextForDOM();
KJS::Bindings::RootObject *bindingRootObject();
WebScriptObject *windowScriptObject();
NPObject *KWQKHTMLPart::windowScriptNPObject();
void partClearedInBegin();
bool shouldDragAutoNode(DOM::NodeImpl*, int x, int y) const;
struct MarkedTextUnderline {
MarkedTextUnderline(unsigned _startOffset, unsigned _endOffset, const QColor &_color, bool _thick)
: startOffset(_startOffset)
, endOffset(_endOffset)
, color(_color)
, thick(_thick)
{}
unsigned startOffset;
unsigned endOffset;
QColor color;
bool thick;
};
void setMarkedTextRange(const DOM::Range &, NSArray *attributes, NSArray *ranges);
DOM::Range markedTextRange() const;
bool markedTextUsesUnderlines() const;
QValueList<MarkedTextUnderline> markedTextUnderlines() const;
bool canGoBackOrForward(int distance) const;
void didFirstLayout();
NSMutableDictionary *dashboardRegionsDictionary();
void dashboardRegionsChanged();
virtual bool isCharacterSmartReplaceExempt(const QChar &, bool);
DOM::NodeImpl *mousePressNode();
private:
virtual void khtmlMousePressEvent(khtml::MousePressEvent *);
virtual void khtmlMouseDoubleClickEvent(khtml::MouseDoubleClickEvent *);
virtual void khtmlMouseMoveEvent(khtml::MouseMoveEvent *);
virtual void khtmlMouseReleaseEvent(khtml::MouseReleaseEvent *);
bool passWidgetMouseDownEventToWidget(khtml::MouseEvent *);
bool passWidgetMouseDownEventToWidget(khtml::RenderWidget *);
bool passWidgetMouseDownEventToWidget(QWidget *);
void setPolicyBaseURL(const DOM::DOMString &);
NSView *mouseDownViewIfStillGood();
QString generateFrameName();
NSView *nextKeyViewInFrame(DOM::NodeImpl *startingPoint, KWQSelectionDirection);
static DOM::NodeImpl *nodeForWidget(const QWidget *);
static KWQKHTMLPart *partForNode(DOM::NodeImpl *);
static NSView *documentViewForNode(DOM::NodeImpl *);
bool dragHysteresisExceeded(float dragLocationX, float dragLocationY) const;
bool dispatchCPPEvent(int eventId, KWQClipboard::AccessPolicy policy);
bool dispatchDragSrcEvent(int eventId, const QPoint &loc) const;
NSImage *imageFromRect(NSRect rect) const;
void freeClipboard();
khtml::RenderStyle *styleForSelectionStart(DOM::NodeImpl *&nodeToRemove) const;
virtual bool isKHTMLPart() const;
void registerCommandForUndoOrRedo(const khtml::EditCommandPtr &cmd, bool isRedo);
WebCoreBridge *_bridge;
KWQSignal _started;
KWQSignal _completed;
KWQSignal _completedWithBool;
NSView *_mouseDownView;
bool _mouseDownWasInSubframe;
bool _sendingEventToSubview;
bool _mouseDownMayStartDrag;
bool _mouseDownMayStartSelect;
int _mouseDownWinX, _mouseDownWinY;
int _mouseDownX, _mouseDownY;
float _mouseDownTimestamp;
int _activationEventNumber;
static NSEvent *_currentEvent;
KURL _submittedFormURL;
NSMutableDictionary *_formValuesAboutToBeSubmitted;
ObjCDOMElement *_formAboutToBeSubmitted;
static QPtrList<KWQKHTMLPart> &mutableInstances();
KWQWindowWidget *_windowWidget;
mutable bool _drawSelectionOnly;
bool _haveUndoRedoOperations;
QDict<char> urlsBridgeKnowsAbout;
friend class KHTMLPart;
KJS::Bindings::RootObject *_bindingRoot; QPtrList<KJS::Bindings::RootObject> rootObjects;
WebScriptObject *_windowScriptObject;
NPObject *_windowScriptNPObject;
DOM::Node _dragSrc; bool _dragSrcIsLink;
bool _dragSrcIsImage;
bool _dragSrcInSelection;
bool _dragSrcMayBeDHTML, _dragSrcMayBeUA; bool _dragSrcIsDHTML;
KWQClipboard *_dragClipboard;
mutable DOM::Node _elementToDraw;
DOM::Range m_markedTextRange;
bool m_markedTextUsesUnderlines;
QValueList<MarkedTextUnderline> m_markedTextUnderlines;
bool m_windowHasFocus;
};
inline KWQKHTMLPart *KWQ(KHTMLPart *part) { return static_cast<KWQKHTMLPart *>(part); }
inline const KWQKHTMLPart *KWQ(const KHTMLPart *part) { return static_cast<const KWQKHTMLPart *>(part); }
#endif