Looping A Case From IR Remote input?

So the color code below is just the example code from “Ultimate Starter Kit example 3 (rgb).” Using the two void example (showSpectrum) and (showRGB) from the Kit’s code, i assigned them to two different buttons on my remote control. I understand that with how my code is, by pressing the button, it will only play the colors once instead of looping. My question is how do you loop the case, thus making the color change forever until I press another button?

#include <IRremote.h>

const int IRPin = 2;
const int Rled = 3;
const int Gled = 4;
const int Bled = 5;

IRrecv irrecv(IRPin); // create instance of 'irrecv'
decode_results results;

void setup()

{  
  pinMode(IRPin, INPUT);
  pinMode(Rled, OUTPUT);
  pinMode(Gled, OUTPUT);
  pinMode(Bled, OUTPUT);
  
  irrecv.enableIRIn();
  Serial.begin(9600);
}

void loop()
{
  if (irrecv.decode(&results))
  {
    translate();
    irrecv.resume();
  }
}

void translate()
{
  switch(results.value)
  {
    case 0x30DFA05F:
    {
    digitalWrite(Rled, LOW);
    digitalWrite(Gled, LOW);
    digitalWrite(Bled, LOW);

    delay(1000);

  // Red (turn just the red LED on):

    digitalWrite(Rled, HIGH);
    digitalWrite(Gled, LOW);
    digitalWrite(Bled, LOW);

    delay(1000);

  // Green (turn just the green LED on):

    digitalWrite(Rled, LOW);
    digitalWrite(Gled, HIGH);
    digitalWrite(Bled, LOW);

  delay(1000);

  // Blue (turn just the blue LED on):

    digitalWrite(Rled, LOW);
    digitalWrite(Gled, LOW);
    digitalWrite(Bled, HIGH);

    delay(1000);

  // Yellow (turn red and green on):

    digitalWrite(Rled, HIGH);
    digitalWrite(Gled, HIGH);
    digitalWrite(Bled, LOW);

    delay(1000);

  // Cyan (turn green and blue on):

    digitalWrite(Rled, LOW);
    digitalWrite(Gled, HIGH);
    digitalWrite(Bled, HIGH);

    delay(1000);

  // Purple (turn red and blue on):

    digitalWrite(Rled, HIGH);
    digitalWrite(Gled, LOW);
    digitalWrite(Bled, HIGH);

    delay(1000);

  // White (turn all the LEDs on):

    digitalWrite(Rled, HIGH);
    digitalWrite(Gled, HIGH);
    digitalWrite(Bled, HIGH);

    delay(1000);
    }
    break;

    case 0x30DF609F:
    int x;
    for (x = 0; x < 768; x++)
    {
      showRGB(x);
      delay(10);
    }
    break;
  }
}
void showRGB(int color)
{
  int redIntensity;
  int greenIntensity;
  int blueIntensity;
  if (color <= 255)
  {
    redIntensity = 255 - color;
    greenIntensity = color;
    blueIntensity = 0;
  }
  else if (color <= 511)
  {
    redIntensity = 0;
    greenIntensity = 255 - (color - 256);
    blueIntensity = (color - 256);
  }
  else
  {
    redIntensity = (color - 512);
    greenIntensity = 0;
    blueIntensity = 255 - (color - 512);
  }
  analogWrite(Rled, redIntensity);
  analogWrite(Bled, blueIntensity);
  analogWrite(Gled, greenIntensity);
}