Update of /cvsroot/audacity/audacity-src/src
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv25204

Modified Files:
      Tag: Audacity_UmixIt
        Audacity.h Menus.cpp Menus.h MeterToolBar.cpp Project.cpp 
        Project.h TrackPanel.cpp 
Added Files:
      Tag: Audacity_UmixIt
        MixerBoard.cpp MixerBoard.h 
Log Message:
initial version of new MixerBoard window

Index: Project.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Project.h,v
retrieving revision 1.70.2.3.2.3
retrieving revision 1.70.2.3.2.4
diff -u -d -r1.70.2.3.2.3 -r1.70.2.3.2.4
--- Project.h   29 Nov 2006 03:14:04 -0000      1.70.2.3.2.3
+++ Project.h   2 Feb 2007 01:36:07 -0000       1.70.2.3.2.4
@@ -57,6 +57,7 @@
 class MeterToolBar;
 class HistoryWindow;
 class LyricsWindow;
+class MixerBoard;
 class Importer;
 
 class AudacityProject;
@@ -100,7 +101,7 @@
 
    virtual bool HandleXMLTag(const char *tag, const char **attrs);
    virtual XMLTagHandler *HandleXMLChild(const char *tag) { return NULL; };
-   virtual void WriteXML(int depth, FILE *fp) {}; //v
+   virtual void WriteXML(int depth, FILE *fp) {}; //vvv todo
  private: 
    AudacityProject* mProject;
 };
@@ -137,6 +138,7 @@
    int GetAudioIOToken();
    void SetAudioIOToken(int token);
    LyricsWindow* GetLyricsWindow() { return mLyricsWindow; };
+   MixerBoard* GetMixerBoard() { return mMixerBoard; };
 
    bool IsActive();
 
@@ -270,6 +272,7 @@
    void PopState(TrackList * l);
 
    void UpdateLyrics();
+   void UpdateMixerBoard();
 
    // Callbacks for backend operations
 
@@ -343,6 +346,7 @@
    bool mIconized;
    HistoryWindow *mHistoryWindow;
    LyricsWindow *mLyricsWindow;
+   MixerBoard *mMixerBoard;
 
    ToolBarArray mToolBarArray;
    int mTotalToolBarHeight;

Index: Audacity.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Audacity.h,v
retrieving revision 1.20.2.17.2.1
retrieving revision 1.20.2.17.2.2
diff -u -d -r1.20.2.17.2.1 -r1.20.2.17.2.2
--- Audacity.h  29 Nov 2006 03:14:39 -0000      1.20.2.17.2.1
+++ Audacity.h  2 Feb 2007 01:36:06 -0000       1.20.2.17.2.2
@@ -17,7 +17,7 @@
 #define __AUDACITY_H__
 
 // Increment this every time you release a new version
-#define AUDACITY_VERSION_STRING "1.2.6 (UmixIt)"
+#define AUDACITY_VERSION_STRING "1.2.6 (customized for UmixIt)"
 
 // Increment this every time the prefs need to be reset
 // the first part (before the r) indicates the version the reset took place

--- NEW FILE: MixerBoard.h ---
/**********************************************************************

  Audacity: A Digital Audio Editor

  MixerBoard.h

  Vaughan Johnson, January 2007

**********************************************************************/

#ifndef __AUDACITY_MIXER_BOARD__
#define __AUDACITY_MIXER_BOARD__

#include <wx/frame.h>
#include <wx/hashmap.h>
#include <wx/panel.h>

// controls
#include <wx/stattext.h>
#include <wx/tglbtn.h>
#include <wx/sizer.h>
#include <wx/slider.h>

#include "widgets/ASlider.h"
#include "widgets/Meter.h"

class AudacityProject;
class MixerBoard;
class WaveTrack;

class MixerTrackPanel : public wxPanel { 
   DECLARE_DYNAMIC_CLASS(MixerTrackPanel)

 public:
   MixerTrackPanel(MixerBoard* parent, AudacityProject* project, 
                     WaveTrack* pLeftTrack, WaveTrack* pRightTrack = NULL, 
                     const wxPoint& pos = wxDefaultPosition, 
                     const wxSize& size = wxDefaultSize);
   ~MixerTrackPanel() {};

   wxColour GetTrackColor();
   void Update(double t, bool bForce = false);

   // event handlers
   void OnButton_Mute(wxCommandEvent& event);
   void OnButton_Solo(wxCommandEvent& event);
   void OnSlider_Pan(wxCommandEvent& event);
   void OnSlider_Gain(wxCommandEvent& event);
   void OnSliderScroll_Gain(wxScrollEvent& event);

   void OnPaint(wxPaintEvent &evt);

 private:
   MixerBoard* mMixerBoard;
   AudacityProject* mProject;

   WaveTrack* mLeftTrack;
   WaveTrack* mRightTrack;

   // controls
   wxStaticText* mStaticText_TrackName;
   wxToggleButton* mToggleButton_Mute;
   wxToggleButton* mToggleButton_Solo;
   ASlider* mSlider_Pan;
   wxSlider* mSlider_Gain; //vvv ASlider* mSlider_Gain;
   Meter* mMeter;

 public:
   DECLARE_EVENT_TABLE()
};

WX_DECLARE_VOIDPTR_HASH_MAP(MixerTrackPanel*, MixerTrackPanelHash);

class MixerBoard : public wxFrame { //vvv or wxScrolledWindow ?
 public:
   MixerBoard(AudacityProject* parent);
   ~MixerBoard();

   void Update(double t, bool bForce = false);

 private:
   // event handlers
   void OnCloseWindow(wxCloseEvent & WXUNUSED(event));
   void OnKeyEvent(wxKeyEvent & event);

   MixerTrackPanelHash  mMixerTrackPanels; // Hash the panels based on the left 
WaveTrack* they're showing.
   AudacityProject*     mProject;
   wxSize               mSize;
   double               mT;

 public:
   DECLARE_EVENT_TABLE()
};

#endif // __AUDACITY_MIXER_BOARD__

--- NEW FILE: MixerBoard.cpp ---
/**********************************************************************

  Audacity: A Digital Audio Editor

  MixerBoard.cpp

  Vaughan Johnson, January 2007

**********************************************************************/

#include <math.h>

#include "AColor.h"
#include "Branding.h"
#include "MixerBoard.h"
#include "Project.h"

#define kInset 4

// class MixerTrackPanel

#define TITLE_BAR_HEIGHT 18
#define MUTE_SOLO_HEIGHT 16
#define PAN_HEIGHT 24

enum {
   ID_TOGGLEBUTTON_MUTE = 13000,
   ID_TOGGLEBUTTON_SOLO,
   ID_ASLIDER_PAN,
   ID_SLIDER_GAIN,
   ID_METER,
};

BEGIN_EVENT_TABLE(MixerTrackPanel, wxPanel)
   EVT_TOGGLEBUTTON(ID_TOGGLEBUTTON_MUTE, MixerTrackPanel::OnButton_Mute)
   EVT_TOGGLEBUTTON(ID_TOGGLEBUTTON_SOLO, MixerTrackPanel::OnButton_Solo)
   EVT_SLIDER(ID_ASLIDER_PAN, MixerTrackPanel::OnSlider_Pan)
   EVT_SLIDER(ID_SLIDER_GAIN, MixerTrackPanel::OnSlider_Gain)
   EVT_COMMAND_SCROLL(ID_SLIDER_GAIN, MixerTrackPanel::OnSliderScroll_Gain)

   EVT_PAINT(MixerTrackPanel::OnPaint)
END_EVENT_TABLE()

IMPLEMENT_CLASS(MixerTrackPanel, wxPanel)


MixerTrackPanel::MixerTrackPanel(MixerBoard* parent, AudacityProject* project, 
                                 WaveTrack* pLeftTrack, WaveTrack* pRightTrack 
/*= NULL*/, 
                                 const wxPoint& pos /*= wxDefaultPosition*/, 
                                 const wxSize& size /*= wxDefaultSize*/) : 
   wxPanel(parent, -1, pos, size)
{
   wxASSERT(parent);
   mMixerBoard = parent;

   wxASSERT(project);
   mProject = project;

   wxASSERT(pLeftTrack);
   mLeftTrack = pLeftTrack;

   mRightTrack = pRightTrack;


   // CREATE THE CONTROLS PROGRAMMATICALLY.
   
   //vvv For some reason the sizers aren't getting offset vertically, 
   // so positions are calculated explicitly below, but sizers are still in.
   wxBoxSizer* pBoxSizer_MixerTrackPanel = new wxBoxSizer(wxVERTICAL);

        // track name
   wxPoint ctrlPos(kInset, kInset);
   wxSize ctrlSize(size.GetWidth() - (2 * kInset), TITLE_BAR_HEIGHT);
   mStaticText_TrackName = 
      new wxStaticText(this, -1, mLeftTrack->GetName(), ctrlPos, ctrlSize, 
wxALIGN_CENTRE | wxSUNKEN_BORDER);
   mStaticText_TrackName->SetBackgroundColour(this->GetTrackColor());
   pBoxSizer_MixerTrackPanel->Add(mStaticText_TrackName, 0, wxALIGN_CENTER | 
wxALL, (2 * kInset));


   // mute/solo buttons
   ctrlPos.x = (size.GetWidth() / 8) + kInset;
   ctrlPos.y += TITLE_BAR_HEIGHT + (2 * kInset);
   ctrlSize = wxSize(MUTE_SOLO_HEIGHT, MUTE_SOLO_HEIGHT);
   mToggleButton_Mute = 
      new wxToggleButton(this, ID_TOGGLEBUTTON_MUTE, _("M"), /* i18n-hint: 
One-letter abbreviation for "Mute" */
                           ctrlPos, ctrlSize); 
                           //vvv Available on wxButton, not wxToggleButton: 
wxDefaultSize, wxBU_EXACTFIT);

   ctrlPos.x = size.GetWidth() * 5 / 8;
   mToggleButton_Solo = 
      new wxToggleButton(this, ID_TOGGLEBUTTON_SOLO, _("S"),  /* i18n-hint: 
One-letter abbreviation for "Solo" */
                           ctrlPos, ctrlSize); 
                           //vvv Available on wxButton, not wxToggleButton: 
wxDefaultSize, wxBU_EXACTFIT);

   //vvvvv No dc to call AColor::Solo(), so just hard code UmixIt prefs for 
now.  
   mToggleButton_Mute->SetForegroundColour(wxColour(255, 255, 0)); // yellow
   mToggleButton_Solo->SetForegroundColour(wxColour(0, 255, 0)); // green

   wxBoxSizer* pBoxSizer_MuteSolo = new wxBoxSizer(wxHORIZONTAL);
   pBoxSizer_MuteSolo->Add(mToggleButton_Mute, 0, wxALIGN_CENTER | wxALL, 
kInset);
   pBoxSizer_MuteSolo->Add((2 * kInset), 0, 0); // horizontal spacer
   pBoxSizer_MuteSolo->Add(mToggleButton_Solo, 0, wxALIGN_CENTER | wxALL, 
kInset);
   pBoxSizer_MixerTrackPanel->Add(pBoxSizer_MuteSolo, 0, wxALIGN_CENTER | 
wxALL, (2 * kInset));


   // pan slider
   ctrlPos.x = (size.GetWidth() / 10);
   ctrlPos.y += MUTE_SOLO_HEIGHT + (4 * kInset);
   ctrlSize = wxSize((size.GetWidth() * 4 / 5), PAN_HEIGHT);
   /* i18n-hint: Title of the Pan slider, used to move the sound left or right 
stereoscopically */
   mSlider_Pan = new ASlider(this, ID_ASLIDER_PAN, _("Pan"), ctrlPos, ctrlSize, 
PAN_SLIDER);
   pBoxSizer_MixerTrackPanel->Add(mSlider_Pan, 0, wxALIGN_CENTER | wxALL, (2 * 
kInset));


   // gain slider & level meter
   ctrlPos.x = (2 * kInset);
   ctrlPos.y += PAN_HEIGHT + (4 * kInset);
   ctrlSize = wxSize((size.GetWidth() / 3), //vvv * 2 / 5), 
                     (size.GetHeight() - ctrlPos.y - (4 * kInset)));
   const int kSliderMin = -6, kSliderMax = 36; // wxSlider has min at top, so 
this is [-36dB,6dB]. 
   int nSliderValue = 
      // Analog to LWSlider::Set() calc for DB_SLIDER. Negate because wxSlider 
has min at top.
      -(int)(20.0f * log10(mLeftTrack->GetGain()));
   if (nSliderValue < kSliderMin)
      nSliderValue = kSliderMin;
   if (nSliderValue > kSliderMax)
      nSliderValue = kSliderMax;
   mSlider_Gain = 
      // ASlider doesn't do vertical.  
      /* i18n-hint: Title of the Gain slider, used to adjust the volume */
      //    new ASlider(this, ID_SLIDER_GAIN, _("Gain"), ctrlPos, ctrlSize, 
DB_SLIDER);
      new wxSlider(this, ID_SLIDER_GAIN, nSliderValue, // wxWindow* parent, 
wxWindowID id, int value 
                     kSliderMin, kSliderMax, // int minValue, int maxValue, 
                     ctrlPos, ctrlSize, // const wxPoint& point = 
wxDefaultPosition, const wxSize& size = wxDefaultSize, 
                     wxSL_VERTICAL | wxSL_AUTOTICKS); // long style = 
wxSL_HORIZONTAL, ...

   ctrlPos.x += ctrlSize.GetWidth() + kInset;
   ctrlSize = wxSize(((size.GetWidth() / 2) - kInset), ctrlSize.GetHeight());
   mMeter = new Meter(this, ID_METER, false, Meter::MixerTrackPanel, ctrlPos, 
ctrlSize, this->GetTrackColor());
   mMeter->Reset(mLeftTrack->GetRate(), true);

   wxBoxSizer* pBoxSizer_GainAndMeter = new wxBoxSizer(wxHORIZONTAL);
   pBoxSizer_GainAndMeter->Add(mSlider_Gain, 0, wxALIGN_CENTER | wxALL, kInset);
   pBoxSizer_GainAndMeter->Add(mMeter, 0, wxALIGN_CENTER | wxALL, kInset);
   pBoxSizer_MixerTrackPanel->Add(pBoxSizer_GainAndMeter, 0, wxALIGN_CENTER | 
wxALL, (2 * kInset));


   #if wxUSE_TOOLTIPS
      mStaticText_TrackName->SetToolTip(_T("Track Name"));
      mToggleButton_Mute->SetToolTip(_T("Mute"));
      mToggleButton_Solo->SetToolTip(_T("Solo"));
      // LWSlider already shows the value, so don't do this:   
mSlider_Pan->SetToolTip(_T("Pan"));
      
      wxScrollEvent dummy;
      this->OnSliderScroll_Gain(dummy); // Set the tooltip to show the current 
value.

      mMeter->SetToolTip(_T("Level Meter"));
   #endif // wxUSE_TOOLTIPS


   //this->SetSizer(pBoxSizer_MixerTrackPanel);
   //vvv Don't want to shrink to minimum for sizer. 
   //pBoxSizer_MixerTrackPanel->Fit(this);
   //pBoxSizer_MixerTrackPanel->SetSizeHints(this);
}

wxColour MixerTrackPanel::GetTrackColor()
{
   //vvv This doesn't work right when switching back and forth between two 
projects 
   // when one is branded and the other is not, because for some reason, 
OnActivate 
   // isn't always called, so gActiveProject isn't updated. 
   Branding* pBranding = mProject->GetBranding();
   if (pBranding && (pBranding->GetBrandColorScheme() == "UmixIt")) //vvv 
UmixIt 
      return AColor::GetTrackColor((void*)mLeftTrack);
   return wxColour(102, 255, 102); // same as Meter playback color
}

void MixerTrackPanel::Update(double t, bool bForce /*= false*/)
{
   // This value 256 is analogous to typical value I saw for framesPerBuffer in 
audacityAudioCallback, 
   // but a smaller number gives better performance.
   const int kWidth = 256; // analog of mid.width in TrackArtist::DrawWaveform

   int numChannels = (mRightTrack != NULL) ? 2 : 1; // Doesn't handle more than 
2 channels, as per kMaxMeterBars.
   
   // Arrays containing the shape of the waveform - each array has one value 
per pixel.
   float* min = new float[kWidth]; // Don't need separate left & right ones, 
because it's ignored.
   float* maxLeft = new float[kWidth];
   float* rmsLeft = new float[kWidth];
   float* maxRight = (numChannels == 1) ? NULL : new float[kWidth];
   float* rmsRight = (numChannels == 1) ? NULL : new float[kWidth];
   sampleCount *where = new sampleCount[kWidth+1]; // Don't need separate left 
& right ones, because it's ignored.

   double pps = mLeftTrack->GetRate(); 
   
   // The WaveTrack class handles the details of computing the shape
   // of the waveform.  The only way GetWaveDisplay will fail is if
   // there's a serious error, like some of the waveform data can't
   // be loaded.  So if the function returns false, just skip it.
   wxASSERT(mLeftTrack);
   if (mLeftTrack->GetWaveDisplay(min, maxLeft, rmsLeft, where, kWidth, t, pps) 
&& 
         ((mRightTrack == NULL) || 
            mRightTrack->GetWaveDisplay(min, maxRight, rmsRight, where, kWidth, 
t, pps)))
   {
      wxASSERT(mMeter);
      mMeter->UpdateDisplay(numChannels, kWidth, maxLeft, rmsLeft, maxRight, 
rmsRight);
   }
   delete[] min;
   delete[] maxLeft;
   delete[] rmsLeft;
   delete[] maxRight;
   delete[] rmsRight;
   delete[] where;

   wxPaintEvent dummyEvt;
   this->OnPaint(dummyEvt);
}

// event handlers
void MixerTrackPanel::OnButton_Mute(wxCommandEvent& event)
{
   wxASSERT(mLeftTrack);
   //vvv Not handling shift-click as in TrackPanel. Tell parent to handle it?
   mLeftTrack->SetMute(mToggleButton_Mute->GetValue());
}

void MixerTrackPanel::OnButton_Solo(wxCommandEvent& event)
{
   wxASSERT(mLeftTrack);
   //vvv Not handling shift-click as in TrackPanel. Tell parent to handle it?
   mLeftTrack->SetSolo(mToggleButton_Solo->GetValue());
}

void MixerTrackPanel::OnSlider_Pan(wxCommandEvent& event)
{
   wxASSERT(mLeftTrack);
   float fValue = mSlider_Pan->Get();
   mLeftTrack->SetPan(fValue);
   if (mRightTrack != NULL)
      mRightTrack->SetPan(fValue);
   mProject->TP_PushState(_("Moved pan slider"), _("Pan"), true /* consolidate 
*/);
}

void MixerTrackPanel::OnSlider_Gain(wxCommandEvent& event)
{
   wxASSERT(mLeftTrack);

   // Analog to LWSlider::Set() calc for DB_SLIDER. Negate because wxSlider has 
min at top.
   // mSlider_Gain->GetValue() is in [-6,36]. wxSlider has min at top, so this 
is [-36dB,6dB]. 
   //vvv ASlider version:    mSlider_Gain->Get();
   float fValue = pow(10.0f, -(float)(mSlider_Gain->GetValue()) / 20.0f); 
   mLeftTrack->SetGain(fValue);
   if (mRightTrack != NULL)
      mRightTrack->SetGain(fValue);
   mProject->TP_PushState(_("Moved gain slider"), _("Gain"), true /* 
consolidate */);
}

void MixerTrackPanel::OnSliderScroll_Gain(wxScrollEvent& event)
{
   mSlider_Gain->SetToolTip(wxString::Format(_T("Gain=%ddB"), 
-mSlider_Gain->GetValue()));
}

void MixerTrackPanel::OnPaint(wxPaintEvent &evt)
{
   wxPaintDC dc(this);

   dc.BeginDrawing();

   wxRect bev = this->GetRect();
   bev.x = 0;
   bev.Inflate(-2, -2);
   AColor::Bevel(dc, true, bev);

   //wxASSERT(mLeftTrack);

   //vvv this->DrawTitleBar(&dc, bev);
   //vvv this->DrawMuteSolo(&dc, bev, mLeftTrack->GetMute(), false);  // mute 
button
   //vvv this->DrawMuteSolo(&dc, bev, mLeftTrack->GetSolo(), true);   // solo 
button
   //vvv this->DrawPan(&dc, bev);
   //vvv mSlider_Pan->OnPaint(dc, mLeftTrack->GetSelected());
   
   dc.EndDrawing();
}


// class MixerBoard

BEGIN_EVENT_TABLE(MixerBoard, wxFrame)
   EVT_CHAR(MixerBoard::OnKeyEvent)
   EVT_CLOSE(MixerBoard::OnCloseWindow)
END_EVENT_TABLE()

#define MIXER_TRACK_PANEL_MIN_WIDTH 40 //vvv
const wxSize gSize = wxSize(640, 440); // default

MixerBoard::MixerBoard(AudacityProject *parent):
  wxFrame(parent, -1, _("Audacity Mixer Board"), wxDefaultPosition,  gSize, 
            //vvv No resize for now.   wxDEFAULT_FRAME_STYLE | ((parent == 
NULL) ? 0x0 : wxFRAME_FLOAT_ON_PARENT))
            wxCAPTION | wxSYSTEM_MENU | wxFRAME_TOOL_WINDOW | ((parent == NULL) 
? 0x0 : wxFRAME_FLOAT_ON_PARENT))
{
   mProject = parent;
   mSize = gSize;
   mT = -1.0;

   //vvv Using wxFRAME_TOOL_WINDOW eliminates the icon and its menu.
   //   // loads either the XPM or the windows resource, depending on the 
platform
   //#if !defined(__WXMAC__) && !defined(__WXX11__)
   //   #ifdef __WXMSW__
   //      wxIcon ic(wxICON(AudacityLogo));
   //   #else
   //      wxIcon ic(wxICON(AudacityLogo48x48));
   //   #endif
   //   SetIcon(ic);
   //#endif
}

MixerBoard::~MixerBoard()
{}

void MixerBoard::Update(double t, bool bForce /* = false */)
{
   if ((t == mT) && !bForce)
      return;

   mT = t;

   TrackList* pTrackList = mProject->GetTracks();
   if (pTrackList->IsEmpty())
      return;

   int nMixerTrackPanelWidth = (mSize.GetX() - kInset) / (2 * kInset);
   if (nMixerTrackPanelWidth < MIXER_TRACK_PANEL_MIN_WIDTH) 
      nMixerTrackPanelWidth = MIXER_TRACK_PANEL_MIN_WIDTH;
   
   //vvv Need to reorder when track order changes. This just makes sure all are 
visible, 
   //    and relies (via count) on them staying in order.
   unsigned int count = 0;
   MixerTrackPanel* pMixerTrackPanel;
   Track* pLeftTrack;
   Track* pRightTrack;
   MixerTrackPanelHash::iterator iterHash;
   TrackListIterator iterTracks(pTrackList);

   pLeftTrack = iterTracks.First();
   while (pLeftTrack) {
      pRightTrack = NULL;
      if (pLeftTrack->GetLinked()) 
         pRightTrack = iterTracks.Next();

      if (pLeftTrack->GetKind() == Track::Wave) {
         iterHash = mMixerTrackPanels.find(pLeftTrack);
         if (iterHash != mMixerTrackPanels.end())
         {  // Found it.
            pMixerTrackPanel = &(*iterHash->second);
            pMixerTrackPanel->Update(t, bForce);
         }
         else
         {
            wxPoint panelPos(count * nMixerTrackPanelWidth, 0); // y should 
always be 0. 
            wxSize panelSize(nMixerTrackPanelWidth, gSize.GetY() - 22);

            pMixerTrackPanel = 
               new MixerTrackPanel(this, mProject, 
                                    (WaveTrack*)pLeftTrack, 
(WaveTrack*)pRightTrack, 
                                    panelPos, panelSize);
            if (pMixerTrackPanel)
               mMixerTrackPanels[(void*)pLeftTrack] = pMixerTrackPanel;
         }
         count++;
      }
      pLeftTrack = iterTracks.Next();
   }
}

// event handlers
void MixerBoard::OnKeyEvent(wxKeyEvent & event)
{
   GetActiveProject()->HandleKeyDown(event);
}

void MixerBoard::OnCloseWindow(wxCloseEvent & WXUNUSED(event))
{
  this->Hide();
}


Index: Menus.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Menus.cpp,v
retrieving revision 1.151.2.26.2.2
retrieving revision 1.151.2.26.2.3
diff -u -d -r1.151.2.26.2.2 -r1.151.2.26.2.3
--- Menus.cpp   27 Nov 2006 06:21:58 -0000      1.151.2.26.2.2
+++ Menus.cpp   2 Feb 2007 01:36:06 -0000       1.151.2.26.2.3
@@ -37,6 +37,7 @@
 #include "prefs/PrefsDialog.h"
 #include "HistoryWindow.h"
 #include "LyricsWindow.h"
+#include "MixerBoard.h"
 #include "Internat.h"
 #include "FileFormats.h"
 #include "FormatSelection.h"
@@ -364,7 +365,8 @@
    c->AddSeparator();
    c->AddItem("UndoHistory",    _("&History..."),               FN(OnHistory));
    c->AddSeparator();
-   c->AddItem("Lyrics",    _("&Lyrics..."),               FN(OnLyrics));
+   c->AddItem("Lyrics",         _("&Lyrics..."),                FN(OnLyrics));
+   c->AddItem("Mixer Board",    _("&Mixer Board..."),           
FN(OnMixerBoard));
    c->AddSeparator();
    c->AddItem("FloatControlTB", _("Float Control Toolbar"),          
FN(OnFloatControlToolBar));
    c->AddItem("FloatEditTB",    _("Float Edit Toolbar"),             
FN(OnFloatEditToolBar));
@@ -2591,6 +2593,17 @@
    }
 }
 
+void AudacityProject::OnMixerBoard()
+{
+   if (mMixerBoard)
+      mMixerBoard->Show(true);
+   else {
+      mMixerBoard = new MixerBoard(this);
+      wxASSERT(mMixerBoard);
+      mMixerBoard->Show(true);
+   }
+}
+
 //
 // Project Menu
 //

Index: TrackPanel.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/TrackPanel.cpp,v
retrieving revision 1.212.2.15.2.3
retrieving revision 1.212.2.15.2.4
diff -u -d -r1.212.2.15.2.3 -r1.212.2.15.2.4
--- TrackPanel.cpp      29 Nov 2006 03:30:28 -0000      1.212.2.15.2.3
+++ TrackPanel.cpp      2 Feb 2007 01:36:07 -0000       1.212.2.15.2.4
@@ -93,11 +93,13 @@
 
 #include "AColor.h"
 #include "AudioIO.h"
+#include "Branding.h"
 #include "ControlToolBar.h"
 #include "Envelope.h"
 #include "LabelTrack.h"
 #include "Lyrics.h"
 #include "LyricsWindow.h"
+#include "MixerBoard.h"
 #include "NoteTrack.h"
 #include "Track.h"
 #include "TrackArtist.h"
@@ -1175,13 +1177,18 @@
    wxCommandEvent dummyEvent;
    AudacityProject *p = (AudacityProject*)GetParent();
 
-   // Update lyrics display
    if (p->GetAudioIOToken()>0) {
+      // Update lyrics display 
       LyricsWindow* lyricsWindow = p->GetLyricsWindow();
       if (lyricsWindow) {
          Lyrics *lyrics = lyricsWindow->GetLyricsPanel();
          lyrics->Update(gAudioIO->GetStreamTime());
       }
+
+      // Update mixer board
+      MixerBoard* pMixerBoard = p->GetMixerBoard();
+      if (pMixerBoard) 
+         pMixerBoard->Update(gAudioIO->GetStreamTime());
    }
 
    // Each time the loop, check to see if we were playing or
@@ -4661,7 +4668,12 @@
    wxRect bev;
    GetTitleBarRect(r, bev);
    bev.Inflate(-1, -1);
-   { //vvv UmixIt
+   //vvv This doesn't work right when switching back and forth between two 
projects 
+   // when one is branded and the other is not, because for some reason, 
OnActivate 
+   // isn't always called, so gActiveProject isn't updated. 
+   AudacityProject* pProject = GetActiveProject();
+   Branding* pBranding = pProject->GetBranding();
+   if (pBranding && (pBranding->GetBrandColorScheme() == "UmixIt")) { //vvv 
UmixIt 
       dc->SetBrush(wxBrush(AColor::GetTrackColor((void*)t), wxSOLID)); 
       dc->DrawRectangle(bev);
    }

Index: Menus.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Menus.h,v
retrieving revision 1.53.2.4.2.1
retrieving revision 1.53.2.4.2.2
diff -u -d -r1.53.2.4.2.1 -r1.53.2.4.2.2
--- Menus.h     15 Nov 2006 22:32:36 -0000      1.53.2.4.2.1
+++ Menus.h     2 Feb 2007 01:36:07 -0000       1.53.2.4.2.2
@@ -149,6 +149,7 @@
 void OnFloatMeterToolBar();
 
 void OnLyrics();
+void OnMixerBoard();
 
         // Project Menu
 

Index: Project.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Project.cpp,v
retrieving revision 1.178.2.17.2.8
retrieving revision 1.178.2.17.2.9
diff -u -d -r1.178.2.17.2.8 -r1.178.2.17.2.9
--- Project.cpp 18 Dec 2006 05:26:23 -0000      1.178.2.17.2.8
+++ Project.cpp 2 Feb 2007 01:36:07 -0000       1.178.2.17.2.9
@@ -70,6 +70,7 @@
 #include "FreqWindow.h"
 #include "HistoryWindow.h"
 #include "LyricsWindow.h"
+#include "MixerBoard.h"
 #include "Internat.h"
 #include "import/Import.h"
 #include "LabelTrack.h"
@@ -381,6 +382,7 @@
      mActive(true),
      mHistoryWindow(NULL),
      mLyricsWindow(NULL),
+     mMixerBoard(NULL),
      mTotalToolBarHeight(0),
      mDraggingToolBar(NoneID),
      mAudioIOToken(-1),
@@ -542,6 +544,9 @@
 
    // MM: Give track panel the focus to ensure keyboard commands work
    mTrackPanel->SetFocus();
+   //vvvvv UmixIt mTrackPanel->Hide(); // This works okay except that each 
added track updates the 
+                                       // scroll bars. They probably shouldn't 
even be visible, i.e., 
+                                       // should be owned by the TrackPanel?
 
 #if defined __WXMAC__ 
    width++;
@@ -2487,6 +2492,7 @@
 
    UpdateMenus();
    UpdateLyrics();
+   UpdateMixerBoard();
 }
 
 void AudacityProject::PushState(wxString desc,
@@ -2508,6 +2514,7 @@
 
    UpdateMenus();
    UpdateLyrics();
+   UpdateMixerBoard();
 }
 
 void AudacityProject::ModifyState()
@@ -2518,6 +2525,7 @@
 
    delete l;
    UpdateLyrics();
+   UpdateMixerBoard();
 }
 
 void AudacityProject::PopState(TrackList * l)
@@ -2537,6 +2545,7 @@
 
    UpdateMenus();
    UpdateLyrics();
+   UpdateMixerBoard();
 }
 
 void AudacityProject::SetStateTo(unsigned int n)
@@ -2549,6 +2558,7 @@
    mTrackPanel->Refresh(false);
    ModifyUndoMenus();
    UpdateLyrics();
+   UpdateMixerBoard();
 }
 
 void AudacityProject::UpdateLyrics()
@@ -2584,6 +2594,21 @@
    lyrics->Update(0.0);
 }
 
+void AudacityProject::UpdateMixerBoard()
+{
+   if (mTracks->IsEmpty())
+      return;
+
+   if (mMixerBoard == NULL) {
+      mMixerBoard = new MixerBoard(this);
+      wxASSERT(mMixerBoard);
+      mMixerBoard->Show(true);
+   }
+
+   wxASSERT(gAudioIO);
+   mMixerBoard->Update(gAudioIO->GetStreamTime()); 
+}
+
 //
 // Clipboard methods
 //

Index: MeterToolBar.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Attic/MeterToolBar.cpp,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.6.2.1
diff -u -d -r1.1.2.6 -r1.1.2.6.2.1
--- MeterToolBar.cpp    12 Sep 2005 01:00:45 -0000      1.1.2.6
+++ MeterToolBar.cpp    2 Feb 2007 01:36:07 -0000       1.1.2.6.2.1
@@ -55,10 +55,10 @@
    mTitle = _("Audacity Meter Toolbar");
    mType = MeterToolBarID;
 
-   mPlayMeter = new Meter(this, -1, false,
+   mPlayMeter = new Meter(this, -1, false, Meter::HorizontalStereo, 
                           wxPoint(0, 0),
                           wxSize(97, 55));
-   mRecordMeter = new Meter(this, -1, true,
+   mRecordMeter = new Meter(this, -1, true, Meter::HorizontalStereo, 
                             wxPoint(98, 0),
                             wxSize(97, 55));
 


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to