File indexing completed on 2024-09-22 05:16:05
0001 /* 0002 This file is part of the Kasten Framework, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2006-2008, 2011 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "loadercontroller.hpp" 0010 0011 // Kasten Gui 0012 #include <Kasten/AbstractDocumentStrategy> 0013 // KF 0014 #include <KRecentFilesAction> 0015 #include <KActionCollection> 0016 #include <KStandardAction> 0017 #include <KXMLGUIClient> 0018 #include <KConfigGroup> 0019 #include <KSharedConfig> 0020 // Qt 0021 #include <QFileDialog> 0022 #include <QMimeDatabase> 0023 #include <QApplication> 0024 0025 namespace Kasten { 0026 0027 static constexpr char CreatorConfigGroupId[] = "Recent Files"; 0028 0029 LoaderController::LoaderController(AbstractDocumentStrategy* documentStrategy, 0030 KXMLGUIClient* guiClient) 0031 : mDocumentStrategy(documentStrategy) 0032 { 0033 auto* openAction = KStandardAction::open(this, &LoaderController::load, this); 0034 mOpenRecentAction = KStandardAction::openRecent(this, &LoaderController::loadRecent, this); 0035 0036 KActionCollection* const actionCollection = guiClient->actionCollection(); 0037 actionCollection->addAction(openAction->objectName(), openAction); 0038 actionCollection->addAction(mOpenRecentAction->objectName(), mOpenRecentAction); 0039 0040 KConfigGroup configGroup(KSharedConfig::openConfig(), CreatorConfigGroupId); 0041 mOpenRecentAction->loadEntries(configGroup); 0042 0043 connect(mDocumentStrategy, &AbstractDocumentStrategy::urlUsed, this, &LoaderController::onUrlUsed); 0044 } 0045 0046 LoaderController::~LoaderController() 0047 { 0048 KConfigGroup configGroup(KSharedConfig::openConfig(), CreatorConfigGroupId); 0049 mOpenRecentAction->saveEntries(configGroup); 0050 } 0051 0052 void LoaderController::setTargetModel(AbstractModel* model) 0053 { 0054 Q_UNUSED(model) 0055 } 0056 0057 void LoaderController::load() 0058 { 0059 auto* dialog = new QFileDialog(QApplication::activeWindow()); 0060 dialog->setAttribute(Qt::WA_DeleteOnClose, true); 0061 dialog->setFileMode(QFileDialog::ExistingFiles); 0062 dialog->setMimeTypeFilters(mDocumentStrategy->supportedRemoteTypes()); 0063 connect(dialog, &QFileDialog::urlsSelected, this, &LoaderController::loadUrls); 0064 dialog->open(); 0065 } 0066 0067 void LoaderController::loadUrls(const QList<QUrl>& urls) 0068 { 0069 for (const QUrl& url : urls) { 0070 mDocumentStrategy->load(url); 0071 } 0072 } 0073 0074 void LoaderController::loadRecent(const QUrl& url) 0075 { 0076 mDocumentStrategy->load(url); 0077 } 0078 0079 void LoaderController::onUrlUsed(const QUrl& url) 0080 { 0081 mOpenRecentAction->addUrl(url); 0082 } 0083 0084 } 0085 0086 #include "moc_loadercontroller.cpp"