/* ===========================================================
* TradeManager : a application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.ui.base;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import javax.swing.ImageIcon;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
/**
*
* @version $Id: ErrorPanel.java,v 1.2 2001/11/06 22:37:27 simon Exp $
* @author Simon Allen
*/
public class ErrorPanel extends BasePanel {
/**
*
*/
private static final long serialVersionUID = -2624890325384057649L;
JPanel jPanel1 = new JPanel();
JPanel jPanel4 = new JPanel();
JPanel jPanel2 = new JPanel();
JPanel jPanel3 = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel5 = new JPanel();
JPanel jPanel13 = new JPanel();
BorderLayout borderLayout2 = new BorderLayout();
BorderLayout borderLayout3 = new BorderLayout();
BorderLayout borderLayout5 = new BorderLayout();
GridLayout gridLayout1 = new GridLayout();
BorderLayout borderLayout6 = new BorderLayout();
JTextField statusBar = new JTextField();
GridLayout gridLayout2 = new GridLayout();
JPanel jPanel15 = new JPanel();
JScrollPane jScrollPane1 = new JScrollPane();
BorderLayout borderLayout7 = new BorderLayout();
StreamEditorPane jTextArea1 = new StreamEditorPane();
JPanel jPanel16 = new JPanel();
JPanel jPanel17 = new JPanel();
JPanel jPanel10 = new JPanel();
FlowLayout flowLayout5 = new FlowLayout();
JPanel jPanel7 = new JPanel();
GridLayout gridLayout5 = new GridLayout();
GridLayout gridLayout6 = new GridLayout();
FlowLayout flowLayout4 = new FlowLayout();
JPanel jPanel8 = new JPanel();
JPanel jPanel9 = new JPanel();
GridLayout gridLayout7 = new GridLayout();
BorderLayout borderLayout8 = new BorderLayout();
BorderLayout borderLayout9 = new BorderLayout();
JPanel jPanel18 = new JPanel();
JPanel jPanel = new JPanel();
FlowLayout flowLayout1 = new FlowLayout();
GridLayout gridLayout8 = new GridLayout();
GridLayout gridLayout9 = new GridLayout();
BaseButton jButtonPrint = new BaseButton(this, BaseUIPropertyCodes.PRINT);
BaseButton jButtonClose = new BaseButton(this, BaseUIPropertyCodes.CLOSE);
BaseButton jButtonNew = new BaseButton(this, BaseUIPropertyCodes.NEW);
BaseButton jButtonSave = new BaseButton(this, BaseUIPropertyCodes.SAVE);
BaseButton jButtonOpen = new BaseButton(this, BaseUIPropertyCodes.OPEN_FILE);
BaseButton jButtonSaveAs = new BaseButton(this, BaseUIPropertyCodes.SAVE_AS);
BaseButton jButtonHelp = new BaseButton(this, BaseUIPropertyCodes.HELP);
BaseButton jButtonCut = new BaseButton(this, BaseUIPropertyCodes.CUT);
BaseButton jButtonCopy = new BaseButton(this, BaseUIPropertyCodes.COPY);
BaseButton jButtonPaste = new BaseButton(this, BaseUIPropertyCodes.PASTE);
public ImageIcon jpgIcon;
public ImageIcon gifIcon;
JColorChooser colorChooser1 = new JColorChooser();
JFileChooser filer1 = null;
JFrame mainFrame = null;
String currFileName = null; // path plus filename. null means new / untitled
boolean dirty = false; // true means modified text
public ErrorPanel() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Method jbInit.
*
* @throws Exception
*/
void jbInit() throws Exception {
this.setLayout(borderLayout1);
jPanel1.setLayout(borderLayout6);
jPanel4.setLayout(gridLayout1);
jPanel2.setLayout(borderLayout3);
jPanel3.setLayout(borderLayout5);
jPanel4.setBackground(Color.orange);
jPanel2.setBackground(Color.red);
jPanel3.setBackground(Color.pink);
gridLayout1.setVgap(5);
jPanel17.setLayout(borderLayout9);
jPanel16.setLayout(borderLayout8);
jPanel10.setLayout(gridLayout5);
flowLayout5.setVgap(0);
jPanel7.setLayout(flowLayout5);
flowLayout4.setHgap(2);
flowLayout4.setAlignment(0);
flowLayout4.setVgap(0);
jPanel8.setLayout(flowLayout4);
jPanel9.setLayout(gridLayout9);
jPanel18.setLayout(flowLayout1);
jPanel.setLayout(gridLayout8);
flowLayout1.setVgap(2);
flowLayout1.setHgap(2);
flowLayout5.setAlignment(0);
flowLayout5.setHgap(1);
jPanel15.setLayout(borderLayout7);
gridLayout1.setHgap(2);
jPanel13.setLayout(gridLayout2);
jPanel5.setLayout(borderLayout2);
this.add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jPanel2, BorderLayout.NORTH);
jPanel2.add(jPanel5, BorderLayout.NORTH);
jPanel5.add(jPanel16, BorderLayout.NORTH);
jPanel16.add(jPanel8, BorderLayout.EAST);
jPanel8.add(jPanel9, null);
jPanel9.add(jButtonHelp, null);
jPanel16.add(jPanel7, BorderLayout.WEST);
jPanel7.add(jPanel10, null);
jPanel10.add(jButtonNew, null);
jPanel10.add(jButtonOpen, null);
jPanel10.add(jButtonSaveAs, null);
jPanel10.add(jButtonSave, null);
jPanel10.add(jButtonPrint, null);
jPanel10.add(jButtonClose, null);
jPanel5.add(jPanel17, BorderLayout.SOUTH);
jPanel17.add(jPanel18, BorderLayout.WEST);
jPanel18.add(jPanel, null);
jPanel.add(jButtonCopy, null);
jPanel.add(jButtonCut, null);
jPanel.add(jButtonPaste, null);
jPanel1.add(jPanel3, BorderLayout.CENTER);
jPanel3.add(jPanel15, BorderLayout.CENTER);
jPanel15.add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(jTextArea1, null);
jPanel1.add(jPanel4, BorderLayout.SOUTH);
jPanel4.add(jPanel13, null);
jPanel13.add(statusBar, null);
jTextArea1.setPreferredSize(new Dimension(200, 100));
}
/**
* doNew() -
*
*
*
*
*
*
* @exception *
* @see
*/
public void doNew() {
// Handle the File|New menu item.
if (okToAbandon()) {
// clear the text of the TextArea
jTextArea1.setText("");
// clear the current filename and set the file as clean:
currFileName = null;
dirty = false;
updateCaption();
}
}
/**
* doOpen() -
*
*
*
*
*
*
* @exception *
* @see
*/
public void doOpen() {
if (!okToAbandon()) {
return;
}
jpgIcon = new ImageIcon("images/jpgIcon.jpg");
gifIcon = new ImageIcon("images/gifIcon.gif");
ExampleFileFilter filter = new ExampleFileFilter(new String[] { "jpg", "gif" }, "JPEG and GIF Image Files");
ExampleFileChooser fileView = new ExampleFileChooser();
fileView.putIcon("jpg", jpgIcon);
fileView.putIcon("gif", gifIcon);
if (filer1 == null) {
filer1 = new JFileChooser();
}
filer1.setFileView(fileView);
filer1.addChoosableFileFilter(filter);
filer1.setFileFilter(filter);
// filer1.setAccessory(new ExampleFileView());
// File swingFile = new File("images/swing-64.gif");
int returnVal = filer1.showOpenDialog(this);
// Upon return, getFile() will be null if user cancelled the dialog.
if (returnVal == JFileChooser.APPROVE_OPTION) {
// Non-null file property after return implies user
// selected a file to open.
// Call openFile to attempt to load the text from file into TextArea
currFileName = filer1.getSelectedFile().getPath();
openFile(currFileName);
}
}
/**
* openFile() -
*
*
* @param fileName
* the name of the text file on disk
*
*
*
*
* @exception *
* @see
*/
public void openFile(String fileName) {
Cursor oldCursor = getFrame().getCursor();
getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try (InputStream is = new BufferedInputStream(new FileInputStream(currFileName));) {
// Load the data from the stream
jTextArea1.setInputStream(is);
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(this, "Failed to open file " + fileName, "Warning",
JOptionPane.WARNING_MESSAGE);
statusBar.setText("Error opening " + fileName);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "Error while reading file " + fileName, "Warning",
JOptionPane.WARNING_MESSAGE);
statusBar.setText("Error opening " + fileName);
} catch (Throwable t) {
JOptionPane.showMessageDialog(this, "Unexpected exception: " + t, "Warning", JOptionPane.WARNING_MESSAGE);
statusBar.setText("Error opening " + fileName);
}
// ...and mark the edit session as being clean
this.dirty = false;
// Display the name of the opened directory+file in the statusBar.
statusBar.setText("Opened " + fileName);
updateCaption();
getFrame().setCursor(oldCursor);
}
/**
* doSave() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doSave() {
doSaveFile();
}
/**
* doSave() -
*
*
*
*
*
*
*
* @return false if save did not occur. * @exception * @see
*/
protected boolean doSaveFile() {
// Handle the case where we don't have a file name yet.
if (currFileName == null) {
return saveAs();
}
if (saveFileStream()) {
this.dirty = false;
updateCaption();
return true;
} else {
return false;
}
}
/**
* doSaveAs() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doSaveAs() {
saveAs();
}
/**
* saveAs() -
*
*
*
*
*
*
* @return false means user cancelled the SaveAs * @exception * @see
*/
public boolean saveAs() {
if (filer1 == null) {
filer1 = new JFileChooser();
}
// Make the dialog visible as a modal (default) dialog box.
int returnVal = filer1.showSaveDialog(this);
// Upon return, getFile() will be null if user cancelled the dialog.
if (returnVal == JFileChooser.APPROVE_OPTION) {
// Non-null file property after return implies user
// selected a filename to save to.
// Set the current file name to the user's selection,
// then do a regular saveFile
currFileName = filer1.getSelectedFile().getPath();
return doSaveFile();
} else {
return false;
}
}
/**
* okToAbandon() -
*
*
*
*
*
*
* @return true if user saved here (Yes), or didn't care (No) * @exception
* * @see
*/
private boolean okToAbandon() {
if (!dirty) {
return true;
}
int result = JOptionPane.showInternalConfirmDialog(this, "Save changes ? ", "Warning",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
if (result == JOptionPane.YES_OPTION) {
return saveAs();
} else if (result == JOptionPane.NO_OPTION) {
return true;
} else if (result == JOptionPane.CANCEL_OPTION) {
// cancel
return false;
} else {
// cancel
return false;
}
}
/**
* updateCaption() -
*
*
*
*
*
* @exception *
* @see
*/
private void updateCaption() {
String caption;
if (currFileName == null) {
// synthesize the "Untitled" name if no name yet.
caption = "Untitled";
} else {
caption = currFileName;
}
// add a "*" in the caption if the file is dirty.
if (dirty) {
caption = "* " + caption;
}
caption = "TextEdit - " + caption;
}
/**
* doColor() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doColor() {
// Handle the "Foreground Color" menu item
// Pick up the existing text (foreground) color from the TextArea
// and put it into the ColorChooser before showing
// the ColorChooser, so that we are editing the
// existing text color.
// Before showing it, set the title of the dialog for its
// particular use in this event (for setting the text color)
// Show the ColorChooser.
// Since the ColorChooser is modal by default,
// the program will not return from the call
// to show until the user dismisses the ColorChooser
// using OK or Cancel.
// Now that the user has dismissed the ColorChooser,
// obtain the new color from the ColorChooser's
// value property. First test the result property to see if the
// user pressed OK.
Color color = JColorChooser.showDialog(this, "Set Text Color", jTextArea1.getForeground());
if (color != null) {
// set the foreground of textArea1 to the color
// value that can be obtained from the
// value property of colorChooser1. This
// color value is what the user set
// before pressing the OK button
jTextArea1.setBackground(color);
this.repaint();
}
}
/**
* doDataChanged() -
*
*
*
*
*
*
*
* @exception *
* @see
*
* private void doDataChanged() { if (!dirty) { dirty = true;
*
* updateCaption(); } }
*/
/**
* doPrint()() -
*
* @param <B>
* </B>
*
*
* @return
* @exception @see
*/
public void doPrint() {
PrintController printer = new PrintController();
printer.printComponent(getFrame(), jTextArea1, "Print Errors");
}
/**
* saveFileWriter() -
*
*
*
*
*
*
*
* @return boolean
* @exception *
* @see
*/
public boolean saveFileWriter() {
boolean result = false;
try {
Writer w = new FileWriter(currFileName);
jTextArea1.write(w);
w.close();
statusBar.setText("Saving " + currFileName);
result = true;
} catch (Throwable t) {
JOptionPane.showMessageDialog(this, "Could not save file " + currFileName, "Warning",
JOptionPane.WARNING_MESSAGE);
result = false;
}
return result;
}
/**
* saveFileWriter() -
*
*
*
*
*
*
*
* @return boolean
* @exception *
* @see
*/
public boolean saveFileStream() {
boolean result = false;
try {
OutputStream o = new FileOutputStream(currFileName);
jTextArea1.getEditorKit().write(o, jTextArea1.getDocument(), 0, jTextArea1.getDocument().getLength());
o.close();
statusBar.setText("Saving " + currFileName);
result = true;
} catch (Throwable t) {
JOptionPane.showMessageDialog(this, "Could not save file " + currFileName, "Warning",
JOptionPane.WARNING_MESSAGE);
result = false;
}
return result;
}
/**
* doWindowActivated() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doWindowActivated() {
}
/**
* doWindowDeActivated() -
*
*
*
*
*
*
*
* @return boolean * @exception * @see
*/
public boolean doWindowDeActivated() {
return true;
}
/**
* doWindowClose() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doWindowClose() {
okToAbandon();
}
public void doWindowOpen() {
}
/**
* doWindowOpen() -
*
*
*
*
*
*
*
* @param parm
* Object
* @exception *
* @see
*/
public void doWindowOpen(Object parm) {
if (parm instanceof String) {
jTextArea1.setText((String) parm);
}
}
/**
* doCopy() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doCopy() {
jTextArea1.copy();
}
/**
* doCut() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doCut() {
jTextArea1.cut();
}
/**
* doPaste() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doPaste() {
jTextArea1.paste();
}
/**
* doDelete() -
*
*
*
*
*
*
*
* @exception *
* @see
*/
public void doDelete() {
jTextArea1.setText("");
}
}