6

When UI Scripting in Applescript, you might want to tick a checkbox:

tell application "System Events"
  tell process "Example Process"
    click checkbox "Example Checkbox" of sheet 1 of window 1
  end tell
end tell

This has a problem. If the example checkbox is already ticked, you actually un-tick the box. How can you "tick the checkbox only if it's not already ticked"?

Kamil Kisiel
  • 19,723
  • 11
  • 46
  • 56
Roberto Aloi
  • 30,570
  • 21
  • 75
  • 112

2 Answers2

17

The various UI items have properties you can test. For checkboxes, the value property will be 1 or 0 depending on whether it is checked or not, so you can use the value directly or coerce to a boolean, for example:

tell application "System Events" to tell process "Example Process"
    set theCheckbox to checkbox "Example Checkbox" of sheet 1 of window 1
    tell theCheckbox
        if not (its value as boolean) then click theCheckbox
    end tell
end tell
Kamil Kisiel
  • 19,723
  • 11
  • 46
  • 56
3

The Answer from Red_menace isn't fully clear, you could think making such thing like this:

set theCheckbox to checkbox "Random order" of tab group 1 of window "Desktop & Screen Saver"
            tell theCheckbox
                if false then click theCheckbox -- if false does not reference the 'theCheckbox', it is simply doing nothing
            end tell

Then it will never compute the if clause.

Therefore I changed to middle part to

set theCheckbox to checkbox "Change picture:" of tab group 1 of window "Desktop & Screen Saver"
        tell theCheckbox
            set checkboxStatus to value of theCheckbox as boolean
            if checkboxStatus is false then click theCheckbox                   
        end tell

And then it worked.

Binarian
  • 12,296
  • 8
  • 53
  • 84