m_topLayout(0),
m_urlNavigator(0),
m_iconsView(0),
+ m_detailsView(0),
m_filterBar(0),
m_statusBar(0),
m_dirModel(0),
m_dirLister(0),
- m_proxyModel(0)
+ m_proxyModel(0),
+ m_mimeTypeResolver(0)
{
hide();
setFocusPolicy(Qt::StrongFocus);
m_dirLister->setAutoUpdate(true);
m_dirLister->setMainWindow(this);
m_dirLister->setShowingDotFiles(showHiddenFiles);
+ m_dirLister->setDelayedMimeTypes(true);
+
connect(m_dirLister, SIGNAL(clear()),
this, SLOT(slotClear()));
connect(m_dirLister, SIGNAL(percent(int)),
connect(m_dirLister, SIGNAL(errorMessage(const QString&)),
this, SLOT(slotErrorMessage(const QString&)));
- m_iconsView = new DolphinIconsView(this);
- applyModeToView();
-
m_dirModel = new KDirModel();
m_dirModel->setDirLister(m_dirLister);
m_dirModel->setDropsAllowed(KDirModel::DropOnDirectory);
m_proxyModel = new DolphinSortFilterProxyModel(this);
m_proxyModel->setSourceModel(m_dirModel);
- m_iconsView->setModel(m_proxyModel);
-
- KFileItemDelegate* delegate = new KFileItemDelegate(this);
- delegate->setAdditionalInformation(KFileItemDelegate::FriendlyMimeType);
- m_iconsView->setItemDelegate(delegate);
-
- m_dirLister->setDelayedMimeTypes(true);
- new KMimeTypeResolver(m_iconsView, m_dirModel);
+ createView();
m_iconSize = K3Icon::SizeMedium;
this, SLOT(closeFilterBar()));
m_topLayout->addWidget(m_urlNavigator);
- m_topLayout->addWidget(m_iconsView);
+ m_topLayout->addWidget(itemView());
m_topLayout->addWidget(m_filterBar);
m_topLayout->addWidget(m_statusBar);
- connect(m_iconsView, SIGNAL(clicked(const QModelIndex&)),
- this, SLOT(triggerItem(const QModelIndex&)));
- connect(m_iconsView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
- this, SLOT(emitSelectionChangedSignal()));
-
loadDirectory(m_urlNavigator->url());
}
ViewProperties props(m_urlNavigator->url());
props.setViewMode(m_mode);
- applyModeToView();
+ createView();
startDirLister(m_urlNavigator->url());
emit modeChanged();
bool DolphinView::hasSelection() const
{
- return m_iconsView->selectionModel()->hasSelection();
+ return itemView()->selectionModel()->hasSelection();
}
KFileItemList DolphinView::selectedItems() const
{
+ const QAbstractItemView* view = itemView();
+
// Our view has a selection, we will map them back to the DirModel
// and then fill the KFileItemList.
- assert(m_iconsView && m_iconsView->selectionModel());
+ assert((view != 0) && (view->selectionModel() != 0));
- const QItemSelection selection = m_proxyModel->mapSelectionToSource(m_iconsView->selectionModel()->selection());
+ const QItemSelection selection = m_proxyModel->mapSelectionToSource(view->selectionModel()->selection());
KFileItemList itemList;
const QModelIndexList indexList = selection.indexes();
const Mode mode = props.viewMode();
if (m_mode != mode) {
m_mode = mode;
- applyModeToView();
+ createView();
emit modeChanged();
}
#endif
}
-void DolphinView::applyModeToView()
+void DolphinView::createView()
{
- m_iconsView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ // delete current view
+ QAbstractItemView* view = itemView();
+ if (view != 0) {
+ m_topLayout->remove(view);
+ view->close();
+ view->deleteLater();
+ m_iconsView = 0;
+ m_detailsView = 0;
+ }
+
+ assert(m_iconsView == 0);
+ assert(m_detailsView == 0);
+
+ delete m_mimeTypeResolver;
+ m_mimeTypeResolver = 0;
- // TODO: the following code just tries to test some QListView capabilities
+ // ... and recreate it representing the current mode
switch (m_mode) {
case IconsView:
+ m_iconsView = new DolphinIconsView(this);
m_iconsView->setViewMode(QListView::IconMode);
m_iconsView->setSpacing(32);
- // m_iconsView->setAlternatingRowColors(false);
- // m_iconsView->setGridSize(QSize(128, 64));
+ view = m_iconsView;
+ // TODO: read out view settings
break;
case DetailsView:
- m_iconsView->setViewMode(QListView::ListMode);
- m_iconsView->setSpacing(0);
- // m_iconsView->setAlternatingRowColors(true);
- // m_iconsView->setGridSize(QSize(256, 24));
+ m_detailsView = new DolphinDetailsView(this);
+ view = m_detailsView;
+ // TODO: read out view settings
break;
}
+
+ view->setModel(m_proxyModel);
+
+ view->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+ KFileItemDelegate* delegate = new KFileItemDelegate(this);
+ delegate->setAdditionalInformation(KFileItemDelegate::FriendlyMimeType);
+ view->setItemDelegate(delegate);
+
+ m_mimeTypeResolver = new KMimeTypeResolver(view, m_dirModel);
+
+ connect(view, SIGNAL(clicked(const QModelIndex&)),
+ this, SLOT(triggerItem(const QModelIndex&)));
+ connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
+ this, SLOT(emitSelectionChangedSignal()));
+
+ m_topLayout->insertWidget(1, view);
}
int DolphinView::columnIndex(Sorting sorting) const
void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags)
{
- QItemSelectionModel* selectionModel = m_iconsView->selectionModel();
+ QItemSelectionModel* selectionModel = itemView()->selectionModel();
const QAbstractItemModel* itemModel = selectionModel->model();
const QModelIndex topLeft = itemModel->index(0, 0);
selectionModel->select(selection, flags);
}
+QAbstractItemView* DolphinView::itemView() const
+{
+ assert((m_iconsView == 0) || (m_detailsView == 0));
+ if (m_detailsView != 0) {
+ return m_detailsView;
+ }
+ return m_iconsView;
+}
+
#include "dolphinview.moc"
class Q3ListViewItem;
class Q3VBoxLayout;
class DolphinMainWindow;
+class DolphinDetailsView;
class DolphinDirLister;
class DolphinStatusBar;
class DolphinIconsView;
class ViewProperties;
class KProgress;
class KDirModel;
+class KMimeTypeResolver;
class FilterBar;
class QModelIndex;
QString renameIndexPresentation(int index, int itemCount) const;
/**
- * Applies the current view mode m_mode to the
- * view implementation.
+ * Creates a new view representing the given view mode (DolphinView::viewMode()).
+ * The current view will get deleted.
*/
- void applyModeToView();
+ void createView();
/**
* Returns the column index used in the KDirModel depending on \a sorting.
*/
void selectAll(QItemSelectionModel::SelectionFlags flags);
+ /**
+ * Returns a pointer to the currently used item view, which is either
+ * a ListView or a TreeView.
+ */
+ QAbstractItemView* itemView() const;
+
private:
bool m_refreshing;
bool m_showProgress;
DolphinMainWindow* m_mainWindow;
QVBoxLayout* m_topLayout;
UrlNavigator* m_urlNavigator;
+
DolphinIconsView* m_iconsView;
+ DolphinDetailsView* m_detailsView;
+
FilterBar *m_filterBar;
DolphinStatusBar* m_statusBar;
KDirModel* m_dirModel;
DolphinDirLister* m_dirLister;
DolphinSortFilterProxyModel* m_proxyModel;
+ KMimeTypeResolver* m_mimeTypeResolver;
};