home *** CD-ROM | disk | FTP | other *** search
/ Freesoft 1999 February / Freesoft_1999-02_cd.bin / Recenz / Utility / DisplayDoctorLinux / scitech-display-doctor-1.0beta-3.i386.rpm / scitech-display-doctor-1.0beta.3.cpio.gz / scitech-display-doctor-1.0beta.3.cpio / usr / lib / nucleus / XF86Setup / monitor.tcl < prev    next >
Text File  |  1998-09-19  |  12KB  |  379 lines

  1. # $XConsortium: monitor.tcl /main/2 1996/10/25 10:21:20 kaleb $
  2. #
  3. #
  4. #
  5. #
  6. # $XFree86: xc/programs/Xserver/hw/xfree86/XF86Setup/monitor.tcl,v 3.9.2.2 1998/02/21 06:07:00 robin Exp $
  7. #
  8. # Copyright 1996 by Joseph V. Moss <joe@XFree86.Org>
  9. #
  10. # See the file "LICENSE" for information regarding redistribution terms,
  11. # and for a DISCLAIMER OF ALL WARRANTIES.
  12. #
  13.  
  14. #
  15. # Monitor configuration routines
  16. #
  17.  
  18. proc Monitor_create_widgets { win } {
  19.     global MonitorIDs monDevNum monCanvas MonitorDescriptions
  20.     global pc98_EGC messages EDID
  21.     
  22.     set w [winpathprefix $win]
  23.     set monDevNum 0
  24.     if !$pc98_EGC {
  25.     frame $w.monitor -width 640 -height 420 \
  26.         -relief ridge -borderwidth 5
  27.     } else {
  28.     frame $w.monitor -width 640 -height 400 \
  29.         -relief ridge -borderwidth 5
  30.     }
  31.     
  32.     frame $w.monitor.sync
  33.     pack  $w.monitor.sync -side top -pady 1m
  34.         
  35.     frame $w.monitor.sync.line1
  36.     pack  $w.monitor.sync.line1 -side top -fill x -expand yes
  37.     label $w.monitor.sync.title -text $messages(monitor.1)
  38.     pack  $w.monitor.sync.title -side left -fill x \
  39.     -in $w.monitor.sync.line1 -expand yes
  40.     if { [llength $MonitorIDs] > 1 } {
  41.     label $w.monitor.sync.monsel \
  42.         -text $messages(monitor.2) -anchor w
  43.     pack  $w.monitor.sync.monsel -side left \
  44.         -in $w.monitor.sync.line1
  45.     combobox $w.monitor.sync.monselect -state disabled -bd 2
  46.     pack  $w.monitor.sync.monselect -side left \
  47.         -in $w.monitor.sync.line1
  48.     eval [list $w.monitor.sync.monselect linsert end] $MonitorIDs
  49.     Monitor_cbox_setentry $w.monitor.sync.monselect [lindex $MonitorIDs 0]
  50.     bind $w.monitor.sync.monselect.popup.list <ButtonRelease-1> \
  51.         "+Monitor_monselect $win"
  52.     bind $w.monitor.sync.monselect.popup.list <Return> \
  53.         "+Monitor_monselect $win"
  54.     }
  55.  
  56.     frame $w.monitor.sync.horz
  57.     pack  $w.monitor.sync.horz -side left -padx 10m
  58.     label $w.monitor.sync.horz.title -text $messages(monitor.3)
  59.     entry $w.monitor.sync.horz.entry -width 35 -bd 2
  60.     pack  $w.monitor.sync.horz.title -side left
  61.     pack  $w.monitor.sync.horz.entry -side left
  62.  
  63.     frame $w.monitor.sync.vert
  64.     pack  $w.monitor.sync.vert -side left -padx 10m
  65.     label $w.monitor.sync.vert.title -text $messages(monitor.4)
  66.     entry $w.monitor.sync.vert.entry -width 35 -bd 2
  67.     pack  $w.monitor.sync.vert.title -side left
  68.     pack  $w.monitor.sync.vert.entry -side left 
  69.  
  70.     set canv $w.monitor.canvas
  71.     set monCanvas $canv
  72.     if !$pc98_EGC {
  73.     canvas $canv -width 600 -height 330 -highlightthickness 0 \
  74.         -takefocus 0 -relief sunken -borderwidth 2
  75.     } else {
  76.     canvas $canv -width 600 -height 250 -highlightthickness 0 \
  77.         -takefocus 0 -relief sunken -borderwidth 2
  78.     }
  79.     pack $canv -side top -fill x
  80.  
  81.     frame $canv.list
  82.     listbox $canv.list.lb -height 10 -width 55 -setgrid true \
  83.     -selectmode single -yscroll [list $canv.list.sb set]
  84.     scrollbar $canv.list.sb -command [list $canv.list.lb yview]
  85.     if !$pc98_EGC {
  86.     pack $canv.list.lb -side left -fill y
  87.     pack $canv.list.sb -side left -fill y
  88.     } else {
  89.     $canv.list.lb configure -height 5
  90.     pack $canv.list.lb -side left -fill y
  91.     pack $canv.list.sb -side left -fill y
  92.     }
  93.     eval [list $canv.list.lb insert end] $MonitorDescriptions
  94.     bind $canv.list.lb <ButtonRelease-1> \
  95.     [list Monitor_setstandard $win $canv]
  96.     bind $canv.list.lb <Return> \
  97.     [list Monitor_setstandard $win $canv]
  98.  
  99.     if !$pc98_EGC {
  100.     $canv create rectangle 150  55 550 305 -fill cyan
  101.     $canv create rectangle 160  70 540 280 -fill grey
  102.     $canv create rectangle 170  80 530 270 -fill blue
  103.     $canv create arc       170  76 530  84 -fill blue \
  104.         -start  0 -extent  180 -style chord -outline blue
  105.     $canv create arc       170 266 530 274 -fill blue \
  106.         -start  0 -extent -180 -style chord -outline blue
  107.     $canv create arc       166  80 174 270 -fill blue \
  108.         -start 90 -extent  180 -style chord -outline blue
  109.     $canv create arc       526  80 534 270 -fill blue \
  110.         -start 90 -extent -180 -style chord -outline blue
  111.     $canv create line      160  70 170  80
  112.     $canv create line      540  70 530  80
  113.     $canv create line      540 280 530 270
  114.     $canv create line      160 280 170 270
  115.     $canv create rectangle 320 305 380 315 -fill cyan
  116.     $canv create rectangle 285 315 415 320 -fill cyan
  117.  
  118.     $canv create window 350 175 -window $canv.list
  119.  
  120.     $canv create rectangle 120 30 570 45 -fill white -tag hsync
  121.     for {set i 20} {$i<=110} {incr i 10} {
  122.         $canv create text [expr $i*5+20] 22 -text $i
  123.     }
  124.  
  125.     $canv create rectangle 50 30 65 305 -fill white -tag vsync
  126.     for {set i 40} {$i<=150} {incr i 10} {
  127.         $canv create text 35 [expr $i*2.5-70] -text $i -anchor e
  128.     }
  129.     } else {
  130.     $canv create rectangle 150  55 550 225 -fill cyan
  131.     $canv create rectangle 160  70 540 200 -fill grey
  132.     $canv create rectangle 170  80 530 190 -fill blue
  133.     $canv create arc       170  76 530  84 -fill blue \
  134.         -start  0 -extent  180 -style chord -outline blue
  135.     $canv create arc       170 186 530 194 -fill blue \
  136.         -start  0 -extent -180 -style chord -outline blue
  137.     $canv create arc       166  80 174 190 -fill blue \
  138.         -start 90 -extent  180 -style chord -outline blue
  139.     $canv create arc       526  80 534 190 -fill blue \
  140.         -start 90 -extent -180 -style chord -outline blue
  141.     $canv create line      160  70 170  80
  142.     $canv create line      540  70 530  80
  143.     $canv create line      540 200 530 190
  144.     $canv create line      160 200 170 190
  145.     $canv create rectangle 320 225 380 235 -fill cyan
  146.     $canv create rectangle 285 235 415 240 -fill cyan
  147.     
  148.     $canv create window 350 135 -window $canv.list
  149.     
  150.     $canv create rectangle 120 30 570 45 -fill white -tag hsync
  151.     for {set i 20} {$i<=110} {incr i 10} {
  152.         $canv create text [expr $i*5+20] 22 -text $i
  153.     }
  154.     
  155.     $canv create rectangle 50 30 65 225 -fill white -tag vsync
  156.     for {set i 40} {$i<=150} {incr i 10} {
  157.         $canv create text 35 [expr $i*1.7-38] -text $i -anchor e
  158.     }
  159.     }
  160.  
  161.     frame $w.monitor.bot
  162.     set EDID [vbe_getedid]
  163.     if { [string compare $EDID "FAILED"] != 0 } {
  164.     label $w.monitor.bot.message -text "$messages(monitor.5) [lindex $EDID 0] / [lindex $EDID 1]"
  165.     } else {
  166.     label $w.monitor.bot.message -text $messages(monitor.6)
  167.     }
  168.     pack $w.monitor.bot -side top
  169.     pack $w.monitor.bot.message
  170.  
  171.     $canv bind hsync <ButtonPress-1>   [list Monitor_sync_sel $canv hsync %x %y]
  172.     $canv bind hsync <B1-Motion>       [list Monitor_sync_chg $canv hsync %x %y]
  173.     $canv bind hsync <ButtonRelease-1> [list Monitor_sync_rel $canv hsync %x %y]
  174.     $canv bind hsync <Button-3>        [list Monitor_sync_del $canv hsync %x %y]
  175.     $canv bind vsync <ButtonPress-1>   [list Monitor_sync_sel $canv vsync %x %y]
  176.     $canv bind vsync <B1-Motion>       [list Monitor_sync_chg $canv vsync %x %y]
  177.     $canv bind vsync <ButtonRelease-1> [list Monitor_sync_rel $canv vsync %x %y]
  178.     $canv bind vsync <Button-3>        [list Monitor_sync_del $canv vsync %x %y]
  179.     bind $w.monitor.sync.horz.entry , \
  180.     [list Monitor_sync_ent $w.monitor.sync.horz.entry $canv horz]
  181.     bind $w.monitor.sync.horz.entry <KP_Enter> \
  182.     [list Monitor_sync_ent $w.monitor.sync.horz.entry $canv horz]
  183.     bind $w.monitor.sync.horz.entry <Return> \
  184.     [list Monitor_sync_ent $w.monitor.sync.horz.entry $canv horz]
  185.     bind $w.monitor.sync.vert.entry , \
  186.     [list Monitor_sync_ent $w.monitor.sync.vert.entry $canv vert]
  187.     bind $w.monitor.sync.vert.entry <KP_Enter> \
  188.     [list Monitor_sync_ent $w.monitor.sync.vert.entry $canv vert]
  189.     bind $w.monitor.sync.vert.entry <Return> \
  190.     [list Monitor_sync_ent $w.monitor.sync.vert.entry $canv vert]
  191. }
  192.  
  193. proc Monitor_activate { win } {
  194.     global monCanvas MonitorDescriptions MonitorHsyncRanges MonitorVsyncRanges
  195.     global XF86Setup_library EDID
  196.     set w [winpathprefix $win]
  197.     pack $w.monitor -side top -fill both -expand yes
  198.  
  199.  
  200. #    set edid [vbe_getedid]
  201.     if { [llength [$w.monitor.canvas.list.lb curselection]] == 0 \
  202.     && [string compare $EDID "FAILED"] != 0 } {
  203.  
  204.     $w.monitor.sync.horz.entry delete 0 end
  205.     $w.monitor.sync.horz.entry insert end [lindex $EDID 4]
  206.     $w.monitor.sync.vert.entry delete 0 end
  207.     $w.monitor.sync.vert.entry insert end [lindex $EDID 5]
  208.     Monitor_sync_ent $w.monitor.sync.horz.entry $monCanvas horz
  209.     Monitor_sync_ent $w.monitor.sync.vert.entry $monCanvas vert
  210.     vbe_updatepnp $XF86Setup_library/monitor/monitor.dbx [lindex $EDID 4] [lindex $EDID 5]
  211.     set pnp [lsearch $MonitorDescriptions "Plug and Play Monitor*"]
  212.     array set MonitorHsyncRanges [list $pnp [lindex $EDID 4] ]
  213.     array set MonitorVsyncRanges [list $pnp [lindex $EDID 5] ]
  214.     $w.monitor.canvas.list.lb selection set $pnp
  215.         set isPnPselection $pnp
  216.     vbe_generatemon $XF86Setup_library/monitor/monitor.dbx $pnp
  217.     } else {
  218.     Monitor_get_configvars $win
  219.     }
  220. }
  221.  
  222. proc Monitor_deactivate { win } {
  223.     set w [winpathprefix $win]
  224.     pack forget $w.monitor
  225.  
  226.     Monitor_set_configvars $win
  227. }
  228.  
  229. proc Monitor_monselect { win } {
  230.     global monDevNum
  231.     
  232.     set w [winpathprefix $win]
  233.     if { ![string length [$w.monitor.sync.monselect curselection]] } \
  234.     return
  235.     Monitor_set_configvars $win
  236.     set monDevNum [$w.monitor.sync.monselect curselection]
  237.     Monitor_get_configvars $win
  238. }
  239.  
  240. proc Monitor_set_configvars { win } {
  241.     global monDevNum MonitorIDs
  242.     
  243.     set w [winpathprefix $win]
  244.     set devid [lindex $MonitorIDs $monDevNum]
  245.     set varname Monitor_$devid
  246.     global $varname
  247.     set ${varname}(HorizSync)    [$w.monitor.sync.horz.entry get]
  248.     set ${varname}(VertRefresh)    [$w.monitor.sync.vert.entry get]
  249.     if { [$w.monitor.canvas.list.lb curselection] != "" } {
  250.     set ${varname}(ModelName)    [$w.monitor.canvas.list.lb  get [$w.monitor.canvas.list.lb curselection]]
  251.     }
  252. }
  253.  
  254. proc Monitor_get_configvars { win } {
  255.     global monDevNum MonitorIDs monCanvas
  256.  
  257.     set w [winpathprefix $win]
  258.     set devid [lindex $MonitorIDs $monDevNum]
  259.     set varname Monitor_$devid
  260.     global $varname
  261.     $w.monitor.sync.horz.entry delete 0 end
  262.     $w.monitor.sync.horz.entry insert 0 [set ${varname}(HorizSync)]
  263.     $w.monitor.sync.vert.entry delete 0 end
  264.     $w.monitor.sync.vert.entry insert 0 [set ${varname}(VertRefresh)]
  265.     Monitor_sync_ent $w.monitor.sync.horz.entry $monCanvas horz
  266.     Monitor_sync_ent $w.monitor.sync.vert.entry $monCanvas vert
  267. }
  268.  
  269. proc Monitor_cbox_setentry { cb text } {
  270.     $cb econfig -state normal
  271.     $cb edelete 0 end
  272.     if [string length $text] {
  273.         $cb einsert 0 $text
  274.     }
  275.     $cb econfig -state disabled
  276.     set cblist [$cb lget 0 end]
  277.     set idx [lsearch $cblist $text]
  278.     if { $idx != -1 } {
  279.         $cb see $idx
  280.         $cb lselection clear 0 end
  281.         $cb lselection set $idx
  282.         $cb activate $idx
  283.     }
  284. }
  285.  
  286. proc Monitor_setstandard { win c } {
  287.     global MonitorHsyncRanges MonitorVsyncRanges XF86Setup_library
  288.  
  289.     set w [winpathprefix $win]
  290.  
  291.     set monidx [$c.list.lb curselection]
  292.     if ![string length $monidx] return
  293.     $w.monitor.sync.horz.entry delete 0 end 
  294.     $w.monitor.sync.horz.entry insert end $MonitorHsyncRanges($monidx)
  295.     Monitor_sync_ent $w.monitor.sync.horz.entry $c horz
  296.     $w.monitor.sync.vert.entry delete 0 end 
  297.     $w.monitor.sync.vert.entry insert end $MonitorVsyncRanges($monidx)
  298.     Monitor_sync_ent $w.monitor.sync.vert.entry $c vert
  299.     vbe_generatemon $XF86Setup_library/monitor/monitor.dbx $monidx
  300. }
  301.  
  302. proc Monitor_sync_ent { win c dir } {
  303.     global tk_version
  304.     global pc98_EGC
  305.  
  306.     set w [winpathprefix $win]
  307.     if { [string compare $dir horz] == 0 } {
  308.         set min 20.0
  309.         set max 110.0
  310.         set x1 {$beg*5.0+20}
  311.         set y1 30
  312.         set x2 {$end*5.0+20}
  313.         set y2 45
  314.     } else {
  315.         set min 40.0
  316.         set max 150.0
  317.         set x1 50
  318.         set x2 65
  319.         if !$pc98_EGC {
  320.             set y1 {$beg*2.5-70}
  321.             set y2 {$end*2.5-70}
  322.         } else {
  323.             set y1 {$beg*1.7-38}
  324.             set y2 {$end*1.7-38}
  325.         }
  326.     }
  327.     set rng [zap_white [$w get]]
  328.     set rnglist [split $rng ,]
  329.     set count 0
  330.     catch {$c delete ${dir}rng}
  331.     if { $tk_version == 4.0 } {
  332.         # workaround a bug in Tk4.0 canvases
  333.         set beg $min
  334.         set end $max
  335.         catch {$c delete blank}
  336.         $c create rectangle \
  337.             [expr $x1] [expr $y1] [expr $x2] [expr $y2] \
  338.             -fill white -tag blank
  339.     }
  340.     foreach elem $rnglist {
  341.         set beg [set end 0]
  342.         set elem [zap_white $elem]
  343.         if { [string first - $elem] == -1 } {
  344.             scan $elem %f beg
  345.             set end $beg
  346.         } else {
  347.             scan $elem %f-%f beg end
  348.         }
  349.         if { $beg > $end } {
  350.             set end $beg
  351.         }
  352.         if { $beg < $min } {
  353.             if { $end < $min } continue
  354.             set beg $min
  355.         }
  356.         if { $end > $max } {
  357.             if { $beg > $max } continue
  358.             set end $max
  359.         }
  360.         incr count
  361.         $c create rectangle \
  362.             [expr $x1] [expr $y1] [expr $x2] [expr $y2] \
  363.             -fill red -tag "${dir}$count ${dir}rng"
  364.     }
  365. }
  366.  
  367. proc Monitor_sync_chg { c t x y } {
  368. }
  369.  
  370. proc Monitor_sync_del { c t x y } {
  371. }
  372.  
  373. proc Monitor_sync_rel { c t x y } {
  374. }
  375.  
  376. proc Monitor_sync_sel { c t x y } {
  377. }
  378.  
  379.