001 /* BEE - Book Editing Environment for PAVLOV 002 * Copyright (C) 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/bee/WelcomeDialog.java,v 1.1 2004/05/10 14:50:13 tj_willis Exp $ 019 */ 020 package net.sourceforge.bee; 021 022 import javax.swing.*; 023 import java.awt.*; 024 import java.awt.event.*; 025 import net.sourceforge.pavlov.zipUtilities.XMLFileFilter; 026 import net.sourceforge.pavlov.library.Book; 027 import java.io.File; 028 029 /** 030 * Welcomes user and streamlines process of opening new or existing book. 031 * 032 * @author <a href="mailto:"></a> 033 * @version 1.0 034 */ 035 public class WelcomeDialog 036 extends JInternalFrame 037 implements ActionListener 038 { 039 private JPanel p3; 040 private Container content; 041 private JRadioButton newBook, existingBook; 042 private ButtonGroup buttonGroup; 043 private JTextField fTitle, fAuthor; 044 private JTextArea aDescription; 045 private static int CREATE_BOOK =0; 046 private static int OPEN_BOOK =1; 047 private static int mode = OPEN_BOOK; 048 private JFileChooser chooser; 049 private Bee bee; 050 051 /** 052 * Creates a new <code>WelcomeDialog</code> instance. 053 * 054 * @param b a <code>Bee</code> value 055 */ 056 public WelcomeDialog(Bee b) 057 { 058 super("Welcome to BEE!", true, true, true); 059 bee=b; 060 //setClosable(true); 061 content = getContentPane(); 062 content.setLayout(new BorderLayout()); 063 064 Box b1 = new Box(BoxLayout.Y_AXIS); 065 066 String msg1 = new String(); 067 // msg1 +="<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\"></head>"; 068 // msg1 +="<body><div align=\"Center\"><h1>Welcome to BEE!</h1>"; 069 // msg1 +="BEE is the Book Editing Environment for Pavlov. You can use BEE to <br>"; 070 // msg1+="edit and create Books of questions for use with Pavlov. To get started,<br>"; 071 // msg1+="click \"Open Existing Book\" or \"Create New Book.\"<br>"; 072 // msg1+="</div></body></html>"; 073 074 075 JPanel pp = new JPanel(); 076 msg1 +="<html>"; 077 msg1 +="<h1>Welcome to BEE!</h1>"; 078 msg1 +="BEE is the Book Editing Environment for Pavlov. You can use BEE to <br>"; 079 msg1+="edit and create Books of questions for use with Pavlov. To get started,<br>"; 080 msg1+="click \"Open Existing Book\" or \"Create New Book.\"<br>"; 081 msg1+="</html>"; 082 JLabel l1 = new JLabel(msg1,SwingConstants.CENTER); 083 pp.add(l1); 084 b1.add(pp); 085 086 087 088 JPanel p2 = new JPanel(); 089 p2.setLayout(new FlowLayout()); 090 p2.setBorder(BorderFactory.createEtchedBorder()); 091 newBook = new JRadioButton("Create New Book",false); 092 existingBook = new JRadioButton("Open Existing Book",true); 093 newBook.addActionListener(this); 094 existingBook.addActionListener(this); 095 buttonGroup = new ButtonGroup(); 096 buttonGroup.add(newBook); 097 buttonGroup.add(existingBook); 098 099 p2.add(newBook); 100 p2.add(existingBook); 101 b1.add(p2); 102 content.add(b1,BorderLayout.NORTH); 103 104 openExisting(); 105 106 107 // JPanel p4 = new JPanel(); 108 // p4.setLayout(new FlowLayout()); 109 110 // JButton openBook = new JButton("Open Book"); 111 // p4.add(openBook); 112 113 // content.add(p4,BorderLayout.SOUTH); 114 115 pack(); 116 setVisible(true); 117 118 } 119 120 121 /** 122 * Opens an existing book for editing. 123 * 124 */ 125 protected void openExisting() 126 { 127 mode = OPEN_BOOK; 128 if(p3==null){ 129 p3 = new JPanel(); 130 content.add(p3,BorderLayout.CENTER); 131 } else { 132 p3.removeAll(); 133 } 134 p3.setLayout( new FlowLayout()); 135 136 p3.setBorder(BorderFactory.createTitledBorder("Choose Existing Book File")); 137 if(chooser==null){ 138 chooser = new JFileChooser(); 139 chooser.addActionListener(this); 140 XMLFileFilter filter = new XMLFileFilter(); 141 chooser.setFileFilter(filter); 142 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); 143 } 144 chooser.setBorder(BorderFactory.createTitledBorder("")); 145 chooser.setApproveButtonText("Edit This Book File"); 146 p3.add(chooser); 147 pack(); 148 } 149 150 151 /** 152 * Creates a new book and opens it for editing. 153 * 154 */ 155 protected void createNew() 156 { 157 mode = CREATE_BOOK; 158 if(p3==null){ 159 p3 = new JPanel(); 160 161 } else { 162 p3.removeAll(); 163 } 164 p3.setBorder(BorderFactory.createTitledBorder("Create a New Book")); 165 //CardLayout card = new CardLayout(); 166 p3.setLayout(new BorderLayout()); 167 168 JTabbedPane tp = new JTabbedPane(); 169 170 JPanel pan4 = new JPanel(); 171 pan4.setLayout(new BorderLayout()); 172 173 //JPanel b0 = new JPanel(); 174 //b0.setLayout(new BorderLayout()); //Box(BoxLayout.Y_AXIS); 175 176 JPanel pan1 = new JPanel(); 177 pan1.setLayout(new java.awt.GridLayout(2,1)); 178 179 Box b1 = new Box(BoxLayout.X_AXIS); 180 b1.setBorder( BorderFactory.createTitledBorder( "Title" ) ); 181 fTitle = new JTextField(); 182 fTitle.addActionListener(this); 183 b1.add(fTitle); 184 185 Box b2 = new Box(BoxLayout.X_AXIS); 186 b2.setBorder( BorderFactory.createTitledBorder( "Author" ) ); 187 fAuthor = new JTextField(); 188 fAuthor.addActionListener(this); 189 b2.add(fAuthor); 190 191 pan1.add(b1); 192 pan1.add(b2); 193 194 pan4.add(pan1,BorderLayout.NORTH); 195 196 Box b3 = new Box(BoxLayout.X_AXIS); 197 b3.setBorder( BorderFactory.createTitledBorder( "Description" ) ); 198 aDescription = new JTextArea(5,45); 199 aDescription.setLineWrap(true); 200 JScrollPane sp1 = new JScrollPane(aDescription); 201 //sp1.setMinimumSize(new Dimension(360,80)); 202 //bUpdate = new JButton("Update"); 203 //bUpdate.addActionListener(this); 204 205 206 207 b3.add(sp1); 208 pan4.add(b3,BorderLayout.CENTER); 209 //.addLayoutComponent("Step One",pan4); 210 tp.addTab("Step One",pan4);//, new String("One")); 211 212 if(chooser==null){ 213 chooser = new JFileChooser(); 214 chooser.addActionListener(this); 215 XMLFileFilter filter = new XMLFileFilter(); 216 chooser.setFileFilter(filter); 217 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); 218 } 219 chooser.setBorder(BorderFactory.createTitledBorder("Save to Book File")); 220 chooser.setApproveButtonText("Save Book To This File"); 221 //p3.add(chooser,BorderLayout.SOUTH); 222 //card.addLayoutComponent("Two",chooser); 223 tp.add("Step Two",chooser); 224 225 //pack(); 226 227 //b3.add(bUpdate); 228 //p3.add(b0); 229 //p3.add(new JLabel("Create New Panel")); 230 p3.add(tp,BorderLayout.CENTER); 231 content.add(p3,BorderLayout.CENTER); 232 pack(); 233 } 234 235 /** 236 * Handles UI events. 237 * 238 * @param e an <code>ActionEvent</code> value 239 */ 240 public void actionPerformed(ActionEvent e) 241 { 242 Object o = e.getSource(); 243 String x = e.getActionCommand(); 244 System.out.println(x); 245 if(x.equals(JFileChooser.APPROVE_SELECTION)){ 246 if(mode==CREATE_BOOK){ 247 File f = chooser.getSelectedFile(); 248 // if(!checkCreateFile(f)) { 249 // //show a dialog 250 // return; 251 // } 252 this.dispose(); 253 Book b = Book.makeBlankBook(); 254 b.setName(fTitle.getText()); 255 b.setAuthor(fAuthor.getText()); 256 b.setDescription(aDescription.getText()); 257 bee.newBook(f,b); 258 259 } else if (mode==OPEN_BOOK) { 260 File f = chooser.getSelectedFile(); 261 this.dispose(); 262 bee.openBook(f); 263 } else { 264 System.out.println("Invalid mode"); 265 } 266 return; 267 } else if (x.equals(JFileChooser.CANCEL_SELECTION)){ 268 this.dispose(); 269 } 270 if(o.equals(existingBook)) 271 openExisting(); 272 else if(o.equals(newBook)) 273 createNew(); 274 //else 275 // super.actionPerformed(e); 276 277 } 278 }