1 //C- -*- C++ -*- 2 //C- ------------------------------------------------------------------- 3 //C- DjView4 4 //C- Copyright (c) 2006- Leon Bottou 5 //C- 6 //C- This software is subject to, and may be distributed under, the 7 //C- GNU General Public License, either version 2 of the license, 8 //C- or (at your option) any later version. The license should have 9 //C- accompanied the software or you may obtain a copy of the license 10 //C- from the Free Software Foundation at http://www.fsf.org . 11 //C- 12 //C- This program is distributed in the hope that it will be useful, 13 //C- but WITHOUT ANY WARRANTY; without even the implied warranty of 14 //C- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 //C- GNU General Public License for more details. 16 //C- ------------------------------------------------------------------ 17 18 #ifndef QDJVUWIDGET_H 19 #define QDJVUWIDGET_H 20 21 #if AUTOCONF 22 # include "config.h" 23 #endif 24 25 #include "qdjvu.h" 26 27 #include <QPoint> 28 #include <QWidget> 29 #include <QMenu> 30 #include <QAbstractScrollArea> 31 32 33 class QDjVuPrivate; 34 class QDjVuLens; 35 36 class QDjVuWidget : public QAbstractScrollArea 37 { 38 Q_OBJECT 39 Q_ENUMS(DisplayMode PointerMode Align Priority) 40 Q_PROPERTY(int page 41 READ page WRITE setPage) 42 Q_PROPERTY(int rotation 43 READ rotation WRITE setRotation) 44 Q_PROPERTY(int zoom 45 READ zoom WRITE setZoom) 46 Q_PROPERTY(double gamma 47 READ gamma WRITE setGamma) 48 Q_PROPERTY(double bool 49 READ invertLuminance WRITE setInvertLuminance) 50 Q_PROPERTY(QColor white 51 READ white WRITE setWhite) 52 Q_PROPERTY(int screenDpi 53 READ screenDpi WRITE setScreenDpi) 54 Q_PROPERTY(DisplayMode displayMode 55 READ displayMode WRITE setDisplayMode) 56 Q_PROPERTY(bool displayFrame 57 READ displayFrame WRITE setDisplayFrame) 58 Q_PROPERTY(Align horizAlign 59 READ horizAlign WRITE setHorizAlign) 60 Q_PROPERTY(Align vertAlign 61 READ vertAlign WRITE setVertAlign) 62 Q_PROPERTY(bool continuous 63 READ continuous WRITE setContinuous) 64 Q_PROPERTY(bool sideBySide 65 READ sideBySide WRITE setSideBySide) 66 Q_PROPERTY(bool coverPage 67 READ coverPage WRITE setCoverPage) 68 Q_PROPERTY(bool rightToLeft 69 READ rightToLeft WRITE setRightToLeft) 70 Q_PROPERTY(QBrush borderBrush 71 READ borderBrush WRITE setBorderBrush) 72 Q_PROPERTY(int borderSize 73 READ borderSize WRITE setBorderSize) 74 Q_PROPERTY(int separatorSize 75 READ separatorSize WRITE setSeparatorSize) 76 Q_PROPERTY(int pixelCacheSize 77 READ pixelCacheSize WRITE setPixelCacheSize) 78 Q_PROPERTY(bool displayMapAreas 79 READ displayMapAreas WRITE setDisplayMapAreas) 80 Q_PROPERTY(bool keyboardEnabled 81 READ keyboardEnabled WRITE enableKeyboard) 82 Q_PROPERTY(bool hyperlinkEnabled 83 READ hyperlinkEnabled WRITE enableHyperlink) 84 Q_PROPERTY(bool mouseEnabled 85 READ mouseEnabled WRITE enableMouse) 86 Q_PROPERTY(bool animationEnabled 87 READ animationEnabled WRITE enableAnimation) 88 Q_PROPERTY(bool animationInProgress 89 READ animationInProgress) 90 Q_PROPERTY(bool mouseWheelZoom 91 READ mouseWheelZoom WRITE setMouseWheelZoom) 92 Q_PROPERTY(int lensPower 93 READ lensPower WRITE setLensPower) 94 Q_PROPERTY(int lensSize 95 READ lensSize WRITE setLensSize) 96 Q_PROPERTY(double hourGlassRatio 97 READ hourGlassRatio WRITE setHourGlassRatio) 98 Q_PROPERTY(QDjVuDocument* document 99 READ document WRITE setDocument) 100 Q_PROPERTY(QMenu* contextMenu 101 READ contextMenu WRITE setContextMenu) 102 Q_PROPERTY(Position position 103 READ position WRITE setPosition) 104 Q_PROPERTY(Qt::KeyboardModifiers modifiersForLens 105 READ modifiersForLens WRITE setModifiersForLens) 106 Q_PROPERTY(Qt::KeyboardModifiers modifiersForSelect 107 READ modifiersForSelect WRITE setModifiersForSelect) 108 Q_PROPERTY(Qt::KeyboardModifiers modifiersForLinks 109 READ modifiersForLinks WRITE setModifiersForLinks) 110 111 public: 112 113 enum { 114 ZOOM_STRETCH = -4, //!< Stretch full page into viewport 115 ZOOM_ONE2ONE = -3, //!< Maximal resolution for each page 116 ZOOM_FITPAGE = -2, //!< Fit entire pages into viewport 117 ZOOM_FITWIDTH = -1, //!< Fit page width into viewport 118 ZOOM_MIN = 5, //!< Minimal magnification 119 ZOOM_100 = 100, //!< Standard magnification 120 ZOOM_MAX = 1200, //!< Maximal magnification 121 }; 122 123 enum DisplayMode { 124 DISPLAY_COLOR, //!< Default dislplay mode 125 DISPLAY_STENCIL, //!< Only display the b&w mask layer 126 DISPLAY_BG, //!< Only display the background layer 127 DISPLAY_FG, //!< Only display the foregroud layer 128 DISPLAY_TEXT, //!< Overprint the text layer 129 }; 130 131 enum Align { 132 ALIGN_TOP, //!< Align page top sides. 133 ALIGN_LEFT = ALIGN_TOP, //!< Align page left sides. 134 ALIGN_CENTER, //!< Center pages. 135 ALIGN_BOTTOM, //!< Align page bottom sides. 136 ALIGN_RIGHT = ALIGN_BOTTOM, //!< Align page right sides. 137 }; 138 139 enum Priority { 140 PRIORITY_DEFAULT, //!< Priority for default option values. 141 PRIORITY_ANNO, //!< Priority for annotation defined options. 142 PRIORITY_CGI, //!< Priority for cgi defined options. 143 PRIORITY_USER, //!< Priority for gui defined options. 144 }; 145 146 struct Position { 147 int pageNo; 148 QPoint posPage; 149 QPoint posView; 150 bool inPage; 151 bool doPage; 152 char hAnchor; 153 char vAnchor; 154 Position(); 155 }; 156 157 struct PageInfo { 158 int pageno; 159 int dpi; 160 int width; 161 int height; 162 QRect segment; 163 QRect selected; 164 }; 165 166 ~QDjVuWidget(); 167 168 QDjVuWidget(QWidget *parent=0); 169 QDjVuWidget(QDjVuDocument *doc, QWidget *parent=0); 170 QDjVuWidget(bool opengl, QWidget *parent=0); 171 QDjVuWidget(QDjVuDocument *doc, bool opengl, QWidget *parent=0); 172 173 QDjVuDocument *document(void) const; 174 int page(void) const; 175 QPoint hotSpot(void) const; 176 Position position(void) const; 177 Position position(const QPoint &point) const; 178 Position positionWithClosestAnchor(const QPoint &point) const; 179 int rotation(void) const; 180 int zoom(void) const; 181 int zoomFactor(void) const; 182 double gamma(void) const; 183 bool invertLuminance(void) const; 184 QColor white(void) const; 185 int screenDpi(void) const; 186 DisplayMode displayMode(void) const; 187 bool displayFrame(void) const; 188 Align horizAlign(void) const; 189 Align vertAlign(void) const; 190 bool continuous(void) const; 191 bool sideBySide(void) const; 192 bool coverPage(void) const; 193 bool rightToLeft(void) const; 194 QBrush borderBrush(void) const; 195 int borderSize(void) const; 196 int separatorSize(void) const; 197 QMenu* contextMenu(void) const; 198 int pixelCacheSize(void) const; 199 bool displayMapAreas(void) const; 200 bool keyboardEnabled(void) const; 201 bool mouseEnabled(void) const; 202 bool hyperlinkEnabled(void) const; 203 bool animationEnabled(void) const; 204 bool animationInProgress(void) const; 205 bool mouseWheelZoom(void) const; 206 int lensPower(void) const; 207 int lensSize(void) const; 208 double hourGlassRatio(void) const; 209 Qt::KeyboardModifiers modifiersForLens() const; 210 Qt::KeyboardModifiers modifiersForSelect() const; 211 Qt::KeyboardModifiers modifiersForLinks() const; 212 213 public slots: 214 void setDocument(QDjVuDocument *d); 215 void setPage(int p, bool keep=false); 216 void setPosition(const Position &pos); 217 void setPosition(const Position &pos, const QPoint &p, bool animate=true); 218 void setRotation(int); 219 void setZoom(int); 220 void setGamma(double); 221 void setInvertLuminance(bool); 222 void setWhite(QColor); 223 void setScreenDpi(int); 224 void setDisplayMode(DisplayMode m); 225 void setDisplayFrame(bool); 226 void setHorizAlign(Align); 227 void setVertAlign(Align); 228 void setContinuous(bool); 229 void setSideBySide(bool); 230 void setCoverPage(bool); 231 void setRightToLeft(bool); 232 void setBorderBrush(QBrush); 233 void setBorderSize(int); 234 void setSeparatorSize(int); 235 void setContextMenu(QMenu*); 236 void setDisplayMapAreas(bool); 237 void setPixelCacheSize(int); 238 void enableKeyboard(bool); 239 void enableMouse(bool); 240 void enableHyperlink(bool); 241 void enableAnimation(bool); 242 void terminateAnimation(void); 243 void setMouseWheelZoom(bool); 244 void setLensPower(int); 245 void setLensSize(int); 246 void setHourGlassRatio(double ratio); 247 void setModifiersForLens(Qt::KeyboardModifiers); 248 void setModifiersForSelect(Qt::KeyboardModifiers); 249 void setModifiersForLinks(Qt::KeyboardModifiers); 250 void reduceOptionsToPriority(Priority); 251 252 public: 253 QString pastErrorMessage(int n=0); 254 QString pastInfoMessage(int n=0); 255 bool startSelecting(const QPoint &point); 256 bool startPanning(const QPoint &point); 257 bool startLensing(const QPoint &point); 258 bool startLinking(const QPoint &point); 259 bool stopInteraction(void); 260 QString linkUrl(void); 261 QString linkTarget(void); 262 QString linkComment(void); 263 QString getTextForRect(const QRect &rect); 264 bool getTextForPointer(QString results[]); 265 QImage getImageForRect(const QRect &rect); 266 QRect getSegmentForRect(const QRect &rect, int pageNo); 267 268 bool pageSizeKnown(int pageno) const; 269 void clearHighlights(int pageno); 270 void addHighlight(int pageno, int x, int y, int w, int h, 271 QColor color, bool rc=false); 272 273 protected: 274 virtual bool event(QEvent *event); 275 virtual bool viewportEvent (QEvent *event); 276 virtual void scrollContentsBy(int dx, int dy); 277 virtual void resizeEvent(QResizeEvent *event); 278 virtual void keyPressEvent(QKeyEvent *event); 279 virtual void modifierEvent(Qt::KeyboardModifiers, Qt::MouseButtons, QPoint); 280 virtual void mousePressEvent(QMouseEvent *event); 281 virtual void mouseDoubleClickEvent(QMouseEvent *event); 282 virtual void mouseReleaseEvent(QMouseEvent *event); 283 virtual void mouseMoveEvent(QMouseEvent *event); 284 virtual void contextMenuEvent (QContextMenuEvent *event); 285 virtual void wheelEvent(QWheelEvent *e); 286 virtual void gestureEvent(QEvent *e); 287 virtual void paintEvent(QPaintEvent *event); 288 virtual void chooseTooltip(void); 289 virtual void paintDesk(QPainter &p, const QRegion ®ion); 290 virtual void paintFrame(QPainter &p, const QRect &rect, int width); 291 virtual void paintEmpty(QPainter &p, const QRect &rect, bool, bool, bool); 292 293 public slots: 294 void nextPage(void); 295 void prevPage(void); 296 void firstPage(void); 297 void lastPage(void); 298 void moveToPageTop(void); 299 void moveToPageBottom(void); 300 void readNext(void); 301 void readPrev(void); 302 void zoomIn(void); 303 void zoomOut(void); 304 void zoomRect(QRect rect); 305 void displayModeColor(void); 306 void displayModeStencil(void); 307 void displayModeBackground(void); 308 void displayModeForeground(void); 309 void displayModeText(void); 310 void rotateRight(void); 311 void rotateLeft(void); 312 313 signals: 314 void layoutChanged(); 315 void pageChanged(int pageno); 316 void pointerPosition(const Position &pos, const PageInfo &page); 317 void pointerEnter(const Position &pos, miniexp_t maparea); 318 void pointerLeave(const Position &pos, miniexp_t maparea); 319 void pointerClick(const Position &pos, miniexp_t maparea); 320 void pointerSelect(const QPoint &pointerPos, const QRect &rect); 321 void errorCondition(int pageno); 322 void stopCondition(int pageno); 323 void keyPressSignal(QKeyEvent *event, bool &done); 324 void error(QString message, QString filename, int lineno); 325 void info(QString message); 326 327 private: 328 QDjVuPrivate *priv; 329 friend class QDjVuPrivate; 330 friend class QDjVuLens; 331 }; 332 333 334 335 336 337 #endif 338 339 /* ------------------------------------------------------------- 340 Local Variables: 341 c++-font-lock-extra-types: ( "\\sw+_t" "[A-Z]\\sw*[a-z]\\sw*" ) 342 End: 343 ------------------------------------------------------------- */ 344