diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2003-10-17 15:35:43 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2003-10-17 15:35:43 +0000 |
| commit | fc2f5b2cd655f1391f2abda1b39e37cdec98a951 (patch) | |
| tree | 312efcea86a319de407a7c314fb981fb1c71019a /lib/gui/eservicegrid.cpp | |
| download | enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip | |
Initial revision
Diffstat (limited to 'lib/gui/eservicegrid.cpp')
| -rw-r--r-- | lib/gui/eservicegrid.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/gui/eservicegrid.cpp b/lib/gui/eservicegrid.cpp new file mode 100644 index 00000000..f80c6734 --- /dev/null +++ b/lib/gui/eservicegrid.cpp @@ -0,0 +1,74 @@ +#include <lib/gui/eservicegrid.h> + +eServiceGrid::eServiceGrid(eWidget *parent): eWidget(parent) +{ + para=0; + grid=0; + + elemsize=eSize(16, 16); +} + +void eServiceGrid::createGrid(eSize gs) +{ + gridsize=gs; + if (grid) + delete[] grid; + if (!(gridsize.x() && gridsize.y())) + return; + grid=new (eService*)[gridsize.x()*gridsize.y()]; +} + +eService **eServiceGrid::allocateGrid(eSize size) +{ + for (int y=0; y<gridsize.height(); y++) + for (int x=0; x<gridsize.width(); x++) + { + int ok=1; + for (int cy=0; ok && cy<size.height(); cy++) + for (int cx=0; ok && cx<size.width(); cx++) + if (grid[gridsize.width()*(y+cy)+x+cx]) + { + ok=0; + break; + } + if (ok) + return grid+gridsize.width()*(y+cy)+x+cx; + } + return 0; +} + +void eServiceGrid::setGridSize(int gx, int gy) +{ + createGrid(eSize(gx, gy)); +} + +void eServiceGrid::addService(eService *service) +{ + eTextPara temp; + temp.setFont(font); + temp.renderText(service->service_name); + eSize size=temp.getExtends(); + eSize gsize=eSize((size.width()+elemsize.width()-1)/elemsize.width(), (size.height()+elemsize.height()-1)/elemsize.height()); + eService **sp=allocateGrid(gsize); + if (!sp) + return; + for (int cy=0; ok && cy<gsize.height(); cy++) + for (int cx=0; ok && cx<gsize.width(); cx++) + sp[cy*gridsize.width()+cx]=service; +} + + +void eServiceGrid::validate() +{ + eService **gp=grid; + for (int y=0; y<gridsize.height(); y++) + for (int x=0; x<gridsize.width(); x++) + { + if (*gp) + { + para->setCursor(x*elemsize.width(), y*elemsize.height()); + para->renderString((*gp)->service_name); + } + *gp++; + } +} |
