databaseview_test.tcl

来自「一个跨平台的TCL/TK可视开发环境类似VC. TCL/TK是一个跨平台的脚本」· TCL 代码 · 共 1,016 行 · 第 1/3 页

TCL
1,016
字号
proc 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 $command {

            configure {

                return [eval configureProc $w $args]

            }

            cget {

                return [eval cgetProc $w $args]

            }

            widget {

                ## this calls the custom widgetProc

                upvar ::${w}::widgetProc  widgetProc

                return [eval $widgetProc $w $args]

            }

            default {

                ## we have renamed the default widgetProc _<widgetpath>

                uplevel _$w $command $args

            }

        }

    }

}

#############################################################################

## 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 .top79

    namespace eval ::widgets::$base {

        set set,origin 1

        set set,size 1

        set runvisible 1

    }

    namespace eval ::widgets::$base.com80 {

        array set save {-class 1 -compoundClass 1}

    }

    namespace eval ::widgets::$base.but81 {

        array set save {-command 1 -pady 1 -text 1}

    }

    namespace eval ::widgets_bindings {

        set tagslist _TopLevel

    }

    namespace eval ::vTcl::modules::main {

        set procs {

            init

            main

        }

        set compounds {

            {user {Database View}}

        }

        set projectType single

    }

}

}



#################################

# USER DEFINED PROCEDURES

#

#############################################################################

## Procedure:  main



proc ::main {argc argv} {}



#############################################################################

## Initialization Procedure:  init



proc ::init {argc argv} {}



init $argc $argv



#################################

# VTCL GENERATED GUI PROCEDURES

#



proc vTclWindow. {base} {

    if {$base == ""} {

        set base .

    }

    ###################

    # CREATING WIDGETS

    ###################

    wm focusmodel $top passive

    wm geometry $top 200x200+66+75; update

    wm maxsize $top 1284 1006

    wm minsize $top 111 1

    wm overrideredirect $top 0

    wm resizable $top 1 1

    wm withdraw $top

    wm title $top "vtcl"

    bindtags $top "$top Vtcl all"

    vTcl:FireEvent $top <<Create>>

    wm protocol $top WM_DELETE_WINDOW "vTcl:FireEvent $top <<DeleteWindow>>"



    ###################

    # SETTING GEOMETRY

    ###################



    vTcl:FireEvent $base <<Ready>>

}



proc vTclWindow.top79 {base} {

    if {$base == ""} {

        set base .top79

    }

    if {[winfo exists $base]} {

        wm deiconify $base; return

    }

    set top $base

    ###################

    # CREATING WIDGETS

    ###################

    vTcl:toplevel $top -class Toplevel

    wm focusmodel $top passive

    wm geometry $top 433x366+350+212; update

    wm maxsize $top 1284 1006

    wm minsize $top 111 1

    wm overrideredirect $top 0

    wm resizable $top 1 1

    wm deiconify $top

    wm title $top "Database Viewer MegaWidget Test"

    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>>"



    vTcl::widgets::core::compoundcontainer::createCmd $top.com80 \

        -compoundClass {Database View} 

    vTcl:DefineAlias "$top.com80" "CompoundContainer1" vTcl::widgets::core::compoundcontainer::widgetProc "Toplevel1" 1

    $top.com80.cmpd widget configure \

        

    button $top.but81 \

        \

        -command {## open a small test database provided as an example

## doesn't hurt to close if not already open

CompoundContainer1 widget close

CompoundContainer1 widget open test.mk} \

        -pady 0 -text {Test Now!} 

    vTcl:DefineAlias "$top.but81" "Button1" vTcl:WidgetProc "Toplevel1" 1

    ###################

    # SETTING GEOMETRY

    ###################

    pack $top.com80 \

        -in $top -anchor center -expand 1 -fill both -side top 

    pack $top.but81 \

        -in $top -anchor center -expand 0 -fill none -padx 5 -pady 5 \

        -side top 



    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}

}



Window show .

Window show .top79



main $argc $argv

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?