1#############################################################################
2# Author:                                                                   #
3# ------                                                                    #
4#  Anton Kokalj                                  Email: Tone.Kokalj@ijs.si  #
5#  Department of Physical and Organic Chemistry  Phone: x 386 1 477 3523    #
6#  Jozef Stefan Institute                          Fax: x 386 1 477 3811    #
7#  Jamova 39, SI-1000 Ljubljana                                             #
8#  SLOVENIA                                                                 #
9#                                                                           #
10# Source: $XCRYSDEN_TOPDIR/Tcl/toolbox.tcl
11# ------                                                                    #
12# Copyright (c) 1996-2003 by Anton Kokalj                                   #
13#############################################################################
14
15proc FS_Toolbox {toolbox togl spin iband {multiband ""}} {
16    global FS_Interpolation toglZoom fs
17
18    # width == 700 * $xcMisc(resolution_ratio1)
19
20    if { $multiband == "" } {
21	#
22	# Interpolation
23	#
24	if { ! [info exists FS_Interpolation($togl)] } {
25	    if { [info exists fs($spin,$iband,interpolationdegree)] } {
26		set FS_Interpolation($togl) [lindex $fs($spin,$iband,interpolationdegree) 0]
27	    } else {
28		set FS_Interpolation($togl) 1
29	    }
30	}
31
32	set f_int [frame $toolbox.int -relief sunken -bd 1]
33	set l1  [label $f_int.l -text "Degree of\nInterpolation:" -font TkFixedFont -anchor w]
34	set sc1 [scale $f_int.scale -from 1 -to 6 \
35		     -font         TkFixedFont \
36		     -length       90 \
37		     -variable     FS_Interpolation($togl) \
38		     -orient       horizontal \
39		     -tickinterval 1 \
40		     -digits       1 \
41		     -resolution   1 \
42		     -showvalue    false \
43		     -width        10]
44	set submit [button $f_int.submit -text Submit -font TkFixedFont \
45			-command [list FS_Interpolation:submit $togl $spin $iband]]
46	pack $f_int -side left -padx 1m -ipadx 0m -ipady 1m
47	pack $l1 $sc1 $submit -side left -padx 1 -pady 0 -ipadx 0 -ipady 0
48    }
49
50    #
51    # Zoom
52    #
53    if { ! [info exists toglZoom($togl)] } {
54	set toglZoom($togl) 1.0
55    }
56    if { ! [info exists toglZoom($togl,zoomStep)] } {
57	set toglZoom($togl,zoomStep) 0.05
58    }
59
60    set f_zoom [frame $toolbox.zoom -relief sunken -bd 1]
61
62    # SCALE for translationStep
63
64    set l2  [label $f_zoom.l -text "Zoom\nStep:" -font TkFixedFont -anchor w]
65    set sc2 [scale $f_zoom.scale \
66		 -from 0 -to 0.4 \
67		 -font         TkFixedFont \
68		 -length       90 \
69		 -variable     toglZoom($togl,zoomStep) \
70		 -orient       horizontal \
71		 -tickinterval 0.2 \
72		 -digits       1 \
73		 -resolution   0.05 \
74		 -showvalue    false \
75		 -width        10]
76
77    # zoom buttons
78
79    set zoom1 [button $f_zoom.zoom1 -text "+" -font TkFixedFont]
80    set zoom2 [button $f_zoom.zoom2 -text "-" -font TkFixedFont]
81
82    #bind $zoom1 <ButtonPress-1>   [list toglZoom:zoom $togl $zoom1 +]
83    #bind $zoom2 <ButtonPress-1>   [list toglZoom:zoom $togl $zoom2 -]
84    bind $zoom1 <ButtonRelease-1> [list toglZoom:discreteZoom $togl +]
85    bind $zoom2 <ButtonRelease-1> [list toglZoom:discreteZoom $togl -]
86
87    pack $f_zoom -side left -padx 1m -ipadx 0m -ipady 1m
88    pack $l2 $sc2 $zoom1 $zoom2 -side left -padx 1 -pady 0 -ipadx 0 -ipady 0
89
90    if { $multiband == "" } {
91	# Revert Sides + Revert normals buttons
92	set f_revert [frame $toolbox.revert -relief sunken -bd 1]
93
94	set side [button $f_revert.side -text "Revert Sides"   -font TkFixedFont \
95		      -command [list FS_RevertIsoSides $spin $iband]]
96	set norm [button $f_revert.norm -text "Revert Normals" -font TkFixedFont \
97		      -command [list FS_RevertIsoNormals $spin $iband]]
98	pack $f_revert   -side right -padx 1m -ipadx 1m
99	pack $side $norm -side top -fill x -expand 1 -padx 1 -pady 0 -ipadx 0 -ipady 0
100    }
101}
102
103
104proc FS_RevertIsoSides {spin iband} {
105    global fs
106
107    if { $fs($spin,$iband,frontface) == "CCW" } {
108	set fs($spin,$iband,frontface) "CW"
109    } else {
110	set fs($spin,$iband,frontface) "CCW"
111    }
112    FS_Config $iband $spin
113}
114
115
116proc FS_RevertIsoNormals {spin iband} {
117    global fs
118
119    if { $fs($spin,$iband,revertnormals)  } {
120	set fs($spin,$iband,revertnormals) 0
121    } else {
122	set fs($spin,$iband,revertnormals) 1
123    }
124    FS_Config $iband $spin
125}
126