1*1b0aaa91SAndrew Rist /************************************************************** 2*1b0aaa91SAndrew Rist * 3*1b0aaa91SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*1b0aaa91SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*1b0aaa91SAndrew Rist * distributed with this work for additional information 6*1b0aaa91SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*1b0aaa91SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*1b0aaa91SAndrew Rist * "License"); you may not use this file except in compliance 9*1b0aaa91SAndrew Rist * with the License. You may obtain a copy of the License at 10*1b0aaa91SAndrew Rist * 11*1b0aaa91SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*1b0aaa91SAndrew Rist * 13*1b0aaa91SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*1b0aaa91SAndrew Rist * software distributed under the License is distributed on an 15*1b0aaa91SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*1b0aaa91SAndrew Rist * KIND, either express or implied. See the License for the 17*1b0aaa91SAndrew Rist * specific language governing permissions and limitations 18*1b0aaa91SAndrew Rist * under the License. 19*1b0aaa91SAndrew Rist * 20*1b0aaa91SAndrew Rist *************************************************************/ 21*1b0aaa91SAndrew Rist 22cdf0e10cSrcweir import javax.swing.JFrame; 23cdf0e10cSrcweir import javax.swing.JScrollPane; 24cdf0e10cSrcweir import javax.swing.JEditorPane; 25cdf0e10cSrcweir import javax.swing.JButton; 26cdf0e10cSrcweir import java.net.URL; 27cdf0e10cSrcweir import javax.swing.event.HyperlinkListener; 28cdf0e10cSrcweir import javax.swing.event.HyperlinkEvent; 29cdf0e10cSrcweir import java.net.MalformedURLException; 30cdf0e10cSrcweir import java.io.IOException; 31cdf0e10cSrcweir import java.io.File; 32cdf0e10cSrcweir import java.awt.event.WindowAdapter; 33cdf0e10cSrcweir import java.awt.event.WindowEvent; 34cdf0e10cSrcweir import java.awt.GridBagLayout; 35cdf0e10cSrcweir import java.awt.GridBagConstraints; 36cdf0e10cSrcweir import java.awt.event.ActionListener; 37cdf0e10cSrcweir import java.util.LinkedList; 38cdf0e10cSrcweir 39cdf0e10cSrcweir class HelpWindow 40cdf0e10cSrcweir implements ActionListener 41cdf0e10cSrcweir { Instance()42cdf0e10cSrcweir public static synchronized HelpWindow Instance () 43cdf0e10cSrcweir { 44cdf0e10cSrcweir if (maInstance == null) 45cdf0e10cSrcweir maInstance = new HelpWindow(); 46cdf0e10cSrcweir return maInstance; 47cdf0e10cSrcweir } 48cdf0e10cSrcweir loadFile(String sFilename)49cdf0e10cSrcweir public void loadFile (String sFilename) 50cdf0e10cSrcweir { 51cdf0e10cSrcweir File aFile = new File (sFilename); 52cdf0e10cSrcweir try 53cdf0e10cSrcweir { 54cdf0e10cSrcweir loadURL (aFile.toURL()); 55cdf0e10cSrcweir } 56cdf0e10cSrcweir catch (MalformedURLException e) 57cdf0e10cSrcweir { 58cdf0e10cSrcweir e.printStackTrace (System.err); 59cdf0e10cSrcweir } 60cdf0e10cSrcweir } loadURL(String sURL)61cdf0e10cSrcweir public void loadURL (String sURL) 62cdf0e10cSrcweir { 63cdf0e10cSrcweir try 64cdf0e10cSrcweir { 65cdf0e10cSrcweir loadURL (new URL (sURL)); 66cdf0e10cSrcweir } 67cdf0e10cSrcweir catch (MalformedURLException e) 68cdf0e10cSrcweir { 69cdf0e10cSrcweir e.printStackTrace (System.err); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir } 72cdf0e10cSrcweir 73cdf0e10cSrcweir 74cdf0e10cSrcweir 75cdf0e10cSrcweir loadURL(URL aURL)76cdf0e10cSrcweir public void loadURL (URL aURL) 77cdf0e10cSrcweir { 78cdf0e10cSrcweir maHistory.addLast (aURL); 79cdf0e10cSrcweir selectHistoryPage (maHistory.size()-1); 80cdf0e10cSrcweir maFrame.toFront (); 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir 84cdf0e10cSrcweir 85cdf0e10cSrcweir HelpWindow()86cdf0e10cSrcweir private HelpWindow () 87cdf0e10cSrcweir { 88cdf0e10cSrcweir try 89cdf0e10cSrcweir { 90cdf0e10cSrcweir maCurrentHistoryEntry = -1; 91cdf0e10cSrcweir maHistory = new LinkedList(); 92cdf0e10cSrcweir 93cdf0e10cSrcweir maFrame = new JFrame (); 94cdf0e10cSrcweir maFrame.addWindowListener (new WindowAdapter () 95cdf0e10cSrcweir { 96cdf0e10cSrcweir public void windowClosing (WindowEvent e) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir maInstance = null; 99cdf0e10cSrcweir } 100cdf0e10cSrcweir }); 101cdf0e10cSrcweir maContent = createContentWidget(); 102cdf0e10cSrcweir 103cdf0e10cSrcweir maFrame.getContentPane().setLayout (new GridBagLayout()); 104cdf0e10cSrcweir GridBagConstraints aConstraints = new GridBagConstraints (); 105cdf0e10cSrcweir aConstraints.gridx = 0; 106cdf0e10cSrcweir aConstraints.gridy = 0; 107cdf0e10cSrcweir aConstraints.gridwidth = 3; 108cdf0e10cSrcweir aConstraints.weightx = 1; 109cdf0e10cSrcweir aConstraints.weighty = 1; 110cdf0e10cSrcweir aConstraints.fill = GridBagConstraints.BOTH; 111cdf0e10cSrcweir maFrame.getContentPane().add (new JScrollPane (maContent), aConstraints); 112cdf0e10cSrcweir 113cdf0e10cSrcweir aConstraints = new GridBagConstraints(); 114cdf0e10cSrcweir aConstraints.gridx = 0; 115cdf0e10cSrcweir aConstraints.gridy = 1; 116cdf0e10cSrcweir maPrevButton = new JButton ("Prev"); 117cdf0e10cSrcweir maFrame.getContentPane().add (maPrevButton, aConstraints); 118cdf0e10cSrcweir maPrevButton.addActionListener (this); 119cdf0e10cSrcweir 120cdf0e10cSrcweir aConstraints = new GridBagConstraints(); 121cdf0e10cSrcweir aConstraints.gridx = 1; 122cdf0e10cSrcweir aConstraints.gridy = 1; 123cdf0e10cSrcweir maNextButton = new JButton ("Next"); 124cdf0e10cSrcweir maFrame.getContentPane().add (maNextButton, aConstraints); 125cdf0e10cSrcweir maNextButton.addActionListener (this); 126cdf0e10cSrcweir 127cdf0e10cSrcweir aConstraints = new GridBagConstraints(); 128cdf0e10cSrcweir aConstraints.gridx = 2; 129cdf0e10cSrcweir aConstraints.gridy = 1; 130cdf0e10cSrcweir aConstraints.anchor = GridBagConstraints.EAST; 131cdf0e10cSrcweir JButton aButton = new JButton ("Close"); 132cdf0e10cSrcweir maFrame.getContentPane().add (aButton, aConstraints); 133cdf0e10cSrcweir aButton.addActionListener (this); 134cdf0e10cSrcweir 135cdf0e10cSrcweir maFrame.setSize (600,400); 136cdf0e10cSrcweir maFrame.setVisible (true); 137cdf0e10cSrcweir } 138cdf0e10cSrcweir catch (Exception e) 139cdf0e10cSrcweir {} 140cdf0e10cSrcweir } 141cdf0e10cSrcweir actionPerformed(java.awt.event.ActionEvent e)142cdf0e10cSrcweir public void actionPerformed (java.awt.event.ActionEvent e) 143cdf0e10cSrcweir { 144cdf0e10cSrcweir if (e.getActionCommand().equals("Prev")) 145cdf0e10cSrcweir { 146cdf0e10cSrcweir selectHistoryPage (maCurrentHistoryEntry - 1); 147cdf0e10cSrcweir } 148cdf0e10cSrcweir else if (e.getActionCommand().equals("Next")) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir selectHistoryPage (maCurrentHistoryEntry + 1); 151cdf0e10cSrcweir } 152cdf0e10cSrcweir else if (e.getActionCommand().equals("Close")) 153cdf0e10cSrcweir { 154cdf0e10cSrcweir maFrame.dispose (); 155cdf0e10cSrcweir maInstance = null; 156cdf0e10cSrcweir } 157cdf0e10cSrcweir } 158cdf0e10cSrcweir createContentWidget()159cdf0e10cSrcweir private JEditorPane createContentWidget () 160cdf0e10cSrcweir { 161cdf0e10cSrcweir JEditorPane aContent = new JEditorPane (); 162cdf0e10cSrcweir aContent.setEditable (false); 163cdf0e10cSrcweir aContent.addHyperlinkListener (new HyperlinkListener() 164cdf0e10cSrcweir { 165cdf0e10cSrcweir public void hyperlinkUpdate (HyperlinkEvent e) 166cdf0e10cSrcweir { 167cdf0e10cSrcweir if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) 168cdf0e10cSrcweir HelpWindow.Instance().loadURL (e.getURL()); 169cdf0e10cSrcweir } 170cdf0e10cSrcweir }); 171cdf0e10cSrcweir return aContent; 172cdf0e10cSrcweir } 173cdf0e10cSrcweir selectHistoryPage(int i)174cdf0e10cSrcweir private void selectHistoryPage (int i) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir if (i < 0) 177cdf0e10cSrcweir i = 0; 178cdf0e10cSrcweir else if (i >= maHistory.size()-1) 179cdf0e10cSrcweir i = maHistory.size()-1; 180cdf0e10cSrcweir if (i != maCurrentHistoryEntry) 181cdf0e10cSrcweir { 182cdf0e10cSrcweir URL aURL = (URL)maHistory.get (i); 183cdf0e10cSrcweir try 184cdf0e10cSrcweir { 185cdf0e10cSrcweir maContent.setPage (aURL); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir catch (java.io.IOException ex) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir ex.printStackTrace(System.err); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir 192cdf0e10cSrcweir maCurrentHistoryEntry = i; 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir maPrevButton.setEnabled (maCurrentHistoryEntry > 0); 196cdf0e10cSrcweir maNextButton.setEnabled (maCurrentHistoryEntry < maHistory.size()-1); 197cdf0e10cSrcweir } 198cdf0e10cSrcweir 199cdf0e10cSrcweir private static HelpWindow maInstance = null; 200cdf0e10cSrcweir private JFrame maFrame; 201cdf0e10cSrcweir private JEditorPane maContent; 202cdf0e10cSrcweir private LinkedList maHistory; 203cdf0e10cSrcweir private int maCurrentHistoryEntry; 204cdf0e10cSrcweir private JButton maPrevButton; 205cdf0e10cSrcweir private JButton maNextButton; 206cdf0e10cSrcweir } 207