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
dialoggui.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
// Qt-Security score:significant reason:default
4
5
#
include
"dialoggui_p.h"
6
7
#
include
<
QtWidgets
/
qfileiconprovider
.
h
>
8
#
include
<
QtGui
/
qicon
.
h
>
9
#
include
<
QtGui
/
qimage
.
h
>
10
#
include
<
QtGui
/
qimagereader
.
h
>
11
#
include
<
QtGui
/
qpixmap
.
h
>
12
13
#
include
<
QtCore
/
qfileinfo
.
h
>
14
#
include
<
QtCore
/
qfile
.
h
>
15
#
include
<
QtCore
/
qset
.
h
>
16
17
// QFileDialog on X11 does not provide an image preview. Display icons.
18
#
if
defined
(
Q_OS_UNIX
)
&&
!
defined
(
Q_OS_MACOS
)
19
#
define
IMAGE_PREVIEW
20
#
endif
21
22
QT_BEGIN_NAMESPACE
23
24
namespace
qdesigner_internal
{
25
26
// Icon provider that reads out the known image formats
27
class
IconProvider
:
public
QFileIconProvider
{
28
Q_DISABLE_COPY_MOVE
(
IconProvider
)
29
30
public
:
31
IconProvider
();
32
QIcon
icon
(
const
QFileInfo &info)
const
override
;
33
34
inline
bool
loadCheck
(
const
QFileInfo &info)
const
;
35
QImage
loadImage
(
const
QString &fileName)
const
;
36
37
private
:
38
QSet<QString> m_imageFormats;
39
};
40
41
IconProvider
::IconProvider()
42
{
43
// Determine a list of readable extensions (upper and lower case)
44
const
auto
&fmts = QImageReader::supportedImageFormats();
45
for
(
const
QByteArray &fmt : fmts) {
46
const
QString suffix = QString::fromUtf8(fmt);
47
m_imageFormats.insert(suffix.toLower());
48
m_imageFormats.insert(suffix.toUpper());
49
}
50
}
51
52
// Check by extension and type if this appears to be a loadable image
53
bool
IconProvider
::
loadCheck
(
const
QFileInfo &info)
const
54
{
55
if
(info.isFile() && info.isReadable()) {
56
const
QString suffix = info.suffix();
57
if
(!suffix.isEmpty())
58
return
m_imageFormats.contains(suffix);
59
}
60
return
false
;
61
}
62
63
QImage
IconProvider
::
loadImage
(
const
QString &fileName)
const
64
{
65
QFile file(fileName);
66
if
(file.open(QIODevice::ReadOnly)) {
67
QImageReader imgReader(&file);
68
if
(imgReader.canRead()) {
69
QImage image;
70
if
(imgReader.read(&image))
71
return
image;
72
}
73
}
74
return
QImage();
75
}
76
77
QIcon
IconProvider
::
icon
(
const
QFileInfo &info)
const
78
{
79
// Don't get stuck on large images.
80
const
qint64 maxSize = 131072;
81
if
(loadCheck(info) && info.size() < maxSize) {
82
const
QImage image = loadImage(info.absoluteFilePath());
83
if
(!image.isNull())
84
return
QIcon(QPixmap::fromImage(image, Qt::ThresholdDither|Qt::AutoColor));
85
}
86
return
QFileIconProvider::icon(info);
87
}
88
89
// ---------------- DialogGui
90
DialogGui
::
DialogGui
() =
default
;
91
92
DialogGui
::~
DialogGui
()
93
{
94
delete
m_iconProvider
;
95
}
96
97
QFileIconProvider
*
DialogGui
::
ensureIconProvider
()
98
{
99
if
(!
m_iconProvider
)
100
m_iconProvider
=
new
IconProvider
;
101
return
m_iconProvider
;
102
}
103
104
QMessageBox
::
StandardButton
105
DialogGui
::
message
(
QWidget
*
parent
,
Message
/*context*/
,
QMessageBox
::
Icon
icon
,
106
const
QString
&
title
,
const
QString
&
text
,
QMessageBox
::
StandardButtons
buttons
,
107
QMessageBox
::
StandardButton
defaultButton
)
108
{
109
QMessageBox
::
StandardButton
rc
=
QMessageBox
::
NoButton
;
110
switch
(
icon
) {
111
case
QMessageBox
::
Information
:
112
rc
=
QMessageBox
::
information
(
parent
,
title
,
text
,
buttons
,
defaultButton
);
113
break
;
114
case
QMessageBox
::
Warning
:
115
rc
=
QMessageBox
::
warning
(
parent
,
title
,
text
,
buttons
,
defaultButton
);
116
break
;
117
case
QMessageBox
::
Critical
:
118
rc
=
QMessageBox
::
critical
(
parent
,
title
,
text
,
buttons
,
defaultButton
);
119
break
;
120
case
QMessageBox
::
Question
:
121
rc
=
QMessageBox
::
question
(
parent
,
title
,
text
,
buttons
,
defaultButton
);
122
break
;
123
case
QMessageBox
::
NoIcon
:
124
break
;
125
}
126
return
rc
;
127
}
128
129
QMessageBox
::
StandardButton
130
DialogGui
::
message
(
QWidget
*
parent
,
Message
/*context*/
,
QMessageBox
::
Icon
icon
,
131
const
QString
&
title
,
const
QString
&
text
,
const
QString
&
informativeText
,
132
QMessageBox
::
StandardButtons
buttons
,
QMessageBox
::
StandardButton
defaultButton
)
133
{
134
QMessageBox
msgBox
(
icon
,
title
,
text
,
buttons
,
parent
);
135
msgBox
.
setDefaultButton
(
defaultButton
);
136
msgBox
.
setInformativeText
(
informativeText
);
137
return
static_cast
<
QMessageBox
::
StandardButton
>(
msgBox
.
exec
());
138
}
139
140
QMessageBox
::
StandardButton
141
DialogGui
::
message
(
QWidget
*
parent
,
Message
/*context*/
,
QMessageBox
::
Icon
icon
,
142
const
QString
&
title
,
const
QString
&
text
,
const
QString
&
informativeText
,
const
QString
&
detailedText
,
143
QMessageBox
::
StandardButtons
buttons
,
QMessageBox
::
StandardButton
defaultButton
)
144
{
145
QMessageBox
msgBox
(
icon
,
title
,
text
,
buttons
,
parent
);
146
msgBox
.
setDefaultButton
(
defaultButton
);
147
msgBox
.
setInformativeText
(
informativeText
);
148
msgBox
.
setDetailedText
(
detailedText
);
149
return
static_cast
<
QMessageBox
::
StandardButton
>(
msgBox
.
exec
());
150
}
151
152
QString
DialogGui
::
getExistingDirectory
(
QWidget
*
parent
,
const
QString
&
caption
,
const
QString
&
dir
,
QFileDialog
::
Options
options
)
153
{
154
return
QFileDialog
::
getExistingDirectory
(
parent
,
caption
,
dir
,
options
);
155
}
156
157
QString
DialogGui
::
getOpenFileName
(
QWidget
*
parent
,
const
QString
&
caption
,
const
QString
&
dir
,
const
QString
&
filter
,
QString
*
selectedFilter
,
QFileDialog
::
Options
options
)
158
{
159
return
QFileDialog
::
getOpenFileName
(
parent
,
caption
,
dir
,
filter
,
selectedFilter
,
options
);
160
}
161
162
QStringList
DialogGui
::
getOpenFileNames
(
QWidget
*
parent
,
const
QString
&
caption
,
const
QString
&
dir
,
const
QString
&
filter
,
QString
*
selectedFilter
,
QFileDialog
::
Options
options
)
163
{
164
return
QFileDialog
::
getOpenFileNames
(
parent
,
caption
,
dir
,
filter
,
selectedFilter
,
options
);
165
}
166
167
QString
DialogGui
::
getSaveFileName
(
QWidget
*
parent
,
const
QString
&
caption
,
const
QString
&
dir
,
const
QString
&
filter
,
QString
*
selectedFilter
,
QFileDialog
::
Options
options
)
168
{
169
return
QFileDialog
::
getSaveFileName
(
parent
,
caption
,
dir
,
filter
,
selectedFilter
,
options
);
170
}
171
172
void
DialogGui
::
initializeImageFileDialog
(
QFileDialog
&
fileDialog
,
QFileDialog
::
Options
options
,
QFileDialog
::
FileMode
fm
)
173
{
174
fileDialog
.
setOption
(
QFileDialog
::
DontConfirmOverwrite
,
options
.
testFlag
(
QFileDialog
::
DontConfirmOverwrite
));
175
fileDialog
.
setOption
(
QFileDialog
::
DontResolveSymlinks
,
options
.
testFlag
(
QFileDialog
::
DontResolveSymlinks
));
176
fileDialog
.
setIconProvider
(
ensureIconProvider
());
177
fileDialog
.
setFileMode
(
fm
);
178
}
179
180
QString
DialogGui
::
getOpenImageFileName
(
QWidget
*
parent
,
const
QString
&
caption
,
const
QString
&
dir
,
const
QString
&
filter
,
QString
*
selectedFilter
,
QFileDialog
::
Options
options
)
181
{
182
183
#
ifdef
IMAGE_PREVIEW
184
QFileDialog
fileDialog
(
parent
,
caption
,
dir
,
filter
);
185
initializeImageFileDialog
(
fileDialog
,
options
,
QFileDialog
::
ExistingFile
);
186
if
(
fileDialog
.
exec
() !=
QDialog
::
Accepted
)
187
return
QString
();
188
189
const
QStringList
selectedFiles
=
fileDialog
.
selectedFiles
();
190
if
(
selectedFiles
.
isEmpty
())
191
return
QString
();
192
193
if
(
selectedFilter
)
194
*
selectedFilter
=
fileDialog
.
selectedNameFilter
();
195
196
return
selectedFiles
.
constFirst
();
197
#
else
198
return
getOpenFileName
(
parent
,
caption
,
dir
,
filter
,
selectedFilter
,
options
);
199
#
endif
200
}
201
202
QStringList
DialogGui
::
getOpenImageFileNames
(
QWidget
*
parent
,
const
QString
&
caption
,
const
QString
&
dir
,
const
QString
&
filter
,
QString
*
selectedFilter
,
QFileDialog
::
Options
options
)
203
{
204
#
ifdef
IMAGE_PREVIEW
205
QFileDialog
fileDialog
(
parent
,
caption
,
dir
,
filter
);
206
initializeImageFileDialog
(
fileDialog
,
options
,
QFileDialog
::
ExistingFiles
);
207
if
(
fileDialog
.
exec
() !=
QDialog
::
Accepted
)
208
return
QStringList
();
209
210
const
QStringList
selectedFiles
=
fileDialog
.
selectedFiles
();
211
if
(!
selectedFiles
.
isEmpty
() &&
selectedFilter
)
212
*
selectedFilter
=
fileDialog
.
selectedNameFilter
();
213
214
return
selectedFiles
;
215
#
else
216
return
getOpenFileNames
(
parent
,
caption
,
dir
,
filter
,
selectedFilter
,
options
);
217
#
endif
218
}
219
220
}
221
222
QT_END_NAMESPACE
qdesigner_internal::IconProvider
Definition
dialoggui.cpp:27
qdesigner_internal::IconProvider::loadImage
QImage loadImage(const QString &fileName) const
Definition
dialoggui.cpp:63
qdesigner_internal::IconProvider::icon
QIcon icon(const QFileInfo &info) const override
Returns an icon for the file described by info, using the current icon theme.
Definition
dialoggui.cpp:77
qdesigner_internal::IconProvider::loadCheck
bool loadCheck(const QFileInfo &info) const
Definition
dialoggui.cpp:53
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qdesigner_internal
Auxiliary methods to store/retrieve settings.
Definition
buddyeditor.cpp:67
qttools
src
designer
src
lib
shared
dialoggui.cpp
Generated on
for Qt by
1.16.1