|
|
|
@@ -8,13 +8,18 @@ namespace studio {
|
|
|
|
|
|
|
|
|
|
void navigateTo(Context &ctx, ox::StringParam filePath, ox::StringParam navArgs) noexcept {
|
|
|
|
|
ox::String path = std::move(filePath);
|
|
|
|
|
if (beginsWith(path, "uuid://")) {
|
|
|
|
|
if (keel::isUuidUrl(path)) {
|
|
|
|
|
auto const [p, err] = keel::uuidUrlToPath(keelCtx(ctx), path);
|
|
|
|
|
if (err) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
path = p;
|
|
|
|
|
}
|
|
|
|
|
//if (
|
|
|
|
|
// auto const [np, err] = ctx.navStack.back();
|
|
|
|
|
// !err && np->filePath == path && np->navArgs == navArgs.view()) {
|
|
|
|
|
// return;
|
|
|
|
|
//}
|
|
|
|
|
ctx.navStack.resize(ctx.navIdx + 1);
|
|
|
|
|
ctx.navStack.emplace_back(ox::String{path}, ox::String{navArgs.view()});
|
|
|
|
|
try {
|
|
|
|
@@ -49,8 +54,9 @@ void navigateBack(Context &ctx) noexcept {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void navigateForward(Context &ctx) noexcept {
|
|
|
|
|
while (ctx.navIdx < ctx.navStack.size()) {
|
|
|
|
|
auto const &n = ctx.navStack[ctx.navIdx];
|
|
|
|
|
auto const nextIdx = ctx.navIdx + 1;
|
|
|
|
|
while (nextIdx < ctx.navStack.size()) {
|
|
|
|
|
auto const &n = ctx.navStack[nextIdx];
|
|
|
|
|
try {
|
|
|
|
|
ctx.navCallback(n.filePath, n.navArgs);
|
|
|
|
|
} catch (std::exception const &e) {
|
|
|
|
@@ -58,7 +64,7 @@ void navigateForward(Context &ctx) noexcept {
|
|
|
|
|
oxErrf("navigateForward failed: {}", e.what());
|
|
|
|
|
}
|
|
|
|
|
if (!ctx.project->exists(n.filePath)) {
|
|
|
|
|
std::ignore = ctx.navStack.erase(ctx.navIdx);
|
|
|
|
|
std::ignore = ctx.navStack.erase(nextIdx);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
++ctx.navIdx;
|
|
|
|
|