class ArcadiaExtPlus

Attributes

index[R]

Public Class Methods

instances(_class) click to toggle source
# File lib/a-commons.rb, line 468
def ArcadiaExtPlus.instances(_class)
  @@instances[_class]
end
new(_arcadia, _name=nil) click to toggle source
Calls superclass method ArcadiaExt::new
# File lib/a-commons.rb, line 430
def initialize(_arcadia, _name=nil)
  @@instances = {} if !defined?(@@instances)
  @@main_instance = {} if !defined?(@@main_instance)
  @@active_instance = {} if !defined?(@@active_instance)
  @@instances[self.class] = [] if @@instances[self.class] == nil
  @@instances[self.class] << self
  @@main_instance[self.class] = self if @@main_instance[self.class] == nil
  Arcadia.attach_listener(self, ActivateInstanceEvent)
  super(_arcadia, _name)
  @@active_instance[self.class] = self if @@active_instance[self.class] == nil
end

Public Instance Methods

activate(_obj=self, _raise_event=true) click to toggle source
# File lib/a-commons.rb, line 484
  def activate(_obj=self, _raise_event=true)
    return if @@active_instance[_obj.class] == _obj
    @@active_instance[_obj.class] = _obj #if @arcadia.initialized?
#    if _obj.frame_visible?
#      @@active_instance[_obj.class] = nil
#    else
#      @@active_instance[_obj.class] = _obj
#    end
    _obj.frame.root.shift_on if _obj.frame_visible?
    instances.each{|i|
      i.frame.root.shift_off if i != _obj  && i.frame != nil && i.frame.root != _obj.frame.root && i.frame_raised?
    }
    ActivateInstanceEvent.new(Arcadia.instance, 'name'=>_obj.name).go! if _raise_event
  end
activate_main() click to toggle source
# File lib/a-commons.rb, line 499
def activate_main
  activate(@@main_instance[self.class])
end
active?() click to toggle source
# File lib/a-commons.rb, line 503
def active?
  @@active_instance[self.class] == self
end
active_instance() click to toggle source
# File lib/a-commons.rb, line 472
def active_instance
  @@active_instance[self.class]
end
clean_instance() click to toggle source

def on_before_layout_raising_frame(_event)

if _event.extension_name == @name
  activate
end

end

# File lib/a-commons.rb, line 577
def clean_instance
  if main_instance?
    @frames.each_index{|i| 
      LayoutChangedDomainEvent.new(self, 'old_domain'=>self.frame_domain(i), 'new_domain'=>nil).go!
      destroy_frame(i)
    }
    @frames.clear
    instances.each{|i| 
      if i != self
        activate(i)
        break
      end
    }
  else
    @@instances[self.class].delete(self) if @@instances[self.class]
    Arcadia.del_conf_group(Arcadia['conf'],@name)
    Arcadia.del_conf_group(Arcadia['pers'],@name)
    main_instance.del_from_conf_property("clones", @name)
    Arcadia.process_event(ClearCacheInstanceEvent.new(Arcadia.instance), [self])
    Arcadia.process_event(DestroyInstanceEvent.new(Arcadia.instance), [self])
    activate_main #if main_instance.frame_visible?
  end
end
clone(_name, _dom=nil) click to toggle source
# File lib/a-commons.rb, line 553
def clone(_name, _dom=nil)
  #create
  instance = self.class.new(Arcadia.instance, _name)
  #build
  Arcadia.process_event(BuildEvent.new(Arcadia.instance), [instance])
  Arcadia.attach_listener(instance, ClearCacheInstanceEvent)
  Arcadia.attach_listener(instance, DestroyInstanceEvent)
  instance
end
deduplicate() click to toggle source
# File lib/a-commons.rb, line 601
def deduplicate
  can_exit=true
  if @confirm_on_exit && (Arcadia.dialog(self, 'type'=>'yes_no',
    'msg'=>Arcadia.text('main.d.confirm_delete_ext_instance.msg', [@name]),
    'title' => Arcadia.text('main.d.confirm_delete_ext_instance.title', [@name]),
    'level' => 'question')=='yes')
    exit_query_event = Arcadia.process_event(ExitQueryEvent.new(self, 'can_exit'=>true))
    can_exit = exit_query_event.can_exit
  end
  clean_instance if can_exit
end
duplicate(_name=nil, _dom=nil, _confirm_on_exit=true) click to toggle source
# File lib/a-commons.rb, line 535
def duplicate(_name=nil, _dom=nil, _confirm_on_exit=true)
  _name = new_name if _name.nil?
  @confirm_on_exit = _confirm_on_exit
  #create conf properties
  Arcadia.conf_group_copy(@@main_instance[self.class].name, _name)
  if !_dom.nil?
    doms = Application.conf_array("#{_name}.frames")
    doms[0] = _dom
    Application.array_conf("#{_name}.frames", doms)
  end
  instance = clone(_name, _dom)
  #initialize
  Arcadia.process_event(InitializeEvent.new(Arcadia.instance), [instance])
  #add_to_conf_property("#{main_instance.name}.clones", _name)
  main_instance.add_to_conf_property("clones", _name)
  instance
end
exist_name?(_name) click to toggle source
# File lib/a-commons.rb, line 526
def exist_name?(_name)
  exist = false
  instances.each{|i|
    exist = exist || i.name == _name
    break if exist
  }
  exist
end
frame(_n=0,create_if_not_exist=true) click to toggle source
Calls superclass method ArcadiaExt#frame
# File lib/a-commons.rb, line 442
  def frame(_n=0,create_if_not_exist=true)
    fr = super(_n, create_if_not_exist)
    if fr != nil && !@frame_initialize && fr.domain != nil && fr.domain != ArcadiaLayout::HIDDEN_DOMAIN
      @frame_initialize = true
      fr.hinner_frame.bind_append("Enter", proc{activate})
      if main_instance?
#        fr.root.add_state_button(
#        self.name,
#        'Duplicate',
#        proc{duplicate},
#        PLUS_EX_GIF,
#        'left')
#        activate(self, false)
      else
        fr.root.add_state_button(
        self.name,
        'Destroy',
        proc{deduplicate},
        MINUS_EX_GIF,
        'left')
        activate(self, false)
      end
    end
    fr 
  end
instance_index() click to toggle source
# File lib/a-commons.rb, line 511
def instance_index
  instances.index(self)
end
instances() click to toggle source
# File lib/a-commons.rb, line 507
def instances
  @@instances[self.class]
end
main_instance() click to toggle source
# File lib/a-commons.rb, line 476
def main_instance
  @@main_instance[self.class]
end
main_instance?() click to toggle source
# File lib/a-commons.rb, line 480
def main_instance?
  @@main_instance[self.class] == self
end
new_name() click to toggle source
# File lib/a-commons.rb, line 515
def new_name
  #"#{main_instance.name}#{instances.length}"
  name = main_instance.name
  i=0
  while exist_name?(name) 
    i+=1
    name = "#{main_instance.name}#{i}"
  end
  name
end
on_destroy_instance(_event) click to toggle source
# File lib/a-commons.rb, line 563
  def on_destroy_instance(_event)
    Arcadia.detach_listener(self)
    @arcadia.unregister(self)
#    @frames.each{|f| f.free }
    @frames.each_index{|i| destroy_frame(i)}
    @frames.clear
  end