Dreambox et Horloge analogique

, par  foxalite , popularité : 89%

Voici comment afficher une horloge analogique sur le skin de votre Dreambox

Modification du skin

Définir dans la section image le bitmap employé : [1]

<img name="g_clock" src="g_clock-fs8.png" />

Ensuite dans la section eZap_Main, il faut créer les éléments suivants :
Un label qui affichera l’image de fond
Trois aiguilles pour les heures, les minutes et les secondes. [2]

<eLabel name="analog_clock" position="0:0" size="50:50" pixmap="g_clock" alphatest="on" />
<eGauge position="11:11" size="28:28" name="g_hour" border="0" start="0"  leftColor="std_black" direction="1" />
<eGauge position="7:7" size="36:36" name="g_Minute" border="0" start="0"  leftColor="std_black" direction="1" />
<eGauge position="5:5" size="40:40" name="g_Seconde" border="0" start="0"  leftColor="std_red" direction="1" />

Modification d’enigma_main.h

Définitions des nouveaux éléments :

        eLabel *AnalogClock;
        eGauge *GaugeHour, *GaugeMinute, *GaugeSeconde;

Modification d’enigma_main.cpp

Dans le init_main() : assignation des aiguilles et du label

        ASSIGN (AnalogClock, eLabel, "analog_clock");
        ASSIGN (GaugeHour, eGauge, "g_hour");
        ASSIGN (GaugeMinute, eGauge, "g_Minute");
        ASSIGN (GaugeSeconde, eGauge, "g_Seconde");

Puis affichage ou non de l’horloge

        showAnalogClock=0;
        eConfig::getInstance()->getKey ("/ezap/osd/showAnalogClock", showAnalogClock);
        if (showAnalogClock == 0)
        {
                AnalogClock->hide();
                GaugeMinute->hide();
                GaugeHour->hide();
                GaugeSeconde->hide();
        }
        else
        {
                AnalogClock->show();
                GaugeMinute->show();
                GaugeHour->show();
                GaugeSeconde->show();
        }

Dans le clock_update() : on calcule les angles des aiguilles [3]

        showAnalogClock=0;
        eConfig::getInstance()->getKey ("/ezap/osd/showAnalogClock", showAnalogClock);
        if (showAnalogClock == 1)
        {
                int h_gau,h_angle;
                h_gau= t->tm_hour;
                if (h_gau > 12)
                        h_gau-=12;
                h_angle= (h_gau*60) +t->tm_min;
                h_angle*=100;
                h_angle/=720;
                GaugeSeconde->setPerc (t->tm_sec*100/60);
                GaugeMinute->setPerc (t->tm_min*10/6);
                GaugeHour->setPerc (h_angle);
                GaugeSeconde->setPerc (t->tm_sec*100/60);
        }

Et voilà le résultat :-)

JPEG - 57.4 ko
Horloge
Démo Horloge Analogique

[1Il est possible de définir le bitmap "à la volée" dans Enigma

[2La trotteuse des secondes est bien sûr optionelle

[3Il ne faut pas oublier de corriger le timer qui appelle le clock_update si vous utilisez les secondes

Navigation