From 92afdd0c869d9943836492929c8146aa071289f7 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 20 Dec 2020 12:17:59 +0100 Subject: [PATCH] FileManager: Move the main window UI to GML This was pretty straightforward although it does expose a bunch of missing functionality (mostly properties.) --- Applications/FileManager/CMakeLists.txt | 3 ++ .../FileManager/FileManagerWindow.gml | 54 +++++++++++++++++++ Applications/FileManager/main.cpp | 34 +++++------- 3 files changed, 70 insertions(+), 21 deletions(-) create mode 100644 Applications/FileManager/FileManagerWindow.gml diff --git a/Applications/FileManager/CMakeLists.txt b/Applications/FileManager/CMakeLists.txt index d8d1178538..b0bfcabee3 100644 --- a/Applications/FileManager/CMakeLists.txt +++ b/Applications/FileManager/CMakeLists.txt @@ -1,6 +1,9 @@ +compile_gml(FileManagerWindow.gml FileManagerWindowGML.h file_manager_window_gml) + set(SOURCES DesktopWidget.cpp DirectoryView.cpp + FileManagerWindowGML.h FileUtils.cpp main.cpp PropertiesDialog.cpp diff --git a/Applications/FileManager/FileManagerWindow.gml b/Applications/FileManager/FileManagerWindow.gml new file mode 100644 index 0000000000..bc6c403724 --- /dev/null +++ b/Applications/FileManager/FileManagerWindow.gml @@ -0,0 +1,54 @@ +@GUI::Widget { + fill_with_background_color: true + layout: @GUI::VerticalBoxLayout { + spacing: 2 + } + + @GUI::ToolBarContainer { + @GUI::ToolBar { + name: "main_toolbar" + } + @GUI::ToolBar { + name: "location_toolbar" + visible: false + + @GUI::Label { + name: "location_label" + text: "Location: " + } + + @GUI::TextBox { + name: "location_textbox" + vertical_size_policy: "Fixed" + preferred_height: 22 + } + } + @GUI::ToolBar { + name: "breadcrumb_toolbar" + + @GUI::BreadcrumbBar { + name: "breadcrumb_bar" + } + } + } + + @GUI::HorizontalSplitter { + name: "splitter" + + @GUI::TreeView { + name: "tree_view" + horizontal_size_policy: "Fixed" + preferred_width: 175 + } + + } + + @GUI::StatusBar { + name: "statusbar" + + @GUI::ProgressBar { + name: "progressbar" + visible: false + } + } +} diff --git a/Applications/FileManager/main.cpp b/Applications/FileManager/main.cpp index c8291b9c31..8edaa8211d 100644 --- a/Applications/FileManager/main.cpp +++ b/Applications/FileManager/main.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -292,36 +293,30 @@ int run_in_windowed_mode(RefPtr config, String initial_locatio window->set_rect({ left, top, width, height }); auto& widget = window->set_main_widget(); - widget.set_layout(); - widget.set_fill_with_background_color(true); - widget.layout()->set_spacing(2); - auto& toolbar_container = widget.add(); + widget.load_from_gml(file_manager_window_gml); - auto& main_toolbar = toolbar_container.add(); - auto& location_toolbar = toolbar_container.add(); + auto& main_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("main_toolbar"); + auto& location_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("location_toolbar"); location_toolbar.layout()->set_margins({ 6, 3, 6, 3 }); - location_toolbar.set_visible(false); - - auto& location_label = location_toolbar.add("Location: "); + auto& location_label = (GUI::Label&)*widget.find_descendant_by_name("location_label"); location_label.size_to_fit(); - auto& location_textbox = location_toolbar.add(); - location_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); - location_textbox.set_preferred_size(0, 22); + auto& location_textbox = (GUI::TextBox&)*widget.find_descendant_by_name("location_textbox"); - auto& breadcrumb_toolbar = toolbar_container.add(Gfx::Orientation::Horizontal, 16); + auto& breadcrumb_toolbar = (GUI::ToolBar&)*widget.find_descendant_by_name("breadcrumb_toolbar"); breadcrumb_toolbar.layout()->set_margins({}); - auto& breadcrumb_bar = breadcrumb_toolbar.add(); + auto& breadcrumb_bar = (GUI::BreadcrumbBar&)*widget.find_descendant_by_name("breadcrumb_bar"); location_textbox.on_focusout = [&] { location_toolbar.set_visible(false); breadcrumb_toolbar.set_visible(true); }; - auto& splitter = widget.add(); - auto& tree_view = splitter.add(); + auto& splitter = (GUI::HorizontalSplitter&)*widget.find_descendant_by_name("splitter"); + auto& tree_view = (GUI::TreeView&)*widget.find_descendant_by_name("tree_view"); + auto directories_model = GUI::FileSystemModel::create({}, GUI::FileSystemModel::Mode::DirectoriesOnly); tree_view.set_model(directories_model); tree_view.set_column_hidden(GUI::FileSystemModel::Column::Icon, true); @@ -332,8 +327,6 @@ int run_in_windowed_mode(RefPtr config, String initial_locatio tree_view.set_column_hidden(GUI::FileSystemModel::Column::ModificationTime, true); tree_view.set_column_hidden(GUI::FileSystemModel::Column::Inode, true); tree_view.set_column_hidden(GUI::FileSystemModel::Column::SymlinkTarget, true); - tree_view.set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fill); - tree_view.set_preferred_size(175, 0); bool is_reacting_to_tree_view_selection_change = false; auto& directory_view = splitter.add(DirectoryView::Mode::Normal); @@ -345,12 +338,11 @@ int run_in_windowed_mode(RefPtr config, String initial_locatio // Open the root directory. FIXME: This is awkward. tree_view.toggle_index(directories_model->index(0, 0, {})); - auto& statusbar = widget.add(); + auto& statusbar = (GUI::StatusBar&)*widget.find_descendant_by_name("statusbar"); - auto& progressbar = statusbar.add(); + auto& progressbar = (GUI::ProgressBar&)*widget.find_descendant_by_name("progressbar"); progressbar.set_caption("Generating thumbnails: "); progressbar.set_format(GUI::ProgressBar::Format::ValueSlashMax); - progressbar.set_visible(false); progressbar.set_frame_shape(Gfx::FrameShape::Panel); progressbar.set_frame_shadow(Gfx::FrameShadow::Sunken); progressbar.set_frame_thickness(1);