Help programming buttonstatechange

I am struggling to find any way to use the button state change to control multiple modes on the LED.

I want to be able to have three different states on the LED.

Solid (LED Constantly on)
Flashing
Dimming

So far I have been able to program for one LED to alter between on and off using this code, but was hoping for some advice or changes to make to add the extra stages.

const int buttonPin = 2; // the pin that the pushbutton is attached to
const int ledPin = 3; // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button

void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}

void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
// if the current state is LOW then the button
// wend from on to off:
Serial.println("off");
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;

// turns on the LED everytime button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter % 1== 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}

Thanks in andvance for any help.

Start with

#define LED_SOLID 0
#define LED_FLASH 1
#define LED_DIMMING 2

int led_state = LED_SOLID ;

and use the button change to update the state. Then use the state
to determine how the LED is driven.

I also think you really have 4 states, since dimming implies the LED eventually
reaches LED_OFF...