| 1 |
# UnitsProc.tcl: Units window Tcl code |
| 2 |
# by Benjamin A. Allan and Kirk A. Abbott |
| 3 |
# Created: January 1994 |
| 4 |
# Part of ASCEND |
| 5 |
# Revision: $Revision: 1.25 $ |
| 6 |
# Last modified on: $Date: 1998/06/18 15:55:05 $ |
| 7 |
# Last modified by: $Author: mthomas $ |
| 8 |
# Revision control file: $RCSfile: UnitsProc.tcl,v $ |
| 9 |
# |
| 10 |
# This file is part of the ASCEND Tcl/Tk Interface. |
| 11 |
# |
| 12 |
# Copyright (C) 1994-1998 Carnegie Mellon University |
| 13 |
# |
| 14 |
# The ASCEND Tcl/Tk Interface is free software; you can redistribute |
| 15 |
# it and/or modify it under the terms of the GNU General Public |
| 16 |
# License as published by the Free Software Foundation; either |
| 17 |
# version 2 of the License, or (at your option) any later version. |
| 18 |
# |
| 19 |
# The ASCEND Tcl/Tk Interface is distributed in hope that it will be |
| 20 |
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
| 21 |
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 22 |
# GNU General Public License for more details. |
| 23 |
# |
| 24 |
# You should have received a copy of the GNU General Public License |
| 25 |
# along with the program; if not, write to the Free Software |
| 26 |
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the |
| 27 |
# file named COPYING. COPYING is found in ../compiler. |
| 28 |
|
| 29 |
# |
| 30 |
# proc set_Units_Defaults {} |
| 31 |
#------------------------------------------------------------------------ |
| 32 |
# put Units bindings, etc here |
| 33 |
#------------------------------------------------------------------------ |
| 34 |
proc set_Units_Defaults {} { |
| 35 |
# puts "setting units buttons" |
| 36 |
global env ascUnitVect |
| 37 |
set ascUnitVect(windowname) .units |
| 38 |
set ascUnitVect(stdunits) $env(ASCENDDIST)/models/measures.a4l |
| 39 |
set ascUnitVect(filename) "mysi.a4u" |
| 40 |
set ascUnitVect(visibility) 1 |
| 41 |
set ascUnitVect(dimnames) "M Q T L TMP C E LUM P S" |
| 42 |
set ascUnitVect(cascade.M) .units.menubar.edit.basic.m0 |
| 43 |
set ascUnitVect(cascade.Q) .units.menubar.edit.basic.m1 |
| 44 |
set ascUnitVect(cascade.L) .units.menubar.edit.basic.m2 |
| 45 |
set ascUnitVect(cascade.T) .units.menubar.edit.basic.m3 |
| 46 |
set ascUnitVect(cascade.TMP) .units.menubar.edit.basic.m4 |
| 47 |
set ascUnitVect(cascade.C) .units.menubar.edit.basic.m5 |
| 48 |
set ascUnitVect(cascade.E) .units.menubar.edit.basic.m6 |
| 49 |
set ascUnitVect(cascade.LUM) .units.menubar.edit.basic.m7 |
| 50 |
set ascUnitVect(cascade.P) .units.menubar.edit.basic.m8 |
| 51 |
set ascUnitVect(cascade.S) .units.menubar.edit.basic.m9 |
| 52 |
set ascUnitVect(atombox) .units.main_frm.atom_frm.listbox1 |
| 53 |
set ascUnitVect(basicbox) .units.entry_frm.listbox1 |
| 54 |
set ascUnitVect(unitbox) .units.main_frm.units_box.listbox1 |
| 55 |
set ascUnitVect(entrybox) .units.entry_setunits.entry5 |
| 56 |
set ascUnitVect(basefiletypes) { |
| 57 |
{{New preferred units} {.a4u} } |
| 58 |
{{Old preferred units} {.uasc} } |
| 59 |
} |
| 60 |
set ascUnitVect(filetypes) $ascUnitVect(basefiletypes) |
| 61 |
set ascUnitVect(lastextension) .a4u |
| 62 |
|
| 63 |
set ascUnitVect(atomname) "" |
| 64 |
set ascUnitVect(atomdispunits) "*" |
| 65 |
Units_update_DisplayBtn |
| 66 |
Units_do_UpdateAtomBox |
| 67 |
Units_updatedefaultentry |
| 68 |
Units_update_ViewBtn |
| 69 |
# bindings |
| 70 |
bind .units.entry_setunits.entry5 <Return> {Units_CreateUnit} |
| 71 |
#tk_listboxSingleSelect $ascUnitVect(atombox) |
| 72 |
#tk_listboxSingleSelect $ascUnitVect(unitbox) |
| 73 |
VPane-Bind .units.main_frm atom_frm units_box 10 0.55 |
| 74 |
$ascUnitVect(atombox) config -exportselection 0 |
| 75 |
bind $ascUnitVect(atombox) <B1-ButtonRelease> { |
| 76 |
set atom "" |
| 77 |
if {[catch { set atom [$ascUnitVect(atombox) get \ |
| 78 |
[$ascUnitVect(atombox) curselection]] } ]} { |
| 79 |
Units_do_UpdateAtomBox |
| 80 |
Units_update_DisplayBtn |
| 81 |
} |
| 82 |
if {$atom != ""} {Units_UpdateUnitBox $atom} |
| 83 |
set ascUnitVect(atomname) $atom |
| 84 |
} |
| 85 |
bind $ascUnitVect(unitbox) <B1-ButtonRelease> { |
| 86 |
set unit "" |
| 87 |
catch { |
| 88 |
set unit \ |
| 89 |
[$ascUnitVect(unitbox) get [$ascUnitVect(unitbox) curselection]] |
| 90 |
} |
| 91 |
set ascUnitVect(atomdispunits) $unit |
| 92 |
if {$unit != ""} {Units_UpdateDisplayUnit $unit} |
| 93 |
} |
| 94 |
catch {u_setprec $ascUnitVect(precision)} |
| 95 |
|
| 96 |
ascRightMouseAddCommand $ascUnitVect(unitbox) normal \ |
| 97 |
command -label "Close window" \ |
| 98 |
-underline 0 -command {Toggle_Remote ascUnitVect} |
| 99 |
|
| 100 |
ascRightMouseAddCommand $ascUnitVect(atombox) normal \ |
| 101 |
command -label "Close window" \ |
| 102 |
-underline 0 -command {Toggle_Remote ascUnitVect} |
| 103 |
|
| 104 |
} |
| 105 |
# |
| 106 |
# proc Units_do_Font {} |
| 107 |
#--------------------------------------------------------------------- |
| 108 |
# font select button for window |
| 109 |
#--------------------------------------------------------------------- |
| 110 |
proc Units_do_Font {args} { |
| 111 |
global ascUnitVect |
| 112 |
set ascUnitVect(atombox) .units.main_frm.atom_frm.listbox1 |
| 113 |
set ascUnitVect(unitbox) .units.main_frm.units_box.listbox1 |
| 114 |
set font "" |
| 115 |
if {$args == ""} { |
| 116 |
set font [ascFontGet] |
| 117 |
} else { |
| 118 |
set font $args |
| 119 |
} |
| 120 |
if {"$font" == ""} { |
| 121 |
return; |
| 122 |
} |
| 123 |
$ascUnitVect(atombox) configure -font $font |
| 124 |
$ascUnitVect(unitbox) configure -font $font |
| 125 |
$ascUnitVect(entrybox) configure -font $font |
| 126 |
$ascUnitVect(basicbox) configure -font $font |
| 127 |
set ascUnitVect(font) [lindex [$ascUnitVect(unitbox) configure -font] 4] |
| 128 |
} |
| 129 |
|
| 130 |
# |
| 131 |
# proc Units_Redraw {} |
| 132 |
#------------------------------------------------------------------------ |
| 133 |
# repaint the units window after ascend.tcl restart |
| 134 |
#------------------------------------------------------------------------ |
| 135 |
proc Units_Redraw {} { |
| 136 |
Units_updatedefaultentry |
| 137 |
Units_do_UpdateAtomBox |
| 138 |
Units_update_DisplayBtn |
| 139 |
} |
| 140 |
|
| 141 |
# |
| 142 |
# proc Units_updatedefaultentry {} |
| 143 |
#------------------------------------------------------------------------ |
| 144 |
# updates the string in the bottom entry. |
| 145 |
#------------------------------------------------------------------------ |
| 146 |
proc Units_updatedefaultentry {} { |
| 147 |
global ascUnitVect |
| 148 |
set def [u_getbasedef] |
| 149 |
$ascUnitVect(basicbox) configure -selectforeground \ |
| 150 |
[$ascUnitVect(basicbox) cget -foreground] |
| 151 |
$ascUnitVect(basicbox) configure -selectbackground \ |
| 152 |
[$ascUnitVect(basicbox) cget -background] |
| 153 |
$ascUnitVect(basicbox) delete 0 end |
| 154 |
$ascUnitVect(basicbox) insert end {Basic units:} |
| 155 |
foreach j [u_getbasedef] { |
| 156 |
$ascUnitVect(basicbox) insert end $j |
| 157 |
} |
| 158 |
} |
| 159 |
# |
| 160 |
# proc Units_setdefunit {basedim unit} |
| 161 |
#------------------------------------------------------------------------ |
| 162 |
# sets the default display unit for basedim to be unit |
| 163 |
#------------------------------------------------------------------------ |
| 164 |
proc Units_setdefunit {basedim unit} { |
| 165 |
global ascUnitVect |
| 166 |
u_change_baseunit $unit |
| 167 |
Units_updatedefaultentry |
| 168 |
HUB_Message_to_HUB UNITSUPDATED |
| 169 |
} |
| 170 |
# |
| 171 |
# proc Units_do_AE {} |
| 172 |
#------------------------------------------------------------------------ |
| 173 |
# sets the display base units to be american engineering, including dollar |
| 174 |
#------------------------------------------------------------------------ |
| 175 |
proc Units_do_AE {} { |
| 176 |
global ascUnitVect |
| 177 |
catch {Libr_file_get $ascUnitVect(stdunits)} msg |
| 178 |
if {[catch { |
| 179 |
foreach i {lbm s ft R A lb_mole cd deg srad US} { |
| 180 |
u_change_baseunit $i |
| 181 |
} |
| 182 |
} err]} { |
| 183 |
error "Using AE units requires first loading measures.a4l" |
| 184 |
} |
| 185 |
Units_updatedefaultentry |
| 186 |
HUB_Message_to_HUB UNITSUPDATED |
| 187 |
} |
| 188 |
# |
| 189 |
# proc Units_do_CGS {} |
| 190 |
#------------------------------------------------------------------------ |
| 191 |
# sets the display base units to be cgs (but doesn't reset currency) |
| 192 |
#------------------------------------------------------------------------ |
| 193 |
proc Units_do_CGS {} { |
| 194 |
global ascUnitVect |
| 195 |
catch {Libr_file_get $ascUnitVect(stdunits)} msg |
| 196 |
if {[catch { |
| 197 |
foreach i {g s cm K A g_mole cd rad srad CR} { |
| 198 |
u_change_baseunit $i |
| 199 |
} |
| 200 |
} err]} { |
| 201 |
error "Using CGS units requires first loading measures.a4l" |
| 202 |
} |
| 203 |
Units_updatedefaultentry |
| 204 |
HUB_Message_to_HUB UNITSUPDATED |
| 205 |
} |
| 206 |
# |
| 207 |
# proc Units_do_ShowAll {} |
| 208 |
#------------------------------------------------------------------------ |
| 209 |
# show all the units |
| 210 |
#------------------------------------------------------------------------ |
| 211 |
proc Units_do_ShowAll {} { |
| 212 |
DispClear |
| 213 |
DispInsert "UNITS" |
| 214 |
set l [lsort [u_dump 2]] |
| 215 |
set old_d 0 |
| 216 |
foreach i $l { |
| 217 |
if {[string compare [lindex $i 0] $old_d]} { |
| 218 |
lappend l2 "" |
| 219 |
if {![string length [lindex $i 4]]} { |
| 220 |
lappend l2 "\t (* DIMENSIONLESS *)" |
| 221 |
} else { |
| 222 |
if {[string compare [lindex $i 4] *]} { |
| 223 |
lappend l2 "\t (* DIMENSION [lindex $i 4] *)" |
| 224 |
} else { |
| 225 |
lappend l2 "\t (* DIMENSION WILD *)" |
| 226 |
} |
| 227 |
} |
| 228 |
set old_d [lindex $i 0] |
| 229 |
} |
| 230 |
lappend l2 "\t[lindex $i 1]\t =\t \{[lindex $i 2]*[lindex $i 3]\};" |
| 231 |
} |
| 232 |
DispInsert "$l2" |
| 233 |
DispInsert "END UNITS;" |
| 234 |
newraise .display |
| 235 |
} |
| 236 |
|
| 237 |
# |
| 238 |
# proc Units_do_SI {} |
| 239 |
#------------------------------------------------------------------------ |
| 240 |
# sets the display base units to be SI mks (but doesn't reset currency) |
| 241 |
#------------------------------------------------------------------------ |
| 242 |
proc Units_do_SI {} { |
| 243 |
global ascUnitVect |
| 244 |
if {[catch { |
| 245 |
foreach i {kg s m K A mole cd rad srad CR} { |
| 246 |
u_change_baseunit $i |
| 247 |
} |
| 248 |
} err]} { |
| 249 |
error "Using abbreviated SI units requires first loading measures.a4l" |
| 250 |
} |
| 251 |
Units_updatedefaultentry |
| 252 |
HUB_Message_to_HUB UNITSUPDATED |
| 253 |
} |
| 254 |
# |
| 255 |
# proc Units_do_ReadFile {} |
| 256 |
#------------------------------------------------------------------------ |
| 257 |
# read a units user specs file |
| 258 |
#------------------------------------------------------------------------ |
| 259 |
proc Units_do_ReadFile {} { |
| 260 |
global ascUnitVect ascGlobalVect asc_tkfbox |
| 261 |
set defaultname "[pwd]" |
| 262 |
set asc_tkfbox(otherdirs) $ascGlobalVect(librarypathdirs) |
| 263 |
set filename [tk_getOpenFile \ |
| 264 |
-defaultextension "" \ |
| 265 |
-filetypes $ascUnitVect(filetypes) \ |
| 266 |
-initialdir $defaultname \ |
| 267 |
-parent .units \ |
| 268 |
-title {Read preferred units file}] |
| 269 |
|
| 270 |
if {$filename == "" || [file isdirectory $filename]} { |
| 271 |
return 1; |
| 272 |
} { |
| 273 |
set newext "[file extension $filename]" |
| 274 |
if {[catch {source $filename} ]} {error "Problem reading $filename"} |
| 275 |
set ascUnitVect(filename) $filename |
| 276 |
set ascUnitVect(lastextension) $newext |
| 277 |
ascresort_filetypes ascUnitVect lastextension |
| 278 |
if {$ascUnitVect(visibility)} { |
| 279 |
newraise .units |
| 280 |
} |
| 281 |
update idletasks |
| 282 |
} |
| 283 |
Units_updatedefaultentry |
| 284 |
Units_UpdateUnitBox $ascUnitVect(atomname) |
| 285 |
HUB_Message_to_HUB UNITSUPDATED |
| 286 |
} |
| 287 |
# |
| 288 |
# proc Units_do_WriteFile {} |
| 289 |
#------------------------------------------------------------------------ |
| 290 |
# get filename and save user set and fundamental units there |
| 291 |
#------------------------------------------------------------------------ |
| 292 |
proc Units_do_WriteFile {} { |
| 293 |
global ascUnitVect |
| 294 |
set defaultname $ascUnitVect(filename) |
| 295 |
set filename [tk_getSaveFile \ |
| 296 |
-defaultextension .uasc \ |
| 297 |
-filetypes $ascUnitVect(filetypes) \ |
| 298 |
-initialfile $defaultname \ |
| 299 |
-parent .units \ |
| 300 |
-title {Save preferred units}] |
| 301 |
|
| 302 |
if {$filename == ""} { |
| 303 |
return 1; |
| 304 |
} { |
| 305 |
if {[catch {Units_Put $filename} ]} {error "Problem writing $filename"} |
| 306 |
set ascUnitVect(filename) $filename |
| 307 |
newraise .units |
| 308 |
update idletasks |
| 309 |
} |
| 310 |
} |
| 311 |
# |
| 312 |
# proc Units_Put {file} |
| 313 |
#------------------------------------------------------------------------ |
| 314 |
# write units save file |
| 315 |
#------------------------------------------------------------------------ |
| 316 |
proc Units_Put {file} { |
| 317 |
if {[catch {set ufile [open $file w]} ]} { |
| 318 |
puts "Error writing $file" |
| 319 |
return |
| 320 |
} |
| 321 |
puts $ufile \ |
| 322 |
"\# Units in this file may be changed, saved, and read at any time." |
| 323 |
puts $ufile \ |
| 324 |
"\# To automatically load it, put the line" |
| 325 |
puts $ufile "\# \"source $file\" in your ~/.ascendrc" |
| 326 |
puts $ufile \ |
| 327 |
"\# after the line which sources ascend.tcl." |
| 328 |
foreach i [u_getbasedef] { |
| 329 |
puts $ufile "u_change_baseunit $i" |
| 330 |
} |
| 331 |
foreach i [u_get_list] { |
| 332 |
puts $ufile "u_set_user $i" |
| 333 |
} |
| 334 |
close $ufile |
| 335 |
puts stdout "wrote units data to $file" |
| 336 |
} |
| 337 |
|
| 338 |
# |
| 339 |
# proc Units_HandleSourceRead {args} |
| 340 |
#------------------------------------------------------------------------ |
| 341 |
# Update the atoms box in the units window when library changed. |
| 342 |
#------------------------------------------------------------------------ |
| 343 |
proc Units_HandleSourceRead {args} { |
| 344 |
Units_do_UpdateAtomBox |
| 345 |
Units_update_DisplayBtn |
| 346 |
global ascUnitVect |
| 347 |
if {$ascUnitVect(atomname) != ""} { |
| 348 |
Units_UpdateUnitBox $ascUnitVect(atomname) |
| 349 |
} |
| 350 |
} |
| 351 |
# |
| 352 |
# proc Units_HandleLibDestroyed {args} |
| 353 |
#------------------------------------------------------------------------ |
| 354 |
# Update the atoms box in the units window when library deleted. |
| 355 |
#------------------------------------------------------------------------ |
| 356 |
proc Units_HandleLibDestroyed {args} { |
| 357 |
Units_do_UpdateAtomBox |
| 358 |
global ascUnitVect |
| 359 |
set ascUnitVect(atomname) "" |
| 360 |
ascclearlist $ascUnitVect(unitbox) |
| 361 |
} |
| 362 |
|
| 363 |
# |
| 364 |
# Units_ChangePrecision {} |
| 365 |
#------------------------------------------------------------------------ |
| 366 |
# notify the hub of precision change |
| 367 |
#------------------------------------------------------------------------ |
| 368 |
proc Units_ChangePrecision {} { |
| 369 |
HUB_Message_to_HUB UNITSUPDATED |
| 370 |
} |
| 371 |
# |
| 372 |
# proc Units_do_Precision {} |
| 373 |
#------------------------------------------------------------------------ |
| 374 |
# set the display precision with a slider |
| 375 |
#------------------------------------------------------------------------ |
| 376 |
proc Units_do_Precision {} { |
| 377 |
global ascUnitVect |
| 378 |
ascPopSlide popslide [setpos .units 40 40] \ |
| 379 |
4 16 "Display Precision" \ |
| 380 |
Units_ChangePrecision \ |
| 381 |
[u_getprec] u_setprec |
| 382 |
} |
| 383 |
|
| 384 |
# |
| 385 |
# proc Units_UpdateDisplayUnit {unit} |
| 386 |
#------------------------------------------------------------------------ |
| 387 |
# set the internal display unit for objects of current atom dims to be |
| 388 |
# existing unit. |
| 389 |
#------------------------------------------------------------------------ |
| 390 |
proc Units_UpdateDisplayUnit {unit} { |
| 391 |
global ascUnitVect |
| 392 |
if {$unit == "default"} { |
| 393 |
u_clear_user $ascUnitVect(atomname) |
| 394 |
} else {Units_CreateUnit} |
| 395 |
HUB_Message_to_HUB UNITSUPDATED |
| 396 |
} |
| 397 |
# |
| 398 |
# proc Units_update_DisplayBtn {} |
| 399 |
#------------------------------------------------------------------------ |
| 400 |
# this procedure reconfigures the cascade menus under the display button |
| 401 |
# to show all simple units available. |
| 402 |
#------------------------------------------------------------------------ |
| 403 |
proc Units_update_DisplayBtn {} { |
| 404 |
global ascUnitVect |
| 405 |
foreach dn $ascUnitVect(dimnames) { |
| 406 |
$ascUnitVect(cascade.$dn) delete 0 last |
| 407 |
set ulist [u_frombasedim [u_dim2num $dn]] |
| 408 |
foreach u $ulist { |
| 409 |
$ascUnitVect(cascade.$dn) add command \ |
| 410 |
-label $u \ |
| 411 |
-command "Units_setdefunit $dn $u" |
| 412 |
} |
| 413 |
} |
| 414 |
} |
| 415 |
|
| 416 |
# |
| 417 |
# proc Units_update_ViewBtn {} |
| 418 |
#------------------------------------------------------------------------ |
| 419 |
# this procedure configures the view button |
| 420 |
#------------------------------------------------------------------------ |
| 421 |
proc Units_update_ViewBtn {} { |
| 422 |
|
| 423 |
global ascUnitVect |
| 424 |
global ascGlobalVect |
| 425 |
|
| 426 |
set mb .units.menubar.view |
| 427 |
|
| 428 |
if {$ascGlobalVect(saveoptions) == 1} { |
| 429 |
$mb entryconfigure 6 -state normal |
| 430 |
} else { |
| 431 |
$mb entryconfigure 6 -state disabled |
| 432 |
} |
| 433 |
} |
| 434 |
|
| 435 |
# |
| 436 |
# proc Units_GetAtomBoxList {} |
| 437 |
#------------------------------------------------------------------------ |
| 438 |
# sets the list of representative atoms for dimension -> units assignment |
| 439 |
#------------------------------------------------------------------------ |
| 440 |
proc Units_GetAtomBoxList {} { |
| 441 |
set udlist {} |
| 442 |
set ralist "" |
| 443 |
foreach i [u_getdimatoms] { |
| 444 |
if {[lsearch $udlist [lindex $i 1]] == "-1"} { |
| 445 |
lappend udlist [lindex $i 1] |
| 446 |
lappend ralist [lindex $i 0] |
| 447 |
} |
| 448 |
} |
| 449 |
return $ralist |
| 450 |
} |
| 451 |
# |
| 452 |
# proc Units_do_UpdateAtomBox {} |
| 453 |
#------------------------------------------------------------------------ |
| 454 |
# stuffs the atom box in the units window. |
| 455 |
#------------------------------------------------------------------------ |
| 456 |
proc Units_do_UpdateAtomBox {} { |
| 457 |
global ascUnitVect |
| 458 |
set ascUnitVect(atomlist) [Units_GetAtomBoxList] |
| 459 |
ascclearlist $ascUnitVect(atombox) |
| 460 |
foreach i $ascUnitVect(atomlist) { |
| 461 |
$ascUnitVect(atombox) insert end $i |
| 462 |
} |
| 463 |
} |
| 464 |
|
| 465 |
# |
| 466 |
# proc Units_GetUnitBoxList {atom} |
| 467 |
#------------------------------------------------------------------------ |
| 468 |
# sets the list of representative atoms for dimension -> units assignment |
| 469 |
#------------------------------------------------------------------------ |
| 470 |
proc Units_GetUnitBoxList {{atom "solver_var"}} { |
| 471 |
set rulist "" |
| 472 |
catch {set rulist "default [u_fromatomdim $atom]"} |
| 473 |
return $rulist |
| 474 |
} |
| 475 |
# |
| 476 |
# proc Units_UpdateUnitBox {atom} |
| 477 |
#------------------------------------------------------------------------ |
| 478 |
# stuffs the unit box in the units window with units match dim of atom |
| 479 |
#------------------------------------------------------------------------ |
| 480 |
proc Units_UpdateUnitBox {atom} { |
| 481 |
global ascUnitVect |
| 482 |
ascclearlist $ascUnitVect(unitbox) |
| 483 |
set ascUnitVect(atomdispunits) "" |
| 484 |
if {$atom!=""} { |
| 485 |
set ascUnitVect(unitlist) [Units_GetUnitBoxList $atom] |
| 486 |
foreach i $ascUnitVect(unitlist) { |
| 487 |
$ascUnitVect(unitbox) insert end $i |
| 488 |
} |
| 489 |
set ascUnitVect(atomdispunits) [u_get_units $atom] |
| 490 |
set i [lsearch $ascUnitVect(unitlist) [u_get_user $atom]] |
| 491 |
$ascUnitVect(unitbox) select set $i |
| 492 |
} |
| 493 |
} |
| 494 |
|
| 495 |
# |
| 496 |
# proc Units_CreateUnit {} |
| 497 |
#------------------------------------------------------------------------ |
| 498 |
# attempts to create a unit definition (from existing ones) and set the |
| 499 |
# matching dimensionality to have that user defined unit set. |
| 500 |
#------------------------------------------------------------------------ |
| 501 |
proc Units_CreateUnit {} { |
| 502 |
global ascUnitVect |
| 503 |
set units $ascUnitVect(atomdispunits) |
| 504 |
regsub -all { } $units "" units |
| 505 |
if {[catch {u_set_user $units} ]} { |
| 506 |
Units_UpdateUnitBox $ascUnitVect(atomname) |
| 507 |
error "Unable to parse user specified units. Check spelling." |
| 508 |
} else { |
| 509 |
catch {u_change_baseunit $units} |
| 510 |
} |
| 511 |
Units_UpdateUnitBox $ascUnitVect(atomname) |
| 512 |
HUB_Message_to_HUB UNITSUPDATED |
| 513 |
} |
| 514 |
# |
| 515 |
# proc Units_do_Help {} |
| 516 |
# proc Units_do_BindHelp {} |
| 517 |
#------------------------------------------------------------------------ |
| 518 |
# units help button calls |
| 519 |
#------------------------------------------------------------------------ |
| 520 |
proc Units_do_Help {} { |
| 521 |
Help_button units |
| 522 |
} |
| 523 |
proc Units_do_BindHelp {} { |
| 524 |
Help_button units.help.onunits |
| 525 |
} |