123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #pragma once
- #include <LibGUI/GScrollableWidget.h>
- class FormWidget;
- class Tool;
- class FormEditorWidget final : public GScrollableWidget {
- C_OBJECT(FormEditorWidget)
- public:
- virtual ~FormEditorWidget() override;
- FormWidget& form_widget() { return *m_form_widget; }
- const FormWidget& form_widget() const { return *m_form_widget; }
- Tool& tool() { return *m_tool; }
- const Tool& tool() const { return *m_tool; }
- void set_tool(NonnullOwnPtr<Tool>);
- class WidgetSelection {
- public:
- bool is_empty() const
- {
- return m_widgets.is_empty();
- }
- bool contains(GWidget& widget) const
- {
- return m_widgets.contains(&widget);
- }
- void toggle(GWidget& widget)
- {
- if (contains(widget))
- remove(widget);
- else
- add(widget);
- }
- void set(GWidget& widget)
- {
- clear();
- add(widget);
- }
- void remove(GWidget& widget)
- {
- ASSERT(m_widgets.contains(&widget));
- m_widgets.remove(&widget);
- }
- void add(GWidget& widget)
- {
- m_widgets.set(&widget);
- }
- void clear()
- {
- m_widgets.clear();
- }
- template<typename Callback>
- void for_each(Callback callback)
- {
- for (auto& it : m_widgets) {
- if (callback(*it) == IterationDecision::Break)
- break;
- }
- }
- WidgetSelection() {}
- private:
- HashTable<GWidget*> m_widgets;
- };
- WidgetSelection& selection() { return m_selection; }
- private:
- virtual void paint_event(GPaintEvent&) override;
- explicit FormEditorWidget(GWidget* parent);
- RefPtr<FormWidget> m_form_widget;
- NonnullOwnPtr<Tool> m_tool;
- WidgetSelection m_selection;
- };
|