Extract about menu action planning
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include "app_core/about_menu.h"
|
||||
#include "app_core/app_preferences.h"
|
||||
#include "app_core/app_status.h"
|
||||
#include "app_core/brush_ui.h"
|
||||
@@ -352,6 +353,15 @@ struct PlanToolsPanelArgs {
|
||||
bool already_visible = false;
|
||||
};
|
||||
|
||||
struct PlanAboutMenuArgs {
|
||||
std::string command = "news";
|
||||
int version_major = 1;
|
||||
int version_minor = 0;
|
||||
int version_fix = 0;
|
||||
bool diagnostics_available = true;
|
||||
bool has_canvas = true;
|
||||
};
|
||||
|
||||
struct SimulateAppSessionArgs {
|
||||
bool has_canvas = true;
|
||||
bool new_document = false;
|
||||
@@ -737,6 +747,44 @@ const char* tools_panel_action_name(pp::app::ToolsPanelAction action) noexcept
|
||||
return "no-op-already-visible";
|
||||
}
|
||||
|
||||
const char* about_menu_command_name(pp::app::AboutMenuCommand command) noexcept
|
||||
{
|
||||
switch (command) {
|
||||
case pp::app::AboutMenuCommand::help_guide:
|
||||
return "help";
|
||||
case pp::app::AboutMenuCommand::about_app:
|
||||
return "about";
|
||||
case pp::app::AboutMenuCommand::whats_new:
|
||||
return "news";
|
||||
case pp::app::AboutMenuCommand::induce_crash:
|
||||
return "crash";
|
||||
case pp::app::AboutMenuCommand::performance_test:
|
||||
return "performance";
|
||||
}
|
||||
|
||||
return "help";
|
||||
}
|
||||
|
||||
const char* about_menu_action_name(pp::app::AboutMenuAction action) noexcept
|
||||
{
|
||||
switch (action) {
|
||||
case pp::app::AboutMenuAction::show_user_manual:
|
||||
return "show-user-manual";
|
||||
case pp::app::AboutMenuAction::show_about_dialog:
|
||||
return "show-about-dialog";
|
||||
case pp::app::AboutMenuAction::show_whats_new_dialog:
|
||||
return "show-whats-new-dialog";
|
||||
case pp::app::AboutMenuAction::trigger_crash_test:
|
||||
return "trigger-crash-test";
|
||||
case pp::app::AboutMenuAction::run_performance_test:
|
||||
return "run-performance-test";
|
||||
case pp::app::AboutMenuAction::no_op_unavailable:
|
||||
return "no-op-unavailable";
|
||||
}
|
||||
|
||||
return "no-op-unavailable";
|
||||
}
|
||||
|
||||
pp::foundation::Result<pp::app::ToolsMenuCommand> parse_tools_menu_command(std::string_view command)
|
||||
{
|
||||
if (command == "panels") {
|
||||
@@ -790,6 +838,33 @@ pp::foundation::Result<pp::app::ToolsPanel> parse_tools_panel(std::string_view p
|
||||
pp::foundation::Status::invalid_argument("unknown tools panel"));
|
||||
}
|
||||
|
||||
pp::foundation::Result<pp::app::AboutMenuCommand> parse_about_menu_command(std::string_view command)
|
||||
{
|
||||
if (command == "help" || command == "help-guide" || command == "manual") {
|
||||
return pp::foundation::Result<pp::app::AboutMenuCommand>::success(
|
||||
pp::app::AboutMenuCommand::help_guide);
|
||||
}
|
||||
if (command == "about" || command == "about-app") {
|
||||
return pp::foundation::Result<pp::app::AboutMenuCommand>::success(
|
||||
pp::app::AboutMenuCommand::about_app);
|
||||
}
|
||||
if (command == "news" || command == "whats-new") {
|
||||
return pp::foundation::Result<pp::app::AboutMenuCommand>::success(
|
||||
pp::app::AboutMenuCommand::whats_new);
|
||||
}
|
||||
if (command == "crash" || command == "induce-crash") {
|
||||
return pp::foundation::Result<pp::app::AboutMenuCommand>::success(
|
||||
pp::app::AboutMenuCommand::induce_crash);
|
||||
}
|
||||
if (command == "performance" || command == "perf") {
|
||||
return pp::foundation::Result<pp::app::AboutMenuCommand>::success(
|
||||
pp::app::AboutMenuCommand::performance_test);
|
||||
}
|
||||
|
||||
return pp::foundation::Result<pp::app::AboutMenuCommand>::failure(
|
||||
pp::foundation::Status::invalid_argument("unknown about menu command"));
|
||||
}
|
||||
|
||||
const char* document_layer_rename_action_name(pp::app::DocumentLayerRenameAction action) noexcept
|
||||
{
|
||||
switch (action) {
|
||||
@@ -1406,6 +1481,7 @@ void print_help()
|
||||
<< " plan-app-status [--doc-name NAME] [--unsaved] [--resolution N] [--resolution-index N] [--zoom N] [--history-bytes N] [--recording-running] [--encoder-available] [--encoded-frames N]\n"
|
||||
<< " plan-tools-menu --command panels|options|clear-grids|reset-camera|shortcuts|sonarpen [--sonarpen-available]\n"
|
||||
<< " plan-tools-panel --panel presets|color|color-advanced|layers|brush|grids|animation [--already-visible]\n"
|
||||
<< " plan-about-menu --command help|about|news|crash|performance [--version-major N] [--version-minor N] [--version-fix N] [--no-diagnostics] [--no-canvas]\n"
|
||||
<< " plan-canvas-clear [--no-canvas] [--r N] [--g N] [--b N] [--a N]\n"
|
||||
<< " plan-image-import --width N --height N\n"
|
||||
<< " plan-document-resize [--current-resolution N] [--selected-resolution-index N]\n"
|
||||
@@ -3063,6 +3139,86 @@ int plan_tools_panel(int argc, char** argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
pp::foundation::Status parse_plan_about_menu_args(
|
||||
int argc,
|
||||
char** argv,
|
||||
PlanAboutMenuArgs& args)
|
||||
{
|
||||
for (int i = 2; i < argc; ++i) {
|
||||
const std::string_view key(argv[i]);
|
||||
if (key == "--command") {
|
||||
if (i + 1 >= argc) {
|
||||
return pp::foundation::Status::invalid_argument("missing value for option");
|
||||
}
|
||||
args.command = argv[++i];
|
||||
} else if (key == "--version-major" || key == "--version-minor" || key == "--version-fix") {
|
||||
if (i + 1 >= argc) {
|
||||
return pp::foundation::Status::invalid_argument("missing value for option");
|
||||
}
|
||||
const auto value = parse_i32_arg(argv[++i]);
|
||||
if (!value) {
|
||||
return value.status();
|
||||
}
|
||||
if (key == "--version-major") {
|
||||
args.version_major = value.value();
|
||||
} else if (key == "--version-minor") {
|
||||
args.version_minor = value.value();
|
||||
} else {
|
||||
args.version_fix = value.value();
|
||||
}
|
||||
} else if (key == "--no-diagnostics") {
|
||||
args.diagnostics_available = false;
|
||||
} else if (key == "--no-canvas") {
|
||||
args.has_canvas = false;
|
||||
} else {
|
||||
return pp::foundation::Status::invalid_argument("unknown option");
|
||||
}
|
||||
}
|
||||
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
int plan_about_menu(int argc, char** argv)
|
||||
{
|
||||
PlanAboutMenuArgs args;
|
||||
const auto status = parse_plan_about_menu_args(argc, argv, args);
|
||||
if (!status.ok()) {
|
||||
print_error("plan-about-menu", status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto command = parse_about_menu_command(args.command);
|
||||
if (!command) {
|
||||
print_error("plan-about-menu", command.status().message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto plan = pp::app::plan_about_menu_command(
|
||||
command.value(),
|
||||
args.version_major,
|
||||
args.version_minor,
|
||||
args.version_fix,
|
||||
args.diagnostics_available,
|
||||
args.has_canvas);
|
||||
|
||||
std::cout << "{\"ok\":true,\"command\":\"plan-about-menu\""
|
||||
<< ",\"state\":{\"command\":\"" << json_escape(args.command)
|
||||
<< "\",\"versionMajor\":" << args.version_major
|
||||
<< ",\"versionMinor\":" << args.version_minor
|
||||
<< ",\"versionFix\":" << args.version_fix
|
||||
<< ",\"diagnosticsAvailable\":" << json_bool(args.diagnostics_available)
|
||||
<< ",\"hasCanvas\":" << json_bool(args.has_canvas)
|
||||
<< "},\"plan\":{\"command\":\"" << about_menu_command_name(plan.command)
|
||||
<< "\",\"action\":\"" << about_menu_action_name(plan.action)
|
||||
<< "\",\"label\":\"" << json_escape(plan.label)
|
||||
<< "\",\"closesRootPopup\":" << json_bool(plan.closes_root_popup)
|
||||
<< ",\"requiresCanvas\":" << json_bool(plan.requires_canvas)
|
||||
<< ",\"performanceIterations\":" << plan.performance_iterations
|
||||
<< ",\"performanceUpdatesPerIteration\":" << plan.performance_updates_per_iteration
|
||||
<< "}}\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
pp::foundation::Status parse_plan_app_status_args(
|
||||
int argc,
|
||||
char** argv,
|
||||
@@ -6834,6 +6990,10 @@ int main(int argc, char** argv)
|
||||
return plan_tools_panel(argc, argv);
|
||||
}
|
||||
|
||||
if (command == "plan-about-menu") {
|
||||
return plan_about_menu(argc, argv);
|
||||
}
|
||||
|
||||
if (command == "plan-document-resize") {
|
||||
return plan_document_resize(argc, argv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user