#include "dolphindetailsview.h"
#include "dolphiniconsview.h"
#include "dolphincontextmenu.h"
+#include "dolphinitemcategorizer.h"
#include "filterbar.h"
#include "renamedialog.h"
#include "kurlnavigator.h"
const KUrl& url,
Mode mode,
bool showHiddenFiles) :
- QWidget(parent),
- m_showProgress(false),
- m_blockContentsMovedSignal(false),
- m_mode(mode),
- m_iconSize(0),
- m_folderCount(0),
- m_fileCount(0),
- m_mainWindow(mainWindow),
- m_topLayout(0),
- m_urlNavigator(0),
- m_controller(0),
- m_iconsView(0),
- m_detailsView(0),
- m_columnView(0),
- m_fileItemDelegate(0),
- m_filterBar(0),
- m_statusBar(0),
- m_dirModel(0),
- m_dirLister(0),
- m_proxyModel(0)
+ QWidget(parent),
+ m_showProgress(false),
+ m_blockContentsMovedSignal(false),
+ m_mode(mode),
+ m_iconSize(0),
+ m_folderCount(0),
+ m_fileCount(0),
+ m_mainWindow(mainWindow),
+ m_topLayout(0),
+ m_urlNavigator(0),
+ m_controller(0),
+ m_iconsView(0),
+ m_detailsView(0),
+ m_columnView(0),
+ m_fileItemDelegate(0),
+ m_filterBar(0),
+ m_statusBar(0),
+ m_dirModel(0),
+ m_dirLister(0),
+ m_proxyModel(0)
{
hide();
setFocusPolicy(Qt::StrongFocus);
m_urlNavigator->setUrlEditable(DolphinSettings::instance().generalSettings()->editableUrl());
m_urlNavigator->setHomeUrl(DolphinSettings::instance().generalSettings()->homeUrl());
connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)),
- this, SLOT(loadDirectory(const KUrl&)));
+ this, SLOT(changeDirectory(const KUrl&)));
connect(m_urlNavigator, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&)),
this, SLOT(dropUrls(const KUrl::List&, const KUrl&)));
connect(m_urlNavigator, SIGNAL(activated()),
m_mode = mode;
+ if (isColumnViewActive()) {
+ // When changing the mode in the column view, it makes sense
+ // to go back to the root URL of the column view automatically.
+ // Otherwise there it would not be possible to turn off the column view
+ // without focusing the first column.
+ setUrl(m_dirLister->url());
+ }
+
ViewProperties props(m_urlNavigator->url());
props.setViewMode(m_mode);
props.setShowPreview(show);
m_controller->setShowPreview(show);
-
emit showPreviewChanged();
- reload();
+
+ startDirLister(m_urlNavigator->url(), true);
}
bool DolphinView::showPreview() const
ViewProperties props(m_urlNavigator->url());
props.setShowHiddenFiles(show);
- props.save();
m_dirLister->setShowingDotFiles(show);
emit showHiddenFilesChanged();
- reload();
+ startDirLister(m_urlNavigator->url(), true);
}
bool DolphinView::showHiddenFiles() const
return m_dirLister->showingDotFiles();
}
+void DolphinView::setCategorizedSorting(bool categorized)
+{
+ if (!supportsCategorizedSorting() || (categorized == categorizedSorting())) {
+ return;
+ }
+
+ Q_ASSERT(m_iconsView != 0);
+ if (categorized) {
+ Q_ASSERT(m_iconsView->itemCategorizer() == 0);
+ m_iconsView->setItemCategorizer(new DolphinItemCategorizer());
+ } else {
+ KItemCategorizer* categorizer = m_iconsView->itemCategorizer();
+ m_iconsView->setItemCategorizer(0);
+ delete categorizer;
+ }
+
+ ViewProperties props(m_urlNavigator->url());
+ props.setCategorizedSorting(categorized);
+ props.save();
+
+ emit categorizedSortingChanged();
+}
+
+bool DolphinView::categorizedSorting() const
+{
+ if (!supportsCategorizedSorting()) {
+ return false;
+ }
+
+ Q_ASSERT(m_iconsView != 0);
+ return m_iconsView->itemCategorizer() != 0;
+}
+
+bool DolphinView::supportsCategorizedSorting() const
+{
+ return m_iconsView != 0;
+}
+
void DolphinView::renameSelectedItems()
{
DolphinView* view = mainWindow()->activeView();
m_fileItemDelegate->setAdditionalInformation(info);
emit additionalInfoChanged(info);
- reload();
+ startDirLister(m_urlNavigator->url(), true);
}
KFileItemDelegate::AdditionalInformation DolphinView::additionalInfo() const
default:
// the renaming operation has been canceled
- reload();
return;
}
} else {
} else {
m_statusBar->setMessage(i18n("Renaming of file '%1' to '%2' failed.", source.fileName(), destFileName),
DolphinStatusBar::Error);
- reload();
}
}
void DolphinView::reload()
{
- startDirLister(m_urlNavigator->url(), true);
+ const KUrl& url = m_urlNavigator->url();
+ changeDirectory(url);
+ startDirLister(url, true);
}
void DolphinView::mouseReleaseEvent(QMouseEvent* event)
return m_mainWindow;
}
-void DolphinView::loadDirectory(const KUrl& url)
+void DolphinView::changeDirectory(const KUrl& url)
{
if (!isActive()) {
requestActivation();
emit showHiddenFilesChanged();
}
+ const bool categorized = props.categorizedSorting();
+ if (categorized != categorizedSorting()) {
+ if (supportsCategorizedSorting()) {
+ Q_ASSERT(m_iconsView != 0);
+ if (categorized) {
+ Q_ASSERT(m_iconsView->itemCategorizer() == 0);
+ m_iconsView->setItemCategorizer(new DolphinItemCategorizer());
+ } else {
+ KItemCategorizer* categorizer = m_iconsView->itemCategorizer();
+ m_iconsView->setItemCategorizer(0);
+ delete categorizer;
+ }
+ }
+ emit categorizedSortingChanged();
+ }
+
const DolphinView::Sorting sorting = props.sorting();
if (sorting != m_proxyModel->sorting()) {
m_proxyModel->setSorting(sorting);
void DolphinView::generatePreviews(const KFileItemList& items)
{
if (m_controller->showPreview()) {
- KIO::PreviewJob* job = KIO::filePreview(items, 128);
- connect(job, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)),
- this, SLOT(showPreview(const KFileItem*, const QPixmap&)));
+
+ // Must turn QList<KFileItem *> to QList<KFileItem>...
+ QList<KFileItem> itemsToPreview;
+ foreach( KFileItem* it, items )
+ itemsToPreview.append( *it );
+
+ KIO::PreviewJob* job = KIO::filePreview(itemsToPreview, 128);
+ connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
+ this, SLOT(showPreview(const KFileItem&, const QPixmap&)));
}
}
-void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap)
+void DolphinView::showPreview(const KFileItem& item, const QPixmap& pixmap)
{
- Q_ASSERT(item != 0);
- const QModelIndex idx = m_dirModel->indexForItem(*item);
+ Q_ASSERT(!item.isNull());
+ if (item.url().directory() != m_dirLister->url().path()) {
+ // the preview job is still working on items of an older URL, hence
+ // the item is not part of the directory model anymore
+ return;
+ }
+
+ const QModelIndex idx = m_dirModel->indexForItem(item);
if (idx.isValid() && (idx.column() == 0)) {
const QMimeData* mimeData = QApplication::clipboard()->mimeData();
- if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(*item)) {
+ if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(item)) {
KIconEffect iconEffect;
const QPixmap cutPixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState);
m_dirModel->setData(idx, QIcon(cutPixmap), Qt::DecorationRole);
// the directory loading progress information has the lowest priority.
const QString progressText(m_statusBar->progressText());
m_showProgress = progressText.isEmpty() ||
- (progressText == i18n("Loading directory..."));
+ (progressText == i18n("Loading folder..."));
if (m_showProgress) {
- m_statusBar->setProgressText(i18n("Loading directory..."));
+ m_statusBar->setProgressText(i18n("Loading folder..."));
m_statusBar->setProgress(0);
}
if (view != 0) {
m_topLayout->removeWidget(view);
view->close();
+ if (view == m_iconsView) {
+ KItemCategorizer* categorizer = m_iconsView->itemCategorizer();
+ m_iconsView->setItemCategorizer(0);
+ delete categorizer;
+ }
view->deleteLater();
view = 0;
m_iconsView = 0;