/********************************************************************** Audacity: A Digital Audio Editor EffectUI.h Leland Lucius Audacity(R) is copyright (c) 1999-2008 Audacity Team. License: GPL v2. See License.txt. **********************************************************************/ #ifndef __AUDACITY_EFFECTUI_H__ #define __AUDACITY_EFFECTUI_H__ #include "../Experimental.h" #include // member variables #if defined(EXPERIMENTAL_EFFECTS_RACK) #include #include #include // to inherit #include // member variable class wxFlexGridSizer; class wxPanel; class wxStaticText; class AudacityProject; class Effect; using EffectArray = std::vector; class EffectRack final : public wxFrame { public: EffectRack( AudacityProject &project ); virtual ~EffectRack(); void Add(Effect *effect, bool active = false, bool favorite = false); static EffectRack &Get( AudacityProject &project ); private: wxBitmap CreateBitmap(const char *const xpm[], bool up, bool pusher); int GetEffectIndex(wxWindow *win); void MoveRowUp(int row); void UpdateActive(); void OnClose(wxCloseEvent & evt); void OnTimer(wxTimerEvent & evt); void OnApply(wxCommandEvent & evt); void OnBypass(wxCommandEvent & evt); void OnPower(wxCommandEvent & evt); void OnEditor(wxCommandEvent & evt); void OnUp(wxCommandEvent & evt); void OnDown(wxCommandEvent & evt); void OnFav(wxCommandEvent & evt); void OnRemove(wxCommandEvent & evt); private: AudacityProject &mProject; wxStaticText *mLatency; int mLastLatency; wxBitmap mPowerPushed; wxBitmap mPowerRaised; wxBitmap mSettingsPushed; wxBitmap mSettingsRaised; wxBitmap mUpPushed; wxBitmap mUpRaised; wxBitmap mUpDisabled; wxBitmap mDownPushed; wxBitmap mDownRaised; wxBitmap mDownDisabled; wxBitmap mFavPushed; wxBitmap mFavRaised; wxBitmap mRemovePushed; wxBitmap mRemoveRaised; std::vector mPowerState; std::vector mFavState; int mNumEffects; wxTimer mTimer; wxPanel *mPanel; wxFlexGridSizer *mMainSizer; EffectArray mEffects; EffectArray mActive; bool mBypassing; DECLARE_EVENT_TABLE() }; #endif #include "audacity/EffectInterface.h" #include "../widgets/wxPanelWrapper.h" // to inherit #include "../SelectedRegion.h" class AudacityCommand; class AudacityProject; class Effect; class wxCheckBox; // class EffectUIHost final : public wxDialogWrapper, public EffectUIHostInterface { public: // constructors and destructors EffectUIHost(wxWindow *parent, AudacityProject &project, Effect *effect, EffectUIClientInterface *client); EffectUIHost(wxWindow *parent, AudacityProject &project, AudacityCommand *command, EffectUIClientInterface *client); virtual ~EffectUIHost(); bool TransferDataToWindow() override; bool TransferDataFromWindow() override; int ShowModal() override; bool Initialize(); private: wxPanel *BuildButtonBar( wxWindow *parent ); void OnInitDialog(wxInitDialogEvent & evt); void OnErase(wxEraseEvent & evt); void OnPaint(wxPaintEvent & evt); void OnClose(wxCloseEvent & evt); void OnApply(wxCommandEvent & evt); void DoCancel(); void OnCancel(wxCommandEvent & evt); void OnHelp(wxCommandEvent & evt); void OnDebug(wxCommandEvent & evt); void OnMenu(wxCommandEvent & evt); void OnEnable(wxCommandEvent & evt); void OnPlay(wxCommandEvent & evt); void OnRewind(wxCommandEvent & evt); void OnFFwd(wxCommandEvent & evt); void OnPlayback(wxCommandEvent & evt); void OnCapture(wxCommandEvent & evt); void OnUserPreset(wxCommandEvent & evt); void OnFactoryPreset(wxCommandEvent & evt); void OnDeletePreset(wxCommandEvent & evt); void OnSaveAs(wxCommandEvent & evt); void OnImport(wxCommandEvent & evt); void OnExport(wxCommandEvent & evt); void OnOptions(wxCommandEvent & evt); void OnDefaults(wxCommandEvent & evt); void UpdateControls(); wxBitmap CreateBitmap(const char * const xpm[], bool up, bool pusher); void LoadUserPresets(); void InitializeRealtime(); void CleanupRealtime(); void Resume(); private: AudacityProject *mProject; wxWindow *mParent; Effect *mEffect; AudacityCommand * mCommand; EffectUIClientInterface *mClient; RegistryPaths mUserPresets; bool mInitialized; bool mSupportsRealtime; bool mIsGUI; bool mIsBatch; wxButton *mApplyBtn; wxButton *mCloseBtn; wxButton *mMenuBtn; wxButton *mPlayBtn; wxButton *mRewindBtn; wxButton *mFFwdBtn; wxCheckBox *mEnableCb; wxButton *mEnableToggleBtn; wxButton *mPlayToggleBtn; wxBitmap mPlayBM; wxBitmap mPlayDisabledBM; wxBitmap mStopBM; wxBitmap mStopDisabledBM; bool mEnabled; bool mDisableTransport; bool mPlaying; bool mCapturing; SelectedRegion mRegion; double mPlayPos; bool mDismissed{}; bool mNeedsResume{}; DECLARE_EVENT_TABLE() }; class CommandContext; namespace EffectUI { wxDialog *DialogFactory( wxWindow &parent, EffectHostInterface *pHost, EffectUIClientInterface *client); /** Run an effect given the plugin ID */ // Returns true on success. Will only operate on tracks that // have the "selected" flag set to true, which is consistent with // Audacity's standard UI. bool DoEffect( const PluginID & ID, const CommandContext &context, unsigned flags ); } class ShuttleGui; // Obsolescent dialog still used only in Noise Reduction/Removal class AUDACITY_DLL_API EffectDialog /* not final */ : public wxDialogWrapper { public: // constructors and destructors EffectDialog(wxWindow * parent, const TranslatableString & title, int type = 0, int flags = wxDEFAULT_DIALOG_STYLE, int additionalButtons = 0); void Init(); bool TransferDataToWindow() override; bool TransferDataFromWindow() override; bool Validate() override; // NEW virtuals: virtual void PopulateOrExchange(ShuttleGui & S); virtual void OnPreview(wxCommandEvent & evt); virtual void OnOk(wxCommandEvent & evt); private: int mType; int mAdditionalButtons; DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(EffectDialog); }; #endif // __AUDACITY_EFFECTUI_H__