Viewing file: ttk.tcl (4.44 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# # Ttk widget set initialization script. #
### Source library scripts. #
namespace eval ::ttk { variable library if {![info exists library]} { set library [file dirname [info script]] } }
source [file join $::ttk::library fonts.tcl] source [file join $::ttk::library cursors.tcl] source [file join $::ttk::library utils.tcl]
## ttk::deprecated $old $new -- # Define $old command as a deprecated alias for $new command # $old and $new must be fully namespace-qualified. # proc ttk::deprecated {old new} { interp alias {} $old {} ttk::do'deprecate $old $new } ## do'deprecate -- # Implementation procedure for deprecated commands -- # issue a warning (once), then re-alias old to new. # proc ttk::do'deprecate {old new args} { deprecated'warning $old $new interp alias {} $old {} $new uplevel 1 [linsert $args 0 $new] }
## deprecated'warning -- # Gripe about use of deprecated commands. # proc ttk::deprecated'warning {old new} { puts stderr "$old deprecated -- use $new instead" }
### Backward-compatibility. # # # Make [package require tile] an effective no-op; # see SF#3016598 for discussion. # package ifneeded tile 0.8.6 { package provide tile 0.8.6 }
# ttk::panedwindow used to be named ttk::paned. Keep the alias for now. # ::ttk::deprecated ::ttk::paned ::ttk::panedwindow
### ::ttk::ThemeChanged -- # Called from [::ttk::style theme use]. # Sends a <<ThemeChanged>> virtual event to all widgets. # proc ::ttk::ThemeChanged {} { set Q . while {[llength $Q]} { set QN [list] foreach w $Q { event generate $w <<ThemeChanged>> foreach child [winfo children $w] { lappend QN $child } } set Q $QN } }
### Public API. #
proc ::ttk::themes {{ptn *}} { set themes [list]
foreach pkg [lsearch -inline -all -glob [package names] ttk::theme::$ptn] { lappend themes [namespace tail $pkg] }
return $themes }
## ttk::setTheme $theme -- # Set the current theme to $theme, loading it if necessary. # proc ::ttk::setTheme {theme} { variable currentTheme ;# @@@ Temp -- [::ttk::style theme use] doesn't work if {$theme ni [::ttk::style theme names]} { package require ttk::theme::$theme } ::ttk::style theme use $theme set currentTheme $theme }
### Load widget bindings. # source [file join $::ttk::library button.tcl] source [file join $::ttk::library menubutton.tcl] source [file join $::ttk::library scrollbar.tcl] source [file join $::ttk::library scale.tcl] source [file join $::ttk::library progress.tcl] source [file join $::ttk::library notebook.tcl] source [file join $::ttk::library panedwindow.tcl] source [file join $::ttk::library entry.tcl] source [file join $::ttk::library combobox.tcl] ;# dependency: entry.tcl source [file join $::ttk::library spinbox.tcl] ;# dependency: entry.tcl source [file join $::ttk::library treeview.tcl] source [file join $::ttk::library sizegrip.tcl]
## Label and Labelframe bindings: # (not enough to justify their own file...) # bind TLabelframe <<Invoke>> { tk::TabToWindow [tk_focusNext %W] } bind TLabel <<Invoke>> { tk::TabToWindow [tk_focusNext %W] }
### Load settings for built-in themes: # proc ttk::LoadThemes {} { variable library
# "default" always present: uplevel #0 [list source [file join $library defaults.tcl]]
set builtinThemes [style theme names] foreach {theme scripts} { classic classicTheme.tcl alt altTheme.tcl clam clamTheme.tcl winnative winTheme.tcl xpnative {xpTheme.tcl vistaTheme.tcl} aqua aquaTheme.tcl } { if {[lsearch -exact $builtinThemes $theme] >= 0} { foreach script $scripts { uplevel #0 [list source [file join $library $script]] } } } }
ttk::LoadThemes; rename ::ttk::LoadThemes {}
### Select platform-specific default theme: # # Notes: # + On OSX, aqua theme is the default # + On Windows, xpnative takes precedence over winnative if available. # + On X11, users can use the X resource database to # specify a preferred theme (*TkTheme: themeName); # otherwise "default" is used. #
proc ttk::DefaultTheme {} { set preferred [list aqua vista xpnative winnative]
set userTheme [option get . tkTheme TkTheme] if {$userTheme ne {} && ![catch { uplevel #0 [list package require ttk::theme::$userTheme] }]} { return $userTheme }
foreach theme $preferred { if {[package provide ttk::theme::$theme] ne ""} { return $theme } } return "default" }
ttk::setTheme [ttk::DefaultTheme] ; rename ttk::DefaultTheme {}
#*EOF*
|