Module: WR::ModAccessor

Included in:
Controls, Menu, Rebar, Tabctrl, Tabctrl::Tab, Toolbar
Defined in:
lib/wrb/base.rb

Overview

Base classes #####

Defined Under Namespace

Modules: ModArrayAccess

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#_accessorsObject (readonly)

Returns the value of attribute _accessors.



402
403
404
# File 'lib/wrb/base.rb', line 402

def _accessors
  @_accessors
end

Instance Method Details

#_add_accessor(obj, name) ⇒ Object

dpp self, obj, name#, caller[0, 2]



416
417
418
419
420
421
422
423
424
425
426
427
428
# File 'lib/wrb/base.rb', line 416

def _add_accessor(obj, name) #dpp self, obj, name#, caller[0, 2]

  @_accessors ||= {}
  raise "Need name for accessor" unless name
  _check_name(name)
  if obj1=@_accessors[name]
    @_accessors[name] = [obj1].extend(ModArrayAccess) unless obj1.is_a? Array
    @_accessors[name] << obj
  else
    @_accessors[name] = obj
    _define_access_method(name, obj)
  end
  obj
end

#_check_name(name) ⇒ Object

Raises:

  • (NameError)


403
404
405
406
407
408
409
# File 'lib/wrb/base.rb', line 403

def _check_name(name)
  raise NameError, "Name must be Symbol (but got #{name.class})." unless name.is_a? Symbol
  str = name.to_s
  if !(str =~ /^[a-z][a-zA-Z0-9_]*$/)
    raise  NameError ,"`#{str}' is not allowed for name of accessor.", caller(2)
  end
end

#_define_access_method(name, obj) ⇒ Object



411
412
413
414
# File 'lib/wrb/base.rb', line 411

def _define_access_method(name, obj)
  instance_eval "def #{name}() @_accessors[:#{name}]; end"
  @parent.instance_eval "def _#{name}() controls.#{name}; end"
end

#_delete_accessor(name, idx = nil) ⇒ Object



430
431
432
433
434
435
436
437
438
439
440
441
442
443
# File 'lib/wrb/base.rb', line 430

def _delete_accessor(name, idx=nil)
  if (obj1=@_accessors[name]).is_a?(Array) && obj1.size>1
    raise ArgumentError, "Need index" unless idx
    if idx.is_a?(Integer) && idx <= ModParent::ItemBaseID
      obj1.delete_at(idx)
    else
      obj1.delete(idx)
    end
    @_accessors[name] = obj1[0] if obj1.size == 1
  else
    @_accessors.delete(name)
    instance_eval "undef #{name} if defined?(#{name})"
  end
end

#_delete_accessor_by_obj(obj) ⇒ Object



445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
# File 'lib/wrb/base.rb', line 445

def _delete_accessor_by_obj(obj)
  @_accessors.each{|k, v|
    if v.is_a?(Array)
      if r=v.delete(obj)
        @_accessors[k] = v[0] if v.size==1
        break
      else
        next
      end
    elsif v==obj
      @_accessors.delete_if{|k, v| v==obj}
      instance_eval "undef #{k} if defined?(#{k})"
      break
    end
  }
end