summaryrefslogtreecommitdiff
path: root/logolist.c
diff options
context:
space:
mode:
Diffstat (limited to 'logolist.c')
-rw-r--r--logolist.c175
1 files changed, 175 insertions, 0 deletions
diff --git a/logolist.c b/logolist.c
new file mode 100644
index 0000000..2491f7f
--- /dev/null
+++ b/logolist.c
@@ -0,0 +1,175 @@
+/**
+ * GraphLCD plugin for the Video Disk Recorder
+ *
+ * logolist.c - logo list class
+ *
+ * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online de>
+ **/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; *
+ * if not, write to the Free Software Foundation, Inc., *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+ * *
+ ***************************************************************************/
+
+#include <fstream>
+
+#include <glcdgraphics/bitmap.h>
+#include <glcdgraphics/image.h>
+#include <glcdgraphics/glcd.h>
+
+#include "logolist.h"
+#include "strfct.h"
+
+#include <vdr/tools.h>
+
+const char * kGLCDFileExtension = ".glcd";
+const char * kAliasFileName = "logonames.alias";
+
+cGraphLCDLogoList::cGraphLCDLogoList(const std::string & logodir, const std::string & cfgdir)
+{
+ std::fstream file;
+ char readLine[1000];
+ std::string line;
+ std::string aliasFileName;
+ std::string::size_type pos;
+ tAliasListElement * newAlias;
+
+ logoDir = logodir;
+ aliasFileName = AddDirectory(cfgdir.c_str(), kAliasFileName);
+
+#if (__GNUC__ < 3)
+ file.open(aliasFileName.c_str(), std::ios::in);
+#else
+ file.open(aliasFileName.c_str(), std::ios_base::in);
+#endif
+ if (!file.is_open())
+ return;
+
+ while (!file.eof())
+ {
+ file.getline(readLine, 1000);
+ line = trim(readLine);
+ if (line.length() == 0)
+ continue;
+ if (line[0] == '#')
+ continue;
+ pos = line.find(":");
+ if (pos == std::string::npos)
+ continue;
+ newAlias = new tAliasListElement;
+ if (newAlias)
+ {
+ newAlias->channelID = trim(line.substr(0, pos));
+ newAlias->fileName = trim(line.substr(pos + 1));
+ aliasList.push_back(newAlias);
+ }
+ }
+ file.close();
+/*
+ std::list <tAliasListElement *>::iterator it;
+ for (it = aliasList.begin(); it != aliasList.end(); it++)
+ {
+ newAlias = *it;
+ printf(">>>>>> AliasList: >%s< : >%s<\n", newAlias->channelID.c_str(), newAlias->fileName.c_str());
+ }
+*/
+}
+
+cGraphLCDLogoList::~cGraphLCDLogoList()
+{
+ std::list <tAliasListElement *>::iterator itAlias;
+ std::list <cGraphLCDLogo *>::iterator itLogo;
+
+ for (itAlias = aliasList.begin(); itAlias != aliasList.end(); itAlias++)
+ {
+ delete *itAlias;
+ }
+ aliasList.empty();
+
+ for (itLogo = logoList.begin(); itLogo != logoList.end(); itLogo++)
+ {
+ delete *itLogo;
+ }
+ logoList.empty();
+}
+
+std::string cGraphLCDLogoList::CreateFullFileName(const std::string & baseName, ePicType type)
+{
+ std::string tmp;
+
+ tmp = AddDirectory(logoDir.c_str(), baseName.c_str());
+
+ switch (type)
+ {
+ case ptPictureFixed: // do not attach anything
+ break;
+ case ptLogoSmall:
+ tmp += "_s";
+ break;
+ case ptLogoMedium:
+ tmp += "_m";
+ break;
+ case ptLogoLarge:
+ tmp += "_l";
+ break;
+ }
+ tmp += kGLCDFileExtension;
+
+ return tmp;
+}
+
+cGraphLCDLogo * cGraphLCDLogoList::GetLogo(const std::string & chID, ePicType type)
+{
+ std::list <cGraphLCDLogo *>::iterator itLogo;
+ std::list <tAliasListElement *>::iterator itAlias;
+ std::string logoFileName = "";
+ cGraphLCDLogo * newLogo;
+ GLCD::cGLCDFile glcd;
+
+ for (itLogo = logoList.begin(); itLogo != logoList.end(); itLogo++)
+ {
+ if ((*itLogo)->ID() == chID)
+ {
+ return *itLogo;
+ }
+ }
+
+ for (itAlias = aliasList.begin(); itAlias != aliasList.end(); itAlias++)
+ {
+ if ((*itAlias)->channelID == chID)
+ {
+ logoFileName = CreateFullFileName((*itAlias)->fileName, type);
+ break;
+ }
+ }
+ if (itAlias == aliasList.end())
+ logoFileName = CreateFullFileName(chID, type);
+
+ // try to load logo
+ newLogo = new cGraphLCDLogo(chID);
+ if (glcd.Load(*newLogo, logoFileName))
+ {
+ logoList.push_back(newLogo);
+ return newLogo;
+ }
+ else
+ {
+ delete newLogo;
+ return NULL;
+ }
+ return NULL;
+}