FormEditorWidget.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #pragma once
  2. #include <LibGUI/GScrollableWidget.h>
  3. class FormWidget;
  4. class Tool;
  5. class WidgetTreeModel;
  6. class FormEditorWidget final : public GScrollableWidget {
  7. C_OBJECT(FormEditorWidget)
  8. public:
  9. virtual ~FormEditorWidget() override;
  10. FormWidget& form_widget() { return *m_form_widget; }
  11. const FormWidget& form_widget() const { return *m_form_widget; }
  12. Tool& tool() { return *m_tool; }
  13. const Tool& tool() const { return *m_tool; }
  14. void set_tool(NonnullOwnPtr<Tool>);
  15. WidgetTreeModel& model();
  16. class WidgetSelection {
  17. public:
  18. bool is_empty() const
  19. {
  20. return m_widgets.is_empty();
  21. }
  22. bool contains(GWidget& widget) const
  23. {
  24. return m_widgets.contains(&widget);
  25. }
  26. void toggle(GWidget& widget)
  27. {
  28. if (contains(widget))
  29. remove(widget);
  30. else
  31. add(widget);
  32. }
  33. void set(GWidget& widget)
  34. {
  35. clear();
  36. add(widget);
  37. }
  38. void remove(GWidget& widget)
  39. {
  40. ASSERT(m_widgets.contains(&widget));
  41. m_widgets.remove(&widget);
  42. }
  43. void add(GWidget& widget)
  44. {
  45. m_widgets.set(&widget);
  46. }
  47. void clear()
  48. {
  49. m_widgets.clear();
  50. }
  51. template<typename Callback>
  52. void for_each(Callback callback)
  53. {
  54. for (auto& it : m_widgets) {
  55. if (callback(*it) == IterationDecision::Break)
  56. break;
  57. }
  58. }
  59. WidgetSelection() {}
  60. private:
  61. HashTable<GWidget*> m_widgets;
  62. };
  63. WidgetSelection& selection() { return m_selection; }
  64. private:
  65. virtual void paint_event(GPaintEvent&) override;
  66. explicit FormEditorWidget(GWidget* parent);
  67. RefPtr<FormWidget> m_form_widget;
  68. RefPtr<WidgetTreeModel> m_widget_tree_model;
  69. NonnullOwnPtr<Tool> m_tool;
  70. WidgetSelection m_selection;
  71. };