File indexing completed on 2024-05-12 03:47:27
0001 /* 0002 File : Project.h 0003 Project : LabPlot 0004 Description : Represents a LabPlot project. 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2011-2023 Alexander Semke <alexander.semke@web.de> 0007 SPDX-FileCopyrightText: 2007-2008 Tilman Benkert <thzs@gmx.net> 0008 SPDX-FileCopyrightText: 2007 Knut Franke <knut.franke@gmx.de> 0009 SPDX-License-Identifier: GPL-2.0-or-later 0010 */ 0011 0012 #ifndef PROJECT_H 0013 #define PROJECT_H 0014 0015 #include "backend/core/Folder.h" 0016 #include "backend/lib/macros.h" 0017 0018 class AbstractColumn; 0019 class Spreadsheet; 0020 class ProjectPrivate; 0021 0022 class QMimeData; 0023 class QString; 0024 0025 class Project : public Folder { 0026 Q_OBJECT 0027 0028 public: 0029 enum class DockVisibility { folderOnly, folderAndSubfolders, allDocks }; 0030 0031 public: 0032 Project(); 0033 ~Project() override; 0034 0035 virtual const Project* project() const { 0036 return this; 0037 } 0038 Project* project() override { 0039 return this; 0040 } 0041 QUndoStack* undoStack() const override; 0042 QString path() const override { 0043 return name(); 0044 } 0045 QMenu* createContextMenu() override; 0046 virtual QMenu* createFolderContextMenu(const Folder*); 0047 0048 void setDockVisibility(DockVisibility visibility); 0049 DockVisibility dockVisibility() const; 0050 CLASS_D_ACCESSOR_DECL(QString, fileName, FileName) 0051 CLASS_D_ACCESSOR_DECL(QString, author, Author) 0052 CLASS_D_ACCESSOR_DECL(QDateTime, modificationTime, ModificationTime) 0053 BASIC_D_ACCESSOR_DECL(bool, saveCalculations, SaveCalculations) 0054 CLASS_D_ACCESSOR_DECL(QString, windowState, WindowState) 0055 0056 void setChanged(const bool value = true); 0057 bool hasChanged() const; 0058 void navigateTo(const QString& path); 0059 0060 void setSuppressAspectAddedSignal(bool); 0061 bool aspectAddedSignalSuppressed() const; 0062 0063 void save(const QPixmap&, QXmlStreamWriter*); 0064 bool load(XmlStreamReader*, bool preview) override; 0065 bool load(const QString&, bool preview = false); 0066 static void restorePointers(AbstractAspect*); 0067 static void retransformElements(AbstractAspect*); 0068 0069 static bool isSupportedProject(const QString& fileName); 0070 static bool isLabPlotProject(const QString& fileName); 0071 static QString supportedExtensions(); 0072 QVector<quintptr> droppedAspects(const QMimeData*); 0073 static QString version(); 0074 static int versionNumber(); 0075 static int xmlVersion(); 0076 static void setXmlVersion(int version); 0077 static int currentBuildXmlVersion(); 0078 0079 typedef ProjectPrivate Private; 0080 0081 public Q_SLOTS: 0082 void descriptionChanged(const AbstractAspect*); 0083 void aspectAddedSlot(const AbstractAspect*); 0084 0085 Q_SIGNALS: 0086 void authorChanged(const QString&); 0087 void saveCalculationsChanged(bool); 0088 void requestSaveState(QXmlStreamWriter*) const; 0089 void requestLoadState(XmlStreamReader*); 0090 void requestProjectContextMenu(QMenu*); 0091 void requestFolderContextMenu(const Folder*, QMenu*); 0092 void mdiWindowVisibilityChanged(); 0093 void changed(); 0094 void requestNavigateTo(const QString& path); 0095 void closeRequested(); 0096 void saved() const; 0097 void loaded() const; 0098 void aboutToClose() const; 0099 0100 private: 0101 Q_DECLARE_PRIVATE(Project) 0102 ProjectPrivate* const d_ptr; 0103 void updateColumnDependencies(const AbstractColumn*) const; 0104 void updateSpreadsheetDependencies(const Spreadsheet*) const; 0105 bool readProjectAttributes(XmlStreamReader*); 0106 void save(QXmlStreamWriter*) const override; 0107 }; 0108 0109 #endif // ifndef PROJECT_H