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

0001 /*
0002     This file is part of the Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2006-2007, 2009, 2011, 2019 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 #ifndef KASTEN_DOCUMENTMANAGER_P_HPP
0010 #define KASTEN_DOCUMENTMANAGER_P_HPP
0011 
0012 // lib
0013 #include "documentmanager.hpp"
0014 // Qt
0015 #include <QVector>
0016 
0017 namespace Kasten {
0018 
0019 class AbstractDocument;
0020 
0021 class DocumentCreateManager; // TODO: temporary
0022 class DocumentSyncManager; // TODO: temporary
0023 class ModelCodecManager; // TODO: temporary
0024 
0025 class DocumentManagerPrivate
0026 {
0027 public:
0028     explicit DocumentManagerPrivate(DocumentManager* q);
0029     DocumentManagerPrivate(const DocumentManagerPrivate&) = delete;
0030 
0031     ~DocumentManagerPrivate();
0032 
0033     DocumentManagerPrivate& operator=(const DocumentManagerPrivate&) = delete;
0034 
0035 public:
0036     void addDocument(AbstractDocument* document);
0037 
0038     void closeDocument(AbstractDocument* document);
0039     void closeDocuments(const QVector<AbstractDocument*>& documents);
0040     void closeAll();
0041 // TODO: think about if a more general close( documentList, theseOrOthers ) is better, same with canCloseAllOther()
0042     void closeAllOther(AbstractDocument* document);
0043 
0044     // TODO: what to do for documents not added?
0045     bool canClose(AbstractDocument* document) const;
0046     bool canClose(const QVector<AbstractDocument*>& documents) const;
0047     bool canCloseAll() const;
0048     bool canCloseAllOther(AbstractDocument* document) const;
0049 
0050     void requestFocus(AbstractDocument* document);
0051 
0052 public:
0053     QVector<AbstractDocument*> documents() const;
0054     bool isEmpty() const;
0055 
0056 public:
0057     DocumentCreateManager* createManager() const;
0058     DocumentSyncManager* syncManager() const;
0059     ModelCodecManager* codecManager() const;
0060 
0061 private:
0062     DocumentManager* const q_ptr;
0063 
0064     QVector<AbstractDocument*> mList;
0065 
0066     // TODO: remove into own singleton
0067     DocumentCreateManager* mCreateManager;
0068     DocumentSyncManager* mSyncManager;
0069     ModelCodecManager* mCodecManager;
0070 
0071     Q_DECLARE_PUBLIC(DocumentManager)
0072 };
0073 
0074 
0075 inline DocumentCreateManager* DocumentManagerPrivate::createManager() const { return mCreateManager; }
0076 inline DocumentSyncManager* DocumentManagerPrivate::syncManager() const { return mSyncManager; }
0077 inline ModelCodecManager* DocumentManagerPrivate::codecManager() const { return mCodecManager; }
0078 
0079 inline QVector<AbstractDocument*> DocumentManagerPrivate::documents() const { return mList; }
0080 inline bool DocumentManagerPrivate::isEmpty() const { return mList.isEmpty(); }
0081 
0082 }
0083 
0084 #endif