diff --git a/aegisub/ass_dialogue.cpp b/aegisub/ass_dialogue.cpp index ca56a42f1..ad4f8cbb0 100644 --- a/aegisub/ass_dialogue.cpp +++ b/aegisub/ass_dialogue.cpp @@ -561,7 +561,7 @@ void AssDialogue::StripTag (wxString tagName) { // Look for blocks for (vector::iterator cur=Blocks.begin();cur!=Blocks.end();cur++) { - if ((*cur)->type == BLOCK_OVERRIDE) { + if ((*cur)->GetType() == BLOCK_OVERRIDE) { AssDialogueBlockOverride *over = AssDialogueBlock::GetAsOverride(*cur); wxString temp; for (size_t i=0;iTags.size();i++) { @@ -682,7 +682,7 @@ void AssDialogue::UpdateText () { using std::vector; Text = _T(""); for (vector::iterator cur=Blocks.begin();cur!=Blocks.end();cur++) { - if ((*cur)->type == BLOCK_OVERRIDE) { + if ((*cur)->GetType() == BLOCK_OVERRIDE) { Text += _T("{"); Text += (*cur)->GetText(); Text += _T("}"); @@ -737,7 +737,7 @@ void AssDialogue::ProcessParameters(void (*callback)(wxString tagName,int par_n, AssDialogueBlockOverride *curBlock; //ParseASSTags(); for (std::vector::iterator cur=Blocks.begin();cur!=Blocks.end();cur++) { - if ((*cur)->type == BLOCK_OVERRIDE) { + if ((*cur)->GetType() == BLOCK_OVERRIDE) { curBlock = static_cast (*cur); curBlock->ProcessParameters(callback,userData); } @@ -802,7 +802,6 @@ AssEntry *AssDialogue::Clone() { /////////////// // Constructor AssDialogueBlock::AssDialogueBlock () { - type = BLOCK_BASE; } @@ -818,7 +817,7 @@ AssDialogueBlock::~AssDialogueBlock () { // If it isn't a plain block, returns NULL AssDialogueBlockPlain *AssDialogueBlock::GetAsPlain(AssDialogueBlock *base) { if (!base) return NULL; - if (base->type == BLOCK_PLAIN) { + if (base->GetType() == BLOCK_PLAIN) { return static_cast (base); } return NULL; @@ -831,7 +830,7 @@ AssDialogueBlockPlain *AssDialogueBlock::GetAsPlain(AssDialogueBlock *base) { // If it isn't an override block, returns NULL AssDialogueBlockOverride *AssDialogueBlock::GetAsOverride(AssDialogueBlock *base) { if (!base) return NULL; - if (base->type == BLOCK_OVERRIDE) { + if (base->GetType() == BLOCK_OVERRIDE) { return static_cast (base); } return NULL; @@ -844,7 +843,7 @@ AssDialogueBlockOverride *AssDialogueBlock::GetAsOverride(AssDialogueBlock *base // If it isn't an drawing block, returns NULL AssDialogueBlockDrawing *AssDialogueBlock::GetAsDrawing(AssDialogueBlock *base) { if (!base) return NULL; - if (base->type == BLOCK_DRAWING) { + if (base->GetType() == BLOCK_DRAWING) { return static_cast (base); } return NULL; @@ -855,14 +854,6 @@ AssDialogueBlockDrawing *AssDialogueBlock::GetAsDrawing(AssDialogueBlock *base) /////////////// // Constructor AssDialogueBlockPlain::AssDialogueBlockPlain () { - type = BLOCK_PLAIN; -} - - -/////////////////// -// Return the text -wxString AssDialogueBlockPlain::GetText() { - return text; } @@ -870,14 +861,6 @@ wxString AssDialogueBlockPlain::GetText() { /////////////// // Constructor AssDialogueBlockDrawing::AssDialogueBlockDrawing () { - type = BLOCK_DRAWING; -} - - -/////////////////// -// Return the text -wxString AssDialogueBlockDrawing::GetText() { - return text; } diff --git a/aegisub/ass_dialogue.h b/aegisub/ass_dialogue.h index e48296432..528a72427 100644 --- a/aegisub/ass_dialogue.h +++ b/aegisub/ass_dialogue.h @@ -83,18 +83,16 @@ enum ASS_BlockType { // The GetText() method generates a new value for the "text" field from // the other fields in the specific class, and returns the new value. // -// TODO: Support for {\p#}...{\p0} -// class AssDialogueBlock { public: wxString text; - ASS_BlockType type; AssDialogue *parent; AssDialogueBlock(); virtual ~AssDialogueBlock(); - virtual wxString GetText() = 0; // make the class abstract + virtual ASS_BlockType GetType() = 0; + virtual wxString GetText() { return text; } static AssDialogueBlockPlain *GetAsPlain(AssDialogueBlock *base); // Returns a block base as a plain block if it is valid, null otherwise static AssDialogueBlockOverride *GetAsOverride(AssDialogueBlock *base); // Returns a block base as an override block if it is valid, null otherwise static AssDialogueBlockDrawing *GetAsDrawing(AssDialogueBlock *base); // Returns a block base as a drawing block if it is valid, null otherwise @@ -109,8 +107,8 @@ public: // class AssDialogueBlockPlain : public AssDialogueBlock { public: + ASS_BlockType GetType() { return BLOCK_PLAIN; } AssDialogueBlockPlain(); - wxString GetText(); }; @@ -124,9 +122,9 @@ class AssDialogueBlockDrawing : public AssDialogueBlock { public: int Scale; + ASS_BlockType GetType() { return BLOCK_DRAWING; } AssDialogueBlockDrawing(); void TransformCoords(int trans_x,int trans_y,double mult_x,double mult_y); - wxString GetText(); }; @@ -142,6 +140,7 @@ public: ~AssDialogueBlockOverride(); std::vector Tags; + ASS_BlockType GetType() { return BLOCK_OVERRIDE; } wxString GetText(); void ParseTags(); // Parses tags void ProcessParameters(void (*callback)(wxString,int,AssOverrideParameter*,void *),void *userData); diff --git a/aegisub/ass_file.cpp b/aegisub/ass_file.cpp index 9441871f0..c77189436 100644 --- a/aegisub/ass_file.cpp +++ b/aegisub/ass_file.cpp @@ -264,7 +264,7 @@ bool AssFile::CanSave() { if (curdiag) { curdiag->ParseASSTags(); for (size_t i=0;iBlocks.size();i++) { - if (curdiag->Blocks[i]->type != BLOCK_PLAIN) return false; + if (curdiag->Blocks[i]->GetType() != BLOCK_PLAIN) return false; } curdiag->ClearBlocks(); } diff --git a/aegisub/ass_karaoke.cpp b/aegisub/ass_karaoke.cpp index 0f0e9cc7c..85eed07d7 100644 --- a/aegisub/ass_karaoke.cpp +++ b/aegisub/ass_karaoke.cpp @@ -56,10 +56,9 @@ void ParseAssKaraokeTags(AssDialogue *line, AssKaraokeVector &syls) for (int i = 0; i < (int)line->Blocks.size(); i++) { AssDialogueBlock *block = line->Blocks[i]; - switch (block->type) { + switch (block->GetType()) { case BLOCK_BASE: - assert(block->type != BLOCK_BASE); break; case BLOCK_PLAIN: diff --git a/aegisub/ass_override.cpp b/aegisub/ass_override.cpp index 3fdb62306..840ce145e 100644 --- a/aegisub/ass_override.cpp +++ b/aegisub/ass_override.cpp @@ -83,7 +83,6 @@ void AssOverrideParameter::operator= (const AssOverrideParameter ¶m) { /////////////// // Constructor AssDialogueBlockOverride::AssDialogueBlockOverride () { - type = BLOCK_OVERRIDE; } diff --git a/aegisub/auto4_lua_assfile.cpp b/aegisub/auto4_lua_assfile.cpp index a9d0c2c57..23911d011 100644 --- a/aegisub/auto4_lua_assfile.cpp +++ b/aegisub/auto4_lua_assfile.cpp @@ -773,10 +773,9 @@ namespace Automation4 { for (int i = 0; i < (int)dia->Blocks.size(); i++) { AssDialogueBlock *block = dia->Blocks[i]; - switch (block->type) { + switch (block->GetType()) { case BLOCK_BASE: - assert(block->type != BLOCK_BASE); break; case BLOCK_PLAIN: diff --git a/aegisub/dialog_resample.cpp b/aegisub/dialog_resample.cpp index 1764ff45d..d378eb157 100644 --- a/aegisub/dialog_resample.cpp +++ b/aegisub/dialog_resample.cpp @@ -167,6 +167,16 @@ void DialogResample::DoResampleTags (wxString name,int n,AssOverrideParameter *c case PARCLASS_RELATIVE_SIZE_Y: //resizer = ry; + break; + + case PARCLASS_DRAWING: + { + AssDialogueBlockDrawing block; + block.text = curParam->AsText(); + block.TransformCoords(m[0],m[2],rx,ry); + curParam->SetText(block.GetText()); + } + return; default: return; diff --git a/aegisub/dialog_translation.cpp b/aegisub/dialog_translation.cpp index e5dccc8db..76916f97e 100644 --- a/aegisub/dialog_translation.cpp +++ b/aegisub/dialog_translation.cpp @@ -163,7 +163,7 @@ bool DialogTranslation::JumpToLine(int n,int block) { current->ParseASSTags(); size_t size_blocks = current->Blocks.size(); for (size_t i=0;iBlocks.at(i)->type == BLOCK_PLAIN) nblocks++; + if (current->Blocks.at(i)->GetType() == BLOCK_PLAIN) nblocks++; } // Wrap around @@ -200,7 +200,7 @@ bool DialogTranslation::JumpToLine(int n,int block) { int pos=-1; for (vector::iterator cur=current->Blocks.begin();cur!=current->Blocks.end();cur++) { curBlock = *cur; - if (curBlock->type == BLOCK_PLAIN) { + if (curBlock->GetType() == BLOCK_PLAIN) { pos++; int curLen = OrigText->GetUnicodePosition(OrigText->GetLength()); OrigText->AppendText(curBlock->text); @@ -210,7 +210,7 @@ bool DialogTranslation::JumpToLine(int n,int block) { found = true; } } - else if (curBlock->type == BLOCK_OVERRIDE) OrigText->AppendText(_T("{") + curBlock->text + _T("}")); + else if (curBlock->GetType() == BLOCK_OVERRIDE) OrigText->AppendText(_T("{") + curBlock->text + _T("}")); } current->ClearBlocks(); OrigText->SetReadOnly(true); @@ -312,7 +312,7 @@ void DialogTranslation::OnTransBoxKey(wxKeyEvent &event) { cur->ParseASSTags(); int nblock = -1; for (unsigned int i=0;iBlocks.size();i++) { - if (cur->Blocks.at(i)->type == BLOCK_PLAIN) nblock++; + if (cur->Blocks.at(i)->GetType() == BLOCK_PLAIN) nblock++; if (nblock == curblock) { cur->Blocks.at(i)->text = TransText->GetValue(); break; @@ -346,7 +346,7 @@ void DialogTranslation::OnTransBoxKey(wxKeyEvent &event) { current->ParseASSTags(); for (vector::iterator cur=current->Blocks.begin();cur!=current->Blocks.end();cur++) { curBlock = *cur; - if (curBlock->type == BLOCK_PLAIN) { + if (curBlock->GetType() == BLOCK_PLAIN) { pos++; if (pos == curblock) { TransText->AddText(curBlock->text); diff --git a/aegisub/subs_grid.cpp b/aegisub/subs_grid.cpp index e20ea6e1b..d7cb44f05 100644 --- a/aegisub/subs_grid.cpp +++ b/aegisub/subs_grid.cpp @@ -1313,7 +1313,7 @@ void SubtitlesGrid::SplitLineByKaraoke(int lineNumber) { // copying lost of code from automation.cpp here // maybe it should be refactored, since a similar proc is also needed in audio_karaoke ? for (std::vector::iterator block = line->Blocks.begin(); block != line->Blocks.end(); block++) { - switch ((*block)->type) { + switch ((*block)->GetType()) { case BLOCK_BASE: throw wxString(_T("BLOCK_BASE found processing dialogue blocks. This should never happen.")); diff --git a/aegisub/subtitle_format_txt.cpp b/aegisub/subtitle_format_txt.cpp index 302191662..3605d3881 100644 --- a/aegisub/subtitle_format_txt.cpp +++ b/aegisub/subtitle_format_txt.cpp @@ -215,7 +215,7 @@ void TXTSubtitleFormat::WriteFile(wxString filename,wxString encoding) { using n if (strip_formatting) { dia->ParseASSTags(); for (std::vector::iterator block = dia->Blocks.begin(); block != dia->Blocks.end(); ++block) { - if ((*block)->type == BLOCK_PLAIN) { + if ((*block)->GetType() == BLOCK_PLAIN) { out_text += (*block)->GetText(); } }