File indexing completed on 2024-05-12 16:02:00

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::slotSelectFile()
0077 {
0078     KoFileDialog dialog(this, m_mode, m_name);
0079     if (m_mode == KoFileDialog::OpenFile)
0080     {
0081         dialog.setCaption(i18n("Select a file to load..."));
0082     }
0083     else if (m_mode == KoFileDialog::OpenDirectory)
0084     {
0085         dialog.setCaption(i18n("Select a directory to load..."));
0086     }
0087 
0088     const QString basePath =
0089         KritaUtils::resolveAbsoluteFilePath(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation),
0090                                             m_basePath);
0091 
0092     const QString filePath =
0093         KritaUtils::resolveAbsoluteFilePath(basePath, m_ui->txtFileName->text());
0094 
0095     dialog.setDefaultDir(filePath, true);
0096     dialog.setMimeTypeFilters(m_mime_filter_list, m_mime_default_filter);
0097 
0098     QString newFileName = dialog.filename();
0099 
0100     if (!newFileName.isEmpty()) {
0101         setFileName(newFileName);
0102     }
0103 }