diff --git a/core/changelog.txt b/core/changelog.txt index f4619774e..64ef39f3e 100644 --- a/core/changelog.txt +++ b/core/changelog.txt @@ -27,6 +27,7 @@ Please visit http://aegisub.net to download latest version - Added support for reading ASS, SSA and SRT softsubs directly from Matroska files. (AMZ) - Fixed line selection after pasting. (AMZ) - Times can now be copy and pasted with ctrl+c and ctrl+v, as well as from context menu, in the time edit boxes. (AMZ) +- Plain-text lines can now be pasted into the grid. They will be inserted as default lines with the text as their content. (AMZ) = 1.10 beta - 2006.08.07 =========================== diff --git a/core/frame_main.cpp b/core/frame_main.cpp index 3a8464f56..673feaa03 100644 --- a/core/frame_main.cpp +++ b/core/frame_main.cpp @@ -247,6 +247,7 @@ void FrameMain::InitMenu() { AppendBitmapMenuItem (editMenu,Menu_Edit_Cut, _("Cut...\t") + Hotkeys.GetText(_T("Cut")), _("Cut subtitles"), wxBITMAP(cut_button)); AppendBitmapMenuItem (editMenu,Menu_Edit_Copy, _("Copy...\t") + Hotkeys.GetText(_T("Copy")), _("Copy subtitles"), wxBITMAP(copy_button)); AppendBitmapMenuItem (editMenu,Menu_Edit_Paste, _("Paste...\t") + Hotkeys.GetText(_T("Paste")), _("Paste subtitles"), wxBITMAP(paste_button)); + editMenu->Append(Menu_Edit_Paste_Over, _("Paste Over...\t") + Hotkeys.GetText(_T("Paste Over")) , _("Paste subtitles over others")); MenuBar->Append(editMenu, _("&Edit")); // Create view menu diff --git a/core/frame_main.h b/core/frame_main.h index beed9d701..c007fa3d9 100644 --- a/core/frame_main.h +++ b/core/frame_main.h @@ -175,6 +175,7 @@ private: void OnCut (wxCommandEvent &event); void OnCopy (wxCommandEvent &event); void OnPaste (wxCommandEvent &event); + void OnPasteOver (wxCommandEvent &event); void OnFind (wxCommandEvent &event); void OnFindNext (wxCommandEvent &event); void OnReplace (wxCommandEvent &event); @@ -307,6 +308,7 @@ enum { Menu_Edit_Cut, Menu_Edit_Copy, Menu_Edit_Paste, + Menu_Edit_Paste_Over, Menu_View_Language, Menu_View_Standard, diff --git a/core/frame_main_events.cpp b/core/frame_main_events.cpp index 3c483a7a0..80d644fc4 100644 --- a/core/frame_main_events.cpp +++ b/core/frame_main_events.cpp @@ -157,6 +157,7 @@ BEGIN_EVENT_TABLE(FrameMain, wxFrame) EVT_MENU(Menu_Edit_Cut, FrameMain::OnCut) EVT_MENU(Menu_Edit_Copy, FrameMain::OnCopy) EVT_MENU(Menu_Edit_Paste, FrameMain::OnPaste) + EVT_MENU(Menu_Edit_Paste_Over, FrameMain::OnPasteOver) EVT_MENU(Menu_Edit_Find, FrameMain::OnFind) EVT_MENU(Menu_Edit_Find_Next, FrameMain::OnFindNext) EVT_MENU(Menu_Edit_Replace, FrameMain::OnReplace) @@ -380,6 +381,7 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) { RebuildMenuItem(editMenu,Menu_Edit_Cut,wxBITMAP(cut_button),wxBITMAP(cut_disable_button),state); RebuildMenuItem(editMenu,Menu_Edit_Copy,wxBITMAP(copy_button),wxBITMAP(copy_disable_button),state); RebuildMenuItem(editMenu,Menu_Edit_Paste,wxBITMAP(paste_button),wxBITMAP(paste_disable_button),state); + MenuBar->Enable(Menu_Edit_Paste_Over,state); } //Thaw(); @@ -1115,6 +1117,13 @@ void FrameMain::OnPaste (wxCommandEvent &event) { } +////////////// +// Paste over +void FrameMain::OnPasteOver (wxCommandEvent &event) { + SubsBox->PasteLines(SubsBox->GetFirstSelRow(),true); +} + + //////////////////////// // Select visible lines void FrameMain::OnSelectVisible (wxCommandEvent &event) { diff --git a/core/hotkeys.cpp b/core/hotkeys.cpp index 67acecfa0..cf9c64167 100644 --- a/core/hotkeys.cpp +++ b/core/hotkeys.cpp @@ -324,6 +324,7 @@ void HotkeyManager::LoadDefaults() { SetHotkey(_("Copy"),_T("Ctrl-C")); SetHotkey(_("Cut"),_T("Ctrl-X")); SetHotkey(_("Paste"),_T("Ctrl-V")); + SetHotkey(_("Paste Over"),_T("Ctrl-Shift-V")); SetHotkey(_("Video Jump"),_T("Ctrl-G")); SetHotkey(_("Jump Video to Start"),_T("Ctrl-1")); diff --git a/core/subs_grid.cpp b/core/subs_grid.cpp index a59973fbd..7ff21499a 100644 --- a/core/subs_grid.cpp +++ b/core/subs_grid.cpp @@ -846,7 +846,7 @@ void SubtitlesGrid::CutLines(wxArrayInt target) { ////////////////////////////// // Paste lines from clipboard -void SubtitlesGrid::PasteLines(int n) { +void SubtitlesGrid::PasteLines(int n,bool pasteOver) { BeginBatch(); // Prepare text @@ -864,21 +864,60 @@ void SubtitlesGrid::PasteLines(int n) { // Check if it actually got anything if (!data.empty()) { + // Insert data int inserted = 0; + bool asked = false; + wxArrayInt pasteOverOptions; wxStringTokenizer token (data,_T("\r\n"),wxTOKEN_STRTOK); while (token.HasMoreTokens()) { + // Convert data into an AssDialogue wxString curdata = token.GetNextToken(); curdata.Trim(true); curdata.Trim(false); + AssDialogue *curdiag; try { - AssDialogue *curdiag = new AssDialogue(curdata); - InsertLine(curdiag,n+inserted,false,false); - inserted++; + curdiag = new AssDialogue(curdata); } catch (...) { + curdiag = new AssDialogue(); + curdiag->Text = curdata; } + + // Paste over + if (pasteOver) { + if (n+inserted < GetRows()) { + // Get list of options to paste over, if not asked yet + if (asked == false) { + asked = true; + // TODO: Replace this with dialog + for (int i=0;i<10;i++) pasteOverOptions.Add(0); + pasteOverOptions[9] = 1; + } + + // Paste over + AssDialogue *target = GetDialogue(n+inserted); + if (pasteOverOptions[0]) target->Layer = curdiag->Layer; + if (pasteOverOptions[1]) target->Start = curdiag->Start; + if (pasteOverOptions[2]) target->End = curdiag->End; + if (pasteOverOptions[3]) target->Style = curdiag->Style; + if (pasteOverOptions[4]) target->Actor = curdiag->Actor; + if (pasteOverOptions[5]) target->MarginL = curdiag->MarginL; + if (pasteOverOptions[6]) target->MarginR = curdiag->MarginR; + if (pasteOverOptions[7]) target->MarginV = curdiag->MarginV; + if (pasteOverOptions[8]) target->Effect = curdiag->Effect; + if (pasteOverOptions[9]) target->Text = curdiag->Text; + } + delete curdiag; + } + + // Paste normally + else InsertLine(curdiag,n+inserted,false,false); + + // Increment insertion + inserted++; } + // Update data post-insertion if (inserted > 0) { // Commit UpdateMaps(); @@ -887,14 +926,17 @@ void SubtitlesGrid::PasteLines(int n) { CommitChanges(); // Set selection - SelectRow(n); - for (int i=n+1;iSetToLine(n); } - editBox->SetToLine(n); } } + // Done EndBatch(); } diff --git a/core/subs_grid.h b/core/subs_grid.h index b696c63e2..d6b1c9e08 100644 --- a/core/subs_grid.h +++ b/core/subs_grid.h @@ -126,7 +126,7 @@ public: void CopyLines(wxArrayInt lines); void CutLines(wxArrayInt lines); - void PasteLines(int pos); + void PasteLines(int pos,bool over=false); DECLARE_EVENT_TABLE() };