File indexing completed on 2024-05-19 04:29:24

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_file_name_requester.h"
0008 #include "ui_wdg_file_name_requester.h"
0009 
0010 #include <QStandardPaths>
0011 #include <QDebug>
0012 
0013 #include "KoIcon.h"
0014 #include <KisFileUtils.h>
0015 
0016 KisFileNameRequester::KisFileNameRequester(QWidget *parent)
0017     : QWidget(parent)
0018     , m_ui(new Ui::WdgFileNameRequester)
0019     , m_mode(KoFileDialog::OpenFile)
0020     , m_name("OpenDocument")
0021 {
0022     m_ui->setupUi(this);
0023 
0024     m_ui->btnSelectFile->setIcon(kisIcon("folder"));
0025 
0026     connect(m_ui->btnSelectFile, SIGNAL(clicked()), SLOT(slotSelectFile()));
0027     connect(m_ui->txtFileName, SIGNAL(textChanged(QString)), SIGNAL(textChanged(QString)));
0028 }
0029 
0030 KisFileNameRequester::~KisFileNameRequester()
0031 {
0032 }
0033 
0034 void KisFileNameRequester::setStartDir(const QString &path)
0035 {
0036     m_basePath = path;
0037 }
0038 
0039 void KisFileNameRequester::setConfigurationName(const QString &name)
0040 {
0041     m_name = name;
0042 }
0043 
0044 void KisFileNameRequester::setFileName(const QString &path)
0045 {
0046     m_ui->txtFileName->setText(path);
0047     emit fileSelected(path);
0048 }
0049 
0050 QString KisFileNameRequester::fileName() const
0051 {
0052     return m_ui->txtFileName->text();
0053 }
0054 
0055 void KisFileNameRequester::setMode(KoFileDialog::DialogType mode)
0056 {
0057     m_mode = mode;
0058 }
0059 
0060 KoFileDialog::DialogType KisFileNameRequester::mode() const
0061 {
0062     return m_mode;
0063 }
0064 
0065 void KisFileNameRequester::setReadOnlyText(bool readonly)
0066 {
0067     m_ui->txtFileName->setReadOnly(readonly);
0068 }
0069 
0070 void KisFileNameRequester::setMimeTypeFilters(const QStringList &filterList, QString defaultFilter)
0071 {
0072     m_mime_filter_list = filterList;
0073     m_mime_default_filter = defaultFilter;
0074 }
0075 
0076 void KisFileNameRequester::setValidator(QValidator *validator)
0077 {
0078     m_ui->txtFileName->setValidator(validator);
0079 }
0080 
0081 void KisFileNameRequester::slotSelectFile()
0082 {
0083     KoFileDialog dialog(this, m_mode, m_name);
0084     if (m_mode == KoFileDialog::OpenFile)
0085     {
0086         dialog.setCaption(i18n("Select a file to load..."));
0087     }
0088     else if (m_mode == KoFileDialog::OpenDirectory)
0089     {
0090         dialog.setCaption(i18n("Select a directory to load..."));
0091     }
0092 
0093     const QString basePath =
0094         KritaUtils::resolveAbsoluteFilePath(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation),
0095                                             m_basePath);
0096 
0097     const QString filePath =
0098         KritaUtils::resolveAbsoluteFilePath(basePath, m_ui->txtFileName->text());
0099 
0100     dialog.setDefaultDir(filePath, true);
0101     dialog.setMimeTypeFilters(m_mime_filter_list, m_mime_default_filter);
0102 
0103     QString newFileName = dialog.filename();
0104 
0105     if (!newFileName.isEmpty()) {
0106         setFileName(newFileName);
0107     }
0108 }