Button.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. Gfx::Bitmap const* 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. virtual void timer_event(Core::TimerEvent&) override;
  49. RefPtr<Gfx::Bitmap> m_icon;
  50. RefPtr<GUI::Menu> m_menu;
  51. Gfx::ButtonStyle m_button_style { Gfx::ButtonStyle::Normal };
  52. Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
  53. WeakPtr<Action> m_action;
  54. int m_icon_spacing { 4 };
  55. bool m_another_button_has_focus { false };
  56. bool m_mimic_pressed { false };
  57. };
  58. }