Patch Service Icon

, par  foxalite , popularité : 86%

Comment afficher l’icône du service en cours

Modification du Skin :

Ajouter un label dans le skin
<eLabel name="ch_icon" position="52:10" pixmap="ic_def" size="70:53" alphatest="on" />

Modifications de enigma_main.h

+#include <lib/gdi/gfbdc.h> //include
+#include <lib/gdi/epng.h> //include

+#define LOGO_DIR "/var/tuxbox/icon/" // répertoire des icones

class eProgress;
private:
-        eLabel         *ChannelNumber, *ChannelName, *Clock,
+        eLabel         *ChannelNumber, *ChannelName, *Clock, *ChannelIcon,
        int  indices_enabled;
+        void showServiceIcon(eString);
        void redrawIndexmarks();

Modification de enigma_main.cpp

        ASSIGN(ChannelName, eLabel, "ch_name");
+        ASSIGN(ChannelIcon, eLabel, "ch_icon"); // création du label

        ASSIGN(EINow, eLabel, "e_now_title");
void eZapMain::startService(const eServiceReference &_serviceref, int err)
{

+        eString icname=""; //déclaration variable
        subtitle->stop();
                if (serviceref.getServiceType() == 7)  // linkage service..
                        name+=" - " + serviceref.descr;

+                if ( !serviceref.path.length()) {   // no recorded movie
+                        icname=name.c_str(); // c'est un service
+                        }
+                else {
+                        icname="File"; // c'est un fichier ts
+                        }

#ifndef DISABLE_LCD
                else
                        name="bla :(";

                ChannelName->setText(name);
+                icname="File"; // c'est un fichier
#ifndef DISABLE_LCD
                eZapLCD* pLCD = eZapLCD::getInstance();
                pLCD->lcdMain->setServiceName(name);
#endif
                if (service && service->id3)
                {
+                        icname="MP3"; //c'est un mp3
                        std::map<eString,eString> &tags = service->id3->getID3Tags();
#endif // DISABLE_FILE

+        int showlogo=0; //déclaration
+        eConfig::getInstance()->getKey("/ezap/extra/showlogo", showlogo); // lecture registre
+        if ( showlogo == 1 ) // si showlogo
+                showServiceIcon(icname); // appel fonction

        showInfobar(true);

Et voici la fonction :

void eZapMain::showServiceIcon(eString logo_file)
{
        eString logofile;
        eString cmd;

        logo_file=convertUTF8DVB(logo_file);


        //nettoyage des caractères spéciaux
        logo_file.removeChars('\x86').removeChars('\x2F').
                removeChars('\x87').removeChars('\xC2').
                removeChars('\x00').removeChars('\x05');

        logo_file.removeChars('.').removeChars("'"); //suppression des points et apostrophes

        clogofile = convertLatin1UTF8(logo_file + ".png"); //utilisé par la webif

        logofile = LOGO_DIR;
        logofile += logo_file;
        logofile += ".png";

        logofile = convertLatin1UTF8(logofile); // conversion utf8

        //affichage de l'image
        gPixmap *img = loadPNG(logofile.c_str());
        if(img){
                gPixmap * mp = &gFBDC::getInstance()->getPixmap();
                gPixmapDC mydc(img);
                gPainter p(mydc);
                p.mergePalette(*mp);
                ChannelIcon->setBlitFlags(BF_ALPHATEST);
                ChannelIcon->setProperty("align", "left");
                ChannelIcon->setPixmap(img);
                ChannelIcon->setPixmapPosition(ePoint(0, 0));
                }
        else {
               //si invalide, affichage du logo par défaut
                logofile = LOGO_DIR;
                logofile += "default.png";
                gPixmap *img = loadPNG(logofile.c_str());
                if(img) {
                        gPixmap * mp = &gFBDC::getInstance()->getPixmap();
                        gPixmapDC mydc(img);
                        gPainter p(mydc);
                        p.mergePalette(*mp);
                        ChannelIcon->setBlitFlags(BF_ALPHATEST);
                        ChannelIcon->setProperty("align", "left");
                        ChannelIcon->setPixmap(img);
                        ChannelIcon->setPixmapPosition(ePoint(0, 0));
                }

                 eDebug("Missing Service Logo ------------> %s",logofile.c_str());

               //test si on logue
                int logservice=0;
                eConfig::getInstance()->getKey("/ezap/osd/logServiceIcon", logservice);
                if ( logservice == 1){
                cmd.sprintf("echo 'Missing %s' >> /tmp/MissingServiceLogo",logofile.c_str());
                        system(cmd.c_str());
                        }
        }
}

Modification de setup-extra.cpp

void eExpertSetup::init_eExpertSetup()
{
        cmove(ePoint(110, 115));

+        int showlogo=0;
+        if ( eConfig::getInstance()->getKey("/ezap/extra/showlogo", showlogo) )
+                eConfig::getInstance()->setKey("/ezap/extra/showlogo", showlogo);

+        int logChannelName=0;
+        if ( eConfig::getInstance()->getKey("/ezap/extra/logChannelName", logChannelName) )
+                eConfig::getInstance()->setKey("/ezap/extra/logChannelName", logChannelName);

Dans la listbox :
+ new eListBoxEntryCheck(&list, _("Show service logo"), "/ezap/extra/showlogo", _("show service logo in infobar"));
+        new eListBoxEntryCheck(&list, _("Log service name"), "/ezap/extra/logChannelName", _("log service name in /tmp/MissingServiceLogo if logo is missing"));

Voilà, à vos claviers :-O

Navigation