Button.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <LibGUI/AbstractButton.h>
  9. #include <LibGfx/Bitmap.h>
  10. #include <LibGfx/StylePainter.h>
  11. #include <LibGfx/TextAlignment.h>
  12. namespace GUI {
  13. class Button : public AbstractButton {
  14. C_OBJECT(Button);
  15. public:
  16. virtual ~Button() override;
  17. void set_icon(RefPtr<Gfx::Bitmap>);
  18. void set_icon_from_path(String const&);
  19. const Gfx::Bitmap* icon() const { return m_icon.ptr(); }
  20. Gfx::Bitmap* icon() { return m_icon.ptr(); }
  21. void set_text_alignment(Gfx::TextAlignment text_alignment) { m_text_alignment = text_alignment; }
  22. Gfx::TextAlignment text_alignment() const { return m_text_alignment; }
  23. Function<void(unsigned modifiers)> on_click;
  24. Function<void(ContextMenuEvent&)> on_context_menu_request;
  25. void set_button_style(Gfx::ButtonStyle style) { m_button_style = style; }
  26. Gfx::ButtonStyle button_style() const { return m_button_style; }
  27. virtual void click(unsigned modifiers = 0) override;
  28. virtual void context_menu_event(ContextMenuEvent&) override;
  29. Action* action() { return m_action; }
  30. Action const* action() const { return m_action; }
  31. void set_action(Action&);
  32. virtual bool is_uncheckable() const override;
  33. int icon_spacing() const { return m_icon_spacing; }
  34. void set_icon_spacing(int spacing) { m_icon_spacing = spacing; }
  35. void set_menu(RefPtr<GUI::Menu>);
  36. protected:
  37. explicit Button(String text = {});
  38. virtual void mousedown_event(MouseEvent&) override;
  39. virtual void mousemove_event(MouseEvent&) override;
  40. virtual void paint_event(PaintEvent&) override;
  41. private:
  42. RefPtr<Gfx::Bitmap> m_icon;
  43. RefPtr<GUI::Menu> m_menu;
  44. Gfx::ButtonStyle m_button_style { Gfx::ButtonStyle::Normal };
  45. Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
  46. WeakPtr<Action> m_action;
  47. int m_icon_spacing { 4 };
  48. };
  49. }