#include "dolphinsortfilterproxymodel.h"
#include "dolphinviewautoscroller.h"
#include "draganddrophelper.h"
-#include "selectionmanager.h"
+#include "viewextensionsfactory.h"
#include "viewproperties.h"
#include "zoomlevelinfo.h"
#include <klocale.h>
#include <kmenu.h>
-#include <QAbstractProxyModel>
#include <QAction>
#include <QApplication>
#include <QHeaderView>
#include <QPainter>
#include <QScrollBar>
-DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
+DolphinDetailsView::DolphinDetailsView(QWidget* parent,
+ DolphinController* controller,
+ DolphinSortFilterProxyModel* proxyModel) :
QTreeView(parent),
m_autoResize(true),
m_expandingTogglePressed(false),
m_useDefaultIndexAt(true),
m_ignoreScrollTo(false),
m_controller(controller),
- m_selectionManager(0),
- m_autoScroller(0),
+ m_extensionsFactory(0),
m_expandableFoldersAction(0),
m_font(),
m_decorationSize(),
setRootIsDecorated(settings->expandableFolders());
setItemsExpandable(settings->expandableFolders());
setEditTriggers(QAbstractItemView::NoEditTriggers);
+ setModel(proxyModel);
setMouseTracking(true);
- m_autoScroller = new DolphinViewAutoScroller(this);
const ViewProperties props(controller->url());
setSortIndicatorSection(props.sorting());
controller, SLOT(triggerItem(const QModelIndex&)));
}
- if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) {
- m_selectionManager = new SelectionManager(this);
- connect(m_selectionManager, SIGNAL(selectionChanged()),
- this, SLOT(requestActivation()));
- connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
- m_selectionManager, SLOT(reset()));
- }
-
connect(this, SIGNAL(entered(const QModelIndex&)),
this, SLOT(slotEntered(const QModelIndex&)));
connect(this, SIGNAL(viewportEntered()),
controller, SLOT(emitViewportEntered()));
+ connect(controller, SIGNAL(nameFilterChanged(const QString&)),
+ this, SLOT(setNameFilter(const QString&)));
connect(controller, SIGNAL(zoomLevelChanged(int)),
this, SLOT(setZoomLevel(int)));
connect(controller->dolphinView(), SIGNAL(additionalInfoChanged()),
m_expandableFoldersAction->setCheckable(true);
connect(m_expandableFoldersAction, SIGNAL(toggled(bool)),
this, SLOT(setFoldersExpandable(bool)));
+
+ m_extensionsFactory = new ViewExtensionsFactory(this, controller);
+ m_extensionsFactory->fileItemDelegate()->setMinimizedNameColumn(true);
}
DolphinDetailsView::~DolphinDetailsView()
bool DolphinDetailsView::event(QEvent* event)
{
if (event->type() == QEvent::Polish) {
- QHeaderView* headerView = header();
- headerView->setResizeMode(QHeaderView::Interactive);
- headerView->setMovable(false);
-
+ header()->setResizeMode(QHeaderView::Interactive);
updateColumnVisibility();
}
void DolphinDetailsView::wheelEvent(QWheelEvent* event)
{
- if (m_selectionManager != 0) {
- m_selectionManager->reset();
- }
-
// let Ctrl+wheel events propagate to the DolphinView for icon zooming
if (event->modifiers() & Qt::ControlModifier) {
event->ignore();
void DolphinDetailsView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
{
QTreeView::currentChanged(current, previous);
- m_autoScroller->handleCurrentIndexChange(current, previous);
+ m_extensionsFactory->handleCurrentIndexChange(current, previous);
// Stay consistent with QListView: When changing the current index by key presses,
// also change the selection.
return QRect(topLeft, bottomRight).normalized();
}
+void DolphinDetailsView::setNameFilter(const QString& nameFilter)
+{
+ DolphinSortFilterProxyModel* proxyModel = static_cast<DolphinSortFilterProxyModel*>(model());
+ proxyModel->setFilterRegExp(nameFilter);
+}
+
void DolphinDetailsView::setZoomLevel(int level)
{
const int size = ZoomLevelInfo::iconSizeForZoomLevel(level);
updateDecorationSize(showPreview);
}
-
void DolphinDetailsView::slotShowPreviewChanged()
{
const DolphinView* view = m_controller->dolphinView();
// add checkbox items for each column
QHeaderView* headerView = header();
- for (int i = DolphinModel::Size; i <= DolphinModel::Version; ++i) {
+ const int columns = model()->columnCount();
+ for (int i = 0; i < columns; ++i) {
const int logicalIndex = headerView->logicalIndex(i);
- const QString text = model()->headerData(i, Qt::Horizontal).toString();
+ const QString text = model()->headerData(logicalIndex, Qt::Horizontal).toString();
QAction* action = popup.addAction(text);
action->setCheckable(true);
action->setChecked(!headerView->isSectionHidden(logicalIndex));
- action->setData(i);
+ action->setData(logicalIndex);
+ action->setEnabled(logicalIndex != DolphinModel::Name);
}
popup.addSeparator();
void DolphinDetailsView::updateColumnVisibility()
{
+ QHeaderView* headerView = header();
+ disconnect(headerView, SIGNAL(sectionMoved(int, int, int)),
+ this, SLOT(saveColumnPositions()));
+
+ const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+ const QList<int> columnPositions = settings->columnPositions();
+
const KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
- for (int i = DolphinModel::Size; i <= DolphinModel::Version; ++i) {
+ for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
const KFileItemDelegate::Information info = infoForColumn(i);
- const bool hide = !list.contains(info);
+ const bool hide = !list.contains(info) && (i != DolphinModel::Name);
if (isColumnHidden(i) != hide) {
setColumnHidden(i, hide);
}
+
+ const int from = headerView->visualIndex(i);
+ headerView->moveSection(from, columnPositions[i]);
}
-
+
resizeColumns();
+
+ connect(headerView, SIGNAL(sectionMoved(int, int, int)),
+ this, SLOT(saveColumnPositions()));
+
+}
+
+void DolphinDetailsView::saveColumnPositions()
+{
+ QList<int> columnPositions;
+ for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
+ columnPositions.append(header()->visualIndex(i));
+ }
+
+ DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+ settings->setColumnPositions(columnPositions);
}
void DolphinDetailsView::slotHeaderSectionResized(int logicalIndex, int oldSize, int newSize)
setIconSize(QSize(iconSize, iconSize));
m_decorationSize = QSize(iconSize, iconSize);
- if (m_selectionManager != 0) {
- m_selectionManager->reset();
- }
-
doItemsLayout();
}