#!/usr/bin/python
# -*- coding:utf-8 -*-
#horloge_DS1307.py
import sys, os, time, datetime, serial
import pygtk
pygtk.require('2.0')
import gtk, gobject, time

liste_mois=["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]
liste_jour_semaine=["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]

TIMER_ID = None;
#Initialisation liaison série
s = serial.Serial(0,9600,timeout=1)

def decimal_bcd(chaine):
    decimal=int(chaine)
    bcd=str(16*(decimal/10)+(decimal%10))
    print chaine,bcd
    return bcd
    
class Horloge:
    def __init__(self):
        fenetre = gtk.Window()
        fenetre.connect('destroy', lambda w: gtk.main_quit())
        # Creation d'une boite verticale dans fenêtre
        boite_h = gtk.VBox(True, 0)
        # Creation de 2 boites horizontales.
        boite_v1 = gtk.HBox(True, 4)
        boite_v2 = gtk.HBox(True, 4)
        bouton1 = gtk.Button(label="Écriture DS1307")
        bouton1.connect("clicked", self.ecrire)
        boite_ev = gtk.EventBox()
        self.etiquette = gtk.Label("")
        boite_ev.modify_bg(gtk.STATE_NORMAL,boite_ev.get_colormap().alloc_color("yellow"))
        # On place les HBox dans la VBox.
        fenetre.add(boite_h)
        boite_h.add(boite_v1)
        boite_h.add(boite_v2)
        boite_h.add(bouton1)
        boite_h.add(boite_ev)
        boite_ev.add(self.etiquette)        
        #on place des listes défilantes pour jour semaine ,jour, mois, an
        self.boite_an = gtk.combo_box_new_text()
        self.boite_mois = gtk.combo_box_new_text()
        self.boite_jour_semaine = gtk.combo_box_new_text()
        self.boite_jour = gtk.combo_box_new_text()        
        boite_v1.add(self.boite_jour_semaine)        
        boite_v1.add(self.boite_jour)
        boite_v1.add(self.boite_mois)
        boite_v1.add(self.boite_an)
        self.boite_heure = gtk.combo_box_new_text()       
        self.boite_minute = gtk.combo_box_new_text()               
        self.boite_seconde = gtk.combo_box_new_text()                       
        boite_v2.add(self.boite_heure)
        boite_v2.add(self.boite_minute) 
        boite_v2.add(self.boite_seconde)         
        #définir chaque liste année
        self.boite_an.append_text('Année:')
        for i in range(100) :
            if (i<10) : t='0'+str(i)
            else : t=str(i)
            self.boite_an.append_text(t)
        #self.boite_an.connect('changed', self.fct_rappel_change)
        self.boite_an.set_active(0)
        #mois        
        self.boite_mois.append_text('Mois:')
        for mois in liste_mois :
            self.boite_mois.append_text(mois)
        #self.boite_mois.connect('changed', self.fct_rappel_change)
        self.boite_mois.set_active(0)
        #jour
        self.boite_jour.append_text('Jour:')
        for i in range(1,32) :
            if (i<10) : t='0'+str(i)
            else : t=str(i)
            self.boite_jour.append_text(t)
        #self.boite_jour.connect('changed', self.fct_rappel_change)
        self.boite_jour.set_active(0)        
        #jour semaine
        self.boite_jour_semaine.append_text('Jour Semaine')
        for jour in liste_jour_semaine :
            self.boite_jour_semaine.append_text(jour)
        #self.boite_jour_semaine.connect('changed', self.fct_rappel_change)
        self.boite_jour_semaine.set_active(0)        
        #heure
        self.boite_heure.append_text('Heure:')        
        for i in range(24) :
            if (i<10) : t='0'+str(i)
            else : t=str(i)
            self.boite_heure.append_text(t)
        self.boite_heure.set_active(0)        
        #minute, seconde
        self.boite_minute.append_text('Minute:')    
        self.boite_seconde.append_text('Seconde:')            
        for i in range(60) :
            if (i<10) : t='0'+str(i)
            else : t=str(i)
            self.boite_minute.append_text(t)
            self.boite_seconde.append_text(t)
        self.boite_minute.set_active(0)     
        self.boite_seconde.set_active(0)           
        self.lire();
        fenetre.show_all()
        return
    def boucle (self):
        TIMER_ID = gobject.timeout_add (1000, self.lire);
    def lire(self):
        valeur= s.readline()
        s.flushInput()
        try :
            texte='Nous sommes le '+liste_jour_semaine[int(valeur[0])-1]+' '+valeur[1:3]+' '+liste_mois[int(valeur[3:5])-1]+' 20'+valeur[5:7]+' il est '+valeur[7:9]+' h '+valeur[9:11]+' min '+valeur[11:13]+' s'
            self.etiquette.set_text(texte)
        except:
            print valeur
        self.boucle ()
    def ecrire(self,widget):
        s.write('E') #précisez pour écrire dans DS1307
        an=self.boite_an.get_model()[self.boite_an.get_active()][0]
        mois=str(self.boite_mois.get_active())
        if self.boite_mois.get_active() <10 : mois='0'+mois
        jour=self.boite_jour.get_model()[self.boite_jour.get_active()][0]
        semaine=str(self.boite_jour_semaine.get_active())
        heure=self.boite_heure.get_model()[self.boite_heure.get_active()][0]
        minute=self.boite_minute.get_model()[self.boite_minute.get_active()][0]
        seconde=self.boite_seconde.get_model()[self.boite_seconde.get_active()][0]
        s.write(an);s.write(mois);s.write(jour);s.write(semaine)
        s.write(heure);s.write(minute);s.write(seconde)

def main():
    gtk.main()
    return

if __name__ == "__main__":
    htr = Horloge()
    main()
