summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tk/ttk_selector.rb
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-27 18:44:31 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-27 18:44:31 +0000
commitee695fb164796dc203306f1585c4f6dd74f06806 (patch)
tree278f46cf1b6a9afafd3391af2b29e8a2ecf31dd4 /ext/tk/lib/tk/ttk_selector.rb
parent4dd9fd71b34cd21613404a2900085868dfac5cd4 (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.rb110
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