forked from Sneeds-Feed-and-Seed/sneedacity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProjectStatus.cpp
86 lines (68 loc) · 2.12 KB
/
ProjectStatus.cpp
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
75
76
77
78
79
80
81
82
83
84
85
86
/**********************************************************************
Sneedacity: A Digital Audio Editor
ProjectStatus.h
Paul Licameli
**********************************************************************/
#include "ProjectStatus.h"
#include "Project.h"
wxDEFINE_EVENT(EVT_PROJECT_STATUS_UPDATE, wxCommandEvent);
static const SneedacityProject::AttachedObjects::RegisteredFactory key{
[]( SneedacityProject &parent ){
return std::make_shared< ProjectStatus >( parent );
}
};
ProjectStatus &ProjectStatus::Get( SneedacityProject &project )
{
return project.AttachedObjects::Get< ProjectStatus >( key );
}
const ProjectStatus &ProjectStatus::Get( const SneedacityProject &project )
{
return Get( const_cast< SneedacityProject & >( project ) );
}
ProjectStatus::ProjectStatus( SneedacityProject &project )
: mProject{ project }
{
}
ProjectStatus::~ProjectStatus() = default;
namespace
{
ProjectStatus::StatusWidthFunctions &statusWidthFunctions()
{
static ProjectStatus::StatusWidthFunctions theFunctions;
return theFunctions;
}
}
ProjectStatus::RegisteredStatusWidthFunction::RegisteredStatusWidthFunction(
const StatusWidthFunction &function )
{
statusWidthFunctions().emplace_back( function );
}
auto ProjectStatus::GetStatusWidthFunctions() -> const StatusWidthFunctions &
{
return statusWidthFunctions();
}
const TranslatableString &ProjectStatus::Get( StatusBarField field ) const
{
return mLastStatusMessages[ field - 1 ];
}
void ProjectStatus::Set(const TranslatableString &msg, StatusBarField field )
{
auto &project = mProject;
auto &lastMessage = mLastStatusMessages[ field - 1 ];
// compare full translations not msgids!
if ( msg.Translation() != lastMessage.Translation() ) {
lastMessage = msg;
wxCommandEvent evt{ EVT_PROJECT_STATUS_UPDATE };
evt.SetInt( field );
project.ProcessEvent( evt );
}
}
void ProjectStatus::UpdatePrefs()
{
auto &project = mProject;
for (auto field = 1; field <= nStatusBarFields; field++) {
wxCommandEvent evt{ EVT_PROJECT_STATUS_UPDATE };
evt.SetInt( field );
project.ProcessEvent( evt );
}
}