View Javadoc

1   /*
2    * Copyright 1999-2006 Faculty of Mathematics, Physics
3    * and Informatics, Comenius University, Bratislava. This file is protected by
4    * the Mozilla Public License version 1.1 (the License); you may not use this
5    * file except in compliance with the License. You may obtain a copy of the
6    * License at http://euromath2.sourceforge.net/license.html Unless required by
7    * applicable law or agreed to in writing, software distributed under the
8    * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
9    * OF ANY KIND, either express or implied. See the License for the specific
10   * language governing permissions and limitations under the License.
11   */
12  package sk.uniba.euromath.foRenderer.figures;
13  
14  import org.apache.fop.area.Area;
15  import org.eclipse.draw2d.Figure;
16  import org.eclipse.draw2d.geometry.Rectangle;
17  
18  import sk.uniba.euromath.editor.figures.IEMFigure;
19  import sk.uniba.euromath.foRenderer.config.GlobalFOPFigureCfg;
20  
21  /***
22   * @author TV Created on 14.1.2004
23   * 
24   */
25  public class BasicFOPFigure extends Figure implements FOPFigure, IEMFigure {
26  
27          /***
28           * Stores id node associated with this figure.
29           */
30          private final String id;
31  
32          protected final Area area;
33  
34          private Boolean needsEditPart = true;
35  
36          // Object from object source or Node from transformed document
37          private Object model = null;
38  
39          /***
40           * Constructor
41           * 
42           * @param area
43           *                Area object from FOP
44           */
45          public BasicFOPFigure(Area area) {
46                  super();
47                  // Ids were preprocessed by FOP so they contains unqueing sufix
48                  // ,N
49                  String fullId = FOPFigureBuilder.retrieveID(area);
50                  if ((fullId != null) && (fullId.indexOf(",") != -1))
51                          this.id = fullId.substring(0, fullId.indexOf(","));
52                  else
53                          this.id = fullId;
54  
55                  if (area == null)
56                          throw new IllegalArgumentException("null area"); //$NON-NLS-1$
57                  setOpaque(false);
58                  this.area = area;
59          }
60  
61          /***
62           * Constructor
63           * 
64           * @param area
65           *                Area object from FOP
66           * @param needsEditPart
67           *                <code>true</code> if Figure is editable
68           * @param model
69           *                model for the editPart
70           */
71          public BasicFOPFigure(Area area, Boolean needsEditPart, Object model) {
72                  this(area);
73                  this.needsEditPart = needsEditPart;
74                  this.model = model;
75          }
76  
77          /***
78           * Returns Area from that was this figure created
79           * 
80           * @return Area
81           */
82          public Area getArea() {
83                  return this.area;
84          }
85  
86          /***
87           * @return model that will be model of the editPart
88           */
89          public Object getModel() {
90                  return this.model;
91          }
92  
93          /***
94           * @return <code>true</code> if to this figure is needet to create
95           *         EditPart and then this figure can be edited
96           */
97          public boolean needsEditPart() {
98                  return this.needsEditPart;
99          }
100 
101         /***
102          * @see sk.uniba.euromath.fop.figures.FOPFigure#getID()
103          * @return value of id trait
104          */
105         public String getID() {
106                 return this.id;
107         }
108 
109         /***
110          * @param key
111          * @return configuration object
112          */
113         public Object getConfig(Object key) {
114                 return GlobalFOPFigureCfg.getConfig().getData(key,
115                                 this.getClass());
116         }
117 
118         /*
119          * protected boolean isOn(Object key){ Object data = getConfig(key); if
120          * (data != null) return data.equals(FOViewConsts.ON);
121          * 
122          * return false; } protected Color getMarkingColor() { RGB rgb =
123          * (RGB)getConfig(FOViewConsts.BOUNDING_RGB); if (rgb != null) { return
124          * new Color(null, rgb); } else return new Color(null,
125          * ColorConstants.green.getRGB()); }
126          * 
127          * public static String getCoordinatesString(IFigure f, boolean
128          * clientArea){ Rectangle r; if (clientArea) r= f.getClientArea(); else
129          * r = f.getBounds();
130          * 
131          * return "L: [" + r.x + "," + r.y + "]\nS: [" + r.width + "," +
132          * r.height + "]"; }
133          * 
134          * private static final String X_POS = "__X__"; private static final
135          * String Y_POS = "__Y__"; private static final String W_SIZ = "__W__";
136          * private static final String H_SIZ = "__H__";
137          * 
138          * public static String getCoordinatesString(IFigure f, String mask){
139          * Rectangle r = f.getBounds(); String result = mask;
140          * 
141          * if (result.indexOf(X_POS) >= 0){ result.replaceAll(X_POS,
142          * Integer.toString(r.x)); } if (result.indexOf(Y_POS) >= 0){
143          * result.replaceAll(Y_POS, Integer.toString(r.y)); } if
144          * (result.indexOf(W_SIZ) >= 0){ result.replaceAll(W_SIZ,
145          * Integer.toString(r.width)); } if (result.indexOf(H_SIZ) >= 0){
146          * result.replaceAll(H_SIZ, Integer.toString(r.height)); } return
147          * result; }
148          * 
149          * protected void paintBoundingBox(Graphics g){ Color old =
150          * g.getForegroundColor(); Color markClr = getMarkingColor();
151          * g.setForegroundColor(markClr); Rectangle r = getBounds(); //
152          * BUG_REPORT_DONE: Argument is not valid !!! // (marking color disposed
153          * in LineAreaFigure) g.drawRectangle(r.x, r.y , r.width-1, r.height-1);
154          * markClr.dispose(); g.setForegroundColor(old); }
155          * 
156          * protected void paintFigure(Graphics g) { super.paintFigure(g); if
157          * (isOn(FOViewConsts.BOUNDING_BOX)) paintBoundingBox(g); if
158          * (isOn(FOViewConsts.BOUNDING_TXT)) paintSizeData(g, -1); } // position =
159          * 0 --> left // position = 1 --> center // position = 2 --> right
160          * 
161          * private void paintSizeData(Graphics g, int position) {
162          * 
163          * if (position < 0) return;
164          * 
165          * String str = BasicFOPFigure.getCoordinatesString(this, true);
166          * 
167          * g.translate(getClientArea().getLocation()); g.drawText(str, 1, 1);
168          * g.translate(getClientArea().getLocation().getNegated()); }
169          */
170 
171         /***
172          * Sets size of the Figure, x and y coordinates leaves as was.
173          * 
174          * @param r
175          *                Rectangle with new bounds
176          */
177         public void setPixelDimensions(Rectangle r) {
178                 setSize(r.width, r.height);
179         }
180 
181         @Override
182         public String toString() {
183                 return "[id: " + this.id + "]"; 
184         }
185         
186 }