module Plugin::GUI::HierarchyParent

ウィンドウパーツ階層構造の親 これをincludeするクラスは、クラスメソッドとしてactiveを実装している必要がある

Attributes

active_child[R]

Public Class Methods

included(klass) click to toggle source
# File core/plugin/gui/hierarchy_parent.rb, line 7
def included(klass)
  klass.extend(Extended)
end

Public Instance Methods

<<(child, index=children.size)
Alias for: add_child
active_chain() click to toggle source

このインスタンス以下の、アクティブな祖先のリストを返す。

Return

アクティブな子、孫、…のリスト 又は空の配列

# File core/plugin/gui/hierarchy_parent.rb, line 75
def active_chain
  if @active_child
    result = [@active_child]
    ancestors = @active_child.respond_to?(:active_chain) && @active_child.active_chain
    ancestors ? result + ancestors : result
  else
    [] end end
active_class_of(klass) click to toggle source

#active_chain が返すインスタンスのうち、最初に klass とis_a関係にあるものを返す。

Args

klass

クラス

Return

一致する祖先か見つからなければnil

# File core/plugin/gui/hierarchy_parent.rb, line 88
def active_class_of(klass)
  active_chain.find{ |child| child.is_a? klass } end
add_child(child, index=children.size) click to toggle source

子を追加する

Args

child

子のインスタンス

index

挿入するインデックス

Return

self

# File core/plugin/gui/hierarchy_parent.rb, line 20
def add_child(child, index=children.size)
  type_strict child => Plugin::GUI::HierarchyChild
  return self if child.parent == self
  children.insert(index, child)
  child.set_parent(self)
  @active_child ||= child
  self end
Also aliased as: <<
children() click to toggle source

子の配列を返す

Return

子の配列

# File core/plugin/gui/hierarchy_parent.rb, line 57
def children
  @children ||= [] end
remove(child) click to toggle source

子を削除する

Args

child

削除する子

Return

self

# File core/plugin/gui/hierarchy_parent.rb, line 48
def remove(child)
  children.delete(child)
  if @active_child == child
    @active_child = nil end
  self end
reorder_child(child, new_index) click to toggle source

child のn順番を変更する。 new_index 以降はひとつづつシフトする

Args

child

new_index

新しく入れるインデックス

# File core/plugin/gui/hierarchy_parent.rb, line 33
def reorder_child(child, new_index)
  type_strict child => Plugin::GUI::HierarchyChild
  if children.include?(child)
    @children.delete(child)
    @children.insert(new_index, child)
    Plugin.call(:gui_child_reordered, self, child, new_index)
  else
    error "the widget #{child.inspect} is not child of #{self.inspect}" end
  self end
set_active_child(child, by_toolkit=false) click to toggle source

child をアクティブに設定する

Args

child

アクティブにする子

by_toolkit

UIツールキットの入力でアクティブになった場合真

Return

self

# File core/plugin/gui/hierarchy_parent.rb, line 66
def set_active_child(child, by_toolkit=false)
  type_strict child => tcor(Plugin::GUI::HierarchyChild, NilClass)
  @active_child = child
  Plugin.call(:gui_child_activated, self, child, by_toolkit) if child
  self end