leocad/common/project.h

132 lines
3 KiB
C
Raw Normal View History

#pragma once
2011-09-07 21:06:51 +00:00
#include "object.h"
2013-08-15 23:43:18 +00:00
#include "lc_array.h"
#include "lc_application.h"
2013-08-09 04:57:18 +00:00
#define LC_HTML_SINGLEPAGE 0x01
#define LC_HTML_INDEX 0x02
#define LC_HTML_LISTEND 0x08
#define LC_HTML_LISTSTEP 0x10
#define LC_HTML_SUBMODELS 0x40
#define LC_HTML_CURRENT_ONLY 0x80
2013-08-09 04:57:18 +00:00
class lcHTMLExportOptions
{
public:
lcHTMLExportOptions(const Project* Project);
void SaveDefaults();
QString PathName;
bool TransparentImages;
bool SubModels;
bool CurrentOnly;
bool SinglePage;
bool IndexPage;
int StepImagesWidth;
int StepImagesHeight;
bool PartsListStep;
bool PartsListEnd;
};
2012-10-18 18:57:21 +00:00
enum LC_MOUSE_TRACK
2011-09-07 21:06:51 +00:00
{
LC_TRACK_NONE,
LC_TRACK_LEFT,
LC_TRACK_RIGHT
2012-10-18 18:57:21 +00:00
};
2011-09-07 21:06:51 +00:00
class Project
2011-09-07 21:06:51 +00:00
{
public:
Project();
~Project();
2020-05-03 15:39:39 -07:00
Project(const Project&) = delete;
Project(Project&&) = delete;
Project& operator=(const Project&) = delete;
Project& operator=(Project&&) = delete;
2014-12-09 23:56:29 +00:00
const lcArray<lcModel*>& GetModels() const
{
return mModels;
}
2020-05-03 12:11:51 -07:00
lcModel* GetModel(const QString& FileName) const;
lcModel* GetActiveModel() const
{
return mActiveModel;
}
int GetActiveModelIndex() const
{
return mModels.FindIndex(mActiveModel);
}
lcModel* GetMainModel() const
{
return !mModels.IsEmpty() ? mModels[0] : nullptr;
}
2014-12-12 23:42:09 +00:00
bool IsModified() const;
void MarkAsModified();
2014-12-04 01:47:28 +00:00
QString GetTitle() const;
2014-12-12 23:42:09 +00:00
2014-12-04 01:47:28 +00:00
QString GetFileName() const
{
return mFileName;
}
QString GetImageFileName(bool AllowCurrentFolder) const;
2017-12-27 13:55:37 -08:00
2019-12-30 16:04:58 -08:00
std::vector<std::pair<lcModel*, lcStep>> GetPageLayouts() const;
2014-12-12 23:42:09 +00:00
void SetActiveModel(int ModelIndex);
2020-05-03 12:11:51 -07:00
void SetActiveModel(const QString& FileName);
2014-12-12 23:42:09 +00:00
lcModel* CreateNewModel(bool ShowModel);
2016-09-08 22:34:51 +00:00
QString GetNewModelName(QWidget* ParentWidget, const QString& DialogTitle, const QString& CurrentName, const QStringList& ExistingModels) const;
2014-12-12 23:42:09 +00:00
void ShowModelListDialog();
2014-12-04 01:47:28 +00:00
bool Load(const QString& FileName);
bool Save(const QString& FileName);
bool Save(QTextStream& Stream);
2014-12-23 17:02:23 +00:00
void Merge(Project* Other);
2017-06-25 18:20:34 -07:00
bool ImportLDD(const QString& FileName);
2017-08-20 13:47:53 -07:00
bool ImportInventory(const QByteArray& Inventory, const QString& Name, const QString& Description);
2014-12-04 01:47:28 +00:00
2015-01-12 05:02:50 +00:00
void SaveImage();
2019-05-27 16:39:51 -07:00
bool ExportModel(const QString& FileName, lcModel* Model) const;
void Export3DStudio(const QString& FileName);
2014-12-30 16:30:12 +00:00
void ExportBrickLink();
void ExportCOLLADA(const QString& FileName);
2014-12-30 16:30:12 +00:00
void ExportCSV();
void ExportHTML(const lcHTMLExportOptions& Options);
2017-09-22 10:08:02 -07:00
bool ExportPOVRay(const QString& FileName);
void ExportWavefront(const QString& FileName);
2014-12-30 16:30:12 +00:00
void UpdatePieceInfo(PieceInfo* Info) const;
protected:
QString GetExportFileName(const QString& FileName, const QString& DefaultExtension, const QString& DialogTitle, const QString& DialogFilter) const;
2019-05-27 16:39:51 -07:00
std::vector<lcModelPartsEntry> GetModelParts();
void SetFileName(const QString& FileName);
2014-12-30 16:30:12 +00:00
bool mModified;
QString mFileName;
QFileSystemWatcher mFileWatcher;
2014-12-04 01:47:28 +00:00
lcArray<lcModel*> mModels;
lcModel* mActiveModel;
Q_DECLARE_TR_FUNCTIONS(Project);
2011-09-07 21:06:51 +00:00
};
inline lcModel* lcGetActiveModel()
{
2020-03-22 20:18:52 -07:00
const Project* const Project = lcGetActiveProject();
return Project ? Project->GetActiveModel() : nullptr;
}