Class: ArcadiaExtPlus

Inherits:
ArcadiaExt show all
Defined in:
lib/a-commons.rb

Direct Known Subclasses

AgMultiEditor, DirProjects, Term

Instance Attribute Summary collapse

Attributes inherited from ArcadiaExt

#arcadia, #name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ArcadiaExt

#add_to_conf_property, #array_conf, #conf, #conf_array, #conf_default, #del_from_conf_property, #exec, #float_frame, #frame_def_visible?, #frame_domain, #frame_domain_default, #frame_title, #frame_visible?, #hide_frame, #maximize, #maximized?, #resize, #restore_default_conf

Constructor Details

#initialize(_arcadia, _name = nil) ⇒ ArcadiaExtPlus

Returns a new instance of ArcadiaExtPlus.



397
398
399
400
401
402
403
404
405
406
407
# File 'lib/a-commons.rb', line 397

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

Instance Attribute Details

#indexObject (readonly)

Returns the value of attribute index.



395
396
397
# File 'lib/a-commons.rb', line 395

def index
  @index
end

Class Method Details

.instances(_class) ⇒ Object



435
436
437
# File 'lib/a-commons.rb', line 435

def ArcadiaExtPlus.instances(_class)
  @@instances[_class]
end

Instance Method Details

#activate(_obj = self, _raise_event = true) ⇒ Object



451
452
453
454
455
456
457
458
459
# File 'lib/a-commons.rb', line 451

def activate(_obj=self, _raise_event=true)
  return if @@active_instance[self.class] == _obj
  @@active_instance[self.class] = _obj
  @@active_instance[self.class].frame.root.shift_on if @@active_instance[self.class].frame != nil
  instances.each{|i|
    i.frame.root.shift_off if i != @@active_instance[self.class] && i.frame != nil && i.frame.root != @@active_instance[self.class].frame.root
  }
  ActivateInstanceEvent.new(Arcadia.instance, 'name'=>self.name).go! if _raise_event
end

#activate_mainObject



461
462
463
# File 'lib/a-commons.rb', line 461

def activate_main
  activate(@@main_instance[self.class])
end

#active?Boolean

Returns:

  • (Boolean)


465
466
467
# File 'lib/a-commons.rb', line 465

def active?
  @@active_instance[self.class] == self
end

#active_instanceObject



439
440
441
# File 'lib/a-commons.rb', line 439

def active_instance
  @@active_instance[self.class]
end

#clean_instanceObject

def on_before_layout_raising_frame(_event)

  if _event.extension_name == @name
    activate
  end
end


537
538
539
540
541
542
543
544
545
546
# File 'lib/a-commons.rb', line 537

def clean_instance
  activate_main
  @@instances[self.class].delete(self) if @@instances[self.class]
  Arcadia.del_conf_group(Arcadia['conf'],@name)
  Arcadia.del_conf_group(Arcadia['pers'],@name)
  #del_from_conf_property("#{main_instance.name}.clones", @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])
end

#clone(_name, _dom = nil) ⇒ Object



515
516
517
518
519
520
521
522
523
# File 'lib/a-commons.rb', line 515

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

#deduplicateObject



548
549
550
551
552
553
554
555
556
557
558
# File 'lib/a-commons.rb', line 548

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) ⇒ Object



497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
# File 'lib/a-commons.rb', line 497

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) ⇒ Boolean

Returns:

  • (Boolean)


488
489
490
491
492
493
494
495
# File 'lib/a-commons.rb', line 488

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) ⇒ Object



409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
# File 'lib/a-commons.rb', line 409

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_indexObject



473
474
475
# File 'lib/a-commons.rb', line 473

def instance_index
  instances.index(self)
end

#instancesObject



469
470
471
# File 'lib/a-commons.rb', line 469

def instances
  @@instances[self.class]
end

#main_instanceObject



443
444
445
# File 'lib/a-commons.rb', line 443

def main_instance
  @@main_instance[self.class]
end

#main_instance?Boolean

Returns:

  • (Boolean)


447
448
449
# File 'lib/a-commons.rb', line 447

def main_instance?
  @@main_instance[self.class] == self
end

#new_nameObject



477
478
479
480
481
482
483
484
485
486
# File 'lib/a-commons.rb', line 477

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) ⇒ Object



525
526
527
528
529
# File 'lib/a-commons.rb', line 525

def on_destroy_instance(_event)
  Arcadia.detach_listener(self)
  @arcadia.unregister(self)
  @frames.each{|f| f.free }
end