001    package org.springframework.richclient.samples.dataeditor.ui;
002    
003    import java.awt.Color;
004    import java.awt.Component;
005    import java.awt.Dimension;
006    import java.awt.geom.Ellipse2D;
007    import java.awt.geom.RoundRectangle2D;
008    import java.io.IOException;
009    
010    import javax.imageio.ImageIO;
011    import javax.swing.BorderFactory;
012    import javax.swing.JFrame;
013    import javax.swing.JProgressBar;
014    import javax.swing.SwingUtilities;
015    import javax.swing.UIManager;
016    
017    import org.jdesktop.swingx.JXBusyLabel;
018    import org.jdesktop.swingx.JXFrame;
019    import org.jdesktop.swingx.JXImagePanel;
020    import org.jdesktop.swingx.JXLabel;
021    import org.jdesktop.swingx.JXPanel;
022    import org.jdesktop.swingx.JXRootPane;
023    import org.jdesktop.swingx.icon.EmptyIcon;
024    import org.jdesktop.swingx.painter.BusyPainter;
025    import org.springframework.core.io.Resource;
026    import org.springframework.richclient.application.splash.MonitoringSplashScreen;
027    import org.springframework.richclient.progress.ProgressMonitor;
028    import org.springframework.richclient.util.WindowUtils;
029    
030    import com.jgoodies.forms.layout.CellConstraints;
031    import com.jgoodies.forms.layout.FormLayout;
032    
033    public class DataEditorSplash implements MonitoringSplashScreen
034    {
035        private JXBusyLabel busyLabel = new JXBusyLabel(new Dimension(180,180));
036        private JXLabel titleLabel = new JXLabel("Data Editor");
037        private JProgressBar progressBar = new JProgressBar();
038        private JXLabel progressLabel = new JXLabel();
039        private JXFrame frame;
040    
041        private Resource image;
042    
043        public DataEditorSplash()
044        {
045            BusyPainter painter = new BusyPainter(
046            new RoundRectangle2D.Float(0, 0,28.0f,8.6f,10.0f,10.0f),
047            new Ellipse2D.Float(15.0f,15.0f,70.0f,70.0f));
048            painter.setTrailLength(4);
049            painter.setPoints(8);
050            painter.setFrame(7);
051            painter.setHighlightColor(new Color(30,42,102));
052            busyLabel.setPreferredSize(new Dimension(100,100));
053            busyLabel.setIcon(new EmptyIcon(100,100));
054            busyLabel.setBusyPainter(painter);
055            busyLabel.setDelay(75);
056    
057            titleLabel.setFont(titleLabel.getFont().deriveFont(30f));
058            titleLabel.setForeground(Color.BLACK);
059            progressBar.setStringPainted(true);
060            progressBar.setPreferredSize(new Dimension(170,20));
061    //        titleLabel.setBackground(new Color(0x425DA9));
062    //        titleLabel.setOpaque(false);
063    //        progressLabel.setBackground(new Color(0x425DA9));
064        }
065    
066        public ProgressMonitor getProgressMonitor()
067        {
068             return new ProgressMonitor()
069             {
070                 private int currentWork = 0;
071    
072                 public void taskStarted(String name, int totalWork)
073                 {
074                     progressBar.setMaximum(totalWork);
075                     progressBar.setValue(0);
076                     this.currentWork = 0;
077                     busyLabel.setBusy(true);
078                     progressBar.setString(name);
079                 }
080    
081                 public void subTaskStarted(String name)
082                 {
083                     progressBar.setString(name);
084                 }
085    
086                 public void worked(int work)
087                 {
088                     currentWork += work;
089                     progressBar.setValue(currentWork);
090                 }
091    
092                 public void done()
093                 {
094                     busyLabel.setBusy(false);
095                 }
096    
097                 public boolean isCanceled()
098                 {
099                     return false;
100                 }
101    
102                 public void setCanceled(boolean b)
103                 {
104                 }
105             };
106        }
107    
108        protected Component createContentPane()
109        {
110            JXPanel panel = new JXPanel(new FormLayout("center:200px:nogrow, left:3dlu:nogrow, fill:200px:nogrow", "center:200px:nogrow, center:20px:nogrow"));
111            JXImagePanel ip = new JXImagePanel();
112            try
113            {
114                ip.setImage(ImageIO.read(image.getInputStream()));
115            }
116            catch (IOException e)
117            {
118                e.printStackTrace();
119            }
120            ip.setStyle(JXImagePanel.Style.SCALED);
121            //panel.setBackground(new Color(0x425DA9));
122            panel.add(busyLabel, new CellConstraints(1,1));
123            JXPanel panel2 = new JXPanel(new FormLayout("center:195px:nogrow", "center:98px:nogrow, center:4dlu:nogrow, center:98px:nogrow"));
124            //panel2.setBackground(new Color(0x425DA9));
125            panel2.add(titleLabel, new CellConstraints(1, 1));
126            panel2.setOpaque(false);
127            panel.add(progressBar, new CellConstraints(1, 2, 3, 1));
128            panel.add(panel2, new CellConstraints(3,1));
129            panel.add(ip, new CellConstraints(1, 1, 3, 1, CellConstraints.FILL, CellConstraints.FILL));
130            panel.setBorder(BorderFactory.createLineBorder(Color.black, 4));
131            return panel;
132        }
133    
134        public void splash()
135        {
136            frame = new JXFrame();
137            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
138                    frame.setUndecorated(true);
139            frame.setRootPane(new JXRootPane());
140            frame.getRootPaneExt().setDoubleBuffered(true);
141            frame.getRootPaneExt().setBackground(new Color(255,255,255,255));
142            frame.getRootPaneExt().setOpaque(false);
143                frame.getContentPane().add(createContentPane());
144                    frame.pack();
145                    WindowUtils.centerOnScreen(frame);
146            try
147            {
148                UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
149            }
150            catch (Exception e)
151            {
152                e.printStackTrace();
153            }
154            SwingUtilities.updateComponentTreeUI(frame);
155            frame.setVisible(true);
156        }
157    
158        public void dispose()
159        {
160            if (frame != null) {
161                            frame.dispose();
162                            frame = null;
163                    }
164        }
165    
166        public void setImage(Resource image)
167        {
168            this.image = image;
169        }
170    }