mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Toggle control expand flag directly via top bar
This commit is contained in:
		
							parent
							
								
									c4279fe3e0
								
							
						
					
					
						commit
						2af78a5e86
					
				
					 2 changed files with 82 additions and 4 deletions
				
			
		|  | @ -36,6 +36,7 @@ | |||
| #include "editor/editor_undo_redo_manager.h" | ||||
| #include "editor/plugins/canvas_item_editor_plugin.h" | ||||
| #include "editor/themes/editor_scale.h" | ||||
| #include "scene/gui/check_button.h" | ||||
| #include "scene/gui/grid_container.h" | ||||
| #include "scene/gui/separator.h" | ||||
| 
 | ||||
|  | @ -660,6 +661,10 @@ void SizeFlagPresetPicker::_preset_button_pressed(const int p_preset) { | |||
| 	emit_signal("size_flags_selected", flags); | ||||
| } | ||||
| 
 | ||||
| void SizeFlagPresetPicker::_expand_button_pressed() { | ||||
| 	emit_signal("expand_flag_toggled", expand_button->is_pressed()); | ||||
| } | ||||
| 
 | ||||
| void SizeFlagPresetPicker::set_allowed_flags(Vector<SizeFlags> &p_flags) { | ||||
| 	preset_buttons[SIZE_SHRINK_BEGIN]->set_disabled(!p_flags.has(SIZE_SHRINK_BEGIN)); | ||||
| 	preset_buttons[SIZE_SHRINK_CENTER]->set_disabled(!p_flags.has(SIZE_SHRINK_CENTER)); | ||||
|  | @ -675,6 +680,10 @@ void SizeFlagPresetPicker::set_allowed_flags(Vector<SizeFlags> &p_flags) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| void SizeFlagPresetPicker::set_expand_flag(bool p_expand) { | ||||
| 	expand_button->set_pressed(p_expand); | ||||
| } | ||||
| 
 | ||||
| void SizeFlagPresetPicker::_notification(int p_notification) { | ||||
| 	switch (p_notification) { | ||||
| 		case NOTIFICATION_ENTER_TREE: | ||||
|  | @ -698,6 +707,7 @@ void SizeFlagPresetPicker::_notification(int p_notification) { | |||
| 
 | ||||
| void SizeFlagPresetPicker::_bind_methods() { | ||||
| 	ADD_SIGNAL(MethodInfo("size_flags_selected", PropertyInfo(Variant::INT, "size_flags"))); | ||||
| 	ADD_SIGNAL(MethodInfo("expand_flag_toggled", PropertyInfo(Variant::BOOL, "expand_flag"))); | ||||
| } | ||||
| 
 | ||||
| SizeFlagPresetPicker::SizeFlagPresetPicker(bool p_vertical) { | ||||
|  | @ -717,10 +727,11 @@ SizeFlagPresetPicker::SizeFlagPresetPicker(bool p_vertical) { | |||
| 	_add_separator(main_row, memnew(VSeparator)); | ||||
| 	_add_row_button(main_row, SIZE_FILL, TTR("Fill")); | ||||
| 
 | ||||
| 	expand_button = memnew(CheckBox); | ||||
| 	expand_button = memnew(CheckButton); | ||||
| 	expand_button->set_flat(true); | ||||
| 	expand_button->set_text(TTR("Align with Expand")); | ||||
| 	expand_button->set_text(TTR("Expand")); | ||||
| 	expand_button->set_tooltip_text(TTR("Enable to also set the Expand flag.\nDisable to only set Shrink/Fill flags.")); | ||||
| 	expand_button->connect("pressed", callable_mp(this, &SizeFlagPresetPicker::_expand_button_pressed)); | ||||
| 	main_vb->add_child(expand_button); | ||||
| } | ||||
| 
 | ||||
|  | @ -812,12 +823,49 @@ void ControlEditorToolbar::_container_flags_selected(int p_flags, bool p_vertica | |||
| 	for (Node *E : selection) { | ||||
| 		Control *control = Object::cast_to<Control>(E); | ||||
| 		if (control) { | ||||
| 			int old_flags = p_vertical ? control->get_v_size_flags() : control->get_h_size_flags(); | ||||
| 			if (p_vertical) { | ||||
| 				undo_redo->add_do_method(control, "set_v_size_flags", p_flags); | ||||
| 				undo_redo->add_undo_method(control, "set_v_size_flags", old_flags); | ||||
| 			} else { | ||||
| 				undo_redo->add_do_method(control, "set_h_size_flags", p_flags); | ||||
| 				undo_redo->add_undo_method(control, "set_h_size_flags", old_flags); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	undo_redo->commit_action(); | ||||
| } | ||||
| 
 | ||||
| void ControlEditorToolbar::_expand_flag_toggled(bool p_expand, bool p_vertical) { | ||||
| 	List<Node *> selection = editor_selection->get_selected_node_list(); | ||||
| 
 | ||||
| 	EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); | ||||
| 	if (p_vertical) { | ||||
| 		undo_redo->create_action(TTR("Change Vertical Expand Flag")); | ||||
| 	} else { | ||||
| 		undo_redo->create_action(TTR("Change Horizontal Expand Flag")); | ||||
| 	} | ||||
| 
 | ||||
| 	for (Node *E : selection) { | ||||
| 		Control *control = Object::cast_to<Control>(E); | ||||
| 		if (control) { | ||||
| 			int old_flags = p_vertical ? control->get_v_size_flags() : control->get_h_size_flags(); | ||||
| 			int new_flags = old_flags; | ||||
| 
 | ||||
| 			if (p_expand) { | ||||
| 				new_flags |= Control::SIZE_EXPAND; | ||||
| 			} else { | ||||
| 				new_flags &= ~Control::SIZE_EXPAND; | ||||
| 			} | ||||
| 
 | ||||
| 			if (p_vertical) { | ||||
| 				undo_redo->add_do_method(control, "set_v_size_flags", new_flags); | ||||
| 				undo_redo->add_undo_method(control, "set_v_size_flags", old_flags); | ||||
| 			} else { | ||||
| 				undo_redo->add_do_method(control, "set_h_size_flags", new_flags); | ||||
| 				undo_redo->add_undo_method(control, "set_h_size_flags", old_flags); | ||||
| 			} | ||||
| 			undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -968,6 +1016,30 @@ void ControlEditorToolbar::_selection_changed() { | |||
| 			container_h_picker->set_allowed_flags(allowed_all_flags); | ||||
| 			container_v_picker->set_allowed_flags(allowed_all_flags); | ||||
| 		} | ||||
| 
 | ||||
| 		// Update expand toggles.
 | ||||
| 		int nb_valid_controls = 0; | ||||
| 		int nb_h_expand = 0; | ||||
| 		int nb_v_expand = 0; | ||||
| 
 | ||||
| 		List<Node *> selection = editor_selection->get_selected_node_list(); | ||||
| 		for (Node *E : selection) { | ||||
| 			Control *control = Object::cast_to<Control>(E); | ||||
| 			if (!control) { | ||||
| 				continue; | ||||
| 			} | ||||
| 
 | ||||
| 			nb_valid_controls++; | ||||
| 			if (control->get_h_size_flags() & Control::SIZE_EXPAND) { | ||||
| 				nb_h_expand++; | ||||
| 			} | ||||
| 			if (control->get_v_size_flags() & Control::SIZE_EXPAND) { | ||||
| 				nb_v_expand++; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		container_h_picker->set_expand_flag(nb_valid_controls == nb_h_expand); | ||||
| 		container_v_picker->set_expand_flag(nb_valid_controls == nb_v_expand); | ||||
| 	} else { | ||||
| 		containers_button->set_visible(false); | ||||
| 	} | ||||
|  | @ -1025,6 +1097,7 @@ ControlEditorToolbar::ControlEditorToolbar() { | |||
| 	container_h_picker = memnew(SizeFlagPresetPicker(false)); | ||||
| 	containers_button->get_popup_hbox()->add_child(container_h_picker); | ||||
| 	container_h_picker->connect("size_flags_selected", callable_mp(this, &ControlEditorToolbar::_container_flags_selected).bind(false)); | ||||
| 	container_h_picker->connect("expand_flag_toggled", callable_mp(this, &ControlEditorToolbar::_expand_flag_toggled).bind(false)); | ||||
| 
 | ||||
| 	containers_button->get_popup_hbox()->add_child(memnew(HSeparator)); | ||||
| 
 | ||||
|  | @ -1034,6 +1107,7 @@ ControlEditorToolbar::ControlEditorToolbar() { | |||
| 	container_v_picker = memnew(SizeFlagPresetPicker(true)); | ||||
| 	containers_button->get_popup_hbox()->add_child(container_v_picker); | ||||
| 	container_v_picker->connect("size_flags_selected", callable_mp(this, &ControlEditorToolbar::_container_flags_selected).bind(true)); | ||||
| 	container_v_picker->connect("expand_flag_toggled", callable_mp(this, &ControlEditorToolbar::_expand_flag_toggled).bind(true)); | ||||
| 
 | ||||
| 	// Editor connections.
 | ||||
| 	editor_selection = EditorNode::get_singleton()->get_editor_selection(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 RedMser
						RedMser