summaryrefslogtreecommitdiffstats
path: root/kviewshell/pageView.h
diff options
context:
space:
mode:
Diffstat (limited to 'kviewshell/pageView.h')
-rw-r--r--kviewshell/pageView.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/kviewshell/pageView.h b/kviewshell/pageView.h
new file mode 100644
index 00000000..d87ae0ca
--- /dev/null
+++ b/kviewshell/pageView.h
@@ -0,0 +1,175 @@
+// -*- C++ -*-
+/* This file is part of the KDE project
+ Copyright (C) 2001 Wilco Greven <[email protected]>
+ Copyright (C) 2004-2005 Wilfried Huss <[email protected]>
+ Copyright (C) 2005 Stefan Kebekus <[email protected]>
+
+ 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 PAGEVIEW_H
+#define PAGEVIEW_H
+
+#include "documentWidget.h"
+
+#include <qptrvector.h>
+#include <qscrollview.h>
+
+class PageNumber;
+
+/*
+ * PageView is a customized QScrollView, which can hold one
+ * page. This page will be centered on the viewport.
+ */
+class PageView : public QScrollView
+{
+ Q_OBJECT
+
+public:
+ PageView( QWidget* parent = 0, const char* name = 0 );
+ ~PageView() {}
+
+ void addChild( QPtrVector<DocumentWidget> *wdgList );
+
+ /** Sets the number of columns into which the widgets are
+ aligned. If nothing is set, '2' is the default. */
+ void setNrColumns( Q_UINT8 cols );
+ void setNrRows( Q_UINT8 rows );
+
+ void setContinuousViewMode(bool continuous);
+ bool fullScreenMode() { return fullScreen; }
+ bool singlePageFullScreenMode();
+ bool overviewMode() { return !continuousViewmode && (nrRows > 1 || nrCols > 1); }
+
+ /** Returns the number of columns into which the widgets are aligned.
+
+ This method returns the number of colums actually used to display
+ the widgets.
+
+ @warning This method need not return the number columns set in the
+ setViewMode() method. For instance, if the viewmode
+ KVSPrefs::EnumViewMode::ContinuousFacing is set, but there is only
+ one widget, then only one column is used, and the method returns
+ the number one.
+
+ If there aren't any widgets, the number 1 is returned.
+
+ @returns Number of columns used, or 1 if there aren't any
+ widgets. The number i returned always satisfies 1 <= i <= nrCols,
+ where nrCols is the private variable of the same nane.
+ */
+ Q_UINT8 getNrColumns() const { return (widgetList==0) ? 1 : QMIN(nrCols, QMAX(1, widgetList->size())); }
+
+ Q_UINT8 getNrRows() const { return nrRows; }
+ bool isContinuous() const { return continuousViewmode; }
+
+ /** Return true if the top resp. bottom of the page is visible. */
+ bool atTop() const;
+ bool atBottom() const;
+
+ /** Distance between pages in pixels (this is independent of
+ the zoom level). */
+ int distanceBetweenPages() { return distanceBetweenWidgets; }
+
+ /** Moves the viewport so that the widget is at the top left corner. */
+ void moveViewportToWidget(QWidget* widget, int y = 0);
+
+ bool isMoveToolEnabled() const { return moveTool; }
+
+public slots:
+ void calculateCurrentPageNumber();
+
+ bool readUp();
+ bool readDown();
+ void scrollUp();
+ void scrollDown();
+ void scrollRight();
+ void scrollLeft();
+ void scrollBottom();
+ void scrollTop();
+
+ void setFullScreenMode(bool fullScreen);
+ /** Turn the scrollbars on/off. */
+ void slotShowScrollbars(bool);
+
+ /** Set layout of the page widgets according to the current viewmode and zoomlevel.
+ Set zoomChanged = true if the the layout needs updateing because the zoomlevel has changed. */
+ void layoutPages(bool zoomChanged = false);
+
+ void slotEnableMoveTool(bool enable);
+
+signals:
+ void viewSizeChanged(const QSize& size);
+ void pageSizeChanged(const QSize& size);
+
+ void currentPageChanged(const PageNumber&);
+
+ /** This signal is emitted when the scrollView receives a mouse
+ wheel event. */
+ void wheelEventReceived( QWheelEvent * );
+
+protected:
+ void keyPressEvent( QKeyEvent* );
+
+ /** Reimplemented from QScrollView to make sure that the page is
+ centered when it fits in the viewport. */
+ void viewportResizeEvent( QResizeEvent* );
+ void viewportPaintEvent(QPaintEvent*);
+
+ /** Reimplemented from QScrollView, because the kviepart needs to
+ handle the wheel events itself. The wheel event is passed on by
+ emitting the singal "wheelEventReceived". Nothing else is done. */
+ void contentsWheelEvent ( QWheelEvent * );
+
+ void contentsMousePressEvent(QMouseEvent*);
+ void contentsMouseReleaseEvent(QMouseEvent*);
+ void contentsMouseMoveEvent(QMouseEvent*);
+
+private slots:
+ void calculateCurrentPageNumber(int x, int y);
+
+private:
+ /** Stores the mouse position between two mouse events. This is used
+ to implement the "grab and drag the viewport contents" feature. */
+ QPoint dragGrabPos;
+
+ QPtrVector<DocumentWidget>* widgetList;
+
+ /** Used internally by the centerContents()-method. Set with the
+ setNrColumns() method */
+ Q_UINT8 nrCols;
+ Q_UINT8 nrRows;
+
+ bool continuousViewmode;
+ bool fullScreen;
+
+ /** This int remembers the style of the frame of the centering
+ scrollview when fullscreen mode is switched on. It is then
+ restored when it is switched off. */
+ int oldFrameStyle;
+
+ /** color of the viewport's background. This is also
+ stored on entering the fullscreen mode. */
+ QColor backgroundColor;
+
+ /** Distance between pages in pixels
+ (this is independent of the zoom level). */
+ static const int distanceBetweenWidgets=10;
+
+ bool moveTool;
+};
+
+#endif