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