fix: Video button appearing on many row
Change-Id: I1de8f75a1c71faaa82799d173aeb2705b37839eb
Tuleap: #441
diff --git a/smartlist.cpp b/smartlist.cpp
index 88fb5b4..dd635f6 100644
--- a/smartlist.cpp
+++ b/smartlist.cpp
@@ -28,19 +28,22 @@
SmartList::SmartList(QWidget *parent) :
QTreeView(parent)
{
-
verticalScrollBar()->hide();
connect(this, &QAbstractItemView::entered, [this](const QModelIndex & index) {
- removeCombar();
- if (auto widget = indexWidget(index)) {
- widget->setVisible(true);
- } else {
- ComBar* bar = new ComBar();
- setIndexWidget(index, bar);
- connect(bar, &ComBar::btnVideoClicked, this, [=](){ emit btnVideoClicked(); });
- }
- hoveredRow_ = index;
+ auto widget = indexWidget(index);
+ if (!widget) {
+ ComBar* bar = new ComBar();
+ setIndexWidget(index, bar);
+ connect(bar, &ComBar::btnVideoClicked, this, [=](){ emit btnVideoClicked(); });
+ }
+ else if (index.isValid())
+ indexWidget(index)->setVisible(true);
+
+ if(hoveredRow_.isValid() and indexWidget(hoveredRow_))
+ indexWidget(hoveredRow_)->setVisible(false);
+
+ hoveredRow_ = index;
});
setVerticalScrollMode(ScrollPerPixel);
@@ -48,7 +51,7 @@
SmartList::~SmartList()
{
-
+ reset();
}
void
@@ -63,16 +66,14 @@
{
Q_UNUSED(event);
+ hoveredRow_ = QModelIndex();
verticalScrollBar()->hide();
-
- removeCombar();
}
void
SmartList::setSmartListItemDelegate(SmartListDelegate* delegate)
{
- if (delegate)
- {
+ if (delegate) {
setItemDelegate(delegate);
smartListDelegate_ = delegate;
}
@@ -83,27 +84,21 @@
{
if (qobject_cast<QScrollBar*>(watched) && event->type() == QEvent::Enter) {
- removeCombar();
+ hoveredRow_ = QModelIndex();
return true;
}
return QObject::eventFilter(watched, event);
}
-void
-SmartList::removeCombar()
-{
- if(not hoveredRow_.isValid())
- return;
-
- if (auto widget = indexWidget(hoveredRow_)) {
- widget->setVisible(false);
- }
-}
void
-SmartList::resizeEvent(QResizeEvent* event)
+SmartList::drawRow(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
- reset();
- QTreeView::resizeEvent(event);
+ if(index == hoveredRow_ && indexWidget(hoveredRow_))
+ indexWidget(index)->setVisible(true);
+ else if(indexWidget(index))
+ indexWidget(index)->setVisible(false);
+
+ QTreeView::drawRow(painter, option, index);
}