#include "dolphincolumnview.h"
-#include "dolphinmodel.h"
#include "dolphincolumnwidget.h"
#include "dolphincontroller.h"
-#include "dolphindirlister.h"
-#include "dolphinmodel.h"
-#include "dolphinsortfilterproxymodel.h"
#include "dolphinsettings.h"
#include "dolphin_columnmodesettings.h"
-#include <kcolorutils.h>
-#include <kcolorscheme.h>
-#include <kdirlister.h>
-
-#include <QAbstractProxyModel>
-#include <QApplication>
#include <QPoint>
#include <QScrollBar>
-#include <QTimer>
#include <QTimeLine>
DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* controller) :
QAbstractItemView(parent),
m_controller(controller),
- m_restoreActiveColumnFocus(false),
+ m_active(false),
m_index(-1),
m_contentX(0),
m_columns(),
- m_animation(0)
+ m_emptyViewport(0),
+ m_animation(0),
+ m_nameFilter()
{
Q_ASSERT(controller != 0);
setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(false);
setSelectionMode(ExtendedSelection);
+ setFocusPolicy(Qt::NoFocus);
+ setFrameShape(QFrame::NoFrame);
- connect(this, SIGNAL(entered(const QModelIndex&)),
- controller, SLOT(emitItemEntered(const QModelIndex&)));
connect(this, SIGNAL(viewportEntered()),
controller, SLOT(emitViewportEntered()));
connect(controller, SIGNAL(zoomIn()),
this, SLOT(zoomIn()));
connect(controller, SIGNAL(zoomOut()),
this, SLOT(zoomOut()));
- connect(controller, SIGNAL(showHiddenFilesChanged(bool)),
- this, SLOT(slotShowHiddenFilesChanged(bool)));
- connect(controller, SIGNAL(showPreviewChanged(bool)),
- this, SLOT(slotShowPreviewChanged(bool)));
+ connect(controller, SIGNAL(activationChanged(bool)),
+ this, SLOT(updateColumnsBackground(bool)));
+
+ const DolphinView* view = controller->dolphinView();
+ connect(view, SIGNAL(showHiddenFilesChanged()),
+ this, SLOT(slotShowHiddenFilesChanged()));
+ connect(view, SIGNAL(showPreviewChanged()),
+ this, SLOT(slotShowPreviewChanged()));
connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
this, SLOT(moveContentHorizontally(int)));
m_columns.append(column);
setActiveColumnIndex(0);
- updateDecorationSize();
-
- // dim the background of the viewport
- QColor bgColor = KColorScheme(QPalette::Active, KColorScheme::View).background().color();
- const QColor fgColor = KColorScheme(QPalette::Active, KColorScheme::View).foreground().color();
- bgColor = KColorUtils::mix(bgColor, fgColor, 0.04);
+ m_emptyViewport = new QFrame(viewport());
+ m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
- QPalette palette = viewport()->palette();
- palette.setColor(viewport()->backgroundRole(), bgColor);
- viewport()->setPalette(palette);
+ updateDecorationSize();
+ updateColumnsBackground(true);
}
DolphinColumnView::~DolphinColumnView()
m_columns[0]->setUrl(url);
}
+void DolphinColumnView::setNameFilter(const QString& nameFilter)
+{
+ if (nameFilter != m_nameFilter) {
+ m_nameFilter = nameFilter;
+ foreach (DolphinColumnWidget* column, m_columns) {
+ column->setNameFilter(nameFilter);
+ }
+ }
+}
+
+QString DolphinColumnView::nameFilter() const
+{
+ return m_nameFilter;
+}
+
KUrl DolphinColumnView::rootUrl() const
{
return m_columns[0]->url();
if (column->url() == url) {
// the column represents already the requested URL, hence activate it
requestActivation(column);
+ layoutColumns();
return;
} else if (!column->url().isParentOf(url)) {
// the column is no parent of the requested URL, hence
columnIndex++;
DolphinColumnWidget* column = new DolphinColumnWidget(viewport(), this, childUrl);
+ const QString filter = nameFilter();
+ if (!filter.isEmpty()) {
+ column->setNameFilter(filter);
+ }
column->setActive(false);
m_columns.append(column);
case MoveLeft:
if (m_index > 0) {
setActiveColumnIndex(m_index - 1);
+ m_controller->triggerUrlChangeRequest(activeColumn()->url());
}
break;
case MoveRight:
if (m_index < m_columns.count() - 1) {
setActiveColumnIndex(m_index + 1);
+ m_controller->triggerUrlChangeRequest(m_columns[m_index]->url());
}
break;
void DolphinColumnView::mousePressEvent(QMouseEvent* event)
{
- m_controller->triggerActivation();
+ m_controller->requestActivation();
QAbstractItemView::mousePressEvent(event);
}
QAbstractItemView::resizeEvent(event);
layoutColumns();
updateScrollBar();
+ assureVisibleActiveColumn();
}
void DolphinColumnView::zoomIn()
doItemsLayout();
}
-void DolphinColumnView::slotShowHiddenFilesChanged(bool show)
+void DolphinColumnView::updateColumnsBackground(bool active)
{
+ if (active == m_active) {
+ return;
+ }
+
+ m_active = active;
+
+ // dim the background of the viewport
+ QPalette palette;
+ palette.setColor(viewport()->backgroundRole(), QColor(0, 0, 0, 0));
+ viewport()->setPalette(palette);
+
+ foreach (DolphinColumnWidget* column, m_columns) {
+ column->updateBackground();
+ }
+}
+
+void DolphinColumnView::slotShowHiddenFilesChanged()
+{
+ const bool show = m_controller->dolphinView()->showHiddenFiles();
foreach (DolphinColumnWidget* column, m_columns) {
column->setShowHiddenFiles(show);
}
}
-void DolphinColumnView::slotShowPreviewChanged(bool show)
+void DolphinColumnView::slotShowPreviewChanged()
{
+ const bool show = m_controller->dolphinView()->showPreview();
foreach (DolphinColumnWidget* column, m_columns) {
column->setShowPreview(show);
}
m_index = index;
m_columns[m_index]->setActive(true);
- m_controller->setUrl(m_columns[m_index]->url());
-
assureVisibleActiveColumn();
}
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());
{
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()) {