+1 on locale. The GPS location is unreliable.
However, with a couple of free/paid plugins in addition to locale, you will get exactly what you just asked about. No rooting/hacking neccessary.
There is a locale plugin called 'locale buttons', I believe, that you can trigger various settings with a homescreen widget/button.
I have everything set up with locale like so:
-When I'm at home, it detects my home wifi network, and automatically turns off bluetooth and gps.
-Once my home wifi network becomes 'out of range' (which means I'm driving), wifi is disabled, GPS is turned on, bluetooth is turned on, the media volume turns all the way up, and trapster is launched.
-Once I turn my car off, locale detects that bluetooth is no longer available and bluetooth turns off, GPS turns off, WIFI turns on, and trapster kills itself.
-Once I leave my car and start walking to the office, locale sniffs out the wifi network at work, sets my phone to vibrate.
There are a couple other apps like this.
1- Tasker (in beta and unavailable for download), which I am pretty eager to try.
2- Setting Profiles (great app, but no plugin support leaves a few holes in its functionality)
Locale, although not accurate with your 'where-abouts' as far as GPS is concerned, has third party plugin support, which I love. Theres a plugin for just about any event. (including buttons like you originally asked about)