Update of /cvsroot/audacity/audacity-src/src
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv32265/src
Modified Files:
Tag: Audacity_UmixIt
MixerBoard.cpp MixerBoard.h
Log Message:
musical instrument icons for mixer board track clusters
Index: MixerBoard.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Attic/MixerBoard.cpp,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -d -r1.1.2.2 -r1.1.2.3
--- MixerBoard.cpp 10 Feb 2007 04:06:52 -0000 1.1.2.2
+++ MixerBoard.cpp 14 Feb 2007 09:46:11 -0000 1.1.2.3
@@ -11,6 +11,7 @@
#include <math.h>
#include <wx/dcmemory.h>
+#include <wx/arrimpl.cpp>
#include <wx/settings.h> // for wxSystemSettings::GetSystemColour
#include <wx/sizer.h>
@@ -24,11 +25,16 @@
// class MixerTrackCluster
#define kInset 4
+#define kDoubleInset (2 * kInset)
+#define kQuadrupleInset (4 * kInset)
+
#define TITLE_BAR_HEIGHT 18
#define MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH 48
#define MUTE_SOLO_HEIGHT 16
#define PAN_HEIGHT 24
+const int kGainSliderMin = -6, kGainSliderMax = 36; // wxSlider has min at
top, so this is [-36dB,6dB].
+
enum {
ID_TOGGLEBUTTON_MUTE = 13000,
ID_TOGGLEBUTTON_SOLO,
@@ -37,19 +43,18 @@
};
BEGIN_EVENT_TABLE(MixerTrackCluster, wxPanel)
+ EVT_CHAR(MixerTrackCluster::OnKeyEvent)
+ EVT_PAINT(MixerTrackCluster::OnPaint)
+
EVT_COMMAND(ID_TOGGLEBUTTON_MUTE, wxEVT_COMMAND_BUTTON_CLICKED,
MixerTrackCluster::OnButton_Mute)
EVT_COMMAND(ID_TOGGLEBUTTON_SOLO, wxEVT_COMMAND_BUTTON_CLICKED,
MixerTrackCluster::OnButton_Solo)
EVT_SLIDER(ID_ASLIDER_PAN, MixerTrackCluster::OnSlider_Pan)
EVT_SLIDER(ID_SLIDER_GAIN, MixerTrackCluster::OnSlider_Gain)
EVT_COMMAND_SCROLL(ID_SLIDER_GAIN, MixerTrackCluster::OnSliderScroll_Gain)
-
- EVT_PAINT(MixerTrackCluster::OnPaint)
END_EVENT_TABLE()
IMPLEMENT_CLASS(MixerTrackCluster, wxPanel)
-const int kSliderMin = -6, kSliderMax = 36; // wxSlider has min at top, so
this is [-36dB,6dB].
-
MixerTrackCluster::MixerTrackCluster(wxScrolledWindow* parent,
MixerBoard* grandParent,
AudacityProject* project,
WaveTrack* pLeftTrack, WaveTrack*
pRightTrack /*= NULL*/,
@@ -72,29 +77,30 @@
// track name
wxPoint ctrlPos(kInset, kInset);
- wxSize ctrlSize(size.GetWidth() - (2 * kInset), TITLE_BAR_HEIGHT);
+ wxSize ctrlSize(size.GetWidth() - kDoubleInset, TITLE_BAR_HEIGHT);
mStaticText_TrackName =
new wxStaticText(this, -1, mLeftTrack->GetName(), ctrlPos, ctrlSize,
wxALIGN_CENTRE | wxST_NO_AUTORESIZE | wxSUNKEN_BORDER);
mStaticText_TrackName->SetBackgroundColour(trackColor);
- pBoxSizer_MixerTrackCluster->Add(mStaticText_TrackName, 0, wxALIGN_CENTER |
wxALL, (2 * kInset));
+ pBoxSizer_MixerTrackCluster->Add(mStaticText_TrackName, 0, wxALIGN_CENTER |
wxALL, kDoubleInset);
// musical instrument image
ctrlPos.x = (size.GetWidth() - MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH) / 2; //
center
- ctrlPos.y += TITLE_BAR_HEIGHT + (2 * kInset);
+ ctrlPos.y += TITLE_BAR_HEIGHT + kDoubleInset;
ctrlSize = wxSize(MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH,
MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH);
wxBitmap* bitmap = mMixerBoard->GetMusicalInstrumentBitmap(mLeftTrack);
wxASSERT(bitmap);
mStaticBitmap_MusicalInstrument =
new wxStaticBitmap(this, -1, *bitmap, ctrlPos, ctrlSize,
wxSUNKEN_BORDER);
- pBoxSizer_MixerTrackCluster->Add(mStaticBitmap_MusicalInstrument, 0,
wxALIGN_CENTER | wxALL, (2 * kInset));
+ pBoxSizer_MixerTrackCluster->Add(mStaticBitmap_MusicalInstrument, 0,
wxALIGN_CENTER | wxALL, kDoubleInset);
// mute/solo buttons
- ctrlPos.x = (size.GetWidth() / 8) + kInset;
- ctrlPos.y += MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + (4 * kInset);
- ctrlSize = wxSize(MUTE_SOLO_HEIGHT, MUTE_SOLO_HEIGHT);
+ int nHalfWidth = (size.GetWidth() / 2);
+ ctrlPos.x = ((nHalfWidth - mMixerBoard->mMuteSoloWidth) / 2) + kInset;
+ ctrlPos.y += MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH + kQuadrupleInset;
+ ctrlSize = wxSize(mMixerBoard->mMuteSoloWidth, MUTE_SOLO_HEIGHT);
mToggleButton_Mute =
new AButton(this, ID_TOGGLEBUTTON_MUTE,
ctrlPos, ctrlSize,
@@ -105,7 +111,7 @@
mMixerBoard->mImageMuteUp, mMixerBoard->mImageMuteOver,
mMixerBoard->mImageMuteDownWhileSolo, mMixerBoard->mImageMuteDisabled);
- ctrlPos.x = size.GetWidth() * 5 / 8;
+ ctrlPos.x = nHalfWidth + kInset;
mToggleButton_Solo =
new AButton(this, ID_TOGGLEBUTTON_SOLO,
ctrlPos, ctrlSize,
@@ -115,40 +121,40 @@
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(kDoubleInset, 0, 0); // horizontal spacer
pBoxSizer_MuteSolo->Add(mToggleButton_Solo, 0, wxALIGN_CENTER | wxALL,
kInset);
- pBoxSizer_MixerTrackCluster->Add(pBoxSizer_MuteSolo, 0, wxALIGN_CENTER |
wxALL, (2 * kInset));
+ pBoxSizer_MixerTrackCluster->Add(pBoxSizer_MuteSolo, 0, wxALIGN_CENTER |
wxALL, kDoubleInset);
// pan slider
ctrlPos.x = (size.GetWidth() / 10);
- ctrlPos.y += MUTE_SOLO_HEIGHT + (4 * kInset);
+ ctrlPos.y += MUTE_SOLO_HEIGHT + kQuadrupleInset;
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_MixerTrackCluster->Add(mSlider_Pan, 0, wxALIGN_CENTER | wxALL, (2
* kInset));
+ pBoxSizer_MixerTrackCluster->Add(mSlider_Pan, 0, wxALIGN_CENTER | wxALL,
kDoubleInset);
// gain slider & level meter
- ctrlPos.x = (2 * kInset);
- ctrlPos.y += PAN_HEIGHT + (4 * kInset);
+ ctrlPos.x = kDoubleInset;
+ ctrlPos.y += PAN_HEIGHT + kQuadrupleInset;
ctrlSize = wxSize((size.GetWidth() / 3),
- (size.GetHeight() - ctrlPos.y - (4 * kInset)));
+ (size.GetHeight() - ctrlPos.y - kQuadrupleInset));
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, // wxWindow* parent, wxWindowID id,
this->GetGainToSliderValue(), // int value,
- kSliderMin, kSliderMax, // int minValue, int maxValue,
+ kGainSliderMin, kGainSliderMax, // int minValue, int
maxValue,
ctrlPos, ctrlSize, // const wxPoint& point =
wxDefaultPosition, const wxSize& size = wxDefaultSize,
wxSL_VERTICAL | wxSL_AUTOTICKS | wxSUNKEN_BORDER); //
long style = wxSL_HORIZONTAL, ...
- //vvv mSlider_Gain->SetBackgroundColour(trackColor);
- //vvv
mSlider_Gain->SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW));
+ // too much color: mSlider_Gain->SetBackgroundColour(trackColor);
+ // too dark:
mSlider_Gain->SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW));
mSlider_Gain->SetBackgroundColour(wxColour(192, 192, 192));
ctrlPos.x += ctrlSize.GetWidth() + kInset;
- ctrlSize = wxSize(((size.GetWidth() / 2) - kInset), ctrlSize.GetHeight());
+ ctrlSize = wxSize((nHalfWidth - kInset), ctrlSize.GetHeight());
mMeter = new Meter(this, -1, false, Meter::MixerTrackCluster, ctrlPos,
ctrlSize, trackColor);
mMeter->HandleLayout();
//this->ResetMeter();
@@ -156,7 +162,7 @@
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_MixerTrackCluster->Add(pBoxSizer_GainAndMeter, 0, wxALIGN_CENTER
| wxALL, (2 * kInset));
+ pBoxSizer_MixerTrackCluster->Add(pBoxSizer_GainAndMeter, 0, wxALIGN_CENTER
| wxALL, kDoubleInset);
#if wxUSE_TOOLTIPS
@@ -186,6 +192,7 @@
void MixerTrackCluster::UpdateName()
{
mStaticText_TrackName->SetLabel(mLeftTrack->GetName());
+
mStaticBitmap_MusicalInstrument->SetBitmap(*(mMixerBoard->GetMusicalInstrumentBitmap(mLeftTrack)));
}
void MixerTrackCluster::UpdateMute()
@@ -204,7 +211,6 @@
mToggleButton_Solo->PushDown();
else
mToggleButton_Solo->PopUp();
- mMixerBoard->IncrementSoloCount(bValue ? 1 : -1);
mToggleButton_Mute->SetAlternate(bValue);
}
@@ -268,10 +274,10 @@
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;
+ if (nSliderValue < kGainSliderMin)
+ nSliderValue = kGainSliderMin;
+ if (nSliderValue > kGainSliderMax)
+ nSliderValue = kGainSliderMax;
return nSliderValue;
}
@@ -287,6 +293,25 @@
}
// event handlers
+void MixerTrackCluster::OnKeyEvent(wxKeyEvent & event)
+{
+ mProject->HandleKeyDown(event);
+}
+
+void MixerTrackCluster::OnPaint(wxPaintEvent &evt)
+{
+ wxPaintDC dc(this);
+
+ dc.BeginDrawing();
+
+ wxRect bev = this->GetRect();
+ bev.x = 0;
+ bev.Inflate(-2, -2);
+ AColor::Bevel(dc, true, bev);
+
+ dc.EndDrawing();
+}
+
void MixerTrackCluster::OnButton_Mute(wxCommandEvent& event)
{
// Shift-click mutes this track and unmutes other tracks. Tell mMixerBoard
to handle it.
@@ -357,35 +382,55 @@
void MixerTrackCluster::OnSliderScroll_Gain(wxScrollEvent& event)
{
- mSlider_Gain->SetToolTip(wxString::Format(_T("Gain=%ddB"),
-mSlider_Gain->GetValue()));
+ int gainValue = -mSlider_Gain->GetValue();
+ wxString str = _T("Gain: ");
+ if (gainValue > 0)
+ str += "+";
+ str += wxString::Format("%d dB", gainValue);
+ mSlider_Gain->SetToolTip(str);
}
-void MixerTrackCluster::OnPaint(wxPaintEvent &evt)
-{
- wxPaintDC dc(this);
- dc.BeginDrawing();
+// class MusicalInstrument
- wxRect bev = this->GetRect();
- bev.x = 0;
- bev.Inflate(-2, -2);
- AColor::Bevel(dc, true, bev);
+MusicalInstrument::MusicalInstrument(wxBitmap* pBitmap, const wxString
strXPMfilename)
+{
+ mBitmap = pBitmap;
- dc.EndDrawing();
+ size_t nFirstCharIndex = 0;
+ int nUnderscoreIndex;
+ wxString strFilename = strXPMfilename;
+ strFilename.MakeLower(); // Make sure, so we don't have to do case
insensitive comparison.
+ wxString strKeyword;
+ while ((nUnderscoreIndex = strFilename.Find(wxT('_'))) != -1)
+ {
+ strKeyword = strFilename.Left(nUnderscoreIndex);
+ mKeywords.Add(strKeyword);
+ strFilename = strFilename.Mid(nUnderscoreIndex + 1);
+ }
+ if (!strFilename.IsEmpty()) // Skip trailing underscores.
+ mKeywords.Add(strFilename); // Add the last one.
+}
+
+MusicalInstrument::~MusicalInstrument()
+{
+ delete mBitmap;
+ mKeywords.Clear();
}
+WX_DEFINE_OBJARRAY(MusicalInstrumentArray);
+
// class MixerBoard
+#define MIXER_TRACK_PANEL_MIN_WIDTH 96
+#define DEFAULT_NUM_TRACKCLUSTERS 8 // Default to fitting 8 tracks.
+const wxSize kDefaultSize = wxSize((DEFAULT_NUM_TRACKCLUSTERS *
MIXER_TRACK_PANEL_MIN_WIDTH) + kDoubleInset, 480);
+
BEGIN_EVENT_TABLE(MixerBoard, wxFrame)
- EVT_CHAR(MixerBoard::OnKeyEvent)
EVT_CLOSE(MixerBoard::OnCloseWindow)
END_EVENT_TABLE()
-#define MIXER_TRACK_PANEL_MIN_WIDTH 96
-#define DEFAULT_NUM_TRACKCLUSTERS 8 // Default to fitting 8 tracks.
-const wxSize kDefaultSize = wxSize((DEFAULT_NUM_TRACKCLUSTERS *
MIXER_TRACK_PANEL_MIN_WIDTH) + (2 * kInset), 480);
-
MixerBoard::MixerBoard(AudacityProject* parent):
wxFrame(parent, -1, _("Audacity Mixer Board - ") + parent->GetName(),
wxDefaultPosition, kDefaultSize,
@@ -408,13 +453,7 @@
// private data members
mMixerTrackClusterWidth = MIXER_TRACK_PANEL_MIN_WIDTH;
-
- mMusicalInstrumentBitmaps = new wxBitmap((const char**)grand_xpm);
- wxMemoryDC dc;
- dc.SelectObject(*mMusicalInstrumentBitmaps);
- wxRect bev(0, 0, MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH - 1,
MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH - 1);
- AColor::Bevel(dc, false, bev);
-
+ this->LoadMusicalInstruments(); // Set up mMusicalInstruments.
mProject = parent;
mScrolledWindow =
@@ -428,11 +467,12 @@
// this->GetClientSize().GetWidth()
// but that gives no horizontal scrollbar, so then added track chops off
bottom of
// existing MixerTrackClusters. So, until they know how to resize, always
start with a horizontal scroll bar.
- mScrolledWindow->SetVirtualSize(this->GetClientSize().GetWidth() + (4 *
kInset),
+ mScrolledWindow->SetVirtualSize(this->GetClientSize().GetWidth() +
kQuadrupleInset,
this->GetClientSize().GetHeight());
mSoloCount = 0;
mT = -1.0;
+ mTracks = mProject->GetTracks();
// loads either the XPM or the windows resource, depending on the platform
#if !defined(__WXMAC__) && !defined(__WXX11__)
@@ -459,7 +499,7 @@
delete mImageSoloDisabled;
// private data members
- delete mMusicalInstrumentBitmaps; //vvvvv Will become some storage for
several.
+ mMusicalInstruments.Clear();
}
void MixerBoard::AddTrackClusters() // Add clusters for any tracks we're not
yet showing.
@@ -467,8 +507,8 @@
//vvv Need to reorder when track order changes. This just makes sure all
are visible,
// and relies on them staying in order.
- TrackList* pTrackList = mProject->GetTracks();
- if (pTrackList->IsEmpty())
+ wxASSERT(mTracks);
+ if (mTracks->IsEmpty())
return;
if (mImageMuteUp == NULL)
@@ -477,7 +517,7 @@
const int kClusterHeight = mScrolledWindow->GetClientSize().GetHeight();
unsigned int count = mMixerTrackClusters.size();
MixerTrackClusterHash::iterator iterHash;
- TrackListIterator iterTracks(pTrackList);
+ TrackListIterator iterTracks(mTracks);
MixerTrackCluster* pMixerTrackCluster = NULL;
Track* pLeftTrack;
Track* pRightTrack;
@@ -524,7 +564,40 @@
wxBitmap* MixerBoard::GetMusicalInstrumentBitmap(const WaveTrack* pLeftTrack)
{
- return mMusicalInstrumentBitmaps; //vvvvv Will become some storage for
several.
+ if (mMusicalInstruments.IsEmpty())
+ return NULL;
+
+ // random choice: return mMusicalInstruments[(int)pLeftTrack %
mMusicalInstruments.GetCount()].mBitmap;
+
+ const wxString strTrackName(pLeftTrack->GetName().MakeLower());
+ size_t nBestItemIndex = 0;
+ unsigned int nBestScore = 0;
+ unsigned int nInstrIndex = 0;
+ unsigned int nKeywordIndex;
+ unsigned int nNumKeywords;
+ unsigned int nPointsPerMatch;
+ unsigned int nScore;
+ for (nInstrIndex = 0; nInstrIndex < mMusicalInstruments.GetCount();
nInstrIndex++)
+ {
+ nNumKeywords = mMusicalInstruments[nInstrIndex].mKeywords.GetCount();
+ if (nNumKeywords > 0)
+ {
+ nPointsPerMatch = 10 / nNumKeywords;
+ nScore = 0;
+ for (nKeywordIndex = 0; nKeywordIndex < nNumKeywords; nKeywordIndex++)
+ if
(strTrackName.Contains(mMusicalInstruments[nInstrIndex].mKeywords[nKeywordIndex]))
+ nScore +=
+ nPointsPerMatch +
+ // Longer keywords get more points.
+ (2 *
mMusicalInstruments[nInstrIndex].mKeywords[nKeywordIndex].Length());
+ if (nScore > nBestScore)
+ {
+ nBestScore = nScore;
+ nBestItemIndex = nInstrIndex;
+ }
+ }
+ }
+ return mMusicalInstruments[nBestItemIndex].mBitmap;
}
bool MixerBoard::HasSolo()
@@ -550,9 +623,8 @@
void MixerBoard::UniquelyMuteOrSolo(const WaveTrack* pTargetLeftTrack, bool
bSolo)
{
- TrackList* pTrackList = mProject->GetTracks();
- wxASSERT(pTrackList && !pTrackList->IsEmpty());
- TrackListIterator iterTracks(pTrackList);
+ wxASSERT(mTracks && !mTracks->IsEmpty());
+ TrackListIterator iterTracks(mTracks);
Track* pLeftTrack = iterTracks.First();
while (pLeftTrack) {
if (pLeftTrack->GetKind() == Track::Wave) {
@@ -567,7 +639,10 @@
}
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 buttons.
@@ -612,11 +687,24 @@
MixerTrackCluster* pMixerTrackCluster;
if (pLeftTrack == NULL)
{
+ // Update all the MixerTrackClusters.
for (iterHash = mMixerTrackClusters.begin(); iterHash !=
mMixerTrackClusters.end(); ++iterHash)
{
pMixerTrackCluster = &(*iterHash->second);
pMixerTrackCluster->UpdateSolo();
}
+
+ // Update mSoloCount.
+ mSoloCount = 0;
+ TrackListIterator iterTracks(mTracks);
+ Track* pLeftTrack = iterTracks.First();
+ while (pLeftTrack) {
+ if (pLeftTrack->GetKind() == Track::Wave)
+ this->IncrementSoloCount((int)(pLeftTrack->GetSolo()));
+ if (pLeftTrack->GetLinked())
+ pLeftTrack = iterTracks.Next();
+ pLeftTrack = iterTracks.Next();
+ }
}
else
{
@@ -669,20 +757,21 @@
void MixerBoard::CreateMuteSoloImages()
{
// Much of this is taken TrackLabel::DrawMuteSolo
- wxBitmap bitmap(MUTE_SOLO_HEIGHT, MUTE_SOLO_HEIGHT);
wxMemoryDC dc;
- dc.SelectObject(bitmap);
+ wxString str = _("Mute");
+ long textWidth, textHeight;
+ AColor::SetLabelFont(dc);
+ dc.GetTextExtent(str, &textWidth, &textHeight);
+ mMuteSoloWidth = textWidth + (3 * kInset);
- wxRect bev(0, 0, MUTE_SOLO_HEIGHT - 1, MUTE_SOLO_HEIGHT - 1);
+ wxBitmap bitmap(mMuteSoloWidth, MUTE_SOLO_HEIGHT);
+ dc.SelectObject(bitmap);
+ wxRect bev(0, 0, mMuteSoloWidth - 1, MUTE_SOLO_HEIGHT - 1);
// mute button images
AColor::Mute(&dc, false, true, false);
dc.DrawRectangle(bev);
- wxString str = _("M"); /* i18n-hint: One-letter abbreviation for "Mute" */
- long textWidth, textHeight;
- AColor::SetLabelFont(dc);
- dc.GetTextExtent(str, &textWidth, &textHeight);
wxCoord x = bev.x + (bev.width - textWidth) / 2;
wxCoord y = bev.y + (bev.height - textHeight) / 2;
dc.DrawText(str, x, y);
@@ -704,14 +793,14 @@
AColor::Bevel(dc, false, bev);
mImageMuteDownWhileSolo = new wxImage(bitmap.ConvertToImage());
- mImageMuteDisabled = new wxImage(MUTE_SOLO_HEIGHT, MUTE_SOLO_HEIGHT); //
Leave empty because unused.
+ mImageMuteDisabled = new wxImage(mMuteSoloWidth, MUTE_SOLO_HEIGHT); //
Leave empty because unused.
// solo button images
AColor::Solo(&dc, false, true);
dc.DrawRectangle(bev);
- str = _("S"); /* i18n-hint: One-letter abbreviation for "Solo" */
+ str = _("Solo");
dc.GetTextExtent(str, &textWidth, &textHeight);
x = bev.x + (bev.width - textWidth) / 2;
y = bev.y + (bev.height - textHeight) / 2;
@@ -728,15 +817,132 @@
AColor::Bevel(dc, false, bev);
mImageSoloDown = new wxImage(bitmap.ConvertToImage());
- mImageSoloDisabled = new wxImage(MUTE_SOLO_HEIGHT, MUTE_SOLO_HEIGHT); //
Leave empty because unused.
+ mImageSoloDisabled = new wxImage(mMuteSoloWidth, MUTE_SOLO_HEIGHT); //
Leave empty because unused.
}
-// event handlers
-void MixerBoard::OnKeyEvent(wxKeyEvent & event)
+void MixerBoard::LoadMusicalInstruments()
{
- GetActiveProject()->HandleKeyDown(event);
+ wxRect bev(1, 1, MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH - 2,
MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH - 2);
+ wxBitmap* bitmap;
+ wxMemoryDC dc;
+ MusicalInstrument* pMusicalInstrument;
+
+ bitmap = new wxBitmap((const char**)acoustic_guitar_gtr_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap,
wxT("acoustic_guitar_gtr"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)acoustic_piano_pno_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap,
wxT("acoustic_piano_pno"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)clap_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("clap"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)drums_dr_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("drums_dr"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)electric_bass_guitar_el_bs_gtr_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap,
wxT("electric_bass_guitar_el_bs_gtr"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)electric_guitar_el_gtr_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap,
wxT("electric_guitar_el_gtr"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)electric_piano_el_pno_key_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap,
wxT("electric_piano_el_pno_key"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)kick_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("kick"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)loop_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("loop"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)perc_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("perc"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)sax_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("sax"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)string_violin_cello_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap,
wxT("string_violin_cello"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)snare_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("snare"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)synth_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("synth"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)tambo_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("tambo"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)trumpet_tr_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("trumpet_tr"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)turntable_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("turntable"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)vibraphone_vibes_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("vibraphone_vibes"));
+ mMusicalInstruments.Add(pMusicalInstrument);
+
+ bitmap = new wxBitmap((const char**)vocal_vox_xpm);
+ dc.SelectObject(*bitmap);
+ AColor::Bevel(dc, false, bev);
+ pMusicalInstrument = new MusicalInstrument(bitmap, wxT("vocal_vocals_vox"));
+ mMusicalInstruments.Add(pMusicalInstrument);
}
+// event handlers
void MixerBoard::OnCloseWindow(wxCloseEvent & WXUNUSED(event))
{
this->Hide();
Index: MixerBoard.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Attic/MixerBoard.h,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -d -r1.1.2.2 -r1.1.2.3
--- MixerBoard.h 10 Feb 2007 04:06:52 -0000 1.1.2.2
+++ MixerBoard.h 14 Feb 2007 09:46:11 -0000 1.1.2.3
@@ -53,14 +53,15 @@
wxColour GetTrackColor();
// event handlers
+ void OnKeyEvent(wxKeyEvent & event);
+ void OnPaint(wxPaintEvent &evt);
+
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;
@@ -81,8 +82,21 @@
DECLARE_EVENT_TABLE()
};
+
+class TrackList;
+
WX_DECLARE_VOIDPTR_HASH_MAP(MixerTrackCluster*, MixerTrackClusterHash);
+class MusicalInstrument {
+public:
+ MusicalInstrument(wxBitmap* pBitmap, const wxString strXPMfilename);
+ ~MusicalInstrument();
+
+ wxBitmap* mBitmap;
+ wxArrayString mKeywords;
+};
+WX_DECLARE_OBJARRAY(MusicalInstrument, MusicalInstrumentArray);
+
class MixerBoard : public wxFrame {
public:
MixerBoard(AudacityProject* parent);
@@ -110,10 +124,10 @@
private:
void CreateMuteSoloImages();
+ void LoadMusicalInstruments();
// event handlers
void OnCloseWindow(wxCloseEvent & WXUNUSED(event));
- void OnKeyEvent(wxKeyEvent & event);
public:
// mute & solo button images: Create once and store on MixerBoard for use
in all MixerTrackClusters.
@@ -127,14 +141,17 @@
wxImage* mImageSoloDown;
wxImage* mImageSoloDisabled;
+ int mMuteSoloWidth;
+
private:
- MixerTrackClusterHash mMixerTrackClusters; // Hash the panels based on
the left WaveTrack* they're showing.
+ MixerTrackClusterHash mMixerTrackClusters; // Hash clusters based on the
left WaveTrack* they're showing.
int mMixerTrackClusterWidth;
- wxBitmap* mMusicalInstrumentBitmaps; //vvvvv Will become some
storage for several.
+ MusicalInstrumentArray mMusicalInstruments;
AudacityProject* mProject;
wxScrolledWindow* mScrolledWindow; // Holds the MixerTrackClusters
and handles scrolling.
unsigned int mSoloCount;
double mT;
+ TrackList* mTracks;
public:
DECLARE_EVENT_TABLE()
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs