Fix a crash when importing styles with names identical to ones existing on the script but with different case (they are now overwritten properly). Special thanks to ai-chan.
Originally committed to SVN as r2327.
This commit is contained in:
parent
dafc9dfe73
commit
91e1fb7f06
1 changed files with 15 additions and 8 deletions
|
@ -266,7 +266,7 @@ void DialogStyleManager::LoadCatalog () {
|
||||||
StorageActions(false);
|
StorageActions(false);
|
||||||
wxString pickStyle = AssFile::top->GetScriptInfo(_T("Last Style Storage"));
|
wxString pickStyle = AssFile::top->GetScriptInfo(_T("Last Style Storage"));
|
||||||
if (pickStyle.IsEmpty()) pickStyle = _T("Default");
|
if (pickStyle.IsEmpty()) pickStyle = _T("Default");
|
||||||
int opt = CatalogList->FindString(pickStyle);
|
int opt = CatalogList->FindString(pickStyle, false);
|
||||||
if (opt != wxNOT_FOUND) {
|
if (opt != wxNOT_FOUND) {
|
||||||
CatalogList->SetSelection(opt);
|
CatalogList->SetSelection(opt);
|
||||||
wxCommandEvent dummy;
|
wxCommandEvent dummy;
|
||||||
|
@ -423,8 +423,8 @@ void DialogStyleManager::OnCatalogNew (wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure that there is no storage with the same name
|
// Make sure that there is no storage with the same name (case insensitive search since Windows filenames are case insensitive)
|
||||||
if (CatalogList->FindString(name) != wxNOT_FOUND) {
|
if (CatalogList->FindString(name, false) != wxNOT_FOUND) {
|
||||||
wxMessageBox(_("A catalog with that name already exists."),_("Catalog name conflict"),wxICON_ERROR);
|
wxMessageBox(_("A catalog with that name already exists."),_("Catalog name conflict"),wxICON_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -555,7 +555,7 @@ void DialogStyleManager::OnCopyToStorage (wxCommandEvent &event) {
|
||||||
int n = CurrentList->GetSelections(selections);
|
int n = CurrentList->GetSelections(selections);
|
||||||
AssStyle *temp;
|
AssStyle *temp;
|
||||||
for (int i=0;i<n;i++) {
|
for (int i=0;i<n;i++) {
|
||||||
int test = StorageList->FindString(CurrentList->GetString(selections[i]));
|
int test = StorageList->FindString(CurrentList->GetString(selections[i]), true);
|
||||||
if (test == wxNOT_FOUND) {
|
if (test == wxNOT_FOUND) {
|
||||||
temp = new AssStyle;
|
temp = new AssStyle;
|
||||||
*temp = *styleMap.at(selections[i]);
|
*temp = *styleMap.at(selections[i]);
|
||||||
|
@ -589,14 +589,18 @@ void DialogStyleManager::OnCopyToCurrent (wxCommandEvent &event) {
|
||||||
AssStyle *temp;
|
AssStyle *temp;
|
||||||
for (int i=0;i<n;i++) {
|
for (int i=0;i<n;i++) {
|
||||||
// Check if there is already a style with that name
|
// Check if there is already a style with that name
|
||||||
int test = CurrentList->FindString(StorageList->GetString(selections[i]));
|
int test = CurrentList->FindString(StorageList->GetString(selections[i]), false);
|
||||||
bool proceed = test==-1;
|
bool proceed = false;
|
||||||
|
if (test == wxNOT_FOUND)
|
||||||
|
proceed = true;
|
||||||
if (!proceed) {
|
if (!proceed) {
|
||||||
int answer = wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current script. Proceed anyway?"),StorageList->GetString(selections[i]).c_str()),_T("Style name collision."),wxYES_NO);
|
int answer = wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current script. Proceed anyway?"),StorageList->GetString(selections[i]).c_str()),_T("Style name collision."),wxYES_NO);
|
||||||
if (answer == wxYES) proceed = true;
|
if (answer == wxYES) proceed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy
|
// Copy
|
||||||
|
// FIXME: this doesn't overwrite the old style like most of the rest of the style copying functions do,
|
||||||
|
// it just inserts a new one with the same name. Bad usability.
|
||||||
if (proceed) {
|
if (proceed) {
|
||||||
temp = new AssStyle;
|
temp = new AssStyle;
|
||||||
*temp = *styleStorageMap.at(selections[i]);
|
*temp = *styleStorageMap.at(selections[i]);
|
||||||
|
@ -895,13 +899,16 @@ void DialogStyleManager::OnCurrentImport(wxCommandEvent &event) {
|
||||||
// Loop through selection
|
// Loop through selection
|
||||||
for (unsigned int i=0;i<selections.Count();i++) {
|
for (unsigned int i=0;i<selections.Count();i++) {
|
||||||
// Check if there is already a style with that name
|
// Check if there is already a style with that name
|
||||||
int test = CurrentList->FindString(styles[selections[i]]);
|
int test = CurrentList->FindString(styles[selections[i]], false);
|
||||||
if (test != wxNOT_FOUND) {
|
if (test != wxNOT_FOUND) {
|
||||||
int answer = wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current script. Overwrite?"),styles[selections[i]].c_str()),_T("Style name collision."),wxYES_NO);
|
int answer = wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current script. Overwrite?"),styles[selections[i]].c_str()),_T("Style name collision."),wxYES_NO);
|
||||||
if (answer == wxYES) {
|
if (answer == wxYES) {
|
||||||
// Overwrite
|
// Overwrite
|
||||||
modified = true;
|
modified = true;
|
||||||
*(AssFile::top->GetStyle(styles[selections[i]])) = *temp.GetStyle(styles[selections[i]]);
|
// The GetString->FindString mess is a silly workaround for the fact that to vsfilter
|
||||||
|
// (and the duplicate check a few lines above), style names aren't case sensitive, but to the
|
||||||
|
// rest of Aegisub they are.
|
||||||
|
*(AssFile::top->GetStyle(CurrentList->GetString(CurrentList->FindString(styles[selections[i]], false)))) = *temp.GetStyle(styles[selections[i]]);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue