[Gvsig_desarrolladores] Mensajes en la status bar

Jorge Sanz jsanz en prodevelop.es
Jue Jul 26 14:37:16 CEST 2007


Bueno, ya está, doy mi solución por si le sirve a alguien:
 
Primero, crear una clase que herede de Thread que lanzará la tarea, en el constructor se pasa el texto de la barra de estado a restaurar, ya que el temporal no me ha funcionado y la restauración del texto hay que hacerla al finalizar la tarea (en este caso un sleep de 10 segundos).
 public class LoadLayerThread extends Thread{
  private String statustext;
  
  public LoadLayerThread(String statusText){
   this.statustext = statusText;
  }
  
  public void run(){
   try {
    Thread.sleep(10000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   finally{
    PluginServices.getMainFrame().getStatusBar().setInfoText(statustext);
    PluginServices.getMDIManager().restoreCursor();
   }
  }
 }
 
A continuación, en el proceso que lanzará el hilo, en mi caso al presionar un botón de una barra de herramientas:
 if (actionCommand.compareToIgnoreCase("CARGAR_CALLES") == 0) {
  manager.setWaitCursor();
  String statuString = statusbar.getStatusText();
  statusbar.setInfoText("Mi texto en la barra de estado"));
  PluginServices.backgroundExecution(new LoadLayerThread(statuString));
 }
 
He utilizado backgraundExecution que recibe un Runnable en lugar de un AbstractMonirableTask pero para el caso es lo mismo ya que ambas necesitan un método run().
 
No es que me guste mucho ya que faltaría gestionar el icono (no tiene por que estar la "i" de información) por lo que sería deseable que el mecanismo de textos temporales en la barra de estado funcionara (aunque también es posible que sea yo el que no lo está haciendo bien, claro).
 
Y bueno, eso es todo.
 
Gracias por la ayuda.
 
Un saludo 

Jorge Gaspar Sanz Salinas 
Ingeniero en Geodesia y Cartografía 
Prodevelop S.L. - Valencia - España 
Tlf.:  96.351.06.12 - Fax:   96.351.09.68 
jsanz[en]prodevelop[punto]es 
http://www.prodevelop.es <http://www.prodevelop.es/>  

________________________________

De: gvsig_desarrolladores-bounces en runas.cap.gva.es en nombre de Vicente Caballero Navarro
Enviado el: jue 26/07/2007 13:21
Para: Lista de Desarrolladores de gvSIG
Asunto: Re: [Gvsig_desarrolladores] Mensajes en la status bar


Yo he probado esto y me ha funcionado:
        
        MDIManager manager = PluginServices.getMDIManager();
        NewStatusBar statusbar = PluginServices.getMainFrame().getStatusBar();
        manager.setWaitCursor();
        statusbar.setInfoText("Mi texto en la barra de estado");
        PluginServices.cancelableBackgroundExecution(new EvalOperatorsTask());
         manager.restoreCursor();

Siendo EvalOperatorsTask una extensión de AbstractMonitorableTask.


Jorge Sanz escribió: 

	Hola Chema,
	 
	No, no estoy lanzando un hilo aparte. El proceso largo es la carga de una capa vectorial algo pesada por código; es un método en la misma clase de la extensión directamente desde el "execute()".
	 
	He probado el invalidate/doLayout/repaint pero tampoco funciona.
	 
	Entiendo entonces que para que se provoque el repintado debo lanzar la carga en un hilo a parte y al acabar éste, provocar la restauración tanto del cursor como del texto de la statusbar.
	 
	Muchas gracias, un saludo 
	
	Jorge Gaspar Sanz Salinas 
	Ingeniero en Geodesia y Cartografía 
	Prodevelop S.L. - Valencia - España 
	Tlf.:  96.351.06.12 - Fax:   96.351.09.68 
	jsanz[en]prodevelop[punto]es 
	http://www.prodevelop.es <http://www.prodevelop.es/>  <http://www.prodevelop.es/> <http://www.prodevelop.es/>   
	
	________________________________
	
	De: gvsig_desarrolladores-bounces en runas.cap.gva.es en nombre de Jose Manuel Vivó (Chema)
	Enviado el: jue 26/07/2007 12:21
	Para: Lista de Desarrolladores de gvSIG
	Asunto: Re: [Gvsig_desarrolladores] Mensajes en la status bar
	
	
	
	Hola Jorge:
	
	¿'miprocesolargo' se lanza en un thread distinto?, puede que el problema sea
	que el evento de pintado de la barra de estado no llegue a ejecutarse porque
	tu proceso no 'libera' el thread principal.
	
	De todas formas, intenta antes un 'invalidate/doLayout/repaint a ver si
	funciona.
	
	Un Saludo.
	Chema.
	
	El Jueves 26 Julio 2007 11:16, Jorge Sanz escribió:
	  

		Hola Vicente,
		
		Si, eso también lo probé, tomaba el texto existente, utilizaba ese método y
		luego lo restauraba (vaya lo que hacen los métodos setXXXTextTemporal() y
		restaurarTexto()) pero tampoco... :|
		
		¿Puede faltar algún método que refresque la barra de estado o algo del
		estilo?
		
		Un saludo
		
		Jorge Gaspar Sanz Salinas
		Ingeniero en Geodesia y Cartografía
		Prodevelop S.L. - Valencia - España
		Tlf.:  96.351.06.12 - Fax:   96.351.09.68
		jsanz[en]prodevelop[punto]es
		http://www.prodevelop.es <http://www.prodevelop.es/>  <http://www.prodevelop.es/> <http://www.prodevelop.es/>  
		
		
		
		-----Mensaje original-----
		De: gvsig_desarrolladores-bounces en runas.cap.gva.es en nombre de Vicente
		Caballero Navarro Enviado el: jue 26/07/2007 8:46
		Para: Lista de Desarrolladores de gvSIG
		Asunto: Re: [Gvsig_desarrolladores] Mensajes en la status bar
		
		Hola Jorge.
		
		Prueba con statusbar.setInfoText("Mi texto en la barra de estado"); en vez
		del método setInfoTextTemporal.
		
		Jorge Sanz escribió:
		
		      Hola,
		
		      Estoy intentando mostrar un mensaje temporal en la barra de estado
		(durante un proceso largo) pero no me está funcionando.
		
		      El código es muy simple, algo como:
		
		      ********************
		      MDIManager manager = PluginServices.getMDIManager();
		      NewStatusBar statusbar = PluginServices.getMainFrame().getStatusBar();
		
		      manager.setWaitCursor();
		      statusbar.setInfoTextTemporal("Mi texto en la barra de estado"));
		
		      miprocesolargo();
		
		      statusbar.restaurarTexto();
		      manager.restoreCursor();
		      ********************
		
		      La clase MDIFrame utiliza estos métodos también para mostrar en la barra
		de estado los tooltips de los botones de las barras de herramientas y
		funciona sin hacer nada más, así que me pierdo algo...
		
		      ¿Alguna ayuda?
		
		      Un saludo
		
		      Jorge Gaspar Sanz Salinas
		      Ingeniero en Geodesia y Cartografía
		      Prodevelop S.L. - Valencia - España
		      Tlf.:  96.351.06.12 - Fax:   96.351.09.68
		      jsanz[en]prodevelop[punto]es
		      http://www.prodevelop.es <http://www.prodevelop.es/>  <http://www.prodevelop.es/> <http://www.prodevelop.es/>  
		
		
		
		
		
		________________________________
		
		
		      _______________________________________________
		      gvSIG_desarrolladores mailing list
		      gvSIG_desarrolladores en runas.cap.gva.es
		      http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
		    

	--
	=============
	Jose Manuel Vivó (Chema)
	Equipo de gvSIG
	
	IVER T.I. S.A.
	C/ Salamanca, 50-52
	46005-Valencia
	Tlf.+34963163400
	Spain
	www.iver.es <http://www.iver.es/> 
	www.gvsig.com <http://www.gvsig.com/> 
	
	
	
	  
	
________________________________


	_______________________________________________
	gvSIG_desarrolladores mailing list
	gvSIG_desarrolladores en runas.cap.gva.es
	http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
	  


-- 
Vicente Caballero Navarro
Grupo desarrollo gvSIG.
IVER TI S.A.
C/ Lérida, 20
46005-Valencia
Tlf.+34963354983
www.iver.es <http://www.iver.es/> 
www.gvsig.com <http://www.gvsig.com/> 
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : no disponible
Tipo       : application/ms-tnef
Tamaño     : 10334 bytes
Descripción: no disponible
Url        : http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20070726/49fafb24/attachment-0001.bin


Más información sobre la lista de distribución gvSIG_desarrolladores