void InitialInstancesPropgridHelper::OnPropertySelected(const std::vector<gd::InitialInstance*> & selectedInitialInstances, wxPropertyGridEvent& event) { if ( grid == NULL ) return; if ( event.GetColumn() == 1) //Manage button-like properties { if ( selectedInitialInstances.empty() ) return; if ( event.GetPropertyName() == "INSTANCE_VARIABLES" ) { gd::ChooseVariableDialog dialog(NULL, selectedInitialInstances[0]->GetVariables(), true); dialog.ShowModal(); grid->SetPropertyLabel("INSTANCE_VARIABLES", _("Variables") + " (" + gd::String::From(selectedInitialInstances[0]->GetVariables().Count()) + ")"); } } }
bool ObjectsPropgridHelper::OnPropertySelected(gd::Object * object, gd::Layout * layout, wxPropertyGridEvent& event) { if ( !grid || !object ) return false; //Check if the object is global bool globalObject = false; for (std::size_t i = 0;i<project.GetObjectsCount();++i) { if ( &project.GetObject(i) == object ) { globalObject = true; break; } } if ( event.GetColumn() == 1) //Manage button-like properties { if ( event.GetPropertyName() == _("Edit") ) { object->EditObject(grid, project, mainFrameWrapper); for ( std::size_t j = 0; j < project.GetUsedPlatforms().size();++j) project.GetUsedPlatforms()[j]->GetChangesNotifier().OnObjectEdited(project, globalObject ? NULL : layout, *object); //Reload resources : Do not forget to switch the working directory. wxString oldWorkingDir = wxGetCwd(); if ( wxDirExists(wxFileName::FileName(project.GetProjectFile()).GetPath())) wxSetWorkingDirectory(wxFileName::FileName(project.GetProjectFile()).GetPath()); if (layout) object->LoadResources(project, *layout); wxSetWorkingDirectory(oldWorkingDir); } else if ( event.GetPropertyName() == _("Help")) { auto metadata = gd::MetadataProvider::GetObjectMetadata(project.GetCurrentPlatform(), object->GetType()); gd::HelpFileAccess::Get()->OpenPage(metadata.GetHelpUrl()); } else if ( event.GetPropertyName() == _("Variables") ) { gd::ChooseVariableDialog dialog(grid, object->GetVariables(), true); dialog.SetAssociatedObject(&project, layout, object); if ( dialog.ShowModal() == 1 ) { for ( std::size_t j = 0; j < project.GetUsedPlatforms().size();++j) project.GetUsedPlatforms()[j]->GetChangesNotifier().OnObjectVariablesChanged(project, globalObject ? NULL : layout, *object); //Update the grid: if ( grid->GetProperty("OBJECT_VARIABLES_CATEGORY") != NULL) grid->SetPropertyLabel("OBJECT_VARIABLES_CATEGORY", _("Object variables") + " (" + gd::String::From(object->GetVariables().Count()) + ")"); } } else if ( event.GetPropertyName() == "AUTO_ADD" ) { return gd::ChooseBehaviorTypeDialog::ChooseAndAddBehaviorToObject(grid, project, object, layout, globalObject); } else if ( event.GetPropertyName() == "AUTO_REMOVE" ) { //Create behavior array wxArrayString behaviorsStr; //Fill array std::vector <gd::String> behaviors = object->GetAllBehaviorNames(); for (std::size_t i = 0;i<behaviors.size();++i) behaviorsStr.Add(object->GetBehavior(behaviors[i]).GetName()); int selection = wxGetSingleChoiceIndex(_("Choose the behavior to delete"), _("Choose the behavior to delete"), behaviorsStr); if ( selection == -1 ) return false; object->RemoveBehavior(behaviors[selection]); UpdateBehaviorsSharedData(project, globalObject ? NULL : layout); for ( std::size_t j = 0; j < project.GetUsedPlatforms().size();++j) project.GetUsedPlatforms()[j]->GetChangesNotifier().OnBehaviorDeleted(project, globalObject ? NULL : layout, *object, behaviors[selection]); return true; } else if ( event.GetPropertyName().substr(0,12) == "AUTO_RENAME:" ) { event.Veto(); gd::String oldName = event.GetPropertyName().substr(12); if ( !object->HasBehaviorNamed(oldName)) return true; gd::Behavior & behavior = object->GetBehavior(oldName); gd::String newName = wxGetTextFromUser(_("Enter a new name for the behavior"), _("Rename a behavior"), behavior.GetName()); if ( newName == behavior.GetName() || object->HasBehaviorNamed(newName) || newName.empty() ) return false; object->RenameBehavior(oldName, newName); UpdateBehaviorsSharedData(project, globalObject ? NULL : layout); for ( std::size_t j = 0; j < project.GetUsedPlatforms().size();++j) project.GetUsedPlatforms()[j]->GetChangesNotifier().OnBehaviorRenamed(project, globalObject ? NULL : layout, *object, behavior, oldName); return true; } else if ( event.GetPropertyName().substr(0,5) == "AUTO:" ) { event.Veto(); gd::String autoName = event.GetPropertyName().substr(5); if ( !object->HasBehaviorNamed(autoName)) return true; gd::Behavior & behavior = object->GetBehavior(autoName); behavior.EditBehavior(grid, project, layout, mainFrameWrapper); //EditBehavior always need a valid layout! for ( std::size_t j = 0; j < project.GetUsedPlatforms().size();++j) project.GetUsedPlatforms()[j]->GetChangesNotifier().OnBehaviorEdited(project, globalObject ? NULL : layout, *object, behavior); } } return false; }