@@ -172,45 +172,18 @@ AutoclickerGui.AddDropDownList("xp+62 yp-2 w140 vScheduling_PostStopAction_DropD
172172
173173AutoclickerGui[" Tab" ].UseTab(SZ_TABLE.Tabs.Positioning)
174174
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)
214187
215188AutoclickerGui[" Tab" ].UseTab(SZ_TABLE.Tabs.Hotkeys)
216189
@@ -282,11 +255,160 @@ Scheduling_StopAfterTimeToggled(*) {
282255 Scheduling_updateStopAfter()
283256}
284257
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++ )
289402 }
403+
404+ Positioning_updateTargetsList()
405+ Positioning_ItemSelectionChanged()
406+ }
407+
408+ Positioning_ClearAllTargets (* ) {
409+ configured_targets.Length := 0
410+ Positioning_updateTargetsList()
411+ Positioning_ItemSelectionChanged()
290412}
291413
292414Hotkeys_updateHotkeyBindings () {
0 commit comments