diff options
Diffstat (limited to 'ruby_1_8_6/ext/tk/lib/tkextlib/blt/component.rb')
-rw-r--r-- | ruby_1_8_6/ext/tk/lib/tkextlib/blt/component.rb | 1835 |
1 files changed, 0 insertions, 1835 deletions
diff --git a/ruby_1_8_6/ext/tk/lib/tkextlib/blt/component.rb b/ruby_1_8_6/ext/tk/lib/tkextlib/blt/component.rb deleted file mode 100644 index ad78a5430b..0000000000 --- a/ruby_1_8_6/ext/tk/lib/tkextlib/blt/component.rb +++ /dev/null @@ -1,1835 +0,0 @@ -# -# tkextlib/blt/component.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/blt.rb' - -module Tk::BLT - module PlotComponent - include TkItemConfigMethod - - module OptKeys - def __item_font_optkeys(id) - ['font', 'tickfont', 'titlefont'] - end - private :__item_font_optkeys - - def __item_numstrval_optkeys(id) - ['xoffset', 'yoffset'] - end - private :__item_numstrval_optkeys - - def __item_boolval_optkeys(id) - ['hide', 'under', 'descending', 'logscale', 'loose', 'showticks', - 'titlealternate', 'scalesymbols', 'minor', 'raised', - 'center', 'decoration', 'landscape', 'maxpect'] - end - private :__item_boolval_optkeys - - def __item_strval_optkeys(id) - ['text', 'label', 'limits', 'title', - 'show', 'file', 'maskdata', 'maskfile', - 'color', 'titlecolor', 'fill', 'outline', 'offdash'] - end - private :__item_strval_optkeys - - def __item_listval_optkeys(id) - ['bindtags'] - end - private :__item_listval_optkeys - - def __item_numlistval_optkeys(id) - ['dashes', 'majorticks', 'minorticks'] - end - private :__item_numlistval_optkeys - - def __item_tkvariable_optkeys(id) - ['variable', 'textvariable', 'colormap', 'fontmap'] - end - private :__item_tkvariable_optkeys - end - - include OptKeys - - def __item_cget_cmd(id) - if id.kind_of?(Array) - # id := [ type, name ] - [self.path, id[0], 'cget', id[1]] - else - [self.path, id, 'cget'] - end - end - private :__item_cget_cmd - - def __item_config_cmd(id) - if id.kind_of?(Array) - # id := [ type, name, ... ] - type, *names = id - [self.path, type, 'configure'].concat(names) - else - [self.path, id, 'configure'] - end - end - private :__item_config_cmd - - def __item_pathname(id) - if id.kind_of?(Array) - id = tagid(id[1]) - end - [self.path, id].join(';') - end - private :__item_pathname - - def axis_cget(id, option) - ret = itemcget(['axis', tagid(id)], option) - end - def axis_configure(*args) - slot = args.pop - if slot.kind_of?(Hash) - value = None - slot = _symbolkey2str(slot) - if cmd = slot.delete('command') - slot['command'] = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - else - value = slot - slot = args.pop - if slot == :command || slot == 'command' - cmd = value - value = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - end - id_list = args.flatten.collect!{|id| tagid(id)}.unshift('axis') - itemconfigure(id_list, slot, value) - end - def axis_configinfo(id, slot=nil) - itemconfiginfo(['axis', tagid(id)], slot) - end - def current_axis_configinfo(id, slot=nil) - current_itemconfiginfo(['axis', tagid(id)], slot) - end - - def crosshairs_cget(option) - itemcget('crosshairs', option) - end - def crosshairs_configure(slot, value=None) - itemconfigure('crosshairs', slot, value) - end - def crosshairs_configinfo(slot=nil) - itemconfiginfo('crosshairs', slot) - end - def current_crosshairs_configinfo(slot=nil) - current_itemconfiginfo('crosshairs', slot) - end - - def element_cget(id, option) - itemcget(['element', tagid(id)], option) - end - def element_configure(*args) - slot = args.pop - if slot.kind_of?(Hash) - value = None - else - value = slot - slot = args.pop - end - id_list = args.flatten.collect!{|id| tagid(id)}.unshift('element') - itemconfigure(id_list, slot, value) - end - def element_configinfo(id, slot=nil) - itemconfiginfo(['element', tagid(id)], slot) - end - def current_element_configinfo(id, slot=nil) - current_itemconfiginfo(['element', tagid(id)], slot) - end - - def bar_cget(id, option) - itemcget(['bar', tagid(id)], option) - end - def bar_configure(*args) - slot = args.pop - if slot.kind_of?(Hash) - value = None - else - value = slot - slot = args.pop - end - id_list = args.flatten.collect!{|id| tagid(id)}.unshift('bar') - itemconfigure(id_list, slot, value) - end - def bar_configinfo(id, slot=nil) - itemconfiginfo(['bar', tagid(id)], slot) - end - def current_bar_configinfo(id, slot=nil) - current_itemconfiginfo(['bar', tagid(id)], slot) - end - - def line_cget(id, option) - itemcget(['line', tagid(id)], option) - end - def line_configure(*args) - slot = args.pop - if slot.kind_of?(Hash) - value = None - else - value = slot - slot = args.pop - end - id_list = args.flatten.collect!{|id| tagid(id)}.unshift('line') - itemconfigure(id_list, slot, value) - end - def line_configinfo(id, slot=nil) - itemconfiginfo(['line', tagid(id)], slot) - end - def current_line_configinfo(id, slot=nil) - current_itemconfiginfo(['line', tagid(id)], slot) - end - - def gridline_cget(option) - itemcget('grid', option) - end - def gridline_configure(slot, value=None) - itemconfigure('grid', slot, value) - end - def gridline_configinfo(slot=nil) - itemconfiginfo('grid', slot) - end - def current_gridline_configinfo(slot=nil) - current_itemconfiginfo('grid', slot) - end - - def legend_cget(option) - itemcget('legend', option) - end - def legend_configure(slot, value=None) - itemconfigure('legend', slot, value) - end - def legend_configinfo(slot=nil) - itemconfiginfo('legend', slot) - end - def current_legend_configinfo(slot=nil) - current_itemconfiginfo('legend', slot) - end - - def pen_cget(id, option) - itemcget(['pen', tagid(id)], option) - end - def pen_configure(*args) - slot = args.pop - if slot.kind_of?(Hash) - value = None - else - value = slot - slot = args.pop - end - id_list = args.flatten.collect!{|id| tagid(id)}.unshift('pen') - itemconfigure(id_list, slot, value) - end - def pen_configinfo(id, slot=nil) - itemconfiginfo(['pen', tagid(id)], slot) - end - def current_pen_configinfo(id, slot=nil) - current_itemconfiginfo(['pen', tagid(id)], slot) - end - - def postscript_cget(option) - itemcget('postscript', option) - end - def postscript_configure(slot, value=None) - itemconfigure('postscript', slot, value) - end - def postscript_configinfo(slot=nil) - itemconfiginfo('postscript', slot) - end - def current_postscript_configinfo(slot=nil) - current_itemconfiginfo('postscript', slot) - end - - def marker_cget(id, option) - itemcget(['marker', tagid(id)], option) - end - def marker_configure(*args) - slot = args.pop - if slot.kind_of?(Hash) - value = None - else - value = slot - slot = args.pop - end - id_list = args.flatten.collect!{|id| tagid(id)}.unshift('marker') - itemconfigure(id_list, slot, value) - end - def marker_configinfo(id, slot=nil) - itemconfiginfo(['marker', tagid(id)], slot) - end - def current_marker_configinfo(id, slot=nil) - current_itemconfiginfo(['marker', tagid(id)], slot) - end - - alias __itemcget itemcget - alias __itemconfiginfo itemconfiginfo - alias __current_itemconfiginfo current_itemconfiginfo - private :__itemcget, :__itemconfiginfo, :__current_itemconfiginfo - - def itemcget(tagOrId, option) - ret = __itemcget(tagid(tagOrId), option) - if option == 'bindtags' || option == :bindtags - ret.collect{|tag| TkBindTag.id2obj(tag)} - else - ret - end - end - def itemconfiginfo(tagOrId, slot = nil) - ret = __itemconfiginfo(tagid(tagOrId), slot) - - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - if slot == 'bindtags' || slot == :bindtags - ret[-2] = ret[-2].collect{|tag| TkBindTag.id2obj(tag)} - ret[-1] = ret[-1].collect{|tag| TkBindTag.id2obj(tag)} - end - else - if (inf = ret.assoc('bindtags')) - inf[-2] = inf[-2].collect{|tag| TkBindTag.id2obj(tag)} - inf[-1] = inf[-1].collect{|tag| TkBindTag.id2obj(tag)} - end - end - - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if (inf = ret['bindtags']) - inf[-2] = inf[-2].collect{|tag| TkBindTag.id2obj(tag)} - inf[-1] = inf[-1].collect{|tag| TkBindTag.id2obj(tag)} - ret['bindtags'] = inf - end - end - - ret - end - def current_itemconfiginfo(tagOrId, slot = nil) - ret = __current_itemconfiginfo(tagid(tagOrId), slot) - - if (val = ret['bindtags']) - ret['bindtags'] = val.collect{|tag| TkBindTag.id2obj(tag)} - end - - ret - end - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - ################# - - class Axis < TkObject - OBJ_ID = ['blt_chart_axis'.freeze, '00000'.taint].freeze - OBJ_TBL={} - - def self.id2obj(chart, id) - cpath = chart.path - return id unless OBJ_TBL[cpath] - OBJ_TBL[cpath][id]? OBJ_TBL[cpath][id]: id - end - - def self.new(chart, axis=nil, keys={}) - if axis.kind_of?(Hash) - keys = axis - axis = nil - end - OBJ_TBL[chart.path] = {} unless OBJ_TBL[chart.path] - return OBJ_TBL[chart.path][axis] if axis && OBJ_TBL[chart.path][axis] - super(chart, axis, keys) - end - - def initialize(chart, axis=nil, keys={}) - if axis.kind_of?(Hash) - keys = axis - axis = nil - end - if axis - @axis = @id = axis.to_s - else - @axis = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze - OBJ_ID[1].succ! - end - @path = @id - @parent = @chart = chart - @cpath = @chart.path - Axis::OBJ_TBL[@cpath][@axis] = self - keys = _symbolkey2str(keys) - unless keys.delete('without_creating') - # @chart.axis_create(@axis, keys) - tk_call(@chart, 'axis', 'create', @axis, keys) - end - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.axis_cget(@id, option) - end - def configure(key, value=None) - @chart.axis_configure(@id, key, value) - self - end - def configinfo(key=nil) - @chart.axis_configinfo(@id, key) - end - def current_configinfo(key=nil) - @chart.current_axis_configinfo(@id, key) - end - - def command(cmd=nil, &b) - if cmd - configure('command', cmd) - elsif b - configure('command', Proc.new(&b)) - else - cget('command') - end - end - - def delete - @chart.axis_delete(@id) - self - end - - def invtransform(val) - @chart.axis_invtransform(@id, val) - end - - def limits - @chart.axis_limits(@id) - end - - def name - @axis - end - - def transform(val) - @chart.axis_transform(@id, val) - end - - def view - @chart.axis_view(@id) - self - end - - def use(name=None) # if @id == xaxis | x2axis | yaxis | y2axis - @chart.axis_use(@id, name) - end - - def use_as(axis) # axis := xaxis | x2axis | yaxis | y2axis - @chart.axis_use(axis, @id) - end - end - - ################# - - class Crosshairs < TkObject - OBJ_TBL={} - - def self.new(chart, keys={}) - return OBJ_TBL[chart.path] if OBJ_TBL[chart.path] - super(chart, keys) - end - - def initialize(chart, keys={}) - @parent = @chart = chart - @cpath = @chart.path - Crosshairs::OBJ_TBL[@cpath] = self - @chart.crosshair_configure(keys) unless keys.empty? - @path = @id = 'crosshairs' - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.crosshair_cget(option) - end - def configure(key, value=None) - @chart.crosshair_configure(key, value) - self - end - def configinfo(key=nil) - @chart.crosshair_configinfo(key) - end - def current_configinfo(key=nil) - @chart.current_crosshair_configinfo(key) - end - - def off - @chart.crosshair_off - self - end - def on - @chart.crosshair_on - self - end - def toggle - @chart.crosshair_toggle - self - end - end - - ################# - - class Element < TkObject - extend Tk - extend TkItemFontOptkeys - extend TkItemConfigOptkeys - - extend Tk::BLT::PlotComponent::OptKeys - - ElementTypeName = 'element' - ElementTypeToClass = { ElementTypeName=>self } - ElementID_TBL = TkCore::INTERP.create_table - - TkCore::INTERP.init_ip_env{ ElementID_TBL.clear } - - OBJ_ID = ['blt_chart_element'.freeze, '00000'.taint].freeze - OBJ_TBL={} - - def Element.type2class(type) - ElementTypeToClass[type] - end - - def Element.id2obj(chart, id) - cpath = chart.path - return id unless OBJ_TBL[cpath] - OBJ_TBL[cpath][id]? OBJ_TBL[cpath][id]: id - end - - def self.new(chart, element=nil, keys={}) - if element.kind_of?(Hash) - keys = element - element = nil - end - OBJ_TBL[chart.path] = {} unless OBJ_TBL[chart.path] - if element && OBJ_TBL[chart.path][element] - return OBJ_TBL[chart.path][element] - end - super(chart, element, keys) - end - - def initialize(chart, element=nil, keys={}) - if element.kind_of?(Hash) - keys = element - element = nil - end - if element - @element = @id = element.to_s - else - @element = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze - OBJ_ID[1].succ! - end - @path = @id - @parent = @chart = chart - @cpath = @chart.path - @typename = self.class::ElementTypeName - Element::OBJ_TBL[@cpath][@element] = self - keys = _symbolkey2str(keys) - unless keys.delete('without_creating') - # @chart.element_create(@element, keys) - tk_call(@chart, @typename, 'create', @element, keys) - end - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - # @chart.element_cget(@id, option) - @chart.__send__(@typename + '_cget', @id, option) - end - def configure(key, value=None) - # @chart.element_configure(@id, key, value) - @chart.__send__(@typename + '_configure', @id, key, value) - self - end - def configinfo(key=nil) - # @chart.element_configinfo(@id, key) - @chart.__send__(@typename + '_configinfo', @id, key) - end - def current_configinfo(key=nil) - # @chart.current_element_configinfo(@id, key) - @chart.__send__('current_' << @typename << '_configinfo', @id, key) - end - - def activate(*args) - @chart.element_activate(@id, *args) - end - - def closest(x, y, var, keys={}) - # @chart.element_closest(x, y, var, @id, keys) - @chart.__send__(@typename + '_closest', x, y, var, @id, keys) - end - - def deactivate - @chart.element_deactivate(@id) - self - end - - def delete - @chart.element_delete(@id) - self - end - - def exist? - @chart.element_exist?(@id) - end - - def name - @element - end - - def type - @chart.element_type(@id) - end - end - - class Bar < Element - ElementTypeName = 'bar'.freeze - ElementTypeToClass[ElementTypeName] = self - end - class Line < Element - ElementTypeName = 'line'.freeze - ElementTypeToClass[ElementTypeName] = self - end - - ################# - - class GridLine < TkObject - OBJ_TBL={} - - def self.new(chart, keys={}) - return OBJ_TBL[chart.path] if OBJ_TBL[chart.path] - super(chart, keys) - end - - def initialize(chart, keys={}) - @parent = @chart = chart - @cpath = @chart.path - GridLine::OBJ_TBL[@cpath] = self - @chart.gridline_configure(keys) unless keys.empty? - @path = @id = 'grid' - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.gridline_cget(option) - end - def configure(key, value=None) - @chart.gridline_configure(key, value) - self - end - def configinfo(key=nil) - @chart.gridline_configinfo(key) - end - def current_configinfo(key=nil) - @chart.current_gridline_configinfo(key) - end - - def off - @chart.gridline_off - self - end - def on - @chart.gridline_on - self - end - def toggle - @chart.gridline_toggle - self - end - end - - ################# - - class Legend < TkObject - OBJ_TBL={} - - def self.new(chart, keys={}) - return OBJ_TBL[chart.path] if OBJ_TBL[chart.path] - super(chart, keys) - end - - def initialize(chart, keys={}) - @parent = @chart = chart - @cpath = @chart.path - Crosshairs::OBJ_TBL[@cpath] = self - @chart.crosshair_configure(keys) unless keys.empty? - @path = @id = 'legend' - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.legend_cget(option) - end - def configure(key, value=None) - @chart.legend_configure(key, value) - self - end - def configinfo(key=nil) - @chart.legend_configinfo(key) - end - def current_configinfo(key=nil) - @chart.current_legend_configinfo(key) - end - - def activate(*args) - @chart.legend_activate(*args) - end - - def deactivate(*args) - @chart.legend_deactivate(*args) - end - - def get(pos, y=nil) - @chart.legend_get(pos, y) - end - end - - ################# - - class Pen < TkObject - OBJ_ID = ['blt_chart_pen'.freeze, '00000'.taint].freeze - OBJ_TBL={} - - def self.id2obj(chart, id) - cpath = chart.path - return id unless OBJ_TBL[cpath] - OBJ_TBL[cpath][id]? OBJ_TBL[cpath][id]: id - end - - def self.new(chart, pen=nil, keys={}) - if pen.kind_of?(Hash) - keys = pen - pen = nil - end - OBJ_TBL[chart.path] = {} unless OBJ_TBL[chart.path] - return OBJ_TBL[chart.path][pen] if pen && OBJ_TBL[chart.path][pen] - super(chart, pen, keys) - end - - def initialize(chart, pen=nil, keys={}) - if pen.kind_of?(Hash) - keys = pen - pen = nil - end - if pen - @pen = @id = pen.to_s - else - @pen = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze - OBJ_ID[1].succ! - end - @path = @id - @parent = @chart = chart - @cpath = @chart.path - Pen::OBJ_TBL[@cpath][@pen] = self - keys = _symbolkey2str(keys) - unless keys.delete('without_creating') - # @chart.pen_create(@pen, keys) - tk_call(@chart, 'pen', 'create', @pen, keys) - end - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.pen_cget(@id, option) - end - def configure(key, value=None) - @chart.pen_configure(@id, key, value) - self - end - def configinfo(key=nil) - @chart.pen_configinfo(@id, key) - end - def current_configinfo(key=nil) - @chart.current_pen_configinfo(@id, key) - end - - def delete - @chart.pen_delete(@id) - self - end - - def name - @pen - end - end - - ################# - - class Postscript < TkObject - OBJ_TBL={} - - def self.new(chart, keys={}) - return OBJ_TBL[chart.path] if OBJ_TBL[chart.path] - super(chart, keys) - end - - def initialize(chart, keys={}) - @parent = @chart = chart - @cpath = @chart.path - Postscript::OBJ_TBL[@cpath] = self - @chart.postscript_configure(keys) unless keys.empty? - @path = @id = 'postscript' - end - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.postscript_cget(option) - end - def configure(key, value=None) - @chart.postscript_configure(key, value) - self - end - def configinfo(key=nil) - @chart.postscript_configinfo(key) - end - def current_configinfo(key=nil) - @chart.current_postscript_configinfo(key) - end - - def output(file=nil, keys={}) - if file.kind_of?(Hash) - keys = file - file = nil - end - - ret = @chart.postscript_output(file, keys) - - if file - self - else - ret - end - end - end - - ################# - class Marker < TkObject - extend Tk - extend TkItemFontOptkeys - extend TkItemConfigOptkeys - - extend Tk::BLT::PlotComponent::OptKeys - - MarkerTypeName = nil - MarkerTypeToClass = {} - MarkerID_TBL = TkCore::INTERP.create_table - - TkCore::INTERP.init_ip_env{ MarkerID_TBL.clear } - - def Marker.type2class(type) - MarkerTypeToClass[type] - end - - def Marker.id2obj(chart, id) - cpath = chart.path - return id unless MarkerID_TBL[cpath] - MarkerID_TBL[cpath][id]? MarkerID_TBL[cpath][id]: id - end - - def self._parse_create_args(keys) - fontkeys = {} - methodkeys = {} - if keys.kind_of? Hash - keys = _symbolkey2str(keys) - - __item_font_optkeys(nil).each{|key| - fkey = key.to_s - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "kanji#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "latin#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "ascii#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - } - - __item_methodcall_optkeys(nil).each{|key| - key = key.to_s - methodkeys[key] = keys.delete(key) if keys.key?(key) - } - - __item_ruby2val_optkeys(nil).each{|key, method| - key = key.to_s - keys[key] = method.call(keys[key]) if keys.has_key?(key) - } - - args = itemconfig_hash_kv(nil, keys) - else - args = [] - end - - [args, fontkeys] - end - private_class_method :_parse_create_args - - def self.create(chart, keys={}) - unless self::MarkerTypeName - fail RuntimeError, "#{self} is an abstract class" - end - args, fontkeys = _parse_create_args(keys) - idnum = tk_call_without_enc(chart.path, 'marker', 'create', - self::MarkerTypeName, *args) - chart.marker_configure(idnum, fontkeys) unless fontkeys.empty? - idnum.to_i # 'item id' is an integer number - end - - def self.create_type(chart, type, keys={}) - args, fontkeys = _parse_create_args(keys) - idnum = tk_call_without_enc(chart.path, 'marker', 'create', - type, *args) - chart.marker_configure(idnum, fontkeys) unless fontkeys.empty? - id = idnum.to_i # 'item id' is an integer number - obj = self.allocate - obj.instance_eval{ - @parent = @chart = chart - @cpath = chart.path - @id = id - unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] = {} - end - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self - } - obj - end - - def initialize(parent, *args) - @parent = @chart = parent - @cpath = parent.path - - @path = @id = create_self(*args) # an integer number as 'item id' - unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] = {} - end - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self - end - def create_self(*args) - self.class.create(@chart, *args) # return an integer as 'item id' - end - private :create_self - - def id - @id - end - - def to_eval - @id - end - - def cget(option) - @chart.marker_cget(@id, option) - end - def configure(key, value=None) - @chart.marker_configure(@id, key, value) - self - end - def configinfo(key=nil) - @chart.marker_configinfo(@id, key) - end - def current_configinfo(key=nil) - @chart.current_marker_configinfo(@id, key) - end - - def after(target=None) - @chart.marker_after(@id, target) - end - - def before(target=None) - @chart.marker_before(@id, target) - end - - def delete - @chart.marker_delete(@id) - end - - def exist? - @chart.marker_exist(@id) - end - - def type - @chart.marker_type(@id) - end - end - - class TextMarker < Marker - MarkerTypeName = 'text'.freeze - MarkerTypeToClass[MarkerTypeName] = self - end - class LineMarker < Marker - MarkerTypeName = 'line'.freeze - MarkerTypeToClass[MarkerTypeName] = self - end - class BitmapMarker < Marker - MarkerTypeName = 'bitmap'.freeze - MarkerTypeToClass[MarkerTypeName] = self - end - class ImageMarker < Marker - MarkerTypeName = 'image'.freeze - MarkerTypeToClass[MarkerTypeName] = self - end - class PolygonMarker < Marker - MarkerTypeName = 'polygon'.freeze - MarkerTypeToClass[MarkerTypeName] = self - end - class WindowMarker < Marker - MarkerTypeName = 'window'.freeze - MarkerTypeToClass[MarkerTypeName] = self - end - - ################# - - def __destroy_hook__ - Axis::OBJ_TBL.delete(@path) - Crosshairs::OBJ_TBL.delete(@path) - Element::OBJ_TBL.delete(@path) - GridLine::OBJ_TBL.delete(@path) - Legend::OBJ_TBL.delete(@path) - Pen::OBJ_TBL.delete(@path) - Postscript::OBJ_TBL.delete(@path) - Marker::OBJ_TBL.delete(@path) - super() - end - - ################# - - def tagid(tag) - if tag.kind_of?(Axis) || - tag.kind_of?(Crosshairs) || - tag.kind_of?(Element) || - tag.kind_of?(GridLine) || - tag.kind_of?(Legend) || - tag.kind_of?(Pen) || - tag.kind_of?(Postscript) || - tag.kind_of?(Marker) - tag.id - else - tag # maybe an Array of configure paramters - end - end - - def _component_bind(target, tag, context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind([path, target, 'bind', tagid(tag)], context, cmd, *args) - self - end - def _component_bind_append(target, tag, context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind_append([path, target, 'bind', tagid(tag)], context, cmd, *args) - self - end - def _component_bind_remove(target, tag, context) - _bind_remove([path, target, 'bind', tagid(tag)], context) - self - end - def _component_bindinfo(target, tag, context=nil) - _bindinfo([path, target, 'bind', tagid(tag)], context) - end - private :_component_bind, :_component_bind_append - private :_component_bind_remove, :_component_bindinfo - - def axis_bind(tag, context, *args) - _component_bind('axis', tag, context, *args) - end - def axis_bind_append(tag, context, *args) - _component_bind_append('axis', tag, context, *args) - end - def axis_bind_remove(tag, context) - _component_bind_remove('axis', tag, context) - end - def axis_bindinfo(tag, context=nil) - _component_bindinfo('axis', tag, context) - end - - def element_bind(tag, context, *args) - _component_bind('element', tag, context, *args) - end - def element_bind_append(tag, context, *args) - _component_bind_append('element', tag, context, *args) - end - def element_bind_remove(tag, context) - _component_bind_remove('element', tag, context) - end - def element_bindinfo(tag, context=nil) - _component_bindinfo('element', tag, context) - end - - def bar_bind(tag, context, *args) - _component_bind('bar', tag, context, *args) - end - def bar_bind_append(tag, context, *args) - _component_bind_append('bar', tag, context, *args) - end - def bar_bind_remove(tag, context) - _component_bind_remove('bar', tag, context) - end - def bar_bindinfo(tag, context=nil) - _component_bindinfo('bar', tag, context) - end - - def line_bind(tag, context, *args) - _component_bind('line', tag, context, *args) - end - def line_bind_append(tag, context, *args) - _component_bind_append('line', tag, context, *args) - end - def line_bind_remove(tag, context) - _component_bind_remove('line', tag, context) - end - def line_bindinfo(tag, context=nil) - _component_bindinfo('line', tag, context) - end - - def legend_bind(tag, context, *args) - _component_bind('legend', tag, context, *args) - end - def legend_bind_append(tag, context, *args) - _component_bind_append('legend', tag, context, *args) - end - def legend_bind_remove(tag, context) - _component_bind_remove('legend', tag, context) - end - def legend_bindinfo(tag, context=nil) - _component_bindinfo('legend', tag, context) - end - - def marker_bind(tag, context, *args) - _component_bind('marker', tag, context, *args) - end - def marker_bind_append(tag, context, *args) - _component_bind_append('marker', tag, context, *args) - end - def marker_bind_remove(tag, context) - _component_bind_remove('marker', tag, context) - end - def marker_bindinfo(tag, context=nil) - _component_bindinfo('marker', tag, context) - end - - ################### - - def axis_create(id=nil, keys={}) - # tk_send('axis', 'create', tagid(id), keys) - Tk::BLT::PlotComponent::Axis.new(self, tagid(id), keys) - end - def axis_delete(*ids) - tk_send('axis', 'delete', *(ids.collect{|id| tagid(id)})) - self - end - def axis_invtransform(id, val) - list(tk_send('axis', 'invtransform', tagid(id), val)) - end - def axis_limits(id) - list(tk_send('axis', 'limits', tagid(id))) - end - def axis_names(*pats) - simplelist(tk_send('axis', 'names', - *(pats.collect{|pat| tagid(pat)}))).collect{|axis| - Tk::BLT::PlotComponent::Axis.id2obj(self, axis) - } - end - def axis_transform(id, val) - list(tk_send('axis', 'transform', tagid(id), val)) - end - def axis_view(id) - tk_send('axis', 'view', tagid(id)) - self - end - def axis_use(id, target=nil) - if target - Tk::BLT::PlotComponent::Axis.id2obj(self, - tk_send('axis', 'use', - tagid(id), tagid(target))) - else - Tk::BLT::PlotComponent::Axis.id2obj(self, - tk_send('axis', 'use', tagid(id))) - end - end - - ################### - - def crosshairs_off - tk_send_without_enc('crosshairs', 'off') - self - end - def crosshairs_on - tk_send_without_enc('crosshairs', 'on') - self - end - def crosshairs_toggle - tk_send_without_enc('crosshairs', 'toggle') - self - end - - ################### - - def element_create(id=nil, keys={}) - # tk_send('element', 'create', tagid(id), keys) - Tk::BLT::PlotComponent::Element.new(self, tagid(id), keys) - end - def element_activate(*args) - if args.empty? - list(tk_send('element', 'activate')).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - else - # id, *indices - id = args.shift - tk_send('element', 'activate', tagid(id), *args) - end - end - def element_closest(x, y, var, *args) - if args[-1].kind_of?(Hash) - keys = args.pop - bool(tk_send('element', 'closest', x, y, var, - *(hash_kv(keys).concat(args.collect{|id| tagid(id)})))) - else - bool(tk_send('element', 'closest', x, y, var, - *(args.collect{|id| tagid(id)}))) - end - end - def element_deactivate(*ids) - tk_send('element', 'deactivate', *(ids.collect{|id| tagid(id)})) - self - end - def element_delete(*ids) - tk_send('element', 'delete', *(ids.collect{|id| tagid(id)})) - self - end - def element_exist?(id) - bool(tk_send('element', 'exists', tagid(id))) - end - def element_names(*pats) - simplelist(tk_send('element', 'names', - *(pats.collect{|pat| tagid(pat)}))).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - end - def element_show(*names) - if names.empty? - simplelist(tk_send('element', 'show')) - else - tk_send('element', 'show', *(names.collect{|n| tagid(n)})) - self - end - end - def element_type(id) - tk_send('element', 'type', tagid(id)) - end - - ################### - - def bar_create(id=nil, keys={}) - # tk_send('bar', 'create', tagid(id), keys) - Tk::BLT::PlotComponent::Bar.new(self, tagid(id), keys) - end - alias bar bar_create - def bar_activate(*args) - if args.empty? - list(tk_send('bar', 'activate')).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - else - # id, *indices - id = args.shift - tk_send('bar', 'activate', tagid(id), *args) - end - end - def bar_closest(x, y, var, *args) - if args[-1].kind_of?(Hash) - keys = args.pop - bool(tk_send('bar', 'closest', x, y, var, - *(hash_kv(keys).concat(args.collect{|id| tagid(id)})))) - else - bool(tk_send('bar', 'closest', x, y, var, - *(args.collect{|id| tagid(id)}))) - end - end - def bar_deactivate(*ids) - tk_send('bar', 'deactivate', *(ids.collect{|id| tagid(id)})) - self - end - def bar_delete(*ids) - tk_send('bar', 'delete', *(ids.collect{|id| tagid(id)})) - self - end - def bar_exist?(id) - bool(tk_send('bar', 'exists', tagid(id))) - end - def bar_names(*pats) - simplelist(tk_send('bar', 'names', - *(pats.collect{|pat| tagid(pat)}))).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - end - def bar_show(*names) - if names.empty? - simplelist(tk_send('bar', 'show')) - else - tk_send('bar', 'show', *(names.collect{|n| tagid(n)})) - self - end - end - def bar_type(id) - tk_send('bar', 'type', tagid(id)) - end - - ################### - - def line_create(id=nil, keys={}) - # tk_send('line', 'create', tagid(id), keys) - Tk::BLT::PlotComponent::Line.new(self, tagid(id), keys) - end - alias bar line_create - def line_activate(*args) - if args.empty? - list(tk_send('line', 'activate')).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - else - # id, *indices - id = args.shift - tk_send('line', 'activate', tagid(id), *args) - end - end - def line_closest(x, y, var, *args) - if args[-1].kind_of?(Hash) - keys = args.pop - bool(tk_send('line', 'closest', x, y, var, - *(hash_kv(keys).concat(args.collect{|id| tagid(id)})))) - else - bool(tk_send('line', 'closest', x, y, var, - *(args.collect{|id| tagid(id)}))) - end - end - def line_deactivate(*ids) - tk_send('line', 'deactivate', *(ids.collect{|id| tagid(id)})) - self - end - def line_delete(*ids) - tk_send('line', 'delete', *(ids.collect{|id| tagid(id)})) - self - end - def line_exist?(id) - bool(tk_send('line', 'exists', tagid(id))) - end - def line_names(*pats) - simplelist(tk_send('line', 'names', - *(pats.collect{|pat| tagid(pat)}))).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - end - def line_show(*names) - if names.empty? - simplelist(tk_send('line', 'show')) - else - tk_send('line', 'show', *(names.collect{|n| tagid(n)})) - self - end - end - def line_type(id) - tk_send('line', 'type', tagid(id)) - end - - ################### - - def gridline_off - tk_send_without_enc('grid', 'off') - self - end - def gridline_on - tk_send_without_enc('grid', 'on') - self - end - def gridline_toggle - tk_send_without_enc('grid', 'toggle') - self - end - - ################### - - def legend_window_create(parent=nil, keys=nil) - if parent.kind_of?(Hash) - keys = _symbolkey2str(parent) - parent = keys.delete('parent') - widgetname = keys.delete('widgetname') - keys.delete('without_creating') - elsif keys - keys = _symbolkey2str(keys) - widgetname = keys.delete('widgetname') - keys.delete('without_creating') - end - - legend = self.class.new(parent, :without_creating=>true, - :widgetname=>widgetname) - class << legend - def __destroy_hook__ - TkCore::INTERP.tk_windows.delete(@path) - end - end - - if keys - self.legend_configure(keys.update('position'=>legend)) - else - self.legend_configure('position'=>legend) - end - legend - end - - def legend_activate(*pats) - list(tk_send('legend', 'activate', - *(pats.collect{|pat| tagid(pat)}))).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - end - def legend_deactivate(*pats) - list(tk_send('legend', 'deactivate', - *(pats.collect{|pat| tagid(pat)}))).collect{|elem| - Tk::BLT::PlotComponent::Element.id2obj(self, elem) - } - end - def legend_get(pos, y=nil) - if y - Tk::BLT::PlotComponent::Element.id2obj(self, - tk_send('legend', 'get', - _at(pos, y))) - else - Tk::BLT::PlotComponent::Element.id2obj(self, - tk_send('legend', 'get', pos)) - end - end - - ################### - - def pen_create(id=nil, keys={}) - # tk_send('pen', 'create', tagid(id), keys) - Tk::BLT::PlotComponent::Pen.new(self, tagid(id), keys) - end - def pen_delete(*ids) - tk_send('pen', 'delete', *(ids.collect{|id| tagid(id)})) - self - end - def pen_names(*pats) - simplelist(tk_send('pen', 'names', - *(pats.collect{|pat| tagid(pat)}))).collect{|pen| - Tk::BLT::PlotComponent::Pen.id2obj(self, pen) - } - end - - ################### - - def postscript_output(file=nil, keys={}) - if file.kind_of?(Hash) - keys = file - file = nil - end - - if file - tk_send('postscript', 'output', file, keys) - self - else - tk_send('postscript', 'output', keys) - end - end - - ################### - - def marker_create(type, keys={}) - case type - when :text, 'text' - Tk::BLT::PlotComponent::TextMarker.new(self, keys) - when :line, 'line' - Tk::BLT::PlotComponent::LineMarker.new(self, keys) - when :bitmap, 'bitmap' - Tk::BLT::PlotComponent::BitmapMarker.new(self, keys) - when :image, 'image' - Tk::BLT::PlotComponent::ImageMarker.new(self, keys) - when :polygon, 'polygon' - Tk::BLT::PlotComponent::PolygonMarker.new(self, keys) - when :window, 'window' - Tk::BLT::PlotComponent::WindowMarker.new(self, keys) - else - if type.kind_of?(Tk::BLT::PlotComponent::Marker) - type.new(self, keys) - else - Tk::BLT::PlotComponent::Marker.create_type(self, type, keys) - end - end - end - def marker_after(id, target=nil) - if target - tk_send_without_enc('marker', 'after', tagid(id), tagid(target)) - else - tk_send_without_enc('marker', 'after', tagid(id)) - end - self - end - def marker_before(id, target=None) - if target - tk_send_without_enc('marker', 'before', tagid(id), tagid(target)) - else - tk_send_without_enc('marker', 'before', tagid(id)) - end - self - end - def marker_delete(*ids) - tk_send('marker', 'delete', *(ids.collect{|id| tagid(id)})) - self - end - def marker_exist?(id) - bool(tk_send('marker', 'exists', tagid(id))) - end - def marker_names(*pats) - simplelist(tk_send('marker', 'names', - *(pats.collect{|pat| tagid(pat)}))).collect{|id| - Tk::BLT::PlotComponent::Marker.id2obj(self, id) - } - end - def marker_type(id) - tk_send('marker', 'type', tagid(id)) - end - - ################### - - def xaxis_cget(option) - itemcget('xaxis', option) - end - def xaxis_configure(slot, value=None) - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - if cmd = slot.delete('command') - slot['command'] = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - elsif slot == :command || slot == 'command' - cmd = value - value = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - itemconfigure('xaxis', slot, value) - end - def xaxis_configinfo(slot=nil) - itemconfiginfo('xaxis', slot) - end - def current_xaxis_configinfo(slot=nil) - current_itemconfiginfo('xaxis', slot) - end - def xaxis_bind(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind([path, 'xaxis', 'bind'], context, cmd, *args) - self - end - def xaxis_bind_append(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind_append([path, 'xaxis', 'bind'], context, cmd, *args) - self - end - def xaxis_bind_remove(context) - _bind_remove([path, 'xaxis', 'bind'], context) - self - end - def xaxis_bindinfo(context=nil) - _bindinfo([path, 'xaxis', 'bind'], context) - end - def xaxis_invtransform(val) - list(tk_send('xaxis', 'invtransform', val)) - end - def xaxis_limits - list(tk_send('xaxis', 'limits')) - end - def xaxis_transform(val) - list(tk_send('xaxis', 'transform', val)) - end - def xaxis_use(target=nil) - if target - Tk::BLT::PlotComponent::Axis.id2obj(self, - tk_send('xaxis', 'use', - tagid(target))) - else - Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('xaxis', 'use')) - end - end - - def x2axis_cget(option) - itemcget('x2axis', option) - end - def x2axis_configure(slot, value=None) - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - if cmd = slot.delete('command') - slot['command'] = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - elsif slot == :command || slot == 'command' - cmd = value - value = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - itemconfigure('x2axis', slot, value) - end - def x2axis_configinfo(slot=nil) - itemconfiginfo('x2axis', slot) - end - def current_x2axis_configinfo(slot=nil) - current_itemconfiginfo('x2axis', slot) - end - def x2axis_bind(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind([path, 'x2axis', 'bind'], context, cmd, *args) - self - end - def x2axis_bind_append(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind_append([path, 'x2axis', 'bind'], context, cmd, *args) - self - end - def x2axis_bind_remove(context) - _bind_remove([path, 'x2axis', 'bind'], context) - self - end - def x2axis_bindinfo(context=nil) - _bindinfo([path, 'x2axis', 'bind'], context) - end - def x2axis_invtransform(val) - list(tk_send('x2axis', 'invtransform', val)) - end - def x2axis_limits - list(tk_send('x2axis', 'limits')) - end - def x2axis_transform(val) - list(tk_send('x2axis', 'transform', val)) - end - def x2axis_use(target=nil) - if target - Tk::BLT::PlotComponent::Axis.id2obj(self, - tk_send('x2axis', 'use', - tagid(target))) - else - Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('x2axis', 'use')) - end - end - - def yaxis_cget(option) - itemcget('yaxis', option) - end - def yaxis_configure(slot, value=None) - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - if cmd = slot.delete('command') - slot['command'] = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - elsif slot == :command || slot == 'command' - cmd = value - value = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - itemconfigure('yaxis', slot, value) - end - def yaxis_configinfo(slot=nil) - itemconfiginfo('yaxis', slot) - end - def current_yaxis_configinfo(slot=nil) - current_itemconfiginfo('yaxis', slot) - end - def yaxis_bind(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind([path, 'yaxis', 'bind'], context, cmd, *args) - self - end - def yaxis_bind_append(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind_append([path, 'yaxis', 'bind'], context, cmd, *args) - self - end - def yaxis_bind_remove(context) - _bind_remove([path, 'yaxis', 'bind'], context) - self - end - def yaxis_bindinfo(context=nil) - _bindinfo([path, 'yaxis', 'bind'], context) - end - def yaxis_invtransform(val) - list(tk_send('yaxis', 'invtransform', val)) - end - def yaxis_limits - list(tk_send('yaxis', 'limits')) - end - def yaxis_transform(val) - list(tk_send('yaxis', 'transform', val)) - end - def yaxis_use(target=nil) - if target - Tk::BLT::PlotComponent::Axis.id2obj(self, - tk_send('yaxis', 'use', - tagid(target))) - else - Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('yaxis', 'use')) - end - end - - def y2axis_cget(option) - itemcget('y2axis', option) - end - def y2axis_configure(slot, value=None) - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - if cmd = slot.delete('command') - slot['command'] = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - elsif slot == :command || slot == 'command' - cmd = value - value = proc{|w, tick| - cmd.call(TkComm.window(w), TkComm.num_or_str(tick)) - } - end - itemconfigure('y2axis', slot, value) - end - def y2axis_configinfo(slot=nil) - axis_configinfo('y2axis', slot) - end - def current_y2axis_configinfo(slot=nil) - current_itemconfiginfo('y2axis', slot) - end - def y2axis_bind(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind([path, 'y2axis', 'bind'], context, cmd, *args) - self - end - def y2axis_bind_append(context, *args) - if TkComm._callback_entry?(args[0]) || !block_given? - cmd = args.shift - else - cmd = Proc.new - end - _bind_append([path, 'y2axis', 'bind'], context, cmd, *args) - self - end - def y2axis_bind_remove(context) - _bind_remove([path, 'y2axis', 'bind'], context) - self - end - def y2axis_bindinfo(context=nil) - _bindinfo([path, 'y2axis', 'bind'], context) - end - def y2axis_invtransform(val) - list(tk_send('y2axis', 'invtransform', val)) - end - def y2axis_limits - list(tk_send('y2axis', 'limits')) - end - def y2axis_transform(val) - list(tk_send('y2axis', 'transform', val)) - end - def y2axis_use(target=nil) - if target - Tk::BLT::PlotComponent::Axis.id2obj(self, - tk_send('y2axis', 'use', - tagid(target))) - else - Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('y2axis', 'use')) - end - end - end -end |