X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/b32851030de5d3706883afa87598cba8a8226f5d..d4f15db8bd37e87b781dbd36879c64618fd18e3a:/lib/service/listboxservice.cpp diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index 33afaffe..f6d9e78b 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -10,11 +10,11 @@ void eListboxServiceContent::addService(const eServiceReference &service, bool b if (beforeCurrent && m_size) { m_list.insert(m_cursor, service); - ++m_size; --m_cursor; } else m_list.push_back(service); + ++m_size; } void eListboxServiceContent::removeCurrent() @@ -22,7 +22,10 @@ void eListboxServiceContent::removeCurrent() if (m_size && m_listbox) { if (m_cursor_number == m_size-1) + { m_list.erase(m_cursor--); + --m_cursor_number; + } else m_list.erase(m_cursor++); --m_size; @@ -45,15 +48,16 @@ void eListboxServiceContent::setRoot(const eServiceReference &root, bool justSet m_root = root; if (justSet) + { + m_lst=0; return; + } assert(m_service_center); - ePtr lst; - if (m_service_center->list(m_root, lst)) + if (m_service_center->list(m_root, m_lst)) eDebug("no list available!"); - else - if (lst->getContent(m_list)) - eDebug("getContent failed"); + else if (m_lst->getContent(m_list)) + eDebug("getContent failed"); FillFinished(); } @@ -224,10 +228,11 @@ void eListboxServiceContent::setPixmap(int type, ePtr &pic) void eListboxServiceContent::sort() { - ePtr lst; - if (!m_service_center->list(m_root, lst)) + if (!m_lst) + m_service_center->list(m_root, m_lst); + if (m_lst) { - m_list.sort(iListableServiceCompare(lst)); + m_list.sort(iListableServiceCompare(m_lst)); /* FIXME: is this really required or can we somehow keep the current entry? */ cursorHome(); if (m_listbox) @@ -301,13 +306,12 @@ int eListboxServiceContent::setCurrentMarked(bool state) m_listbox->entryChanged(m_cursor_number); if (!state) { - ePtr lst; - if (m_service_center->list(m_root, lst)) - eDebug("no list available!"); - else + if (!m_lst) + m_service_center->list(m_root, m_lst); + if (m_lst) { ePtr list; - if (lst->startEdit(list)) + if (m_lst->startEdit(list)) eDebug("no editable list"); else { @@ -326,6 +330,8 @@ int eListboxServiceContent::setCurrentMarked(bool state) } } } + else + eDebug("no list available!"); } } @@ -425,8 +431,12 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const /* get service information */ 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); - if (m_is_playable_ignore.valid() && service_info && !service_info->isPlayable(*m_cursor, m_is_playable_ignore)) + if (checkPlayable && 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