X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fservice%2Flistboxservice.cpp;h=074b8cd061ebad70a59b2ba2798b4cb666870971;hp=9de88c145258ea4e9565c7f02c31e0be628c34fc;hb=74f5884fdc5a23465cf40c27b5c069ff7d882746;hpb=2afd30fecf3ab4393dd47f905685151b56db0a22 diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index 9de88c1..074b8cd 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -99,6 +99,48 @@ void eListboxServiceContent::getCurrent(eServiceReference &ref) ref = eServiceReference(); } +void eListboxServiceContent::getPrev(eServiceReference &ref) +{ + if (cursorValid()) + { + list::iterator cursor(m_cursor); + if (cursor == m_list.begin()) + { + cursor = m_list.end(); + } + ref = *(--cursor); + } + else + ref = eServiceReference(); +} + +void eListboxServiceContent::getNext(eServiceReference &ref) +{ + if (cursorValid()) + { + list::iterator cursor(m_cursor); + cursor++; + if (cursor == m_list.end()) + { + cursor = m_list.begin(); + } + ref = *(cursor); + } + else + ref = eServiceReference(); +} + +PyObject *eListboxServiceContent::getList() +{ + ePyObject result = PyList_New(m_list.size()); + int pos=0; + for (list::iterator it(m_list.begin()); it != m_list.end(); ++it) + { + PyList_SET_ITEM(result, pos++, NEW_eServiceReference(*it)); + } + return result; +} + int eListboxServiceContent::getNextBeginningWithChar(char c) { // printf("Char: %c\n", c); @@ -528,14 +570,18 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const eServiceReference ref = *m_cursor; bool isMarker = ref.flags & eServiceReference::isMarker; bool isPlayable = !(ref.flags & eServiceReference::isDirectory || isMarker); + bool paintProgress = false; ePtr evt; + bool serviceAvail = true; + if (!marked && isPlayable && service_info && m_is_playable_ignore.valid() && !service_info->isPlayable(*m_cursor, m_is_playable_ignore)) { if (m_color_set[serviceNotAvail]) painter.setForegroundColor(m_color[serviceNotAvail]); else painter.setForegroundColor(gRGB(0xbbbbbb)); + serviceAvail = false; } if (selected && local_style && local_style->m_selection) @@ -581,16 +627,26 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const { if (service_info) service_info->getName(*m_cursor, text); +#ifdef USE_LIBVUGLES2 + painter.setFlush(text == ""); +#endif break; } case celServiceInfo: { - if ( isPlayable && (evt || !service_info->getEvent(*m_cursor, evt)) ) + if ( isPlayable && !service_info->getEvent(*m_cursor, evt) ) { std::string name = evt->getEventName(); if (!name.length()) continue; text = '(' + evt->getEventName() + ')'; + if (serviceAvail) + { + if (!selected && m_color_set[serviceDescriptionColor]) + painter.setForegroundColor(m_color[serviceDescriptionColor]); + else if (selected && m_color_set[serviceDescriptionColorSelected]) + painter.setForegroundColor(m_color[serviceDescriptionColorSelected]); + } } else continue; @@ -681,59 +737,60 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const } else if (e == celServiceEventProgressbar) { - int p = celServiceEventProgressbar; - eRect area = m_element_position[p]; + eRect area = m_element_position[celServiceEventProgressbar]; if (area.width() > 0 && (isPlayable || isMarker)) { - if ( isPlayable && service_info && !service_info->getEvent(*m_cursor, evt) ) - { - if (!selected && m_color_set[serviceEventProgressbarBorderColor]) - painter.setForegroundColor(m_color[serviceEventProgressbarBorderColor]); - else if (selected && m_color_set[serviceEventProgressbarBorderColorSelected]) - painter.setForegroundColor(m_color[serviceEventProgressbarBorderColorSelected]); - - int border = 1; - int progressH = 6; - int progressX = area.left() + offset.x(); - int progressW = area.width() - 2 * border; - int progressT = offset.y() + (m_itemsize.height() - progressH - 2*border) / 2; - - // paint progressbar frame - painter.fill(eRect(progressX, progressT, area.width(), border)); - painter.fill(eRect(progressX, progressT + border, border, progressH)); - painter.fill(eRect(progressX, progressT + progressH + border, area.width(), border)); - painter.fill(eRect(progressX + area.width() - border, progressT + border, border, progressH)); - - // calculate value - time_t now = time(0); - int value = progressW * (now - evt->getBeginTime()) / evt->getDuration(); - - eRect tmp = eRect(progressX + border, progressT + border, value, progressH); - ePtr &pixmap = m_pixmaps[picServiceEventProgressbar]; - if (pixmap) - { - area.moveBy(offset); - painter.clip(area); - painter.blit(pixmap, ePoint(progressX + border, progressT + border), tmp, gPainter::BT_ALPHATEST); - painter.clippop(); - } - else - { - if (!selected && m_color_set[serviceEventProgressbarColor]) - painter.setForegroundColor(m_color[serviceEventProgressbarColor]); - else if (selected && m_color_set[serviceEventProgressbarColorSelected]) - painter.setForegroundColor(m_color[serviceEventProgressbarColorSelected]); - painter.fill(tmp); - } - } + // we schedule it to paint it as last element.. so we dont need to reset fore/background color + paintProgress = isPlayable; xoffset = area.width() + 10; } } } if (selected && (!local_style || !local_style->m_selection)) style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry); + if (paintProgress && evt) + { + eRect area = m_element_position[celServiceEventProgressbar]; + if (!selected && m_color_set[serviceEventProgressbarBorderColor]) + painter.setForegroundColor(m_color[serviceEventProgressbarBorderColor]); + else if (selected && m_color_set[serviceEventProgressbarBorderColorSelected]) + painter.setForegroundColor(m_color[serviceEventProgressbarBorderColorSelected]); + + int border = 1; + int progressH = 6; + int progressX = area.left() + offset.x(); + int progressW = area.width() - 2 * border; + int progressT = offset.y() + (m_itemsize.height() - progressH - 2*border) / 2; + + // paint progressbar frame + painter.fill(eRect(progressX, progressT, area.width(), border)); + painter.fill(eRect(progressX, progressT + border, border, progressH)); + painter.fill(eRect(progressX, progressT + progressH + border, area.width(), border)); + painter.fill(eRect(progressX + area.width() - border, progressT + border, border, progressH)); + + // calculate value + time_t now = time(0); + int value = progressW * (now - evt->getBeginTime()) / evt->getDuration(); + + eRect tmp = eRect(progressX + border, progressT + border, value, progressH); + ePtr &pixmap = m_pixmaps[picServiceEventProgressbar]; + if (pixmap) + { + area.moveBy(offset); + painter.clip(area); + painter.blit(pixmap, ePoint(progressX + border, progressT + border), tmp, gPainter::BT_ALPHATEST); + painter.clippop(); + } + else + { + if (!selected && m_color_set[serviceEventProgressbarColor]) + painter.setForegroundColor(m_color[serviceEventProgressbarColor]); + else if (selected && m_color_set[serviceEventProgressbarColorSelected]) + painter.setForegroundColor(m_color[serviceEventProgressbarColorSelected]); + painter.fill(tmp); + } + } } - painter.clippop(); }