update scrollbar in timerlist when a entry is removed
[enigma2.git] / lib / gui / elistbox.cpp
index b7b1e3ff595a6538e3d571f1a2bb3f532bebaf1e..73fbff3ba94a9ff1c76adf2f2c1c54326312fdc5 100644 (file)
@@ -226,7 +226,6 @@ void eListbox::moveSelection(int dir)
    /* redraw the old and newly selected */
                gRegion inv = eRect(0, m_itemheight * (m_selected-m_top), size().width(), m_itemheight);
                inv |= eRect(0, m_itemheight * (oldsel-m_top), size().width(), m_itemheight);
-               
                invalidate(inv);
        }
 }
@@ -294,6 +293,11 @@ void eListbox::updateScrollBar()
        }
 }
 
+int eListbox::getEntryTop()
+{
+       return (m_selected - m_top) * m_itemheight;
+}
+
 int eListbox::event(int event, void *data, void *data2)
 {
        switch (event)
@@ -318,7 +322,7 @@ int eListbox::event(int event, void *data, void *data2)
                
                gRegion entryrect = eRect(0, 0, size().width(), m_itemheight);
                const gRegion &paint_region = *(gRegion*)data;
-               
+
                for (int y = 0, i = 0; i <= m_items_per_page; y += m_itemheight, ++i)
                {
                        gRegion entry_clip_rect = paint_region & entryrect;
@@ -428,7 +432,10 @@ void eListbox::entryRemoved(int index)
        if (index == m_selected && m_content)
                m_selected = m_content->cursorGet();
 
-       moveSelection(justCheck);
+       if (m_content && m_content->cursorGet() >= m_content->size())
+               moveSelection(moveUp);
+       else
+               moveSelection(justCheck);
 
        if ((m_top <= index) && (index < (m_top + m_items_per_page)))
        {
@@ -479,12 +486,24 @@ void eListbox::setBackgroundColor(gRGB &col)
        m_style.m_background_color_set = 1;
 }
 
+void eListbox::setBackgroundColorSelected(gRGB &col)
+{
+       m_style.m_background_color_selected = col;
+       m_style.m_background_color_selected_set = 1;
+}
+
 void eListbox::setForegroundColor(gRGB &col)
 {
        m_style.m_foreground_color = col;
        m_style.m_foreground_color_set = 1;
 }
 
+void eListbox::setForegroundColorSelected(gRGB &col)
+{
+       m_style.m_foreground_color_selected = col;
+       m_style.m_foreground_color_selected_set = 1;
+}
+
 void eListbox::setBackgroundPicture(ePtr<gPixmap> &pm)
 {
        m_style.m_background = pm;
@@ -495,6 +514,14 @@ void eListbox::setSelectionPicture(ePtr<gPixmap> &pm)
        m_style.m_selection = pm;
 }
 
+void eListbox::invalidate(const gRegion &region)
+{
+       gRegion tmp(region);
+       if (m_content)
+               m_content->updateClip(tmp);
+       eWidget::invalidate(tmp);
+}
+
 struct eListboxStyle *eListbox::getLocalStyle(void)
 {
                /* transparency is set directly in the widget */