diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2010-03-05 21:09:08 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2010-03-05 21:09:08 +0000 |
| commit | bc6a115358931e7111a4c0a3efb2055af64dbcc0 (patch) | |
| tree | 204b862f00311949ec23bf2f168c5f6a6378a418 /src/ui/listwidget.cpp | |
| parent | da5d96f90bc3c54b85ec23db9d856b837278cb83 (diff) | |
| download | qmmp-bc6a115358931e7111a4c0a3efb2055af64dbcc0.tar.gz qmmp-bc6a115358931e7111a4c0a3efb2055af64dbcc0.tar.bz2 qmmp-bc6a115358931e7111a4c0a3efb2055af64dbcc0.zip | |
fixed popup widget
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1601 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/ui/listwidget.cpp')
| -rw-r--r-- | src/ui/listwidget.cpp | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/src/ui/listwidget.cpp b/src/ui/listwidget.cpp index 0c04cc211..c4d905195 100644 --- a/src/ui/listwidget.cpp +++ b/src/ui/listwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2009 by Ilya Kotov * + * Copyright (C) 2006-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -246,19 +246,24 @@ void ListWidget::wheelEvent (QWheelEvent *e) bool ListWidget::event (QEvent *e) { - if(e->type() == QEvent::ToolTip) + if(m_popupWidget) { - QHelpEvent *helpEvent = (QHelpEvent *) e; - int row = rowAt(helpEvent->y()); - if(row < 0) - return QWidget::event(e); - e->accept(); - if(m_popupWidget) - m_popupWidget->popup(m_model->item(row), helpEvent->globalPos() + QPoint(15,10)); - return TRUE; + if(e->type() == QEvent::ToolTip) + { + QHelpEvent *helpEvent = (QHelpEvent *) e; + int row = rowAt(helpEvent->y()); + if(row < 0) + { + m_popupWidget->deactivate(); + return QWidget::event(e); + } + e->accept(); + m_popupWidget->prepare(m_model->item(row), helpEvent->globalPos()); + return TRUE; + } + else if(e->type() == QEvent::Leave) + m_popupWidget->deactivate(); } - else if(e->type() == QEvent::Leave && m_popupWidget) - m_popupWidget->hide(); return QWidget::event(e); } @@ -411,7 +416,7 @@ void ListWidget::mouseMoveEvent(QMouseEvent *e) return; if (row + 1 == m_first + m_rows && m_scroll_direction == DOWN) - (m_first + m_rows < m_model->count() ) ? m_first ++ : m_first; + (m_first + m_rows < m_model->count()) ? m_first ++ : m_first; else if (row == m_first && m_scroll_direction == TOP) (m_first > 0) ? m_first -- : 0; @@ -421,8 +426,12 @@ void ListWidget::mouseMoveEvent(QMouseEvent *e) m_pressed_row = row; } } - else if(e->buttons() == Qt::NoButton && m_popupWidget && m_popupWidget->isVisible()) - m_popupWidget->move(e->globalPos() + QPoint(15,10)); + else if(m_popupWidget) + { + int row = rowAt(e->y()); + if(row < 0 || m_popupWidget->item() != m_model->item(row)) + m_popupWidget->deactivate(); + } } void ListWidget::mouseReleaseEvent(QMouseEvent *e) @@ -445,7 +454,7 @@ int ListWidget::rowAt(int y) const if (y <= 14 && y >= 2 && m_model->count()) return m_first; - for (int i = 0; i < qMin(m_rows, m_model->count() - m_first) - 1; ++i ) + for (int i = 0; i < qMin(m_rows, m_model->count() - m_first) - 1; ++i) { if ((y >= 14 + i * m_metrics->ascent ()) && (y <= 14 + (i+1) * m_metrics->ascent())) return m_first + i + 1; |
