Skip to main content

menus

Attribute Macro menus 

#[menus]
Available on crate feature generic only.
Expand description

汎用プラグインのメニュー登録実装を生成するマクロ。

このマクロはimplブロックに対して適用されます。 implブロック内で定義された関数が汎用プラグインのメニューとして登録されます。

§Attributes

§import

インポートメニューとして登録します。

  • name: メニューに表示される名前を指定します。
  • error: エラー発生時のハンドリング方法を指定します。"log""log_only""ignore"のいずれかを指定します。
    • "log": エラー発生時にログにエラーメッセージを出力し、警告音を鳴らします。
    • "log_only": エラー発生時にログにエラーメッセージを出力します。
    • "ignore": エラー発生時に何も行いません。

関数は以下のシグネチャのうちいずれかを持つ必要があります:

fn func1() -> ()
fn func2() -> Result<(), E>
fn func3(&self) -> ()
fn func4(&self) -> Result<(), E>
fn func5(&mut self) -> ()
fn func6(&mut self) -> Result<(), E>
where
    Box<dyn std::error::Error>: From<E>,

§export

エクスポートメニューとして登録します。 パラメーター、シグネチャはimport属性と同様です。

§layer

レイヤーメニューとして登録します。 パラメーター、シグネチャはimport属性と同様です。

§object

オブジェクトメニューとして登録します。 パラメーター、シグネチャはimport属性と同様です。

§object_item

オブジェクト編集の設定項目メニューとして登録します。 関数は以下のシグネチャのうちいずれかを持つ必要があります:

fn func1(object: aviutl2::generic::ObjectHandle, effect: &str, index: usize, item: &str) -> ()
fn func2(&self, object: aviutl2::generic::ObjectHandle, effect: &str, index: usize, item: &str) -> Result<(), E>
fn func3(&mut self, object: aviutl2::generic::ObjectHandle, effect: &str, index: usize, item: &str) -> Result<(), E>

§object_item_and_effect

オブジェクト編集の設定項目メニューとして登録します。 object_itemと違い、エフェクトそのものに対してもメニューが表示されます。 関数は以下のシグネチャのうちいずれかを持つ必要があります:

fn func1(object: aviutl2::generic::ObjectHandle, effect: &str, index: usize, item: Option<&str>) -> ()
fn func2(&self, object: aviutl2::generic::ObjectHandle, effect: &str, index: usize, item: Option<&str>) -> Result<(), E>
fn func3(&mut self, object: aviutl2::generic::ObjectHandle, effect: &str, index: usize, item: Option<&str>) -> Result<(), E>

§edit

編集メニューとして登録します。 パラメーター、シグネチャはimport属性と同様です。

§config

設定メニューとして登録します。 設定メニューの登録後にウィンドウクライアントを登録するとシステムメニューに「設定」が追加されます。 関数は以下のシグネチャのうちいずれかを持つ必要があります:

fn func1(hwnd: aviutl2::Win32WindowHandle) -> ()
fn func2(hwnd: aviutl2::Win32WindowHandle) -> Result<(), E>
fn func3(&self, hwnd: aviutl2::Win32WindowHandle) -> ()
fn func4(&self, hwnd: aviutl2::Win32WindowHandle) -> Result<(), E>
fn func5(&mut self, hwnd: aviutl2::Win32WindowHandle) -> ()
fn func6(&mut self, hwnd: aviutl2::Win32WindowHandle) -> Result<(), E>
where
    Box<dyn std::error::Error>: From<E>,

§Example

#[aviutl2::plugin(GenericPlugin)]
struct MyGenericPlugin;

#[aviutl2::generic::menus]
impl MyGenericPlugin {
    #[import(name = ".txtファイルをインポート")]
    fn import_text() -> aviutl2::AnyResult<()> {
        // ...
    }

    #[export(name = ".txtファイルをエクスポート")]
    fn export_text() -> aviutl2::AnyResult<()> {
        // ...
    }

    #[layer(name = "レイヤーを複製")]
    fn duplicate_layer() -> aviutl2::AnyResult<()> {
        // ...
    }

    #[object(name = "オブジェクトを削除")]
    fn delete_object() -> aviutl2::AnyResult<()> {
        // ...
    }

    #[object_item(name = "設定項目を編集")]
    fn edit_object_item(
        _object: aviutl2::generic::ObjectHandle,
        _effect: &str,
        _index: usize,
        _item: &str,
    ) -> aviutl2::AnyResult<()> {
        // ...
    }

    #[edit(name = "BPMグリッドを消去")]
    fn register_edit_menu() -> aviutl2::AnyResult<()> {
        // ...
    }

    #[config(name = "オブジェクトを削除")]
    fn show_config(hwnd: aviutl2::Win32WindowHandle) -> aviutl2::AnyResult<()> {
        // ...
    }
}

§unwind

関数呼び出し時のpanicを捕捉するかどうかを指定します。 デフォルトはtrueです。