1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
// SPDX-FileCopyrightText: 2020 Simon Persson <simon.persson@mykolab.com>
//
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
#include "dirselector.h"
#include <KDirLister>
#include <KDirModel>
#include <KFileUtils>
#include <KLocalizedString>
#include <KMessageBox>
#include <QDir>
#include <QInputDialog>
DirSelector::DirSelector(QWidget *pParent)
: QTreeView(pParent)
{
mDirModel = new KDirModel(this);
mDirModel->dirLister()->setDirOnlyMode(true);
setModel(mDirModel);
for (int i = 1; i < mDirModel->columnCount(); ++i) {
hideColumn(i);
}
setHeaderHidden(true);
connect(mDirModel, SIGNAL(expand(QModelIndex)), SLOT(expand(QModelIndex)));
connect(mDirModel, SIGNAL(expand(QModelIndex)), SLOT(selectEntry(QModelIndex)));
}
QUrl DirSelector::url() const
{
const KFileItem lFileItem = mDirModel->itemForIndex(currentIndex());
return !lFileItem.isNull() ? lFileItem.url() : QUrl();
}
void DirSelector::createNewFolder()
{
bool lUserAccepted;
QString lNameSuggestion = xi18nc("default folder name when creating a new folder", "New Folder");
if (QFileInfo::exists(url().adjusted(QUrl::StripTrailingSlash).path() + '/' + lNameSuggestion)) {
lNameSuggestion = KFileUtils::suggestName(url(), lNameSuggestion);
}
QString lSelectedName = QInputDialog::getText(this,
xi18nc("@title:window", "New Folder"),
xi18nc("@label:textbox", "Create new folder in:\n%1", url().path()),
QLineEdit::Normal,
lNameSuggestion,
&lUserAccepted);
if (!lUserAccepted)
return;
QUrl lPartialUrl(url());
const QStringList lDirectories = lSelectedName.split(QLatin1Char('/'), Qt::SkipEmptyParts);
foreach (QString lSubDirectory, lDirectories) {
QDir lDir(lPartialUrl.path());
if (lDir.exists(lSubDirectory)) {
lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash);
lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory));
KMessageBox::error(this, i18n("A folder named %1 already exists.", lPartialUrl.path()));
return;
}
if (!lDir.mkdir(lSubDirectory)) {
lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash);
lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory));
KMessageBox::error(this, i18n("You do not have permission to create %1.", lPartialUrl.path()));
return;
}
lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash);
lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory));
}
mDirModel->expandToUrl(lPartialUrl);
}
void DirSelector::selectEntry(QModelIndex pIndex)
{
selectionModel()->clearSelection();
selectionModel()->setCurrentIndex(pIndex, QItemSelectionModel::SelectCurrent);
scrollTo(pIndex);
}
void DirSelector::expandToUrl(const QUrl &pUrl)
{
mDirModel->expandToUrl(pUrl);
}
void DirSelector::setRootUrl(const QUrl &pUrl)
{
mDirModel->dirLister()->openUrl(pUrl);
}
|