mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 02:12:09 -05:00
d12857fc36
This is done by dispatching a (synchronous) "EnabledChange" event that can be picked up in change_event(). Use this event to kick widgets out of their "being pressed"-type modes if the user is interacting with them while the state is programmatically changed.
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <LibGUI/GWidget.h>
|
|
#include <SharedGraphics/TextAlignment.h>
|
|
|
|
class GPainter;
|
|
|
|
class GAbstractButton : public GWidget {
|
|
public:
|
|
virtual ~GAbstractButton() override;
|
|
|
|
Function<void(bool)> on_checked;
|
|
|
|
void set_text(const String&);
|
|
const String& text() const { return m_text; }
|
|
|
|
bool is_checked() const { return m_checked; }
|
|
void set_checked(bool);
|
|
|
|
bool is_checkable() const { return m_checkable; }
|
|
void set_checkable(bool);
|
|
|
|
bool is_hovered() const { return m_hovered; }
|
|
bool is_being_pressed() const { return m_being_pressed; }
|
|
|
|
virtual void click() = 0;
|
|
virtual const char* class_name() const override { return "GAbstractButton"; }
|
|
virtual bool accepts_focus() const override { return true; }
|
|
|
|
protected:
|
|
explicit GAbstractButton(GWidget* parent);
|
|
GAbstractButton(const String&, GWidget* parent);
|
|
|
|
virtual void mousedown_event(GMouseEvent&) override;
|
|
virtual void mousemove_event(GMouseEvent&) override;
|
|
virtual void mouseup_event(GMouseEvent&) override;
|
|
virtual void keydown_event(GKeyEvent&) override;
|
|
virtual void enter_event(CEvent&) override;
|
|
virtual void leave_event(CEvent&) override;
|
|
virtual void change_event(GEvent&) override;
|
|
|
|
void paint_text(GPainter&, const Rect&, const Font&, TextAlignment);
|
|
|
|
private:
|
|
String m_text;
|
|
bool m_checked { false };
|
|
bool m_checkable { false };
|
|
bool m_hovered { false };
|
|
bool m_being_pressed { false };
|
|
};
|