Audacity  3.0.3
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
AdornedRulerPanel::QPHandle Class Referencefinal
Inheritance diagram for AdornedRulerPanel::QPHandle:
[legend]
Collaboration diagram for AdornedRulerPanel::QPHandle:
[legend]

Public Member Functions

 QPHandle (AdornedRulerPanel *pParent, wxCoord xx)
 
- Public Member Functions inherited from AdornedRulerPanel::CommonRulerHandle
 CommonRulerHandle (AdornedRulerPanel *pParent, wxCoord xx, MenuChoice menuChoice)
 
bool Clicked () const
 
- Public Member Functions inherited from UIHandle
virtual ~UIHandle ()=0
 
virtual bool HasRotation () const
 
virtual bool Rotate (bool forward)
 
virtual bool HasEscape () const
 
virtual bool Escape (AudacityProject *pProject)
 
virtual bool StopsOnKeystroke ()
 
virtual void OnProjectChange (AudacityProject *pProject)
 
Result GetChangeHighlight () const
 
void SetChangeHighlight (Result val)
 
- 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 Attributes

std::unique_ptr< SnapManagermSnapManager
 

Private Member Functions

Result Click (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 
Result Drag (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 
HitTestPreview Preview (const TrackPanelMouseState &state, AudacityProject *pProject) override
 
Result Release (const TrackPanelMouseEvent &event, AudacityProject *pProject, wxWindow *pParent) override
 
Result Cancel (AudacityProject *pProject) override
 

Private Attributes

SelectedRegion mOldSelection
 

Additional Inherited Members

- Public Types inherited from UIHandle
using Result = unsigned
 
using Cell = TrackPanelCell
 
- Static Public Member Functions inherited from AdornedRulerPanel::CommonRulerHandle
static UIHandle::Result NeedChangeHighlight (const CommonRulerHandle &oldState, const CommonRulerHandle &newState)
 
- Static Public Member Functions inherited from UIHandle
static UIHandle::Result NeedChangeHighlight (const UIHandle &, const UIHandle &)
 
- 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 Types inherited from AdornedRulerPanel::CommonRulerHandle
enum  Button { Button::None, Button::Left, Button::Right }
 
- Protected Member Functions inherited from AdornedRulerPanel::CommonRulerHandle
bool HandlesRightClick () override
 Whether the handle has any special right-button handling. More...
 
void Enter (bool, AudacityProject *) override
 
- Protected Attributes inherited from AdornedRulerPanel::CommonRulerHandle
wxWeakRef< AdornedRulerPanelmParent
 
wxCoord mX
 
MenuChoice mChoice
 
Button mClicked { Button::None }
 
- Protected Attributes inherited from UIHandle
Result mChangeHighlight { 0 }
 

Detailed Description

Definition at line 513 of file AdornedRulerPanel.cpp.

Constructor & Destructor Documentation

◆ QPHandle()

AdornedRulerPanel::QPHandle::QPHandle ( AdornedRulerPanel pParent,
wxCoord  xx 
)
inlineexplicit

Definition at line 517 of file AdornedRulerPanel.cpp.

518  : CommonRulerHandle( pParent, xx, MenuChoice::QuickPlay )
519  {
520  }

Member Function Documentation

◆ Cancel()

auto AdornedRulerPanel::QPHandle::Cancel ( AudacityProject pProject)
overrideprivatevirtual

Reimplemented from AdornedRulerPanel::CommonRulerHandle.

Definition at line 1652 of file AdornedRulerPanel.cpp.

1654 {
1655  auto result = CommonRulerHandle::Cancel(pProject);
1656 
1657  if (mClicked == Button::Left) {
1658  if( mParent ) {
1660  mParent->mMouseEventState = mesNone;
1661  mParent->SetPlayRegion(
1662  mParent->mOldPlayRegion.GetStart(), mParent->mOldPlayRegion.GetEnd());
1663  if (mParent->mOldPlayRegion.Locked()) {
1664  // Restore Locked Play region
1666  // and release local lock
1667  mParent->mOldPlayRegion.SetLocked( false );
1668  }
1669  }
1670  }
1671 
1672  return result;
1673 }

References ViewInfo::Get(), SelectUtilities::LockPlayRegion(), and ViewInfo::selectedRegion.

Here is the call graph for this function:

◆ Click()

auto AdornedRulerPanel::QPHandle::Click ( const TrackPanelMouseEvent event,
AudacityProject pProject 
)
overrideprivatevirtual

Reimplemented from AdornedRulerPanel::CommonRulerHandle.

Definition at line 1353 of file AdornedRulerPanel.cpp.

1355 {
1356  auto result = CommonRulerHandle::Click(event, pProject);
1357  if (!( result & RefreshCode::Cancelled )) {
1358  if (mClicked == Button::Left) {
1359  if (!(mParent && mParent->mQuickPlayEnabled))
1360  return RefreshCode::Cancelled;
1361 
1362  auto &scrubber = Scrubber::Get( *pProject );
1363  if(scrubber.HasMark()) {
1364  // We can't stop scrubbing yet (see comments in Bug 1391),
1365  // but we can pause it.
1366  ProjectAudioManager::Get( *pProject ).OnPause();
1367  }
1368 
1369  // Store the initial play region state
1370  const auto &viewInfo = ViewInfo::Get( *pProject );
1371  const auto &playRegion = viewInfo.playRegion;
1372  mParent->mOldPlayRegion = playRegion;
1373 
1374  // Save old selection, in case drag of selection is cancelled
1376 
1377  mParent->HandleQPClick( event.event, mX );
1378  mParent->HandleQPDrag( event.event, mX );
1379  }
1380  }
1381 
1382  return result;
1383 }

References RefreshCode::Cancelled, ViewInfo::Get(), ProjectAudioManager::Get(), Scrubber::Get(), ProjectAudioManager::OnPause(), and ViewInfo::selectedRegion.

Here is the call graph for this function:

◆ Drag()

auto AdornedRulerPanel::QPHandle::Drag ( const TrackPanelMouseEvent event,
AudacityProject pProject 
)
overrideprivatevirtual

Reimplemented from AdornedRulerPanel::CommonRulerHandle.

Definition at line 1422 of file AdornedRulerPanel.cpp.

1424 {
1425  auto result = CommonRulerHandle::Drag(event, pProject);
1426  if (!( result & RefreshCode::Cancelled )) {
1427  if (mClicked == Button::Left) {
1428  if ( mParent ) {
1429  mX = event.event.m_x;
1430  mParent->UpdateQuickPlayPos( mX, event.event.ShiftDown() );
1431  mParent->HandleQPDrag( event.event, mX );
1432  }
1433  }
1434  }
1435  return result;
1436 }

References RefreshCode::Cancelled.

◆ Preview()

auto AdornedRulerPanel::QPHandle::Preview ( const TrackPanelMouseState state,
AudacityProject pProject 
)
overrideprivatevirtual

Implements UIHandle.

Definition at line 1533 of file AdornedRulerPanel.cpp.

1536 {
1537  TranslatableString tooltip;
1538  if (mParent && mParent->mTimelineToolTip) {
1539  if (!mParent->mQuickPlayEnabled)
1540  tooltip = XO("Quick-Play disabled");
1541  else
1542  tooltip = XO("Quick-Play enabled");
1543  }
1544 
1545  TranslatableString message;
1546  auto &scrubber = Scrubber::Get( *pProject );
1547  const bool scrubbing = scrubber.HasMark();
1548  if (scrubbing)
1549  // Don't distinguish zones
1550  message = ScrubbingMessage(scrubber, false);
1551  else
1552  // message = Insert timeline status bar message here
1553  ;
1554 
1555  static wxCursor cursorHand{ wxCURSOR_HAND };
1556  static wxCursor cursorSizeWE{ wxCURSOR_SIZEWE };
1557 
1558  bool showArrows = false;
1559  if (mParent && mParent->mQuickPlayEnabled)
1560  showArrows =
1561  (mClicked == Button::Left)
1562  || mParent->IsWithinMarker(
1563  state.state.m_x, mParent->mOldPlayRegion.GetStart())
1564  || mParent->IsWithinMarker(
1565  state.state.m_x, mParent->mOldPlayRegion.GetEnd());
1566 
1567  return {
1568  message,
1569  showArrows ? &cursorSizeWE : &cursorHand,
1570  tooltip,
1571  };
1572 }

References Scrubber::Get(), anonymous_namespace{AdornedRulerPanel.cpp}::ScrubbingMessage(), TrackPanelMouseState::state, and XO.

Here is the call graph for this function:

◆ Release()

auto AdornedRulerPanel::QPHandle::Release ( const TrackPanelMouseEvent event,
AudacityProject pProject,
wxWindow *  pParent 
)
overrideprivatevirtual

Reimplemented from AdornedRulerPanel::CommonRulerHandle.

Definition at line 1574 of file AdornedRulerPanel.cpp.

1577 {
1578  // Keep a shared pointer to self. Otherwise *this might get deleted
1579  // in HandleQPRelease on Windows! Because there is an event-loop yield
1580  // stopping playback, which caused OnCaptureLost to be called, which caused
1581  // clearing of CellularPanel targets!
1582  auto saveMe = mParent->mQPCell->mHolder.lock();
1583 
1584  auto result = CommonRulerHandle::Release(event, pProject, pParent);
1585  if (!( result & RefreshCode::Cancelled )) {
1586  if (mClicked == Button::Left) {
1587  if ( mParent ) {
1588  mParent->HandleQPRelease( event.event );
1589  // Update the hot zones for cursor changes
1590  const auto &viewInfo = ViewInfo::Get( *pProject );
1591  const auto &playRegion = viewInfo.playRegion;
1592  mParent->mOldPlayRegion = playRegion;
1593  }
1594  }
1595  }
1596  return result;
1597 }

References RefreshCode::Cancelled, ViewInfo::Get(), and KeyboardCapture::Release().

Here is the call graph for this function:

Member Data Documentation

◆ mOldSelection

SelectedRegion AdornedRulerPanel::QPHandle::mOldSelection
private

Definition at line 541 of file AdornedRulerPanel.cpp.

◆ mSnapManager

std::unique_ptr<SnapManager> AdornedRulerPanel::QPHandle::mSnapManager

Definition at line 522 of file AdornedRulerPanel.cpp.


The documentation for this class was generated from the following file:
TranslatableString
Holds a msgid for the translation catalog; may also bind format arguments.
Definition: TranslatableString.h:32
ViewInfo::Get
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:212
Scrubber::Get
static Scrubber & Get(AudacityProject &project)
Definition: Scrubbing.cpp:201
ProjectAudioManager::Get
static ProjectAudioManager & Get(AudacityProject &project)
Definition: ProjectAudioManager.cpp:55
AdornedRulerPanel::CommonRulerHandle::mParent
wxWeakRef< AdornedRulerPanel > mParent
Definition: AdornedRulerPanel.cpp:503
AdornedRulerPanel::mesNone
@ mesNone
Definition: AdornedRulerPanel.h:169
RefreshCode::Cancelled
@ Cancelled
Definition: RefreshCode.h:23
XO
#define XO(s)
Definition: Internat.h:31
AdornedRulerPanel::CommonRulerHandle::Button::Left
@ Left
ViewInfo::selectedRegion
NotifyingSelectedRegion selectedRegion
Definition: ViewInfo.h:207
AdornedRulerPanel::CommonRulerHandle::Cancel
Result Cancel(AudacityProject *pProject) override
Definition: AdornedRulerPanel.cpp:492
AdornedRulerPanel::CommonRulerHandle::Release
Result Release(const TrackPanelMouseEvent &event, AudacityProject *, wxWindow *) override
Definition: AdornedRulerPanel.cpp:482
AdornedRulerPanel::MenuChoice::QuickPlay
@ QuickPlay
SelectUtilities::LockPlayRegion
void LockPlayRegion(AudacityProject &project)
Definition: SelectUtilities.cpp:162
AdornedRulerPanel::CommonRulerHandle::mX
wxCoord mX
Definition: AdornedRulerPanel.cpp:505
anonymous_namespace{AdornedRulerPanel.cpp}::ScrubbingMessage
const TranslatableString ScrubbingMessage(const Scrubber &scrubber, bool clicked)
Definition: AdornedRulerPanel.cpp:1136
AdornedRulerPanel::CommonRulerHandle::CommonRulerHandle
CommonRulerHandle(AdornedRulerPanel *pParent, wxCoord xx, MenuChoice menuChoice)
Definition: AdornedRulerPanel.cpp:448
AdornedRulerPanel::CommonRulerHandle::Click
Result Click(const TrackPanelMouseEvent &event, AudacityProject *) override
Definition: AdornedRulerPanel.cpp:469
AdornedRulerPanel::QPHandle::mOldSelection
SelectedRegion mOldSelection
Definition: AdornedRulerPanel.cpp:541
AdornedRulerPanel::CommonRulerHandle::Drag
Result Drag(const TrackPanelMouseEvent &, AudacityProject *) override
Definition: AdornedRulerPanel.cpp:476
AdornedRulerPanel::CommonRulerHandle::mClicked
Button mClicked
Definition: AdornedRulerPanel.cpp:510
TrackPanelMouseEvent::event
wxMouseEvent & event
Definition: TrackPanelMouseEvent.h:58
TrackPanelMouseState::state
wxMouseState & state
Definition: TrackPanelMouseEvent.h:38
ProjectAudioManager::OnPause
void OnPause()
Definition: ProjectAudioManager.cpp:960