6#include "absl/strings/str_format.h"
14 : toast_manager_(toast_manager) {
18 if (template_name.empty()) {
27 return absl::OkStatus();
34 if (filename.empty()) {
36 return absl::InvalidArgumentError(
"No filename provided");
44 return absl::InvalidArgumentError(
45 absl::StrFormat(
"Invalid project file: %s", filename));
62 return absl::OkStatus();
64 }
catch (
const std::exception& e) {
67 absl::StrFormat(
"Failed to load project: %s", e.what()),
70 return absl::InternalError(
71 absl::StrFormat(
"Failed to load project: %s", e.what()));
77 return absl::FailedPreconditionError(
"No active project to save");
84 if (filename.empty()) {
86 return absl::InvalidArgumentError(
"No filename provided for save as");
101 absl::StrFormat(
"Project saved: %s", filename),
105 return absl::OkStatus();
107 }
catch (
const std::exception& e) {
110 absl::StrFormat(
"Failed to save project: %s", e.what()),
113 return absl::InternalError(
114 absl::StrFormat(
"Failed to save project: %s", e.what()));
119 if (project_path.empty()) {
120 return absl::InvalidArgumentError(
"No project path provided");
123 if (!std::filesystem::exists(project_path)) {
124 return absl::NotFoundError(
125 absl::StrFormat(
"Project path does not exist: %s", project_path));
133 absl::StrFormat(
"Project imported: %s", project_path),
137 return absl::OkStatus();
142 return absl::FailedPreconditionError(
"No active project to export");
145 if (export_path.empty()) {
146 return absl::InvalidArgumentError(
"No export path provided");
154 absl::StrFormat(
"Project exported: %s", export_path),
158 return absl::OkStatus();
163 return absl::FailedPreconditionError(
"No active project to repair");
173 return absl::OkStatus();
178 return absl::FailedPreconditionError(
"No active project to validate");
185 absl::StrFormat(
"Project validation failed: %s", result.message()),
195 return absl::OkStatus();
210 "Dungeon Editor Project",
211 "Overworld Editor Project",
212 "Graphics Editor Project",
213 "Full Editor Project"
218 const std::string& project_name) {
219 if (template_name.empty() || project_name.empty()) {
220 return absl::InvalidArgumentError(
"Template name and project name required");
232 absl::StrFormat(
"Project created from template: %s", template_name),
236 return absl::OkStatus();
241 std::string filename = project_name;
242 std::replace(filename.begin(), filename.end(),
' ',
'_');
243 std::replace(filename.begin(), filename.end(),
'/',
'_');
244 std::replace(filename.begin(), filename.end(),
'\\',
'_');
246 return absl::StrFormat(
"%s.yaze", filename);
250 if (filename.empty()) {
254 if (!std::filesystem::exists(filename)) {
259 std::string extension = std::filesystem::path(filename).extension().string();
260 return extension ==
".yaze" || extension ==
".json";
266 std::filesystem::create_directories(project_path);
267 std::filesystem::create_directories(project_path +
"/assets");
268 std::filesystem::create_directories(project_path +
"/scripts");
269 std::filesystem::create_directories(project_path +
"/output");
271 return absl::OkStatus();
273 }
catch (
const std::exception& e) {
274 return absl::InternalError(
275 absl::StrFormat(
"Failed to create project structure: %s", e.what()));
std::string GenerateProjectFilename(const std::string &project_name) const
absl::Status SaveProjectAs(const std::string &filename="")
absl::Status ExportProject(const std::string &export_path)
absl::Status RepairCurrentProject()
std::vector< std::string > GetAvailableTemplates() const
ToastManager * toast_manager_
bool HasActiveProject() const
std::string GetProjectPath() const
absl::Status ValidateProject()
bool IsValidProjectFile(const std::string &filename) const
absl::Status SaveProject()
absl::Status CreateNewProject(const std::string &template_name="")
project::YazeProject current_project_
absl::Status OpenProject(const std::string &filename="")
ProjectManager(ToastManager *toast_manager)
absl::Status ImportProject(const std::string &project_path)
absl::Status LoadProjectFromFile(const std::string &filename)
absl::Status InitializeProjectStructure(const std::string &project_path)
absl::Status CreateFromTemplate(const std::string &template_name, const std::string &project_name)
absl::Status SaveProjectToFile(const std::string &filename)
std::string GetProjectName() const
void Show(const std::string &message, ToastType type=ToastType::kInfo, float ttl_seconds=3.0f)
Main namespace for the application.
Modern project structure with comprehensive settings consolidation.
absl::Status Validate() const