Index: src/Experimental.h =================================================================== --- src/Experimental.h (revision 13513) +++ src/Experimental.h (working copy) @@ -182,4 +182,7 @@ // Define to include the effects rack (such as it is). #define EXPERIMENTAL_EFFECTS_RACK +//Define to control the display of label counts +#define EXPERIMENTAL_LABEL_TRACKINFOPANEL + #endif Index: src/LabelTrack.cpp =================================================================== --- src/LabelTrack.cpp (revision 13513) +++ src/LabelTrack.cpp (working copy) @@ -2804,3 +2804,21 @@ return retVal; } + +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL +int LabelTrack::GetNumberOfLabelsOfKind(LabelKinds pKind) { + int labelsOfKind = 0; + int numberOfLabels = GetNumLabels(); + if (GetNumLabels() > 0) { + for (int i = 0; i < numberOfLabels; i++) { + const LabelStruct * label = GetLabel(i); + bool itIsBeforeZero = false; + bool itIsAPoint = label->ItIsAPointLabel(itIsBeforeZero); + if (itIsAPoint && (pKind == POINT_LABEL)) labelsOfKind++; + else if (!itIsAPoint && (pKind == REGION_LABEL)) labelsOfKind++; + else if ((pKind == LABEL_BEFORE_ZERO) && itIsBeforeZero) labelsOfKind++; + } + } + return labelsOfKind; +} +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL Index: src/LabelTrack.h =================================================================== --- src/LabelTrack.h (revision 13513) +++ src/LabelTrack.h (working copy) @@ -95,6 +95,14 @@ bool highlighted; /// if the text is highlighted bool changeInitialMouseXPos; /// flag to change initial mouse X pos bool updated; /// flag to tell if the label times were updated +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + // Is this too much to put inline? + bool ItIsAPointLabel(bool & pBeforeZero) const { + if ((getT0() < 0) || (getT1() < 0)) pBeforeZero = true; + if (getT0() == getT1()) return true; + return false; + }; +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL }; //You can't stick AUDACITY_DLL_API in front of the WX_DEFINE_ARRAY() macro, you @@ -269,6 +277,16 @@ bool mbIsMoving; static wxFont msFont; +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL +public: + enum LabelKinds { + POINT_LABEL, + REGION_LABEL, + LABEL_BEFORE_ZERO + }; + wxFont GetFont() { return msFont; }; + int GetNumberOfLabelsOfKind(LabelKinds pKind); +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL }; #endif Index: src/TrackPanel.cpp =================================================================== --- src/TrackPanel.cpp (revision 13513) +++ src/TrackPanel.cpp (working copy) @@ -312,6 +312,11 @@ OnSplitStereoMonoID, OnMergeStereoID, OnSwapChannelsID, +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + OnDisplayPointLabelCountID, + OnDisplayRegionLabelCountID, + OnDisplayPreZeroLabelCountID, +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL OnSetTimeTrackRangeID, OnCutSelectedTextID, @@ -353,6 +358,11 @@ EVT_MENU(OnSplitStereoID, TrackPanel::OnSplitStereo) EVT_MENU(OnSplitStereoMonoID, TrackPanel::OnSplitStereoMono) EVT_MENU(OnMergeStereoID, TrackPanel::OnMergeStereo) +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + EVT_MENU(OnDisplayPointLabelCountID, TrackPanel::OnDisplayPointLabelCount) + EVT_MENU(OnDisplayRegionLabelCountID, TrackPanel::OnDisplayRegionLabelCount) + EVT_MENU(OnDisplayPreZeroLabelCountID, TrackPanel::OnDisplayPreZeroLabelCount) +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL EVT_MENU(OnCutSelectedTextID, TrackPanel::OnCutSelectedText) EVT_MENU(OnCopySelectedTextID, TrackPanel::OnCopySelectedText) @@ -446,25 +456,34 @@ #pragma warning( disable: 4355 ) #endif TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id, - const wxPoint & pos, - const wxSize & size, - TrackList * tracks, - ViewInfo * viewInfo, - TrackPanelListener * listener, - AdornedRulerPanel * ruler) + const wxPoint & pos, + const wxSize & size, + TrackList * tracks, + ViewInfo * viewInfo, + TrackPanelListener * listener, + AdornedRulerPanel * ruler) : wxPanel(parent, id, pos, size, wxWANTS_CHARS | wxNO_BORDER), - mTrackInfo(this), - mListener(listener), - mTracks(tracks), - mViewInfo(viewInfo), - mRuler(ruler), - mTrackArtist(NULL), - mBacking(NULL), - mRefreshBacking(false), - mConverter(), - mAutoScrolling(false), - mVertScrollRemainder(0), - vrulerSize(36,0) + mTrackInfo(this), + mListener(listener), + mTracks(tracks), + mViewInfo(viewInfo), + mRuler(ruler), + mTrackArtist(NULL), + mBacking(NULL), + mRefreshBacking(false), + mConverter(), + mAutoScrolling(false), + mVertScrollRemainder(0), + vrulerSize(36, 0) +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + , + mbDisplayPointLabelCount(false), + mbDisplayRegionLabelCount(false), + mbDisplayPreZeroLabelCount(false), + mDisplayPointLabelCountMenuItem(NULL), + mDisplayRegionLabelCountMenuItem(NULL), + mDisplayPreZeroLabelCountMenuItem(NULL) +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL #ifndef __WXGTK__ //Get rid if this pragma for gtk #pragma warning( default: 4355 ) #endif @@ -675,7 +694,6 @@ mWaveTrackMenu->Append(0, _("Set Sample &Format"), mFormatMenu); mWaveTrackMenu->AppendSeparator(); mWaveTrackMenu->Append(0, _("Set Rat&e"), mRateMenu); - /* build the pop-down menu used on note (MIDI) tracks */ mNoteTrackMenu = new wxMenu(); BuildCommonDropMenuItems(mNoteTrackMenu); // does name, up/down etc @@ -686,6 +704,22 @@ mLabelTrackMenu = new wxMenu(); BuildCommonDropMenuItems(mLabelTrackMenu); // does name, up/down etc mLabelTrackMenu->Append(OnSetFontID, _("&Font...")); +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + mLabelTrackMenu->AppendSeparator(); + bool displayPoints, displayRegions, displayPreZeros; + gPrefs->Read(wxT("/GUI/DisplayPointLabelCount"), &displayPoints, true); + gPrefs->Read(wxT("/GUI/DisplayRegionLabelCount"), &displayRegions, true); + gPrefs->Read(wxT("/GUI/DisplayPreZeroLabelCount"), &displayPreZeros, true); + mDisplayPointLabelCountMenuItem = mLabelTrackMenu->AppendCheckItem(OnDisplayPointLabelCountID, _("Display Point Label Count")); + if (displayPoints) + mDisplayPointLabelCountMenuItem->Check(); + mDisplayRegionLabelCountMenuItem = mLabelTrackMenu->AppendCheckItem(OnDisplayRegionLabelCountID, _("Display Region Label Count")); + if (displayRegions) + mDisplayRegionLabelCountMenuItem->Check(); + mDisplayPreZeroLabelCountMenuItem = mLabelTrackMenu->AppendCheckItem(OnDisplayPreZeroLabelCountID, _("Display Before Zero Label Count")); + if (displayPreZeros) + mDisplayPreZeroLabelCountMenuItem->Check(); +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL /* build the pop-down menu used on time warping tracks */ mTimeTrackMenu = new wxMenu(); @@ -7806,6 +7840,11 @@ theMenu->Enable(OnMoveDownID, mTracks->CanMoveDown(t)); theMenu->Enable(OnMoveTopID, mTracks->CanMoveUp(t)); theMenu->Enable(OnMoveBottomID, mTracks->CanMoveDown(t)); +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + theMenu->Enable(OnDisplayPointLabelCountID, true); + theMenu->Enable(OnDisplayRegionLabelCountID, true); + theMenu->Enable(OnDisplayPreZeroLabelCountID, true); +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL //We need to find the location of the menu rectangle. wxRect r = FindTrackRect(t,true); @@ -8216,7 +8255,44 @@ Refresh(false); } +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL +void TrackPanel::OnDisplayPointLabelCount(wxCommandEvent & WXUNUSED(event)) { + if (mbDisplayPointLabelCount) { + mbDisplayPointLabelCount = false; + mDisplayPointLabelCountMenuItem->Check(false); + } + else { + mbDisplayPointLabelCount = true; + mDisplayPointLabelCountMenuItem->Check(); + } + gPrefs->Write(wxT("/GUI/DisplayPointLabelCount"), mbDisplayPointLabelCount); +} +void TrackPanel::OnDisplayRegionLabelCount(wxCommandEvent & WXUNUSED(event)) { + if (mbDisplayRegionLabelCount) { + mbDisplayRegionLabelCount = false; + mDisplayRegionLabelCountMenuItem->Check(false); + } + else { + mbDisplayRegionLabelCount = true; + mDisplayRegionLabelCountMenuItem->Check(); + } + gPrefs->Write(wxT("/GUI/DisplayRegionLabelCount"), mbDisplayRegionLabelCount); +} + +void TrackPanel::OnDisplayPreZeroLabelCount(wxCommandEvent & WXUNUSED(event)) { + if (mbDisplayPreZeroLabelCount) { + mbDisplayPreZeroLabelCount = false; + mDisplayPreZeroLabelCountMenuItem->Check(false); + } + else { + mbDisplayPreZeroLabelCount = true; + mDisplayPreZeroLabelCountMenuItem->Check(); + } + gPrefs->Write(wxT("/GUI/DisplayPreZeroLabelCount"), mbDisplayPreZeroLabelCount); +} +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL + /// Set the Display mode based on the menu choice in the Track Menu. /// Note that gModes MUST BE IN THE SAME ORDER AS THE MENU CHOICES!! /// const wxChar *gModes[] = { wxT("waveform"), wxT("waveformDB"), @@ -9307,6 +9383,52 @@ s); AColor::BevelTrackInfo(*dc, !down, bev); +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL +#define KIND_VERTICAL_SPACING -4 +#define LEFT_MARGIN (r.x + 3) + if (((LabelTrack *)t)->GetKind() == Track::Label) { + bool journalingEnabled; + gPrefs->Read(wxT("/GUI/DisplayLabelCounts"), &journalingEnabled, false); + if (journalingEnabled) { + bool displayPoints, displayRegions, displayPreZeros; + gPrefs->Read(wxT("/GUI/DisplayPointLabelCount"), &displayPoints, true); + gPrefs->Read(wxT("/GUI/DisplayRegionLabelCount"), &displayRegions, true); + gPrefs->Read(wxT("/GUI/DisplayPreZeroLabelCount"), &displayPreZeros, true); + int numberOfLabels = ((LabelTrack *)t)->GetNumLabels(); + if (numberOfLabels != 0 && (displayPoints || displayRegions || displayPreZeros)) { + dc->SetFont(((LabelTrack *)t)->GetFont()); + wxCoord wide, high, descent, externalLeading; + int top = (r.y + 2) + textHeight;//the +2 is because we originally drew the title string at r.Y + 2 + wxString numberString; + int numberOfPoints = ((LabelTrack *)t)->GetNumberOfLabelsOfKind(LabelTrack::POINT_LABEL); + if ((numberOfPoints != 0) && displayPoints) { + wxString points; + points.Printf(_("Points: %d"), numberOfPoints); + dc->DrawText(points, LEFT_MARGIN, top); + dc->GetTextExtent(points, &wide, &high, &descent, &externalLeading); + top += (KIND_VERTICAL_SPACING + high + descent); + } + int numberOfRegions = ((LabelTrack *)t)->GetNumberOfLabelsOfKind(LabelTrack::REGION_LABEL); + if ((numberOfRegions != 0) && displayRegions) { + wxString regions; + regions.Printf(_("Regions: %d"), numberOfRegions); + dc->DrawText(regions, LEFT_MARGIN, top); + dc->GetTextExtent(regions, &wide, &high, &descent, &externalLeading); + top += (KIND_VERTICAL_SPACING + high + descent); + } + int numberBeforeZero = ((LabelTrack *)t)->GetNumberOfLabelsOfKind(LabelTrack::LABEL_BEFORE_ZERO); + if ((numberBeforeZero != 0) && displayPreZeros) { + wxString beforeZeros; + beforeZeros.Printf(_("Pre-0: %d"), numberBeforeZero); + dc->DrawText(beforeZeros, LEFT_MARGIN, top); + dc->GetTextExtent(beforeZeros, &wide, &high, &descent, &externalLeading); + //top += (KIND_VERTICAL_SPACING + high + descent);//un-comment If adding more kinds + } + SetTrackInfoFont(dc); + } + } + } +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL } /// Draw the Mute or the Solo button, depending on the value of solo. Index: src/TrackPanel.h =================================================================== --- src/TrackPanel.h (revision 13513) +++ src/TrackPanel.h (working copy) @@ -453,6 +453,11 @@ virtual void OnSplitStereoMono(wxCommandEvent &event); virtual void SplitStereo(bool stereo); virtual void OnMergeStereo(wxCommandEvent &event); +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + virtual void OnDisplayPointLabelCount(wxCommandEvent &event); + virtual void OnDisplayRegionLabelCount(wxCommandEvent &event); + virtual void OnDisplayPreZeroLabelCount(wxCommandEvent &event); +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL virtual void OnCutSelectedText(wxCommandEvent &event); virtual void OnCopySelectedText(wxCommandEvent &event); virtual void OnPasteSelectedText(wxCommandEvent &event); @@ -759,6 +764,14 @@ // Keeps track of extra fractional vertical scroll steps double mVertScrollRemainder; +#ifdef EXPERIMENTAL_LABEL_TRACKINFOPANEL + bool mbDisplayPointLabelCount; + bool mbDisplayRegionLabelCount; + bool mbDisplayPreZeroLabelCount; + wxMenuItem * mDisplayPointLabelCountMenuItem; + wxMenuItem * mDisplayRegionLabelCountMenuItem; + wxMenuItem * mDisplayPreZeroLabelCountMenuItem; +#endif //EXPERIMENTAL_LABEL_TRACKINFOPANEL protected: