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_visible?, #hide_frame, #maximize, #maximized?, #resize, #restore_default_conf

Constructor Details

#initialize(_arcadia, _name = nil) ⇒ ArcadiaExtPlus

Returns a new instance of ArcadiaExtPlus.



391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
# File 'lib/a-commons.rb', line 391

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
#    if self.frame != nil
#      self.frame.hinner_frame.bind_append("Enter", proc{activate})
#      if @@main_instance[self.class] == self
#        frame.root.add_state_button(
#        self.name,
#        'Duplicate',
#        proc{duplicate},
#        PLUS_EX_GIF,
#        'left')
#        activate(self, false)
#      else
#        frame.root.add_state_button(
#        self.name,
#        'Destroy',
#        proc{deduplicate},
#        MINUS_EX_GIF,
#        'left')
#        activate(self, false)
#      end
#    end
end

Instance Attribute Details

#indexObject (readonly)

Returns the value of attribute index.



389
390
391
# File 'lib/a-commons.rb', line 389

def index
  @index
end

Class Method Details

.instances(_class) ⇒ Object



449
450
451
# File 'lib/a-commons.rb', line 449

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

Instance Method Details

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



465
466
467
468
469
470
471
472
473
# File 'lib/a-commons.rb', line 465

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



475
476
477
# File 'lib/a-commons.rb', line 475

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

#active?Boolean

Returns:

  • (Boolean)


479
480
481
# File 'lib/a-commons.rb', line 479

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

#active_instanceObject



453
454
455
# File 'lib/a-commons.rb', line 453

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


543
544
545
546
547
548
549
550
551
# File 'lib/a-commons.rb', line 543

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)
  Arcadia.process_event(ClearCacheInstanceEvent.new(Arcadia.instance), [self])
  Arcadia.process_event(DestroyInstanceEvent.new(Arcadia.instance), [self])
end

#clone(_name) ⇒ Object



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

def clone(_name)
  #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



553
554
555
556
557
558
559
560
561
562
563
# File 'lib/a-commons.rb', line 553

def deduplicate
  if (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))
    if exit_query_event.can_exit
      clean_instance
    end
  end
end

#duplicate(_name = new_name) ⇒ Object



511
512
513
514
515
516
517
518
519
# File 'lib/a-commons.rb', line 511

def duplicate(_name=new_name)
  #create conf properties
  Arcadia.conf_group_copy(@@main_instance[self.class].name, _name)
  instance = clone(_name)
  #initialize
  Arcadia.process_event(InitializeEvent.new(Arcadia.instance), [instance])
  add_to_conf_property("#{main_instance.name}.clones", _name)
  instance
end

#exist_name?(_name) ⇒ Boolean

Returns:

  • (Boolean)


502
503
504
505
506
507
508
509
# File 'lib/a-commons.rb', line 502

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



423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
# File 'lib/a-commons.rb', line 423

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



487
488
489
# File 'lib/a-commons.rb', line 487

def instance_index
  instances.index(self)
end

#instancesObject



483
484
485
# File 'lib/a-commons.rb', line 483

def instances
  @@instances[self.class]
end

#main_instanceObject



457
458
459
# File 'lib/a-commons.rb', line 457

def main_instance
  @@main_instance[self.class]
end

#main_instance?Boolean

Returns:

  • (Boolean)


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

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

#new_nameObject



491
492
493
494
495
496
497
498
499
500
# File 'lib/a-commons.rb', line 491

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



531
532
533
534
535
# File 'lib/a-commons.rb', line 531

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