aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kampas <martin.kampas@jolla.com>2016-11-17 08:35:57 +0100
committerJuergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>2016-11-23 05:25:16 +0000
commit3fcebb918fc5aea49eda78c74a92807fa3c6597d (patch)
tree598e6d660c7cf03e20cc68eb2fb99f9a1a26555d
parentde034fc669116d09a69dc6b467019e729243c243 (diff)
WorkspaceView: Always highlight the active document
Do not confuse with item view selection. Change-Id: Ieff104fded31e1cf67d5411fb92a8324995b6f2e Reviewed-by: Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>
-rw-r--r--src/widgets/workspacedelegate.cpp35
-rw-r--r--src/widgets/workspacedelegate.h7
-rw-r--r--src/widgets/workspaceview.cpp17
-rw-r--r--src/widgets/workspaceview.h1
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 <QStyledItemDelegate>
-#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);