Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwasmfiledialoghelper.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5
6#include <QtCore/QDebug>
7#include <QtCore/QUrl>
8#include <QtGui/private/qwasmlocalfileaccess_p.h>
9#include <QtCore/private/qwasmlocalfileengine_p.h>
10
12
13QWasmFileDialogHelper::QWasmFileDialogHelper()
14 : m_eventLoop(nullptr)
15{
16
17}
18
19QWasmFileDialogHelper::~QWasmFileDialogHelper()
20{
21
22}
23
24bool QWasmFileDialogHelper::defaultNameFilterDisables() const
25{
26 return false;
27}
28
29void QWasmFileDialogHelper::setDirectory(const QUrl &directory)
30{
31 Q_UNUSED(directory)
32}
33
34QUrl QWasmFileDialogHelper::directory() const
35{
36 return QUrl();
37}
38
39void QWasmFileDialogHelper::selectFile(const QUrl &file)
40{
41 m_selectedFiles.clear();
42 m_selectedFiles.append(file);
43}
44
45QList<QUrl> QWasmFileDialogHelper::selectedFiles() const
46{
47 return m_selectedFiles;
48}
49
50void QWasmFileDialogHelper::setFilter()
51{
52
53}
54
55void QWasmFileDialogHelper::selectNameFilter(const QString &filter)
56{
57 Q_UNUSED(filter);
58 // TODO
59}
60
61QString QWasmFileDialogHelper::selectedNameFilter() const
62{
63 return QString();
64}
65
66void QWasmFileDialogHelper::exec()
67{
68 QEventLoop eventLoop;
69 m_eventLoop = &eventLoop;
70 eventLoop.exec();
71 m_eventLoop = nullptr;
72}
73
74bool QWasmFileDialogHelper::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent)
75{
76 Q_UNUSED(flags)
77 Q_UNUSED(modality)
78 Q_UNUSED(parent)
79 showFileDialog();
80 return true;
81}
82
83void QWasmFileDialogHelper::hide()
84{
85
86}
87
88void QWasmFileDialogHelper::showFileDialog()
89{
90 if (options()->acceptMode() == QFileDialogOptions::AcceptOpen) {
91 // Use name filters from options
92 QString nameFilter = options()->nameFilters().join(";;");
93 if (nameFilter.isEmpty())
94 nameFilter = "*";
95
96 QWasmLocalFileAccess::showOpenFileDialog(nameFilter.toStdString(), [this](bool accepted, std::vector<qstdweb::File> files) {
97 onOpenDialogClosed(accepted, files);
98 });
99 } else if (options()->acceptMode() == QFileDialogOptions::AcceptSave) {
100 QString suggestion = m_selectedFiles.isEmpty() ? QString() : QUrl(m_selectedFiles.first()).fileName();
101 m_selectedFiles.clear();
102
103 QWasmLocalFileAccess::showSaveFileDialog(suggestion.toStdString(), [this](bool accepted, qstdweb::FileSystemFileHandle file){
104 onSaveDialogClosed(accepted, file);
105 });
106 }
107}
108
109void QWasmFileDialogHelper::onOpenDialogClosed(bool accepted, std::vector<qstdweb::File> files)
110{
111 m_selectedFiles.clear();
112
113 if (!accepted) {
114 emit reject();
115 return;
116 }
117
118 // Track opened files
119 for (const auto &file : files) {
120 QString wasmFileName = QWasmFileEngineHandler::addFile(file);
121 QUrl fileUrl(wasmFileName);
122 m_selectedFiles.append(fileUrl);
123 }
124
125 // Emit signals
126 if (m_selectedFiles.size() > 0) {
127 emit fileSelected(m_selectedFiles.first());
128 emit filesSelected(m_selectedFiles);
129 }
130 emit accept();
131
132 // exit exec() if in exec()
133 if (m_eventLoop)
134 m_eventLoop->quit();
135}
136
137void QWasmFileDialogHelper::onSaveDialogClosed(bool accepted, qstdweb::FileSystemFileHandle file)
138{
139 if (!accepted) {
140 emit reject();
141 return;
142 }
143
144 // Track save file
145 QString wasmFileName = QWasmFileEngineHandler::addFile(file);
146 QUrl fileUrl(wasmFileName);
147 m_selectedFiles.append(fileUrl);
148
149 // Emit signals
150 emit fileSelected(m_selectedFiles.first());
151 emit accept();
152
153 if (m_eventLoop)
154 m_eventLoop->quit();
155}
156
157QT_END_NAMESPACE
Combined button and popup list for selecting options.