File indexing completed on 2024-06-23 05:14:15

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     utils/filedialog.cpp
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2009 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include <config-kleopatra.h>
0011 
0012 #include "filedialog.h"
0013 
0014 #include <QDir>
0015 #include <QFileDialog>
0016 #include <QMap>
0017 
0018 using namespace Kleo;
0019 
0020 namespace
0021 {
0022 using Map = QMap<QString, QString>;
0023 Q_GLOBAL_STATIC(Map, dir_id_2_dir_map)
0024 }
0025 
0026 static QString dir(const QString &id)
0027 {
0028     const QString dir = (*dir_id_2_dir_map())[id];
0029     if (dir.isEmpty()) {
0030         return QDir::homePath();
0031     } else {
0032         return dir;
0033     }
0034 }
0035 
0036 static void update(const QString &fname, const QString &id)
0037 {
0038     if (!fname.isEmpty()) {
0039         (*dir_id_2_dir_map())[id] = QFileInfo(fname).absolutePath();
0040     }
0041 }
0042 
0043 QString FileDialog::getOpenFileName(QWidget *parent, const QString &caption, const QString &dirID, const QString &filter)
0044 {
0045     const QString fname = QFileDialog::getOpenFileName(parent, caption, dir(dirID), filter);
0046     update(fname, dirID);
0047     return fname;
0048 }
0049 
0050 QStringList FileDialog::getOpenFileNames(QWidget *parent, const QString &caption, const QString &dirID, const QString &filter)
0051 {
0052     const QStringList files = QFileDialog::getOpenFileNames(parent, caption, dir(dirID), filter);
0053     if (!files.empty()) {
0054         update(files.front(), dirID);
0055     }
0056     return files;
0057 }
0058 
0059 QString FileDialog::getSaveFileName(QWidget *parent, const QString &caption, const QString &dirID, const QString &filter)
0060 {
0061     const QString fname = QFileDialog::getSaveFileName(parent, caption, dir(dirID), filter);
0062     update(fname, dirID);
0063     return fname;
0064 }
0065 
0066 QString FileDialog::getSaveFileNameEx(QWidget *parent, const QString &caption, const QString &dirID, const QString &proposedFileName, const QString &filter)
0067 {
0068     if (proposedFileName.isEmpty()) {
0069         return getSaveFileName(parent, caption, dirID, filter);
0070     }
0071     const QString fname = QFileDialog::getSaveFileName(parent, caption, QDir(dir(dirID)).filePath(proposedFileName), filter);
0072     update(fname, dirID);
0073     return fname;
0074 }