mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
536 lines
15 KiB
C++
536 lines
15 KiB
C++
/* This file is part of the KDE project
|
|
|
|
Copyright (C) 1997 Martin Jones (mjones@kde.org)
|
|
(C) 1998 Waldo Bastian (bastian@kde.org)
|
|
(C) 1998, 1999 Torben Weis (weis@kde.org)
|
|
(C) 1999 Lars Knoll (knoll@kde.org)
|
|
(C) 1999 Antti Koivisto (koivisto@kde.org)
|
|
(C) 2006 Germain Garand (germain@ebooksfrance.org)
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef KHTMLVIEW_H
|
|
#define KHTMLVIEW_H
|
|
|
|
#include <khtml_export.h>
|
|
|
|
// qt includes and classes
|
|
#include <QtGui/QScrollArea>
|
|
|
|
class QPainter;
|
|
class QRect;
|
|
template< typename T > class QVector;
|
|
template <class T> class QStack;
|
|
|
|
namespace DOM {
|
|
class HTMLDocumentImpl;
|
|
class DocumentImpl;
|
|
class ElementImpl;
|
|
class HTMLTitleElementImpl;
|
|
class HTMLGenericFormElementImpl;
|
|
class HTMLFormElementImpl;
|
|
class HTMLAnchorElementImpl;
|
|
class HTMLInputElementImpl;
|
|
class NodeImpl;
|
|
class CSSProperty;
|
|
}
|
|
|
|
namespace KJS {
|
|
class WindowFunc;
|
|
class ExternalFunc;
|
|
}
|
|
|
|
namespace khtml {
|
|
class RenderObject;
|
|
class RenderCanvas;
|
|
class RenderLineEdit;
|
|
class RenderPartObject;
|
|
class RenderWidget;
|
|
class RenderLayer;
|
|
class RenderBox;
|
|
class CSSStyleSelector;
|
|
class LineEditWidget;
|
|
class CaretBox;
|
|
class HTMLTokenizer;
|
|
class KHTMLWidgetPrivate;
|
|
class KHTMLWidget
|
|
{
|
|
public:
|
|
KHTMLWidget();
|
|
~KHTMLWidget();
|
|
KHTMLWidgetPrivate* m_kwp;
|
|
};
|
|
void applyRule(DOM::CSSProperty *prop);
|
|
}
|
|
|
|
class KHTMLPart;
|
|
class KHTMLViewPrivate;
|
|
|
|
namespace khtml {
|
|
|
|
}
|
|
|
|
/**
|
|
* Renders and displays HTML in a QScrollArea.
|
|
*
|
|
* Suitable for use as an application's main view.
|
|
**/
|
|
class KHTML_EXPORT KHTMLView : public QScrollArea, public khtml::KHTMLWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
friend class DOM::HTMLDocumentImpl;
|
|
friend class DOM::HTMLTitleElementImpl;
|
|
friend class DOM::HTMLGenericFormElementImpl;
|
|
friend class DOM::HTMLFormElementImpl;
|
|
friend class DOM::HTMLAnchorElementImpl;
|
|
friend class DOM::HTMLInputElementImpl;
|
|
friend class DOM::NodeImpl;
|
|
friend class DOM::ElementImpl;
|
|
friend class DOM::DocumentImpl;
|
|
friend class KHTMLPart;
|
|
friend class KHTMLFind;
|
|
friend class StorePass;
|
|
friend class khtml::RenderCanvas;
|
|
friend class khtml::RenderObject;
|
|
friend class khtml::RenderLineEdit;
|
|
friend class khtml::RenderPartObject;
|
|
friend class khtml::RenderWidget;
|
|
friend class khtml::KHTMLWidgetPrivate;
|
|
friend class khtml::RenderLayer;
|
|
friend class khtml::RenderBox;
|
|
friend class khtml::CSSStyleSelector;
|
|
friend class khtml::LineEditWidget;
|
|
friend class khtml::HTMLTokenizer;
|
|
friend class KJS::WindowFunc;
|
|
friend class KJS::ExternalFunc;
|
|
friend void khtml::applyRule(DOM::CSSProperty *prop);
|
|
|
|
|
|
public:
|
|
/**
|
|
* Constructs a KHTMLView.
|
|
*/
|
|
KHTMLView( KHTMLPart *part, QWidget *parent );
|
|
virtual ~KHTMLView();
|
|
|
|
/**
|
|
* Returns a pointer to the KHTMLPart that is
|
|
* rendering the page.
|
|
**/
|
|
KHTMLPart *part() const { return m_part; }
|
|
|
|
int frameWidth() const { return _width; }
|
|
|
|
/**
|
|
* Sets a margin in x direction.
|
|
*/
|
|
void setMarginWidth(int x);
|
|
|
|
/**
|
|
* Returns the margin width.
|
|
*
|
|
* A return value of -1 means the default value will be used.
|
|
*/
|
|
int marginWidth() const { return _marginWidth; }
|
|
|
|
/*
|
|
* Sets a margin in y direction.
|
|
*/
|
|
void setMarginHeight(int y);
|
|
|
|
/**
|
|
* Returns the margin height.
|
|
*
|
|
* A return value of -1 means the default value will be used.
|
|
*/
|
|
int marginHeight() { return _marginHeight; }
|
|
|
|
/**
|
|
* Sets vertical scrollbar mode.
|
|
*
|
|
* WARNING: do not call this method on a base class pointer unless you
|
|
* specifically want QAbstractScrollArea's variant (not recommended).
|
|
* QAbstractScrollArea::setVerticalScrollBarPolicy is *not* virtual.
|
|
*/
|
|
virtual void setVerticalScrollBarPolicy( Qt::ScrollBarPolicy policy );
|
|
|
|
/**
|
|
* Sets horizontal scrollbar mode.
|
|
*
|
|
* WARNING: do not call this method on a base class pointer unless you
|
|
* specifically want QAbstractScrollArea's variant (not recommended).
|
|
* QAbstractScrollArea::setHorizontalScrollBarPolicy is *not* virtual.
|
|
*/
|
|
virtual void setHorizontalScrollBarPolicy( Qt::ScrollBarPolicy policy );
|
|
|
|
/**
|
|
* Prints the HTML document.
|
|
* @param quick if true, fully automated printing, without print dialog
|
|
*/
|
|
void print( bool quick = false );
|
|
|
|
/**
|
|
* Display all accesskeys in small tooltips
|
|
*/
|
|
void displayAccessKeys();
|
|
|
|
/**
|
|
* Returns the contents area's width
|
|
*/
|
|
int contentsWidth() const;
|
|
|
|
/**
|
|
* Returns the contents area's height
|
|
*/
|
|
int contentsHeight() const;
|
|
|
|
/**
|
|
* Returns the x coordinate of the contents area point
|
|
* that is currently located at the top left in the viewport
|
|
*/
|
|
int contentsX() const;
|
|
|
|
/**
|
|
* Returns the y coordinate of the contents area point
|
|
* that is currently located at the top left in the viewport
|
|
*/
|
|
int contentsY() const;
|
|
|
|
/**
|
|
* Returns the width of the viewport
|
|
*/
|
|
int visibleWidth() const;
|
|
|
|
/**
|
|
* Returns the height of the viewport
|
|
*/
|
|
int visibleHeight() const;
|
|
|
|
/**
|
|
* Place the contents area point x/y
|
|
* at the top left of the viewport
|
|
*/
|
|
void setContentsPos(int x, int y);
|
|
|
|
/**
|
|
* Returns a point translated to viewport coordinates
|
|
* @param p the contents area point to translate
|
|
*
|
|
*/
|
|
QPoint contentsToViewport(const QPoint& p) const;
|
|
|
|
/**
|
|
* Returns a point translated to contents area coordinates
|
|
* @param p the viewport point to translate
|
|
*
|
|
*/
|
|
QPoint viewportToContents(const QPoint& p) const;
|
|
|
|
/**
|
|
* Returns a point translated to contents area coordinates
|
|
* @param x x coordinate of viewport point to translate
|
|
* @param y y coordinate of viewport point to translate
|
|
* @param cx resulting x coordinate
|
|
* @param cy resulting y coordinate
|
|
*
|
|
*/
|
|
void viewportToContents(int x, int y, int& cx, int& cy) const;
|
|
|
|
/**
|
|
* Returns a point translated to viewport coordinates
|
|
* @param x x coordinate of contents area point to translate
|
|
* @param y y coordinate of contents area point to translate
|
|
* @param cx resulting x coordinate
|
|
* @param cy resulting y coordinate
|
|
*
|
|
*/
|
|
void contentsToViewport(int x, int y, int& cx, int& cy) const;
|
|
|
|
/**
|
|
* Scrolls the content area by a given amount
|
|
* @param x x offset
|
|
* @param y y offset
|
|
*/
|
|
void scrollBy(int x, int y);
|
|
|
|
/**
|
|
* Requests an update of the content area
|
|
* @param r the content area rectangle to update
|
|
*/
|
|
void updateContents( const QRect& r );
|
|
void updateContents(int x, int y, int w, int h);
|
|
|
|
void addChild(QWidget *child, int dx, int dy);
|
|
|
|
/**
|
|
* Requests an immediate repaint of the content area
|
|
* @param r the content area rectangle to repaint
|
|
*/
|
|
void repaintContents( const QRect& r );
|
|
void repaintContents(int x, int y, int w, int h);
|
|
|
|
/**
|
|
* Apply a zoom level to the content area
|
|
* @param percent a zoom level expressed as a percentage
|
|
*/
|
|
void setZoomLevel( int percent );
|
|
|
|
/**
|
|
* Retrieve the current zoom level
|
|
*
|
|
*/
|
|
int zoomLevel() const;
|
|
|
|
/**
|
|
* Smooth Scrolling Mode enumeration
|
|
* @li SSMDisabled smooth scrolling is disabled
|
|
* @li SSMWhenEfficient only use smooth scrolling on pages that do not require a full repaint of the content area when scrolling
|
|
* @li SSMAlways smooth scrolling is performed unconditionally
|
|
*/
|
|
enum SmoothScrollingMode { SSMDisabled = 0, SSMWhenEfficient, SSMEnabled };
|
|
|
|
/**
|
|
* Set the smooth scrolling mode.
|
|
*
|
|
* Smooth scrolling mode is normally controlled by the configuration file's SmoothScrolling key.
|
|
* Using this setter will override the configuration file's settings.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
void setSmoothScrollingMode( SmoothScrollingMode m );
|
|
|
|
/**
|
|
* Retrieve the current smooth scrolling mode
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
SmoothScrollingMode smoothScrollingMode() const;
|
|
|
|
public Q_SLOTS:
|
|
/**
|
|
* Resize the contents area
|
|
* @param w the new width
|
|
* @param h the new height
|
|
*/
|
|
virtual void resizeContents(int w, int h);
|
|
|
|
/**
|
|
* ensure the display is up to date
|
|
*/
|
|
void layout();
|
|
|
|
|
|
Q_SIGNALS:
|
|
/**
|
|
* This signal is used for internal layouting. Don't use it to check if rendering finished.
|
|
* Use @ref KHTMLPart completed() signal instead.
|
|
*/
|
|
void finishedLayout();
|
|
void cleared();
|
|
void zoomView( int );
|
|
void hideAccessKeys();
|
|
void repaintAccessKeys();
|
|
void findAheadActive( bool );
|
|
|
|
protected:
|
|
void clear();
|
|
|
|
virtual bool event ( QEvent * event );
|
|
virtual void paintEvent( QPaintEvent * );
|
|
virtual void resizeEvent ( QResizeEvent * event );
|
|
virtual void showEvent ( QShowEvent * );
|
|
virtual void hideEvent ( QHideEvent *);
|
|
virtual bool focusNextPrevChild( bool next );
|
|
virtual void mousePressEvent( QMouseEvent * );
|
|
virtual void focusInEvent( QFocusEvent * );
|
|
virtual void focusOutEvent( QFocusEvent * );
|
|
virtual void mouseDoubleClickEvent( QMouseEvent * );
|
|
virtual void mouseMoveEvent(QMouseEvent *);
|
|
virtual void mouseReleaseEvent(QMouseEvent *);
|
|
#ifndef QT_NO_WHEELEVENT
|
|
virtual void wheelEvent(QWheelEvent*);
|
|
#endif
|
|
virtual void dragEnterEvent( QDragEnterEvent* );
|
|
virtual void dropEvent( QDropEvent* );
|
|
virtual void closeEvent ( QCloseEvent * );
|
|
virtual bool widgetEvent( QEvent * );
|
|
virtual bool viewportEvent( QEvent * e );
|
|
virtual bool eventFilter(QObject *, QEvent *);
|
|
virtual void scrollContentsBy( int dx, int dy );
|
|
|
|
void keyPressEvent( QKeyEvent *_ke );
|
|
void keyReleaseEvent ( QKeyEvent *_ke );
|
|
void doAutoScroll();
|
|
void timerEvent ( QTimerEvent * );
|
|
|
|
void setSmoothScrollingModeDefault( SmoothScrollingMode m );
|
|
|
|
protected Q_SLOTS:
|
|
void slotPaletteChanged();
|
|
|
|
private Q_SLOTS:
|
|
void tripleClickTimeout();
|
|
void accessKeysTimeout();
|
|
void scrollTick();
|
|
|
|
/**
|
|
* @internal
|
|
* used for autoscrolling with MMB
|
|
*/
|
|
void slotMouseScrollTimer();
|
|
|
|
private:
|
|
void resizeContentsToViewport();
|
|
|
|
void scheduleRelayout(khtml::RenderObject* clippedObj=0);
|
|
void unscheduleRelayout();
|
|
|
|
bool hasLayoutPending();
|
|
|
|
void scheduleRepaint(int x, int y, int w, int h, bool asap=false);
|
|
void unscheduleRepaint();
|
|
|
|
bool needsFullRepaint() const;
|
|
|
|
void closeChildDialogs();
|
|
bool dialogsAllowed();
|
|
|
|
void setMouseEventsTarget( QWidget* w );
|
|
QWidget* mouseEventsTarget() const;
|
|
|
|
QStack<QRegion>* clipHolder() const;
|
|
void setClipHolder( QStack<QRegion>* ch );
|
|
|
|
void setPart(KHTMLPart *part);
|
|
|
|
/**
|
|
* Paints the HTML document to a QPainter.
|
|
* The document will be scaled to match the width of
|
|
* rc and clipped to fit in the height.
|
|
* yOff determines the vertical offset in the document to start with.
|
|
* more, if nonzero will be set to true if the documents extends
|
|
* beyond the rc or false if everything below yOff was painted.
|
|
**/
|
|
void paint(QPainter *p, const QRect &rc, int yOff = 0, bool *more = 0);
|
|
|
|
void render(QPainter *p, const QRect& r, const QPoint& off);
|
|
|
|
/**
|
|
* Get/set the CSS Media Type.
|
|
*
|
|
* Media type is set to "screen" for on-screen rendering and "print"
|
|
* during printing. Other media types lack the proper support in the
|
|
* renderer and are not activated. The DOM tree and the parser itself,
|
|
* however, properly handle other media types. To make them actually work
|
|
* you only need to enable the media type in the view and if necessary
|
|
* add the media type dependent changes to the renderer.
|
|
*/
|
|
void setMediaType( const QString &medium );
|
|
QString mediaType() const;
|
|
|
|
bool pagedMode() const;
|
|
|
|
bool scrollTo(const QRect &);
|
|
|
|
bool focusNextPrevNode(bool next);
|
|
bool handleAccessKey(const QKeyEvent* ev);
|
|
bool focusNodeWithAccessKey(QChar c, KHTMLView* caller = NULL);
|
|
QMap< DOM::ElementImpl*, QChar > buildFallbackAccessKeys() const;
|
|
void displayAccessKeys( KHTMLView* caller, KHTMLView* origview, QVector< QChar >& taken, bool use_fallbacks );
|
|
bool isScrollingFromMouseWheel() const;
|
|
void setHasStaticBackground(bool partial=false);
|
|
void setHasNormalBackground();
|
|
void addStaticObject(bool fixed);
|
|
void removeStaticObject(bool fixed);
|
|
void applyTransforms( int& x, int& y, int& w, int& h) const;
|
|
void revertTransforms( int& x, int& y, int& w, int& h) const;
|
|
void revertTransforms( int& x, int& y ) const;
|
|
void checkExternalWidgetsPosition();
|
|
|
|
void setIgnoreWheelEvents(bool e);
|
|
|
|
void init();
|
|
|
|
DOM::NodeImpl *nodeUnderMouse() const;
|
|
DOM::NodeImpl *nonSharedNodeUnderMouse() const;
|
|
|
|
void restoreScrollBar();
|
|
|
|
QStringList formCompletionItems(const QString &name) const;
|
|
void clearCompletionHistory(const QString& name);
|
|
void addFormCompletionItem(const QString &name, const QString &value);
|
|
|
|
void addNonPasswordStorableSite( const QString& host );
|
|
void delNonPasswordStorableSite( const QString& host );
|
|
bool nonPasswordStorableSite( const QString& host ) const;
|
|
|
|
bool dispatchMouseEvent(int eventId, DOM::NodeImpl *targetNode,
|
|
DOM::NodeImpl *targetNodeNonShared, bool cancelable,
|
|
int detail,QMouseEvent *_mouse, bool setUnder,
|
|
int mouseEventType, int orientation=0);
|
|
bool dispatchKeyEvent( QKeyEvent *_ke );
|
|
bool dispatchKeyEventHelper( QKeyEvent *_ke, bool generate_keypress );
|
|
|
|
void complete( bool pendingAction );
|
|
|
|
void updateScrollBars();
|
|
void setupSmoothScrolling(int dx, int dy);
|
|
|
|
/**
|
|
* Returns the current caret policy when the view is not focused.
|
|
* @return a KHTMLPart::CaretDisplay value
|
|
*/
|
|
int caretDisplayPolicyNonFocused() const;
|
|
|
|
/**
|
|
* Sets the caret display policy when the view is not focused.
|
|
* @param policy new display policy as
|
|
* defined by KHTMLPart::CaretDisplayPolicy
|
|
*/
|
|
void setCaretDisplayPolicyNonFocused(int policy);
|
|
|
|
// -- caret event handler
|
|
|
|
/**
|
|
* Evaluates key presses for caret navigation on editable nodes.
|
|
* @return true if event has been handled
|
|
*/
|
|
bool caretKeyPressEvent(QKeyEvent *);
|
|
|
|
// ------------------------------------- member variables ------------------------------------
|
|
private:
|
|
friend class KHTMLViewPrivate;
|
|
enum LinkCursor { LINK_NORMAL, LINK_MAILTO, LINK_NEWWINDOW };
|
|
|
|
void setWidgetVisible(::khtml::RenderWidget*, bool visible);
|
|
|
|
|
|
int _width;
|
|
int _height;
|
|
|
|
int _marginWidth;
|
|
int _marginHeight;
|
|
|
|
KHTMLPart *m_part;
|
|
KHTMLViewPrivate* const d;
|
|
|
|
QString m_medium; // media type
|
|
};
|
|
|
|
#endif
|
|
|