mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-26 17:38:10 +02:00
Add radio buttons for Start-End, Start-Length e.t.c.
The checkbox on the selection toolbar is a temporary work around for a bug in windows with tabbing. Tabbing into a radio button will set the first item of the radio button group without it. Still looking for a better workaround.
This commit is contained in:
parent
d210b18aad
commit
552a69df72
@ -69,32 +69,44 @@ enum {
|
|||||||
SelectionBarFirstID = 2700,
|
SelectionBarFirstID = 2700,
|
||||||
RateID,
|
RateID,
|
||||||
SnapToID,
|
SnapToID,
|
||||||
//OnMenuId,
|
OnMenuID,
|
||||||
|
|
||||||
|
|
||||||
StartTitleID,
|
StartTitleID,
|
||||||
CenterTitleID,
|
|
||||||
LengthTitleID,
|
LengthTitleID,
|
||||||
|
CenterTitleID,
|
||||||
EndTitleID,
|
EndTitleID,
|
||||||
AudioTitleID,
|
AudioTitleID,
|
||||||
|
|
||||||
StartTimeID,
|
StartEndRadioID,
|
||||||
CenterTimeID,
|
StartLengthRadioID,
|
||||||
LengthTimeID,
|
LengthEndRadioID,
|
||||||
EndTimeID,
|
LengthCenterRadioID,
|
||||||
AudioTimeID,
|
|
||||||
SelTBFirstButton,
|
SelTBFirstButton,
|
||||||
SelTBMenuID = SelTBFirstButton,
|
SelTBMenuID = SelTBFirstButton,
|
||||||
|
|
||||||
|
id2,
|
||||||
|
StartTimeID,
|
||||||
|
LengthTimeID,
|
||||||
|
CenterTimeID,
|
||||||
|
EndTimeID,
|
||||||
|
AudioTimeID,
|
||||||
};
|
};
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(SelectionBar, ToolBar)
|
BEGIN_EVENT_TABLE(SelectionBar, ToolBar)
|
||||||
EVT_SIZE(SelectionBar::OnSize)
|
EVT_SIZE(SelectionBar::OnSize)
|
||||||
EVT_TEXT(StartTimeID, SelectionBar::OnChangedTime)
|
EVT_TEXT(StartTimeID, SelectionBar::OnChangedTime)
|
||||||
EVT_TEXT(EndTimeID, SelectionBar::OnChangedTime)
|
|
||||||
EVT_TEXT(LengthTimeID, SelectionBar::OnChangedTime)
|
EVT_TEXT(LengthTimeID, SelectionBar::OnChangedTime)
|
||||||
EVT_TEXT(CenterTimeID, SelectionBar::OnChangedTime)
|
EVT_TEXT(CenterTimeID, SelectionBar::OnChangedTime)
|
||||||
|
EVT_TEXT(EndTimeID, SelectionBar::OnChangedTime)
|
||||||
EVT_CHOICE(SnapToID, SelectionBar::OnSnapTo)
|
EVT_CHOICE(SnapToID, SelectionBar::OnSnapTo)
|
||||||
EVT_COMBOBOX(RateID, SelectionBar::OnRate)
|
EVT_COMBOBOX(RateID, SelectionBar::OnRate)
|
||||||
EVT_TEXT(RateID, SelectionBar::OnRate)
|
EVT_TEXT(RateID, SelectionBar::OnRate)
|
||||||
|
EVT_RADIOBUTTON(StartEndRadioID, SelectionBar::OnFieldChoice )
|
||||||
|
EVT_RADIOBUTTON(StartLengthRadioID, SelectionBar::OnFieldChoice )
|
||||||
|
EVT_RADIOBUTTON(LengthEndRadioID, SelectionBar::OnFieldChoice )
|
||||||
|
EVT_RADIOBUTTON(LengthCenterRadioID, SelectionBar::OnFieldChoice )
|
||||||
|
|
||||||
EVT_COMMAND_RANGE( SelTBMenuID,
|
EVT_COMMAND_RANGE( SelTBMenuID,
|
||||||
SelTBMenuID,
|
SelTBMenuID,
|
||||||
@ -152,7 +164,7 @@ void SelectionBar::Create(wxWindow * parent)
|
|||||||
// and a windows theme that is close enough to actually blend.
|
// and a windows theme that is close enough to actually blend.
|
||||||
|
|
||||||
wxRadioButton * SelectionBar::AddRadioButton( const wxString & Name,
|
wxRadioButton * SelectionBar::AddRadioButton( const wxString & Name,
|
||||||
int id, std::unique_ptr<wxBoxSizer>& pSizer, long style )
|
int id, wxSizer *pSizer, long style )
|
||||||
{
|
{
|
||||||
bool bUseNativeRadioButton = theTheme.IsUsingSyestemTextColour();
|
bool bUseNativeRadioButton = theTheme.IsUsingSyestemTextColour();
|
||||||
wxRadioButton * pBtn;
|
wxRadioButton * pBtn;
|
||||||
@ -213,7 +225,7 @@ void SelectionBar::Populate()
|
|||||||
* look-ups static because they depend on translations which are done at
|
* look-ups static because they depend on translations which are done at
|
||||||
* runtime */
|
* runtime */
|
||||||
|
|
||||||
Add((mainSizer = safenew wxFlexGridSizer(10, 1, 1)), 0, wxALIGN_CENTER_VERTICAL);
|
Add((mainSizer = safenew wxFlexGridSizer(7, 1, 1)), 0, wxALIGN_CENTER_VERTICAL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Top row (mostly labels)
|
// Top row (mostly labels)
|
||||||
@ -236,17 +248,34 @@ void SelectionBar::Populate()
|
|||||||
AddTitle( _("Snap-To"), mainSizer );
|
AddTitle( _("Snap-To"), mainSizer );
|
||||||
// Not enough room to say 'Selection Options". There is a tooltip instead.
|
// Not enough room to say 'Selection Options". There is a tooltip instead.
|
||||||
AddTitle( wxT(""), mainSizer );
|
AddTitle( wxT(""), mainSizer );
|
||||||
|
|
||||||
|
{
|
||||||
|
auto hSizer = std::make_unique<wxBoxSizer>(wxHORIZONTAL);
|
||||||
|
(mStartEndRadBtn = AddRadioButton( _("Start-End"), StartEndRadioID, hSizer.get(), wxRB_GROUP))
|
||||||
|
->SetValue( mSelectionMode == 0 );
|
||||||
|
(mStartLengthRadBtn = AddRadioButton( _("Start-Length"), StartLengthRadioID, hSizer.get(), 0))
|
||||||
|
->SetValue( mSelectionMode == 1 );
|
||||||
|
(mLengthEndRadBtn = AddRadioButton( _("Length-End"), LengthEndRadioID, hSizer.get(), 0))
|
||||||
|
->SetValue( mSelectionMode == 2 );
|
||||||
|
(mLengthCenterRadBtn = AddRadioButton( _("Length-Center"), LengthCenterRadioID, hSizer.get(), 0))
|
||||||
|
->SetValue( mSelectionMode == 3 );
|
||||||
|
mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
mStartTitle = AddTitle( _("Start"), mainSizer );
|
mStartTitle = AddTitle( _("Start"), mainSizer );
|
||||||
mCenterTitle = AddTitle( _("Center"), mainSizer );
|
|
||||||
mLengthTitle = AddTitle( _("Length"), mainSizer );
|
mLengthTitle = AddTitle( _("Length"), mainSizer );
|
||||||
|
mCenterTitle = AddTitle( _("Center"), mainSizer );
|
||||||
mEndTitle = AddTitle( _("End"), mainSizer );
|
mEndTitle = AddTitle( _("End"), mainSizer );
|
||||||
mainSizer->Add(5, 1);
|
|
||||||
AddTitle( _("Audio Position"), mainSizer );
|
|
||||||
|
|
||||||
mStartTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnStartTitleClicked,this );
|
mStartTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnStartTitleClicked,this );
|
||||||
mCenterTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnCenterTitleClicked,this );
|
|
||||||
mLengthTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnLengthTitleClicked,this );
|
mLengthTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnLengthTitleClicked,this );
|
||||||
|
mCenterTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnCenterTitleClicked,this );
|
||||||
mEndTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnEndTitleClicked,this );
|
mEndTitle->Bind( wxEVT_LEFT_DOWN,&SelectionBar::OnEndTitleClicked,this );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
mainSizer->Add(5, 1);
|
||||||
|
AddTitle( _("Audio Position"), mainSizer );
|
||||||
|
|
||||||
//
|
//
|
||||||
// Middle row (mostly time controls)
|
// Middle row (mostly time controls)
|
||||||
@ -315,7 +344,7 @@ void SelectionBar::Populate()
|
|||||||
wxFocusEventHandler(SelectionBar::OnFocus),
|
wxFocusEventHandler(SelectionBar::OnFocus),
|
||||||
NULL,
|
NULL,
|
||||||
this);
|
this);
|
||||||
|
/*
|
||||||
AButton *& pBtn = mButtons[ SelTBMenuID - SelTBFirstButton];
|
AButton *& pBtn = mButtons[ SelTBMenuID - SelTBFirstButton];
|
||||||
pBtn = ToolBar::MakeButton(this,
|
pBtn = ToolBar::MakeButton(this,
|
||||||
bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall,
|
bmpRecoloredUpSmall, bmpRecoloredDownSmall, bmpRecoloredHiliteSmall,
|
||||||
@ -328,11 +357,26 @@ void SelectionBar::Populate()
|
|||||||
pBtn->SetLabel("Selection options");
|
pBtn->SetLabel("Selection options");
|
||||||
pBtn->SetToolTip("Selection options");
|
pBtn->SetToolTip("Selection options");
|
||||||
mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5);
|
mainSizer->Add( pBtn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5);
|
||||||
|
*/
|
||||||
|
wxCheckBox * pCheck = new wxCheckBox(this, id2, "Checkbox");
|
||||||
|
mainSizer->Add( pCheck, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5);
|
||||||
|
|
||||||
mStartTime = AddTime(_("Start"), StartTimeID, mainSizer );
|
{
|
||||||
mCenterTime = AddTime(_("Center"), CenterTimeID, mainSizer );
|
auto hSizer = std::make_unique<wxBoxSizer>(wxHORIZONTAL);
|
||||||
mLengthTime = AddTime(_("Length"), LengthTimeID, mainSizer );
|
|
||||||
mEndTime = AddTime(_("End"), EndTimeID, mainSizer );
|
mStartTime = AddTime(_("Start"), StartTimeID, hSizer.get() );
|
||||||
|
mLengthTime = AddTime(_("Length"), LengthTimeID, hSizer.get() );
|
||||||
|
mCenterTime = AddTime(_("Center"), CenterTimeID, hSizer.get() );
|
||||||
|
mEndTime = AddTime(_("End"), EndTimeID, hSizer.get() );
|
||||||
|
mainSizer->Add(hSizer.release(), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 0);
|
||||||
|
// Put choice of what fields to show immediately before the fields.
|
||||||
|
#if 1
|
||||||
|
mStartEndRadBtn->MoveBeforeInTabOrder( mStartTime );
|
||||||
|
mStartLengthRadBtn->MoveAfterInTabOrder( mStartEndRadBtn );
|
||||||
|
mLengthEndRadBtn->MoveAfterInTabOrder( mStartLengthRadBtn );
|
||||||
|
mLengthCenterRadBtn->MoveAfterInTabOrder( mLengthEndRadBtn );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
mainSizer->Add(safenew wxStaticLine(this, -1, wxDefaultPosition,
|
mainSizer->Add(safenew wxStaticLine(this, -1, wxDefaultPosition,
|
||||||
wxSize(1, toolbarSingle),
|
wxSize(1, toolbarSingle),
|
||||||
@ -489,8 +533,8 @@ void SelectionBar::OnTitleClicked(int newDriver)
|
|||||||
|
|
||||||
// These functions give the IDs of the associated control, NOT the ID of the title.
|
// These functions give the IDs of the associated control, NOT the ID of the title.
|
||||||
void SelectionBar::OnStartTitleClicked(wxMouseEvent & event){ OnTitleClicked( StartTimeID );};
|
void SelectionBar::OnStartTitleClicked(wxMouseEvent & event){ OnTitleClicked( StartTimeID );};
|
||||||
void SelectionBar::OnCenterTitleClicked(wxMouseEvent & event){ OnTitleClicked( CenterTimeID );};
|
|
||||||
void SelectionBar::OnLengthTitleClicked(wxMouseEvent & event){ OnTitleClicked( LengthTimeID );};
|
void SelectionBar::OnLengthTitleClicked(wxMouseEvent & event){ OnTitleClicked( LengthTimeID );};
|
||||||
|
void SelectionBar::OnCenterTitleClicked(wxMouseEvent & event){ OnTitleClicked( CenterTimeID );};
|
||||||
void SelectionBar::OnEndTitleClicked(wxMouseEvent & event){ OnTitleClicked( EndTimeID );};
|
void SelectionBar::OnEndTitleClicked(wxMouseEvent & event){ OnTitleClicked( EndTimeID );};
|
||||||
|
|
||||||
|
|
||||||
@ -564,7 +608,7 @@ void SelectionBar::SetDrivers( int driver1, int driver2 )
|
|||||||
(*Titles[i])->SetLabelText( Title );
|
(*Titles[i])->SetLabelText( Title );
|
||||||
}
|
}
|
||||||
if( *Ctrls[i] ){
|
if( *Ctrls[i] ){
|
||||||
(*Ctrls[i])->SetName( VoiceOverText );
|
(*Ctrls[i])->SetName( Temp );
|
||||||
//(*Ctrls[i])->SetToolTip( Tooltip );
|
//(*Ctrls[i])->SetToolTip( Tooltip );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -588,17 +632,20 @@ void SelectionBar::OnButton(wxCommandEvent & event)
|
|||||||
Menu.AppendRadioItem( 0, _("Start - End") );
|
Menu.AppendRadioItem( 0, _("Start - End") );
|
||||||
Menu.AppendRadioItem( 1, _("Start - Length") );
|
Menu.AppendRadioItem( 1, _("Start - Length") );
|
||||||
Menu.AppendRadioItem( 2, _("Length - End") );
|
Menu.AppendRadioItem( 2, _("Length - End") );
|
||||||
Menu.AppendRadioItem( 3, _("Center - Length") );
|
Menu.AppendRadioItem( 3, _("Length - Center") );
|
||||||
|
#if 0
|
||||||
|
// These four options were found to be too confusing.
|
||||||
Menu.AppendRadioItem( 4, _("Start - Length - End") );
|
Menu.AppendRadioItem( 4, _("Start - Length - End") );
|
||||||
Menu.AppendRadioItem( 5, _("Start - Center - Length") );
|
Menu.AppendRadioItem( 5, _("Start - Center - Length") );
|
||||||
Menu.AppendRadioItem( 6, _("Start - Center - End") );
|
Menu.AppendRadioItem( 6, _("Start - Center - End") );
|
||||||
Menu.AppendRadioItem( 7, _("Start - Center - Length - End") );
|
Menu.AppendRadioItem( 7, _("Start - Length - Center - End") );
|
||||||
|
#endif
|
||||||
Menu.Check( mSelectionMode, true );
|
Menu.Check( mSelectionMode, true );
|
||||||
// Pop it up where the mouse is.
|
// Pop it up where the mouse is.
|
||||||
pBtn->PopupMenu(&Menu);//, wxPoint(0, 0));
|
pBtn->PopupMenu(&Menu);//, wxPoint(0, 0));
|
||||||
|
|
||||||
// only one radio button should be checked.
|
// only one radio button should be checked.
|
||||||
for( int i=0;i<8;i++)
|
for( int i=0;i<4;i++)
|
||||||
if( Menu.IsChecked(i))
|
if( Menu.IsChecked(i))
|
||||||
SetSelectionMode( i );
|
SetSelectionMode( i );
|
||||||
|
|
||||||
@ -614,16 +661,45 @@ void SelectionBar::OnButton(wxCommandEvent & event)
|
|||||||
Updated();
|
Updated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SelectionBar::OnFieldChoice(wxCommandEvent &event)
|
||||||
|
{
|
||||||
|
int id = event.GetId();
|
||||||
|
SetSelectionMode( id - StartEndRadioID );
|
||||||
|
// We just changed the mode. Remember it.
|
||||||
|
gPrefs->Write(wxT("/SelectionToolbarMode"), mSelectionMode);
|
||||||
|
gPrefs->Flush();
|
||||||
|
|
||||||
|
wxSize sz = GetMinSize();
|
||||||
|
sz.SetWidth( 10 );
|
||||||
|
SetMinSize( sz );
|
||||||
|
Fit();
|
||||||
|
Layout();
|
||||||
|
Updated();
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SelectionBar::SetSelectionMode(int mode)
|
void SelectionBar::SetSelectionMode(int mode)
|
||||||
{
|
{
|
||||||
mSelectionMode = mode;
|
mSelectionMode = mode;
|
||||||
|
|
||||||
|
int id = mode + StartEndRadioID;
|
||||||
|
mStartEndRadBtn->SetLabelText( (id == StartEndRadioID) ? "Start - End" : "S-E" );
|
||||||
|
mStartLengthRadBtn->SetLabelText( (id == StartLengthRadioID) ? "Start - Length" : "S-L" );
|
||||||
|
mLengthEndRadBtn->SetLabelText( (id == LengthEndRadioID) ? "Length - End" : "L-E" );
|
||||||
|
mLengthCenterRadBtn->SetLabelText( (id == LengthCenterRadioID) ? "Length - Center" : "L-C" );
|
||||||
|
|
||||||
|
mStartEndRadBtn->SetValue( id == StartEndRadioID );
|
||||||
|
mStartLengthRadBtn->SetValue( id == StartLengthRadioID );
|
||||||
|
mLengthEndRadBtn->SetValue( id == LengthEndRadioID );
|
||||||
|
mLengthCenterRadBtn->SetValue( id == LengthCenterRadioID );
|
||||||
|
|
||||||
// First decide which two controls drive the others...
|
// First decide which two controls drive the others...
|
||||||
// For example the last option is with all controls shown, and in that mode we
|
// For example the last option is with all controls shown, and in that mode we
|
||||||
// initially have start and end driving.
|
// initially have start and end driving.
|
||||||
int Drive2[] = { StartTimeID, StartTimeID, LengthTimeID, CenterTimeID,
|
int Drive2[] = { StartTimeID, StartTimeID, LengthTimeID, LengthTimeID,
|
||||||
StartTimeID, StartTimeID, StartTimeID, StartTimeID};
|
StartTimeID, StartTimeID, StartTimeID, StartTimeID};
|
||||||
int Drive1[] = { EndTimeID, LengthTimeID, EndTimeID, LengthTimeID,
|
int Drive1[] = { EndTimeID, LengthTimeID, EndTimeID, CenterTimeID,
|
||||||
EndTimeID, LengthTimeID, EndTimeID, EndTimeID};
|
EndTimeID, LengthTimeID, EndTimeID, EndTimeID};
|
||||||
|
|
||||||
SetDrivers( Drive1[mode], Drive2[mode] );
|
SetDrivers( Drive1[mode], Drive2[mode] );
|
||||||
|
@ -57,7 +57,7 @@ class SelectionBar final : public ToolBar {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
wxRadioButton * AddRadioButton( const wxString & Name, int id,
|
wxRadioButton * AddRadioButton( const wxString & Name, int id,
|
||||||
std::unique_ptr<wxBoxSizer>& pSizer, long style);
|
wxSizer * pSizer, long style);
|
||||||
wxStaticText * AddTitle( const wxString & Title,
|
wxStaticText * AddTitle( const wxString & Title,
|
||||||
wxSizer * pSizer );
|
wxSizer * pSizer );
|
||||||
NumericTextCtrl * AddTime( const wxString Name, int id, wxSizer * pSizer );
|
NumericTextCtrl * AddTime( const wxString Name, int id, wxSizer * pSizer );
|
||||||
@ -78,6 +78,7 @@ class SelectionBar final : public ToolBar {
|
|||||||
void OnFocus(wxFocusEvent &event);
|
void OnFocus(wxFocusEvent &event);
|
||||||
void OnCaptureKey(wxCommandEvent &event);
|
void OnCaptureKey(wxCommandEvent &event);
|
||||||
void OnSize(wxSizeEvent &evt);
|
void OnSize(wxSizeEvent &evt);
|
||||||
|
void OnFieldChoice(wxCommandEvent &event);
|
||||||
|
|
||||||
void ModifySelection(int newDriver, bool done = false);
|
void ModifySelection(int newDriver, bool done = false);
|
||||||
void UpdateRates();
|
void UpdateRates();
|
||||||
@ -108,6 +109,11 @@ class SelectionBar final : public ToolBar {
|
|||||||
wxStaticText * mLengthTitle;
|
wxStaticText * mLengthTitle;
|
||||||
wxStaticText * mEndTitle;
|
wxStaticText * mEndTitle;
|
||||||
|
|
||||||
|
wxRadioButton * mStartEndRadBtn;
|
||||||
|
wxRadioButton * mStartLengthRadBtn;
|
||||||
|
wxRadioButton * mLengthEndRadBtn;
|
||||||
|
wxRadioButton * mLengthCenterRadBtn;
|
||||||
|
|
||||||
wxComboBox *mRateBox;
|
wxComboBox *mRateBox;
|
||||||
wxChoice *mSnapTo;
|
wxChoice *mSnapTo;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user