File indexing completed on 2024-04-28 09:41:47
0001 // SPDX-FileCopyrightText: 2020 Simon Persson <simon.persson@mykolab.com> 0002 // 0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #include "dirselector.h" 0006 0007 #include <KDirLister> 0008 #include <KDirModel> 0009 #include <KLocalizedString> 0010 #include <KMessageBox> 0011 #include <KFileUtils> 0012 0013 #include <QDir> 0014 #include <QInputDialog> 0015 0016 DirSelector::DirSelector(QWidget *pParent) : QTreeView(pParent) { 0017 mDirModel = new KDirModel(this); 0018 mDirModel->dirLister()->setDirOnlyMode(true); 0019 setModel(mDirModel); 0020 for (int i = 1; i < mDirModel->columnCount(); ++i) { 0021 hideColumn(i); 0022 } 0023 setHeaderHidden(true); 0024 connect(mDirModel, SIGNAL(expand(QModelIndex)), SLOT(expand(QModelIndex))); 0025 connect(mDirModel, SIGNAL(expand(QModelIndex)), SLOT(selectEntry(QModelIndex))); 0026 } 0027 0028 QUrl DirSelector::url() const { 0029 const KFileItem lFileItem = mDirModel->itemForIndex(currentIndex()); 0030 return !lFileItem.isNull() ? lFileItem.url() : QUrl(); 0031 } 0032 0033 void DirSelector::createNewFolder() { 0034 bool lUserAccepted; 0035 QString lNameSuggestion = xi18nc("default folder name when creating a new folder", "New Folder"); 0036 if(QFileInfo::exists(url().adjusted(QUrl::StripTrailingSlash).path() + '/' + lNameSuggestion)) { 0037 lNameSuggestion = KFileUtils::suggestName(url(), lNameSuggestion); 0038 } 0039 0040 QString lSelectedName = QInputDialog::getText(this, xi18nc("@title:window", "New Folder" ), 0041 xi18nc("@label:textbox", "Create new folder in:\n%1", url().path()), 0042 QLineEdit::Normal, lNameSuggestion, &lUserAccepted); 0043 if (!lUserAccepted) 0044 return; 0045 0046 QUrl lPartialUrl(url()); 0047 const QStringList lDirectories = lSelectedName.split(QLatin1Char('/'), Qt::SkipEmptyParts); 0048 foreach(QString lSubDirectory, lDirectories) { 0049 QDir lDir(lPartialUrl.path()); 0050 if(lDir.exists(lSubDirectory)) { 0051 lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); 0052 lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); 0053 KMessageBox::error(this, i18n("A folder named %1 already exists.", lPartialUrl.path())); 0054 return; 0055 } 0056 if(!lDir.mkdir(lSubDirectory)) { 0057 lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); 0058 lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); 0059 KMessageBox::error(this, i18n("You do not have permission to create %1.", lPartialUrl.path())); 0060 return; 0061 } 0062 lPartialUrl = lPartialUrl.adjusted(QUrl::StripTrailingSlash); 0063 lPartialUrl.setPath(lPartialUrl.path() + '/' + (lSubDirectory)); 0064 } 0065 mDirModel->expandToUrl(lPartialUrl); 0066 } 0067 0068 void DirSelector::selectEntry(QModelIndex pIndex) { 0069 selectionModel()->clearSelection(); 0070 selectionModel()->setCurrentIndex(pIndex, QItemSelectionModel::SelectCurrent); 0071 scrollTo(pIndex); 0072 } 0073 0074 void DirSelector::expandToUrl(const QUrl &pUrl) { 0075 mDirModel->expandToUrl(pUrl); 0076 } 0077 0078 void DirSelector::setRootUrl(const QUrl &pUrl) { 0079 mDirModel->dirLister()->openUrl(pUrl); 0080 } 0081