aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/eservicegrid.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:35:43 +0000
committerFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:35:43 +0000
commitfc2f5b2cd655f1391f2abda1b39e37cdec98a951 (patch)
tree312efcea86a319de407a7c314fb981fb1c71019a /lib/gui/eservicegrid.cpp
downloadenigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.tar.gz
enigma2-fc2f5b2cd655f1391f2abda1b39e37cdec98a951.zip
Initial revision
Diffstat (limited to 'lib/gui/eservicegrid.cpp')
-rw-r--r--lib/gui/eservicegrid.cpp74
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++;
+ }
+}