Fix Project Settings dialog add/delete global variable
This commit is contained in:
parent
f8c666085e
commit
48524384d6
3 changed files with 81 additions and 28 deletions
|
@ -60,6 +60,8 @@ void ProjectSettings::_notification(int p_what) {
|
||||||
|
|
||||||
if (p_what==NOTIFICATION_ENTER_TREE) {
|
if (p_what==NOTIFICATION_ENTER_TREE) {
|
||||||
|
|
||||||
|
globals_editor->edit(Globals::get_singleton());
|
||||||
|
|
||||||
search_button->set_icon(get_icon("Zoom","EditorIcons"));
|
search_button->set_icon(get_icon("Zoom","EditorIcons"));
|
||||||
clear_button->set_icon(get_icon("Close","EditorIcons"));
|
clear_button->set_icon(get_icon("Close","EditorIcons"));
|
||||||
|
|
||||||
|
@ -566,8 +568,7 @@ void ProjectSettings::popup_project_settings() {
|
||||||
|
|
||||||
//popup_centered(Size2(500,400));
|
//popup_centered(Size2(500,400));
|
||||||
popup_centered_ratio();
|
popup_centered_ratio();
|
||||||
globals_editor->edit(NULL);
|
globals_editor->update_category_list();
|
||||||
globals_editor->edit(Globals::get_singleton());
|
|
||||||
_update_translations();
|
_update_translations();
|
||||||
_update_autoload();
|
_update_autoload();
|
||||||
plugin_settings->update_plugins();
|
plugin_settings->update_plugins();
|
||||||
|
@ -605,37 +606,45 @@ void ProjectSettings::_item_add() {
|
||||||
case 3: value=""; break;
|
case 3: value=""; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
String catname = category->get_text();
|
String catname = category->get_text().strip_edges();
|
||||||
/*if (!catname.is_valid_identifier()) {
|
/*if (!catname.is_valid_identifier()) {
|
||||||
message->set_text("Invalid Category.\nValid characters: a-z,A-Z,0-9 or _");
|
message->set_text("Invalid Category.\nValid characters: a-z,A-Z,0-9 or _");
|
||||||
message->popup_centered(Size2(300,100));
|
message->popup_centered(Size2(300,100));
|
||||||
return;
|
return;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
String propname = property->get_text();
|
String propname = property->get_text().strip_edges();
|
||||||
/*if (!propname.is_valid_identifier()) {
|
/*if (!propname.is_valid_identifier()) {
|
||||||
message->set_text("Invalid Property.\nValid characters: a-z,A-Z,0-9 or _");
|
message->set_text("Invalid Property.\nValid characters: a-z,A-Z,0-9 or _");
|
||||||
message->popup_centered(Size2(300,100));
|
message->popup_centered(Size2(300,100));
|
||||||
return;
|
return;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
String name = catname+"/"+propname;
|
String name = catname!="" ? catname+"/"+propname : propname;
|
||||||
|
|
||||||
Globals::get_singleton()->set(name,value);
|
Globals::get_singleton()->set(name,value);
|
||||||
globals_editor->edit(NULL);
|
|
||||||
globals_editor->edit(Globals::get_singleton());
|
globals_editor->set_current_section(catname);
|
||||||
|
globals_editor->update_category_list();
|
||||||
|
|
||||||
|
_settings_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectSettings::_item_del() {
|
void ProjectSettings::_item_del() {
|
||||||
|
|
||||||
String catname = category->get_text();
|
String catname = category->get_text().strip_edges();
|
||||||
//ERR_FAIL_COND(!catname.is_valid_identifier());
|
//ERR_FAIL_COND(!catname.is_valid_identifier());
|
||||||
String propname = property->get_text();
|
String propname = property->get_text().strip_edges();
|
||||||
//ERR_FAIL_COND(!propname.is_valid_identifier());
|
//ERR_FAIL_COND(!propname.is_valid_identifier());
|
||||||
|
|
||||||
String name = catname+"/"+propname;
|
String name = catname!="" ? catname+"/"+propname : propname;
|
||||||
Globals::get_singleton()->set(name,Variant());
|
|
||||||
globals_editor->get_property_editor()->update_tree();
|
|
||||||
|
|
||||||
|
Globals::get_singleton()->set(name,Variant());
|
||||||
|
|
||||||
|
globals_editor->set_current_section(catname);
|
||||||
|
globals_editor->update_category_list();
|
||||||
|
|
||||||
|
_settings_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectSettings::_action_adds(String) {
|
void ProjectSettings::_action_adds(String) {
|
||||||
|
|
|
@ -3840,14 +3840,34 @@ void SectionedPropertyEditor::_section_selected(int p_which) {
|
||||||
filter->set_section( sections->get_item_metadata(p_which) );
|
filter->set_section( sections->get_item_metadata(p_which) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SectionedPropertyEditor::set_current_section(const String& p_section) {
|
||||||
|
|
||||||
|
int section_idx = sections->find_metadata(p_section);
|
||||||
|
|
||||||
|
if (section_idx==sections->get_current())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (section_idx!=-1) {
|
||||||
|
sections->select(section_idx);
|
||||||
|
_section_selected(section_idx);
|
||||||
|
} else if (sections->get_item_count()) {
|
||||||
|
sections->select(0);
|
||||||
|
_section_selected(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String SectionedPropertyEditor::get_current_section() const {
|
String SectionedPropertyEditor::get_current_section() const {
|
||||||
|
|
||||||
|
if (sections->get_current()!=-1)
|
||||||
return sections->get_item_metadata( sections->get_current() );
|
return sections->get_item_metadata( sections->get_current() );
|
||||||
|
else
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String SectionedPropertyEditor::get_full_item_path(const String& p_item) {
|
String SectionedPropertyEditor::get_full_item_path(const String& p_item) {
|
||||||
|
|
||||||
String base = sections->get_item_metadata( sections->get_current() );
|
String base = get_current_section();
|
||||||
|
|
||||||
if (base!="")
|
if (base!="")
|
||||||
return base+"/"+p_item;
|
return base+"/"+p_item;
|
||||||
else
|
else
|
||||||
|
@ -3856,17 +3876,44 @@ String SectionedPropertyEditor::get_full_item_path(const String& p_item) {
|
||||||
|
|
||||||
void SectionedPropertyEditor::edit(Object* p_object) {
|
void SectionedPropertyEditor::edit(Object* p_object) {
|
||||||
|
|
||||||
List<PropertyInfo> pinfo;
|
if (p_object) {
|
||||||
if (p_object)
|
obj=p_object->get_instance_ID();
|
||||||
p_object->get_property_list(&pinfo);
|
update_category_list();
|
||||||
|
} else {
|
||||||
sections->clear();
|
sections->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
filter->set_edited(p_object);
|
||||||
|
editor->edit(filter);
|
||||||
|
|
||||||
|
sections->select(0);
|
||||||
|
_section_selected(0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SectionedPropertyEditor::update_category_list() {
|
||||||
|
|
||||||
|
String selected_category=get_current_section();
|
||||||
|
sections->clear();
|
||||||
|
|
||||||
|
Object *o = ObjectDB::get_instance(obj);
|
||||||
|
|
||||||
|
if (!o)
|
||||||
|
return;
|
||||||
|
|
||||||
|
List<PropertyInfo> pinfo;
|
||||||
|
o->get_property_list(&pinfo);
|
||||||
|
|
||||||
Set<String> existing_sections;
|
Set<String> existing_sections;
|
||||||
for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
|
for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
|
||||||
|
|
||||||
PropertyInfo pi=E->get();
|
PropertyInfo pi=E->get();
|
||||||
|
|
||||||
if (pi.usage&PROPERTY_USAGE_CATEGORY)
|
if (pi.usage&PROPERTY_USAGE_CATEGORY)
|
||||||
continue;
|
continue;
|
||||||
|
else if ( !(pi.usage&PROPERTY_USAGE_EDITOR) )
|
||||||
|
continue;
|
||||||
|
|
||||||
if (pi.name.find(":")!=-1 || pi.name=="script/script")
|
if (pi.name.find(":")!=-1 || pi.name=="script/script")
|
||||||
continue;
|
continue;
|
||||||
int sp = pi.name.find("/");
|
int sp = pi.name.find("/");
|
||||||
|
@ -3885,19 +3932,9 @@ void SectionedPropertyEditor::edit(Object* p_object) {
|
||||||
sections->set_item_metadata(sections->get_item_count()-1,"");
|
sections->set_item_metadata(sections->get_item_count()-1,"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//sections->sort_items_by_text();
|
set_current_section(selected_category);
|
||||||
|
|
||||||
|
|
||||||
filter->set_edited(p_object);
|
|
||||||
editor->edit(filter);
|
|
||||||
|
|
||||||
sections->select(0);
|
|
||||||
_section_selected(0);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyEditor *SectionedPropertyEditor::get_property_editor() {
|
PropertyEditor *SectionedPropertyEditor::get_property_editor() {
|
||||||
|
|
|
@ -257,6 +257,9 @@ class SectionedPropertyEditor : public HBoxContainer {
|
||||||
|
|
||||||
|
|
||||||
OBJ_TYPE(SectionedPropertyEditor,HBoxContainer);
|
OBJ_TYPE(SectionedPropertyEditor,HBoxContainer);
|
||||||
|
|
||||||
|
ObjectID obj;
|
||||||
|
|
||||||
ItemList *sections;
|
ItemList *sections;
|
||||||
SectionedPropertyEditorFilter *filter;
|
SectionedPropertyEditorFilter *filter;
|
||||||
PropertyEditor *editor;
|
PropertyEditor *editor;
|
||||||
|
@ -270,8 +273,12 @@ public:
|
||||||
PropertyEditor *get_property_editor();
|
PropertyEditor *get_property_editor();
|
||||||
void edit(Object* p_object);
|
void edit(Object* p_object);
|
||||||
String get_full_item_path(const String& p_item);
|
String get_full_item_path(const String& p_item);
|
||||||
|
|
||||||
|
void set_current_section(const String& p_section);
|
||||||
String get_current_section() const;
|
String get_current_section() const;
|
||||||
|
|
||||||
|
void update_category_list();
|
||||||
|
|
||||||
SectionedPropertyEditor();
|
SectionedPropertyEditor();
|
||||||
~SectionedPropertyEditor();
|
~SectionedPropertyEditor();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue