Audacity 3.2.0
EffectUI.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 EffectUI.h
6
7 Leland Lucius
8
9 Audacity(R) is copyright (c) 1999-2008 Audacity Team.
10 License: GPL v2 or later. See License.txt.
11
12**********************************************************************/
13
14#ifndef __AUDACITY_EFFECTUI_H__
15#define __AUDACITY_EFFECTUI_H__
16
17#include <optional>
18
19#include "Identifier.h"
20#include "EffectUIServices.h" // for DialogFactoryResults
21#include "EffectPlugin.h" // for its nested types
22#include "Observer.h"
23#include "PluginInterface.h"
26
27struct AudioIOEvent;
28
29#include "EffectInterface.h"
30#include "wxPanelWrapper.h" // to inherit
31
32#include "SelectedRegion.h"
33
34class AudacityCommand;
35class AudacityProject;
36class EffectBase;
38
39class wxCheckBox;
40class AButton;
41
42//
43class EffectUIHost final
44 : public wxDialogWrapper
46{
47public:
48 // constructors and destructors
49 /*
50 @param[out] pInstance may construct
51 (and then must call Init() with success), or leave null for failure
52 */
53 EffectUIHost(wxWindow *parent, AudacityProject &project,
54 EffectBase &effect, EffectUIServices &client,
55 std::shared_ptr<EffectInstance> &pInstance,
57 const std::shared_ptr<RealtimeEffectState> &pPriorState = {});
58 virtual ~EffectUIHost();
59
60 bool TransferDataToWindow() override;
61 bool TransferDataFromWindow() override;
62
63 int ShowModal() override;
64
65 bool Initialize();
66 EffectEditor *GetEditor() const { return mpEditor.get(); }
67
68 bool HandleCommandKeystrokes() override;
69
70 void SetClosed() {
71#if wxDEBUG_LEVEL
72 mClosed = true;
73#endif
74 }
75
76private:
77 std::shared_ptr<EffectInstance> InitializeInstance();
78
79 wxPanel *BuildButtonBar(wxWindow *parent, bool graphicalUI);
80 void BuildButtonBar(ShuttleGui &S, bool graphicalUI);
81
82 void OnInitDialog(wxInitDialogEvent & evt);
83 void OnErase(wxEraseEvent & evt);
84 void OnPaint(wxPaintEvent & evt);
85 void OnClose(wxCloseEvent & evt);
86 void OnApply(wxCommandEvent & evt);
87 void DoCancel();
88 void OnCancel(wxCommandEvent & evt);
89 void OnDebug(wxCommandEvent & evt);
90 void OnMenu(wxCommandEvent & evt);
91 void OnEnable(wxCommandEvent & evt);
92 void OnPlay(wxCommandEvent & evt);
95 void OnUserPreset(wxCommandEvent & evt);
96 void OnFactoryPreset(wxCommandEvent & evt);
97 void OnDeletePreset(wxCommandEvent & evt);
98 void OnSaveAs(wxCommandEvent & evt);
99 void OnImport(wxCommandEvent & evt);
100 void OnExport(wxCommandEvent & evt);
101 void OnOptions(wxCommandEvent & evt);
102 void OnDefaults(wxCommandEvent & evt);
103 void OnIdle(wxIdleEvent &evt);
104 void OnCharHook(wxKeyEvent& evt);
105
106 bool IsOpenedFromEffectPanel() const;
107
108 void UpdateControls();
109 wxBitmap CreateBitmap(const char * const xpm[], bool up, bool pusher);
110 void LoadUserPresets();
111
112 void CleanupRealtime();
113
114private:
116
118 wxWindow *const mParent;
125 std::weak_ptr<RealtimeEffectState> mwState{};
126 // Temporary state used for destructive processing
127 std::shared_ptr<RealtimeEffectState> mpTempProjectState {};
128
130 bool mInitialized{ false };
132 bool mIsGUI{};
133 bool mIsBatch{};
134
135 wxButton *mApplyBtn{};
136 wxButton *mMenuBtn{};
138 wxButton *mDebugBtn{};
139 wxButton *mPlayToggleBtn{};
140
141 bool mEnabled{ true };
142
144
146 double mPlayPos{ 0.0 };
147
149 const bool mHadPriorState;
150
151#if wxDEBUG_LEVEL
152 // Used only in an assertion
153 bool mClosed{ false };
154#endif
155
156 const std::shared_ptr<EffectInstance> mpInstance;
158
159 std::unique_ptr<EffectEditor> mpEditor;
160
161 DECLARE_EVENT_TABLE()
162};
163
164class CommandContext;
165
166namespace EffectUI {
167
168 AUDACITY_DLL_API
169 DialogFactoryResults DialogFactory(wxWindow &parent, EffectBase &host,
170 EffectUIServices &client, EffectSettingsAccess &access);
171
173 // Returns true on success. Will only operate on tracks that
174 // have the "selected" flag set to true, which is consistent with
175 // Audacity's standard UI.
176 AUDACITY_DLL_API bool DoEffect(
177 const PluginID & ID, const CommandContext &context, unsigned flags );
178
179}
180
181class ShuttleGui;
182
183// Obsolescent dialog still used only in Noise Reduction/Removal
184class AUDACITY_DLL_API EffectDialog /* not final */ : public wxDialogWrapper
185{
186public:
187 // constructors and destructors
188 EffectDialog(wxWindow * parent,
190 int type = 0,
191 int flags = wxDEFAULT_DIALOG_STYLE,
192 int additionalButtons = 0);
193
194 void Init();
195
196 bool TransferDataToWindow() override;
197 bool TransferDataFromWindow() override;
198 bool Validate() override;
199
200 // NEW virtuals:
201 virtual void PopulateOrExchange(ShuttleGui & S);
202 virtual void OnPreview(wxCommandEvent & evt);
203 virtual void OnOk(wxCommandEvent & evt);
204
205private:
206 int mType;
208
209 DECLARE_EVENT_TABLE()
210 wxDECLARE_NO_COPY_CLASS(EffectDialog);
211};
212
213#if defined(__WXMAC__)
214void MacMakeWindowFloating(NSView *handle);
215#endif
216
217#endif // __AUDACITY_EFFECTUI_H__
wxString PluginID
Definition: EffectManager.h:30
void MacMakeWindowFloating(NSView *handle)
std::vector< RegistryPath > RegistryPaths
Definition: Identifier.h:219
static const auto title
#define S(N)
Definition: ToChars.cpp:64
A wxButton with mouse-over behaviour.
Definition: AButton.h:104
Base class for command in Audacity.
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
CommandContext provides additional information to an 'Apply()' command. It provides the project,...
Base class for many of the effects in Audacity.
Definition: EffectBase.h:28
int mAdditionalButtons
Definition: EffectUI.h:207
Hold values to send to effect output meters.
std::shared_ptr< EffectSettingsAccess > EffectSettingsAccessPtr
Definition: EffectPlugin.h:38
void OnEnable(wxCommandEvent &evt)
Definition: EffectUI.cpp:740
void OnFactoryPreset(wxCommandEvent &evt)
Definition: EffectUI.cpp:790
RegistryPaths mUserPresets
Definition: EffectUI.h:129
void OnDefaults(wxCommandEvent &evt)
Definition: EffectUI.cpp:929
Observer::Subscription mAudioIOSubscription
Definition: EffectUI.h:115
bool HandleCommandKeystrokes() override
Definition: EffectUI.cpp:483
void UpdateControls()
Definition: EffectUI.cpp:1003
const EffectPlugin::EffectSettingsAccessPtr mpGivenAccess
Definition: EffectUI.h:122
wxPanel * BuildButtonBar(wxWindow *parent, bool graphicalUI)
bool mIsBatch
Definition: EffectUI.h:133
bool mCapturing
Definition: EffectUI.h:143
wxButton * mMenuBtn
Definition: EffectUI.h:136
virtual ~EffectUIHost()
Definition: EffectUI.cpp:261
void OnErase(wxEraseEvent &evt)
Definition: EffectUI.cpp:512
void OnPlayback(AudioIOEvent)
void CleanupRealtime()
Definition: EffectUI.cpp:1084
AudacityProject & mProject
Definition: EffectUI.h:117
std::shared_ptr< RealtimeEffectState > mpTempProjectState
Definition: EffectUI.h:127
bool mIsGUI
Definition: EffectUI.h:132
EffectBase & mEffectUIHost
Definition: EffectUI.h:119
bool TransferDataToWindow() override
Definition: EffectUI.cpp:273
EffectPlugin::EffectSettingsAccessPtr mpAccess
Definition: EffectUI.h:123
const EffectOutputs *const mpOutputs
Definition: EffectUI.h:157
void OnUserPreset(wxCommandEvent &evt)
Definition: EffectUI.cpp:777
void OnDeletePreset(wxCommandEvent &evt)
Definition: EffectUI.cpp:801
void OnIdle(wxIdleEvent &evt)
Definition: EffectUI.cpp:940
wxButton * mPlayToggleBtn
Definition: EffectUI.h:139
int ShowModal() override
Definition: EffectUI.cpp:326
Observer::Subscription mEffectStateSubscription
Definition: EffectUI.h:115
SelectedRegion mRegion
Definition: EffectUI.h:145
void DoCancel()
Definition: EffectUI.cpp:602
void OnCapture(AudioIOEvent)
Definition: EffectUI.cpp:765
EffectUIHost(wxWindow *parent, AudacityProject &project, EffectBase &effect, EffectUIServices &client, std::shared_ptr< EffectInstance > &pInstance, EffectSettingsAccess &access, const std::shared_ptr< RealtimeEffectState > &pPriorState={})
Definition: EffectUI.cpp:226
EffectUIServices & mClient
Definition: EffectUI.h:120
double mPlayPos
Definition: EffectUI.h:146
void OnClose(wxCloseEvent &evt)
Definition: EffectUI.cpp:524
EffectEditor * GetEditor() const
Definition: EffectUI.h:66
void OnExport(wxCommandEvent &evt)
Definition: EffectUI.cpp:912
AButton * mEnableBtn
Definition: EffectUI.h:137
void OnSaveAs(wxCommandEvent &evt)
Definition: EffectUI.cpp:820
void SetClosed()
Definition: EffectUI.h:70
wxButton * mApplyBtn
Definition: EffectUI.h:135
const bool mHadPriorState
Definition: EffectUI.h:149
void OnOptions(wxCommandEvent &evt)
Definition: EffectUI.cpp:922
void LoadUserPresets()
Definition: EffectUI.cpp:1019
void OnInitDialog(wxInitDialogEvent &evt)
Definition: EffectUI.cpp:489
void OnMenu(wxCommandEvent &evt)
Definition: EffectUI.cpp:645
void OnDebug(wxCommandEvent &evt)
Definition: EffectUI.cpp:629
void OnCharHook(wxKeyEvent &evt)
Definition: EffectUI.cpp:947
bool mEnabled
Definition: EffectUI.h:141
EffectPlugin::EffectSettingsAccessPtr mpAccess2
Definition: EffectUI.h:124
void OnImport(wxCommandEvent &evt)
Definition: EffectUI.cpp:900
std::unique_ptr< EffectEditor > mpEditor
Definition: EffectUI.h:159
std::shared_ptr< EffectInstance > InitializeInstance()
Definition: EffectUI.cpp:1031
void OnApply(wxCommandEvent &evt)
Definition: EffectUI.cpp:540
const bool mSupportsRealtime
Definition: EffectUI.h:131
bool Initialize()
Definition: EffectUI.cpp:425
void OnPlay(wxCommandEvent &evt)
Definition: EffectUI.cpp:751
const std::shared_ptr< EffectInstance > mpInstance
Definition: EffectUI.h:156
void OnCancel(wxCommandEvent &evt)
Definition: EffectUI.cpp:623
bool mInitialized
Definition: EffectUI.h:130
std::weak_ptr< RealtimeEffectState > mwState
Definition: EffectUI.h:125
wxWindow *const mParent
Definition: EffectUI.h:118
wxButton * mDebugBtn
Definition: EffectUI.h:138
wxBitmap CreateBitmap(const char *const xpm[], bool up, bool pusher)
Definition: EffectUI.cpp:970
bool IsOpenedFromEffectPanel() const
Definition: EffectUI.cpp:965
bool TransferDataFromWindow() override
Definition: EffectUI.cpp:285
void OnPaint(wxPaintEvent &evt)
Definition: EffectUI.cpp:517
bool mDismissed
Definition: EffectUI.h:148
A move-only handle representing a connection to a Publisher.
Definition: Observer.h:70
Defines a selected portion of a project.
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:625
Holds a msgid for the translation catalog; may also bind format arguments.
AUDACITY_DLL_API bool DoEffect(const PluginID &ID, const CommandContext &context, unsigned flags)
'Repeat Last Effect'.
Definition: EffectUI.cpp:1144
AUDACITY_DLL_API DialogFactoryResults DialogFactory(wxWindow &parent, EffectBase &host, EffectUIServices &client, EffectSettingsAccess &access)
Definition: EffectUI.cpp:1105