summaryrefslogtreecommitdiffstats
path: root/kpdf/ui/pageview.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpdf/ui/pageview.h')
-rw-r--r--kpdf/ui/pageview.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/kpdf/ui/pageview.h b/kpdf/ui/pageview.h
new file mode 100644
index 00000000..f6e40991
--- /dev/null
+++ b/kpdf/ui/pageview.h
@@ -0,0 +1,148 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> *
+ * Copyright (C) 2004 by Albert Astals Cid <tsdgeos@terra.es> *
+ * *
+ * With portions of code from kpdf/kpdf_pagewidget.h by: *
+ * Copyright (C) 2002 by Wilco Greven <greven@kde.org> *
+ * Copyright (C) 2003 by Christophe Devriese *
+ * <Christophe.Devriese@student.kuleuven.ac.be> *
+ * Copyright (C) 2003 by Laurent Montel <montel@kde.org> *
+ * Copyright (C) 2003 by Kurt Pfeifle <kpfeifle@danka.de> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+// This file follows coding style described in kdebase/kicker/HACKING
+
+#ifndef _KPDF_PAGEVIEW_H_
+#define _KPDF_PAGEVIEW_H_
+
+#include <qscrollview.h>
+#include <qvaluevector.h>
+#include "core/observer.h"
+
+class KURL;
+class KActionCollection;
+
+class KPDFDocument;
+class PageViewItem;
+class PageViewPrivate;
+class PageViewTip;
+
+/**
+ * @short The main view. Handles zoom and continuous mode.. oh, and page
+ * @short display of course :-)
+ * ...
+ */
+class PageView : public QScrollView, public DocumentObserver
+{
+ Q_OBJECT
+
+ friend class PageViewTip;
+
+ public:
+ PageView( QWidget *parent, KPDFDocument *document );
+ ~PageView();
+
+ // Zoom mode ( last 4 are internally used only! )
+ enum ZoomMode { ZoomFixed, ZoomFitWidth, ZoomFitPage, ZoomFitText,
+ ZoomIn, ZoomOut, ZoomRefreshCurrent };
+ enum MouseMode { MouseNormal, MouseZoom, MouseSelect, MouseEdit };
+
+ // create actions that interact with this widget
+ void setupActions( KActionCollection * collection );
+
+ // used from RMB menu
+ bool canFitPageWidth();
+ void fitPageWidth( int page );
+
+ // inherited from DocumentObserver
+ uint observerId() const { return PAGEVIEW_ID; }
+ void notifySetup( const QValueVector< KPDFPage * > & pages, bool documentChanged );
+ void notifyViewportChanged( bool smoothMove );
+ void notifyPageChanged( int pageNumber, int changedFlags );
+ void notifyContentsCleared( int changedFlags );
+ bool canUnloadPixmap( int pageNum );
+
+ void showText( const QString &text, int ms );
+
+ signals:
+ void urlDropped( const KURL& );
+ void rightClick( const KPDFPage *, const QPoint & );
+
+ protected:
+ // main draw loop, draws pageViews on viewport
+ void viewportPaintEvent( QPaintEvent * pe );
+ void viewportResizeEvent( QResizeEvent* );
+
+ // mouse / keyboard events
+ void keyPressEvent( QKeyEvent* );
+ void imEndEvent( QIMEvent * );
+ void contentsMouseMoveEvent( QMouseEvent* );
+ void contentsMousePressEvent( QMouseEvent* );
+ void contentsMouseReleaseEvent( QMouseEvent* );
+ void wheelEvent( QWheelEvent* );
+
+ // drag and drop related events
+ void dragEnterEvent( QDragEnterEvent* );
+ void dropEvent( QDropEvent* );
+
+ private:
+ // draw items on the opened qpainter
+ void paintItems( QPainter * p, const QRect & clipRect );
+ // update item width and height using current zoom parameters
+ void updateItemSize( PageViewItem * item, int columnWidth, int rowHeight );
+ // return the widget placed on a certain point or 0 if clicking on empty space
+ PageViewItem * pickItemOnPoint( int x, int y );
+ // start / modify / clear selection rectangle
+ void selectionStart( int x, int y, const QColor & color, bool aboveAll = false );
+ void selectionEndPoint( int x, int y );
+ void selectionClear();
+ // update internal zoom values and end in a slotRelayoutPages();
+ void updateZoom( ZoomMode newZm );
+ // update the text on the label using global zoom value or current page's one
+ void updateZoomText();
+ // updates cursor
+ void updateCursor( const QPoint &p );
+ // does the type ahead search
+ void doTypeAheadSearch();
+
+ // don't want to expose classes in here
+ class PageViewPrivate * d;
+
+ private slots:
+ // activated either directly or via QTimer on the viewportResizeEvent
+ void slotRelayoutPages();
+ // activated either directly or via the contentsMoving(int,int) signal
+ void slotRequestVisiblePixmaps( int left = -1, int top = -1 );
+ // activated by the viewport move timer
+ void slotMoveViewport();
+ // activated by the autoscroll timer (Shift+Up/Down keys)
+ void slotAutoScoll();
+ // activated by the dragScroll timer
+ void slotDragScroll();
+ // type-ahead find timeout
+ void findAheadStop();
+ // show the welcome message
+ void slotShowWelcome();
+
+ // connected to local actions (toolbar, menu, ..)
+ void slotZoom();
+ void slotZoomIn();
+ void slotZoomOut();
+ void slotFitToWidthToggled( bool );
+ void slotFitToPageToggled( bool );
+ void slotFitToTextToggled( bool );
+ void slotTwoPagesToggled( bool );
+ void slotContinuousToggled( bool );
+ void slotSetMouseNormal();
+ void slotSetMouseZoom();
+ void slotSetMouseSelect();
+ void slotSetMouseDraw();
+ void slotScrollUp();
+ void slotScrollDown();
+};
+
+#endif