### 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 8 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 buttonsAndCursors {} {
  # 操作方法 / ボタンとカーソル
  Desc "マウス・カーソルとボタンのスタイル"
  ShortDesc "ボタンとカーソル"

  # Button styles
  Menu buttonNo -text "ボタン番号" -entries {0 1 2 3 4 5 6 7 8 9} \
      -help "どのボタンを変更するか選択します"
  Int buttonWidth -text "幅 %" \
      -help "ボタンの幅です\n" \
      "このエントリは矩形のボタンの幅を定義します"
  Int buttonHeight -text "高さ %" \
      -help "ボタンの高さです\n" \
      "このエントリは矩形のボタンの高さを定義します"

  ExtEntry buttonStyle -text "ボタンの形状" -entries {
    buttonNo buttonWidth buttonHeight} \
      -help "矩形ボタンの形状を定義します"
  Line line1

  Menu buttonNo2 -text "ボタン番号" -entries {0 1 2 3 4 5 6 7 8 9} \
      -help "どのボタンを変更するか選択します"
  Entry userStyle -text "ユーザスタイル" \
      -help "このエントリはボタンの複雑な形状を定義します\n" \
      "マニュアルのシンタックスの項をよく読んで下さい"
  ExtEntry buttonStyle2 -text "複合ボタンを用いる場合" -entries {
    buttonNo2 userStyle} -help "ボタンの複雑な形状を定義します"
  Line line2
  
  # Cursors
  Menu cursorNo -text "カーソル" -entries {
    Position "Title bar" Default System Move Wait Menu Select Destroy Top \
	Right Bottom Left "Top left" "Top right" "Bottom left" "Bottom right"} \
      -help "カーソルを変更します"
  ListBox cursorType -text "カーソルタイプ" -entries {
    "Default (no change)" X_cursor arrow based_arrow_down based_arrow_up boat \
	bogosity bottom_left_corner bottom_right_corner bottom_side bottom_tee \
	box_spiral center_ptr circle clock coffee_mug cross cross_reverse \
	crosshair diamond_cross dot dotbox double_arrow draft_large \
	draft_small draped_box exchange fleur gobbler gumby hand1 hand2 heart \
	icon iron_cross left_ptr left_side left_tee leftbutton ll_angle \
	lr_angle man middlebutton mouse pencil pirate plus question_arrow \
	right_ptr right_side right_tee rightbutton rtl_logo sailboat \
	sb_down_arrow sb_h_double_arrow sb_left_arrow sb_right_arrow \
	sb_up_arrow sb_v_double_arrow shuttle sizing spider spraycan star \
	target tcross top_left_arrow top_left_corner top_right_corner \
	top_side top_tee trek ul_angle umbrella ur_angle watch xterm } \
      -selectmode single \
      -help "カーソルの形状を定義します"

  ExtEntry cursor -text "カーソル" -lines 1 -entries {cursorNo cursorType} \
      -help "ここでカーソルの外見を変更することができます。メニューから変更するカーソルを選択し、リストボックスからその形状を選びます"
  
  Save {
    forevery buttonStyle {
      if {$buttonWidth != {} && $buttonHeight != {}} {
	if {$buttonWidth < 0 || $buttonWidth > 100} {
	  error "無効なボタンの幅です。"
	}
	if {$buttonHeight < 0 || $buttonHeight > 100} {
	  error "無効なボタンの高さです。"
	}
	print "ButtonStyle\t$buttonNo(name) ${buttonWidth}x$buttonHeight"
      }
    }
    forevery buttonStyle2 {
      if {$userStyle != {}} {
	print "ButtonStyle : $buttonNo2(name) $userStyle"
      }
    }
    forevery cursor {
      if {$cursorType(index) != 0 && $cursorType(index) != {}} {
	print "Cursor\t$cursorNo(index) [expr ($cursorType(index)-1)*2]"
      }
    }
  }
}

proc fvwmmodes {} {
  # 操作方法 / 全体的な概観と操作性
  Desc "ウインドウ・マネージャの全体的な外観と操作性"
  ShortDesc "全体的な外観と操作性"

  CheckBox boundary -text "装飾境界線の幅" \
      -help "このオプションを有効にすると、装飾されたウインドウの境界線の幅をピクセル単位で指定できます"
  Int boundaryWidth -textafter "ピクセル" \
      -help "装飾されたウインドウの境界線幅をピクセル単位で指定します"
  CheckBox clickTime -text "ダブルクリックの間隔" \
      -help "クリックとダブルクリックとを区別するタイミングを設定します。もしダブルクリックで問題を抱えているなら、それを解決できるとても有用な設定です。"
  Int clickDelay -default 150 -text "\tクリックの最大間隔" \
      -textafter "ミリ秒" \
      -help "２回のクリックがダブルクリックとなる最大の遅延時間です"
  CheckBox clickFocus -text "クリック トゥ フォーカス" \
      -help "このオプションを選択すると、クリックしたウインドウにフォーカスが当たります"
  CheckBox desktopScale -text "仮想デスクトップのスケール変更" \
      -help "インターナル・ページャの大きさを変更します"
  Int desktopScaleVal -default 25 -text "\t縮小率" \
      -help "インターナル・ページャの縮小率を設定します" \
      "\nページャに各々のデスクトップを 1/x のサイズで表示すると考えて下さい。この分母 x が入力する値になります。"
  CheckBox desktopSize -text "仮想デスクトップ数の指定" \
     -help "仮想デスクトップの数を水平方向の数と垂直方向の数で指定します"
  Int desktopSizeX -default 2 -text "\t水平方向" \
      -help "水平方向に幾つ仮想デスクトップを作るかを入力します"
  Int desktopSizeY -default 2 -text "\t垂直方向" \
      -help "垂直方向に幾つ仮想デスクトップを作るかを入力します"
  CheckBox edgeRes -text "マウスによる仮想デスクトップ間のスクロール制御" \
      -help "このオプションが設定してあれば、マウス・カーソルを仮想デスクトップの端を越えて動かそうとしたとき、画面をバタバタと動かします(フリッピング)。"\
      "\nマウスの動きに対する抵抗性は次の値で設定します" \
      "\n1) フリッピングが行われていると判断するマウス・カーソルの移動量をミリ秒単位で指定"\
      "\n2) フリッピング間の移動量をピクセル単位で指定"
  Int edgeRes1 -default 150 -text "\tマウス・カーソルがエッジを越えようと" \
      -textafter "ミリ秒間動いた場合\t"\
      -help "このオプションが設定してあれば、マウス・カーソルを仮想デスクトップの端を越えて動かそうとしたとき、画面をバタバタと動かします(フリッピング)。"\
      "\nマウスの動きに対する抵抗性は次の値で設定します" \
      "\n1) フリッピングが行われていると判断するマウス・カーソルの移動量をミリ秒単位で指定"\
      "\n2) フリッピング間の移動量をピクセル単位で指定"
  Int edgeRes2 -default 50 -textafter "ピクセル動かす\t\t"\
      -help "このオプションが設定してあれば、マウス・カーソルを仮想デスクトップの端を越えて動かそうとしたとき、画面をバタバタと動かします(フリッピング)。"\
      "\nマウスの動きに対する抵抗性は次の値で設定します" \
      "\n1) フリッピングが行われていると判断するマウス・カーソルの移動量をミリ秒単位で指定"\
      "\n2) フリッピング間の移動量をピクセル単位で指定"
  CheckBox edgeScroll -text "マウス・カーソルがエッジを越えた場合のスクロール量"\
      -help "切替える量をデスクトップに対する割合で指定します"
  Int xScroll -text "x 方向へは" -default 100 -textafter "% スクロール" \
      -help "切替える量をデスクトップに対する割合で指定します"
  Int yScroll -text "y 方向へは" -default 100 -textafter "% スクロール" \
      -help "切替える量をデスクトップに対する割合で指定します"
  CheckBox pager -text "インターナルページャの配置" \
      -help "このオプションは起動時にインターナル・ページャを指定された位置へ配置します"
  Int xPager -default 0 -text "\tX 方向の位置" \
      -help "起動時におけるインターナル・ページャの x 方向の値を入れます"
  Int yPager -default 0 -text "\tY 方向の位置" \
      -help "起動時におけるインターナル・ページャの y 方向の値をいれます"
  CheckBox pagingDefault -text "インターナル・ページャの同時起動" \
      -help "インターナル・ページャを起動時から動かします"
  CheckBox sloppyFocus -text "マウス・カーソルが他のウインドウへ入るまでフォーカスを維持する(ルートウインドウを除く)" \
      -help "このオプションを有効にした場合、マウス・カーソルがウインドウから外へ出ても、他のウインドウへマウス・カーソルが入らない限り、そのウインドウに対するフォーカスを維持します"
  CheckBox noBoundary -text "非装飾境界線の幅" \
      -help "このオプションを用いると、装飾されていないウインドウの境界線の幅をピクセル単位で指定できます"
  Int noBoundaryWidth -textafter "ピクセル" \
      -help "装飾されていないウインドウの境界線幅をピクセル単位で指定します"
  
  Change {
    if {$clickTime == 1} {
      Enable clickDelay
    } else {
      Disable clickDelay
    }
    if {$desktopScale == 1} {
      Enable desktopScaleVal
    } else {
      Disable desktopScaleVal
    }
    if {$desktopSize == 1} {
      Enable desktopSizeX
      Enable desktopSizeY
    } else {
      Disable desktopSizeX
      Disable desktopSizeY
    }
    if {$edgeRes == 1} {
      Enable edgeRes1
      Enable edgeRes2
    } else {
      Disable edgeRes1
      Disable edgeRes2
    }
    if {$edgeScroll == 1} {
      Enable xScroll
      Enable yScroll
    } else {
      Disable xScroll
      Disable yScroll
    }
    if {$pager == 1} {
      Enable xPager
      Enable yPager
    } else {
      Disable xPager
      Disable yPager
    }  
    if {$boundary == 1} {
      Enable boundaryWidth
    } else {
      Disable boundaryWidth
    }
    if {$noBoundary == 1} {
      Enable noBoundaryWidth
    } else {
      Disable noBoundaryWidth
    }
  }
  
  Save {
    if {$boundary == 1} {
      if {$boundaryWidth == {}} {error "無効な境界線幅です。"}
      print "BoundaryWidth\t$boundaryWidth"
    }
    if {$clickTime == 1} {
      if {$clickDelay == {}} {error "クリックの遅延時間が設定されていません。"}
      print "ClickTime\t$clickDelay"
    }
    if {$clickFocus == 1} {print "ClickToFocus"}
    if {$desktopScale == 1} {
      if {$desktopScaleVal == {}} {error "デスクトップの縮小率が設定されていません。"}
      print "DesktopScale\t$desktopScaleVal"
    }
    if {$desktopSize == 1} {
      if {$desktopSizeX == {}} {error "デスクトップの水平方向の数が設定されていません。" }
      if {$desktopSizeY == {}} {error "デスクトップの垂直方向の数が設定されていません。" }
      print "DesktopSize\t${desktopSizeX}x${desktopSizeY}"
    }
    if {$edgeRes == 1} {
      if {$edgeRes1 == {}} {error "エッジでの抵抗率が不正です。"}
      if {$edgeRes2 == {}} {error "エッジでの抵抗率が不正です。"}
      print "EdgeResistance\t$edgeRes1 $edgeRes2"
    }
    if {$edgeScroll == 1} {
      if {$xScroll == {}} {error "エッジスクロールの値が不正です。"}
      if {$yScroll == {}} {error "エッジスクロールの値が不正です。"}
      print "EdgeScroll\t$xScroll $yScroll"
    }
    if {$pager == 1} {
      if {$xPager == {}} {error "ページャの配置(X)が不正です。"}
      if {$yPager == {}} {error "ページャの配置(Y)が不正です。"}
      print "Pager\t$xPager $yPager"
    }
    # I'm not completely sure about this one...
    if {$pagingDefault == 1} {print "PagingDefault\t1"}
    if {$sloppyFocus == 1} {print "SloppyFocus"}
    if {$noBoundary == 1} {
      if {$noBoundaryWidth == {}} {error "invalid noboundary width"}
      print "NoBoundaryWidth\t$noBoundaryWidth"
    }
  }
}

proc FVWMwindows {} {
  # 操作方法 / ウインドウの振舞

  Desc "ウインドウの振舞に影響するオプション"
  ShortDesc "ウインドウの振舞"

  CheckBox dontMove -text "ウインドウをスクリーンの外に出さない" \
      -help "ウインドウを境界線に架かるように持ってきたとき、16ピクセルずらしてルートウインドウに配置します。"
  CheckBox autoRaise -text "オート・レイズ" \
      -help "このオプションを有効にすると、一定の時間をおいてウインドウが自動的にレイズされます"
  Int autoRaiseDelay -default 750 -text "\tオートレイズは" \
      -textafter "ミリ秒後に設定" \
      -help "ウインドウをレイズするまでどれだけ待つかをミリ秒単位で指定します"
  CheckBox centerOnCirculate -text "サーキュレイト時にセンターリングする" \
      -help "このオプションを有効にすると、サーキュレイトやワープさせた時ウインドウをセンタリングします"
  CheckBox circulateSkipIcons -text "アイコンは" \
      "サーキュレイトとワープの対象から外す" \
      -help "このオプションを有効にすると、アイコン化されたウインドウはサーキュレイト(循環)及びワープの対象から外されます"
  CheckBox decorateTransients -text "一時ウインドウを装飾する" \
      -help "このオプションを有効にすると、一時ウインドウも装飾されます"
  CheckBox opaqueMove -text "ウインドウ移動時にワイヤフレーム化しない" \
      "(速いサーバが必要)" \
      -help "このオプションを有効にすると、ウインドウを移動する際にはワイヤフレーム化せず、そのままの表示で動かします"
  Int opaqueSize -default 20 -text "\t画面に対する最大のウインドウサイズ" \
      "を" -textafter "% に設定" \
      -help "不確かな移動に対する最大のウインドウサイズを決定します"
  CheckBox opaqueResize -text "リサイズ時にワイアフレーム化しない" \
      "(最速のサーバが必要)" \
      -help "このオプションを有効にすると、ウインドウをリサイズする際にはその表示内容も同時にリサイズしていきます"
  CheckBox randomPlacement -text "新しいウインドウはランダムに配置" \
      -help "このオプションを有効にすると、新しいウインドウを作る際にはユーザがマウスで位置を決める代りに、ランダムな位置へと勝手に配置します"
  CheckBox smartPlacement -text "新しいウインドウは可能な限り他のウインドウと重ねない" \
      -help "これは「ランダムに配置」と、とてもよく似ています。しかし可能な限り他のウインドウと重ならないようにするという違いがあります"
  CheckBox stickyIcons -text "アイコンは常にデスクトップ上に配置" \
      -help "これはアイコンを、画面というよりはむしろデスクトップの上に常に配置しておくオプションです。結果としていつもアイコンが見えている状態になります。例えデスクトップが目に見えて動いていてもそうなります"
  CheckBox stubIcons -text "最小化ウインドウはオリジナルデスクトップへ" \
      -help "このオプションを有効にしていると、最小化されたウインドウは常にそれを起動したデスクトップへ置かれます"
  CheckBox stubIconPlace -text "アイコンはウインドウの下に配置しない" \
      -help "アイコンをウインドウの下に配置しないようにします"
  CheckBox stubbornPlacement -text "新しいウインドウはアイコンの上に配置しない" \
      -help "新しいウインドウをアイコンの上に配置しないようにします"
  CheckBox supIcons -text "全てにおいてアイコンを使用しない" \
      -help "アイコンを用いることを完全に抑制します"

  Line beforeIconBox
  Int iconBoxLeft -text "左" -help アイコンボックスの左端"
  Int iconBoxTop -text "上" -help アイコンボックスの上端"
  Int iconBoxRight -text "右" -help アイコンボックスの右端"
  Int iconBoxBottom -text "下" -help アイコンボックスの下端"
  ExtEntry iconBox -text "アイコンボックス" -entries {
    iconBoxLeft iconBoxTop iconBoxRight iconBoxBottom} \
      -help "アイコンボックスで利用するデスクトップ領域を定義します"

  Change {
    if {$autoRaise == 1} {
      Enable autoRaiseDelay
    } else {
      Disable autoRaiseDelay
    }
    if {$opaqueMove == 1} {
      Enable opaqueSize
    } else {
      Disable opaqueSize
    }

  }
  
  Save {
    if {$dontMove == 1} {print "DontMoveOff"}
    if {$autoRaise == 1} {
      if {$autoRaiseDelay == {}} {error "オート・レイズの遅延時間が設定されていません。"}
      print "AutoRaise\t$autoRaiseDelay"
    }
    if {$centerOnCirculate == 1} {print "CenterOnCirculate"}
    if {$circulateSkipIcons == 1} {print "CirculateSkipIcons"}
    if {$decorateTransients == 1} {print "DecorateTransients"}
    if {$opaqueMove == 1} {
      if {$opaqueSize == {}} {error "最大ウインドウサイズが設定されていません。"}
      print "OpaqueMove\t$opaqueSize"
    }
    if {$opaqueResize == 1} {print "OpaqueResize"}
    if {$randomPlacement == 1} {print "RandomPlacement"}
    if {$smartPlacement == 1} {print "SmartPlacement"}
    if {$stickyIcons == 1} {print "StickyIcons"}
    if {$stubIcons == 1} {print "StubbornIcons"}
    if {$stubIconPlace == 1} {print "StubbornIconPlacement"}
    if {$stubbornPlacement == 1} {print "StubbornPlacement"}
    if {$supIcons == 1} {print "SuppressIcons"}
    forevery iconBox {
      if {$iconBoxLeft!={} && $iconBoxTop!={} && $iconBoxRight!={} &&
	  $iconBoxBottom!={}} {
	print "IconBox\t$iconBoxLeft $iconBoxTop $iconBoxRight $iconBoxBottom"
      }
    }
  }
}

proc MWMmodes {} {
  # 操作方法 / Motif(tm) オプション

  Desc "Motif (tm) オプション"
  ShortDesc "MWM オプション"

  CheckBox mwmFunc -text "MWM 関数エミュレーション" \
      -help "可能な限り MWM 関数をエミュレーションします"\
      "\n(詳細は fvwm(1) を御覧下さい)"
  CheckBox mwmOver -text "アイコン化禁止" \
      -help "「MWM 関数エミュレーション」が有効なときアイコン化を禁止します"\
      "\n(詳細は fvwm(1) を御覧下さい)"
  CheckBox mwmDecor -text "MWM 風の外観にする" \
      -help "ウインドウの外観を MWM 風にします" \
      "\n(詳細は fvwm(1) を御覧下さい)"
  CheckBox mwmMenus -text "Motif の様なメニューにする" \
      -help "Motif 似のメニューになります。 サブメニューは右へドロップダウンされ、 親メニューは消えます"
  CheckBox mwmBorders -text "境界線を Motif スタイルにする" \
      -help "境界線が Motif のようになります(深さが浅くなる)"
  CheckBox mwmButtons -text "ボタンを Motif スタイルにする" \
      -help "MWM の様にタイトルバーとタイトルバーボタンを除いて、"\
      "装飾へのフィードバックを無効にします"

  Save {
    if {$mwmFunc == 1} {print "MWMFunctionHints"}
    if {$mwmOver == 1} {print "MWMHintOverride"}
    if {$mwmDecor == 1} {print "MWMDecorHints"}
    if {$mwmMenus == 1} {print "MWMMenus"}
    if {$mwmBorders == 1} {print "MWMBorders"}
    if {$mwmButtons == 1} {print "MWMButtons"}
  }
}

proc TechnicalStuff {} {
  # 操作方法 / テクニカル・スタッフ

  Desc "スピードや使用メモリ等に影響を与える設定"
  ShortDesc "テクニカル・スタッフ"

  CheckBox appsBacking -text "アプリケーション・ウインドウにバッキング"\
      "ストアを効かせる"\
      -help "コイツを俺様に説明しろって？無理言っちゃいけねぇ。" \
      "\n(訳注) 原文は This is a bit too technical for me ;-|"\
      "\n(補足)バッキングストアとは、指定したウインドウが隠れたり"\
      "アンマップされた時に、その内容をサーバのメモリに格納する"\
      "かどうか指定する属性のことです。大抵のワークステーション"\
      "では、ウインドウ４〜５枚でメインメモリを使い尽くします。"
  CheckBox backingStore -text "FVWM の装飾にバッキングストアを効かせる" \
      -help "コイツを俺様に説明しろって？無理言っちゃいけねぇ。" \
      "\n(訳注) 原文は This is a bit too technical for me ;-|"\
      "\n(補足)バッキングストアとは、指定したウインドウが隠れたり"\
      "アンマップされた時に、その内容をサーバのメモリに格納する"\
      "かどうか指定する属性のことです。大抵のワークステーション"\
      "では、ウインドウ４〜５枚でメインメモリを使い尽くします。"
  CheckBox noPPosition -text "ウインドウを追加する際、PPosition field"\
      " を無視するようにする" \
      -help "コイツを俺様に説明しろって？無理言っちゃいけねぇ。" \
      "\n(訳注) 原文は This is a bit too technical for me ;-|"\
      "\n(補足) PPosition とは、プログラムからウインドウマネージャに送られる"\
      "ヒントの一つで、プログラム内で指定されている座標を伝えます"
  CheckBox saveUnders -text "装飾フレームにセーブアンダーを効かせる" \
      -help "コイツを俺様に説明しろって？無理言っちゃいけねぇ。" \
      "\n(訳注)原文は This is a bit too technical for me ;-|"\
      "\n(補足)セーブアンダーとは、ウインドウのマップ時にその下に隠れる内容を"\
      "サーバのメモリに格納する属性のことです。一般にポップアップメニューや"\
      "一時ウインドウに設定されています。"
  CheckBox XORvalue -text "ウィンドウの移動やリサイズの際のラバーバンド" \
      "の表示に使用する XOR 値を変更する。" \
      -help "このオプションを設定するとワイヤフレームを別の色で表示します" \
      "この値を適切に設定するには思考錯誤が必要になります"
  Int XOR -default 0 -text "\tXOR 値" \
      -help "このオプションを設定するとワイヤフレームを別の色で表示します" \
      "この値を適切に設定するには思考錯誤が必要になります"
  
  Change {
    if {$XORvalue == 1} {
      Enable XOR
    } else {
      Disable XOR
    }
  }
  
  Save {
    if {$appsBacking == 1} {print "AppsBackingStore"}
    if {$backingStore == 1} {print "BackingStore"}
    if {$noPPosition == 1} {print "NoPPosition"}
    if {$saveUnders == 1} {print "SaveUnders"}
    if {$XORvalue == 1} {
      if {$XOR == {}} {
	error "不正な XOR 値です。"
      } else {
	print "XORvalue\t$XOR"
      }
    }
      
  }
}

proc styles {} {
  # 操作方法 / ウインドウの様式
  Desc "特定ウインドウの様式"
  ShortDesc "ウインドウの様式"

  # Find the names of all the defined colors
  set colorNames [getColors]
  if {$colorNames != {}} {
    # The colors have been found
    ListBox foreColorBox -selectmode single -entries $colorNames \
	-help "これは前景色に使える色のリストです。"
    ListBox backColorBox -selectmode single -entries $colorNames \
	-help "これは背景色に使える色のリストです。"
  } else {
    error "カラー定義ファイルがありません。"
  }
  
  Entry styleName -text "ウインドウ名" \
      -help "外観を変更したいウインドウの名前です"
  
  CheckBox borderWidth -text "境界線の幅を" \
      -help "指定したウインドウの境界線幅です"
  Int borderWidthValue -textafter "ピクセルに変更" \
      -help "指定したウインドウの境界線幅です"
  Frame borderWidthFrame -entries {borderWidth borderWidthValue}

  CheckBox handleWidth -text "ハンドルの幅を" \
      -help "ウインドウのハンドル幅です"
  Int handleWidthValue -textafter "ピクセルに変更" \
      -help "ウインドウのハンドル幅です"
  Frame handleWidthFrame -entries {handleWidth handleWidthValue}

  CheckBox noIcon -text "アイコン化しない" \
      -help "ウインドウのアイコン化を抑制します"
  CheckBox icon -text "アイコンを指定する" \
      -help "ウインドウに使用するアイコンを指定します"
  Entry iconName -help "使用するアイコンのファイル名を入力します"
  Frame iconFrame -entries {noIcon icon iconName}

  CheckBox noTitle -text "タイトルバーを用いない" \
      -help "このオプションを有効にするとタイトルバーが付きません"
  CheckBox title -text "ウインドウのタイトルを指定する" \
      -help "ウインドウのタイトルを入力します"
  Entry titleName -help "指定したウインドウのタイトルを入力します"
  Frame titleFrame -entries {noTitle title titleName}

  CheckBox noHandles -text "ハンドルを付けない" \
      -help "このオプションを有効にするとウインドウにハンドルが付きません"
  CheckBox handles -text "ハンドルを付ける" \
      -help "このオプションを有効にするとウインドウにハンドルが付きます"
  Frame handlesFrame -entries {noHandles handles}

  CheckBox windowListSkip -text "ウインドウ・リストから外す" \
      -help "このオプションを有効にするとウインドウ・リストに表示されません"
  CheckBox windowListHit -text "ウインドウ・リストに入れる" \
      -help "このオプションを有効にするとウインドウ・リストに表示されません"
  Frame windowListSkipFrame -entries {windowListSkip windowListHit}

  CheckBox circulateSkip -text "サーキュレイトの対象から外す" \
      -help "サーキュレイト(循環)するときこのウインドウはスキップされます"
  CheckBox circulateHit -text "サーキュレイトの対象にする" \
      -help "このウインドウはサーキュレイト(循環)の対象になります"
  Frame circulateSkipFrame -entries {circulateSkip circulateHit}

  CheckBox staysOnTop -text "常に最前面に表示する" \
      -help "このウインドウは常に手前に表示されます"
  CheckBox staysPut -text "デスクトップに張り付かせる" \
      -help "特定のデスクトップに張り付かせます"
  Frame staysOnTopFrame -entries {staysOnTop staysPut}

  CheckBox sticky -text "スクリーンに張り付かせる" \
      -help "モニタの表面に張り付かせます"
  CheckBox slippery -text "カレントデスクトップに留める" \
      -help "カレント・デスクトップに留まり、他へ移動しません"
  Frame stickyFrame -entries {sticky slippery}

  CheckBox startIconic -text "アイコン状態で立ち上げ" \
      -help "立ち上げ時にアイコン化されます"
  CheckBox startNormal -text "ウインドウ状態で立ち上げ" \
      -help "普通にウインドウの状態で立ち上がります"
  Frame startIconicFrame -entries {startIconic startNormal}

  CheckBox foreColor -text "前景色" \
      -help "前景色を変更します"
  CheckBox backColor -text "背景色" \
      -help "背景色を変更します"
  Frame foreColorFrame -entries {foreColor foreColorBox} -orient top
  Frame backColorFrame -entries {backColor backColorBox} -orient top
  Frame colorFrame -entries {foreColorFrame backColorFrame}

  CheckBox startsAnyWhere -text "立ち上がるデスクトップの指定" \
      -help "特定のデスクトップで立ち上がるようにします"
  CheckBox startsOnDesk -text "カレントウインドウで立ち上げ" \
      -help "通常の立ち上げになります"
  Int startsOnDeskValue -help "立ち上げるデスクトップの番号を入力します"
  Frame startsOnDeskFrame -entries {
    startsAnyWhere startsOnDesk startsOnDeskValue}

  CheckBox noIconTitle -text "アイコンにタイトルを表示しない" \
      -help "強制的にアイコンにタイトルを表示しないようにします"
  CheckBox iconTitle -text "アイコンのタイトル" \
      -help "アイコン状態の時のタイトルを表示します"
  Entry iconTitleName
  Frame iconTitleFrame -entries {noIconTitle iconTitle iconTitleName}

  ExtEntry style -entries {
    styleName borderWidthFrame handleWidthFrame iconFrame titleFrame \
	handlesFrame windowListSkipFrame circulateSkipFrame staysOnTopFrame \
	stickyFrame startIconicFrame colorFrame startsOnDeskFrame \
	iconTitleFrame} -orient top -count 1 \
      -help "これはワイルドカード的に使われます。\n" \
	"全ての定義がそのウインドウに一致していれば、そのスタイルが使われますが、一致する二種類のスタイルが在った場合には二番目のスタイルが用いられます。"

  Change {
    if {$changeElm=="borderWidth"} {
      if {$borderWidth==1} {Enable borderWidthValue
      } else {Disable borderWidthValue}
    }
      
    if {$changeElm=="handleWidth"} {
      if {$handleWidth==1} {Enable handleWidthValue
      } else {Disable handleWidthValue}
    }
    
    if {$changeElm=="icon"} {if {$icon==1} {set noIcon 0}}
    if {$changeElm=="noIcon"} {if {$noIcon==1} {set icon 0}}
    if {$changeElm=="icon"} {
      if {$icon==1} {Enable iconName} else {Disable iconName}
    }

    if {$changeElm=="title"} {if {$title==1} {set noTitle 0}}
    if {$changeElm=="noTitle"} {if {$noTitle==1} {set title 0}}
    if {$changeElm=="title"} {
      if {$title==1} {Enable titleName} else {Disable titleName}
    }
      
    if {$changeElm=="handles"} {if {$handles==1} {set noHandles 0}}
    if {$changeElm=="noHandles"} {if {$noHandles==1} {set handles 0}}
    
    if {$changeElm=="windowListHit"} {if {$windowListHit==1} {
      set windowListSkip 0}}
    if {$changeElm=="windowListSkip"} {if {$windowListSkip==1} {
      set windowListHit 0}}
    
    if {$changeElm=="circulateHit"} {if {$circulateHit==1} {
      set circulateSkip 0}}
    if {$changeElm=="circulateSkip"} {if {$circulateSkip==1} {
      set circulateHit 0}}
    
    if {$changeElm=="staysPut"} {if {$staysPut==1} {set staysOnTop 0}}
    if {$changeElm=="staysOnTop"} {if {$staysOnTop==1} {set staysPut 0}}
    
    if {$changeElm=="slippery"} {if {$slippery==1} {set sticky 0}}
    if {$changeElm=="sticky"} {if {$sticky==1} {set slippery 0}}
      
    if {$changeElm=="startNormal"} {if {$startNormal==1} {set startIconic 0}}
    if {$changeElm=="startIconic"} {if {$startIconic==1} {set startNormal 0}}
    
    if {$changeElm=="foreColor"} {
      if {$foreColor==1} {Enable foreColorBox} else {Disable foreColorBox}
    }
    if {$changeElm=="backColor"} {
      if {$backColor==1} {Enable backColorBox} else {Disable backColorBox}
    }
    
    if {$changeElm=="startsOnDesk"} {if {$startsOnDesk==1} {
      set startsAnyWhere 0}}
    if {$changeElm=="startsAnyWhere"} {if {$startsAnyWhere==1} {
      set startsOnDesk 0}}
    if {$changeElm=="startsOnDesk"} {
      if {$startsOnDesk==1} {Enable startsOnDeskValue} else {
	Disable startsOnDeskValue}
    }
    
    if {$changeElm=="iconTitle"} {if {$iconTitle==1} {set noIconTitle 0}}
    if {$changeElm=="noIconTitle"} {if {$noIconTitle==1} {set iconTitle 0}}
    if {$changeElm=="iconTitle"} {
      if {$iconTitle==1} {Enable iconTitleName} else {Disable iconTitleName}
    }
  }

  Save {
    forevery style {
      if {$styleName != {}} {
	set result "Style\t\"$styleName\"\t"
	if {$borderWidth==1} {
	  if {$borderWidthValue=={}} {error "無効な境界線幅です。"}
	  append result "BorderWidth $borderWidthValue,"
	}
	if {$handleWidth==1} {
	  if {$handleWidthValue=={}} {error "無効なハンドル幅です。"}
	  append result "HandleWidth $handleWidthValue,"
	}
	if {$icon==1} {
	  if {$iconName=={}} {error "無効なアイコン名です。"}
	  append result "Icon $iconName,"
	} else {
	  if {$noIcon==1} {append result "NoIcon,"}
	}
	if {$title==1} {
	  if {$titleName=={}} {error "無効なタイトルです。"}
	  append result "Title $titleName,"
	} else {
	  if {$noTitle==1} {append result "NoTitle,"}
	}
	if {$handles==1} {
	  append result "Handles,"
	} else {
	  if {$noHandles==1} {append result "NoHandles,"}
	}
	if {$windowListSkip==1} {
	  append result "WindowListSkip,"
	} else {
	  if {$windowListHit==1} {append result "WindowListHit,"}
	}
	if {$circulateSkip==1} {
	  append result "CirculateSkip,"
	} else {
	  if {$circulateHit==1} {append result "CirculateHit,"}
	}
	if {$staysOnTop==1} {
	  append result "StaysOnTop,"
	} else {
	  if {$staysPut==1} {append result "StaysPut,"}
	}
	if {$sticky==1} {
	  append result "Sticky,"
	} else {
	  if {$slippery==1} {append result "Slippery,"}
	}
	if {$startIconic==1} {
	  append result "StartIconic,"
	} else {
	  if {$startNormal==1} {append result "StartNormal,"}
	}
	if {$foreColor==1} {append result "ForeColor $foreColorBox(name),"}
	if {$backColor==1} {append result "BackColor $backColorBox(name),"}
	if {$startsOnDesk==1} {
	  if {$startsOnDeskValue=={}} {error "無効なデスクナンバーです。"}
	  append result "StartsOnDesk $startsOnDeskValue,"
	} else {
	  if {$startsAnyWhere==1} {append result "StartsAnyWhere,"}
	}
	if {$iconTitle==1} {
	  if {$iconTitleName=={}} {error "無効なアイコンタイトルです。"}
	  append result "IconTitle $iconTitleName,"
	} else {
	  if {$noIconTitle==1} {append result "NoIconTitle,"}
	}
	if {[string index $result [expr [string length $result] - 1]] == ","} {
	  set result [string range $result 0 [expr [string length $result] - 2]]
	}
	print $result
      }
    }
  }
}
