Class: Osaka::TypicalApplication
- Inherits:
-
Object
- Object
- Osaka::TypicalApplication
show all
- Defined in:
- lib/osaka/typicalapplication.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of TypicalApplication.
20
21
22
23
|
# File 'lib/osaka/typicalapplication.rb', line 20
def initialize(name)
@name = name
@control = RemoteControl.new(name)
end
|
Instance Attribute Details
#control ⇒ Object
Returns the value of attribute control.
18
19
20
|
# File 'lib/osaka/typicalapplication.rb', line 18
def control
@control
end
|
Instance Method Details
#activate ⇒ Object
167
168
169
170
171
172
|
# File 'lib/osaka/typicalapplication.rb', line 167
def activate
if (control.mac_version == :lion)
control.launch unless control.running?
end
control.activate
end
|
#close(option = :user_chose) ⇒ Object
162
163
164
165
|
# File 'lib/osaka/typicalapplication.rb', line 162
def close(option = :user_chose)
control.keystroke("w", :command)
wait_for_window_and_dialogs_to_close(option)
end
|
#close_dialog_sheet_with_dont_save ⇒ Object
59
60
61
62
63
|
# File 'lib/osaka/typicalapplication.rb', line 59
def close_dialog_sheet_with_dont_save
if (control.exists?(at.sheet(1)))
control.click!(at.button("Don’t Save").sheet(1))
end
end
|
#copy ⇒ Object
182
183
184
|
# File 'lib/osaka/typicalapplication.rb', line 182
def copy
control.keystroke("c", :command)
end
|
#create_dialog(dialog_class, location) ⇒ Object
203
204
205
|
# File 'lib/osaka/typicalapplication.rb', line 203
def create_dialog(dialog_class, location)
dialog_class.new(control.name, location + (location.has_top_level_element? ? "" : control.base_location))
end
|
#create_document(filename) {|_self| ... } ⇒ Object
99
100
101
102
103
104
|
# File 'lib/osaka/typicalapplication.rb', line 99
def create_document(filename)
new_document
yield self
save_as(filename)
close
end
|
#cut ⇒ Object
190
191
192
|
# File 'lib/osaka/typicalapplication.rb', line 190
def cut
control.keystroke("x", :command)
end
|
#do_and_wait_for_new_standard_window ⇒ Object
82
83
84
85
86
87
88
89
90
|
# File 'lib/osaka/typicalapplication.rb', line 82
def do_and_wait_for_new_standard_window
control.activate
latest_window_list = original_window_list = control.standard_window_list
yield
while ((latest_window_list - original_window_list).size == 0)
latest_window_list = control.standard_window_list
end
(latest_window_list - original_window_list)[0]
end
|
#do_and_wait_for_new_window ⇒ Object
72
73
74
75
76
77
78
79
80
|
# File 'lib/osaka/typicalapplication.rb', line 72
def do_and_wait_for_new_window
control.activate
latest_window_list = original_window_list = control.window_list
yield
while ((latest_window_list - original_window_list).size == 0)
latest_window_list = control.window_list
end
(latest_window_list - original_window_list)[0]
end
|
#duplicate ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/osaka/typicalapplication.rb', line 110
def duplicate
unless duplicate_available?
raise(Osaka::VersioningError, "MacOS Versioning Error: Duplicate is not available on this Mac version")
end
do_and_wait_for_new_standard_window {
control.(at.("Duplicate"), "File")
}
new_instance = clone
new_instance.control.set_current_window(do_and_wait_for_new_standard_window {
sleep(0.4)
control.keystroke!(:return)
}) unless control.mac_version == :lion
new_instance
end
|
#duplicate_and_close_original ⇒ Object
126
127
128
129
130
|
# File 'lib/osaka/typicalapplication.rb', line 126
def duplicate_and_close_original
new_instance = duplicate
close
@control = new_instance.control
end
|
#duplicate_available? ⇒ Boolean
106
107
108
|
# File 'lib/osaka/typicalapplication.rb', line 106
def duplicate_available?
control.exists?(at.("Duplicate").(1).("File").(1))
end
|
#focus ⇒ Object
174
175
176
|
# File 'lib/osaka/typicalapplication.rb', line 174
def focus
control.focus
end
|
#get_info ⇒ Object
30
31
32
33
|
# File 'lib/osaka/typicalapplication.rb', line 30
def get_info
script_info = control.tell("get info for (path to application \"#{@name}\")")
ApplicationInfo.new(script_info)
end
|
#initialize_copy(other) ⇒ Object
25
26
27
28
|
# File 'lib/osaka/typicalapplication.rb', line 25
def initialize_copy(other)
super
@control = other.control.clone
end
|
#new_document ⇒ Object
92
93
94
95
96
97
|
# File 'lib/osaka/typicalapplication.rb', line 92
def new_document
control.set_current_window(do_and_wait_for_new_standard_window {
control.keystroke("n", :command)
})
control.focus
end
|
#open(filename) ⇒ Object
35
36
37
38
39
40
41
|
# File 'lib/osaka/typicalapplication.rb', line 35
def open (filename)
abolutePathFileName = File.absolute_path(filename)
new_window = do_and_wait_for_new_standard_window {
control.tell("open \"#{abolutePathFileName}\"")
}
control.set_current_window(new_window)
end
|
#paste ⇒ Object
186
187
188
|
# File 'lib/osaka/typicalapplication.rb', line 186
def paste
control.keystroke("v", :command)
end
|
#print_dialog ⇒ Object
198
199
200
201
|
# File 'lib/osaka/typicalapplication.rb', line 198
def print_dialog
control.keystroke("p", :command).wait_until_exists(at.sheet(1))
create_dialog(TypicalPrintDialog, at.sheet(1))
end
|
#quit(option = :user_chose) ⇒ Object
65
66
67
68
69
70
|
# File 'lib/osaka/typicalapplication.rb', line 65
def quit(option = :user_chose)
if control.running?
control.quit
wait_for_application_to_quit(option)
end
end
|
#raise_error_on_open_standard_windows(error_message) ⇒ Object
213
214
215
|
# File 'lib/osaka/typicalapplication.rb', line 213
def raise_error_on_open_standard_windows(error_message)
raise Osaka::ApplicationWindowsMustBeClosed, error_message if ! control.standard_window_list.empty?
end
|
#running? ⇒ Boolean
178
179
180
|
# File 'lib/osaka/typicalapplication.rb', line 178
def running?
control.running?
end
|
#save ⇒ Object
132
133
134
|
# File 'lib/osaka/typicalapplication.rb', line 132
def save
control.keystroke("s", :command)
end
|
#save_as(filename) ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/osaka/typicalapplication.rb', line 140
def save_as(filename)
if save_pops_up_dialog?
save
else
if duplicate_available?
duplicate_and_close_original
save
else
control.keystroke("s", [:command, :shift])
end
end
wait_for_save_dialog_and_save_file(filename)
end
|
#save_pops_up_dialog? ⇒ Boolean
136
137
138
|
# File 'lib/osaka/typicalapplication.rb', line 136
def save_pops_up_dialog?
control.exists?(at.("Save…").(1).("File").(1))
end
|
#select_all ⇒ Object
194
195
196
|
# File 'lib/osaka/typicalapplication.rb', line 194
def select_all
control.keystroke("a", :command)
end
|
#select_file_from_open_dialog(filename, dialog_location) ⇒ Object
207
208
209
210
211
|
# File 'lib/osaka/typicalapplication.rb', line 207
def select_file_from_open_dialog(filename, dialog_location)
dialog = create_dialog(TypicalOpenDialog, dialog_location)
dialog.set_folder(File.dirname(filename))
dialog.select_file(File.basename(filename))
end
|
#wait_for_application_to_quit(option) ⇒ Object
51
52
53
54
55
56
57
|
# File 'lib/osaka/typicalapplication.rb', line 51
def wait_for_application_to_quit(option)
if (option != :user_chose)
while control.running?
close_dialog_sheet_with_dont_save
end
end
end
|
#wait_for_save_dialog_and_save_file(filename) ⇒ Object
155
156
157
158
159
160
|
# File 'lib/osaka/typicalapplication.rb', line 155
def wait_for_save_dialog_and_save_file(filename)
control.wait_until_exists(at.sheet(1))
dialog = create_dialog(TypicalSaveDialog, at.sheet(1))
dialog.save(filename)
control.set_current_window(File.basename(filename))
end
|
#wait_for_window_and_dialogs_to_close(option) ⇒ Object
43
44
45
46
47
48
49
|
# File 'lib/osaka/typicalapplication.rb', line 43
def wait_for_window_and_dialogs_to_close(option)
if (option != :user_chose)
control.until_not_exists!(control.base_location) {
close_dialog_sheet_with_dont_save
}
end
end
|