XSIのプラグインでダイアログを使用する3

今回はダイアログに数値入力、カラー選択、
ファイル、フォルダ選択を追加してみたいと思います。


まずは数値入力です。
前の2件の記事を見ていただければ分かると思いますが、
CustomProperty::AddParameter()とPPGLayout::AddItem()を使用します。

    cpset.AddParameter( L"test_number_int", CValue::siInt4, siPersistable, L"", L"", 50, param );
    item = layout.AddItem(
        L"test_number_int",
        L"Number Int",
        siControlNumber
    );

これを実行すると以下のようになります。
plugin16
デフォルトでは0~100までの数値をスライダーで調整できます。
直接入力ならばパラメータの型の最大値まで扱うことが出来ます。(siInt2なら-32768~32767まで)
AddParameterの第2引数にsiFloat、siDoubleなどを指定すれば小数点まで調整することが出来ます。

スライダーで0~100の範囲外の数値を扱うには、
AddParameterのオーバーロードされた引数の多い方を使用します。

    cpset.AddParameter( L"test_number_int", CValue::siInt4, siPersistable, L"", L"", 0, -500, 500, -300, 300, param );
    item = layout.AddItem(
        L"test_number_int",
        L"Number Int",
        siControlNumber
    );

この例では、スライダーで-300~300の間、直接入力で-500~500の数値を扱うことが出来ます。
9,10番目の引数がスライダーの調整範囲、7,8番目の引数が直接入力の範囲制限になります。
ちなみに6番目の引数がデフォルト値です。


次にカラー選択です。
カラー選択を追加するにはRGBならパラメータを3つ、RGBAならパラメータを4つ、
あらかじめ追加しておかなくてはなりません。
コードは以下のようになります。

    // siControlRGBにはパラメータが3つ必要
    cpset.AddParameter( L"test_rgb_r", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    cpset.AddParameter( L"test_rgb_g", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    cpset.AddParameter( L"test_rgb_b", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    item = layout.AddItem(
        L"test_rgb_r",
        L"RGB",
        siControlRGB
    );

    // siControlRGBAにはパラメータが4つ必要
    cpset.AddParameter( L"test_rgba_r", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    cpset.AddParameter( L"test_rgba_g", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    cpset.AddParameter( L"test_rgba_b", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    cpset.AddParameter( L"test_rgba_a", CValue::siDouble, siPersistable, L"", L"", 0.0, param );
    item = layout.AddItem(
        L"test_rgba_r",
        L"RGBA",
        siControlRGBA
    );

これを実行すると以下のようになります。
plugin17


次にファイル選択です。
ファイルの選択のコードは以下のようになります。

    // ファイルの選択
    cpset.AddParameter( L"test_path", CValue::siString, siPersistable, L"", L"", L"", param );
    item = layout.AddItem(
        L"test_path",
        L"File Path",
        siControlFilePath
    );

これを実行すると以下のようになります。
plugin18
plugin19
ファイル選択はデフォルトのままだと、上書きの確認入ります。
読み込みアクセスにしたい場合は、この後に以下のようなコードを追加します。

    item.PutAttribute( siUIOpenFile, true );
    item.PutAttribute( siUIFileMustExist, true );

siUIOpenFileをtrueに設定する事で上書き確認を解除します。
siUIFileMustExistをtrueにすると、ファイルが存在しない場合にはエラーになります。
siUIFileMustExistは特に設定する必要はありませんが、読み込み専用にするなら必要でしょう。
ついでに拡張子でフィルターをかけるコードです。

    CString filter;
    filter += L"Source files (*.cpp *.c *.h)|*.cpp:*.c:*.h|";
    filter += L"Text files (*.txt)|*.txt|";
    filter += L"All Files (*.*)|*.*||";
    item.PutAttribute( siUIFileFilter, filter );

CStringにこのように追加して、siUIFileFilterを設定します。
この辺はWindowsAPIの仕様と同じ様なので、詳しいことはそちらの資料を探してみてください。


最後にフォルダ選択です。
フォルダの選択のコードは以下のようになります。

    // フォルダの選択
    cpset.AddParameter( L"test_folder", CValue::siString, siPersistable, L"", L"", L"", param );
    item = layout.AddItem(
        L"test_folder",
        L"Folder",
        siControlFolder
    );

これを実行すると以下のようになります。
plugin20


ダイアログのアイテムに関しては今回でひとまず終わりします。
まだ他にもファンクションカーブやらグリッドやらありますが、
とりあえず自分で使う予定が無いのと結構面倒っぽいので省きます。
使用することになったら改めてしらべて記事を書こうと思います。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です