yacreader/custom_widgets/yacreader_table_view.h
Luis Ángel San Martín 5aa02a19bb clang-format
2021-10-18 21:56:52 +02:00

137 lines
3.6 KiB
C++

#ifndef YACREADER_TABLE_VIEW_H
#define YACREADER_TABLE_VIEW_H
#include <QTableView>
#include <QStyledItemDelegate>
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