mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-21 23:00:06 +02:00
Scrub bar show/hide button on Scrubbing toolbar
This commit is contained in:
parent
a590cbd343
commit
b1ca48c23e
@ -374,6 +374,7 @@ void EditToolBar::EnableDisableButtons()
|
|||||||
#include "../Track.h"
|
#include "../Track.h"
|
||||||
#include "../UndoManager.h"
|
#include "../UndoManager.h"
|
||||||
#include "../widgets/AButton.h"
|
#include "../widgets/AButton.h"
|
||||||
|
#include "../widgets/Ruler.h"
|
||||||
#include "../tracks/ui/Scrubbing.h"
|
#include "../tracks/ui/Scrubbing.h"
|
||||||
|
|
||||||
#include "../Experimental.h"
|
#include "../Experimental.h"
|
||||||
@ -449,6 +450,9 @@ void ScrubbingToolBar::Populate()
|
|||||||
_("Scrub"), true);
|
_("Scrub"), true);
|
||||||
AddButton(bmpSeek, bmpSeek, bmpSeekDisabled, STBSeekID,
|
AddButton(bmpSeek, bmpSeek, bmpSeekDisabled, STBSeekID,
|
||||||
_("Seek"), true);
|
_("Seek"), true);
|
||||||
|
AddButton(bmpToggleScrubBar, bmpToggleScrubBar, bmpToggleScrubBar,
|
||||||
|
STBBarID,
|
||||||
|
_("Scrub bar"), true);
|
||||||
|
|
||||||
|
|
||||||
RegenerateTooltips();
|
RegenerateTooltips();
|
||||||
@ -491,6 +495,7 @@ void ScrubbingToolBar::RegenerateTooltips()
|
|||||||
}
|
}
|
||||||
mButtons[STBScrubID]->SetToolTip(_("Scrub"));
|
mButtons[STBScrubID]->SetToolTip(_("Scrub"));
|
||||||
mButtons[STBSeekID]->SetToolTip(_("Seek"));
|
mButtons[STBSeekID]->SetToolTip(_("Seek"));
|
||||||
|
mButtons[STBBarID]->SetToolTip(_("Scrub bar"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,6 +517,9 @@ void ScrubbingToolBar::OnButton(wxCommandEvent &event)
|
|||||||
case STBSeekID:
|
case STBSeekID:
|
||||||
scrubber.OnSeek(event);
|
scrubber.OnSeek(event);
|
||||||
break;
|
break;
|
||||||
|
case STBBarID:
|
||||||
|
scrubber.OnToggleScrubBar(event);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
wxASSERT(false);
|
wxASSERT(false);
|
||||||
}
|
}
|
||||||
@ -545,4 +553,10 @@ void ScrubbingToolBar::EnableDisableButtons()
|
|||||||
startButton->Enable();
|
startButton->Enable();
|
||||||
else
|
else
|
||||||
startButton->Disable();
|
startButton->Disable();
|
||||||
|
|
||||||
|
mButtons[STBBarID]->Enable();
|
||||||
|
if (p->GetRulerPanel()->ShowingScrubBar())
|
||||||
|
mButtons[STBBarID]->PushDown();
|
||||||
|
else
|
||||||
|
mButtons[STBBarID]->PopUp();
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,7 @@ enum {
|
|||||||
STBStartID,
|
STBStartID,
|
||||||
STBScrubID,
|
STBScrubID,
|
||||||
STBSeekID,
|
STBSeekID,
|
||||||
|
STBBarID,
|
||||||
|
|
||||||
STBNumButtons
|
STBNumButtons
|
||||||
};
|
};
|
||||||
@ -133,8 +134,8 @@ public:
|
|||||||
|
|
||||||
void Populate();
|
void Populate();
|
||||||
void Repaint(wxDC * WXUNUSED(dc)) {};
|
void Repaint(wxDC * WXUNUSED(dc)) {};
|
||||||
void EnableDisableButtons();
|
void EnableDisableButtons() override;
|
||||||
void UpdatePrefs();
|
void UpdatePrefs() override;
|
||||||
|
|
||||||
void RegenerateTooltips() override;
|
void RegenerateTooltips() override;
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ Paul Licameli split from TrackPanel.cpp
|
|||||||
#include "../../prefs/PlaybackPrefs.h"
|
#include "../../prefs/PlaybackPrefs.h"
|
||||||
#include "../../toolbars/ControlToolBar.h"
|
#include "../../toolbars/ControlToolBar.h"
|
||||||
#include "../../toolbars/EditToolBar.h"
|
#include "../../toolbars/EditToolBar.h"
|
||||||
|
#include "../../toolbars/ToolManager.h"
|
||||||
|
|
||||||
#undef USE_TRANSCRIPTION_TOOLBAR
|
#undef USE_TRANSCRIPTION_TOOLBAR
|
||||||
#ifdef USE_TRANSCRIPTION_TOOLBAR
|
#ifdef USE_TRANSCRIPTION_TOOLBAR
|
||||||
@ -216,6 +217,7 @@ namespace {
|
|||||||
wxString name;
|
wxString name;
|
||||||
wxString label;
|
wxString label;
|
||||||
wxString status;
|
wxString status;
|
||||||
|
CommandFlag flags;
|
||||||
void (Scrubber::*memFn)(wxCommandEvent&);
|
void (Scrubber::*memFn)(wxCommandEvent&);
|
||||||
bool seek;
|
bool seek;
|
||||||
bool (Scrubber::*StatusTest)() const;
|
bool (Scrubber::*StatusTest)() const;
|
||||||
@ -227,18 +229,28 @@ namespace {
|
|||||||
"Seeking" is normal speed playback but with skips, ...
|
"Seeking" is normal speed playback but with skips, ...
|
||||||
*/
|
*/
|
||||||
{ wxT("Scrub"), XO("&Scrub"), XO("Scrubbing"),
|
{ wxT("Scrub"), XO("&Scrub"), XO("Scrubbing"),
|
||||||
&Scrubber::OnScrub, false, &Scrubber::Scrubs },
|
AlwaysEnabledFlag,
|
||||||
|
&Scrubber::OnScrub, false, &Scrubber::Scrubs,
|
||||||
|
},
|
||||||
|
|
||||||
{ wxT("Seek"), XO("See&k"), XO("Seeking"),
|
{ wxT("Seek"), XO("See&k"), XO("Seeking"),
|
||||||
&Scrubber::OnSeek, true, &Scrubber::Seeks },
|
AlwaysEnabledFlag,
|
||||||
|
&Scrubber::OnSeek, true, &Scrubber::Seeks,
|
||||||
|
},
|
||||||
|
|
||||||
{ wxT("StartStopScrubSeek"), XO("Star&t/Stop"), XO(""),
|
{ wxT("StartStopScrubSeek"), XO("Star&t/Stop"), XO(""),
|
||||||
&Scrubber::OnStartStop, true, nullptr },
|
CanStopAudioStreamFlag,
|
||||||
|
&Scrubber::OnStartStop, true, nullptr
|
||||||
|
},
|
||||||
|
|
||||||
|
{ wxT("ToggleScrubBar"), XO("Scrub Bar"), XO(""),
|
||||||
|
AlwaysEnabledFlag,
|
||||||
|
&Scrubber::OnToggleScrubBar, true, &Scrubber::ShowsBar,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum { nMenuItems = sizeof(menuItems) / sizeof(*menuItems), StartMenuItem = 2 };
|
enum { nMenuItems = sizeof(menuItems) / sizeof(*menuItems), StartMenuItem = 2 };
|
||||||
|
|
||||||
// This never finds the last item:
|
|
||||||
inline const MenuItem &FindMenuItem(bool seek)
|
inline const MenuItem &FindMenuItem(bool seek)
|
||||||
{
|
{
|
||||||
return *std::find_if(menuItems, menuItems + nMenuItems,
|
return *std::find_if(menuItems, menuItems + nMenuItems,
|
||||||
@ -514,6 +526,11 @@ void Scrubber::StopScrubbing()
|
|||||||
mProject->GetRulerPanel()->HideQuickPlayIndicator();
|
mProject->GetRulerPanel()->HideQuickPlayIndicator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Scrubber::ShowsBar() const
|
||||||
|
{
|
||||||
|
return mProject->GetRulerPanel()->ShowingScrubBar();
|
||||||
|
}
|
||||||
|
|
||||||
bool Scrubber::IsScrubbing() const
|
bool Scrubber::IsScrubbing() const
|
||||||
{
|
{
|
||||||
if (mScrubToken <= 0)
|
if (mScrubToken <= 0)
|
||||||
@ -804,7 +821,7 @@ void Scrubber::OnScrubOrSeek(bool &toToggle, bool &other)
|
|||||||
scrubbingToolBar->EnableDisableButtons();
|
scrubbingToolBar->EnableDisableButtons();
|
||||||
scrubbingToolBar->RegenerateTooltips();
|
scrubbingToolBar->RegenerateTooltips();
|
||||||
|
|
||||||
CheckMenuItem();
|
CheckMenuItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scrubber::OnScrub(wxCommandEvent&)
|
void Scrubber::OnScrub(wxCommandEvent&)
|
||||||
@ -822,19 +839,28 @@ void Scrubber::OnStartStop(wxCommandEvent&)
|
|||||||
DoScrub();
|
DoScrub();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Scrubber::OnToggleScrubBar(wxCommandEvent&)
|
||||||
|
{
|
||||||
|
mProject->GetRulerPanel()->OnToggleScrubBar();
|
||||||
|
const auto toolbar = mProject->GetToolManager()->GetToolBar(ScrubbingBarID);
|
||||||
|
toolbar->EnableDisableButtons();
|
||||||
|
CheckMenuItems();
|
||||||
|
}
|
||||||
|
|
||||||
enum { CMD_ID = 8000 };
|
enum { CMD_ID = 8000 };
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(Scrubber, wxEvtHandler)
|
BEGIN_EVENT_TABLE(Scrubber, wxEvtHandler)
|
||||||
EVT_MENU(CMD_ID, Scrubber::OnScrub)
|
EVT_MENU(CMD_ID, Scrubber::OnScrub)
|
||||||
EVT_MENU(CMD_ID + 1, Scrubber::OnSeek)
|
EVT_MENU(CMD_ID + 1, Scrubber::OnSeek)
|
||||||
EVT_MENU(CMD_ID + 2, Scrubber::OnStartStop)
|
EVT_MENU(CMD_ID + 2, Scrubber::OnStartStop)
|
||||||
|
EVT_MENU(CMD_ID + 3, Scrubber::OnToggleScrubBar)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(Scrubber::Forwarder, wxEvtHandler)
|
BEGIN_EVENT_TABLE(Scrubber::Forwarder, wxEvtHandler)
|
||||||
EVT_MOUSE_EVENTS(Scrubber::Forwarder::OnMouse)
|
EVT_MOUSE_EVENTS(Scrubber::Forwarder::OnMouse)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
static_assert(nMenuItems == 3, "wrong number of items");
|
static_assert(nMenuItems == 4, "wrong number of items");
|
||||||
|
|
||||||
const wxString &Scrubber::GetUntranslatedStateString() const
|
const wxString &Scrubber::GetUntranslatedStateString() const
|
||||||
{
|
{
|
||||||
@ -870,49 +896,48 @@ bool Scrubber::CanScrub() const
|
|||||||
void Scrubber::AddMenuItems()
|
void Scrubber::AddMenuItems()
|
||||||
{
|
{
|
||||||
auto cm = mProject->GetCommandManager();
|
auto cm = mProject->GetCommandManager();
|
||||||
auto flag = WaveTracksExistFlag;
|
|
||||||
auto flags = cm->GetDefaultFlags() | flag;
|
|
||||||
auto mask = cm->GetDefaultMask() | flag;
|
|
||||||
|
|
||||||
cm->BeginSubMenu(_("Scru&bbing"));
|
cm->BeginSubMenu(_("Scru&bbing"));
|
||||||
for (const auto &item : menuItems) {
|
for (const auto &item : menuItems) {
|
||||||
if (!item.GetStatus().empty())
|
if (item.StatusTest)
|
||||||
cm->AddCheck(item.name, wxGetTranslation(item.label),
|
cm->AddCheck(item.name, wxGetTranslation(item.label),
|
||||||
FNT(Scrubber, this, item.memFn),
|
FNT(Scrubber, this, item.memFn),
|
||||||
false,
|
false,
|
||||||
// Less restricted:
|
item.flags, item.flags);
|
||||||
AlwaysEnabledFlag, AlwaysEnabledFlag);
|
|
||||||
else
|
else
|
||||||
// The start item
|
// The start item
|
||||||
cm->AddItem(item.name, wxGetTranslation(item.label),
|
cm->AddItem(item.name, wxGetTranslation(item.label),
|
||||||
FNT(Scrubber, this, item.memFn),
|
FNT(Scrubber, this, item.memFn),
|
||||||
// More restricted:
|
item.flags, item.flags);
|
||||||
flags, mask);
|
|
||||||
}
|
}
|
||||||
cm->EndSubMenu();
|
cm->EndSubMenu();
|
||||||
CheckMenuItem();
|
CheckMenuItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scrubber::PopulateMenu(wxMenu &menu)
|
void Scrubber::PopulatePopupMenu(wxMenu &menu)
|
||||||
{
|
{
|
||||||
int id = CMD_ID;
|
int id = CMD_ID;
|
||||||
auto cm = mProject->GetCommandManager();
|
auto cm = mProject->GetCommandManager();
|
||||||
const MenuItem *checkedItem = &FindMenuItem(mSeeking);
|
|
||||||
for (const auto &item : menuItems) {
|
for (const auto &item : menuItems) {
|
||||||
if (cm->GetEnabled(item.name)) {
|
if (cm->GetEnabled(item.name)) {
|
||||||
menu.AppendCheckItem(id, item.label);
|
auto test = item.StatusTest;
|
||||||
if(&item == checkedItem)
|
menu.Append(id, item.label, wxString{},
|
||||||
|
test ? wxITEM_CHECK : wxITEM_NORMAL);
|
||||||
|
if(test && (this->*test)())
|
||||||
menu.FindItem(id)->Check();
|
menu.FindItem(id)->Check();
|
||||||
}
|
}
|
||||||
++id;
|
++id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scrubber::CheckMenuItem()
|
void Scrubber::CheckMenuItems()
|
||||||
{
|
{
|
||||||
auto cm = mProject->GetCommandManager();
|
auto cm = mProject->GetCommandManager();
|
||||||
cm->Check(menuItems[0].name, mScrubbing);
|
for (const auto &item : menuItems) {
|
||||||
cm->Check(menuItems[1].name, mSeeking);
|
auto test = item.StatusTest;
|
||||||
|
if (test)
|
||||||
|
cm->Check(item.name, (this->*test)());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -103,6 +103,8 @@ public:
|
|||||||
bool Scrubs() const
|
bool Scrubs() const
|
||||||
{ return mScrubbing; }
|
{ return mScrubbing; }
|
||||||
|
|
||||||
|
bool ShowsBar() const;
|
||||||
|
|
||||||
void Cancel()
|
void Cancel()
|
||||||
{ mCancelled = true; }
|
{ mCancelled = true; }
|
||||||
|
|
||||||
@ -118,12 +120,13 @@ public:
|
|||||||
// For the toolbar
|
// For the toolbar
|
||||||
void AddMenuItems();
|
void AddMenuItems();
|
||||||
// For popup
|
// For popup
|
||||||
void PopulateMenu(wxMenu &menu);
|
void PopulatePopupMenu(wxMenu &menu);
|
||||||
|
|
||||||
void OnScrubOrSeek(bool &toToggle, bool &other);
|
void OnScrubOrSeek(bool &toToggle, bool &other);
|
||||||
void OnScrub(wxCommandEvent&);
|
void OnScrub(wxCommandEvent&);
|
||||||
void OnSeek(wxCommandEvent&);
|
void OnSeek(wxCommandEvent&);
|
||||||
void OnStartStop(wxCommandEvent&);
|
void OnStartStop(wxCommandEvent&);
|
||||||
|
void OnToggleScrubBar(wxCommandEvent&);
|
||||||
|
|
||||||
// A string to put in the leftmost part of the status bar
|
// A string to put in the leftmost part of the status bar
|
||||||
// when scrub or seek is in progress, or else empty.
|
// when scrub or seek is in progress, or else empty.
|
||||||
@ -138,7 +141,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void DoScrub();
|
void DoScrub();
|
||||||
void OnActivateOrDeactivateApp(wxActivateEvent & event);
|
void OnActivateOrDeactivateApp(wxActivateEvent & event);
|
||||||
void CheckMenuItem();
|
void CheckMenuItems();
|
||||||
|
|
||||||
// I need this because I can't push the scrubber as an event handler
|
// I need this because I can't push the scrubber as an event handler
|
||||||
// in two places at once.
|
// in two places at once.
|
||||||
|
@ -2765,7 +2765,7 @@ void AdornedRulerPanel::UpdateStatusBarAndTooltips(StatusChoice choice)
|
|||||||
RegenerateTooltips(choice);
|
RegenerateTooltips(choice);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdornedRulerPanel::OnToggleScrubbing(/*wxCommandEvent&*/)
|
void AdornedRulerPanel::OnToggleScrubBar(/*wxCommandEvent&*/)
|
||||||
{
|
{
|
||||||
mShowScrubbing = !mShowScrubbing;
|
mShowScrubbing = !mShowScrubbing;
|
||||||
//WriteScrubEnabledPref(mShowScrubbing);
|
//WriteScrubEnabledPref(mShowScrubbing);
|
||||||
@ -2806,11 +2806,6 @@ void AdornedRulerPanel::UpdateButtonStates()
|
|||||||
: _("Unpinned play/record Head");
|
: _("Unpinned play/record Head");
|
||||||
common(*pinButton, wxT("PinnedHead"), label);
|
common(*pinButton, wxT("PinnedHead"), label);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &scrubber = mProject->GetScrubber();
|
|
||||||
|
|
||||||
if(mShowScrubbing != (scrubber.Scrubs() || scrubber.Seeks()))
|
|
||||||
OnToggleScrubbing();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdornedRulerPanel::OnTogglePinnedState(wxCommandEvent & event)
|
void AdornedRulerPanel::OnTogglePinnedState(wxCommandEvent & event)
|
||||||
@ -2888,7 +2883,7 @@ void AdornedRulerPanel::ShowScrubMenu(const wxPoint & pos)
|
|||||||
auto cleanup = finally([this]{ PopEventHandler(); });
|
auto cleanup = finally([this]{ PopEventHandler(); });
|
||||||
|
|
||||||
wxMenu rulerMenu;
|
wxMenu rulerMenu;
|
||||||
mProject->GetScrubber().PopulateMenu(rulerMenu);
|
mProject->GetScrubber().PopulatePopupMenu(rulerMenu);
|
||||||
PopupMenu(&rulerMenu, pos);
|
PopupMenu(&rulerMenu, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,6 +330,9 @@ public:
|
|||||||
void HideQuickPlayIndicator();
|
void HideQuickPlayIndicator();
|
||||||
void UpdateQuickPlayPos(wxCoord &mousPosX);
|
void UpdateQuickPlayPos(wxCoord &mousPosX);
|
||||||
|
|
||||||
|
bool ShowingScrubBar() const { return mShowScrubbing; }
|
||||||
|
void OnToggleScrubBar(/*wxCommandEvent&*/);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnCapture(wxCommandEvent & evt);
|
void OnCapture(wxCommandEvent & evt);
|
||||||
void OnPaint(wxPaintEvent &evt);
|
void OnPaint(wxPaintEvent &evt);
|
||||||
@ -413,8 +416,6 @@ private:
|
|||||||
void OnAutoScroll(wxCommandEvent &evt);
|
void OnAutoScroll(wxCommandEvent &evt);
|
||||||
void OnLockPlayRegion(wxCommandEvent &evt);
|
void OnLockPlayRegion(wxCommandEvent &evt);
|
||||||
|
|
||||||
void OnToggleScrubbing(/*wxCommandEvent&*/);
|
|
||||||
|
|
||||||
void OnContextMenu(wxContextMenuEvent & WXUNUSED(event));
|
void OnContextMenu(wxContextMenuEvent & WXUNUSED(event));
|
||||||
|
|
||||||
void OnTogglePinnedState(wxCommandEvent & event);
|
void OnTogglePinnedState(wxCommandEvent & event);
|
||||||
@ -440,7 +441,7 @@ private:
|
|||||||
|
|
||||||
StatusChoice mPrevZone { StatusChoice::NoChange };
|
StatusChoice mPrevZone { StatusChoice::NoChange };
|
||||||
|
|
||||||
bool mShowScrubbing { true };
|
bool mShowScrubbing { false };
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user