Attribute Macro filter_config_items
#[filter_config_items]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 = "サンプル小数",
group = "サンプルグループ",
range = 0.0..=1.0,
default = 0.5,
step = 0.01,
zero_display = "なし",
slider_ratio = 0.5
)]
float_field: f64,-
name: トラックバーの名前。省略した場合、フィールド名が使用されます。 -
range: トラックバーの範囲。閉区間で指定します(例:0.0..=1.0)。 -
default: トラックバーの初期値。 -
step: トラックバーのステップ値。1.0,0.1,0.01,0.001のいずれかを指定します。 -
group: トラックバーグループの名前。指定した場合、同じグループ名を持つトラックバーがグループ化されます。省略した場合、グループ化されません。 -
zero_display: 値が0のときに表示する文字列。省略した場合、通常の0表示になります。 -
slider_ratio: 設定値の範囲に対するトラックバー操作範囲の倍率。省略した場合、1.0になります。 -
range、defaultはstepで割り切れる値である必要があります。 -
slider_ratioは(0.0, 1.0]の範囲の値である必要があります。 -
値の型はプリミティブ、厳密には
value as _で変換可能な型である必要があります。
§check
#[check(name = "サンプルチェックボックス", default = true)]
bool_field: bool,-
name: チェックボックスの名前。省略した場合、フィールド名が使用されます。 -
default: チェックボックスの初期値。 -
値の型は
boolである必要があります。
§checksection
#[checksection(name = "サンプルセクションチェック", default = true)]
section_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を指定します。 -
値の型は
defaultがitemsのインデックスの場合はusize、defaultがenumのVariantの場合はそのenumである必要があります。
§string
#[string(name = "サンプル文字列", default = "初期値")]
string_field: String,-
name: 文字列項目の名前。省略した場合、フィールド名が使用されます。 -
default: 文字列の初期値。省略した場合、空文字列になります。 -
値の型は
Stringである必要があります。
§text
#[text(name = "サンプルテキスト", default = "複数行テキスト")]
text_field: String,-
name: テキスト項目の名前。省略した場合、フィールド名が使用されます。 -
default: テキストの初期値。省略した場合、空文字列になります。 -
値の型は
Stringである必要があります。
§file
#[file(name = "サンプルファイル", filters = {
"テキストファイル" => ["txt"],
"すべてのファイル" => []
})]
file_field: std::path::PathBuf,
#[file(name = "オプションファイル", filters = {
"テキストファイル" => ["txt"],
})]
optional_file_field: Option<std::path::PathBuf>,-
name: ファイル選択の名前。省略した場合、フィールド名が使用されます。 -
filters: ファイルフィルタのリスト。キーがフィルタ名、値が拡張子のリストです。 -
default: ファイルの初期値。省略した場合、空文字列またはNoneになります。 -
値の型は
std::path::PathBufまたはOption<std::path::PathBuf>である必要があります。
§folder
#[folder(name = "サンプルフォルダ", default = "C:\\\\")]
folder_field: std::path::PathBuf,
#[folder(name = "オプションフォルダ")]
optional_folder_field: Option<std::path::PathBuf>,-
name: フォルダ選択の名前。省略した場合、フィールド名が使用されます。 -
default: フォルダの初期値。省略した場合、空文字列またはNoneになります。 -
値の型は
std::path::PathBufまたはOption<std::path::PathBuf>である必要があります。
§data
#[data(name = "サンプル固定長データ", default = MyData { value: 0 })]
data_field: FilterConfigDataHandle<MyData>,
#[data(name = "サンプル可変長データ")]
variable_data_field: VariableLengthFilterConfigDataHandle,-
name: データの名前。省略した場合、フィールド名が使用されます。 -
default: データの初期値。省略した場合、Default::default()が使用されます。 -
値の型は
aviutl2::filter::FilterConfigDataHandle<T>またはaviutl2::filter::VariableLengthFilterConfigDataHandleである必要があります。
§group
#[group(name = "サンプルグループ", opened = true)]
group: group! {
// ...
},グループとしてフィールドをまとめます。
-
name: グループの名前。省略した場合、フィールド名が使用されます。 -
opened: グループが初期状態で開いているかどうか。省略した場合、trueになります。 -
型には
group! { ... }と記述する必要があります。group! { ... }の中には他のフィールドを同様に記述します。
-
このフィールドは削除されます。
§separator
#[separator(name = "サンプルセパレーター")]
separator: (),
#[separator(name = "サンプルセパレーター2")]
#[track(name = "サンプル整数", range = 0..=100, default = 50, step = 1.0)]
separator_with_field: i32,セパレーターを挿入します。
-
name: セパレーターの名前。省略した場合、フィールド名が使用されます。 -
separator属性は複数指定することができます。 -
この属性のみが指定されているフィールドは削除されます。
-
この属性と他の属性が同時に指定されているフィールドは、このフィールドの上にセパレーターが挿入されます。
§button
#[button(name = "サンプルボタン")]
button: on_button_pressed,aviutl2::filter::FilterConfigItem::Buttonを挿入します。
name: ボタンの名前。省略した場合、フィールド名が使用されます。error: エラー発生時のハンドリング方法を指定します。"log"、"log_only"、"ignore"のいずれかを指定します。 省略した場合は"log"になります。unwind: panicを捕捉するかどうかを指定します。省略した場合はtrueになります。- 型には関数名を指定します。また、関数名とフィールド名が同じ場合は
fn()と省略できます。 - 関数のシグネチャは以下のようになります。
fn on_button_pressed(handle: &mut aviutl2::generic::EditSection) -> aviutl2::AnyResult<()>- このフィールドは削除されます。
§hide
#[check(name = "サンプルチェックボックス", default = true)]
sample_checkbox: bool,
#[hide(sample_checkbox == false)]
#[track(name = "サンプル整数", range = 0..=100, default = 50, step = 1.0)]
hide_field: i32,
#[hide(!sample_checkbox)]
#[hide($filter)]
#[check(name = "サンプルチェックボックス2", default = true)]
sample_checkbox2: bool,
#[checksection(name = "サンプルチェックボックス3", default = true)]
sample_checkbox3: bool,
#[hide(sample_checkbox3 == "indeterminate")]
#[track(name = "サンプル整数2", range = 0..=100, default = 50, step = 1.0)]
hide_field2: i32,
#[hide]
#[track(name = "サンプル整数3", range = 0..=100, default = 50, step = 1.0)]
hide_field3: i32,非表示条件を指定します。
hide属性は複数指定することができます。hide属性は値を持つフィールドにのみ指定できます。hide単体を指定した場合は常に非表示になります。- 複数指定された場合はいずれかの条件を満たすと非表示になります。
- 非表示条件は参照フィールド・演算子・値の組み合わせで指定します。
- 参照フィールドはフィールド名または
$filterを使用して指定します。- フィールドの種類は以下のいずれかのうち一つである必要があります:
check。値がオンの場合は1、オフの場合は0になります。checksection。セクションごとに変更される場合は2、全体で固定の場合はcheckと同様です。select。EnumのVariantの値になります。file、folder。設定されている場合は1、設定されていない場合は0になります。
$filterはフィルタオブジェクトかどうかを判定し、0または1になります。
- フィールドの種類は以下のいずれかのうち一つである必要があります:
- 演算子は
==、!=、>、<、>=、<=のいずれかを使用します。<=、>=は内部的には<、>と==に展開されます。
- 比較値は以下のいずれかのうち一つである必要があります:
as i32で変換可能な型。主にboolとFilterConfigSelectItemsを実装したenumのVariant。"indeterminate"。これは2に変換されます。
- 短縮記法として、
fieldはfield == true、!fieldはfield == falseに展開されます。
- 参照フィールドはフィールド名または
§Example
use aviutl2::filter::{FilterConfigDataHandle, VariableLengthFilterConfigDataHandle};
#[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,
#[folder(name = "サンプルフォルダ", default = "C:\\\\")]
sample_folder: std::path::PathBuf,
#[data(name = "サンプル固定長データ")]
sample_data: FilterConfigDataHandle<MyData>,
#[data(name = "サンプル可変長データ")]
sample_variable_data: VariableLengthFilterConfigDataHandle,
#[button(name = "サンプルボタン")]
on_button_pressed: my_button_handler,
}