diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index be1742e922d23a21f41a646c2981380102b799ec..0e8b47861697a0792c60101852cf4b0ba7840fc5 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -247,7 +247,7 @@ QModelIndex EditorModel::index(int row, int column, const QModelIndex &parent) c QVariant EditorModel::data(const QModelIndex &index, int role) const { - if (!index.isValid()) + if (!index.isValid() || (index.column() != 0 && role < Qt::UserRole)) return QVariant(); Entry e = m_editors.at(index.row()); switch (role) { diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp index d04d82b3995acbb0b11798955ce441667747d20c..6a15c77b771fcd08fdd293bec2fd66f3398327c3 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp @@ -64,7 +64,12 @@ void OpenEditorsDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o { if (option.state & QStyle::State_MouseOver) { - painter->fillRect(option.rect, option.palette.alternateBase()); + if ((QApplication::mouseButtons() & Qt::LeftButton) == 0) + pressedIndex = QModelIndex(); + QBrush brush = option.palette.alternateBase(); + if (index == pressedIndex) + brush = option.palette.dark(); + painter->fillRect(option.rect, brush); } QStyledItemDelegate::paint(painter, option, index); @@ -78,7 +83,7 @@ void OpenEditorsDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o option.rect.height(), option.rect.height()); - icon.paint(painter, iconRect, Qt::AlignRight | Qt::AlignVCenter); + icon.paint(painter, iconRect, Qt::Alignment(Qt::AlignRight | Qt::AlignVCenter)); } } @@ -91,7 +96,7 @@ OpenEditorsWidget::OpenEditorsWidget() setFocusProxy(m_ui.editorList); m_ui.editorList->setFocusPolicy(Qt::NoFocus); m_ui.editorList->viewport()->setAttribute(Qt::WA_Hover); - m_ui.editorList->setItemDelegate(new OpenEditorsDelegate(this)); + m_ui.editorList->setItemDelegate((m_delegate = new OpenEditorsDelegate(this))); m_ui.editorList->header()->hide(); m_ui.editorList->setIndentation(0); m_ui.editorList->setTextElideMode(Qt::ElideMiddle); @@ -108,7 +113,9 @@ OpenEditorsWidget::OpenEditorsWidget() connect(em, SIGNAL(currentEditorChanged(Core::IEditor*)), this, SLOT(updateCurrentItem(Core::IEditor*))); connect(m_ui.editorList, SIGNAL(clicked(QModelIndex)), - this, SLOT(selectEditor(QModelIndex))); + this, SLOT(handleClicked(QModelIndex))); + connect(m_ui.editorList, SIGNAL(pressed(QModelIndex)), + this, SLOT(handlePressed(QModelIndex))); } OpenEditorsWidget::~OpenEditorsWidget() @@ -128,7 +135,17 @@ void OpenEditorsWidget::updateCurrentItem(Core::IEditor *editor) m_ui.editorList->scrollTo(m_ui.editorList->currentIndex()); } -void OpenEditorsWidget::selectEditor(const QModelIndex &index) +void OpenEditorsWidget::handlePressed(const QModelIndex &index) +{ + if (index.column() == 0) { + m_ui.editorList->selectionModel()->select(index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + EditorManager::instance()->activateEditor(index); + } else if (index.column() == 1) { + m_delegate->pressedIndex = index; + } +} + +void OpenEditorsWidget::handleClicked(const QModelIndex &index) { if (index.column() == 1) { // the funky close button EditorManager::instance()->closeEditor(index); @@ -138,9 +155,6 @@ void OpenEditorsWidget::selectEditor(const QModelIndex &index) QWidget *vp = m_ui.editorList->viewport(); QMouseEvent e(QEvent::MouseMove, vp->mapFromGlobal(cursorPos), cursorPos, Qt::NoButton, 0, 0); QCoreApplication::sendEvent(vp, &e); - } else { - m_ui.editorList->selectionModel()->select(index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); - EditorManager::instance()->activateEditor(index); } } diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.h b/src/plugins/coreplugin/editormanager/openeditorsview.h index 45cfc62a0104897711cb45d0924f88a6e0c8df92..b6dc10366aafe3c9a29b4d7b18fad28036f2d6a6 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsview.h +++ b/src/plugins/coreplugin/editormanager/openeditorsview.h @@ -45,6 +45,20 @@ namespace Core { namespace Internal { +class OpenEditorsDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + OpenEditorsDelegate(QObject *parent = 0); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + + mutable QModelIndex pressedIndex; +}; + + class OpenEditorsWidget : public QWidget { Q_OBJECT @@ -54,12 +68,14 @@ public: ~OpenEditorsWidget(); private slots: - void selectEditor(const QModelIndex &); + void handleClicked(const QModelIndex &); + void handlePressed(const QModelIndex &); void updateCurrentItem(Core::IEditor*); private: Ui::OpenEditorsView m_ui; QWidget *m_widget; + OpenEditorsDelegate *m_delegate; }; class OpenEditorsViewFactory : public Core::INavigationWidgetFactory @@ -75,16 +91,5 @@ public: } // namespace Internal } // namespace Core -class OpenEditorsDelegate : public QStyledItemDelegate -{ - Q_OBJECT - -public: - OpenEditorsDelegate(QObject *parent = 0); - - void paint(QPainter *painter, const QStyleOptionViewItem &option, - const QModelIndex &index) const; -}; - #endif // OPENEDITORSVIEW_H