mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-24 15:53:57 +02:00
127 lines
4 KiB
C++
127 lines
4 KiB
C++
//
|
|
// AvatarProject.h
|
|
//
|
|
//
|
|
// Created by Thijs Wenker on 12/7/2018
|
|
// Copyright 2018 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
#pragma once
|
|
#ifndef hifi_AvatarProject_h
|
|
#define hifi_AvatarProject_h
|
|
|
|
#include "MarketplaceItemUploader.h"
|
|
#include "AvatarDoctor.h"
|
|
#include "ProjectFile.h"
|
|
#include "FST.h"
|
|
|
|
#include <QObject>
|
|
#include <QDir>
|
|
#include <QVariantHash>
|
|
#include <QStandardPaths>
|
|
|
|
namespace AvatarProjectStatus {
|
|
Q_NAMESPACE
|
|
enum AvatarProjectStatus {
|
|
NONE,
|
|
SUCCESS,
|
|
ERROR_CREATE_PROJECT_NAME,
|
|
ERROR_CREATE_CREATING_DIRECTORIES,
|
|
ERROR_CREATE_FIND_MODEL,
|
|
ERROR_CREATE_OPEN_MODEL,
|
|
ERROR_CREATE_READ_MODEL,
|
|
ERROR_CREATE_WRITE_FST,
|
|
ERROR_OPEN_INVALID_FILE_TYPE,
|
|
ERROR_OPEN_PROJECT_FOLDER,
|
|
ERROR_OPEN_FIND_FST,
|
|
ERROR_OPEN_OPEN_FST,
|
|
ERROR_OPEN_FIND_MODEL
|
|
};
|
|
Q_ENUM_NS(AvatarProjectStatus)
|
|
}
|
|
|
|
|
|
class AvatarProject : public QObject {
|
|
Q_OBJECT
|
|
Q_PROPERTY(FST* fst READ getFST CONSTANT)
|
|
|
|
Q_PROPERTY(QStringList projectFiles READ getProjectFiles NOTIFY projectFilesChanged)
|
|
|
|
Q_PROPERTY(QString projectFolderPath READ getProjectPath CONSTANT)
|
|
Q_PROPERTY(QString projectFSTPath READ getFSTPath CONSTANT)
|
|
Q_PROPERTY(QString projectFBXPath READ getFBXPath CONSTANT)
|
|
Q_PROPERTY(QString name READ getProjectName WRITE setProjectName NOTIFY nameChanged)
|
|
Q_PROPERTY(bool hasErrors READ getHasErrors WRITE setHasErrors NOTIFY hasErrorsChanged)
|
|
|
|
public:
|
|
Q_INVOKABLE MarketplaceItemUploader* upload(bool updateExisting);
|
|
Q_INVOKABLE void openInInventory() const;
|
|
Q_INVOKABLE QStringList getProjectFiles() const;
|
|
Q_INVOKABLE AvatarDoctor* diagnose();
|
|
|
|
|
|
Q_INVOKABLE QString getProjectName() const { return _fst->getName(); }
|
|
Q_INVOKABLE void setProjectName(const QString& newProjectName) {
|
|
if (newProjectName.trimmed().length() > 0) {
|
|
_fst->setName(newProjectName);
|
|
_fst->write();
|
|
emit nameChanged();
|
|
}
|
|
}
|
|
Q_INVOKABLE QString getProjectPath() const { return _projectPath; }
|
|
Q_INVOKABLE QString getFSTPath() const { return _fst->getPath(); }
|
|
Q_INVOKABLE QString getFBXPath() const {
|
|
return QDir::cleanPath(QDir(_projectPath).absoluteFilePath(_fst->getModelPath()));
|
|
}
|
|
Q_INVOKABLE bool getHasErrors() const { return _hasErrors; }
|
|
Q_INVOKABLE void setHasErrors(bool hasErrors) {
|
|
_hasErrors = hasErrors;
|
|
emit hasErrorsChanged();
|
|
}
|
|
|
|
/**
|
|
* returns the AvatarProject or a nullptr on failure.
|
|
*/
|
|
static AvatarProject* openAvatarProject(const QString& path, AvatarProjectStatus::AvatarProjectStatus& status);
|
|
static AvatarProject* createAvatarProject(const QString& projectsFolder,
|
|
const QString& avatarProjectName,
|
|
const QString& avatarModelPath,
|
|
const QString& textureFolder,
|
|
AvatarProjectStatus::AvatarProjectStatus& status);
|
|
|
|
static bool isValidNewProjectName(const QString& projectPath, const QString& projectName);
|
|
|
|
static QString getDefaultProjectsPath() {
|
|
return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/High Fidelity Projects";
|
|
}
|
|
|
|
signals:
|
|
void nameChanged();
|
|
void projectFilesChanged();
|
|
void hasErrorsChanged();
|
|
|
|
private:
|
|
AvatarProject(const QString& fstPath, const QByteArray& data);
|
|
AvatarProject(FST* fst);
|
|
|
|
~AvatarProject() { _fst->deleteLater(); }
|
|
|
|
FST* getFST() { return _fst; }
|
|
|
|
void refreshProjectFiles();
|
|
void appendDirectory(const QString& prefix, const QDir& dir);
|
|
QStringList getScriptPaths(const QDir& scriptsDir) const;
|
|
|
|
FST* _fst;
|
|
|
|
QDir _directory;
|
|
QList<ProjectFilePath> _projectFiles{};
|
|
QString _projectPath;
|
|
|
|
bool _hasErrors { false };
|
|
};
|
|
|
|
#endif // hifi_AvatarProject_h
|