80,98d79
< #####bbogart
< proc destroy_fullscreen w {
< 
<         global win_src
<         set children [winfo children $w]
<         foreach child $children {
<                 if {[info exists win_src($child.video)]} {
<                         set src $win_src($child.video)
<                         switcher_unregister "$child.video"
<                         detach_window $src "$child.video"
<                 }
<         }
< 
<         set top [winfo toplevel $w]
<         destroy $top
< }
< #####
< 
< 
425,667d405
< #######bbogart
< 
< proc wrap_display_name {src} {
< 
<         global win_src
< 
<         if {[info exists win_src($src)]} {
<                 display_name $src
<         } else {
<                 full_deactivate $src
<         }
< 
< }
< 
< proc display_name {v} {
<         global switcher_src fname win_src
< 
<         set tmp [getid $switcher_src($v)]
<         if {[string length $tmp] > 26} {
<                 set fname [string range $tmp 0 25]
<         } else {
<                 set fname $tmp
<         }
< }
< 
< proc fullscreen_setup {} {
< 
<         global numScreens numVideos output_screenWidth output_screenHeight output_xoffset output_yoffset
< 
<         # Variable Defaults
<         set numScreens 1
<         set numVideos 1
<         set screenWidth 640
<         set screenHeight 480
<         set xoffset 1024
<         set yoffset 0
< 
<         # New toplevel
<         toplevel .fsetup
<         wm title .fsetup "Fullscreen Setup"
<         catch {wm resizable .fsetup false false}
< 
<         # Top Bar
<         set w .fsetup
<         frame $w.top -border 2 -relief groove
<         label $w.top.l -text "# of Screens:"
<         label $w.top.l2 -text "Videos/Screen:"
< 
<         foreach i {1 2 3 4} {
<                 radiobutton $w.top.ns$i -text "$i" -variable numScreens -value $i
<         }
<         $w.top.ns$numScreens select
< 
<         set i 1
<         foreach vids {1 4 16 64} {
<                 radiobutton $w.top.nv$i -text "$vids" -variable numVideos -value $vids
<                 incr i
<         }
<         $w.top.nv$numVideos select
< 
<        # Middle Bar
<         set mid $w.middle
<         frame $mid -border 0 -relief groove
<         label $mid.l -text "Screen Parameters:"
<         label $mid.lw -text "Width:"
<         label $mid.lh -text "Height:"
<         label $mid.lx -text "X Offset:"
<         label $mid.ly -text "Y Offset:"
<         entry $mid.ew -width 5
<         entry $mid.eh -width 5
<         entry $mid.ex -width 5
<         entry $mid.ey -width 5
< 
<         # Default Entry Values
<         $mid.ew insert 0 $screenWidth
<         $mid.eh insert 0 $screenHeight
<         $mid.ex insert 0 $xoffset
<         $mid.ey insert 0 $yoffset
< 
<         # Bottom Bar
<         set br $w.bar
<         frame $br -relief ridge -borderwidth 2
<         button $br.dismiss -text Dismiss -relief raised -command {destroy .fsetup}
<         button $br.launch -text Launch -relief raised \
<                 -command {
<                         # set variables from entry widgets
<                         set screenWidth [expr abs([.fsetup.middle.ew get])]
<                         set screenHeight [expr abs([.fsetup.middle.eh get])]
<                         set xoffset [expr abs([.fsetup.middle.ex get])]
<                         set yoffset [expr abs([.fsetup.middle.ey get])]
< 
<                        # launch only if the entries are valid
<                         set ow [catch {expr $screenWidth*1} output_screenWidth]
<                         set oh [catch {expr $screenHeight*1} output_screenHeight]
<                         set ox [catch {expr $xoffset*1} output_xoffset]
<                         set oy [catch {expr $yoffset*1} output_yoffset]
<                         if { $ow==0 && $oh==0 && $ox==0 && $oy==0 } {
<                                 fullscreen_gui $numScreens $numVideos\
<                                                $output_screenWidth $output_screenHeight\
<                                                $output_xoffset $output_yoffset
<                                 destroy .fsetup
<                         } else {
<                                 tk_messageBox -icon error \
<                                               -type ok \
<                                               -message "You entered an invalid screen parameter." \
<                                               -title error
<                         }
<                 }
< 
<         # Build GUI
<         grid $w.top -row 0 -column 0 -sticky news
<         grid $w.top.l -row 0 -column 0
<         grid $w.top.l2 -row 1 -column 0
<         for {set i 1} {$i <=4} {incr i} {
<                 grid $w.top.ns$i -row 0 -column $i
<                 grid $w.top.nv$i -row 1 -column $i
<         }
< 
<         grid $mid -row 1 -column 0 -sticky news
<         grid $mid.l -row 0 -column 0 -columnspan 4 -sticky nws
<         grid $mid.lw -row 1 -column 0 -sticky news
<         grid $mid.ew -row 1 -column 1 -sticky news
<         grid $mid.lh -row 1 -column 2 -sticky news
<         grid $mid.eh -row 1 -column 3 -sticky news
<         grid $mid.lx -row 2 -column 0 -sticky news
<         grid $mid.ex -row 2 -column 1 -sticky news
<         grid $mid.ly -row 2 -column 2 -sticky news
<         grid $mid.ey -row 2 -column 3 -sticky news
< 
<         grid $br -row 2 -column 0 -sticky news
<         pack $br.dismiss $br.launch -side right -padx 1 -pady 1
< }
< 
< proc fullscreen_gui {numScreens numVideos output_screenWidth output_screenHeight output_xoffset output_yoffset} {
<         global fname switcher_src win_src fullscreen_control
< 
<         toplevel .fullscreen
<         wm title .fullscreen "Fullscreen Control"
<         catch "wm resizable .fullscreen false false"
< 
<         set active [session active]
<         open_fullscreen $numScreens $numVideos $output_screenWidth $output_screenHeight $output_xoffset $output_yoffset
< 
<         frame .fullscreen.frames
< 
<         set numColumns [expr int(sqrt($numVideos)*$numScreens)]
< 
<         for {set i 1} {$i<=[expr $numVideos*$numScreens]} {incr i} {
<           if {$i <= [llength $active]} {
< 
<                 set f .fullscreen.frames.frame$i
<                 set v ".wvfull.frame$i.video"
<                 set fname "[display_name $v]"
< 
<                 # keep track of what video goes with what controller frame
<                 set fullscreen_control($v) $f
< 
<                 frame $f -relief groove -border 2
<                 label $f.t -text "Video $i"
<                 button $f.bprev -text "Prev" -command "switcher_prev $v ; display_name $v"
<                 button $f.bnext -text "Next" -command "switcher_next $v ; display_name $v"
< 
<                grid $f.t -row 0 -column 0 -columnspan 2
<                 grid $f.bprev -row 1 -column 0
<                 grid $f.bnext -row 1 -column 1
< 
<                 grid $f -row 0 -column $i -sticky nws
< 
<                 # window placement on large multiscreen window
<                 set row [expr abs(($i-1)/$numColumns)]
<                 set column [expr (($i-1)%$numColumns)]
<                 grid $f -row $row -column $column
< 
<                 bind $f <Enter> "wrap_display_name $v"
<            }
<         }
<         grid .fullscreen.frames -row 0 -column 0
< 
<         #button bar
<         set b .fullscreen.bar
<         set n .fullscreen.name
<         frame $n -border 2 -relief ridge
<         frame $b -border 0 -relief raise
< 
<         button $b.q -text "Dismiss" -command { destroy_fullscreen .wvfull ; destroy .fullscreen }
<         label $n.l -textvariable fname -font [smallfont]
< 
<         pack $b.q -side right
<         pack $n.l
<         grid $n -row 1 -column 0 -sticky news
<         grid $b -row 2 -column 0 -sticky news
< 
< }
< 
< proc open_fullscreen {numScreens numVideos output_screenWidth output_screenHeight output_xoffset output_yoffset} {
<         set f [smallfont]
<         set w .wvfull
<         set active [session active]
<         set screen_width 1024
<         set screen_height 768
< 
<         toplevel $w -class Vic \
<                 -visual "[winfo visual .top] [winfo depth .top]" \
<                 -colormap .top -background black
<         catch "wm resizable $w false false"
< 
<         set geo4 "+$output_yoffset"
<         set geo3 "+$output_xoffset"
<         set geo2 "x$output_screenHeight"
<         set geof "$output_screenWidth$geo2$geo3$geo4"
<         wm geometry $w $geof
<         wm title $w "fullscreen"
<         wm overrideredirect $w true
< 
<         switch $numVideos {
<                 "1" {set width [expr $output_screenWidth/$numScreens] ; set height [expr round($width/1.33)] }
<                 "4" {set width [expr $output_screenWidth/(2*$numScreens)] ; set height [expr round($width/1.33)] }
<                 "16" {set width [expr $output_screenWidth/(4*$numScreens)] ; set height [expr round($width/1.33)] }
<                 "64" {set width [expr $output_screenWidth/(8*$numScreens)] ; set height [expr round($width/1.33)] }
<         }
< 
<         set numColumns [expr int(sqrt($numVideos)*$numScreens)]
< 
<         for {set i 1} {$i <= [expr $numVideos*$numScreens]} {incr i} {
<                 frame $w.frame$i
<                 create_video_widget $w.frame$i.video $width $height
< #               set size$w "$width{x}$height"
< 
<                 set v $w.frame$i.video
<                 pack $v -anchor c
<                 if {$i <= [llength $active]} {
<                                 set row [expr abs(($i-1)/$numColumns)]
<                                 set column [expr (($i-1)%$numColumns)]
<                                 grid $w.frame$i -row $row -column $column
<                                 set current [lindex $active [expr $i-1]]
<                                 switcher_register $v $current window_switch
<                                 attach_window $current $v
<                 }
< 
<         }
< }
< #######
< 
