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 }