okular/ui/pageviewutils.h
Enrico Ros c6191c4836 Annotations -Part2- PDF1.6 DSs are summarized and ready4impl in ann*.h
Annotation: the class has been passivized. It's only a data container now,
  no more active manipulation of events/paints.
PageViewAnnotator: this class has been created to handle creating annots.
  PageView creates its 'Annotator on demand. The annotator parses tool
  definition from the 'tool.xml' file.
  The Annotator internally uses AnnotatorEngine(s) to react to mouse events
  and the annotation is created when the job is really finished.
Page: added a (maybe temporary) NormalizedPoint to complement Norm..Rect.
PageViewUtils: removed PageViewEditTools and cleaned up header.
conf/: added a debug option for showing annotation boundary while creating
  one and added a temporary 'debug' toolbox in the config dialogs.

svn path=/branches/kpdf_annotations/kdegraphics/kpdf/; revision=394959
2005-03-04 23:06:24 +00:00

135 lines
4 KiB
C++

/***************************************************************************
* 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 );
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 );
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 QValueList<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