File: FileDialog.h

package info (click to toggle)
kwave 25.04.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,272 kB
  • sloc: cpp: 56,173; xml: 817; perl: 688; sh: 57; makefile: 11
file content (155 lines) | stat: -rw-r--r-- 5,221 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// SPDX-FileCopyrightText: 2002 Thomas Eschenbacher <Thomas.Eschenbacher@gmx.de>
// SPDX-FileCopyrightText: 2024 Mark Penner <mrp@markpenner.space>
// SPDX-License-Identifier: GPL-2.0-or-later
/*************************************************************************
      FileDialog.h  -  wrapper for QFileDialog
                             -------------------
    begin                : Thu May 30 2002
    copyright            : (C) 2002 by Thomas Eschenbacher
    email                : Thomas.Eschenbacher@gmx.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef FILE_DIALOG_H
#define FILE_DIALOG_H

#include "config.h"
#include "libkwavegui_export.h"

#include <QtGlobal>
#include <QFileDialog>
#include <QObject>
#include <QString>
#include <QUrl>

class QWidget;

namespace Kwave
{
    /**
     * A wrapper for QFileDialog that remembers the previous directory
     * and pre-selects the previous file extension for multiple contexts.
     */
    class LIBKWAVEGUI_EXPORT FileDialog: public QObject
    {
        Q_OBJECT
    public:
        typedef enum {
            SaveFile = 0, /**< save a file */
            OpenFile,     /**< open a file */
            SelectDir     /**< select a directory */
        } OperationMode;

        /**
         * Constructor.
         * @param startDir directory to start with, can start with the scheme
         *                 "kfiledialog://scope/path"
         * @param mode determines the mode in which the dialog is used, either
         *             to open a file, save a file or select a directory
         * @param filter a "\n" separated list of file filters, each filter
         *               consists of a space separated list of file patterns
         *               (including "*.") and a "|" as separator followed
         *               by a verbose description of the file type
         * @param parent the parent widget of the dialog
         * @param last_url URL used for the last call, optional
         * @param last_ext file extension (pattern) used for the last
         *                 call (optional), including a "*."
         */
        FileDialog(const QString& startDir,
                   OperationMode mode,
                   const QString& filter,
                   QWidget *parent,
                   const QUrl last_url = QUrl(),
                   const QString last_ext = QString());

        /** Destructor */
        virtual ~FileDialog() override
        {
        }

        /**
         * execute the QFileDialog
         */
        int exec();

        /**
         * Returns the previously used extension, including "*."
         */
        QString selectedExtension();

        /**
         * Returns the first selected URL (if any)
         */
        QUrl selectedUrl() const;

        /**
         * Returns the URL of the currently visible directory
         */
        QUrl baseUrl() const;

        /**
         * Sets the current directory
         * @param directory the new directory to show
         */
        void setDirectory(const QString &directory);

        /**
         * Sets the dialog title
         * @param title the new dialog title
         */
        void setWindowTitle(const QString &title);

        /**
         * Sets the currently selected URL
         * @param url the new URL to show
         */
        void selectUrl(const QUrl &url);

    protected:

        /** load previous settings */
        void loadConfig(const QString &section);

        /** save current settings */
        void saveConfig();

    private:

        /**
         * Try to guess a file filter from a given file extension
         * @param pattern a file extension, e.g. "*.wav *.snd"
         * @param mode determines the mode in which the dialog is used,
         *             see constructor
         * @return a filter string suitable for a KFileDialog
         */
        QString guessFilterFromFileExt(const QString &pattern,
                                       OperationMode mode);

    private:
        /** the QFileDialog that we wrap */
        QFileDialog *m_file_dialog;

        /** name of the group in the config file */
        QString m_config_group;

        /** URL of the previously opened file or directory */
        QUrl m_last_url;

        /** extension of the last selected single URL or file */
        QString m_last_ext;

    };
}

#endif /* FILE_DIALOG_H */

//***************************************************************************
//***************************************************************************