From 17c93692860dca44520431844ca190a38537b482 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 26 Jan 2016 17:37:16 -0500 Subject: [PATCH] Bug1239: Correct time rulers after importing files (with File>Open) ... ... The fisheye stuff was to blame. --- src/Benchmark.cpp | 3 ++- src/Menus.cpp | 2 +- src/Project.cpp | 2 +- src/TimeTrack.cpp | 10 ++++++---- src/TimeTrack.h | 3 ++- src/Track.h | 7 +++++-- src/toolbars/TranscriptionToolBar.cpp | 2 +- src/widgets/Ruler.cpp | 17 ++++++++--------- src/widgets/Ruler.h | 7 ++++--- 9 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/Benchmark.cpp b/src/Benchmark.cpp index 3e89d69c3..12efdf4dc 100644 --- a/src/Benchmark.cpp +++ b/src/Benchmark.cpp @@ -342,8 +342,9 @@ void BenchmarkDialog::OnRun( wxCommandEvent & WXUNUSED(event)) HoldPrint(true); + ZoomInfo zoomInfo(0.0, ZoomInfo::GetDefaultZoom()); DirManager *d = new DirManager(); - TrackFactory *fact = new TrackFactory(d); + TrackFactory *fact = new TrackFactory(d, &zoomInfo); WaveTrack *t = fact->NewWaveTrack(int16Sample); Track *tmp = NULL; diff --git a/src/Menus.cpp b/src/Menus.cpp index f7e09890c..e58a1a64f 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -6258,7 +6258,7 @@ void AudacityProject::OnNewTimeTrack() return; } - TimeTrack *t = new TimeTrack(mDirManager); + TimeTrack *t = mTrackFactory->NewTimeTrack(); SelectNone(); diff --git a/src/Project.cpp b/src/Project.cpp index 0159ad8c1..7c529ee4e 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -1043,7 +1043,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, // Create tags object mTags = new Tags(); - mTrackFactory = new TrackFactory(mDirManager); + mTrackFactory = new TrackFactory(mDirManager, &mViewInfo); int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -1, 150}; mStatusBar->SetStatusWidths(4, widths); diff --git a/src/TimeTrack.cpp b/src/TimeTrack.cpp index 24464efd7..4189c2d88 100644 --- a/src/TimeTrack.cpp +++ b/src/TimeTrack.cpp @@ -31,11 +31,12 @@ TimeTrack *TrackFactory::NewTimeTrack() { - return new TimeTrack(mDirManager); + return new TimeTrack(mDirManager, mZoomInfo); } -TimeTrack::TimeTrack(DirManager *projDirManager): +TimeTrack::TimeTrack(DirManager *projDirManager, const ZoomInfo *zoomInfo): Track(projDirManager) + , mZoomInfo(zoomInfo) { mHeight = 100; @@ -55,7 +56,7 @@ TimeTrack::TimeTrack(DirManager *projDirManager): SetName(GetDefaultName()); mRuler = new Ruler; - mRuler->SetUseZoomInfo(0); + mRuler->SetUseZoomInfo(0, mZoomInfo); mRuler->SetLabelEdges(false); mRuler->SetFormat(Ruler::TimeFormat); @@ -65,6 +66,7 @@ TimeTrack::TimeTrack(DirManager *projDirManager): TimeTrack::TimeTrack(TimeTrack &orig): Track(orig) + , mZoomInfo(orig.mZoomInfo) { Init(orig); // this copies the TimeTrack metadata (name, range, etc) @@ -80,7 +82,7 @@ TimeTrack::TimeTrack(TimeTrack &orig): ///@TODO: Give Ruler:: a copy-constructor instead of this? mRuler = new Ruler; - mRuler->SetUseZoomInfo(0); + mRuler->SetUseZoomInfo(0, mZoomInfo); mRuler->SetLabelEdges(false); mRuler->SetFormat(Ruler::TimeFormat); diff --git a/src/TimeTrack.h b/src/TimeTrack.h index 26ba7d022..b2bb2d871 100644 --- a/src/TimeTrack.h +++ b/src/TimeTrack.h @@ -27,7 +27,7 @@ class TimeTrack: public Track { public: - TimeTrack(DirManager * projDirManager); + TimeTrack(DirManager * projDirManager, const ZoomInfo *zoomInfo); /** @brief Copy-Constructor - create a new TimeTrack:: which is an independent copy of the original * * Calls TimeTrack::Init() to copy the track metadata, then does a bunch of manipulations on the @@ -117,6 +117,7 @@ class TimeTrack: public Track { void testMe(); private: + const ZoomInfo *const mZoomInfo; Envelope *mEnvelope; Ruler *mRuler; double mRangeLower; diff --git a/src/Track.h b/src/Track.h index 1e3bf6c55..9098b4fc8 100644 --- a/src/Track.h +++ b/src/Track.h @@ -35,6 +35,7 @@ class LabelTrack; class TimeTrack; class WaveTrack; class AudacityProject; +class ZoomInfo; WX_DEFINE_USER_EXPORTED_ARRAY(Track*, TrackArray, class AUDACITY_DLL_API); WX_DEFINE_USER_EXPORTED_ARRAY(WaveTrack*, WaveTrackArray, class AUDACITY_DLL_API); @@ -446,12 +447,14 @@ class AUDACITY_DLL_API TrackList:public wxEvtHandler class AUDACITY_DLL_API TrackFactory { private: - TrackFactory(DirManager *dirManager): + TrackFactory(DirManager *dirManager, const ZoomInfo *zoomInfo): mDirManager(dirManager) + , mZoomInfo(zoomInfo) { } - DirManager *mDirManager; + DirManager *const mDirManager; + const ZoomInfo *const mZoomInfo; friend class AudacityProject; friend class BenchmarkDialog; diff --git a/src/toolbars/TranscriptionToolBar.cpp b/src/toolbars/TranscriptionToolBar.cpp index f6a3db8cc..b348d9972 100644 --- a/src/toolbars/TranscriptionToolBar.cpp +++ b/src/toolbars/TranscriptionToolBar.cpp @@ -432,7 +432,7 @@ void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview) // Create a TimeTrack if we haven't done so already if (!mTimeTrack) { - mTimeTrack = new TimeTrack(p->GetDirManager()); + mTimeTrack = p->GetTrackFactory()->NewTimeTrack(); if (!mTimeTrack) { return; } diff --git a/src/widgets/Ruler.cpp b/src/widgets/Ruler.cpp index 6cf2a6e08..97ba09411 100644 --- a/src/widgets/Ruler.cpp +++ b/src/widgets/Ruler.cpp @@ -155,7 +155,7 @@ Ruler::Ruler() mTwoTone = false; - mUseZoomInfo = false; + mUseZoomInfo = NULL; } Ruler::~Ruler() @@ -973,8 +973,8 @@ void Ruler::Update() void Ruler::Update(TimeTrack* timetrack)// Envelope *speedEnv, long minSpeed, long maxSpeed ) { const ZoomInfo *zoomInfo = NULL; - if (mUseZoomInfo && !mLog && mOrientation == wxHORIZONTAL) - zoomInfo = &GetActiveProject()->GetZoomInfo(); + if (!mLog && mOrientation == wxHORIZONTAL) + zoomInfo = mUseZoomInfo; // This gets called when something has been changed // (i.e. we've been invalidated). Recompute all @@ -1577,10 +1577,10 @@ void Ruler::Label::Draw(wxDC&dc, bool twoTone) const } } -void Ruler::SetUseZoomInfo(int leftOffset) +void Ruler::SetUseZoomInfo(int leftOffset, const ZoomInfo *zoomInfo) { mLeftOffset = leftOffset; - mUseZoomInfo = true; + mUseZoomInfo = zoomInfo; } // @@ -1680,6 +1680,7 @@ AdornedRulerPanel::AdornedRulerPanel(AudacityProject* parent, const wxSize& size, ViewInfo *viewinfo) : wxPanel(parent, id, pos, size) +, mViewInfo(viewinfo) { SetLabel( _("Timeline") ); SetName(GetLabel()); @@ -1707,8 +1708,6 @@ AdornedRulerPanel::AdornedRulerPanel(AudacityProject* parent, mMouseEventState = mesNone; mIsDragging = false; - mViewInfo = viewinfo; - mOuter = GetClientRect(); mInner = mOuter; @@ -1717,7 +1716,7 @@ AdornedRulerPanel::AdornedRulerPanel(AudacityProject* parent, mInner.width -= 2; // -2 for left and right bevels mInner.height -= 3; // -3 for top and bottom bevels and bottom line - mRuler.SetUseZoomInfo(mLeftOffset); + mRuler.SetUseZoomInfo(mLeftOffset, mViewInfo); mRuler.SetBounds(mInner.GetLeft(), mInner.GetTop(), mInner.GetRight(), @@ -2457,7 +2456,7 @@ void AdornedRulerPanel::DoDrawSelection(wxDC * dc) void AdornedRulerPanel::SetLeftOffset(int offset) { mLeftOffset = offset; - mRuler.SetUseZoomInfo(offset); + mRuler.SetUseZoomInfo(offset, mViewInfo); } void AdornedRulerPanel::DrawCursor(double time) diff --git a/src/widgets/Ruler.h b/src/widgets/Ruler.h index fddd7e47f..31f115ae2 100644 --- a/src/widgets/Ruler.h +++ b/src/widgets/Ruler.h @@ -26,6 +26,7 @@ class TimeTrack; class SnapManager; class NumberScale; class TrackList; +class ZoomInfo; class AUDACITY_DLL_API Ruler { public: @@ -127,7 +128,7 @@ class AUDACITY_DLL_API Ruler { void SetCustomMajorLabels(wxArrayString *label, int numLabel, int start, int step); void SetCustomMinorLabels(wxArrayString *label, int numLabel, int start, int step); - void SetUseZoomInfo(int leftOffset); + void SetUseZoomInfo(int leftOffset, const ZoomInfo *zoomInfo); // // Drawing @@ -231,7 +232,7 @@ private: int mGridLineLength; // end wxString mUnits; bool mTwoTone; - bool mUseZoomInfo; + const ZoomInfo *mUseZoomInfo; int mLeftOffset; NumberScale *mpNumberScale; @@ -335,7 +336,7 @@ private: bool mIsWE; Ruler mRuler; - ViewInfo *mViewInfo; + ViewInfo *const mViewInfo; AudacityProject *mProject; TrackList *mTracks;