diff --git a/Applications/TextEditor/CMakeLists.txt b/Applications/TextEditor/CMakeLists.txt index 88bfe83171..1feb0ae183 100644 --- a/Applications/TextEditor/CMakeLists.txt +++ b/Applications/TextEditor/CMakeLists.txt @@ -1,6 +1,13 @@ set(SOURCES main.cpp TextEditorWidget.cpp + MainWindowUI.h +) + +add_custom_command( + OUTPUT MainWindowUI.h + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.json + COMMAND ${write_if_different} MainWindowUI.h ${CMAKE_SOURCE_DIR}/Meta/text-to-cpp-string.sh main_window_ui_json ${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.json ) serenity_bin(TextEditor) diff --git a/Applications/TextEditor/MainWindow.json b/Applications/TextEditor/MainWindow.json new file mode 100644 index 0000000000..7b9c9e9cb0 --- /dev/null +++ b/Applications/TextEditor/MainWindow.json @@ -0,0 +1,50 @@ +{ + "name": "main", + "fill_with_background_color": true, + + "layout": { + "class": "GUI::VerticalBoxLayout", + "spacing": 2 + }, + + "children": [ + { + "class": "GUI::ToolBarContainer", + "children": [ + { + "class": "GUI::ToolBar", + "name": "toolbar" + } + ] + }, + { + "class": "GUI::HorizontalSplitter", + "children": [ + { + "class": "GUI::TextEditor", + "name": "editor" + }, + { + "class": "Web::InProcessWebView", + "name": "webview" + } + ] + }, + { + "class": "GUI::Widget", + "name": "find_replace_widget", + "fill_with_background_color": true, + "horizontal_size_policy": "Fill", + "vertical_size_policy": "Fixed", + "preferred_height": 48, + "layout": { + "class": "GUI::VerticalBoxLayout", + "margins": [ 2, 2, 2, 4 ] + } + }, + { + "class": "GUI::StatusBar", + "name": "statusbar" + } + ] +} diff --git a/Applications/TextEditor/TextEditorWidget.cpp b/Applications/TextEditor/TextEditorWidget.cpp index 75396a36d5..688fa3eb9f 100644 --- a/Applications/TextEditor/TextEditorWidget.cpp +++ b/Applications/TextEditor/TextEditorWidget.cpp @@ -25,9 +25,12 @@ */ #include "TextEditorWidget.h" +#include +#include #include #include #include +#include #include #include #include @@ -57,16 +60,11 @@ TextEditorWidget::TextEditorWidget() { - set_fill_with_background_color(true); - set_layout(); - layout()->set_spacing(2); + load_from_json(main_window_ui_json); - auto& toolbar_container = add(); - auto& toolbar = toolbar_container.add(); + auto& toolbar = static_cast(*find_descendant_by_name("toolbar")); - auto& splitter = add(); - - m_editor = splitter.add(); + m_editor = static_cast(*find_descendant_by_name("editor")); m_editor->set_ruler_visible(true); m_editor->set_automatic_indentation_enabled(true); m_editor->set_line_wrapping_enabled(true); @@ -86,7 +84,7 @@ TextEditorWidget::TextEditorWidget() update_title(); }; - m_page_view = splitter.add(); + m_page_view = static_cast(*find_descendant_by_name("webview")); m_page_view->set_visible(false); m_page_view->on_link_hover = [this](auto& url) { if (url.is_valid()) @@ -104,12 +102,7 @@ TextEditorWidget::TextEditorWidget() } }; - m_find_replace_widget = add(); - m_find_replace_widget->set_fill_with_background_color(true); - m_find_replace_widget->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); - m_find_replace_widget->set_preferred_size(0, 48); - m_find_replace_widget->set_layout(); - m_find_replace_widget->layout()->set_margins({ 2, 2, 2, 4 }); + m_find_replace_widget = *find_descendant_by_name("find_replace_widget"); m_find_replace_widget->set_visible(false); m_find_widget = m_find_replace_widget->add(); @@ -292,7 +285,7 @@ TextEditorWidget::TextEditorWidget() m_editor->add_custom_context_menu_action(*m_find_next_action); m_editor->add_custom_context_menu_action(*m_find_previous_action); - m_statusbar = add(); + m_statusbar = static_cast(*find_descendant_by_name("statusbar")); m_editor->on_cursor_change = [this] { update_statusbar_cursor_position(); }; diff --git a/CMakeLists.txt b/CMakeLists.txt index 427457019b..bcd2efffee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -197,6 +197,7 @@ add_link_options(--sysroot ${CMAKE_BINARY_DIR}/Root) include_directories(Libraries/LibC) include_directories(Libraries/LibM) include_directories(Services) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}/Services) include_directories(${CMAKE_CURRENT_BINARY_DIR}/Libraries)