#include <kdirlister.h>
#include <kfilepreviewgenerator.h>
#include <kiconeffect.h>
+#include <kfileitem.h>
#include <klocale.h>
#include <kio/deletejob.h>
#include <kio/netaccess.h>
#include <konq_fileitemcapabilities.h>
#include <konq_operations.h>
#include <konqmimedata.h>
+#include <kstringhandler.h>
#include <ktoggleaction.h>
#include <kurl.h>
#include "viewproperties.h"
#include "zoomlevelinfo.h"
+/**
+ * Helper function for sorting items with qSort() in
+ * DolphinView::renameSelectedItems().
+ */
+bool lessThan(const KFileItem& item1, const KFileItem& item2)
+{
+ return KStringHandler::naturalCompare(item1.name(), item2.name()) < 0;
+}
+
DolphinView::DolphinView(QWidget* parent,
const KUrl& url,
KDirLister* dirLister,
}
emit modeChanged();
+
updateZoomLevel(oldZoomLevel);
+ if (m_showPreview) {
+ loadDirectory(viewPropsUrl);
+ }
}
DolphinView::Mode DolphinView::mode() const
}
++it;
}
+
+ if (folderCount + fileCount == 1) {
+ // if only one item is selected, show the filename
+ const QString name = list.first().name();
+ text = (folderCount == 1) ? i18nc("@info:status", "<filename>%1</filename> selected", name) :
+ i18nc("@info:status", "<filename>%1</filename> selected (%2)",
+ name, KIO::convertSize(totalFileSize));
+ } else {
+ // at least 2 items are selected
+ const QString foldersText = i18ncp("@info:status", "1 Folder selected", "%1 Folders selected", folderCount);
+ const QString filesText = i18ncp("@info:status", "1 File selected", "%1 Files selected", fileCount);
+ if ((folderCount > 0) && (fileCount > 0)) {
+ text = i18nc("@info:status folders, files (size)", "%1, %2 (%3)",
+ foldersText, filesText, KIO::convertSize(totalFileSize));
+ } else if (fileCount > 0) {
+ text = i18nc("@info:status files (size)", "%1 (%2)", filesText, KIO::convertSize(totalFileSize));
+ } else {
+ Q_ASSERT(folderCount > 0);
+ text = foldersText;
+ }
+ }
} else {
calculateItemCount(fileCount, folderCount, totalFileSize);
+ text = KIO::itemsSummaryString(fileCount + folderCount,
+ fileCount, folderCount,
+ totalFileSize, true);
}
-
- if (folderCount > 0) {
- text = hasSelection() ?
- i18ncp("@info:status", "1 Folder selected", "%1 Folders selected", folderCount) :
- i18ncp("@info:status", "1 Folder", "%1 Folders", folderCount);
- if (fileCount > 0) {
- text += i18nc("@info:status separator between 2 status infos", ", ");
- }
- }
-
- if (fileCount > 0) {
- const QString sizeText = KIO::convertSize(totalFileSize);
- text += hasSelection() ?
- i18ncp("@info:status", "1 File selected (%2)", "%1 Files selected (%2)", fileCount, sizeText) :
- i18ncp("@info:status", "1 File (%2)", "%1 Files (%2)", fileCount, sizeText);
- }
return text;
}
void DolphinView::renameSelectedItems()
{
- const KFileItemList items = selectedItems();
+ KFileItemList items = selectedItems();
const int itemCount = items.count();
if (itemCount < 1) {
return;
// TODO: check how this can be integrated into KIO::FileUndoManager/KonqOperations
// as one operation instead of n rename operations like it is done now...
Q_ASSERT(newName.contains('#'));
+
+ // currently the items are sorted by the selection order, resort
+ // them by the file name
+ qSort(items.begin(), items.end(), lessThan);
// iterate through all selected items and rename them...
int index = 1;
- foreach (const KFileItem &item, items) {
+ foreach (const KFileItem& item, items) {
const KUrl& oldUrl = item.url();
QString number;
number.setNum(index++);
void DolphinView::cutSelectedItems()
{
- QMimeData* mimeData = new QMimeData();
+ QMimeData* mimeData = selectionMimeData();
const KUrl::List kdeUrls = simplifiedSelectedUrls();
const KUrl::List mostLocalUrls;
KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, true);
void DolphinView::copySelectedItems()
{
- QMimeData* mimeData = new QMimeData();
+ QMimeData* mimeData = selectionMimeData();
const KUrl::List kdeUrls = selectedUrls();
const KUrl::List mostLocalUrls;
KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, false);
const KUrl& destPath,
QDropEvent* event)
{
- DragAndDropHelper::dropUrls(destItem, destPath, event, this);
+ DragAndDropHelper::instance().dropUrls(destItem, destPath, event, this);
}
void DolphinView::updateSorting(DolphinView::Sorting sorting)
m_topLayout->removeWidget(view);
view->close();
+ disconnect(view);
+ m_controller->disconnect(view);
+ view->disconnect();
+
bool deleteView = true;
foreach (const QAbstractItemView* expandedView, m_expandedViews) {
if (view == expandedView) {
return (m_detailsView != 0) && m_detailsView->itemsExpandable();
}
+QMimeData* DolphinView::selectionMimeData() const
+{
+ if (isColumnViewActive()) {
+ return m_columnView->selectionMimeData();
+ }
+
+ const QAbstractItemView* view = itemView();
+ Q_ASSERT((view != 0) && (view->selectionModel() != 0));
+ const QItemSelection selection = m_proxyModel->mapSelectionToSource(view->selectionModel()->selection());
+ return m_dolphinModel->mimeData(selection.indexes());
+}
+
#include "dolphinview.moc"