FilterGallery.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "FilterGallery.h"
  7. #include "FilterModel.h"
  8. #include <Applications/PixelPaint/FilterGalleryGML.h>
  9. #include <LibGUI/Button.h>
  10. #include <LibGUI/TreeView.h>
  11. #include <LibGUI/Widget.h>
  12. namespace PixelPaint {
  13. FilterGallery::FilterGallery(GUI::Window* parent_window, ImageEditor* editor)
  14. : GUI::Dialog(parent_window)
  15. {
  16. set_title("Filter Gallery");
  17. set_icon(parent_window->icon());
  18. resize(400, 250);
  19. set_resizable(true);
  20. auto& main_widget = set_main_widget<GUI::Widget>();
  21. if (!main_widget.load_from_gml(filter_gallery_gml))
  22. VERIFY_NOT_REACHED();
  23. m_filter_tree = main_widget.find_descendant_of_type_named<GUI::TreeView>("tree_view");
  24. auto apply_button = main_widget.find_descendant_of_type_named<GUI::Button>("apply_button");
  25. auto cancel_button = main_widget.find_descendant_of_type_named<GUI::Button>("cancel_button");
  26. m_config_widget = main_widget.find_descendant_of_type_named<GUI::Widget>("config_widget");
  27. m_preview_widget = main_widget.find_descendant_of_type_named<FilterPreviewWidget>("preview_widget");
  28. VERIFY(m_filter_tree);
  29. VERIFY(apply_button);
  30. VERIFY(cancel_button);
  31. VERIFY(m_config_widget);
  32. VERIFY(m_preview_widget);
  33. auto filter_model = FilterModel::create(editor);
  34. m_filter_tree->set_model(filter_model);
  35. m_filter_tree->expand_tree();
  36. m_filter_tree->on_selection_change = [this]() {
  37. auto selected_index = m_filter_tree->selection().first();
  38. if (!selected_index.is_valid()) {
  39. m_preview_widget->clear_filter();
  40. return;
  41. }
  42. auto selected_filter = static_cast<const FilterModel::FilterInfo*>(selected_index.internal_data());
  43. if (selected_filter->type != FilterModel::FilterInfo::Type::Filter) {
  44. m_preview_widget->clear_filter();
  45. return;
  46. }
  47. m_selected_filter = selected_filter->filter;
  48. m_selected_filter->on_settings_change = [&]() {
  49. m_preview_widget->set_filter(m_selected_filter);
  50. };
  51. m_preview_widget->set_filter(m_selected_filter);
  52. m_selected_filter_config_widget = m_selected_filter->get_settings_widget();
  53. m_config_widget->remove_all_children();
  54. m_config_widget->add_child(*m_selected_filter_config_widget);
  55. };
  56. m_preview_widget->set_bitmap(editor->active_layer()->content_bitmap().clone().release_value());
  57. apply_button->on_click = [this](auto) {
  58. if (!m_selected_filter) {
  59. done(ExecResult::Aborted);
  60. return;
  61. }
  62. m_selected_filter->apply();
  63. done(ExecResult::OK);
  64. };
  65. cancel_button->on_click = [this](auto) {
  66. done(ExecResult::Cancel);
  67. };
  68. }
  69. }