Centralize legacy document image exports
This commit is contained in:
@@ -56,6 +56,11 @@ enum class DocumentExportMenuAction {
|
||||
unavailable_no_canvas,
|
||||
};
|
||||
|
||||
enum class DocumentExportCollectionKind {
|
||||
layers,
|
||||
animation_frames,
|
||||
};
|
||||
|
||||
struct DocumentExportMenuPlan {
|
||||
DocumentExportMenuKind kind = DocumentExportMenuKind::jpeg;
|
||||
DocumentExportMenuAction action = DocumentExportMenuAction::show_jpeg_dialog;
|
||||
@@ -77,6 +82,20 @@ public:
|
||||
virtual void show_license_disabled() = 0;
|
||||
};
|
||||
|
||||
class DocumentExportServices {
|
||||
public:
|
||||
virtual ~DocumentExportServices() = default;
|
||||
|
||||
virtual bool create_directory(std::string_view directory) = 0;
|
||||
virtual void export_equirectangular(const DocumentExportFileTarget& target) = 0;
|
||||
virtual void export_layers_to_stem(const DocumentExportStemTarget& target) = 0;
|
||||
virtual void export_layers_to_collection(const DocumentExportCollectionTarget& target) = 0;
|
||||
virtual void export_animation_frames_to_stem(const DocumentExportStemTarget& target) = 0;
|
||||
virtual void export_animation_frames_to_collection(const DocumentExportCollectionTarget& target) = 0;
|
||||
virtual void export_depth(std::string_view document_name) = 0;
|
||||
virtual void export_cube_faces(std::string_view document_name) = 0;
|
||||
};
|
||||
|
||||
[[nodiscard]] constexpr DocumentExportStartDecision plan_document_export_start(
|
||||
bool requires_license,
|
||||
bool license_valid,
|
||||
@@ -241,6 +260,88 @@ public:
|
||||
return pp::foundation::Result<DocumentExportSuggestedName>::success(std::move(target));
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Status execute_document_export_file(
|
||||
const DocumentExportFileTarget& target,
|
||||
DocumentExportServices& services)
|
||||
{
|
||||
if (target.path.empty() || target.suggested_name.empty()) {
|
||||
return pp::foundation::Status::invalid_argument("export file target requires a path and suggested name");
|
||||
}
|
||||
|
||||
services.export_equirectangular(target);
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Status execute_document_export_stem(
|
||||
DocumentExportCollectionKind kind,
|
||||
const DocumentExportStemTarget& target,
|
||||
DocumentExportServices& services)
|
||||
{
|
||||
if (target.stem_path.empty()) {
|
||||
return pp::foundation::Status::invalid_argument("export stem target requires a stem path");
|
||||
}
|
||||
|
||||
switch (kind) {
|
||||
case DocumentExportCollectionKind::layers:
|
||||
services.export_layers_to_stem(target);
|
||||
return pp::foundation::Status::success();
|
||||
case DocumentExportCollectionKind::animation_frames:
|
||||
services.export_animation_frames_to_stem(target);
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
return pp::foundation::Status::invalid_argument("unknown document export collection kind");
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Status execute_document_export_collection(
|
||||
DocumentExportCollectionKind kind,
|
||||
const DocumentExportCollectionTarget& target,
|
||||
DocumentExportServices& services)
|
||||
{
|
||||
if (target.directory.empty() || target.stem_path.empty()) {
|
||||
return pp::foundation::Status::invalid_argument("export collection target requires a directory and stem path");
|
||||
}
|
||||
|
||||
if (!services.create_directory(target.directory)) {
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
switch (kind) {
|
||||
case DocumentExportCollectionKind::layers:
|
||||
services.export_layers_to_collection(target);
|
||||
return pp::foundation::Status::success();
|
||||
case DocumentExportCollectionKind::animation_frames:
|
||||
services.export_animation_frames_to_collection(target);
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
return pp::foundation::Status::invalid_argument("unknown document export collection kind");
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Status execute_document_export_depth(
|
||||
std::string_view document_name,
|
||||
DocumentExportServices& services)
|
||||
{
|
||||
if (document_name.empty()) {
|
||||
return pp::foundation::Status::invalid_argument("document name must not be empty");
|
||||
}
|
||||
|
||||
services.export_depth(document_name);
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Status execute_document_export_cube_faces(
|
||||
std::string_view document_name,
|
||||
DocumentExportServices& services)
|
||||
{
|
||||
if (document_name.empty()) {
|
||||
return pp::foundation::Status::invalid_argument("document name must not be empty");
|
||||
}
|
||||
|
||||
services.export_cube_faces(document_name);
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Status execute_document_export_menu_plan(
|
||||
const DocumentExportMenuPlan& plan,
|
||||
DocumentExportMenuServices& services)
|
||||
|
||||
Reference in New Issue
Block a user