audacia/src/prefs/TracksBehaviorsPrefs.cpp

159 lines
4.3 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
TracksBehaviorsPrefs.cpp
Steve Daulton
*******************************************************************//**
\class TracksBehaviorsPrefs
\brief A PrefsPanel for Tracks Behaviors settings.
*//*******************************************************************/
#include "TracksBehaviorsPrefs.h"
#include "../Prefs.h"
#include "../ShuttleGui.h"
TracksBehaviorsPrefs::TracksBehaviorsPrefs(wxWindow * parent, wxWindowID winid)
/* i18n-hint: i.e. the behaviors of tracks */
: PrefsPanel(parent, winid, XO("Tracks Behaviors"))
{
Populate();
}
TracksBehaviorsPrefs::~TracksBehaviorsPrefs()
{
}
ComponentInterfaceSymbol TracksBehaviorsPrefs::GetSymbol()
{
return TRACKS_BEHAVIORS_PREFS_PLUGIN_SYMBOL;
}
TranslatableString TracksBehaviorsPrefs::GetDescription()
{
return XO("Preferences for TracksBehaviors");
}
ManualPageID TracksBehaviorsPrefs::HelpPageName()
{
return "Tracks_Behaviors_Preferences";
}
const wxChar *TracksBehaviorsPrefs::ScrollingPreferenceKey()
{
static auto string = wxT("/GUI/ScrollBeyondZero");
return string;
}
void TracksBehaviorsPrefs::Populate()
{
//------------------------- Main section --------------------
// Now construct the GUI itself.
ShuttleGui S(this, eIsCreatingFromPrefs);
PopulateOrExchange(S);
// ----------------------- End of main section --------------
}
ChoiceSetting TracksBehaviorsSolo{
wxT("/GUI/Solo"),
{
ByColumns,
{ XO("Simple"), XO("Multi-track"), XO("None") },
{ wxT("Simple"), wxT("Multi"), wxT("None") }
},
0, // "Simple"
};
void TracksBehaviorsPrefs::PopulateOrExchange(ShuttleGui & S)
{
S.SetBorder(2);
S.StartScroller();
S.StartStatic(XO("Behaviors"));
{
S.TieCheckBox(XXO("&Select all audio, if selection required"),
{wxT("/GUI/SelectAllOnNone"),
false});
/* i18n-hint: Cut-lines are lines that can expand to show the cut audio.*/
S.TieCheckBox(XXO("Enable cut &lines"),
{wxT("/GUI/EnableCutLines"),
false});
S.TieCheckBox(XXO("Enable &dragging selection edges"),
{wxT("/GUI/AdjustSelectionEdges"),
true});
S.TieCheckBox(XXO("Editing a clip can &move other clips"),
{wxT("/GUI/EditClipCanMove"),
true});
S.TieCheckBox(XXO("\"Move track focus\" c&ycles repeatedly through tracks"),
{wxT("/GUI/CircularTrackNavigation"),
false});
S.TieCheckBox(XXO("&Type to create a label"),
{wxT("/GUI/TypeToCreateLabel"),
false});
S.TieCheckBox(XXO("Use dialog for the &name of a new label"),
{wxT("/GUI/DialogForNameNewLabel"),
false});
#ifdef EXPERIMENTAL_SCROLLING_LIMITS
S.TieCheckBox(XXO("Enable scrolling left of &zero"),
{ScrollingPreferenceKey(),
ScrollingPreferenceDefault()});
#endif
S.TieCheckBox(XXO("Advanced &vertical zooming"),
{wxT("/GUI/VerticalZooming"),
false});
S.AddSpace(10);
S.StartMultiColumn(2);
{
S.TieChoice( XXO("Solo &Button:"), TracksBehaviorsSolo);
}
S.EndMultiColumn();
}
S.EndStatic();
S.EndScroller();
}
bool TracksBehaviorsPrefs::Commit()
{
ShuttleGui S(this, eIsSavingToPrefs);
PopulateOrExchange(S);
return true;
}
namespace{
PrefsPanel::Registration sAttachment{ "TracksBehaviors",
[](wxWindow *parent, wxWindowID winid, AudacityProject *)
{
wxASSERT(parent); // to justify safenew
return safenew TracksBehaviorsPrefs(parent, winid);
},
false,
// Place it at a lower tree level
{ "Tracks" }
};
}
// Bug 825 is essentially that SyncLock requires EditClipsCanMove.
// SyncLock needs rethinking, but meanwhile this function
// fixes the issues of Bug 825 by allowing clips to move when in
// SyncLock.
bool GetEditClipsCanMove()
{
bool mIsSyncLocked;
gPrefs->Read(wxT("/GUI/SyncLockTracks"), &mIsSyncLocked, false);
if( mIsSyncLocked )
return true;
bool editClipsCanMove;
gPrefs->Read(wxT("/GUI/EditClipCanMove"), &editClipsCanMove, true);
return editClipsCanMove;
}