iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
CocoaEditorDelegate Class Reference

An editor delegate base class that uses Apple frameworks for the UI, either in Objective C, or Swift. More...

#include <IPlugCocoaEditorDelegate.h>

Inheritance diagram for CocoaEditorDelegate:
[legend]

Public Member Functions

 CocoaEditorDelegate (int nParams)
 
void * OpenWindow (void *pParent) override
 If you are not using IGraphics, you can implement this method to attach to the native parent view e.g. More...
 
void CloseWindow () override
 If you are not using IGraphics you can if you need to free resources etc when the window closes. More...
 
bool OnMessage (int msgTag, int ctrlTag, int dataSize, const void *pData) override
 This could be implemented in either DSP or EDITOR to receive a message from the other one. More...
 
void OnParamChangeUI (int paramIdx, EParamSource source) override
 Override this method to do something when a parameter changes on the main/UI thread Like OnParamChange, OnParamChangeUI will be called when a parameter changes. More...
 
void OnMidiMsgUI (const IMidiMsg &msg) override
 Handle incoming MIDI messages sent to the user interface. More...
 
void OnSysexMsgUI (const ISysEx &msg) override
 Handle incoming SysEx messages sent to the user interface. More...
 
void SendControlValueFromDelegate (int ctrlTag, double normalizedValue) override
 SendControlValueFromDelegate (Abbreviation: SCVFD) WARNING: should not be called on the realtime audio thread. More...
 
void SendControlMsgFromDelegate (int ctrlTag, int msgTag, int dataSize, const void *pData) override
 SendControlMsgFromDelegate (Abbreviation: SCMFD) WARNING: should not be called on the realtime audio thread. More...
 
void SendParameterValueFromDelegate (int paramIdx, double value, bool normalized) override
 SendParameterValueFromDelegate (Abbreviation: SPVFD) WARNING: should not be called on the realtime audio thread. More...
 
- Public Member Functions inherited from IEditorDelegate
 IEditorDelegate (int nParams)
 
 IEditorDelegate (const IEditorDelegate &)=delete
 
IEditorDelegateoperator= (const IEditorDelegate &)=delete
 
IParamAddParam ()
 Adds an IParam to the parameters ptr list Note: This is only used in special circumstances, since most plug-in formats don't support dynamic parameters. More...
 
void RemoveParam (int idx)
 Remove an IParam at a particular index Note: This is only used in special circumstances, since most plug-in formats don't support dynamic parameters. More...
 
IParamGetParam (int paramIdx)
 Get a pointer to one of the delegate's IParam objects. More...
 
const IParamGetParam (int paramIdx) const
 Get a const pointer to one of the delegate's IParam objects (for const methods) More...
 
int NParams () const
 
virtual void * OpenWindow (void *pParent)
 If you are not using IGraphics, you can implement this method to attach to the native parent view e.g. More...
 
virtual void CloseWindow ()
 If you are not using IGraphics you can if you need to free resources etc when the window closes. More...
 
virtual void OnParentWindowResize (int width, int height)
 Called by app wrappers when the OS window scaling buttons/resizers are used. More...
 
virtual void OnUIOpen ()
 Override this method to do something before the UI is opened. More...
 
virtual void OnUIClose ()
 Override this method to do something before the UI is closed. More...
 
virtual void OnParamChange (int paramIdx, EParamSource source, int sampleOffset=-1)
 Override this method to do something to your DSP when a parameter changes. More...
 
virtual void OnParamChange (int paramIdx)
 Another version of the OnParamChange method without an EParamSource, for backwards compatibility / simplicity. More...
 
virtual void OnParamChangeUI (int paramIdx, EParamSource source=kUnknown)
 Override this method to do something when a parameter changes on the main/UI thread Like OnParamChange, OnParamChangeUI will be called when a parameter changes. More...
 
virtual void OnParamReset (EParamSource source)
 Called when parameters have changed to inform the plugin of the changes Override only if you need to handle notifications and updates in a specialist manner (e.g. More...
 
virtual void OnMidiMsgUI (const IMidiMsg &msg)
 Handle incoming MIDI messages sent to the user interface. More...
 
virtual void OnSysexMsgUI (const ISysEx &msg)
 Handle incoming SysEx messages sent to the user interface. More...
 
virtual bool OnMessage (int msgTag, int ctrlTag, int dataSize, const void *pData)
 This could be implemented in either DSP or EDITOR to receive a message from the other one. More...
 
virtual void OnRestoreState ()
 This is called by API classes after restoring state and by IPluginBase::RestorePreset(). More...
 
virtual bool OnKeyDown (const IKeyPress &key)
 KeyDown handler, in order to get keystrokes from certain hosts/plugin formats that send key press messages through the plug-in API, rather than the view. More...
 
virtual bool OnKeyUp (const IKeyPress &key)
 KeyDown handler, in order to get keystrokes from certain hosts/plugin formats that send key press messages through the plug-in API rather than the view. More...
 
void SendCurrentParamValuesFromDelegate ()
 Loops through all parameters, calling SendParameterValueFromDelegate() with the current value of the parameter This is important when modifying groups of parameters, restoring state and opening the UI, in order to update it with the latest values. More...
 
virtual void SendControlValueFromDelegate (int ctrlTag, double normalizedValue)
 SendControlValueFromDelegate (Abbreviation: SCVFD) WARNING: should not be called on the realtime audio thread. More...
 
virtual void SendControlMsgFromDelegate (int ctrlTag, int msgTag, int dataSize=0, const void *pData=nullptr)
 SendControlMsgFromDelegate (Abbreviation: SCMFD) WARNING: should not be called on the realtime audio thread. More...
 
virtual void SendArbitraryMsgFromDelegate (int msgTag, int dataSize=0, const void *pData=nullptr)
 SendArbitraryMsgFromDelegate (Abbreviation: SAMFD) WARNING: should not be called on the realtime audio thread. More...
 
virtual void SendMidiMsgFromDelegate (const IMidiMsg &msg)
 SendMidiMsgFromDelegate (Abbreviation: SMMFD) WARNING: should not be called on the realtime audio thread. More...
 
virtual void SendSysexMsgFromDelegate (const ISysEx &msg)
 SendSysexMsgFromDelegate (Abbreviation: SSMFD) WARNING: should not be called on the realtime audio thread. More...
 
virtual void SendParameterValueFromDelegate (int paramIdx, double value, bool normalized)
 SendParameterValueFromDelegate (Abbreviation: SPVFD) WARNING: should not be called on the realtime audio thread. More...
 
virtual void DirtyParametersFromUI ()
 When modifying a range of parameters in the editor, it can be necessary to broadcast that fact via the host, for instance in a distributed plug-in. More...
 
virtual void BeginInformHostOfParamChangeFromUI (int paramIdx)=0
 Called by the UI at the beginning of a parameter change gesture, in order to notify the host (via a call in the API class) that the parameter is going to be modified The host may be trying to automate the parameter as well, so it needs to relinquish control when the user is modifying something in the user interface. More...
 
virtual void SendParameterValueFromUI (int paramIdx, double normalizedValue)
 SPVFUI Called by the UI during a parameter change gesture, in order to notify the host of the new value (via a call in the API class) If you override this method you should call the base class implementation to make sure OnParamChangeUI gets triggered. More...
 
virtual void EndInformHostOfParamChangeFromUI (int paramIdx)=0
 Called by the user interface at the end of a parameter change gesture, in order to notify the host (via a call in the API class) that the parameter is no longer being modified The host may be trying to automate the parameter as well, so it needs to relinquish control when the user is modifying something in the user interface. More...
 
virtual bool EditorResizeFromUI (int viewWidth, int viewHeight, bool needsPlatformResize)
 If the editor changes UI dimensions, e.g. More...
 
virtual void SendMidiMsgFromUI (const IMidiMsg &msg)
 SendMidiMsgFromUI (Abbreviation: SMMFUI) This method should be used when sending a MIDI message from the UI. More...
 
virtual void SendSysexMsgFromUI (const ISysEx &msg)
 SendMidiMsgFromUI (Abbreviation: SSMFUI) If a plug-in can send Sysex data as a result of actions in the user interface, this method can be used. More...
 
virtual void SendArbitraryMsgFromUI (int msgTag, int ctrlTag=kNoTag, int dataSize=0, const void *pData=nullptr)
 SendArbitraryMsgFromUI (Abbreviation: SAMFUI) More...
 
virtual void DeferMidiMsg (const IMidiMsg &msg)
 This method is needed, for remote editors to avoid a feedback loop. More...
 
virtual void DeferSysexMsg (const ISysEx &msg)
 This method is needed, for remote editors to avoid a feedback loop. More...
 
void SetEditorSize (int width, int height)
 
void SetSizeConstraints (int widthLo, int widthHi, int heightLo, int heightHi)
 
int GetEditorWidth () const
 
int GetEditorHeight () const
 
int GetMinWidth () const
 
int GetMaxWidth () const
 
int GetMinHeight () const
 
int GetMaxHeight () const
 
virtual bool ConstrainEditorResize (int &w, int &h) const
 Constrain the incoming editor width and height values based on the minimum and maximum. More...
 
virtual bool SerializeEditorState (IByteChunk &chunk) const
 Serializes the editor state (such as scale) into a binary chunk. More...
 
virtual int UnserializeEditorState (const IByteChunk &chunk, int startPos)
 Unserializes editor state (such as scale). More...
 
virtual void SetScreenScale (float scale)
 Can be used by a host API to inform the editor of screen scale changes. More...
 

Protected Attributes

void * mViewController = nullptr
 

Detailed Description

An editor delegate base class that uses Apple frameworks for the UI, either in Objective C, or Swift.

Definition at line 24 of file IPlugCocoaEditorDelegate.h.

Constructor & Destructor Documentation

◆ CocoaEditorDelegate()

CocoaEditorDelegate::CocoaEditorDelegate ( int  nParams)

Definition at line 16 of file IPlugCocoaEditorDelegate.mm.

◆ ~CocoaEditorDelegate()

CocoaEditorDelegate::~CocoaEditorDelegate ( )
virtual

Definition at line 21 of file IPlugCocoaEditorDelegate.mm.

Member Function Documentation

◆ CloseWindow()

void CocoaEditorDelegate::CloseWindow ( )
overridevirtual

If you are not using IGraphics you can if you need to free resources etc when the window closes.

Call base implementation.

Reimplemented from IEditorDelegate.

Definition at line 36 of file IPlugCocoaEditorDelegate.mm.

◆ OnMessage()

bool CocoaEditorDelegate::OnMessage ( int  msgTag,
int  ctrlTag,
int  dataSize,
const void *  pData 
)
overridevirtual

This could be implemented in either DSP or EDITOR to receive a message from the other one.

Reimplemented from IEditorDelegate.

Definition at line 41 of file IPlugCocoaEditorDelegate.mm.

◆ OnMidiMsgUI()

void CocoaEditorDelegate::OnMidiMsgUI ( const IMidiMsg msg)
overridevirtual

Handle incoming MIDI messages sent to the user interface.

Parameters
msgThe MIDI message to process

Reimplemented from IEditorDelegate.

Definition at line 56 of file IPlugCocoaEditorDelegate.mm.

◆ OnParamChangeUI()

void CocoaEditorDelegate::OnParamChangeUI ( int  paramIdx,
EParamSource  source 
)
overridevirtual

Override this method to do something when a parameter changes on the main/UI thread Like OnParamChange, OnParamChangeUI will be called when a parameter changes.

However, whereas OnParamChange may be called on the audio thread and should be used to update DSP state, OnParamChangeUI is always called on the low-priority thread, should be used to update UI (e.g. for hiding or showing controls). You should not update parameter objects using this method.

Parameters
paramIdxThe index of the parameter that changed

Reimplemented from IEditorDelegate.

Definition at line 48 of file IPlugCocoaEditorDelegate.mm.

References IParam::GetNormalized(), and IEditorDelegate::GetParam().

◆ OnSysexMsgUI()

void CocoaEditorDelegate::OnSysexMsgUI ( const ISysEx msg)
overridevirtual

Handle incoming SysEx messages sent to the user interface.

Parameters
msgThe SysEx message to process

Reimplemented from IEditorDelegate.

Definition at line 61 of file IPlugCocoaEditorDelegate.mm.

◆ OpenWindow()

void * CocoaEditorDelegate::OpenWindow ( void *  pParent)
overridevirtual

If you are not using IGraphics, you can implement this method to attach to the native parent view e.g.

NSView, UIView, HWND. Defer calling OnUIOpen() if necessary.

Reimplemented from IEditorDelegate.

Definition at line 25 of file IPlugCocoaEditorDelegate.mm.

◆ SendControlMsgFromDelegate()

void CocoaEditorDelegate::SendControlMsgFromDelegate ( int  ctrlTag,
int  msgTag,
int  dataSize,
const void *  pData 
)
overridevirtual

SendControlMsgFromDelegate (Abbreviation: SCMFD) WARNING: should not be called on the realtime audio thread.

This method can be used to send opaque data from a class implementing IEditorDelegate to a specific control in the user interface. The message can be handled in the destination control via IControl::OnMsgFromDelegate

Parameters
ctrlTagA unique tag to identify the control that is the destination of the message
msgTagA unique tag to identify the message
dataSizeThe size in bytes of the data payload pointed to by pData. Note: if this is nonzero, pData must be valid.
pDataPtr to the opaque data payload for the message

Reimplemented from IEditorDelegate.

Definition at line 73 of file IPlugCocoaEditorDelegate.mm.

◆ SendControlValueFromDelegate()

void CocoaEditorDelegate::SendControlValueFromDelegate ( int  ctrlTag,
double  normalizedValue 
)
overridevirtual

SendControlValueFromDelegate (Abbreviation: SCVFD) WARNING: should not be called on the realtime audio thread.

In IGraphics plug-ins, this method is used to update controls in the user interface from a class implementing IEditorDelegate, when the control is not linked to a parameter. A typical use case would be a meter control. In OnIdle() your plug-in would call this method to update the IControl's value.

Parameters
ctrlTagA tag for the control
normalizedValueThe normalised value to set the control to. This will modify IControl::mValue;

Reimplemented from IEditorDelegate.

Definition at line 68 of file IPlugCocoaEditorDelegate.mm.

◆ SendParameterValueFromDelegate()

void CocoaEditorDelegate::SendParameterValueFromDelegate ( int  paramIdx,
double  value,
bool  normalized 
)
overridevirtual

SendParameterValueFromDelegate (Abbreviation: SPVFD) WARNING: should not be called on the realtime audio thread.

This method is called by the class implementing the delegate interface (not the plug-in API class) in order to update the user interface with the new parameter values, typically after automation. The similarly named IPlugAPIBase::SendParameterValueFromAPI() should take care of queueing and deferring, if there is no main thread notification from the API If you override this method you should call the base class implementation to make sure OnParamChangeUI gets triggered In IGraphics plug-ins, this will update any IControls that have their mParamIdx set > -1

Parameters
paramIdxThe index of the parameter to be updated
valueThe new value of the parameter
normalizedtrue if value is normalised

Reimplemented from IEditorDelegate.

Definition at line 80 of file IPlugCocoaEditorDelegate.mm.

References IEditorDelegate::SendParameterValueFromDelegate().

Member Data Documentation

◆ mViewController

void* CocoaEditorDelegate::mViewController = nullptr
protected

Definition at line 41 of file IPlugCocoaEditorDelegate.h.


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