mirror of
https://github.com/YACReader/yacreader
synced 2025-05-27 19:00:29 -04:00
closeEvent is accepted by default, so this commit does not change the application behavior. But Qt documentation recommends not relying on the default value as subclasses may choose to clear it in their constructor.
192 lines
5.0 KiB
C++
192 lines
5.0 KiB
C++
#ifndef __VIEWER_H
|
|
#define __VIEWER_H
|
|
|
|
#include <QMainWindow>
|
|
|
|
#include <QScrollArea>
|
|
#include <QAction>
|
|
#include <QTimer>
|
|
#include <QLabel>
|
|
#include <QPixmap>
|
|
#include <QKeyEvent>
|
|
#include <QResizeEvent>
|
|
#include <QWheelEvent>
|
|
#include <QMouseEvent>
|
|
#include <QCloseEvent>
|
|
#include <QPropertyAnimation>
|
|
#include <QParallelAnimationGroup>
|
|
#include <QSettings>
|
|
|
|
#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();
|
|
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
|