Audacity 3.2.0
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
WaveTrackAffordanceControls Class Reference

#include <WaveTrackAffordanceControls.h>

Inheritance diagram for WaveTrackAffordanceControls:
[legend]
Collaboration diagram for WaveTrackAffordanceControls:
[legend]

Public Member Functions

 WaveTrackAffordanceControls (const std::shared_ptr< Track > &pTrack)
 
std::vector< UIHandlePtrHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override
 
void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass) override
 
IntervalIterator GetSelectedInterval () const
 
unsigned CaptureKey (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project) override
 
unsigned KeyDown (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project) override
 
unsigned Char (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project) override
 
unsigned LoseFocus (AudacityProject *project) override
 
void OnTextEditFinished (AudacityProject *project, const wxString &text) override
 
void OnTextEditCancelled (AudacityProject *project) override
 
void OnTextModified (AudacityProject *project, const wxString &text) override
 
void OnTextContextMenu (AudacityProject *project, const wxPoint &position) override
 
unsigned OnAffordanceClick (const TrackPanelMouseEvent &event, AudacityProject *project)
 
bool OnTextCopy (AudacityProject &project)
 
bool OnTextCut (AudacityProject &project)
 
bool OnTextPaste (AudacityProject &project)
 
bool OnTextSelect (AudacityProject &project)
 
void StartEditSelectedClipName (AudacityProject &project)
 
void StartEditSelectedClipSpeed (AudacityProject &project)
 
void OnRenderClipStretching (AudacityProject &project) const
 
std::vector< MenuItemGetMenuItems (const wxRect &rect, const wxPoint *pPosition, AudacityProject *pProject) override
 Return a list of items for DoContextMenu() (empties for separators) More...
 
- Public Member Functions inherited from CommonTrackCell
 CommonTrackCell (const std::shared_ptr< Track > &pTrack)
 Construct from a track. More...
 
 ~CommonTrackCell ()
 
std::shared_ptr< TrackDoFindTrack () override
 
void Reparent (const std::shared_ptr< Track > &parent) override
 Object may be shared among tracks but hold a special back-pointer to one of them; reassign it. More...
 
- Public Member Functions inherited from CommonTrackPanelCell
 CommonTrackPanelCell ()
 
virtual ~CommonTrackPanelCell ()=0
 
HitTestPreview DefaultPreview (const TrackPanelMouseState &, const AudacityProject *) override
 
std::shared_ptr< TrackFindTrack ()
 
std::shared_ptr< const TrackFindTrack () const
 
virtual std::vector< MenuItemGetMenuItems (const wxRect &rect, const wxPoint *pPosition, AudacityProject *pProject)
 Return a list of items for DoContextMenu() (empties for separators) More...
 
- Public Member Functions inherited from TrackPanelCell
 TrackPanelCell ()=default
 
 TrackPanelCell (const TrackPanelCell &)=delete
 
TrackPanelCelloperator= (const TrackPanelCell &)=delete
 
virtual ~TrackPanelCell ()=0
 
virtual HitTestPreview DefaultPreview (const TrackPanelMouseState &state, const AudacityProject *pProject)
 
virtual std::vector< UIHandlePtrHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject)=0
 
virtual unsigned HandleWheelRotation (const TrackPanelMouseEvent &event, AudacityProject *pProject)
 
virtual std::shared_ptr< TrackPanelCellContextMenuDelegate ()
 
virtual unsigned DoContextMenu (const wxRect &rect, wxWindow *pParent, const wxPoint *pPosition, AudacityProject *pProject)
 
virtual unsigned CaptureKey (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned KeyDown (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned KeyUp (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned Char (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned LoseFocus (AudacityProject *project)
 
- Public Member Functions inherited from TrackPanelNode
 TrackPanelNode ()
 
virtual ~TrackPanelNode ()=0
 
- Public Member Functions inherited from TrackPanelDrawable
virtual ~TrackPanelDrawable ()=0
 
virtual void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)
 
virtual wxRect DrawingArea (TrackPanelDrawingContext &context, const wxRect &rect, const wxRect &panelRect, unsigned iPass)
 
- Public Member Functions inherited from TrackAttachment
virtual ~TrackAttachment ()
 
virtual void CopyTo (Track &track) const
 Copy state, for undo/redo purposes. More...
 
virtual void Reparent (const std::shared_ptr< Track > &parent)
 Object may be shared among tracks but hold a special back-pointer to one of them; reassign it. More...
 
virtual void WriteXMLAttributes (XMLWriter &) const
 Serialize persistent attributes. More...
 
virtual bool HandleXMLAttribute (const std::string_view &attr, const XMLAttributeValueView &valueView)
 Deserialize an attribute, returning true if recognized. More...
 
- Public Member Functions inherited from ClientData::Base
virtual ~Base ()
 
- Public Member Functions inherited from TextEditDelegate
virtual ~TextEditDelegate ()
 
virtual void OnTextEditFinished (AudacityProject *project, const wxString &text)=0
 
virtual void OnTextEditCancelled (AudacityProject *project)=0
 
virtual void OnTextModified (AudacityProject *project, const wxString &text)=0
 
virtual void OnTextContextMenu (AudacityProject *project, const wxPoint &position)=0
 

Private Types

using IntervalIterator = ChannelGroup::IntervalIterator< WaveTrack::Interval >
 

Private Member Functions

bool IsIntervalVisible (const IntervalIterator &it) const noexcept
 
bool StartEditClipName (AudacityProject &project, IntervalIterator it)
 Starts in-place clip name editing or shows a Clip Name Edit dialog, depending on prefs. More...
 
void ResetClipNameEdit ()
 
void OnTrackListEvent (const TrackListEvent &evt)
 
void OnSelectionChange (NotifyingSelectedRegionMessage)
 
unsigned ExitTextEditing ()
 
std::shared_ptr< TextEditHelperMakeTextEditHelper (const wxString &text)
 

Private Attributes

IntervalIterator mFocusInterval
 
std::weak_ptr< ClipOverflowButtonHandlemOverflowButtonHandle
 
std::weak_ptr< ClipPitchAndSpeedButtonHandlemPitchButtonHandle
 
std::weak_ptr< ClipPitchAndSpeedButtonHandlemSpeedButtonHandle
 
std::weak_ptr< WaveTrackAffordanceHandlemAffordanceHandle
 
std::weak_ptr< TrackPanelResizeHandlemResizeHandle
 
std::weak_ptr< WaveClipTitleEditHandlemTitleEditHandle
 
std::weak_ptr< SelectHandlemSelectHandle
 
std::weak_ptr< WaveClipAdjustBorderHandlemClipBorderAdjustHandle
 
IntervalIterator mEditedInterval
 
std::shared_ptr< TextEditHelpermTextEditHelper
 
wxFont mClipNameFont
 
std::vector< IntervalIteratormVisibleIntervals
 
Observer::Subscription mTrackListEventSubscription
 
Observer::Subscription mSelectionChangeSubscription
 

Additional Inherited Members

- Static Public Member Functions inherited from TrackPanelDrawable
static wxRect MaximizeWidth (const wxRect &rect, const wxRect &panelRect)
 
static wxRect MaximizeHeight (const wxRect &rect, const wxRect &panelRect)
 
- Protected Member Functions inherited from CommonTrackPanelCell
virtual std::shared_ptr< TrackDoFindTrack ()=0
 
unsigned DoContextMenu (const wxRect &rect, wxWindow *pParent, const wxPoint *pPosition, AudacityProject *pProject) override
 
unsigned HandleWheelRotation (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 

Detailed Description

Definition at line 38 of file WaveTrackAffordanceControls.h.

Member Typedef Documentation

◆ IntervalIterator

Definition at line 43 of file WaveTrackAffordanceControls.h.

Constructor & Destructor Documentation

◆ WaveTrackAffordanceControls()

WaveTrackAffordanceControls::WaveTrackAffordanceControls ( const std::shared_ptr< Track > &  pTrack)

Definition at line 152 of file WaveTrackAffordanceControls.cpp.

153 : CommonTrackCell{ pTrack }
154 , mClipNameFont{ wxFontInfo{} }
155{
156 if (auto trackList = pTrack->GetOwner()) {
157 if (auto pProject = trackList->GetOwner()) {
160 if(auto project = trackList->GetOwner())
161 {
162 auto& viewInfo = ViewInfo::Get(*project);
164 viewInfo.selectedRegion.Subscribe(
165 *this,
167 }
168 }
169 }
170}
const auto project
Subscription Subscribe(Callback callback)
Connect a callback to the Publisher; later-connected are called earlier.
Definition: Observer.h:199
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:235
void OnTrackListEvent(const TrackListEvent &evt)
void OnSelectionChange(NotifyingSelectedRegionMessage)
Observer::Subscription mSelectionChangeSubscription
Observer::Subscription mTrackListEventSubscription

References ViewInfo::Get(), mSelectionChangeSubscription, mTrackListEventSubscription, OnSelectionChange(), OnTrackListEvent(), project, and Observer::Publisher< Message, NotifyAll >::Subscribe().

Here is the call graph for this function:

Member Function Documentation

◆ CaptureKey()

unsigned WaveTrackAffordanceControls::CaptureKey ( wxKeyEvent &  event,
ViewInfo viewInfo,
wxWindow *  pParent,
AudacityProject project 
)
overridevirtual

Reimplemented from TrackPanelCell.

Definition at line 482 of file WaveTrackAffordanceControls.cpp.

483{
484 if (!mTextEditHelper
485 || !mTextEditHelper->CaptureKey(event.GetKeyCode(), event.GetModifiers()))
486 // Handle the event if it can be processed by the text editor (if any)
487 event.Skip();
489}
std::shared_ptr< TextEditHelper > mTextEditHelper

References mTextEditHelper, and RefreshCode::RefreshNone.

◆ Char()

unsigned WaveTrackAffordanceControls::Char ( wxKeyEvent &  event,
ViewInfo viewInfo,
wxWindow *  pParent,
AudacityProject project 
)
overridevirtual

Reimplemented from TrackPanelCell.

Definition at line 507 of file WaveTrackAffordanceControls.cpp.

508{
509 if (mTextEditHelper && mTextEditHelper->OnChar(event.GetUnicodeKey(), project))
512}

References mTextEditHelper, project, RefreshCode::RefreshCell, and RefreshCode::RefreshNone.

◆ Draw()

void WaveTrackAffordanceControls::Draw ( TrackPanelDrawingContext context,
const wxRect &  rect,
unsigned  iPass 
)
overridevirtual

Reimplemented from TrackPanelDrawable.

Definition at line 273 of file WaveTrackAffordanceControls.cpp.

274{
275 if (iPass == TrackArtist::PassBackground) {
276 const auto track = FindTrack().get();
277 if (!track)
278 return;
279 const auto artist = TrackArtist::Get(context);
280 const auto &pendingTracks = *artist->pPendingTracks;
281
282 // Color the background of the affordance rectangle (only one per track)
283 // as for the topmost channel
285 rect, **track->Channels().begin(),
286 artist->blankSelectedBrush, artist->blankBrush);
287
288 mVisibleIntervals.clear();
289
290 auto &waveTrack = static_cast<WaveTrack&>(
291 pendingTracks.SubstitutePendingChangedTrack(*track));
292 const auto& zoomInfo = *artist->pZoomInfo;
293 {
294 wxDCClipper dcClipper(context.dc, rect);
295
296 context.dc.SetTextBackground(wxTransparentColor);
297 context.dc.SetTextForeground(theTheme.Colour(clrClipNameText));
298 context.dc.SetFont(mClipNameFont);
299
300 auto px = context.lastState.m_x;
301 auto py = context.lastState.m_y;
302
303 const auto overflowHandle = mOverflowButtonHandle.lock();
304 const auto &intervals = waveTrack.Intervals();
305 for(auto it = intervals.begin(); it != intervals.end(); ++it)
306 {
307 auto interval = *it;
308 const auto& clip = *interval;
309 const auto clipRect = ClipParameters::GetClipRect(
310 clip, zoomInfo, rect);
311
312 if(!WaveChannelView::ClipDetailsVisible(clip, zoomInfo, rect))
313 {
314 TrackArt::DrawClipFolded(context.dc, clipRect);
315 continue;
316 }
317
318 const auto selected = GetSelectedInterval() == it;
319 const auto highlightAffordance =
320 !overflowHandle && (selected || clipRect.Contains(px, py));
321 auto affordanceRect = TrackArt::DrawClipAffordance(
322 context.dc, clipRect, highlightAffordance, selected);
323
324 if (
325 const auto overflowButtonRect =
326 LowlitClipButton::DrawOnClip<ClipButtonId::Overflow>(
327 { clip, zoomInfo, rect }, context.dc))
328 affordanceRect.width -= overflowButtonRect->width;
329 if (
330 const auto speedButtonRect =
331 LowlitClipButton::DrawOnClip<ClipButtonId::Speed>(
332 { clip, zoomInfo, rect }, context.dc))
333 affordanceRect.width -= speedButtonRect->width;
334 if (
335 const auto pitchButtonRect =
336 LowlitClipButton::DrawOnClip<ClipButtonId::Pitch>(
337 { clip, zoomInfo, rect }, context.dc))
338 affordanceRect.width -= pitchButtonRect->width;
339
340 if (mTextEditHelper && mEditedInterval == it)
341 {
342 if (!mTextEditHelper->Draw(context.dc, affordanceRect))
343 {
344 mTextEditHelper->Cancel(nullptr);
346 context.dc, affordanceRect, interval->GetName());
347 }
348 }
350 context.dc, affordanceRect, interval->GetName()))
351 mVisibleIntervals.push_back(it);
352 }
353 }
354 }
355}
THEME_API Theme theTheme
Definition: Theme.cpp:82
std::shared_ptr< Track > FindTrack()
wxColour & Colour(int iIndex)
static TrackArtist * Get(TrackPanelDrawingContext &)
Definition: TrackArtist.cpp:69
static bool ClipDetailsVisible(const ClipTimes &clip, const ZoomInfo &zoomInfo, const wxRect &viewRect)
std::vector< IntervalIterator > mVisibleIntervals
std::weak_ptr< ClipOverflowButtonHandle > mOverflowButtonHandle
IntervalIterator GetSelectedInterval() const
A Track that contains audio waveform data.
Definition: WaveTrack.h:203
AUDACITY_DLL_API bool DrawClipTitle(wxDC &dc, const wxRect &affordanceRect, const wxString &title)
Definition: TrackArt.cpp:289
AUDACITY_DLL_API void DrawClipFolded(wxDC &dc, const wxRect &rect)
Definition: TrackArt.cpp:346
AUDACITY_DLL_API wxRect DrawClipAffordance(wxDC &dc, const wxRect &clipRect, bool highlight=false, bool selected=false)
Definition: TrackArt.cpp:223
AUDACITY_DLL_API void DrawBackgroundWithSelection(TrackPanelDrawingContext &context, const wxRect &rect, const Channel &channel, const wxBrush &selBrush, const wxBrush &unselBrush, bool useSelection=true)
Definition: TrackArt.cpp:651
static wxRect GetClipRect(const ClipTimes &clip, const ZoomInfo &zoomInfo, const wxRect &viewRect, bool *outShowSamples=nullptr)

References WaveChannelView::ClipDetailsVisible(), ThemeBase::Colour(), TrackPanelDrawingContext::dc, TrackArt::DrawBackgroundWithSelection(), TrackArt::DrawClipAffordance(), TrackArt::DrawClipFolded(), TrackArt::DrawClipTitle(), CommonTrackPanelCell::FindTrack(), TrackArtist::Get(), ClipParameters::GetClipRect(), GetSelectedInterval(), TrackPanelDrawingContext::lastState, mClipNameFont, mEditedInterval, mOverflowButtonHandle, mTextEditHelper, mVisibleIntervals, TrackArtist::PassBackground, and theTheme.

Here is the call graph for this function:

◆ ExitTextEditing()

unsigned WaveTrackAffordanceControls::ExitTextEditing ( )
private

Definition at line 564 of file WaveTrackAffordanceControls.cpp.

565{
566 using namespace RefreshCode;
567 if (mTextEditHelper)
568 {
569 if (auto trackList = FindTrack()->GetOwner())
570 {
571 mTextEditHelper->Finish(trackList->GetOwner());
572 }
574 return RefreshCell;
575 }
576 return RefreshNone;
577}
Namespace containing an enum 'what to do on a refresh?'.
Definition: RefreshCode.h:16

References CommonTrackPanelCell::FindTrack(), mTextEditHelper, RefreshCode::RefreshCell, RefreshCode::RefreshNone, and ResetClipNameEdit().

Referenced by LoseFocus(), OnAffordanceClick(), OnSelectionChange(), and OnTrackListEvent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetMenuItems()

auto WaveTrackAffordanceControls::GetMenuItems ( const wxRect &  rect,
const wxPoint *  pPosition,
AudacityProject pProject 
)
overridevirtual

Return a list of items for DoContextMenu() (empties for separators)

If the vector is empty (as in the default), there is no context menu.

Commands are invoked with temporary selection fields of CommandContext set to a point selected region at the mouse pick, and the cell's track.

A function may be given, but if it is null, then the command can be found by name in the CommandManager.

An item in the list with no command name marks a menu separator.

The menu item is enabled only if it contains a true flag, but if looked up in the command manager, it must also satisfy the command manager's conditions.

Reimplemented from CommonTrackPanelCell.

Definition at line 707 of file WaveTrackAffordanceControls.cpp.

710{
712}
std::vector< CommonTrackPanelCell::MenuItem > GetWaveClipMenuItems()

References WaveClipUIUtilities::GetWaveClipMenuItems().

Here is the call graph for this function:

◆ GetSelectedInterval()

auto WaveTrackAffordanceControls::GetSelectedInterval ( ) const

Definition at line 401 of file WaveTrackAffordanceControls.cpp.

402{
403 if (auto handle = mAffordanceHandle.lock())
404 {
405 return handle->Clicked() ? mFocusInterval : IntervalIterator{};
406 }
407 return {};
408}
ChannelGroup::IntervalIterator< WaveTrack::Interval > IntervalIterator
std::weak_ptr< WaveTrackAffordanceHandle > mAffordanceHandle

References mAffordanceHandle, and mFocusInterval.

Referenced by Draw().

Here is the caller graph for this function:

◆ HitTest()

std::vector< UIHandlePtr > WaveTrackAffordanceControls::HitTest ( const TrackPanelMouseState state,
const AudacityProject pProject 
)
overridevirtual

Implements TrackPanelCell.

Definition at line 172 of file WaveTrackAffordanceControls.cpp.

173{
174 std::vector<UIHandlePtr> results;
175
176 const auto px = state.state.m_x;
177 const auto py = state.state.m_y;
178 const wxPoint mousePoint { px, py };
179
180 const auto rect = state.rect;
181
182 auto track = std::static_pointer_cast<WaveTrack>(FindTrack());
183 if (!track)
184 return {};
185
186 {
189 track,
190 pProject,
191 state);
192
193 if (handle)
194 results.push_back(handle);
195 }
196
197 if (mTextEditHelper && mTextEditHelper->GetBBox().Contains(px, py))
198 {
199 results.push_back(
202 std::make_shared<WaveClipTitleEditHandle>(
203 mTextEditHelper, track)
204 )
205 );
206 }
207
208 auto &waveTrack = static_cast<WaveTrack&>(
210 auto& zoomInfo = ViewInfo::Get(*pProject);
211 const auto &intervals = waveTrack.Intervals();
212 for(auto it = intervals.begin(); it != intervals.end(); ++it)
213 {
214 if (it == mEditedInterval)
215 continue;
216
217 const auto clip = (*it);
218 if (LowlitClipButton::HitTest<ClipButtonId::Overflow>(
219 { *clip, zoomInfo, rect }, mousePoint))
220 {
221 results.push_back(AssignUIHandlePtr(
222 mOverflowButtonHandle, std::make_shared<ClipOverflowButtonHandle>(
223 track, *it, weak_from_this())));
224 mFocusInterval = it;
225 break;
226 }
227 else if (LowlitClipButton::HitTest<ClipButtonId::Pitch>(
228 { *clip, zoomInfo, rect }, mousePoint))
229 {
230 results.push_back(AssignUIHandlePtr(
232 std::make_shared<ClipPitchAndSpeedButtonHandle>(
234 mFocusInterval = it;
235 break;
236 }
237 else if (LowlitClipButton::HitTest<ClipButtonId::Speed>(
238 { *clip, zoomInfo, rect }, mousePoint))
239 {
240 results.push_back(AssignUIHandlePtr(
242 std::make_shared<ClipPitchAndSpeedButtonHandle>(
244 mFocusInterval = it;
245 break;
246 }
248 *clip, zoomInfo, state.rect, mousePoint))
249 {
250 results.push_back(AssignUIHandlePtr(
252 std::make_shared<WaveTrackAffordanceHandle>(track, clip)));
253 mFocusInterval = it;
254 break;
255 }
256 }
257
258 const auto& settings = ProjectSettings::Get(*pProject);
259 const auto currentTool = settings.GetTool();
260 if (currentTool == ToolCodes::multiTool || currentTool == ToolCodes::selectTool)
261 {
262 results.push_back(
264 mSelectHandle, state, pProject,
265 WaveChannelView::GetFirst(*track).shared_from_this()
266 )
267 );
268 }
269
270 return results;
271}
static Settings & settings()
Definition: TrackInfo.cpp:69
std::shared_ptr< Subclass > AssignUIHandlePtr(std::weak_ptr< Subclass > &holder, const std::shared_ptr< Subclass > &pNew)
Definition: UIHandle.h:164
Track & SubstitutePendingChangedTrack(Track &track) const
static PendingTracks & Get(AudacityProject &project)
static ProjectSettings & Get(AudacityProject &project)
static UIHandlePtr HitTest(std::weak_ptr< SelectHandle > &holder, const TrackPanelMouseState &state, const AudacityProject *pProject, const std::shared_ptr< ChannelView > &pChannelView)
static bool HitTest(const ClipTimes &clip, const ZoomInfo &zoomInfo, const wxRect &rect, const wxPoint &pos)
static WaveChannelView & GetFirst(WaveTrack &wt)
Get the view of the first channel.
static UIHandlePtr HitAnywhere(std::weak_ptr< WaveClipAdjustBorderHandle > &holder, const std::shared_ptr< WaveTrack > &waveTrack, const AudacityProject *pProject, const TrackPanelMouseState &state)
std::weak_ptr< ClipPitchAndSpeedButtonHandle > mPitchButtonHandle
std::weak_ptr< WaveClipAdjustBorderHandle > mClipBorderAdjustHandle
std::weak_ptr< ClipPitchAndSpeedButtonHandle > mSpeedButtonHandle
std::weak_ptr< SelectHandle > mSelectHandle
std::weak_ptr< WaveClipTitleEditHandle > mTitleEditHandle

References AssignUIHandlePtr(), CommonTrackPanelCell::FindTrack(), ViewInfo::Get(), PendingTracks::Get(), ProjectSettings::Get(), WaveChannelView::GetFirst(), WaveClipAdjustBorderHandle::HitAnywhere(), WaveChannelView::HitTest(), SelectHandle::HitTest(), mAffordanceHandle, mClipBorderAdjustHandle, mEditedInterval, mFocusInterval, mOverflowButtonHandle, mPitchButtonHandle, mSelectHandle, mSpeedButtonHandle, mTextEditHelper, mTitleEditHandle, ToolCodes::multiTool, ClipPitchAndSpeedButtonHandle::Pitch, TrackPanelMouseState::rect, ToolCodes::selectTool, settings(), ClipPitchAndSpeedButtonHandle::Speed, TrackPanelMouseState::state, and PendingTracks::SubstitutePendingChangedTrack().

Here is the call graph for this function:

◆ IsIntervalVisible()

bool WaveTrackAffordanceControls::IsIntervalVisible ( const IntervalIterator it) const
privatenoexcept

Definition at line 357 of file WaveTrackAffordanceControls.cpp.

358{
359 return std::find(mVisibleIntervals.begin(),
360 mVisibleIntervals.end(),
361 it) != mVisibleIntervals.end();
362}

Referenced by StartEditClipName().

Here is the caller graph for this function:

◆ KeyDown()

unsigned WaveTrackAffordanceControls::KeyDown ( wxKeyEvent &  event,
ViewInfo viewInfo,
wxWindow *  pParent,
AudacityProject project 
)
overridevirtual

Reimplemented from TrackPanelCell.

Definition at line 492 of file WaveTrackAffordanceControls.cpp.

493{
494 auto keyCode = event.GetKeyCode();
495
496 if (mTextEditHelper)
497 {
498 if (!mTextEditHelper->OnKeyDown(keyCode, event.GetModifiers(), project)
500 event.Skip();
501
503 }
505}
static bool IsGoodEditKeyCode(int keyCode)

References TextEditHelper::IsGoodEditKeyCode(), mTextEditHelper, project, RefreshCode::RefreshCell, and RefreshCode::RefreshNone.

Here is the call graph for this function:

◆ LoseFocus()

unsigned WaveTrackAffordanceControls::LoseFocus ( AudacityProject project)
overridevirtual

Reimplemented from TrackPanelCell.

Definition at line 514 of file WaveTrackAffordanceControls.cpp.

515{
516 return ExitTextEditing();
517}

References ExitTextEditing().

Here is the call graph for this function:

◆ MakeTextEditHelper()

std::shared_ptr< TextEditHelper > WaveTrackAffordanceControls::MakeTextEditHelper ( const wxString &  text)
private

Definition at line 699 of file WaveTrackAffordanceControls.cpp.

700{
701 auto helper = std::make_shared<TextEditHelper>(shared_from_this(), text, mClipNameFont);
702 helper->SetTextColor(theTheme.Colour(clrClipNameText));
703 helper->SetTextSelectionColor(theTheme.Colour(clrClipNameTextSelection));
704 return helper;
705}

References ThemeBase::Colour(), mClipNameFont, and theTheme.

Referenced by StartEditClipName().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnAffordanceClick()

unsigned WaveTrackAffordanceControls::OnAffordanceClick ( const TrackPanelMouseEvent event,
AudacityProject project 
)

Definition at line 619 of file WaveTrackAffordanceControls.cpp.

620{
621 auto& viewInfo = ViewInfo::Get(*project);
622 if (mTextEditHelper)
623 {
624 if (auto interval = *mEditedInterval)
625 {
626 auto affordanceRect = ClipParameters::GetClipRect(*interval, viewInfo, event.rect);
627 if (!affordanceRect.Contains(event.event.GetPosition()))
628 return ExitTextEditing();
629 }
630 }
631 else if (auto interval = *mFocusInterval)
632 {
633 if (event.event.LeftDClick())
634 {
635 auto affordanceRect = ClipParameters::GetClipRect(*interval, viewInfo, event.rect);
636 if (affordanceRect.Contains(event.event.GetPosition()) &&
638 {
639 event.event.Skip(false);
641 }
642 }
643 }
645}
bool StartEditClipName(AudacityProject &project, IntervalIterator it)
Starts in-place clip name editing or shows a Clip Name Edit dialog, depending on prefs.

References TrackPanelMouseEvent::event, ExitTextEditing(), ViewInfo::Get(), ClipParameters::GetClipRect(), mEditedInterval, mFocusInterval, mTextEditHelper, project, TrackPanelMouseEvent::rect, RefreshCode::RefreshCell, RefreshCode::RefreshNone, and StartEditClipName().

Here is the call graph for this function:

◆ OnRenderClipStretching()

void WaveTrackAffordanceControls::OnRenderClipStretching ( AudacityProject project) const

Definition at line 672 of file WaveTrackAffordanceControls.cpp.

674{
675 const auto [track, it] = SelectedIntervalOfFocusedTrack(project);
676
677 if (track != FindTrack())
678 return;
679
680 auto interval = *it;
681
682 if (!interval || !interval->HasPitchOrSpeed())
683 return;
684
686 [track = track, interval = interval](const ProgressReporter& progress) {
687 track->ApplyPitchAndSpeed(
688 { { interval->GetPlayStartTime(), interval->GetPlayEndTime() } },
689 progress);
690 },
691 XO("Applying..."));
692
694 XO("Rendered time-stretched audio"), XO("Render"));
695
697}
XO("Cut/Copy/Paste")
std::function< void(double)> ProgressReporter
Definition: Track.h:48
void PushState(const TranslatableString &desc, const TranslatableString &shortDesc)
static ProjectHistory & Get(AudacityProject &project)
WAVE_TRACK_API void WithClipRenderingProgress(std::function< void(const ProgressReporter &)> action, TranslatableString title=defaultStretchRenderingTitle)
void SelectClip(AudacityProject &project, const WaveTrack::Interval &clip)
std::pair< std::shared_ptr< WaveTrack >, ChannelGroup::IntervalIterator< WaveTrack::Interval > > SelectedIntervalOfFocusedTrack(AudacityProject &project, bool wholeInterval=true)

References CommonTrackPanelCell::FindTrack(), ProjectHistory::Get(), project, ProjectHistory::PushState(), WaveClipUIUtilities::SelectClip(), anonymous_namespace{WaveTrackAffordanceControls.cpp}::SelectedIntervalOfFocusedTrack(), TimeStretching::WithClipRenderingProgress(), and XO().

Here is the call graph for this function:

◆ OnSelectionChange()

void WaveTrackAffordanceControls::OnSelectionChange ( NotifyingSelectedRegionMessage  )
private

Definition at line 559 of file WaveTrackAffordanceControls.cpp.

560{
562}

References ExitTextEditing().

Referenced by WaveTrackAffordanceControls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnTextContextMenu()

void WaveTrackAffordanceControls::OnTextContextMenu ( AudacityProject project,
const wxPoint &  position 
)
overridevirtual

Implements TextEditDelegate.

Definition at line 543 of file WaveTrackAffordanceControls.cpp.

544{
545}

◆ OnTextCopy()

bool WaveTrackAffordanceControls::OnTextCopy ( AudacityProject project)

Definition at line 579 of file WaveTrackAffordanceControls.cpp.

580{
581 if (mTextEditHelper)
582 {
583 mTextEditHelper->CopySelectedText(project);
584 return true;
585 }
586 return false;
587}

References mTextEditHelper, and project.

Referenced by WaveChannelView::CopySelectedText().

Here is the caller graph for this function:

◆ OnTextCut()

bool WaveTrackAffordanceControls::OnTextCut ( AudacityProject project)

Definition at line 589 of file WaveTrackAffordanceControls.cpp.

590{
591 if (mTextEditHelper)
592 {
593 mTextEditHelper->CutSelectedText(project);
594 return true;
595 }
596 return false;
597}

References mTextEditHelper, and project.

Referenced by WaveChannelView::CutSelectedText().

Here is the caller graph for this function:

◆ OnTextEditCancelled()

void WaveTrackAffordanceControls::OnTextEditCancelled ( AudacityProject project)
overridevirtual

Implements TextEditDelegate.

Definition at line 533 of file WaveTrackAffordanceControls.cpp.

534{
536}

References ResetClipNameEdit().

Here is the call graph for this function:

◆ OnTextEditFinished()

void WaveTrackAffordanceControls::OnTextEditFinished ( AudacityProject project,
const wxString &  text 
)
overridevirtual

Implements TextEditDelegate.

Definition at line 519 of file WaveTrackAffordanceControls.cpp.

520{
521 if (auto interval = *mEditedInterval)
522 {
523 if (text != interval->GetName()) {
524 interval->SetName(text);
525
526 ProjectHistory::Get(*project).PushState(XO("Modified Clip Name"),
527 XO("Clip Name Edit"));
528 }
529 }
531}

References ProjectHistory::Get(), mEditedInterval, ProjectHistory::PushState(), ResetClipNameEdit(), and XO().

Here is the call graph for this function:

◆ OnTextModified()

void WaveTrackAffordanceControls::OnTextModified ( AudacityProject project,
const wxString &  text 
)
overridevirtual

Implements TextEditDelegate.

Definition at line 538 of file WaveTrackAffordanceControls.cpp.

539{
540 //Nothing to do
541}

◆ OnTextPaste()

bool WaveTrackAffordanceControls::OnTextPaste ( AudacityProject project)

Definition at line 599 of file WaveTrackAffordanceControls.cpp.

600{
601 if (mTextEditHelper)
602 {
603 mTextEditHelper->PasteSelectedText(project);
604 return true;
605 }
606 return false;
607}

References mTextEditHelper, and project.

Referenced by WaveChannelView::PasteText().

Here is the caller graph for this function:

◆ OnTextSelect()

bool WaveTrackAffordanceControls::OnTextSelect ( AudacityProject project)

Definition at line 609 of file WaveTrackAffordanceControls.cpp.

610{
611 if (mTextEditHelper)
612 {
613 mTextEditHelper->SelectAll();
614 return true;
615 }
616 return false;
617}

References mTextEditHelper.

Referenced by WaveChannelView::SelectAllText().

Here is the caller graph for this function:

◆ OnTrackListEvent()

void WaveTrackAffordanceControls::OnTrackListEvent ( const TrackListEvent evt)
private

Definition at line 553 of file WaveTrackAffordanceControls.cpp.

554{
557}
const Type mType
Definition: Track.h:837
@ SELECTION_CHANGE
Posted when the set of selected tracks changes.
Definition: Track.h:806

References ExitTextEditing(), TrackListEvent::mType, and TrackListEvent::SELECTION_CHANGE.

Referenced by WaveTrackAffordanceControls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetClipNameEdit()

void WaveTrackAffordanceControls::ResetClipNameEdit ( )
private

Definition at line 547 of file WaveTrackAffordanceControls.cpp.

548{
549 mTextEditHelper.reset();
550 mEditedInterval = {};
551}

References mEditedInterval, and mTextEditHelper.

Referenced by ExitTextEditing(), OnTextEditCancelled(), and OnTextEditFinished().

Here is the caller graph for this function:

◆ StartEditClipName()

bool WaveTrackAffordanceControls::StartEditClipName ( AudacityProject project,
IntervalIterator  it 
)
private

Starts in-place clip name editing or shows a Clip Name Edit dialog, depending on prefs.

Parameters
clipto be edited. Should belong to the same WaveTrack as returned by FindTrack()

Definition at line 364 of file WaveTrackAffordanceControls.cpp.

365{
366 bool useDialog{ false };
367 gPrefs->Read(wxT("/GUI/DialogForNameNewLabel"), &useDialog, false);
368
369 auto interval = *it;
370 if(!interval)
371 return false;
372
373 if (useDialog)
374 {
376 auto oldName = interval->GetName();
377 Command.mName = oldName;
378 auto result = Command.PromptUser(&GetProjectFrame(project));
379 if (result && Command.mName != oldName)
380 {
381 interval->SetName(Command.mName);
382 ProjectHistory::Get(project).PushState(XO("Modified Clip Name"),
383 XO("Clip Name Edit"));
384 }
385 }
386 else if(it != mEditedInterval)
387 {
388 if(!IsIntervalVisible(it))
389 return false;
390
391 if (mTextEditHelper)
392 mTextEditHelper->Finish(&project);
393
394 mEditedInterval = it;
395 mTextEditHelper = MakeTextEditHelper(interval->GetName());
396 }
397
398 return true;
399}
wxT("CloseDown"))
audacity::BasicSettings * gPrefs
Definition: Prefs.cpp:68
AUDACITY_DLL_API wxFrame & GetProjectFrame(AudacityProject &project)
Get the top-level window associated with the project (as a wxFrame only, when you do not need to use ...
bool IsIntervalVisible(const IntervalIterator &it) const noexcept
std::shared_ptr< TextEditHelper > MakeTextEditHelper(const wxString &text)
virtual bool Read(const wxString &key, bool *value) const =0
constexpr auto Command
Definition: MenuRegistry.h:456

References MenuRegistry::Command, ProjectHistory::Get(), GetProjectFrame(), gPrefs, IsIntervalVisible(), MakeTextEditHelper(), mEditedInterval, mTextEditHelper, project, ProjectHistory::PushState(), audacity::BasicSettings::Read(), wxT(), and XO().

Referenced by OnAffordanceClick(), and StartEditSelectedClipName().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ StartEditSelectedClipName()

void WaveTrackAffordanceControls::StartEditSelectedClipName ( AudacityProject project)

Definition at line 647 of file WaveTrackAffordanceControls.cpp.

648{
649 auto [track, it] = SelectedIntervalOfFocusedTrack(project);
650 if(track != FindTrack())
651 return;
653}

References CommonTrackPanelCell::FindTrack(), project, anonymous_namespace{WaveTrackAffordanceControls.cpp}::SelectedIntervalOfFocusedTrack(), and StartEditClipName().

Here is the call graph for this function:

◆ StartEditSelectedClipSpeed()

void WaveTrackAffordanceControls::StartEditSelectedClipSpeed ( AudacityProject project)

Definition at line 655 of file WaveTrackAffordanceControls.cpp.

657{
658 constexpr auto wholeInterval = false;
659 auto [track, it] = SelectedIntervalOfFocusedTrack(project, wholeInterval);
660
661 if (track != FindTrack())
662 return;
663
664 auto interval = *it;
665
666 if (!interval)
667 return;
668
670}
static PitchAndSpeedDialog & Get(AudacityProject &project)
PitchAndSpeedDialog & SetFocus(const std::optional< PitchAndSpeedDialogGroup > &group)
PitchAndSpeedDialog & Retarget(const std::shared_ptr< WaveTrack > &track, const WaveTrack::IntervalHolder &wideClip)

References CommonTrackPanelCell::FindTrack(), PitchAndSpeedDialog::Get(), project, PitchAndSpeedDialog::Retarget(), anonymous_namespace{WaveTrackAffordanceControls.cpp}::SelectedIntervalOfFocusedTrack(), and PitchAndSpeedDialog::SetFocus().

Here is the call graph for this function:

Member Data Documentation

◆ mAffordanceHandle

std::weak_ptr<WaveTrackAffordanceHandle> WaveTrackAffordanceControls::mAffordanceHandle
private

Definition at line 49 of file WaveTrackAffordanceControls.h.

Referenced by GetSelectedInterval(), and HitTest().

◆ mClipBorderAdjustHandle

std::weak_ptr<WaveClipAdjustBorderHandle> WaveTrackAffordanceControls::mClipBorderAdjustHandle
private

Definition at line 53 of file WaveTrackAffordanceControls.h.

Referenced by HitTest().

◆ mClipNameFont

wxFont WaveTrackAffordanceControls::mClipNameFont
private

Definition at line 58 of file WaveTrackAffordanceControls.h.

Referenced by Draw(), and MakeTextEditHelper().

◆ mEditedInterval

IntervalIterator WaveTrackAffordanceControls::mEditedInterval
private

◆ mFocusInterval

IntervalIterator WaveTrackAffordanceControls::mFocusInterval
private

Definition at line 45 of file WaveTrackAffordanceControls.h.

Referenced by GetSelectedInterval(), HitTest(), and OnAffordanceClick().

◆ mOverflowButtonHandle

std::weak_ptr<ClipOverflowButtonHandle> WaveTrackAffordanceControls::mOverflowButtonHandle
private

Definition at line 46 of file WaveTrackAffordanceControls.h.

Referenced by Draw(), and HitTest().

◆ mPitchButtonHandle

std::weak_ptr<ClipPitchAndSpeedButtonHandle> WaveTrackAffordanceControls::mPitchButtonHandle
private

Definition at line 47 of file WaveTrackAffordanceControls.h.

Referenced by HitTest().

◆ mResizeHandle

std::weak_ptr<TrackPanelResizeHandle> WaveTrackAffordanceControls::mResizeHandle
private

Definition at line 50 of file WaveTrackAffordanceControls.h.

◆ mSelectHandle

std::weak_ptr<SelectHandle> WaveTrackAffordanceControls::mSelectHandle
private

Definition at line 52 of file WaveTrackAffordanceControls.h.

Referenced by HitTest().

◆ mSelectionChangeSubscription

Observer::Subscription WaveTrackAffordanceControls::mSelectionChangeSubscription
private

Definition at line 124 of file WaveTrackAffordanceControls.h.

Referenced by WaveTrackAffordanceControls().

◆ mSpeedButtonHandle

std::weak_ptr<ClipPitchAndSpeedButtonHandle> WaveTrackAffordanceControls::mSpeedButtonHandle
private

Definition at line 48 of file WaveTrackAffordanceControls.h.

Referenced by HitTest().

◆ mTextEditHelper

std::shared_ptr<TextEditHelper> WaveTrackAffordanceControls::mTextEditHelper
private

◆ mTitleEditHandle

std::weak_ptr<WaveClipTitleEditHandle> WaveTrackAffordanceControls::mTitleEditHandle
private

Definition at line 51 of file WaveTrackAffordanceControls.h.

Referenced by HitTest().

◆ mTrackListEventSubscription

Observer::Subscription WaveTrackAffordanceControls::mTrackListEventSubscription
private

Definition at line 123 of file WaveTrackAffordanceControls.h.

Referenced by WaveTrackAffordanceControls().

◆ mVisibleIntervals

std::vector<IntervalIterator> WaveTrackAffordanceControls::mVisibleIntervals
private

Definition at line 61 of file WaveTrackAffordanceControls.h.

Referenced by Draw().


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