From 6a4d6ceedad0a258f18f3b1e2de233153ae93040 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 25 Jun 2016 14:16:09 -0400 Subject: [PATCH] Separate source files for ScrubbingToolBar --- mac/Audacity.xcodeproj/project.pbxproj | 12 +- src/Makefile.am | 2 + src/Project.cpp | 1 + src/toolbars/EditToolBar.cpp | 243 ----------------- src/toolbars/EditToolBar.h | 62 ----- src/toolbars/ScrubbingToolBar.cpp | 253 ++++++++++++++++++ src/toolbars/ScrubbingToolBar.h | 76 ++++++ src/toolbars/ToolManager.cpp | 1 + src/tracks/ui/Scrubbing.cpp | 2 +- win/Projects/Audacity/Audacity.vcxproj | 2 + .../Audacity/Audacity.vcxproj.filters | 6 + 11 files changed, 351 insertions(+), 309 deletions(-) create mode 100644 src/toolbars/ScrubbingToolBar.cpp create mode 100644 src/toolbars/ScrubbingToolBar.h diff --git a/mac/Audacity.xcodeproj/project.pbxproj b/mac/Audacity.xcodeproj/project.pbxproj index 8d200bda0..948884d26 100644 --- a/mac/Audacity.xcodeproj/project.pbxproj +++ b/mac/Audacity.xcodeproj/project.pbxproj @@ -1215,6 +1215,7 @@ 5ED1D0AD1CDE55BD00471E3C /* Overlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0A91CDE55BD00471E3C /* Overlay.cpp */; }; 5ED1D0AE1CDE55BD00471E3C /* OverlayPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AB1CDE55BD00471E3C /* OverlayPanel.cpp */; }; 5ED1D0B11CDE560C00471E3C /* BackedPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AF1CDE560C00471E3C /* BackedPanel.cpp */; }; + 5EF17C231D1F0A690090A642 /* ScrubbingToolBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EF17C211D1F0A690090A642 /* ScrubbingToolBar.cpp */; }; 8406A93812D0F2510011EA01 /* EQDefaultCurves.xml in Resources */ = {isa = PBXBuildFile; fileRef = 8406A93712D0F2510011EA01 /* EQDefaultCurves.xml */; }; 8484F31413086237002DF7F0 /* DeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8484F31213086237002DF7F0 /* DeviceManager.cpp */; }; ED15214D163C22F000451B5F /* lsr.c in Sources */ = {isa = PBXBuildFile; fileRef = ED152123163C220300451B5F /* lsr.c */; }; @@ -2994,6 +2995,8 @@ 5ED1D0AC1CDE55BD00471E3C /* OverlayPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayPanel.h; sourceTree = ""; }; 5ED1D0AF1CDE560C00471E3C /* BackedPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackedPanel.cpp; sourceTree = ""; }; 5ED1D0B01CDE560C00471E3C /* BackedPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackedPanel.h; sourceTree = ""; }; + 5EF17C211D1F0A690090A642 /* ScrubbingToolBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrubbingToolBar.cpp; sourceTree = ""; }; + 5EF17C221D1F0A690090A642 /* ScrubbingToolBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrubbingToolBar.h; sourceTree = ""; }; 82FF184D13CF01A600C1B664 /* dBTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dBTable.cpp; path = sbsms/src/dBTable.cpp; sourceTree = ""; }; 82FF184E13CF01A600C1B664 /* dBTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dBTable.h; path = sbsms/src/dBTable.h; sourceTree = ""; }; 82FF184F13CF01A600C1B664 /* slide.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = slide.cpp; path = sbsms/src/slide.cpp; sourceTree = ""; }; @@ -5224,9 +5227,6 @@ 2897F6DB0AB3DB5A003C20C5 /* toolbars */ = { isa = PBXGroup; children = ( - 28001B481A0F0EB6007DD161 /* SpectralSelectionBar.cpp */, - 28001B491A0F0EB6007DD161 /* SpectralSelectionBar.h */, - 28001B4A1A0F0EB6007DD161 /* SpectralSelectionBarListener.h */, 2897F6DC0AB3DB5A003C20C5 /* ControlToolBar.cpp */, 2897F6DD0AB3DB5A003C20C5 /* ControlToolBar.h */, 289F9C7C0AC671BB00797DC1 /* DeviceToolBar.cpp */, @@ -5237,9 +5237,14 @@ 2897F6E10AB3DB5A003C20C5 /* MeterToolBar.h */, 2897F6E20AB3DB5A003C20C5 /* MixerToolBar.cpp */, 2897F6E30AB3DB5A003C20C5 /* MixerToolBar.h */, + 5EF17C211D1F0A690090A642 /* ScrubbingToolBar.cpp */, + 5EF17C221D1F0A690090A642 /* ScrubbingToolBar.h */, 2897F6E40AB3DB5A003C20C5 /* SelectionBar.cpp */, 2897F6E50AB3DB5A003C20C5 /* SelectionBar.h */, 2803C8BB19F35B4900278526 /* SelectionBarListener.h */, + 28001B481A0F0EB6007DD161 /* SpectralSelectionBar.cpp */, + 28001B491A0F0EB6007DD161 /* SpectralSelectionBar.h */, + 28001B4A1A0F0EB6007DD161 /* SpectralSelectionBarListener.h */, 2897F6E60AB3DB5A003C20C5 /* ToolBar.cpp */, 2897F6E70AB3DB5A003C20C5 /* ToolBar.h */, 2897F6E80AB3DB5A003C20C5 /* ToolDock.cpp */, @@ -7323,6 +7328,7 @@ 1790B12E09883BFD008A330A /* Amplify.cpp in Sources */, 1790B13409883BFD008A330A /* ChangePitch.cpp in Sources */, 1790B13509883BFD008A330A /* ChangeSpeed.cpp in Sources */, + 5EF17C231D1F0A690090A642 /* ScrubbingToolBar.cpp in Sources */, 1790B13609883BFD008A330A /* ChangeTempo.cpp in Sources */, 1790B13709883BFD008A330A /* ClickRemoval.cpp in Sources */, 1790B13809883BFD008A330A /* Compressor.cpp in Sources */, diff --git a/src/Makefile.am b/src/Makefile.am index b0dd2a48f..3d173dba3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -513,6 +513,8 @@ audacity_SOURCES = \ toolbars/MeterToolBar.h \ toolbars/MixerToolBar.cpp \ toolbars/MixerToolBar.h \ + toolbars/ScrubbingToolBar.cpp \ + toolbars/ScrubbingToolBar.h \ toolbars/SelectionBar.cpp \ toolbars/SelectionBar.h \ toolbars/SpectralSelectionBar.cpp \ diff --git a/src/Project.cpp b/src/Project.cpp index b87c47050..90f3923a4 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -151,6 +151,7 @@ scroll information. It also has some status flags. #include "toolbars/EditToolBar.h" #include "toolbars/MeterToolBar.h" #include "toolbars/MixerToolBar.h" +#include "toolbars/ScrubbingToolBar.h" #include "toolbars/SelectionBar.h" #include "toolbars/SpectralSelectionBar.h" #include "toolbars/ToolsToolBar.h" diff --git a/src/toolbars/EditToolBar.cpp b/src/toolbars/EditToolBar.cpp index ed2920d28..480209fed 100644 --- a/src/toolbars/EditToolBar.cpp +++ b/src/toolbars/EditToolBar.cpp @@ -346,246 +346,3 @@ void EditToolBar::EnableDisableButtons() mButtons[ETBSyncLockID]->PopUp(); #endif } - - -// PRL: to do: move the below to its own file -// Much of this is imitative of EditToolBar. Should there be a common base -// class? -#include "../Audacity.h" - -// For compilers that support precompilation, includes "wx/wx.h". -#include - -#ifndef WX_PRECOMP -#include -#include -#include -#include -#include -#endif - -#include "../AllThemeResources.h" -#include "../AudioIO.h" -#include "../ImageManipulation.h" -#include "../Internat.h" -#include "../Prefs.h" -#include "../Project.h" -#include "../Theme.h" -#include "../Track.h" -#include "../UndoManager.h" -#include "../widgets/AButton.h" -#include "../widgets/Ruler.h" -#include "../tracks/ui/Scrubbing.h" - -#include "../Experimental.h" - -IMPLEMENT_CLASS(ScrubbingToolBar, ToolBar); - -//const int BUTTON_WIDTH = 27; -//const int SEPARATOR_WIDTH = 14; - -//////////////////////////////////////////////////////////// -/// Methods for ScrubbingToolBar -//////////////////////////////////////////////////////////// - -BEGIN_EVENT_TABLE( ScrubbingToolBar, ToolBar ) -EVT_COMMAND_RANGE( STBFirstButton, - STBFirstButton + STBNumButtons - 1, - wxEVT_COMMAND_BUTTON_CLICKED, - ScrubbingToolBar::OnButton ) -END_EVENT_TABLE() - -//Standard contructor -ScrubbingToolBar::ScrubbingToolBar() -: ToolBar(ScrubbingBarID, _("Scrub"), wxT("Scrub")) -{ -} - -ScrubbingToolBar::~ScrubbingToolBar() -{ -} - -void ScrubbingToolBar::Create(wxWindow * parent) -{ - ToolBar::Create(parent); -} - -/// This is a convenience function that allows for button creation in -/// MakeButtons() with fewer arguments -/// Very similar to code in ControlToolBar... -AButton *ScrubbingToolBar::AddButton - (teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled, - int id, - const wxChar *label, - bool toggle) -{ - AButton *&r = mButtons[id]; - - r = ToolBar::MakeButton - (this, - bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall, - eEnabledUp, eEnabledDown, eDisabled, - wxWindowID(id), - wxDefaultPosition, - toggle, - theTheme.ImageSize( bmpRecoloredUpSmall )); - - r->SetLabel(label); - // JKC: Unlike ControlToolBar, does not have a focus rect. Shouldn't it? - // r->SetFocusRect( r->GetRect().Deflate( 4, 4 ) ); - - Add( r, 0, wxALIGN_CENTER ); - - return r; -} - -void ScrubbingToolBar::Populate() -{ - MakeButtonBackgroundsSmall(); - - /* Buttons */ - AddButton(bmpScrub, bmpScrub, bmpScrubDisabled, STBScrubID, - _("Scrub"), true); - AddButton(bmpSeek, bmpSeek, bmpSeekDisabled, STBSeekID, - _("Seek"), true); - AddButton(bmpToggleScrubBar, bmpToggleScrubBar, bmpToggleScrubBar, - STBBarID, - _("Scrub bar"), true); - - - RegenerateTooltips(); -} - -void ScrubbingToolBar::UpdatePrefs() -{ - RegenerateTooltips(); - - // Set label to pull in language change - SetLabel(_("Scrubbing")); - - // Give base class a chance - ToolBar::UpdatePrefs(); -} - -void ScrubbingToolBar::RegenerateTooltips() -{ -#if wxUSE_TOOLTIPS - std::vector commands; - auto fn = [&] - (AButton &button, const wxString &label, const wxString &command) - { - commands.clear(); - commands.push_back(label); - commands.push_back(command); - ToolBar::SetButtonToolTip(button, commands); - }; - - auto project = GetActiveProject(); - if (project) { - auto &scrubber = project->GetScrubber(); - - const auto scrubButton = mButtons[STBScrubID]; - const auto seekButton = mButtons[STBSeekID]; - - wxString label; - label = ( - 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") - ); - fn(*scrubButton, label, wxT("Scrub")); - - label = ( - 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") - ); - fn(*seekButton, label, wxT("Seek")); - - label = ( - project->GetRulerPanel()->ShowingScrubBar() - ? _("Hide Scrub Bar") - : _("Show Scrub Bar") - ); - fn(*mButtons[STBBarID], label, wxT("ToggleScrubBar")); - } -#endif -} - -void ScrubbingToolBar::OnButton(wxCommandEvent &event) -{ - AudacityProject *p = GetActiveProject(); - if (!p) return; - auto &scrubber = p->GetScrubber(); - - int id = event.GetId(); - - switch (id) { - case STBScrubID: - scrubber.OnScrub(event); - break; - case STBSeekID: - scrubber.OnSeek(event); - break; - case STBBarID: - scrubber.OnToggleScrubBar(event); - break; - default: - wxASSERT(false); - } - - EnableDisableButtons(); -} - -void ScrubbingToolBar::EnableDisableButtons() -{ - const auto scrubButton = mButtons[STBScrubID]; - scrubButton->SetEnabled(true); - const auto seekButton = mButtons[STBSeekID]; - seekButton->SetEnabled(true); - - AudacityProject *p = GetActiveProject(); - if (!p) return; - - auto &scrubber = p->GetScrubber(); - const auto canScrub = scrubber.CanScrub(); - - if (scrubber.Scrubs()) { - scrubButton->PushDown(); - scrubButton->Enable(); - } - else { - scrubButton->PopUp(); - if (canScrub) - scrubButton->Enable(); - else - scrubButton->Disable(); - } - - if (scrubber.Seeks()) { - seekButton->PushDown(); - seekButton->Enable(); - } - else { - seekButton->PopUp(); - if (canScrub) - seekButton->Enable(); - else - seekButton->Disable(); - } - - const auto barButton = mButtons[STBBarID]; - barButton->Enable(); - if (p->GetRulerPanel()->ShowingScrubBar()) - barButton->PushDown(); - else - barButton->PopUp(); -} diff --git a/src/toolbars/EditToolBar.h b/src/toolbars/EditToolBar.h index 088136896..8f8cbfe67 100644 --- a/src/toolbars/EditToolBar.h +++ b/src/toolbars/EditToolBar.h @@ -97,67 +97,5 @@ class EditToolBar final : public ToolBar { DECLARE_EVENT_TABLE(); }; -// PRL: to do: move this to its own file - -#include - -#include "ToolBar.h" -#include "../Theme.h" -#include "../Experimental.h" - -class wxCommandEvent; -class wxDC; -class wxImage; -class wxWindow; - -class AButton; - -enum { - STBScrubID, - STBSeekID, - STBBarID, - - STBNumButtons, - STBFirstButton = STBScrubID -}; - -class ScrubbingToolBar final : public ToolBar { - -public: - - ScrubbingToolBar(); - virtual ~ScrubbingToolBar(); - - void Create(wxWindow *parent); - - void OnButton(wxCommandEvent & event); - - void Populate(); - void Repaint(wxDC * WXUNUSED(dc)) {}; - void EnableDisableButtons() override; - void UpdatePrefs() override; - - void RegenerateTooltips() override; - -private: - - AButton *AddButton(teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled, - int id, const wxChar *label, bool toggle = false); - - void MakeButtons(); - - AButton *mButtons[STBNumButtons]; - - wxImage *upImage; - wxImage *downImage; - wxImage *hiliteImage; - -public: - - DECLARE_CLASS(EditToolBar); - DECLARE_EVENT_TABLE(); -}; - - #endif diff --git a/src/toolbars/ScrubbingToolBar.cpp b/src/toolbars/ScrubbingToolBar.cpp new file mode 100644 index 000000000..7354ae468 --- /dev/null +++ b/src/toolbars/ScrubbingToolBar.cpp @@ -0,0 +1,253 @@ +/********************************************************************** + + Audacity: A Digital Audio Editor + + ScrubbingToolBar.cpp + + Paul Licameli + + See ScrubbingToolBar.h for details + + *******************************************************************/ + +// Much of this is imitative of EditToolBar. Should there be a common base +// class? +#include "../Audacity.h" +#include "ScrubbingToolBar.h" + +// For compilers that support precompilation, includes "wx/wx.h". +#include + +#ifndef WX_PRECOMP +#include +#include +#include +#include +#include +#endif + +#include "../AllThemeResources.h" +#include "../AudioIO.h" +#include "../ImageManipulation.h" +#include "../Internat.h" +#include "../Prefs.h" +#include "../Project.h" +#include "../Theme.h" +#include "../Track.h" +#include "../UndoManager.h" +#include "../widgets/AButton.h" +#include "../widgets/Ruler.h" +#include "../tracks/ui/Scrubbing.h" + +#include "../Experimental.h" + +IMPLEMENT_CLASS(ScrubbingToolBar, ToolBar); + +//const int BUTTON_WIDTH = 27; +//const int SEPARATOR_WIDTH = 14; + +//////////////////////////////////////////////////////////// +/// Methods for ScrubbingToolBar +//////////////////////////////////////////////////////////// + +BEGIN_EVENT_TABLE( ScrubbingToolBar, ToolBar ) +EVT_COMMAND_RANGE( STBFirstButton, + STBFirstButton + STBNumButtons - 1, + wxEVT_COMMAND_BUTTON_CLICKED, + ScrubbingToolBar::OnButton ) +END_EVENT_TABLE() + +//Standard contructor +ScrubbingToolBar::ScrubbingToolBar() +: ToolBar(ScrubbingBarID, _("Scrub"), wxT("Scrub")) +{ +} + +ScrubbingToolBar::~ScrubbingToolBar() +{ +} + +void ScrubbingToolBar::Create(wxWindow * parent) +{ + ToolBar::Create(parent); +} + +/// This is a convenience function that allows for button creation in +/// MakeButtons() with fewer arguments +/// Very similar to code in ControlToolBar... +AButton *ScrubbingToolBar::AddButton +(teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled, + int id, + const wxChar *label, + bool toggle) +{ + AButton *&r = mButtons[id]; + + r = ToolBar::MakeButton + (this, + bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall, + eEnabledUp, eEnabledDown, eDisabled, + wxWindowID(id), + wxDefaultPosition, + toggle, + theTheme.ImageSize( bmpRecoloredUpSmall )); + + r->SetLabel(label); + // JKC: Unlike ControlToolBar, does not have a focus rect. Shouldn't it? + // r->SetFocusRect( r->GetRect().Deflate( 4, 4 ) ); + + Add( r, 0, wxALIGN_CENTER ); + + return r; +} + +void ScrubbingToolBar::Populate() +{ + MakeButtonBackgroundsSmall(); + + /* Buttons */ + AddButton(bmpScrub, bmpScrub, bmpScrubDisabled, STBScrubID, + _("Scrub"), true); + AddButton(bmpSeek, bmpSeek, bmpSeekDisabled, STBSeekID, + _("Seek"), true); + AddButton(bmpToggleScrubBar, bmpToggleScrubBar, bmpToggleScrubBar, + STBBarID, + _("Scrub bar"), true); + + + RegenerateTooltips(); +} + +void ScrubbingToolBar::UpdatePrefs() +{ + RegenerateTooltips(); + + // Set label to pull in language change + SetLabel(_("Scrubbing")); + + // Give base class a chance + ToolBar::UpdatePrefs(); +} + +void ScrubbingToolBar::RegenerateTooltips() +{ +#if wxUSE_TOOLTIPS + std::vector commands; + auto fn = [&] + (AButton &button, const wxString &label, const wxString &command) + { + commands.clear(); + commands.push_back(label); + commands.push_back(command); + ToolBar::SetButtonToolTip(button, commands); + }; + + auto project = GetActiveProject(); + if (project) { + auto &scrubber = project->GetScrubber(); + + const auto scrubButton = mButtons[STBScrubID]; + const auto seekButton = mButtons[STBSeekID]; + + wxString label; + label = ( + 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") + ); + fn(*scrubButton, label, wxT("Scrub")); + + label = ( + 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") + ); + fn(*seekButton, label, wxT("Seek")); + + label = ( + project->GetRulerPanel()->ShowingScrubBar() + ? _("Hide Scrub Bar") + : _("Show Scrub Bar") + ); + fn(*mButtons[STBBarID], label, wxT("ToggleScrubBar")); + } +#endif +} + +void ScrubbingToolBar::OnButton(wxCommandEvent &event) +{ + AudacityProject *p = GetActiveProject(); + if (!p) return; + auto &scrubber = p->GetScrubber(); + + int id = event.GetId(); + + switch (id) { + case STBScrubID: + scrubber.OnScrub(event); + break; + case STBSeekID: + scrubber.OnSeek(event); + break; + case STBBarID: + scrubber.OnToggleScrubBar(event); + break; + default: + wxASSERT(false); + } + + EnableDisableButtons(); +} + +void ScrubbingToolBar::EnableDisableButtons() +{ + const auto scrubButton = mButtons[STBScrubID]; + scrubButton->SetEnabled(true); + const auto seekButton = mButtons[STBSeekID]; + seekButton->SetEnabled(true); + + AudacityProject *p = GetActiveProject(); + if (!p) return; + + auto &scrubber = p->GetScrubber(); + const auto canScrub = scrubber.CanScrub(); + + if (scrubber.Scrubs()) { + scrubButton->PushDown(); + scrubButton->Enable(); + } + else { + scrubButton->PopUp(); + if (canScrub) + scrubButton->Enable(); + else + scrubButton->Disable(); + } + + if (scrubber.Seeks()) { + seekButton->PushDown(); + seekButton->Enable(); + } + else { + seekButton->PopUp(); + if (canScrub) + seekButton->Enable(); + else + seekButton->Disable(); + } + + const auto barButton = mButtons[STBBarID]; + barButton->Enable(); + if (p->GetRulerPanel()->ShowingScrubBar()) + barButton->PushDown(); + else + barButton->PopUp(); +} diff --git a/src/toolbars/ScrubbingToolBar.h b/src/toolbars/ScrubbingToolBar.h new file mode 100644 index 000000000..a34bd90f3 --- /dev/null +++ b/src/toolbars/ScrubbingToolBar.h @@ -0,0 +1,76 @@ +/********************************************************************** + + Audacity: A Digital Audio Editor + + + ScrubbingToolbar.h + + Paul Licameli + + **********************************************************************/ + +#ifndef __AUDACITY_SCRUBBING_TOOLBAR__ +#define __AUDACITY_SCRUBBING_TOOLBAR__ + + + +#include + +#include "ToolBar.h" +#include "../Theme.h" +#include "../Experimental.h" + +class wxCommandEvent; +class wxDC; +class wxImage; +class wxWindow; + +class AButton; + +enum { + STBScrubID, + STBSeekID, + STBBarID, + + STBNumButtons, + STBFirstButton = STBScrubID +}; + +class ScrubbingToolBar final : public ToolBar { + +public: + + ScrubbingToolBar(); + virtual ~ScrubbingToolBar(); + + void Create(wxWindow *parent); + + void OnButton(wxCommandEvent & event); + + void Populate(); + void Repaint(wxDC * WXUNUSED(dc)) {}; + void EnableDisableButtons() override; + void UpdatePrefs() override; + + void RegenerateTooltips() override; + +private: + + AButton *AddButton(teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled, + int id, const wxChar *label, bool toggle = false); + + void MakeButtons(); + + AButton *mButtons[STBNumButtons]; + + wxImage *upImage; + wxImage *downImage; + wxImage *hiliteImage; + +public: + + DECLARE_CLASS(EditToolBar); + DECLARE_EVENT_TABLE(); +}; + +#endif diff --git a/src/toolbars/ToolManager.cpp b/src/toolbars/ToolManager.cpp index adfb02868..334d676c0 100644 --- a/src/toolbars/ToolManager.cpp +++ b/src/toolbars/ToolManager.cpp @@ -53,6 +53,7 @@ #include "EditToolBar.h" #include "MeterToolBar.h" #include "MixerToolBar.h" +#include "ScrubbingToolBar.h" #include "SelectionBar.h" #include "SpectralSelectionBar.h" #include "ToolsToolBar.h" diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index 2a0ac064b..a119b9a15 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -21,7 +21,7 @@ Paul Licameli split from TrackPanel.cpp #include "../../commands/CommandFunctors.h" #include "../../prefs/PlaybackPrefs.h" #include "../../toolbars/ControlToolBar.h" -#include "../../toolbars/EditToolBar.h" +#include "../../toolbars/ScrubbingToolBar.h" #include "../../toolbars/ToolManager.h" #undef USE_TRANSCRIPTION_TOOLBAR diff --git a/win/Projects/Audacity/Audacity.vcxproj b/win/Projects/Audacity/Audacity.vcxproj index 2661bf57a..c7a670f31 100755 --- a/win/Projects/Audacity/Audacity.vcxproj +++ b/win/Projects/Audacity/Audacity.vcxproj @@ -212,6 +212,7 @@ + @@ -445,6 +446,7 @@ + diff --git a/win/Projects/Audacity/Audacity.vcxproj.filters b/win/Projects/Audacity/Audacity.vcxproj.filters index a0a6ab13f..5a3377d7c 100755 --- a/win/Projects/Audacity/Audacity.vcxproj.filters +++ b/win/Projects/Audacity/Audacity.vcxproj.filters @@ -884,6 +884,9 @@ src\effects + + src\toolbars + @@ -1789,6 +1792,9 @@ src\effects + + src\toolbars +