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"