I use a combination of:
Rain8Net relay boxes (for valves and to control pump relays)
MainLobby Server - running on a PC
MLComDevice plugin (supporting the Rain8Net boxes via RS232)
MLComDevice plugin (supporting the WGL W80032 RF receiver via RS232)
X10 Palm Pad RF transmitter
Basically, when I am outside fiddling with sprinkler heads, I can hit the X10 Palm pad that transmits to the W800R32 receiver. MLComDevice then interprets the serial data which "tells" MainLobby Server that "Someone just hit the "A1" button On". MLServer is configured to listen for that A1 command. It responds by telling MLComDevice "go tell relay 3 on Rain8Net box 2 to turn on".
Of course for daily use, there is a schedule for regular watering. There is also a touchscreen where the user can interact with the system from indoors.