filter_config_items

Attribute Macro filter_config_items 

Source
#[filter_config_items]
Available on crate feature filter only.
Expand description

FilterConfigItems を自動で実装するためのマクロ。

このマクロは他のderiveなどのマクロより先に適用する必要があります。

§Attributes

  • structのフィールドはすべてちょうど1つの属性を持つ必要があります。

§track

#[track(name = "サンプル整数", range = 0..=100, default = 50, step = 1.0)]
int_field: i32,
#[track(name = "サンプル小数", range = 0.0..=1.0, default = 0.5, step = 0.01)]
float_field: f64,
  • name: トラックバーの名前。省略した場合、フィールド名が使用されます。

  • range: トラックバーの範囲。閉区間で指定します(例: 0.0..=1.0)。

  • default: トラックバーの初期値。

  • step: トラックバーのステップ値。1.0, 0.1, 0.01, 0.001 のいずれかを指定します。

  • rangedefaultstepで割り切れる値である必要があります。

  • 値の型はプリミティブ、厳密にはvalue as _で変換可能な型である必要があります。

§check

#[check(name = "サンプルチェックボックス", default = true)]
bool_field: bool,
  • name: チェックボックスの名前。省略した場合、フィールド名が使用されます。

  • default: チェックボックスの初期値。

  • 値の型はboolである必要があります。

§color

#[color(name = "サンプルカラー", default = 0x48b0d5)]
color_field: aviutl2::filter::FilterConfigColorValue,
#[color(name = "サンプルカラー2", default = "#48b0d5")]
color_field2: aviutl2::filter::FilterConfigColorValue,
#[color(name = "サンプルカラー3", default = (72, 176, 213))]
color_field3: aviutl2::filter::FilterConfigColorValue,
  • name: 色選択の名前。省略した場合、フィールド名が使用されます。

  • default: 色の初期値。0xRRGGBB形式の整数、"#RRGGBB"形式の文字列、または(R, G, B)形式のタプルで指定します。

  • 値の型はFrom<aviutl2::filter::FilterConfigColorValue>を実装している必要があります。

§select

#[select(
    name = "サンプルセレクトボックス",
    items = ["オプション1", "オプション2", "オプション3"],
    default = 0
)]
select_field: usize,
#[derive(aviutl2::filter::FilterConfigSelectItems)]
enum MySelectItem {
   #[item(name = "Hoge")]
   Hoge,
   #[item(name = "Fuga")]
   Fuga,
}

#[aviutl2_macros::filter_config_items]
struct MyConfig {
    #[select(
        name = "サンプルセレクトボックス",
        items = MySelectItem,
        default = MySelectItem::Hoge
    )]
    select_field: MySelectItem,
}
  • name: セレクトボックスの名前。省略した場合、フィールド名が使用されます。

  • items: セレクトボックスの項目のリスト、またはaviutl2::filter::FilterConfigSelectItemsを実装したenumの名前。

  • default: セレクトボックスの初期値。itemsのインデックス、またはenumのVariantを指定します。

  • 値の型はdefaultitemsのインデックスの場合はusizedefaultがenumのVariantの場合はそのenumである必要があります。

§file

#[file(name = "サンプルファイル", filters = {
    "テキストファイル" => ["txt"],
    "すべてのファイル" => []
})]
file_field: std::path::PathBuf,
  • name: ファイル選択の名前。省略した場合、フィールド名が使用されます。

  • filters: ファイルフィルタのリスト。キーがフィルタ名、値が拡張子のリストです。

  • 値の型はstd::path::PathBufである必要があります。

§string

#[string(name = "サンプル文字列", default = "初期値")]
string_field: String,
  • name: 文字列項目の名前。省略した場合、フィールド名が使用されます。

  • default: 文字列の初期値。省略した場合、空文字列になります。

  • 値の型はStringである必要があります。

§text

#[text(name = "サンプルテキスト", default = "複数行テキスト")]
text_field: String,
  • name: テキスト項目の名前。省略した場合、フィールド名が使用されます。

  • default: テキストの初期値。省略した場合、空文字列になります。

  • 値の型はStringである必要があります。

§folder

#[folder(name = "サンプルフォルダ", default = "C:\\\\")]
folder_field: String,
  • name: フォルダ選択の名前。省略した場合、フィールド名が使用されます。

  • default: フォルダの初期値。省略した場合、空文字列になります。

  • 値の型はStringである必要があります。

§data

#[data(name = "サンプルデータ", default = MyData { value: 0 })]
data_field: FilterConfigDataHandle<MyData>,
  • name: データの名前。省略した場合、フィールド名が使用されます。

  • default: データの初期値。省略した場合、Default::default()が使用されます。

  • 値の型はaviutl2::filter::FilterConfigDataHandle<T>である必要があります。

§group

#[group(name = "サンプルグループ", opened = true)]
group: group! {
    // ...
},

グループとしてフィールドをまとめます。

  • name: グループの名前。省略した場合、フィールド名が使用されます。

  • opened: グループが初期状態で開いているかどうか。省略した場合、trueになります。

  • 型にはgroup! { ... }と記述する必要があります。

    • group! { ... }の中には他のフィールドを同様に記述します。
  • このフィールドは削除されます。

§button

#[button(name = "サンプルボタン")]
button: on_button_pressed,

aviutl2::filter::FilterConfigItem::Buttonを挿入します。

  • name: ボタンの名前。省略した場合、フィールド名が使用されます。
  • 型には関数名を指定します。また、関数名とフィールド名が同じ場合はfn()と省略できます。
  • 関数のシグネチャは以下のようになります。
fn on_button_pressed(handle: &mut aviutl2::generic::EditSection) { /* ... */ }
  • このフィールドは削除されます。

§Example

use aviutl2::filter::FilterConfigDataHandle;

#[derive(Debug, Default, Clone, Copy)]
struct MyData {
   value: i32,
}

fn my_button_handler(handle: &mut aviutl2::generic::EditSection) {
    // ボタンが押されたときの処理
}

#[aviutl2_macros::filter_config_items]
#[derive(Debug)]
struct FilterConfig {
    #[group(name = "サンプルグループ", opened = true)]
    sample_group: group! {
        #[track(name = "サンプル整数", range = -100..=100, default = 0, step = 1.0)]
        sample_integer: i32,
        #[track(name = "サンプル小数", range = -1.0..=1.0, default = 0.0, step = 0.01)]
        sample_float: f64,
    },
    #[check(name = "サンプルチェックボックス", default = true)]
    sample_checkbox: bool,
    #[select(
        name = "サンプルセレクトボックス",
        items = ["オプション1", "オプション2", "オプション3"],
        default = 0
    )]
    sample_select: usize,
    #[color(name = "サンプルカラー", default = 0x48b0d5)]
    sample_color: aviutl2::filter::FilterConfigColorValue,
    #[file(name = "サンプルファイル", filters = {
        "テキストファイル" => ["txt"],
        "すべてのファイル" => [],
    })]
    sample_file: std::path::PathBuf,
    #[data(name = "サンプルデータ")]
    sample_data: FilterConfigDataHandle<MyData>,

    #[button(name = "サンプルボタン")]
    on_button_pressed: my_button_handler,
}

§See Also