13 #ifndef hifi_AvatarPackager_h
14 #define hifi_AvatarPackager_h
17 #include <DependencyManager.h>
19 #include "FileDialogHelper.h"
21 #include "avatar/AvatarProject.h"
22 #include "SettingHandle.h"
24 class RecentAvatarProject {
26 RecentAvatarProject() =
default;
29 RecentAvatarProject(QString projectName, QString projectFSTPath,
bool hadErrors) {
30 _projectName = projectName;
31 _projectFSTPath = projectFSTPath;
32 _hadErrors = hadErrors;
34 RecentAvatarProject(
const RecentAvatarProject& other) {
35 _projectName = other._projectName;
36 _projectFSTPath = other._projectFSTPath;
37 _hadErrors = other._hadErrors;
40 QString getProjectName()
const {
return _projectName; }
42 QString getProjectFSTPath()
const {
return _projectFSTPath; }
44 bool getHadErrors()
const {
return _hadErrors; }
46 QString getProjectPath()
const {
47 return QFileInfo(_projectFSTPath).absoluteDir().absolutePath();
50 bool operator==(
const RecentAvatarProject& other)
const {
51 return _projectName == other._projectName && _projectFSTPath == other._projectFSTPath;
56 QString _projectFSTPath;
61 class AvatarPackager :
public QObject,
public Dependency {
64 Q_PROPERTY(AvatarProject* currentAvatarProject READ getAvatarProject NOTIFY avatarProjectChanged)
65 Q_PROPERTY(QString AVATAR_PROJECTS_PATH READ getAvatarProjectsPath CONSTANT)
66 Q_PROPERTY(QVariantList recentProjects READ getRecentProjects NOTIFY recentProjectsChanged)
71 Q_INVOKABLE AvatarProjectStatus::AvatarProjectStatus createAvatarProject(
const QString& projectsFolder,
72 const QString& avatarProjectName,
73 const QString& avatarModelPath,
74 const QString& textureFolder);
76 Q_INVOKABLE AvatarProjectStatus::AvatarProjectStatus openAvatarProject(
const QString& avatarProjectFSTPath);
77 Q_INVOKABLE
bool isValidNewProjectName(
const QString& projectPath,
const QString& projectName)
const {
78 return AvatarProject::isValidNewProjectName(projectPath, projectName);
81 Q_INVOKABLE
void addCurrentProjectToRecentProjects();
84 void avatarProjectChanged();
85 void recentProjectsChanged();
88 Q_INVOKABLE AvatarProject* getAvatarProject()
const {
return _currentAvatarProject; };
89 Q_INVOKABLE QString getAvatarProjectsPath()
const {
return AvatarProject::getDefaultProjectsPath(); }
90 Q_INVOKABLE QVariantList getRecentProjects()
const {
return recentProjectsToVariantList(
true); }
92 void setAvatarProject(AvatarProject* avatarProject);
94 AvatarProject* _currentAvatarProject {
nullptr };
95 QVector<RecentAvatarProject> _recentProjects;
97 QVariantList recentProjectsToVariantList(
bool includeProjectPaths)
const;
99 void recentProjectsFromVariantList(QVariantList projectsVariant);