From 8f077dc4eed6ebcc532bd331f4841e68b1472879 Mon Sep 17 00:00:00 2001 From: Rodrigo Braz Monteiro Date: Thu, 6 Jul 2006 22:39:58 +0000 Subject: [PATCH] Placeholder Edit->Sort menu entry and disabled audio scrubbing again Originally committed to SVN as r466. --- core/audio_display.cpp | 103 ++++++++++++++++++++----------------- core/audio_display.h | 1 + core/frame_main.cpp | 1 + core/frame_main.h | 2 + core/frame_main_events.cpp | 8 +++ 5 files changed, 69 insertions(+), 46 deletions(-) diff --git a/core/audio_display.cpp b/core/audio_display.cpp index 0117d3469..ea8b0c74b 100644 --- a/core/audio_display.cpp +++ b/core/audio_display.cpp @@ -1210,7 +1210,7 @@ void AudioDisplay::OnMouseEvent(wxMouseEvent& event) { } // Stop scrubbing - bool scrubButton = event.ButtonIsDown(wxMOUSE_BTN_MIDDLE); + bool scrubButton = false && event.ButtonIsDown(wxMOUSE_BTN_MIDDLE); if (scrubbing && !scrubButton) { // Release mouse scrubbing = false; @@ -1237,66 +1237,77 @@ void AudioDisplay::OnMouseEvent(wxMouseEvent& event) { // Set variables scrubLastPos = GetSampleAtX(x); scrubTime = clock(); + scrubLastRate = provider->GetSampleRate(); } // Scrub if (scrubbing && scrubButton) { // Get current data - __int64 curScrubPos = MAX(0,GetSampleAtX(x)); - __int64 scrubDelta = curScrubPos - scrubLastPos; + __int64 exactPos = MAX(0,GetSampleAtX(x)); int curScrubTime = clock(); int scrubDeltaTime = curScrubTime - scrubTime; + bool invert = exactPos < scrubLastPos; + __int64 curScrubPos = exactPos; - // Copy data to buffer - if (scrubDelta != 0 && scrubDeltaTime > 0) { - // Create buffer - int bufSize = scrubDeltaTime * scrubProvider->GetSampleRate() / CLK_TCK; - short *buf = new short[bufSize]; + if (scrubDeltaTime > 0) { + // Get derived data + int rateChange = provider->GetSampleRate()/20; + int curRate = MID(int(scrubLastRate-rateChange),abs(int(exactPos - scrubLastPos)) * CLK_TCK / scrubDeltaTime,int(scrubLastRate+rateChange)); + if (abs(curRate-scrubLastRate) < rateChange) curRate = scrubLastRate; + curScrubPos = scrubLastPos + (curRate * scrubDeltaTime / CLK_TCK * (invert ? -1 : 1)); + __int64 scrubDelta = curScrubPos - scrubLastPos; + scrubLastRate = curRate; - // Flag as inverted, if necessary - bool invert = scrubDelta < 0; - if (invert) scrubDelta = -scrubDelta; + // Copy data to buffer + if (scrubDelta != 0) { + // Create buffer + int bufSize = scrubDeltaTime * scrubProvider->GetSampleRate() / CLK_TCK; + short *buf = new short[bufSize]; - // Copy data from original provider to temp buffer - short *temp = new short[scrubDelta]; - provider->GetAudio(temp,MIN(curScrubPos,scrubLastPos),scrubDelta); + // Flag as inverted, if necessary + if (invert) scrubDelta = -scrubDelta; - // Scale - float scale = float(double(scrubDelta) / double(bufSize)); - float start,end; - int istart,iend; - float tempfinal; - for (int i=0;iGetAudio(temp,MIN(curScrubPos,scrubLastPos),scrubDelta); + + // Scale + float scale = float(double(scrubDelta) / double(bufSize)); + float start,end; + int istart,iend; + float tempfinal; + for (int i=0;iAppend(buf,bufSize); - if (!player->IsPlaying()) player->Play(0,0xFFFFFFFFFFFF); - delete buf; + // Send data to provider + scrubProvider->Append(buf,bufSize); + if (!player->IsPlaying()) player->Play(0,0xFFFFFFFFFFFF); + delete buf; + } } // Update last pos and time diff --git a/core/audio_display.h b/core/audio_display.h index df9154d08..f1543fbac 100644 --- a/core/audio_display.h +++ b/core/audio_display.h @@ -101,6 +101,7 @@ private: int scrubTime; __int64 scrubLastPos; bool scrubbing; + int scrubLastRate; void OnPaint(wxPaintEvent &event); void OnMouseEvent(wxMouseEvent &event); diff --git a/core/frame_main.cpp b/core/frame_main.cpp index 7db81e74f..442aba6c2 100644 --- a/core/frame_main.cpp +++ b/core/frame_main.cpp @@ -238,6 +238,7 @@ void FrameMain::InitMenu() { editMenu->AppendSeparator(); editMenu->Append(Menu_Edit_Select, _("&Select lines...\t") + Hotkeys.GetText(_T("Select lines")), _("Selects lines based on defined criterea")); editMenu->Append(Menu_Edit_Shift, _("S&hift times...\t") + Hotkeys.GetText(_T("Shift times")), _("Shift subtitles by time or frames")); + editMenu->Append(Menu_Edit_Sort, _("Sort by Time"), _("Sort all subtitles by their start times")); editMenu->AppendSeparator(); AppendBitmapMenuItem (editMenu,Menu_Edit_Find, _("&Find...\t") + Hotkeys.GetText(_T("Find")), _("Find words in subtitles"),wxBITMAP(find_button)); editMenu->Append(Menu_Edit_Find_Next, _("Find next\t") + Hotkeys.GetText(_T("Find Next")), _("Find next match of last word")); diff --git a/core/frame_main.h b/core/frame_main.h index 8c578c46d..383e57017 100644 --- a/core/frame_main.h +++ b/core/frame_main.h @@ -182,6 +182,7 @@ private: void OnReplace (wxCommandEvent &event); void OnJumpTo (wxCommandEvent &event); void OnShift (wxCommandEvent &event); + void OnSort (wxCommandEvent &event); void OnOpenProperties (wxCommandEvent &event); void OnOpenStylesManager (wxCommandEvent &event); void OnOpenAttachments (wxCommandEvent &event); @@ -300,6 +301,7 @@ enum { Menu_Edit_Select, Menu_Edit_Undo, Menu_Edit_Redo, + Menu_Edit_Sort, Menu_Edit_Find, Menu_Edit_Find_Next, Menu_Edit_Replace, diff --git a/core/frame_main_events.cpp b/core/frame_main_events.cpp index c26a4598f..62db99b01 100644 --- a/core/frame_main_events.cpp +++ b/core/frame_main_events.cpp @@ -165,6 +165,7 @@ BEGIN_EVENT_TABLE(FrameMain, wxFrame) EVT_MENU(Menu_Edit_Replace, FrameMain::OnReplace) EVT_MENU(Menu_Edit_Shift, FrameMain::OnShift) EVT_MENU(Menu_Edit_Select, FrameMain::OnSelect) + EVT_MENU(Menu_Edit_Sort, FrameMain::OnSort) EVT_MENU(Menu_Tools_Properties, FrameMain::OnOpenProperties) EVT_MENU(Menu_Tools_Styles_Manager, FrameMain::OnOpenStylesManager) @@ -1157,6 +1158,13 @@ void FrameMain::OnSelect (wxCommandEvent &event) { } +////////////////// +// Sort subtitles +void FrameMain::OnSort (wxCommandEvent &event) { + // TODO +} + + ////////////////////////// // Open styling assistant void FrameMain::OnOpenStylingAssistant (wxCommandEvent &event) {