PPGEvent


詳細

このコールバックは、ユーザがプロパティ ページを操作するときに発生します。

このコールバックを使って、プロパティ ページ上のユーザ インターフェイスのイベントを処理します。 このコールバックは、ユーザが次のいずれかの操作を行うと発生します。

また、このコールバックは、プロパティ ページを開いたり、パラメータ値を変更するスクリプト コードによってトリガーされることもあります。

警告: このコールバックは、C# のみのオブジェクト モデルで使用できます。 スクリプトには、オブジェクト モデルの各 PPG イベントに個別のコールバックがあります。 スクリプト コールバックには入力引数がないため、代わりにグローバル PPG オブジェクトを使用することで、プロパティ ページのコントロールとレイアウトにアクセスできます。

適用対象

C++ および C# のカスタム プロパティ


構文

public class <property_name>
{
        public bool PPGEvent( Context in_context )
        {
                ...
        }
}
CStatus <property_name>_PPGEvent( CRef& in_context )
{ 
        ... 
}

<property_name> は、PluginRegistrar.RegisterProperty の呼び出しで指定されている名前です。この名前に含まれるスペースはアンダースコアに置き換えられます。 たとえば、My Property という名前のプロパティを登録する場合、コールバック関数の名前の先頭は My_Property になります。


パラメータ

パラメータ Language タイプ 詳細
in_context C# PPGEventContext PPGEventContext オブジェクト。

PPGEventContext.EventID は、コールバックをトリガーしたイベントを識別します。

siOnInitsiOnClosesiTabChange、および siButtonClicked イベントの場合、PPGEventContext.SourceCustomProperty を返します。

siParameterChange イベントの場合、PPGEventContext.SourceParameter オブジェクトを返します。 CustomProperty を取得するには、ParameterSIObject.Parent プロパティを呼び出します。
C++ CRef& PPGEventContext へのリファレンス。

PPGEventContext::GetEventID は、コールバックをトリガーしたイベントを識別します。

siOnInitsiOnClosesiTabChange、および siButtonClicked イベントの場合、PPGEventContext::GetSourceCustomProperty を返します。

siParameterChange イベントの場合、PPGEventContext::GetSourceParameter オブジェクトを返します。 Parameter::GetParent から CustomProperty を取得できます。

コンテキスト属性

Attribute 詳細
Button siButtonClicked イベントの場合、クリックされたボタンの名前を指定します。
Close True に設定すると、プロパティ ページは強制的に閉じます。
Refresh True に設定すると、プロパティ ページのレイアウトは強制的に更新されます。
Tab siTabChange イベントの場合、クリックされたタブの名前を指定します。

// PPGEvent callback generated by the Custom Property Wizard

SICALLBACK MyCppProperty_PPGEvent( const CRef& in_ctxt )
{
 // This callback is called when events happen in the user interface
 // This is where you implement the "logic" code.

 // If the value of a parameter changes but the UI is not shown then this
 // code will not execute.  Also this code is not re-entrant, so any changes
 // to parameters inside this code will not result in further calls to this function

 Application app ;

 // The context object is used to determine exactly what happened
 // We don't use the same "PPG" object that is used from Script-based logic code 
 // but through the C++ API we can achieve exactly the same functionality.
 PPGEventContext ctxt( in_ctxt ) ;

 PPGEventContext::PPGEvent eventID = ctxt.GetEventID() ;

 if ( eventID == PPGEventContext::siOnInit )
 {
     // This event meant that the UI was just created.
     // It gives us a chance to set some parameter values.
     // We could even change the layout completely at this point.

     // For this event Source() of the event is the CustomProperty object

     CustomProperty prop = ctxt.GetSource() ;

     app.LogMessage( L"OnInit called for " + prop.GetFullName() ) ;

     /* If you regenerate the layout then call this:
     ctxt.PutAttribute(L"Refresh",true);
     */
 }
 else if ( eventID == PPGEventContext::siOnClose )
{
     // This event meant that the UI was just closed by the user.
     // For this event Source() of the event is the CustomProperty object
     CustomProperty prop = ctxt.GetSource() ;
     app.LogMessage( L"OnClose called for " + prop.GetFullName() ) ;
 }
 else if ( eventID == PPGEventContext::siButtonClicked )
 {
     // If there are multiple buttons
     // we can use this attribute to figure out which one was clicked.
     CValue buttonPressed = ctxt.GetAttribute( L"Button" ) ;

    app.LogMessage( L"Button pressed: " + buttonPressed.GetAsText() ) ;
 }
 else if ( eventID == PPGEventContext::siTabChange )
 {
     // We will be called when the PPG is first opened
     // and every time the tab changes

     // Retrieve the label of the tab that is now active
     CValue tabLabel = ctxt.GetAttribute( L"Tab" ) ;

     app.LogMessage( L"Tab changed to: " + tabLabel .GetAsText() ) ;
 }
 else if ( eventID == PPGEventContext::siParameterChange )
 {
     // For this event the Source of the event is the parameter
     // itself
     Parameter changed = ctxt.GetSource() ;
     CustomProperty prop = changed.GetParent() ;
     CString   paramName = changed.GetScriptName() ; 

     app.LogMessage( L"Parameter Changed: " + paramName ) ;
 }

 return CStatus::OK ;
}

関連項目