### 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.
###
### Tue Mar 3 1998; Japanized by Mashio Motoyama <moto@ba.mbn.or.jp>
###

proc style {} {
  # ウインドウのスタイル

  Desc "このページは全ての'ウインドウ関連'の設定を含んでおり、色やアイコンボックス、装飾等の設定を行います。"
  ShortDesc "個々のウインドウのスタイル"

  ######################################################################
  # The name of the window
  #
  Entry windowName -text "ウインドウ名"

  Help windowName \
      "設定を行いたいウインドウの名前を入力して下さい。通常はワイルドカードが利用できます。"
  #
  ######################################################################

  ######################################################################
  # Use Style
  #
  Entry useStyle -text "基本スタイル名:" -packEntry:side right

  set useStyleHelp [concat \
      "FVWM は他のスタイルからそれを受け継ぐことを可能にしています。現在のスタイルに対して、何らかのスタイルを利用したい場合には、そのスタイル名を入力します。もちろんオーバロードやオプションの追加も可能です。"]

  Help useStyle $useStyleHelp
  #
  ######################################################################

  ######################################################################
  # Use Decor
  #
  Entry useDecor -text "次の装飾名を用いる:" -packEntry:side right

  set useDecorHelp [concat \
      "このウインドウに適用する'装飾ページ'で定義した装飾名を入力します。" ]

  Help useDecor $useDecorHelp
  #
  ######################################################################

  ######################################################################
  # Mini Icon
  #
  Entry miniIcon -text "関連ミニアイコン:" \
      -packEntry:side right

  set miniIconHelp [concat \
      "このウインドウに関連付けるミニアイコンを入力します。このスタイルフラグはウインドウの見た目に対して、それ自身では何も行いません。しかしピックスマップ・ボタンを指定しているのであれば、ミニアイコンを関連付けることができます。またこれは様々なモジュールでも用いられます。"]

  Help miniIcon $miniIconHelp
  #
  ######################################################################

  ######################################################################
  # Colors
  #
  CheckBox colBox -text "カラーリングを変更"
  global colorList
  Command foreColor \
      -text "前景色" \
      -default [list "#FFFFFF" 0] \
      -setvalue {if {[lindex $foreColor 0] == ""} {
	set foreColor [list "#FFFFFF" 0]} 
	$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 }
  
  Command backColor \
      -text "背景色" \
      -default [list "#000000" 0] \
      -setvalue {if {[lindex $backColor 0] == ""} {
	set backColor [list "#000000" 0]} 
	$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 }
  
  Frame colorFrame -entries { colBox foreColor backColor }
  
  Change {
    if {$changeElm == "colBox"} {
      if {$colBox==1} {
	Enable foreColor
	Enable backColor
      } else {
	Disable foreColor
	Disable backColor
      }
    }
  }
  
  Help colBox \
      "このオプションをチェックしてウインドウの色を変更します。(\"色の設定\"のヘルプを参照して下さい。)"
    
  Help foreColor \
      "このボタンを押すことにより、このウインドウがアクティブな時のの前景色を設定する事ができます。これはまたモノクローム・アイコンの前景色やアイコンのタイトルの色にも影響を与えます。"
  
  Help backColor \
      "このボタンを押すことにより、このウインドウがアクティブな時のの背景色を設定する事ができます。これはまたモノクローム・アイコンの前景色やアイコンのタイトルの色にも影響を与えます。"
  #
  ######################################################################
  
  ######################################################################
  # Borders / Handles
  #
  CheckBox noHandles -text "ハンドルの抑制"
  CheckBox useHandles -text "ハンドルの強制"
  CheckBox borBox -text "ハンドル以外の境界線幅を"
  Int borderWidth -textafter "ピクセルに設定"
  CheckBox hanBox -text "ハンドルと境界線の幅を"
  Int handleWidth -textafter "ピクセルに設定"
  Frame hanU -entries { noHandles useHandles }
  Frame hanW -entries { hanBox handleWidth }
  Frame borW -entries { borBox borderWidth }
  Frame borderFrame -entries { hanU hanW borW } -orient top
  
  Change {
    if {$changeElm == "noHandles"} {
      if {$noHandles == 1} {
	set useHandles 0
	set hanBox 0
	Disable hanBox
	Disable handleWidth
	Enable borBox
	if {$borBox == 1} {Enable borderWidth}
      } else {
	Enable hanBox
	if {$hanBox == 1} {Enable handleWidth}
      }
    }
    if {$changeElm == "hanBox"} {
      if {$hanBox==1} {Enable handleWidth} else {Disable handleWidth}
    }
    if {$changeElm == "useHandles"} {
      if {$useHandles == 1} {
	set noHandles 0
	set borBox 0
	Disable borBox
	Disable borderWidth
	Enable hanBox
	if {$hanBox==1} {Enable handleWidth}
      } else {
	Enable borBox
	if {$borBox == 1} {Enable borderWidth}
      }
    }
    if {$changeElm == "borBox"} {
      if {$borBox==1} {Enable borderWidth} else {Disable borderWidth}
    }
  }

  Help noHandles \
      "このオプションはウインドウの境界にハンドルを表示することを抑制します。ハンドルはウインドウの角で切り取ったものです。FVWM は境界線の幅を <HandleWindth> の替わりに <BorderWidth> でセットします。"

  Help useHandles \
	  "このオプションはウインドウの境界線のハンドルをリストアします。ハンドルはウインドウの角で切り取ったものです。FVWM は <BorderWidth> の替わりに <HandleWidth> をセットします。"

  set borWidthHelp [concat \
	  "ハンドル以外の境界線幅を設定できます。これは\"ハンドルの抑制\"オプションが設定してある場合のウインドウの境界線になります。"]
      
  Help borBox $borWidthHelp
  Help borderWidth $borWidthHelp

  set hanWidthHelp [concat \
      "ハンドルと境界線の幅を設定できます。これは\"ハンドルの抑制\"オプションが設定されておらず、\"ハンドルの強制\"オプションが設定してある場合のウインドウの境界線になります。"]
      
  Help hanBox $hanWidthHelp
  Help handleWidth $hanWidthHelp
  #
  ######################################################################

  ######################################################################
  # Title
  #
  CheckBox noTitle -text "タイトルの抑制"
  CheckBox useTitle -text "タイトルの強制"
  Frame titleFrame -entries { noTitle useTitle }

  Change {
    if {$changeElm == "noTitle"} {
      if {$noTitle==1} {set useTitle 0}
    }
    if {$changeElm == "useTitle"} {
      if {$useTitle==1} {set noTitle 0}
    }
  }
  
  Help noTitle \
      "このオプションがチェックされていれば、タイトルバーは表示されません。"
  
  Help useTitle \
	  "このオプションがチェックされていれば、タイトルバーが表示されます。"
  #
  ######################################################################

  ######################################################################
  # Decorate Transients
  #
  CheckBox noTrans -text "一時装飾の抑制"
  CheckBox forceTrans -text "一時装飾の強制"
  Frame transientFrame -entries { noTrans forceTrans }

  Change {
    if {$changeElm == "noTrans"} {
      if {$noTrans==1} {set forceTrans 0}
    }
    if {$changeElm == "forceTrans"} {
      if {$forceTrans==1} {set noTrans 0}
    }
  }
  
  Help noTrans "このオプションがチェックしてあれば、一時ウインドウは如何なる装飾も施されません。一時ウインドウとは短時間のみ表示されるウインドウ(ダイアログボックス等)のことです。"
  
  Help forceTrans "これがチェックされていれば、一時ウインドウは装飾されます。一時ウインドウとは短時間のみ表示されるウインドウ(ダイアログボックス等)のことです。"
  
  #
  ######################################################################

  ######################################################################
  # Buttons
  #
  Header butH -text "ボタンに適用するかしないかの設定:" \
      -frame:relief flat -label:justify left -label:anchor nw
  for {set i 0} {$i <= 9} {incr i} {
    Label lab$i -text " $i"
    CheckBox ibut$i
    CheckBox ebut$i
    Frame fram$i -entries " lab$i ibut$i ebut$i " -orient top
  }
  Label butNo -text "番号"
  Label incl -text "含む"
  Label excl -text "除外"
  Label space -text "  "
  Frame framL -entries { butNo incl excl } -orient top
  Frame butC -entries { framL
    fram1 fram3 fram5 fram7 fram9 space
    fram0 fram8 fram6 fram4 fram2 }
  Frame buttonFrame -entries { butH butC } -orient top
  
  Change {
    if {[regexp "ibut(\[0-9\])" $changeElm all no] && $changeElm == $all} {
      if {[set ibut$no] == 1} {set ebut$no 0}
    }
    if {[regexp "ebut(\[0-9\])" $changeElm all no] && $changeElm == $all} {
      if {[set ebut$no] == 1} {set ibut$no 0}
    }
  }
  
  set butHelp1 [concat \
	  "現在のウインドウのタイトルバーの特定のボタンを、装飾に含めるか除外するか、対応するチェックボタンをチェックして設定します。FVWM は常に奇数ボタンを左へ、偶数ボタンを右へセットしています。従って、ボタンのウインドウにおける位置とチェックボタンの位置とは一致しない可能性があります。"]
  
  set butHelp2 [concat \
      "更に FVWM は正当なボタンのみ表示します。従ってこれは幾らかのボタンが表示されない可能性を含んでいます。"]
 
  # concat eats newlines...
  set butHelp "$butHelp1\n\n$butHelp2"

  for {set i 0} {$i <= 9} {incr i} {
    Help lab$i $butHelp
    Help ibut$i $butHelp
    Help ebut$i $butHelp
  }
  foreach widget { butH butNo incl excl } {
    Help $widget $butHelp
  }
  #
  ######################################################################

  ######################################################################
  # Start of windows
  #
  CheckBox startIconic -text "アイコン状態でスタート"
  CheckBox startNormal -text "ウインドウ状態でスタート"
  CheckBox startsOnDesk -text "指定デスク上でスタート:"
  Int startsOnDeskNo
  Frame startsOnDeskF -entries { startsOnDesk startsOnDeskNo }
  CheckBox startsAnywhere -text "あらゆるデスク上でスタート"
  CheckBox smartPlacement -checkbutton:justify left \
      -text "配置時に他のウインドウを覆わ\nないよう試みる"
  CheckBox dumbPlacement -checkbutton:justify left \
      -text "配置時に他のウインドウを考慮する"
  CheckBox randomPlacement -text "自動的にウインドウを配置"
  CheckBox activePlacement -text "対話的にウインドをを配置"
  CheckBox skipMapping -checkbutton:justify left \
      -text "ウインドウがスタートした\nデスクから切替ない"
  CheckBox showMapping -checkbutton:justify left \
      -text "ウインドウがスタートした\nデスクから切替える"
  CheckBox noPPosition -text "PPosition フィールドを無視"
  CheckBox usePPosition -text "PPosition フィールドを使用"

  Frame startLeft -orient top -packFrame:expand no -entries {
    startIconic startsOnDeskF smartPlacement randomPlacement skipMapping
    noPPosition
  }
  Frame startRight -orient top -entries {
    startNormal startsAnywhere dumbPlacement activePlacement showMapping
    usePPosition
  }
  Frame startFrame -entries { startLeft startRight }

  Change {
    if {$changeElm == "startIconic"} {
      if {$startIconic == 1} {set startNormal 0}
    }
    if {$changeElm == "startNormal"} {
      if {$startNormal == 1} {set startIconic 0}
    }
    if {$changeElm == "startsOnDesk"} {
      if {$startsOnDesk == 1} {
	set startsAnywhere 0
	Enable startsOnDeskNo
      } else {
	Disable startsOnDeskNo
      }
    }
    if {$changeElm == "startsAnywhere"} {
      if {$startsAnywhere == 1} {
	set startsOnDesk 0
	Disable startsOnDeskNo
      }
    }
    if {$changeElm == "smartPlacement"} {
      if {$smartPlacement == 1} {set dumbPlacement 0}
    }
    if {$changeElm == "dumbPlacement"} {
      if {$dumbPlacement == 1} {set smartPlacement 0}
    }
    if {$changeElm == "randomPlacement"} {
      if {$randomPlacement == 1} {set activePlacement 0}
    }
    if {$changeElm == "activePlacement"} {
      if {$activePlacement == 1} {set randomPlacement 0}
    }
    if {$changeElm == "skipMapping"} {
      if {$skipMapping == 1} {set showMapping 0}
    }
    if {$changeElm == "showMapping"} {
      if {$showMapping == 1} {set skipMapping 0}
    }
    if {$changeElm == "noPPosition"} {
      if {$noPPosition == 1} {set usePPosition 0}
    }
    if {$changeElm == "usePPosition"} {
      if {$usePPosition == 1} {set noPPosition 0}
    }
  }

  Help startIconic\
	  "最初の起動時にアイコン化させたいならば、このオプションをチェックします。"
  Help startNormal\
	  "通常のウインドウとして起動させたいならば、このオプションをチェックします。"
  Help startsOnDesk\
	  "これを用いればそれが常に起動する仮想デスクトップを指定することが可能となります。"
  Help startsAnywhere\
	  "何らかの仮想デスクトップ上に起動させたい場合にチェックします。"
  Help smartPlacement\
	  "これがチェックされていれば、FVWM は既存ウインドウを覆わないように試みます。もし十分なスペースがなければ FVWM はランダムに配置します。"
  Help dumbPlacement\
	  "これは FVWM が既存ウインドウを覆わないように試みる動作を抑制します。"
  Help randomPlacement\
	  "これがチェックされていれば、FVWM は勝手にウインドウを配置します。"
  Help activePlacement\
	    "これがチェックされていれば、マウスを利用して配置する位置を指定することになります。"
  Help skipMapping\
	  "他のデスク上で起動させたとしても、表示領域を作業中のデスクに止めたい場合にはこれをチェックします。"
  Help showMapping\
	  "他のデスク上で起動させた場合に、そこへ表示領域を切替えたい場合にこれをチェックします。"
  Help noPPosition\
	  "これがチェックしてあれば FVWM は PPosition フィールドを無視します。"
  Help usePPosition\
	  "これがチェックしてあれば FVWM PPosition フィールドを使用します。\n"\
	  "PPosition フィールドとはアプリケーションが起動する位置を FVWM へ伝える方法の一つです。"
  #
  ######################################################################

  ######################################################################
  # Running Windows
  #
  CheckBox windowListSkip -text "ウインドウリストから除外する"
  CheckBox windowListHit -text "ウインドウリストに含める"
  CheckBox circulateSkip -text "サーキュレイトの対象から外す"
  CheckBox circulateHit -text "サーキュレイト時にこのウインドウで止める"
  CheckBox staysOnTop -text "常に手前に表示"
  CheckBox staysPut -text "常に後ろへ表示"
  CheckBox sticky -text "スクリーンに張り付ける"
  CheckBox slippery -text "デスクに張り付ける"

  CheckBox clickToFocus\
	  -text "クリック・トゥ・フォーカス" -packFrame:expand yes
  CheckBox sloppyFocus -text "スロッピィ・フォーカス" -packFrame:expand yes
  CheckBox mouseFocus -text "マウスに従う" -packFrame:expand yes
  Frame focusFrame -entries {
    clickToFocus sloppyFocus mouseFocus
  }

  Frame runWinLeft -orient top -packFrame:expand no -entries {
    windowListSkip circulateSkip staysOnTop sticky
  }
  Frame runWinRight -orient top -entries {
    windowListHit circulateHit staysPut slippery
  }
  Frame runningFrameC -entries { runWinLeft runWinRight }
  Line runningL
  Frame runningFrame -orient top -entries {
    runningL runningFrameC focusFrame
  }

  Change {
    if {$changeElm == "windowListSkip"} {
      if {$windowListSkip == 1} {set windowListHit 0}
    }
    if {$changeElm == "windowListHit"} {
      if {$windowListHit == 1} {set windowListSkip 0}
    }
    if {$changeElm == "circulateSkip"} {
      if {$circulateSkip == 1} {set circulateHit 0}
    }
    if {$changeElm == "circulateHit"} {
      if {$circulateHit == 1} {set circulateSkip 0}
    }
    if {$changeElm == "staysOnTop"} {
      if {$staysOnTop == 1} {set staysPut 0}
    }
    if {$changeElm == "staysPut"} {
      if {$staysPut == 1} {set staysOnTop 0}
    }
    if {$changeElm == "sticky"} {
      if {$sticky == 1} {set slippery 0}
    }
    if {$changeElm == "slippery"} {
      if {$slippery == 1} {set sticky 0}
    }
    if {$changeElm == "clickToFocus"} {
      if {$clickToFocus == 1} {
	set sloppyFocus 0
	set mouseFocus 0
      }
    }
    if {$changeElm == "sloppyFocus"} {
      if {$sloppyFocus == 1} {
	set clickToFocus 0
	set mouseFocus 0
      }
    }
    if {$changeElm == "mouseFocus"} {
      if {$mouseFocus == 1} {
	set clickToFocus 0
	set sloppyFocus 0
      }
    }
  }

  Help windowListSkip\
	  "これがチェックされていれば、このウインドウはウインドウリストに表示されません。"
  Help windowListHit\
	  "これがチェックされていれば、他の一般的なスタイルでウインドウリストから除外する設定がなされていたとしても、ウインドウリストへ表示されます。"
  Help circulateSkip\
	  "これがチェックされていれば、ウインドウを循環表示させる際に、このウインドウをその対象から除外します。"
  Help circulateHit\
	  "これがチェックされていれば、他の一般的なスタイルで除外する設定がなされていたとしても、循環表示の対象となります。"
  Help staysOnTop\
	  "このオプションはそのウインドウを常に一番上に表示します。"
  Help staysPut\
	  "このオプションはそのウインドウを常に一番下に表示します。"
  Help sticky\
	  "このウインドウをスクリーンに張り付けたいならば、これをチェックします。"
  Help slippery\
	  "このウインドウをデスクトップに張り付けたいならば、これをチェックします。"
  Help clickToFocus\
	  "クリック・トゥ・フォーカスとはクリックによってキーボードのフォーカスを得るものです。"
  Help sloppyFocus\
	  "スロッピィ・フォーカスとはマウスに従ってフォーカスを得る動作のことですが、マウスがスロッピィ・フォーカスやマウス・フォーカスを使っている他のウインドウに入っている間は自由なフォーカスを行いません。"
  Help mouseFocus\
	  "マウス・フォーカスとはマウスによってキーボード・フォーカスを得る動作のことです。このウインドウはマウス・カーソルが入ることによって入力フォーカスを得ます。"
  #
  ######################################################################

  ######################################################################
  # Technical
  #
  CheckBox olDecor -text "OpenLook(tm) ヒントを考慮する"
  CheckBox noOlDecor -text "OpenLook(tm) ヒントを無視する"
  CheckBox lenience -checkbutton:justify left \
      -text "ICCCM 入力フィールドを無視する"
  CheckBox noLenience -checkbutton:justify left \
      -text "ICCCM 入力フィールドを考慮する"

  Frame technicalLeft -orient top -packFrame:expand no -entries {
    olDecor lenience
  }
  Frame technicalRight -orient top -entries {
    noOlDecor noLenience
  }
  Frame technicalFrameC -entries { technicalLeft technicalRight }
  Line technicalL
  Frame technicalFrame -orient top -entries { technicalL technicalFrameC }

  Change {
    if {$changeElm == "olDecor"} {
      if {$olDecor == 1} {set noOlDecor 0}
    }
    if {$changeElm == "noOlDecor"} {
      if {$noOlDecor == 1} {set olDecor 0}
    }
    if {$changeElm == "lenience"} {
      if {$lenience == 1} {set noLenience 0}
    }
    if {$changeElm == "noLenience"} {
      if {$noLenience == 1} {set lenience 0}
    }
  }

  Help olDecor \
	  "これを選択すると FVWM は OpenLook(tm)"\
	  "アプリケーションが利用する装飾ヒントを考慮するよう試みます。"
  Help noOlDecor\
	  "これを選択すると FVWM は OpenLook(tm)"\
	  "アプリケーションが利用する装飾ヒントを無視します。"
  Help lenience\
	  "この指示により FVWM はICCCM 規約を無視します。"\
	  "wm_hints 構造体の入力フィールドに偽がセットされていた場合、ウインドウマネージャに対して入力フォーカスを要求しなくなります。" 
  Help noLenience\
	  "この指示により FVWM はICCCM 規約を尊重します。"\
	  "wm_hints 構造体の入力フィールドに偽がセットされていた場合、ウインドウマネージャに対して入力フォーカスを要求しなくなります。" 
  #
  ######################################################################

  ######################################################################
  # Icon
  #
  CheckBox noIcon -text "アイコン禁止"
  CheckBox useIcon -text "アイコン表示"
  Frame icoU -entries { noIcon useIcon }
  CheckBox icoBox -text "アイコン名指定:"
  Entry icon
  Frame icoC -entries { icoBox icon }
  Frame iconFrame -entries { icoU icoC } -orient top
  
  Change {
    if {$changeElm == "useIcon"} {
      if {$useIcon==1} {
	set noIcon 0
	Enable icoBox
	if {$icoBox == 1} {Enable icon}
	Enable noIct
	Enable useIct
      } else {
	set icoBox 0
	Disable icoBox
	Disable icon
	set noIct 0
	set useIct 0
	Disable noIct
	Disable useIct
      }
    }
    if {$changeElm == "noIcon"} {
      if {$noIcon==1} {
	set useIcon 0
	set icoBox 0
	Disable icoBox
	Disable icon
	set noIct 0
	set useIct 0
	Disable noIct
	Disable useIct
      }
    }
    if {$changeElm == "icoBox"} {
      if {$icoBox == 1} {Enable icon} else {Disable icon}
    }
  }
  
  Help noIcon \
	  "これを選択すると、ウインドウをアイコン化してもアイコンは表示されません。"
  Help useIcon \
      "これを選択すると、ウインドウをアイコン化した際にウインドウの標準アイコンが表示されます。また任意で表示するアイコンファイルの名前を明記することが可能です。"
  set iconHelp [concat \
      "このフィールドでアイコンの名前を明記すると、ウインドウがアイコン化された際にそれが表示されます。" ]

  Help icoBox $iconHelp
  Help icon $iconHelp
  #
  ######################################################################

  ######################################################################
  # Icon Title
  #
  CheckBox noIct -text "アイコン・タイトル抑制"
  CheckBox useIct -text "アイコン・タイトル強制"
  Frame iconTitleFrame -entries { noIct useIct }

  Change {
    if {$changeElm == "noIct"} {
      if {$noIct==1} {set useIct 0}
    }
    if {$changeElm == "useIct"} {
      if {$useIct==1} {set noIct 0}
    }
  }
  
  Help noIct \
	  "これを選択すると、ウインドウをアイコン化した際にアイコンタイトルは表示されません。"\
	  "\n\nNote:"\
	  "これはアイコンが表示される場合にのみ有効です。従ってアイコン表示が禁止されている場合には、この設定は意味を持ちません。"
  Help useIct \
	  "これを選択すると、ウインドウをアイコン化した際にタイトルが表示されます。"\
	  "\n\nNote:"\
	  "これはアイコンが表示される場合にのみ有効です。従ってアイコン表示が禁止されている場合には意味を持ちません。"
  
  #
  ######################################################################

  ######################################################################
  # IconBox + Sticky/Slippery
  #
  CheckBox icbC -text "アイコン表示エリア:"
  Int icbLeft -text 左
  Int icbTop -text 上
  Int icbRight -text 右
  Int icbBottom -text 下
  Frame icbF -entries { icbC icbLeft icbTop icbRight icbBottom }
  CheckBox stickyIcon -text "スティッキー・アイコン"
  CheckBox slipperyIcon -text "スティッキー・アイコン禁止"
  Frame stickF -entries { stickyIcon slipperyIcon }
  Frame iconBoxFrame -entries { icbF stickF } -orient top

  Change {
    if { $changeElm == "icbC" } {
      if { $icbC == 1 } { Enable icbLeft icbTop icbRight icbBottom
      } else { Disable icbLeft icbTop icbRight icbBottom }
    }
    if { $changeElm == "stickyIcon" } {
      if { $stickyIcon == 1 } { set slipperyIcon 0 }
    }
    if { $changeElm == "slipperyIcon" } {
      if { $slipperyIcon == 1 } { set stickyIcon 0 }
    }
  }

  Help icbC "アイコンボックスは FVWM が指定するアイコン・フィールドへ位置します。指定方法は四つの座標(上下左右)で行い、負の値はスクリーンの右(下)からの相対座標になります。"
    Help icbLeft "アイコン・ボックス左端の X 座標を入力します。"
  Help icbTop "アイコン・ボックス上端の Y 座標を入力します。"
  Help icbRight "アイコン・ボックス右端の X 座標を入力します。"
  Help icbBottom "アイコン・ボックス下端の Y 座標を入力します。"

  Help stickyIcon "これを選択すると、アイコンが物理スクリーンに貼り付きます。つまり仮想デスクトップ間を移動しても、アイコンが画面上に表示されます。"
  Help slipperyIcon "これを選択するとアイコンは仮想デスクトップ上に留まります。"
  #
  ######################################################################

  ######################################################################
  # MWM Stuff
  #
  CheckBox mwmBut  -text "MWM ボタン"
  CheckBox fvwmBut -text "FVWM ボタン"
  CheckBox mwmBor  -text "MWM 境界線"
  CheckBox fvwmBor -text "FVWM 境界線"
  CheckBox mwmDec  -text "MWM 装飾ヒント容認"
  CheckBox noDec   -text "MWM 装飾ヒント拒否"
  CheckBox mwmFunc -text "MWM 関数ヒント容認"
  CheckBox noFunc  -text "MWM 関数ヒント拒否"
  CheckBox mwmHint -text "MWM 関数ヒント無効化"
  CheckBox noHint  -text "MWM 関数ヒント尊重"
  
  Frame mwmLeft  -entries { mwmBut mwmBor mwmDec mwmFunc mwmHint } \
      -orient top
  Frame mwmRight -entries { fvwmBut fvwmBor noDec noFunc noHint } \
      -orient top
  Frame mwmFrame -entries { mwmLeft mwmRight }
  
  Change {
    if {$changeElm == "mwmBut"} {if {$mwmBut == 1} {set fvwmBut 0}}
    if {$changeElm == "fvwmBut"} {if {$fvwmBut == 1} {set mwmBut 0}}
    if {$changeElm == "mwmBor"} {if {$mwmBor == 1} {set fvwmBor 0}}
    if {$changeElm == "fvwmBor"} {if {$fvwmBor == 1} {set mwmBor 0}}
    if {$changeElm == "mwmDec"} {if {$mwmDec == 1} {set noDec 0}}
    if {$changeElm == "noDec"} {if {$noDec == 1} {set mwmDec 0}}
    if {$changeElm == "mwmFunc"} {
      if {$mwmFunc == 1} {
	set noFunc 0
	Enable mwmHint
	Enable noHint
      } else {
	set mwmHint 0
	set noHint 0
	Disable mwmHint
	Disable noHint
      }
    }
    if {$changeElm == "noFunc"} {
      if {$noFunc == 1} {
	set mwmFunc 0
	set mwmHint 0
	set noHint 0
	Disable mwmHint
	Disable noHint
      }
    }
    if {$changeElm == "mwmHint"} {if {$mwmHint == 1} {set noHint 0}}
    if {$changeElm == "noHint"} {if {$noHint == 1} {set mwmHint 0}}
  }
  
  Help mwmBut \
	  "タイトルバー・ボタンの外観と操作性を MWM 風にします。"
  Help fvwmBut \
	  "FVWM 標準の外観と操作性になります。このスタイルは"\
	  "MWM と比べてより大きい\"深さ(depth)\"を必要とします。"\
	  "\n\n訳注:"\
	  "深さ(depth)はその名のとおり画面の z"\
	  "方向の値で、この値が大きい程多くの色を表示できます。例えば"\
	  "depth 4 なら 16 色になります。詳しい事は"\
	  "X プログラミングの本でも参照してください。"
  
  Help mwmBor \
	  "ウインドウの境界線とハンドルに Motif Window Manager 風の外観と操作性を与えます。"
  
  Help fvwmBor \
	  "FVWM 標準の外観と操作性になります。このスタイルは"\
	  "MWM と比較してより大きな\"深さ(depth)\"を必要とします。"\
	  "\n\n訳注:"\
	  "深さ(depth)はその名のとおり画面の z"\
	  "方向の値で、この値が大きい程多くの色を表示できます。例えば"\
	  "depth 4 なら 16 色になります。詳しい事は"\
	  "X プログラミングの本でも参照してください。"

  Help mwmDec \
	  "これを選択すると MWM の装飾ヒントを可能な限り受け入れます。"
  Help noDec \
	  "これを選択すると MWM の装飾ヒントを無視します。"
  Help mwmFunc \
	  "これを選択すると MWM の禁則操作ヒントを可能な限り受け入れます。"
  Help noFunc \
	  "これを選択すると MWM の禁則操作ヒントを無視します。"
  Help mwmHint \
	  "これを選択すると MWM の禁則操作ヒントを無効化します。"
  Help noHint \
	  "これを選択すると MWM の禁則操作ヒントを処理できないようにします。"

  #
  ######################################################################

  ######################################################################
  # Windows
  #

  # Window Appearance
  Header windowAppearanceH -text "ウインドウの外観" -frame:relief flat
  Line winAppL
  Window windowAppearance -text "ウインドウの外観" -entries {
    windowAppearanceH winAppL colorFrame borderFrame titleFrame
    transientFrame buttonFrame
  } -pageEnd {
    if {$borBox==1 && $borderWidth==""} {
      error [concat \
		 "$windowName にエラーがあります。\n " \
		 "ハンドル以外の境界線幅に無効な値が与えられています。" \
		 "\"境界線幅の変更...\"チェックボックスを非選択にするか、正しい値を入力し直して下さい。"]
    }
    if {$hanBox==1 && $handleWidth==""} {
      error [concat \
		 "$windowName にエラーがあります。\n " \
		 "ハンドルと境界線の幅に無効な値が与えられています。" \
		 "\"境界線幅の変更...\"チェックボックスを非選択にするか、正しい値を入力し直して下さい。"]
    }
  }

  set winAppHelp [concat \
	  "このページではウインドウの装飾についての設定を行います。これにはカラーリングやボタン、境界線等が含まれています。"]

  Help windowAppearanceH $winAppHelp
  Help windowAppearance  $winAppHelp

  # Window Behavior
  Header windowBehaviorH -text "ウインドウの振舞" -frame:relief flat
  Line winBehL
  Window windowBehavior -text "ウインドウの振舞" -entries {
    windowBehaviorH winBehL startFrame runningFrame technicalFrame
  } -pageEnd {
    if {$startsOnDesk == 1} {
      if {$startsOnDeskNo == "" || $startsOnDeskNo < 0} {
	error "$windowName にエラーがあります。\n無効なデスク番号が与えられています。"
      }
    }
  }

  set winBehHelp [concat\
	  "このページでは外観と操作性についての設定を行います。これにはどれだけのウインドウをスクリーンに表示するか、アプリケーションの動作中にどのような振舞をさせるかが含まれています。"]
  Help windowBehaviorH $winBehHelp
  Help windowBehavior  $winBehHelp

  # Icon Appearance
  Header iconAppearanceH -text "アイコンの外観" -frame:relief flat
  Line icoAppL
  Window iconAppearance -text "アイコンの外観" -entries {
    iconAppearanceH icoAppL iconFrame iconTitleFrame iconBoxFrame
  } -pageEnd {
    if {$icoBox == 1 && $icon == ""} {error "Empty string in \"Icon\""}
    if {$icbC == 1} {
      if {$icbLeft == "" || $icbTop == "" ||
	  $icbRight == "" || $icbBottom == "" } {
	error "Invalid icon box coordinates for style $windowName"
      }
    }
  }

  set icoAppHelp [concat \
	  "このページでは最小化ウインドウ(アイコン)の見た目を設定します。"]

  Help iconAppearanceH $icoAppHelp
  Help iconAppearance  $icoAppHelp
  
  # MWM
  Header mwmH -text "MWM オプション" -frame:relief flat
  Line mwmL
  Window mwm -text "MWM オプション" \
      -entries { mwmH mwmL mwmFrame }
  
  Help mwm \
	  "このページでは FVWM に MWM の動作を模倣させるかさせないかを設定します。"
  Help mwmH \
	  "このページでは FVWM に MWM の動作を模倣させるかさせないかを設定します。"
  #
  ######################################################################

  Line styleL
  ExtEntry style \
    -entries { windowName
               styleL
	       useStyle
	       useDecor
	       miniIcon
	       windowAppearance
               windowBehavior
               iconAppearance
               mwm
	     } \
    -index windowName -orient top -count 1
  #
  ######################################################################
  
  ######################################################################
  # Save
  #
  Save {
    forevery style {
      if {$windowName == {}} {
	tk_dialog .savedialog Warning \
	    "警告:\nスタイルエントリにウインドウ名が与えられていないため、このスタイルは生成されません。" info 0 OK
      } else {
	set result "Style\t\"$windowName\"\t"
	if {$useStyle != ""} {append result "UseStyle $useStyle,"}
	if {$useDecor != ""} {append result "UseDecor \"$useDecor\","}
	if {$miniIcon != ""} {append result "MiniIcon $miniIcon,"}
	if {$colBox == 1} {
	  append result "ForeColor [hash2rgb [lindex $foreColor 0]],"
	  append result "BackColor [hash2rgb [lindex $backColor 0]],"
	}
	if {$noHandles  == 1} {append result "NoHandles,"}
	if {$useHandles == 1} {append result "Handles,"}
	if {$borBox     == 1} {append result "BorderWidth $borderWidth,"}
	if {$hanBox     == 1} {append result "HandleWidth $handleWidth,"}
	if {$noTitle    == 1} {append result "NoTitle,"}
	if {$useTitle   == 1} {append result "Title,"}
	if {$noTrans      == 1} {append result "NakedTransient,"}
	if {$forceTrans   == 1} {append result "DecorateTransient,"}
	if {$startIconic  == 1} {append result "StartIconic,"}
	if {$startNormal  == 1} {append result "StartNormal,"}
	if {$startsOnDesk == 1} {append result "StartsOnDesk $startsOnDeskNo,"}
	if {$startsAnywhere  == 1} {append result "StartsAnywhere,"}
	if {$smartPlacement  == 1} {append result "SmartPlacement,"}
	if {$dumbPlacement   == 1} {append result "DumbPlacement,"}
	if {$randomPlacement == 1} {append result "RandomPlacement,"}
	if {$activePlacement == 1} {append result "ActivePlacement,"}
	if {$skipMapping     == 1} {append result "SkipMapping,"}
	if {$showMapping     == 1} {append result "ShowMaping,"}
	if {$noPPosition     == 1} {append result "NoPPosition,"}
	if {$usePPosition    == 1} {append result "UsePPosition,"}
	if {$windowListSkip  == 1} {append result "WindowListSkip,"}
	if {$windowListHit   == 1} {append result "WindowListHit,"}
	if {$circulateSkip   == 1} {append result "CirculateSkip,"}
	if {$circulateHit    == 1} {append result "CirculateHit,"}
	if {$staysOnTop      == 1} {append result "StaysOnTop,"}
	if {$staysPut        == 1} {append result "StaysPut,"}
	if {$sticky          == 1} {append result "Sticky,"}
	if {$slippery        == 1} {append result "Slippery,"}
	if {$clickToFocus    == 1} {append result "ClickToFocus,"}
	if {$sloppyFocus     == 1} {append result "SloppyFocus,"}
	if {$mouseFocus      == 1} {append result "MouseFocus,"}
	if {$olDecor         == 1} {append result "OLDecor,"}
	if {$noOlDecor       == 1} {append result "NoOLDecor,"}
	if {$lenience        == 1} {append result "Lenience,"}
	if {$noLenience      == 1} {append result "NoLenience,"}
	if {$useIcon == 1} {
	  append result "Icon"
	  if {$icoBox == 1} {append result " $icon"}
	  append result ","
	}
	if {$noIcon == 1} {append result "NoIcon,"}
	if {$useIct == 1} {append result "IconTitle,"}
	if {$noIct  == 1} {append result "NoIconTitle,"}
	if {$icbC   == 1} {
	  append result "IconBox $icbLeft $icbTop $icbRight $icbBottom,"
	}
	if {$stickyIcon   == 1} {append result "StickyIcon,"}
	if {$slipperyIcon == 1} {append result "SlipperyIcon,"}
	if {$mwmBut  == 1} {append result "MWMButtons,"}
	if {$fvwmBut == 1} {append result "FvwmButtons,"}
	if {$mwmBor  == 1} {append result "MWMBorder,"}
	if {$fvwmBor == 1} {append result "FvwmBorder,"}
	if {$mwmDec  == 1} {append result "MWMDecor,"}
	if {$noDec   == 1} {append result "NoDecorHint,"}
	if {$mwmFunc == 1} {append result "MWMFunctions,"}
	if {$noFunc  == 1} {append result "NoFuncHint,"}
	if {$mwmHint == 1} {append result "HintOverride,"}
	if {$noHint  == 1} {append result "NoOverride,"}
	
	for {set i 0} {$i <= 9} {incr i} {
	  if {[set ibut$i] == 1} {append result "Button $i,"}
	  if {[set ebut$i] == 1} {append result "NoButton $i,"}
	}
	
	# Strip last comma
	if {[string index $result [expr [string length $result] - 1]] == ","} {
          set result \
	      [string range $result 0 [expr [string length $result] - 2]]
          print $result
        } else {
	  error "\"$windowName\ にオプションが与えられていません。""
	}
      }
    }
  }
  #
  ######################################################################
}

