DolphinSortFilterProxyModel* proxyModel) :
QWidget(parent),
m_active(true),
+ m_showPreview(false),
m_loadingDirectory(false),
m_storedCategorizedSorting(false),
m_mode(DolphinView::IconsView),
connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)),
this, SLOT(openContextMenu(const QPoint&)));
- connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const QModelIndex&, QWidget*)),
- this, SLOT(dropUrls(const KUrl::List&, const KUrl&, const QModelIndex&, QWidget*)));
+ connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const KFileItem&)),
+ this, SLOT(dropUrls(const KUrl::List&, const KUrl&, const KFileItem&)));
connect(m_controller, SIGNAL(sortingChanged(DolphinView::Sorting)),
this, SLOT(updateSorting(DolphinView::Sorting)));
connect(m_controller, SIGNAL(sortOrderChanged(Qt::SortOrder)),
this, SLOT(updateSortOrder(Qt::SortOrder)));
+ connect(m_controller, SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)),
+ this, SLOT(updateAdditionalInfo(const KFileItemDelegate::InformationList&)));
connect(m_controller, SIGNAL(itemTriggered(const KFileItem&)),
this, SLOT(triggerItem(const KFileItem&)));
connect(m_controller, SIGNAL(activated()),
createView();
+ // the file item delegate has been recreated, apply the current
+ // additional information manually
+ const KFileItemDelegate::InformationList infoList = props.additionalInfo();
+ m_fileItemDelegate->setShowInformation(infoList);
+ emit additionalInfoChanged(infoList);
+
// Not all view modes support categorized sorting. Adjust the sorting model
// if changing the view mode results in a change of the categorized sorting
// capabilities.
void DolphinView::setShowPreview(bool show)
{
+ if (m_showPreview == show) {
+ return;
+ }
+
const KUrl viewPropsUrl = viewPropertiesUrl();
ViewProperties props(viewPropsUrl);
props.setShowPreview(show);
- m_controller->setShowPreview(show);
+ m_showPreview = show;
+
emit showPreviewChanged();
loadDirectory(viewPropsUrl, true);
bool DolphinView::showPreview() const
{
- return m_controller->showPreview();
+ return m_showPreview;
}
void DolphinView::setShowHiddenFiles(bool show)
props.setShowHiddenFiles(show);
m_dirLister->setShowingDotFiles(show);
- m_controller->setShowHiddenFiles(show);
emit showHiddenFilesChanged();
loadDirectory(viewPropsUrl, true);
const KUrl viewPropsUrl = viewPropertiesUrl();
ViewProperties props(viewPropsUrl);
props.setAdditionalInfo(info);
-
- m_controller->setAdditionalInfoCount(info.count());
m_fileItemDelegate->setShowInformation(info);
emit additionalInfoChanged(info);
- loadDirectory(viewPropsUrl, true);
+
+ if (itemView() != m_detailsView) {
+ // the details view requires no reloading of the directory, as it maps
+ // the file item delegate info to its columns internally
+ loadDirectory(viewPropsUrl, true);
+ }
}
KFileItemDelegate::InformationList DolphinView::additionalInfo() const
void DolphinView::setNameFilter(const QString& nameFilter)
{
- // The name filter of KDirLister does a 'hard' filtering, which
- // means that only the items are shown where the names match
- // exactly the filter. This is non-transparent for the user, which
- // just wants to have a 'soft' filtering: does the name contain
- // the filter string?
- QString adjustedFilter(nameFilter);
- adjustedFilter.insert(0, '*');
- adjustedFilter.append('*');
-
- m_dirLister->setNameFilter(adjustedFilter);
- m_dirLister->emitChanges();
+ m_proxyModel->setFilterRegExp(nameFilter);
if (isColumnViewActive()) {
// adjusting the directory lister is not enough in the case of the
void DolphinView::generatePreviews(const KFileItemList& items)
{
- if (m_controller->showPreview()) {
+ if (m_controller->dolphinView()->showPreview()) {
KIO::PreviewJob* job = KIO::filePreview(items, 128);
connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
this, SLOT(showPreview(const KFileItem&, const QPixmap&)));
const bool showHiddenFiles = props.showHiddenFiles();
if (showHiddenFiles != m_dirLister->showingDotFiles()) {
m_dirLister->setShowingDotFiles(showHiddenFiles);
- m_controller->setShowHiddenFiles(showHiddenFiles);
emit showHiddenFilesChanged();
}
KFileItemDelegate::InformationList info = props.additionalInfo();
if (info != m_fileItemDelegate->showInformation()) {
- m_controller->setAdditionalInfoCount(info.count());
m_fileItemDelegate->setShowInformation(info);
emit additionalInfoChanged(info);
}
const bool showPreview = props.showPreview();
- if (showPreview != m_controller->showPreview()) {
- m_controller->setShowPreview(showPreview);
+ if (showPreview != m_showPreview) {
+ m_showPreview = showPreview;
emit showPreviewChanged();
}
}
KFileItem item;
const QModelIndex index = itemView()->indexAt(pos);
- if (isValidNameIndex(index)) {
+ if (index.isValid() && (index.column() == DolphinModel::Name)) {
item = fileItem(index);
}
void DolphinView::dropUrls(const KUrl::List& urls,
const KUrl& destPath,
- const QModelIndex& destIndex,
- QWidget* source)
+ const KFileItem& destItem)
{
- KFileItem directory;
- if (isValidNameIndex(destIndex)) {
- KFileItem item = fileItem(destIndex);
- Q_ASSERT(!item.isNull());
- if (item.isDir()) {
- // the URLs are dropped above a directory
- directory = item;
- }
+ const KUrl& destination = !destItem.isNull() && destItem.isDir() ?
+ destItem.url() : destPath;
+ const KUrl sourceDir = KUrl(urls.first().directory());
+ if (sourceDir != destination) {
+ dropUrls(urls, destination);
}
-
- if ((directory.isNull()) && (source == itemView())) {
- // The dropping is done into the same viewport where
- // the dragging has been started. Just ignore this...
- return;
- }
-
- const KUrl& destination = (directory.isNull()) ?
- destPath : directory.url();
- dropUrls(urls, destination);
}
void DolphinView::dropUrls(const KUrl::List& urls,
emit sortOrderChanged(order);
}
+void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& info)
+{
+ ViewProperties props(viewPropertiesUrl());
+ props.setAdditionalInfo(info);
+
+ m_fileItemDelegate->setShowInformation(info);
+
+ emit additionalInfoChanged(info);
+
+}
+
void DolphinView::emitContentsMoved()
{
// only emit the contents moved signal if:
void DolphinView::createView()
{
- KFileItemDelegate::InformationList infoList;
- if (m_fileItemDelegate != 0) {
- infoList = m_fileItemDelegate->showInformation();
- }
-
// delete current view
QAbstractItemView* view = itemView();
if (view != 0) {
Q_ASSERT(view != 0);
m_fileItemDelegate = new KFileItemDelegate(view);
- m_fileItemDelegate->setShowInformation(infoList);
view->setItemDelegate(m_fileItemDelegate);
view->setModel(m_proxyModel);
return m_iconsView;
}
-bool DolphinView::isValidNameIndex(const QModelIndex& index) const
-{
- return index.isValid() && (index.column() == DolphinModel::Name);
-}
-
bool DolphinView::isCutItem(const KFileItem& item) const
{
const QMimeData* mimeData = QApplication::clipboard()->mimeData();