From f0938ca9f91ada9f869f424322b30c0eff62aff2 Mon Sep 17 00:00:00 2001 From: Rodrigo Braz Monteiro Date: Sat, 30 Dec 2006 22:38:05 +0000 Subject: [PATCH] Merged the three "Recombine" functions into a single one that autodetects the correct type. Originally committed to SVN as r663. --- aegisub/changelog.txt | 1 + aegisub/frame_main.cpp | 36 ++++---- aegisub/frame_main_events.cpp | 8 +- aegisub/subs_grid.cpp | 159 ++++++++++++---------------------- aegisub/subs_grid.h | 8 +- 5 files changed, 77 insertions(+), 135 deletions(-) diff --git a/aegisub/changelog.txt b/aegisub/changelog.txt index 1b7019896..97cf373da 100644 --- a/aegisub/changelog.txt +++ b/aegisub/changelog.txt @@ -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 =========================== diff --git a/aegisub/frame_main.cpp b/aegisub/frame_main.cpp index 402578c60..c0244a68c 100644 --- a/aegisub/frame_main.cpp +++ b/aegisub/frame_main.cpp @@ -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")); diff --git a/aegisub/frame_main_events.cpp b/aegisub/frame_main_events.cpp index e86cee7c4..5a9c03d81 100644 --- a/aegisub/frame_main_events.cpp +++ b/aegisub/frame_main_events.cpp @@ -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 diff --git a/aegisub/subs_grid.cpp b/aegisub/subs_grid.cpp index f5f269d1e..96490da42 100644 --- a/aegisub/subs_grid.cpp +++ b/aegisub/subs_grid.cpp @@ -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(); } diff --git a/aegisub/subs_grid.h b/aegisub/subs_grid.h index af06d4178..2ae5ffcad 100644 --- a/aegisub/subs_grid.h +++ b/aegisub/subs_grid.h @@ -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,