/*
GNU Lesser General Public License
Ekit - Java Swing HTML Editor & Viewer
Copyright (C) 2000 Howard Kistler
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.hexidec.ekit;
import com.saigak.FileUtilizator;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;
import javax.swing.*;
/** Ekit
* App for editing and saving HTML in a Java text component
*
* REQUIREMENTS
* Java 2 (JDK 1.3 or 1.4)
* Swing Library
*
* @authors Howard Kistler, Yaodong Liu, Gyoergy Magoss, Oliver Moser, Michael Goldberg, Cecile Rostaing, Thomas
* Gauweiler, Frits Jalvingh, Jerry Pommer, Ruud Noordermeer, Mindaugas Idzelis, Raymond Penners, Steve
* Birmingham, Rafael Cieplinski, Nico Mack, Michael Pearce, Murray Altheim, Mattias Malmgren, Maciej
* Kubicki, Elisabeth Novotny, Christoph Weißenborn
* @version 1.4
*/
public class Ekit extends JFrame implements WindowListener
{
/** <code>serialVersionUID</code> */
private static final long serialVersionUID = 7451335804642125840L;
private EkitCore ekitCore;
private File currentFile = null;
/** Master Constructor
* @param sDocument [String] A text or HTML document to load in the editor upon startup.
* @param sStyleSheet [String] A CSS stylesheet to load in the editor upon startup.
* @param sRawDocument [String] A document encoded as a String to load in the editor upon startup.
* @param urlStyleSheet [URL] A URL reference to the CSS style sheet.
* @param includeToolBar [boolean] Specifies whether the app should include the toolbar.
* @param showViewSource [boolean] Specifies whether or not to show the View Source window on startup.
* @param showMenuIcons [boolean] Specifies whether or not to show icon pictures in menus.
* @param editModeExclusive [boolean] Specifies whether or not to use exclusive edit mode (recommended on).
* @param sLanguage [String] The language portion of the Internationalization Locale to run Ekit in.
* @param sCountry [String] The country portion of the Internationalization Locale to run Ekit in.
* @param base64 [boolean] Specifies whether the raw document is Base64 encoded or not.
* @param debugMode [boolean] Specifies whether to show the Debug menu or not.
* @param useSpellChecker [boolean] Specifies whether to include the spellchecker or not.
* @param multiBar [boolean] Specifies whether to use multiple toolbars or one big toolbar.
*/
public Ekit(String sDocument, String sStyleSheet, String sRawDocument, URL urlStyleSheet, boolean includeToolBar, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, String sLanguage, String sCountry, boolean base64, boolean debugMode, boolean useSpellChecker, boolean multiBar)
{
// if(useSpellChecker)
// {
// ekitCore = new EkitCoreSpell(sDocument, sStyleSheet, sRawDocument, null, urlStyleSheet, includeToolBar, showViewSource, showMenuIcons, editModeExclusive, sLanguage, sCountry, base64, debugMode, true, multiBar, (multiBar ? EkitCore.TOOLBAR_DEFAULT_MULTI : EkitCore.TOOLBAR_DEFAULT_SINGLE));
// }
// else
// {
ekitCore = new EkitCore( this, sDocument, sStyleSheet, sRawDocument, null, urlStyleSheet, includeToolBar, showViewSource, showMenuIcons, editModeExclusive, sLanguage, sCountry, base64, debugMode, false, multiBar, (multiBar ? EkitCore.TOOLBAR_DEFAULT_MULTI : EkitCore.TOOLBAR_DEFAULT_SINGLE));
// }
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent winEvt) {
FileUtilizator.clean();
System.exit(0);
}
});
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
ekitCore.setFrame(this);
/* Add the components to the app */
Container contentPane = getContentPane();
if(includeToolBar)
{
if(multiBar)
{
contentPane.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weightx = 1.0;
gbc.weighty = 0.0;
gbc.gridx = 1;
gbc.gridy = 1;
contentPane.add(ekitCore.getToolBarMain(includeToolBar), gbc);
gbc.gridy = 2;
contentPane.add(ekitCore.getToolBarFormat(includeToolBar), gbc);
gbc.gridy = 3;
contentPane.add(ekitCore.getToolBarStyles(includeToolBar), gbc);
gbc.anchor = GridBagConstraints.SOUTH;
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1.0;
gbc.gridy = 4;
contentPane.add(ekitCore, gbc);
}
else
{
contentPane.setLayout(new BorderLayout());
contentPane.add(ekitCore, BorderLayout.CENTER);
contentPane.add(ekitCore.getToolBar(includeToolBar), BorderLayout.NORTH);
}
}
else
{
contentPane.setLayout(new BorderLayout());
contentPane.add(ekitCore, BorderLayout.CENTER);
}
this.setJMenuBar(ekitCore.getMenuBar());
this.addWindowListener(this);
this.updateTitle();
}
public Ekit()
{
this(null, null, null, null, true, false, true, true, null, null, false, false, false, true);
}
/* WindowListener methods */
public void windowClosing(WindowEvent we)
{
this.dispose();
synchronized (this) {
notifyAll(); // notify the waiting main method
}
}
public void windowOpened(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowActivated(WindowEvent we) {}
public void windowDeactivated(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
/** Convenience method for updating the application title bar
*/
protected void updateTitle()
{
this.setTitle(ekitCore.getAppName() + (currentFile == null ? "" : " - " + currentFile.getName()));
}
/** Usage method
*/
public static void usage()
{
System.out.println("usage: com.hexidec.ekit.Ekit [-t|t+|T] [-s|S] [-m|M] [-x|X] [-b|B] [-v|V] [-fFILE] [-cCSS] [-rRAW] [-uURL] [-lLANG] [-d|D] [-h|H|?]");
System.out.println(" Each option contained in [] brackets is optional,");
System.out.println(" and can be one of the values separated be the | pipe.");
System.out.println(" Each option must be proceeded by a - hyphen.");
System.out.println(" The options are:");
System.out.println(" t|t+|T : -t = single toolbar, -t+ = multiple toolbars, -T = no toolbar");
System.out.println(" s|S : -s = show source window on startup, -S hide source window");
System.out.println(" m|M : -m = show icons on menus, -M no menu icons");
System.out.println(" x|X : -x = exclusive document/source windows, -X use split window");
System.out.println(" b|B : -b = use Base64 document encoding, -B use regular encoding");
System.out.println(" v|V : -v = include spell checker, -V omit spell checker");
System.out.println(" -fFILE : load HTML document on startup (replace FILE with file name)");
System.out.println(" -cCSS : load CSS stylesheet on startup (replace CSS with file name)");
System.out.println(" -rRAW : load raw document on startup (replace RAW with file name)");
System.out.println(" -uURL : load document at URL on startup (replace URL with file URL)");
System.out.println(" -lLANG : specify the starting language (defaults to your locale)");
System.out.println(" replace LANG with xx_XX format (e.g., US English is en_US)");
System.out.println(" -d|D : -d = DEBUG mode on, -D = DEBUG mode off (developers only)");
System.out.println(" -h|H|? : print out this help information");
System.out.println(" ");
System.out.println("The defaults settings are equivalent to: -t+ -S -m -x -B -V -D");
System.out.println(" ");
System.out.println("For further information, read the README file.");
}
/** Main method
*/
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
String sDocument = null;
String sStyleSheet = null;
String sRawDocument = null;
URL urlStyleSheet = null;
boolean includeToolBar = true;
boolean multibar = true;
boolean includeViewSource = false;
boolean includeMenuIcons = true;
boolean modeExclusive = true;
String sLang = null;
String sCtry = null;
boolean base64 = false;
boolean debugOn = false;
boolean spellCheck = false;
for(int i = 0; i < args.length; i++)
{
if (args[i].equals("-h") ||
args[i].equals("-H") ||
args[i].equals("-?")) { usage(); }
else if(args[i].equals("-t")) { includeToolBar = true; multibar = false; }
else if(args[i].equals("-t+")) { includeToolBar = true; multibar = true; }
else if(args[i].equals("-T")) { includeToolBar = false; multibar = false; }
else if(args[i].equals("-s")) { includeViewSource = true; }
else if(args[i].equals("-S")) { includeViewSource = false; }
else if(args[i].equals("-m")) { includeMenuIcons = true; }
else if(args[i].equals("-M")) { includeMenuIcons = false; }
else if(args[i].equals("-x")) { modeExclusive = true; }
else if(args[i].equals("-X")) { modeExclusive = false; }
else if(args[i].equals("-b")) { base64 = true; }
else if(args[i].equals("-B")) { base64 = false; }
else if(args[i].startsWith("-f")) { sDocument = args[i].substring(2, args[i].length()); }
else if(args[i].startsWith("-c")) { sStyleSheet = args[i].substring(2, args[i].length()); }
else if(args[i].startsWith("-r")) { sRawDocument = args[i].substring(2, args[i].length()); }
else if(args[i].equals("-v")) { spellCheck = true; }
else if(args[i].equals("-V")) { spellCheck = false; }
else if(args[i].startsWith("-u"))
{
try
{
urlStyleSheet = new URL(args[i].substring(2, args[i].length()));
}
catch(MalformedURLException murle)
{
murle.printStackTrace(System.err);
}
}
else if(args[i].startsWith("-l"))
{
if(args[i].indexOf('_') == 4 && args[i].length() >= 7)
{
sLang = args[i].substring(2, args[i].indexOf('_'));
sCtry = args[i].substring(args[i].indexOf('_') + 1, args[i].length());
}
}
else if(args[i].equals("-d")) { debugOn = true; }
else if(args[i].equals("-D")) { debugOn = false; }
}
Ekit ekit = new Ekit(sDocument, sStyleSheet, sRawDocument, urlStyleSheet, includeToolBar, includeViewSource, includeMenuIcons, modeExclusive, sLang, sCtry, base64, debugOn, spellCheck, multibar);
ekit.pack();
ekit.setVisible(true);
// synchronized (ekit) {
// while (ekit.isDisplayable()) {
// try {
// ekit.wait(1000);
// } catch (InterruptedException e) {
// e.printStackTrace(System.err);
// }
// }
// }
}
});
}
}