Update of /cvsroot/audacity/audacity-src/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv9597/audacity/src
Modified Files: MixerBoard.cpp MixerBoard.h Log Message: more rearrangements Index: MixerBoard.cpp =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/MixerBoard.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- MixerBoard.cpp 21 Aug 2009 14:20:52 -0000 1.18 +++ MixerBoard.cpp 21 Aug 2009 19:16:23 -0000 1.19 @@ -71,15 +71,19 @@ // class MixerTrackCluster -#define kInset 4 -#define kDoubleInset (2 * kInset) -#define kTripleInset (3 * kInset) -#define kQuadrupleInset (4 * kInset) +#define kInset 4 +#define kDoubleInset (2 * kInset) +#define kQuadrupleInset (4 * kInset) -#define TRACK_NAME_HEIGHT 18 -#define MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH 48 -#define MUTE_SOLO_HEIGHT 16 -#define PAN_HEIGHT 24 +#define TRACK_NAME_HEIGHT 18 +#define MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH 48 +#define MUTE_SOLO_HEIGHT 16 +#define PAN_HEIGHT 24 + +#define kLeftSideStackWidth MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH - kDoubleInset //vvvvv Change when numbers shown on slider scale. +#define kRightSideStackWidth MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + kInset +#define kRequiredHeightBelowMeter (2 * (kDoubleInset + MUTE_SOLO_HEIGHT)) + kQuadrupleInset // mute/solo buttons stacked at bottom right +#define kMixerTrackClusterWidth kLeftSideStackWidth + kRightSideStackWidth + kDoubleInset // kInset margin on both sides enum { ID_MUSICAL_INSTRUMENT_IMAGE = 13000, @@ -132,11 +136,11 @@ // pan slider - ctrlPos.x = (size.GetWidth() / 10); - ctrlPos.y += TRACK_NAME_HEIGHT + kQuadrupleInset; + ctrlPos.x = size.GetWidth() / 10; + ctrlPos.y += TRACK_NAME_HEIGHT + kDoubleInset; ctrlSize = wxSize((size.GetWidth() * 4 / 5), PAN_HEIGHT); - // The width of the pan slider must be odd (per Dominic, don't ask). + // The width of the pan slider must be odd (don't ask). if (!(ctrlSize.x & 1)) ctrlSize.x--; @@ -150,20 +154,14 @@ this->UpdatePan(); - const int kHalfWidth = (size.GetWidth() / 2); - // Instead of an even split of the cluster width, - // give extra pixels to the meter. - const int kExtraWidthForMeter = 16; - // gain slider at left ctrlPos.x = kInset; ctrlPos.y += PAN_HEIGHT + kDoubleInset; - const int kGainSliderHeight = - size.GetHeight() - ctrlPos.y - kDoubleInset; + const int nGainSliderHeight = + size.GetHeight() - ctrlPos.y - kQuadrupleInset; ctrlSize = - wxSize((kHalfWidth - kDoubleInset - kExtraWidthForMeter), - kGainSliderHeight); + wxSize(kLeftSideStackWidth - kDoubleInset, nGainSliderHeight); mSlider_Gain = new MixerTrackSlider( @@ -185,10 +183,9 @@ // meter and other controls at right - const int kMeterStackX = kHalfWidth - kExtraWidthForMeter; // musical instrument image - ctrlPos.x = ((size.GetWidth() - kMeterStackX - MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH) / 2) + kMeterStackX; // Center in right stack. + ctrlPos.x = kInset + kLeftSideStackWidth; ctrlSize = wxSize(MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH, MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH); wxBitmap* bitmap = mMixerBoard->GetMusicalInstrumentBitmap(mLeftTrack); wxASSERT(bitmap); @@ -197,16 +194,12 @@ // meter - ctrlPos.x = kMeterStackX; ctrlPos.y += MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + kDoubleInset; - - const int kRequiredHeightBelowMeter = //vvvvv Make this a global? - (2 * (kDoubleInset + MUTE_SOLO_HEIGHT)) + kDoubleInset; // mute/solo buttons stacked at bottom right - const int kMeterHeight = - kGainSliderHeight - + const int nMeterHeight = + nGainSliderHeight - (MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + kDoubleInset) - - kRequiredHeightBelowMeter; - ctrlSize.Set(kHalfWidth - kInset + kExtraWidthForMeter, kMeterHeight); + kQuadrupleInset - kRequiredHeightBelowMeter; + ctrlSize.Set(kRightSideStackWidth, nMeterHeight); mMeter = new Meter(this, -1, // wxWindow* parent, wxWindowID id, false, // bool isInput @@ -214,7 +207,7 @@ Meter::MixerTrackCluster); // Style style = HorizontalStereo, // mute/solo buttons stacked below meter - ctrlPos.y += kMeterHeight + kDoubleInset; + ctrlPos.y += nMeterHeight + kQuadrupleInset; ctrlSize = wxSize(mMixerBoard->mMuteSoloWidth, MUTE_SOLO_HEIGHT); mToggleButton_Mute = new AButton(this, ID_TOGGLEBUTTON_MUTE, @@ -227,7 +220,7 @@ *(mMixerBoard->mImageMuteDown), *(mMixerBoard->mImageMuteDisabled)); this->UpdateMute(); - ctrlPos.y += kDoubleInset + MUTE_SOLO_HEIGHT; + ctrlPos.y += MUTE_SOLO_HEIGHT; mToggleButton_Solo = new AButton(this, ID_TOGGLEBUTTON_SOLO, ctrlPos, ctrlSize, @@ -250,6 +243,43 @@ #endif } +void MixerTrackCluster::HandleResize() // For wxSizeEvents, update gain slider and meter. +{ + wxSize scrolledWindowClientSize = this->GetParent()->GetClientSize(); + const int newClusterHeight = + scrolledWindowClientSize.GetHeight() - kDoubleInset - // nClusterHeight from MixerBoard::UpdateTrackClusters + wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y) + // wxScrolledWindow::GetClientSize doesn't account for its scrollbar size. + kDoubleInset; + + this->SetSize(-1, newClusterHeight); + + // Change the heights of only mSlider_Gain and mMeter. + + // gain slider + const int nGainSliderHeight = + newClusterHeight - + (kInset + // margin above mStaticText_TrackName + TRACK_NAME_HEIGHT + kDoubleInset + // mStaticText_TrackName + margin + PAN_HEIGHT + kDoubleInset) - // pan slider + kQuadrupleInset; // margin below gain slider + mSlider_Gain->SetSize(-1, nGainSliderHeight); + + const int nMeterHeight = + nGainSliderHeight - + (MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + kDoubleInset) - + kQuadrupleInset - kRequiredHeightBelowMeter; + mMeter->SetSize(-1, nMeterHeight); + + // Reposition mute/solo buttons. + int newMuteSoloX; + int newMuteSoloY; + mMeter->GetPosition(&newMuteSoloX, &newMuteSoloY); + newMuteSoloY += nMeterHeight + kQuadrupleInset; + mToggleButton_Mute->Move(-1 , newMuteSoloY); + newMuteSoloY += MUTE_SOLO_HEIGHT; + mToggleButton_Solo->Move(-1 , newMuteSoloY); +} + void MixerTrackCluster::HandleSliderGain(const bool bWantPushState /*= false*/) { float fValue = mSlider_Gain->Get(); @@ -283,51 +313,6 @@ mMeter->Reset(mLeftTrack->GetRate(), true); } -void MixerTrackCluster::UpdateHeight() // For wxSizeEvents, update gain slider and meter. -{ - wxSize scrolledWindowClientSize = this->GetParent()->GetClientSize(); - const int newClusterHeight = - scrolledWindowClientSize.GetHeight() - - wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y) + // wxScrolledWindow::GetClientSize doesn't account for its scrollbar size. - kDoubleInset; - - this->SetSize(-1, newClusterHeight); - - // Change the heights of only mSlider_Gain and mMeter. - - // gain slider - const int kGainSliderHeight = - newClusterHeight - - (kInset + // margin above mStaticText_TrackName - TRACK_NAME_HEIGHT + kDoubleInset + // mStaticText_TrackName + margin - PAN_HEIGHT + kDoubleInset) - // pan slider - kQuadrupleInset; // margin below gain slider and meter stack - - // -1 doesn't work right to preserve width for wxSlider, and it doesn't implement GetSize(void). //vvvvv Still true? - // mSlider_Gain->SetSize(-1, kGainSliderHeight); - int oldWidth; - int oldHeight; - mSlider_Gain->GetSize(&oldWidth, &oldHeight); - mSlider_Gain->SetSize(oldWidth, kGainSliderHeight); - - const int kRequiredHeightBelowMeter = //vvvvv Make this a global? - (2 * (kDoubleInset + MUTE_SOLO_HEIGHT)) + kDoubleInset; // mute/solo buttons stacked at bottom right - const int kMeterHeight = - kGainSliderHeight - - (MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + kDoubleInset) - - kRequiredHeightBelowMeter; - mMeter->SetSize(-1, kMeterHeight); - - // Reposition mute/solo buttons. - int newMuteSoloX; - int newMuteSoloY; - mMeter->GetPosition(&newMuteSoloX, &newMuteSoloY); - newMuteSoloY += kMeterHeight + kDoubleInset; - mToggleButton_Mute->Move(-1 , newMuteSoloY); - newMuteSoloY += kDoubleInset + MUTE_SOLO_HEIGHT; - mToggleButton_Solo->Move(-1 , newMuteSoloY); -} - // These are used by TrackPanel for synchronizing control states, etc. @@ -356,12 +341,12 @@ void MixerTrackCluster::UpdateSolo() { - bool bValue = mLeftTrack->GetSolo(); - if (bValue) + bool bIsSolo = mLeftTrack->GetSolo(); + if (bIsSolo) mToggleButton_Solo->PushDown(); else mToggleButton_Solo->PopUp(); - mToggleButton_Mute->SetAlternate(bValue); + mToggleButton_Mute->SetAlternate(bIsSolo); } void MixerTrackCluster::UpdatePan() @@ -383,20 +368,19 @@ return; } - const int kFramesPerBuffer = 4; + const int nFramesPerBuffer = 4; float min; // A dummy, since it's not shown in meters. - float* maxLeft = new float[kFramesPerBuffer]; - float* rmsLeft = new float[kFramesPerBuffer]; - float* maxRight = new float[kFramesPerBuffer]; - float* rmsRight = new float[kFramesPerBuffer]; - const sampleCount kSampleCount = mLeftTrack->TimeToLongSamples(t1 - t0); + float* maxLeft = new float[nFramesPerBuffer]; + float* rmsLeft = new float[nFramesPerBuffer]; + float* maxRight = new float[nFramesPerBuffer]; + float* rmsRight = new float[nFramesPerBuffer]; bool bSuccess = true; - const double kFrameInterval = (t1 - t0) / (double)kFramesPerBuffer; + const double dFrameInterval = (t1 - t0) / (double)nFramesPerBuffer; double dFrameT0 = t0; - double dFrameT1 = t0 + kFrameInterval; + double dFrameT1 = t0 + dFrameInterval; unsigned int i = 0; - while (bSuccess && (i < kFramesPerBuffer)) + while (bSuccess && (i < nFramesPerBuffer)) { bSuccess &= mLeftTrack->GetMinMax(&min, &(maxLeft[i]), dFrameT0, dFrameT1) && @@ -412,15 +396,15 @@ maxRight[i] = maxLeft[i]; rmsRight[i] = rmsLeft[i]; } - dFrameT0 += kFrameInterval; - dFrameT1 += kFrameInterval; + dFrameT0 += dFrameInterval; + dFrameT1 += dFrameInterval; i++; } bool bWantPostFadeValues = true; //vvv Turn this into a pref, default true. if (bSuccess && bWantPostFadeValues) { - for (i = 0; i < kFramesPerBuffer; i++) + for (i = 0; i < nFramesPerBuffer; i++) { float gain = mLeftTrack->GetChannelGain(0); maxLeft[i] *= gain; @@ -437,10 +421,11 @@ if (bSuccess) mMeter->UpdateDisplay( 2, // If mono, show left track values in both meters, as in MeterToolBar. kNumChannels, - kFramesPerBuffer, + nFramesPerBuffer, maxLeft, rmsLeft, maxRight, rmsRight, - kSampleCount); + mLeftTrack->TimeToLongSamples(t1 - t0)); + delete[] maxLeft; delete[] rmsLeft; @@ -534,17 +519,7 @@ void MixerTrackCluster::OnButton_Mute(wxCommandEvent& event) { - // Shift-click mutes this track and unmutes other tracks. Tell mMixerBoard to handle it. - if (mToggleButton_Mute->WasShiftDown()) - { - mMixerBoard->UniquelyMuteOrSolo(mLeftTrack, false); //vvvvv - return; - } - - bool bValue = mToggleButton_Mute->IsDown(); - mLeftTrack->SetMute(bValue); - if (mRightTrack) - mRightTrack->SetMute(bValue); + mProject->HandleTrackMute(mLeftTrack, mToggleButton_Mute->WasShiftDown()); mToggleButton_Mute->SetAlternate(mLeftTrack->GetSolo()); // Update the TrackPanel correspondingly. @@ -553,19 +528,11 @@ void MixerTrackCluster::OnButton_Solo(wxCommandEvent& event) { - // Shift-click solos this track and unsolos other tracks. Tell mMixerBoard to handle it. - if (mToggleButton_Solo->WasShiftDown()) - { - mMixerBoard->UniquelyMuteOrSolo(mLeftTrack, true); //vvvvv - return; - } - - bool bValue = mToggleButton_Solo->IsDown(); - mLeftTrack->SetSolo(bValue); - if (mRightTrack) - mRightTrack->SetSolo(bValue); - mMixerBoard->IncrementSoloCount(bValue ? 1 : -1); - mToggleButton_Mute->SetAlternate(bValue); + mProject->HandleTrackSolo(mLeftTrack, mToggleButton_Solo->WasShiftDown()); + + bool bIsSolo = mLeftTrack->GetSolo(); + mMixerBoard->IncrementSoloCount(bIsSolo ? 1 : -1); + mToggleButton_Mute->SetAlternate(bIsSolo); // Update the TrackPanel correspondingly. mProject->RefreshTPTrack(mLeftTrack); @@ -669,8 +636,7 @@ // class MixerBoard #define MIXER_BOARD_MIN_HEIGHT 460 -#define MIXER_TRACK_CLUSTER_WIDTH 96 -#define MIXER_BOARD_MIN_WIDTH kDoubleInset + MIXER_TRACK_CLUSTER_WIDTH + kDoubleInset +#define MIXER_BOARD_MIN_WIDTH kDoubleInset + kMixerTrackClusterWidth + kDoubleInset BEGIN_EVENT_TABLE(MixerBoard, wxWindow) @@ -685,7 +651,8 @@ { // public data members - // mute & solo button images: Create once and store on MixerBoard for use in all MixerTrackClusters. + // mute & solo button images + // Create once and store on MixerBoard for use in all MixerTrackClusters. mImageMuteUp = NULL; mImageMuteOver = NULL; mImageMuteDown = NULL; @@ -696,7 +663,7 @@ mImageSoloDown = NULL; mImageSoloDisabled = NULL; - mMuteSoloWidth = 44; //v good estimate, but really set in MixerBoard::CreateMuteSoloImages + mMuteSoloWidth = kRightSideStackWidth - kInset; // correct for max width, but really set in MixerBoard::CreateMuteSoloImages // private data members this->LoadMusicalInstruments(); // Set up mMusicalInstruments. @@ -756,8 +723,8 @@ if (mImageMuteUp == NULL) this->CreateMuteSoloImages(); - const int kClusterHeight = mScrolledWindow->GetClientSize().GetHeight() - kDoubleInset; - const size_t kClusterCount = mMixerTrackClusters.GetCount(); + const int nClusterHeight = mScrolledWindow->GetClientSize().GetHeight() - kDoubleInset; + const size_t nClusterCount = mMixerTrackClusters.GetCount(); unsigned int nClusterIndex = 0; TrackListIterator iterTracks(mTracks); MixerTrackCluster* pMixerTrackCluster = NULL; @@ -770,7 +737,7 @@ if (pLeftTrack->GetKind() == Track::Wave) { - if (nClusterIndex < kClusterCount) + if (nClusterIndex < nClusterCount) { // Already showing it. // Track clusters are maintained in the same order as the WaveTracks. @@ -786,10 +753,10 @@ wxPoint clusterPos( (kInset + // extra inset to left for first one. (nClusterIndex * - (kInset + MIXER_TRACK_CLUSTER_WIDTH)) + // left margin and width for each to its left + (kInset + kMixerTrackClusterWidth)) + // left margin and width for each to its left kInset), // plus left margin for new cluster kInset); - wxSize clusterSize(MIXER_TRACK_CLUSTER_WIDTH, kClusterHeight); + wxSize clusterSize(kMixerTrackClusterWidth, nClusterHeight); pMixerTrackCluster = new MixerTrackCluster(mScrolledWindow, this, mProject, (WaveTrack*)pLeftTrack, (WaveTrack*)pRightTrack, @@ -810,15 +777,15 @@ // Added at least one MixerTrackCluster. this->UpdateWidth(); for (nClusterIndex = 0; nClusterIndex < mMixerTrackClusters.GetCount(); nClusterIndex++) - mMixerTrackClusters[nClusterIndex]->UpdateHeight(); + mMixerTrackClusters[nClusterIndex]->HandleResize(); } - else if (nClusterIndex < kClusterCount) + else if (nClusterIndex < nClusterCount) { // We've got too many clusters. // This can only on things like Undo New Audio Track or Undo Import // that don't call RemoveTrackCluster explicitly. // We've already updated the track pointers for the clusters to the left, so just remove these. - for (; nClusterIndex < kClusterCount; nClusterIndex++) + for (; nClusterIndex < nClusterCount; nClusterIndex++) this->RemoveTrackCluster(mMixerTrackClusters[nClusterIndex]->mLeftTrack); } } @@ -828,7 +795,7 @@ return kInset + // extra margin at left for first one (mMixerTrackClusters.GetCount() * // number of tracks times - (kInset + MIXER_TRACK_CLUSTER_WIDTH)) + // left margin and width for each + (kInset + kMixerTrackClusterWidth)) + // left margin and width for each kDoubleInset; // plus final right margin } @@ -843,25 +810,27 @@ wxPoint pos; if (bUp) { // Move it up (left). - wxASSERT(nIndex > 0); // Shouldn't be called if already first. + if (nIndex <= 0) + return; // It's already first. pos = pMixerTrackCluster->GetPosition(); mMixerTrackClusters[nIndex] = mMixerTrackClusters[nIndex - 1]; mMixerTrackClusters[nIndex]->Move(pos); mMixerTrackClusters[nIndex - 1] = pMixerTrackCluster; - pMixerTrackCluster->Move(pos.x - (kInset + MIXER_TRACK_CLUSTER_WIDTH), pos.y); + pMixerTrackCluster->Move(pos.x - (kInset + kMixerTrackClusterWidth), pos.y); } else { // Move it down (right). - wxASSERT(((unsigned int)nIndex + 1) < mMixerTrackClusters.GetCount()); // Shouldn't be called if already last. + if (((unsigned int)nIndex + 1) >= mMixerTrackClusters.GetCount()) + return; // It's already last. pos = pMixerTrackCluster->GetPosition(); mMixerTrackClusters[nIndex] = mMixerTrackClusters[nIndex + 1]; mMixerTrackClusters[nIndex]->Move(pos); mMixerTrackClusters[nIndex + 1] = pMixerTrackCluster; - pMixerTrackCluster->Move(pos.x + (kInset + MIXER_TRACK_CLUSTER_WIDTH), pos.y); + pMixerTrackCluster->Move(pos.x + (kInset + kMixerTrackClusterWidth), pos.y); } } @@ -883,7 +852,7 @@ { pos = mMixerTrackClusters[i]->GetPosition(); targetX = - (i * (kInset + MIXER_TRACK_CLUSTER_WIDTH)) + // left margin and width for each + (i * (kInset + kMixerTrackClusterWidth)) + // left margin and width for each kInset; // plus left margin for this cluster if (pos.x != targetX) mMixerTrackClusters[i]->Move(targetX, pos.y); @@ -972,35 +941,6 @@ mMixerTrackClusters[i]->ResetMeter(); } -void MixerBoard::UniquelyMuteOrSolo(const WaveTrack* pTargetLeftTrack, bool bSolo) //vvvvv -{ - wxASSERT(mTracks && !mTracks->IsEmpty()); - TrackListIterator iterTracks(mTracks); - Track* pLeftTrack = iterTracks.First(); - while (pLeftTrack) { - if (pLeftTrack->GetKind() == Track::Wave) { - if (bSolo) - pLeftTrack->SetSolo(pLeftTrack == pTargetLeftTrack); - else - pLeftTrack->SetMute(pLeftTrack == pTargetLeftTrack); - } - if (pLeftTrack->GetLinked()) - pLeftTrack = iterTracks.Next(); // Skip the right track. - pLeftTrack = iterTracks.Next(); - } - - if (bSolo) - { - mSoloCount = 1; - this->UpdateSolo(); // Update all the MixerTrackCluster solo buttons. - } - else - this->UpdateMute(); // Update all the MixerTrackCluster mute buttons. - - mProject->RedrawProject(); // Update all the TrackLabel mute/solo buttons. -} - - void MixerBoard::UpdateName(const WaveTrack* pLeftTrack) { MixerTrackCluster* pMixerTrackCluster; @@ -1068,10 +1008,7 @@ if (t1 <= mPrevT1) { if (bLoopedPlay) - { - this->ResetMeters(); mPrevT1 = t1; - } return; } @@ -1100,7 +1037,7 @@ void MixerBoard::CreateMuteSoloImages() { - // Much of this is taken TrackLabel::DrawMuteSolo + // Much of this is taken from TrackLabel::DrawMuteSolo. wxMemoryDC dc; wxString str = _("Mute"); int textWidth, textHeight; @@ -1110,8 +1047,10 @@ fontSize = 8; #endif wxFont font(fontSize, wxSWISS, wxNORMAL, wxNORMAL); - GetTextExtent(str, &textWidth, &textHeight, NULL, NULL, &font); - mMuteSoloWidth = textWidth + (3 * kInset); + this->GetTextExtent(str, &textWidth, &textHeight, NULL, NULL, &font); + mMuteSoloWidth = textWidth + kQuadrupleInset; + if (mMuteSoloWidth < kRightSideStackWidth - kInset) + mMuteSoloWidth = kRightSideStackWidth - kInset; wxBitmap bitmap(mMuteSoloWidth, MUTE_SOLO_HEIGHT); dc.SelectObject(bitmap); @@ -1341,7 +1280,7 @@ mScrolledWindow->SetSize(evt.GetSize()); for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++) - mMixerTrackClusters[i]->UpdateHeight(); + mMixerTrackClusters[i]->HandleResize(); this->RefreshTrackClusters(true); } Index: MixerBoard.h =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/MixerBoard.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- MixerBoard.h 5 Aug 2009 20:11:59 -0000 1.8 +++ MixerBoard.h 21 Aug 2009 19:16:23 -0000 1.9 @@ -71,14 +71,14 @@ const wxSize& size = wxDefaultSize); virtual ~MixerTrackCluster() {}; + void HandleResize(); // For wxSizeEvents, update gain slider and meter. + void HandleSliderGain(const bool bWantPushState = false); void HandleSliderPan(const bool bWantPushState = false); void ResetMeter(); - void UpdateHeight(); // For wxSizeEvents, update gain slider and meter. - - // These are used by TrackPanel for synchronizing control states, etc. + // These are used by TrackPanel for synchronizing control states. void UpdateForStateChange(); // Update the controls that can be affected by state change. void UpdateName(); void UpdateMute(); @@ -195,8 +195,6 @@ void RefreshTrackClusters(bool bEraseBackground = true); void ResetMeters(); - void UniquelyMuteOrSolo(const WaveTrack* pTargetLeftTrack, bool bSolo); //vvvvv - void UpdateName(const WaveTrack* pLeftTrack); void UpdateMute(const WaveTrack* pLeftTrack = NULL); // NULL means update for all tracks. void UpdateSolo(const WaveTrack* pLeftTrack = NULL); // NULL means update for all tracks. ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Audacity-cvs mailing list Audacity-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/audacity-cvs