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