예제 #1
0
파일: ventana.py 프로젝트: pacoqueen/cican
 def intentar_guardar_objeto_anterior_antes_de_actualizar(self, 
                                                          objeto_anterior):
     """
     Primero verifica si hay cambios pendientes de guardar en la ventana 
     actual antes de actualizar el objeto en pantalla.
     La forma de hacerlo es mirar si b_guardar está habilitado. 
     En ese caso intenta guardar los cambios del objeto anterior antes 
     de sustituirlo en pantalla por el nuevo (que es lo que se está 
     intentando "actualizar" en realidad, el self.objeto que aún no está 
     en pantalla).
     Devuelve True si se ha guardado y se puede continuar la actualización 
     del nuevo objeto para mostrarlo en pantalla o False si se debe 
     interrumpir y dejar que el usuario guarde o descarte antes de pasar 
     a otro objeto como self.objeto.
     """
     if not self.objeto: # Evito falsas alarmas al abrir ventanas.
         res = False
     else:
         res = True
         if ("b_guardar" in self.wids.keys() 
            and self.wids['b_guardar'] != None 
            and self.wids['b_guardar'].get_property("sensitive") 
            and objeto_anterior != None
            and objeto_anterior != self.objeto): # Importantísimo esto 
             # último. A veces se da al abrir ventanas lentas desde otras.
             print "Cambios pendientes de guardar... ¡PERO EL OBJETO YA "\
                   "HA CAMBIADO!" 
             #print self.objeto.id, objeto_anterior.id
             respuesta =  ui.dialogo('Hay cambios pendientes de guardar.\n'
                                     '¿Desea hacerlo ahora?', 
                                     '¿GUARDAR CAMBIOS?', 
                                     padre = self.wids['ventana'],
                                     icono = gtk.STOCK_DIALOG_WARNING,
                                     cancelar = True, 
                                     defecto = "Cancelar")
             if respuesta:
                 try:
                     tmp = self.objeto
                     self.objeto = objeto_anterior
                     #self.guardar(None) 
                     # Puede no llamarse así el callback, mejor simular el 
                     # click.
                     self.wids['b_guardar'].clicked()
                     objeto_anterior = self.objeto
                     self.objeto = tmp
                 except:
                     ui.dialogo_info(titulo = 'NO SE PUDO GUARDAR', 
                         texto = 'Los cambios no se pudieron guardar '
                                 'automáticamente.\nDebe hacerlo de f'
                                 'orma manual',
                         padre = self.wids['ventana'])
             elif respuesta == gtk.RESPONSE_CANCEL:  
                 # Cancelará el resto de eventos siempre que sea posible. 
                 # No va a poder cancelar una cadena de acciones 
                 # "programáticamente" definida (por ejemplo, no cancelará 
                 # la asignación de un contador a un cliente en clientes.py,
                 # aunque sí cancelará la acción de guardar información 
                 # modificada y tal).
                 res = False
     return res
예제 #2
0
파일: ventana.py 프로젝트: pacoqueen/cican
 def salir(self, boton, event = None, mostrar_ventana = True):
     """
     Muestra una ventana de confirmación y 
     sale de la ventana cerrando el bucle
     local de gtk_main.
     Si mostrar_ventana es False, sale directamente
     sin preguntar al usuario.
     """
     try:
         b_guardar = self.wids['b_guardar']
     except KeyError:
         b_guardar = None
     if  b_guardar != None and b_guardar.get_property('sensitive'):
         # Hay cambios pendientes de guardar.
         if ui.dialogo('Hay cambios pendientes de guardar.\n¿Desea'
                       ' hacerlo ahora?', 
                       '¿GUARDAR CAMBIOS?', 
                       padre = self.wids['ventana'], 
                       icono = gtk.STOCK_SAVE, 
                       defecto = "Sí"):
             try:
                 self.guardar(None)
             except:
                 ui.dialogo_info(titulo = 'NO SE PUDO GUARDAR', 
                                    texto = 'Los cambios no se pudieron guardar automáticamente.\nDebe hacerlo de forma manual',
                                    padre = self.wids['ventana'])
                 return True # Si devuelvo False, None, etc... continúa la cadena de eventos y destruye la ventana.
                             # Devuelvo True para cancelar el cierre de la ventana. 
     if event == None:
         # Me ha invocado el botón
         if not mostrar_ventana or \
            ui.dialogo('¿Desea salir de la ventana actual?', 
                          'SALIR', 
                          padre = self.wids['ventana'], 
                          icono = gtk.STOCK_QUIT):
             self.wids['ventana'].destroy()
             return False
         else:
             return True
     else:
         return not mostrar_ventana or \
                not ui.dialogo('¿Desea salir de la ventana actual?', 
                                  'SALIR', 
                                  padre = self.wids['ventana'],
                                  icono = gtk.STOCK_QUIT)