1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-15 15:49:36 +02:00

Add toolbar edit mode

This adds an edit mode checkbox under View > Toolbars > Edit Mode, which hides the toolbar grabbers when off

Signed-off-by: abb128 <alexx128p@gmail.com>
This commit is contained in:
abb128 2021-07-15 21:05:42 +03:00
parent faa23d1b2b
commit 1ac8eeee94
4 changed files with 62 additions and 12 deletions

View File

@ -21,6 +21,19 @@ void OnResetToolBars(const CommandContext &context)
ToolManager::OnResetToolBars(context); ToolManager::OnResetToolBars(context);
} }
void OnEditMode(const CommandContext &context)
{
auto &project = context.project;
auto &commandManager = CommandManager::Get( project );
bool checked = !gPrefs->Read(wxT("/GUI/Toolbars/EditMode"), false);
gPrefs->Write(wxT("/GUI/Toolbars/EditMode"), checked);
gPrefs->Flush();
commandManager.Check(wxT("EditMode"), checked);
wxTheApp->AddPendingEvent(wxCommandEvent{ EVT_PREFS_UPDATE });
}
}; // struct Handler }; // struct Handler
@ -48,8 +61,11 @@ BaseItemSharedPtr ToolbarsMenu()
( FinderScope{ findCommandHandler }, ( FinderScope{ findCommandHandler },
Section( wxT("Toolbars"), Section( wxT("Toolbars"),
Menu( wxT("Toolbars"), XXO("&Toolbars"), Menu( wxT("Toolbars"), XXO("&Toolbars"),
Section( "Reset", Section( "Manage",
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("EditMode"), XXO("&Edit Mode (on/off)"),
FN(OnEditMode), AlwaysEnabledFlag,
Options{}.CheckTest( wxT("/GUI/Toolbars/EditMode"), false ) ),
Command( wxT("ResetToolbars"), XXO("Reset Toolb&ars"), Command( wxT("ResetToolbars"), XXO("Reset Toolb&ars"),
FN(OnResetToolBars), AlwaysEnabledFlag ) FN(OnResetToolBars), AlwaysEnabledFlag )
), ),

View File

@ -346,6 +346,7 @@ ToolBar::ToolBar( AudacityProject &project,
mHSizer = NULL; mHSizer = NULL;
mVisible = false; mVisible = false;
mPositioned = false; mPositioned = false;
mEditMode = false;
mGrabber = NULL; mGrabber = NULL;
mResizer = NULL; mResizer = NULL;
@ -538,10 +539,14 @@ void ToolBar::ReCreateButtons()
// Create the main sizer // Create the main sizer
auto ms = std::make_unique<wxBoxSizer>(wxHORIZONTAL); auto ms = std::make_unique<wxBoxSizer>(wxHORIZONTAL);
// Create the grabber and add it to the main sizer // Grabber is created only when editing, or when it's undocked
mGrabber = safenew Grabber(this, mType); // (as otherwise the undocked toolbar can't be moved around)
ms->Add(mGrabber, 0, wxEXPAND | wxALIGN_LEFT | wxALIGN_TOP | wxRIGHT, 1); if (mEditMode || !IsDocked())
{
// Create the grabber and add it to the main sizer
mGrabber = safenew Grabber(this, mType);
ms->Add(mGrabber, 0, wxEXPAND | wxALIGN_LEFT | wxALIGN_TOP | wxRIGHT, 1);
}
// Use a box sizer for laying out controls // Use a box sizer for laying out controls
ms->Add((mHSizer = safenew wxBoxSizer(wxHORIZONTAL)), 1, wxEXPAND); ms->Add((mHSizer = safenew wxBoxSizer(wxHORIZONTAL)), 1, wxEXPAND);
@ -549,7 +554,7 @@ void ToolBar::ReCreateButtons()
Populate(); Populate();
// Add some space for the resize border // Add some space for the resize border
if (IsResizable()) if (mEditMode && IsResizable())
{ {
// Create the resizer and add it to the main sizer // Create the resizer and add it to the main sizer
mResizer = safenew ToolBarResizer(this); mResizer = safenew ToolBarResizer(this);
@ -621,6 +626,21 @@ void ToolBar::UpdatePrefs()
} }
#endif #endif
bool updated = false;
bool editing = gPrefs->Read(wxT("/GUI/Toolbars/EditMode"), false);
if ( editing != mEditMode )
{
mEditMode = editing;
updated = true;
}
if ( updated )
{
ReCreateButtons();
Updated();
}
return; return;
} }
@ -632,6 +652,15 @@ ToolDock *ToolBar::GetDock()
return dynamic_cast<ToolDock*>(GetParent()); return dynamic_cast<ToolDock*>(GetParent());
} }
//
// Returns whether or not edit mode is enabled
//
bool ToolBar::GetEditMode()
{
return mEditMode;
}
// //
// Toggle the docked/floating state // Toggle the docked/floating state
// //
@ -640,13 +669,16 @@ void ToolBar::SetDocked( ToolDock *dock, bool pushed )
// Remember it // Remember it
// mDock = dock; // mDock = dock;
// Change the tooltip of the grabber if ( mGrabber )
{
// Change the tooltip of the grabber
#if wxUSE_TOOLTIPS #if wxUSE_TOOLTIPS
mGrabber->SetToolTip( GetTitle() ); mGrabber->SetToolTip( GetTitle() );
#endif #endif
// Set the grabber button state // Set the grabber button state
mGrabber->PushButton( pushed ); mGrabber->PushButton( pushed );
}
if (mResizer) if (mResizer)
{ {

View File

@ -121,6 +121,7 @@ class AUDACITY_DLL_API ToolBar /* not final */
TranslatableString GetLabel(); TranslatableString GetLabel();
wxString GetSection(); wxString GetSection();
ToolDock *GetDock(); ToolDock *GetDock();
bool GetEditMode();
private: private:
void SetLabel(const wxString & label) override; void SetLabel(const wxString & label) override;
@ -249,6 +250,7 @@ public:
bool mVisible; bool mVisible;
bool mResizable; bool mResizable;
bool mPositioned; // true if position floating determined. bool mPositioned; // true if position floating determined.
bool mEditMode;
public: public:

View File

@ -1177,7 +1177,7 @@ void ToolManager::OnMouse( wxMouseEvent & event )
DoneDragging(); DoneDragging();
return; return;
} }
else if( mDragDock && !event.ShiftDown() ) else if( mDragDock && !event.ShiftDown() && mDragBar->GetEditMode() )
{ {
// Trip over...everyone ashore that's going ashore... // Trip over...everyone ashore that's going ashore...
mDragDock->Dock( mDragBar, true, mDragBefore ); mDragDock->Dock( mDragBar, true, mDragBefore );
@ -1249,7 +1249,7 @@ void ToolManager::OnMouse( wxMouseEvent & event )
dock = mBotDock; dock = mBotDock;
// Looks like we have a winner... // Looks like we have a winner...
if( dock ) if( dock && mDragBar->GetEditMode() )
{ {
wxPoint p; wxPoint p;
wxRect r; wxRect r;