okular/ui/pageviewutils.h

136 lines
4 KiB
C
Raw Normal View History

/***************************************************************************
* Copyright (C) 2004-2005 by Enrico Ros <eros.kde@email.it> *
* *
* 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 _PAGEVIEW_UTILS_H_
#define _PAGEVIEW_UTILS_H_
#include <qwidget.h>
#include <qpixmap.h>
#include <qrect.h>
class QTimer;
class KPDFPage;
/**
* @short PageViewItem represents graphically a kpdfpage into the PageView.
*
* It has methods for settings Item's geometry and other visual properties such
* as the individual zoom factor.
*/
class PageViewItem
{
public:
PageViewItem( const KPDFPage * page );
const KPDFPage * page() const;
int pageNumber() const;
const QRect& geometry() const;
int width() const;
int height() const;
double zoomFactor() const;
void setGeometry( int x, int y, int width, int height );
void setWHZ( int w, int h, double zoom );
void moveTo( int x, int y );
void invalidate();
private:
const KPDFPage * m_page;
double m_zoomFactor;
QRect m_geometry;
};
/**
* @short A widget that displays messages in the top-left corner.
*
* This is a widget with thin border and rounded corners that displays a given
* text along as an icon. It's meant to be used for displaying messages to the
* user by placing this above other widgets.
*/
class PageViewMessage : public QWidget
{
public:
PageViewMessage( QWidget * parent );
Adding support for annotations in framework. Only need to add and implement annotations now (and create the save/load procedure). Annotations: converging to a stable Annotation definition. Changed a bit the paint functions. Added a first 'template' annotation, a simple pen-like segments recorder for framework testing purposes only. This has events filters in place and the rough paint function implemented. PageView: removed the MouseEdit mode and using that button for toggling the editToolBox instead. Added Annotation support. When the Annotation is created, all pageView events flow through that new object. Repaint of damaged/old areas is done internally and is based on the geometry of the annotation we're creating. When an Annotation is complete, it is reparented to the Page that adds it to its internal list. From that point on the annotation will be rendered by pagePainter using the pixmap-based paint function provided by the annotation itself. PagePainter: draws annotations stored in pages when rendering (using the 'rought paint function' till the good pixmap based one will be in place. Page: added preliminary support for adding Annotation(s) to the page and deleting them all. Document: added the pass-through call to add an Annotation to the Page and notify observers. PageViewToolbox: can be draged and attached to any side. Position is remembered between runs (choose your side and that the toolbox will always be there). Available on Right and Bottom sides too. Emits -1 when the current tool is deselected. Misc: added Annotations to both the 'observers changed flags' and the 'pagepainter' ones and updated ui classes accordingly. svn path=/branches/kpdf_annotations/kdegraphics/kpdf/; revision=390638
2005-02-18 18:24:45 +00:00
enum Icon { None, Info, Warning, Error, Find, Annotation };
void display( const QString & message, Icon icon = Info, int durationMs = 4000 );
protected:
void paintEvent( QPaintEvent * e );
void mousePressEvent( QMouseEvent * e );
private:
QPixmap m_pixmap;
QTimer * m_timer;
};
/**
* @short A widget containing exclusive buttons, that slides in from a side.
*
* This is a shaped widget that slides in from a side of the 'anchor widget'
* it's attached to. It can be dragged and docked on {left,top,right,bottom}
* sides and contains toggable exclusive buttons.
* When a 'tool' of this 'toolBar' is selected, a signal is emitted.
*/
struct ToolBarItem // FIXME TEMP: MOVE OUT OF HERE!
{
int id;
QString text;
QString pixmap;
QString shortcut;
};
class PageViewToolBar : public QWidget
{
Q_OBJECT
public:
PageViewToolBar( QWidget * parent, QWidget * anchorWidget );
~PageViewToolBar();
// animated widget controls
enum Side { Left = 0, Top = 1, Right = 2, Bottom = 3 };
void showItems( Side side, const QLinkedList<ToolBarItem> & items );
void hideAndDestroy();
// query properties
signals:
// the tool 'toolID' has been selected
void toolSelected( int toolID );
// orientation has been changed
void orientationChanged( int side );
protected:
// handle widget events { anchor_resize, paint, animation, drag }
bool eventFilter( QObject * o, QEvent * e );
void paintEvent( QPaintEvent * );
void mousePressEvent( QMouseEvent * e );
void mouseMoveEvent( QMouseEvent * e );
void mouseReleaseEvent( QMouseEvent * e );
private:
// rebuild contents and reposition then widget
void buildToolBar();
void reposition();
// compute the visible and hidden positions along current side
QPoint getInnerPoint();
QPoint getOuterPoint();
// private variables
class ToolBarPrivate * d;
private slots:
void slotAnimate();
void slotButtonClicked();
};
#endif