forked from mia/Aegisub
Rework handling of copied styles in the style manager a bit
Generate the new name in the style manager rather than the editor so that the naming scheme of copies is consistent between the Copy buttons and pasting styles. Name the second copy of style X "X - Copy (2)" rather than "X - Copy - Copy", and so on for further copies. (Copies of style "X - Copy" would still be named "X - Copy - Copy"). Select the new style when a copy is created. Originally committed to SVN as r6536.
This commit is contained in:
parent
366baff2f8
commit
f4e1b28c9f
3 changed files with 52 additions and 22 deletions
|
@ -78,17 +78,17 @@ static wxTextCtrl *num_text_ctrl(wxWindow *parent, double value, wxSize size = w
|
||||||
return new wxTextCtrl(parent, -1, "", wxDefaultPosition, size, 0, NumValidator(value));
|
return new wxTextCtrl(parent, -1, "", wxDefaultPosition, size, 0, NumValidator(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Context *c, AssStyleStorage *store, bool copy_style)
|
DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Context *c, AssStyleStorage *store, wxString const& new_name)
|
||||||
: wxDialog (parent, -1, _("Style Editor"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER, "DialogStyleEditor")
|
: wxDialog (parent, -1, _("Style Editor"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||||
, c(c)
|
, c(c)
|
||||||
, is_new(false)
|
, is_new(false)
|
||||||
, style(style)
|
, style(style)
|
||||||
, store(store)
|
, store(store)
|
||||||
{
|
{
|
||||||
if (copy_style) {
|
if (new_name.size()) {
|
||||||
is_new = true;
|
is_new = true;
|
||||||
style = this->style = new AssStyle(*style);
|
style = this->style = new AssStyle(*style);
|
||||||
style->name = wxString::Format(_("%s - Copy"), style->name);
|
style->name = new_name;
|
||||||
}
|
}
|
||||||
else if (!style) {
|
else if (!style) {
|
||||||
is_new = true;
|
is_new = true;
|
||||||
|
@ -346,6 +346,10 @@ DialogStyleEditor::~DialogStyleEditor() {
|
||||||
delete style;
|
delete style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString DialogStyleEditor::GetStyleName() const {
|
||||||
|
return style->name;
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief Update appearances of a renamed style in \r tags
|
/// @brief Update appearances of a renamed style in \r tags
|
||||||
static void ReplaceStyle(wxString tag, int, AssOverrideParameter* param, void *userData) {
|
static void ReplaceStyle(wxString tag, int, AssOverrideParameter* param, void *userData) {
|
||||||
wxArrayString strings = *((wxArrayString*)userData);
|
wxArrayString strings = *((wxArrayString*)userData);
|
||||||
|
|
|
@ -155,6 +155,8 @@ class DialogStyleEditor : public wxDialog {
|
||||||
void OnSetColor(int n, wxCommandEvent& evt);
|
void OnSetColor(int n, wxCommandEvent& evt);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Context *c, AssStyleStorage *store, bool copy_style);
|
DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Context *c, AssStyleStorage *store = 0, wxString const& new_name = "");
|
||||||
~DialogStyleEditor();
|
~DialogStyleEditor();
|
||||||
|
|
||||||
|
wxString GetStyleName() const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -66,6 +66,8 @@
|
||||||
#include "standard_paths.h"
|
#include "standard_paths.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
using std::tr1::placeholders::_1;
|
||||||
|
|
||||||
static wxBitmapButton *add_bitmap_button(wxWindow *parent, wxSizer *sizer, wxBitmap const& img, wxString const& tooltip) {
|
static wxBitmapButton *add_bitmap_button(wxWindow *parent, wxSizer *sizer, wxBitmap const& img, wxString const& tooltip) {
|
||||||
wxBitmapButton *btn = new wxBitmapButton(parent, -1, img);
|
wxBitmapButton *btn = new wxBitmapButton(parent, -1, img);
|
||||||
btn->SetToolTip(tooltip);
|
btn->SetToolTip(tooltip);
|
||||||
|
@ -372,7 +374,7 @@ void DialogStyleManager::OnStorageEdit() {
|
||||||
int n = StorageList->GetSelections(selections);
|
int n = StorageList->GetSelections(selections);
|
||||||
if (n == 1) {
|
if (n == 1) {
|
||||||
AssStyle *selStyle = styleStorageMap[selections[0]];
|
AssStyle *selStyle = styleStorageMap[selections[0]];
|
||||||
DialogStyleEditor(this, selStyle, c, &Store, false).ShowModal();
|
DialogStyleEditor(this, selStyle, c, &Store).ShowModal();
|
||||||
StorageList->SetString(selections[0],selStyle->name);
|
StorageList->SetString(selections[0],selStyle->name);
|
||||||
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
||||||
}
|
}
|
||||||
|
@ -384,7 +386,7 @@ void DialogStyleManager::OnCurrentEdit() {
|
||||||
int n = CurrentList->GetSelections(selections);
|
int n = CurrentList->GetSelections(selections);
|
||||||
if (n == 1) {
|
if (n == 1) {
|
||||||
AssStyle *selStyle = styleMap[selections[0]];
|
AssStyle *selStyle = styleMap[selections[0]];
|
||||||
DialogStyleEditor(this, selStyle, c, 0, false).ShowModal();
|
DialogStyleEditor(this, selStyle, c).ShowModal();
|
||||||
CurrentList->SetString(selections[0],selStyle->name);
|
CurrentList->SetString(selections[0],selStyle->name);
|
||||||
}
|
}
|
||||||
UpdateButtons();
|
UpdateButtons();
|
||||||
|
@ -452,15 +454,32 @@ void DialogStyleManager::OnCopyToCurrent() {
|
||||||
UpdateButtons();
|
UpdateButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class Func>
|
||||||
|
static wxString unique_name(Func name_checker, wxString const& source_name) {
|
||||||
|
if (name_checker(source_name)) {
|
||||||
|
wxString name = wxString::Format(_("%s - Copy"), source_name);
|
||||||
|
for (int i = 2; name_checker(name); ++i)
|
||||||
|
name = wxString::Format(_("%s - Copy (%d)"), source_name, i);
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
return source_name;
|
||||||
|
}
|
||||||
|
|
||||||
void DialogStyleManager::OnStorageCopy() {
|
void DialogStyleManager::OnStorageCopy() {
|
||||||
wxArrayInt selections;
|
wxArrayInt selections;
|
||||||
StorageList->GetSelections(selections);
|
StorageList->GetSelections(selections);
|
||||||
if (selections.empty()) return;
|
if (selections.empty()) return;
|
||||||
|
|
||||||
DialogStyleEditor(this, styleStorageMap[selections[0]], c, &Store, true).ShowModal();
|
AssStyle *s = styleStorageMap[selections[0]];
|
||||||
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
DialogStyleEditor editor(this, s, c, &Store,
|
||||||
LoadStorageStyles();
|
unique_name(bind(&AssStyleStorage::GetStyle, &Store, _1), s->name));
|
||||||
UpdateButtons();
|
|
||||||
|
if (editor.ShowModal()) {
|
||||||
|
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
||||||
|
LoadStorageStyles();
|
||||||
|
StorageList->SetStringSelection(editor.GetStyleName());
|
||||||
|
UpdateButtons();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogStyleManager::OnCurrentCopy() {
|
void DialogStyleManager::OnCurrentCopy() {
|
||||||
|
@ -468,9 +487,15 @@ void DialogStyleManager::OnCurrentCopy() {
|
||||||
CurrentList->GetSelections(selections);
|
CurrentList->GetSelections(selections);
|
||||||
if (selections.empty()) return;
|
if (selections.empty()) return;
|
||||||
|
|
||||||
DialogStyleEditor(this, styleMap[selections[0]], c, 0, true).ShowModal();
|
AssStyle *s = styleMap[selections[0]];
|
||||||
LoadCurrentStyles(c->ass);
|
DialogStyleEditor editor(this, s, c, 0,
|
||||||
UpdateButtons();
|
unique_name(bind(&AssFile::GetStyle, c->ass, _1), s->name));
|
||||||
|
|
||||||
|
if (editor.ShowModal()) {
|
||||||
|
LoadCurrentStyles(c->ass);
|
||||||
|
CurrentList->SetStringSelection(editor.GetStyleName());
|
||||||
|
UpdateButtons();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogStyleManager::CopyToClipboard(wxListBox *list, std::vector<AssStyle*> v) {
|
void DialogStyleManager::CopyToClipboard(wxListBox *list, std::vector<AssStyle*> v) {
|
||||||
|
@ -510,8 +535,7 @@ static void add_styles(Func1 name_checker, Func2 style_adder) {
|
||||||
while (st.HasMoreTokens()) {
|
while (st.HasMoreTokens()) {
|
||||||
try {
|
try {
|
||||||
AssStyle *s = new AssStyle(st.GetNextToken().Trim(true));
|
AssStyle *s = new AssStyle(st.GetNextToken().Trim(true));
|
||||||
while (name_checker(s->name))
|
s->name = unique_name(name_checker, s->name);
|
||||||
s->name = "Copy of " + s->name;
|
|
||||||
style_adder(s);
|
style_adder(s);
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
|
@ -522,8 +546,8 @@ static void add_styles(Func1 name_checker, Func2 style_adder) {
|
||||||
|
|
||||||
void DialogStyleManager::PasteToCurrent() {
|
void DialogStyleManager::PasteToCurrent() {
|
||||||
add_styles(
|
add_styles(
|
||||||
bind(&AssFile::GetStyle, c->ass, std::tr1::placeholders::_1),
|
bind(&AssFile::GetStyle, c->ass, _1),
|
||||||
bind(&AssFile::InsertStyle, c->ass, std::tr1::placeholders::_1));
|
bind(&AssFile::InsertStyle, c->ass, _1));
|
||||||
|
|
||||||
LoadCurrentStyles(c->ass);
|
LoadCurrentStyles(c->ass);
|
||||||
c->ass->Commit(_("style paste"), AssFile::COMMIT_STYLES);
|
c->ass->Commit(_("style paste"), AssFile::COMMIT_STYLES);
|
||||||
|
@ -531,8 +555,8 @@ void DialogStyleManager::PasteToCurrent() {
|
||||||
|
|
||||||
void DialogStyleManager::PasteToStorage() {
|
void DialogStyleManager::PasteToStorage() {
|
||||||
add_styles(
|
add_styles(
|
||||||
bind(&AssStyleStorage::GetStyle, &Store, std::tr1::placeholders::_1),
|
bind(&AssStyleStorage::GetStyle, &Store, _1),
|
||||||
bind(&std::list<AssStyle*>::push_back, &Store.style, std::tr1::placeholders::_1));
|
bind(&std::list<AssStyle*>::push_back, &Store.style, _1));
|
||||||
|
|
||||||
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
||||||
LoadStorageStyles();
|
LoadStorageStyles();
|
||||||
|
@ -540,14 +564,14 @@ void DialogStyleManager::PasteToStorage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogStyleManager::OnStorageNew() {
|
void DialogStyleManager::OnStorageNew() {
|
||||||
DialogStyleEditor(this, 0, c, &Store, false).ShowModal();
|
DialogStyleEditor(this, 0, c, &Store).ShowModal();
|
||||||
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
|
||||||
LoadStorageStyles();
|
LoadStorageStyles();
|
||||||
UpdateButtons();
|
UpdateButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogStyleManager::OnCurrentNew() {
|
void DialogStyleManager::OnCurrentNew() {
|
||||||
DialogStyleEditor(this,0, c, 0, false).ShowModal();
|
DialogStyleEditor(this, 0, c, 0).ShowModal();
|
||||||
LoadCurrentStyles(c->ass);
|
LoadCurrentStyles(c->ass);
|
||||||
UpdateButtons();
|
UpdateButtons();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue