Button.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 <LibGUI/Action.h>
  10. #include <LibGfx/Bitmap.h>
  11. #include <LibGfx/StylePainter.h>
  12. #include <LibGfx/TextAlignment.h>
  13. namespace GUI {
  14. class Button : public AbstractButton {
  15. C_OBJECT(Button);
  16. public:
  17. virtual ~Button() override;
  18. void set_icon(RefPtr<Gfx::Bitmap>);
  19. void set_icon_from_path(String const&);
  20. const Gfx::Bitmap* icon() const { return m_icon.ptr(); }
  21. Gfx::Bitmap* icon() { return m_icon.ptr(); }
  22. void set_text_alignment(Gfx::TextAlignment text_alignment) { m_text_alignment = text_alignment; }
  23. Gfx::TextAlignment text_alignment() const { return m_text_alignment; }
  24. Function<void(unsigned modifiers)> on_click;
  25. Function<void(ContextMenuEvent&)> on_context_menu_request;
  26. void set_button_style(Gfx::ButtonStyle style) { m_button_style = style; }
  27. Gfx::ButtonStyle button_style() const { return m_button_style; }
  28. virtual void click(unsigned modifiers = 0) override;
  29. virtual void context_menu_event(ContextMenuEvent&) override;
  30. Action* action() { return m_action; }
  31. Action const* action() const { return m_action; }
  32. void set_action(Action&);
  33. virtual bool is_uncheckable() const override;
  34. int icon_spacing() const { return m_icon_spacing; }
  35. void set_icon_spacing(int spacing) { m_icon_spacing = spacing; }
  36. void set_menu(RefPtr<GUI::Menu>);
  37. bool is_default() const;
  38. void set_default(bool);
  39. bool another_button_has_focus() const { return m_another_button_has_focus; }
  40. void set_mimic_pressed(bool mimic_pressed);
  41. bool is_mimic_pressed() const { return m_mimic_pressed; };
  42. protected:
  43. explicit Button(String text = {});
  44. virtual void mousedown_event(MouseEvent&) override;
  45. virtual void mousemove_event(MouseEvent&) override;
  46. virtual void paint_event(PaintEvent&) override;
  47. private:
  48. RefPtr<Gfx::Bitmap> m_icon;
  49. RefPtr<GUI::Menu> m_menu;
  50. Gfx::ButtonStyle m_button_style { Gfx::ButtonStyle::Normal };
  51. Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
  52. WeakPtr<Action> m_action;
  53. int m_icon_spacing { 4 };
  54. bool m_another_button_has_focus { false };
  55. bool m_mimic_pressed { false };
  56. };
  57. }