| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <LibGUI/GWidget.h>
 | 
					
						
							| 
									
										
										
										
											2019-05-24 22:54:37 +02:00
										 |  |  | #include <SharedGraphics/TextAlignment.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GPainter; | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class GAbstractButton : public GWidget { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     virtual ~GAbstractButton() override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 17:11:42 +02:00
										 |  |  |     Function<void(bool)> on_checked; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-02 14:58:02 +02:00
										 |  |  |     void set_text(const StringView&); | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  |     const String& text() const { return m_text; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-12 05:57:26 +02:00
										 |  |  |     bool is_exclusive() const { return m_exclusive; } | 
					
						
							|  |  |  |     void set_exclusive(bool b) { m_exclusive = b; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  |     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"; } | 
					
						
							| 
									
										
										
										
											2019-05-24 17:11:42 +02:00
										 |  |  |     virtual bool accepts_focus() const override { return true; } | 
					
						
							| 
									
										
										
										
											2019-07-09 22:10:03 +02:00
										 |  |  |     virtual bool supports_keyboard_activation() const override { return true; } | 
					
						
							|  |  |  |     virtual bool is_uncheckable() const { return true; } | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  |     explicit GAbstractButton(GWidget* parent); | 
					
						
							| 
									
										
										
										
											2019-06-02 14:58:02 +02:00
										 |  |  |     GAbstractButton(const StringView&, GWidget* parent); | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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; | 
					
						
							| 
									
										
										
										
											2019-05-25 13:40:57 +02:00
										 |  |  |     virtual void change_event(GEvent&) override; | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 22:54:37 +02:00
										 |  |  |     void paint_text(GPainter&, const Rect&, const Font&, TextAlignment); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2019-06-12 05:57:26 +02:00
										 |  |  |     virtual bool is_abstract_button() const final { return true; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  |     String m_text; | 
					
						
							|  |  |  |     bool m_checked { false }; | 
					
						
							|  |  |  |     bool m_checkable { false }; | 
					
						
							|  |  |  |     bool m_hovered { false }; | 
					
						
							|  |  |  |     bool m_being_pressed { false }; | 
					
						
							| 
									
										
										
										
											2019-06-12 05:57:26 +02:00
										 |  |  |     bool m_exclusive { false }; | 
					
						
							| 
									
										
										
										
											2019-05-24 16:32:20 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-06-12 05:57:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | template<> | 
					
						
							|  |  |  | inline bool is<GAbstractButton>(const CObject& object) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!is<GWidget>(object)) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     return to<GWidget>(object).is_abstract_button(); | 
					
						
							|  |  |  | } |