Merged the three "Recombine" functions into a single one that autodetects the correct type.

Originally committed to SVN as r663.
This commit is contained in:
Rodrigo Braz Monteiro 2006-12-30 22:38:05 +00:00
parent 280b9acf61
commit f0938ca9f9
5 changed files with 77 additions and 135 deletions

View file

@ -62,6 +62,7 @@ Please visit http://aegisub.net to download latest version
- Added a "Selection Onward" option to the Shift Times dialogue. (AMZ)
- Main menu was completely re-designed, including several new options. (AMZ)
- Added Medusa-style (numpad) global timing shortcuts, that can be enabled with the button under the audio display. This is disabled by default. (AMZ)
- Merged the three "Recombine" functions into a single one that autodetects the correct type. (AMZ)
= 1.10 beta - 2006.08.07 ===========================

View file

@ -272,32 +272,26 @@ void FrameMain::InitMenu() {
wxMenu *InsertMenu = new wxMenu;
wxMenuItem *InsertParent = new wxMenuItem(subtitlesMenu,Menu_Subtitles_Insert,_("&Insert Lines"),_T(""),wxITEM_NORMAL,InsertMenu);
InsertParent->SetBitmap(wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_BEFORE,_("&Before Current"),_T("Inserts a line before current"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_AFTER,_("&After Current"),_T("Inserts a line after current"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_BEFORE_VIDEO,_("Before Current, at Video Time"),_T("Inserts a line before current, starting at video time"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_AFTER_VIDEO,_("After Current, at Video Time"),_T("Inserts a line after current, starting at video time"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_BEFORE,_("&Before Current"),_("Inserts a line before current"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_AFTER,_("&After Current"),_("Inserts a line after current"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_BEFORE_VIDEO,_("Before Current, at Video Time"),_("Inserts a line before current, starting at video time"),wxBITMAP(blank_button));
AppendBitmapMenuItem(InsertMenu,MENU_INSERT_AFTER_VIDEO,_("After Current, at Video Time"),_("Inserts a line after current, starting at video time"),wxBITMAP(blank_button));
subtitlesMenu->Append(InsertParent);
AppendBitmapMenuItem(subtitlesMenu,MENU_DUPLICATE,wxString(_("&Duplicate Lines")) + _T("\t") + Hotkeys.GetText(_T("Grid duplicate rows")),_T("Duplicate the selected lines"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_DUPLICATE_NEXT_FRAME,wxString(_("&Duplicate and shift by 1 frame")) + _T("\t") + Hotkeys.GetText(_T("Grid duplicate and shift one frame")),_T("Duplicate lines and shift by one frame"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_DELETE,wxString(_("Delete Lines")) + _T("\t") + Hotkeys.GetText(_T("Grid delete rows")),_T("Delete currently selected lines"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_DUPLICATE,wxString(_("&Duplicate Lines")) + _T("\t") + Hotkeys.GetText(_T("Grid duplicate rows")),_("Duplicate the selected lines"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_DUPLICATE_NEXT_FRAME,wxString(_("&Duplicate and shift by 1 frame")) + _T("\t") + Hotkeys.GetText(_T("Grid duplicate and shift one frame")),_("Duplicate lines and shift by one frame"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_DELETE,wxString(_("Delete Lines")) + _T("\t") + Hotkeys.GetText(_T("Grid delete rows")),_("Delete currently selected lines"),wxBITMAP(blank_button));
subtitlesMenu->AppendSeparator();
wxMenu *JoinMenu = new wxMenu;
wxMenuItem *JoinParent = new wxMenuItem(subtitlesMenu,Menu_Subtitles_Join,_("Join Lines"),_T(""),wxITEM_NORMAL,JoinMenu);
JoinParent->SetBitmap(wxBITMAP(blank_button));
AppendBitmapMenuItem(JoinMenu,MENU_JOIN_CONCAT,_("&Concatenate"),_T("Joins selected lines in a single one, concatenating text together"),wxBITMAP(blank_button));
AppendBitmapMenuItem(JoinMenu,MENU_JOIN_REPLACE,_("Keep &First"),_T("Joins selected lines in a single one, keeping text of first and discarding remaining"),wxBITMAP(blank_button));
AppendBitmapMenuItem(JoinMenu,MENU_JOIN_AS_KARAOKE,_("As &Karaoke"),_T("Joins selected lines in a single one, as karaoke"),wxBITMAP(blank_button));
AppendBitmapMenuItem(JoinMenu,MENU_JOIN_CONCAT,_("&Concatenate"),_("Joins selected lines in a single one, concatenating text together"),wxBITMAP(blank_button));
AppendBitmapMenuItem(JoinMenu,MENU_JOIN_REPLACE,_("Keep &First"),_("Joins selected lines in a single one, keeping text of first and discarding remaining"),wxBITMAP(blank_button));
AppendBitmapMenuItem(JoinMenu,MENU_JOIN_AS_KARAOKE,_("As &Karaoke"),_("Joins selected lines in a single one, as karaoke"),wxBITMAP(blank_button));
subtitlesMenu->Append(JoinParent);
wxMenu *RecombineMenu = new wxMenu;
wxMenuItem *RecombineParent = new wxMenuItem(subtitlesMenu,Menu_Subtitles_Recombine,_("Recombine"),_T(""),wxITEM_NORMAL,RecombineMenu);
RecombineParent->SetBitmap(wxBITMAP(blank_button));
AppendBitmapMenuItem(RecombineMenu,MENU_1_12_RECOMBINE,_("Lines (1, 1+2) into (1, 2)"),_T("Recombine subtitles when first one is actually first plus second"),wxBITMAP(blank_button));
AppendBitmapMenuItem(RecombineMenu,MENU_12_2_RECOMBINE,_("Lines (1+2, 2) into (1, 2)"),_T("Recombine subtitles when second one is actually first plus second"),wxBITMAP(blank_button));
AppendBitmapMenuItem(RecombineMenu,MENU_1_12_2_RECOMBINE,_("Lines (1, 1+2, 2) into (1, 2)"),_T("Recombine subtitles when middle one is actually first plus second"),wxBITMAP(blank_button));
subtitlesMenu->Append(RecombineParent);
AppendBitmapMenuItem(subtitlesMenu,MENU_SPLIT_BY_KARAOKE,_("Split Lines (by karaoke)"),_T("Uses karaoke timing to split line into multiple smaller lines"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_RECOMBINE,_("Recombine Lines"),_("Recombine subtitles when they have been split and merged"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_SPLIT_BY_KARAOKE,_("Split Lines (by karaoke)"),_("Uses karaoke timing to split line into multiple smaller lines"),wxBITMAP(blank_button));
subtitlesMenu->AppendSeparator();
AppendBitmapMenuItem(subtitlesMenu,MENU_SWAP,_("Swap Lines"),_T("Swaps the two selected lines"),wxBITMAP(blank_button));
AppendBitmapMenuItem(subtitlesMenu,MENU_SWAP,_("Swap Lines"),_("Swaps the two selected lines"),wxBITMAP(blank_button));
AppendBitmapMenuItem (subtitlesMenu,Menu_Edit_Select, _("Select Lines...\t") + Hotkeys.GetText(_T("Select lines")), _("Selects lines based on defined criterea"),wxBITMAP(blank_button));
subtitlesMenu->AppendSeparator();
AppendBitmapMenuItem (subtitlesMenu,Menu_Tools_Styles_Manager, _("&Styles Manager..."), _("Open styles manager"), wxBITMAP(style_toolbutton));
@ -324,8 +318,8 @@ void FrameMain::InitMenu() {
wxMenu *ContinuousMenu = new wxMenu;
wxMenuItem *ContinuousParent = new wxMenuItem(subtitlesMenu,-1,_("Make Times Continuous"),_T(""),wxITEM_NORMAL,ContinuousMenu);
ContinuousParent->SetBitmap(wxBITMAP(blank_button));
AppendBitmapMenuItem(ContinuousMenu,MENU_ADJOIN,_("Change &Start"),_T("Changes times of subs so start times begin on previous's end time"),wxBITMAP(blank_button));
AppendBitmapMenuItem(ContinuousMenu,MENU_ADJOIN2,_("Change &End"),_T("Changes times of subs so end times begin on next's start time"),wxBITMAP(blank_button));
AppendBitmapMenuItem(ContinuousMenu,MENU_ADJOIN,_("Change &Start"),_("Changes times of subs so start times begin on previous's end time"),wxBITMAP(blank_button));
AppendBitmapMenuItem(ContinuousMenu,MENU_ADJOIN2,_("Change &End"),_("Changes times of subs so end times begin on next's start time"),wxBITMAP(blank_button));
timingMenu->Append(ContinuousParent);
MenuBar->Append(timingMenu, _("&Timing"));

View file

@ -449,12 +449,8 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) {
MenuBar->Enable(MENU_JOIN_REPLACE,state);
MenuBar->Enable(MENU_JOIN_AS_KARAOKE,state);
MenuBar->Enable(Menu_Subtitles_Join,state);
state = count == 2 && continuous;
MenuBar->Enable(MENU_1_12_RECOMBINE,state);
MenuBar->Enable(MENU_12_2_RECOMBINE,state);
state2 = count == 3 && continuous;
MenuBar->Enable(MENU_1_12_2_RECOMBINE,state2);
MenuBar->Enable(Menu_Subtitles_Recombine,state || state2);
state = (count == 2 || count == 3) && continuous;
MenuBar->Enable(MENU_RECOMBINE,state);
}
// Timing menu

View file

@ -80,9 +80,7 @@ BEGIN_EVENT_TABLE(SubtitlesGrid, BaseGrid)
EVT_MENU(MENU_SET_VIDEO_TO_END,SubtitlesGrid::OnSetVideoToEnd)
EVT_MENU(MENU_JOIN_AS_KARAOKE,SubtitlesGrid::OnJoinAsKaraoke)
EVT_MENU(MENU_SPLIT_BY_KARAOKE,SubtitlesGrid::OnSplitByKaraoke)
EVT_MENU(MENU_1_12_2_RECOMBINE,SubtitlesGrid::On1122Recombine)
EVT_MENU(MENU_12_2_RECOMBINE,SubtitlesGrid::On122Recombine)
EVT_MENU(MENU_1_12_RECOMBINE,SubtitlesGrid::On112Recombine)
EVT_MENU(MENU_RECOMBINE,SubtitlesGrid::OnRecombine)
EVT_MENU_RANGE(MENU_SHOW_COL,MENU_SHOW_COL+15,SubtitlesGrid::OnShowColMenu)
END_EVENT_TABLE()
@ -176,18 +174,15 @@ void SubtitlesGrid::OnPopupMenu(bool alternate) {
menu.Append(MENU_JOIN_CONCAT,_("&Join (concatenate)"),_T("Joins selected lines in a single one, concatenating text together"))->Enable(state);
menu.Append(MENU_JOIN_REPLACE,_("Join (keep first)"),_T("Joins selected lines in a single one, keeping text of first and discarding remaining"))->Enable(state);
menu.Append(MENU_JOIN_AS_KARAOKE,_("Join (as Karaoke)"),_T(""))->Enable(state);
menu.AppendSeparator();
// Adjoin selection
menu.Append(MENU_ADJOIN,_("&Make times continuous (change start)"),_T("Changes times of subs so start times begin on previous's end time"))->Enable(state);
menu.Append(MENU_ADJOIN2,_("&Make times continuous (change end)"),_T("Changes times of subs so end times begin on next's start time"))->Enable(state);
menu.AppendSeparator();
// Recombine selection
state = (sels == 2 && continuous);
menu.Append(MENU_1_12_RECOMBINE,_("Recombine (1, 1+2) into (1, 2)"),_T("Recombine subtitles when first one is actually first plus second"))->Enable(state);
menu.Append(MENU_12_2_RECOMBINE,_("Recombine (1+2, 2) into (1, 2)"),_T("Recombine subtitles when second one is actually first plus second"))->Enable(state);
state = (sels == 3 && continuous);
menu.Append(MENU_1_12_2_RECOMBINE,_("Recombine (1, 1+2, 2) into (1, 2)"),_T("Recombine subtitles when middle one is actually first plus second"))->Enable(state);
state = (sels == 2 || sels == 3) && continuous;
menu.Append(MENU_RECOMBINE,_("Recombine Lines"),_T("Recombine subtitles when they have been split and merged"))->Enable(state);
menu.AppendSeparator();
// Copy/cut/paste
@ -566,112 +561,72 @@ void SubtitlesGrid::OnSetVideoToEnd(wxCommandEvent &event) {
}
/////////////////////
// 1,1+2,2 Recombine
void SubtitlesGrid::On1122Recombine(wxCommandEvent &event) {
BeginBatch();
//////////////
// Recombine
void SubtitlesGrid::OnRecombine(wxCommandEvent &event) {
// Get selection
bool cont;
wxArrayInt sel = GetSelection(&cont);
if (sel.Count() != 3 || !cont) throw _T("Invalid number of selections");
int nSel = sel.Count();
if ((nSel != 2 && nSel != 3) || !cont) throw _T("Invalid selection");
int n = sel[0];
// Update
// Get dialogues
AssDialogue *n1,*n2,*n3;
n1 = GetDialogue(n);
n2 = GetDialogue(n+1);
n3 = GetDialogue(n+2);
n1->End = n2->End;
n3->Start = n2->Start;
n1->UpdateData();
n3->UpdateData();
// Delete middle
DeleteLines(GetRangeArray(n+1,n+1));
EndBatch();
}
///////////////////
// 1+2,2 Recombine
void SubtitlesGrid::On122Recombine(wxCommandEvent &event) {
BeginBatch();
// Get selection
bool cont;
wxArrayInt sel = GetSelection(&cont);
if (sel.Count() != 2 || !cont) throw _T("Invalid number of selections");
int n = sel[0];
// Update
AssDialogue *n1,*n2;
n1 = GetDialogue(n);
n2 = GetDialogue(n+1);
n1->Text.Trim(true).Trim(false);
n2->Text.Trim(true).Trim(false);
// Check if n2 is a suffix of n1
if (n1->Text.Right(n2->Text.Length()) == n2->Text) {
n1->Text = n1->Text.SubString(0, n1->Text.Length() - n2->Text.Length() - 1).Trim(true).Trim(false);
while (n1->Text.Left(2) == _T("\\N") || n1->Text.Left(2) == _T("\\n"))
n1->Text = n1->Text.Mid(2);
while (n1->Text.Right(2) == _T("\\N") || n1->Text.Right(2) == _T("\\n"))
n1->Text = n1->Text.Mid(0,n1->Text.Length()-2);
n2->Start = n1->Start;
//n1->ParseASSTags();
n1->UpdateData();
n2->UpdateData();
// Commit
ass->FlagAsModified();
CommitChanges();
} else {
parentFrame->StatusTimeout(_T("Unable to recombine: Second line is not a suffix of first one."));
}
EndBatch();
}
///////////////////
// 1,1+2 Recombine
void SubtitlesGrid::On112Recombine(wxCommandEvent &event) {
BeginBatch();
// Get selection
bool cont;
wxArrayInt sel = GetSelection(&cont);
if (sel.Count() != 2 || !cont) throw _T("Invalid number of selections");
int n = sel[0];
// Update
AssDialogue *n1,*n2;
n1 = GetDialogue(n);
n2 = GetDialogue(n+1);
n1->Text.Trim(true).Trim(false);
n2->Text.Trim(true).Trim(false);
// Check if n1 is a prefix of n2 and recombine
if (n2->Text.Left(n1->Text.Length()) == n1->Text) {
n2->Text = n2->Text.Mid(n1->Text.Length()).Trim(true).Trim(false);
while (n2->Text.Left(2) == _T("\\N") || n2->Text.Left(2) == _T("\\n"))
n2->Text = n2->Text.Mid(2);
while (n2->Text.Right(2) == _T("\\N") || n2->Text.Right(2) == _T("\\n"))
n2->Text = n2->Text.Mid(0,n2->Text.Length()-2);
// 1,1+2,2 -> 1,2
if (nSel == 3) {
n3 = GetDialogue(n+2);
n1->End = n2->End;
//n2->ParseASSTags();
n3->Start = n2->Start;
n1->UpdateData();
n2->UpdateData();
// Commit
ass->FlagAsModified();
CommitChanges();
} else {
parentFrame->StatusTimeout(_T("Unable to recombine: First line is not a prefix of second one."));
n3->UpdateData();
DeleteLines(GetRangeArray(n+1,n+1));
}
EndBatch();
// 2 Line recombine
else {
// Trim dialogues
n1->Text.Trim(true).Trim(false);
n2->Text.Trim(true).Trim(false);
// Detect type
int type = -1;
if (n1->Text.Right(n2->Text.Length()) == n2->Text) type = 0;
else if (n2->Text.Left(n1->Text.Length()) == n1->Text) type = 1;
else {
// Unknown type
parentFrame->StatusTimeout(_T("Unable to recombine: Neither line is a suffix of the other one."));
return;
}
// 1+2,2 -> 1,2
if (type == 0) {
n1->Text = n1->Text.SubString(0, n1->Text.Length() - n2->Text.Length() - 1).Trim(true).Trim(false);
while (n1->Text.Left(2) == _T("\\N") || n1->Text.Left(2) == _T("\\n")) n1->Text = n1->Text.Mid(2);
while (n1->Text.Right(2) == _T("\\N") || n1->Text.Right(2) == _T("\\n")) n1->Text = n1->Text.Mid(0,n1->Text.Length()-2);
n2->Start = n1->Start;
}
// 1,1+2, -> 1,2
else {
n2->Text = n2->Text.Mid(n1->Text.Length()).Trim(true).Trim(false);
while (n2->Text.Left(2) == _T("\\N") || n2->Text.Left(2) == _T("\\n")) n2->Text = n2->Text.Mid(2);
while (n2->Text.Right(2) == _T("\\N") || n2->Text.Right(2) == _T("\\n")) n2->Text = n2->Text.Mid(0,n2->Text.Length()-2);
n1->End = n2->End;
}
// Commit
n1->UpdateData();
n2->UpdateData();
ass->FlagAsModified();
CommitChanges();
}
// Adjus scrollbar
AdjustScrollbar();
}

View file

@ -92,9 +92,7 @@ private:
void OnSetVideoToEnd(wxCommandEvent &event);
void OnJoinAsKaraoke(wxCommandEvent &event);
void OnSplitByKaraoke(wxCommandEvent &event);
void On1122Recombine(wxCommandEvent &event);
void On122Recombine(wxCommandEvent &event);
void On112Recombine(wxCommandEvent &event);
void OnRecombine(wxCommandEvent &event);
void OnShowColMenu(wxCommandEvent &event);
public:
@ -155,9 +153,7 @@ enum {
MENU_ADJOIN,
MENU_ADJOIN2,
MENU_JOIN_AS_KARAOKE,
MENU_1_12_2_RECOMBINE,
MENU_1_12_RECOMBINE,
MENU_12_2_RECOMBINE,
MENU_RECOMBINE,
MENU_SET_START_TO_VIDEO,
MENU_SET_END_TO_VIDEO,
MENU_SET_VIDEO_TO_START,