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