1 /*
2 This file is part of the Kasten Framework, made within the KDE community.
3
4 SPDX-FileCopyrightText: 2011 Friedrich W. H. Kossebau <kossebau@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8
9 #include "multidocumentstrategy_p.hpp"
10
11 // lib
12 #include "createdialog.hpp"
13 // Kasten gui
14 #include <abstractmodeldatageneratorconfigeditor.hpp>
15 #include <modelcodecviewmanager.hpp>
16 #include <viewmanager.hpp>
17 // Kasten core
18 #include <Kasten/ModelDataGenerateThread>
19 #include <Kasten/AbstractModelDataGenerator>
20 #include <Kasten/AbstractModel>
21 // Qt
22 #include <QClipboard>
23 #include <QApplication>
24 #include <QMimeData>
25 #include <QUrl>
26
27 namespace Kasten {
28
init()29 void MultiDocumentStrategyPrivate::init()
30 {
31 Q_Q(MultiDocumentStrategy);
32
33 // setup
34 QObject::connect(mDocumentManager, &DocumentManager::added,
35 mViewManager, &ViewManager::createViewsFor);
36 QObject::connect(mDocumentManager, &DocumentManager::closing,
37 mViewManager, &ViewManager::removeViewsFor);
38 QObject::connect(mDocumentManager, &DocumentManager::added,
39 q, &MultiDocumentStrategy::added);
40 QObject::connect(mDocumentManager, &DocumentManager::closing,
41 q, &MultiDocumentStrategy::closing);
42 QObject::connect(mDocumentManager->syncManager(), &DocumentSyncManager::urlUsed,
43 q, &MultiDocumentStrategy::urlUsed);
44 }
45
createNewFromClipboard()46 void MultiDocumentStrategyPrivate::createNewFromClipboard()
47 {
48 const QMimeData* mimeData = QApplication::clipboard()->mimeData(QClipboard::Clipboard);
49
50 mDocumentManager->createManager()->createNewFromData(mimeData, true);
51 }
52
createNewWithGenerator(AbstractModelDataGenerator * generator)53 void MultiDocumentStrategyPrivate::createNewWithGenerator(AbstractModelDataGenerator* generator)
54 {
55 Q_Q(MultiDocumentStrategy);
56
57 AbstractModelDataGeneratorConfigEditor* configEditor =
58 mViewManager->codecViewManager()->createConfigEditor(generator);
59
60 if (configEditor) {
61 auto* dialog = new CreateDialog(configEditor, generator, QApplication::activeWindow());
62 // dialog->setData( mModel, selection ); TODO
63 QObject::connect(dialog, &CreateDialog::createAccepted, q, [this](AbstractModelDataGenerator* generator) {
64 triggerGeneration(generator);
65 });
66 dialog->open();
67 return;
68 }
69
70 triggerGeneration(generator);
71 }
72
triggerGeneration(AbstractModelDataGenerator * generator)73 void MultiDocumentStrategyPrivate::triggerGeneration(AbstractModelDataGenerator* generator)
74 {
75 Q_Q(MultiDocumentStrategy);
76
77 QApplication::setOverrideCursor(Qt::WaitCursor);
78
79 auto* generateThread = new ModelDataGenerateThread(q, generator);
80 generateThread->start();
81 while (!generateThread->wait(100)) {
82 QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents | QEventLoop::ExcludeSocketNotifiers);
83 }
84
85 QMimeData* mimeData = generateThread->data();
86
87 delete generateThread;
88
89 const bool setModified = (generator->flags() & AbstractModelDataGenerator::DynamicGeneration);
90 mDocumentManager->createManager()->createNewFromData(mimeData, setModified);
91
92 QApplication::restoreOverrideCursor();
93 }
94
95 }
96