code: public function generate()
  	{
  		if (empty($this->arrOptions) || !\is_array($this->arrOptions))
  		{
  			return '';
  		}
  
  		$rows = ceil(\count($this->arrOptions) / $this->intCols);
  		$return = '<table id="ctrl_'.$this->strName.'" class="tl_radio_table'.(($this->strClass != '') ? ' ' . $this->strClass : '').'">';
  
  		for ($i=0; $i<$rows; $i++)
  		{
  			$return .= '
      <tr>';
  
  			// Add cells
  			for ($j=($i*$this->intCols); $j<(($i+1)*$this->intCols); $j++)
  			{
  				$value = $this->arrOptions[$j]['value'];
  				$label = $this->arrOptions[$j]['label'];
  
  				if (\strlen($value))
  				{
  					$label = Image::getHtml($value.'.svg', $label, 'title="'.StringUtil::specialchars($label).'"');
  					$return .= '
        <td><input type="radio" name="'.$this->strName.'" id="'.$this->strName.'_'.$i.'_'.$j.'" class="tl_radio" value="'.StringUtil::specialchars($value).'" onfocus="Backend.getScrollOffset()"'.$this->isChecked($this->arrOptions[$j]).$this->getAttributes().'> <label for="'.$this->strName.'_'.$i.'_'.$j.'">'.$label.'</label></td>';
  				}
  
  				// Else return an empty cell
  				else
  				{
  					$return .= '
        <td></td>';
  				}
  			}
  
  			// Close row
  			$return .= '
      </tr>';
  		}
  
  		return $return . '
    </table>';
  	}
docs: Generate the widget and return it as string
  
  @return string