-- ごちゃまぜドロップス用ドロッパースクリプトの記述サンプル
-- 文字コードは UTF-8 で記述しますが、ごちゃまぜドロップスに Lua 内で記述した文字列をわたす場合はアクティブなコードページに変換してください
local P = {}

-- このドロッパーの名前を指定します。
-- この名前はメニューアイテム名として利用されます。
-- i18n を使うとUI言語に合わせて翻訳版が自動選択され、アクティブなコードページに変換されます。
P.name = i18n({
  ja_JP = [=[サンプルドロッパー]=],
  en_US = [=[Example Dropper]=],
})

-- oninitmenu はメニュー項目を準備するために呼ばれます。
function P.oninitmenu()
  -- メニューとして表示すべき項目名を文字列か、文字列の配列（テーブル）として返してください。
  -- nil を返した場合はメニュー項目は表示されず、処理が呼び出されることもありません。
  -- 文字列を返した場合はメニュー項目は１つのみで、それがクリックされると呼び出されます。
  -- 文字列の配列（テーブル）を返した場合はサブメニューとして登録されます。
  -- このイベントはポップアップメニュー表示の度に呼び出されるため、負荷の高い処理を行うべきではありません。
  return nil
end

-- onselect はメニュー項目が選ばれた時に呼ばれます。
function P.onselect(index, state)
  -- index には選ばれたメニュー項目の位置が整数値で渡されます。
  --   サブメニューを持たない時は常に0、サブメニューを持つ場合は1から始まるインデックスです。
  -- state には以下のようなテーブルを渡されます。
  --   state = {
  --     -- ファイルをドロップすべきマウスカーソル位置
  --     x=120,
  --     y=235,
  --     -- 親になるべきウィンドウのハンドル
  --     parent=123456
  --   }

  -- 処理を行った結果、ドロップするファイルが何もない場合は nil を返してください。
  return nil

  -- ファイルをドロップする場合はファイル一覧とマウスなどの入力状態を返す必要があります。
  -- イベントハンドラースクリプトで ondragenter に渡されてくる
  -- files と state と同じものをスクリプト内で作成し、両方を返してください。
  -- return files, state
  --
  -- 一時的なファイルを作成したい場合は GCMZDrops.createtempfile で作成するか、
  -- 別の手段で作成したファイルを GCMZDrops.deleteonfinish で削除予約してください。
  -- また、一時的なファイルを作成する場合は Temp フォルダーを使用するのを強く推奨します。
  -- それ以外の場所だとユーザーの設定次第でコピーされるかどうかの振る舞いが変わります。
  -- 一方、処理中に作成する一時的ではないファイルは
  -- 全てユーザーが設定したフォルダ内におさまるように配置するのが望ましいです。
  -- それ以外の場所に永続的なファイルを作成するスクリプトを作成する場合は
  -- ユーザーにコンセンサスを得た上で（※）行うようにしてください。
  -- ※ドキュメントなどに記載する、GCMZDrops.confirm で確認する、など
  --
  -- onselect 実装時の注意点
  --   スクリプトの処理が長時間に渡る場合、そのまま素直にスクリプトを実装すると
  --   メッセージループが回らないのが原因で AviUtl 全体がフリーズします。
  --   Lua スクリプトで回数の多いループ処理を行っているのが原因の場合は
  --   GCMZDrops.doevents(0, 0) をたまに呼ぶことで回避可能ですが、
  --   os.execute を呼び出した場合などのように処理に介入できない場合は
  --   Lua スクリプトだけでは問題を回避することができません。
  --   この場合は Lua 用の DLL を別途作成することで回避できます。

  -- -- 実装例
  -- -- "Hello world!" と書かれたテキストファイルを作成し、拡張編集に投げ込む例
  -- local filepath = GCMZDrops.createtempfile("helloworld", ".txt")
  -- f, err = io.open(filepath, "wb")
  -- if f == nil then
  --   error(err)
  -- end
  -- f:write("Hello world!")
  -- f:close()
  -- return {{filepath=filepath}}, state
end

return P
