Class: RAutomation::Adapter::MsUia::ListBox

Inherits:
Control
  • Object
show all
Includes:
Locators, WaitHelper
Defined in:
lib/rautomation/adapter/ms_uia/list_box.rb

Instance Method Summary collapse

Methods inherited from Control

#assert_enabled, #bounding_rectangle, #click, #control_class, #control_name, #disabled?, #enabled?, #focus, #focused?, #get_current_control_type, #hwnd, #initialize, #matches_type?, #new_pid, #uia_element, #visible?

Constructor Details

This class inherits a constructor from RAutomation::Adapter::MsUia::Control

Instance Method Details

#count



9
10
11
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 9

def count
  UiaDll::find_children(uia_element, nil)
end

#exist?Boolean Also known as: exists?

Returns:

  • (Boolean)


43
44
45
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 43

def exist?
  super && matches_type?(Constants::UIA_LIST_CONTROL_TYPE)
end

#get_top_index



75
76
77
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 75

def get_top_index
  Functions.send_message(hwnd, Constants::LB_GETTOPINDEX, 0 ,nil)
end

#items



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 13

def items
  list_items = []
  children = FFI::MemoryPointer.new :pointer, self.count
  length = UiaDll::find_children(uia_element, children)

  children.read_array_of_pointer(length).each do |child|
    if (UiaDll::current_control_type(child) == Constants::UIA_LIST_ITEM_CONTROL_TYPE) or (UiaDll::current_control_type(child) == Constants::UIA_DATA_ITEM_CONTROL_TYPE)
      child_name = FFI::MemoryPointer.new :char, UiaDll::get_name(child, nil) + 1
      UiaDll::get_name(child, child_name)
      list_items.push(@window.list_item(:value => child_name.read_string))
    end
  end

  list_items
end

#list_boundary



67
68
69
70
71
72
73
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 67

def list_boundary
  boundary = FFI::MemoryPointer.new :long, 4

  Functions.send_message(hwnd, Constants::LB_GETITEMRECT, 0 ,boundary)

  boundary.read_array_of_long(4)
end

#list_item_height



79
80
81
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 79

def list_item_height
  Functions.send_message(hwnd, Constants::LB_GETITEMHEIGHT, 0 ,nil)
end

#scroll_to_item(row)



83
84
85
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 83

def scroll_to_item(row)
  Functions.send_message(hwnd, Constants::LB_SETTOPINDEX, row ,nil)
end

#select(index)



57
58
59
60
61
62
63
64
65
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 57

def select(index)
  children = FFI::MemoryPointer.new :pointer, self.count

  length = UiaDll::find_children(uia_element, children)

  target_element = children.read_array_of_pointer(length)[index]

  UiaDll::select(target_element)
end

#selected?(index) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 49

def selected?(index)
  if items[index]
    return items[index].selected?
  end

  false
end

#strings



29
30
31
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 29

def strings
  items.collect { |item| item.value}
end

#value



33
34
35
36
37
38
39
40
41
# File 'lib/rautomation/adapter/ms_uia/list_box.rb', line 33

def value
  count.times do |index|
    if selected?(index)
      return strings[index]
    end
  end

  ""
end