1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-01 16:19:43 +02:00

status bar state field. When you move to the menubar, the state field is no longer cleared. This was achieved by introducing a dummy field of width 0. When you first open a new audacity project, the state is stopped - previously the state only appeared after the first play/pause/etc command.

This commit is contained in:
David Bailes 2015-06-02 15:18:12 +01:00
parent 14b8607017
commit 391bd1691c
6 changed files with 38 additions and 23 deletions

View File

@ -781,7 +781,14 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
mMenuClose(false)
, mbInitializingScrollbar(false)
{
mStatusBar = CreateStatusBar(3);
// Note that the first field of the status bar is a dummy, and it's width is set
// to zero latter in the code. This field is needed for wxWidgets 2.8.12 because
// if you move to the menu bar, the first field of the menu bar is cleared, which
// is undesirable behaviour.
// In addition, the help strings of menu items are by default sent to the first
// field. Currently there are no such help strings, but it they were introduced, then
// there would need to be an event handler to send them to the appropriate field.
mStatusBar = CreateStatusBar(4);
wxGetApp().SetMissingAliasedFileWarningShouldShow(true);
@ -1014,11 +1021,12 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
mTrackFactory = new TrackFactory(mDirManager);
int widths[] = {GetControlToolBar()->WidthForStatusBar(), -2, -1};
mStatusBar->SetStatusWidths(3, widths);
int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -2, -1};
mStatusBar->SetStatusWidths(4, widths);
wxString msg = wxString::Format(_("Welcome to Audacity version %s"),
AUDACITY_VERSION_STRING);
mStatusBar->SetStatusText(msg, 1);
mStatusBar->SetStatusText(msg, mainStatusBarField);
mStatusBar->SetStatusText(GetControlToolBar()->StateForStatusBar(), stateStatusBarField);
mLastStatusUpdateTime = ::wxGetUTCTime();
mTimer = new wxTimer(this, AudacityProjectTimerID);
@ -3527,7 +3535,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
wxRemoveFile(safetyFileName);
mStatusBar->SetStatusText(wxString::Format(_("Saved %s"),
mFileName.c_str()), 1);
mFileName.c_str()), mainStatusBarField);
return true;
}
@ -4345,7 +4353,7 @@ void AudacityProject::OnTimer(wxTimerEvent& WXUNUSED(event))
else
msg.Printf(_("Out of disk space"));
mStatusBar->SetStatusText(msg, 1);
mStatusBar->SetStatusText(msg, mainStatusBarField);
}
}
else if(ODManager::IsInstanceCreated())
@ -4366,7 +4374,7 @@ void AudacityProject::OnTimer(wxTimerEvent& WXUNUSED(event))
msg.Printf(_("On-demand import and waveform calculation complete."));
mStatusBar->SetStatusText(msg, 1);
mStatusBar->SetStatusText(msg, mainStatusBarField);
}
else if(numTasks>1)
@ -4377,7 +4385,7 @@ void AudacityProject::OnTimer(wxTimerEvent& WXUNUSED(event))
ratioComplete*100.0);
mStatusBar->SetStatusText(msg, 1);
mStatusBar->SetStatusText(msg, mainStatusBarField);
}
}
}
@ -4566,7 +4574,7 @@ void AudacityProject::EditClipboardByLabel( WaveTrack::EditDestFunction action )
// TrackPanel callback method
void AudacityProject::TP_DisplayStatusMessage(wxString msg)
{
mStatusBar->SetStatusText(msg, 1);
mStatusBar->SetStatusText(msg, mainStatusBarField);
mLastStatusUpdateTime = ::wxGetUTCTime();
}
@ -4813,9 +4821,9 @@ void AudacityProject::OnAudioIORate(int rate)
display = wxString::Format(_("Actual Rate: %d"), rate);
int x, y;
mStatusBar->GetTextExtent(display, &x, &y);
int widths[] = {GetControlToolBar()->WidthForStatusBar(), -1, x+50};
mStatusBar->SetStatusWidths(3, widths);
mStatusBar->SetStatusText(display, 2);
int widths[] = {0, GetControlToolBar()->WidthForStatusBar(mStatusBar), -1, x+50};
mStatusBar->SetStatusWidths(4, widths);
mStatusBar->SetStatusText(display, rateStatusBarField);
}
void AudacityProject::OnAudioIOStartRecording()

View File

@ -109,6 +109,12 @@ enum PlayMode {
loopedPlay
};
enum StatusBarField {
stateStatusBarField = 1,
mainStatusBarField = 2,
rateStatusBarField = 3
};
// XML handler for <import> tag
class ImportXMLTagHandler : public XMLTagHandler
{

View File

@ -563,7 +563,7 @@ void ScreenFrame::DoCapture(wxString captureMode)
mCommand->SetParameter(wxT("CaptureMode"), captureMode);
if (!mCommand->Apply(mContext))
mStatus->SetStatusText(wxT("Capture failed!"), 1);
mStatus->SetStatusText(wxT("Capture failed!"), mainStatusBarField);
Show();
}

View File

@ -117,7 +117,7 @@ public:
{}
virtual void Update(wxString message)
{
mStatus.SetStatusText(message, 1);
mStatus.SetStatusText(message, mainStatusBarField);
}
};

View File

@ -1082,13 +1082,8 @@ void ControlToolBar::ClearCutPreviewTracks()
}
// works out the width of the field in the status bar needed for the state (eg play, record pause)
int ControlToolBar::WidthForStatusBar()
int ControlToolBar::WidthForStatusBar(wxStatusBar* const sb)
{
AudacityProject* p = GetActiveProject();
if (!p)
return 100; // dummy value to keep things happy before the project is fully created
wxStatusBar* sb = p->GetStatusBar();
int xMax = 0;
int x, y;
@ -1110,7 +1105,7 @@ int ControlToolBar::WidthForStatusBar()
return xMax + 30; // added constant needed because xMax isn't large enough for some reason, plus some space.
}
void ControlToolBar::UpdateStatusBar()
wxString ControlToolBar::StateForStatusBar()
{
wxString state;
@ -1129,6 +1124,11 @@ void ControlToolBar::UpdateStatusBar()
state.Append(wxT("."));
GetActiveProject()->GetStatusBar()->SetStatusText(state);
return state;
}
void ControlToolBar::UpdateStatusBar()
{
GetActiveProject()->GetStatusBar()->SetStatusText(StateForStatusBar(), stateStatusBarField);
}

View File

@ -85,7 +85,8 @@ class ControlToolBar:public ToolBar {
virtual void ReCreateButtons();
void RegenerateToolsTooltips();
int WidthForStatusBar();
int WidthForStatusBar(wxStatusBar* const);
wxString StateForStatusBar();
private: