# # $Id: ttk.tcl,v 1.8.2.1 2009/05/14 00:53:04 patthoyts Exp $ # # 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. # package ifneeded tile 0.8.0 { package require Tk ; package provide tile 0.8.0 } # 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 <> virtual event to all widgets. # proc ::ttk::ThemeChanged {} { set Q . while {[llength $Q]} { set QN [list] foreach w $Q { event generate $w <> 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 treeview.tcl] source [file join $::ttk::library sizegrip.tcl] ## Label and Labelframe bindings: # (not enough to justify their own file...) # bind TLabelframe <> { tk::TabToWindow [tk_focusNext %W] } bind TLabel <> { 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*