Audacity 3.2.0
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
RealtimeEffectStateUI Class Referencefinal

UI state for realtime effect. More...

#include <RealtimeEffectStateUI.h>

Inheritance diagram for RealtimeEffectStateUI:
[legend]
Collaboration diagram for RealtimeEffectStateUI:
[legend]

Public Member Functions

 RealtimeEffectStateUI (RealtimeEffectState &state)
 
 ~RealtimeEffectStateUI () override
 
bool IsShown () const noexcept
 
void Show (AudacityProject &project)
 
void Hide (AudacityProject *project=nullptr)
 
void Toggle (AudacityProject &project)
 
void UpdateTrackData (const Track &track)
 
void AutoSave (AudacityProject &project)
 
- Public Member Functions inherited from ClientData::Base
virtual ~Base ()
 

Static Public Member Functions

static RealtimeEffectStateUIGet (RealtimeEffectState &state)
 
static const RealtimeEffectStateUIGet (const RealtimeEffectState &state)
 

Private Member Functions

void UpdateTitle ()
 
void OnClose (wxCloseEvent &evt)
 

Private Attributes

RealtimeEffectStatemRealtimeEffectState
 
wxWeakRef< EffectUIHostmEffectUIHost
 
TranslatableString mEffectName
 
wxString mTrackName
 
AudacityProjectmpProject {}
 
Observer::Subscription mProjectWindowDestroyedSubscription
 
Observer::Subscription mParameterChangedSubscription
 

Detailed Description

UI state for realtime effect.

Definition at line 29 of file RealtimeEffectStateUI.h.

Constructor & Destructor Documentation

◆ RealtimeEffectStateUI()

RealtimeEffectStateUI::RealtimeEffectStateUI ( RealtimeEffectState state)
explicit

Definition at line 38 of file RealtimeEffectStateUI.cpp.

40{
41}
RealtimeEffectState & mRealtimeEffectState

◆ ~RealtimeEffectStateUI()

RealtimeEffectStateUI::~RealtimeEffectStateUI ( )
override

Definition at line 43 of file RealtimeEffectStateUI.cpp.

44{
45 Hide();
46}
void Hide(AudacityProject *project=nullptr)

References Hide().

Here is the call graph for this function:

Member Function Documentation

◆ AutoSave()

void RealtimeEffectStateUI::AutoSave ( AudacityProject project)

Definition at line 180 of file RealtimeEffectStateUI.cpp.

181{
183}
static result_type Call(Arguments &&...arguments)
Null check of the installed function is done for you.

References GlobalHook< AutoSave, void(AudacityProject &) >::Call().

Referenced by OnClose().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Get() [1/2]

const RealtimeEffectStateUI & RealtimeEffectStateUI::Get ( const RealtimeEffectState state)
static

Definition at line 151 of file RealtimeEffectStateUI.cpp.

152{
153 return Get(const_cast<RealtimeEffectState&>(state));
154}
static RealtimeEffectStateUI & Get(RealtimeEffectState &state)

References Get().

Here is the call graph for this function:

◆ Get() [2/2]

RealtimeEffectStateUI & RealtimeEffectStateUI::Get ( RealtimeEffectState state)
static

Definition at line 145 of file RealtimeEffectStateUI.cpp.

146{
148}
Subclass & Get(const RegisteredFactory &key)
Get reference to an attachment, creating on demand if not present, down-cast it to Subclass.
Definition: ClientData.h:309
UI state for realtime effect.
const RealtimeEffectState::RegisteredFactory realtimeEffectStateUIFactory

References ClientData::Site< Host, ClientData, ObjectCopyingPolicy, Pointer, ObjectLockingPolicy, RegistryLockingPolicy >::Get(), and anonymous_namespace{RealtimeEffectStateUI.cpp}::realtimeEffectStateUIFactory.

Referenced by Get(), RealtimeEffectListWindow::OnEffectListItemChange(), anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectControl::OnOptionsClicked(), anonymous_namespace{RealtimeEffectPanel.cpp}::RealtimeEffectControl::RemoveFromList(), and anonymous_namespace{RealtimeEffectPanel.cpp}::VisitRealtimeEffectStateUIs().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Hide()

void RealtimeEffectStateUI::Hide ( AudacityProject project = nullptr)

Definition at line 119 of file RealtimeEffectStateUI.cpp.

120{
121 if (mEffectUIHost != nullptr)
122 {
123 mpProject = project; // May reassign as null to skip autosave in OnClose
124 // EffectUIHost calls Destroy in OnClose handler
125 mEffectUIHost->Close();
126 mEffectUIHost = {};
127 }
128}
wxWeakRef< EffectUIHost > mEffectUIHost
AudacityProject * mpProject

References mEffectUIHost, and mpProject.

Referenced by Show(), Toggle(), and ~RealtimeEffectStateUI().

Here is the caller graph for this function:

◆ IsShown()

bool RealtimeEffectStateUI::IsShown ( ) const
noexcept

Definition at line 48 of file RealtimeEffectStateUI.cpp.

49{
50 return mEffectUIHost != nullptr;
51}

References mEffectUIHost.

Referenced by Toggle().

Here is the caller graph for this function:

◆ OnClose()

void RealtimeEffectStateUI::OnClose ( wxCloseEvent &  evt)
private

Definition at line 185 of file RealtimeEffectStateUI.cpp.

186{
187 auto next = GetNextHandler();
188 mEffectUIHost->RemoveEventHandler(this);
189 auto pProject = mpProject;
190 mpProject = nullptr;
191 if (pProject)
192 AutoSave(*pProject);
193
194 // Pass the event through to the dialog
195 if (next)
196 next->ProcessEvent(evt);
197}
void AutoSave(AudacityProject &project)

References AutoSave(), mEffectUIHost, and mpProject.

Here is the call graph for this function:

◆ Show()

void RealtimeEffectStateUI::Show ( AudacityProject project)

Definition at line 53 of file RealtimeEffectStateUI.cpp.

54{
55 if (mEffectUIHost != nullptr && mEffectUIHost->IsShown())
56 {
57 // Bring the host to front
58 mEffectUIHost->Raise();
59 return;
60 }
61
62 const auto ID = mRealtimeEffectState.GetID();
63 const auto effectPlugin = EffectManager::Get().GetEffect(ID);
64
65 if (effectPlugin == nullptr)
66 return;
67
68 const auto client = dynamic_cast<EffectUIServices *>(effectPlugin);
69
70 // Effect has no client interface
71 if (client == nullptr)
72 return;
73
74 auto& projectWindow = ProjectWindow::Get(project);
75
76 std::shared_ptr<EffectInstance> pInstance;
77
78 auto access = mRealtimeEffectState.GetAccess();
79
80 // EffectUIHost invokes shared_from_this on access
82 &projectWindow, project, *effectPlugin, *client, pInstance, *access,
83 mRealtimeEffectState.shared_from_this()));
84
85 if (!dlg->Initialize())
86 return;
87
88 // Dialog is owned by its parent now!
89 mEffectUIHost = dlg.release();
90
92
93 client->ShowClientInterface(*effectPlugin,
94 projectWindow, *mEffectUIHost, mEffectUIHost->GetEditor(), false);
95
96 // The dialog was modal? That shouldn't have happened
97 if (mEffectUIHost == nullptr || !mEffectUIHost->IsShown())
98 {
99 assert(false);
100 mEffectUIHost = {};
101 }
102
103 if (mEffectUIHost) {
104 mEffectUIHost->PushEventHandler(this);
105 mpProject = &project;
106 }
107
108 mProjectWindowDestroyedSubscription = projectWindow.Subscribe(
109 [this, &project](ProjectWindowDestroyedMessage) {
110 // This achieves autosave on close of project before other important
111 // project state is destroyed
112 Hide(&project);
113 });
114
115 mParameterChangedSubscription = mEffectUIHost->GetEditor()->Subscribe(
116 [this](auto) { UndoManager::Get(*mpProject).MarkUnsaved(); });
117}
#define safenew
Definition: MemoryX.h:10
std::unique_ptr< T, Destroyer< T > > Destroy_ptr
a convenience for using Destroyer
Definition: MemoryX.h:162
EffectPlugin * GetEffect(const PluginID &ID)
static EffectManager & Get()
static ProjectWindow & Get(AudacityProject &project)
std::shared_ptr< EffectSettingsAccess > GetAccess()
const PluginID & GetID() const noexcept
Observer::Subscription mParameterChangedSubscription
Observer::Subscription mProjectWindowDestroyedSubscription
static UndoManager & Get(AudacityProject &project)
Definition: UndoManager.cpp:71
void MarkUnsaved()
Message sent when the project window is closed.
Definition: ProjectWindow.h:33

References EffectManager::Get(), UndoManager::Get(), ProjectWindow::Get(), RealtimeEffectState::GetAccess(), EffectManager::GetEffect(), RealtimeEffectState::GetID(), Hide(), UndoManager::MarkUnsaved(), mEffectUIHost, mParameterChangedSubscription, mpProject, mProjectWindowDestroyedSubscription, mRealtimeEffectState, safenew, and UpdateTitle().

Referenced by Toggle().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Toggle()

void RealtimeEffectStateUI::Toggle ( AudacityProject project)

Definition at line 130 of file RealtimeEffectStateUI.cpp.

131{
132 if(IsShown())
133 Hide(&project);
134 else
135 Show(project);
136}
bool IsShown() const noexcept
void Show(AudacityProject &project)

References Hide(), IsShown(), and Show().

Here is the call graph for this function:

◆ UpdateTitle()

void RealtimeEffectStateUI::UpdateTitle ( )
private

Definition at line 156 of file RealtimeEffectStateUI.cpp.

157{
158 if (mEffectUIHost == nullptr)
159 return;
160
161 if (mEffectName.empty())
162 {
163 const auto ID = mRealtimeEffectState.GetID();
164 const auto effectPlugin = EffectManager::Get().GetEffect(ID);
165
166 if (effectPlugin != nullptr)
167 mEffectName = effectPlugin->GetDefinition().GetName();
168 }
169
170 const auto title =
171 mTrackName.empty() ?
173 /* i18n-hint: First %s is an effect name, second is a track name */
174 XO("%s - %s").Format(mEffectName, mTrackName);
175
176 mEffectUIHost->SetTitle(title);
177 mEffectUIHost->SetName(title);
178}
XO("Cut/Copy/Paste")
static const auto title
TranslatableString mEffectName

References TranslatableString::empty(), EffectManager::Get(), EffectManager::GetEffect(), RealtimeEffectState::GetID(), mEffectName, mEffectUIHost, mRealtimeEffectState, mTrackName, title, and XO().

Referenced by Show(), and UpdateTrackData().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateTrackData()

void RealtimeEffectStateUI::UpdateTrackData ( const Track track)

Definition at line 138 of file RealtimeEffectStateUI.cpp.

139{
140 mTrackName = track.GetName();
141
142 UpdateTitle();
143}
wxString GetName() const
Definition: Track.h:467

References Track::GetName(), mTrackName, and UpdateTitle().

Here is the call graph for this function:

Member Data Documentation

◆ mEffectName

TranslatableString RealtimeEffectStateUI::mEffectName
private

Definition at line 59 of file RealtimeEffectStateUI.h.

Referenced by UpdateTitle().

◆ mEffectUIHost

wxWeakRef<EffectUIHost> RealtimeEffectStateUI::mEffectUIHost
private

Definition at line 57 of file RealtimeEffectStateUI.h.

Referenced by Hide(), IsShown(), OnClose(), Show(), and UpdateTitle().

◆ mParameterChangedSubscription

Observer::Subscription RealtimeEffectStateUI::mParameterChangedSubscription
private

Definition at line 64 of file RealtimeEffectStateUI.h.

Referenced by Show().

◆ mpProject

AudacityProject* RealtimeEffectStateUI::mpProject {}
private

Definition at line 61 of file RealtimeEffectStateUI.h.

Referenced by Hide(), OnClose(), and Show().

◆ mProjectWindowDestroyedSubscription

Observer::Subscription RealtimeEffectStateUI::mProjectWindowDestroyedSubscription
private

Definition at line 63 of file RealtimeEffectStateUI.h.

Referenced by Show().

◆ mRealtimeEffectState

RealtimeEffectState& RealtimeEffectStateUI::mRealtimeEffectState
private

Definition at line 55 of file RealtimeEffectStateUI.h.

Referenced by Show(), and UpdateTitle().

◆ mTrackName

wxString RealtimeEffectStateUI::mTrackName
private

Definition at line 60 of file RealtimeEffectStateUI.h.

Referenced by UpdateTitle(), and UpdateTrackData().


The documentation for this class was generated from the following files: