Revision 11030

View differences:

branches/v10/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLyrDefault.java
61 61
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
62 62
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
63 63
import com.iver.cit.gvsig.fmap.edition.EditionException;
64
import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer;
64 65
import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
65 66
import com.iver.utiles.IPersistance;
66 67
import com.iver.utiles.XMLEntity;
......
778 779
	}
779 780

  
780 781

  
782
	/* By default this operation is not suported
783
	 * 
784
	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#newComposedLayer()
785
	 */
786
	public ComposedLayer newComposedLayer() {		
787
		return null;
788
	}
789

  
790

  
781 791
}
branches/v10/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLayer.java
58 58
import com.iver.cit.gvsig.fmap.ViewPort;
59 59
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
60 60
import com.iver.cit.gvsig.fmap.edition.EditionException;
61
import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer;
61 62
import com.iver.utiles.XMLEntity;
62 63
import com.iver.utiles.swing.threads.Cancellable;
63 64

  
......
426 427
	public Map getExtendedProperties();
427 428

  
428 429
	/**
430
	 * Return a new instance of ComposedLayer. 
431
	 * This allow make a single draw for a group
432
	 * of layers with the same source.
433
	 * 
434
	 * If this operation is not aplicable for this 
435
	 * kind of layer this method returns null.
436
	 * 
437
	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer
438
	 * @return ComposedLayer instance or null
439
	 */
440
	public ComposedLayer  newComposedLayer();
441
	
442
	/**
429 443
	 * @return
430 444
	 */
431 445
	Image getTocStatusImage();
branches/v10/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/layerOperations/ComposedLayer.java
3 3
import java.awt.Graphics2D;
4 4
import java.awt.image.BufferedImage;
5 5

  
6
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
6
import com.iver.cit.gvsig.fmap.DriverException;
7 7
import com.iver.cit.gvsig.fmap.ViewPort;
8 8
import com.iver.cit.gvsig.fmap.layers.FLayer;
9 9
import com.iver.utiles.swing.threads.Cancellable;
......
40 40
	 * @see  com.iver.cit.gvsig.fmap.layers.FLayer#draw(BufferedImage, Graphics2D, ViewPort, Cancellable, double)
41 41
	 */
42 42
    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
43
			Cancellable cancel,double scale) throws ReadDriverException;
43
			Cancellable cancel,double scale) throws DriverException;
44 44

  
45 45
	
46 46
}
branches/v10/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLayers.java
47 47
import java.awt.image.WritableRaster;
48 48
import java.io.File;
49 49
import java.util.ArrayList;
50
import java.util.Collection;
50 51
import java.util.Collections;
51 52
import java.util.Iterator;
52 53
import java.util.List;
......
71 72
import com.iver.cit.gvsig.fmap.drivers.VectorialDatabaseDriver;
72 73
import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
73 74
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
75
import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer;
74 76
import com.iver.cit.gvsig.fmap.layers.layerOperations.InfoByPoint;
75 77
import com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection;
76 78
import com.iver.cit.gvsig.fmap.layers.layerOperations.VectorialData;
......
425 427
//        try
426 428
//        {
427 429
        	boolean bNeedRecalculateCache = false;
430

  
431
   			///// CHEMA ComposedLayer
432
		    long tg1 = System.currentTimeMillis();
433
			ComposedLayer group = null;
434
			ArrayList pendingEvents= new ArrayList();        	
435
        	boolean fireAfterDrawEvent = true;
436
   			///// CHEMA ComposedLayer
437

  
438
        	
439
        	
428 440
//    		while (iter.hasNext())
429 441
//    		{
430 442
    		 for (int i=0; i < layers.size(); i++) {
......
432 444
                    break; // M?s que nada porque las capas raster no son interrumpibles por ahora.
433 445
//    			FLayer lyr = (FLayer) iter.next();
434 446
    			FLayer lyr = (FLayer) layers.get(i);
447

  
448

  
449
       			///// CHEMA ComposedLayer    			
450
    			fireAfterDrawEvent = true;
451
    			///// CHEMA ComposedLayer
452
    			
453
    			
435 454
    		/*	if (lyr instanceof FLyrVect && ((FLyrVect)lyr).isBroken()){
436 455
    				continue;
437 456
    			}
......
467 486
    			        		{
468 487
    			        		//if (bNeedRecalculateCache)
469 488
    			        		// {
489

  
490
       			        			///// CHEMA ComposedLayer
491
    			        			if (group != null) {
492
    			        				//si tenemos un grupo pendiente de pintar, pintamos
493
    			        				// para que la cache sea fiable
494
    			        				group.draw(image, g, viewPort, cancel,scale);
495
    			        				fireLayerDrawingEvents(pendingEvents);
496
    			        				pendingEvents.clear();
497
    			        				group = null;
498
    			        			}
499
       			        			///// CHEMA ComposedLayer
500
       			        			
501

  
470 502
    			        			// Copiamos la imagen actual
471 503
    			        			BufferedImage buff = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
472 504
    			        			WritableRaster w = buff.getRaster();
......
484 516
	    			        			// prepareDrawing de FMap.
485 517
	    			        			if (lyr.isDirty())
486 518
	    			        			{
519
	    			        			
520
	    	   			        			
521
	    	   			        			///// CHEMA ComposedLayer
522
	    			        				// Checks for draw group (ComposedLayer)
523
	        			        			if (group != null) {
524
	        			        				// it's going to load a cache image,
525
	        			        				// the current draw isn't needed
526
	        			        				fireLayerDrawingEvents(pendingEvents);
527
	        			        				pendingEvents.clear();
528
	        			        				group = null;
529
	        			        			}
530
	           			        			///// CHEMA ComposedLayer
531
	           			        			
532

  
487 533
	    			        				g.drawImage(lyr.getCacheImageDrawnLayers(), 0, 0, null);
488 534
	    			        				System.err.println("Pinto con acelerado lo que hab?a antes de " + lyr.getName());
489 535
	    			        			}
......
493 539
    			        	// Si la capa est? "sucia" o alguna de las de abajo est? sucia
494 540
    			        	// hay que volver a dibujar.
495 541
   			        		if (lyr.isDirty() || bNeedRecalculateCache)
496
   			        		{
497
   			        			if (lyr.getFLayerStatus().isDriverLoaded())
542
   			        		{   			        			
543
   			        			if (!lyr.getFLayerStatus().isDriverLoaded())
498 544
   			        			{
499
   			        				lyr.draw(image, g, viewPort, cancel,scale);
500
   			        				bNeedRecalculateCache = true;
501
   			        				System.err.println("Pinto sin acelerado " + lyr.getName());
545
   			        				continue;
546
   			        			}
547
   			        			
548
   			        			///// CHEMA ComposedLayer
549
   			        			//lyr.draw(image, g, viewPort, cancel,scale);
550
   			        			//bNeedRecalculateCache = true;
551
   			        			//System.err.println("Pinto sin acelerado " + lyr.getName());
552
   			        			///// CHEMA ComposedLayer
553
   			        			
554
   			        			///// CHEMA ComposedLayer
555
   			        			// Checks for draw group (ComposedLayer)
556
   			        			if (group != null) {
557
   			        				//If layer can be added to the group, does it
558
   			        				if (group.canAdd(lyr)) {
559
   			        					group.add(lyr);
560
   			        					pendingEvents.add(new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW));
561
   			        					fireAfterDrawEvent=false;
562
   			        				} else {
563
   			        					// draw the 'pending to draw' layer group
564
   		   			        			group.draw(image, g, viewPort, cancel,scale);
565
    			        				fireLayerDrawingEvents(pendingEvents);
566
    			        				pendingEvents.clear();
502 567

  
568
   		   			        			// gets a new group instance
569
   		   			        			group = lyr.newComposedLayer();
570
   		   			        			// if layer hasn't group, draws it inmediately 
571
   		   			        			if (group == null) {
572
   		   			        				lyr.draw(image, g, viewPort, cancel,scale);
573
   		   			        			} else {
574
   		   			        				// add the layer to the group
575
   		   			        				group.add(lyr);
576
   	   			        					pendingEvents.add(new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW));
577
   	   			        					fireAfterDrawEvent=false;
578
   		   			        			}
579
   			        				}
580
   			        			} else {
581
	   			        			// gets a new group instance
582
	   			        			group = lyr.newComposedLayer();
583
	   			        			// if layer hasn't group, draws it inmediately 
584
	   			        			if (group == null) {
585
	   			        				lyr.draw(image, g, viewPort, cancel,scale);
586
	   			        			} else {
587
	   			        				// adds the layer to the group
588
	   			        				group.add(lyr);
589
   			        					pendingEvents.add(new LayerDrawEvent(lyr, g, viewPort, LayerDrawEvent.LAYER_AFTER_DRAW));
590
   			        					fireAfterDrawEvent=false;
591
	   			        			}
503 592
   			        			}
593
   			        			///// CHEMA ComposedLayer
594
								bNeedRecalculateCache = true;
504 595
   			        		}
505 596
    			        } catch (DriverException e){
506 597
    			        	// fmap.callNewErrorEvent(new ErrorEvent(lyr.getName(), e));
......
523 614
    			fmap.fireLayerDrawingEvent(afterEvent);
524 615

  
525 616
    		}
617
    		///// CHEMA ComposedLayer 
618
    		if (group != null) {
619
 				//si tenemos un grupo pendiente de pintar, pintamos    			 
620
 				group.draw(image, g, viewPort, cancel,scale);
621
				fireLayerDrawingEvents(pendingEvents);
622

  
623
 			}
624
			///// CHEMA ComposedLayer    		
526 625
    		if (getVirtualLayers() != null) {
527 626
    			getVirtualLayers().draw(image, g, viewPort, cancel,scale);
528 627
    		}
......
532 631
//            System.err.println(e.getMessage());
533 632
//        }
534 633
	}
535

  
634
	
635
	private void fireLayerDrawingEvents(Collection events) {
636
		Iterator iter = events.iterator();
637
		LayerDrawEvent afterEvent;
638
		while (iter.hasNext()) {
639
			afterEvent =(LayerDrawEvent)iter.next();
640
			System.out.println("+++ evento " + afterEvent.getLayer().getName());
641
			fmap.fireLayerDrawingEvent(afterEvent);
642
		}
643
	}
644
	
536 645
	/**
537 646
	 * @see com.iver.cit.gvsig.fmap.layers.FLayer#print(java.awt.Graphics2D,
538 647
	 * 		com.iver.cit.gvsig.fmap.ViewPort,
branches/v10/extensions/extWMS/src/com/iver/cit/gvsig/fmap/layers/ComposedLayerWMS.java
7 7
import java.awt.image.BufferedImage;
8 8
import java.util.Vector;
9 9

  
10
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
10
import com.iver.cit.gvsig.fmap.DriverException;
11 11
import com.iver.cit.gvsig.fmap.ViewPort;
12 12
import com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer;
13 13
import com.iver.utiles.swing.threads.Cancellable;
......
69 69
	 * @see com.iver.cit.gvsig.fmap.layers.layerOperations.ComposedLayer#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.utiles.swing.threads.Cancellable, double)
70 70
	 */
71 71
	public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
72
			Cancellable cancel, double scale) throws ReadDriverException {
72
			Cancellable cancel, double scale) throws DriverException {
73 73
		this.layer.draw(image,g,viewPort,cancel,scale);
74 74
	}
75 75

  

Also available in: Unified diff