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"