@@ -172,45 +172,18 @@ AutoclickerGui.AddDropDownList("xp+62 yp-2 w140 vScheduling_PostStopAction_DropD
172
172
173
173
AutoclickerGui[" Tab" ].UseTab(SZ_TABLE.Tabs.Positioning)
174
174
175
- AutoclickerGui.AddGroupBox(" w226 h45 Section" , " Boundary" )
176
- makeRadioGroup(
177
- " Positioning_BoundaryMode_Radio"
178
- , [
179
- AutoclickerGui.AddRadio(" xs+10 yp+20 v Checked" , SZ_TABLE.Positioning_Boundary_Mode.None),
180
- AutoclickerGui.AddRadio(" yp" , SZ_TABLE.Positioning_Boundary_Mode.Point),
181
- AutoclickerGui.AddRadio(" yp" , SZ_TABLE.Positioning_Boundary_Mode.Box)
182
- ]
183
- , Positioning_ChangedModeSelection
184
- )
185
-
186
- PerBoundaryConfigControls := {
187
- %SZ_TABLE.Positioning_Boundary_Mode.None%: [],
188
- %SZ_TABLE.Positioning_Boundary_Mode.Point%: [
189
- AutoclickerGui.AddText(" xs+10 ys+55 Hidden" , " X:" ),
190
- AutoclickerGui.AddEdit(" xp+20 yp-2 w30 vPositioning_XPos_NumEdit Limit Number Hidden" , " 0" ),
191
- AutoclickerGui.AddText(" xp+45 yp+2 Hidden" , " Y:" ),
192
- AutoclickerGui.AddEdit(" xp+20 yp-2 w30 vPositioning_YPos_NumEdit Limit Number Hidden" , " 0" )
193
- ],
194
- %SZ_TABLE.Positioning_Boundary_Mode.Box%: [
195
- AutoclickerGui.AddText(" xs+10 ys+55 Hidden" , " X min:" ),
196
- AutoclickerGui.AddEdit(" xp+35 yp-2 w30 vPositioning_XMinPos_NumEdit Limit Number Hidden" , " 0" ),
197
- AutoclickerGui.AddText(" xp+45 yp+2 Hidden" , " X max:" ),
198
- AutoclickerGui.AddEdit(" xp+35 yp-2 w30 vPositioning_XMaxPos_NumEdit Limit Number Hidden" , " 0" ),
199
- AutoclickerGui.AddText(" xs+10 yp+30 Hidden" , " Y min:" ),
200
- AutoclickerGui.AddEdit(" xp+35 yp-2 w30 vPositioning_YMinPos_NumEdit Limit Number Hidden" , " 0" ),
201
- AutoclickerGui.AddText(" xp+45 yp+2 Hidden" , " Y max:" ),
202
- AutoclickerGui.AddEdit(" xp+35 yp-2 w30 vPositioning_YMaxPos_NumEdit Limit Number Hidden" , " 0" )
203
- ]
204
- }
205
-
206
- AutoclickerGui.AddGroupBox(" xs yp+44 w226 h45 Section" , " Mouse position relative to" )
207
- makeRadioGroup(
208
- " Positioning_RelativeTo_Radio"
209
- , [
210
- AutoclickerGui.AddRadio(" xs+10 yp+20 vPositioning_RelativeTo_Radio Checked" , " Entire &screen" ),
211
- AutoclickerGui.AddRadio(" yp" , " Focused &window" )
212
- ]
213
- )
175
+ AutoclickerGui.AddListView(" w226 h140 vPositioning_TargetList_ListView -LV0x10 NoSortHdr" , [" #" , " Type" , " Coordinates" ])
176
+ .OnEvent(" ItemSelect" , Positioning_ItemSelectionChanged)
177
+ AutoclickerGui[" Positioning_TargetList_ListView" ].ModifyCol(1 , 25 )
178
+ AutoclickerGui[" Positioning_TargetList_ListView" ].ModifyCol(2 , 40 )
179
+ AutoclickerGui[" Positioning_TargetList_ListView" ].ModifyCol(3 , 157 )
180
+
181
+ AutoclickerGui.AddButton(" xm+10 yp+147 w72 vPositioning_AddTarget_Button" , " &Add" )
182
+ .OnEvent(" Click" , Positioning_AddTarget)
183
+ AutoclickerGui.AddButton(" yp wp vPositioning_RemoveTarget_Button Disabled" , " &Remove" )
184
+ .OnEvent(" Click" , Positioning_RemoveTarget)
185
+ AutoclickerGui.AddButton(" yp wp vPositioning_ClearAllTargets_Button" , " &Clear All" )
186
+ .OnEvent(" Click" , Positioning_ClearAllTargets)
214
187
215
188
AutoclickerGui[" Tab" ].UseTab(SZ_TABLE.Tabs.Hotkeys)
216
189
@@ -282,11 +255,160 @@ Scheduling_StopAfterTimeToggled(*) {
282
255
Scheduling_updateStopAfter()
283
256
}
284
257
285
- Positioning_ChangedModeSelection (radio, * ) {
286
- for key, list in PerBoundaryConfigControls.OwnProps() {
287
- for ctrl in list
288
- ctrl .Visible := key = radio.Text
258
+ Positioning_updateTargetsList (* ) {
259
+ AutoclickerGui[" Positioning_TargetList_ListView" ].Delete ()
260
+
261
+ local cumulativeApplicableClickCount := 1
262
+ for targetData in configured_targets {
263
+ AutoclickerGui[" Positioning_TargetList_ListView" ].Add(
264
+ , cumulativeApplicableClickCount
265
+ , targetData.Type = 1 ? " Point" : " Box"
266
+ , (targetData.Type = 1 ? targetData.X " , " targetData.Y
267
+ : targetData.XMin " , " targetData.YMin " -- " targetData.XMax " , " targetData.YMax)
268
+ . (targetData.RelativeTo = 1 ? " (ABS)" : " (REL)" )
269
+ )
270
+ cumulativeApplicableClickCount + = targetData.ApplicableClickCount
271
+ }
272
+ }
273
+
274
+ Positioning_ItemSelectionChanged (* ) {
275
+ AutoclickerGui[" Positioning_RemoveTarget_Button" ].Enabled := AutoclickerGui[" Positioning_TargetList_ListView" ].GetNext()
276
+ }
277
+
278
+ Positioning_AddTarget (* ) {
279
+ static TargetAdderGui
280
+ static PerTypeCoordControls
281
+ if ! IsSet(TargetAdderGui) {
282
+ TargetAdderGui := Gui (" -SysMenu +Owner" AutoclickerGui.Hwnd, " Add Target" )
283
+
284
+ TargetAdderGui.OnEvent(" Escape" , hideOwnedGui)
285
+ TargetAdderGui.OnEvent(" Close" , hideOwnedGui)
286
+
287
+ TargetAdderGui.AddText(" ym+2" , " Applies for:" )
288
+ TargetAdderGui.AddEdit(" xp+56 yp-2 w45 vTargetApplicableClickCountEdit Limit Number" , " 1" )
289
+ TargetAdderGui.AddText(" xp+48 yp+2" , " contiguous click(s)" )
290
+
291
+ TargetAdderGui.AddGroupBox(" xm w226 h110 Section" , " Coordinates" )
292
+ TargetAdderGui.AddRadio(" xs+10 yp+20 vTargetTypePointRadio Checked" , SZ_TABLE.Positioning_TargetType.Point)
293
+ .OnEvent(" Click" , TargetTypeSelectionChanged)
294
+ TargetAdderGui.AddRadio(" yp vTargetTypeBoxRadio" , SZ_TABLE.Positioning_TargetType.Box)
295
+ .OnEvent(" Click" , TargetTypeSelectionChanged)
296
+
297
+ PerTypeCoordControls := {
298
+ TargetTypePointRadio: [
299
+ TargetAdderGui.AddText(" xs+10 ys+50 Hidden" , " X:" ),
300
+ TargetAdderGui.AddEdit(" xp+20 yp-2 w30 vTargetXPosNumEdit Limit Number Hidden" , " 0" ),
301
+ TargetAdderGui.AddText(" xp+45 yp+2 Hidden" , " Y:" ),
302
+ TargetAdderGui.AddEdit(" xp+20 yp-2 w30 vTargetYPosNumEdit Limit Number Hidden" , " 0" )
303
+ ],
304
+ TargetTypeBoxRadio: [
305
+ TargetAdderGui.AddText(" xs+10 ys+50 Hidden" , " X min:" ),
306
+ TargetAdderGui.AddEdit(" xp+34 yp-2 w30 vTargetXMinPosNumEdit Limit Number Hidden" , " 0" ),
307
+ TargetAdderGui.AddText(" xp+45 yp+2 Hidden" , " Y min:" ),
308
+ TargetAdderGui.AddEdit(" xp+35 yp-2 w30 vTargetYMinPosNumEdit Limit Number Hidden" , " 0" ),
309
+ TargetAdderGui.AddText(" xs+10 yp+30 Hidden" , " X max:" ),
310
+ TargetAdderGui.AddEdit(" xp+34 yp-2 w30 vTargetXMaxPosNumEdit Limit Number Hidden" , " 0" ),
311
+ TargetAdderGui.AddText(" xp+45 yp+2 Hidden" , " Y max:" ),
312
+ TargetAdderGui.AddEdit(" xp+35 yp-2 w30 vTargetYMaxPosNumEdit Limit Number Hidden" , " 0" )
313
+ ]
314
+ }
315
+
316
+ TargetAdderGui.AddGroupBox(" xs yp+40 w145 h59 Section" , " Position relative to" )
317
+ TargetAdderGui.AddRadio(" xs+10 yp+20 vTargetRelativeToScreenRadio Checked" , " Entire &screen (ABS)" )
318
+ .OnEvent(" Click" , TargetRelativeToSelectionChanged)
319
+ TargetAdderGui.AddRadio(" xp vTargetRelativeToFocused" , " Focused &window (REL)" )
320
+ .OnEvent(" Click" , TargetRelativeToSelectionChanged)
321
+
322
+ TargetAdderGui.AddButton(" ys+6 w80 Default" , " OK" )
323
+ .OnEvent(" Click" , Submit )
324
+ TargetAdderGui.AddButton(" xp wp" , " Cancel" )
325
+ .OnEvent(" Click" , (* ) => hideOwnedGui(TargetAdderGui))
326
+
327
+ TargetAdderGui.AddStatusBar(" vStatusBar" )
328
+ TargetAdderGui[" StatusBar" ].SetParts(40 )
329
+ TargetAdderGui[" StatusBar" ].SetText(" (ABS)" )
330
+ TargetAdderGui[" StatusBar" ].SetText(" X=? Y=?" , 2 , 2 )
331
+
332
+ add_log(" Created target adder GUI" )
333
+
334
+ TargetTypeSelectionChanged(TargetAdderGui[" TargetTypePointRadio" ])
335
+ }
336
+
337
+ TargetAdderGui[" TargetApplicableClickCountEdit" ].Value := 1
338
+ TargetAdderGui[" TargetXPosNumEdit" ].Value := 0
339
+ TargetAdderGui[" TargetYPosNumEdit" ].Value := 0
340
+ TargetAdderGui[" TargetXMinPosNumEdit" ].Value := 0
341
+ TargetAdderGui[" TargetYMinPosNumEdit" ].Value := 0
342
+ TargetAdderGui[" TargetXMaxPosNumEdit" ].Value := 0
343
+ TargetAdderGui[" TargetYMaxPosNumEdit" ].Value := 0
344
+ showGuiAtAutoclickerGuiPos(TargetAdderGui)
345
+ SetTimer updateTargetAdderGuiStatusBar, 100
346
+
347
+ updateTargetAdderGuiStatusBar () {
348
+ CoordMode " Mouse" , TargetAdderGui[" TargetRelativeToScreenRadio" ].Value = 1 ? " Screen" : " Client"
349
+ local mouseX
350
+ local mouseY
351
+ MouseGetPos & mouseX, & mouseY
352
+ TargetAdderGui[" StatusBar" ].SetText(Format (" X={} Y={}" , mouseX, mouseY), 2 , 2 )
353
+ if ! ControlGetVisible(TargetAdderGui.Hwnd, " ahk_id " TargetAdderGui.Hwnd)
354
+ SetTimer , 0 ; mark timer for deletion
355
+ }
356
+
357
+ TargetTypeSelectionChanged (radio, * ) {
358
+ for key, list in PerTypeCoordControls.OwnProps() {
359
+ for ctrl in list
360
+ ctrl .Visible := key = radio.Name
361
+ }
362
+ }
363
+
364
+ TargetRelativeToSelectionChanged (radio, * ) {
365
+ TargetAdderGui[" StatusBar" ].SetText(radio.Name = " TargetRelativeToScreenRadio" ? " (ABS)" : " (REL)" )
366
+ }
367
+
368
+ Submit (* ) {
369
+ hideOwnedGui(TargetAdderGui)
370
+
371
+ local targetData := {
372
+ ApplicableClickCount: TargetAdderGui[" TargetApplicableClickCountEdit" ].Value,
373
+ Type : TargetAdderGui[" TargetTypePointRadio" ].Value = 1 ? 1 : 2 ,
374
+ RelativeTo: TargetAdderGui[" TargetRelativeToScreenRadio" ].Value = 1 ? 1 : 2
375
+ }
376
+ if TargetAdderGui[" TargetTypePointRadio" ].Value = 1 {
377
+ targetData.X := Number(TargetAdderGui[" TargetXPosNumEdit" ].Value)
378
+ targetData.Y := Number(TargetAdderGui[" TargetYPosNumEdit" ].Value)
379
+ } else {
380
+ targetData.XMin := Number(TargetAdderGui[" TargetXMinPosNumEdit" ].Value)
381
+ targetData.YMin := Number(TargetAdderGui[" TargetYMinPosNumEdit" ].Value)
382
+ targetData.XMax := Number(TargetAdderGui[" TargetXMaxPosNumEdit" ].Value)
383
+ targetData.YMax := Number(TargetAdderGui[" TargetYMaxPosNumEdit" ].Value)
384
+ }
385
+ configured_targets.Push(targetData)
386
+
387
+ Positioning_updateTargetsList()
388
+ Positioning_ItemSelectionChanged()
389
+ }
390
+ }
391
+
392
+ Positioning_RemoveTarget (* ) {
393
+ add_log " Starting targets removal"
394
+ local rowNum := 0
395
+ local nRemoved := 0
396
+ Loop {
397
+ rowNum := AutoclickerGui[" Positioning_TargetList_ListView" ].GetNext(rowNum)
398
+ if ! rowNum
399
+ break
400
+ add_log " Removing target #" rowNum
401
+ configured_targets.RemoveAt(rowNum - nRemoved++ )
289
402
}
403
+
404
+ Positioning_updateTargetsList()
405
+ Positioning_ItemSelectionChanged()
406
+ }
407
+
408
+ Positioning_ClearAllTargets (* ) {
409
+ configured_targets.Length := 0
410
+ Positioning_updateTargetsList()
411
+ Positioning_ItemSelectionChanged()
290
412
}
291
413
292
414
Hotkeys_updateHotkeyBindings () {
0 commit comments