Audacity 3.2.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
WaveClipTrimHandle::AdjustBetweenBorders Class Referencefinal
Inheritance diagram for WaveClipTrimHandle::AdjustBetweenBorders:
[legend]
Collaboration diagram for WaveClipTrimHandle::AdjustBetweenBorders:
[legend]

Public Member Functions

 AdjustBetweenBorders (WaveTrack *track, std::shared_ptr< WaveClip > &leftClip, std::shared_ptr< WaveClip > &rightClip)
 
bool Init (const TrackPanelMouseEvent &event) override
 
UIHandle::Result Trim (const TrackPanelMouseEvent &event, AudacityProject &project) override
 
void Finish (AudacityProject &project) override
 
void Cancel () override
 
- Public Member Functions inherited from WaveClipTrimHandle::ClipTrimPolicy
virtual ~ClipTrimPolicy ()
 
virtual bool Init (const TrackPanelMouseEvent &event)=0
 
virtual UIHandle::Result Trim (const TrackPanelMouseEvent &event, AudacityProject &project)=0
 
virtual void Finish (AudacityProject &project)=0
 
virtual void Cancel ()=0
 
virtual void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)
 
virtual wxRect DrawingArea (TrackPanelDrawingContext &, const wxRect &rect, const wxRect &panelRect, unsigned iPass)
 

Private Member Functions

void TrimTo (double t)
 

Private Attributes

std::pair< double, double > mRange
 
std::vector< std::shared_ptr< WaveClip > > mLeftClips
 
std::vector< std::shared_ptr< WaveClip > > mRightClips
 
double mInitialBorderPosition {}
 
int mDragStartX { }
 

Detailed Description

Definition at line 261 of file WaveClipTrimHandle.cpp.

Constructor & Destructor Documentation

◆ AdjustBetweenBorders()

WaveClipTrimHandle::AdjustBetweenBorders::AdjustBetweenBorders ( WaveTrack track,
std::shared_ptr< WaveClip > &  leftClip,
std::shared_ptr< WaveClip > &  rightClip 
)
inline

Definition at line 280 of file WaveClipTrimHandle.cpp.

284 {
285 auto clips = track->GetClips();
286
287 wxASSERT(std::find(clips.begin(), clips.end(), leftClip) != clips.end());
288 wxASSERT(std::find(clips.begin(), clips.end(), rightClip) != clips.end());
289
290 if (track->IsAlignedWithLeader() || track->GetLinkType() == Track::LinkType::Aligned)
291 {
292 //find clips in other channels which are also should be trimmed
293 mLeftClips = FindClipsInChannels(leftClip->GetPlayStartTime(), leftClip->GetPlayEndTime(), track);
294 mRightClips = FindClipsInChannels(rightClip->GetPlayStartTime(), rightClip->GetPlayEndTime(), track);
295 }
296 else
297 {
298 mLeftClips.push_back(leftClip);
299 mRightClips.push_back(rightClip);
300 }
301
302 mRange = std::make_pair(
303 //not less than 1 sample length
304 mLeftClips[0]->GetPlayStartTime() + 1.0 / mLeftClips[0]->GetRate(),
305 mRightClips[0]->GetPlayEndTime() - 1.0 / mRightClips[0]->GetRate()
306 );
307 mInitialBorderPosition = mRightClips[0]->GetPlayStartTime();
308 }
LinkType GetLinkType() const noexcept
Definition: Track.cpp:1252
bool IsAlignedWithLeader() const
Returns true if the leader track has link type LinkType::Aligned.
Definition: Track.cpp:1257
std::vector< std::shared_ptr< WaveClip > > mLeftClips
std::vector< std::shared_ptr< WaveClip > > mRightClips
WaveClipHolders & GetClips()
Definition: WaveTrack.h:425
double GetRate(const Track &track)
Definition: TimeTrack.cpp:196
std::vector< std::shared_ptr< WaveClip > > FindClipsInChannels(double start, double end, WaveTrack *track)

References ChannelGroup::Aligned, anonymous_namespace{WaveClipTrimHandle.cpp}::FindClipsInChannels(), WaveTrack::GetClips(), Track::GetLinkType(), anonymous_namespace{TimeTrack.cpp}::GetRate(), Track::IsAlignedWithLeader(), mInitialBorderPosition, mLeftClips, mRange, and mRightClips.

Here is the call graph for this function:

Member Function Documentation

◆ Cancel()

void WaveClipTrimHandle::AdjustBetweenBorders::Cancel ( )
inlineoverridevirtual

Implements WaveClipTrimHandle::ClipTrimPolicy.

Definition at line 349 of file WaveClipTrimHandle.cpp.

References mInitialBorderPosition, and TrimTo().

Here is the call graph for this function:

◆ Finish()

void WaveClipTrimHandle::AdjustBetweenBorders::Finish ( AudacityProject project)
inlineoverridevirtual

Implements WaveClipTrimHandle::ClipTrimPolicy.

Definition at line 339 of file WaveClipTrimHandle.cpp.

340 {
341 if (mRightClips[0]->GetPlayStartTime() != mInitialBorderPosition)
342 {
343 auto dt = std::abs(mRightClips[0]->GetPlayStartTime() - mInitialBorderPosition);
344 ProjectHistory::Get(project).PushState(XO("Clip-Trim-Between"),
345 XO("Moved by %.02f").Format(dt));
346 }
347 }
XO("Cut/Copy/Paste")
const auto project
Abstract base class used in importing a file.
void PushState(const TranslatableString &desc, const TranslatableString &shortDesc)
static ProjectHistory & Get(AudacityProject &project)

References ProjectHistory::Get(), mInitialBorderPosition, mRightClips, project, ProjectHistory::PushState(), and XO().

Here is the call graph for this function:

◆ Init()

bool WaveClipTrimHandle::AdjustBetweenBorders::Init ( const TrackPanelMouseEvent event)
inlineoverridevirtual

Implements WaveClipTrimHandle::ClipTrimPolicy.

Definition at line 310 of file WaveClipTrimHandle.cpp.

311 {
312 if (event.event.LeftDown())
313 {
314 mDragStartX = event.event.GetX();
315 return true;
316 }
317 return false;
318 }

References TrackPanelMouseEvent::event, and mDragStartX.

◆ Trim()

UIHandle::Result WaveClipTrimHandle::AdjustBetweenBorders::Trim ( const TrackPanelMouseEvent event,
AudacityProject project 
)
inlineoverridevirtual

Implements WaveClipTrimHandle::ClipTrimPolicy.

Definition at line 320 of file WaveClipTrimHandle.cpp.

321 {
322 const auto newX = event.event.GetX();
323 const auto dx = newX - mDragStartX;
324
325 auto& viewInfo = ViewInfo::Get(project);
326
327 auto eventT = viewInfo.PositionToTime(viewInfo.TimeToPosition(mInitialBorderPosition, event.rect.x) + dx, event.rect.x);
328 auto offset = sampleCount(
329 floor(
330 (eventT - mInitialBorderPosition) * mLeftClips[0]->GetRate()
331 )
332 ).as_double() / mLeftClips[0]->GetRate();
333
335
337 }
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:235
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:19
double as_double() const
Definition: SampleCount.h:46

References sampleCount::as_double(), ViewInfo::Get(), anonymous_namespace{TimeTrack.cpp}::GetRate(), mDragStartX, mInitialBorderPosition, mLeftClips, project, TrackPanelMouseEvent::rect, RefreshCode::RefreshCell, and TrimTo().

Here is the call graph for this function:

◆ TrimTo()

void WaveClipTrimHandle::AdjustBetweenBorders::TrimTo ( double  t)
inlineprivate

Definition at line 269 of file WaveClipTrimHandle.cpp.

270 {
271 t = std::clamp(t, mRange.first, mRange.second);
272
273 for (auto& clip : mLeftClips)
274 clip->TrimRightTo(t);
275 for (auto& clip : mRightClips)
276 clip->TrimLeftTo(t);
277 }

References mLeftClips, mRange, and mRightClips.

Referenced by Cancel(), and Trim().

Here is the caller graph for this function:

Member Data Documentation

◆ mDragStartX

int WaveClipTrimHandle::AdjustBetweenBorders::mDragStartX { }
private

Definition at line 267 of file WaveClipTrimHandle.cpp.

Referenced by Init(), and Trim().

◆ mInitialBorderPosition

double WaveClipTrimHandle::AdjustBetweenBorders::mInitialBorderPosition {}
private

Definition at line 266 of file WaveClipTrimHandle.cpp.

Referenced by AdjustBetweenBorders(), Cancel(), Finish(), and Trim().

◆ mLeftClips

std::vector<std::shared_ptr<WaveClip> > WaveClipTrimHandle::AdjustBetweenBorders::mLeftClips
private

Definition at line 264 of file WaveClipTrimHandle.cpp.

Referenced by AdjustBetweenBorders(), Trim(), and TrimTo().

◆ mRange

std::pair<double, double> WaveClipTrimHandle::AdjustBetweenBorders::mRange
private

Definition at line 263 of file WaveClipTrimHandle.cpp.

Referenced by AdjustBetweenBorders(), and TrimTo().

◆ mRightClips

std::vector<std::shared_ptr<WaveClip> > WaveClipTrimHandle::AdjustBetweenBorders::mRightClips
private

Definition at line 265 of file WaveClipTrimHandle.cpp.

Referenced by AdjustBetweenBorders(), Finish(), and TrimTo().


The documentation for this class was generated from the following file: