#!/bin/sh  
# \
exec oagwish "$0" "$@"
set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]

APSStandardSetup

wm overrideredirect . 1

proc moveStart {W X Y} {
    global mouse
    set geometry [split [wm geometry .] +]
    set mouse(dx0) [lindex $geometry 1]
    set mouse(dy0) [lindex $geometry 2]
    set mouse(X0) $X
    set mouse(Y0) $Y
}

proc moveDrag {W X Y} {
    global mouse
    set currX [expr $mouse(dx0) + $X - $mouse(X0)]
    set currY [expr $mouse(dy0) + $Y - $mouse(Y0)]
    wm geometry . +$currX+$currY
    update
}

proc SetupWidgets {args} {
    global num wsname
    APSStrictParseArguments {workspaceNames rows}
    
    frame .leftbar -width 20 -bd 5 -relief groove -bg "\#aeb2c3"
    frame .userFrame -bg "\#aeb2c3"
    frame .rightbar -width 20 -bd 5 -relief groove -bg "\#aeb2c3"
    set column 0
    set row 0
    set index 0
    set num [llength $workspaceNames]
    set columns [expr int(ceil($num / ($rows * 1.0)))]
    foreach name $workspaceNames {
	set wsname($index) $name
        button .userFrame.ws$index \
          -text $name \
          -fg white -bg "\#63639c" \
          -font "Lucida 11" \
          -width 10 \
          -pady 1 -padx 5 \
          -anchor w \
          -command "SelectWorkspace -index $index -column $column -row $row"
	entry .userFrame.wsentry$index \
	  -font "Lucida 11" \
	  -width 10 \
	  -textvariable wsname($index)
	bind .userFrame.wsentry$index <Return> "ChangeWorkspaceName -index $index -column $column -row $row"
        grid .userFrame.ws$index \
          -column $column -row $row \
          -sticky nsew -padx 2 -pady 2
        incr column
        if {$column == $columns} {
            set column 0
            incr row
        }
        incr index
    }
    pack .leftbar -side left -fill y
    pack .userFrame -side left
    pack .rightbar -side left -fill y

    bind .leftbar <Button-1> {moveStart %W %X %Y}
    bind .leftbar <B1-Motion> {moveDrag %W %X %Y}
    bind .rightbar <Button-1> {moveStart %W %X %Y}
    bind .rightbar <B1-Motion> {moveDrag %W %X %Y}

}

proc SelectWorkspace {args} {
    global num wsname
    set column -1
    set row -1
    APSStrictParseArguments {index column row}
    set name [.userFrame.ws$index cget -text]
    if {([.userFrame.ws$index cget -bg] == "\#b3639c") && ($column != -1) && ($row != -1)} {
	grid .userFrame.wsentry$index \
	  -column $column -row $row \
	  -sticky nsew -padx 2 -pady 2
	focus -force .userFrame.wsentry$index 
	grab -global .
	after 10000 "ChangeWorkspaceName -index $index -column $column -row $row"
    } else {
	exec wmctrl -s $index
        for {set i 0} {$i < $num} {incr i} {
            .userFrame.ws$i configure -bg "\#63639c"
        }
        .userFrame.ws$index configure -bg "\#b3639c"	
    }

}

proc ChangeWorkspaceName {args} {
    global wsname
    APSStrictParseArguments {index column row}
    .userFrame.ws$index configure -text $wsname($index)
    grab release .
    grid forget .userFrame.wsentry$index
}

set workspaceNames "One Two Three Four"
set rows 2
set screen 0
set args $argv
APSStrictParseArguments {workspaceNames rows screen}

SetupWidgets -workspaceNames $workspaceNames -rows $rows
update idletasks
#wm geometry . +[expr {([winfo screenwidth .] - [winfo width .])/2}]+[expr {[winfo screenheight .]- 51 - [winfo height .]}]
wm geometry . +[expr {[winfo screenwidth .] - [winfo width .]}]+[expr {[winfo screenheight .] - [winfo height .]}]

if {$screen == 0} {
    set port 4588
    set port2 4590
} elseif {$screen == 1} {
    set port 4589
    set port2 4591
} elseif {$screen == 2} {
    set port 4592
    set port2 4593
} elseif {$screen == 3} {
    set port 4594
    set port2 4595
} else {
    set port 4589
    set port2 4591
}
proc ChangeWorkspace {cid addr port} {
    if {$addr != "127.0.0.1"} {
	close $cid
	return
    }
    fileevent $cid readable "ChangeWorkspace_handle $cid"
    fconfigure $cid -buffering line    
}

proc ChangeWorkspace_handle {cid} {
    if {[gets $cid request] < 0} {
        close $cid
    } else {
        close $cid
	SelectWorkspace -index $request
    }
}

proc Shutdown {cid addr port} {
    if {$addr != "127.0.0.1"} {
	close $cid
	return
    }
    close $cid
    exit
}
if [catch {socket -server Shutdown $port}] {
    if {[catch {socket 127.0.0.1 $port} sid]} {
	exit
    } else {
	after 100
	if [catch {socket -server Shutdown $port}] {
	    exit
	}
    }
}
if [catch {socket -server ChangeWorkspace $port2}] {
}

set desktopInfo [exec wmctrl -d]
set desktopInfo [split $desktopInfo \n]
set index 0
foreach line $desktopInfo {
    if {[lindex $line 1] == "*"} {
	.userFrame.ws$index configure -bg "\#b3639c"
	break
    }
    incr index
}


