Exemple #1
0
 def __init__(self, objeto = None, usuario = None, run = True):
     """
     Constructor. objeto puede ser un objeto de pclases con el que
     comenzar la ventana (en lugar del primero de la tabla, que es
     el que se muestra por defecto).
     """
     self.nombre_fichero_ventana = os.path.split(__file__)[-1]        
     self.__clase = pclases.Direccion
     self._objetoreciencreado = None
     self.mapa = Mapa()
     if objeto and isinstance(objeto, self.__clase):
         VentanaGenerica.__init__(self, objeto = objeto, usuario = usuario, 
                                  run = False, 
                                  ventana_marco = "direccion.glade")
     elif objeto:
         VentanaGenerica.__init__(self, objeto = objeto, usuario = usuario, 
                                  clase = self.__clase, run = False,
                                  ventana_marco = "direccion.glade")
     else:
         VentanaGenerica.__init__(self, clase = self.__clase, 
                                  usuario = usuario, run = False,
                                  ventana_marco = "direccion.glade")
     self.put_mapa()
     # Si elijo un código postal, quiero que la ciudad se rellene sola:
     self.wids['codigoPostalID'].connect("changed", self.rellenar_ciudad)
     self.wids['codigoPostalID'].connect("focus-out-event", 
                                         self.rellenar_ciudad)
     self.wids['b_nuevo_cp'].connect("clicked", self.nuevo_cp)
     if run:
         gtk.main()
Exemple #2
0
class Direcciones(VentanaGenerica):
    def __init__(self, objeto = None, usuario = None, run = True):
        """
        Constructor. objeto puede ser un objeto de pclases con el que
        comenzar la ventana (en lugar del primero de la tabla, que es
        el que se muestra por defecto).
        """
        self.nombre_fichero_ventana = os.path.split(__file__)[-1]        
        self.__clase = pclases.Direccion
        self._objetoreciencreado = None
        self.mapa = Mapa()
        if objeto and isinstance(objeto, self.__clase):
            VentanaGenerica.__init__(self, objeto = objeto, usuario = usuario, 
                                     run = False, 
                                     ventana_marco = "direccion.glade")
        elif objeto:
            VentanaGenerica.__init__(self, objeto = objeto, usuario = usuario, 
                                     clase = self.__clase, run = False,
                                     ventana_marco = "direccion.glade")
        else:
            VentanaGenerica.__init__(self, clase = self.__clase, 
                                     usuario = usuario, run = False,
                                     ventana_marco = "direccion.glade")
        self.put_mapa()
        # Si elijo un código postal, quiero que la ciudad se rellene sola:
        self.wids['codigoPostalID'].connect("changed", self.rellenar_ciudad)
        self.wids['codigoPostalID'].connect("focus-out-event", 
                                            self.rellenar_ciudad)
        self.wids['b_nuevo_cp'].connect("clicked", self.nuevo_cp)
        if run:
            gtk.main()

    def put_mapa(self):
        m = self.wids['mapa_container']
        self.mapa.put_mapa(m)

    def actualizar_mapa(self, actualizar_objeto = True):
        # OJO: Por defecto SIEMPRE va a intentar conectarse a Google. En 
        # caso de trabajar sin conexión a Internet o cuando la dirección no 
        # se encuentre, esto será un coñazo. FIXME
        if not self.objeto.lat or not self.objeto.lon:
            strdireccion = self.objeto.get_direccion_buscable()
            lat, lon = self.mapa.get_latlon(strdireccion)
            if lat and lon:
                self.objeto.lat = lat
                self.objeto.lon = lon
                self.objeto.syncUpdate()
                self.rellenar_widgets()
        try:
            self.mapa.centrar_mapa(self.objeto.lat, self.objeto.lon, 
                                   #zoom = 5, 
                                   track = False, flag = True)
            #print self.mapa.zoom
        except ValueError:
            pass    # La dirección es incorrecta o no se ha encontrado.

    def actualizar_ventana(self, *args, **kw):
        VentanaGenerica.actualizar_ventana(self, *args, **kw)
        self.actualizar_mapa()

    def nuevo_cp(self, boton):
        """
        Crea un nuevo código postal tras asegurarme de que no está repetido. 
        """
        res = None
        cp = utils.ui.dialogo_entrada(titulo = "NUEVO CÓDIGO POSTAL", 
            texto = "Introduzca el código postal:", 
            valor_por_defecto = self.wids['codigoPostalID'].child.get_text(), 
            padre = self.wids['ventana'])
        if cp:
            if pclases.CodigoPostal.selectBy(cp = cp.strip()).count() == 0:
                nombre_ciudad = utils.ui.dialogo_entrada(titulo = "CIUDAD", 
                    texto = "Teclee la ciudad a la que pertenece "
                            "el código postal:", 
                    padre = self.wids['ventana'])
                ciudad = buscar_ciudad_en_bd(nombre_ciudad, 
                                             self.wids['ventana'])
                if ciudad:
                    res = pclases.CodigoPostal(cp = cp, ciudad = ciudad)
            else:
                utils.ui.dialogo_info(titulo = "CÓDIGO EXISTENTE", 
                    texto = "El código postal ya existe.", 
                    padre = self.wids['ventana'])
        if res:
            model = self.wids['codigoPostalID'].get_model()
            model.append((res.id, res.cp))
            utils.ui.combo_set_from_db(self.wids['codigoPostalID'], res.id)
        return res

    def rellenar_ciudad(self, combo, *args, **kw):
        """
        Rellena el combo de ciudad con el correspondiente al código postal.
        """
        #cpid = utils.ui.combo_get_value(combo)
        #try:
        #    cp = pclases.CodigoPostal.get(cpid)
        #except (pclases.SQLObjectNotFound, AssertionError):
        #    return  # El código postal no es de la base de datos.
        texto_cp = combo.child.get_text()
        try:
            cp = pclases.CodigoPostal.selectBy(cp = texto_cp)[0]
        except (IndexError):
            return  # El código postal no es de la base de datos.
        utils.ui.combo_set_from_db(combo, cp.id)
        try:
            utils.ui.combo_set_from_db(self.wids['ciudadID'], cp.ciudadID)
        except AttributeError:
            pass    # Algo falló en la base de datos. No ciudad o no CP.
        else:
            self.wids['paisID'].grab_focus()