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()
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()