/* * File : Holes.java * Created : 01-oct-2001 9:58 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.shapers; import edu.xtec.util.JDomUtility; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.28 */ public class Holes extends Shaper { protected double scaleW; protected double scaleH; protected ShapeData enclosingShapeData; // may be supressed? protected boolean showEnclosure; public Holes(int nx,int ny) { super(1, 1); scaleW=1.0; scaleH=1.0; enclosingShapeData=null; showEnclosure=true; shapeData=new ShapeData[0]; nCols=nx; nRows=ny; } @Override public void reset(int nCols, int nRows){ this.nCols=nCols; this.nRows=nRows; initiated=false; } @Override public String getEditorPanelClassName(){ return getClass().getPackage().getName()+".HolesEditorPanel"; } public static final String SHAPE="shape"; public static final String SHOW_ENCLOSURE="showEnclosure"; protected static final String SCALE_W="scaleX", SCALE_H="scaleY", ENCLOSING="enclosing"; @Override public org.jdom.Element getJDomElement(){ org.jdom.Element e=super.getJDomElement(); if(!showEnclosure) e.setAttribute(SHOW_ENCLOSURE, JDomUtility.boolString(showEnclosure)); if(scaleW!=1.0) e.setAttribute(SCALE_W, Double.toString(scaleW)); if(scaleH!=1.0) e.setAttribute(SCALE_H, Double.toString(scaleH)); if(enclosingShapeData!=null) e.addContent(new org.jdom.Element(ENCLOSING).addContent(enclosingShapeData.getJDomElement(scaleW, scaleH))); if(shapeData!=null) for(int i=0; i<nCells; i++) e.addContent(shapeData[i].getJDomElement(scaleW, scaleH)); return e; } @Override public void setProperties(org.jdom.Element e, Object aux) throws Exception{ scaleW=JDomUtility.getDoubleAttr(e, SCALE_W, scaleW); scaleH=JDomUtility.getDoubleAttr(e, SCALE_H, scaleH); showEnclosure=JDomUtility.getBoolAttr(e, SHOW_ENCLOSURE, showEnclosure); org.jdom.Element child=e.getChild(ENCLOSING); if(child!=null){ child=child.getChild(ShapeData.ELEMENT_NAME); enclosingShapeData=ShapeData.getShapeData(child, scaleW, scaleH); // WARNING: showEnclosure=true; } java.util.List childs=e.getChildren(ShapeData.ELEMENT_NAME); if(!childs.isEmpty()){ nCells=childs.size(); //nCols=nRows=1; shapeData=new ShapeData[nCells]; for(int i=0; i<nCells; i++) shapeData[i]=ShapeData.getShapeData((org.jdom.Element)childs.get(i), scaleW, scaleH); } else{ nCells=0; nCols=nRows=0; shapeData=null; } } protected void buildShapes(){ if(nCells>0) initiated=true; } @Override public boolean hasRemainder(){ return showEnclosure; } @Override protected ShapeData getEnclosingShapeData(){ if(!showEnclosure) return null; return enclosingShapeData!=null ? enclosingShapeData : super.getEnclosingShapeData(); } @Override public Object clone() throws CloneNotSupportedException { Holes clon=(Holes)super.clone(); if(enclosingShapeData!=null) enclosingShapeData=(ShapeData)enclosingShapeData.clone(); return clon; } public void removeShape(int iIndex){ if (shapeData==null || iIndex<0 || iIndex>=shapeData.length) return; ShapeData[] newShapeData=new ShapeData[shapeData.length-1]; System.arraycopy(shapeData,0,newShapeData,0,iIndex); System.arraycopy(shapeData,iIndex+1,newShapeData,iIndex,shapeData.length-iIndex-1); nCells=newShapeData.length; shapeData=newShapeData; } public void addShape(ShapeData sd){ ShapeData[] newShapeData=new ShapeData[shapeData.length+1]; System.arraycopy(shapeData,0,newShapeData,0,shapeData.length); newShapeData[shapeData.length]=sd; nCells=newShapeData.length; shapeData=newShapeData; } public void modifyShape(int iIndex, ShapeData sd){ if (iIndex>=0 && iIndex<shapeData.length){ sd.comment=(shapeData[iIndex]!=null)?shapeData[iIndex].comment:""; shapeData[iIndex]=sd; } } }