diff options
author | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-02-27 18:44:31 +0000 |
---|---|---|
committer | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-02-27 18:44:31 +0000 |
commit | ee695fb164796dc203306f1585c4f6dd74f06806 (patch) | |
tree | 278f46cf1b6a9afafd3391af2b29e8a2ecf31dd4 /ext/tk/lib/tk/ttk_selector.rb | |
parent | 4dd9fd71b34cd21613404a2900085868dfac5cd4 (diff) |
* ext/tk/lib/tk.rb, ext/tk/lib/*: make default widget set
switchable between Tk (standard Tcl/Tk widget set) and
Ttk (Tile). Initial default widget set is Tk. Now, toplevel
widget classes are removed and defined as aliases.
For example, "TkButton" is an alias of the "Tk::Button" class.
Those aliases are replaced when switching default widget set.
"Tk.default_widget_set=" is the method for switching default
widget set. "Tk.default_widget_set = :Ttk" defines Ttk (Tile)
widget set as default. It means that "TkButton" denotes
"Tk::Tile::Button" class. And then, "TkButton.new" creates
a Tk::Tile::Button widget. Of course, you can back to use
standard Tk widgets as the default widget set by calling
"Tk.default_widget_set = :Tk", whenever you want. Based on
thie feature, you can use Ttk widget styling engine on your
old Ruby/Tk application without modifying its source, if you
don'tuse widget options unsupported on Ttk widgets (At first,
call "Tk.default_widget_set = :Ttk", and next load and run
your application).
This is one step for supporting Tcl/Tk8.5 features.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15618 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk/lib/tk/ttk_selector.rb')
-rw-r--r-- | ext/tk/lib/tk/ttk_selector.rb | 110 |
1 files changed, 61 insertions, 49 deletions
diff --git a/ext/tk/lib/tk/ttk_selector.rb b/ext/tk/lib/tk/ttk_selector.rb index 8960da95a2..f89b5c76be 100644 --- a/ext/tk/lib/tk/ttk_selector.rb +++ b/ext/tk/lib/tk/ttk_selector.rb @@ -1,55 +1,67 @@ # # ttk_selector # -module Ttk_Selector - @TTK_CLASS_NAMES = {} - - def self.use_ttk_as_default(mode = true) - if mode # Use Ttk widgets - @TTK_CLASS_NAMES.each{|name, status| - eval("::Tk#{name} = ::Tk::#{(status)? 'Tile::': '::'}#{name}", - TOPLEVEL_BINDING) - } - else # Use standard Tk widagets - @TTK_CLASS_NAMES.each{|name, status| - eval("::Tk#{name} = ::Tk::#{name}", TOPLEVEL_BINDING) - } - end - end +###################################### +# toplevel classes/modules +module Tk + @TOPLEVEL_ALIAS_TABLE[:Ttk] = { + :TkButton => 'tkextlib/tile/tbutton', - def self.add(name) - @TTK_CLASS_NAMES[name] = true - end + :TkCheckbutton => 'tkextlib/tile/tcheckbutton', + :TkCheckButton => 'tkextlib/tile/tcheckbutton', - def self.remove(name) - @TTK_CLASS_NAMES[name] = false - end -end + # :TkDialog => 'tkextlib/tile/dialog', + + :TkEntry => 'tkextlib/tile/tentry', + + :TkCombobox => 'tkextlib/tile/tcombobox', + + :TkFrame => 'tkextlib/tile/tframe', + + :TkLabel => 'tkextlib/tile/tlabel', + + :TkLabelframe => 'tkextlib/tile/tlabelframe', + :TkLabelFrame => 'tkextlib/tile/tlabelframe', + + :TkMenubutton => 'tkextlib/tile/tmenubutton', + :TkMenuButton => 'tkextlib/tile/tmenubutton', + + :TkNotebook => 'tkextlib/tile/tnotebook', + + # :TkPaned => 'tkextlib/tile/tpaned', + :TkPanedwindow => 'tkextlib/tile/tpaned', + :TkPanedWindow => 'tkextlib/tile/tpaned', + + :TkProgressbar => 'tkextlib/tile/tprogressbar', -#-------------------------------------------------------------------- - -Ttk_Selector.add('Button') -Ttk_Selector.add('Checkbutton') -Ttk_Selector.add('Entry') -##(ttk only) Ttk_Selector.add('Combobox') -##(ttk only) Ttk_Selector.add('Dialog') -Ttk_Selector.add('Frame') -Ttk_Selector.add('Label') -Ttk_Selector.add('Labelframe') -##(std only) Ttk_Selector.add('Listbox') -Ttk_Selector.add('Menubutton') -##(ttk only) Ttk_Selector.add('Notebook') -Ttk_Selector.add('Panedwindow') -##(ttk only) Ttk_Selector.add('Progressbar') -Ttk_Selector.add('Radiobutton') -Ttk_Selector.add('Scale') -##(ttk only) Ttk_Selector.add('Progress') -Ttk_Selector.add('Scrollbar') -Ttk_Selector.add('XScrollbar') -Ttk_Selector.add('YScrollbar') -##(ttk only) Ttk_Selector.add('Separator') -##(ttk only) Ttk_Selector.add('SizeGrip') -##(ttk only) Ttk_Selector.add('Square') -##(ttk only) Ttk_Selector.add('Treeview') - -#-------------------------------------------------------------------- + :TkRadiobutton => 'tkextlib/tile/tradiobutton', + :TkRadioButton => 'tkextlib/tile/tradiobutton', + + :TkScale => 'tkextlib/tile/tscale', + # :TkProgress => 'tkextlib/tile/tscale', + + :TkScrollbar => 'tkextlib/tile/tscrollbar', + :TkXScrollbar => 'tkextlib/tile/tscrollbar', + :TkYScrollbar => 'tkextlib/tile/tscrollbar', + + :TkSeparator => 'tkextlib/tile/tseparator', + + :TkSizeGrip => 'tkextlib/tile/sizegrip', + :TkSizegrip => 'tkextlib/tile/sizegrip', + + # :TkSquare => 'tkextlib/tile/tsquare', + + :TkTreeview => 'tkextlib/tile/treeview', + } + @TOPLEVEL_ALIAS_TABLE[:Tile] = @TOPLEVEL_ALIAS_TABLE[:Ttk] + + ################################################ + + @TOPLEVEL_ALIAS_SETUP_PROC[:Tile] = + @TOPLEVEL_ALIAS_SETUP_PROC[:Ttk] = proc{|mod| + unless Tk.autoload?(:Tile) || Tk.const_defined?(:Tile) + Object.autoload :Ttk, 'tkextlib/tile' + Tk.autoload :Tile, 'tkextlib/tile' + end + } +end |