KIconThemes

icondialog.cpp
1/*
2 SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "icondialog_p.h"
8
9#include <QQuickItem>
10#include <QQuickWindow>
11
12#include <KIconDialog>
13#include <KIconLoader>
14#include <QApplication>
15
16IconDialog::IconDialog(QObject *parent)
17 : QObject(parent)
18 , m_dialog(nullptr)
19 , m_iconSize(0)
20 , m_user(false)
21 , m_modality(Qt::WindowModal)
22{
23 if (qobject_cast<QApplication *>(QCoreApplication::instance())) {
24 m_dialog.reset(new KIconDialog());
25 connect(m_dialog.data(), &KIconDialog::newIconName, this, [this](const QString &newIconName) {
26 if (m_iconName != newIconName) {
27 m_iconName = newIconName;
28 Q_EMIT iconNameChanged(newIconName);
29 }
30 });
31 connect(m_dialog.data(), &KIconDialog::accepted, this, &IconDialog::accepted);
32 connect(m_dialog.data(), &KIconDialog::rejected, this, &IconDialog::rejected);
33
34 m_dialog->installEventFilter(this);
35 }
36}
37
38IconDialog::~IconDialog()
39{
40 if (m_dialog) {
41 m_dialog->close();
42 }
43}
44
45QString IconDialog::iconName() const
46{
47 return m_iconName;
48}
49
50int IconDialog::iconSize() const
51{
52 return m_iconSize;
53}
54
55void IconDialog::setIconSize(int iconSize)
56{
57 if (m_dialog->iconSize() != iconSize) {
58 m_iconSize = iconSize;
59 Q_EMIT iconSizeChanged(iconSize);
60 }
61}
62
63QString IconDialog::title() const
64{
65 return m_dialog->windowTitle();
66}
67
68void IconDialog::setTitle(const QString &title)
69{
70 if (m_dialog->windowTitle() != title) {
71 m_dialog->setWindowTitle(title);
72 Q_EMIT titleChanged(title);
73 }
74}
75
76bool IconDialog::user() const
77{
78 return m_user;
79}
80
81void IconDialog::setUser(bool user)
82{
83 if (m_user != user) {
84 m_user = user;
85 Q_EMIT userChanged(user);
86 }
87}
88
89QString IconDialog::customLocation() const
90{
91 return m_customLocation;
92}
93
94void IconDialog::setCustomLocation(const QString &customLocation)
95{
96 if (m_customLocation != customLocation) {
97 m_dialog->setCustomLocation(customLocation);
98
99 m_customLocation = customLocation;
100 Q_EMIT customLocationChanged(customLocation);
101 }
102}
103
104Qt::WindowModality IconDialog::modality() const
105{
106 return m_modality;
107}
108
109void IconDialog::setModality(Qt::WindowModality modality)
110{
111 if (m_modality != modality) {
112 m_modality = modality;
113 Q_EMIT modalityChanged(modality);
114 }
115}
116
117bool IconDialog::visible() const
118{
119 return m_dialog->isVisible();
120}
121
122void IconDialog::setVisible(bool visible)
123{
124 if (visible) {
125 open();
126 } else {
127 close();
128 }
129}
130
131void IconDialog::open()
132{
133 if (m_dialog->isVisible()) {
134 return;
135 }
136
137 QQuickItem *parentItem = qobject_cast<QQuickItem *>(parent());
138 QQuickWindow *parentWindow = (parentItem ? parentItem->window() : qobject_cast<QQuickWindow *>(parent()));
139
140 if (m_modality == Qt::NonModal) {
141 m_dialog->setModal(false);
142 } else if (m_modality == Qt::WindowModal) {
143 m_dialog->winId(); // needed to get the windowHandle prior to showing
144 m_dialog->windowHandle()->setTransientParent(parentWindow);
145 m_dialog->setModal(false); // WindowModal does not unset the overall modality
146 } else if (m_modality == Qt::ApplicationModal) {
147 m_dialog->setModal(true);
148 }
149
150 m_dialog->setWindowModality(m_modality);
151
152 m_dialog->setup(KIconLoader::Desktop, KIconLoader::Application, false, m_iconSize, m_user);
153
154 m_dialog->show();
155}
156
157void IconDialog::close()
158{
159 if (!m_dialog->isVisible()) {
160 return;
161 }
162
163 m_dialog->hide();
164}
165
166bool IconDialog::eventFilter(QObject *watched, QEvent *event)
167{
168 if (watched == m_dialog.data() && (event->type() == QEvent::Show || event->type() == QEvent::Hide)) {
169 Q_EMIT visibleChanged();
170 }
171
172 return false;
173}
174
175#include "moc_icondialog_p.cpp"
Dialog for interactive selection of icons.
Definition kicondialog.h:33
@ Desktop
Desktop icons.
@ Application
An icon that represents an application.
Definition kiconloader.h:83
AKONADI_CALENDAR_EXPORT KCalendarCore::Event::Ptr event(const Akonadi::Item &item)
QAction * close(const QObject *recvr, const char *slot, QObject *parent)
QAction * open(const QObject *recvr, const char *slot, QObject *parent)
QCoreApplication * instance()
void accepted()
void rejected()
QQuickWindow * window() const const
WindowModality
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
void show()
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 18 2025 12:05:38 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.