mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-05 14:18:53 +02:00
Merge branch 'master' into HEAD
This commit is contained in:
commit
d58ac8d5cb
@ -82,7 +82,7 @@ from there. Audacity will look for a file called "Pause.png".
|
||||
DEFINE_IMAGE( bmpVolumeSlider, wxImage( 100, 28 ), wxT("VolumeSlider"));
|
||||
DEFINE_IMAGE( bmpVolumeSliderThumb, wxImage( 10, 28 ), wxT("VolumeSliderThumb"));
|
||||
DEFINE_IMAGE( bmpSliderThumb, wxImage( 11, 14 ), wxT("SliderThumb"));
|
||||
DEFINE_IMAGE( bmpToggleScrubBar, wxImage( 20, 20 ), wxT("ToggleScrubBar"));
|
||||
DEFINE_IMAGE( bmpToggleScrubRuler, wxImage( 20, 20 ), wxT("ToggleScrubBar"));
|
||||
|
||||
SET_THEME_FLAGS( resFlagNone );
|
||||
DEFINE_IMAGE( bmpMacUpButton, wxImage( 36, 36 ), wxT("MacUpButton"));
|
||||
|
@ -97,6 +97,7 @@ enum CommandFlag : unsigned long long
|
||||
NotMinimizedFlag = 0x100000000ULL, // prl
|
||||
PausedFlag = 0x200000000ULL, // jkc
|
||||
NotPausedFlag = 0x400000000ULL, // jkc
|
||||
HasWaveDataFlag = 0x800000000ULL, // jkc
|
||||
|
||||
NoFlagsSpecifed = ~0ULL
|
||||
};
|
||||
|
@ -728,7 +728,7 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
c->AddCheck(wxT("ShowTranscriptionTB"), _("Tra&nscription Toolbar"), FN(OnShowTranscriptionToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag);
|
||||
/* i18n-hint: Clicking this menu item shows the toolbar with the big buttons on it (play record etc)*/
|
||||
c->AddCheck(wxT("ShowTransportTB"), _("&Transport Toolbar"), FN(OnShowTransportToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag);
|
||||
/* i18n-hint: Clicking this menu item shows the toolbar that enables Scrub or Seek playback and Scrub Bar*/
|
||||
/* i18n-hint: Clicking this menu item shows the toolbar that enables Scrub or Seek playback and Scrub Ruler*/
|
||||
c->AddCheck(wxT("ShowScrubbingTB"), _("Scru&b Toolbar"), FN(OnShowScrubbingToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag);
|
||||
|
||||
c->AddSeparator();
|
||||
@ -1736,6 +1736,8 @@ CommandFlag AudacityProject::GetUpdateFlags()
|
||||
flags |= WaveTracksSelectedFlag;
|
||||
}
|
||||
}
|
||||
if( t->GetEndTime() > t->GetStartTime() )
|
||||
flags |= HasWaveDataFlag;
|
||||
}
|
||||
#if defined(USE_MIDI)
|
||||
else if (t->GetKind() == Track::Note) {
|
||||
|
@ -110,9 +110,9 @@ void ScrubbingToolBar::Populate()
|
||||
_("Scrub"), true);
|
||||
AddButton(bmpSeek, bmpSeek, bmpSeekDisabled, STBSeekID,
|
||||
_("Seek"), true);
|
||||
AddButton(bmpToggleScrubBar, bmpToggleScrubBar, bmpToggleScrubBar,
|
||||
STBBarID,
|
||||
_("Scrub bar"), true);
|
||||
AddButton(bmpToggleScrubRuler, bmpToggleScrubRuler, bmpToggleScrubRuler,
|
||||
STBRulerID,
|
||||
_("Scrub Ruler"), true);
|
||||
|
||||
|
||||
RegenerateTooltips();
|
||||
@ -173,11 +173,11 @@ void ScrubbingToolBar::RegenerateTooltips()
|
||||
fn(*seekButton, label, wxT("Seek"));
|
||||
|
||||
label = (
|
||||
project->GetRulerPanel()->ShowingScrubBar()
|
||||
? _("Hide Scrub Bar")
|
||||
: _("Show Scrub Bar")
|
||||
project->GetRulerPanel()->ShowingScrubRuler()
|
||||
? _("Hide Scrub Ruler")
|
||||
: _("Show Scrub Ruler")
|
||||
);
|
||||
fn(*mButtons[STBBarID], label, wxT("ToggleScrubBar"));
|
||||
fn(*mButtons[STBRulerID], label, wxT("ToggleScrubRuler"));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -197,8 +197,8 @@ void ScrubbingToolBar::OnButton(wxCommandEvent &event)
|
||||
case STBSeekID:
|
||||
scrubber.OnSeek(event);
|
||||
break;
|
||||
case STBBarID:
|
||||
scrubber.OnToggleScrubBar(event);
|
||||
case STBRulerID:
|
||||
scrubber.OnToggleScrubRuler(event);
|
||||
break;
|
||||
default:
|
||||
wxASSERT(false);
|
||||
@ -244,9 +244,9 @@ void ScrubbingToolBar::EnableDisableButtons()
|
||||
seekButton->Disable();
|
||||
}
|
||||
|
||||
const auto barButton = mButtons[STBBarID];
|
||||
const auto barButton = mButtons[STBRulerID];
|
||||
barButton->Enable();
|
||||
if (p->GetRulerPanel()->ShowingScrubBar())
|
||||
if (p->GetRulerPanel()->ShowingScrubRuler())
|
||||
barButton->PushDown();
|
||||
else
|
||||
barButton->PopUp();
|
||||
|
@ -30,7 +30,7 @@ class AButton;
|
||||
enum {
|
||||
STBScrubID,
|
||||
STBSeekID,
|
||||
STBBarID,
|
||||
STBRulerID,
|
||||
|
||||
STBNumButtons,
|
||||
STBFirstButton = STBScrubID
|
||||
|
@ -233,18 +233,18 @@ namespace {
|
||||
"Seeking" is normal speed playback but with skips, ...
|
||||
*/
|
||||
{ wxT("Scrub"), XO("&Scrub"), XO("Scrubbing"),
|
||||
CaptureNotBusyFlag,
|
||||
CaptureNotBusyFlag | HasWaveDataFlag,
|
||||
&Scrubber::OnScrub, false, &Scrubber::Scrubs,
|
||||
},
|
||||
|
||||
{ wxT("Seek"), XO("See&k"), XO("Seeking"),
|
||||
CaptureNotBusyFlag,
|
||||
CaptureNotBusyFlag | HasWaveDataFlag,
|
||||
&Scrubber::OnSeek, true, &Scrubber::Seeks,
|
||||
},
|
||||
|
||||
{ wxT("ToggleScrubBar"), XO("Scrub Bar"), XO(""),
|
||||
{ wxT("ToggleScrubRuler"), XO("Scrub Ruler"), XO(""),
|
||||
AlwaysEnabledFlag,
|
||||
&Scrubber::OnToggleScrubBar, true, &Scrubber::ShowsBar,
|
||||
&Scrubber::OnToggleScrubRuler, true, &Scrubber::ShowsBar,
|
||||
},
|
||||
};
|
||||
|
||||
@ -556,7 +556,7 @@ void Scrubber::StopScrubbing()
|
||||
|
||||
bool Scrubber::ShowsBar() const
|
||||
{
|
||||
return mProject->GetRulerPanel()->ShowingScrubBar();
|
||||
return mProject->GetRulerPanel()->ShowingScrubRuler();
|
||||
}
|
||||
|
||||
bool Scrubber::IsScrubbing() const
|
||||
@ -859,6 +859,8 @@ Scrubber &ScrubbingOverlay::GetScrubber()
|
||||
|
||||
void Scrubber::DoScrub(bool seek)
|
||||
{
|
||||
if( !CanScrub() )
|
||||
return;
|
||||
const bool wasScrubbing = HasStartedScrubbing() || IsScrubbing();
|
||||
const bool scroll = TracksPrefs::GetPinnedHeadPreference();
|
||||
if (!wasScrubbing) {
|
||||
@ -915,9 +917,9 @@ void Scrubber::OnSeek(wxCommandEvent&)
|
||||
CheckMenuItems();
|
||||
}
|
||||
|
||||
void Scrubber::OnToggleScrubBar(wxCommandEvent&)
|
||||
void Scrubber::OnToggleScrubRuler(wxCommandEvent&)
|
||||
{
|
||||
mProject->GetRulerPanel()->OnToggleScrubBar();
|
||||
mProject->GetRulerPanel()->OnToggleScrubRuler();
|
||||
const auto toolbar = mProject->GetToolManager()->GetToolBar(ScrubbingBarID);
|
||||
toolbar->EnableDisableButtons();
|
||||
CheckMenuItems();
|
||||
@ -928,7 +930,7 @@ enum { CMD_ID = 8000 };
|
||||
BEGIN_EVENT_TABLE(Scrubber, wxEvtHandler)
|
||||
EVT_MENU(CMD_ID, Scrubber::OnScrub)
|
||||
EVT_MENU(CMD_ID + 1, Scrubber::OnSeek)
|
||||
EVT_MENU(CMD_ID + 2, Scrubber::OnToggleScrubBar)
|
||||
EVT_MENU(CMD_ID + 2, Scrubber::OnToggleScrubRuler)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
BEGIN_EVENT_TABLE(Scrubber::Forwarder, wxEvtHandler)
|
||||
|
@ -124,7 +124,7 @@ public:
|
||||
void OnScrubOrSeek(bool seek);
|
||||
void OnScrub(wxCommandEvent&);
|
||||
void OnSeek(wxCommandEvent&);
|
||||
void OnToggleScrubBar(wxCommandEvent&);
|
||||
void OnToggleScrubRuler(wxCommandEvent&);
|
||||
|
||||
// A string to put in the leftmost part of the status bar
|
||||
// when scrub or seek is in progress, or else empty.
|
||||
|
@ -94,6 +94,17 @@ void Grabber::SendEvent(wxEventType type, const wxPoint & pos, bool escaping)
|
||||
parent->GetEventHandler()->AddPendingEvent(e);
|
||||
}
|
||||
|
||||
void Grabber::SetAsSpacer( bool bIsSpacer ) {
|
||||
if( mAsSpacer != bIsSpacer ){
|
||||
// HACK: Use a wider rectangle to also cover one pixel of space just to the right.
|
||||
wxSize siz = GetSize();
|
||||
siz.IncBy( bIsSpacer ? 1:-1, 0 );
|
||||
SetSize( siz );
|
||||
}
|
||||
mAsSpacer = bIsSpacer;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Draw the grabber
|
||||
//
|
||||
@ -107,8 +118,14 @@ void Grabber::DrawGrabber( wxDC & dc )
|
||||
int y, left, right, top, bottom;
|
||||
|
||||
#ifndef EXPERIMENTAL_THEMING
|
||||
|
||||
AColor::Medium(&dc, mOver );
|
||||
dc.DrawRectangle(r);
|
||||
|
||||
// HACK: We used a wider rectangle to also cover one pixel of space just to the right.
|
||||
if( mAsSpacer )
|
||||
r.width -= 1;
|
||||
|
||||
#else
|
||||
// Paint the background
|
||||
if( mOver )
|
||||
@ -126,6 +143,7 @@ void Grabber::DrawGrabber( wxDC & dc )
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __WXMAC__
|
||||
|
||||
// Add a box
|
||||
|
@ -111,7 +111,7 @@ class Grabber final : public wxWindow
|
||||
bool AcceptsFocusFromKeyboard() const override {return false;}
|
||||
|
||||
void PushButton(bool state);
|
||||
void SetAsSpacer( bool bIsSpacer ) { mAsSpacer = bIsSpacer;};
|
||||
void SetAsSpacer( bool bIsSpacer );
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -1911,7 +1911,7 @@ enum {
|
||||
OnTimelineToolTipID,
|
||||
OnAutoScrollID,
|
||||
OnLockPlayRegionID,
|
||||
OnScrubBarID,
|
||||
OnScrubRulerID,
|
||||
|
||||
OnTogglePinnedStateID,
|
||||
};
|
||||
@ -1928,7 +1928,7 @@ BEGIN_EVENT_TABLE(AdornedRulerPanel, OverlayPanel)
|
||||
EVT_MENU(OnTimelineToolTipID, AdornedRulerPanel::OnTimelineToolTips)
|
||||
EVT_MENU(OnAutoScrollID, AdornedRulerPanel::OnAutoScroll)
|
||||
EVT_MENU(OnLockPlayRegionID, AdornedRulerPanel::OnLockPlayRegion)
|
||||
EVT_MENU(OnScrubBarID, AdornedRulerPanel::OnToggleScrubBarFromMenu)
|
||||
EVT_MENU(OnScrubRulerID, AdornedRulerPanel::OnToggleScrubRulerFromMenu)
|
||||
|
||||
// Pop up menus on Windows
|
||||
EVT_CONTEXT_MENU(AdornedRulerPanel::OnContextMenu)
|
||||
@ -2346,12 +2346,15 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
|
||||
mProject->GetScrubber().CanScrub() &&
|
||||
mShowScrubbing &&
|
||||
mScrubZone.Contains(position);
|
||||
const bool inQPZone =
|
||||
(!inScrubZone) && mInner.Contains(position);
|
||||
|
||||
const StatusChoice zone =
|
||||
evt.Leaving()
|
||||
? StatusChoice::Leaving
|
||||
: inScrubZone
|
||||
? StatusChoice::EnteringScrubZone
|
||||
: mInner.Contains(position)
|
||||
: inQPZone
|
||||
? StatusChoice::EnteringQP
|
||||
: StatusChoice::NoChange;
|
||||
const bool changeInZone = (zone != mPrevZone);
|
||||
@ -2498,9 +2501,11 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
|
||||
}
|
||||
|
||||
if (evt.LeftDown()) {
|
||||
HandleQPClick(evt, mousePosX);
|
||||
HandleQPDrag(evt, mousePosX);
|
||||
ShowQuickPlayIndicator();
|
||||
if( inQPZone ){
|
||||
HandleQPClick(evt, mousePosX);
|
||||
HandleQPDrag(evt, mousePosX);
|
||||
ShowQuickPlayIndicator();
|
||||
}
|
||||
}
|
||||
else if (evt.LeftIsDown() && HasCapture()) {
|
||||
HandleQPDrag(evt, mousePosX);
|
||||
@ -2510,7 +2515,7 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
|
||||
HandleQPRelease(evt);
|
||||
ShowQuickPlayIndicator();
|
||||
}
|
||||
else // if (!inScrubZone)
|
||||
else // if (!inScrubZone)
|
||||
ShowQuickPlayIndicator();
|
||||
}
|
||||
}
|
||||
@ -2803,13 +2808,13 @@ void AdornedRulerPanel::UpdateStatusBarAndTooltips(StatusChoice choice)
|
||||
// This version toggles ruler state indirectly via the scrubber
|
||||
// to ensure that all the places where the state is shown update.
|
||||
// For example buttons and menus must update.
|
||||
void AdornedRulerPanel::OnToggleScrubBarFromMenu(wxCommandEvent& Evt)
|
||||
void AdornedRulerPanel::OnToggleScrubRulerFromMenu(wxCommandEvent& Evt)
|
||||
{
|
||||
auto &scrubber = mProject->GetScrubber();
|
||||
scrubber.OnToggleScrubBar( Evt );
|
||||
scrubber.OnToggleScrubRuler( Evt );
|
||||
}
|
||||
|
||||
void AdornedRulerPanel::OnToggleScrubBar(/*wxCommandEvent&*/)
|
||||
void AdornedRulerPanel::OnToggleScrubRuler(/*wxCommandEvent&*/)
|
||||
{
|
||||
mShowScrubbing = !mShowScrubbing;
|
||||
WriteScrubEnabledPref(mShowScrubbing);
|
||||
@ -2925,11 +2930,11 @@ void AdornedRulerPanel::ShowMenu(const wxPoint & pos)
|
||||
prlitem = rulerMenu.Append(OnLockPlayRegionID, _("Unlock Play Region"));
|
||||
prlitem->Enable(mProject->IsPlayRegionLocked() || (mPlayRegionStart != mPlayRegionEnd));
|
||||
|
||||
wxMenuItem *baritem;
|
||||
wxMenuItem *ruleritem;
|
||||
if (mShowScrubbing)
|
||||
baritem = rulerMenu.Append(OnScrubBarID, _("Disable Scrub Bar"));
|
||||
ruleritem = rulerMenu.Append(OnScrubRulerID, _("Disable Scrub Ruler"));
|
||||
else
|
||||
baritem = rulerMenu.Append(OnScrubBarID, _("Enable Scrub Bar"));
|
||||
ruleritem = rulerMenu.Append(OnScrubRulerID, _("Enable Scrub Ruler"));
|
||||
|
||||
PopupMenu(&rulerMenu, pos);
|
||||
}
|
||||
|
@ -329,9 +329,9 @@ public:
|
||||
void HideQuickPlayIndicator( bool repaint_all=false);
|
||||
void UpdateQuickPlayPos(wxCoord &mousPosX);
|
||||
|
||||
bool ShowingScrubBar() const { return mShowScrubbing; }
|
||||
void OnToggleScrubBar(/*wxCommandEvent& */);
|
||||
void OnToggleScrubBarFromMenu(wxCommandEvent& );
|
||||
bool ShowingScrubRuler() const { return mShowScrubbing; }
|
||||
void OnToggleScrubRuler(/*wxCommandEvent& */);
|
||||
void OnToggleScrubRulerFromMenu(wxCommandEvent& );
|
||||
void SetPanelSize();
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user