/*************************************************************************** * Copyright (C) 2004 by Enrico Ros * * Copyright (C) 2004 by Albert Astals Cid * * * * With portions of code from kpdf_pagewidget.h by: * * Copyright (C) 2002 by Wilco Greven * * Copyright (C) 2003 by Christophe Devriese * * * * Copyright (C) 2003 by Laurent Montel * * Copyright (C) 2003 by Kurt Pfeifle * * * * 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. * ***************************************************************************/ #ifndef _KPDF_PAGEVIEW_H_ #define _KPDF_PAGEVIEW_H_ #include #include //#include "CharTypes.h" #include "document.h" class KURL; class KActionCollection; class PageWidget; class PageViewPrivate; class KToggleAction; /** * @short The main view. Handles zoom and continous mode.. oh, and page * @short display of course :-) * */ class PageView : public QScrollView, public KPDFDocumentObserver { Q_OBJECT public: PageView( QWidget *parent, KPDFDocument *document ); ~PageView(); // Zoom mode ( last 4 are internally used only! ) enum ZoomMode { ZoomFixed, ZoomFitWidth, ZoomFitPage, ZoomFitText, ZoomIn, ZoomOut, ZoomRefreshCurrent, ZoomRect }; enum MouseMode { MouseNormal, MouseSelection, MouseEdit }; // create actions that interact with this widget void setupActions( KActionCollection * collection ); void saveSettings(); // inherited from KPDFDocumentObserver uint observerId() const { return PAGEVIEW_ID; } void pageSetup( const QValueVector & pages, bool documentChanged ); void pageSetCurrent( int pageNumber, const QRect & viewport ); void notifyPixmapChanged( int pageNumber ); protected: void contentsMousePressEvent( QMouseEvent* ); void contentsMouseReleaseEvent( QMouseEvent* ); void contentsMouseMoveEvent( QMouseEvent* ); void keyPressEvent( QKeyEvent* ); void wheelEvent( QWheelEvent* ); void viewportResizeEvent( QResizeEvent* ); void dragEnterEvent( QDragEnterEvent* ); void dropEvent( QDropEvent* ); signals: void urlDropped( const KURL& ); void rightClick(); private slots: // connected to local actions void slotZoom(); void slotZoomIn(); void slotZoomOut(); void slotFitToWidthToggled( bool ); void slotFitToPageToggled( bool ); void slotFitToTextToggled( bool ); void slotFitToRectToggled( bool ); void slotTwoPagesToggled( bool ); void slotContinousToggled( bool ); void slotSetMouseNormal(); void slotSetMouseSelect(); void slotSetMouseDraw(); void slotScrollUp(); void slotScrollDown(); void slotToggleScrollBars( bool on ); // 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 autoscroll timer (Shift+Up/Down keys) void slotAutoScoll(); private: // 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(); // return the widget placed on a certain point or 0 if clicking on empty space PageWidget * pickPageOnPoint( int x, int y ); // FIXME REMOVE ME what does atTop() means if I see 4 tiled pages on screen ? bool atTop() const; bool atBottom() const; void scrollUp(); void scrollDown(); KToggleAction * md; // don't want to expose classes in here class PageViewPrivate * d; }; #endif