From 3fcebb918fc5aea49eda78c74a92807fa3c6597d Mon Sep 17 00:00:00 2001 From: Martin Kampas Date: Thu, 17 Nov 2016 08:35:57 +0100 Subject: WorkspaceView: Always highlight the active document Do not confuse with item view selection. Change-Id: Ieff104fded31e1cf67d5411fb92a8324995b6f2e Reviewed-by: Juergen Bocklage-Ryannel --- src/widgets/workspacedelegate.cpp | 35 +++++++++++++++++++++++++++++------ src/widgets/workspacedelegate.h | 7 ++++--- src/widgets/workspaceview.cpp | 17 +++++++++++++++-- src/widgets/workspaceview.h | 1 + 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/widgets/workspacedelegate.cpp b/src/widgets/workspacedelegate.cpp index 0f886fd..8f61cee 100644 --- a/src/widgets/workspacedelegate.cpp +++ b/src/widgets/workspacedelegate.cpp @@ -31,9 +31,12 @@ #include "workspacedelegate.h" -WorkspaceDelegate::WorkspaceDelegate(FileSystemModel *model, QObject *parent) : - QStyledItemDelegate(parent), - m_model(model) +#include "filesystemmodel.h" +#include "workspaceview.h" + +WorkspaceDelegate::WorkspaceDelegate(WorkspaceView *view) : + QStyledItemDelegate(view), + m_view(view) { } @@ -42,11 +45,31 @@ void WorkspaceDelegate::initStyleOption(QStyleOptionViewItem *option, const QMod QStyledItemDelegate::initStyleOption(option, index); if (option) { - if (m_model->isDir(index)) + QString path = m_view->model()->filePath(index); + + // Do not paint selected items any special way - only the current item + // and the item corresponding to the active document will be + // highlighted. + option->state &= ~QStyle::State_Selected; + + // Highlighting in the view is suppressed with customized palette. + // See WorkspaceView's constructor. + QColor highlight = qApp->palette().color(QPalette::Highlight); + QColor highlightedText = qApp->palette().color(QPalette::HighlightedText); + option->palette.setColor(QPalette::Highlight, highlight); + option->palette.setColor(QPalette::HighlightedText, highlightedText); + + LiveDocument document = LiveDocument::resolve(m_view->rootPath(), path); + if (document == m_view->activeDocument()) { + option->backgroundBrush = highlight; + option->palette.setColor(QPalette::Base, highlight); + option->palette.setColor(QPalette::Text, highlightedText); + } + + if (m_view->model()->isDir(index)) return; - QString path = m_model->filePath(index); - foreach (QString type, m_model->allowedTypesFilter()) + foreach (QString type, m_view->model()->allowedTypesFilter()) { if (path.contains(QRegExp(type, Qt::CaseInsensitive, QRegExp::Wildcard))) return; diff --git a/src/widgets/workspacedelegate.h b/src/widgets/workspacedelegate.h index ad1572d..2d0451a 100644 --- a/src/widgets/workspacedelegate.h +++ b/src/widgets/workspacedelegate.h @@ -32,18 +32,19 @@ #pragma once #include -#include "filesystemmodel.h" + +class WorkspaceView; class WorkspaceDelegate : public QStyledItemDelegate { Q_OBJECT public: - explicit WorkspaceDelegate(FileSystemModel* model, QObject *parent = 0); + explicit WorkspaceDelegate(WorkspaceView *view); virtual void initStyleOption(QStyleOptionViewItem * option, const QModelIndex & index )const; private: - FileSystemModel* m_model; + WorkspaceView* m_view; }; diff --git a/src/widgets/workspaceview.cpp b/src/widgets/workspaceview.cpp index 10b9f2b..acc125f 100644 --- a/src/widgets/workspaceview.cpp +++ b/src/widgets/workspaceview.cpp @@ -57,7 +57,15 @@ WorkspaceView::WorkspaceView(QWidget *parent) m_view->hideColumn(2); // type m_view->hideColumn(3); // modified time - m_view->setItemDelegate(new WorkspaceDelegate(m_model, this)); + // Prevent view highlighting background of a selected row. Only the + // active-document's row should be highlighted. See also + // WorkspaceDelegate::initStyleOption() + QPalette noHighlightPalette = palette(); + noHighlightPalette.setColor(QPalette::Highlight, palette().color(QPalette::Base)); + noHighlightPalette.setColor(QPalette::HighlightedText, palette().color(QPalette::Text)); + m_view->setPalette(noHighlightPalette); + + m_view->setItemDelegate(new WorkspaceDelegate(this)); connect(m_view, SIGNAL(activated(QModelIndex)), this, SLOT(indexActivated(QModelIndex))); m_model->setAllowedTypesFilter(QStringList() << "*.qml" << "*.png" << "*.otf" << "*.ttf"); @@ -68,7 +76,6 @@ WorkspaceView::WorkspaceView(QWidget *parent) layout->setMargin(1); setLayout(layout); - m_view->setDragEnabled(true); m_view->setDragDropMode(QAbstractItemView::DragOnly); } @@ -140,8 +147,14 @@ void WorkspaceView::indexActivated(const QModelIndex &index) QString path = m_model->filePath(index); + LiveDocument oldDocument = m_currentDocument; + m_currentDocument = LiveDocument::resolve(m_model->rootDirectory(), path); emit pathActivated(m_currentDocument); + m_view->update(index); + + if (!oldDocument.isNull()) + m_view->update(m_model->index(oldDocument.absoluteFilePathIn(rootPath()))); } void WorkspaceView::selectIndex(const QModelIndex &index) diff --git a/src/widgets/workspaceview.h b/src/widgets/workspaceview.h index 6058b04..dab0df6 100644 --- a/src/widgets/workspaceview.h +++ b/src/widgets/workspaceview.h @@ -43,6 +43,7 @@ class WorkspaceView : public QWidget Q_OBJECT public: explicit WorkspaceView(QWidget *parent = 0); + FileSystemModel *model() const { return m_model; } LiveDocument activeDocument() const; QString rootPath() const; void setDirectoriesSelectable(bool enabled); -- cgit v1.2.3