#ifndef __GOTO_FLOW_H #define __GOTO_FLOW_H #include #include #include #include #include #include #include #include #include #include #include "custom_widgets.h" class Comic; class SlideInitializer; class PageLoader; class GoToFlow : public QWidget { Q_OBJECT public: GoToFlow(QWidget* parent = 0,PictureFlow::FlowType flowType = PictureFlow::CoverFlowLike); bool ready; //comic is ready for read. void keyPressEvent(QKeyEvent* event); bool eventFilter(QObject *target, QEvent *event); private: YACReaderFlow * flow; QLineEdit * edit; QIntValidator * v; QPushButton * centerButton; QPushButton * goToButton; Comic * comic; QSize imageSize; QVector imagesLoaded; QVector imagesSetted; uint numImagesLoaded; QVector imagesReady; QVector rawImages; QTimer* updateTimer; PageLoader* worker; virtual void wheelEvent(QWheelEvent * event); private slots: void preload(); void updateImageData(); public slots: void goTo(); void setPageNumber(int page); void centerSlide(); void centerSlide(int slide); void reset(); void setNumSlides(unsigned int slides); void setImageReady(int index,const QByteArray & image); void setFlowType(PictureFlow::FlowType flowType); void updateSize(); signals: void goToPage(unsigned int page); }; //----------------------------------------------------------------------------- //SlideInitializer //----------------------------------------------------------------------------- class SlideInitializer : public QThread { public: SlideInitializer(PictureFlow * flow,int slides); private: PictureFlow * _flow; int _slides; void run(); }; //----------------------------------------------------------------------------- //PageLoader //----------------------------------------------------------------------------- class PageLoader : public QThread { public: PageLoader(); ~PageLoader(); // returns FALSE if worker is still busy and can't take the task bool busy() const; void generate(int index, QSize size,const QByteArray & rImage); void reset(){idx = -1;}; int index() const { return idx; } QImage result() const { return img; } protected: void run(); private: QWaitCondition condition; bool restart; bool working; int idx; QSize size; QImage img; QByteArray rawImage; }; #endif