mirror of https://github.com/odrling/Aegisub
Fixed some bugs related to inserting overrides via the buttons over the edit box
Originally committed to SVN as r74.
This commit is contained in:
parent
82236684e7
commit
675c2d0829
|
@ -28,6 +28,7 @@ Please visit http://aegisub.net to download latest version
|
||||||
- Fixed crash in Translation and Styling assistants, when you attempted to move past end of file, and then play (AMZ)
|
- Fixed crash in Translation and Styling assistants, when you attempted to move past end of file, and then play (AMZ)
|
||||||
- Fixed linked commit of times, so it will only commit both times if the other was changed (to prevent damage when editing multiple lines) (AMZ)
|
- Fixed linked commit of times, so it will only commit both times if the other was changed (to prevent damage when editing multiple lines) (AMZ)
|
||||||
- Fixed bug related to tag cycling, which would reset grid, move video and force a refresh of everything (slow, and could undo uncommited changes) (AMZ)
|
- Fixed bug related to tag cycling, which would reset grid, move video and force a refresh of everything (slow, and could undo uncommited changes) (AMZ)
|
||||||
|
- Fixed some bugs related to inserting overrides via the buttons over the edit box (AMZ)
|
||||||
|
|
||||||
|
|
||||||
= 1.09 beta - 2006.01.16 ===========================
|
= 1.09 beta - 2006.01.16 ===========================
|
||||||
|
|
|
@ -52,6 +52,9 @@
|
||||||
#include <wx/colordlg.h>
|
#include <wx/colordlg.h>
|
||||||
#include <wx/fontdlg.h>
|
#include <wx/fontdlg.h>
|
||||||
#include "dialog_colorpicker.h"
|
#include "dialog_colorpicker.h"
|
||||||
|
#include "main.h"
|
||||||
|
#include "frame_main.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
|
@ -994,10 +997,151 @@ int SubsEditBox::BlockAtPos(int pos) {
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
// Set a color
|
// Set a color
|
||||||
void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
//void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
||||||
// Check if it's enabled
|
// // Check if it's enabled
|
||||||
if (!enabled) return;
|
// if (!enabled) return;
|
||||||
|
//
|
||||||
|
// // Selection
|
||||||
|
// long selstart, selend;
|
||||||
|
// if (forcePos != -1) {
|
||||||
|
// selstart = forcePos;
|
||||||
|
// selend = forcePos;
|
||||||
|
// }
|
||||||
|
// else TextEdit->GetSelection(&selstart,&selend);
|
||||||
|
//
|
||||||
|
// // Get block at start
|
||||||
|
// size_t blockn = BlockAtPos(selstart);
|
||||||
|
// AssDialogue *line = new AssDialogue();
|
||||||
|
// line->Text = TextEdit->GetValue();
|
||||||
|
// line->ParseASSTags();
|
||||||
|
// AssDialogueBlock *block = line->Blocks.at(blockn);
|
||||||
|
//
|
||||||
|
// // Current tag name
|
||||||
|
// wxString alttagname = tagname;
|
||||||
|
// if (tagname == _T("\\1c")) tagname = _T("\\c");
|
||||||
|
//
|
||||||
|
// // Prepare defaults
|
||||||
|
// bool isColor = false;
|
||||||
|
// bool isFont = false;
|
||||||
|
// bool isPos = false;
|
||||||
|
// wxColour startcolor;
|
||||||
|
// wxString startfont;
|
||||||
|
// AssStyle *style = AssFile::top->GetStyle(grid->GetDialogue(linen)->Style);
|
||||||
|
// AssStyle defStyle;
|
||||||
|
// if (style == NULL) style = &defStyle;
|
||||||
|
//
|
||||||
|
// // Get default parameter from tag type
|
||||||
|
// if (tagname == _T("\\c")) {
|
||||||
|
// startcolor = style->primary.GetWXColor();
|
||||||
|
// isColor = true;
|
||||||
|
// }
|
||||||
|
// else if (tagname == _T("\\2c")) {
|
||||||
|
// startcolor = style->secondary.GetWXColor();
|
||||||
|
// isColor = true;
|
||||||
|
// }
|
||||||
|
// else if (tagname == _T("\\3c")) {
|
||||||
|
// startcolor = style->outline.GetWXColor();
|
||||||
|
// isColor = true;
|
||||||
|
// }
|
||||||
|
// else if (tagname == _T("\\4c")) {
|
||||||
|
// startcolor = style->shadow.GetWXColor();
|
||||||
|
// isColor = true;
|
||||||
|
// }
|
||||||
|
// else if (tagname == _T("\\fn")) {
|
||||||
|
// startfont = style->font;
|
||||||
|
// isFont = true;
|
||||||
|
// }
|
||||||
|
// else if (tagname == _T("\\pos")) {
|
||||||
|
// isPos = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Find current value
|
||||||
|
// AssDialogueBlockOverride *override;
|
||||||
|
// AssOverrideTag *tag;
|
||||||
|
// if (isFont || isColor) {
|
||||||
|
// for (size_t i=0;i<=blockn;i++) {
|
||||||
|
// override = AssDialogueBlock::GetAsOverride(line->Blocks.at(i));
|
||||||
|
// if (override) {
|
||||||
|
// for (size_t j=0;j<override->Tags.size();j++) {
|
||||||
|
// tag = override->Tags.at(j);
|
||||||
|
// if (tag->Name == tagname || tag->Name == alttagname) {
|
||||||
|
// if (isColor) startcolor = tag->Params.at(0)->AsColour();
|
||||||
|
// if (isFont) startfont = tag->Params.at(0)->AsText();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // String to be insert
|
||||||
|
// wxString insert;
|
||||||
|
//
|
||||||
|
// // Choose color
|
||||||
|
// if (isColor) {
|
||||||
|
// // Pick from dialog
|
||||||
|
// //wxColour color = wxGetColourFromUser(this,startcolor);
|
||||||
|
// wxColour color = GetColorFromUser(this, startcolor);
|
||||||
|
// if (!color.Ok() || color == startcolor) return;
|
||||||
|
//
|
||||||
|
// // Generate insert string
|
||||||
|
// AssColor asscolor(color);
|
||||||
|
// insert = tagname + asscolor.GetASSFormatted(false);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Choose font
|
||||||
|
// if (isFont) {
|
||||||
|
// // Pick from dialog
|
||||||
|
// wxFont origFont;
|
||||||
|
// origFont.SetFaceName(startfont);
|
||||||
|
// wxFont font = wxGetFontFromUser(this,origFont);
|
||||||
|
// if (!font.Ok()) return;
|
||||||
|
//
|
||||||
|
// // Generate insert string
|
||||||
|
// insert = tagname + font.GetFaceName();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Pos
|
||||||
|
// if (isPos) {
|
||||||
|
// insert = tagname + preValue;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Get current block as plain or override
|
||||||
|
// AssDialogueBlockPlain *plain = AssDialogueBlock::GetAsPlain(block);
|
||||||
|
// override = AssDialogueBlock::GetAsOverride(block);
|
||||||
|
//
|
||||||
|
// // Plain
|
||||||
|
// if (plain) {
|
||||||
|
// // Insert in text
|
||||||
|
// line->Text = line->Text.Left(selstart) + _T("{") + insert + _T("}") + line->Text.Mid(selstart);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Override
|
||||||
|
// else if (override) {
|
||||||
|
// // Insert new tag
|
||||||
|
// override->text += insert;
|
||||||
|
// override->ParseTags();
|
||||||
|
//
|
||||||
|
// // Remove old of same
|
||||||
|
// for (size_t i=0;i<override->Tags.size()-1;i++) {
|
||||||
|
// if (override->Tags.at(i)->Name == tagname || override->Tags.at(i)->Name == alttagname) {
|
||||||
|
// override->Tags.erase(override->Tags.begin() + i);
|
||||||
|
// i--;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Update line
|
||||||
|
// line->UpdateText();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Commit changes
|
||||||
|
// SetText(line->Text);
|
||||||
|
// TextEdit->SetFocus();
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Set override
|
||||||
|
void SubsEditBox::SetOverride (wxString tagname,wxString preValue,int forcePos) {
|
||||||
// Selection
|
// Selection
|
||||||
long selstart, selend;
|
long selstart, selend;
|
||||||
if (forcePos != -1) {
|
if (forcePos != -1) {
|
||||||
|
@ -1005,6 +1149,13 @@ void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
||||||
selend = forcePos;
|
selend = forcePos;
|
||||||
}
|
}
|
||||||
else TextEdit->GetSelection(&selstart,&selend);
|
else TextEdit->GetSelection(&selstart,&selend);
|
||||||
|
int len = TextEdit->GetValue().Length();
|
||||||
|
selstart = MID(0,selstart,len);
|
||||||
|
selend = MID(0,selend,len);
|
||||||
|
|
||||||
|
// Current tag name
|
||||||
|
wxString alttagname = tagname;
|
||||||
|
if (tagname == _T("\\1c")) tagname = _T("\\c");
|
||||||
|
|
||||||
// Get block at start
|
// Get block at start
|
||||||
size_t blockn = BlockAtPos(selstart);
|
size_t blockn = BlockAtPos(selstart);
|
||||||
|
@ -1013,22 +1164,43 @@ void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
||||||
line->ParseASSTags();
|
line->ParseASSTags();
|
||||||
AssDialogueBlock *block = line->Blocks.at(blockn);
|
AssDialogueBlock *block = line->Blocks.at(blockn);
|
||||||
|
|
||||||
// Current tag name
|
// Insert variables
|
||||||
wxString alttagname = tagname;
|
wxString insert;
|
||||||
if (tagname == _T("\\1c")) tagname = _T("\\c");
|
wxString insert2;
|
||||||
|
int shift;
|
||||||
|
|
||||||
// Prepare defaults
|
// Default value
|
||||||
|
wxColour startcolor;
|
||||||
|
wxString startfont;
|
||||||
bool isColor = false;
|
bool isColor = false;
|
||||||
bool isFont = false;
|
bool isFont = false;
|
||||||
bool isPos = false;
|
bool isPos = false;
|
||||||
wxColour startcolor;
|
bool isFlag = false;
|
||||||
wxString startfont;
|
bool state = false;
|
||||||
AssStyle *style = AssFile::top->GetStyle(grid->GetDialogue(linen)->Style);
|
AssStyle *style = AssFile::top->GetStyle(grid->GetDialogue(linen)->Style);
|
||||||
AssStyle defStyle;
|
AssStyle defStyle;
|
||||||
if (style == NULL) style = &defStyle;
|
if (style == NULL) style = &defStyle;
|
||||||
|
if (tagname == _T("\\b")) {
|
||||||
// Get default parameter from tag type
|
state = style->bold;
|
||||||
if (tagname == _T("\\c")) {
|
isFlag = true;
|
||||||
|
}
|
||||||
|
else if (tagname == _T("\\i")) {
|
||||||
|
state = style->italic;
|
||||||
|
isFlag = true;
|
||||||
|
}
|
||||||
|
else if (tagname == _T("\\u")) {
|
||||||
|
state = style->underline;
|
||||||
|
isFlag = true;
|
||||||
|
}
|
||||||
|
else if (tagname == _T("\\s")) {
|
||||||
|
state = style->strikeout;
|
||||||
|
isFlag = true;
|
||||||
|
}
|
||||||
|
else if (tagname == _T("\\fn")) {
|
||||||
|
startfont = style->font;
|
||||||
|
isFont = true;
|
||||||
|
}
|
||||||
|
else if (tagname == _T("\\c")) {
|
||||||
startcolor = style->primary.GetWXColor();
|
startcolor = style->primary.GetWXColor();
|
||||||
isColor = true;
|
isColor = true;
|
||||||
}
|
}
|
||||||
|
@ -1044,18 +1216,12 @@ void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
||||||
startcolor = style->shadow.GetWXColor();
|
startcolor = style->shadow.GetWXColor();
|
||||||
isColor = true;
|
isColor = true;
|
||||||
}
|
}
|
||||||
else if (tagname == _T("\\fn")) {
|
bool hasEnd = isFlag;
|
||||||
startfont = style->font;
|
|
||||||
isFont = true;
|
|
||||||
}
|
|
||||||
else if (tagname == _T("\\pos")) {
|
|
||||||
isPos = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find current value
|
// Find current value of style
|
||||||
AssDialogueBlockOverride *override;
|
AssDialogueBlockOverride *override;
|
||||||
AssOverrideTag *tag;
|
AssOverrideTag *tag;
|
||||||
if (isFont || isColor) {
|
if (isFont || isColor || isFlag) {
|
||||||
for (size_t i=0;i<=blockn;i++) {
|
for (size_t i=0;i<=blockn;i++) {
|
||||||
override = AssDialogueBlock::GetAsOverride(line->Blocks.at(i));
|
override = AssDialogueBlock::GetAsOverride(line->Blocks.at(i));
|
||||||
if (override) {
|
if (override) {
|
||||||
|
@ -1064,20 +1230,29 @@ void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
||||||
if (tag->Name == tagname || tag->Name == alttagname) {
|
if (tag->Name == tagname || tag->Name == alttagname) {
|
||||||
if (isColor) startcolor = tag->Params.at(0)->AsColour();
|
if (isColor) startcolor = tag->Params.at(0)->AsColour();
|
||||||
if (isFont) startfont = tag->Params.at(0)->AsText();
|
if (isFont) startfont = tag->Params.at(0)->AsText();
|
||||||
|
if (isFlag) state = tag->Params.at(0)->AsBool();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// String to be insert
|
// Toggle value
|
||||||
wxString insert;
|
if (isFlag) {
|
||||||
|
state = !state;
|
||||||
|
int stateval = 0;
|
||||||
|
if (state) stateval = 1;
|
||||||
|
|
||||||
|
// Generate insert string
|
||||||
|
insert = tagname + wxString::Format(_T("%i"),stateval);
|
||||||
|
insert2 = tagname + wxString::Format(_T("%i"),1-stateval);
|
||||||
|
}
|
||||||
|
|
||||||
// Choose color
|
// Choose color
|
||||||
if (isColor) {
|
if (isColor) {
|
||||||
// Pick from dialog
|
// Pick from dialog
|
||||||
//wxColour color = wxGetColourFromUser(this,startcolor);
|
//wxColour color = wxGetColourFromUser(this,startcolor);
|
||||||
wxColour color = GetColorFromUser(this, startcolor);
|
wxColour color = GetColorFromUser(((AegisubApp*)wxTheApp)->frame, startcolor);
|
||||||
if (!color.Ok() || color == startcolor) return;
|
if (!color.Ok() || color == startcolor) return;
|
||||||
|
|
||||||
// Generate insert string
|
// Generate insert string
|
||||||
|
@ -1106,93 +1281,6 @@ void SubsEditBox::SetOverride(wxString tagname,wxString preValue,int forcePos) {
|
||||||
AssDialogueBlockPlain *plain = AssDialogueBlock::GetAsPlain(block);
|
AssDialogueBlockPlain *plain = AssDialogueBlock::GetAsPlain(block);
|
||||||
override = AssDialogueBlock::GetAsOverride(block);
|
override = AssDialogueBlock::GetAsOverride(block);
|
||||||
|
|
||||||
// Plain
|
|
||||||
if (plain) {
|
|
||||||
// Insert in text
|
|
||||||
line->Text = line->Text.Left(selstart) + _T("{") + insert + _T("}") + line->Text.Mid(selstart);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override
|
|
||||||
else if (override) {
|
|
||||||
// Insert new tag
|
|
||||||
override->text += insert;
|
|
||||||
override->ParseTags();
|
|
||||||
|
|
||||||
// Remove old of same
|
|
||||||
for (size_t i=0;i<override->Tags.size()-1;i++) {
|
|
||||||
if (override->Tags.at(i)->Name == tagname || override->Tags.at(i)->Name == alttagname) {
|
|
||||||
override->Tags.erase(override->Tags.begin() + i);
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update line
|
|
||||||
line->UpdateText();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Commit changes
|
|
||||||
SetText(line->Text);
|
|
||||||
TextEdit->SetFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////
|
|
||||||
// Set style flag
|
|
||||||
void SubsEditBox::SetStyleFlag (wxString tagname,bool hasEnd) {
|
|
||||||
// Selection
|
|
||||||
long selstart, selend;
|
|
||||||
TextEdit->GetSelection(&selstart,&selend);
|
|
||||||
|
|
||||||
// Get block at start
|
|
||||||
size_t blockn = BlockAtPos(selstart);
|
|
||||||
AssDialogue *line = new AssDialogue();
|
|
||||||
line->Text = TextEdit->GetValue();
|
|
||||||
line->ParseASSTags();
|
|
||||||
AssDialogueBlock *block = line->Blocks.at(blockn);
|
|
||||||
|
|
||||||
// Insert variables
|
|
||||||
wxString insert;
|
|
||||||
wxString insert2;
|
|
||||||
int shift;
|
|
||||||
|
|
||||||
// Default value
|
|
||||||
bool state = false;
|
|
||||||
AssStyle *style = AssFile::top->GetStyle(grid->GetDialogue(linen)->Style);
|
|
||||||
AssStyle defStyle;
|
|
||||||
if (style == NULL) style = &defStyle;
|
|
||||||
if (tagname == _T("\\b")) state = style->bold;
|
|
||||||
else if (tagname == _T("\\i")) state = style->italic;
|
|
||||||
else if (tagname == _T("\\u")) state = style->underline;
|
|
||||||
else if (tagname == _T("\\s")) state = style->strikeout;
|
|
||||||
|
|
||||||
// Find current value of style
|
|
||||||
AssDialogueBlockOverride *override;
|
|
||||||
AssOverrideTag *tag;
|
|
||||||
for (size_t i=0;i<=blockn;i++) {
|
|
||||||
override = AssDialogueBlock::GetAsOverride(line->Blocks.at(i));
|
|
||||||
if (override) {
|
|
||||||
for (size_t j=0;j<override->Tags.size();j++) {
|
|
||||||
tag = override->Tags.at(j);
|
|
||||||
if (tag->Name == tagname) {
|
|
||||||
state = tag->Params.at(0)->AsBool();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Toggle value
|
|
||||||
state = !state;
|
|
||||||
int stateval = 0;
|
|
||||||
if (state) stateval = 1;
|
|
||||||
|
|
||||||
// Generate insert string
|
|
||||||
insert = tagname + wxString::Format(_T("%i"),stateval);
|
|
||||||
insert2 = tagname + wxString::Format(_T("%i"),1-stateval);
|
|
||||||
|
|
||||||
// Get current block as plain or override
|
|
||||||
AssDialogueBlockPlain *plain = AssDialogueBlock::GetAsPlain(block);
|
|
||||||
override = AssDialogueBlock::GetAsOverride(block);
|
|
||||||
|
|
||||||
// Plain
|
// Plain
|
||||||
if (plain) {
|
if (plain) {
|
||||||
// Insert in text
|
// Insert in text
|
||||||
|
@ -1258,11 +1346,13 @@ void SubsEditBox::SetStyleFlag (wxString tagname,bool hasEnd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shift selection
|
// Shift selection
|
||||||
|
selstart = origStart;
|
||||||
TextEdit->SetSelection(origStart+shift,selend+shift);
|
TextEdit->SetSelection(origStart+shift,selend+shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit changes
|
// Commit changes and shift selection
|
||||||
SetText(line->Text);
|
SetText(line->Text);
|
||||||
|
TextEdit->SetSelection(selstart+shift,selend+shift);
|
||||||
TextEdit->SetFocus();
|
TextEdit->SetFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1305,27 +1395,27 @@ void SubsEditBox::OnButtonFontFace(wxCommandEvent &event) {
|
||||||
////////
|
////////
|
||||||
// Bold
|
// Bold
|
||||||
void SubsEditBox::OnButtonBold(wxCommandEvent &event) {
|
void SubsEditBox::OnButtonBold(wxCommandEvent &event) {
|
||||||
SetStyleFlag(_T("\\b"),true);
|
SetOverride(_T("\\b"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Italics
|
// Italics
|
||||||
void SubsEditBox::OnButtonItalics(wxCommandEvent &event) {
|
void SubsEditBox::OnButtonItalics(wxCommandEvent &event) {
|
||||||
SetStyleFlag(_T("\\i"),true);
|
SetOverride(_T("\\i"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
// Underline
|
// Underline
|
||||||
void SubsEditBox::OnButtonUnderline(wxCommandEvent &event) {
|
void SubsEditBox::OnButtonUnderline(wxCommandEvent &event) {
|
||||||
SetStyleFlag(_T("\\u"),true);
|
SetOverride(_T("\\u"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
// Strikeout
|
// Strikeout
|
||||||
void SubsEditBox::OnButtonStrikeout(wxCommandEvent &event) {
|
void SubsEditBox::OnButtonStrikeout(wxCommandEvent &event) {
|
||||||
SetStyleFlag(_T("\\s"),true);
|
SetOverride(_T("\\s"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ public:
|
||||||
SubsEditBox(wxWindow *parent,SubtitlesGrid *gridp);
|
SubsEditBox(wxWindow *parent,SubtitlesGrid *gridp);
|
||||||
|
|
||||||
void SetOverride (wxString tag,wxString preValue=_T(""),int pos=-1);
|
void SetOverride (wxString tag,wxString preValue=_T(""),int pos=-1);
|
||||||
void SetStyleFlag (wxString tag,bool hasEnd=false);
|
void SetStyleFlag (wxString tag,wxString preValue=_T(""),int pos=-1);
|
||||||
|
|
||||||
void CommitText();
|
void CommitText();
|
||||||
void SetText(const wxString text);
|
void SetText(const wxString text);
|
||||||
|
|
Loading…
Reference in New Issue