538ca0bae26a5ff5c11f53a535ccd211449685bf
[debian/jabref.git] / src / java / net / sf / jabref / about / ExtendedInfoPanel.java
1 /*
2  animated about dialog
3
4 Copyright (C) 2005 Raik Nagel <kiar@users.sourceforge.net>
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9
10 * Redistributions of source code must retain the above copyright notice,
11   this list of conditions and the following disclaimer.
12 * Redistributions in binary form must reproduce the above copyright notice,
13   this list of conditions and the following disclaimer in the documentation
14   and/or other materials provided with the distribution.
15 * Neither the name of the author nor the names of its contributors may be
16   used to endorse or promote products derived from this software without
17   specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
23 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32
33 // created by : r.nagel 05.05.2005
34 //
35 // function : content for the about dialog
36 //
37 // todo     :
38 //
39 // modified :
40 //            28.07.2005
41 //            - hide license button
42
43 package net.sf.jabref.about ;
44
45 import javax.swing.* ;
46 import java.net.* ;
47 import java.io.*;
48 import java.awt.*;
49 import javax.swing.border.*;
50 import java.awt.event.ActionEvent;
51 import java.awt.event.*;
52 import net.sf.jabref.Globals;
53 import net.sf.jabref.*;
54
55 public class ExtendedInfoPanel extends JPanel implements AnimationListener, ActionListener
56 {
57   private JEditorPane textPane ;
58   private JScrollPane scroller ;
59   private CardLayout cards ;
60
61   private JButton close ;
62   private JButton license ;
63
64   private AboutPanel about ;
65   private JPanel infoPanel ;
66
67   private boolean animationIsRunning = true ;
68
69   private ActionListener mainListener ;
70
71   public ExtendedInfoPanel(ActionListener mainFrame)
72   {
73     mainListener = mainFrame ;
74
75     // animated area
76     about = new AboutPanel();
77     about.addAnimationListener(this);
78
79     // scrallable html infos
80     textPane = new JEditorPane() ;
81
82     textPane.setEditable( false ) ;
83 //    URL helpURL = getClass().getResource( "/help/About.html" ) ;
84     // try to load about.html for the locale language
85     URL helpURL = getClass().getResource( GUIGlobals.getLocaleHelpPath() + GUIGlobals.aboutPage) ;
86     // about.html could not detected => try to load the default version
87     if (helpURL == null)
88     {
89       helpURL = getClass().getResource( GUIGlobals.helpPre + GUIGlobals.aboutPage) ;
90     }
91
92     if ( helpURL != null )
93     {
94       try
95       {
96         textPane.setPage( helpURL ) ;
97       }
98       catch ( IOException e )
99       {
100         System.err.println( "Attempted to read a bad URL: " + helpURL ) ;
101       }
102     }
103     else
104     {
105       System.err.println( "Couldn't find file: About.html" ) ;
106     }
107
108     scroller = new JScrollPane(textPane) ; //, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) ;
109     scroller.setPreferredSize( about.getSize());
110
111     // overlapped animated/scrollable area
112     infoPanel = new JPanel() ;
113     cards = new CardLayout() ;
114     infoPanel.setLayout( cards);
115
116     infoPanel.add(about, "ani") ;
117     infoPanel.add(scroller, "inf") ;
118
119      // Buttons
120     JPanel buttonPanel = new JPanel() ;
121     buttonPanel.setBackground( Color.white);
122     buttonPanel.setLayout( new GridLayout(1, 2, 10, 20) );
123     buttonPanel.setBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED));
124
125     buttonPanel.add( Box.createGlue() ) ;
126     close = new JButton( Globals.lang("Skip") ) ;
127     close.addActionListener( this ) ;
128     close.setActionCommand( "close" ) ;
129     close.setFocusable( false ) ;
130
131     license = new JButton( Globals.lang("License") ) ;
132     license.addActionListener( this ) ;
133     license.setActionCommand( "license" ) ;
134     license.setFocusable( false ) ;
135
136     buttonPanel.add( close ) ;
137 //    buttonPanel.add( license ) ;
138     buttonPanel.add( Box.createGlue() ) ;
139
140
141     // main panel
142     this.setLayout( new BorderLayout(0, 0));
143
144     this.add(infoPanel, BorderLayout.CENTER) ;
145     this.add(buttonPanel, BorderLayout.SOUTH) ;
146
147 //    about.startAnimation();
148   }
149
150   public void animationReady()
151   {
152     animationIsRunning = false ;
153     cards.show(infoPanel, "inf");
154     close.setText(Globals.lang("Close"));
155   }
156
157   public void actionPerformed( ActionEvent e )
158   {
159     String cmd = e.getActionCommand() ;
160     if ( cmd.equals( "close" ) )
161     {
162       if (animationIsRunning)
163       {
164          about.skipAnimation(); // implicit call of AnimationListener.animationReady()
165       }
166       else
167       {
168         setVisible( false ) ;
169         mainListener.actionPerformed(e);
170       }
171     }
172     else if ( cmd.equals( "license" ) )
173     {
174 //      showLicense() ;
175       mainListener.actionPerformed(e);
176     }
177   }
178
179 }