mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-28 23:39:02 +00:00
HackStudio: Add a widgets toolbar to the form editing mode
This commit is contained in:
parent
d22d9874f7
commit
489c6ac05c
Notes:
sideshowbarker
2024-07-19 11:19:18 +09:00
Author: https://github.com/awesomekling
Commit: 489c6ac05c
1 changed files with 23 additions and 13 deletions
|
@ -38,7 +38,8 @@ OwnPtr<Project> g_project;
|
||||||
RefPtr<GWindow> g_window;
|
RefPtr<GWindow> g_window;
|
||||||
RefPtr<GListView> g_project_list_view;
|
RefPtr<GListView> g_project_list_view;
|
||||||
RefPtr<GStackWidget> g_right_hand_stack;
|
RefPtr<GStackWidget> g_right_hand_stack;
|
||||||
RefPtr<GSplitter> g_inner_splitter;
|
RefPtr<GSplitter> g_text_inner_splitter;
|
||||||
|
RefPtr<GWidget> g_form_inner_container;
|
||||||
RefPtr<FormEditorWidget> g_form_editor_widget;
|
RefPtr<FormEditorWidget> g_form_editor_widget;
|
||||||
|
|
||||||
static RefPtr<GTabWidget> s_action_tab_widget;
|
static RefPtr<GTabWidget> s_action_tab_widget;
|
||||||
|
@ -64,9 +65,9 @@ enum class EditMode {
|
||||||
void set_edit_mode(EditMode mode)
|
void set_edit_mode(EditMode mode)
|
||||||
{
|
{
|
||||||
if (mode == EditMode::Text) {
|
if (mode == EditMode::Text) {
|
||||||
g_right_hand_stack->set_active_widget(g_inner_splitter);
|
g_right_hand_stack->set_active_widget(g_text_inner_splitter);
|
||||||
} else if (mode == EditMode::Form) {
|
} else if (mode == EditMode::Form) {
|
||||||
g_right_hand_stack->set_active_widget(g_form_editor_widget);
|
g_right_hand_stack->set_active_widget(g_form_inner_container);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,11 +120,20 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
g_right_hand_stack = GStackWidget::construct(outer_splitter);
|
g_right_hand_stack = GStackWidget::construct(outer_splitter);
|
||||||
|
|
||||||
g_form_editor_widget = FormEditorWidget::construct(g_right_hand_stack);
|
g_form_inner_container = GWidget::construct(g_right_hand_stack);
|
||||||
|
g_form_inner_container->set_layout(make<GBoxLayout>(Orientation::Horizontal));
|
||||||
|
auto form_widgets_toolbar = GToolBar::construct(Orientation::Vertical, 26, g_form_inner_container);
|
||||||
|
form_widgets_toolbar->set_preferred_size(38, 0);
|
||||||
|
|
||||||
g_inner_splitter = GSplitter::construct(Orientation::Vertical, g_right_hand_stack);
|
form_widgets_toolbar->add_action(GAction::create("GLabel", GraphicsBitmap::load_from_file("/res/icons/vbwidgets/label.png"), [&](auto&) {}));
|
||||||
g_inner_splitter->layout()->set_margins({ 0, 3, 0, 0 });
|
form_widgets_toolbar->add_action(GAction::create("GButton", GraphicsBitmap::load_from_file("/res/icons/vbwidgets/button.png"), [&](auto&) {}));
|
||||||
add_new_editor(*g_inner_splitter);
|
form_widgets_toolbar->add_action(GAction::create("GSpinBox", GraphicsBitmap::load_from_file("/res/icons/vbwidgets/spinbox.png"), [&](auto&) {}));
|
||||||
|
|
||||||
|
g_form_editor_widget = FormEditorWidget::construct(g_form_inner_container);
|
||||||
|
|
||||||
|
g_text_inner_splitter = GSplitter::construct(Orientation::Vertical, g_right_hand_stack);
|
||||||
|
g_text_inner_splitter->layout()->set_margins({ 0, 3, 0, 0 });
|
||||||
|
add_new_editor(*g_text_inner_splitter);
|
||||||
|
|
||||||
auto new_action = GAction::create("Add new file to project...", { Mod_Ctrl, Key_N }, GraphicsBitmap::load_from_file("/res/icons/16x16/new.png"), [&](const GAction&) {
|
auto new_action = GAction::create("Add new file to project...", { Mod_Ctrl, Key_N }, GraphicsBitmap::load_from_file("/res/icons/16x16/new.png"), [&](const GAction&) {
|
||||||
auto input_box = GInputBox::construct("Enter name of new file:", "Add new file to project", g_window);
|
auto input_box = GInputBox::construct("Enter name of new file:", "Add new file to project", g_window);
|
||||||
|
@ -159,7 +169,7 @@ int main(int argc, char** argv)
|
||||||
if (g_all_editor_wrappers.size() <= 1)
|
if (g_all_editor_wrappers.size() <= 1)
|
||||||
return;
|
return;
|
||||||
Vector<EditorWrapper*> wrappers;
|
Vector<EditorWrapper*> wrappers;
|
||||||
g_inner_splitter->for_each_child_of_type<EditorWrapper>([&](auto& child) {
|
g_text_inner_splitter->for_each_child_of_type<EditorWrapper>([&](auto& child) {
|
||||||
wrappers.append(&child);
|
wrappers.append(&child);
|
||||||
return IterationDecision::Continue;
|
return IterationDecision::Continue;
|
||||||
});
|
});
|
||||||
|
@ -177,7 +187,7 @@ int main(int argc, char** argv)
|
||||||
if (g_all_editor_wrappers.size() <= 1)
|
if (g_all_editor_wrappers.size() <= 1)
|
||||||
return;
|
return;
|
||||||
Vector<EditorWrapper*> wrappers;
|
Vector<EditorWrapper*> wrappers;
|
||||||
g_inner_splitter->for_each_child_of_type<EditorWrapper>([&](auto& child) {
|
g_text_inner_splitter->for_each_child_of_type<EditorWrapper>([&](auto& child) {
|
||||||
wrappers.append(&child);
|
wrappers.append(&child);
|
||||||
return IterationDecision::Continue;
|
return IterationDecision::Continue;
|
||||||
});
|
});
|
||||||
|
@ -196,7 +206,7 @@ int main(int argc, char** argv)
|
||||||
return;
|
return;
|
||||||
auto wrapper = g_current_editor_wrapper;
|
auto wrapper = g_current_editor_wrapper;
|
||||||
switch_to_next_editor->activate();
|
switch_to_next_editor->activate();
|
||||||
g_inner_splitter->remove_child(*wrapper);
|
g_text_inner_splitter->remove_child(*wrapper);
|
||||||
g_all_editor_wrappers.remove_first_matching([&](auto& entry) { return entry == wrapper.ptr(); });
|
g_all_editor_wrappers.remove_first_matching([&](auto& entry) { return entry == wrapper.ptr(); });
|
||||||
update_actions();
|
update_actions();
|
||||||
});
|
});
|
||||||
|
@ -225,7 +235,7 @@ int main(int argc, char** argv)
|
||||||
open_file(filename);
|
open_file(filename);
|
||||||
};
|
};
|
||||||
|
|
||||||
s_action_tab_widget = GTabWidget::construct(g_inner_splitter);
|
s_action_tab_widget = GTabWidget::construct(g_text_inner_splitter);
|
||||||
|
|
||||||
s_action_tab_widget->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
|
s_action_tab_widget->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
|
||||||
s_action_tab_widget->set_preferred_size(0, 24);
|
s_action_tab_widget->set_preferred_size(0, 24);
|
||||||
|
@ -245,7 +255,7 @@ int main(int argc, char** argv)
|
||||||
});
|
});
|
||||||
|
|
||||||
auto add_editor_action = GAction::create("Add new editor", { Mod_Ctrl | Mod_Alt, Key_E }, [&](auto&) {
|
auto add_editor_action = GAction::create("Add new editor", { Mod_Ctrl | Mod_Alt, Key_E }, [&](auto&) {
|
||||||
add_new_editor(*g_inner_splitter);
|
add_new_editor(*g_text_inner_splitter);
|
||||||
update_actions();
|
update_actions();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -324,7 +334,7 @@ int main(int argc, char** argv)
|
||||||
remove_current_editor_action->set_enabled(g_all_editor_wrappers.size() > 1);
|
remove_current_editor_action->set_enabled(g_all_editor_wrappers.size() > 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
open_file("main.cpp");
|
open_file("test.frm");
|
||||||
|
|
||||||
update_actions();
|
update_actions();
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue