fixed rating delegate/widget

This commit is contained in:
Luis Ángel San Martín
2013-08-21 20:49:34 +02:00
parent 1763b16ccd
commit 7eeebe428b
2 changed files with 102 additions and 40 deletions

View File

@ -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,26 +62,74 @@ void YACReaderTableView::mouseMoveEvent(QMouseEvent *event)
if(selectedIndexes.contains(mi)) if(selectedIndexes.contains(mi))
{ {
if(mi.column() == 11) if(mi.column() == 11)
{
if(!editing) if(!editing)
{ {
editing = true; editing = true;
currentIndexEditing = mi; currentIndexEditing = mi;
edit(mi); edit(mi);
myeditor = indexWidget(mi);
} }
else if(mi.row() != currentIndexEditing.row())
closeRatingEditor();
} }
else
closeRatingEditor();
} }
else
closeRatingEditor();
}
else
closeRatingEditor();
QTableView::mouseMoveEvent(event); 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);
}
}
}
}
}
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
StarEditor *starEditor = qobject_cast<StarEditor *>(editor);
if(starEditor->getShouldCommitData())
emit comicRated(((StarEditor *)editor)->starRating().starCount(),currentIndexEditing); emit comicRated(((StarEditor *)editor)->starRating().starCount(),currentIndexEditing);
} }
@ -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 )
{ {
int star = starAtPosition(event->x());
if (star != myStarRating.starCount() && star != -1) {
myStarRating.setStarCount(star);
shouldCommitData = true;
emit commitData(); emit commitData();
}
} }
//! [3] //! [3]

View File

@ -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;
}; };
//--- //---
@ -102,6 +106,7 @@ public:
myStarRating = starRating; myStarRating = starRating;
} }
StarRating starRating() { return myStarRating; } StarRating starRating() { return myStarRating; }
bool getShouldCommitData() {return shouldCommitData;};
signals: signals:
void editingFinished(); void editingFinished();
@ -110,11 +115,12 @@ signals:
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