Revision 4691

View differences:

org.gvsig.simpleimageviewer/trunk/org.gvsig.simpleimageviewer/org.gvsig.simpleimageviewer.app.mainplugin/src/main/java/org/gvsig/simpleimageviewer/app/mainplugin/ImageViewerControler.java
4 4
import java.awt.BorderLayout;
5 5
import java.awt.Cursor;
6 6
import java.awt.FlowLayout;
7
import java.awt.Graphics2D;
8 7
import java.awt.Image;
9 8
import java.awt.event.ActionEvent;
10 9
import java.awt.event.ComponentAdapter;
11 10
import java.awt.event.ComponentEvent;
12
import java.awt.event.ContainerEvent;
13
import java.awt.event.ContainerListener;
14
import java.awt.event.KeyEvent;
15
import java.awt.geom.AffineTransform;
16
import java.awt.image.AffineTransformOp;
17
import java.awt.image.BufferedImage;
18
import java.awt.image.BufferedImageOp;
19 11
import java.beans.PropertyChangeEvent;
20
import java.io.File;
21
import java.io.IOException;
22
import java.net.URL;
23 12
import java.text.NumberFormat;
24 13
import javax.swing.Action;
25 14
import javax.swing.BorderFactory;
......
27 16
import javax.swing.JButton;
28 17
import javax.swing.JComponent;
29 18
import javax.swing.SwingUtilities;
30
import javax.swing.event.AncestorEvent;
31
import javax.swing.event.AncestorListener;
19
import javax.swing.event.ChangeListener;
32 20
import org.apache.commons.io.FilenameUtils;
33 21
import org.gvsig.imageviewer.ImageViewer;
34 22
import org.gvsig.tools.ToolsLocator;
35 23
import org.gvsig.tools.i18n.I18nManager;
24
import org.gvsig.tools.swing.api.ChangeListenerHelper;
25
import org.gvsig.tools.swing.api.SimpleImage;
36 26
import org.gvsig.tools.swing.api.ToolsSwingLocator;
37 27
import org.gvsig.tools.swing.api.ToolsSwingManager;
38 28
import org.gvsig.tools.swing.icontheme.IconTheme;
......
50 40
    
51 41
    private JXImageView imageView;
52 42
    private boolean fit = true;
43
    private final ChangeListenerHelper changeListener;
44
    private SimpleImage currentImage;
53 45
    
54 46
    public ImageViewerControler() {
47
        this.changeListener = ToolsSwingLocator.getToolsSwingManager().createChangeListenerHelper();
55 48
        this.initComponents();
56 49
    }
57 50
    
......
126 119

  
127 120
    
128 121
    private void rotate(int mode) {
122
        if( this.currentImage==null ) {
123
            return;
124
        }
129 125
        double scale = imageView.getScale();
130
        Image img = imageView.getImage();
131
        BufferedImage src = new BufferedImage(
132
                    img.getWidth(null),
133
                    img.getHeight(null), 
134
                    BufferedImage.TYPE_INT_ARGB);
135
        BufferedImage dst = new BufferedImage(
136
                    img.getHeight(null), 
137
                    img.getWidth(null),
138
                    BufferedImage.TYPE_INT_ARGB);
139
        Graphics2D g = (Graphics2D)src.getGraphics();
140

  
141
        try {
142
            // smooth scaling
143
            g.drawImage(img, 0, 0, null);
144
        } finally {
145
            g.dispose();
146
        }
147

  
148
        AffineTransform trans;
149 126
        switch(mode) {
150 127
        case ROTATE_RIGHT:
151
            trans = AffineTransform.getRotateInstance(Math.PI/2,0,0);
152
            trans.translate(0,-src.getHeight());
128
            this.currentImage = this.currentImage.rotate(90);
153 129
            break;
154 130
        default:
155 131
        case ROTATE_LEFT:
156
            trans = AffineTransform.getRotateInstance(-Math.PI/2,0,0);
157
            trans.translate(-src.getWidth(),0);
132
            this.currentImage = this.currentImage.rotate(-90);
158 133
            break;
159 134
        }
160
        BufferedImageOp op = new AffineTransformOp(trans, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
161
        op.filter(src,dst);
162
        imageView.setImage(dst);            
135
        imageView.setImage(this.currentImage.getBufferedImage());
163 136
        imageView.setScale(scale);
137
        this.changeListener.fireEvent();
164 138
    }
165 139
    
166 140
    private void onChangeScale() {
......
196 170
    
197 171
    @Override
198 172
    public void clean() {
173
        this.currentImage = null;
199 174
        this.imageView.setImage((Image)null);
175
        this.changeListener.fireEvent();
200 176
    }
201 177
    
202 178
    @Override
203
    public void setImage(final Image image) {
204
        imageView.setImage(image);
205
        onChangeScale();
206
        SwingUtilities.invokeLater(this::adjustScale);
207
    }
179
    public void setImage(Object source) {
180
        if( source==null ) {
181
            this.clean();
182
            return;
183
        }
184
        if( source instanceof SimpleImage ) {
185
            this.setImage((SimpleImage)source);
186
            return;
187
        }
188
        SimpleImage img = ToolsSwingLocator.getToolsSwingManager().createSimpleImage(source);
189
        this.setImage(img);
190
}
208 191
    
209 192
    @Override
210
    public void setImage(URL url) {
211
        try {
212
            this.imageView.setImage(url);
213
        } catch (IOException ex) {
214
            throw new IllegalArgumentException(ex);
193
    public void setImage(final SimpleImage image) {
194
        if( image==null ) {
195
            this.clean();
196
            return;
215 197
        }
198
        this.currentImage = image;
199
        imageView.setImage(this.currentImage.getBufferedImage());
200
        this.changeListener.fireEvent();
216 201
        onChangeScale();
217 202
        SwingUtilities.invokeLater(this::adjustScale);
218 203
    }
219

  
204
    
220 205
    @Override
221
    public void setImage(File file) {
222
        try {
223
            this.imageView.setImage(file);
224
        } catch (IOException ex) {
225
            throw new IllegalArgumentException(ex);
226
        }
227
        onChangeScale();
228
        SwingUtilities.invokeLater(this::adjustScale);
229
    }
230

  
231
    @Override
232 206
    public JComponent asJComponent() {
233 207
        return this;
234 208
    }
235 209
    
210
    @Override
236 211
    public void addAction(Action action) {
237 212
        JComponent button = this.createButton(action);
238 213
        this.gridCustomActions.add(button);
......
247 222
        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
248 223
        return button;
249 224
    }    
225

  
226
    @Override
227
    public SimpleImage getImage() {
228
        return this.currentImage;
229
    }
230

  
231
    @Override
232
    public void addChangeListener(ChangeListener listener) {
233
        this.changeListener.addChangeListener(listener);
234
    }
235

  
236
    @Override
237
    public ChangeListener[] getChangeListeners() {
238
        return this.changeListener.getChangeListeners();
239
    }
240

  
241
    @Override
242
    public void removeChangeListener(ChangeListener listener) {
243
        this.changeListener.removeChangeListener(listener);
244
    }
245

  
246
    @Override
247
    public void removeAllChangeListener() {
248
        this.changeListener.removeAllChangeListener();
249
    }
250

  
251
    @Override
252
    public boolean hasChangeListeners() {
253
        return this.changeListener.hasChangeListeners();
254
    }
250 255
}

Also available in: Unified diff