mirror of
https://github.com/YACReader/yacreader
synced 2025-07-19 05:24:57 -04:00
fixed rating delegate/widget
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
YACReaderTableView::YACReaderTableView(QWidget *parent) :
|
YACReaderTableView::YACReaderTableView(QWidget *parent) :
|
||||||
QTableView(parent),showDelete(false),editing(false)
|
QTableView(parent),showDelete(false),editing(false),myeditor(0)
|
||||||
{
|
{
|
||||||
setAlternatingRowColors(true);
|
setAlternatingRowColors(true);
|
||||||
verticalHeader()->setAlternatingRowColors(true);
|
verticalHeader()->setAlternatingRowColors(true);
|
||||||
@ -62,27 +62,75 @@ void YACReaderTableView::mouseMoveEvent(QMouseEvent *event)
|
|||||||
if(selectedIndexes.contains(mi))
|
if(selectedIndexes.contains(mi))
|
||||||
{
|
{
|
||||||
if(mi.column() == 11)
|
if(mi.column() == 11)
|
||||||
if(!editing)
|
|
||||||
{
|
{
|
||||||
editing = true;
|
if(!editing)
|
||||||
currentIndexEditing = mi;
|
{
|
||||||
edit(mi);
|
editing = true;
|
||||||
|
currentIndexEditing = mi;
|
||||||
|
edit(mi);
|
||||||
|
myeditor = indexWidget(mi);
|
||||||
|
}
|
||||||
|
else if(mi.row() != currentIndexEditing.row())
|
||||||
|
closeRatingEditor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
closeRatingEditor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
closeRatingEditor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
closeRatingEditor();
|
||||||
|
|
||||||
|
QTableView::mouseMoveEvent(event);
|
||||||
|
}
|
||||||
|
void YACReaderTableView::mousePressEvent(QMouseEvent * event)
|
||||||
|
{
|
||||||
|
QTableView::mousePressEvent(event);
|
||||||
|
QModelIndex mi = indexAt(event->pos());
|
||||||
|
if(mi.isValid())
|
||||||
|
{
|
||||||
|
QList<QModelIndex> selectedIndexes = this->selectedIndexes();
|
||||||
|
if(selectedIndexes.contains(mi))
|
||||||
|
{
|
||||||
|
if(mi.column() == 11)
|
||||||
|
{
|
||||||
|
if(!editing)
|
||||||
|
{
|
||||||
|
editing = true;
|
||||||
|
currentIndexEditing = mi;
|
||||||
|
edit(mi);
|
||||||
|
myeditor = indexWidget(mi);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QTableView::mouseMoveEvent(event);
|
}
|
||||||
|
void YACReaderTableView::leaveEvent(QEvent * event)
|
||||||
|
{
|
||||||
|
closeRatingEditor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void YACReaderTableView::closeRatingEditor()
|
||||||
|
{
|
||||||
|
editing = false;
|
||||||
|
if(myeditor!=0)
|
||||||
|
closeEditor(myeditor,QAbstractItemDelegate::NoHint);
|
||||||
|
myeditor = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void YACReaderTableView::closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint )
|
void YACReaderTableView::closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint )
|
||||||
{
|
{
|
||||||
editing = false;
|
editing = false;
|
||||||
|
myeditor = 0;
|
||||||
QTableView::closeEditor(editor,hint);
|
QTableView::closeEditor(editor,hint);
|
||||||
}
|
}
|
||||||
void YACReaderTableView::commitData ( QWidget * editor )
|
void YACReaderTableView::commitData ( QWidget * editor )
|
||||||
{
|
{
|
||||||
//TODO
|
//TODO
|
||||||
emit comicRated(((StarEditor *)editor)->starRating().starCount(),currentIndexEditing);
|
StarEditor *starEditor = qobject_cast<StarEditor *>(editor);
|
||||||
|
if(starEditor->getShouldCommitData())
|
||||||
|
emit comicRated(((StarEditor *)editor)->starRating().starCount(),currentIndexEditing);
|
||||||
}
|
}
|
||||||
|
|
||||||
void YACReaderTableView::showDeleteProgress()
|
void YACReaderTableView::showDeleteProgress()
|
||||||
@ -152,7 +200,6 @@ QSize YACReaderRatingDelegate::sizeHint(const QStyleOptionViewItem &option,
|
|||||||
QWidget *YACReaderRatingDelegate::createEditor(QWidget *parent,
|
QWidget *YACReaderRatingDelegate::createEditor(QWidget *parent,
|
||||||
const QStyleOptionViewItem &option,
|
const QStyleOptionViewItem &option,
|
||||||
const QModelIndex &index) const
|
const QModelIndex &index) const
|
||||||
|
|
||||||
{
|
{
|
||||||
StarEditor *editor = new StarEditor(parent);
|
StarEditor *editor = new StarEditor(parent);
|
||||||
connect(editor, SIGNAL(editingFinished()),
|
connect(editor, SIGNAL(editingFinished()),
|
||||||
@ -268,7 +315,7 @@ void StarRating::paintSelected(QPainter *painter, const QRect &rect,
|
|||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
|
|
||||||
QBrush star(color);
|
QBrush star(color);
|
||||||
QBrush dot(color);
|
QBrush dot(QColor("#ffffff"));
|
||||||
|
|
||||||
int yOffset = (rect.height() - PaintingScaleFactor) / 2;
|
int yOffset = (rect.height() - PaintingScaleFactor) / 2;
|
||||||
painter->translate(rect.x(), rect.y() + yOffset);
|
painter->translate(rect.x(), rect.y() + yOffset);
|
||||||
@ -308,9 +355,10 @@ void StarRating::mouseMoveEvent(QMouseEvent *event)
|
|||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
StarEditor::StarEditor(QWidget *parent)
|
StarEditor::StarEditor(QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent),shouldCommitData(false)
|
||||||
{
|
{
|
||||||
setMouseTracking(true);
|
//setMouseTracking(true);
|
||||||
|
//setAutoFillBackground(true);
|
||||||
}
|
}
|
||||||
//! [0]
|
//! [0]
|
||||||
|
|
||||||
@ -322,24 +370,24 @@ QSize StarEditor::sizeHint() const
|
|||||||
//! [1]
|
//! [1]
|
||||||
void StarEditor::paintEvent(QPaintEvent *)
|
void StarEditor::paintEvent(QPaintEvent *)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
myStarRating.paintSelected(&painter, rect(), this->palette(),
|
myStarRating.paintSelected(&painter, rect(), this->palette(),
|
||||||
StarRating::Editable,QColor("#A0A0A0"));
|
StarRating::Editable,QColor("#615f59"));*/
|
||||||
}
|
}
|
||||||
//! [1]
|
//! [1]
|
||||||
|
|
||||||
//! [2]
|
//! [2]
|
||||||
void StarEditor::mouseMoveEvent(QMouseEvent *event)
|
void StarEditor::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
int star = starAtPosition(event->x());
|
/*int star = starAtPosition(event->x());
|
||||||
|
|
||||||
if (star != myStarRating.starCount() && star != -1) {
|
if (star != myStarRating.starCount() && star != -1) {
|
||||||
myStarRating.setStarCount(star);
|
myStarRating.setStarCount(star);
|
||||||
update();
|
update();
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
//! [2]
|
//! [2]
|
||||||
|
|
||||||
void StarEditor::leaveEvent(QEvent * event){
|
void StarEditor::leaveEvent(QEvent * event){
|
||||||
emit editingFinished();
|
emit editingFinished();
|
||||||
QWidget::leaveEvent(event);
|
QWidget::leaveEvent(event);
|
||||||
@ -347,9 +395,17 @@ void StarEditor::leaveEvent(QEvent * event){
|
|||||||
|
|
||||||
|
|
||||||
//! [3]
|
//! [3]
|
||||||
void StarEditor::mouseReleaseEvent(QMouseEvent * event )
|
void StarEditor::mousePressEvent(QMouseEvent * event )
|
||||||
{
|
{
|
||||||
emit commitData();
|
int star = starAtPosition(event->x());
|
||||||
|
|
||||||
|
if (star != myStarRating.starCount() && star != -1) {
|
||||||
|
myStarRating.setStarCount(star);
|
||||||
|
shouldCommitData = true;
|
||||||
|
emit commitData();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//! [3]
|
//! [3]
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ signals:
|
|||||||
public slots:
|
public slots:
|
||||||
void showDeleteProgress();
|
void showDeleteProgress();
|
||||||
void hideDeleteProgress();
|
void hideDeleteProgress();
|
||||||
|
void closeRatingEditor();
|
||||||
protected slots:
|
protected slots:
|
||||||
|
|
||||||
virtual void closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint );
|
virtual void closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint );
|
||||||
@ -30,9 +31,12 @@ private:
|
|||||||
|
|
||||||
void resizeEvent(QResizeEvent * event);
|
void resizeEvent(QResizeEvent * event);
|
||||||
void mouseMoveEvent(QMouseEvent *event);
|
void mouseMoveEvent(QMouseEvent *event);
|
||||||
|
void mousePressEvent(QMouseEvent * event);
|
||||||
|
void leaveEvent(QEvent * event);
|
||||||
|
|
||||||
bool editing;
|
bool editing;
|
||||||
QModelIndex currentIndexEditing;
|
QModelIndex currentIndexEditing;
|
||||||
|
QWidget * myeditor;
|
||||||
};
|
};
|
||||||
|
|
||||||
//---
|
//---
|
||||||
@ -64,9 +68,9 @@ private slots:
|
|||||||
class StarRating
|
class StarRating
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum EditMode { Editable, ReadOnly };
|
enum EditMode { Editable, ReadOnly };
|
||||||
|
|
||||||
StarRating(int starCount = 1, int maxStarCount = 5);
|
StarRating(int starCount = 1, int maxStarCount = 5);
|
||||||
|
|
||||||
void paint(QPainter *painter, const QRect &rect,
|
void paint(QPainter *painter, const QRect &rect,
|
||||||
const QPalette &palette, EditMode mode) const;
|
const QPalette &palette, EditMode mode) const;
|
||||||
@ -76,45 +80,47 @@ public:
|
|||||||
const QPalette &palette, EditMode mode) const;
|
const QPalette &palette, EditMode mode) const;
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
int starCount() const { return myStarCount; }
|
int starCount() const { return myStarCount; }
|
||||||
int maxStarCount() const { return myMaxStarCount; }
|
int maxStarCount() const { return myMaxStarCount; }
|
||||||
void setStarCount(int starCount) { myStarCount = starCount; }
|
void setStarCount(int starCount) { myStarCount = starCount; }
|
||||||
void setMaxStarCount(int maxStarCount) { myMaxStarCount = maxStarCount; }
|
void setMaxStarCount(int maxStarCount) { myMaxStarCount = maxStarCount; }
|
||||||
protected:
|
protected:
|
||||||
void mouseMoveEvent(QMouseEvent *event);
|
void mouseMoveEvent(QMouseEvent *event);
|
||||||
private:
|
private:
|
||||||
QPolygonF starPolygon;
|
QPolygonF starPolygon;
|
||||||
QPolygonF diamondPolygon;
|
QPolygonF diamondPolygon;
|
||||||
int myStarCount;
|
int myStarCount;
|
||||||
int myMaxStarCount;
|
int myMaxStarCount;
|
||||||
};
|
};
|
||||||
Q_DECLARE_METATYPE(StarRating);
|
Q_DECLARE_METATYPE(StarRating);
|
||||||
//---
|
//---
|
||||||
|
|
||||||
class StarEditor : public QWidget
|
class StarEditor : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
StarEditor(QWidget *parent = 0);
|
StarEditor(QWidget *parent = 0);
|
||||||
|
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
void setStarRating(const StarRating &starRating) {
|
void setStarRating(const StarRating &starRating) {
|
||||||
myStarRating = starRating;
|
myStarRating = starRating;
|
||||||
}
|
}
|
||||||
StarRating starRating() { return myStarRating; }
|
StarRating starRating() { return myStarRating; }
|
||||||
|
bool getShouldCommitData() {return shouldCommitData;};
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void editingFinished();
|
void editingFinished();
|
||||||
void commitData();
|
void commitData();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
void mouseMoveEvent(QMouseEvent *event);
|
void mouseMoveEvent(QMouseEvent *event);
|
||||||
void mouseReleaseEvent(QMouseEvent *event);
|
void mousePressEvent(QMouseEvent *event);
|
||||||
void leaveEvent(QEvent * event);
|
void leaveEvent(QEvent * event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int starAtPosition(int x);
|
int starAtPosition(int x);
|
||||||
StarRating myStarRating;
|
StarRating myStarRating;
|
||||||
|
bool shouldCommitData;
|
||||||
};
|
};
|
||||||
#endif // YACREADER_TABLE_VIEW_H
|
#endif // YACREADER_TABLE_VIEW_H
|
||||||
|
Reference in New Issue
Block a user