Class: ArcadiaExtPlus

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

Direct Known Subclasses

AgMultiEditor, DirProjects

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, #frame_def_visible?, #frame_domain, #frame_domain_default, #frame_visible?, #maximize, #maximized?, #resize, #restore_default_conf

Constructor Details

#initialize(_arcadia, _name = nil) ⇒ ArcadiaExtPlus

Returns a new instance of ArcadiaExtPlus.



364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
# File 'lib/a-commons.rb', line 364

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)
  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.



362
363
364
# File 'lib/a-commons.rb', line 362

def index
  @index
end

Class Method Details

.instances(_class) ⇒ Object



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

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

Instance Method Details

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



407
408
409
410
411
412
413
414
# File 'lib/a-commons.rb', line 407

def activate(_obj=self, _raise_event=true)
  @@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



416
417
418
# File 'lib/a-commons.rb', line 416

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

#active?Boolean

Returns:

  • (Boolean)


420
421
422
# File 'lib/a-commons.rb', line 420

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

#active_instanceObject



399
400
401
# File 'lib/a-commons.rb', line 399

def active_instance
  @@active_instance[self.class]
end

#clone(_name) ⇒ Object



461
462
463
464
465
466
467
468
469
# File 'lib/a-commons.rb', line 461

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

def on_before_layout_raising_frame(_event)

  if _event.extension_name == @name
    activate
  end
end


483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
# File 'lib/a-commons.rb', line 483

def deduplicate
  if (Arcadia.dialog(self, 'type'=>'yes_no',
    'msg'=>"Shure delete '#{@name}'?",
    'title' => "(Arcadia) Delete #{@name}",
    'level' => 'question')=='yes')
    exit_query_event = Arcadia.process_event(ExitQueryEvent.new(self, 'can_exit'=>true))
    if exit_query_event.can_exit
      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
  end
end

#duplicate(_name = new_name) ⇒ Object



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

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)
end

#exist_name?(_name) ⇒ Boolean

Returns:

  • (Boolean)


443
444
445
446
447
448
449
450
# File 'lib/a-commons.rb', line 443

def exist_name?(_name)
  exist = false
  instances.each{|i|
    exist = exist || i.name == _name
    break if exist
  }
  exist
end

#instance_indexObject



428
429
430
# File 'lib/a-commons.rb', line 428

def instance_index
  instances.index(self)
end

#instancesObject



424
425
426
# File 'lib/a-commons.rb', line 424

def instances
  @@instances[self.class]
end

#main_instanceObject



403
404
405
# File 'lib/a-commons.rb', line 403

def main_instance
  @@main_instance[self.class]
end

#new_nameObject



432
433
434
435
436
437
438
439
440
441
# File 'lib/a-commons.rb', line 432

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



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

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