/*************************************************************************** * Copyright (C) 2005 by Enrico Ros * * * * 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 _OKULAR_PAGEVIEWANNOTATOR_H_ #define _OKULAR_PAGEVIEWANNOTATOR_H_ #include #include #include #include "pageviewutils.h" #include "annotationtools.h" class QKeyEvent; class QMouseEvent; class QPainter; namespace Okular { class Document; } // engines are defined and implemented in the cpp class AnnotatorEngine; class PageView; /** * @short PageView object devoted to annotation creation/handling. * * PageViewAnnotator is the okular class used for visually creating annotations. * It uses internal 'engines' for interacting with user events and attaches * the newly created annotation to the document when the creation is complete. * In the meanwhile all PageView events (actually mouse/paint ones) are routed * to this class that performs a rough visual representation of what the * annotation will become when finished. * * m_toolsDefinition is a DOM object that contains Annotations/Engine association * for the items placed in the toolbar. The XML is parsed (1) when populating * the toolbar and (2)after selecting a toolbar item, in which case an Ann is * initialized with the values in the XML and an engine is created to handle * that annotation. m_toolsDefinition is created in reparseConfig according to * user configuration. */ class PageViewAnnotator : public QObject { Q_OBJECT public: PageViewAnnotator( PageView * parent, Okular::Document * storage ); ~PageViewAnnotator(); // called to show/hide the editing toolbar void setEnabled( bool enabled ); // called to toggle the usage of text annotating tools void setTextToolsEnabled( bool enabled ); void setToolsEnabled( bool enabled ); void setHidingForced( bool forced ); bool hidingWasForced() const; // methods used when creating the annotation // @return Is a tool currently selected? bool active() const; // @return Are we currently annotating (using the selected tool)? bool annotating() const; // returns the preferred cursor for the current tool. call this only // if active() == true QCursor cursor() const; QRect routeMouseEvent( QMouseEvent * event, PageViewItem * item ); QRect routeTabletEvent( QTabletEvent * event, PageViewItem * item, const QPoint & localOriginInGlobal ); QRect performRouteMouseOrTabletEvent( const AnnotatorEngine::EventType & eventType, const AnnotatorEngine::Button & button, const QPointF & pos, PageViewItem * item ); bool routeKeyEvent( QKeyEvent * event ); bool routePaints( const QRect & wantedRect ) const; void routePaint( QPainter * painter, const QRect & paintRect ); void reparseConfig(); static QString defaultToolName( const QDomElement &toolElement ); static QPixmap makeToolPixmap( const QDomElement &toolElement ); private slots: void slotToolSelected( int toolID ); void slotSaveToolbarOrientation( int side ); void slotToolDoubleClicked( int toolID ); private: void detachAnnotation(); // global class pointers Okular::Document * m_document; PageView * m_pageView; PageViewToolBar * m_toolBar; AnnotatorEngine * m_engine; QDomElement m_toolsDefinition; QLinkedList m_items; bool m_textToolsEnabled; bool m_toolsEnabled; bool m_continuousMode; bool m_hidingWasForced; // creation related variables int m_lastToolID; QRect m_lastDrawnRect; PageViewItem * m_lockedItem; //selected annotation name //QString m_selectedAnnotationName; }; #endif /* kate: replace-tabs on; indent-width 4; */