#include <QAbstractButton>
#include <QAbstractItemView>
#include <QAbstractProxyModel>
+#include <QApplication>
#include <QModelIndex>
#include <QPainter>
#include <QPaintEvent>
void SelectionManager::slotEntered(const QModelIndex& index)
{
m_toggle->hide();
- if (index.isValid() && (index.column() == DolphinModel::Name)) {
+ const bool showToggle = index.isValid() &&
+ (index.column() == DolphinModel::Name) &&
+ (QApplication::mouseButtons() == Qt::NoButton);
+ if (showToggle) {
m_toggle->setUrl(urlForIndex(index));
if (!m_connected) {
m_connected = true;
}
- const QRect rect = m_view->visualRect(index);
+ // increase the size of the toggle for large items
+ const int height = m_view->iconSize().height();
+ if (height >= KIconLoader::SizeEnormous) {
+ m_toggle->resize(KIconLoader::SizeMedium, KIconLoader::SizeMedium);
+ } else if (height >= KIconLoader::SizeLarge) {
+ m_toggle->resize(KIconLoader::SizeSmallMedium, KIconLoader::SizeSmallMedium);
+ } else {
+ m_toggle->resize(KIconLoader::SizeSmall, KIconLoader::SizeSmall);
+ }
- const int gap = 2;
- const int x = rect.left() + gap;
- const int y = rect.top() + gap;
+ const QRect rect = m_view->visualRect(index);
+ int x = rect.left();
+ int y = rect.top();
+ if (height < KIconLoader::SizeSmallMedium) {
+ // The height is nearly equal to the smallest toggle height.
+ // Assure that the toggle is vertically centered instead
+ // of aligned on the top and gets more horizontal gap.
+ x += 2;
+ y += (rect.height() - m_toggle->height()) / 2;
+ }
m_toggle->move(QPoint(x, y));
QItemSelectionModel* selModel = m_view->selectionModel();
{
emit selectionChanged();
- const QModelIndex index = indexForUrl(m_toggle->url());
- if (index.isValid()) {
- QItemSelectionModel* selModel = m_view->selectionModel();
- if (selected) {
- selModel->select(index, QItemSelectionModel::Select);
- } else {
- selModel->select(index, QItemSelectionModel::Deselect);
+ if (!m_toggle->url().isEmpty()) {
+ const QModelIndex index = indexForUrl(m_toggle->url());
+ if (index.isValid()) {
+ QItemSelectionModel* selModel = m_view->selectionModel();
+ if (selected) {
+ selModel->select(index, QItemSelectionModel::Select);
+ } else {
+ selModel->select(index, QItemSelectionModel::Deselect);
+ }
+ selModel->setCurrentIndex(index, QItemSelectionModel::Current);
}
- selModel->setCurrentIndex(index, QItemSelectionModel::Current);
}
}
// The selection has been changed outside the scope of the selection manager
// (e. g. by the rubberband or the "Select All" action). Take care updating
// the state of the toggle button.
- const QModelIndex index = indexForUrl(m_toggle->url());
- if (index.isValid()) {
- if (selected.contains(index)) {
- m_toggle->setChecked(true);
- }
-
- if (deselected.contains(index)) {
- m_toggle->setChecked(false);
+ if (!m_toggle->url().isEmpty()) {
+ const QModelIndex index = indexForUrl(m_toggle->url());
+ if (index.isValid()) {
+ if (selected.contains(index)) {
+ m_toggle->setChecked(true);
+ }
+
+ if (deselected.contains(index)) {
+ m_toggle->setChecked(false);
+ }
}
}
}