#ifndef YACREADER_TABLE_VIEW_H #define YACREADER_TABLE_VIEW_H #include #include class YACReaderDeletingProgress; class QResizeEvent; class QPropertyAnimation; class YACReaderTableView : public QTableView { Q_OBJECT public: explicit YACReaderTableView(QWidget *parent = 0); signals: void comicRated(int, QModelIndex); public slots: void showDeleteProgress(); void hideDeleteProgress(); void closeRatingEditor(); protected slots: virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); virtual void commitData(QWidget *editor); private: YACReaderDeletingProgress *deletingProgress; bool showDelete; QPropertyAnimation *showDeletingProgressAnimation; void resizeEvent(QResizeEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void leaveEvent(QEvent *event); void performDrag(); void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); void dropEvent(QDropEvent *event); bool editing; QModelIndex currentIndexEditing; QWidget *myeditor; // drag from here QPoint startDragPos; }; //--- class YACReaderRatingDelegate : public QStyledItemDelegate { Q_OBJECT public: YACReaderRatingDelegate(QWidget *parent = 0) : QStyledItemDelegate(parent) { } void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; private slots: void sendCloseEditor(); void sendCommitData(); }; //--- class StarRating { public: enum EditMode { Editable, ReadOnly }; StarRating(int starCount = 1, int maxStarCount = 5); void paint(QPainter *painter, const QRect &rect, const QPalette &palette, EditMode mode) const; void paintSelected(QPainter *painter, const QRect &rect, const QPalette &palette, EditMode mode, QColor color) const; void paintSelected(QPainter *painter, const QRect &rect, const QPalette &palette, EditMode mode) const; QSize sizeHint() const; int starCount() const { return myStarCount; } int maxStarCount() const { return myMaxStarCount; } void setStarCount(int starCount) { myStarCount = starCount; } void setMaxStarCount(int maxStarCount) { myMaxStarCount = maxStarCount; } private: QPolygonF starPolygon; QPolygonF diamondPolygon; int myStarCount; int myMaxStarCount; }; Q_DECLARE_METATYPE(StarRating); //--- class StarEditor : public QWidget { Q_OBJECT public: StarEditor(QWidget *parent = 0); QSize sizeHint() const; void setStarRating(const StarRating &starRating) { myStarRating = starRating; } StarRating starRating() { return myStarRating; } bool getShouldCommitData() { return shouldCommitData; }; signals: void editingFinished(); void commitData(); protected: void paintEvent(QPaintEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void leaveEvent(QEvent *event); private: int starAtPosition(int x); StarRating myStarRating; bool shouldCommitData; }; #endif // YACREADER_TABLE_VIEW_H