/////////////////// // split current line void FrameMain::OnVideoTrackSplitLine(wxCommandEvent &event) { videoBox->videoDisplay->Stop(); // Get line AssDialogue *curline = SubsBox->GetDialogue(EditBox->linen); if (!curline) return; if( !curline->Movement ) return; // Create split lines int StartFrame = VFR_Output.GetFrameAtTime(curline->Start.GetMS(),true); int EndFrame = VFR_Output.GetFrameAtTime(curline->End.GetMS(),false); AssFile *subs = AssFile::top; int ResXValue,ResYValue; swscanf( subs->GetScriptInfo(_T("PlayResX")), _T("%d"), &ResXValue ); swscanf( subs->GetScriptInfo(_T("PlayResY")), _T("%d"), &ResYValue ); int SrcXValue = videoBox->videoDisplay->provider->GetSourceWidth(); int SrcYValue = videoBox->videoDisplay->provider->GetSourceHeight(); float sx = float(ResXValue)/float(SrcXValue); float sy = float(ResYValue)/float(SrcYValue); for( int Frame = StartFrame; Frame < EndFrame; Frame ++ ) { int localframe = Frame - StartFrame; while( curline->Movement->Frames.size() <= localframe ) localframe--; FexMovementFrame f = curline->Movement->Frames[localframe]; // f.Pos.x /= videoBox->videoDisplay->GetW AssDialogue *cur = new AssDialogue( curline->GetEntryData() ); cur->Start.SetMS(VFR_Output.GetTimeAtFrame(Frame,true)); cur->End.SetMS(VFR_Output.GetTimeAtFrame(Frame,false)); cur->Text = wxString::Format( _T("{\\pos(%.0f,%.0f)\\fscx%.2f\\fscy%.2f}"), f.Pos.x*sx, f.Pos.y*sy, f.Scale.x*100, f.Scale.y*100 ) + cur->Text; cur->UpdateData(); SubsBox->InsertLine(cur,EditBox->linen + Frame - StartFrame,true,false); } // Remove Movement DeleteMovement( curline->Movement ); curline->Movement = 0; // Remove Tracker delete curline->Tracker; curline->Tracker = 0; // Remove this line SubsBox->DeleteLines(SubsBox->GetRangeArray(EditBox->linen, EditBox->linen)); videoBox->videoDisplay->RefreshVideo(); }
void SubtitlesGrid::CopyLines(wxArrayInt target) { // Prepare text wxString data; AssDialogue *cur; int nrows = target.Count(); bool first = true; for (int i=0;i<nrows;i++) { if (!first) data += "\r\n"; first = false; cur = GetDialogue(target[i]); data += cur->GetEntryData(); } // Send to clipboard if (wxTheClipboard->Open()) { wxTheClipboard->SetData(new wxTextDataObject(data)); wxTheClipboard->Close(); } }