Audacity 3.2.0
EditToolBar.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 EditToolBar.cpp
6
7 Dominic Mazzoni
8 Shane T. Mueller
9 Leland Lucius
10
11 See EditToolBar.h for details
12
13*******************************************************************//*******************************************************************/
31
32
33
34#include "EditToolBar.h"
35
36// For compilers that support precompilation, includes "wx/wx.h".
37#include <wx/wxprec.h>
38
39#include <wx/setup.h> // for wxUSE_* macros
40
41#ifndef WX_PRECOMP
42#include <wx/app.h>
43#include <wx/sizer.h>
44#include <wx/tooltip.h>
45#endif
46
47#include "AllThemeResources.h"
48#include "ImageManipulation.h"
49#include "Prefs.h"
50#include "Project.h"
51#include "UndoManager.h"
52#include "../widgets/AButton.h"
53
54#include "CommandContext.h"
55#include "CommandManager.h"
56#include "../commands/CommandDispatch.h"
57
58enum {
61#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
62 ETBZoomToggleID,
63#endif
64
67
70
71 // no sync-lock on/off button.
72 // #define OPTION_SYNC_LOCK_BUTTON
73
74#ifdef OPTION_SYNC_LOCK_BUTTON
75 ETBSyncLockID,
76#endif
77
80
82};
83
84#ifdef OPTION_SYNC_LOCK_BUTTON
85#include "SyncLock.h"
86#endif
87
88constexpr int first_ETB_ID = 11300;
89
91 { ETBZoomInID, wxT("ZoomIn"), XO("Zoom In") },
92 { ETBZoomOutID, wxT("ZoomOut"), XO("Zoom Out") },
93#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
94 { ETBZoomToggleID, wxT("ZoomToggle"), XO("Zoom Toggle") },
95#endif
96 { ETBZoomSelID, wxT("ZoomSel"), XO("Fit selection to width") },
97 { ETBZoomFitID, wxT("FitInWindow"), XO("Fit project to width") },
98
99 { ETBTrimID, wxT("Trim"), XO("Trim audio outside selection") },
100 { ETBSilenceID, wxT("Silence"), XO("Silence audio selection") },
101#ifdef OPTION_SYNC_LOCK_BUTTON
102 { ETBSyncLockID, wxT("SyncLock"), XO("Sync-Lock Tracks") },
103#endif
104 { ETBUndoID, wxT("Undo"), XO("Undo") },
105 { ETBRedoID, wxT("Redo"), XO("Redo") },
106};
107
109
113
114BEGIN_EVENT_TABLE( EditToolBar, ToolBar )
118 EditToolBar::OnButton )
120
122{
123 return wxT("Edit");
124}
125
126//Standard constructor
128: ToolBar(project, XO("Edit"), ID())
130{
131#ifdef OPTION_SYNC_LOCK_BUTTON
132 auto action = [this]() {
133 bool bSyncLockTracks = SyncLockTracks.Read();
134
135 if (bSyncLockTracks)
136 mButtons.PushDown(ETBSyncLockID);
137 else
138 mButtons.PopUp(ETBSyncLockID);
139 };
140
142#endif
143}
144
146{
147}
148
149void EditToolBar::Create(wxWindow * parent)
150{
151 ToolBar::Create(parent);
152 UpdatePrefs();
153}
154
156{
157 mToolSizer->AddSpacer(0);
158}
159
161 teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled,
162 int id, const TranslatableString &label, bool toggle)
163{
164 auto r = mButtons.CreateButton(eEnabledUp, eEnabledDown, eDisabled, id, label, toggle);
165 mToolSizer->Add(r);
166}
167
169{
170 SetBackgroundColour( theTheme.Colour( clrMedium ) );
172
173 Add(mToolSizer = safenew wxGridSizer(2, 5, 1, 1));
174
175 /* Buttons */
176 // Tooltips match menu entries.
177 // We previously had longer tooltips which were not more clear.
178 AddButton(bmpZoomIn, bmpZoomIn, bmpZoomInDisabled, ETBZoomInID,
179 XO("Zoom In"));
180 AddButton(bmpZoomOut, bmpZoomOut, bmpZoomOutDisabled, ETBZoomOutID,
181 XO("Zoom Out"));
182 AddButton(bmpZoomSel, bmpZoomSel, bmpZoomSelDisabled, ETBZoomSelID,
183 XO("Zoom to Selection"));
184 AddButton(bmpZoomFit, bmpZoomFit, bmpZoomFitDisabled, ETBZoomFitID,
185 XO("Fit to Width"));
186
187#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
188 AddButton(bmpZoomToggle, bmpZoomToggle, bmpZoomToggleDisabled, ETBZoomToggleID,
189 XO("Zoom Toggle"));
190#endif
191
192 // Tooltips slightly more verbose than the menu entries are.
193 AddButton(bmpTrim, bmpTrim, bmpTrimDisabled, ETBTrimID,
194 XO("Trim audio outside selection"));
195 AddButton(bmpSilence, bmpSilence, bmpSilenceDisabled, ETBSilenceID,
196 XO("Silence audio selection"));
197
198#ifdef OPTION_SYNC_LOCK_BUTTON
199 AddButton(bmpSyncLockTracksUp, bmpSyncLockTracksDown, bmpSyncLockTracksUp, ETBSyncLockID,
200 XO("Sync-Lock Tracks"), true);
201#else
202 AddSeparator();
203#endif
204
205 AddButton(bmpUndo, bmpUndo, bmpUndoDisabled, ETBUndoID,
206 XO("Undo"));
207 AddButton(bmpRedo, bmpRedo, bmpRedoDisabled, ETBRedoID,
208 XO("Redo"));
209
212#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
213 mButtons.SetEnabled(ETBZoomToggleID, false);
214#endif
215
218
219#ifdef OPTION_SYNC_LOCK_BUTTON
220 mButtons.PushDown(ETBSyncLockID);
221#endif
222
224}
225
227{
229
230 // Set label to pull in language change
231 SetLabel(XO("Edit"));
232
233 // Give base class a chance
235}
236
238{
240}
241
243{
245}
246
247void EditToolBar::OnButton(wxCommandEvent &event)
248{
249 mButtons.OnButton(event);
250}
251
255};
256
257#include "ToolManager.h"
258
259namespace {
261 /* i18n-hint: Clicking this menu item shows the toolbar for editing */
262 EditToolBar::ID(), wxT("ShowEditTB"), XXO("&Edit Toolbar")
263};
264}
265
wxEVT_COMMAND_BUTTON_CLICKED
wxT("CloseDown"))
END_EVENT_TABLE()
EVT_COMMAND_RANGE(ETBZoomInID+first_ETB_ID, ETBZoomInID+first_ETB_ID+ETBNumButtons - 1, wxEVT_COMMAND_BUTTON_CLICKED, EditToolBar::OnButton) Identifier EditToolBar
Methods for EditToolBar.
static const ToolBarButtons::ButtonList EditToolbarButtonList
Definition: EditToolBar.cpp:90
static RegisteredToolbarFactory factory
@ ETBZoomInID
Definition: EditToolBar.cpp:59
@ ETBRedoID
Definition: EditToolBar.cpp:79
@ ETBNumButtons
Definition: EditToolBar.cpp:81
@ ETBZoomSelID
Definition: EditToolBar.cpp:65
@ ETBUndoID
Definition: EditToolBar.cpp:78
@ ETBZoomOutID
Definition: EditToolBar.cpp:60
@ ETBTrimID
Definition: EditToolBar.cpp:68
@ ETBSilenceID
Definition: EditToolBar.cpp:69
@ ETBZoomFitID
Definition: EditToolBar.cpp:66
constexpr int first_ETB_ID
Definition: EditToolBar.cpp:88
IMPLEMENT_CLASS(EditToolBar, ToolBar)
XO("Cut/Copy/Paste")
XXO("&Cut/Copy/Paste Toolbar")
int teBmps
#define safenew
Definition: MemoryX.h:9
BoolSetting SyncLockTracks
Definition: SyncLock.cpp:173
TranslatableString label
Definition: TagsEditor.cpp:165
const auto project
THEME_API Theme theTheme
Definition: Theme.cpp:82
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
A ToolBar that has the edit buttons on it.
Definition: EditToolBar.h:30
void EnableDisableButtons() override
EditToolBar(AudacityProject &project)
void UpdatePrefs() override
void Create(wxWindow *parent) override
ToolBarButtons mButtons
Definition: EditToolBar.h:58
wxGridSizer * mToolSizer
Definition: EditToolBar.h:59
void RegenerateTooltips() override
void Populate() override
void AddButton(teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled, int id, const TranslatableString &label, bool toggle=false)
void AddSeparator()
void OnButton(wxCommandEvent &event)
static Identifier ID()
virtual ~EditToolBar()
An explicitly nonlocalized string, not meant for the user to see.
Definition: Identifier.h:22
bool Read(T *pVar) const
overload of Read returning a boolean that is true if the value was previously defined *‍/
Definition: Prefs.h:207
wxColour & Colour(int iIndex)
void EnableDisableButtons()
void SetCustomEnableDisableButtonsAction(std::function< void()> action)
void PopUp(int id)
void OnButton(wxCommandEvent &event)
void SetEnabled(int id, bool state)
void PushDown(int id)
std::vector< Entry > ButtonList
AButton * CreateButton(teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled, int id, const TranslatableString &label, bool toggle=false)
Works with ToolManager and ToolDock to provide a dockable window in which buttons can be placed.
Definition: ToolBar.h:74
void Add(wxWindow *window, int proportion=0, int flag=wxALIGN_TOP, int border=0, wxObject *userData=NULL)
Definition: ToolBar.cpp:709
void SetLabel(const wxString &label) override
Definition: ToolBar.cpp:408
static void MakeButtonBackgroundsSmall()
Definition: ToolBar.cpp:837
void UpdatePrefs() override
Definition: ToolBar.cpp:622
virtual void Create(wxWindow *parent)
Definition: ToolBar.cpp:492
wxWindowPtr< ToolBar > Holder
Definition: ToolBar.h:78
Holds a msgid for the translation catalog; may also bind format arguments.
AttachedToolBarMenuItem sAttachment