You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Better search for SectionedPropertyEditor, added "All" section
This commit is contained in:
@@ -3777,6 +3777,10 @@ class SectionedPropertyEditorFilter : public Object {
|
||||
for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
|
||||
|
||||
PropertyInfo pi=E->get();
|
||||
|
||||
if (section=="")
|
||||
p_list->push_back(pi);
|
||||
|
||||
int sp = pi.name.find("/");
|
||||
if (sp!=-1) {
|
||||
String ss = pi.name.substr(0,sp);
|
||||
@@ -3786,7 +3790,7 @@ class SectionedPropertyEditorFilter : public Object {
|
||||
p_list->push_back(pi);
|
||||
}
|
||||
} else {
|
||||
if (section=="")
|
||||
if (section=="global")
|
||||
p_list->push_back(pi);
|
||||
}
|
||||
}
|
||||
@@ -3811,10 +3815,18 @@ public:
|
||||
|
||||
};
|
||||
|
||||
void SectionedPropertyEditor::_notification(int p_what) {
|
||||
|
||||
if (p_what==NOTIFICATION_ENTER_TREE) {
|
||||
|
||||
clear_button->set_icon(get_icon("Close", "EditorIcons"));
|
||||
}
|
||||
}
|
||||
|
||||
void SectionedPropertyEditor::_bind_methods() {
|
||||
|
||||
ObjectTypeDB::bind_method("_section_selected",&SectionedPropertyEditor::_section_selected);
|
||||
ObjectTypeDB::bind_method("_clear_search_box",&SectionedPropertyEditor::clear_search_box);
|
||||
}
|
||||
|
||||
void SectionedPropertyEditor::_section_selected(int p_which) {
|
||||
@@ -3822,9 +3834,30 @@ void SectionedPropertyEditor::_section_selected(int p_which) {
|
||||
filter->set_section( sections->get_item_metadata(p_which) );
|
||||
}
|
||||
|
||||
void SectionedPropertyEditor::clear_search_box() {
|
||||
|
||||
if (search_box->get_text().strip_edges()=="")
|
||||
return;
|
||||
|
||||
search_box->clear();
|
||||
editor->update_tree();
|
||||
}
|
||||
|
||||
|
||||
String SectionedPropertyEditor::get_current_section() const {
|
||||
|
||||
return sections->get_item_metadata( sections->get_current() );
|
||||
String section = sections->get_item_metadata( sections->get_current() );
|
||||
|
||||
if (section=="") {
|
||||
String name = editor->get_selected_path();
|
||||
|
||||
int sp = name.find("/");
|
||||
if (sp!=-1)
|
||||
section = name.substr(0, sp);
|
||||
|
||||
}
|
||||
|
||||
return section;
|
||||
}
|
||||
|
||||
String SectionedPropertyEditor::get_full_item_path(const String& p_item) {
|
||||
@@ -3844,11 +3877,20 @@ void SectionedPropertyEditor::edit(Object* p_object) {
|
||||
sections->clear();
|
||||
|
||||
Set<String> existing_sections;
|
||||
|
||||
existing_sections.insert("");
|
||||
sections->add_item("All");
|
||||
sections->set_item_metadata(0, "");
|
||||
|
||||
for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
|
||||
|
||||
PropertyInfo pi=E->get();
|
||||
|
||||
if (pi.usage&PROPERTY_USAGE_CATEGORY)
|
||||
continue;
|
||||
if ( !(pi.usage&PROPERTY_USAGE_EDITOR) )
|
||||
continue;
|
||||
|
||||
if (pi.name.find(":")!=-1 || pi.name=="script/script")
|
||||
continue;
|
||||
int sp = pi.name.find("/");
|
||||
@@ -3861,10 +3903,10 @@ void SectionedPropertyEditor::edit(Object* p_object) {
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!existing_sections.has("")) {
|
||||
existing_sections.insert("");
|
||||
if (!existing_sections.has("global")) {
|
||||
existing_sections.insert("global");
|
||||
sections->add_item("Global");
|
||||
sections->set_item_metadata(sections->get_item_count()-1,"");
|
||||
sections->set_item_metadata(sections->get_item_count()-1,"global");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3889,6 +3931,8 @@ PropertyEditor *SectionedPropertyEditor::get_property_editor() {
|
||||
|
||||
SectionedPropertyEditor::SectionedPropertyEditor() {
|
||||
|
||||
add_constant_override("separation", 8);
|
||||
|
||||
VBoxContainer *left_vb = memnew( VBoxContainer);
|
||||
left_vb->set_custom_minimum_size(Size2(160,0));
|
||||
add_child(left_vb);
|
||||
@@ -3903,7 +3947,21 @@ SectionedPropertyEditor::SectionedPropertyEditor() {
|
||||
add_child(right_vb);
|
||||
|
||||
filter = memnew( SectionedPropertyEditorFilter );
|
||||
|
||||
HBoxContainer *hbc = memnew( HBoxContainer );
|
||||
right_vb->add_margin_child("Search:",hbc);
|
||||
|
||||
search_box = memnew( LineEdit );
|
||||
search_box->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||
hbc->add_child(search_box);
|
||||
|
||||
clear_button = memnew( ToolButton );
|
||||
hbc->add_child(clear_button);
|
||||
clear_button->connect("pressed", this, "_clear_search_box");
|
||||
|
||||
editor = memnew( PropertyEditor );
|
||||
editor->register_text_enter(search_box);
|
||||
editor->set_use_filter(true);
|
||||
editor->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
right_vb->add_margin_child("Properties:",editor,true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user