mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-04 15:50:10 +01:00
First stab at taming the meter toolbars
This should correct at least a couple of the reported issues. And it also has some fixes in for multiple project support.
This commit is contained in:
@@ -63,6 +63,7 @@
|
||||
#include "../Theme.h"
|
||||
#include "../Track.h"
|
||||
#include "../widgets/AButton.h"
|
||||
#include "../widgets/Meter.h"
|
||||
|
||||
IMPLEMENT_CLASS(ControlToolBar, ToolBar);
|
||||
|
||||
@@ -599,7 +600,6 @@ void ControlToolBar::PlayPlayRegion(double t0, double t1,
|
||||
//AC: If init_seek was set, now's the time to make it happen.
|
||||
gAudioIO->SeekStream(init_seek);
|
||||
#endif
|
||||
SetVUMeters(p);
|
||||
}
|
||||
else {
|
||||
// msmeyer: Show error message if stream could not be opened
|
||||
@@ -622,13 +622,6 @@ void ControlToolBar::PlayPlayRegion(double t0, double t1,
|
||||
}
|
||||
}
|
||||
|
||||
void ControlToolBar::SetVUMeters(AudacityProject *WXUNUSED(p))
|
||||
{
|
||||
Meter *play, *record;
|
||||
MeterToolBars::GetMeters( &play, &record);
|
||||
gAudioIO->SetMeters(record, play);
|
||||
}
|
||||
|
||||
void ControlToolBar::PlayCurrentRegion(bool looped /* = false */,
|
||||
bool cutpreview /* = false */)
|
||||
{
|
||||
@@ -714,7 +707,7 @@ void ControlToolBar::StopPlaying(bool stopStream /* = true*/)
|
||||
mPause->PopUp();
|
||||
mPaused=false;
|
||||
//Make sure you tell gAudioIO to unpause
|
||||
gAudioIO->SetPaused(mPaused);
|
||||
gAudioIO->SetPaused(mPaused);
|
||||
|
||||
ClearCutPreviewTracks();
|
||||
|
||||
@@ -724,7 +717,16 @@ void ControlToolBar::StopPlaying(bool stopStream /* = true*/)
|
||||
AudacityProject *project = GetActiveProject();
|
||||
if( project ) {
|
||||
project->MayStartMonitoring();
|
||||
MeterToolBars::Clear();
|
||||
|
||||
Meter *meter = project->GetPlaybackMeter();
|
||||
if( meter ) {
|
||||
meter->Clear();
|
||||
}
|
||||
|
||||
meter = project->GetPlaybackMeter();
|
||||
if( meter ) {
|
||||
meter->Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -878,7 +880,6 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
|
||||
if (success) {
|
||||
p->SetAudioIOToken(token);
|
||||
mBusyProject = p;
|
||||
SetVUMeters(p);
|
||||
}
|
||||
else {
|
||||
// msmeyer: Delete recently added tracks if opening stream fails
|
||||
|
||||
@@ -80,8 +80,6 @@ class ControlToolBar:public ToolBar {
|
||||
virtual void Repaint(wxDC *dc);
|
||||
virtual void EnableDisableButtons();
|
||||
|
||||
void SetVUMeters(AudacityProject *p);
|
||||
|
||||
virtual void ReCreateButtons();
|
||||
void RegenerateToolsTooltips();
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "MeterToolBar.h"
|
||||
|
||||
#include "../AudioIO.h"
|
||||
#include "../Project.h"
|
||||
#include "../widgets/Meter.h"
|
||||
|
||||
IMPLEMENT_CLASS(MeterToolBar, ToolBar);
|
||||
@@ -47,19 +48,21 @@ BEGIN_EVENT_TABLE( MeterToolBar, ToolBar )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
//Standard contructor
|
||||
MeterToolBar::MeterToolBar(int WhichMeters)
|
||||
: ToolBar(MeterBarID, _("Combined Meter"), wxT("CombinedMeter"), true)
|
||||
MeterToolBar::MeterToolBar(AudacityProject *project, int type)
|
||||
: ToolBar(type, _("Combined Meter"), wxT("CombinedMeter"), true)
|
||||
{
|
||||
mWhichMeters = WhichMeters;
|
||||
if( mWhichMeters == kWithRecordMeter ){
|
||||
mType = RecordMeterBarID;
|
||||
mProject = project;
|
||||
|
||||
if( mType == RecordMeterBarID ){
|
||||
mWhichMeters = kWithRecordMeter;
|
||||
mLabel = _("Recording Meter");
|
||||
mSection = wxT("RecordMeter");
|
||||
}
|
||||
if( mWhichMeters == kWithPlayMeter ){
|
||||
mType = PlayMeterBarID;
|
||||
} else if( mType == PlayMeterBarID ){
|
||||
mWhichMeters = kWithPlayMeter;
|
||||
mLabel = _("Playback Meter");
|
||||
mSection = wxT("PlayMeter");
|
||||
} else {
|
||||
mWhichMeters = kWithPlayMeter | kWithRecordMeter;
|
||||
}
|
||||
mSizer = NULL;
|
||||
mPlayMeter = NULL;
|
||||
@@ -68,10 +71,8 @@ MeterToolBar::MeterToolBar(int WhichMeters)
|
||||
|
||||
MeterToolBar::~MeterToolBar()
|
||||
{
|
||||
MeterToolBars::RemoveMeters(mPlayMeter, mRecordMeter);
|
||||
}
|
||||
|
||||
|
||||
void MeterToolBar::Create(wxWindow * parent)
|
||||
{
|
||||
ToolBar::Create(parent);
|
||||
@@ -117,8 +118,7 @@ void MeterToolBar::Populate()
|
||||
mPlayMeter->SetLabel( _("Meter-Play"));
|
||||
mSizer->Add( mPlayMeter, wxGBPosition( (mWhichMeters & kWithRecordMeter)?1:0, 0 ), wxDefaultSpan, wxEXPAND );
|
||||
}
|
||||
if( IsVisible() )
|
||||
MeterToolBars::AddMeters( mPlayMeter, mRecordMeter );
|
||||
|
||||
RegenerateTooltips();
|
||||
}
|
||||
|
||||
@@ -148,15 +148,6 @@ void MeterToolBar::RegenerateTooltips()
|
||||
#endif
|
||||
}
|
||||
|
||||
bool MeterToolBar::DestroyChildren()
|
||||
{
|
||||
MeterToolBars::RemoveMeters( mPlayMeter, mRecordMeter );
|
||||
mPlayMeter = NULL;
|
||||
mRecordMeter = NULL;
|
||||
|
||||
return ToolBar::DestroyChildren();
|
||||
}
|
||||
|
||||
void MeterToolBar::OnMeterPrefsUpdated(wxCommandEvent & WXUNUSED(evt))
|
||||
{
|
||||
UpdatePrefs();
|
||||
@@ -214,23 +205,28 @@ void MeterToolBar::OnSize( wxSizeEvent & WXUNUSED(event) )
|
||||
|
||||
bool MeterToolBar::Expose( bool show )
|
||||
{
|
||||
if( show )
|
||||
MeterToolBars::AddMeters( mPlayMeter, mRecordMeter );
|
||||
else
|
||||
MeterToolBars::RemoveMeters( mPlayMeter, mRecordMeter );
|
||||
bool updated = false;
|
||||
if( show ) {
|
||||
if( mPlayMeter ) {
|
||||
mProject->SetPlaybackMeter( mPlayMeter );
|
||||
}
|
||||
|
||||
if( mRecordMeter ) {
|
||||
mProject->SetCaptureMeter( mRecordMeter );
|
||||
}
|
||||
} else {
|
||||
if( mPlayMeter && mProject->GetPlaybackMeter() == mPlayMeter ) {
|
||||
mProject->SetPlaybackMeter( NULL );
|
||||
}
|
||||
|
||||
if( mRecordMeter && mProject->GetCaptureMeter() == mRecordMeter ) {
|
||||
mProject->SetCaptureMeter( NULL );
|
||||
}
|
||||
}
|
||||
|
||||
return ToolBar::Expose( show );
|
||||
}
|
||||
|
||||
void MeterToolBar::Activate( bool active )
|
||||
{
|
||||
if( active )
|
||||
MeterToolBars::AddMeters( mPlayMeter, mRecordMeter );
|
||||
else
|
||||
MeterToolBars::RemoveMeters( mPlayMeter, mRecordMeter );
|
||||
|
||||
gAudioIO->SetMeters(mRecordMeter, mPlayMeter);
|
||||
}
|
||||
|
||||
wxSize MeterToolBar::GetDockedSize()
|
||||
{
|
||||
const int tbs = toolbarSingle + toolbarGap;
|
||||
@@ -246,43 +242,3 @@ wxSize MeterToolBar::GetDockedSize()
|
||||
return sz;
|
||||
}
|
||||
|
||||
// Locally defined - we can change implementation easily later.
|
||||
namespace MeterToolBars {
|
||||
Meter * mPlayMeter=NULL;
|
||||
Meter * mRecordMeter=NULL;
|
||||
}
|
||||
|
||||
void MeterToolBars::AddMeters(Meter *playMeter, Meter *recordMeter)
|
||||
{
|
||||
if( playMeter != NULL ) mPlayMeter = playMeter;
|
||||
if( recordMeter != NULL ) mRecordMeter = recordMeter;
|
||||
}
|
||||
|
||||
void MeterToolBars::RemoveMeters(Meter *playMeter, Meter *recordMeter)
|
||||
{
|
||||
if( mPlayMeter == playMeter ) mPlayMeter = NULL;
|
||||
if( mRecordMeter == recordMeter ) mRecordMeter = NULL;
|
||||
}
|
||||
|
||||
void MeterToolBars::GetMeters(Meter **playMeter, Meter **recordMeter)
|
||||
{
|
||||
*playMeter = mPlayMeter;
|
||||
*recordMeter = mRecordMeter;
|
||||
}
|
||||
|
||||
void MeterToolBars::StartMonitoring()
|
||||
{
|
||||
if( mRecordMeter == NULL )
|
||||
return;
|
||||
wxASSERT( mRecordMeter );
|
||||
mRecordMeter->StartMonitoring();
|
||||
//wxASSERT( mPlayMeter );
|
||||
//mPlayMeter->StartMonitoring();
|
||||
}
|
||||
|
||||
void MeterToolBars::Clear()
|
||||
{
|
||||
if (mPlayMeter) mPlayMeter->Clear();
|
||||
if (mRecordMeter) mRecordMeter->Clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -32,11 +32,10 @@ class MeterToolBar:public ToolBar {
|
||||
|
||||
public:
|
||||
|
||||
MeterToolBar(int WhichMeters);
|
||||
MeterToolBar(AudacityProject *project, int type);
|
||||
virtual ~MeterToolBar();
|
||||
|
||||
void Create(wxWindow *parent);
|
||||
bool DestroyChildren();
|
||||
|
||||
virtual void Populate();
|
||||
virtual void Repaint(wxDC * WXUNUSED(dc)) {};
|
||||
@@ -45,7 +44,6 @@ class MeterToolBar:public ToolBar {
|
||||
|
||||
virtual void OnSize(wxSizeEvent & event);
|
||||
virtual bool Expose( bool show );
|
||||
virtual void Activate( bool active );
|
||||
|
||||
int GetInitialWidth() {return (mWhichMeters ==
|
||||
(kWithRecordMeter + kWithPlayMeter)) ? 338 : 460;} // Separate bars used to be smaller.
|
||||
@@ -56,6 +54,7 @@ class MeterToolBar:public ToolBar {
|
||||
void OnMeterPrefsUpdated(wxCommandEvent & evt);
|
||||
void RegenerateTooltips();
|
||||
|
||||
AudacityProject *mProject;
|
||||
int mWhichMeters;
|
||||
wxGridBagSizer *mSizer;
|
||||
Meter *mPlayMeter;
|
||||
@@ -68,15 +67,5 @@ class MeterToolBar:public ToolBar {
|
||||
|
||||
};
|
||||
|
||||
namespace MeterToolBars {
|
||||
void AddMeters(Meter *playMeter, Meter *recordMeter);
|
||||
void RemoveMeters(Meter *playMeter, Meter *recordMeter);
|
||||
void GetMeters(Meter **playMeter, Meter **recordMeter);
|
||||
void StartMonitoring();
|
||||
void Clear();
|
||||
//Meter *mPlayMeter;
|
||||
//Meter *mRecordMeter;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -298,6 +298,8 @@ ToolBar::ToolBar( int type,
|
||||
|
||||
mGrabber = NULL;
|
||||
mResizer = NULL;
|
||||
|
||||
SetId(mType);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -384,7 +386,7 @@ bool ToolBar::Expose( bool show )
|
||||
{
|
||||
bool was = mVisible;
|
||||
|
||||
mVisible = show;
|
||||
SetVisible( show );
|
||||
|
||||
if( IsDocked() )
|
||||
{
|
||||
@@ -423,10 +425,6 @@ void ToolBar::Create( wxWindow *parent )
|
||||
|
||||
// Go do the rest of the creation
|
||||
ReCreateButtons();
|
||||
|
||||
// Let the user see it in all its glory
|
||||
Show();
|
||||
mVisible = true;
|
||||
}
|
||||
|
||||
void ToolBar::ReCreateButtons()
|
||||
|
||||
@@ -406,9 +406,9 @@ ToolManager::ToolManager( AudacityProject *parent )
|
||||
// Create all of the toolbars
|
||||
mBars[ ToolsBarID ] = new ToolsToolBar();
|
||||
mBars[ TransportBarID ] = new ControlToolBar();
|
||||
mBars[ RecordMeterBarID ] = new MeterToolBar( kWithRecordMeter );
|
||||
mBars[ PlayMeterBarID ] = new MeterToolBar( kWithPlayMeter );
|
||||
mBars[ MeterBarID ] = new MeterToolBar( kWithPlayMeter | kWithRecordMeter );
|
||||
mBars[ RecordMeterBarID ] = new MeterToolBar( parent, RecordMeterBarID );
|
||||
mBars[ PlayMeterBarID ] = new MeterToolBar( parent, PlayMeterBarID );
|
||||
mBars[ MeterBarID ] = new MeterToolBar( parent, MeterBarID );
|
||||
mBars[ EditBarID ] = new EditToolBar();
|
||||
mBars[ MixerBarID ] = new MixerToolBar();
|
||||
mBars[ TranscriptionBarID ] = new TranscriptionToolBar();
|
||||
@@ -469,10 +469,6 @@ void ToolManager::Reset()
|
||||
{
|
||||
int ndx;
|
||||
|
||||
// The mInputMeter and mOutputMeter may be in use if audio is playing
|
||||
// when this happens.
|
||||
gAudioIO->SetMeters( NULL, NULL );
|
||||
|
||||
// Disconnect all docked bars
|
||||
for( ndx = 0; ndx < ToolBarCount; ndx++ )
|
||||
{
|
||||
@@ -756,6 +752,10 @@ void ToolManager::ReadConfig()
|
||||
{
|
||||
d->ShowHide( t->GetId() );
|
||||
}
|
||||
else
|
||||
{
|
||||
t->Expose( show[ ndx ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -772,6 +772,10 @@ void ToolManager::ReadConfig()
|
||||
{
|
||||
d->ShowHide( t->GetId() );
|
||||
}
|
||||
else
|
||||
{
|
||||
t->Expose( show[ ndx ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user