diff options
author | allexzander <blackslayer4@gmail.com> | 2021-01-29 21:00:21 +0300 |
---|---|---|
committer | allexzander <blackslayer4@gmail.com> | 2021-02-04 11:05:18 +0300 |
commit | 81a090b362f10df8d208924c97148b0bcff135ad (patch) | |
tree | c6466fd57619bafbbafa68b48c494ab07b0e307b /src/gui/accountsettings.cpp | |
parent | 93b26bc666523d245b323c03567f81f7f7687ccb (diff) |
Allow creation of new folders from the Settings Dialog.
Signed-off-by: allexzander <blackslayer4@gmail.com>
Diffstat (limited to 'src/gui/accountsettings.cpp')
-rw-r--r-- | src/gui/accountsettings.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index ec6254b91..5b340de40 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -17,6 +17,7 @@ #include "ui_accountsettings.h" #include "theme.h" +#include "foldercreationdialog.h" #include "folderman.h" #include "folderwizard.h" #include "folderstatusmodel.h" @@ -333,6 +334,46 @@ void AccountSettings::slotEditCurrentIgnoredFiles() openIgnoredFilesDialog(f->path()); } +void AccountSettings::slotOpenMakeFolderDialog() +{ + const auto &selected = _ui->_folderList->selectionModel()->currentIndex(); + + if (!selected.isValid()) { + qCWarning(lcAccountSettings) << "Selection model current folder index is not valid."; + return; + } + + const auto &classification = _model->classify(selected); + + if (classification != FolderStatusModel::SubFolder && classification != FolderStatusModel::RootFolder) { + return; + } + + const QString fileName = [this, &selected, &classification] { + QString result; + if (classification == FolderStatusModel::RootFolder) { + const auto alias = _model->data(selected, FolderStatusDelegate::FolderAliasRole).toString(); + if (const auto folder = FolderMan::instance()->folder(alias)) { + result = folder->path(); + } + } else { + result = _model->data(selected, FolderStatusDelegate::FolderPathRole).toString(); + } + + if (result.endsWith('/')) { + result.chop(1); + } + + return result; + }(); + + if (!fileName.isEmpty()) { + const auto folderCreationDialog = new FolderCreationDialog(fileName, this); + folderCreationDialog->setAttribute(Qt::WA_DeleteOnClose); + folderCreationDialog->open(); + } +} + void AccountSettings::slotEditCurrentLocalIgnoredFiles() { QModelIndex selected = _ui->_folderList->selectionModel()->currentIndex(); @@ -403,6 +444,10 @@ void AccountSettings::slotSubfolderContextMenuRequested(const QModelIndex& index ac = menu.addAction(tr("Edit Ignored Files")); connect(ac, &QAction::triggered, this, &AccountSettings::slotEditCurrentLocalIgnoredFiles); + ac = menu.addAction(tr("Create new folder")); + connect(ac, &QAction::triggered, this, &AccountSettings::slotOpenMakeFolderDialog); + ac->setEnabled(QFile::exists(fileName)); + const auto folder = info->_folder; if (folder && folder->virtualFilesEnabled()) { auto availabilityMenu = menu.addMenu(tr("Availability")); @@ -475,6 +520,10 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) ac = menu->addAction(tr("Edit Ignored Files")); connect(ac, &QAction::triggered, this, &AccountSettings::slotEditCurrentIgnoredFiles); + ac = menu->addAction(tr("Create new folder")); + connect(ac, &QAction::triggered, this, &AccountSettings::slotOpenMakeFolderDialog); + ac->setEnabled(QFile::exists(folder->path())); + if (!_ui->_folderList->isExpanded(index) && folder->supportsSelectiveSync()) { ac = menu->addAction(tr("Choose what to sync")); ac->setEnabled(folderConnected); |