Skip to content

Commit 7b345cc

Browse files
feat: make "create new node" description panel resizable
1 parent 9fe4edb commit 7b345cc

2 files changed

Lines changed: 34 additions & 6 deletions

File tree

editor/gui/create_dialog.cpp

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
#include "editor/settings/editor_feature_profile.h"
4646
#include "editor/settings/editor_settings.h"
4747
#include "editor/themes/editor_scale.h"
48+
#include "scene/gui/control.h"
49+
#include "scene/gui/rich_text_label.h"
50+
#include "scene/gui/split_container.h"
4851

4952
void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const String &p_current_type, const String &p_current_name) {
5053
_fill_type_list();
@@ -722,6 +725,17 @@ void CreateDialog::_favorite_activated() {
722725
_confirmed();
723726
}
724727

728+
void CreateDialog::_description_dragged(float p_offset, VSplitContainer* p_vsc){
729+
if(help_bit && p_vsc){
730+
Control* bit_title = cast_to<Control>(help_bit->get_child(0));
731+
Control* bit_content = cast_to<Control>(help_bit->get_child(0));
732+
float free_v_space = p_vsc->get_size().y - Math::abs(p_offset) - bit_title->get_size().y;
733+
if (bit_content->get_custom_minimum_size().x < free_v_space ){
734+
help_bit->set_content_height_limits(bit_content->get_custom_minimum_size().x, free_v_space);
735+
}
736+
}
737+
}
738+
725739
Variant CreateDialog::get_drag_data_fw(const Point2 &p_point, Control *p_from) {
726740
TreeItem *ti = (p_point == Vector2(Math::INF, Math::INF)) ? favorites->get_selected() : favorites->get_item_at_position(p_point);
727741
if (ti) {
@@ -863,13 +877,13 @@ CreateDialog::CreateDialog() {
863877
HSplitContainer *hsc = memnew(HSplitContainer);
864878
add_child(hsc);
865879

866-
VSplitContainer *vsc = memnew(VSplitContainer);
867-
hsc->add_child(vsc);
880+
VSplitContainer *left_vsc = memnew(VSplitContainer);
881+
hsc->add_child(left_vsc);
868882

869883
VBoxContainer *fav_vb = memnew(VBoxContainer);
870884
fav_vb->set_custom_minimum_size(Size2(150, 100) * EDSCALE);
871885
fav_vb->set_v_size_flags(Control::SIZE_EXPAND_FILL);
872-
vsc->add_child(fav_vb);
886+
left_vsc->add_child(fav_vb);
873887

874888
favorites = memnew(Tree);
875889
favorites->set_accessibility_name(TTRC("Favorites:"));
@@ -885,7 +899,7 @@ CreateDialog::CreateDialog() {
885899
fav_vb->add_margin_child(TTR("Favorites:"), favorites, true);
886900

887901
VBoxContainer *rec_vb = memnew(VBoxContainer);
888-
vsc->add_child(rec_vb);
902+
left_vsc->add_child(rec_vb);
889903
rec_vb->set_custom_minimum_size(Size2(150, 100) * EDSCALE);
890904
rec_vb->set_v_size_flags(Control::SIZE_EXPAND_FILL);
891905

@@ -899,10 +913,14 @@ CreateDialog::CreateDialog() {
899913
recent->add_theme_constant_override("draw_guides", 1);
900914
recent->set_theme_type_variation("ItemListSecondary");
901915

916+
VSplitContainer *right_vsc = memnew(VSplitContainer);
917+
hsc->add_child(right_vsc);
918+
902919
VBoxContainer *vbc = memnew(VBoxContainer);
903920
vbc->set_custom_minimum_size(Size2(300, 0) * EDSCALE);
904921
vbc->set_h_size_flags(Control::SIZE_EXPAND_FILL);
905-
hsc->add_child(vbc);
922+
vbc->set_v_size_flags(Control::SIZE_EXPAND_FILL);
923+
right_vsc->add_child(vbc);
906924

907925
search_box = memnew(LineEdit);
908926
search_box->set_accessibility_name(TTRC("Search"));
@@ -929,11 +947,18 @@ CreateDialog::CreateDialog() {
929947
search_options->connect("button_clicked", callable_mp(this, &CreateDialog::_script_button_clicked));
930948
vbc->add_margin_child(TTR("Matches:"), search_options, true);
931949

950+
VBoxContainer *desc_vb = memnew(VBoxContainer);
951+
right_vsc->add_child(desc_vb);
952+
932953
help_bit = memnew(EditorHelpBit);
933954
help_bit->set_accessibility_name(TTRC("Description:"));
934955
help_bit->set_content_height_limits(80 * EDSCALE, 80 * EDSCALE);
935956
help_bit->connect("request_hide", callable_mp(this, &CreateDialog::_hide_requested));
936-
vbc->add_margin_child(TTR("Description:"), help_bit);
957+
desc_vb->add_margin_child(TTR("Description:"), help_bit, true);
958+
959+
RichTextLabel* bit_content = cast_to<RichTextLabel>(help_bit->get_child(1));
960+
bit_content->set_v_size_flags(Control::SizeFlags::SIZE_EXPAND_FILL);
961+
right_vsc->connect("dragged", callable_mp(this, &CreateDialog::_description_dragged).bind(right_vsc));
937962

938963
register_text_enter(search_box);
939964
set_hide_on_ok(false);

editor/gui/create_dialog.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "scene/gui/dialogs.h"
4444
#include "scene/gui/item_list.h"
4545
#include "scene/gui/line_edit.h"
46+
#include "scene/gui/split_container.h"
4647
#include "scene/gui/tree.h"
4748

4849
class CreateDialog : public ConfirmationDialog {
@@ -116,6 +117,8 @@ class CreateDialog : public ConfirmationDialog {
116117
bool _is_class_disabled_by_feature_profile(const StringName &p_class) const;
117118
void _load_favorites_and_history();
118119

120+
void _description_dragged(float p_offset, VSplitContainer *p_vsc);
121+
119122
protected:
120123
void _notification(int p_what);
121124
static void _bind_methods();

0 commit comments

Comments
 (0)