001 /* PAVLOV -- Multiple Choice Study System 002 * Copyright (C) 2000 - 2004 T.J. Willis 003 * 004 * This program is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU General Public License 006 * as published by the Free Software Foundation; either version 2 007 * of the License, or (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program; if not, write to the Free Software 016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. 017 * 018 * $Header: /cvsroot/pavlov/net/sourceforge/pavlov/swing/HelpSystem.java,v 1.7 2004/07/01 05:50:21 tj_willis Exp $ 019 */ 020 package net.sourceforge.pavlov.swing; 021 022 023 import java.awt.event.*; 024 import java.awt.Container; 025 import java.net.*; 026 import javax.swing.*; 027 import java.util.Hashtable; 028 import org.apache.log4j.*; 029 030 /** 031 * HelpSystem creates a JMenu of Help Topics, each of which will automatically 032 * open a HTMLInternalFrame with the specified URL when clicked. This system 033 * is pretty lightweight and easy to use, but not as feature-rich as Sun's 034 * jHelp. 035 * 036 * @author <a href="mailto:tj_willis@users.sourceforge.net">T.J. Willis</a> 037 * @version 1.0 038 */ 039 public class HelpSystem 040 extends JMenu 041 implements ActionListener 042 { 043 044 /** 045 * Describe variable <code>pane</code> here. 046 * 047 */ 048 protected Container pane; 049 /** 050 * Describe variable <code>browsers</code> here. 051 * 052 */ 053 protected Hashtable<String,HTMLInternalFrame> browsers; 054 055 056 /** 057 * Creates a new <code>HelpSystem</code> instance. 058 * 059 * @param dPane a <code>Container</code> value 060 */ 061 public HelpSystem(Container dPane) 062 { 063 super("Help"); 064 pane = dPane; 065 browsers = new Hashtable<String,HTMLInternalFrame>(); 066 } 067 068 /** 069 * Creates a new <code>HelpSystem</code> instance. 070 * 071 * @param dPane a <code>Container</code> value 072 * @param aboutURL an <code>URL</code> value 073 * @param helpURL an <code>URL</code> value 074 */ 075 public HelpSystem(Container dPane, URL aboutURL, URL helpURL) 076 { 077 super("Help"); 078 browsers = new Hashtable<String,HTMLInternalFrame>(); 079 init(dPane,aboutURL,helpURL); 080 } 081 082 /** 083 * Describe <code>showBrowser</code> method here. 084 * 085 * @param url an <code>URL</code> value 086 * @param title a <code>String</code> value 087 */ 088 protected void showBrowser(URL url,String title) 089 { 090 HTMLInternalFrame targ = browsers.get(title); 091 if(targ==null) 092 { 093 targ = new HTMLInternalFrame(title,url); 094 //pane.add(targ); 095 browsers.put (title,targ); 096 } 097 //System.out.println("idx is: " + pane.getIndexOf(af) ); 098 // if(pane.getIndexOf(targ) < 0 ) 099 // pane.add(targ); 100 //FIXED: was buggy, changed in MVC push 101 /*if(!pane.isAncestorOf(targ)) 102 pane.add(targ);*/ 103 targ.pack(); 104 targ.setVisible(true); 105 /* I'm a JDialog now, don't need to setSelectedtry { 106 targ.setSelected(true); 107 } catch (java.beans.PropertyVetoException e ){ 108 109 }*/ 110 } 111 112 /** 113 * Adds a HelpItem to the JMenu. 114 * 115 * @param url a <code>String</code> value 116 * @param title a <code>String</code> value 117 * @return a <code>boolean</code> value 118 */ 119 public boolean addItem(String url, String title) 120 { 121 try { 122 URL x = new URL(url); 123 addItem(x,title); 124 } catch (Exception e) { 125 return false; 126 } 127 return true; 128 } 129 130 /** 131 * Adds a HelpItem to the JMenu. 132 * 133 * @param url an <code>URL</code> value 134 * @param title a <code>String</code> value 135 */ 136 public void addItem(URL url, String title) 137 { 138 JMenuItem it = new JMenuItem(title); 139 it.addActionListener(this); 140 it.setActionCommand(url.toString()); 141 add(it); 142 } 143 144 145 /** 146 * Describe <code>init</code> method here. 147 * 148 * @param dPane a <code>Container</code> value 149 * @param aboutURL an <code>URL</code> value 150 * @param helpURL an <code>URL</code> value 151 * @deprecated Shouldn't have made it into 1.0. 152 */ 153 @Deprecated protected void init(Container dPane, URL aboutURL, URL helpURL) 154 { 155 addItem(helpURL,"Help Topics"); 156 addItem(aboutURL,"About"); 157 } 158 159 160 /** 161 * Describe <code>getHelpMenu</code> method here. 162 * 163 * @return a <code>JMenu</code> value 164 * @deprecated This method predates this class being a subclass of JMenu. 165 */ 166 @Deprecated public JMenu getHelpMenu() 167 { 168 return this; 169 } 170 171 /** 172 * Creates the HTMLInternalFrame when a help item is selected. 173 * 174 * @param e an <code>ActionEvent</code> value 175 */ 176 public void actionPerformed(ActionEvent e) 177 { 178 Object o = e.getActionCommand(); 179 //if( !(o instanceof URL)) 180 // return; 181 URL u = null; 182 try { 183 u = new URL(e.getActionCommand()); 184 } catch (Exception ex) { 185 return; 186 } 187 JMenuItem it = (JMenuItem)e.getSource(); 188 showBrowser(u,it.getText()); 189 } 190 }