| 
									
										
										
										
											2018-04-21 21:24:46 +08:00
										 |  |  | #include "..\e2dnode.h"
 | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 16:44:22 +08:00
										 |  |  | #define SAFE_SET(pointer, func, ...) if (pointer) { pointer->##func(__VA_ARGS__); }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SET_BUTTON_NODE(Old, New)								\
 | 
					
						
							|  |  |  | 	if (New != Old)												\ | 
					
						
							|  |  |  | 	{															\ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		if (Old) this->RemoveChild(Old);						\ | 
					
						
							| 
									
										
										
										
											2018-07-25 16:44:22 +08:00
										 |  |  | 		if (New)												\ | 
					
						
							|  |  |  | 		{														\ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 			New->SetAnchor(anchor_.x, anchor_.y);				\ | 
					
						
							|  |  |  | 			this->AddChild(New);								\ | 
					
						
							| 
									
										
										
										
											2018-07-25 16:44:22 +08:00
										 |  |  | 		}														\ | 
					
						
							|  |  |  | 		Old = New;												\ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		UpdateStatus();											\ | 
					
						
							|  |  |  | 		UpdateVisible();										\ | 
					
						
							| 
									
										
										
										
											2018-07-25 16:44:22 +08:00
										 |  |  | 	}															\ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 22:29:42 +08:00
										 |  |  | e2d::ToggleButton::ToggleButton() | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  | 	: Button() | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	, checked_(true) | 
					
						
							|  |  |  | 	, normal_on_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_on_(nullptr) | 
					
						
							|  |  |  | 	, selected_on_(nullptr) | 
					
						
							|  |  |  | 	, disabled_on_(nullptr) | 
					
						
							|  |  |  | 	, normal_off_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_off_(nullptr) | 
					
						
							|  |  |  | 	, selected_off_(nullptr) | 
					
						
							|  |  |  | 	, disabled_off_(nullptr) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | e2d::ToggleButton::ToggleButton(Node * normal_on, Node * normal_off, const Function& func) | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  | 	: Button() | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	, checked_(true) | 
					
						
							|  |  |  | 	, normal_on_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_on_(nullptr) | 
					
						
							|  |  |  | 	, selected_on_(nullptr) | 
					
						
							|  |  |  | 	, disabled_on_(nullptr) | 
					
						
							|  |  |  | 	, normal_off_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_off_(nullptr) | 
					
						
							|  |  |  | 	, selected_off_(nullptr) | 
					
						
							|  |  |  | 	, disabled_off_(nullptr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	this->SetNormal(normal_on); | 
					
						
							|  |  |  | 	this->SetNormalOff(normal_off); | 
					
						
							|  |  |  | 	this->SetCallbackOnClick(func); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | e2d::ToggleButton::ToggleButton(Node * normal_on, Node * normal_off, Node * selected_on, Node * selected_off, const Function& func) | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  | 	: Button() | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	, checked_(true) | 
					
						
							|  |  |  | 	, normal_on_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_on_(nullptr) | 
					
						
							|  |  |  | 	, selected_on_(nullptr) | 
					
						
							|  |  |  | 	, disabled_on_(nullptr) | 
					
						
							|  |  |  | 	, normal_off_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_off_(nullptr) | 
					
						
							|  |  |  | 	, selected_off_(nullptr) | 
					
						
							|  |  |  | 	, disabled_off_(nullptr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	this->SetNormal(normal_on); | 
					
						
							|  |  |  | 	this->SetNormalOff(normal_off); | 
					
						
							|  |  |  | 	this->SetSelected(selected_on); | 
					
						
							|  |  |  | 	this->SetSelectedOff(selected_off); | 
					
						
							|  |  |  | 	this->SetCallbackOnClick(func); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | e2d::ToggleButton::ToggleButton(Node * normal_on, Node * normal_off, Node * mouseover_on, Node * mouseover_off, Node * selected_on, Node * selected_off, const Function& func) | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  | 	: Button() | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	, checked_(true) | 
					
						
							|  |  |  | 	, normal_on_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_on_(nullptr) | 
					
						
							|  |  |  | 	, selected_on_(nullptr) | 
					
						
							|  |  |  | 	, disabled_on_(nullptr) | 
					
						
							|  |  |  | 	, normal_off_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_off_(nullptr) | 
					
						
							|  |  |  | 	, selected_off_(nullptr) | 
					
						
							|  |  |  | 	, disabled_off_(nullptr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	this->SetNormal(normal_on); | 
					
						
							|  |  |  | 	this->SetNormalOff(normal_off); | 
					
						
							|  |  |  | 	this->SetMouseOver(mouseover_on); | 
					
						
							|  |  |  | 	this->SetMouseOverOff(mouseover_off); | 
					
						
							|  |  |  | 	this->SetSelected(selected_on); | 
					
						
							|  |  |  | 	this->SetSelectedOff(selected_off); | 
					
						
							|  |  |  | 	this->SetCallbackOnClick(func); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | e2d::ToggleButton::ToggleButton(Node * normal_on, Node * normal_off, Node * mouseover_on, Node * mouseover_off, Node * selected_on, Node * selected_off, Node * disabled_on, Node * disabled_off, const Function& func) | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  | 	: Button() | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	, checked_(true) | 
					
						
							|  |  |  | 	, normal_off_(nullptr) | 
					
						
							|  |  |  | 	, mouseover_off_(nullptr) | 
					
						
							|  |  |  | 	, selected_off_(nullptr) | 
					
						
							|  |  |  | 	, disabled_off_(nullptr) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	this->SetNormal(normal_on); | 
					
						
							|  |  |  | 	this->SetNormalOff(normal_off); | 
					
						
							|  |  |  | 	this->SetMouseOver(mouseover_on); | 
					
						
							|  |  |  | 	this->SetMouseOverOff(mouseover_off); | 
					
						
							|  |  |  | 	this->SetSelected(selected_on); | 
					
						
							|  |  |  | 	this->SetSelectedOff(selected_off); | 
					
						
							|  |  |  | 	this->SetDisabled(disabled_on); | 
					
						
							|  |  |  | 	this->SetDisabledOff(disabled_off); | 
					
						
							|  |  |  | 	this->SetCallbackOnClick(func); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | bool e2d::ToggleButton::IsChecked() const | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	return checked_; | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetChecked(bool checked) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	if (checked_ != checked) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		checked_ = checked; | 
					
						
							|  |  |  | 		UpdateStatus(); | 
					
						
							|  |  |  | 		UpdateVisible(); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetNormal(Node * normal) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(normal_on_, normal); | 
					
						
							| 
									
										
										
										
											2018-08-12 14:05:12 +08:00
										 |  |  | 	if (normal) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		this->SetSize(normal->GetWidth(), normal->GetHeight()); | 
					
						
							| 
									
										
										
										
											2018-08-12 14:05:12 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetMouseOver(Node * mouseover) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(mouseover_on_, mouseover); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetSelected(Node * selected) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(selected_on_, selected); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetDisabled(Node * disabled) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(disabled_on_, disabled); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetNormalOff(Node * normal) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(normal_off_, normal); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetMouseOverOff(Node * mouseover) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(mouseover_off_, mouseover); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetSelectedOff(Node * selected) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(selected_off_, selected); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetDisabledOff(Node * disabled) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	SET_BUTTON_NODE(disabled_off_, disabled); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::SetAnchor(float anchor_x, float anchor_y) | 
					
						
							| 
									
										
										
										
											2018-07-28 20:48:25 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	Node::SetAnchor(anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(normal_on_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(mouseover_on_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(selected_on_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(disabled_on_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(normal_off_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(mouseover_off_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(selected_off_, SetAnchor, anchor_x, anchor_y); | 
					
						
							|  |  |  | 	SAFE_SET(disabled_off_, SetAnchor, anchor_x, anchor_y); | 
					
						
							| 
									
										
										
										
											2018-07-28 20:48:25 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::UpdateStatus() | 
					
						
							| 
									
										
										
										
											2018-02-04 21:24:27 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	if (checked_) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		normal_ = normal_on_; | 
					
						
							|  |  |  | 		mouseover_ = mouseover_on_; | 
					
						
							|  |  |  | 		selected_ = selected_on_; | 
					
						
							|  |  |  | 		disabled_ = disabled_on_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		SAFE_SET(normal_off_, SetVisible, false); | 
					
						
							|  |  |  | 		SAFE_SET(mouseover_off_, SetVisible, false); | 
					
						
							|  |  |  | 		SAFE_SET(selected_off_, SetVisible, false); | 
					
						
							|  |  |  | 		SAFE_SET(disabled_off_, SetVisible, false); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		normal_ = normal_off_; | 
					
						
							|  |  |  | 		mouseover_ = mouseover_off_; | 
					
						
							|  |  |  | 		selected_ = selected_off_; | 
					
						
							|  |  |  | 		disabled_ = disabled_off_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		SAFE_SET(normal_on_, SetVisible, false); | 
					
						
							|  |  |  | 		SAFE_SET(mouseover_on_, SetVisible, false); | 
					
						
							|  |  |  | 		SAFE_SET(selected_on_, SetVisible, false); | 
					
						
							|  |  |  | 		SAFE_SET(disabled_on_, SetVisible, false); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | void e2d::ToggleButton::OnClick() | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	checked_ = !checked_; | 
					
						
							|  |  |  | 	UpdateStatus(); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 	if (callback_) | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  | 		callback_(); | 
					
						
							| 
									
										
										
										
											2017-11-07 22:20:46 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |