1
0
Fork 0

Add option for ButtonGroups to be unpressed

Add an option for ButtonGroups to be unpressed

Apply suggestions from code review

Co-Authored-By: Tomek <kobewi4e@gmail.com>
Co-Authored-By: Yuri Rubinsky <chaosus89@gmail.com>
Co-Authored-By: kleonc <9283098+kleonc@users.noreply.github.com>
This commit is contained in:
TheSecondReal0 2023-04-19 20:37:52 -06:00
parent 27253f3eb2
commit d829b43ab5
3 changed files with 18 additions and 1 deletions

View File

@ -24,6 +24,9 @@
</method> </method>
</methods> </methods>
<members> <members>
<member name="allow_unpress" type="bool" setter="set_allow_unpress" getter="is_allow_unpress" default="false">
If [code]true[/code], it is possible to unpress all buttons in this [ButtonGroup].
</member>
<member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" overrides="Resource" default="true" /> <member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" overrides="Resource" default="true" />
</members> </members>
<signals> <signals>

View File

@ -40,7 +40,7 @@ void BaseButton::_unpress_group() {
return; return;
} }
if (toggle_mode) { if (toggle_mode && !button_group->is_allow_unpress()) {
status.pressed = true; status.pressed = true;
} }
@ -537,9 +537,20 @@ BaseButton *ButtonGroup::get_pressed_button() {
return nullptr; return nullptr;
} }
void ButtonGroup::set_allow_unpress(bool p_enabled) {
allow_unpress = p_enabled;
}
bool ButtonGroup::is_allow_unpress() {
return allow_unpress;
}
void ButtonGroup::_bind_methods() { void ButtonGroup::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_pressed_button"), &ButtonGroup::get_pressed_button); ClassDB::bind_method(D_METHOD("get_pressed_button"), &ButtonGroup::get_pressed_button);
ClassDB::bind_method(D_METHOD("get_buttons"), &ButtonGroup::_get_buttons); ClassDB::bind_method(D_METHOD("get_buttons"), &ButtonGroup::_get_buttons);
ClassDB::bind_method(D_METHOD("set_allow_unpress", "enabled"), &ButtonGroup::set_allow_unpress);
ClassDB::bind_method(D_METHOD("is_allow_unpress"), &ButtonGroup::is_allow_unpress);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_unpress"), "set_allow_unpress", "is_allow_unpress");
ADD_SIGNAL(MethodInfo("pressed", PropertyInfo(Variant::OBJECT, "button", PROPERTY_HINT_RESOURCE_TYPE, "BaseButton"))); ADD_SIGNAL(MethodInfo("pressed", PropertyInfo(Variant::OBJECT, "button", PROPERTY_HINT_RESOURCE_TYPE, "BaseButton")));
} }

View File

@ -152,6 +152,7 @@ class ButtonGroup : public Resource {
GDCLASS(ButtonGroup, Resource); GDCLASS(ButtonGroup, Resource);
friend class BaseButton; friend class BaseButton;
HashSet<BaseButton *> buttons; HashSet<BaseButton *> buttons;
bool allow_unpress = false;
protected: protected:
static void _bind_methods(); static void _bind_methods();
@ -160,6 +161,8 @@ public:
BaseButton *get_pressed_button(); BaseButton *get_pressed_button();
void get_buttons(List<BaseButton *> *r_buttons); void get_buttons(List<BaseButton *> *r_buttons);
TypedArray<BaseButton> _get_buttons(); TypedArray<BaseButton> _get_buttons();
void set_allow_unpress(bool p_enabled);
bool is_allow_unpress();
ButtonGroup(); ButtonGroup();
}; };