Fix typos in messages and comments.
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / uiimage / SwingScilabUiImage.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - Han DONG
4  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13 package org.scilab.modules.gui.bridge.uiimage;
14
15 import java.awt.Graphics2D;
16 import java.awt.Image;
17 import java.awt.image.BufferedImage;
18
19 import javax.swing.ImageIcon;
20 import javax.swing.JLabel;
21
22 import org.scilab.forge.scirenderer.shapes.appearance.Color;
23 import org.scilab.modules.gui.SwingViewObject;
24 import org.scilab.modules.gui.SwingViewWidget;
25 import org.scilab.modules.gui.events.callback.CommonCallBack;
26 import org.scilab.modules.gui.menubar.MenuBar;
27 import org.scilab.modules.gui.textbox.TextBox;
28 import org.scilab.modules.gui.toolbar.ToolBar;
29 import org.scilab.modules.gui.uiimage.SimpleUiImage;
30 import org.scilab.modules.gui.utils.Position;
31 import org.scilab.modules.gui.utils.PositionConverter;
32 import org.scilab.modules.gui.utils.ScilabAlignment;
33 import org.scilab.modules.gui.utils.ScilabRelief;
34 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
35 import org.scilab.modules.gui.utils.Size;
36
37 /**
38  * Swing implementation for Scilab Image in GUIs
39  * @author Han DONG
40  * @author Vincent COUVERT
41  */
42 public class SwingScilabUiImage extends JLabel implements SwingViewObject, SimpleUiImage {
43
44     private static final long serialVersionUID = -3394912554085956130L;
45
46     private String uid;
47
48     private ImageIcon imi;
49     private Image img;
50     private String imageFile;
51     private int imageWidth;
52     private int imageHeight;
53
54     private double[] scale;
55     private double[] shear;
56     private double angle;
57
58     /**
59      * Constructor
60      */
61     public SwingScilabUiImage() {
62         super();
63         setOpaque(true);
64         setBackground(Color.WHITE);
65         scale = new double[2];
66         shear = new double[2];
67     }
68
69
70     /**
71      * Draws a swing Scilab Image
72      * @see org.scilab.modules.gui.uielement.UIElement#draw()
73      */
74     public void draw() {
75         this.setVisible(true);
76         this.doLayout();
77     }
78
79     /**
80      * Gets the dimensions (width and height) of a swing Scilab element
81      * @return the dimensions of the element
82      * @see org.scilab.modules.gui.uielement.UIElement#getDims()
83      */
84     public Size getDims() {
85         return new Size(getWidth(), getHeight());
86     }
87
88     /**
89      * Gets the position (X-coordinate and Y-coordinate) of a swing Scilab element
90      * @return the position of the element
91      * @see org.scilab.modules.gui.uielement.UIElement#getPosition()
92      */
93     public Position getPosition() {
94         return PositionConverter.javaToScilab(getLocation(), getSize(), getParent());
95     }
96
97     /**
98      * Sets the dimensions (width and height) of a swing Scilab element
99      * @param newSize the dimensions to set to the element
100      * @see org.scilab.modules.gui.uielement.UIElement#setDims(org.scilab.modules.gui.utils.Size)
101      */
102     public void setDims(Size newSize) {
103         setSize(newSize.getWidth(), newSize.getHeight());
104     }
105
106     /**
107      * Sets the position (X-coordinate and Y-coordinate) of a swing Scilab element
108      * @param newPosition the position to set to the element
109      * @see org.scilab.modules.gui.uielement.UIElement#setPosition(org.scilab.modules.gui.utils.Position)
110      */
111     public void setPosition(Position newPosition) {
112         Position javaPosition = PositionConverter.scilabToJava(newPosition, getDims(), getParent());
113         setLocation(javaPosition.getX(), javaPosition.getY());
114     }
115
116     /**
117      * Add a callback to the Image
118      * @param callback the callback to set.
119      */
120     public void setCallback(CommonCallBack callback) {
121         // Nothing to do...
122     }
123
124     /**
125      * Setter for MenuBar
126      * @param menuBarToAdd the MenuBar associated to the Image.
127      */
128     public void addMenuBar(MenuBar menuBarToAdd) {
129         /* Unimplemented for Image */
130         throw new UnsupportedOperationException();
131     }
132
133     /**
134      * Setter for ToolBar
135      * @param toolBarToAdd the ToolBar associated to the Image.
136      */
137     public void addToolBar(ToolBar toolBarToAdd) {
138         /* Unimplemented for Image */
139         throw new UnsupportedOperationException();
140     }
141
142     /**
143      * Getter for MenuBar
144      * @return MenuBar: the MenuBar associated to the Image.
145      */
146     public MenuBar getMenuBar() {
147         /* Unimplemented for Image */
148         throw new UnsupportedOperationException();
149     }
150
151     /**
152      * Getter for ToolBar
153      * @return ToolBar: the ToolBar associated to the Image.
154      */
155     public ToolBar getToolBar() {
156         /* Unimplemented for Image */
157         throw new UnsupportedOperationException();
158     }
159
160     /**
161      * Set the horizontal alignment for the Image text
162      * @param alignment the value for the alignment (See ScilabAlignment.java)
163      */
164     public void setHorizontalAlignment(String alignment) {
165         setHorizontalAlignment(ScilabAlignment.toSwingAlignment(alignment));
166     }
167
168     /**
169      * Set the vertical alignment for the Image text
170      * @param alignment the value for the alignment (See ScilabAlignment.java)
171      */
172     public void setVerticalAlignment(String alignment) {
173         setVerticalAlignment(ScilabAlignment.toSwingAlignment(alignment));
174     }
175
176     /**
177      * Set the Relief of the Image
178      * @param reliefType the type of the relief to set (See ScilabRelief.java)
179      */
180     public void setRelief(String reliefType) {
181         setBorder(ScilabRelief.getBorderFromRelief(reliefType));
182     }
183
184     /**
185      * Destroy the Image
186      */
187     public void destroy() {
188         ScilabSwingUtilities.removeFromParent(this);
189     }
190
191     /**
192      * Setter for InfoBar
193      * @param infoBarToAdd the InfoBar associated to the Image.
194      */
195     public void addInfoBar(TextBox infoBarToAdd) {
196         /* Unimplemented for Image */
197         throw new UnsupportedOperationException();
198     }
199
200     /**
201      * Getter for InfoBar
202      * @return the InfoBar associated to the Image.
203      */
204     public TextBox getInfoBar() {
205         /* Unimplemented for Image */
206         throw new UnsupportedOperationException();
207     }
208
209     /**
210      * gets directory of image
211      * @return the directory string
212      * @see org.scilab.modules.gui.text.SimpleText#getText()
213      */
214     public String getText() {
215         return "";
216     }
217
218     /**
219      * Sets the directory for image
220      * @param newText the new directory to image
221      */
222     public void setText(String newText) {
223         imageFile = newText;
224         imi = new ImageIcon(imageFile);
225         img = imi.getImage();
226         setIcon(imi);
227     }
228
229     /**
230      * Rotates the image
231      * @param angle the double value of the angle to rotate
232      */
233     public void setRotate(double angle) {
234         this.angle = angle;
235         updateImage();
236     }
237
238     /**
239      * Shears the image
240      * @param indices the double array of x, y values to shear
241      */
242     public void setShear(double[] indices) {
243         shear = indices;
244         updateImage();
245     }
246
247     /**
248      * Scaless the image
249      * @param indices the double array of x, y values to scale
250      */
251     public void setScale(double[] indices) {
252         scale = indices;
253         updateImage();
254     }
255
256     /**
257      * Update the image with new values
258      */
259     private void updateImage() {
260         if (img != null && img.getHeight(this) >= 0 && img.getWidth(this) >= 0) {
261             imageWidth = (int) Math.ceil(img.getWidth(this) * scale[0]);
262             imageHeight = (int) Math.ceil(img.getHeight(this) * scale[1]);
263             BufferedImage bim = new BufferedImage(imageWidth, imageHeight, BufferedImage.TRANSLUCENT);
264             Graphics2D g2 = bim.createGraphics();
265             g2.fillRect(0, 0, imageWidth, imageHeight);
266             g2.shear(shear[0], shear[1]);
267             g2.rotate(Math.toRadians(angle), imageWidth / 2, imageHeight / 2);
268             g2.drawImage(img, 0, 0, imageWidth, imageHeight, this);
269             setIcon(new ImageIcon(bim));
270         }
271     }
272
273     /**
274      * Set the UID
275      * @param id the UID
276      */
277     public void setId(String id) {
278         uid = id;
279     }
280
281     /**
282      * Get the UID
283      * @return the UID
284      */
285     public String getId() {
286         return uid;
287     }
288
289     /**
290      * Generic update method
291      * @param property property name
292      * @param value property value
293      */
294     public void update(String property, Object value) {
295         SwingViewWidget.update(this, property, value);
296     }
297 }