Viewing file: wacomcpl-exec (30.06 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/bin/bash
#\
exec wish -f "$0" ${1+"$@"}
#
# wacomcpl-exec -- Wacom Control Panel Utility to Change Configuration Setting.
#
# Author : Ping Cheng
# Creation date : 04/05/2003
#
# Based on calibrate 1998-99 Patrick Lecoanet --
#
# This code is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This code 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this code; if not, write to the Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
package require LIBWACOMXI
set currentScreen 0
set desktopWidth [ winfo screenwidth . ]
set desktopHeight [ winfo screenheight . ]
set screenWidth [ winfo screenwidth . ]
set screenHeight [ winfo screenheight . ]
set screenX_org 0
set screenY_org 0
set swapThresh 100
set size 400
set circle_size 10
set line_size 30
set config_file "~/.wacomcplrc"
set origin_x [ expr ($desktopWidth/2) - ($desktopWidth/4) ]
set origin_y [ expr ($desktopHeight/2) - ($desktopHeight/4) ]
set windowSize "540x300"
set device ""
set deviceIndex 0
set showHelp 0
proc updateCurrentScreenInfo {} {
global device numScreens currentScreen
global screenWidth screenHeight screenX_org screenY_org
global getScreenInfo
if { $numScreens($device) != 1 } {
set screenInfo $getScreenInfo($device,Screen$currentScreen)
set screenWidth [ lindex $screenInfo 0 ]
set screenHeight [ lindex $screenInfo 1 ]
set screenX_org [ lindex $screenInfo 2 ]
set screenY_org [ lindex $screenInfo 3 ]
}
}
proc pad {name geometry} {
global size circle_size line_size
set circleox [ expr $size/2-$circle_size/2 ]
set circleoy $circleox
set circlecx [ expr $circleox+$circle_size ]
set circlecy $circlecx
set vertx [ expr $size/2 ]
set vertoy [ expr ($size-$line_size)/2 ]
set vertcy [ expr $vertoy+$line_size ]
set horizox [ expr ($size-$line_size)/2 ]
set horizcx [ expr $horizox+$line_size ]
set horizy [ expr $size/2 ]
toplevel $name
wm geometry $name $geometry
wm overrideredirect $name true
canvas $name.m -height $size -width $size -bg "#505075"
$name.m create oval $circleox $circleoy $circlecx $circlecy -outline white
$name.m create line $vertx $vertoy $vertx $vertcy -fill white
$name.m create line $horizox $horizy $horizcx $horizy -fill white
pack $name.m
}
proc updateXinitrc {device option value} {
global config_file
if { ![ file exists $config_file ] } {
exec echo "xsetwacom set $device $option \"$value\"" > $config_file
} else {
file copy -force $config_file $config_file~
file copy -force $config_file /tmp/wacomcpl.tmp
exec sed -e "/xsetwacom set $device $option /d" /tmp/wacomcpl.tmp > /tmp/wacomcpl2.tmp
exec echo "xsetwacom set $device $option \"$value\"" > $config_file
exec cat /tmp/wacomcpl2.tmp >> $config_file
file delete -force /tmp/wacomcpl2.tmp /tmp/wacomcpl.tmp
}
if { $option == "PressCurve" } {
set index 0
set v1 [ lindex $value $index ]
for { set i 2 } { $i < 5 } { incr i 1 } {
set index [ expr $index+1 ]
set v$i [ lindex $value $index ]
}
exec xsetwacom set $device $option $v1 $v2 $v3 $v4
} else {
exec xsetwacom set $device $option $value
}
}
proc calibrationSequence {which xDev yDev} {
global device calibResults screenY_org screenX_org
global workingTags screenTags size numScreens
global swapThresh screenWidth screenHeight
global getDeviceModel
set calibResults(xDev,$which) $xDev
set calibResults(yDev,$which) $yDev
if { $which == 0 } {
.topleft.m configure -background "#505075"
wacomxi::bindevent .topleft.m $device ""
.bottomright.m configure -background "#df94df"
wacomxi::bindevent .bottomright.m $device \
{calibrationSequence 1 %0 %1}
} elseif { $which == 1 } {
.bottomright.m configure -background "#505075"
wacomxi::bindevent .bottomright.m $device ""
set borderOffset [expr ($size / 2 )]
set widthDev [expr $calibResults(xDev,1) - $calibResults(xDev,0)]
set heightDev [expr $calibResults(yDev,1) - $calibResults(yDev,0)]
set widthX [expr $screenWidth - (2 * $borderOffset)]
set heightX [expr $screenHeight - (2 * $borderOffset)]
#
# A rough verification of the click
set clickCheck 0
set xDevMin $calibResults(xDev,0)
set xDevMax $calibResults(xDev,1)
set yDevMin $calibResults(yDev,0)
set yDevMax $calibResults(yDev,1)
if { $calibResults(xDev,1) < $calibResults(xDev,0) } {
set clickCheck 1
set xDevMin $calibResults(xDev,1)
set xDevMax $calibResults(xDev,0)
}
if { $calibResults(yDev,1) < $calibResults(yDev,0) } {
set clickCheck 1
set yDevMin $calibResults(yDev,1)
set yDevMax $calibResults(yDev,0)
}
if { $clickCheck == 1 } {
messageWindow "Warning !!!" \
"\n\nThere was something unusual in your calibration step.\n\
If you are pretty sure that you have clicked on the center\n\
of the pink crosshair, you are fine. Otherwise, try it again."
}
set xDevMin [expr $xDevMin - ($borderOffset * $widthDev / $widthX)]
set xDevMax [expr $xDevMax + ($borderOffset * $widthDev / $widthX)]
set yDevMin [expr $yDevMin - ($borderOffset * $heightDev / $heightX)]
set yDevMax [expr $yDevMax + ($borderOffset * $heightDev / $heightX)]
updateXinitrc $device topx $xDevMin
updateXinitrc $device topy $yDevMin
updateXinitrc $device bottomx $xDevMax
updateXinitrc $device bottomy $yDevMax
# send the same data to the associated eraser
set eraser $getDeviceModel($device,eraser)
if { [ string compare $eraser $device ] } {
updateXinitrc $eraser topx $xDevMin
updateXinitrc $eraser topy $yDevMin
updateXinitrc $eraser bottomx $xDevMax
updateXinitrc $eraser bottomy $yDevMax
}
destroy .topleft .bottomright
if { $numScreens($device) > 1 } {
.screen.list.label configure -text ""
bindtags .screen.list.list $screenTags
} else {
closeTabWindow
}
}
}
proc Calibration {} {
global numScreens device screenTags getOption Option
set Option(1) "Mode"
getDeviceOptionProc $device 1
set mode $getOption($device,Mode)
if { $mode != 1 } {
disableButtons
messageWindow "Warning " "\n\nDevice $device is in relative mode. \n\
You can calibrate $device only when it is in absolute mode. \n\
Please swith $device's mode and try again. "
closeTabWindow
return
}
bindtags .workingDev.list .
if { $numScreens($device) > 1 } {
displayScreenList $device
set screenTags [ bindtags .screen.list.list]
.screen.list.title configure -text "Select $device associated Screen:"
wm state .screen normal
} else {
updateCurrentScreenInfo
startCalibration
}
disableButtons
}
proc startCalibration {} {
global device calibResults
global screenX_org screenY_org size numScreens
global screenWidth screenHeight
if { $numScreens($device) > 1 } {
bindtags .screen.list.list .
}
set y_coor [ expr $screenY_org+$screenHeight-$size ]
set x_coor [ expr $screenX_org+$screenWidth-$size ]
pad .topleft +$screenX_org+$screenY_org
pad .bottomright +$x_coor+$y_coor
update
#
# Start calib sequence
catch {unset calibResults}
exec xsetwacom set $device xydefault
.topleft.m configure -background "#df94df"
wacomxi::bindevent .topleft.m $device \
{calibrationSequence 0 %0 %1}
helpWindow "Help Window " \
"\n\nPlease click on the center of \n\
the pink crosshair using $device \n\
Please don't click on anything else \n\
by $device before you finish"
}
proc helpWindow { tString mString } {
global showHelp
if { $showHelp } {
messageWindow $tString $mString
}
}
proc messageWindow { tString mString } {
toplevel .mWindow
wm title .mWindow $tString
wm transient .mWindow .
text .mWindow.text -background gray -width 40 -height 10
button .mWindow.dismiss -text "Dismiss" \
-command "destroy .mWindow; set ok 1"
.mWindow.text insert end $mString
pack .mWindow.text .mWindow.dismiss
#
# Do some spiffy animation to draw attention !
for { set i 0 } { $i < 10 } { incr i } {
after 100
.mWindow.text configure -background white
update
after 100
.mWindow.text configure -background gray
update
}
tkwait variable ok
}
proc updateScreenList {} {
global currentScreen numScreens screenWidth screenHeight
global device screenX_org screenY_org origin_x origin_y
if { $numScreens($device) > 1 } {
set cScreen [ .screen.list.list get anchor ]
for { set i 0 } { $i < $numScreens($device) } { incr i 1 } {
if { $cScreen == "Screen$i" } {
set currentScreen $i
set i $numScreens($device)
}
}
}
updateCurrentScreenInfo
set origin_x [ expr $screenX_org+$screenWidth/2-$screenWidth/4 ]
set origin_y [ expr $screenY_org+$screenHeight/2-$screenHeight/4 ]
wm geometry . =+$origin_x+$origin_y
.screen.list.label configure -text $cScreen
set o_x [ expr $origin_x+100 ]
set o_y [ expr $origin_y+20 ]
wm geometry .screen =+$o_x+$o_y
startCalibration
}
proc disableButtons {} {
global bName
if { $bName(pressure) == 1 } {
.panel.pressure configure -state disabled
}
if { $bName(calibrate) == 1 } {
.panel.calibrate configure -state disabled
}
if { $bName(button) == 1 } {
.panel.button configure -state disabled
}
if { $bName(mapping) == 1 } {
.panel.mapping configure -state disabled
}
}
proc getDeviceOptionProc { dev i } {
global getOption getOptionDefault Option db
for { set j 1 } { $j < [ expr $i+1 ] } { incr j 1 } {
set value [ exec xsetwacom get $dev $Option($j) ]
set value1 [ exec xsetwacom getdefault $dev $Option($j) ]
if { ![ string compare -nocase -length 10 $Option($j) "PressCurve" ] } {
set getOption($dev,PressCurve) 4
set getOptionDefault($dev,PressCurve) 4
set p0 [ expr ( $value >> 24) & 0xFF ]
set p1 [ expr ( $value >> 16) & 0xFF ]
if { ($p1 > 5) && ($p1 < 35) } {
set getOption($dev,PressCurve) 3
}
if { ($p1 >= 35) && ($p1 < 65) } {
set getOption($dev,PressCurve) 2
}
if { ($p1 >= 65) && ($p1 < 95) } {
set getOption($dev,PressCurve) 1
}
if { ($p0 > 5) && ($p0 < 35) } {
set getOption($dev,PressCurve) 5
}
if { ($p0 >= 35) && ($p0 < 65) } {
set getOption($dev,PressCurve) 6
}
if { ($p0 >= 65) && ($p0 < 95) } {
set getOption($dev,PressCurve) 7
}
} else {
if { ![string compare -nocase -length 6 $Option($j) "button"] } {
if { ($value > 19) bool(false)
|