File indexing completed on 2024-05-05 17:43:13
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic (at) kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "directorychooserwidget.h" 0008 #include "ui_directorychooserwidget.h" 0009 0010 #include "vault.h" 0011 0012 class DirectoryChooserWidget::Private 0013 { 0014 public: 0015 Ui::DirectoryChooserWidget ui; 0016 DirectoryChooserWidget::Flags flags; 0017 0018 bool mountPointValid = false; 0019 0020 DirectoryChooserWidget *const q; 0021 Private(DirectoryChooserWidget *parent) 0022 : q(parent) 0023 { 0024 } 0025 0026 void setMountPointValid(bool valid) 0027 { 0028 if (mountPointValid == valid) 0029 return; 0030 0031 mountPointValid = valid; 0032 0033 q->setIsValid(valid); 0034 } 0035 0036 bool isDirectoryValid(const QUrl &url) const 0037 { 0038 if (url.isEmpty()) 0039 return false; 0040 0041 QDir directory(url.toString()); 0042 0043 // TODO: Support alternative flags once they are needed 0044 if (!directory.exists() || directory.entryList().isEmpty()) 0045 return true; 0046 0047 return false; 0048 } 0049 }; 0050 0051 DirectoryChooserWidget::DirectoryChooserWidget(DirectoryChooserWidget::Flags flags) 0052 : DialogDsl::DialogModule(false) 0053 , d(new Private(this)) 0054 { 0055 d->ui.setupUi(this); 0056 d->flags = flags; 0057 0058 connect(d->ui.editMountPoint, &KUrlRequester::textEdited, this, [&]() { 0059 d->setMountPointValid(d->isDirectoryValid(d->ui.editMountPoint->url())); 0060 }); 0061 } 0062 0063 DirectoryChooserWidget::~DirectoryChooserWidget() 0064 { 0065 } 0066 0067 PlasmaVault::Vault::Payload DirectoryChooserWidget::fields() const 0068 { 0069 return { 0070 {KEY_MOUNT_POINT, d->ui.editMountPoint->url().toLocalFile()}, 0071 }; 0072 } 0073 0074 void DirectoryChooserWidget::init(const PlasmaVault::Vault::Payload &payload) 0075 { 0076 const auto mountPoint = payload[KEY_MOUNT_POINT].toString(); 0077 0078 d->ui.editMountPoint->setText(mountPoint); 0079 0080 d->setMountPointValid(d->isDirectoryValid(d->ui.editMountPoint->url())); 0081 }