add new multicontent TYPE_PROGRESS_PIXMAP
authorghost <andreas.monzner@multimedia-labs.de>
Wed, 26 May 2010 11:50:46 +0000 (13:50 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Wed, 26 May 2010 11:51:30 +0000 (13:51 +0200)
this fixes bug #539

lib/gui/elistboxcontent.cpp
lib/gui/elistboxcontent.h

index b9e71df8d8637404575660ff0a9516ac24709bcc..7bb84c3d0a1cf828c7d6569bfd29dfb98e0e9d03 100644 (file)
@@ -856,6 +856,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                }
                                break;
                        }
+                       case TYPE_PROGRESS_PIXMAP: // Progress
+                       /*
+                               (1, x, y, width, height, filled_percent, pixmap [, borderWidth, foreColor, backColor, backColorSelected] )
+                       */
                        case TYPE_PROGRESS: // Progress
                        {
                        /*
@@ -866,41 +870,55 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                                        pwidth = PyTuple_GET_ITEM(item, 3),
                                                        pheight = PyTuple_GET_ITEM(item, 4),
                                                        pfilled_perc = PyTuple_GET_ITEM(item, 5),
-                                                       pborderWidth, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected;
-
-                               if (!(px && py && pwidth && pheight && pfilled_perc))
+                                                       ppixmap, pborderWidth, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected;
+                               int idx = 6;
+                               if (type == TYPE_PROGRESS)
                                {
-                                       eDebug("eListboxPythonMultiContent received too small tuple (must be (TYPE_PROGRESS, x, y, width, height, filled percent [,border width, foreColor, backColor, backColorSelected]))");
-                                       goto error_out;
+                                       if (!(px && py && pwidth && pheight && pfilled_perc))
+                                       {
+                                               eDebug("eListboxPythonMultiContent received too small tuple (must be (TYPE_PROGRESS, x, y, width, height, filled percent [,border width, foreColor, backColor, backColorSelected]))");
+                                               goto error_out;
+                                       }
+                               }
+                               else
+                               {
+                                       ppixmap = PyTuple_GET_ITEM(item, idx++);
+                                       if (ppixmap == Py_None)
+                                               continue;
+                                       if (!(px && py && pwidth && pheight && pfilled_perc, ppixmap))
+                                       {
+                                               eDebug("eListboxPythonMultiContent received too small tuple (must be (TYPE_PROGRESS_PIXMAP, x, y, width, height, filled percent, pixmap, [,border width, foreColor, backColor, backColorSelected]))");
+                                               goto error_out;
+                                       }
                                }
 
-                               if (size > 6)
+                               if (size > idx)
                                {
-                                       pborderWidth = PyTuple_GET_ITEM(item, 6);
+                                       pborderWidth = PyTuple_GET_ITEM(item, idx++);
                                        if (pborderWidth == Py_None)
                                                pborderWidth = ePyObject();
                                }
-                               if (size > 7)
+                               if (size > idx)
                                {
-                                       pforeColor = PyTuple_GET_ITEM(item, 7);
+                                       pforeColor = PyTuple_GET_ITEM(item, idx++);
                                        if (pforeColor == Py_None)
                                                pforeColor = ePyObject();
                                }
-                               if (size > 8)
+                               if (size > idx)
                                {
-                                       pforeColorSelected = PyTuple_GET_ITEM(item, 8);
+                                       pforeColorSelected = PyTuple_GET_ITEM(item, idx++);
                                        if (pforeColorSelected == Py_None)
                                                pforeColorSelected=ePyObject();
                                }
-                               if (size > 9)
+                               if (size > idx)
                                {
-                                       pbackColor = PyTuple_GET_ITEM(item, 9);
+                                       pbackColor = PyTuple_GET_ITEM(item, idx++);
                                        if (pbackColor == Py_None)
                                                pbackColor=ePyObject();
                                }
-                               if (size > 10)
+                               if (size > idx)
                                {
-                                       pbackColorSelected = PyTuple_GET_ITEM(item, 10);
+                                       pbackColorSelected = PyTuple_GET_ITEM(item, idx++);
                                        if (pbackColorSelected == Py_None)
                                                pbackColorSelected=ePyObject();
                                }
@@ -942,12 +960,24 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
                                rect.setRect(x+width-bwidth, y+bwidth, bwidth, height-bwidth);
                                painter.fill(rect);
 
-                               // progress
                                rect.setRect(x+bwidth, y+bwidth, (width-bwidth*2) * filled / 100, height-bwidth*2);
-                               painter.fill(rect);
 
-                               painter.clippop();
+                               // progress
+                               if (ppixmap)
+                               {
+                                       ePtr<gPixmap> pixmap;
+                                       if (SwigFromPython(pixmap, ppixmap))
+                                       {
+                                               eDebug("eListboxPythonMultiContent (Pixmap) get pixmap failed");
+                                               painter.clippop();
+                                               continue;
+                                       }
+                                       painter.blit(pixmap, rect.topLeft(), rect, 0);
+                               }
+                               else
+                                       painter.fill(rect);
 
+                               painter.clippop();
                                break;
                        }
                        case TYPE_PIXMAP_ALPHABLEND:
index d3d2a08937814e15ae343702d3528beb76b02a57..2649c097c7f23bcfbb8ba281adf242219e92041f 100644 (file)
@@ -69,7 +69,7 @@ class eListboxPythonMultiContent: public eListboxPythonStringContent
 public:
        eListboxPythonMultiContent();
        ~eListboxPythonMultiContent();
-       enum { TYPE_TEXT, TYPE_PROGRESS, TYPE_PIXMAP, TYPE_PIXMAP_ALPHATEST, TYPE_PIXMAP_ALPHABLEND };
+       enum { TYPE_TEXT, TYPE_PROGRESS, TYPE_PIXMAP, TYPE_PIXMAP_ALPHATEST, TYPE_PIXMAP_ALPHABLEND, TYPE_PROGRESS_PIXMAP };
        void paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected);
        int currentCursorSelectable();
        void setList(SWIG_PYOBJECT(ePyObject) list);