Revision 3548 trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/layout/Layout.java

View differences:

Layout.java
101 101
import com.iver.cit.gvsig.fmap.DriverException;
102 102
import com.iver.cit.gvsig.fmap.ExtentEvent;
103 103
import com.iver.cit.gvsig.fmap.ViewPortListener;
104
import com.iver.cit.gvsig.fmap.core.adapter.CircleAdapter;
105
import com.iver.cit.gvsig.fmap.core.adapter.GeometryAdapter;
106
import com.iver.cit.gvsig.fmap.core.adapter.PointAdapter;
107
import com.iver.cit.gvsig.fmap.core.adapter.PolyLineAdapter;
108
import com.iver.cit.gvsig.fmap.core.adapter.PolygonAdapter;
109
import com.iver.cit.gvsig.fmap.core.adapter.RectangleAdapter;
104 110
import com.iver.cit.gvsig.fmap.layers.XMLException;
111
import com.iver.cit.gvsig.gui.layout.commands.DefaultEditableFeatureSource;
112
import com.iver.cit.gvsig.gui.layout.commands.EditableFeatureSource;
105 113
import com.iver.cit.gvsig.gui.layout.dialogs.FConfigLayoutDialog;
106 114
import com.iver.cit.gvsig.gui.layout.fframes.FFrame;
107 115
import com.iver.cit.gvsig.gui.layout.fframes.FFrameGraphics;
......
113 121
import com.iver.cit.gvsig.gui.layout.fframes.FFrameText;
114 122
import com.iver.cit.gvsig.gui.layout.fframes.FFrameView;
115 123
import com.iver.cit.gvsig.gui.layout.fframes.IFFrame;
124
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameEditable;
125
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameLayoutDependence;
116 126
import com.iver.cit.gvsig.gui.layout.fframes.IFFrameViewDependence;
117 127
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameGraphicsDialog;
118 128
import com.iver.cit.gvsig.gui.layout.fframes.dialogs.FFrameGroupDialog;
......
168 178
    public static final int VIEW_FULL = 32;
169 179
    public static final int VIEW_PAN = 33;
170 180
    public static final int SET_TAG = 34;
181
    public static final int EDIT=35;
171 182
    public static final Image iLayoutpan = new ImageIcon(AddLayer.class.getClassLoader()
172 183
                                                                       .getResource("images/LayoutHand.gif")).getImage();
173 184
    public static final Image ipan = new ImageIcon(AddLayer.class.getClassLoader()
......
213 224
    private AffineTransform m_MatrizTransf;
214 225
    private Rectangle2D rectVisible;
215 226
    private IFFrameDialog fframedialog = null;
216
    private ArrayList m_fframes = new ArrayList();
227
    ///private ArrayList m_fframes = new ArrayList();
228
    private IFFrame[] fframes;
217 229
    private MapProperties m_propertiesLayout = null;
218 230
    private Attributes m_attributes = null;
219 231
    private PrintService[] m_cachePrintServices = null;
......
229 241
    private boolean isDrawCuadricula = true;
230 242
    private Doc doc = null;
231 243
    private PrintRequestAttributeSet att = null;
244
    private GeometryAdapter geometryAdapter=new PolyLineAdapter();
245
    private DefaultEditableFeatureSource efs;
232 246
    private boolean isEditable=true;
233 247
    
234 248
    /**
......
241 255
     * Creates a new Layout object.
242 256
     */
243 257
    public Layout() {
258
    	efs=new DefaultEditableFeatureSource();
259
    	updateFFrames();
244 260
        this.setLayout(null);
245 261
        events = new EventsHandler(this);
246 262
        layoutDraw = new FLayoutDraw(this);
247 263
        addComponentListener(events);
248 264
        addMouseMotionListener(events);
249 265
        addMouseListener(events);
266
        addKeyListener(events);
250 267
        m_MatrizTransf = new AffineTransform();
251 268
        m_MatrizTransf.setToIdentity();
252 269
        this.initComponents();
......
316 333
    public synchronized void setCancelDrawing(boolean b) {
317 334
        m_bCancelDrawing = b;
318 335

  
319
        for (int i = 0; i < getFFrames().size(); i++) {
320
            IFFrame fframe = (IFFrame) getFFrames().get(i);
336
        for (int i = 0; i < getFFrames().length; i++) {
337
            IFFrame fframe = (IFFrame) getFFrame(i);
321 338

  
322 339
            if (fframe instanceof FFrameView &&
323 340
                    (((FFrameView) fframe).getFMap() != null)) {
......
331 348
     *
332 349
     * @return Array con todos los fframes que contiene el Layout.
333 350
     */
334
    public ArrayList getFFrames() {
335
        return m_fframes;
351
    public IFFrame[] getFFrames() {
352
    	return fframes;
336 353
    }
337

  
354
    public IFFrame getFFrame(int i){
355
    	return fframes[i];
356
    }
357
    public void updateFFrames(){
358
    	fframes=efs.getFFrames();
359
    }
338 360
    /**
339 361
     * Obtiene el rect que se ajusta al tama?o de la ventana, para ver el folio
340 362
     * entero.
......
384 406
        m_attributes.setDistanceUnitX(rect);
385 407
        m_attributes.setDistanceUnitY(rect);
386 408

  
387
        for (int i = 0; i < getFFrames().size(); i++) {
409
        for (int i = 0; i < getFFrames().length; i++) {
388 410
            try {
389
                ((IFFrame) getFFrames().get(i)).print(g2, getAT());
411
                ((IFFrame) getFFrame(i)).print(g2, getAT());
390 412
            } catch (DriverException e) {
391 413
                NotificationManager.addError(e.getMessage(), e);
392 414
            }
......
426 448
    private void actionDelFFrame() {
427 449
        Action doNothing = new AbstractAction() {
428 450
                public void actionPerformed(ActionEvent e) {
429
                    for (int i = getFFrames().size() - 1; i >= 0; i--) {
430
                        IFFrame fframe = (IFFrame) getFFrames().get(i);
431

  
432
                        if (fframe.getSelected() != IFFrame.NOSELECT) {
433
                            getFFrames().remove(i);
434
                        }
435
                    }
436

  
437
                    refresh();
451
                   delFFrameSelected();
452
                   refresh();
438 453
                }
439 454
            };
440 455

  
......
532 547
                // logger.debug("View pan");
533 548
                layoutDraw.drawRectangle((Graphics2D) g);
534 549

  
535
                for (int i = 0; i < getFFrames().size(); i++) {
536
                    if (getFFrames().get(i) instanceof FFrameView) {
537
                        FFrameView fframe = (FFrameView) getFFrames().get(i);
550
                for (int i = 0; i < getFFrames().length; i++) {
551
                    if (getFFrame(i) instanceof FFrameView) {
552
                        FFrameView fframe = (FFrameView) getFFrame(i);
538 553

  
539 554
                        if (fframe.getSelected() != IFFrame.NOSELECT) {
540 555
                            Rectangle2D.Double rec = fframe.getBoundingBox(getAT());
......
591 606
                    reSel.setFrameFromDiagonal(m_FirstPoint, m_LastPoint);
592 607
                    g.drawRect(reSel.x, reSel.y, reSel.width, reSel.height);
593 608
                }
609
                IFFrame[] frames=getFFrameSelected();
610
                for (int i = 0; i < frames.length; i++) {
611
                    //IFFrame fframe = (IFFrame) getFFrames().get(i);
594 612

  
595
                for (int i = 0; i < getFFrames().size(); i++) {
596
                    IFFrame fframe = (IFFrame) getFFrames().get(i);
597

  
598
                    if (fframe.getSelected() != IFFrame.NOSELECT) {
613
                    //if (fframe.getSelected() != IFFrame.NOSELECT) {
599 614
                        g.setColor(Color.black);
600
                        fframe.drawHandlers((Graphics2D) g);
615
                        frames[i].drawHandlers((Graphics2D) g);
601 616

  
602 617
                        int difx = (m_LastPoint.x - m_FirstPoint.x);
603 618
                        int dify = (m_LastPoint.y - m_FirstPoint.y);
604

  
619
                       // System.out.println(m_FirstPoint);
620
                       // System.out.println(m_LastPoint);
605 621
                        if ((Math.abs(difx) > 3) || (Math.abs(dify) > 3)) {
606
                            Rectangle2D rectangle = fframe.getMovieRect(difx,
622
                            Rectangle2D rectangle = frames[i].getMovieRect(difx,
607 623
                                    dify);
608 624
                            ((Graphics2D) g).rotate(Math.toRadians(
609
                                    fframe.getRotation()),
625
                                    frames[i].getRotation()),
610 626
                                rectangle.getX() + (rectangle.getWidth() / 2),
611 627
                                rectangle.getY() + (rectangle.getHeight() / 2));
612 628

  
......
617 633
                                        m_attributes.getUnitInPixelsY(),
618 634
                                        m_MatrizTransf);
619 635
                                }
620

  
636
                                
621 637
                                g.drawRect((int) rectangle.getMinX(),
622 638
                                    (int) rectangle.getMinY(),
623 639
                                    (int) rectangle.getWidth(),
......
625 641
                            }
626 642

  
627 643
                            ((Graphics2D) g).rotate(Math.toRadians(
628
                                    -fframe.getRotation()),
644
                                    -frames[i].getRotation()),
629 645
                                rectangle.getX() + (rectangle.getWidth() / 2),
630 646
                                rectangle.getY() + (rectangle.getHeight() / 2));
631 647
                        }
632
                    }
648
                    //}
633 649
                }
634 650

  
635 651
                g.setClip(rClip);
......
637 653
                layoutDraw.drawRuler((Graphics2D) g, Color.black);
638 654

  
639 655
                break;
640

  
641
            case GRAPHICS:
656
             case GRAPHICS:
657
            	 logger.debug("graphics");
642 658
                layoutDraw.drawRectangle((Graphics2D) g);
643 659
                g.drawImage(img, 0, 0, this);
644 660
                g.setClip(rClip);
645 661
                layoutDraw.drawGrid((Graphics2D) g);
646 662
                layoutDraw.drawRuler((Graphics2D) g, Color.black);
647

  
663
                
664
                if (getTool()==EDIT){
665
                	IFFrame[] fframeSelect=getFFrameSelected();
666
                	for(int i=0;i<fframeSelect.length;i++){
667
                		if (fframeSelect[i] instanceof IFFrameEditable){
668
                			((IFFrameEditable)fframeSelect[i]).paint((Graphics2D)g,getAT());
669
                		}
670
                	}
671
                }else{
672
                	geometryAdapter.paint((Graphics2D)g,getAT());
673
                }
648 674
                break;
649 675

  
650 676
            case DESACTUALIZADO:
......
674 700
                layoutDraw.drawGrid((Graphics2D) g);
675 701
                layoutDraw.drawHandlers((Graphics2D) g, Color.black);
676 702
                layoutDraw.drawRuler((Graphics2D) g, Color.black);
677

  
703
                
678 704
                break;
679 705

  
680 706
            case ACTUALIZADO:
707
            	logger.debug("actualizado");
681 708
                layoutDraw.drawRectangle((Graphics2D) g);
682 709

  
683 710
                g.drawImage(img, 0, 0, this);
......
702 729
     */
703 730
    public void addFFrame(IFFrame frame, boolean clearSelection, boolean select) {
704 731
        if (clearSelection) {
705
            for (int i = getFFrames().size() - 1; i >= 0; i--) {
706
                IFFrame fframe1 = (IFFrame) getFFrames().get(i);
732
            for (int i = getFFrames().length - 1; i >= 0; i--) {
733
                IFFrame fframe1 = (IFFrame) getFFrame(i);
707 734
                fframe1.setSelected(false);
708 735
            }
709 736
        }
......
722 749
        }
723 750

  
724 751
        frame.setNum(Integer.parseInt(nums.get(frame.getClass()).toString()));
725
        getFFrames().add(frame);
752
        efs.addFFrame(frame);
753
        ///getFFrames().add(frame);
726 754
        frame.setSelected(select);
755
        updateFFrames();
727 756
    }
728 757

  
729 758
    /**
......
935 964
        } else if (getTool() == POINT) {
936 965
            setMapCursor(iPoint);
937 966
        } else if (getTool() == LINE) {
938
            setMapCursor(iLine);
967
            setMapCursor(iRect);
939 968
        } else if (getTool() == RECTANGLESIMPLE) {
940 969
            setMapCursor(iRectangle);
941 970
        } else if (getTool() == POLYLINE) {
942 971
            setMapCursor(iLine);
943
           //// polyline=new Line();
944 972
        } else if (getTool() == POLYGON) {
945 973
            setMapCursor(iPoligon);
946 974
        } else if (getTool() == CIRCLE) {
947 975
            setMapCursor(iCircle);
976
        } 
977
        if (getTool() == EDIT){
978
        	setMapCursor(icrux);
979
        	startEdit();
980
        }else{
981
        	stopEdit();
948 982
        }
983
        initGeometryAdapter();
949 984
    }
950 985

  
951 986
    /**
......
1180 1215
     * @throws DriverException
1181 1216
     */
1182 1217
    public void viewFull() throws DriverException {
1183
        for (int i = 0; i < getFFrames().size(); i++) {
1184
            if (getFFrames().get(i) instanceof FFrameView) {
1185
                FFrameView fframe = (FFrameView) getFFrames().get(i);
1218
        for (int i = 0; i < getFFrames().length; i++) {
1219
            if (getFFrame(i) instanceof FFrameView) {
1220
                FFrameView fframe = (FFrameView) getFFrame(i);
1186 1221

  
1187 1222
                if ((fframe.getSelected() != IFFrame.NOSELECT) &&
1188 1223
                        (fframe.getView() != null)) {
......
1205 1240
     * @throws XMLException
1206 1241
     */
1207 1242
    public XMLEntity getXMLEntity() {
1243
    	//getEFS().compact();
1208 1244
        XMLEntity xml = new XMLEntity();
1209 1245
        xml.putProperty("className", this.getClass().getName());
1210 1246
        xml.setName("layout");
......
1212 1248
        xml.putProperty("m_name", this.getName());
1213 1249
        xml.putProperty("isEditable",isEditable);
1214 1250
        xml.addChild(getAtributes().getXMLEntity());
1215
        for (int i = 0; i < getFFrames().size(); i++) {
1251
        
1252
        for (int i = 0; i < getFFrames().length; i++) {
1216 1253
        	try{
1217
        		XMLEntity xmlAux=((IFFrame) getFFrames().get(i)).getXMLEntity();
1254
        		XMLEntity xmlAux=((IFFrame) getFFrame(i)).getXMLEntity();
1218 1255
        		xmlAux.putProperty("level",i);
1219 1256
        		xml.addChild(xmlAux);
1220 1257
        	}catch (SaveException e) {
......
1238 1275
        layout.isCuadricula = xml.getBooleanProperty("isCuadricula");
1239 1276
        layout.setName(xml.getStringProperty("m_name"));
1240 1277
        layout.m_attributes = Attributes.createAtributes(xml.getChild(0));
1241
        if (xml.contains("isEditable")){
1278
         if (xml.contains("isEditable")){
1242 1279
        	layout.setEditable(xml.getBooleanProperty("isEditable"));
1243 1280
        }
1281
        layout.getEFS().startComplexCommand();
1244 1282
        for (int i = 1; i < xml.getNumChild(); i++) {
1245 1283
        	    try {
1246 1284
					layout.addFFrame(FFrame.createFFrame(xml.getChild(i),p),
......
1249 1287
					e.showError();
1250 1288
				}
1251 1289
        }
1290
        layout.getEFS().endComplexCommand();
1252 1291
        IFFrame[] fframes=layout.getAllFFrames();
1253 1292
        for (int i=0;i<fframes.length;i++){
1254
        	if (fframes[i] instanceof FFrameView){
1255
        		((FFrameView)fframes[i]).setLayout(layout);
1293
        	if (fframes[i] instanceof IFFrameLayoutDependence){
1294
        		((IFFrameLayoutDependence)fframes[i]).setLayout(layout);
1256 1295
        	}
1257 1296
        	if (fframes[i] instanceof IFFrameViewDependence){
1258 1297
        		((IFFrameViewDependence)fframes[i]).initDependence(fframes);
......
1359 1398
    public IFFrame[] getFFrameSelected() {
1360 1399
        ArrayList selecList = new ArrayList();
1361 1400

  
1362
        for (int i = getFFrames().size() - 1; i >= 0; i--) {
1363
            IFFrame fframe = (IFFrame) getFFrames().get(i);
1401
        for (int i = getFFrames().length - 1; i >= 0; i--) {
1402
            IFFrame fframe = (IFFrame) getFFrame(i);
1364 1403

  
1365 1404
            if (fframe.getSelected() != IFFrame.NOSELECT) {
1366 1405
                selecList.add(fframe);
......
1422 1461
        bModeDebug = modeDebug;
1423 1462
    }
1424 1463
   
1425
    private ArrayList allFFrames(ArrayList fframes, ArrayList all){
1426
    	for (int i=0;i<fframes.size();i++){
1427
    		if (fframes.get(i) instanceof FFrameGroup){
1428
    			return allFFrames(((FFrameGroup)fframes.get(i)).getFFrames(),all);
1464
    private ArrayList allFFrames(IFFrame[] fframes, ArrayList all){
1465
    	for (int i=0;i<fframes.length;i++){
1466
    		if (fframes[i] instanceof FFrameGroup){
1467
    			return allFFrames(((FFrameGroup)fframes[i]).getFFrames(),all);
1429 1468
    			
1430 1469
    		}else{
1431
    			all.add(fframes.get(i));
1470
    			all.add(fframes[i]);
1432 1471
    		}
1433 1472
    	}
1434 1473
    	return all;
......
1437 1476
		ArrayList all=new ArrayList();
1438 1477
		return (IFFrame[])allFFrames(getFFrames(),all).toArray(new IFFrame[0]);
1439 1478
	}
1479

  
1480
	public GeometryAdapter getGeometryAdapter() {
1481
		return geometryAdapter;
1482
	}
1440 1483
	public boolean isEditable(){
1441 1484
		return isEditable;
1442 1485
	}
1443 1486
	public void setEditable(boolean b) {
1444 1487
		isEditable=b;
1445 1488
	}
1489
	public void initGeometryAdapter() {
1490
		if (getTool() == LINE) {
1491
			geometryAdapter=new PolyLineAdapter();
1492
        } else if (getTool() == RECTANGLESIMPLE) {
1493
        	geometryAdapter=new RectangleAdapter();
1494
        } else if (getTool() == POLYLINE) {
1495
            geometryAdapter=new PolyLineAdapter();
1496
        } else if (getTool() == POLYGON) {
1497
            geometryAdapter=new PolygonAdapter();
1498
        } else if (getTool() == CIRCLE) {
1499
        	geometryAdapter=new CircleAdapter();
1500
        } else if (getTool() == POINT) {
1501
        	geometryAdapter=new PointAdapter();
1502
        } 
1503
	}
1504
	public void startEdit() {
1505
		for(int i=0;i<getFFrames().length;i++){
1506
			IFFrame frame=(IFFrame)getFFrame(i);
1507
			if (frame instanceof IFFrameEditable){
1508
				if (frame.getSelected()!=IFFrame.NOSELECT){
1509
					((IFFrameEditable)frame).startEditing();
1510
				}else{
1511
					((IFFrameEditable)frame).stopEditing();
1512
				}
1513
			}
1514
			
1515
		}
1516
		refresh();
1517
	}
1518
	public void stopEdit(){
1519
		boolean refresh=false;
1520
		for(int i=0;i<getFFrames().length;i++){
1521
			IFFrame frame=(IFFrame)getFFrame(i);
1522
			if (frame instanceof IFFrameEditable){
1523
				if (((IFFrameEditable)frame).isEditing()){
1524
					((IFFrameEditable)getFFrame(i)).stopEditing();
1525
					refresh=true;
1526
				}
1527
			}
1528
		}
1529
		if (refresh) refresh();
1530
	}
1531
	public void delFFrameSelected(){
1532
		efs.startComplexCommand(); 
1533
		for (int i = efs.getAllFFrames().length - 1; i >= 0; i--) {
1534
             IFFrame fframe = (IFFrame) efs.getFFrame(i);
1535

  
1536
             if (fframe.getSelected() != IFFrame.NOSELECT) {
1537
            	 efs.removeFFrame(i);
1538
            	// getFFrames().remove(i);
1539
             }
1540
         }
1541
		efs.endComplexCommand();
1542
		updateFFrames();
1543
	}
1544
	public void delFFrame(int index){
1545
		for(int i=0;i<getEFS().getAllFFrames().length;i++){
1546
			if (getEFS().getFFrame(i).equals(getFFrame(index))){
1547
				getEFS().removeFFrame(i);
1548
			}
1549
		}
1550
		updateFFrames();
1551
	}
1552
	public void delFFrame(IFFrame frame){
1553
		for(int i=0;i<getEFS().getAllFFrames().length;i++){
1554
			if (getEFS().getFFrame(i).equals(frame)){
1555
				getEFS().removeFFrame(i);
1556
			}
1557
		}
1558
		updateFFrames();
1559
	}
1560
	public EditableFeatureSource getEFS(){
1561
		return efs;
1562
	}
1446 1563
}

Also available in: Unified diff