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 #ifndef KASTEN_MULTIDOCUMENTSTRATEGY_P_HPP
10 #define KASTEN_MULTIDOCUMENTSTRATEGY_P_HPP
11 
12 // lib
13 #include "abstractdocumentstrategy_p.hpp"
14 #include "multidocumentstrategy.hpp"
15 // Kasten core
16 #include <Kasten/DocumentManager>
17 #include <Kasten/DocumentSyncManager>
18 #include <Kasten/DocumentCreateManager>
19 // Qt Core
20 #include <QStringList>
21 
22 namespace Kasten {
23 class ViewManager;
24 class MultiDocumentStrategy;
25 
26 class MultiDocumentStrategyPrivate : public AbstractDocumentStrategyPrivate
27 {
28 public:
29     MultiDocumentStrategyPrivate(MultiDocumentStrategy* parent,
30                                  DocumentManager* documentManager,
31                                  ViewManager* viewManager);
32     ~MultiDocumentStrategyPrivate() override;
33 
34 public:
35     void init();
36 
37 public: // AbstractDocumentStrategy API
38     void createNew();
39     void createNewFromClipboard();
40     void createNewWithGenerator(AbstractModelDataGenerator* generator);
41 
42     void load(const QUrl& url);
43 
44     void closeDocument(AbstractDocument* document);
45     void closeAll();
46     void closeAllOther(AbstractDocument* document);
47 
48 public: // const AbstractDocumentStrategy API
49     QVector<AbstractDocument*> documents() const;
50     QStringList supportedRemoteTypes() const;
51 
52     bool canClose(AbstractDocument* document) const;
53     bool canCloseAll() const;
54     bool canCloseAllOther(AbstractDocument* document) const;
55 
56 private:
57     void triggerGeneration(AbstractModelDataGenerator* generator);
58 
59 private:
60     Q_DECLARE_PUBLIC(MultiDocumentStrategy)
61 
62 private:
63     DocumentManager* mDocumentManager;
64     ViewManager* mViewManager;
65 };
66 
67 inline
MultiDocumentStrategyPrivate(MultiDocumentStrategy * parent,DocumentManager * documentManager,ViewManager * viewManager)68 MultiDocumentStrategyPrivate::MultiDocumentStrategyPrivate(MultiDocumentStrategy* parent,
69                                                            DocumentManager* documentManager,
70                                                            ViewManager* viewManager)
71     : AbstractDocumentStrategyPrivate(parent)
72     , mDocumentManager(documentManager)
73     , mViewManager(viewManager)
74 {
75 }
76 
77 inline MultiDocumentStrategyPrivate::~MultiDocumentStrategyPrivate() = default;
78 
documents() const79 inline QVector<AbstractDocument*> MultiDocumentStrategyPrivate::documents() const
80 {
81     return mDocumentManager->documents();
82 }
83 
supportedRemoteTypes() const84 inline QStringList MultiDocumentStrategyPrivate::supportedRemoteTypes() const
85 {
86     return mDocumentManager->syncManager()->supportedRemoteTypes();
87 }
88 
canClose(AbstractDocument * document) const89 inline bool MultiDocumentStrategyPrivate::canClose(AbstractDocument* document) const
90 {
91     return mDocumentManager->canClose(document);
92 }
93 
canCloseAllOther(AbstractDocument * document) const94 inline bool MultiDocumentStrategyPrivate::canCloseAllOther(AbstractDocument* document) const
95 {
96     return mDocumentManager->canCloseAllOther(document);
97 }
98 
canCloseAll() const99 inline bool MultiDocumentStrategyPrivate::canCloseAll() const
100 {
101     return mDocumentManager->canCloseAll();
102 }
103 
createNew()104 inline void MultiDocumentStrategyPrivate::createNew()
105 {
106     mDocumentManager->createManager()->createNew();
107 }
108 
load(const QUrl & url)109 inline void MultiDocumentStrategyPrivate::load(const QUrl& url)
110 {
111     mDocumentManager->syncManager()->load(url);
112 }
113 
closeAll()114 inline void MultiDocumentStrategyPrivate::closeAll()
115 {
116     mDocumentManager->closeAll();
117 }
118 
closeAllOther(AbstractDocument * document)119 inline void MultiDocumentStrategyPrivate::closeAllOther(AbstractDocument* document)
120 {
121     mDocumentManager->closeAllOther(document);
122 }
123 
closeDocument(AbstractDocument * document)124 inline void MultiDocumentStrategyPrivate::closeDocument(AbstractDocument* document)
125 {
126     mDocumentManager->closeDocument(document);
127 }
128 
129 }
130 
131 #endif
132