mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-24 16:20:05 +02:00
No more separate start/stop button on Scrubbing toolbar...
... This finalizes (I hope) the set of buttons, but maybe not their left to right order. Behavior of the scrub bar is still not settled.
This commit is contained in:
parent
05c5a6a7a7
commit
8cba525b6c
@ -69,6 +69,7 @@
|
||||
|
||||
#include "../tracks/ui/Scrubbing.h"
|
||||
#include "../prefs/PlaybackPrefs.h"
|
||||
#include "../toolbars/ToolManager.h"
|
||||
|
||||
IMPLEMENT_CLASS(ControlToolBar, ToolBar);
|
||||
|
||||
@ -831,6 +832,9 @@ void ControlToolBar::StopPlaying(bool stopStream /* = true*/)
|
||||
meter->Clear();
|
||||
}
|
||||
}
|
||||
|
||||
const auto toolbar = project->GetToolManager()->GetToolBar(ScrubbingBarID);
|
||||
toolbar->EnableDisableButtons();
|
||||
}
|
||||
|
||||
void ControlToolBar::Pause()
|
||||
|
@ -1,4 +1,4 @@
|
||||
/**********************************************************************
|
||||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
@ -389,8 +389,8 @@ IMPLEMENT_CLASS(ScrubbingToolBar, ToolBar);
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
BEGIN_EVENT_TABLE( ScrubbingToolBar, ToolBar )
|
||||
EVT_COMMAND_RANGE( STBStartID,
|
||||
STBStartID + STBNumButtons - 1,
|
||||
EVT_COMMAND_RANGE( STBFirstButton,
|
||||
STBFirstButton + STBNumButtons - 1,
|
||||
wxEVT_COMMAND_BUTTON_CLICKED,
|
||||
ScrubbingToolBar::OnButton )
|
||||
END_EVENT_TABLE()
|
||||
@ -444,8 +444,6 @@ void ScrubbingToolBar::Populate()
|
||||
MakeButtonBackgroundsSmall();
|
||||
|
||||
/* Buttons */
|
||||
AddButton(bmpPlay, bmpStop, bmpPlayDisabled, STBStartID,
|
||||
_("Start scrubbing"), true);
|
||||
AddButton(bmpScrub, bmpScrub, bmpScrubDisabled, STBScrubID,
|
||||
_("Scrub"), true);
|
||||
AddButton(bmpSeek, bmpSeek, bmpSeekDisabled, STBSeekID,
|
||||
@ -472,29 +470,34 @@ void ScrubbingToolBar::UpdatePrefs()
|
||||
void ScrubbingToolBar::RegenerateTooltips()
|
||||
{
|
||||
#if wxUSE_TOOLTIPS
|
||||
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
|
||||
"Scrubbing" is variable-speed playback, ...
|
||||
"Seeking" is normal speed playback but with skips
|
||||
*/
|
||||
auto project = GetActiveProject();
|
||||
if (project) {
|
||||
auto startStop = mButtons[STBStartID];
|
||||
auto &scrubber = project->GetScrubber();
|
||||
if(scrubber.HasStartedScrubbing() || scrubber.IsScrubbing()) {
|
||||
if (scrubber.Seeks())
|
||||
startStop->SetToolTip(_("Stop seeking"));
|
||||
else
|
||||
startStop->SetToolTip(_("Stop scrubbing"));
|
||||
}
|
||||
else {
|
||||
if (scrubber.Seeks())
|
||||
startStop->SetToolTip(_("Start seeking"));
|
||||
else
|
||||
startStop->SetToolTip(_("Start scrubbing"));
|
||||
}
|
||||
|
||||
const auto scrubButton = mButtons[STBScrubID];
|
||||
const auto seekButton = mButtons[STBSeekID];
|
||||
|
||||
scrubButton->SetToolTip(
|
||||
scrubber.Scrubs()
|
||||
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
|
||||
"Scrubbing" is variable-speed playback, ...
|
||||
"Seeking" is normal speed playback but with skips
|
||||
*/
|
||||
? _("Stop Scrubbing")
|
||||
: _("Start Scrubbing")
|
||||
);
|
||||
|
||||
seekButton->SetToolTip(
|
||||
scrubber.Seeks()
|
||||
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
|
||||
"Scrubbing" is variable-speed playback, ...
|
||||
"Seeking" is normal speed playback but with skips
|
||||
*/
|
||||
? _("Stop Seeking")
|
||||
: _("Start Seeking")
|
||||
);
|
||||
}
|
||||
mButtons[STBScrubID]->SetToolTip(_("Scrub"));
|
||||
mButtons[STBSeekID]->SetToolTip(_("Seek"));
|
||||
|
||||
mButtons[STBBarID]->SetToolTip(_("Scrub bar"));
|
||||
#endif
|
||||
}
|
||||
@ -508,9 +511,6 @@ void ScrubbingToolBar::OnButton(wxCommandEvent &event)
|
||||
int id = event.GetId();
|
||||
|
||||
switch (id) {
|
||||
case STBStartID:
|
||||
scrubber.OnStartStop(event);
|
||||
break;
|
||||
case STBScrubID:
|
||||
scrubber.OnScrub(event);
|
||||
break;
|
||||
@ -538,25 +538,36 @@ void ScrubbingToolBar::EnableDisableButtons()
|
||||
if (!p) return;
|
||||
|
||||
auto &scrubber = p->GetScrubber();
|
||||
if (scrubber.Scrubs())
|
||||
const auto canScrub = scrubber.CanScrub();
|
||||
|
||||
if (scrubber.Scrubs()) {
|
||||
scrubButton->PushDown();
|
||||
else
|
||||
scrubButton->Enable();
|
||||
}
|
||||
else {
|
||||
scrubButton->PopUp();
|
||||
if (canScrub)
|
||||
scrubButton->Enable();
|
||||
else
|
||||
scrubButton->Disable();
|
||||
}
|
||||
|
||||
if (scrubber.Seeks())
|
||||
if (scrubber.Seeks()) {
|
||||
seekButton->PushDown();
|
||||
else
|
||||
seekButton->Enable();
|
||||
}
|
||||
else {
|
||||
seekButton->PopUp();
|
||||
if (canScrub)
|
||||
seekButton->Enable();
|
||||
else
|
||||
seekButton->Disable();
|
||||
}
|
||||
|
||||
const auto startButton = mButtons[STBStartID];
|
||||
if (scrubber.CanScrub())
|
||||
startButton->Enable();
|
||||
else
|
||||
startButton->Disable();
|
||||
|
||||
mButtons[STBBarID]->Enable();
|
||||
const auto barButton = mButtons[STBBarID];
|
||||
barButton->Enable();
|
||||
if (p->GetRulerPanel()->ShowingScrubBar())
|
||||
mButtons[STBBarID]->PushDown();
|
||||
barButton->PushDown();
|
||||
else
|
||||
mButtons[STBBarID]->PopUp();
|
||||
barButton->PopUp();
|
||||
}
|
||||
|
@ -113,12 +113,12 @@ class wxWindow;
|
||||
class AButton;
|
||||
|
||||
enum {
|
||||
STBStartID,
|
||||
STBScrubID,
|
||||
STBSeekID,
|
||||
STBBarID,
|
||||
|
||||
STBNumButtons
|
||||
STBNumButtons,
|
||||
STBFirstButton = STBScrubID
|
||||
};
|
||||
|
||||
class ScrubbingToolBar final : public ToolBar {
|
||||
|
@ -229,18 +229,13 @@ namespace {
|
||||
"Seeking" is normal speed playback but with skips, ...
|
||||
*/
|
||||
{ wxT("Scrub"), XO("&Scrub"), XO("Scrubbing"),
|
||||
AlwaysEnabledFlag,
|
||||
CanStopAudioStreamFlag,
|
||||
&Scrubber::OnScrub, false, &Scrubber::Scrubs,
|
||||
},
|
||||
|
||||
{ wxT("Seek"), XO("See&k"), XO("Seeking"),
|
||||
AlwaysEnabledFlag,
|
||||
&Scrubber::OnSeek, true, &Scrubber::Seeks,
|
||||
},
|
||||
|
||||
{ wxT("StartStopScrubSeek"), XO("Star&t/Stop"), XO(""),
|
||||
CanStopAudioStreamFlag,
|
||||
&Scrubber::OnStartStop, true, nullptr
|
||||
&Scrubber::OnSeek, true, &Scrubber::Seeks,
|
||||
},
|
||||
|
||||
{ wxT("ToggleScrubBar"), XO("Scrub Bar"), XO(""),
|
||||
@ -249,7 +244,7 @@ namespace {
|
||||
},
|
||||
};
|
||||
|
||||
enum { nMenuItems = sizeof(menuItems) / sizeof(*menuItems), StartMenuItem = 2 };
|
||||
enum { nMenuItems = sizeof(menuItems) / sizeof(*menuItems) };
|
||||
|
||||
inline const MenuItem &FindMenuItem(bool seek)
|
||||
{
|
||||
@ -535,7 +530,8 @@ bool Scrubber::IsScrubbing() const
|
||||
{
|
||||
if (mScrubToken <= 0)
|
||||
return false;
|
||||
else if (mScrubToken == mProject->GetAudioIOToken())
|
||||
else if (mScrubToken == mProject->GetAudioIOToken() &&
|
||||
mProject->IsAudioActive())
|
||||
return true;
|
||||
else {
|
||||
const_cast<Scrubber&>(*this).mScrubToken = -1;
|
||||
@ -545,6 +541,16 @@ bool Scrubber::IsScrubbing() const
|
||||
}
|
||||
}
|
||||
|
||||
bool Scrubber::Seeks() const
|
||||
{
|
||||
return (HasStartedScrubbing() || IsScrubbing()) && mSeeking;
|
||||
}
|
||||
|
||||
bool Scrubber::Scrubs() const
|
||||
{
|
||||
return (HasStartedScrubbing() || IsScrubbing()) && !mSeeking;
|
||||
}
|
||||
|
||||
bool Scrubber::ShouldDrawScrubSpeed()
|
||||
{
|
||||
if (mDragging)
|
||||
@ -800,11 +806,9 @@ void Scrubber::DoScrub()
|
||||
mProject->GetControlToolBar()->StopPlaying();
|
||||
}
|
||||
|
||||
void Scrubber::OnScrubOrSeek(bool &toToggle, bool &other)
|
||||
void Scrubber::OnScrubOrSeek(bool seek)
|
||||
{
|
||||
toToggle = !toToggle;
|
||||
if (toToggle)
|
||||
other = false;
|
||||
mSeeking = seek;
|
||||
|
||||
if (HasStartedScrubbing()) {
|
||||
// Show the correct status.
|
||||
@ -821,22 +825,19 @@ void Scrubber::OnScrubOrSeek(bool &toToggle, bool &other)
|
||||
scrubbingToolBar->EnableDisableButtons();
|
||||
scrubbingToolBar->RegenerateTooltips();
|
||||
|
||||
DoScrub();
|
||||
|
||||
CheckMenuItems();
|
||||
}
|
||||
|
||||
void Scrubber::OnScrub(wxCommandEvent&)
|
||||
{
|
||||
OnScrubOrSeek(mScrubbing, mSeeking);
|
||||
OnScrubOrSeek(false);
|
||||
}
|
||||
|
||||
void Scrubber::OnSeek(wxCommandEvent&)
|
||||
{
|
||||
OnScrubOrSeek(mSeeking, mScrubbing);
|
||||
}
|
||||
|
||||
void Scrubber::OnStartStop(wxCommandEvent&)
|
||||
{
|
||||
DoScrub();
|
||||
OnScrubOrSeek(true);
|
||||
}
|
||||
|
||||
void Scrubber::OnToggleScrubBar(wxCommandEvent&)
|
||||
@ -852,15 +853,14 @@ enum { CMD_ID = 8000 };
|
||||
BEGIN_EVENT_TABLE(Scrubber, wxEvtHandler)
|
||||
EVT_MENU(CMD_ID, Scrubber::OnScrub)
|
||||
EVT_MENU(CMD_ID + 1, Scrubber::OnSeek)
|
||||
EVT_MENU(CMD_ID + 2, Scrubber::OnStartStop)
|
||||
EVT_MENU(CMD_ID + 3, Scrubber::OnToggleScrubBar)
|
||||
EVT_MENU(CMD_ID + 2, Scrubber::OnToggleScrubBar)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
BEGIN_EVENT_TABLE(Scrubber::Forwarder, wxEvtHandler)
|
||||
EVT_MOUSE_EVENTS(Scrubber::Forwarder::OnMouse)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
static_assert(nMenuItems == 4, "wrong number of items");
|
||||
static_assert(nMenuItems == 3, "wrong number of items");
|
||||
|
||||
const wxString &Scrubber::GetUntranslatedStateString() const
|
||||
{
|
||||
@ -890,7 +890,7 @@ bool Scrubber::CanScrub() const
|
||||
{
|
||||
// Return the enabled state for the menu item that really launches the scrub or seek.
|
||||
auto cm = mProject->GetCommandManager();
|
||||
return cm->GetEnabled(menuItems[StartMenuItem].name);
|
||||
return cm->GetEnabled(menuItems[ 0 ].name);
|
||||
}
|
||||
|
||||
void Scrubber::AddMenuItems()
|
||||
|
@ -97,12 +97,8 @@ public:
|
||||
void SetScrollScrubbing(bool value)
|
||||
{ mSmoothScrollingScrub = value; }
|
||||
|
||||
bool Seeks() const
|
||||
{ return mSeeking; }
|
||||
|
||||
bool Scrubs() const
|
||||
{ return mScrubbing; }
|
||||
|
||||
bool Seeks() const;
|
||||
bool Scrubs() const;
|
||||
bool ShowsBar() const;
|
||||
|
||||
void Cancel()
|
||||
@ -122,10 +118,9 @@ public:
|
||||
// For popup
|
||||
void PopulatePopupMenu(wxMenu &menu);
|
||||
|
||||
void OnScrubOrSeek(bool &toToggle, bool &other);
|
||||
void OnScrubOrSeek(bool seek);
|
||||
void OnScrub(wxCommandEvent&);
|
||||
void OnSeek(wxCommandEvent&);
|
||||
void OnStartStop(wxCommandEvent&);
|
||||
void OnToggleScrubBar(wxCommandEvent&);
|
||||
|
||||
// A string to put in the leftmost part of the status bar
|
||||
@ -163,9 +158,6 @@ private:
|
||||
wxCoord mLastScrubPosition {};
|
||||
bool mSmoothScrollingScrub;
|
||||
|
||||
// These hold the three-way choice among click-to-scrub, click-to-seek, or disabled.
|
||||
// Not both true.
|
||||
bool mScrubbing {};
|
||||
bool mSeeking {};
|
||||
|
||||
bool mDragging {};
|
||||
|
Loading…
x
Reference in New Issue
Block a user