1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package coras.client.ui;
22
23 import java.awt.BorderLayout;
24 import java.awt.Cursor;
25 import java.awt.event.ComponentAdapter;
26 import java.awt.event.ComponentEvent;
27 import java.net.MalformedURLException;
28 import java.net.URL;
29 import java.util.Map;
30
31 import javax.swing.JButton;
32 import javax.swing.JPanel;
33 import javax.swing.JToolBar;
34
35 import org.jdesktop.jdic.browser.WebBrowser;
36 import org.jdesktop.jdic.browser.WebBrowserEvent;
37 import org.jdesktop.jdic.browser.WebBrowserListener;
38
39 import coras.client.SwingWorker;
40
41 import javax.swing.ImageIcon;
42 import javax.swing.JTextField;
43 /***
44 * @author fvr
45 *
46 * TODO To change the template for this generated type comment go to
47 * Window - Preferences - Java - Code Style - Code Templates
48 */
49 public class HtmlPanel extends JPanel {
50
51 private JPanel browserPanel = null;
52 private WebBrowser webBrowser = null;
53 private JToolBar navigationPanel = null;
54 private JButton homeButton = null;
55 private JButton backButton = null;
56 private JButton forwardButton = null;
57 private Map idMap = null;
58 private String homeId;
59 private boolean initialised = false;
60 private String firstUrl;
61 private JTextField statusField = null;
62
63 /***
64 * This is the default constructor
65 */
66 public HtmlPanel(Map idMap, String homeId) {
67 super();
68 initialize();
69 this.idMap = idMap;
70 this.homeId = homeId;
71 addComponentListener(new ComponentAdapter() {
72 public void componentShown(ComponentEvent e) {
73 lazyInit();
74 }
75 });
76 showHelpID(homeId);
77 }
78
79 public void lazyInit() {
80 if (initialised) {
81 return;
82 }
83 initialised = true;
84 new SwingWorker() {
85 public Object construct() {
86 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
87 browserPanel.add(getWebBrowser(), BorderLayout.CENTER);
88 showPage(firstUrl);
89 setCursor(Cursor.getDefaultCursor());
90 return null;
91 }
92 }.start();
93 }
94
95 public void showHelpID(String id) {
96 Object url = idMap != null ? idMap.get(id) : null;
97 if (url instanceof String) {
98 showPage((String) url);
99 }
100 }
101
102 public void showPage(String relativeUrl) {
103 if (!initialised) {
104 firstUrl = relativeUrl;
105 return;
106 }
107 ClassLoader cl = getClass().getClassLoader();
108 URL url = cl.getResource(relativeUrl);
109 if (url == null) {
110 try {
111 url= new URL("http://coras.sourceforge.net/help/" + relativeUrl);
112 } catch (MalformedURLException e) {
113
114 e.printStackTrace();
115 }
116 }
117
118 getWebBrowser().setURL(url);
119 updateButtons();
120 }
121
122 private void updateButtons() {
123 getBackButton().setEnabled(getWebBrowser().isBackEnabled());
124 getForwardButton().setEnabled(getWebBrowser().isForwardEnabled());
125 }
126
127 /***
128 * This method initializes this
129 *
130 * @return void
131 */
132 private void initialize() {
133 this.setLayout(new BorderLayout());
134 this.add(getNavigationPanel(), java.awt.BorderLayout.NORTH);
135 this.add(getBrowserPanel(), java.awt.BorderLayout.CENTER);
136 this.add(getStatusField(), java.awt.BorderLayout.SOUTH);
137 }
138 /***
139 * This method initializes webBrowser
140 *
141 * @return org.jdesktop.jdic.browser.WebBrowser
142 */
143 private JPanel getBrowserPanel() {
144 if (browserPanel == null) {
145 browserPanel = new JPanel(new BorderLayout());
146 }
147 return browserPanel;
148 }
149 /***
150 * This method initializes webBrowser
151 *
152 * @return org.jdesktop.jdic.browser.WebBrowser
153 */
154 private WebBrowser getWebBrowser() {
155 if (webBrowser == null) {
156 webBrowser = new WebBrowser();
157 webBrowser.addWebBrowserListener(new WebBrowserListener() {
158 public void downloadStarted(WebBrowserEvent e) {
159 }
160 public void downloadCompleted(WebBrowserEvent e) {
161 updateButtons();
162 }
163 public void downloadProgress(WebBrowserEvent e) {
164 }
165 public void downloadError(WebBrowserEvent e) {
166 }
167 public void documentCompleted(WebBrowserEvent e) {
168 }
169 public void titleChange(WebBrowserEvent e) {
170 }
171 public void statusTextChange(WebBrowserEvent e) {
172 getStatusField().setText(e.getData());
173 }
174 });
175 }
176 return webBrowser;
177 }
178 /***
179 * This method initializes jPanel
180 *
181 * @return javax.swing.JPanel
182 */
183 private JToolBar getNavigationPanel() {
184 if (navigationPanel == null) {
185 navigationPanel = new JToolBar();
186 navigationPanel.add(getHomeButton(), null);
187 navigationPanel.add(getBackButton(), null);
188 navigationPanel.add(getForwardButton(), null);
189 navigationPanel.setFloatable(false);
190 }
191 return navigationPanel;
192 }
193 /***
194 * This method initializes jButton
195 *
196 * @return javax.swing.JButton
197 */
198 private JButton getHomeButton() {
199 if (homeButton == null) {
200 homeButton = new JButton();
201 homeButton.setText("Home");
202 homeButton.setIcon(new ImageIcon(getClass().getResource("/images/icons/home.gif")));
203 homeButton.addActionListener(new java.awt.event.ActionListener() {
204 public void actionPerformed(java.awt.event.ActionEvent e) {
205 showHelpID(homeId);
206 }
207 });
208 }
209 return homeButton;
210 }
211 /***
212 * This method initializes jButton
213 *
214 * @return javax.swing.JButton
215 */
216 private JButton getBackButton() {
217 if (backButton == null) {
218 backButton = new JButton();
219 backButton.setText("Back");
220 backButton.setEnabled(false);
221 backButton.setIcon(new ImageIcon(getClass().getResource("/images/icons/back.gif")));
222 backButton.addActionListener(new java.awt.event.ActionListener() {
223 public void actionPerformed(java.awt.event.ActionEvent e) {
224 getWebBrowser().back();
225 }
226 });
227 }
228 return backButton;
229 }
230 /***
231 * This method initializes jButton1
232 *
233 * @return javax.swing.JButton
234 */
235 private JButton getForwardButton() {
236 if (forwardButton == null) {
237 forwardButton = new JButton();
238 forwardButton.setText("Forward");
239 forwardButton.setEnabled(false);
240 forwardButton.setIcon(new ImageIcon(getClass().getResource("/images/icons/forward.gif")));
241 forwardButton.addActionListener(new java.awt.event.ActionListener() {
242 public void actionPerformed(java.awt.event.ActionEvent e) {
243 getWebBrowser().forward();
244 }
245 });
246 }
247 return forwardButton;
248 }
249
250 /***
251 * This method initializes statusField
252 *
253 * @return javax.swing.JTextField
254 */
255 private JTextField getStatusField() {
256 if (statusField == null) {
257 statusField = new JTextField();
258 statusField.setEditable(false);
259 }
260 return statusField;
261 }
262 }