Browse Source

Merge pull request #70334 from Sauermann/fix-button-group-doc

Add configuration warning when ButtonGroup is used with non-toggleable buttons
Rémi Verschelde 2 years ago
parent
commit
c2d8269a72
3 changed files with 16 additions and 2 deletions
  1. 2 2
      doc/classes/ButtonGroup.xml
  2. 12 0
      scene/gui/base_button.cpp
  3. 2 0
      scene/gui/base_button.h

+ 2 - 2
doc/classes/ButtonGroup.xml

@@ -4,8 +4,8 @@
 		Group of Buttons.
 		Group of Buttons.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
-		Group of [Button]. All direct and indirect children buttons become radios. Only one allows being pressed.
-		[member BaseButton.toggle_mode] should be [code]true[/code].
+		Group of [BaseButton]. The members of this group are treated like radio buttons in the sense that only one button can be pressed at the same time.
+		Every member of the ButtonGroup should have [member BaseButton.toggle_mode] set to [code]true[/code].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 12 - 0
scene/gui/base_button.cpp

@@ -300,6 +300,7 @@ void BaseButton::set_toggle_mode(bool p_on) {
 	}
 	}
 
 
 	toggle_mode = p_on;
 	toggle_mode = p_on;
+	update_configuration_warnings();
 }
 }
 
 
 bool BaseButton::is_toggle_mode() const {
 bool BaseButton::is_toggle_mode() const {
@@ -381,6 +382,7 @@ void BaseButton::set_button_group(const Ref<ButtonGroup> &p_group) {
 	}
 	}
 
 
 	queue_redraw(); //checkbox changes to radio if set a buttongroup
 	queue_redraw(); //checkbox changes to radio if set a buttongroup
+	update_configuration_warnings();
 }
 }
 
 
 Ref<ButtonGroup> BaseButton::get_button_group() const {
 Ref<ButtonGroup> BaseButton::get_button_group() const {
@@ -399,6 +401,16 @@ bool BaseButton::is_shortcut_feedback() const {
 	return shortcut_feedback;
 	return shortcut_feedback;
 }
 }
 
 
+PackedStringArray BaseButton::get_configuration_warnings() const {
+	PackedStringArray warnings = Control::get_configuration_warnings();
+
+	if (get_button_group().is_valid() && !is_toggle_mode()) {
+		warnings.push_back(RTR("ButtonGroup is intended to be used only with buttons that have toggle_mode set to true."));
+	}
+
+	return warnings;
+}
+
 void BaseButton::_bind_methods() {
 void BaseButton::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("set_pressed", "pressed"), &BaseButton::set_pressed);
 	ClassDB::bind_method(D_METHOD("set_pressed", "pressed"), &BaseButton::set_pressed);
 	ClassDB::bind_method(D_METHOD("is_pressed"), &BaseButton::is_pressed);
 	ClassDB::bind_method(D_METHOD("is_pressed"), &BaseButton::is_pressed);

+ 2 - 0
scene/gui/base_button.h

@@ -136,6 +136,8 @@ public:
 	void set_shortcut_feedback(bool p_feedback);
 	void set_shortcut_feedback(bool p_feedback);
 	bool is_shortcut_feedback() const;
 	bool is_shortcut_feedback() const;
 
 
+	PackedStringArray get_configuration_warnings() const override;
+
 	BaseButton();
 	BaseButton();
 	~BaseButton();
 	~BaseButton();
 };
 };