update scrollbar in timerlist when a entry is removed
[enigma2.git] / lib / gui / elistboxcontent.cpp
index 9bfe81dfb10f5b0e5c76aec3dbfbe06b3b3d270b..191bc7e1af0ee5717d13504508a834f8e98bfee8 100644 (file)
@@ -262,7 +262,8 @@ void eListboxPythonStringContent::invalidate()
                int s = size();
                if ( m_cursor >= s )
                        m_listbox->moveSelectionTo(s?s-1:0);
-               m_listbox->invalidate();
+               else
+                       m_listbox->invalidate();
        }
 }
 
@@ -504,33 +505,42 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
 {
        if (selected && sel_clip.valid())
        {
-               painter.clip(rc-sel_clip);
-               if (pbackColor)
+               gRegion part = rc - sel_clip;
+               if (!part.empty())
                {
-                       int color = PyInt_AsLong(pbackColor);
-                       painter.setBackgroundColor(gRGB(color));
-               } // transparent background?
-               // if we have a local background color set, use that. 
-               else if (local_style && local_style->m_background_color_set)
-                       painter.setBackgroundColor(local_style->m_background_color);
-               else
+                       painter.clip(part);
                        style.setStyle(painter, eWindowStyle::styleListboxNormal);
-               if (local_style && local_style->m_transparent_background)
-                       ;
-               else
-                       painter.clear();
-               painter.clippop();
-               painter.clip(rc&sel_clip);
-               style.setStyle(painter, eWindowStyle::styleListboxSelected);
-               if (pbackColorSelected)
+                       if (pbackColor)
+                       {
+                               int color = PyInt_AsLong(pbackColor);
+                               painter.setBackgroundColor(gRGB(color));
+                       } // transparent background?
+                       // if we have a local background color set, use that. 
+                       else if (local_style && local_style->m_background_color_set)
+                               painter.setBackgroundColor(local_style->m_background_color);
+                       if (!pbackColor && local_style && local_style->m_transparent_background)
+                               ;
+                       else
+                               painter.clear();
+                       painter.clippop();
+                       selected = 0;
+               }
+               part = rc & sel_clip;
+               if (!part.empty())
                {
-                       int color = PyInt_AsLong(pbackColorSelected);
-                       painter.setBackgroundColor(gRGB(color));
+                       painter.clip(part);
+                       style.setStyle(painter, eWindowStyle::styleListboxSelected);
+                       if (pbackColorSelected)
+                       {
+                               int color = PyInt_AsLong(pbackColorSelected);
+                               painter.setBackgroundColor(gRGB(color));
+                       }
+                       else if (local_style && local_style->m_background_color_selected_set)
+                               painter.setBackgroundColor(local_style->m_background_color_selected);
+                       painter.clear();
+                       painter.clippop();
+                       selected = 1;
                }
-               else if (local_style && local_style->m_background_color_selected_set)
-                       painter.setBackgroundColor(local_style->m_background_color_selected);
-               painter.clear();
-               painter.clippop();
        }
        else
        {
@@ -557,7 +567,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
                        else if (local_style && local_style->m_background_color_set)
                                painter.setBackgroundColor(local_style->m_background_color);
                        /* if we have no transparent background */
-                       if (local_style && local_style->m_transparent_background)
+                       if (!pbackColor && local_style && local_style->m_transparent_background)
                                ;
                        else
                                painter.clear();
@@ -567,7 +577,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l
        {
                if (pforeColorSelected)
                {
-                       int color = PyInt_AsLong(pforeColor);
+                       int color = PyInt_AsLong(pforeColorSelected);
                        painter.setForegroundColor(gRGB(color));
                }
                /* if we have a local foreground color set, use that. */
@@ -600,7 +610,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                local_style = m_listbox->getLocalStyle();
 
        painter.clip(itemregion);
-
        clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip);
 
        ePyObject items;
@@ -638,7 +647,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                for (int i = 1; i < size; ++i)
                {
                        ePyObject item = PyList_GET_ITEM(items, i); // borrowed reference!
-                       bool reset_colors=false;
 
                        if (!item)
                        {
@@ -738,11 +746,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
 
                                eRect rect(x+bwidth, y+bwidth, width-bwidth*2, height-bwidth*2);
                                painter.clip(rect);
-                               if (pbackColor || pbackColorSelected || pforeColor || pforeColorSelected)
+
                                {
                                        gRegion rc(rect);
                                        clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip);
-                                       reset_colors=true;
                                }
 
                                painter.setFont(m_font[fnt]);
@@ -759,8 +766,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                                int color = PyInt_AsLong(pborderColor);
                                                painter.setForegroundColor(gRGB(color));
                                        }
-                                       else if (pforeColor) // reset to normal color
-                                               style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
 
                                        rect.setRect(x, y, width, bwidth);
                                        painter.fill(rect);
@@ -836,11 +841,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
 
                                eRect rect(x, y, width, height);
                                painter.clip(rect);
-                               if (pbackColor || pbackColorSelected || pforeColor || pforeColorSelected)
+
                                {
                                        gRegion rc(rect);
                                        clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip);
-                                       reset_colors=true;
                                }
 
                                // border
@@ -910,13 +914,12 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
 
                                eRect rect(x, y, width, height);
                                painter.clip(rect);
-                               if (pbackColor || pbackColorSelected)
+
                                {
                                        gRegion rc(rect);
                                        clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip);
-                                       reset_colors=true;
                                }
-                               
+
                                painter.blit(pixmap, rect.topLeft(), rect, (type == TYPE_PIXMAP_ALPHATEST) ? gPainter::BT_ALPHATEST : 0);
                                painter.clippop();
                                break;
@@ -925,8 +928,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                eWarning("eListboxPythonMultiContent received unknown type (%d)", type);
                                goto error_out;
                        }
-                       if (reset_colors)
-                               style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
                }
        }
 
@@ -1021,3 +1022,9 @@ void eListboxPythonMultiContent::updateClip(gRegion &clip)
        else
                m_old_clip = m_clip = gRegion::invalidRegion();
 }
+
+void eListboxPythonMultiContent::entryRemoved(int idx)
+{
+       if (m_listbox)
+               m_listbox->entryRemoved(idx);
+}