### Copyright (C) 1995, 1996, 1997 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.
###
### Mar. 10 1998 Japanized by Mashio Motoyama <moto@ba.mbn.or.jp>
###
proc FvwmButtons {} {
  # モジュール / FvwmButtons
  Desc "FvwmButtons モジュールの設定"
  ShortDesc "FvwmButtons"

  Header h\
	  -text "FvwmButtons"\
	  -frame:relief flat \
	  -help "このページでは FvwmButtons モジュールの設定を行います。"\
	  "このモジュールはボタンやインディケータのパネルのを作成するものです。"
    Line l
  CheckBox spawn -text "起動時から利用" \
	  -help "これを選択すると、このモジュールは起動時、つまり"\
	  "'InitFunction' と 'RestartFunction' からその動作を開始します。"
  # Global settings
  CheckBox colorB\
	  -text "標準色指定: "\
	  -help "ボタンの標準的に利用される色を設定可能になります。"
  Command foreColor \
      -text "前景色" \
      -default [list "black" 0] \
      -setvalue {
	$widget configure -bg [lindex $foreColor 0] -text "      "} \
      -invoke {ColorWidget $colorList [lindex $foreColor 0] \
		   [lindex $foreColor 1]} \
      -disable {$widget configure -relief flat } \
      -enable {$widget configure -relief raised } \
      -help "ボタンのテキストやモノクローム・ビットマップの前景色を設定します。"
  Command backColor \
      -text "背景色" \
      -default [list "white" 0] \
      -setvalue {
	$widget configure -bg [lindex $backColor 0] -text "      "} \
      -invoke {ColorWidget $colorList [lindex $backColor 0] \
		   [lindex $backColor 1]} \
      -disable {$widget configure -relief flat } \
      -enable {$widget configure -relief raised } \
      -help "ボタンの背景色を設定します。"
  Frame colorF -entries { colorB foreColor backColor }
  CheckBox fontB\
	  -text "標準フォント設定: "\
	  -help "ボタンで標準的に使われるフォントを設定可能にないります。"
  Command fontAscii\
	  -default "a14"\
	  -setvalue {buttonSetText $widget ASCII $fontAscii ascii}\
	  -invoke {FontWidget $fontAscii 0 ascii}\
	  -disable {$widget configure -text "Not set"}\
	  -enable {buttonSetText $widget Ascii $fontAscii ascii}\
	  -help "ボタンで標準的に使われるテキストの ASCII フォントを選択します。"
  Command fontKanji\
	  -default "k14"\
	  -setvalue {buttonSetText $widget 漢字 $fontKanji kanji}\
	  -invoke {FontWidget $fontKanji 0 kanji}\
	  -disable {$widget configure -text "未設定"}\
	  -enable {buttonSetText $widget 漢字 $fontKanji kanji}\
	  -help "ボタンで標準的に使われるテキストの漢字フォントを選択します。"
  Command fontKana\
	  -default "r14"\
	  -setvalue {buttonSetText $widget "1Byte Kana" $fontKana kana}\
	  -invoke {FontWidget $fontKana 0 kana}\
	  -disable {$widget configure -text "Not set"}\
	  -enable {buttonSetText $widget "1Byte Kana" $fontKana kana}\
	  -help "ボタンで標準的に使われるテキストの半角カナフォントを選択します。"
  Frame fontF -entries { fontB fontAscii fontKanji fontKana }
  CheckBox noFont\
	  -text "テキスト非表示"\
	  -help "これを選択するとボタンにはタイトルが表示されません。"\
	  "アイコン用に、ボタンの領域を可能な限り大きくとりたい場合に使います。"
  Int columns\
	  -text "列数"\
	  -help "ボタンの表示列数を指定します。標準は 2"\
	  "列です。行と列を両方とも指定した場合や、十分な領域がなければ、その設定は無視されます。"

  Int rows\
	  -text "行数"\
	  -help "ボタンの表示行数を指定します。標準は 2 行です。行と列、両方とも指定した場合には、列数の設定は無視されます。"
  Int frame\
	  -text "レリーフ幅"\
	  -help "レリーフの標準幅を指定します。負の値は反転を意味しており、アクティブでは浮き上がった、非アクティブでは窪んだ外観になります。"
  Label paddingL\
	  -text "レリーフと表面の空き: "\
	  -labelBefore:justify left\
	  -help "ボタンのレリーフとその表面積との空き領域を指定します。"\
	  "標準は水平方向が 2 ピクセル、垂直方向が 4 ピクセルです。"
  Int xpadding\
	  -text "水平"\
	  -help "水平方向の空きをピクセル単位で入力します。"
  Int ypadding\
	  -text "垂直"\
	  -help "垂直方向の空きをピクセル単位で入力します。"
  Frame paddingF -entries { paddingL xpadding ypadding }
  CheckBox geomB\
	  -text "表示位置: "\
	  -help "FvwmButtons が起動する位置を指定します。座標が正であれば、スクリーン上端と左端からその位置が算出され、負であれば、下端と右端から算出されます。"
  Int xgeom\
	  -text "X 座標"\
	  -help "X 座標を入力します"
  Int ygeom\
	  -text "Y 座標"\
	  -help "Y 座標を入力します"
  Frame geom -entries { geomB xgeom ygeom }
  Window global\
	  -text "一般設定" -entries {
    colorF fontF noFont columns rows frame paddingF geom
  } -pageEnd {
    if {$geomB == 1 && ($xgeom == "" || $ygeom == "" ||
			$xgeom == "-" || $ygeom == "-")} {
      error "無効な位置が指定されています。"
    }
    if {($xpadding != "" && $ypadding == "") ||
	($xpadding == "" && $ypadding != "")} {
      error "水平と垂直の両方を指定してください。"
    }
  } -help "FvwmButtons の一般的な設定を含んでいます。"

  # Buttons

  Label index -label:relief groove\
	  -help "このインデックス・レーベルはボタンのクイック・ナビゲーションに利用されます。"

  Line fL
  CheckBox fileB\
	  -text "ボタン設定記述ファイル"\
	  -help "ボタンの設定について書かれているファイルがあれば、それを読み込ませることが出来ます。そのファイルは FVWM2 の設定ファイルと似た書式をしていますが、各行の頭には *FvwmButtons が付けられています。"
  File-Dir-Browser file
  Help file "ファイル名を入力します。"
  Help com_file "このボタンを押すとファイル・ブラウザが現れます。"
  Frame fileF1 -entries { fileB frame_file }
  Frame fileF -entries { fL fileF1 } -orient top

  # Title
  Entry title\
	  -text "ボタンのタイトル"\
	  -help "ボタンのタイトルを入力します。一般設定で\"テキスト非表示\"を選択していなければ、このテキストがボタン上に表示されます。"
  Radio titleJust\
	  -entryhelp {
      "左詰め" "アイコン上に左詰めで表示されます。"
      "中央" "アイコンの中央に表示されます。"
      "右詰め" "アイコン上に右詰めで表示されます。"
      "アイコンの右側" "メニューの様に、アイコンの右側に表示されます。"
  } -default "中央"
  Frame titleF -entries { title titleJust } -orient top

  # Swallowing
  CheckBox swallowB\
	  -text "プログラム/モジュールの取り込み"\
	  -help "これを選択すると、プログラムやモジュールを取り込んだボタンを作成することができます。"
  Entry hangon\
	  -text "ウインドウ名"\
	  -help "ウインドウ名は必ず指定しなければなりません。その名前は"\
	  "FvwmIdent モジュールで調べる事ができます。また、多くの X"\
	  "プログラムは '-name' オプションで名前を付けられています。"
  CheckBox swallowProgB\
	  -text "プログラム"\
	  -help "(モジュールでなく)プログラムを取り込む場合に選択します。"
  Entry swallowProg -width 50 \
      -help "プログラムを入力します。これはバックグランドで実行されなくてはなりません。"
  Frame swallowProgF\
	  -entries { swallowProgB swallowProg } \
	  -packFrame:expand yes
  Radio swallowclose\
	  -entryhelp {
      "同時に終了させる" "FvwmButtons の終了と同時にプログラムを終了させます。"
      "終了時に開放する" "FvwmButtons 終了時にプログラムを開放します。"
  }
  Radio swallowkill -entryhelp {
    "通常終了" "プログラムの終了を通常の方法で行います。"
    "強制終了" "プログラムの終了を kill で行います。"
  }
  Radio swallowhint -entryhelp {
    "ヒント許可" "プログラムがサイズ等のヒントを読み込むことを許可します。"
    "ヒント無視" "リサイズ等のヒントを抑制します。"
  }
  Radio swallowrespawn -entryhelp {
    "落ちたらそのまま" "取り込んだプログラムが落ちたとしても、何もしません。"
    "落ちたら取り込み" "取り込んだプログラムが落ちた場合には、それを再度取り込みます"
  }
  Radio swallowuseold\
	  -entryhelp {
      "常に新しく取り込む" "ボタンが生成されたとき、既存のプログラムを無視します。"
      "既存プログラムを取り込む" "プログラムが既に起動していた場合、それを可能な限り取り込みます。"
  }
  Radio swallowusetitle\
	  -entryhelp {
      "タイトルを隠す" "ボタンにはタイトルが表示されなくなります。"
      "ウインドウ名をタイトルにする" "ボタンのタイトルは、取り込んだプログラムのウインドウ名に置き換えられます。"
  }
  Frame swallowOptsF -entries {
    swallowclose swallowkill swallowhint swallowrespawn
    swallowuseold swallowusetitle
  } -orient top
  Label optsL -text "   "
  Frame swallowOpts -entries { optsL swallowOptsF }
  CheckBox swallowModB\
	  -text "モジュール"\
	  -help "FVWM2 モジュールを取り込む場合に選択します。"
  ComboBox swallowMod -entryhelp {
    FvwmIconBox "アイコン化されたウインドウが入ります。"
    FvwmIconMan "アイコンのリストを表示します。"
    FvwmPager "仮想画面を管理するモジュールです。"
    FvwmTalk "FVWM2 へコマンドを送信するモジュールです。"
    FvwmWinList "全ウインドウのリストを表示します。"
  }
  Int pager1\
	  -text "先頭画面"\
	  -help "ページャが表示する一番最初の画面です。"
  Int pager2\
	  -text "最終画面"\
	  -help "ページャが表示する一番最後の画面になります。"
  Frame swallowModF -entries { swallowModB swallowMod pager1 pager2 }
  Window swallowW -entries {
    hangon swallowProgF swallowModF swallowOpts
  } -text "取り込み設定" -help "取り込み方を指定します。" \
      -pageEnd {
	if {$swallowB == 1 &&
	    ($hangon == "" ||
	     ($swallowProgB == 1 && $swallowProg == "") ||
	     ($swallowModB  == 1 && $swallowMod  == "") ||
	     ($swallowProgB == 0 && $swallowModB == 0 ) )} {
	  error "ウインドウ名と取り込むプログラム/モジュールを指定して下さい。"
	}
      }
  Frame swallowF -entries { swallowB swallowW }

  # Action
  CheckBox actionB\
	  -text "動作設定"\
	  -help "このボタンと何らかの動作を連動させたい場合に選択します。"
  Entry actionHang\
	  -text "     ウインドウ名: "\
	  -help "ウインドウが表示されるまでの間、ボタンが押し下げられた状態にしておきたいウインドウ名を入力します。この名前は FvwmIdent で調べる事ができ、また -name オプションで名付けられている場合もあります。"
  global Builtins
  ComboBox builtin -noedit 1\
	  -text "     組み込み関数"\
	  -default Beep \
	  -entryhelp $Builtins \
	  -help "このメニューから呼び出す関数を選択して下さい。"
  Entry arguments\
	  -text "引数"\
	  -help "引数を入力します。その文法については関知しませんので、自分の責任の元で行って下さい。"
  Frame actF -entries {builtin arguments}
  Frame actionF -orient top -entries { actionB actionHang actF }

  # Width x height
  Label whLab -text "幅と高さ: " \
      -labelBefore:justify left \
      -help "標準サイズと比較して、何倍広いか、何倍高さがあるかを指定できます。(計算は FvwmButtons が行います。)"
  Int width\
	  -text "幅"\
	  -help "標準サイズと比較して、どれだけ幅広いかを倍数で入力します。"
  Int height\
	  -text "高さ"\
	  -help "標準サイズと比較して、どれだけ高さがあるかを倍数で入力します。"
  Frame widthheightF -entries { whLab width height }

  # Colors
  CheckBox addcolorB\
	  -text "色設定: "\
	  -help "ボタンのカラーリングを変更する場合に選択します。"
  Command addforeColor \
      -text "前景色" \
      -default [list "black" 0] \
      -setvalue {
	$widget configure -bg [lindex $addforeColor 0] -text "      "} \
      -invoke {ColorWidget $colorList [lindex $addforeColor 0] \
		   [lindex $addforeColor 1]} \
      -disable {$widget configure -relief flat } \
      -enable {$widget configure -relief raised } \
      -help "モノクローム・ボタンとテキストの前景色を設定できます。"
  Command addbackColor \
      -text "背景色" \
      -default [list "white" 0] \
      -setvalue {
	$widget configure -bg [lindex $addbackColor 0] -text "      "} \
      -invoke {ColorWidget $colorList [lindex $addbackColor 0] \
		   [lindex $addbackColor 1]} \
      -disable {$widget configure -relief flat } \
      -enable {$widget configure -relief raised } \
      -help "ボタンの背景色を設定できます。"
  Frame addcolorF -entries { addcolorB addforeColor addbackColor }

  # Font
  CheckBox addfontB\
	  -text "フォント設定: "\
	  -help "ボタンで利用するフォントを変更する場合に選択します。"
  Command addfontAscii\
	  -default "a14"\
	  -setvalue {buttonSetText $widget ASCII $addfontAscii ascii}\
	  -invoke {FontWidget $addfontAscii 0 ascii}\
	  -disable {$widget configure -text "Not set"}\
	  -inactive {$widget configure -text "Not set"}\
	  -enable {buttonSetText $widget ASCII $addfontAscii ascii}\
	  -help "ボタンで利用するテキストフォント(英数字)を設定できます。"
  Command addfontKanji\
	  -default "k14"\
	  -setvalue {buttonSetText $widget 漢字 $addfontKanji kanji}\
	  -invoke {FontWidget $addfontKanji 0 kanji}\
	  -disable {$widget configure -text "未設定"}\
	  -inactive {$widget configure -text "未設定"}\
	  -enable {buttonSetText $widget 漢字 $addfontKanji kanji}\
	  -help "ボタンで利用するテキストフォント(漢字)を設定できます。"
  Command addfontKana\
	  -default "r14"\
	  -setvalue {buttonSetText $widget "1Byte Kana" $addfontKana kana}\
	  -invoke {FontWidget $addfontKana 0 kana}\
	  -disable {$widget configure -text "Not set"}\
	  -inactive {$widget configure -text "Not set"}\
	  -enable {buttonSetText $widget "1Byte Kana" $addfontKana kana}\
	  -help "ボタンで利用するテキストフォント(英数字)を設定できます。"
  Frame addfontF -entries { addfontB addfontAscii addfontKanji addfontKana }
  CheckBox addnoFont\
	  -text "テキスト非表示"\
	  -help "ボタン上にテキストを表示させない場合に選択します。"
  # Spacing
  Int addframe\
	  -text "レリーフ幅: "\
	  -help "ボタンのレリーフ幅を指定できます。正の値であればアクティブ時には盛り上がり、非アクティブ時には窪んだ外観になります。"
  Label addpaddingL \
      -text "レリーフと表面の空き: " \
      -labelBefore:justify left\
      -help "ボタンのレリーフとその表面積との空き領域を指定します。"\
      "標準は水平方向が 2 ピクセル、垂直方向が 4 ピクセルです。"
  Int addxpadding\
	  -text "水平"\
	  -help "水平方向の空きをピクセル単位で入力します。"
  Int addypadding\
	  -text "垂直"\
	  -help "垂直方向の空きをピクセル単位で入力します。"
  Frame addpaddingF1 -entries { addxpadding addypadding }
  Frame addpaddingF -entries { addpaddingL addpaddingF1 }
  #-orient top

  # Icon
  Entry addicon\
	  -text "アイコンを指定: "\
	  -help "このボタンのアイコンを指定したい場合には、そのファイル名を入力します。尚、検索パスは IconPath に従います"
  # Sizing
  CheckBox addnoSize\
	  -text "サイズ計測時に無視する"\
	  -help "全体のレイアウトを崩す様なおかしなボタンを作成しているのならば、FvwmButtons が標準サイズを算出する際に、そのボタンを無視させることができます。"
  Label addsizeL\
	  -text "最小サイズ: "\
	  -help "ボタンの最小サイズをピクセル単位で指定可能です。"
  Int addsizeW\
	  -text "幅"\
	  -help "幅をピクセル単位で指定します。"
  Int addsizeH\
	  -text "高さ"\
	  -help "高さをピクセル単位で指定します。"
  Frame addsizeF -entries { addsizeL addsizeW addsizeH }

  Header bH -text "ボタン"\
	  -help "各ボタンの定義"

  Window addLnF -entries {
    addcolorF
    addfontF
    addnoFont
    addframe
    addpaddingF
    addnoSize
    addsizeF
  } -text "追加的な外観の設定" \
      -help "色やフォント等の設定を行います。"

  Frame noFileF -entries {
    titleF
    swallowF
    actionF
    widthheightF
    addicon
    addLnF
  } -orient top

  Line linE
  ExtEntry buttons -label:relief raised -entries {
    index
    fileF
    linE
    noFileF
  } -orient top -count 1 -index index

  Change {
      if {$changeElm == "colorB"} {
	  if {$colorB == 1} {
	      Enable foreColor backColor
	  } else {
	      Disable foreColor backColor}
	  }
	  if {$changeElm == "fontB"} {
	      if {$fontB == 1} {
		  Enable fontAscii fontKanji fontKana
		  set noFont 0
	      } else {
		  Disable fontAscii fontKanji fontKana
	      }
	  }
	  if {$changeElm == "noFont"} {
	      if {$noFont == 1} {
		  set fontB 0
		  Disable fontAscii fontKanji fontKana
	      }
	  }
	  if {$changeElm == "columns"} {if {$columns == "-"} {set columns ""}}
	  if {$changeElm == "rows"} {if {$rows == "-"} {set rows ""}}
	  if {$changeElm == "geomB"} {
	      if {$geomB == 1} {Enable xgeom ygeom
	  } else {Disable xgeom ygeom}
      }
      if {$changeElm == "xpadding"} {if {$xpadding == "-"} {set xpadding ""}}
      if {$changeElm == "ypadding"} {if {$ypadding == "-"} {set ypadding ""}}
      # Buttons
    if {$changeElm == "fileB"} {
      if {$fileB == 1} {
	Disable noFileF
	Enable frame_file
      } else {
	Disable frame_file
	Enable noFileF
	# Update all visual dependencies
	  if {$swallowB == 0} {
	      Disable swallowW
	  } else {
	  if {$swallowProgB == 0} {
	      Disable swallowProg
	  }
	  if {$swallowModB  == 0} {
	      Disable swallowMod pager1 pager2
	  } elseif {$swallowMod != "FvwmPager"} {
	      Disable pager1 pager2}
	  }
	  if {$actionB == 0} {
	      Disable actionHang builtin arguments
	  }
	  if {$addcolorB == 0} {
	      Disable addforeColor addbackColor
	  }
	  if {$addfontB == 0} {
	      Disable addfontAscii addfontKanji addfontKana
	  }
      }
  }
  if {$changeElm == "swallowB"} {
      if {$swallowB == 1} {
	Enable swallowW
	if {$swallowProgB == 0} {Disable swallowProg}
	if {$swallowModB  == 0} {Disable swallowMod pager1 pager2
	} elseif {$swallowMod != "FvwmPager"} {Disable pager1 pager2}
      } else {
	Disable swallowW
      }
    }
    if {$changeElm == "pager1" && $pager1 == "-"} {set pager1 ""}
    if {$changeElm == "pager1" && $pager2 == "-"} {set pager2 ""}
    if {$changeElm == "swallowProgB"} {
      if {$swallowProgB == 1} {
	Enable swallowProg
	set swallowModB 0
	Disable swallowMod pager1 pager2
      } else {
	Disable swallowProg
      }
    }
    if {$changeElm == "swallowModB"} {
      if {$swallowModB == 1} {
	Enable swallowMod
	if {$swallowMod == "FvwmPager"} {Enable pager1 pager2}
	set swallowProgB 0
	Disable swallowProg
      } else {
	Disable swallowMod pager1 pager2
      }
    }
    if {$changeElm == "swallowMod"} {
      if {$swallowMod == "FvwmPager"} {
	Enable pager1 pager2
      } else {
	Disable pager1 pager2
      }
    }
    if {$changeElm == "width" && $width == "-"} {set width ""}
    if {$changeElm == "height" && $height == "-"} {set height ""}
    if {$changeElm == "actionB"} {
      if {$actionB == 1} {Enable actionHang builtin arguments
      } else {Disable actionHang builtin arguments}
    }
    if {$changeElm == "addcolorB"} {
      if {$addcolorB == 1} {Enable addforeColor addbackColor
      } else {Disable addforeColor addbackColor}
    }
    if {$changeElm == "addfontB"} {
	if {$addfontB == 1} {
	    Enable addfontAscii addfontKanji addfontKana
	    set addnoFont 0
	} else {
	    Disable addfontAscii addfontKanji addfontKana
	}
    }
    if {$changeElm == "addnoFont"} {
	if {$addnoFont == 1} {
	    set addfontB 0
	    Disable addfontAscii addfontKanji addfontKana
	}
    }
    if {$changeElm == "addxpadding" && $addxpadding == "-"} {
      set addxpadding ""}
    if {$changeElm == "addypadding" && $addypadding == "-"} {
      set addypadding ""}
    if {$changeElm == "addsizeW" && $addsizeW == "-"} {set addsizeW ""}
    if {$changeElm == "addsizeH" && $addsizeH == "-"} {set addsizeH ""}
    # Update index and additionalW
    if {[lsearch {
      fileB file
      title addicon
      swallowB hangon
      } $changeElm] != -1} {
      if {$fileB == 1} {
	set index "File: $file"
      } elseif {$title != ""} {
	set index "Title: $title"
      } elseif {$addicon != ""} {
	set index "Icon: $addicon"
      } elseif {$swallowB == 1} {
	set index "Swallow: $hangon"
      } else {
	set index "Unspecified"
      }
    }
  }

  Save {
    if {$colorB == 1} {
      print "*FvwmButtonsFore\t[hash2rgb [lindex $foreColor 0]]"
      print "*FvwmButtonsBack\t[hash2rgb [lindex $backColor 0]]"
    }
    if {$fontB   == 1} {print "*FvwmButtonsFont\t$fontAscii,$fontKanji,$fontKana"}
    if {$noFont  == 1} {print "*FvwmButtonsFont\tNone"}
    if {$columns != ""} {print "*FvwmButtonsColumns\t$columns"}
    if {$rows    != ""} {print "*FvwmButtonsRows\t$rows"}
    if {$frame   != "" && $frame != "-"} {print "*FvwmButtonsFrame\t$frame"}
    if {$xpadding != ""} {print "*FvwmButtonsPadding\t$xpadding $ypadding"}
    if {$geomB   == 1} {
      print "*FvwmButtonsGeometry\t[signed $xgeom][signed $ygeom]"
    }
    forevery buttons {
      if {$fileB == 1} {
	print "*FvwmButtonsFile\t$file"
      } else {
	set options {}
	if {$width != ""} {append options "${width}x$height,"}
	if {$title != "" || $titleJust(name) != "中央"} {
	  append options "Title"
	  if {$titleJust(name) != "中央"} {
	    switch $titleJust(name) \
		"左詰め"     {append options "(Left)"} \
		"右詰め"    {append options "(Right)"} \
		"アイコンの右側" {append options "(Side)"}
	  }
	  if {$title != ""} {append options " \"$title\""}
	  append options ","
	}
	if {$swallowB == 1} {
	  append options "Swallow"
	  set swalOpts ""
	  if {$swallowclose(index)    == 1} {append swalOpts ",NoClose"}
	  if {$swallowkill(index)     == 1} {append swalOpts ",Kill"}
	  if {$swallowhint(index)     == 1} {append swalOpts ",Hints"}
	  if {$swallowrespawn(index)  == 1} {append swalOpts ",Respawn"}
	  if {$swallowuseold(index)   == 1} {append swalOpts ",UseOld"}
	  if {$swallowusetitle(index) == 1} {append swalOpts ",UseTitle"}
	  if {$swalOpts != ""} {
	    append options "([string range $swalOpts 1 end])"
	  }
	  append options " \"$hangon\" "
	  if {$swallowProgB == 1} {
	    append options "`Exec [makeBg $swallowProg]`,"
	  } else {
	    append options "`Module $swallowMod"
	    if {$swallowMod == "FvwmPager"} {append options " $pager1 $pager2"}
	    append options "`,"
	  }
	}
	if {$actionB == 1} {
	  append options "Action `$builtin"
	  if {$actionHang != ""} {append options " \"$actionHang\""}
	  if {$arguments != ""} {
	    if {$builtin == "Exec"} {append options " [makeBg $arguments]"
	    } else {append options " $arguments"}
	  }
	  append options "`,"
	}
	if {$addcolorB == 1} {
	  append options "Fore [hash2rgb [lindex $addforeColor 0]],\
 Back [hash2rgb [lindex $addbackColor 0]],"
	}
	if {$addfontB == 1} {
	    append options "Font $addfontAscii,$addfontKanji,$addfontKana,"
	}
	if {$addnoFont == 1} {
	    append options "Font None,"
	}
	if {$addframe != ""} {
	    append options "Frame $addframe,"
	}
	if {$addxpadding != ""} {
	    append options "Padding $addxpadding $addypadding,"
	}
	if {$addicon != ""} {
	    append options "Icon $addicon,"
	}
	if {$addnoSize == 1} {
	    append options "NoSize,"
	}
	if {$addsizeW != ""} {
	    append options "Size $addsizeW $addsizeH,"
	}
	if {$options == ""} {
	  tk_dialog .fvwmbuttonsWarn Warning "FvwmButtons に何の設定もなされていないボタンがあります。このボタンに関する項目は生成されません。" info\
	      0 OK
	} else {
	    # Strip last comma
	    set options \
		    [string range $options 0 [expr [string length $options] - 2]]
	    print "*FvwmButtons($options)"
	}
      }
    }
    if {$spawn   == 1} {
      print "AddToFunc InitFunction \"I\" Module FvwmButtons"
      print "AddToFunc RestartFunction \"I\" Module FvwmButtons"
    }
  }
}
