File indexing completed on 2024-04-28 05:36:52
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "quickdialog.h" 0008 #include <KLocalizedString> 0009 #include <QQmlApplicationEngine> 0010 #include <QQmlContext> 0011 #include <QQuickWindow> 0012 #include <QTimer> 0013 0014 QuickDialog::QuickDialog(QObject *parent) 0015 : QObject(parent) 0016 { 0017 } 0018 0019 QuickDialog::~QuickDialog() noexcept 0020 { 0021 delete m_theDialog; 0022 } 0023 0024 void QuickDialog::create(const QString &file, const QVariantMap &props) 0025 { 0026 auto engine = new QQmlApplicationEngine(this); 0027 auto context = new KLocalizedContext(engine); 0028 context->setTranslationDomain(TRANSLATION_DOMAIN); 0029 engine->rootContext()->setContextObject(context); 0030 0031 engine->setInitialProperties(props); 0032 engine->load(file); 0033 0034 connect(engine, &QQmlEngine::warnings, this, [](const QList<QQmlError> &warnings) { 0035 for (const QQmlError &warning : warnings) { 0036 qWarning() << warning; 0037 } 0038 }); 0039 0040 const QList<QObject *> rootObjects = engine->rootObjects(); 0041 if (rootObjects.isEmpty()) { 0042 return; 0043 } 0044 m_theDialog = qobject_cast<QQuickWindow *>(rootObjects.constFirst()); 0045 connect(m_theDialog, SIGNAL(accept()), this, SLOT(accept())); 0046 connect(m_theDialog, SIGNAL(reject()), this, SLOT(reject())); 0047 0048 QTimer::singleShot(0, m_theDialog, SLOT(present())); 0049 } 0050 0051 bool QuickDialog::exec() 0052 { 0053 if (!m_theDialog) { 0054 qWarning() << "Failed to load dialog, cannot exec"; 0055 return false; 0056 } 0057 return m_execLoop.exec() == 0; 0058 } 0059 0060 void QuickDialog::reject() 0061 { 0062 m_execLoop.exit(1); 0063 } 0064 0065 void QuickDialog::accept() 0066 { 0067 m_execLoop.quit(); 0068 }