X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/665470e4a5597858c1a7f5f8305181640ad9df7b..dc4073de1957503fcd2a7eed055c55a2265d1212:/lib/service/listboxservice.cpp diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index f6d9e78b..bcd6342b 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -8,19 +8,20 @@ void eListboxServiceContent::addService(const eServiceReference &service, bool beforeCurrent) { if (beforeCurrent && m_size) - { m_list.insert(m_cursor, service); - --m_cursor; - } else m_list.push_back(service); ++m_size; + ++m_cursor_number; + if (m_listbox) + m_listbox->entryAdded(m_cursor_number-1); } void eListboxServiceContent::removeCurrent() { if (m_size && m_listbox) { + --m_size; if (m_cursor_number == m_size-1) { m_list.erase(m_cursor--); @@ -28,8 +29,7 @@ void eListboxServiceContent::removeCurrent() } else m_list.erase(m_cursor++); - --m_size; - m_listbox->entryRemoved(m_cursor_number); + m_listbox->entryRemoved(m_cursor_number+1); } } @@ -432,11 +432,9 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const ePtr service_info; m_service_center->info(*m_cursor, service_info); eServiceReference ref = *m_cursor; - bool checkPlayable = - (ref.flags & eServiceReference::flagDirectory) != eServiceReference::flagDirectory || - (ref.flags & eServiceReference::isGroup); + bool isPlayable = !(ref.flags & eServiceReference::isDirectory || ref.flags & eServiceReference::isMarker); - if (checkPlayable && m_is_playable_ignore.valid() && service_info && !service_info->isPlayable(*m_cursor, m_is_playable_ignore)) + if (isPlayable && m_is_playable_ignore.valid() && service_info && !service_info->isPlayable(*m_cursor, m_is_playable_ignore)) painter.setForegroundColor(gRGB(0xbbbbbb)); int xoffset=0; // used as offset when painting the folder/marker symbol @@ -484,7 +482,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const case celServiceInfo: { ePtr evt; - if ( !service_info->getEvent(*m_cursor, evt) ) + if ( service_info && !service_info->getEvent(*m_cursor, evt) ) { std::string name = evt->getEventName(); if (!name.length()) @@ -549,7 +547,15 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const eRect area = m_element_position[p]; int correction = (area.height() - pixmap_size.height()) / 2; - if (m_cursor->flags & eServiceReference::flagDirectory) + if (isPlayable) + { + if (e != celServiceTypePixmap) + continue; + m_element_position[celServiceInfo] = area; + m_element_position[celServiceInfo].setLeft(area.left() + pixmap_size.width() + 8); + m_element_position[celServiceInfo].setWidth(area.width() - pixmap_size.width() - 8); + } + else if (m_cursor->flags & eServiceReference::isDirectory) { if (e != celFolderPixmap) continue; @@ -561,13 +567,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const continue; } else - { - if (e != celServiceTypePixmap) - continue; - m_element_position[celServiceInfo] = area; - m_element_position[celServiceInfo].setLeft(area.left() + pixmap_size.width() + 8); - m_element_position[celServiceInfo].setWidth(area.width() - pixmap_size.width() - 8); - } + eFatal("unknown service type in listboxservice"); area.moveBy(offset); painter.clip(area);