From: Peter Penz Date: Tue, 16 Oct 2007 22:24:52 +0000 (+0000) Subject: polish look of column view: X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/88f17ca75add13baf3ac633e57865136deba02cc polish look of column view: - don't show a focused border above all columns - provide a small gap between the columns - assure that the background of inactive columns works well with more complex styles like Oxygen CCMAIL: cbr@boemann.dk svn path=/trunk/KDE/kdebase/apps/; revision=726042 --- diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index c0f08eaeb..972474000 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -47,6 +47,7 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control m_index(-1), m_contentX(0), m_columns(), + m_emptyViewport(0), m_animation(0) { Q_ASSERT(controller != 0); @@ -55,6 +56,8 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control setDragDropMode(QAbstractItemView::DragDrop); setDropIndicatorShown(false); setSelectionMode(ExtendedSelection); + setFocusPolicy(Qt::NoFocus); + setFrameShape(QFrame::NoFrame); connect(this, SIGNAL(entered(const QModelIndex&)), controller, SLOT(emitItemEntered(const QModelIndex&))); @@ -81,6 +84,9 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control m_columns.append(column); setActiveColumnIndex(0); + m_emptyViewport = new QFrame(viewport()); + m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); + updateDecorationSize(); updateColumnsBackground(true); } @@ -392,11 +398,8 @@ void DolphinColumnView::updateColumnsBackground(bool active) m_active = active; // dim the background of the viewport - QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); - color.setAlpha(150); - QPalette palette; - palette.setColor(viewport()->backgroundRole(), color); + palette.setColor(viewport()->backgroundRole(), QColor(0, 0, 0, 0)); viewport()->setPalette(palette); foreach (DolphinColumnWidget* column, m_columns) { @@ -449,29 +452,40 @@ void DolphinColumnView::setActiveColumnIndex(int index) void DolphinColumnView::layoutColumns() { + const int gap = 4; + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); const int columnWidth = settings->columnWidth(); + + QRect emptyViewportRect; if (isRightToLeft()) { int x = viewport()->width() - columnWidth + m_contentX; foreach (DolphinColumnWidget* column, m_columns) { - column->setGeometry(QRect(x, 0, columnWidth, viewport()->height())); + column->setGeometry(QRect(x, 0, columnWidth - gap, viewport()->height())); x -= columnWidth; } + emptyViewportRect = QRect(0, 0, x + columnWidth - gap, viewport()->height()); } else { int x = m_contentX; foreach (DolphinColumnWidget* column, m_columns) { - column->setGeometry(QRect(x, 0, columnWidth, viewport()->height())); + column->setGeometry(QRect(x, 0, columnWidth - gap, viewport()->height())); x += columnWidth; } + emptyViewportRect = QRect(x, 0, viewport()->width() - x - gap, viewport()->height()); + } + + if (emptyViewportRect.isValid()) { + m_emptyViewport->show(); + m_emptyViewport->setGeometry(emptyViewportRect); + } else { + m_emptyViewport->hide(); } } void DolphinColumnView::updateScrollBar() { - int contentWidth = 0; - foreach (DolphinColumnWidget* column, m_columns) { - contentWidth += column->width(); - } + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + const int contentWidth = m_columns.count() * settings->columnWidth(); horizontalScrollBar()->setPageStep(contentWidth); horizontalScrollBar()->setRange(0, contentWidth - viewport()->width()); @@ -481,7 +495,10 @@ void DolphinColumnView::assureVisibleActiveColumn() { const int viewportWidth = viewport()->width(); const int x = activeColumn()->x(); - const int width = activeColumn()->width(); + + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); + const int width = settings->columnWidth(); + if (x + width > viewportWidth) { const int newContentX = m_contentX - x - width + viewportWidth; if (isRightToLeft()) { diff --git a/src/dolphincolumnview.h b/src/dolphincolumnview.h index 95a16a80d..b12c5d82d 100644 --- a/src/dolphincolumnview.h +++ b/src/dolphincolumnview.h @@ -31,6 +31,7 @@ class DolphinColumnWidget; class DolphinController; class DolphinModel; class QAbstractProxyModel; +class QFrame; class QTimeLine; /** @@ -169,6 +170,7 @@ private: int m_index; int m_contentX; QList m_columns; + QFrame* m_emptyViewport; QTimeLine* m_animation; friend class DolphinColumnWidget; diff --git a/src/dolphincolumnwidget.cpp b/src/dolphincolumnwidget.cpp index 92fbd4e79..7bf644a95 100644 --- a/src/dolphincolumnwidget.cpp +++ b/src/dolphincolumnwidget.cpp @@ -69,7 +69,6 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, setSelectionMode(QAbstractItemView::ExtendedSelection); setDragDropMode(QAbstractItemView::DragDrop); setDropIndicatorShown(false); - setFocusPolicy(Qt::NoFocus); // TODO: Remove this check when 4.3.2 is released and KDE requires it... this // check avoids a division by zero happening on versions before 4.3.1. @@ -181,7 +180,7 @@ void DolphinColumnWidget::updateBackground() { QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); if (!m_active || !m_view->m_active) { - color.setAlpha(0); + color.setAlpha(150); } QPalette palette = viewport()->palette(); palette.setColor(viewport()->backgroundRole(), color); @@ -386,10 +385,7 @@ void DolphinColumnWidget::slotEntered(const QModelIndex& index) void DolphinColumnWidget::activate() { - if (m_view->hasFocus()) { - setFocus(Qt::OtherFocusReason); - } - m_view->setFocusProxy(this); + setFocus(Qt::OtherFocusReason); // TODO: Connecting to the signal 'activated()' is not possible, as kstyle // does not forward the single vs. doubleclick to it yet (KDE 4.1?). Hence it is @@ -415,6 +411,8 @@ void DolphinColumnWidget::activate() void DolphinColumnWidget::deactivate() { + clearFocus(); + // TODO: Connecting to the signal 'activated()' is not possible, as kstyle // does not forward the single vs. doubleclick to it yet (KDE 4.1?). Hence it is // necessary connecting the signal 'singleClick()' or 'doubleClick'. diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 8e8eec2ec..57d5eb81c 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -120,6 +120,8 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr #endif updateDecorationSize(); + + setFocus(); } DolphinDetailsView::~DolphinDetailsView() diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 670dcc13e..7b8fa869d 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -99,6 +99,8 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle m_categoryDrawer = new DolphinCategoryDrawer(); setCategoryDrawer(m_categoryDrawer); + + setFocus(); } DolphinIconsView::~DolphinIconsView() diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 87170bfb7..f4b533d61 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -488,8 +488,6 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) loadDirectory(url); } - itemView()->setFocus(); - emit startedPathLoading(url); } @@ -886,7 +884,6 @@ void DolphinView::createView() this, SLOT(emitContentsMoved())); connect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(emitContentsMoved())); - view->setFocus(); } QAbstractItemView* DolphinView::itemView() const