#ifndef __VIEWER_H #define __VIEWER_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "scroll_management.h" class ComicDB; class Comic; class MagnifyingGlass; class GoToFlow; class BookmarksDialog; class Render; class GoToDialog; class YACReaderTranslator; class GoToFlowWidget; class Bookmarks; class PageLabelWidget; class NotificationsLabelWidget; class Viewer : public QScrollArea, public ScrollManagement { Q_OBJECT public: bool fullscreen; //TODO, change by the right use of windowState(); public slots: void increaseZoomFactor(); void decreaseZoomFactor(); void setZoomFactor(int); int getZoomFactor(); void prepareForOpening(); void open(QString pathFile, int atPage = -1); void open(QString pathFile, const ComicDB &comic); void prev(); void next(); void showGoToDialog(); void goTo(unsigned int page); void updatePage(); void updateContentSize(); void updateVerticalScrollBar(); void updateOptions(); void scrollDown(); void scrollUp(); void scrollForwardHorizontalFirst(); void scrollBackwardHorizontalFirst(); void scrollForwardVerticalFirst(); void scrollBackwardVerticalFirst(); void magnifyingGlassSwitch(); void showMagnifyingGlass(); void hideMagnifyingGlass(); void informationSwitch(); void updateInformation(); void goToFlowSwitch(); void showGoToFlow(); void moveCursoToGoToFlow(); void animateShowGoToFlow(); void animateHideGoToFlow(); void rotateLeft(); void rotateRight(); bool magnifyingGlassIsVisible() { return magnifyingGlassShowed; } void setBookmark(bool); void save(); void doublePageSwitch(); void doubleMangaPageSwitch(); void resetContent(); void setLoadingMessage(); void setPageUnavailableMessage(); void configureContent(QString msg); void hideCursor(); void showCursor(); void createConnections(); void translatorSwitch(); void animateShowTranslator(); void animateHideTranslator(); void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void updateBackgroundColor(const QColor &color); void updateConfig(QSettings *settings); void showMessageErrorOpening(); void showMessageErrorOpening(QString); void processCRCError(QString message); void setBookmarks(); //deprecated void updateImageOptions(); void updateFilters(int brightness, int contrast, int gamma); void showIsCoverMessage(); void showIsLastMessage(); int getCurrentPageNumber(); void updateZoomRatio(int ratio); private: bool information; bool doublePage; bool doubleMangaPage; int zoom; PageLabelWidget *informationLabel; //QTimer * scroller; QPropertyAnimation *verticalScroller; QPropertyAnimation *horizontalScroller; QParallelAnimationGroup *groupScroller; int posByStep; int nextPos; GoToFlowWidget *goToFlow; QPropertyAnimation *showGoToFlowAnimation; GoToDialog *goToDialog; //!Image properties //! Comic //Comic * comic; int index; QPixmap *currentPage; BookmarksDialog *bd; bool wheelStop; Render *render; QTimer *hideCursorTimer; int direction; bool drag; int numScrollSteps; //!Widgets QLabel *content; YACReaderTranslator *translator; int translatorXPos; QPropertyAnimation *translatorAnimation; int yDragOrigin; int xDragOrigin; NotificationsLabelWidget *notificationsLabel; bool shouldOpenNext; bool shouldOpenPrevious; private: //!Magnifying glass MagnifyingGlass *mglass; bool magnifyingGlassShowed; bool restoreMagnifyingGlass; //! Manejadores de evento: void keyPressEvent(QKeyEvent *event) override; void resizeEvent(QResizeEvent *event) override; void wheelEvent(QWheelEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; //!ZigzagScroll enum scrollDirection { UP, DOWN, LEFT, RIGHT }; bool isEdge(scrollDirection d); void scrollZigzag(scrollDirection d1, scrollDirection d2, bool forward); void scrollTo(int x, int y); public: Viewer(QWidget *parent = nullptr); ~Viewer(); void toggleFullScreen(); const QPixmap *pixmap(); //Comic * getComic(){return comic;} const BookmarksDialog *getBookmarksDialog() { return bd; } //returns the current index starting in 1 [1,nPages] unsigned int getIndex(); void updateComic(ComicDB &comic); signals: void backgroundChanges(); void pageAvailable(bool); void pageIsBookmark(bool); void reset(); void openNextComic(); void openPreviousComic(); void zoomUpdated(int); }; #endif