HackStudio: Allow switching between editors with Ctrl+E / Ctrl+Shift+E

This commit is contained in:
Andreas Kling 2019-11-05 20:55:50 +01:00
parent f844715106
commit 538d5f82c1
Notes: sideshowbarker 2024-07-19 11:21:43 +09:00
2 changed files with 35 additions and 5 deletions

View File

@ -24,3 +24,9 @@ private:
RefPtr<GLabel> m_cursor_label; RefPtr<GLabel> m_cursor_label;
RefPtr<Editor> m_editor; RefPtr<Editor> m_editor;
}; };
template<>
inline bool is<EditorWrapper>(const CObject& object)
{
return !strcmp(object.class_name(), "EditorWrapper");
}

View File

@ -133,12 +133,36 @@ int main(int argc, char** argv)
auto switch_to_next_editor = GAction::create("Switch to next editor", { Mod_Ctrl, Key_E }, [&](auto&) { auto switch_to_next_editor = GAction::create("Switch to next editor", { Mod_Ctrl, Key_E }, [&](auto&) {
if (g_all_editor_wrappers.size() <= 1) if (g_all_editor_wrappers.size() <= 1)
return; return;
// FIXME: This will only work correctly when there are 2 editors. Make it work for any editor count. Vector<EditorWrapper*> wrappers;
for (auto& wrapper : g_all_editor_wrappers) { inner_splitter->for_each_child_of_type<EditorWrapper>([&](auto& child) {
if (&wrapper == &current_editor_wrapper()) wrappers.append(&child);
continue; return IterationDecision::Continue;
wrapper.editor().set_focus(true); });
for (int i = 0; i < wrappers.size(); ++i) {
if (g_current_editor_wrapper.ptr() == wrappers[i]) {
if (i == wrappers.size() - 1)
wrappers[0]->editor().set_focus(true);
else
wrappers[i + 1]->editor().set_focus(true);
}
}
});
auto switch_to_previous_editor = GAction::create("Switch to previous editor", { Mod_Ctrl | Mod_Shift, Key_E }, [&](auto&) {
if (g_all_editor_wrappers.size() <= 1)
return; return;
Vector<EditorWrapper*> wrappers;
inner_splitter->for_each_child_of_type<EditorWrapper>([&](auto& child) {
wrappers.append(&child);
return IterationDecision::Continue;
});
for (int i = wrappers.size() - 1; i >= 0; --i) {
if (g_current_editor_wrapper.ptr() == wrappers[i]) {
if (i == 0)
wrappers.last()->editor().set_focus(true);
else
wrappers[i - 1]->editor().set_focus(true);
}
} }
}); });