mirror of
https://github.com/YACReader/yacreader
synced 2025-07-20 05:54:39 -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,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]
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user