001/*
002 * $Id: AboutFrame.java,v 1.6 2011/03/24 18:13:11 davep Exp $
003 *
004 * This file is part of McIDAS-V
005 *
006 * Copyright 2007-2011
007 * Space Science and Engineering Center (SSEC)
008 * University of Wisconsin - Madison
009 * 1225 W. Dayton Street, Madison, WI 53706, USA
010 * https://www.ssec.wisc.edu/mcidas
011 * 
012 * All Rights Reserved
013 * 
014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015 * some McIDAS-V source code is based on IDV and VisAD source code.  
016 * 
017 * McIDAS-V is free software; you can redistribute it and/or modify
018 * it under the terms of the GNU Lesser Public License as published by
019 * the Free Software Foundation; either version 3 of the License, or
020 * (at your option) any later version.
021 * 
022 * McIDAS-V is distributed in the hope that it will be useful,
023 * but WITHOUT ANY WARRANTY; without even the implied warranty of
024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
025 * GNU Lesser Public License for more details.
026 * 
027 * You should have received a copy of the GNU Lesser Public License
028 * along with this program.  If not, see http://www.gnu.org/licenses.
029 */
030
031package edu.wisc.ssec.mcidasv.ui;
032
033import java.awt.Color;
034import java.awt.Cursor;
035import java.awt.event.MouseAdapter;
036import java.awt.event.MouseEvent;
037import java.net.MalformedURLException;
038import java.net.URL;
039
040import ucar.unidata.util.GuiUtils;
041
042import edu.wisc.ssec.mcidasv.Constants;
043import edu.wisc.ssec.mcidasv.McIDASV;
044import edu.wisc.ssec.mcidasv.StateManager;
045import edu.wisc.ssec.mcidasv.util.SystemState;
046
047public class AboutFrame extends javax.swing.JFrame {
048
049    private final McIDASV mcv;
050
051    /** Creates new form AboutFrame */
052    public AboutFrame(final McIDASV mcv) {
053        this.mcv = mcv;
054        initComponents();
055    }
056
057    private javax.swing.JPanel buildAboutMcv() {
058        StateManager stateManager = (StateManager)mcv.getStateManager();
059
060        javax.swing.JEditorPane editor = new javax.swing.JEditorPane();
061        editor.setEditable(false);
062        editor.setContentType("text/html");
063        String html = stateManager.getMcIdasVersionAbout();
064        editor.setText(html);
065        editor.setBackground(new javax.swing.JPanel().getBackground());
066        editor.addHyperlinkListener(mcv);
067
068        final javax.swing.JLabel iconLbl = new javax.swing.JLabel(
069            GuiUtils.getImageIcon(mcv.getProperty(Constants.PROP_SPLASHICON, ""))
070        );
071        iconLbl.setToolTipText("McIDAS-V homepage");
072        iconLbl.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
073        iconLbl.addMouseListener(new MouseAdapter() {
074            public void mouseClicked(MouseEvent evt) {
075                javax.swing.event.HyperlinkEvent link = null;
076                try {
077                    link = new javax.swing.event.HyperlinkEvent(
078                        iconLbl,
079                        javax.swing.event.HyperlinkEvent.EventType.ACTIVATED,
080                        new URL(mcv.getProperty(Constants.PROP_HOMEPAGE, ""))
081                    );
082                } catch (MalformedURLException e) {}
083                mcv.hyperlinkUpdate(link);
084            }
085        });
086        javax.swing.JPanel contents = GuiUtils.topCenter(
087            GuiUtils.inset(iconLbl, 5),
088            GuiUtils.inset(editor, 5)
089        );
090        contents.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED,
091                Color.gray, Color.gray));
092        return contents;
093    }
094
095    private String getSystemInformation() {
096//        return new SystemState(mcv).getStateAsString(true);
097        return SystemState.getStateAsString(mcv, true);
098    }
099
100    /** This method is called from within the constructor to
101     * initialize the form.
102     * WARNING: Do NOT modify this code. The content of this method is
103     * always regenerated by the Form Editor.
104     */
105    @SuppressWarnings("unchecked")
106    // <editor-fold defaultstate="collapsed" desc="Generated Code">
107    private void initComponents() {
108
109        tabbedPanel = new javax.swing.JTabbedPane();
110        mcvTab = new javax.swing.JPanel();
111        mcvPanel = buildAboutMcv();
112        sysTab = new javax.swing.JPanel();
113        sysScrollPane = new javax.swing.JScrollPane();
114        sysTextArea = new javax.swing.JTextArea();
115
116        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
117        setTitle("About McIDAS-V");
118
119        javax.swing.GroupLayout mcvTabLayout = new javax.swing.GroupLayout(mcvTab);
120        mcvTab.setLayout(mcvTabLayout);
121        mcvTabLayout.setHorizontalGroup(
122            mcvTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
123//            .addComponent(mcvPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
124            .addComponent(mcvPanel)
125        );
126        mcvTabLayout.setVerticalGroup(
127            mcvTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
128//            .addComponent(mcvPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
129            .addComponent(mcvPanel)
130        );
131
132        tabbedPanel.addTab("McIDAS-V", mcvTab);
133        sysTextArea.setText(getSystemInformation());
134        sysTextArea.setEditable(false);
135        sysTextArea.setFont(new java.awt.Font(java.awt.Font.MONOSPACED, 0, 12)); // NOI18N
136        sysTextArea.setCaretPosition(0);
137        sysTextArea.setLineWrap(false);
138        sysScrollPane.setViewportView(sysTextArea);
139
140        javax.swing.GroupLayout sysTabLayout = new javax.swing.GroupLayout(sysTab);
141        sysTab.setLayout(sysTabLayout);
142        sysTabLayout.setHorizontalGroup(
143            sysTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
144            .addGroup(sysTabLayout.createSequentialGroup()
145//                .addContainerGap()
146//                .addComponent(sysScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE)
147//                .addContainerGap())
148                .addComponent(sysScrollPane))
149        );
150        sysTabLayout.setVerticalGroup(
151            sysTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
152            .addGroup(sysTabLayout.createSequentialGroup()
153//                .addComponent(sysScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 307, Short.MAX_VALUE)
154//                .addContainerGap())
155                .addComponent(sysScrollPane))
156        );
157
158        tabbedPanel.addTab("System Information", sysTab);
159
160        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
161        getContentPane().setLayout(layout);
162        layout.setHorizontalGroup(
163            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
164//            .addComponent(tabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 511, Short.MAX_VALUE)
165            .addComponent(tabbedPanel)
166        );
167        layout.setVerticalGroup(
168            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
169//            .addComponent(tabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE)
170            .addComponent(tabbedPanel)
171        );
172
173        pack();
174        setSize(450, 375);
175        setLocationRelativeTo(mcv.getIdvUIManager().getFrame());
176    }// </editor-fold>
177
178    // Variables declaration - do not modify
179    private javax.swing.JPanel mcvPanel;
180    private javax.swing.JPanel mcvTab;
181    private javax.swing.JScrollPane sysScrollPane;
182    private javax.swing.JPanel sysTab;
183    private javax.swing.JTextArea sysTextArea;
184    private javax.swing.JTabbedPane tabbedPanel;
185    // End of variables declaration
186
187}