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/tcllib/tkpiechart.rb
nagai 3514110b89 * ext/tk/lib/tk/*: untabify
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-10-11 04:51:21 +00:00

287 lines
6.4 KiB
Ruby

#
# tkextlib/tcllib/tkpiechart.rb
# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
# * Part of tcllib extension
# * Create 2D or 3D pies with labels in Tcl canvases
#
require 'tk'
require 'tk/canvas'
require 'tkextlib/tcllib.rb'
# TkPackage.require('tkpiechart', '6.6')
TkPackage.require('tkpiechart')
module Tk
module Tcllib
module Tkpiechart
end
end
end
module Tk::Tcllib::Tkpiechart
def self.package_version
begin
TkPackage.require('tkpiechart')
rescue
''
end
end
module ConfigMethod
include TkConfigMethod
def __pathname
self.path + ';' + self.tag
end
private :__pathname
def __cget_cmd
['::switched::cget', self.tag]
end
def __config_cmd
['::switched::configure', self.tag]
end
private :__config_cmd
def __configinfo_struct
{:key=>0, :alias=>nil, :db_name=>nil, :db_class=>nil,
:default_value=>1, :current_value=>2}
end
private :__configinfo_struct
end
####################################
class PieChartObj < TkcItem
include ConfigMethod
def __font_optkeys
['titlefont']
end
private :__font_optkeys
end
####################################
class Pie < TkcItem
include ConfigMethod
def create_self(x, y, width, height, keys=None)
if keys and keys != None
@tag_key = tk_call_without_enc('::stooop::new', 'pie',
@c, x, y, *hash_kv(keys, true))
else
@tag_key = tk_call_without_enc('::stooop::new', 'pie', @c, x, y)
end
@slice_tbl = {}
id = "pie(#{@tag_key})"
@tag = @tag_pie = TkcNamedTag(@c, id)
@tag_slices = TkcNamedTag(@c, "pieSlices(#{@tag_key})")
id
end
private :create_self
def tag_key
@tag_key
end
def tag
@tag
end
def canvas
@c
end
def _entry_slice(slice)
@slice_tbl[slice.to_eval] = slice
end
def _delete_slice(slice)
@slice_tbl.delete(slice.to_eval)
end
def delete
tk_call_without_enc('::stooop::delete', @tag_key)
CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]
self
end
def new_slice(text=None)
Slice.new(self, text)
end
def delete_slice(slice)
unless slice.kind_of?(Slice)
unless (slice = @slice_tbl[slice])
return tk_call_without_enc('pie::deleteSlice', @tag_key, slice)
end
end
unless slice.kind_of?(Slice) && slice.pie == self
fail ArgumentError, "argument is not a slice of self"
end
slice.delete
end
def selected_slices
tk_split_simplelist(tk_call_without_enc('pie::selectedSlices',
@tag_key)).collect{|slice|
@slice_tbl[slice] || Slice.new(:no_create, self, slice)
}
end
end
####################################
class Slice < TkcItem
include ConfigMethod
def __config_cmd
['::switched::configure', self.tag]
end
private :__config_cmd
#------------------------
def initialize(pie, *args)
unless pie.kind_of?(Pie) && pie != :no_create
fail ArgumentError, "expects TkPiechart::Pie for 1st argument"
end
if pie == :no_create
@pie, @tag_key = args
else
text = args[0] || None
@pie = pie
@tag_key = tk_call_without_enc('pie::newSlice', @pie.tag_key, text)
end
@parent = @c = @pie.canvas
@path = @parent.path
@pie._entry_slice(self)
@id = "slices(#{@tag_key})"
@tag = TkcNamedTag.new(@pie.canvas, @id)
CItemID_TBL[@path] = {} unless CItemID_TBL[@path]
CItemID_TBL[@path][@id] = self
end
def tag_key
@tag_key
end
def tag
@tag
end
def pie
@pie
end
def delete
tk_call_without_enc('pie::deleteSlice', @pie.tag_key, @tag_key)
CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]
@pie._delete_slice(self)
self
end
def size(share, disp=None)
tk_call_without_enc('pie::sizeSlice',
@pie.tag_key, @tag_key, share, disp)
self
end
def label(text)
tk_call_without_enc('pie::labelSlice', @pie.tag_key, @tag_key, text)
self
end
end
####################################
class BoxLabeler < TkcItem
include ConfigMethod
def __config_cmd
['::switched::configure', self.tag]
end
private :__config_cmd
#------------------------
def create_self(keys=None)
if keys and keys != None
@tag_key = tk_call_without_enc('::stooop::new', 'pieBoxLabeler',
*hash_kv(keys, true))
else
@tag_key = tk_call_without_enc('::stooop::new', 'pieBoxLabeler')
end
id = "pieBoxLabeler(#{@tag_key})"
@tag = TkcNamedTag(@c, id)
id
end
private :create_self
end
####################################
class PeripheralLabeler < TkcItem
include ConfigMethod
def __font_optkeys
['font', 'smallfont']
end
private :__font_optkeys
def __config_cmd
['::switched::configure', self.tag]
end
private :__config_cmd
#------------------------
def create_self(keys=None)
if keys and keys != None
@tag_key = tk_call_without_enc('::stooop::new',
'piePeripheralLabeler',
*hash_kv(keys, true))
else
@tag_key = tk_call_without_enc('::stooop::new', 'piePeripheralLabeler')
end
id = "piePeripheralLabeler(#{@tag_key})"
@tag = TkcNamedTag(@c, id)
id
end
private :create_self
end
####################################
class Label < TkcItem
include ConfigMethod
def __config_cmd
['::switched::configure', self.tag]
end
private :__config_cmd
#------------------------
def create_self(x, y, keys=None)
if keys and keys != None
@tag_key = tk_call_without_enc('::stooop::new', 'canvasLabel',
@c, x, y, width, height,
*hash_kv(keys, true))
else
@tag_key = tk_call_without_enc('::stooop::new', 'canvasLabel',
@c, x, y, width, height)
end
id = "canvasLabel(#{@tag_key})"
@tag = TkcNamedTag(@c, id)
id
end
private :create_self
end
end