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 "../Menus.h"
50#include "Prefs.h"
51#include "Project.h"
52#include "UndoManager.h"
53#include "../widgets/AButton.h"
54
55#include "../commands/CommandContext.h"
56#include "../commands/CommandManager.h"
57#include "../commands/CommandDispatch.h"
58
59enum {
62#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
63 ETBZoomToggleID,
64#endif
65
68
71
72 // no sync-lock on/off button.
73 // #define OPTION_SYNC_LOCK_BUTTON
74
75#ifdef OPTION_SYNC_LOCK_BUTTON
76 ETBSyncLockID,
77#endif
78
81
83};
84
85#ifdef OPTION_SYNC_LOCK_BUTTON
86#include "SyncLock.h"
87#endif
88
89constexpr int first_ETB_ID = 11300;
90
92 { ETBZoomInID, wxT("ZoomIn"), XO("Zoom In") },
93 { ETBZoomOutID, wxT("ZoomOut"), XO("Zoom Out") },
94#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
95 { ETBZoomToggleID, wxT("ZoomToggle"), XO("Zoom Toggle") },
96#endif
97 { ETBZoomSelID, wxT("ZoomSel"), XO("Fit selection to width") },
98 { ETBZoomFitID, wxT("FitInWindow"), XO("Fit project to width") },
99
100 { ETBTrimID, wxT("Trim"), XO("Trim audio outside selection") },
101 { ETBSilenceID, wxT("Silence"), XO("Silence audio selection") },
102#ifdef OPTION_SYNC_LOCK_BUTTON
103 { ETBSyncLockID, wxT("SyncLock"), XO("Sync-Lock Tracks") },
104#endif
105 { ETBUndoID, wxT("Undo"), XO("Undo") },
106 { ETBRedoID, wxT("Redo"), XO("Redo") },
107};
108
110
114
115BEGIN_EVENT_TABLE( EditToolBar, ToolBar )
119 EditToolBar::OnButton )
121
123{
124 return wxT("Edit");
125}
126
127//Standard constructor
129: ToolBar(project, XO("Edit"), ID())
130, mButtons{ this, project, EditToolbarButtonList, ETBNumButtons, first_ETB_ID }
131{
132#ifdef OPTION_SYNC_LOCK_BUTTON
133 auto action = [this]() {
134 bool bSyncLockTracks = SyncLockTracks.Read();
135
136 if (bSyncLockTracks)
137 mButtons.PushDown(ETBSyncLockID);
138 else
139 mButtons.PopUp(ETBSyncLockID);
140 };
141
143#endif
144}
145
147{
148}
149
150void EditToolBar::Create(wxWindow * parent)
151{
152 ToolBar::Create(parent);
153 UpdatePrefs();
154}
155
157{
158 mToolSizer->AddSpacer(0);
159}
160
162 teBmps eEnabledUp, teBmps eEnabledDown, teBmps eDisabled,
163 int id, const TranslatableString &label, bool toggle)
164{
165 auto r = mButtons.CreateButton(eEnabledUp, eEnabledDown, eDisabled, id, label, toggle);
166 mToolSizer->Add(r);
167}
168
170{
171 SetBackgroundColour( theTheme.Colour( clrMedium ) );
173
174 Add(mToolSizer = safenew wxGridSizer(2, 5, 1, 1));
175
176 /* Buttons */
177 // Tooltips match menu entries.
178 // We previously had longer tooltips which were not more clear.
179 AddButton(bmpZoomIn, bmpZoomIn, bmpZoomInDisabled, ETBZoomInID,
180 XO("Zoom In"));
181 AddButton(bmpZoomOut, bmpZoomOut, bmpZoomOutDisabled, ETBZoomOutID,
182 XO("Zoom Out"));
183 AddButton(bmpZoomSel, bmpZoomSel, bmpZoomSelDisabled, ETBZoomSelID,
184 XO("Zoom to Selection"));
185 AddButton(bmpZoomFit, bmpZoomFit, bmpZoomFitDisabled, ETBZoomFitID,
186 XO("Fit to Width"));
187
188#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
189 AddButton(bmpZoomToggle, bmpZoomToggle, bmpZoomToggleDisabled, ETBZoomToggleID,
190 XO("Zoom Toggle"));
191#endif
192
193 // Tooltips slightly more verbose than the menu entries are.
194 AddButton(bmpTrim, bmpTrim, bmpTrimDisabled, ETBTrimID,
195 XO("Trim audio outside selection"));
196 AddButton(bmpSilence, bmpSilence, bmpSilenceDisabled, ETBSilenceID,
197 XO("Silence audio selection"));
198
199#ifdef OPTION_SYNC_LOCK_BUTTON
200 AddButton(bmpSyncLockTracksUp, bmpSyncLockTracksDown, bmpSyncLockTracksUp, ETBSyncLockID,
201 XO("Sync-Lock Tracks"), true);
202#else
203 AddSeparator();
204#endif
205
206 AddButton(bmpUndo, bmpUndo, bmpUndoDisabled, ETBUndoID,
207 XO("Undo"));
208 AddButton(bmpRedo, bmpRedo, bmpRedoDisabled, ETBRedoID,
209 XO("Redo"));
210
213#ifdef EXPERIMENTAL_ZOOM_TOGGLE_BUTTON
214 mButtons.SetEnabled(ETBZoomToggleID, false);
215#endif
216
219
220#ifdef OPTION_SYNC_LOCK_BUTTON
221 mButtons.PushDown(ETBSyncLockID);
222#endif
223
225}
226
228{
230
231 // Set label to pull in language change
232 SetLabel(XO("Edit"));
233
234 // Give base class a chance
236}
237
239{
241}
242
244{
246}
247
248void EditToolBar::OnButton(wxCommandEvent &event)
249{
250 mButtons.OnButton(event);
251}
252
254 []( AudacityProject &project ){
255 return ToolBar::Holder{ safenew EditToolBar{ project } }; }
256};
257
258#include "ToolManager.h"
259
260namespace {
262 /* i18n-hint: Clicking this menu item shows the toolbar for editing */
263 EditToolBar::ID(), wxT("ShowEditTB"), XXO("&Edit Toolbar")
264};
265}
266
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:91
static RegisteredToolbarFactory factory
@ ETBZoomInID
Definition: EditToolBar.cpp:60
@ ETBRedoID
Definition: EditToolBar.cpp:80
@ ETBNumButtons
Definition: EditToolBar.cpp:82
@ ETBZoomSelID
Definition: EditToolBar.cpp:66
@ ETBUndoID
Definition: EditToolBar.cpp:79
@ ETBZoomOutID
Definition: EditToolBar.cpp:61
@ ETBTrimID
Definition: EditToolBar.cpp:69
@ ETBSilenceID
Definition: EditToolBar.cpp:70
@ ETBZoomFitID
Definition: EditToolBar.cpp:67
constexpr int first_ETB_ID
Definition: EditToolBar.cpp:89
IMPLEMENT_CLASS(EditToolBar, ToolBar)
XO("Cut/Copy/Paste")
XXO("&Cut/Copy/Paste Toolbar")
int teBmps
#define safenew
Definition: MemoryX.h:10
BoolSetting SyncLockTracks
Definition: SyncLock.cpp:172
TranslatableString label
Definition: TagsEditor.cpp:164
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:200
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