From a0ade19643abcc340040c83db0d6947f3f2b13bc Mon Sep 17 00:00:00 2001 From: Karl Blomster Date: Sun, 19 Jul 2009 18:36:43 +0000 Subject: [PATCH] Merge revisions r3160-r3163 (styles manager bug fixes) into the 2.1.8 branch. Originally committed to SVN as r3171. --- aegisub/src/dialog_style_editor.cpp | 17 +----- aegisub/src/dialog_style_manager.cpp | 91 ++++++++++++---------------- 2 files changed, 42 insertions(+), 66 deletions(-) diff --git a/aegisub/src/dialog_style_editor.cpp b/aegisub/src/dialog_style_editor.cpp index 5a3db7954..868ea393c 100644 --- a/aegisub/src/dialog_style_editor.cpp +++ b/aegisub/src/dialog_style_editor.cpp @@ -436,21 +436,8 @@ void DialogStyleEditor::Apply (bool apply,bool close) { // Check if style name is unique for (unsigned int i=0;iass->GetStyle(styles[i]) != style) ok = false; - } - - // Storage - else { - if (store->GetStyle(styles[i]) != style) ok = false; - } - - // Repeated name - if (!ok) { + if (newStyleName.CmpNoCase(styles[i]) == 0) { + if ((isLocal && (grid->ass->GetStyle(styles[i]) != style)) || (!isLocal && (store->GetStyle(styles[i]) != style))) { wxMessageBox(_T("There is already a style with this name. Please choose another name."),_T("Style name conflict."),wxICON_ERROR); return; } diff --git a/aegisub/src/dialog_style_manager.cpp b/aegisub/src/dialog_style_manager.cpp index 6a5eb7a35..a3eb57621 100644 --- a/aegisub/src/dialog_style_manager.cpp +++ b/aegisub/src/dialog_style_manager.cpp @@ -559,26 +559,22 @@ void DialogStyleManager::OnCopyToStorage (wxCommandEvent &event) { wxArrayInt selections; int n = CurrentList->GetSelections(selections); - AssStyle *temp; - for (int i=0;iFindString(CurrentList->GetString(selections[i]), true); - if (test == wxNOT_FOUND) { - temp = new AssStyle; - *temp = *styleMap.at(selections[i]); - Store.style.push_back(temp); - } - else { - int answer = wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current storage. Proceed and overwrite anyway?"),CurrentList->GetString(selections[i]).c_str()),_T("Style name collision."),wxYES_NO); - if (answer == wxYES) { - // Remove the old style - temp = styleStorageMap.at(selections[i]); - Store.style.remove(temp); - // And save the new one instead - temp = new AssStyle; - *temp = *styleMap.at(selections[i]); - Store.style.push_back(temp); + for (int i = 0; i < n; i++) { + wxString styleName = CurrentList->GetString(selections[i]); + bool addStyle = true; + + for (std::list::iterator style = Store.style.begin(); style != Store.style.end(); ++style) { + if ((*style)->name.CmpNoCase(styleName) == 0) { + addStyle = false; + if (wxYES == wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current storage. Proceed and overwrite anyway?"),styleName), _T("Style name collision."), wxYES_NO)) { + **style = *styleMap.at(selections[i]); + } + break; } - // else do nothing + } + if (addStyle) { + AssStyle *temp = new AssStyle(*styleMap.at(selections[i])); + Store.style.push_back(temp); } } Store.Save(CatalogList->GetString(CatalogList->GetSelection())); @@ -592,29 +588,23 @@ void DialogStyleManager::OnCopyToStorage (wxCommandEvent &event) { void DialogStyleManager::OnCopyToCurrent (wxCommandEvent &event) { wxArrayInt selections; int n = StorageList->GetSelections(selections); - AssStyle *temp; - for (int i=0;iFindString(StorageList->GetString(selections[i]), false); - bool proceed = false; - if (test == wxNOT_FOUND) - proceed = true; - 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); - if (answer == wxYES) proceed = true; + for (int i = 0; i < n; i++) { + wxString styleName = StorageList->GetString(selections[i]); + bool addStyle = true; + + for (std::vector::iterator style = styleMap.begin(); style != styleMap.end(); ++style) { + if ((*style)->name.CmpNoCase(styleName) == 0) { + addStyle = false; + if (wxYES == wxMessageBox(wxString::Format(_T("There is already a style with the name \"%s\" on the current script. Proceed and overwrite anyway?"),styleName), _T("Style name collision."), wxYES_NO)) { + **style = *styleStorageMap.at(selections[i]); + } + break; + } } - - // 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) { - temp = new AssStyle; - *temp = *styleStorageMap.at(selections[i]); + if (addStyle) { + AssStyle *temp = new AssStyle(*styleStorageMap.at(selections[i])); AssFile::top->InsertStyle(temp); } - - // Return - else return; } LoadCurrentStyles(AssFile::top); grid->ass->FlagAsModified(_("style copy")); @@ -628,9 +618,8 @@ void DialogStyleManager::OnCopyToCurrent (wxCommandEvent &event) { void DialogStyleManager::OnStorageCopy (wxCommandEvent &event) { wxArrayInt selections; StorageList->GetSelections(selections); - AssStyle *temp = new AssStyle; + AssStyle *temp = new AssStyle(*(styleStorageMap.at(selections[0]))); - *temp = *(styleStorageMap.at(selections[0])); wxString newName = _("Copy of "); newName += temp->name; temp->name = newName; @@ -1095,17 +1084,17 @@ void DialogStyleManager::MoveStyles(bool storage, int type) { } // Get sorted list - wxArrayString stylNames; - for (int i=0;iat(i)->name.Lower()); - stylNames.Sort(); - AssStyle *curStyl; + wxArrayString styleNames; + for (int i=0; i < nStyles; i++) styleNames.Add(srcStyls->at(i)->name); + styleNames.Sort(); - // Find each and copy it - for (int i=0;iat(j); - if (curStyl->name.Lower() == stylNames[i]) { - styls.push_back(curStyl); + std::list styles(srcStyls->begin(), srcStyls->end()); + for (int i = 0; i < nStyles; i++) { + for (std::list::iterator style = styles.begin(); style != styles.end(); style++) { + if ((*style)->name == styleNames[i]) { + styls.push_back(*style); + styles.erase(style); + break; } } }