### Copyright (C) 1995 Jeppe Buk (buk@imada.ou.dk)
### This program is free software; you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation; either version 2 of the License, or
### (at your option) any later version.
###
### This program is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with this program; if not, write to the Free Software
### Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
###
### [Thu Jun 5 1997]
### Some messages (label, help,..) were Japanized by MOTOYAMA,mashio
### <moto@ba.mbn.or.jp>. If you want to use original messages try this URL.
### Dotfile Generator's Page<http://www.imada.ou.dk/~buk/dotfile/>

proc functions {} {
  # メニューとバインド / 関数定義
  Desc "メニューやキー・バインディングに使う関数を定義します"
  ShortDesc "関数定義"

  Entry functionName -text "新規関数名" -textafter "\t" \
      -help "新たに定義する関数名を入力します"

  Menu builtinCall -text "組み込み関数" -entryhelp {
    Undefined "コマンドではない。もし選択されてもセーブされない" \
	Beep "ビープを鳴らす" \
	CirculateDown "次のウインドウの後ろへ順番に下げていく" \
	CirculateUp "直前のウインドウの前へ順番に上げていく" \
	Close "カレント・ウインドウを閉じる" \
	CursorMove "カーソル移動" \
	Delete "カレント・ウインドウを消す" \
	Desk "デスクトップ変更" \
	Destroy "カレント・ウインドウを確実に消す(但し一般的でない)" \
	Exec "外部コマンド実行" \
	Focus "フォーカスをカレント・ウインドウへ" \
	Function "定義済み関数の呼び出し" \
	GotoPage "他のページへ移る" \
	Iconify "カレント・ウインドウのアイコン化と解除" \
	Lower "カレント・ウインドウを最下へ" \
	Maximize "カレント・ウインドウ最大化と解除" \
	Module "外部 FVWM モジュール起動" \
	Move "カレント・ウインドウ移動" \
	Nop "何もしない - メニューのセパレータに使用 -" \
	Popup "定義済みポップアップメニューの呼び出し" \
	Quit "FVWM 終了 (一般に X も同様に終了する)" \
	Raise "カレント・ウインドウを最全面へ" \
	RaiseLower "カレント・ウインドウのレイズ、ロウアを交互に行なう" \
	Refresh "スクリーン上の全てのウインドウを再描画" \
	Resize "カレント・ウインドウのリサイズ" \
	Restart "FVWM 再起動(もしくは他のマネージャへ変更)" \
	Stick "カレント・ウインドウの張り付かせと解除" \
	Scroll "ビューポートのスクロール" \
	Title "何もしない - メニューのタイトルで使用 -" \
	TogglePage "エッジスクロールの有効化と無効化" \
	Wait "ウインドウが前面に出るのに間を持たせる" \
	Warp "特定のウインドウへワープ" \
	WindowsDesk "新しいデスクトップへ選択したウインドウを移す" \
	WindowList "全てのウインドウのリストをポップアップする" } \
      -help "このメニューから呼び出す組み込み関数を選択します"
  
  Menu events -text "イベント" -entryhelp {
    Immediate "コマンドを直ちに実行" \
	Motion "マウスの移動によりコマンド実行" \
	Click "マウスのクリックによりコマンド実行" \
	DoubleClick "マウスのダブルクリックによりコマンド実行" } \
      -help "コマンドを実行させるイベントを選択します"
  Entry arguments -text "引数" \
      -help "付け加えるべき引数を入力します。但し、その入力内容については"\
      "マニュアル等を参照し、貴方の責任の元で行って下さい"

  ExtEntry functionEntry -entries {builtinCall events arguments}
  ExtEntry function -lines 1 -entries {functionName functionEntry} \
      -orient top

  Save {
    forevery function {
      if {$functionName != {}} {
	print "Function \"$functionName\""
	forevery functionEntry {
	  if {$builtinCall(name) != "Undefined"} {
	    print "\t$builtinCall(name)\t\"$events(name)\"\t$arguments"
	  }
	}
	print "EndFunction"
      }
    }
  }
}

proc popupDefinitions {} {
  # メニューとバインド / ポップアップメニュー定義
  Desc "ポップアップメニュー"
  ShortDesc "ポップアップメニュー"

  Entry popupName -text "ポップアップ名" -textafter "\t"\
      -help "キーやマウスにバインドする、または別のポップアップメニュー"\
      "から呼び出す関数名になります"

  Menu builtinCall -text "組み込み関数" -entryhelp {
    Undefined "コマンドではない。もし選択されてもセーブされない" \
	Beep "ビープを鳴らす" \
	CirculateDown "次のウインドウの後ろへ順番に下げていく" \
	CirculateUp "直前のウインドウの前へ順番に上げていく" \
	Close "カレント・ウインドウを閉じる" \
	CursorMove "カーソル移動" \
	Delete "カレント・ウインドウを消す" \
	Desk "デスクトップ変更" \
	Destroy "カレント・ウインドウを確実に消す(但し一般的でない)" \
	Exec "外部コマンド実行" \
	Focus "フォーカスをカレント・ウインドウへ" \
	Function "定義済み関数の呼び出し" \
	GotoPage "他のページへ移る" \
	Iconify "カレント・ウインドウのアイコン化と解除" \
	Lower "カレント・ウインドウを最下へ" \
	Maximize "カレント・ウインドウ最大化と解除" \
	Module "外部 FVWM モジュール起動" \
	Move "カレント・ウインドウ移動" \
	Nop "何もしない - メニューのセパレータに使用 -" \
	Popup "定義済みポップアップメニューの呼び出し" \
	Quit "FVWM 終了 (一般に X も同様に終了する)" \
	Raise "カレント・ウインドウを最全面へ" \
	RaiseLower "カレント・ウインドウのレイズ、ロウアを交互に行なう" \
	Refresh "スクリーン上の全てのウインドウを再描画" \
	Resize "カレント・ウインドウのリサイズ" \
	Restart "FVWM 再起動(もしくは他のマネージャへ変更)" \
	Stick "カレント・ウインドウの張り付かせと解除" \
	Scroll "ビューポートのスクロール" \
	Title "何もしない - メニューのタイトルで使用 -" \
	TogglePage "エッジスクロールの有効化と無効化" \
	Wait "ウインドウが前面に出るのに間を持たせる" \
	Warp "特定のウインドウへワープ" \
	WindowsDesk "新しいデスクトップへ選択したウインドウを移す" \
	WindowList "全てのウインドウのリストをポップアップする" } \
      -help "このメニューから呼び出す関数を選択します"
  Entry name -text "名前" \
     -help "メニューに表示する名前を入力します"
  Entry arguments -text "引数" \
      -help "付け加えるべき引数を入力します。但し、その入力内容については"\
      "マニュアル等を参照し、貴方の責任の元で行って下さい"

  ExtEntry popupEntry -entries {builtinCall name arguments}
  ExtEntry popup -lines 1 -entries {popupName popupEntry} \
      -orient top

  Save {
    forevery popup {
      if {$popupName != {}} {
	print "Popup \"$popupName\""
	forevery popupEntry {
	  if {$builtinCall(name) != "Undefined"} {
	    print "\t$builtinCall(name)\t\"$name\"\t$arguments"
	  }
	}
	print "EndPopup"
      }
    }
  }
}
  
proc keyBindings {} {
  # メニューとバインド / キー・バインディング
  Desc "キー・バインディング"
  ShortDesc "キー・バインディング"

  Entry keysymEntry -text "キーシム" -width 3 \
      -help "キーシムがリストされていなければ、適切なキーシムを入力します" 
  ListBox keysymBox -entries {
    F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10} \
      -width 8 -selectmode single \
      -help "キーシムをリストから選択します。もしリストに希望するシンボル"\
      "が無ければ、それを入力します"
  Frame keysym -entries {keysymEntry keysymBox} -orient top
  ListBox keyContext -text "コンテキスト" -selectmode multiple -entries {
    Any Root Window "Title bar" Sides Frame Icon "0 button" "1 button"\
	"2 button" "3 button" "4 button" "5 button" "6 button" "7 button" \
	"8 button" "9 button"} -width 8 \
      -help "何処でこのキーを押したときの動作かを選択します"
  ListBox keyModifier -text "モディファイア" -selectmode multiple -entries {
    None Control Shift Meta 1mod 2mod 3mod 4mod 5mod} -width 8 \
      -help "どの装飾キーと組み合わせて使うか選択します"
  Label funcLabel -text "関数" \
      -help "どの関数をバインドするか選択します"
  Menu builtinCall -entryhelp {
    Undefined "コマンドではない。もし選択されてもセーブされない" \
	Beep "ビープを鳴らす" \
	CirculateDown "次のウインドウの後ろへ順番に下げていく" \
	CirculateUp "直前のウインドウの前へ順番に上げていく" \
	Close "カレントウインドウを閉じる" \
	CursorMove "カーソル移動" \
	Delete "カレント・ウインドウを消す" \
	Desk "デスクトップ変更" \
	Destroy "カレント・ウインドウを確実に消す(但し一般的でない)" \
	Exec "外部コマンド実行" \
	Focus "フォーカスをカレント・ウインドウへ" \
	Function "定義済み関数の呼び出し" \
	GotoPage "他のページへ移る" \
	Iconify "カレント・ウインドウのアイコン化と解除" \
	Lower "カレント・ウインドウを最下へ" \
	Maximize "カレント・ウインドウ最大化と解除" \
	Module "外部 FVWM モジュール起動" \
	Move "カレント・ウインドウ移動" \
	Nop "何もしない - メニューのセパレータに使用 -" \
	Popup "定義済みポップアップメニューの呼び出し" \
	Quit "FVWM 終了 (一般に X も同様に終了する)" \
	Raise "カレント・ウインドウを最全面へ" \
	RaiseLower "カレント・ウインドウのレイズ、ロウアを交互に行なう" \
	Refresh "スクリーン上の全てのウインドウを再描画" \
	Resize "カレント・ウインドウのリサイズ" \
	Restart "FVWM 再起動(もしくは他のマネージャへ変更)" \
	Stick "カレント・ウインドウの張り付かせと解除" \
	Scroll "ビューポートのスクロール" \
	Title "何もしない - メニューのタイトルで使用 -" \
	TogglePage "エッジスクロールの有効化と無効化" \
	Wait "ウインドウが前面に出るのに間を持たせる" \
	Warp "特定のウインドウへワープ" \
	WindowsDesk "新しいデスクトップへ選択したウインドウを移す" \
	WindowList "全てのウインドウのリストをポップアップする" } \
      -help "このメニューから呼び出す組み込み関数を選択します"

  Label argLabel -text "引数" \
       -help "付け加えるべき引数を入力します。但し、その入力内容については"\
      "マニュアル等を参照し、貴方の責任の元で行って下さい"
 Entry keyArgs \
       -help "付け加えるべき引数を入力します。但し、その入力内容については"\
      "マニュアル等を参照し、貴方の責任の元で行って下さい"
  Frame called -entries {funcLabel builtinCall argLabel keyArgs} -orient top

  Frame keyFrame -entries {keysym keyContext keyModifier called}
  ExtEntry keys -lines 1 -entries {keyFrame} -orient top
  Line keyDelimiter

  Change {
    if {$changeElm == "keysymEntry"} {
      if {$keysymEntry != {}} {
	Disable keysymBox
      } else {
	Enable keysymBox
      }
    }
  }
  
  Save {
    forevery keys {
      if {$keysymEntry != {}} {
	set keysym $keysymEntry
      } else {
	set keysym $keysymBox(name)
      }
      if {$keysym!={} && $keyContext(name)!={} && $keyModifier(name)!={}} {
	set context [makeContextOrModifier $keyContext(name)]
	set modifier [makeContextOrModifier $keyModifier(name)]
	print "Key $keysym $context $modifier $builtinCall(name) $keyArgs"
      }
    }
  }
}

proc mouseBindings {} {
  # メニューとバインド / マウス・バインディング
  Desc "マウス・バインディング"
  ShortDesc "マウス・バインディング"

  Label buttonLabel -text "ボタン" \
      -help "このメニューをマウスのどのボタンにバインドするか選択します"
  Menu menuButton -entries {Any 1 2 3} \
      -help "このメニューをマウスのどのボタンにバインドするか選択します"
  Frame mouseButton -entries {buttonLabel menuButton} -orient top
  ListBox mouseContext -text "コンテキスト" -selectmode multiple -entries {
    Any Root Window "Title bar" Sides Frame Icon "0 button" "1 button"\
	"2 button" "3 button" "4 button" "5 button" "6 button" "7 button" \
	"8 button" "9 button"} -width 8 \
      -help "マウスが何処にあるときの動作かを選択します"
  ListBox mouseModifier -text "モディファイア" -selectmode multiple -entries {
    None Control Shift Meta 1mod 2mod 3mod 4mod 5mod} -width 8 \
      -help "どの装飾キーと組み合わせて使うか選択します"
  Label mouseFuncLabel -text "関数" \
      -help "どの関数をバインドするか選択します"
  Menu mouseBuiltin -entryhelp {
	Beep "ビープを鳴らす" \
	CirculateDown "次のウインドウの後ろへ順番に下げていく" \
	CirculateUp "直前のウインドウの前へ順番に上げていく" \
	Close "カレント・ウインドウを閉じる" \
	CursorMove "カーソル移動" \
	Delete "カレント・ウインドウを消す" \
	Desk "デスクトップ変更" \
	Destroy "カレント・ウインドウを確実に消す(但し一般的でない)" \
	Exec "外部コマンド実行" \
	Focus "フォーカスをカレント・ウインドウへ" \
	Function "定義済み関数の呼び出し" \
	GotoPage "他のページへ移る" \
	Iconify "カレント・ウインドウのアイコン化と解除" \
	Lower "カレント・ウインドウを最下へ" \
	Maximize "カレント・ウインドウ最大化と解除" \
	Module "外部 FVWM モジュール起動" \
	Move "カレント・ウインドウ移動" \
	Nop "何もしない - メニューのセパレータに使用 -" \
	Popup "定義済みポップアップメニューの呼び出し" \
	Quit "FVWM 終了 (一般に X も同様に終了する)" \
	Raise "カレント・ウインドウを最全面へ" \
	RaiseLower "カレント・ウインドウのレイズ、ロウアを交互に行なう" \
	Refresh "スクリーン上の全てのウインドウを再描画" \
	Resize "カレント・ウインドウのリサイズ" \
	Restart "FVWM 再起動(もしくは他のマネージャへ変更)" \
	Stick "カレント・ウインドウの張り付かせと解除" \
	Scroll "ビューポートのスクロール" \
	Title "何もしない - メニューのタイトルで使用 -" \
	TogglePage "エッジスクロールの有効化と無効化" \
	Wait "ウインドウが前面に出るのに間を持たせる" \
	Warp "特定のウインドウへワープ" \
	WindowsDesk "新しいデスクトップへ選択したウインドウを移す" \
	WindowList "全てのウインドウのリストをポップアップする" } \
      -help "このメニューから呼び出す組み込み関数を選択します"

  Label mouseArgLabel -text "引数" \
       -help "付け加えるべき引数を入力します。但し、その入力内容については"\
      "マニュアル等を参照し、貴方の責任の元で行って下さい"
  Entry mouseArgs
  Frame mouseCalled -entries {mouseFuncLabel mouseBuiltin mouseArgLabel \
				  mouseArgs} -orient top

  Frame mouseEntry -entries {mouseButton mouseContext mouseModifier mouseCalled}
  ExtEntry mouse -lines 1 -entries {mouseEntry} -orient top

  Save {
    forevery mouse {
      if {$mouseContext(name)!={} && $mouseModifier(name)!={}} {
	set context [makeContextOrModifier $mouseContext(name)]
	set modifier [makeContextOrModifier $mouseModifier(name)]
	if {$menuButton(name) == "Any"} {
	  set button 0
	} else {
	  set button $menuButton(name)
	}
	print "Mouse $button $context $modifier $mouseBuiltin(name) $mouseArgs"
      }
    }
  }
}
