1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/**********************************************************************
Audacity: A Digital Audio Editor
ProjectStatus.h
Paul Licameli
**********************************************************************/
#ifndef __AUDACITY_PROJECT_STATUS__
#define __AUDACITY_PROJECT_STATUS__
#endif
#include <utility>
#include <vector>
#include "ClientData.h" // to inherit
#include "Prefs.h"
#include "Observer.h"
class AudacityProject;
class wxWindow;
enum StatusBarField : int {
stateStatusBarField = 1,
mainStatusBarField = 2,
rateStatusBarField = 3,
nStatusBarFields = 3
};
class PROJECT_API ProjectStatus final
: public ClientData::Base
, public PrefsListener
, public Observer::Publisher<StatusBarField>
{
public:
static ProjectStatus &Get( AudacityProject &project );
static const ProjectStatus &Get( const AudacityProject &project );
explicit ProjectStatus( AudacityProject &project );
ProjectStatus( const ProjectStatus & ) = delete;
ProjectStatus &operator= ( const ProjectStatus & ) = delete;
~ProjectStatus() override;
// Type of a function to report translatable strings, and also report an extra
// margin, to request that the corresponding field of the status bar should
// be wide enough to contain any of those strings plus the margin.
using StatusWidthResult = std::pair< std::vector<TranslatableString>, unsigned >;
using StatusWidthFunction = std::function<
StatusWidthResult( const AudacityProject &, StatusBarField )
>;
using StatusWidthFunctions = std::vector< StatusWidthFunction >;
// Typically a static instance of this struct is used.
struct PROJECT_API RegisteredStatusWidthFunction
{
explicit
RegisteredStatusWidthFunction( const StatusWidthFunction &function );
};
static const StatusWidthFunctions &GetStatusWidthFunctions();
const TranslatableString &Get( StatusBarField field = mainStatusBarField ) const;
void Set(const TranslatableString &msg,
StatusBarField field = mainStatusBarField);
// PrefsListener implementation
void UpdatePrefs() override;
private:
AudacityProject &mProject;
TranslatableString mLastStatusMessages[ nStatusBarFields ];
};
|