Class: Accessibility::Console::Tree
- Inherits:
-
Object
- Object
- Accessibility::Console::Tree
- Defined in:
- lib/project/motion-accessibility-console/tree.rb
Instance Attribute Summary collapse
-
#subviews ⇒ Object
Returns the value of attribute subviews.
-
#superview ⇒ Object
Returns the value of attribute superview.
-
#view ⇒ Object
Returns the value of attribute view.
Class Method Summary collapse
- .accessible_view?(view) ⇒ Boolean
- .build(view = nil, superview = nil) ⇒ Object
- .container_equals(v1, v2, depth = 0) ⇒ Object
- .ignore_view?(view) ⇒ Boolean
Instance Method Summary collapse
- #==(other) ⇒ Object
- #[](n) ⇒ Object
- #browsable_nodes ⇒ Object
- #copy ⇒ Object
- #display_view(index = nil) ⇒ Object
- #find(request) ⇒ Object
-
#initialize(options = {}) ⇒ Tree
constructor
A new instance of Tree.
- #inspect ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Tree
Returns a new instance of Tree.
7 8 9 10 11 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 7 def initialize(={}) @view=[:view] @subviews=[:subviews]||[] @superview=[:superview] end |
Instance Attribute Details
#subviews ⇒ Object
Returns the value of attribute subviews.
5 6 7 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 5 def subviews @subviews end |
#superview ⇒ Object
Returns the value of attribute superview.
5 6 7 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 5 def superview @superview end |
#view ⇒ Object
Returns the value of attribute view.
5 6 7 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 5 def view @view end |
Class Method Details
.accessible_view?(view) ⇒ Boolean
103 104 105 106 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 103 def self.accessible_view?(view) result= view.accessibility_element?||view.accessibility_label||view.accessibility_value||view.accessibility_traits (result)?true:false end |
.build(view = nil, superview = nil) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 123 def self.build(view=nil, superview=nil) A11y::Test::Data[:quiet]=true tree=self.new view=UIApplication.sharedApplication.keyWindow if view.nil? subviews=[] if view.respond_to?(:numberOfSections) view.numberOfSections.times do |section_number| section=self.new(view: view, superview: tree) view.numberOfRowsInSection(section_number).times do |row_number| index_path=NSIndexPath.indexPathForRow(row_number, inSection: section_number) cell=view.delegate.tableView(view, cellForRowAtIndexPath: index_path) raise "Could not get the cell" unless cell cell_node=self.build(cell, section) section.subviews<<cell_node end subviews<<section end subviews=subviews.first.subviews if subviews.size==1 elsif view.accessibility_element_container? view.each_accessibility_element do |element| subview_tree=self.build(element, tree) subviews<<subview_tree end elsif view.respond_to?(:subviews) view.subviews.each do |subview| subview_tree=self.build(subview, tree) if self.ignore_view?(subview) subview_tree.subviews.each {|v| v.superview=tree} subviews=subviews+subview_tree.subviews else subviews<<subview_tree end end end tree.view=view tree.subviews=subviews tree.superview=superview A11y::Test::Data[:quiet]=false tree end |
.container_equals(v1, v2, depth = 0) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 21 def self.container_equals(v1, v2, depth=0) return false unless v1==v2 return false unless v1.accessibility_element_count==v2.accessibility_element_count if v1.accessibility_element_container? v1.accessibility_element_count.times do |element_index| return false unless self.container_equals(v1.accessibility_element_at_index(element_index), v2.accessibility_element_at_index(element_index), depth+1) end end true end |
.ignore_view?(view) ⇒ Boolean
108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 108 def self.ignore_view?(view) return true if view.subviews.empty?&&!view.accessible? if view.superview sv=view.superview while sv&&self.ignore_view?(sv) sv=sv.superview end return true if A11y::Console.touchable_type(sv) return true if view.class==UIImageView&&A11y::Ignored_ImageViews.member?(sv.class.to_s) end class_name=view.class.to_s return true if class_name=~/^_/ A11y::Ignored_Views.member?(class_name) end |
Instance Method Details
#==(other) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 32 def ==(other) return false if other.nil? return false if self.superview&&other.superview&&self.superview.view!=other.superview.view if self.view.accessibility_element_container? A11y::Console::Tree.container_equals(self.view, other.view) else return false unless self.view==other.view return false unless self.subviews.size==other.subviews.size self.subviews.each_index {|index| return false unless self.subviews[index]==other.subviews[index]} return true end end |
#[](n) ⇒ Object
45 46 47 48 49 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 45 def [](n) a=[@view] a+=@subviews if @subviews a[n] end |
#browsable_nodes ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 51 def browsable_nodes nodes=[@superview] if @subviews if A11y::Reverse_Views.member?(@view.class.to_s) nodes+=@subviews.reverse else nodes+=@subviews end end nodes end |
#copy ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 13 def copy other=A11y::Console::Tree.new other.superview=self.superview if superview other.view=self.view if view self.subviews.each {|subview| other.subviews<<subview.clone} other end |
#display_view(index = nil) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 72 def display_view(index=nil) display=Array.new control=@view.class.to_s control=nil if A11y::View_Names[control] control="Superview #{control}" if index==0 control.sub!(/UITableViewCell(AccessibilityElement)?/, "Table cell") if control if @view.class==UITableViewCell name=view.text elsif defined?(UITableViewCellAccessibilityElement)&&@view.class==UITableViewCellAccessibilityElement name=view.tableViewCell.text elsif view.respond_to?(:text) name=view.text elsif @view.class==UITextField name=@view.text else name=A11y::View_Names[@view.class.to_s]||@view.accessibility_value||@view.accessibility_label if @view.accessibility_element?||view.superclass==UIControl end display<<index.to_s display<<"Touchable" if A11y::Console.touchable_type(@view) display<<control if control display<<name if name if index if index>0 and not(@subviews.empty?) indicator="with #{@subviews.length} subview" indicator+="s" if @subviews.length>1 end display<<indicator end display.join(" ") end |
#find(request) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 164 def find(request) found=nil if request.kind_of?(Fixnum) raise "Invalid number" unless request>=0&&request<browsable_nodes.length found=browsable_nodes[request] elsif request.kind_of?(String) results=[] browsable_nodes.each do |node| next if node.nil? next unless node.view.accessibility_label pattern=Regexp.new(request,true) compare=node.view.accessibility_label=~pattern next if compare.nil? if node.view.accessibility_label.downcase==request.downcase return node else results<<node end end raise "\"#{request}\" could refer to more than one view." if results.length>1 found=results.first else raise "Unknown request: #{request}: #{request.class}" unless request.respond_to?(:superview) found=request end found end |
#inspect ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/project/motion-accessibility-console/tree.rb', line 63 def inspect nodes=@subviews.collect {|tree| tree.inspect} return @view.class.to_s if @subviews.empty? result="[#{@view.class}" result+=" #{nodes.join(" ")}" unless nodes.empty? result+="]" result end |