+
+ if (m_is_playable_ignore.valid() && !service_info->isPlayable(*m_cursor, m_is_playable_ignore))
+ painter.setForegroundColor(gRGB(0xbbbbbb));
+
+ for (int e = 0; e < celElements; ++e)
+ {
+ if (!m_element_font[e])
+ continue;
+ int flags=gPainter::RT_VALIGN_CENTER;
+
+ eRect area = m_element_position[e];
+
+ std::string text = "<n/a>";
+
+ switch (e)
+ {
+ case celIcon:
+ // render icon here...
+ continue;
+ case celServiceNumber:
+ {
+ char bla[10];
+ sprintf(bla, "%d", m_numberoffset + m_cursor_number + 1);
+ text = bla;
+ flags|=gPainter::RT_HALIGN_RIGHT;
+ break;
+ }
+ case celServiceName:
+ {
+ if (service_info)
+ service_info->getName(*m_cursor, text);
+ break;
+ }
+ case celServiceInfo:
+ {
+ ePtr<eServiceEvent> evt;
+ if ( !service_info->getEvent(*m_cursor, evt) )
+ text = '(' + evt->getEventName() + ')';
+ else
+ continue;
+ break;
+ }
+ }
+
+ eTextPara *para = new eTextPara(area);
+
+ para->setFont(m_element_font[e]);
+ para->renderString(text);
+
+ if (e == celServiceName)
+ {
+ eRect bbox = para->getBoundBox();
+ int name_width = bbox.width()+10;
+ m_element_position[celServiceInfo].setLeft(area.left()+name_width);
+ m_element_position[celServiceInfo].setTop(area.top());
+ m_element_position[celServiceInfo].setWidth(area.width()-name_width);
+ m_element_position[celServiceInfo].setHeight(area.height());
+ }
+
+ if (flags & gPainter::RT_HALIGN_RIGHT)
+ para->realign(eTextPara::dirRight);
+ else if (flags & gPainter::RT_HALIGN_CENTER)
+ para->realign(eTextPara::dirCenter);
+ else if (flags & gPainter::RT_HALIGN_BLOCK)
+ para->realign(eTextPara::dirBlock);
+
+ ePoint offs = offset;
+
+ if (flags & gPainter::RT_VALIGN_CENTER)
+ {
+ eRect bbox = para->getBoundBox();
+ int vcentered_top = (area.height() - bbox.height()) / 2;
+ int correction = vcentered_top - bbox.top();
+ offs += ePoint(0, correction);
+ }
+
+ painter.renderPara(para, offs);
+ }