au3 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,10 @@
1
1
  #Encoding: UTF-8
2
2
  #This file is part of au3.
3
- #Copyright © 2009 Marvin Gülker
3
+ #Copyright © 2009, 2010 Marvin Gülker, Steven Heidel
4
4
  #
5
5
  #au3 is published under the same terms as Ruby.
6
6
  #See http://www.ruby-lang.org/en/LICENSE.txt
7
- #
8
- #===au3.rb
9
- #This is au3's main file.
7
+
10
8
  require "win32/api"
11
9
  #(See the end of this file for more require statements)
12
10
 
@@ -83,7 +81,7 @@ module AutoItX3
83
81
  INTDEFAULT = -2147483647
84
82
 
85
83
  #The version of this au3 library.
86
- VERSION = "0.1.1"
84
+ VERSION = "0.1.2"
87
85
 
88
86
  #This is the buffer size used for AutoItX3's text "returning" functions.
89
87
  #It will be subtracted by 1 due to the trailing 0 of wchar_t * type strings.
@@ -1,4 +1,9 @@
1
1
  #Encoding: UTF-8
2
+ #This file is part of au3.
3
+ #Copyright © 2009, 2010 Marvin Gülker, Steven Heidel
4
+ #
5
+ #au3 is published under the same terms as Ruby.
6
+ #See http://www.ruby-lang.org/en/LICENSE.txt
2
7
 
3
8
  module AutoItX3
4
9
 
@@ -13,15 +18,20 @@ module AutoItX3
13
18
 
14
19
  class << self
15
20
 
16
- def functions
21
+ def functions # :nodoc:
17
22
  @functions
18
23
  end
19
24
 
20
- def functions=(hsh)
25
+ def functions=(hsh) # :nodoc:
21
26
  @functions = hsh
22
27
  end
23
28
 
24
29
  #Generates a control by using another control.
30
+ #===Parameters
31
+ #[+ctrl+] The control to transform.
32
+ #===Return value
33
+ #A new instance of a subclass of Control.
34
+ #===Remarks & Example
25
35
  #This function is meant to be used with subclasses of Control, so you can do
26
36
  #things like this:
27
37
  # #...
@@ -36,11 +46,18 @@ module AutoItX3
36
46
 
37
47
  end
38
48
 
39
- #Creates a new Control object. Pass in the title and text of
40
- #the window holding the control (or "" if you don't want to specify one of them)
41
- #and the ID of the control. Instead of the ID you may use the name of the
42
- #control in combination width the occurence number of it, like "Edit1" and "Edit2".
43
- #Raises an Au3Error if the control doesn't exist.
49
+ #Creates a new Control object.
50
+ #===Parameters
51
+ #[+title+] The title of the window containing the control.
52
+ #[+text+] The text of the window containing the control Set to "" (empty string) if you don't care about it.
53
+ #[+control_id+] The ID of the control. You can also use the name of the control in combination with the occurence number of it, like "Edit1" and "Edit2".
54
+ #===Return value
55
+ #A brand new Control instance.
56
+ #===Raises
57
+ #[Au3Error] The control or the window doesn't exist.
58
+ #===Example
59
+ # #Get the edit control of the "Run" dialog:
60
+ # ctrl = AutoItX3::Control.new("Run", "", "Edit1")
44
61
  def initialize(title, text, control_id)
45
62
  @title = title
46
63
  @text = text
@@ -48,8 +65,23 @@ module AutoItX3
48
65
  visible? #Raises an error if the control doesn't exist
49
66
  end
50
67
 
51
- #Clicks +self+ with the given mouse +button+ (<tt>"Primary"</tt> by default)
52
- #+click+ times (1 by default) at the given position (middle by default).
68
+ #Clicks +self+ with the given mouse +button+.
69
+ #===Parameters
70
+ #[+button+] (<tt>"Primary"</tt>)The button to click with.
71
+ #[+clicks+] (1) The number of clicks.
72
+ #[+x+] (+INTDEFAULT+) The X-coordinate to click at. Middle if left out.
73
+ #[+y+] (+INTDEFAULT+) The Y-coordinate to click at. Middle if left out.
74
+ #===Return value
75
+ #nil.
76
+ #===Raises
77
+ #[Au3Error] Couldn't click the control.
78
+ #===Example
79
+ # #Click with the left (or if left-handed mouse, right) button
80
+ # ctrl.click
81
+ # #Click with the secondary button
82
+ # ctrl.click("Secondary")
83
+ # #Double click
84
+ # ctrl.click("Primary", 2)
53
85
  def click(button = "Primary", clicks = 1, x = INTDEFAULT, y = INTDEFAULT)
54
86
  Control.functions[__method__] ||= AU3_Function.new("ControlClick", 'SSSSLLL', 'L')
55
87
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide, button.wide, clicks, x, y)
@@ -60,6 +92,12 @@ module AutoItX3
60
92
  end
61
93
 
62
94
  #Disables ("grays out") +self+.
95
+ #===Return value
96
+ #nil.
97
+ #===Raises
98
+ #[Au3Error] Failed to disable the control.
99
+ #===Example
100
+ # ctrl.disable
63
101
  def disable
64
102
  Control.functions[__method__] ||= AU3_Function.new("ControlDisable", 'SSS', 'L')
65
103
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide)
@@ -70,6 +108,12 @@ module AutoItX3
70
108
  end
71
109
 
72
110
  #Enables +self+ (i.e. make it accept user actions).
111
+ #===Return value
112
+ #nil.
113
+ #===Raises
114
+ #[Au3Error] Couldn't enable the control.
115
+ #===Example
116
+ # ctrl.enable
73
117
  def enable
74
118
  Control.functions[__method__] ||= AU3_Function.new("ControlEnable", 'SSS', 'L')
75
119
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide)
@@ -80,6 +124,12 @@ module AutoItX3
80
124
  end
81
125
 
82
126
  #Gives the input focus to +self+.
127
+ #===Return value
128
+ #nil.
129
+ #===Raises
130
+ #[Au3Error] Couldn't get the input focus.
131
+ #===Example
132
+ # ctrl.focus
83
133
  def focus
84
134
  Control.functions[__method__] ||= AU3_Functino.new("ControlFocus", 'SSS', 'L')
85
135
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide)
@@ -89,9 +139,15 @@ module AutoItX3
89
139
  nil
90
140
  end
91
141
 
92
- #Returns the internal window handle of +self+. It can be used in
142
+ #Returns the internal window handle of +self+.
143
+ #===Return value
144
+ #The handle of +self+ as a hexadecimal string.
145
+ #===Example
146
+ # hwnd = ctrl.handle.to_i(16)
147
+ #===Remarks
148
+ #The handle can be used in
93
149
  #advanced window mode or directly in Win32 API calls (but you have
94
- #to call #to_i on the string than).
150
+ #to call #to_i(16) on the string then).
95
151
  def handle
96
152
  Control.functions[__method__] ||= AU3_Function.new("ControlGetHandle", 'SSSPI')
97
153
  buffer = " " * BUFFER_SIZE
@@ -101,8 +157,13 @@ module AutoItX3
101
157
  buffer.normal.strip
102
158
  end
103
159
 
104
- #Returns a 4-element array containing the control's position and size.
105
- #Form is: <tt>[ x , y , width , height ]</tt>.
160
+ #Gets the control's bounding rectangle.
161
+ #===Return value
162
+ #A 4-element array of form <tt>[ x , y , width , height ]</tt>.
163
+ #===Raises
164
+ #[Au3Error] Control or window not found.
165
+ #===Example
166
+ # p ctrl.rect #=> [66, 72, 297, 17]
106
167
  def rect
107
168
  Control.functions[:c_x] ||= AU3_Function.new("ControlGetPosX", 'SSS', 'L')
108
169
  Control.functions[:c_y] ||= AU3_Function.new("ControlGetPosY", 'SSS', 'L')
@@ -121,6 +182,12 @@ module AutoItX3
121
182
  end
122
183
 
123
184
  #Returns the +self+'s text.
185
+ #===Return value
186
+ #The text value of +self+.
187
+ #===Raises
188
+ #[Au3Error] Control or window not found.
189
+ #===Example
190
+ # puts ctrl.text #=> regedit
124
191
  def text
125
192
  Control.functions[__method__] ||= AU3_Function.new("ControlGetText", 'SSSPI')
126
193
  buffer = " " * BUFFER_SIZE
@@ -131,6 +198,13 @@ module AutoItX3
131
198
  end
132
199
 
133
200
  #Hides +self+.
201
+ #===Return value
202
+ #nil.
203
+ #===Example
204
+ # ctrl.hide
205
+ #===Remarks
206
+ #"Hidings" means to make a control completely invisible. If you just want it to
207
+ #refuse user input, use #disable.
134
208
  def hide
135
209
  Control.functions[__method__] ||= AU3_Function.new("ControlHide", 'SSS', 'L')
136
210
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide)
@@ -139,6 +213,22 @@ module AutoItX3
139
213
  end
140
214
 
141
215
  #Moves a control and optionally resizes it.
216
+ #===Parameters
217
+ #[+x+] The goal X coordinate.
218
+ #[+y+] The goal Y coordinate.
219
+ #[+width+] (-1) The goal width.
220
+ #[+height+] (-1) The goal height.
221
+ #===Return value
222
+ #nil.
223
+ #===Raises
224
+ #[Au3Error] Control or window not found.
225
+ #===Example
226
+ # ctrl.move(100, 100)
227
+ # #Move to (100|100) and resize
228
+ # ctrl.move(100, 100, 500, 500)
229
+ #===Remarks
230
+ #If you move or resize a control, the visually shown control may not change, but if you try to
231
+ #click on it after moving it away, you will get to know that it isn't there anymore.
142
232
  def move(x, y, width = -1, height = -1)
143
233
  Control.functions[__method__] ||= AU3_Function.new("ControlMove", 'SSSLLLL', 'L')
144
234
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide, x, y, width, height)
@@ -146,9 +236,21 @@ module AutoItX3
146
236
  nil
147
237
  end
148
238
 
149
- #Simulates user input to a control. This works normally even on
150
- #hidden and inactive windows. Please note that this method cannot
151
- #send every keystroke AutoItX3.send_keys can, notably [ALT] combinations.
239
+ #Simulates user input to a control.
240
+ #===Parameters
241
+ #[+str+] The input string to simulate.
242
+ #[+flag+] (0) If set to 1, escape sequences in braces { and } are ignored.
243
+ #===Return value
244
+ #nil.
245
+ #===Raises
246
+ #[Au3Error] Control or window not found.
247
+ #===Example
248
+ # #Send some keystrokes
249
+ # ctrl.send_keys("Abc")
250
+ # #Send some keys with escape sequences
251
+ # ctrl.send_keys("Ab{ESC}c")
252
+ # #Ignore the escape sequences
253
+ # ctrl.send_keys("Ab{ESC}c", 1)
152
254
  def send_keys(str, flag = 0)
153
255
  Control.functions[__method__] ||= AU3_Function.new("ControlSend", 'SSSSI', 'L')
154
256
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide, str.wide, flag)
@@ -157,6 +259,18 @@ module AutoItX3
157
259
  end
158
260
 
159
261
  #Sets the text of a control directly.
262
+ #===Parameters
263
+ #[+text+] The text to set.
264
+ #===Return value
265
+ #The +text+ argument.
266
+ #===Raises
267
+ #[Au3Error] Control or window not found.
268
+ #===Example
269
+ # ctrl.text = "My awesome text"
270
+ #===Remarks
271
+ #The difference to #send_keys is that some controls doesn't allow
272
+ #the user to type text into (labels for example). These control's text
273
+ #can be set by using this method, but note that escape sequences aren't supported here.
160
274
  def text=(text)
161
275
  Control.functions[__method__] ||= AU3_Function.new("ControlSetText", 'SSSS', 'L')
162
276
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide, text.wide)
@@ -165,6 +279,12 @@ module AutoItX3
165
279
  end
166
280
 
167
281
  #Shows a hidden control.
282
+ #===Return value
283
+ #nil.
284
+ #===Example
285
+ # ctrl.show
286
+ #===Remarks
287
+ #This doesn't enable user input, use #enable for that purpose.
168
288
  def show
169
289
  Control.functions[__method__] ||= AU3_Function.new("ControlShow", 'SSS', 'L')
170
290
  res = Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide)
@@ -184,17 +304,38 @@ module AutoItX3
184
304
  end
185
305
 
186
306
  #Returns wheather or not a control is visible.
307
+ #===Return value
308
+ #true or false.
309
+ #===Raises
310
+ #[Au3Error] Control or window not found.
311
+ #===Example
312
+ # p ctrl.visible? #=> true
313
+ # ctrl.hide
314
+ # p ctrl.visible? #=> false
315
+ # ctrl.show
316
+ # p ctrl.visible #=> true
187
317
  def visible?
188
318
  send_command_to_control("IsVisible").to_i == 1
189
319
  end
190
320
 
191
321
  #Returns true if a control can interact with the user (i.e. it's not "grayed out").
322
+ #===Return value
323
+ #true or false.
324
+ #===Raises
325
+ #[Au3Error] Control or window not found.
326
+ #===Example
327
+ # p ctrl.enabled? #=> true
328
+ # ctrl.disable
329
+ # p ctrl.enabled? #=> false
330
+ # ctrl.enable
331
+ # p ctrl.enabled? #=> true
192
332
  def enabled?
193
333
  send_command_to_control("IsEnabled").to_i == 1
194
334
  end
195
335
 
196
336
  private
197
337
 
338
+ #Raises an error message saying that the window or the control wasn't found.
198
339
  def raise_unfound
199
340
  raise(Au3Error, "The control '#{@c_id}' was not found in the window '#{@title}' (or the window was not found)!", caller)
200
341
  end
@@ -213,6 +354,15 @@ module AutoItX3
213
354
  #Adds an entry to an existing combo or list box.
214
355
  #If you use the << form, you can do a chain call like:
215
356
  # ctrl << "a" << "b" << "c"
357
+ #===Parameters
358
+ #[+string+] The string to append.
359
+ #===Return value
360
+ #The appended string or +self+, in the case of the operator form.
361
+ #===Raises
362
+ #[Au3Error] Control or window not found.
363
+ #===Example
364
+ # list.add_item("my_item")
365
+ # list << "my_item" << "my_second_item"
216
366
  def add_item(string)
217
367
  send_command_to_control("AddString", string)
218
368
  string
@@ -223,32 +373,67 @@ module AutoItX3
223
373
  self
224
374
  end
225
375
 
226
- #Delete item +no+.
376
+ #Deletes an item.
377
+ #===Parameters
378
+ #[+item_number+] The 0-based index of the item to delete.
379
+ #===Return value
380
+ #Unknown.
381
+ #===Raises
382
+ #[Au3Error] Control or window not found.
383
+ #===Example
384
+ # list.delete(0)
227
385
  def delete(item_number)
228
386
  send_command_to_control("DelString", item.to_s).to_i
229
387
  end
230
388
 
231
- #Finds the item number of +item+ in +self+.
389
+ #Finds the item number (= 0-based index) of +item+ in +self+.
390
+ #===Parameters
391
+ #[+item+] The item to look for.
392
+ #===Return value
393
+ #Unknown.
394
+ #===Raises
395
+ #[Au3Error] Control or window not found.
396
+ #===Example
397
+ # p ctrl.find("my_item") #=> 3
232
398
  def find(item)
233
399
  send_command_to_control("FindString", item).to_i
234
400
  end
235
401
 
236
402
  #Sets the current selection of a combo box to item +num+.
237
- #The index is zero-based. Raises an Au3Error if +num+ is out
238
- #of range.
403
+ #===Parameters
404
+ #[+num+] The index of the item to set the selection to.
405
+ #===Return value
406
+ #+num+.
407
+ #===Raises
408
+ #[Au3Error] Index is out of range or the control or the window wasn't fond.
409
+ #===Example
410
+ # ctrl.current_selection = 3
239
411
  def current_selection=(num)
240
412
  send_command_to_control("SetCurrentSelection", num.to_i)
241
413
  num
242
414
  end
243
415
 
244
416
  #Sets +self+'s selection to the first occurence of +str+.
245
- #Raises an Au3Error if +str+ cannot be found.
417
+ #===Parameters
418
+ #[+str+] The string to select.
419
+ #===Return value
420
+ #+str+.
421
+ #===Raises
422
+ #[Au3Error] Couldn't find the string, the control or the window.
423
+ #===Example
424
+ # ctrl.select_string("my_string")
246
425
  def select_string(str)
247
426
  send_command_to_control("SelectString", str)
248
427
  string
249
428
  end
250
429
 
251
430
  #Returns the currently selected string.
431
+ #===Return value
432
+ #The currently selected string.
433
+ #===Raises
434
+ #[Au3Error] Control or window not found.
435
+ #===Example
436
+ # p ctrl.current_selection #=> "my_string"
252
437
  def current_selection
253
438
  send_command_to_control("GetCurrentSelection")
254
439
  end
@@ -261,6 +446,12 @@ module AutoItX3
261
446
  class ComboBox < ListBox
262
447
 
263
448
  #Drops down a combo box.
449
+ #===Return value
450
+ #Unknown.
451
+ #===Raises
452
+ #[Au3Error] Control or window not found.
453
+ #===Example
454
+ # box.drop
264
455
  def drop
265
456
  send_command_to_control("ShowDropDown")
266
457
  end
@@ -270,6 +461,10 @@ module AutoItX3
270
461
  # close
271
462
  #
272
463
  #Undrops or closes a combo box.
464
+ #===Return value
465
+ #Unknown.
466
+ #===Raises
467
+ #[Au3Error] Control or window not found.
273
468
  def undrop
274
469
  send_command_to_control("HideDropDown")
275
470
  end
@@ -279,21 +474,45 @@ module AutoItX3
279
474
 
280
475
  #A button is a control on which you can click and than something happens.
281
476
  #Even if that's quite correct, that isn't all: check and radio boxes
282
- #are handled by Windows as buttons, so they fall into the scope of this class.
477
+ #are handled by Windows as buttons as well, so they fall into the scope of this class.
283
478
  class Button < Control
284
479
 
285
480
  #Returns wheather +self+ is checked or not.
286
- #Only useful for radio and check buttons.
481
+ #===Return value
482
+ #true or false.
483
+ #===Raises
484
+ #[Au3Error] Control or window not found.
485
+ #===Example
486
+ # p ctrl.checked? #=> false
487
+ # ctrl.check
488
+ # p ctrl.checked? #=> true
489
+ #===Remarks
490
+ #This method is only useful for radio and check buttons.
287
491
  def checked?
288
- send_command_to_control("IsChecked") == 1
492
+ send_command_to_control("IsChecked") == "1"
289
493
  end
290
494
 
291
495
  #Checks +self+ if it's a radio or check button.
496
+ #===Return value
497
+ #Unknown.
498
+ #===Raises
499
+ #[Au3Error] Control or window not found.
500
+ #===Example
501
+ # ctrl.check
502
+ #===Rmarks
503
+ #Only useful for radio and check buttons. If you try to do this on a regular button,
504
+ #it's like you clicked it.
292
505
  def check
293
506
  send_command_to_control("Check")
294
507
  end
295
508
 
296
509
  #Unchecks +self+ if it's a radio or check button.
510
+ #===Return value
511
+ #Unknown.
512
+ #===Raises
513
+ #[Au3Error] Control or window not found.
514
+ #===Example
515
+ # ctrl.uncheck
297
516
  def uncheck
298
517
  send_command_to_control("UnCheck")
299
518
  end
@@ -304,8 +523,13 @@ module AutoItX3
304
523
  #type text. For example, notepad consists mainly of a big edit control.
305
524
  class Edit < Control
306
525
 
307
- #Returns the current caret position in a 2-element array
308
- #of form <tt>[line, column]</tt>.
526
+ #Returns the current caret position.
527
+ #===Return value
528
+ #A 2-element array of form <tt>[line, column]</tt>. Numbering starts with 1.
529
+ #===Raises
530
+ #[Au3Error] Control or window not found.
531
+ #===Example
532
+ # p edit.caret_pos #=> [1, 1]
309
533
  def caret_pos
310
534
  x = send_command_to_control("GetCurrentLine").to_i
311
535
  y = send_command_to_control("GetCurrentCol").to_i
@@ -313,16 +537,39 @@ module AutoItX3
313
537
  end
314
538
 
315
539
  #Returns the number of lines in +self+.
540
+ #===Return value
541
+ #The number of lines.
542
+ #===Raises
543
+ #[Au3Error] Control or window not found.
544
+ #===Example
545
+ # p edit.lines #=> 3
316
546
  def lines
317
547
  send_command_to_control("GetLineCount").to_i
318
548
  end
319
549
 
320
550
  #Returns the currently selected text.
551
+ #===Return value
552
+ #The currently selected text selection.
553
+ #===Example
554
+ # p edit.selected_text #=> "I love Ruby!"
555
+ #===Remarks
556
+ #Be careful with the encoding of the returned text. It's likely that
557
+ #you have to do a force_encoding on it, since there isn't any guarantee in
558
+ #which encoding a window returns it's contents.
321
559
  def selected_text
322
560
  send_command_to_control("GetSelected")
323
561
  end
324
562
 
325
563
  #"Pastes" +str+ at +self+'s current caret position.
564
+ #===Parameters
565
+ #[+str+] The text to paste.
566
+ #===Return value
567
+ #Unknown.
568
+ #===Example
569
+ # edit.paste("My text")
570
+ #===Remarks
571
+ #In contrast to #selected_text, the window should receive the
572
+ #text correctly, since AutoItX3 only accepts UTF-16LE-encoded strings.
326
573
  def paste(str)
327
574
  send_command_to_control("EditPaste", str)
328
575
  end
@@ -335,19 +582,35 @@ module AutoItX3
335
582
  class TabBook < Control
336
583
 
337
584
  #Returns the currently shown tab.
585
+ #===Return value
586
+ #The number of the currently shown tab, starting with 1.
587
+ #===Raises
588
+ #[Au3Error] Control or window not found.
589
+ #===Example
590
+ # p tab.current #=> 2
338
591
  def current
339
592
  send_command_to_control("CurrentTab").to_i
340
593
  end
341
594
 
342
- #Shows the tab right to the current one and returns the number
343
- #of the now shown tab.
595
+ #Shows the tab right to the current one.
596
+ #===Return value
597
+ #Returns the number of the now shown tab, starting with 1.
598
+ #===Raises
599
+ #[Au3Error] Control or window not found.
600
+ #===Example
601
+ # tab.right #| 3
344
602
  def right
345
603
  send_command_to_control("TabRight")
346
604
  current
347
605
  end
348
606
 
349
- #Shows the tab left to the current one and returns the number
350
- #of the now shown tab.
607
+ #Shows the tab left to the current one.
608
+ #===Return value
609
+ #Returns the number of the now shown tab, starting with 1.
610
+ #===Raises
611
+ #[Au3Error] Control or window not found.
612
+ #===Example
613
+ # tab.left #| 1
351
614
  def left
352
615
  send_command_to_control("TabLeft")
353
616
  current
@@ -356,7 +619,8 @@ module AutoItX3
356
619
  end
357
620
 
358
621
  #A list view is a list which can contain many different
359
- #columns of data.
622
+ #columns of data. For example, the Windows Explorer
623
+ #uses this control.
360
624
  class ListView < Control
361
625
 
362
626
  #Ordinary list view
@@ -379,12 +643,29 @@ module AutoItX3
379
643
  end
380
644
 
381
645
  #Deselects the given item(s).
646
+ #===Parameters
647
+ #[+from+] Either the index of the item to deselect or the start of the item list to deselect. 0-based.
648
+ #[+to+] (<tt>""</tt>) The end of the item list to deselect. 0-based.
649
+ #===Return value
650
+ #Unknown.
651
+ #===Raises
652
+ #[Au3Error] Control or window not found.
382
653
  def deselect(from, to = "")
383
654
  send_command_to_list_view("DeSelect", from, to)
384
655
  end
385
656
 
386
- #Searches for +string+ and +sub_item+ in +self+ and returns the index
387
- #of the found list item or false if it isn't found.
657
+ #Searches for +string+ and +sub_item+ in +self+.
658
+ #===Parameters
659
+ #[+string+] The string to look for.
660
+ #[+sub_item+] (<tt>""</tt>) The "colum" to look in. A 0-based integer index.
661
+ #===Return value
662
+ #Returns the index of the found list item or false if it isn't found.
663
+ #===Raises
664
+ #[Au3Error] Control or window not found.
665
+ #===Example
666
+ # p ctrl.find("file1.rb") #=> 3
667
+ # p ctrl.find("15 KB", 3) #=> 2
668
+ # p ctrl.find("nonexistant") #=> false
388
669
  def find(string, sub_item = "")
389
670
  res = send_command_to_list_view("FindItem", string, sub_item).to_i
390
671
  if res == -1
@@ -400,24 +681,47 @@ module AutoItX3
400
681
  # length ==> anInteger
401
682
  #
402
683
  #Returns the number of items in +self+.
684
+ #===Return value
685
+ #The number of items in +self+.
686
+ #===Raises
687
+ #[Au3Error] Control or window not found.
688
+ #===Example
689
+ # p ctrl.item_count #=> 9
403
690
  def item_count
404
691
  send_command_to_list_view("GetItemCount").to_i
405
692
  end
406
693
  alias size item_count
407
694
  alias length item_count
408
695
 
409
- #Returns the inices of the selected items in an array which is empty if
410
- #none is selected.
696
+ #Returns the inices of the selected items.
697
+ #===Return value
698
+ #An array containg the indices of the selected items which is empty if none is selected.
699
+ #===Raises
700
+ #[Au3Error] Control or window not found.
701
+ #===Example
702
+ # p ctrl.selected #=> [3, 4, 5]
411
703
  def selected
412
- send_command_to_list_view("GetSelected", 1).split("|")
704
+ send_command_to_list_view("GetSelected", 1).split("|").map(&:to_i)
413
705
  end
414
706
 
415
707
  #Returns the number of selected items.
708
+ #===Return value
709
+ #The number of items selected.
710
+ #===Raises
711
+ #[Au3Error] Control or window not found.
712
+ #===Example
713
+ # p ctrl.num_selected #=> 3
416
714
  def num_selected
417
715
  send_command_to_list_view("GetSelectedCount").to_i
418
716
  end
419
717
 
420
718
  #Returns the number of subitems in +self+.
719
+ #===Return value
720
+ #An integer that indicates how many "columns" the list view has.
721
+ #===Raises
722
+ #[Au3Error] Control or window not found.
723
+ #===Example
724
+ # p ctrl.num_subitems #=> 4
421
725
  def num_subitems
422
726
  send_command_to_list_view("GetSubItemCount").to_i
423
727
  end
@@ -427,22 +731,67 @@ module AutoItX3
427
731
  # AutoItX3::ListView#[ item [, subitem ] ] ==> aString
428
732
  #
429
733
  #Returns the text at the given position.
734
+ #===Parameters
735
+ #[+item+] The "row" to look in. 0-based integer.
736
+ #[+subitem+] (<tt>""</tt>) The "colum" to look in. 0-based integer.
737
+ #===Return value
738
+ #The text at the given position.
739
+ #===Raises
740
+ #[Au3Error] Control or window not found.
741
+ #===Example
742
+ # p ctrl.text_at(2, 3) #=> "6 KB"
743
+ #===Remarks
744
+ #Don't make any assumptions about the encoding or event the content
745
+ #of a list box item. For example, a date field of the Windows Explorer
746
+ #comes out like this:
747
+ # p ctrl.text_at(2, 1) #=> "ÔÇÄ10.ÔÇÄ05.ÔÇÄ2010 ÔÇÅÔÇÄ16:53"
748
+ #which is probably not what you thought, since in the Explorer Window it's
749
+ #presented as:
750
+ # 10.05.2010 16:52
430
751
  def text_at(item, subitem = "")
431
752
  send_command_to_list_view("GetText", item, subitem)
432
753
  end
433
754
  alias [] text_at
434
755
 
435
756
  #Returns wheather or not +item+ is selected.
757
+ #===Parameters
758
+ #[+item+] The 0-based index of the item to check.
759
+ #===Return value
760
+ #true or false.
761
+ #===Raises
762
+ #[Au3Error] Control or window not found.
763
+ #===Example
764
+ # p ctrl.selected?(3) #=> false
765
+ # p ctrl.selected?(7) #=> true
436
766
  def selected?(item)
437
767
  send_command_to_list_view("IsSelected", item).to_i == 1
438
768
  end
439
769
 
440
770
  #Selects the given item(s).
771
+ #===Parameters
772
+ #[+from+] The index where to start or the item to select. 0-based integer.
773
+ #[+to+] The index where to stop. 0-based integer.
774
+ #===Return value
775
+ #Unknown.
776
+ #===Raises
777
+ #[Au3Error] Control or window not found.
778
+ #===Example
779
+ # ctrl.select(3)
780
+ # ctrl.select(3, 5)
781
+ #===Remarks
782
+ #This method doesn't deselect anything. If you want an entire new selection,
783
+ #call #clear_selection before calling this method.
441
784
  def select(from, to = "")
442
785
  send_command_to_list_view("Select", from, to)
443
786
  end
444
787
 
445
788
  #Selects all items in +self+.
789
+ #===Return value
790
+ #Unknown.
791
+ #===Raises
792
+ #[Au3Error] Control or window not found.
793
+ #===Example
794
+ # ctrl.select_all
446
795
  def select_all
447
796
  send_command_to_list_view("SelectAll")
448
797
  end
@@ -451,18 +800,39 @@ module AutoItX3
451
800
  # AutoItX3::ListView#select_none ==> nil
452
801
  #
453
802
  #Clears the selection.
803
+ #===Return value
804
+ #Unknown.
805
+ #===Raises
806
+ #[Au3Error] Control or window not found.
807
+ #===Example
808
+ # ctrl.clear_selection
454
809
  def clear_selection
455
810
  send_command_to_list_view("SelectClear")
456
811
  end
457
812
  alias select_none clear_selection
458
813
 
459
814
  #Inverts the selection.
815
+ #===Return value
816
+ #Unknown.
817
+ #===Raises
818
+ #[Au3Error] Control or window not found.
819
+ #===Example
820
+ # ctrl.invert_selection
821
+ #===Remarks
822
+ #This works even if nothing or everything is selected.
460
823
  def invert_selection
461
824
  send_command_to_list_view("SelectInvert")
462
825
  end
463
826
 
464
- #Changes the view of +self+. Possible values of +view+ are
465
- #all constants of the ListView class.
827
+ #Changes the view of +self+.
828
+ #===Parameters
829
+ #[+view+] The view to change to. Possible values are the constants of the ListView class.
830
+ #===Return value
831
+ #Unknown.
832
+ #===Raises
833
+ #[Au3Error] Control or window not found.
834
+ #===Example
835
+ # ctrl.change_view(AutoItX3::ListView::LIST)
466
836
  def change_view(view)
467
837
  send_command_to_list_view("ViewChange", view)
468
838
  end
@@ -471,6 +841,10 @@ module AutoItX3
471
841
 
472
842
  #A TreeView is a control that shows a kind of expandable
473
843
  #list, like the one displayed ont the left side in <tt>.chm</tt> files.
844
+ #
845
+ #The +item+ parameter of many methods in this class is a string of form
846
+ # "#index_0|#index_1|#index_2..."
847
+ #that describes where to find the item. See the #selected method for an example.
474
848
  class TreeView < Control
475
849
 
476
850
  #Sends +cmd+ to +self+. This method is only used internally.
@@ -478,38 +852,96 @@ module AutoItX3
478
852
  Control.functions[__method__] ||= AU3_Function.new("ControlTreeView", 'SSSSSSPI')
479
853
  buffer = " " * BUFFER_SIZE
480
854
  buffer.wide!
481
- Control.functions[__method__].call(@title.wide, @text.wide, @c_id.wide, command.wide, arg1.wide, arg2.wide, buffer, BUFFER_SIZE - 1)
855
+ Control.functions[__method__].call(@title.wide, @text.wide, @c_id.to_s.wide, command.to_s.wide, arg1.to_s.wide, arg2.to_s.wide, buffer, BUFFER_SIZE - 1)
482
856
  raise(Au3Error, "Unknown error occured when sending '#{command}' to '#{@c_id}' in '#{@title}'! Maybe an invalid window?") if AutoItX3.last_error == 1
483
857
  buffer.normal.strip
484
858
  end
485
859
 
486
- #Checks +item+ if it supports that operation.
860
+ #Checks +item+, if it supports that operation.
861
+ #===Parameters
862
+ #[+item+] The path of the item to check.
863
+ #===Return value
864
+ #Unknown.
865
+ #===Raises
866
+ #[Au3Error] Control or window not found.
867
+ #===Example
868
+ # ctrl.check("#0|#3|#7")
487
869
  def check(item)
488
870
  send_command_to_tree_view("Check", item)
489
871
  end
490
872
 
491
873
  #Collapses +item+ to hide its children.
874
+ #===Parameters
875
+ #[+item+] The path of the item to collapse.
876
+ #===Return value
877
+ #Unknown.
878
+ #===Raises
879
+ #[Au3Error] Control or window not found.
880
+ #===Example
881
+ # ctrl.collapse("#0")
492
882
  def collapse(item)
493
883
  send_command_to_tree_view("Collapse", item)
494
884
  end
495
885
 
496
886
  #Return wheather or not +item+ exists.
887
+ #===Parameters
888
+ #[+item+] The path of the item to check.
889
+ #===Return value
890
+ #true or false.
891
+ #===Raises
892
+ #[Au3Error] Control or window not found.
893
+ #===Example
894
+ # p ctrl.exists?("#0|#3") #=> true
895
+ # p ctrl.exists?("#1|#4") #=> false
497
896
  def exists?(item)
498
897
  send_command_to_tree_view("Exists", item).to_i == 1
499
898
  end
500
899
 
501
900
  #Expands +item+ to show its children.
901
+ #===Parameters
902
+ #[+item+] The path of the item to expand.
903
+ #===Return value
904
+ #Unknown.
905
+ #===Raises
906
+ #[Au3Error] Control or window not found.
907
+ #===Example
908
+ # ctrl.expand("#0|#3")
502
909
  def expand(item)
503
910
  send_command_to_tree_view("Expand", item)
504
911
  end
505
912
 
506
913
  #Returns the number of children of +item+.
914
+ #===Parameters
915
+ #[+item+] The path of the item to check.
916
+ #===Return value
917
+ #The number of subitems of that node.
918
+ #===Raises
919
+ #[Au3Error] Control or window not found.
920
+ #===Example
921
+ # p ctrl.num_subitems("#0") #=> 8
922
+ #===Remarks
923
+ #This method returns 0 if the item doesn't exist.
507
924
  def num_subitems(item)
508
925
  send_command_to_tree_view("GetItemCount", item).to_i
509
926
  end
510
927
 
511
- #Returns the text reference or the index reference (if +use_index+ is true) of
512
- #the selected item.
928
+ #Returns where to find the selected item.
929
+ #===Parameters
930
+ #[+use_index+] (+false+) If this is true, you only get the last index.
931
+ #===Return value
932
+ #If +use_index+ is false, which is the default, you get a string back that describes
933
+ #where you find the currently selected item. The string is of form
934
+ # "#index_0|#index_1|#index_3..."
935
+ #for example
936
+ # "#0|#3|#0|#10|#1|#0"
937
+ #for the "ControlClick" item in the AutoItX help.
938
+ #Otherwise, if +use_index+ is false, you only get the last index of that chain, as an integer.
939
+ #===Raises
940
+ #[Au3Error] Control or window not found.
941
+ #===Example
942
+ #See <i>Return value</i>.
943
+ #===Remarks
944
+ #You can pass the result of this method directly to many methods of this class.
513
945
  def selected(use_index = false)
514
946
  result = send_command_to_tree_view("GetSelected", use_index ? 1 : 0)
515
947
  return result.to_i if use_index
@@ -521,23 +953,58 @@ module AutoItX3
521
953
  # [ item ] ==> aString
522
954
  #
523
955
  #Returns the text of +item+.
956
+ #===Parameters
957
+ #[+item+] The item to retrieve the text from.
958
+ #===Return value
959
+ #The text at the specified position.
960
+ #===Raises
961
+ #[Au3Error] Control or window not found.
962
+ #===Example
963
+ # p ctrl.text_at("#0|#3|#0|#10|#1|#0") #=> "ControlClick"
964
+ #===Remarks
965
+ #See #selected for an easy way of how to get the text of the currently selected item.
524
966
  def text_at(item)
525
967
  send_command_to_tree_view("GetText", item)
526
968
  end
527
969
  alias [] text_at
528
970
 
529
- #Returns wheather or not +item+ is checked. Raises an Au3Error
530
- #if +item+ is not a checkbox.
971
+ #Returns wheather or not +item+ is checked.
972
+ #===Parameters
973
+ #[+item+] The item to check.
974
+ #===Return value
975
+ #true or false.
976
+ #===Raises
977
+ #[Au3Error] Control or window not found.
978
+ #===Example
979
+ # p ctrl.checked?("#1|#2|#3") #=> true
980
+ #===Remarks
981
+ #This method always returns false for non-checkable items.
531
982
  def checked?(item)
532
983
  send_command_to_tree_view("IsChecked", item).to_i == 1
533
984
  end
534
985
 
535
986
  #Selects +item+.
987
+ #===Parameters
988
+ #[+item+] The item to select.
989
+ #===Return value
990
+ #Unknown.
991
+ #===Raises
992
+ #[Au3Error] Control or window not found.
993
+ #===Example
994
+ # ctrl.select("#1|#2")
536
995
  def select(item)
537
996
  send_command_to_tree_view("Select", item)
538
997
  end
539
998
 
540
999
  #Unchecks +item+ if it suports that operation (i.e. it's a checkbox).
1000
+ #===Parameters
1001
+ #[+item+] The item to uncheck.
1002
+ #===Return value
1003
+ #Unknown.
1004
+ #===Raises
1005
+ #[Au3Error] Control or Window not found.
1006
+ #===Example
1007
+ # ctrl.uncheck("#0|#3")
541
1008
  def uncheck(item)
542
1009
  send_command_to_tree_view("Uncheck", item)
543
1010
  end