This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 180610
Collapse All | Expand All

(-)nbproject/project.xml (+9 lines)
Lines 47-52 Link Here
47
            <code-name-base>org.netbeans.modules.image</code-name-base>
47
            <code-name-base>org.netbeans.modules.image</code-name-base>
48
            <module-dependencies>
48
            <module-dependencies>
49
                <dependency>
49
                <dependency>
50
                    <code-name-base>org.netbeans.spi.navigator</code-name-base>
51
                    <build-prerequisite/>
52
                    <compile-dependency/>
53
                    <run-dependency>
54
                        <release-version>1</release-version>
55
                        <specification-version>1.12</specification-version>
56
                    </run-dependency>
57
                </dependency>
58
                <dependency>
50
                    <code-name-base>org.openide.actions</code-name-base>
59
                    <code-name-base>org.openide.actions</code-name-base>
51
                    <build-prerequisite/>
60
                    <build-prerequisite/>
52
                    <compile-dependency/>
61
                    <compile-dependency/>
(-)src/org/netbeans/modules/image/Layer.xml (+19 lines)
Lines 154-157 Link Here
154
        </folder>
154
        </folder>
155
    </folder>
155
    </folder>
156
156
157
    <folder name="Navigator">
158
        <folder name="Panels">
159
            <folder name="image">
160
                <folder name="png">
161
                    <file name="org-netbeans-modules-image-preview-ImageNavigatorProvider.instance"/>
162
                </folder>
163
                <folder name="jpeg">
164
                    <file name="org-netbeans-modules-image-preview-ImageNavigatorProvider.instance"/>
165
                </folder>
166
                <folder name="bmp">
167
                    <file name="org-netbeans-modules-image-preview-ImageNavigatorProvider.instance"/>
168
                </folder>
169
                <folder name="gif">
170
                    <file name="org-netbeans-modules-image-preview-ImageNavigatorProvider.instance"/>
171
                </folder>
172
            </folder>
173
        </folder>
174
    </folder>
175
157
</filesystem>
176
</filesystem>
(-)src/org/netbeans/modules/image/preview/Bundle.properties (+3 lines)
Line 0 Link Here
1
OpenIDE-Module-Name=image.preview
2
DISPLAY_HINT=Image preview
3
DISPLAY_NAME=Image preview
(-)src/org/netbeans/modules/image/preview/ImageNavigatorProvider.java (+117 lines)
Line 0 Link Here
1
/*
2
 * To change this template, choose Tools | Templates
3
 * and open the template in the editor.
4
 */
5
package org.netbeans.modules.image.preview;
6
7
import java.awt.image.BufferedImage;
8
import java.io.IOException;
9
import java.io.InputStream;
10
import java.util.Collection;
11
import javax.imageio.ImageIO;
12
import javax.swing.JComponent;
13
import javax.swing.SwingUtilities;
14
import org.netbeans.spi.navigator.NavigatorPanel;
15
import org.openide.loaders.DataObject;
16
import org.openide.util.Exceptions;
17
import org.openide.util.Lookup;
18
import org.openide.util.LookupEvent;
19
import org.openide.util.LookupListener;
20
21
/**
22
 *
23
 * @author joshis
24
 */
25
public class ImageNavigatorProvider implements NavigatorPanel {
26
27
    private ImagePanel panelUI;
28
    private static final Lookup.Template MY_DATA = new Lookup.Template(Object.class);
29
    private Lookup.Result curContext;
30
    private LookupListener contextL;
31
32
    /** public no arg constructor needed for system to instantiate provider well */
33
    public ImageNavigatorProvider() {
34
    }
35
36
    public String getDisplayHint() {
37
        return org.openide.util.NbBundle.getMessage(ImageNavigatorProvider.class, "DISPLAY_HINT");
38
    }
39
40
    public String getDisplayName() {
41
        return org.openide.util.NbBundle.getMessage(ImageNavigatorProvider.class, "DISPLAY_NAME");
42
    }
43
44
    public JComponent getComponent() {
45
        if (panelUI == null) {
46
            panelUI = new ImagePanel();
47
        }
48
        return panelUI;
49
    }
50
51
    public void panelActivated(Lookup context) {
52
        curContext = context.lookup(MY_DATA);
53
        curContext.addLookupListener(getContextListener());
54
        Collection data = curContext.allInstances();
55
        setNewContent(data);
56
    }
57
58
    public void panelDeactivated() {
59
        curContext.removeLookupListener(getContextListener());
60
        curContext = null;
61
    }
62
63
    public Lookup getLookup() {
64
        return null;
65
    }
66
67
    /************* non - public part ************/
68
    private void setNewContent(Collection newData) {
69
        InputStream is = null;
70
        DataObject fo = null;
71
        try {
72
            while (newData.iterator().hasNext()) {
73
                Object o = newData.iterator().next();
74
                if (o instanceof DataObject) {
75
                    fo = (DataObject) o;
76
                    break;
77
                }
78
            }
79
            if (fo == null) return;
80
            is = fo.getPrimaryFile().getInputStream();
81
            final BufferedImage bim = ImageIO.read(is);
82
            SwingUtilities.invokeLater(new Runnable() {
83
84
                public void run() {
85
                    panelUI.setImage(bim);
86
                    panelUI.revalidate();
87
                    panelUI.repaint();
88
                }
89
            });
90
        } catch (IOException ex) {
91
            Exceptions.printStackTrace(ex);
92
        } finally {
93
            try {
94
                is.close();
95
            } catch (IOException ex) {
96
                Exceptions.printStackTrace(ex);
97
            }
98
        }
99
    }
100
101
    /** Accessor for listener to context */
102
    private LookupListener getContextListener() {
103
        if (contextL == null) {
104
            contextL = new ContextListener();
105
        }
106
        return contextL;
107
    }
108
109
    /** Listens to changes of context and triggers proper action */
110
    private class ContextListener implements LookupListener {
111
112
        public void resultChanged(LookupEvent ev) {
113
            Collection data = ((Lookup.Result) ev.getSource()).allInstances();
114
            setNewContent(data);
115
        }
116
    } // end of ContextListener
117
}
(-)src/org/netbeans/modules/image/preview/ImagePanel.java (+43 lines)
Line 0 Link Here
1
/*
2
 * To change this template, choose Tools | Templates
3
 * and open the template in the editor.
4
 */
5
package org.netbeans.modules.image.preview;
6
7
import java.awt.Color;
8
import java.awt.Graphics;
9
import java.awt.image.BufferedImage;
10
import javax.swing.JPanel;
11
12
/**
13
 *
14
 * @author joshis
15
 */
16
public class ImagePanel extends JPanel {
17
18
    BufferedImage image;
19
20
    public void setImage(BufferedImage img) {
21
        image = img;
22
        this.setBackground(Color.white);
23
    }
24
25
    protected void paintComponent(Graphics g) {
26
        super.paintComponent(g);
27
        g.setColor(Color.BLACK);
28
        if (image != null) {
29
            int w = image.getWidth();
30
            int h = image.getHeight();
31
            if (image.getWidth() > this.getWidth() * 0.9 || image.getHeight() > this.getHeight() * 0.9) {
32
                if (image.getWidth() > image.getHeight()) {
33
                    w = (int) (w * ((double) (this.getWidth()) / (double) (image.getWidth())) * 0.9);
34
                    h = (int) (h * ((double) (this.getWidth()) / (double) (image.getWidth())) * 0.9);
35
                } else {
36
                    w = (int) (w * ((double) (this.getHeight()) / (double) (image.getHeight())));
37
                    h = (int) (h * ((double) (this.getHeight()) / (double) (image.getHeight())));
38
                }
39
            }
40
            g.drawImage(image, (this.getWidth() - w) / 2, (this.getHeight() - h) / 2, w, h, this);
41
        }
42
    }
43
}

Return to bug 180610