1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/tk/lib/tkextlib/tile.rb

226 lines
6 KiB
Ruby
Raw Normal View History

#
# Tile theme engin (tile widget set) support
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
# call setup script for general 'tkextlib' libraries
require 'tkextlib/setup.rb'
# library directory
require 'tkextlib/tile/setup.rb'
# load package
# TkPackage.require('tile', '0.4')
# TkPackage.require('tile', '0.6')
# TkPackage.require('tile', '0.7')
verstr = TkPackage.require('tile')
ver = verstr.split('.')
if ver[0].to_i == 0 && ver[1].to_i <= 4
# version 0.4 or former
module Tk
module Tile
USE_TILE_NAMESPACE = true
USE_TTK_NAMESPACE = false
TILE_SPEC_VERSION_ID = 0
end
end
elsif ver[0].to_i == 0 && ver[1].to_i <= 6
# version 0.5 -- version 0.6
module Tk
module Tile
USE_TILE_NAMESPACE = true
USE_TTK_NAMESPACE = true
TILE_SPEC_VERSION_ID = 5
end
end
else
# version 0.7 or later
module Tk
module Tile
USE_TILE_NAMESPACE = false
USE_TTK_NAMESPACE = true
TILE_SPEC_VERSION_ID = 7
end
end
end
# autoload
module Tk
module Tile
TkComm::TkExtlibAutoloadModule.unshift(self)
PACKAGE_NAME = 'tile'.freeze
def self.package_name
PACKAGE_NAME
end
def self.package_version
begin
TkPackage.require('tile')
rescue
''
end
end
def self.__Import_Tile_Widgets__!
Tk.tk_call('namespace', 'import', '-force', 'ttk::*')
end
def self.load_images(imgdir, pat=TkComm::None)
images = Hash[*TkComm.simplelist(Tk.tk_call('::tile::LoadImages',
imgdir, pat))]
images.keys.each{|k|
images[k] = TkPhotoImage.new(:imagename=>images[k],
:without_creating=>true)
}
images
end
def self.style(*args)
args.map!{|arg| TkComm._get_eval_string(arg)}.join('.')
end
module KeyNav
def self.enableMnemonics(w)
Tk.tk_call('::keynav::enableMnemonics', w)
end
def self.defaultButton(w)
Tk.tk_call('::keynav::defaultButton', w)
end
end
module Font
Default = 'TkDefaultFont'
Text = 'TkTextFont'
Heading = 'TkHeadingFont'
Caption = 'TkCaptionFont'
Tooltip = 'TkTooltipFont'
Fixed = 'TkFixedFont'
Menu = 'TkMenuFont'
SmallCaption = 'TkSmallCaptionFont'
Icon = 'TkIconFont'
end
module ParseStyleLayout
def _style_layout(lst)
ret = []
until lst.empty?
sub = [lst.shift]
keys = {}
until lst.empty?
if lst[0][0] == ?-
k = lst.shift[1..-1]
children = lst.shift
children = _style_layout(children) if children.kind_of?(Array)
keys[k] = children
else
break
end
end
sub << keys unless keys.empty?
ret << sub
end
ret
end
private :_style_layout
end
module TileWidget
include Tk::Tile::ParseStyleLayout
def __val2ruby_optkeys # { key=>proc, ... }
# The method is used to convert a opt-value to a ruby's object.
# When get the value of the option "key", "proc.call(value)" is called.
super().update('style'=>proc{|v| _style_layout(list(v))})
end
private :__val2ruby_optkeys
def instate(state, script=nil, &b)
if script
tk_send('instate', state, script)
elsif b
tk_send('instate', state, Proc.new(&b))
else
bool(tk_send('instate', state))
end
end
def state(state=nil)
if state
tk_send('state', state)
else
list(tk_send('state'))
end
end
end
######################################
autoload :TButton, 'tkextlib/tile/tbutton'
autoload :Button, 'tkextlib/tile/tbutton'
autoload :TCheckButton, 'tkextlib/tile/tcheckbutton'
autoload :CheckButton, 'tkextlib/tile/tcheckbutton'
autoload :TCheckbutton, 'tkextlib/tile/tcheckbutton'
autoload :Checkbutton, 'tkextlib/tile/tcheckbutton'
autoload :Dialog, 'tkextlib/tile/dialog'
autoload :TEntry, 'tkextlib/tile/tentry'
autoload :Entry, 'tkextlib/tile/tentry'
autoload :TCombobox, 'tkextlib/tile/tcombobox'
autoload :Combobox, 'tkextlib/tile/tcombobox'
autoload :TFrame, 'tkextlib/tile/tframe'
autoload :Frame, 'tkextlib/tile/tframe'
autoload :TLabelframe, 'tkextlib/tile/tlabelframe'
autoload :Labelframe, 'tkextlib/tile/tlabelframe'
autoload :TLabel, 'tkextlib/tile/tlabel'
autoload :Label, 'tkextlib/tile/tlabel'
autoload :TMenubutton, 'tkextlib/tile/tmenubutton'
autoload :Menubutton, 'tkextlib/tile/tmenubutton'
autoload :TNotebook, 'tkextlib/tile/tnotebook'
autoload :Notebook, 'tkextlib/tile/tnotebook'
autoload :TPaned, 'tkextlib/tile/tpaned'
autoload :Paned, 'tkextlib/tile/tpaned'
autoload :TProgressbar, 'tkextlib/tile/tprogressbar'
autoload :Progressbar, 'tkextlib/tile/tprogressbar'
autoload :TRadioButton, 'tkextlib/tile/tradiobutton'
autoload :RadioButton, 'tkextlib/tile/tradiobutton'
autoload :TRadiobutton, 'tkextlib/tile/tradiobutton'
autoload :Radiobutton, 'tkextlib/tile/tradiobutton'
autoload :TScale, 'tkextlib/tile/tscale'
autoload :Scale, 'tkextlib/tile/tscale'
autoload :TProgress, 'tkextlib/tile/tscale'
autoload :Progress, 'tkextlib/tile/tscale'
autoload :TScrollbar, 'tkextlib/tile/tscrollbar'
autoload :Scrollbar, 'tkextlib/tile/tscrollbar'
autoload :TSeparator, 'tkextlib/tile/tseparator'
autoload :Separator, 'tkextlib/tile/tseparator'
autoload :TSquare, 'tkextlib/tile/tsquare'
autoload :Square, 'tkextlib/tile/tsquare'
autoload :Treeview, 'tkextlib/tile/treeview'
autoload :Style, 'tkextlib/tile/style'
end
end