1
0
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:
lllucius
2014-12-17 19:16:08 +00:00
parent 4fe3f855eb
commit fe42e881a5
13 changed files with 203 additions and 158 deletions

View File

@@ -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

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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()

View File

@@ -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 ] );
}
}
}