mirror of
https://github.com/lcbcFoo/ReonV.git
synced 2025-04-18 18:44:43 -04:00
1194 lines
39 KiB
Tcl
Executable file
1194 lines
39 KiB
Tcl
Executable file
#!/bin/sh
|
|
# the next line restarts using wish\
|
|
exec wish "$0" "$@"
|
|
|
|
if {![info exists vTcl(sourcing)]} {
|
|
|
|
package require Tk
|
|
switch $tcl_platform(platform) {
|
|
windows {
|
|
option add *Button.padY 0
|
|
}
|
|
default {
|
|
option add *Scrollbar.width 10
|
|
option add *Scrollbar.highlightThickness 0
|
|
option add *Scrollbar.elementBorderWidth 2
|
|
option add *Scrollbar.borderWidth 2
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#############################################################################
|
|
# Visual Tcl v1.60 Project
|
|
#
|
|
|
|
|
|
#################################
|
|
# VTCL LIBRARY PROCEDURES
|
|
#
|
|
|
|
if {![info exists vTcl(sourcing)]} {
|
|
#############################################################################
|
|
## Library Procedure: Window
|
|
|
|
proc ::Window {args} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
global vTcl
|
|
foreach {cmd name newname} [lrange $args 0 2] {}
|
|
set rest [lrange $args 3 end]
|
|
if {$name == "" || $cmd == ""} { return }
|
|
if {$newname == ""} { set newname $name }
|
|
if {$name == "."} { wm withdraw $name; return }
|
|
set exists [winfo exists $newname]
|
|
switch $cmd {
|
|
show {
|
|
if {$exists} {
|
|
wm deiconify $newname
|
|
} elseif {[info procs vTclWindow$name] != ""} {
|
|
eval "vTclWindow$name $newname $rest"
|
|
}
|
|
if {[winfo exists $newname] && [wm state $newname] == "normal"} {
|
|
vTcl:FireEvent $newname <<Show>>
|
|
}
|
|
}
|
|
hide {
|
|
if {$exists} {
|
|
wm withdraw $newname
|
|
vTcl:FireEvent $newname <<Hide>>
|
|
return}
|
|
}
|
|
iconify { if $exists {wm iconify $newname; return} }
|
|
destroy { if $exists {destroy $newname; return} }
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Library Procedure: vTcl:DefineAlias
|
|
|
|
proc ::vTcl:DefineAlias {target alias widgetProc top_or_alias cmdalias} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
global widget
|
|
set widget($alias) $target
|
|
set widget(rev,$target) $alias
|
|
if {$cmdalias} {
|
|
interp alias {} $alias {} $widgetProc $target
|
|
}
|
|
if {$top_or_alias != ""} {
|
|
set widget($top_or_alias,$alias) $target
|
|
if {$cmdalias} {
|
|
interp alias {} $top_or_alias.$alias {} $widgetProc $target
|
|
}
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Library Procedure: vTcl:DoCmdOption
|
|
|
|
proc ::vTcl:DoCmdOption {target cmd} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
## menus are considered toplevel windows
|
|
set parent $target
|
|
while {[winfo class $parent] == "Menu"} {
|
|
set parent [winfo parent $parent]
|
|
}
|
|
|
|
regsub -all {\%widget} $cmd $target cmd
|
|
regsub -all {\%top} $cmd [winfo toplevel $parent] cmd
|
|
|
|
uplevel #0 [list eval $cmd]
|
|
}
|
|
#############################################################################
|
|
## Library Procedure: vTcl:FireEvent
|
|
|
|
proc ::vTcl:FireEvent {target event {params {}}} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
## The window may have disappeared
|
|
if {![winfo exists $target]} return
|
|
## Process each binding tag, looking for the event
|
|
foreach bindtag [bindtags $target] {
|
|
set tag_events [bind $bindtag]
|
|
set stop_processing 0
|
|
foreach tag_event $tag_events {
|
|
if {$tag_event == $event} {
|
|
set bind_code [bind $bindtag $tag_event]
|
|
foreach rep "\{%W $target\} $params" {
|
|
regsub -all [lindex $rep 0] $bind_code [lindex $rep 1] bind_code
|
|
}
|
|
set result [catch {uplevel #0 $bind_code} errortext]
|
|
if {$result == 3} {
|
|
## break exception, stop processing
|
|
set stop_processing 1
|
|
} elseif {$result != 0} {
|
|
bgerror $errortext
|
|
}
|
|
break
|
|
}
|
|
}
|
|
if {$stop_processing} {break}
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Library Procedure: vTcl:Toplevel:WidgetProc
|
|
|
|
proc ::vTcl:Toplevel:WidgetProc {w args} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
if {[llength $args] == 0} {
|
|
## If no arguments, returns the path the alias points to
|
|
return $w
|
|
}
|
|
set command [lindex $args 0]
|
|
set args [lrange $args 1 end]
|
|
switch -- [string tolower $command] {
|
|
"setvar" {
|
|
foreach {varname value} $args {}
|
|
if {$value == ""} {
|
|
return [set ::${w}::${varname}]
|
|
} else {
|
|
return [set ::${w}::${varname} $value]
|
|
}
|
|
}
|
|
"hide" - "show" {
|
|
Window [string tolower $command] $w
|
|
}
|
|
"showmodal" {
|
|
## modal dialog ends when window is destroyed
|
|
Window show $w; raise $w
|
|
grab $w; tkwait window $w; grab release $w
|
|
}
|
|
"startmodal" {
|
|
## ends when endmodal called
|
|
Window show $w; raise $w
|
|
set ::${w}::_modal 1
|
|
grab $w; tkwait variable ::${w}::_modal; grab release $w
|
|
}
|
|
"endmodal" {
|
|
## ends modal dialog started with startmodal, argument is var name
|
|
set ::${w}::_modal 0
|
|
Window hide $w
|
|
}
|
|
default {
|
|
uplevel $w $command $args
|
|
}
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Library Procedure: vTcl:WidgetProc
|
|
|
|
proc ::vTcl:WidgetProc {w args} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
if {[llength $args] == 0} {
|
|
## If no arguments, returns the path the alias points to
|
|
return $w
|
|
}
|
|
|
|
set command [lindex $args 0]
|
|
set args [lrange $args 1 end]
|
|
uplevel $w $command $args
|
|
}
|
|
#############################################################################
|
|
## Library Procedure: vTcl:toplevel
|
|
|
|
proc ::vTcl:toplevel {args} {
|
|
## This procedure may be used free of restrictions.
|
|
## Exception added by Christian Gavin on 08/08/02.
|
|
## Other packages and widget toolkits have different licensing requirements.
|
|
## Please read their license agreements for details.
|
|
|
|
uplevel #0 eval toplevel $args
|
|
set target [lindex $args 0]
|
|
namespace eval ::$target {set _modal 0}
|
|
}
|
|
}
|
|
|
|
|
|
if {[info exists vTcl(sourcing)]} {
|
|
|
|
proc vTcl:project:info {} {
|
|
set base .top60
|
|
namespace eval ::widgets::$base {
|
|
set set,origin 1
|
|
set set,size 1
|
|
set runvisible 1
|
|
}
|
|
namespace eval ::widgets::$base.m78 {
|
|
array set save {-tearoff 1}
|
|
namespace eval subOptions {
|
|
array set save {-command 1 -label 1 -menu 1}
|
|
}
|
|
}
|
|
set site_3_0 $base.m78
|
|
namespace eval ::widgets::$site_3_0.men79 {
|
|
array set save {-tearoff 1}
|
|
namespace eval subOptions {
|
|
array set save {-accelerator 1 -command 1 -label 1 -menu 1}
|
|
}
|
|
}
|
|
namespace eval ::widgets::$base.cpd86 {
|
|
array set save {-borderwidth 1}
|
|
}
|
|
set site_3_0 $base.cpd86
|
|
namespace eval ::widgets::$site_3_0.01 {
|
|
array set save {-borderwidth 1 -height 1 -relief 1 -width 1}
|
|
}
|
|
set site_4_0 $site_3_0.01
|
|
namespace eval ::widgets::$site_4_0.fra82 {
|
|
array set save {-borderwidth 1 -height 1}
|
|
}
|
|
namespace eval ::widgets::$site_4_0.cpd88 {
|
|
array set save {-height 1 -width 1}
|
|
}
|
|
set site_5_0 $site_4_0.cpd88
|
|
namespace eval ::widgets::$site_5_0.01 {
|
|
array set save {-command 1 -orient 1}
|
|
}
|
|
namespace eval ::widgets::$site_5_0.02 {
|
|
array set save {-command 1}
|
|
}
|
|
namespace eval ::widgets::$site_5_0.03 {
|
|
array set save {-font 1 -height 1 -width 1 -xscrollcommand 1 -yscrollcommand 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.02 {
|
|
array set save {-borderwidth 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.but65 {
|
|
array set save {-command 1 -foreground 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.lab61 {
|
|
array set save {-foreground 1 -highlightcolor 1 -text 1}
|
|
}
|
|
set site_3_0 $base.lab61
|
|
namespace eval ::widgets::$site_3_0.but62 {
|
|
array set save {-command 1 -foreground 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.men63 {
|
|
array set save {-menu 1 -padx 1 -pady 1 -relief 1 -text 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.men63.m {
|
|
array set save {-tearoff 1}
|
|
namespace eval subOptions {
|
|
array set save {-command 1 -label 1}
|
|
}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.but74 {
|
|
array set save {-_tooltip 1 -command 1 -compound 1 -default 1 -foreground 1 -height 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.che62 {
|
|
array set save {-disabledforeground 1 -text 1 -variable 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.but63 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.lab67 {
|
|
array set save {-foreground 1 -highlightcolor 1 -text 1}
|
|
}
|
|
set site_3_0 $base.lab67
|
|
namespace eval ::widgets::$site_3_0.men68 {
|
|
array set save {-menu 1 -padx 1 -pady 1 -relief 1 -text 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.men68.m {
|
|
array set save {-tearoff 1}
|
|
namespace eval subOptions {
|
|
array set save {-command 1 -label 1}
|
|
}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.but69 {
|
|
array set save {-command 1 -foreground 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.che70 {
|
|
array set save {-text 1 -variable 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.but61 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.lab71 {
|
|
array set save {-foreground 1 -highlightcolor 1 -text 1}
|
|
}
|
|
set site_3_0 $base.lab71
|
|
namespace eval ::widgets::$site_3_0.men72 {
|
|
array set save {-menu 1 -padx 1 -pady 1 -relief 1 -text 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.men72.m {
|
|
array set save {-tearoff 1}
|
|
namespace eval subOptions {
|
|
array set save {-command 1 -label 1}
|
|
}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.but73 {
|
|
array set save {-command 1 -foreground 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.che75 {
|
|
array set save {-text 1 -variable 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.but60 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.cpd77 {
|
|
array set save {-borderwidth 1 -height 1}
|
|
}
|
|
set site_3_0 $base.cpd77
|
|
namespace eval ::widgets::$site_3_0.01 {
|
|
array set save {-anchor 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.02 {
|
|
array set save {-cursor 1 -state 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$base.cpd78 {
|
|
array set save {-borderwidth 1 -height 1}
|
|
}
|
|
set site_3_0 $base.cpd78
|
|
namespace eval ::widgets::$site_3_0.01 {
|
|
array set save {-anchor 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.02 {
|
|
array set save {-cursor 1 -state 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$base.cpd79 {
|
|
array set save {-borderwidth 1 -height 1}
|
|
}
|
|
set site_3_0 $base.cpd79
|
|
namespace eval ::widgets::$site_3_0.01 {
|
|
array set save {-anchor 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.02 {
|
|
array set save {-cursor 1 -state 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$base.cpd80 {
|
|
array set save {-borderwidth 1 -height 1}
|
|
}
|
|
set site_3_0 $base.cpd80
|
|
namespace eval ::widgets::$site_3_0.01 {
|
|
array set save {-anchor 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$site_3_0.02 {
|
|
array set save {-cursor 1 -state 1 -textvariable 1}
|
|
}
|
|
namespace eval ::widgets::$base.cpd60 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.but60 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.but61 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.but62 {
|
|
array set save {-_tooltip 1 -command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets::$base.but64 {
|
|
array set save {-command 1 -text 1}
|
|
}
|
|
namespace eval ::widgets_bindings {
|
|
set tagslist {_TopLevel _vTclBalloon}
|
|
}
|
|
namespace eval ::vTcl::modules::main {
|
|
set procs {
|
|
init
|
|
main
|
|
_act:log
|
|
lls
|
|
docmd
|
|
runsyn
|
|
runflow
|
|
runpr
|
|
runsim
|
|
simbuild
|
|
simclean
|
|
synclean
|
|
prclean
|
|
}
|
|
set compounds {
|
|
}
|
|
set projectType single
|
|
}
|
|
}
|
|
}
|
|
|
|
#################################
|
|
# USER DEFINED PROCEDURES
|
|
#
|
|
#############################################################################
|
|
## Procedure: main
|
|
|
|
proc ::main {argc argv} {
|
|
global grproject project_name synbatch prbatch simprog simmenu
|
|
global simbatch syntool synmenu prmenu prtool prbatch
|
|
global board tech device
|
|
|
|
set grproject [lindex $argv 0]
|
|
set tech [lindex $argv 1]
|
|
set device [lindex $argv 2]
|
|
set board [lindex $argv 3]
|
|
|
|
set project_name $grproject
|
|
|
|
set synbatch 0
|
|
set syntool "synplify"
|
|
set synmenu "Synplify"
|
|
set prbatch 0
|
|
set simprog "vsim"
|
|
set simmenu "Modelsim"
|
|
set simbatch 0
|
|
set prbatch 0
|
|
set prmenu "None"
|
|
set prtool "none"
|
|
}
|
|
#############################################################################
|
|
## Procedure: _act:log
|
|
|
|
proc ::_act:log {} {
|
|
global widget
|
|
|
|
global input run_next_cmd
|
|
if [eof $input] {
|
|
catch [close $input]
|
|
set run_next_cmd 1
|
|
} else {
|
|
gets $input line
|
|
Text2 insert end $line\n
|
|
Text2 see end
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: lls
|
|
|
|
proc ::lls {} {
|
|
global widget
|
|
|
|
global input run_next_cmd
|
|
|
|
variable command "ls -l"
|
|
if [catch {open "|$command "} input] {
|
|
Text2 insert end "Can't find the executable.\n"
|
|
} else {
|
|
set run_next_cmd 0
|
|
fileevent $input readable {_act:log}
|
|
Text2 insert end $command\n
|
|
vwait run_next_cmd
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: docmd
|
|
|
|
proc ::docmd {cmd} {
|
|
global widget
|
|
|
|
global input run_next_cmd
|
|
|
|
variable command $cmd
|
|
if [catch {open "|$command "} input] {
|
|
Text2 insert end "Can't find the executable.\n"
|
|
} else {
|
|
set run_next_cmd 0
|
|
fileevent $input readable {_act:log}
|
|
Text2 insert end $command\n
|
|
vwait run_next_cmd
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: runsyn
|
|
|
|
proc ::runsyn {} {
|
|
global widget grproject syntool synbatch
|
|
|
|
if {$synbatch == "0"} {
|
|
docmd "make $syntool-launch"
|
|
} else {
|
|
docmd "make $syntool-map"
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: runflow
|
|
|
|
proc ::runflow {} {
|
|
global widget grproject syntool synbatch prtool
|
|
|
|
switch $syntool {
|
|
"synplify" {
|
|
switch $prtool {
|
|
"none" {docmd "make synplify"}
|
|
"designer" {docmd "fpgaax"}
|
|
"quartus" {docmd "make fpgaq"}
|
|
"ise" {docmd "make fpgasynp"}
|
|
}
|
|
}
|
|
"xst" {
|
|
switch $prtool {
|
|
"none" {docmd "make xst"}
|
|
"ise" {docmd "make fpgaxst"}
|
|
default {}
|
|
}
|
|
}
|
|
default {}
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: runpr
|
|
|
|
proc ::runpr {} {
|
|
global widget grproject syntool prbatch prtool
|
|
|
|
if {$prbatch == "0"} {
|
|
switch $prtool {
|
|
"actel" { docmd "make actel-launch"}
|
|
"quartus" {
|
|
if {$syntool == "synplify"} {docmd "make quartus-launch-synp"}
|
|
if {$syntool == "quartus"} {docmd "make quartus-launch"}
|
|
}
|
|
"ise" {
|
|
if {$syntool == "synplify"} {docmd "make ise-launch-synp"}
|
|
if {$syntool == "xst"} {docmd "make ise-launch"}
|
|
}
|
|
}
|
|
}
|
|
|
|
if {$prbatch != "0"} {
|
|
switch $prtool {
|
|
"actel" { docmd "make actel"}
|
|
"quartus" {
|
|
if {$syntool == "synplify"} {docmd "make quartus-synp"}
|
|
if {$syntool == "quartus"} {docmd "make quartus-route"}
|
|
}
|
|
"ise" {
|
|
if {$syntool == "synplify"} {docmd "make ise-synp"}
|
|
if {$syntool == "xst"} {docmd "make ise"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: runsim
|
|
|
|
proc ::runsim {} {
|
|
global widget grproject simprog simbatch
|
|
|
|
if {$simbatch == "0"} {
|
|
docmd "make $simprog-launch"
|
|
} else {
|
|
docmd "make $simprog-run"
|
|
}
|
|
}
|
|
#############################################################################
|
|
## Procedure: simbuild
|
|
|
|
proc ::simbuild {} {
|
|
global widget grproject simprog simbatch
|
|
|
|
docmd "make $simprog"
|
|
}
|
|
#############################################################################
|
|
## Procedure: simclean
|
|
|
|
proc ::simclean {} {
|
|
global widget grproject simprog simbatch
|
|
|
|
docmd "make $simprog-clean"
|
|
}
|
|
#############################################################################
|
|
## Procedure: synclean
|
|
|
|
proc ::synclean {} {
|
|
global widget grproject syntool synbatch
|
|
|
|
docmd "make $syntool-clean"
|
|
}
|
|
#############################################################################
|
|
## Procedure: prclean
|
|
|
|
proc ::prclean {} {
|
|
global widget grproject prtool synbatch
|
|
|
|
docmd "make $prtool-clean"
|
|
}
|
|
|
|
#############################################################################
|
|
## Initialization Procedure: init
|
|
|
|
proc ::init {argc argv} {
|
|
global input run_next_cmd grproject
|
|
|
|
set run_next_cmd 1
|
|
}
|
|
|
|
init $argc $argv
|
|
|
|
#################################
|
|
# VTCL GENERATED GUI PROCEDURES
|
|
#
|
|
|
|
proc vTclWindow. {base} {
|
|
if {$base == ""} {
|
|
set base .
|
|
}
|
|
###################
|
|
# CREATING WIDGETS
|
|
###################
|
|
wm focusmodel $top passive
|
|
wm geometry $top 1x1+0+0; update
|
|
wm maxsize $top 1265 994
|
|
wm minsize $top 1 1
|
|
wm overrideredirect $top 0
|
|
wm resizable $top 1 1
|
|
wm withdraw $top
|
|
wm title $top "vtcl.tcl"
|
|
bindtags $top "$top Vtcl.tcl all"
|
|
vTcl:FireEvent $top <<Create>>
|
|
wm protocol $top WM_DELETE_WINDOW "vTcl:FireEvent $top <<DeleteWindow>>"
|
|
|
|
###################
|
|
# SETTING GEOMETRY
|
|
###################
|
|
|
|
vTcl:FireEvent $base <<Ready>>
|
|
}
|
|
|
|
proc vTclWindow.top60 {base} {
|
|
if {$base == ""} {
|
|
set base .top60
|
|
}
|
|
if {[winfo exists $base]} {
|
|
wm deiconify $base; return
|
|
}
|
|
set top $base
|
|
###################
|
|
# CREATING WIDGETS
|
|
###################
|
|
vTcl:toplevel $top -class Toplevel \
|
|
-menu "$top.m78" -highlightcolor black
|
|
wm focusmodel $top passive
|
|
wm geometry $top 609x477+358+121; update
|
|
wm maxsize $top 1009 738
|
|
wm minsize $top 1 1
|
|
wm overrideredirect $top 0
|
|
wm resizable $top 1 1
|
|
wm deiconify $top
|
|
wm title $top "GRLIB Implementation Tool"
|
|
vTcl:DefineAlias "$top" "Toplevel1" vTcl:Toplevel:WidgetProc "" 1
|
|
bindtags $top "$top Toplevel all _TopLevel"
|
|
vTcl:FireEvent $top <<Create>>
|
|
wm protocol $top WM_DELETE_WINDOW "vTcl:FireEvent $top <<DeleteWindow>>"
|
|
|
|
menu $top.m78 \
|
|
-tearoff 1
|
|
$top.m78 add cascade \
|
|
-menu "$top.m78.men79" -command {} -label File
|
|
set site_3_0 $top.m78
|
|
menu $site_3_0.men79 \
|
|
-tearoff 0
|
|
$site_3_0.men79 add command \
|
|
-accelerator Ctrl-Q -command exit -label Quit
|
|
frame $top.cpd86 \
|
|
-borderwidth 2
|
|
vTcl:DefineAlias "$top.cpd86" "Frame3" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.cpd86
|
|
frame $site_3_0.01 \
|
|
-borderwidth 2 -relief groove -height 98 -width 125
|
|
vTcl:DefineAlias "$site_3_0.01" "Frame4" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_4_0 $site_3_0.01
|
|
frame $site_4_0.fra82 \
|
|
-borderwidth 2 -height 10
|
|
vTcl:DefineAlias "$site_4_0.fra82" "Frame5" vTcl:WidgetProc "Toplevel1" 1
|
|
frame $site_4_0.cpd88 \
|
|
-height 219 -width 584
|
|
vTcl:DefineAlias "$site_4_0.cpd88" "Frame7" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_5_0 $site_4_0.cpd88
|
|
scrollbar $site_5_0.01 \
|
|
-command "$site_5_0.03 xview" -orient horizontal
|
|
vTcl:DefineAlias "$site_5_0.01" "Scrollbar3" vTcl:WidgetProc "Toplevel1" 1
|
|
scrollbar $site_5_0.02 \
|
|
-command "$site_5_0.03 yview"
|
|
vTcl:DefineAlias "$site_5_0.02" "Scrollbar4" vTcl:WidgetProc "Toplevel1" 1
|
|
text $site_5_0.03 \
|
|
-font {Courier -12} -height 14 -width 80 \
|
|
-xscrollcommand "$site_5_0.01 set" -yscrollcommand "$site_5_0.02 set"
|
|
vTcl:DefineAlias "$site_5_0.03" "Text2" vTcl:WidgetProc "Toplevel1" 1
|
|
grid $site_5_0.01 \
|
|
-in $site_5_0 -column 0 -row 1 -columnspan 1 -rowspan 1 -sticky ew
|
|
grid $site_5_0.02 \
|
|
-in $site_5_0 -column 1 -row 0 -columnspan 1 -rowspan 1 -sticky ns
|
|
grid $site_5_0.03 \
|
|
-in $site_5_0 -column 0 -row 0 -columnspan 1 -rowspan 1 -sticky nesw
|
|
pack $site_4_0.fra82 \
|
|
-in $site_4_0 -anchor center -expand 0 -fill none -side top
|
|
place $site_4_0.cpd88 \
|
|
-in $site_4_0 -x 9 -y 14 -width 584 -height 219 -anchor nw \
|
|
-bordermode inside
|
|
label $site_3_0.02 \
|
|
-borderwidth 1 -text Console
|
|
vTcl:DefineAlias "$site_3_0.02" "Label3" vTcl:WidgetProc "Toplevel1" 1
|
|
pack $site_3_0.01 \
|
|
-in $site_3_0 -anchor center -expand 1 -fill both -padx 5 -pady 5 \
|
|
-side top
|
|
place $site_3_0.02 \
|
|
-in $site_3_0 -x 15 -y 0 -anchor nw -bordermode ignore
|
|
button $top.but65 \
|
|
-command exit -foreground #ff0000 -text Quit
|
|
vTcl:DefineAlias "$top.but65" "Button3" vTcl:WidgetProc "Toplevel1" 1
|
|
labelframe $top.lab61 \
|
|
-foreground black -text Simulation -highlightcolor black
|
|
vTcl:DefineAlias "$top.lab61" "Labelframe1" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.lab61
|
|
button $site_3_0.but62 \
|
|
-command runsim -foreground #0000ff -text Run
|
|
vTcl:DefineAlias "$site_3_0.but62" "Button5" vTcl:WidgetProc "Toplevel1" 1
|
|
menubutton $site_3_0.men63 \
|
|
-menu "$site_3_0.men63.m" -padx 5 -pady 4 -relief raised \
|
|
-text Modelsim -textvariable simmenu
|
|
vTcl:DefineAlias "$site_3_0.men63" "Menubutton1" vTcl:WidgetProc "Toplevel1" 1
|
|
menu $site_3_0.men63.m \
|
|
-tearoff 0
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "vsim"
|
|
set simmenu "Modelsim"} \
|
|
-label Modelsim
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "ncsim"
|
|
set simmenu "Ncsim"} \
|
|
-label Ncsim
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "ghdl"
|
|
set simmenu "GHDL"} \
|
|
-label GHDL
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "libero"
|
|
set simmenu "Libero"} \
|
|
-label Libero
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "riviera"
|
|
set simmenu "Riviera"} \
|
|
-label Riviera
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "avhdl"
|
|
set simmenu "Active-HDL GUI"} \
|
|
-label {Active-HDL GUI}
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {global simprog simmenu
|
|
set simprog "vsimsa"
|
|
set simmenu "Active-HDL batch"} \
|
|
-label {Active-HDL batch}
|
|
$site_3_0.men63.m add command \
|
|
\
|
|
-command {# TODO: Your menu handler hereglobal simprog simmenu
|
|
set simprog "sonata"
|
|
set simmenu "Sonata"} \
|
|
-label Sonata
|
|
button $site_3_0.but74 \
|
|
-command simbuild -compound none -default disabled \
|
|
-foreground #009900 -height 26 -text Build
|
|
vTcl:DefineAlias "$site_3_0.but74" "Button8" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $site_3_0.but74 "$site_3_0.but74 Button $top all _vTclBalloon"
|
|
bind $site_3_0.but74 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {compile grlib and local design}
|
|
}
|
|
checkbutton $site_3_0.che62 \
|
|
-disabledforeground #a3a3a3 -text Batch -variable simbatch
|
|
vTcl:DefineAlias "$site_3_0.che62" "Checkbutton1" vTcl:WidgetProc "Toplevel1" 1
|
|
button $site_3_0.but63 \
|
|
-command simclean -text Clean
|
|
vTcl:DefineAlias "$site_3_0.but63" "Button9" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $site_3_0.but63 "$site_3_0.but63 Button $top all _vTclBalloon"
|
|
bind $site_3_0.but63 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {remove generated files for selected tool}
|
|
}
|
|
place $site_3_0.but62 \
|
|
-in $site_3_0 -x 125 -y 20 -width 49 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.men63 \
|
|
-in $site_3_0 -x 10 -y 20 -width 101 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.but74 \
|
|
-in $site_3_0 -x 331 -y 20 -width 50 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.che62 \
|
|
-in $site_3_0 -x 189 -y 22 -width 61 -height 22 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.but63 \
|
|
-in $site_3_0 -x 261 -y 20 -width 58 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
labelframe $top.lab67 \
|
|
-foreground black -text {Place & route} -highlightcolor black
|
|
vTcl:DefineAlias "$top.lab67" "Labelframe2" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.lab67
|
|
menubutton $site_3_0.men68 \
|
|
-menu "$site_3_0.men68.m" -padx 5 -pady 4 -relief raised -text None \
|
|
-textvariable prmenu
|
|
vTcl:DefineAlias "$site_3_0.men68" "Menubutton3" vTcl:WidgetProc "Toplevel1" 1
|
|
menu $site_3_0.men68.m \
|
|
-tearoff 0
|
|
$site_3_0.men68.m add command \
|
|
-command {global prmenu prtool
|
|
set prmenu "None"
|
|
set prtool "none"} \
|
|
-label None
|
|
$site_3_0.men68.m add command \
|
|
\
|
|
-command {global prmenu prtool
|
|
set prmenu "Actel Designer"
|
|
set prtool "actel"} \
|
|
-label {Actel Designer}
|
|
$site_3_0.men68.m add command \
|
|
\
|
|
-command {global prmenu prtool
|
|
set prmenu "Quartus"
|
|
set prtool "quartus"} \
|
|
-label Quartus
|
|
$site_3_0.men68.m add command \
|
|
\
|
|
-command {global prmenu prtool
|
|
set prmenu "Xilinx ISE"
|
|
set prtool "ise"} \
|
|
-label {Xilinx ISE}
|
|
button $site_3_0.but69 \
|
|
-command runpr -foreground #0000ff -text Run
|
|
vTcl:DefineAlias "$site_3_0.but69" "Button6" vTcl:WidgetProc "Toplevel1" 1
|
|
checkbutton $site_3_0.che70 \
|
|
-text Batch -variable prbatch
|
|
vTcl:DefineAlias "$site_3_0.che70" "Checkbutton2" vTcl:WidgetProc "Toplevel1" 1
|
|
button $site_3_0.but61 \
|
|
-command prclean -text Clean
|
|
vTcl:DefineAlias "$site_3_0.but61" "Button2" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $site_3_0.but61 "$site_3_0.but61 Button $top all _vTclBalloon"
|
|
bind $site_3_0.but61 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {remove generated files for selected tool}
|
|
}
|
|
place $site_3_0.men68 \
|
|
-in $site_3_0 -x 10 -y 20 -width 101 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.but69 \
|
|
-in $site_3_0 -x 125 -y 20 -width 49 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.che70 \
|
|
-in $site_3_0 -x 185 -y 20 -width 61 -height 22 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.but61 \
|
|
-in $site_3_0 -x 261 -y 20 -width 58 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
labelframe $top.lab71 \
|
|
-foreground black -text Synthesis -highlightcolor black
|
|
vTcl:DefineAlias "$top.lab71" "Labelframe3" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.lab71
|
|
menubutton $site_3_0.men72 \
|
|
-menu "$site_3_0.men72.m" -padx 5 -pady 4 -relief raised \
|
|
-text Synplify -textvariable synmenu
|
|
vTcl:DefineAlias "$site_3_0.men72" "Menubutton2" vTcl:WidgetProc "Toplevel1" 1
|
|
menu $site_3_0.men72.m \
|
|
-tearoff 0
|
|
$site_3_0.men72.m add command \
|
|
\
|
|
-command {global synmenu syntool
|
|
set synmenu "Synplify"
|
|
set syntool "synplify"} \
|
|
-label Synplify
|
|
$site_3_0.men72.m add command \
|
|
\
|
|
-command {global synmenu syntool
|
|
set synmenu "Quartus"
|
|
set syntool "quartus"} \
|
|
-label Quartus
|
|
$site_3_0.men72.m add command \
|
|
\
|
|
-command {global synmenu syntool
|
|
set synmenu "Xilinx ISE"
|
|
set syntool "xst"} \
|
|
-label {Xilinx ISE}
|
|
$site_3_0.men72.m add command \
|
|
\
|
|
-command {global synmenu syntool
|
|
set synmenu "Precision"
|
|
set syntool "precision"} \
|
|
-label Precision
|
|
$site_3_0.men72.m add command \
|
|
\
|
|
-command {global synmenu syntool
|
|
set synmenu "Libero"
|
|
set syntool "libero"} \
|
|
-label Libero
|
|
button $site_3_0.but73 \
|
|
-command runsyn -foreground #0000ff -text Run
|
|
vTcl:DefineAlias "$site_3_0.but73" "Button7" vTcl:WidgetProc "Toplevel1" 1
|
|
checkbutton $site_3_0.che75 \
|
|
-text Batch -variable synbatch
|
|
vTcl:DefineAlias "$site_3_0.che75" "Checkbutton3" vTcl:WidgetProc "Toplevel1" 1
|
|
button $site_3_0.but60 \
|
|
-command synclean -text Clean
|
|
vTcl:DefineAlias "$site_3_0.but60" "Button1" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $site_3_0.but60 "$site_3_0.but60 Button $top all _vTclBalloon"
|
|
bind $site_3_0.but60 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {remove generated files for selected tool}
|
|
}
|
|
place $site_3_0.men72 \
|
|
-in $site_3_0 -x 10 -y 20 -width 101 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.but73 \
|
|
-in $site_3_0 -x 125 -y 20 -width 49 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.che75 \
|
|
-in $site_3_0 -x 187 -y 21 -width 61 -height 22 -anchor nw \
|
|
-bordermode ignore
|
|
place $site_3_0.but60 \
|
|
-in $site_3_0 -x 261 -y 20 -width 58 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
frame $top.cpd77 \
|
|
-borderwidth 1 -height 30
|
|
vTcl:DefineAlias "$top.cpd77" "Frame6" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.cpd77
|
|
label $site_3_0.01 \
|
|
-anchor w -text Tech:
|
|
vTcl:DefineAlias "$site_3_0.01" "Label2" vTcl:WidgetProc "Toplevel1" 1
|
|
entry $site_3_0.02 \
|
|
-cursor {} -state readonly -textvariable tech
|
|
vTcl:DefineAlias "$site_3_0.02" "Entry2" vTcl:WidgetProc "Toplevel1" 1
|
|
pack $site_3_0.01 \
|
|
-in $site_3_0 -anchor center -expand 0 -fill none -padx 2 -pady 2 \
|
|
-side left
|
|
pack $site_3_0.02 \
|
|
-in $site_3_0 -anchor center -expand 1 -fill x -padx 2 -pady 2 \
|
|
-side right
|
|
frame $top.cpd78 \
|
|
-borderwidth 1 -height 30
|
|
vTcl:DefineAlias "$top.cpd78" "Frame8" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.cpd78
|
|
label $site_3_0.01 \
|
|
-anchor w -text Device:
|
|
vTcl:DefineAlias "$site_3_0.01" "Label4" vTcl:WidgetProc "Toplevel1" 1
|
|
entry $site_3_0.02 \
|
|
-cursor {} -state readonly -textvariable device
|
|
vTcl:DefineAlias "$site_3_0.02" "Entry3" vTcl:WidgetProc "Toplevel1" 1
|
|
pack $site_3_0.01 \
|
|
-in $site_3_0 -anchor center -expand 0 -fill none -padx 2 -pady 2 \
|
|
-side left
|
|
pack $site_3_0.02 \
|
|
-in $site_3_0 -anchor center -expand 1 -fill x -padx 2 -pady 2 \
|
|
-side right
|
|
frame $top.cpd79 \
|
|
-borderwidth 1 -height 30
|
|
vTcl:DefineAlias "$top.cpd79" "Frame9" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.cpd79
|
|
label $site_3_0.01 \
|
|
-anchor w -text Board:
|
|
vTcl:DefineAlias "$site_3_0.01" "Label6" vTcl:WidgetProc "Toplevel1" 1
|
|
entry $site_3_0.02 \
|
|
-cursor {} -state readonly -textvariable board
|
|
vTcl:DefineAlias "$site_3_0.02" "Entry4" vTcl:WidgetProc "Toplevel1" 1
|
|
pack $site_3_0.01 \
|
|
-in $site_3_0 -anchor center -expand 0 -fill none -padx 2 -pady 2 \
|
|
-side left
|
|
pack $site_3_0.02 \
|
|
-in $site_3_0 -anchor center -expand 1 -fill x -padx 2 -pady 2 \
|
|
-side right
|
|
frame $top.cpd80 \
|
|
-borderwidth 1 -height 30
|
|
vTcl:DefineAlias "$top.cpd80" "Frame10" vTcl:WidgetProc "Toplevel1" 1
|
|
set site_3_0 $top.cpd80
|
|
label $site_3_0.01 \
|
|
-anchor w -text Project:
|
|
vTcl:DefineAlias "$site_3_0.01" "Label5" vTcl:WidgetProc "Toplevel1" 1
|
|
entry $site_3_0.02 \
|
|
-cursor {} -state readonly -textvariable project_name
|
|
vTcl:DefineAlias "$site_3_0.02" "Entry1" vTcl:WidgetProc "Toplevel1" 1
|
|
pack $site_3_0.01 \
|
|
-in $site_3_0 -anchor center -expand 0 -fill none -padx 2 -pady 2 \
|
|
-side left
|
|
pack $site_3_0.02 \
|
|
-in $site_3_0 -anchor center -expand 1 -fill x -padx 2 -pady 2 \
|
|
-side right
|
|
button $top.cpd60 \
|
|
-command {docmd "make xconfig"} -text xconfig
|
|
vTcl:DefineAlias "$top.cpd60" "Button4" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $top.cpd60 "$top.cpd60 Button $top all _vTclBalloon"
|
|
bind $top.cpd60 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {run grlib/leon3 configuration tool}
|
|
}
|
|
button $top.but60 \
|
|
-command {docmd "make ise-prog-prom"} -text {prog prom}
|
|
vTcl:DefineAlias "$top.but60" "buildvermod" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $top.but60 "$top.but60 Button $top all _vTclBalloon"
|
|
bind $top.but60 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {Program FPGA prom}
|
|
}
|
|
button $top.but61 \
|
|
-command {docmd "make clean"} -text {clean all}
|
|
vTcl:DefineAlias "$top.but61" "Button10" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $top.but61 "$top.but61 Button $top all _vTclBalloon"
|
|
bind $top.but61 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {remove all generated files except compile scripts}
|
|
}
|
|
button $top.but62 \
|
|
-command {docmd "make distclean"} -text distclean
|
|
vTcl:DefineAlias "$top.but62" "Button11" vTcl:WidgetProc "Toplevel1" 1
|
|
bindtags $top.but62 "$top.but62 Button $top all _vTclBalloon"
|
|
bind $top.but62 <<SetBalloon>> {
|
|
set ::vTcl::balloon::%W {remove all generated file}
|
|
}
|
|
button $top.but64 \
|
|
-command {docmd "make scripts"} -text scripts
|
|
vTcl:DefineAlias "$top.but64" "Button12" vTcl:WidgetProc "Toplevel1" 1
|
|
###################
|
|
# SETTING GEOMETRY
|
|
###################
|
|
place $top.cpd86 \
|
|
-in $top -x 0 -y 220 -width 612 -height 254 -anchor nw \
|
|
-bordermode inside
|
|
place $top.but65 \
|
|
-in $top -x 528 -y 60 -width 66 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.lab61 \
|
|
-in $top -x 20 -y 10 -width 396 -height 56 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.lab67 \
|
|
-in $top -x 20 -y 150 -width 336 -height 56 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.lab71 \
|
|
-in $top -x 20 -y 80 -width 336 -height 56 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.cpd77 \
|
|
-in $top -x 404 -y 133 -width 197 -height 28 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.cpd78 \
|
|
-in $top -x 392 -y 161 -width 209 -height 28 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.cpd79 \
|
|
-in $top -x 398 -y 189 -width 203 -height 28 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.cpd80 \
|
|
-in $top -x 391 -y 105 -width 210 -height 28 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.cpd60 \
|
|
-in $top -x 528 -y 10 -width 66 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.but60 \
|
|
-in $top -x 450 -y 10 -width 79 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.but61 \
|
|
-in $top -x 450 -y 35 -width 79 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.but62 \
|
|
-in $top -x 450 -y 60 -width 79 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
place $top.but64 \
|
|
-in $top -x 528 -y 35 -width 66 -height 26 -anchor nw \
|
|
-bordermode ignore
|
|
|
|
vTcl:FireEvent $base <<Ready>>
|
|
}
|
|
|
|
#############################################################################
|
|
## Binding tag: _TopLevel
|
|
|
|
bind "_TopLevel" <<Create>> {
|
|
if {![info exists _topcount]} {set _topcount 0}; incr _topcount
|
|
}
|
|
bind "_TopLevel" <<DeleteWindow>> {
|
|
if {[set ::%W::_modal]} {
|
|
vTcl:Toplevel:WidgetProc %W endmodal
|
|
} else {
|
|
destroy %W; if {$_topcount == 0} {exit}
|
|
}
|
|
}
|
|
bind "_TopLevel" <Destroy> {
|
|
if {[winfo toplevel %W] == "%W"} {incr _topcount -1}
|
|
}
|
|
#############################################################################
|
|
## Binding tag: _vTclBalloon
|
|
|
|
|
|
if {![info exists vTcl(sourcing)]} {
|
|
bind "_vTclBalloon" <<KillBalloon>> {
|
|
namespace eval ::vTcl::balloon {
|
|
after cancel $id
|
|
if {[winfo exists .vTcl.balloon]} {
|
|
destroy .vTcl.balloon
|
|
}
|
|
set set 0
|
|
}
|
|
}
|
|
bind "_vTclBalloon" <<vTclBalloon>> {
|
|
if {$::vTcl::balloon::first != 1} {break}
|
|
|
|
namespace eval ::vTcl::balloon {
|
|
set first 2
|
|
if {![winfo exists .vTcl]} {
|
|
toplevel .vTcl; wm withdraw .vTcl
|
|
}
|
|
if {![winfo exists .vTcl.balloon]} {
|
|
toplevel .vTcl.balloon -bg black
|
|
}
|
|
wm overrideredirect .vTcl.balloon 1
|
|
label .vTcl.balloon.l -text ${%W} -relief flat -bg #ffffaa -fg black -padx 2 -pady 0 -anchor w
|
|
pack .vTcl.balloon.l -side left -padx 1 -pady 1
|
|
wm geometry .vTcl.balloon +[expr {[winfo rootx %W]+[winfo width %W]/2}]+[expr {[winfo rooty %W]+[winfo height %W]+4}]
|
|
set set 1
|
|
}
|
|
}
|
|
bind "_vTclBalloon" <Button> {
|
|
namespace eval ::vTcl::balloon {
|
|
set first 0
|
|
}
|
|
vTcl:FireEvent %W <<KillBalloon>>
|
|
}
|
|
bind "_vTclBalloon" <Enter> {
|
|
namespace eval ::vTcl::balloon {
|
|
## self defining balloon?
|
|
if {![info exists %W]} {
|
|
vTcl:FireEvent %W <<SetBalloon>>
|
|
}
|
|
set set 0
|
|
set first 1
|
|
set id [after 500 {vTcl:FireEvent %W <<vTclBalloon>>}]
|
|
}
|
|
}
|
|
bind "_vTclBalloon" <Leave> {
|
|
namespace eval ::vTcl::balloon {
|
|
set first 0
|
|
}
|
|
vTcl:FireEvent %W <<KillBalloon>>
|
|
}
|
|
bind "_vTclBalloon" <Motion> {
|
|
namespace eval ::vTcl::balloon {
|
|
if {!$set} {
|
|
after cancel $id
|
|
set id [after 500 {vTcl:FireEvent %W <<vTclBalloon>>}]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Window show .
|
|
Window show .top60
|
|
|
|
main $argc $argv
|