00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef KHTMLVIEW_H
00026
#define KHTMLVIEW_H
00027
00028
00029
#include <qscrollview.h>
00030
00031
#include <kdelibs_export.h>
00032
00033
class QPainter;
00034
class QRect;
00035
00036
namespace DOM {
00037
class HTMLDocumentImpl;
00038
class DocumentImpl;
00039
class ElementImpl;
00040
class HTMLElementImpl;
00041
class HTMLTitleElementImpl;
00042
class HTMLGenericFormElementImpl;
00043
class HTMLFormElementImpl;
00044
class HTMLAnchorElementImpl;
00045
class HTMLInputElementImpl;
00046
class Range;
00047
class NodeImpl;
00048
class CSSProperty;
00049 }
00050
00051
namespace KJS {
00052
class WindowFunc;
00053
class ExternalFunc;
00054 }
00055
00056
namespace khtml {
00057
class RenderObject;
00058
class RenderCanvas;
00059
class RenderStyle;
00060
class RenderLineEdit;
00061
class RenderPartObject;
00062
class RenderWidget;
00063
class CSSStyleSelector;
00064
class LineEditWidget;
00065
class CaretBox;
00066
void applyRule(DOM::CSSProperty *prop);
00067 }
00068
00069
class KHTMLPart;
00070
class KHTMLViewPrivate;
00071
00077 class KHTML_EXPORT KHTMLView :
public QScrollView
00078 {
00079 Q_OBJECT
00080
00081
friend class DOM::HTMLDocumentImpl;
00082
friend class DOM::HTMLTitleElementImpl;
00083
friend class DOM::HTMLGenericFormElementImpl;
00084
friend class DOM::HTMLFormElementImpl;
00085
friend class DOM::HTMLAnchorElementImpl;
00086
friend class DOM::HTMLInputElementImpl;
00087
friend class DOM::DocumentImpl;
00088
friend class KHTMLPart;
00089
friend class khtml::RenderCanvas;
00090
friend class khtml::RenderObject;
00091
friend class khtml::RenderLineEdit;
00092
friend class khtml::RenderPartObject;
00093
friend class khtml::RenderWidget;
00094
friend class khtml::CSSStyleSelector;
00095
friend class khtml::LineEditWidget;
00096
friend class KJS::WindowFunc;
00097
friend class KJS::ExternalFunc;
00098
friend void khtml::applyRule(DOM::CSSProperty *prop);
00099
00100
00101
public:
00105 KHTMLView(
KHTMLPart *part,
QWidget *parent,
const char *name=0 );
00106
virtual ~KHTMLView();
00107
00112 KHTMLPart *part()
const {
return m_part; }
00113
00114
int frameWidth()
const {
return _width; }
00115
00119
void setMarginWidth(
int x);
00120
00126 int marginWidth()
const {
return _marginWidth; }
00127
00128
00129
00130
00131
void setMarginHeight(
int y);
00132
00138 int marginHeight() {
return _marginHeight; }
00139
00143
virtual void setVScrollBarMode ( ScrollBarMode mode );
00144
00148
virtual void setHScrollBarMode ( ScrollBarMode mode );
00149
00153
void print();
00154
00159
void print(
bool quick );
00160
00164
void layout();
00168
void displayAccessKeys();
00169
00170
00171
00172 signals:
00173
void finishedLayout();
00174
void cleared();
00175
void zoomView(
int );
00176
void hideAccessKeys();
00177
void repaintAccessKeys();
00178
00179
protected:
00180
void clear();
00181
00182
virtual void resizeEvent (
QResizeEvent * event );
00183
virtual void showEvent (
QShowEvent * );
00184
virtual void hideEvent (
QHideEvent *);
00185
virtual bool focusNextPrevChild(
bool next );
00186
virtual void drawContents (
QPainter * p,
int clipx,
int clipy,
int clipw,
int cliph );
00187
virtual void drawContents(
QPainter* );
00188
virtual void viewportMousePressEvent(
QMouseEvent * );
00189
virtual void focusInEvent(
QFocusEvent * );
00190
virtual void focusOutEvent(
QFocusEvent * );
00191
virtual void viewportMouseDoubleClickEvent(
QMouseEvent * );
00192
virtual void viewportMouseMoveEvent(
QMouseEvent *);
00193
virtual void viewportMouseReleaseEvent(
QMouseEvent *);
00194
virtual void viewportResizeEvent(
QResizeEvent*);
00195
#ifndef QT_NO_WHEELEVENT
00196
virtual void viewportWheelEvent(
QWheelEvent*);
00197
#endif
00198
virtual void dragEnterEvent(
QDragEnterEvent* );
00199
virtual void dropEvent(
QDropEvent* );
00200
virtual void closeEvent (
QCloseEvent * );
00201
virtual bool eventFilter(
QObject *,
QEvent *);
00202
00203
void keyPressEvent(
QKeyEvent *_ke );
00204
void keyReleaseEvent (
QKeyEvent *_ke );
00205
void contentsContextMenuEvent (
QContextMenuEvent *_ce );
00206
void doAutoScroll();
00207
void timerEvent (
QTimerEvent * );
00208
00209
protected slots:
00210
void slotPaletteChanged();
00211
void slotScrollBarMoved();
00212
00213
private slots:
00214
void tripleClickTimeout();
00215
void findTimeout();
00216
void accessKeysTimeout();
00217
00223
void slotMouseScrollTimer();
00224
00225
private:
00226
00227
void scheduleRelayout(khtml::RenderObject* clippedObj=0);
00228
void unscheduleRelayout();
00229
00230
void scheduleRepaint(
int x,
int y,
int w,
int h,
bool asap=
false);
00231
void unscheduleRepaint();
00232
00233
bool needsFullRepaint() const;
00234
00235
void closeChildDialogs();
00236
bool dialogsAllowed();
00237
00246
void paint(
QPainter *p, const
QRect &rc,
int yOff = 0,
bool *more = 0);
00247
00258
void setMediaType( const
QString &medium );
00259
QString mediaType() const;
00260
00261
bool scrollTo(const
QRect &);
00262
00263
bool focusNextPrevNode(
bool next);
00264
bool handleAccessKey(const
QKeyEvent* ev);
00265
bool focusNodeWithAccessKey(
QChar c, KHTMLView* caller = NULL);
00266
00267
void useSlowRepaints();
00268
00269
void setIgnoreWheelEvents(
bool e);
00270
00271
void init();
00272
00273 DOM::NodeImpl *nodeUnderMouse() const;
00274 DOM::NodeImpl *nonSharedNodeUnderMouse() const;
00275
00276
void restoreScrollBar();
00277
00278
QStringList formCompletionItems(const
QString &name) const;
00279
void clearCompletionHistory(const
QString& name);
00280
void addFormCompletionItem(const
QString &name, const
QString &value);
00281
00282
void addNonPasswordStorableSite( const
QString& host );
00283
bool nonPasswordStorableSite( const
QString& host ) const;
00284
00285
bool dispatchMouseEvent(
int eventId, DOM::NodeImpl *targetNode,
00286 DOM::NodeImpl *targetNodeNonShared,
bool cancelable,
00287
int detail,
QMouseEvent *_mouse,
bool setUnder,
00288
int mouseEventType);
00289
bool dispatchKeyEvent(
QKeyEvent *_ke );
00290
bool dispatchKeyEventHelper(
QKeyEvent *_ke,
bool generate_keypress );
00291
00292
void complete(
bool pendingAction );
00293
00294 #ifndef KHTML_NO_TYPE_AHEAD_FIND
00295
void findAhead(
bool increase);
00296 #endif
00297
00298 #ifndef KHTML_NO_CARET
00299
00300
00311
void initCaret(
bool keepSelection = false);
00314
bool caretOverrides() const;
00322
void ensureNodeHasFocus(DOM::NodeImpl *node);
00329
void recalcAndStoreCaretPos(khtml::CaretBox *hintBox = 0);
00336
void caretOn();
00342
void caretOff();
00351
void showCaret(
bool forceRepaint = false);
00358
void hideCaret();
00363
void ensureCaretVisible();
00364
00380
bool foldSelectionToCaret(DOM::NodeImpl *startNode,
long startOffset,
00381 DOM::NodeImpl *endNode,
long endOffset);
00382
00392
bool placeCaret(khtml::CaretBox *hintBox = 0);
00393
00410
bool extendSelection(DOM::NodeImpl *startNode,
long startOffset,
00411 DOM::NodeImpl *endNode,
long endOffset);
00412
00422
void updateSelection(DOM::NodeImpl *startNode,
long startOffset,
00423 DOM::NodeImpl *endNode,
long endOffset);
00424
00429
int caretDisplayPolicyNonFocused() const;
00430
00437
void setCaretDisplayPolicyNonFocused(
int policy);
00438
00439
00440
00444
void caretKeyPressEvent(
QKeyEvent *);
00445
00446
00447
00459
bool moveCaretTo(DOM::NodeImpl *node,
long offset,
bool clearSelection);
00460
00466 enum CaretMovement { CaretByCharacter, CaretByWord };
00467
00478
void moveCaretBy(
bool next, CaretMovement cmv,
int n);
00479
00482
void moveCaretByLine(
bool next,
int n);
00483
00488
void moveCaretToLineBoundary(
bool end);
00489
00494
void moveCaretToDocumentBoundary(
bool end);
00495
00504
void placeCaretOnChar(khtml::CaretBox *hintBox);
00505
00522
void placeCaretOnLine(khtml::CaretBox *caretBox,
int x,
int absx,
int absy);
00523
00527
void moveCaretByPage(
bool next);
00528
00531
void moveCaretPrevWord();
00532
00535
void moveCaretNextWord();
00536
00541
void moveCaretPrevLine(
int n = 1);
00542
00547
void moveCaretNextLine(
int n = 1);
00548
00551
void moveCaretPrevPage();
00552
00555
void moveCaretNextPage();
00556
00559
void moveCaretToLineBegin();
00560
00563
void moveCaretToLineEnd();
00564
00565
#endif // KHTML_NO_CARET
00566
00567
00568
private:
00569
00570
void setWidgetVisible(::khtml::RenderWidget*,
bool visible);
00571
00572
int _width;
00573
int _height;
00574
00575
int _marginWidth;
00576
int _marginHeight;
00577
00578
KHTMLPart *m_part;
00579 KHTMLViewPrivate *d;
00580
00581
QString m_medium;
00582 };
00583
00584
#endif
00585