1
0
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:
Paul Licameli 2016-08-22 21:45:32 -04:00
commit d58ac8d5cb
11 changed files with 68 additions and 40 deletions

View File

@ -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"));

View File

@ -97,6 +97,7 @@ enum CommandFlag : unsigned long long
NotMinimizedFlag = 0x100000000ULL, // prl
PausedFlag = 0x200000000ULL, // jkc
NotPausedFlag = 0x400000000ULL, // jkc
HasWaveDataFlag = 0x800000000ULL, // jkc
NoFlagsSpecifed = ~0ULL
};

View File

@ -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) {

View File

@ -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();

View File

@ -30,7 +30,7 @@ class AButton;
enum {
STBScrubID,
STBSeekID,
STBBarID,
STBRulerID,
STBNumButtons,
STBFirstButton = STBScrubID

View File

@ -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)

View File

@ -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.

View File

@ -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

View File

@ -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:

View File

@ -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);
}

View File

@ -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();