File indexing completed on 2024-06-23 05:49:16

0001 /*
0002     This file is part of the Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2006-2009, 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 "creatorcontroller.hpp"
0010 
0011 // Kasten gui
0012 #include <Kasten/AbstractDocumentStrategy>
0013 #include <Kasten/SelectedDataWriteable>
0014 // Kasten core
0015 #include <Kasten/ModelCodecManager>
0016 #include <Kasten/AbstractModelDataGenerator>
0017 // KF
0018 #include <kwidgetsaddons_version.h>
0019 #include <KLocalizedString>
0020 #include <KActionCollection>
0021 #include <KActionMenu>
0022 #include <KStandardAction>
0023 #include <KXMLGUIClient>
0024 // Qt
0025 #include <QApplication>
0026 #include <QMimeData>
0027 
0028 namespace Kasten {
0029 
0030 CreatorController::CreatorController(ModelCodecManager* modelCodecManager,
0031                                      AbstractDocumentStrategy* documentStrategy,
0032                                      KXMLGUIClient* guiClient)
0033     : mModelCodecManager(modelCodecManager)
0034     , mDocumentStrategy(documentStrategy)
0035 {
0036     KActionCollection* actionCollection = guiClient->actionCollection();
0037 
0038     auto* newMenuAction =
0039         new KActionMenu(QIcon::fromTheme(QStringLiteral("document-new")),
0040                         i18nc("@title:menu create new byte arrays from different sources",
0041                               "New"),
0042                         this);
0043     newMenuAction->setPopupMode(QToolButton::MenuButtonPopup);
0044     actionCollection->setDefaultShortcuts(newMenuAction, KStandardShortcut::openNew());
0045     connect(newMenuAction, &QAction::triggered,
0046             this, &CreatorController::onNewActionTriggered);
0047 
0048     auto* newEmptyDocumentAction =
0049         new QAction(QIcon::fromTheme(QStringLiteral("document-new")), i18nc("@item:inmenu create a new empty document", "Empty"), this);
0050 //     newEmptyDocumentAction->setToolTip( factory-toolTip() );
0051 //         i18nc( "@info:tooltip", "Create an empty document" ) );
0052 //     newEmptyDocumentAction->setHelpText( factory->helpText() );
0053 //         i18nc( "@info:status", "Create an new, empty document" ) );
0054 //     newEmptyDocumentAction->setWhatsThis( factory->whatsThis() );
0055 //         i18nc( "@info:whatsthis", "." ) );
0056     connect(newEmptyDocumentAction, &QAction::triggered,
0057             this, &CreatorController::onNewActionTriggered);
0058 
0059     auto* newFromClipboardDocumentAction =
0060         new QAction(QIcon::fromTheme(QStringLiteral("edit-paste")), i18nc("@item:inmenu create a new document from data in the clipboard", "From Clipboard"), this);
0061     connect(newFromClipboardDocumentAction, &QAction::triggered,
0062             this, &CreatorController::onNewFromClipboardActionTriggered);
0063 
0064     newMenuAction->addAction(newEmptyDocumentAction);
0065     newMenuAction->addSeparator();
0066     newMenuAction->addAction(newFromClipboardDocumentAction);
0067 
0068     // generators
0069     const QVector<AbstractModelDataGenerator*> generatorList =
0070         mModelCodecManager->generatorList();
0071 
0072     const bool hasGenerators = (!generatorList.isEmpty());
0073 
0074     if (hasGenerators) {
0075         newMenuAction->addSeparator();
0076 
0077         // TODO: ask factory which mimetypes it can read
0078         // AbstractDocumentFactory->canCreateFromData( QMimeData() ) needs already data
0079         for (AbstractModelDataGenerator* generator : generatorList) {
0080             const QString title = generator->typeName();
0081             const QString iconName = QStringLiteral("document-new");  // generator->iconName();
0082 
0083             auto* action = new QAction(QIcon::fromTheme(iconName), title, this);
0084             action->setData(QVariant::fromValue(generator));
0085             connect(action, &QAction::triggered,
0086                     this, &CreatorController::onNewFromGeneratorActionTriggered);
0087 
0088             newMenuAction->addAction(action);
0089         }
0090     }
0091 
0092     actionCollection->addAction(QStringLiteral("file_new"), newMenuAction);
0093 }
0094 
0095 CreatorController::~CreatorController() = default;
0096 
0097 void CreatorController::setTargetModel(AbstractModel* model)
0098 {
0099     Q_UNUSED(model)
0100 }
0101 
0102 void CreatorController::onNewActionTriggered()
0103 {
0104     mDocumentStrategy->createNew();
0105 }
0106 
0107 void CreatorController::onNewFromClipboardActionTriggered()
0108 {
0109     mDocumentStrategy->createNewFromClipboard();
0110 }
0111 
0112 void CreatorController::onNewFromGeneratorActionTriggered()
0113 {
0114     auto* action = static_cast<QAction*>(sender());
0115 
0116     auto* generator = action->data().value<AbstractModelDataGenerator*>();
0117 
0118     mDocumentStrategy->createNewWithGenerator(generator);
0119 }
0120 
0121 }
0122 
0123 #include "moc_creatorcontroller.cpp"