-/*
-GNU Lesser General Public License
-
-EkitCore - Base Java Swing HTML Editor & Viewer Class (Spellcheck Version)
-Copyright (C) 2000-2003 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 java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.Insets;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Reader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.MalformedURLException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.Vector;
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JEditorPane;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTextField;
-import javax.swing.JTextPane;
-import javax.swing.JToggleButton;
-import javax.swing.JToolBar;
-import javax.swing.KeyStroke;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.UndoableEditEvent;
-import javax.swing.event.UndoableEditListener;
-import javax.swing.filechooser.FileFilter;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.ChangedCharSetException;
-import javax.swing.text.DefaultEditorKit;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.Document;
-import javax.swing.text.Element;
-import javax.swing.text.PlainDocument;
-import javax.swing.text.Position;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyledDocument;
-import javax.swing.text.StyledEditorKit;
-import javax.swing.text.StyledEditorKit.FontSizeAction;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTMLDocument;
-import javax.swing.text.html.HTMLEditorKit;
-import javax.swing.text.html.StyleSheet;
-import javax.swing.text.rtf.RTFEditorKit;
-import javax.swing.undo.UndoManager;
-import javax.swing.undo.CannotUndoException;
-
-import com.hexidec.ekit.action.*;
-import com.hexidec.ekit.component.*;
-import com.hexidec.util.Base64Codec;
-import com.hexidec.util.Translatrix;
-
-import com.swabunga.spell.engine.*;
-import com.swabunga.spell.event.*;
-import com.swabunga.spell.swing.*;
-
-/** EkitCore
- * Main application class for editing and saving HTML in a Java text component
- *
- * @author Howard Kistler
- * @version 0.9g
- *
- * REQUIREMENTS
- * Java 2 (JDK 1.3 or 1.4)
- * Swing Library
- */
-
-public class EkitCore extends JPanel implements ActionListener, KeyListener, DocumentListener, SpellCheckListener
-{
- /* Components */
- private JSplitPane jspltDisplay;
- private JTextPane jtpMain;
- private ExtendedHTMLEditorKit htmlKit;
- private ExtendedHTMLDocument htmlDoc;
- private StyleSheet styleSheet;
- private JTextPane jtpSource;
- private JScrollPane jspSource;
- private JToolBar jToolBar;
-
- private JCheckBoxMenuItem jcbmiViewToolbar;
- private JCheckBoxMenuItem jcbmiViewSource;
-
- private JButtonNoFocus jbtnNewHTML;
- private JButtonNoFocus jbtnOpenHTML;
- private JButtonNoFocus jbtnSaveHTML;
- private JButtonNoFocus jbtnCut;
- private JButtonNoFocus jbtnCopy;
- private JButtonNoFocus jbtnPaste;
- private JButtonNoFocus jbtnBold;
- private JButtonNoFocus jbtnItalic;
- private JButtonNoFocus jbtnUnderline;
- private JButtonNoFocus jbtnStrike;
- private JButtonNoFocus jbtnSuperscript;
- private JButtonNoFocus jbtnSubscript;
- private JButtonNoFocus jbtnUList;
- private JButtonNoFocus jbtnOList;
- private JButtonNoFocus jbtnClearFormat;
- private JButtonNoFocus jbtnAnchor;
- private JToggleButtonNoFocus jtbtnViewSource;
- private JComboBoxNoFocus jcmbStyleSelector;
-
- private Frame frameHandler;
-
- private HTMLUtilities htmlUtilities = new HTMLUtilities(this);
-
- /* Actions */
- private StyledEditorKit.BoldAction actionFontBold;
- private StyledEditorKit.ItalicAction actionFontItalic;
- private StyledEditorKit.UnderlineAction actionFontUnderline;
- private FormatAction actionFontStrike;
- private FormatAction actionFontSuperscript;
- private FormatAction actionFontSubscript;
- private ListAutomationAction actionListUnordered;
- private ListAutomationAction actionListOrdered;
- private CustomAction actionSelectFont;
- private CustomAction actionClearFormat;
- private CustomAction actionInsertAnchor;
-
- protected UndoManager undoMngr;
- protected UndoAction undoAction;
- protected RedoAction redoAction;
-
- /* Menus */
- private JMenuBar jMenuBar;
- private JMenu jMenuFile;
- private JMenu jMenuEdit;
- private JMenu jMenuView;
- private JMenu jMenuFont;
- private JMenu jMenuFormat;
- private JMenu jMenuInsert;
- private JMenu jMenuTable;
- private JMenu jMenuForms;
- private JMenu jMenuSearch;
- private JMenu jMenuTools;
- private JMenu jMenuHelp;
- private JMenu jMenuDebug;
-
- /* Constants */
- // Menu Keys
- public static final String KEY_MENU_FILE = "file";
- public static final String KEY_MENU_EDIT = "edit";
- public static final String KEY_MENU_VIEW = "view";
- public static final String KEY_MENU_FONT = "font";
- public static final String KEY_MENU_FORMAT = "format";
- public static final String KEY_MENU_INSERT = "insert";
- public static final String KEY_MENU_TABLE = "table";
- public static final String KEY_MENU_FORMS = "forms";
- public static final String KEY_MENU_SEARCH = "search";
- public static final String KEY_MENU_TOOLS = "tools";
- public static final String KEY_MENU_HELP = "help";
- public static final String KEY_MENU_DEBUG = "debug";
-
- // Tool Keys
- public static final String KEY_TOOL_SEP = "separator";
- public static final String KEY_TOOL_NEW = "new";
- public static final String KEY_TOOL_OPEN = "open";
- public static final String KEY_TOOL_SAVE = "save";
- public static final String KEY_TOOL_CUT = "cut";
- public static final String KEY_TOOL_COPY = "copy";
- public static final String KEY_TOOL_PASTE = "paste";
- public static final String KEY_TOOL_BOLD = "bold";
- public static final String KEY_TOOL_ITALIC = "italic";
- public static final String KEY_TOOL_UNDERLINE = "underline";
- public static final String KEY_TOOL_STRIKE = "strike";
- public static final String KEY_TOOL_SUPER = "superscript";
- public static final String KEY_TOOL_SUB = "subscript";
- public static final String KEY_TOOL_ULIST = "ulist";
- public static final String KEY_TOOL_OLIST = "olist";
- public static final String KEY_TOOL_CLEAR = "clearformats";
- public static final String KEY_TOOL_ANCHOR = "anchor";
- public static final String KEY_TOOL_SOURCE = "viewsource";
- public static final String KEY_TOOL_STYLES = "styleselect";
-
- // Menu & Tool Key Arrays
- private static Hashtable htMenus = new Hashtable();
- private static Hashtable htTools = new Hashtable();
-
- private final String appName = "Ekit";
- private final String menuDialog = "..."; /* text to append to a MenuItem label when menu item opens a dialog */
-
- private final boolean useFormIndicator = true; /* Creates a highlighted background on a new FORM so that it may be more easily edited */
- private final String clrFormIndicator = "#cccccc";
-
- // System Clipboard Settings
- private java.awt.datatransfer.Clipboard sysClipboard;
- private SecurityManager secManager;
-
- /* Variables */
- private int iSplitPos = 0;
-
- private boolean exclusiveEdit = true;
-
- private String lastSearchFindTerm = null;
- private String lastSearchReplaceTerm = null;
- private boolean lastSearchCaseSetting = false;
- private boolean lastSearchTopSetting = false;
-
- private File currentFile = null;
-
- private int indent = 0;
- private final int indentStep = 4;
-
- // File extensions for MutableFilter
- private final String[] extsHTML = { "html", "htm", "shtml" };
- private final String[] extsCSS = { "css" };
- private final String[] extsIMG = { "gif", "jpg", "jpeg", "png" };
- private final String[] extsRTF = { "rtf" };
- private final String[] extsB64 = { "b64" };
- private final String[] extsSer = { "ser" };
-
- /* Spell Checker Settings */
- private static String dictFile;
- private SpellChecker spellCheck = null;
- private JSpellDialog spellDialog;
-
- /* Servlet Settings */
- private String ServletURL = null;
- private String TreePilotSystemID = "";
- private String ImageDir = "";
- private static ResourceBundle TreePilotProperties;
-
- /** 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 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.
- */
- public EkitCore(String sDocument, String sStyleSheet, String sRawDocument, URL urlStyleSheet, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, String sLanguage, String sCountry, boolean base64, boolean debugMode)
- {
- super();
-
- exclusiveEdit = editModeExclusive;
-
- frameHandler = new Frame();
-
- // Determine if system clipboard is available
- secManager = System.getSecurityManager();
- if(secManager != null)
- {
- try
- {
- secManager.checkSystemClipboardAccess();
- sysClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
- }
- catch (SecurityException se)
- {
- sysClipboard = null;
- }
- }
-
- /* Localize for language */
- Translatrix.setBundleName("com.hexidec.ekit.LanguageResources");
- Locale baseLocale = (Locale)null;
- if(sLanguage != null && sCountry != null)
- {
- baseLocale = new Locale(sLanguage, sCountry);
- }
- Translatrix.setLocale(baseLocale);
-
- /* Load TreePilot properties */
- try
- {
- TreePilotProperties = ResourceBundle.getBundle("com.hexidec.ekit.TreePilot");
- }
- catch(MissingResourceException mre)
- {
- logException("MissingResourceException while loading treepilot file", mre);
- }
-
- /* Create the editor kit, document, and stylesheet */
- jtpMain = new JTextPane();
- htmlKit = new ExtendedHTMLEditorKit();
- htmlDoc = (ExtendedHTMLDocument)(htmlKit.createDefaultDocument());
- styleSheet = htmlDoc.getStyleSheet();
- htmlKit.setDefaultCursor(new Cursor(Cursor.TEXT_CURSOR));
-
- /* Set up the text pane */
- jtpMain.setEditorKit(htmlKit);
- jtpMain.setDocument(htmlDoc);
- jtpMain.setMargin(new Insets(4, 4, 4, 4));
- jtpMain.addKeyListener(this);
-
- /* Create the source text area */
- jtpSource = new JTextPane();
- jtpSource.setBackground(new Color(212, 212, 212));
- jtpSource.setSelectionColor(new Color(255, 192, 192));
- jtpSource.setText(jtpMain.getText());
- jtpSource.getDocument().addDocumentListener(this);
-
- /* Add CaretListener for tracking caret location events */
- jtpMain.addCaretListener(new CaretListener()
- {
- public void caretUpdate(CaretEvent ce)
- {
- handleCaretPositionChange(ce);
- }
- });
-
- /* Set up the undo features */
- undoMngr = new UndoManager();
- undoAction = new UndoAction();
- redoAction = new RedoAction();
- jtpMain.getDocument().addUndoableEditListener(new CustomUndoableEditListener());
-
- /* Insert raw document, if exists */
- if(sRawDocument != null && sRawDocument.length() > 0)
- {
- if(base64)
- {
- jtpMain.setText(Base64Codec.decode(sRawDocument));
- }
- else
- {
- jtpMain.setText(sRawDocument);
- }
- }
- jtpMain.setCaretPosition(0);
- jtpMain.getDocument().addDocumentListener(this);
-
- /* Import CSS from reference, if exists */
- if(urlStyleSheet != null)
- {
- try
- {
- String currDocText = jtpMain.getText();
- htmlDoc = (ExtendedHTMLDocument)(htmlKit.createDefaultDocument());
- styleSheet = htmlDoc.getStyleSheet();
- BufferedReader br = new BufferedReader(new InputStreamReader(urlStyleSheet.openStream()));
- styleSheet.loadRules(br, urlStyleSheet);
- br.close();
- htmlDoc = new ExtendedHTMLDocument(styleSheet);
- registerDocument(htmlDoc);
- jtpMain.setText(currDocText);
- jtpSource.setText(jtpMain.getText());
- }
- catch(Exception e)
- {
- e.printStackTrace(System.out);
- }
- }
-
- /* Preload the specified HTML document, if exists */
- if(sDocument != null)
- {
- File defHTML = new File(sDocument);
- if(defHTML.exists())
- {
- try
- {
- openDocument(defHTML);
- }
- catch(Exception e)
- {
- logException("Exception in preloading HTML document", e);
- }
- }
- }
-
- /* Preload the specified CSS document, if exists */
- if(sStyleSheet != null)
- {
- File defCSS = new File(sStyleSheet);
- if(defCSS.exists())
- {
- try
- {
- openStyleSheet(defCSS);
- }
- catch(Exception e)
- {
- logException("Exception in preloading CSS stylesheet", e);
- }
- }
- }
-
- /* Collect the actions that the JTextPane is naturally aware of */
- Hashtable actions = new Hashtable();
- Action[] actionsArray = jtpMain.getActions();
- for(int i = 0; i < actionsArray.length; i++)
- {
- Action a = actionsArray[i];
- actions.put(a.getValue(Action.NAME), a);
- }
-
- /* Create shared actions */
- actionFontBold = new StyledEditorKit.BoldAction();
- actionFontItalic = new StyledEditorKit.ItalicAction();
- actionFontUnderline = new StyledEditorKit.UnderlineAction();
- actionFontStrike = new FormatAction(this, Translatrix.getTranslationString("FontStrike"), HTML.Tag.STRIKE);
- actionFontSuperscript = new FormatAction(this, Translatrix.getTranslationString("FontSuperscript"), HTML.Tag.SUP);
- actionFontSubscript = new FormatAction(this, Translatrix.getTranslationString("FontSubscript"), HTML.Tag.SUB);
- actionListUnordered = new ListAutomationAction(this, Translatrix.getTranslationString("ListUnordered"), HTML.Tag.UL);
- actionListOrdered = new ListAutomationAction(this, Translatrix.getTranslationString("ListOrdered"), HTML.Tag.OL);
- Hashtable customAttr = new Hashtable();
- customAttr.put("face","");
- actionSelectFont = new CustomAction(this, Translatrix.getTranslationString("FontSelect") + menuDialog, HTML.Tag.FONT, customAttr);
- actionClearFormat = new CustomAction(this, Translatrix.getTranslationString("FormatClear"), new HTML.UnknownTag(""));
- actionInsertAnchor = new CustomAction(this, Translatrix.getTranslationString("InsertAnchor") + menuDialog, HTML.Tag.A);
-
- /* Build the menus */
- /* FILE Menu */
- jMenuFile = new JMenu(Translatrix.getTranslationString("File"));
- htMenus.put(KEY_MENU_FILE, jMenuFile);
- JMenuItem jmiNew = new JMenuItem(Translatrix.getTranslationString("NewDocument")); jmiNew.setActionCommand("newdoc"); jmiNew.addActionListener(this); jmiNew.setAccelerator(KeyStroke.getKeyStroke('N', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiNew.setIcon(getEkitIcon("New")); }; jMenuFile.add(jmiNew);
- JMenuItem jmiOpenHTML = new JMenuItem(Translatrix.getTranslationString("OpenDocument") + menuDialog); jmiOpenHTML.setActionCommand("openhtml"); jmiOpenHTML.addActionListener(this); jmiOpenHTML.setAccelerator(KeyStroke.getKeyStroke('O', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiOpenHTML.setIcon(getEkitIcon("Open")); }; jMenuFile.add(jmiOpenHTML);
- JMenuItem jmiOpenCSS = new JMenuItem(Translatrix.getTranslationString("OpenStyle") + menuDialog); jmiOpenCSS.setActionCommand("opencss"); jmiOpenCSS.addActionListener(this); jMenuFile.add(jmiOpenCSS);
- JMenuItem jmiOpenB64 = new JMenuItem(Translatrix.getTranslationString("OpenBase64Document") + menuDialog); jmiOpenB64.setActionCommand("openb64"); jmiOpenB64.addActionListener(this); jMenuFile.add(jmiOpenB64);
- jMenuFile.addSeparator();
- JMenuItem jmiSave = new JMenuItem(Translatrix.getTranslationString("Save")); jmiSave.setActionCommand("save"); jmiSave.addActionListener(this); jmiSave.setAccelerator(KeyStroke.getKeyStroke('S', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiSave.setIcon(getEkitIcon("Save")); }; jMenuFile.add(jmiSave);
- JMenuItem jmiSaveAs = new JMenuItem(Translatrix.getTranslationString("SaveAs") + menuDialog); jmiSaveAs.setActionCommand("saveas"); jmiSaveAs.addActionListener(this); jMenuFile.add(jmiSaveAs);
- JMenuItem jmiSaveBody = new JMenuItem(Translatrix.getTranslationString("SaveBody") + menuDialog); jmiSaveBody.setActionCommand("savebody"); jmiSaveBody.addActionListener(this); jMenuFile.add(jmiSaveBody);
- JMenuItem jmiSaveRTF = new JMenuItem(Translatrix.getTranslationString("SaveRTF") + menuDialog); jmiSaveRTF.setActionCommand("savertf"); jmiSaveRTF.addActionListener(this); jMenuFile.add(jmiSaveRTF);
- JMenuItem jmiSaveB64 = new JMenuItem(Translatrix.getTranslationString("SaveB64") + menuDialog); jmiSaveB64.setActionCommand("saveb64"); jmiSaveB64.addActionListener(this); jMenuFile.add(jmiSaveB64);
- jMenuFile.addSeparator();
- JMenuItem jmiSerialOut = new JMenuItem(Translatrix.getTranslationString("Serialize") + menuDialog); jmiSerialOut.setActionCommand("serialize"); jmiSerialOut.addActionListener(this); jMenuFile.add(jmiSerialOut);
- JMenuItem jmiSerialIn = new JMenuItem(Translatrix.getTranslationString("ReadFromSer") + menuDialog); jmiSerialIn.setActionCommand("readfromser"); jmiSerialIn.addActionListener(this); jMenuFile.add(jmiSerialIn);
- jMenuFile.addSeparator();
- JMenuItem jmiExit = new JMenuItem(Translatrix.getTranslationString("Exit")); jmiExit.setActionCommand("exit"); jmiExit.addActionListener(this); jMenuFile.add(jmiExit);
-
- /* EDIT Menu */
- jMenuEdit = new JMenu(Translatrix.getTranslationString("Edit"));
- htMenus.put(KEY_MENU_EDIT, jMenuEdit);
- if(sysClipboard != null)
- {
- // System Clipboard versions of menu commands
- JMenuItem jmiCut = new JMenuItem(Translatrix.getTranslationString("Cut")); jmiCut.setActionCommand("textcut"); jmiCut.addActionListener(this); jmiCut.setAccelerator(KeyStroke.getKeyStroke('X', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiCut.setIcon(getEkitIcon("Cut")); } jMenuEdit.add(jmiCut);
- JMenuItem jmiCopy = new JMenuItem(Translatrix.getTranslationString("Copy")); jmiCopy.setActionCommand("textcopy"); jmiCopy.addActionListener(this); jmiCopy.setAccelerator(KeyStroke.getKeyStroke('C', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiCopy.setIcon(getEkitIcon("Copy")); } jMenuEdit.add(jmiCopy);
- JMenuItem jmiPaste = new JMenuItem(Translatrix.getTranslationString("Paste")); jmiPaste.setActionCommand("textpaste"); jmiPaste.addActionListener(this); jmiPaste.setAccelerator(KeyStroke.getKeyStroke('V', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiPaste.setIcon(getEkitIcon("Paste")); } jMenuEdit.add(jmiPaste);
- }
- else
- {
- // DefaultEditorKit versions of menu commands
- JMenuItem jmiCut = new JMenuItem(new DefaultEditorKit.CutAction()); jmiCut.setText(Translatrix.getTranslationString("Cut")); jmiCut.setAccelerator(KeyStroke.getKeyStroke('X', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiCut.setIcon(getEkitIcon("Cut")); } jMenuEdit.add(jmiCut);
- JMenuItem jmiCopy = new JMenuItem(new DefaultEditorKit.CopyAction()); jmiCopy.setText(Translatrix.getTranslationString("Copy")); jmiCopy.setAccelerator(KeyStroke.getKeyStroke('C', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiCopy.setIcon(getEkitIcon("Copy")); } jMenuEdit.add(jmiCopy);
- JMenuItem jmiPaste = new JMenuItem(new DefaultEditorKit.PasteAction()); jmiPaste.setText(Translatrix.getTranslationString("Paste")); jmiPaste.setAccelerator(KeyStroke.getKeyStroke('V', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiPaste.setIcon(getEkitIcon("Paste")); } jMenuEdit.add(jmiPaste);
- }
- jMenuEdit.addSeparator();
- JMenuItem jmiUndo = new JMenuItem(undoAction); jmiUndo.setAccelerator(KeyStroke.getKeyStroke('Z', java.awt.Event.CTRL_MASK, false)); jMenuEdit.add(jmiUndo);
- JMenuItem jmiRedo = new JMenuItem(redoAction); jmiRedo.setAccelerator(KeyStroke.getKeyStroke('Y', java.awt.Event.CTRL_MASK, false)); jMenuEdit.add(jmiRedo);
- jMenuEdit.addSeparator();
- JMenuItem jmiSelAll = new JMenuItem((Action)actions.get(DefaultEditorKit.selectAllAction)); jmiSelAll.setText(Translatrix.getTranslationString("SelectAll")); jmiSelAll.setAccelerator(KeyStroke.getKeyStroke('A', java.awt.Event.CTRL_MASK, false)); jMenuEdit.add(jmiSelAll);
- JMenuItem jmiSelPara = new JMenuItem((Action)actions.get(DefaultEditorKit.selectParagraphAction)); jmiSelPara.setText(Translatrix.getTranslationString("SelectParagraph")); jMenuEdit.add(jmiSelPara);
- JMenuItem jmiSelLine = new JMenuItem((Action)actions.get(DefaultEditorKit.selectLineAction)); jmiSelLine.setText(Translatrix.getTranslationString("SelectLine")); jMenuEdit.add(jmiSelLine);
- JMenuItem jmiSelWord = new JMenuItem((Action)actions.get(DefaultEditorKit.selectWordAction)); jmiSelWord.setText(Translatrix.getTranslationString("SelectWord")); jMenuEdit.add(jmiSelWord);
-
- /* VIEW Menu */
- jMenuView = new JMenu(Translatrix.getTranslationString("View"));
- htMenus.put(KEY_MENU_VIEW, jMenuView);
- jcbmiViewToolbar = new JCheckBoxMenuItem(Translatrix.getTranslationString("ViewToolbar"), false); jcbmiViewToolbar.setActionCommand("toggletoolbar"); jcbmiViewToolbar.addActionListener(this); jMenuView.add(jcbmiViewToolbar);
- jcbmiViewSource = new JCheckBoxMenuItem(Translatrix.getTranslationString("ViewSource"), false); jcbmiViewSource.setActionCommand("viewsource"); jcbmiViewSource.addActionListener(this); jMenuView.add(jcbmiViewSource);
-
- /* FONT Menu */
- jMenuFont = new JMenu(Translatrix.getTranslationString("Font"));
- htMenus.put(KEY_MENU_FONT, jMenuFont);
- JMenuItem jmiBold = new JMenuItem(actionFontBold); jmiBold.setText(Translatrix.getTranslationString("FontBold")); jmiBold.setAccelerator(KeyStroke.getKeyStroke('B', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiBold.setIcon(getEkitIcon("Bold")); } jMenuFont.add(jmiBold);
- JMenuItem jmiItalic = new JMenuItem(actionFontItalic); jmiItalic.setText(Translatrix.getTranslationString("FontItalic")); jmiItalic.setAccelerator(KeyStroke.getKeyStroke('I', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiItalic.setIcon(getEkitIcon("Italic")); } jMenuFont.add(jmiItalic);
- JMenuItem jmiUnderline = new JMenuItem(actionFontUnderline); jmiUnderline.setText(Translatrix.getTranslationString("FontUnderline")); jmiUnderline.setAccelerator(KeyStroke.getKeyStroke('U', java.awt.Event.CTRL_MASK, false)); if(showMenuIcons) { jmiUnderline.setIcon(getEkitIcon("Underline")); } jMenuFont.add(jmiUnderline);
- JMenuItem jmiStrike = new JMenuItem(actionFontStrike); jmiStrike.setText(Translatrix.getTranslationString("FontStrike")); if(showMenuIcons) { jmiStrike.setIcon(getEkitIcon("Strike")); } jMenuFont.add(jmiStrike);
- jMenuFont.addSeparator();
- jMenuFont.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatBig"), HTML.Tag.BIG)));
- jMenuFont.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatSmall"), HTML.Tag.SMALL)));
- JMenu jMenuFontSize = new JMenu(Translatrix.getTranslationString("FontSize"));
- String fontSizeKey = "size";
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"1");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize1"), HTML.Tag.FONT, customAttr)));
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"2");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize2"), HTML.Tag.FONT, customAttr)));
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"3");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize3"), HTML.Tag.FONT, customAttr)));
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"4");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize4"), HTML.Tag.FONT, customAttr)));
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"5");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize5"), HTML.Tag.FONT, customAttr)));
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"6");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize6"), HTML.Tag.FONT, customAttr)));
- customAttr = new Hashtable(); customAttr.put(fontSizeKey,"7");
- jMenuFontSize.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("FontSize7"), HTML.Tag.FONT, customAttr)));
- jMenuFont.add(jMenuFontSize);
- jMenuFont.addSeparator();
- JMenuItem jmiSupscript = new JMenuItem(actionFontSuperscript); if(showMenuIcons) { jmiSupscript.setIcon(getEkitIcon("Super")); } jMenuFont.add(jmiSupscript);
- JMenuItem jmiSubscript = new JMenuItem(actionFontSubscript); if(showMenuIcons) { jmiSubscript.setIcon(getEkitIcon("Sub")); } jMenuFont.add(jmiSubscript);
- jMenuFont.addSeparator();
- JMenuItem jmiSerif = new JMenuItem((Action)actions.get("font-family-Serif")); jmiSerif.setText(Translatrix.getTranslationString("FontSerif")); jMenuFont.add(jmiSerif);
- JMenuItem jmiSansSerif = new JMenuItem((Action)actions.get("font-family-SansSerif")); jmiSansSerif.setText(Translatrix.getTranslationString("FontSansserif")); jMenuFont.add(jmiSansSerif);
- JMenuItem jmiMonospaced = new JMenuItem((Action)actions.get("font-family-Monospaced")); jmiMonospaced.setText(Translatrix.getTranslationString("FontMonospaced")); jMenuFont.add(jmiMonospaced);
- JMenuItem jmiSelectFont = new JMenuItem(actionSelectFont); jMenuFont.add(jmiSelectFont);
- jMenuFont.addSeparator();
- JMenu jMenuFontColor = new JMenu(Translatrix.getTranslationString("Color"));
- customAttr = new Hashtable(); customAttr.put("color","black");
- jMenuFontColor.add(new JMenuItem(new CustomAction(this, Translatrix.getTranslationString("CustomColor") + menuDialog, HTML.Tag.FONT, customAttr)));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorAqua"), new Color( 0,255,255))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorBlack"), new Color( 0, 0, 0))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorBlue"), new Color( 0, 0,255))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorFuschia"), new Color(255, 0,255))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorGray"), new Color(128,128,128))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorGreen"), new Color( 0,128, 0))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorLime"), new Color( 0,255, 0))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorMaroon"), new Color(128, 0, 0))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorNavy"), new Color( 0, 0,128))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorOlive"), new Color(128,128, 0))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorPurple"), new Color(128, 0,128))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorRed"), new Color(255, 0, 0))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorSilver"), new Color(192,192,192))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorTeal"), new Color( 0,128,128))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorWhite"), new Color(255,255,255))));
- jMenuFontColor.add(new JMenuItem(new StyledEditorKit.ForegroundAction(Translatrix.getTranslationString("ColorYellow"), new Color(255,255, 0))));
- jMenuFont.add(jMenuFontColor);
-
- /* FORMAT Menu */
- jMenuFormat = new JMenu(Translatrix.getTranslationString("Format"));
- htMenus.put(KEY_MENU_FORMAT, jMenuFormat);
- JMenu jMenuFormatAlign = new JMenu(Translatrix.getTranslationString("Align"));
- jMenuFormatAlign.add(new JMenuItem(new StyledEditorKit.AlignmentAction(Translatrix.getTranslationString("AlignLeft"), StyleConstants.ALIGN_LEFT)));
- jMenuFormatAlign.add(new JMenuItem(new StyledEditorKit.AlignmentAction(Translatrix.getTranslationString("AlignCenter"), StyleConstants.ALIGN_CENTER)));
- jMenuFormatAlign.add(new JMenuItem(new StyledEditorKit.AlignmentAction(Translatrix.getTranslationString("AlignRight"), StyleConstants.ALIGN_RIGHT)));
- jMenuFormatAlign.add(new JMenuItem(new StyledEditorKit.AlignmentAction(Translatrix.getTranslationString("AlignJustified"), StyleConstants.ALIGN_JUSTIFIED)));
- jMenuFormat.add(jMenuFormatAlign);
- jMenuFormat.addSeparator();
- JMenu jMenuFormatHeading = new JMenu(Translatrix.getTranslationString("Heading"));
- jMenuFormatHeading.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("Heading1"), HTML.Tag.H1)));
- jMenuFormatHeading.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("Heading2"), HTML.Tag.H2)));
- jMenuFormatHeading.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("Heading3"), HTML.Tag.H3)));
- jMenuFormatHeading.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("Heading4"), HTML.Tag.H4)));
- jMenuFormatHeading.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("Heading5"), HTML.Tag.H5)));
- jMenuFormatHeading.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("Heading6"), HTML.Tag.H6)));
- jMenuFormat.add(jMenuFormatHeading);
- jMenuFormat.addSeparator();
- JMenuItem jmiUList = new JMenuItem(actionListUnordered); if(showMenuIcons) { jmiUList.setIcon(getEkitIcon("UList")); } jMenuFormat.add(jmiUList);
- JMenuItem jmiOList = new JMenuItem(actionListOrdered); if(showMenuIcons) { jmiOList.setIcon(getEkitIcon("OList")); } jMenuFormat.add(jmiOList);
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("ListItem"), HTML.Tag.LI)));
- jMenuFormat.addSeparator();
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatBlockquote"), HTML.Tag.BLOCKQUOTE)));
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatPre"), HTML.Tag.PRE)));
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatStrong"), HTML.Tag.STRONG)));
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatEmphasis"), HTML.Tag.EM)));
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatTT"), HTML.Tag.TT)));
- jMenuFormat.add(new JMenuItem(new FormatAction(this, Translatrix.getTranslationString("FormatSpan"), HTML.Tag.SPAN)));
- jMenuFormat.addSeparator();
- JMenuItem jmiClearStyles = new JMenuItem(actionClearFormat); if(showMenuIcons) { jmiClearStyles.setIcon(getEkitIcon("ClearFormat")); }; jMenuFormat.add(jmiClearStyles);
-
- /* INSERT Menu */
- jMenuInsert = new JMenu(Translatrix.getTranslationString("Insert"));
- htMenus.put(KEY_MENU_INSERT, jMenuInsert);
- jMenuInsert.add(new JMenuItem(actionInsertAnchor));
- JMenuItem jmiBreak = new JMenuItem(Translatrix.getTranslationString("InsertBreak")); jmiBreak.setActionCommand("insertbreak"); jmiBreak.addActionListener(this); jmiBreak.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, java.awt.Event.SHIFT_MASK, false)); jMenuInsert.add(jmiBreak);
- JMenuItem jmiNBSP = new JMenuItem(Translatrix.getTranslationString("InsertNBSP")); jmiNBSP.setActionCommand("insertnbsp"); jmiNBSP.addActionListener(this); jMenuInsert.add(jmiNBSP);
- JMenuItem jmiHRule = new JMenuItem((Action)actions.get("InsertHR")); jmiHRule.setText(Translatrix.getTranslationString("InsertHorizontalRule")); jMenuInsert.add(jmiHRule);
- jMenuInsert.addSeparator();
- JMenuItem jmiImageLocal = new JMenuItem(Translatrix.getTranslationString("InsertLocalImage") + menuDialog); jmiImageLocal.setActionCommand("insertlocalimage"); jmiImageLocal.addActionListener(this); jMenuInsert.add(jmiImageLocal);
- JMenuItem jmiImageServer = new JMenuItem(Translatrix.getTranslationString("InsertServerImage") + menuDialog); jmiImageServer.setActionCommand("insertserverimage"); jmiImageServer.addActionListener(this); jMenuInsert.add(jmiImageServer);
-
- /* TABLE Menu */
- jMenuTable = new JMenu(Translatrix.getTranslationString("Table"));
- htMenus.put(KEY_MENU_TABLE, jMenuTable);
- JMenuItem jmiTable = new JMenuItem(Translatrix.getTranslationString("InsertTable") + menuDialog); jmiTable.setActionCommand("inserttable"); jmiTable.addActionListener(this); jMenuTable.add(jmiTable);
- jMenuTable.addSeparator();
- JMenuItem jmiTableRow = new JMenuItem(Translatrix.getTranslationString("InsertTableRow")); jmiTableRow.setActionCommand("inserttablerow"); jmiTableRow.addActionListener(this); jMenuTable.add(jmiTableRow);
- JMenuItem jmiTableCol = new JMenuItem(Translatrix.getTranslationString("InsertTableColumn")); jmiTableCol.setActionCommand("inserttablecolumn"); jmiTableCol.addActionListener(this); jMenuTable.add(jmiTableCol);
- jMenuTable.addSeparator();
- JMenuItem jmiTableRowDel = new JMenuItem(Translatrix.getTranslationString("DeleteTableRow")); jmiTableRowDel.setActionCommand("deletetablerow"); jmiTableRowDel.addActionListener(this); jMenuTable.add(jmiTableRowDel);
- JMenuItem jmiTableColDel = new JMenuItem(Translatrix.getTranslationString("DeleteTableColumn")); jmiTableColDel.setActionCommand("deletetablecolumn"); jmiTableColDel.addActionListener(this); jMenuTable.add(jmiTableColDel);
-
- /* FORMS Menu */
- jMenuForms = new JMenu(Translatrix.getTranslationString("Forms"));
- htMenus.put(KEY_MENU_FORMS, jMenuForms);
- JMenuItem jmiFormInsertForm = new JMenuItem(Translatrix.getTranslationString("FormInsertForm")); jmiFormInsertForm.setActionCommand("insertform"); jmiFormInsertForm.addActionListener(this); jMenuForms.add(jmiFormInsertForm);
- jMenuForms.addSeparator();
- JMenuItem jmiFormTextfield = new JMenuItem(Translatrix.getTranslationString("FormTextfield")); jmiFormTextfield.setActionCommand("inserttextfield"); jmiFormTextfield.addActionListener(this); jMenuForms.add(jmiFormTextfield);
- JMenuItem jmiFormTextarea = new JMenuItem(Translatrix.getTranslationString("FormTextarea")); jmiFormTextarea.setActionCommand("inserttextarea"); jmiFormTextarea.addActionListener(this); jMenuForms.add(jmiFormTextarea);
- JMenuItem jmiFormCheckbox = new JMenuItem(Translatrix.getTranslationString("FormCheckbox")); jmiFormCheckbox.setActionCommand("insertcheckbox"); jmiFormCheckbox.addActionListener(this); jMenuForms.add(jmiFormCheckbox);
- JMenuItem jmiFormRadio = new JMenuItem(Translatrix.getTranslationString("FormRadio")); jmiFormRadio.setActionCommand("insertradiobutton"); jmiFormRadio.addActionListener(this); jMenuForms.add(jmiFormRadio);
- JMenuItem jmiFormPassword = new JMenuItem(Translatrix.getTranslationString("FormPassword")); jmiFormPassword.setActionCommand("insertpassword"); jmiFormPassword.addActionListener(this); jMenuForms.add(jmiFormPassword);
- jMenuForms.addSeparator();
- JMenuItem jmiFormButton = new JMenuItem(Translatrix.getTranslationString("FormButton")); jmiFormButton.setActionCommand("insertbutton"); jmiFormButton.addActionListener(this); jMenuForms.add(jmiFormButton);
- JMenuItem jmiFormButtonSubmit = new JMenuItem(Translatrix.getTranslationString("FormButtonSubmit")); jmiFormButtonSubmit.setActionCommand("insertbuttonsubmit"); jmiFormButtonSubmit.addActionListener(this); jMenuForms.add(jmiFormButtonSubmit);
- JMenuItem jmiFormButtonReset = new JMenuItem(Translatrix.getTranslationString("FormButtonReset")); jmiFormButtonReset.setActionCommand("insertbuttonreset"); jmiFormButtonReset.addActionListener(this); jMenuForms.add(jmiFormButtonReset);
-
- /* SEARCH Menu */
- jMenuSearch = new JMenu(Translatrix.getTranslationString("Search"));
- htMenus.put(KEY_MENU_SEARCH, jMenuSearch);
- JMenuItem jmiFind = new JMenuItem(Translatrix.getTranslationString("SearchFind")); jmiFind.setActionCommand("find"); jmiFind.addActionListener(this); jmiFind.setAccelerator(KeyStroke.getKeyStroke('F', java.awt.Event.CTRL_MASK, false)); jMenuSearch.add(jmiFind);
- JMenuItem jmiFindAgain = new JMenuItem(Translatrix.getTranslationString("SearchFindAgain")); jmiFindAgain.setActionCommand("findagain"); jmiFindAgain.addActionListener(this); jmiFindAgain.setAccelerator(KeyStroke.getKeyStroke('G', java.awt.Event.CTRL_MASK, false)); jMenuSearch.add(jmiFindAgain);
- JMenuItem jmiReplace = new JMenuItem(Translatrix.getTranslationString("SearchReplace")); jmiReplace.setActionCommand("replace"); jmiReplace.addActionListener(this); jmiReplace.setAccelerator(KeyStroke.getKeyStroke('R', java.awt.Event.CTRL_MASK, false)); jMenuSearch.add(jmiReplace);
-
- /* TOOLS Menu */
- jMenuTools = new JMenu(Translatrix.getTranslationString("Tools"));
- htMenus.put(KEY_MENU_TOOLS, jMenuTools);
- JMenuItem jmiSpellcheck = new JMenuItem(Translatrix.getTranslationString("ToolSpellcheck")); jmiSpellcheck.setActionCommand("spellcheck"); jmiSpellcheck.addActionListener(this); jMenuTools.add(jmiSpellcheck);
-
- /* HELP Menu */
- jMenuHelp = new JMenu(Translatrix.getTranslationString("Help"));
- htMenus.put(KEY_MENU_HELP, jMenuHelp);
- JMenuItem jmiAbout = new JMenuItem(Translatrix.getTranslationString("About")); jmiAbout.setActionCommand("helpabout"); jmiAbout.addActionListener(this); jMenuHelp.add(jmiAbout);
-
- /* DEBUG Menu */
- jMenuDebug = new JMenu(Translatrix.getTranslationString("Debug"));
- htMenus.put(KEY_MENU_DEBUG, jMenuDebug);
- JMenuItem jmiDesc = new JMenuItem(Translatrix.getTranslationString("DescribeDoc")); jmiDesc.setActionCommand("describe"); jmiDesc.addActionListener(this); jMenuDebug.add(jmiDesc);
- JMenuItem jmiDescCSS = new JMenuItem(Translatrix.getTranslationString("DescribeCSS")); jmiDescCSS.setActionCommand("describecss"); jmiDescCSS.addActionListener(this); jMenuDebug.add(jmiDescCSS);
- JMenuItem jmiTag = new JMenuItem(Translatrix.getTranslationString("WhatTags")); jmiTag.setActionCommand("whattags"); jmiTag.addActionListener(this); jMenuDebug.add(jmiTag);
-
- /* Create menubar and add menus */
- jMenuBar = new JMenuBar();
- jMenuBar.add(jMenuFile);
- jMenuBar.add(jMenuEdit);
- jMenuBar.add(jMenuView);
- jMenuBar.add(jMenuFont);
- jMenuBar.add(jMenuFormat);
- jMenuBar.add(jMenuSearch);
- jMenuBar.add(jMenuInsert);
- jMenuBar.add(jMenuTable);
- jMenuBar.add(jMenuForms);
- jMenuBar.add(jMenuTools);
- jMenuBar.add(jMenuHelp);
- if(debugMode)
- {
- jMenuBar.add(jMenuDebug);
- }
-
- /* Create the toolbar */
- jToolBar = new JToolBar(JToolBar.HORIZONTAL);
- jToolBar.setFloatable(false);
- jbtnNewHTML = new JButtonNoFocus(getEkitIcon("New")); jbtnNewHTML.setToolTipText(Translatrix.getTranslationString("NewDocument")); jbtnNewHTML.setActionCommand("newdoc"); jbtnNewHTML.addActionListener(this); jToolBar.add(jbtnNewHTML); htTools.put(KEY_TOOL_NEW, jbtnNewHTML);
- jbtnOpenHTML = new JButtonNoFocus(getEkitIcon("Open")); jbtnOpenHTML.setToolTipText(Translatrix.getTranslationString("OpenDocument")); jbtnOpenHTML.setActionCommand("openhtml"); jbtnOpenHTML.addActionListener(this); jToolBar.add(jbtnOpenHTML); htTools.put(KEY_TOOL_OPEN, jbtnOpenHTML);
- jbtnSaveHTML = new JButtonNoFocus(getEkitIcon("Save")); jbtnSaveHTML.setToolTipText(Translatrix.getTranslationString("SaveDocument")); jbtnSaveHTML.setActionCommand("saveas"); jbtnSaveHTML.addActionListener(this); jToolBar.add(jbtnSaveHTML); htTools.put(KEY_TOOL_SAVE, jbtnSaveHTML);
- jToolBar.add(new JToolBar.Separator());
- jbtnCut = new JButtonNoFocus(new DefaultEditorKit.CutAction()); jbtnCut.setIcon(getEkitIcon("Cut")); jbtnCut.setText(null); jbtnCut.setToolTipText(Translatrix.getTranslationString("Cut")); jToolBar.add(jbtnCut); htTools.put(KEY_TOOL_CUT, jbtnCut);
- jbtnCopy = new JButtonNoFocus(new DefaultEditorKit.CopyAction()); jbtnCopy.setIcon(getEkitIcon("Copy")); jbtnCopy.setText(null); jbtnCopy.setToolTipText(Translatrix.getTranslationString("Copy")); jToolBar.add(jbtnCopy); htTools.put(KEY_TOOL_COPY, jbtnCopy);
- jbtnPaste = new JButtonNoFocus(new DefaultEditorKit.PasteAction()); jbtnPaste.setIcon(getEkitIcon("Paste")); jbtnPaste.setText(null); jbtnPaste.setToolTipText(Translatrix.getTranslationString("Paste")); jToolBar.add(jbtnPaste); htTools.put(KEY_TOOL_PASTE, jbtnPaste);
- jToolBar.add(new JToolBar.Separator());
- jbtnBold = new JButtonNoFocus(actionFontBold); jbtnBold.setIcon(getEkitIcon("Bold")); jbtnBold.setText(null); jbtnBold.setToolTipText(Translatrix.getTranslationString("FontBold")); jToolBar.add(jbtnBold); htTools.put(KEY_TOOL_BOLD, jbtnBold);
- jbtnItalic = new JButtonNoFocus(actionFontItalic); jbtnItalic.setIcon(getEkitIcon("Italic")); jbtnItalic.setText(null); jbtnItalic.setToolTipText(Translatrix.getTranslationString("FontItalic")); jToolBar.add(jbtnItalic); htTools.put(KEY_TOOL_ITALIC, jbtnItalic);
- jbtnUnderline = new JButtonNoFocus(actionFontUnderline); jbtnUnderline.setIcon(getEkitIcon("Underline")); jbtnUnderline.setText(null); jbtnUnderline.setToolTipText(Translatrix.getTranslationString("FontUnderline")); jToolBar.add(jbtnUnderline); htTools.put(KEY_TOOL_UNDERLINE, jbtnUnderline);
- jbtnStrike = new JButtonNoFocus(actionFontStrike); jbtnStrike.setIcon(getEkitIcon("Strike")); jbtnStrike.setText(null); jbtnStrike.setToolTipText(Translatrix.getTranslationString("FontStrike")); jToolBar.add(jbtnStrike); htTools.put(KEY_TOOL_STRIKE, jbtnStrike);
- jbtnSuperscript = new JButtonNoFocus(actionFontSuperscript); jbtnSuperscript.setIcon(getEkitIcon("Super")); jbtnSuperscript.setText(null); jbtnSuperscript.setToolTipText(Translatrix.getTranslationString("FontSuperscript")); jToolBar.add(jbtnSuperscript); htTools.put(KEY_TOOL_SUPER, jbtnSuperscript);
- jbtnSubscript = new JButtonNoFocus(actionFontSubscript); jbtnSubscript.setIcon(getEkitIcon("Sub")); jbtnSubscript.setText(null); jbtnSubscript.setToolTipText(Translatrix.getTranslationString("FontSubscript")); jToolBar.add(jbtnSubscript); htTools.put(KEY_TOOL_SUB, jbtnSubscript);
- jbtnUList = new JButtonNoFocus(actionListUnordered); jbtnUList.setIcon(getEkitIcon("UList")); jbtnUList.setText(null); jbtnUList.setToolTipText(Translatrix.getTranslationString("ListUnordered")); jToolBar.add(jbtnUList); htTools.put(KEY_TOOL_ULIST, jbtnUList);
- jbtnOList = new JButtonNoFocus(actionListOrdered); jbtnOList.setIcon(getEkitIcon("OList")); jbtnOList.setText(null); jbtnOList.setToolTipText(Translatrix.getTranslationString("ListOrdered")); jToolBar.add(jbtnOList); htTools.put(KEY_TOOL_OLIST, jbtnOList);
- jbtnClearFormat = new JButtonNoFocus(actionClearFormat); jbtnClearFormat.setIcon(getEkitIcon("ClearFormat")); jbtnClearFormat.setText(null); jbtnClearFormat.setToolTipText(Translatrix.getTranslationString("FormatClear")); jToolBar.add(jbtnClearFormat); htTools.put(KEY_TOOL_CLEAR, jbtnClearFormat);
- jToolBar.add(new JToolBar.Separator());
- jbtnAnchor = new JButtonNoFocus(actionInsertAnchor); jbtnAnchor.setIcon(getEkitIcon("Anchor")); jbtnAnchor.setText(null); jbtnAnchor.setToolTipText(Translatrix.getTranslationString("ToolAnchor")); jToolBar.add(jbtnAnchor); htTools.put(KEY_TOOL_ANCHOR, jbtnAnchor);
- jToolBar.add(new JToolBar.Separator());
- jtbtnViewSource = new JToggleButtonNoFocus(getEkitIcon("Source")); jtbtnViewSource.setText(null); jtbtnViewSource.setToolTipText(Translatrix.getTranslationString("ViewSource")); jtbtnViewSource.setActionCommand("viewsource"); jtbtnViewSource.addActionListener(this); jtbtnViewSource.setPreferredSize(jbtnAnchor.getPreferredSize()); jtbtnViewSource.setMinimumSize(jbtnAnchor.getMinimumSize()); jtbtnViewSource.setMaximumSize(jbtnAnchor.getMaximumSize()); jToolBar.add(jtbtnViewSource); htTools.put(KEY_TOOL_SOURCE, jtbtnViewSource);
- jToolBar.add(new JToolBar.Separator());
- jcmbStyleSelector = new JComboBoxNoFocus(); jToolBar.add(jcmbStyleSelector); jcmbStyleSelector.setAction(new StylesAction(jcmbStyleSelector)); htTools.put(KEY_TOOL_STYLES, jcmbStyleSelector);
-
- /* Create the scroll area for the text pane */
- JScrollPane jspViewport = new JScrollPane(jtpMain);
- jspViewport.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
- jspViewport.setPreferredSize(new Dimension(400, 400));
- jspViewport.setMinimumSize(new Dimension(32, 32));
-
- /* Create the scroll area for the source viewer */
- jspSource = new JScrollPane(jtpSource);
- jspSource.setPreferredSize(new Dimension(400, 100));
- jspSource.setMinimumSize(new Dimension(32, 32));
-
- jspltDisplay = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- jspltDisplay.setTopComponent(jspViewport);
- if(showViewSource)
- {
- jspltDisplay.setBottomComponent(jspSource);
- }
- else
- {
- jspltDisplay.setBottomComponent(null);
- }
-
- iSplitPos = jspltDisplay.getDividerLocation();
-
- registerDocumentStyles();
-
- /* Create spell checker */
- try
- {
- dictFile = Translatrix.getTranslationString("DictionaryFile");
- SpellDictionary dictionary = new SpellDictionary(dictFile); // uses my custom loader in SpellDictionary
- spellCheck = new SpellChecker(dictionary);
- spellCheck.addSpellCheckListener(this);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- spellDialog = new JSpellDialog(this.getFrame(), Translatrix.getTranslationString("ToolSpellcheckDialog"), true);
-
- /* Add the components to the app */
- this.setLayout(new BorderLayout());
- this.add(jspltDisplay, BorderLayout.CENTER);
- }
-
- /** Common 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 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.
- */
- public EkitCore(String sDocument, String sStyleSheet, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, String sLanguage, String sCountry, boolean base64)
- {
- this(sDocument, sStyleSheet, null, null, showViewSource, showMenuIcons, editModeExclusive, sLanguage, sCountry, base64, false);
- }
-
- /** Default Language 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 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).
- */
- public EkitCore(String sDocument, String sStyleSheet, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, boolean base64)
- {
- this(sDocument, sStyleSheet, null, null, showViewSource, showMenuIcons, editModeExclusive, null, null, base64, false);
- }
-
- /** Raw/Base64 Document & Style Sheet URL Constructor (Ideal for EkitApplet)
- * @param sRawDocument [String] A document encoded as a String to load in the editor upon startup.
- * @param sRawDocument [String] A document encoded as a String to load in the editor upon startup.
- * @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.
- */
- public EkitCore(String sRawDocument, URL urlStyleSheet, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, String sLanguage, String sCountry, boolean base64)
- {
- this(null, null, sRawDocument, urlStyleSheet, showViewSource, showMenuIcons, editModeExclusive, sLanguage, sCountry, base64, false);
- }
-
- /** Document Constructor
- * @param sRawDocument [String] A document encoded as a String to load in the editor upon startup.
- * @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.
- */
- public EkitCore(String sRawDocument, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, String sLanguage, String sCountry, boolean base64)
- {
- this(null, null, sRawDocument, null, showViewSource, showMenuIcons, editModeExclusive, sLanguage, sCountry, base64, false);
- }
-
- /** Default Language & Document Constructor
- * @param sRawDocument [String] A document encoded as a String to load in the editor upon startup.
- * @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).
- */
- public EkitCore(String sRawDocument, boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, boolean base64)
- {
- this(null, null, sRawDocument, null, showViewSource, showMenuIcons, editModeExclusive, null, null, base64, false);
- }
-
- /** Flags & Language Constructor
- * @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.
- */
- public EkitCore(boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive, String sLanguage, String sCountry)
- {
- this(null, null, null, null, showViewSource, showMenuIcons, editModeExclusive, sLanguage, sCountry, false, false);
- }
-
- /** Flags Constructor
- * @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).
- */
- public EkitCore(boolean showViewSource, boolean showMenuIcons, boolean editModeExclusive)
- {
- this(null, null, null, null, showViewSource, showMenuIcons, editModeExclusive, null, null, false, false);
- }
-
- /** Language & Debug Constructor
- * @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 debugMode [boolean] Specifies whether to show the Debug menu or not.
- */
- public EkitCore(String sLanguage, String sCountry, boolean debugMode)
- {
- this(null, null, null, null, false, true, true, sLanguage, sCountry, false, debugMode);
- }
-
- /** Language Constructor
- * @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.
- */
- public EkitCore(String sLanguage, String sCountry)
- {
- this(null, null, null, null, false, true, true, sLanguage, sCountry, false, false);
- }
-
- /** Debug Constructor
- * @param debugMode [boolean] Specifies whether to show the Debug menu or not.
- */
- public EkitCore(boolean debugMode)
- {
- this(null, null, null, null, false, true, true, null, null, false, debugMode);
- }
-
- /** Empty Constructor
- */
- public EkitCore()
- {
- this(null, null, null, null, false, true, true, null, null, false, false);
- }
-
- /* ActionListener method */
- public void actionPerformed(ActionEvent ae)
- {
- try
- {
- String command = ae.getActionCommand();
- if(command.equals("newdoc"))
- {
- SimpleInfoDialog sidAsk = new SimpleInfoDialog(this.getFrame(), "", true, Translatrix.getTranslationString("AskNewDocument"), SimpleInfoDialog.QUESTION);
- String decision = sidAsk.getDecisionValue();
- if(decision.equals(Translatrix.getTranslationString("DialogAccept")))
- {
- if(styleSheet != null)
- {
- htmlDoc = new ExtendedHTMLDocument(styleSheet);
- }
- else
- {
- htmlDoc = (ExtendedHTMLDocument)(htmlKit.createDefaultDocument());
- }
- jtpMain.setText("<HTML><BODY></BODY></HTML>");
- jtpSource.setText(jtpMain.getText());
- registerDocument(htmlDoc);
- currentFile = null;
- updateTitle();
- }
- }
- else if(command.equals("openhtml"))
- {
- openDocument(null);
- }
- else if(command.equals("opencss"))
- {
- openStyleSheet(null);
- }
- else if(command.equals("openb64"))
- {
- openDocumentBase64(null);
- }
- else if(command.equals("save"))
- {
- writeOut((HTMLDocument)(jtpMain.getDocument()), currentFile);
- updateTitle();
- }
- else if(command.equals("saveas"))
- {
- writeOut((HTMLDocument)(jtpMain.getDocument()), null);
- }
- else if(command.equals("savebody"))
- {
- writeOutFragment((HTMLDocument)(jtpMain.getDocument()),"body");
- }
- else if(command.equals("savertf"))
- {
- writeOutRTF((StyledDocument)(jtpMain.getStyledDocument()));
- }
- else if(command.equals("saveb64"))
- {
- writeOutBase64(jtpSource.getText());
- }
- else if(command.equals("textcut"))
- {
- if(jspSource.isShowing() && jtpSource.hasFocus())
- {
- jtpSource.cut();
- }
- else
- {
- jtpMain.cut();
- }
- }
- else if(command.equals("textcopy"))
- {
- if(jspSource.isShowing() && jtpSource.hasFocus())
- {
- jtpSource.copy();
- }
- else
- {
- jtpMain.copy();
- }
- }
- else if(command.equals("textpaste"))
- {
- if(jspSource.isShowing() && jtpSource.hasFocus())
- {
- jtpSource.paste();
- }
- else
- {
- jtpMain.paste();
- }
- }
- else if(command.equals("describe"))
- {
- System.out.println("------------DOCUMENT------------");
- System.out.println("Content Type : " + jtpMain.getContentType());
- System.out.println("Editor Kit : " + jtpMain.getEditorKit());
- System.out.println("Doc Tree :");
- System.out.println("");
- describeDocument(jtpMain.getStyledDocument());
- System.out.println("--------------------------------");
- System.out.println("");
- }
- else if(command.equals("describecss"))
- {
- System.out.println("-----------STYLESHEET-----------");
- System.out.println("Stylesheet Rules");
- Enumeration rules = styleSheet.getStyleNames();
- while(rules.hasMoreElements())
- {
- String ruleName = (String)(rules.nextElement());
- Style styleRule = styleSheet.getStyle(ruleName);
- System.out.println(styleRule.toString());
- }
- System.out.println("--------------------------------");
- System.out.println("");
- }
- else if(command.equals("whattags"))
- {
- System.out.println("Caret Position : " + jtpMain.getCaretPosition());
- AttributeSet attribSet = jtpMain.getCharacterAttributes();
- Enumeration attribs = attribSet.getAttributeNames();
- System.out.println("Attributes : ");
- while(attribs.hasMoreElements())
- {
- String attribName = attribs.nextElement().toString();
- System.out.println(" " + attribName + " | " + attribSet.getAttribute(attribName));
- }
- }
- else if(command.equals("toggletoolbar"))
- {
- jToolBar.setVisible(jcbmiViewToolbar.isSelected());
- }
- else if(command.equals("viewsource"))
- {
- toggleSourceWindow();
- }
- else if(command.equals("serialize"))
- {
- serializeOut((HTMLDocument)(jtpMain.getDocument()));
- }
- else if(command.equals("readfromser"))
- {
- serializeIn();
- }
- else if(command.equals("inserttable"))
- {
- String[] fieldNames = { "rows", "cols", "border", "cellspacing", "cellpadding", "width" };
- String[] fieldTypes = { "text", "text", "text", "text", "text", "text" };
- insertTable((Hashtable)null, fieldNames, fieldTypes);
- }
- else if(command.equals("inserttablerow"))
- {
- insertTableRow();
- }
- else if(command.equals("inserttablecolumn"))
- {
- insertTableColumn();
- }
- else if(command.equals("deletetablerow"))
- {
- deleteTableRow();
- }
- else if(command.equals("deletetablecolumn"))
- {
- deleteTableColumn();
- }
- else if(command.equals("insertbreak"))
- {
- insertBreak();
- }
- else if(command.equals("insertlocalimage"))
- {
- insertLocalImage(null);
- }
- else if(command.equals("insertserverimage"))
- {
- insertServerImage();
- }
- else if(command.equals("insertnbsp"))
- {
- insertNonbreakingSpace();
- }
- else if(command.equals("insertform"))
- {
- String[] fieldNames = { "name", "method", "enctype" };
- String[] fieldTypes = { "text", "combo", "text" };
- String[] fieldValues = { "", "POST,GET", "text" };
- insertFormElement(HTML.Tag.FORM, "form", (Hashtable)null, fieldNames, fieldTypes, fieldValues, true);
- }
- else if(command.equals("inserttextfield"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "text");
- String[] fieldNames = { "name", "value", "size", "maxlength" };
- String[] fieldTypes = { "text", "text", "text", "text" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("inserttextarea"))
- {
- String[] fieldNames = { "name", "rows", "cols" };
- String[] fieldTypes = { "text", "text", "text" };
- insertFormElement(HTML.Tag.TEXTAREA, "textarea", (Hashtable)null, fieldNames, fieldTypes, true);
- }
- else if(command.equals("insertcheckbox"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "checkbox");
- String[] fieldNames = { "name", "checked" };
- String[] fieldTypes = { "text", "bool" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("insertradiobutton"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "radio");
- String[] fieldNames = { "name", "checked" };
- String[] fieldTypes = { "text", "bool" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("insertpassword"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "password");
- String[] fieldNames = { "name", "value", "size", "maxlength" };
- String[] fieldTypes = { "text", "text", "text", "text" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("insertbutton"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "button");
- String[] fieldNames = { "name", "value" };
- String[] fieldTypes = { "text", "text" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("insertbuttonsubmit"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "submit");
- String[] fieldNames = { "name", "value" };
- String[] fieldTypes = { "text", "text" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("insertbuttonreset"))
- {
- Hashtable htAttribs = new Hashtable();
- htAttribs.put("type", "reset");
- String[] fieldNames = { "name", "value" };
- String[] fieldTypes = { "text", "text" };
- insertFormElement(HTML.Tag.INPUT, "input", htAttribs, fieldNames, fieldTypes, false);
- }
- else if(command.equals("find"))
- {
- doSearch((String)null, (String)null, false, lastSearchCaseSetting, lastSearchTopSetting);
- }
- else if(command.equals("findagain"))
- {
- doSearch(lastSearchFindTerm, (String)null, false, lastSearchCaseSetting, false);
- }
- else if(command.equals("replace"))
- {
- doSearch((String)null, (String)null, true, lastSearchCaseSetting, lastSearchTopSetting);
- }
- else if(command.equals("exit"))
- {
- this.dispose();
- }
- else if(command.equals("helpabout"))
- {
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("About"), true, Translatrix.getTranslationString("AboutMessage"), SimpleInfoDialog.INFO);
- }
- else if(command.equals("spellcheck"))
- {
- spellCheck.checkSpelling(new DocumentWordTokenizer(jtpMain.getDocument()));
- }
- }
- catch(IOException ioe)
- {
- logException("IOException in actionPerformed method", ioe);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorIOException"), SimpleInfoDialog.ERROR);
- }
- catch(BadLocationException ble)
- {
- logException("BadLocationException in actionPerformed method", ble);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorBadLocationException"), SimpleInfoDialog.ERROR);
- }
- catch(NumberFormatException nfe)
- {
- logException("NumberFormatException in actionPerformed method", nfe);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorNumberFormatException"), SimpleInfoDialog.ERROR);
- }
- catch(ClassNotFoundException cnfe)
- {
- logException("ClassNotFound Exception in actionPerformed method", cnfe);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorClassNotFoundException "), SimpleInfoDialog.ERROR);
- }
- catch(RuntimeException re)
- {
- logException("RuntimeException in actionPerformed method", re);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorRuntimeException"), SimpleInfoDialog.ERROR);
- }
- }
-
- /* KeyListener methods */
- public void keyTyped(KeyEvent ke)
- {
- Element elem;
- String selectedText;
- int pos = this.getCaretPosition();
- int repos = -1;
- if(ke.getKeyChar() == KeyEvent.VK_BACK_SPACE)
- {
- try
- {
- if(pos > 0)
- {
- if((selectedText = jtpMain.getSelectedText()) != null)
- {
- htmlUtilities.delete();
- return;
- }
- else
- {
- int sOffset = htmlDoc.getParagraphElement(pos).getStartOffset();
- if(sOffset == jtpMain.getSelectionStart())
- {
- boolean content = true;
- if(htmlUtilities.checkParentsTag(HTML.Tag.LI))
- {
- elem = htmlUtilities.getListItemParent();
- content = false;
- int so = elem.getStartOffset();
- int eo = elem.getEndOffset();
- if(so + 1 < eo)
- {
- char[] temp = jtpMain.getText(so, eo - so).toCharArray();
- for(int i=0; i < temp.length; i++)
- {
- if(!(new Character(temp[i])).isWhitespace(temp[i]))
- {
- content = true;
- }
- }
- }
- if(!content)
- {
- Element listElement = elem.getParentElement();
- htmlUtilities.removeTag(elem, true);
- this.setCaretPosition(sOffset - 1);
- return;
- }
- else
- {
- jtpMain.setCaretPosition(jtpMain.getCaretPosition() - 1);
- jtpMain.moveCaretPosition(jtpMain.getCaretPosition() - 2);
- jtpMain.replaceSelection("");
- return;
- }
- }
- else if(htmlUtilities.checkParentsTag(HTML.Tag.TABLE))
- {
- jtpMain.setCaretPosition(jtpMain.getCaretPosition() - 1);
- ke.consume();
- return;
- }
- }
- jtpMain.replaceSelection("");
- return;
- }
- }
- }
- catch (BadLocationException ble)
- {
- logException("BadLocationException in keyTyped method", ble);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorBadLocationException"), SimpleInfoDialog.ERROR);
- }
- catch (IOException ioe)
- {
- logException("IOException in keyTyped method", ioe);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorIOException"), SimpleInfoDialog.ERROR);
- }
- }
- else if(ke.getKeyChar() == KeyEvent.VK_ENTER)
- {
- try
- {
- if(htmlUtilities.checkParentsTag(HTML.Tag.UL) == true | htmlUtilities.checkParentsTag(HTML.Tag.OL) == true)
- {
- elem = htmlUtilities.getListItemParent();
- int so = elem.getStartOffset();
- int eo = elem.getEndOffset();
- char[] temp = this.getTextPane().getText(so,eo-so).toCharArray();
- boolean content = false;
- for(int i=0;i<temp.length;i++)
- {
- if(!(new Character(temp[i])).isWhitespace(temp[i]))
- {
- content = true;
- }
- }
- if(content)
- {
- int end = -1;
- int j = temp.length;
- do
- {
- j--;
- if(new Character(temp[j]).isLetterOrDigit(temp[j]))
- {
- end = j;
- }
- } while (end == -1 && j >= 0);
- j = end;
- do
- {
- j++;
- if(!new Character(temp[j]).isSpaceChar(temp[j]))
- {
- repos = j - end -1;
- }
- } while (repos == -1 && j < temp.length);
- if(repos == -1)
- {
- repos = 0;
- }
- }
- if(elem.getStartOffset() == elem.getEndOffset() || !content)
- {
- manageListElement(elem);
- }
- else
- {
- if(this.getCaretPosition() + 1 == elem.getEndOffset())
- {
- insertListStyle(elem);
- this.setCaretPosition(pos - repos);
- }
- else
- {
- int caret = this.getCaretPosition();
- String tempString = this.getTextPane().getText(caret, eo - caret);
- this.getTextPane().select(caret, eo - 1);
- this.getTextPane().replaceSelection("");
- htmlUtilities.insertListElement(tempString);
- Element newLi = htmlUtilities.getListItemParent();
- this.setCaretPosition(newLi.getEndOffset() - 1);
- }
- }
- }
- }
- catch (BadLocationException ble)
- {
- logException("BadLocationException in keyTyped method", ble);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorBadLocationException"), SimpleInfoDialog.ERROR);
- }
- catch (IOException ioe)
- {
- logException("IOException in keyTyped method", ioe);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorIOException"), SimpleInfoDialog.ERROR);
- }
- }
- }
- public void keyPressed(KeyEvent e) {}
- public void keyReleased(KeyEvent e) {}
-
- public void insertListStyle(Element element)
- throws BadLocationException,IOException
- {
- if(element.getParentElement().getName() == "ol")
- {
- actionListOrdered.actionPerformed(new ActionEvent(new Object(), 0, "newListPoint"));
- }
- else
- {
- actionListUnordered.actionPerformed(new ActionEvent(new Object(), 0, "newListPoint"));
- }
- }
-
- /* DocumentListener methods */
- public void changedUpdate(DocumentEvent de) { handleDocumentChange(de); }
- public void insertUpdate(DocumentEvent de) { handleDocumentChange(de); }
- public void removeUpdate(DocumentEvent de) { handleDocumentChange(de); }
- public void handleDocumentChange(DocumentEvent de)
- {
- if(!exclusiveEdit)
- {
- if(jspSource.isShowing())
- {
- if(de.getDocument() instanceof HTMLDocument || de.getDocument() instanceof ExtendedHTMLDocument)
- {
- jtpSource.getDocument().removeDocumentListener(this);
- jtpSource.setText(jtpMain.getText());
- jtpSource.getDocument().addDocumentListener(this);
- }
- else if(de.getDocument() instanceof PlainDocument || de.getDocument() instanceof DefaultStyledDocument)
- {
- jtpMain.getDocument().removeDocumentListener(this);
- jtpMain.setText(jtpSource.getText());
- jtpMain.getDocument().addDocumentListener(this);
- }
- }
- }
- }
-
- /* SpellCheckListener methods */
- public void spellingError(SpellCheckEvent event)
- {
- spellDialog.show(event);
- }
-
- /** Method for setting a document as the current document for the text pane
- * and re-registering the controls and settings for it
- */
- public void registerDocument(ExtendedHTMLDocument htmlDoc)
- {
- jtpMain.setDocument(htmlDoc);
- jtpMain.getDocument().addUndoableEditListener(new CustomUndoableEditListener());
- jtpMain.getDocument().addDocumentListener(this);
- purgeUndos();
- registerDocumentStyles();
- }
-
- /** Method for locating the available CSS style for the document and adding
- * them to the styles selector
- */
- public void registerDocumentStyles()
- {
- if(jcmbStyleSelector == null || htmlDoc == null)
- {
- return;
- }
- jcmbStyleSelector.setEnabled(false);
- jcmbStyleSelector.removeAllItems();
- jcmbStyleSelector.addItem(Translatrix.getTranslationString("NoCSSStyle"));
- for(Enumeration e = htmlDoc.getStyleNames(); e.hasMoreElements();)
- {
- String name = (String) e.nextElement();
- if(name.length() > 0 && name.charAt(0) == '.')
- {
- jcmbStyleSelector.addItem(name.substring(1));
- }
- }
- jcmbStyleSelector.setEnabled(true);
- }
-
- /** Method for inserting an HTML Table
- */
- private void insertTable(Hashtable attribs, String[] fieldNames, String[] fieldTypes)
- throws IOException, BadLocationException, RuntimeException, NumberFormatException
- {
- int caretPos = jtpMain.getCaretPosition();
- StringBuffer compositeElement = new StringBuffer("<TABLE");
- if(attribs != null && attribs.size() > 0)
- {
- Enumeration attribEntries = attribs.keys();
- while(attribEntries.hasMoreElements())
- {
- Object entryKey = attribEntries.nextElement();
- Object entryValue = attribs.get(entryKey);
- if(entryValue != null && entryValue != "")
- {
- compositeElement.append(" " + entryKey + "=" + '"' + entryValue + '"');
- }
- }
- }
- int rows = 0;
- int cols = 0;
- if(fieldNames != null && fieldNames.length > 0)
- {
- PropertiesDialog propertiesDialog = new PropertiesDialog(this.getFrame(), fieldNames, fieldTypes, Translatrix.getTranslationString("FormDialogTitle"), true);
- propertiesDialog.show();
- String decision = propertiesDialog.getDecisionValue();
- if(decision.equals(Translatrix.getTranslationString("DialogCancel")))
- {
- propertiesDialog.dispose();
- propertiesDialog = null;
- return;
- }
- else
- {
- for(int iter = 0; iter < fieldNames.length; iter++)
- {
- String fieldName = fieldNames[iter];
- String propValue = propertiesDialog.getFieldValue(fieldName);
- if(propValue != null && propValue != "" && propValue.length() > 0)
- {
- if(fieldName.equals("rows"))
- {
- rows = Integer.parseInt(propValue);
- }
- else if(fieldName.equals("cols"))
- {
- cols = Integer.parseInt(propValue);
- }
- else
- {
- compositeElement.append(" " + fieldName + "=" + '"' + propValue + '"');
- }
- }
- }
- }
- propertiesDialog.dispose();
- propertiesDialog = null;
- }
- compositeElement.append(">");
- for(int i = 0; i < rows; i++)
- {
- compositeElement.append("<TR>");
- for(int j = 0; j < cols; j++)
- {
- compositeElement.append("<TD></TD>");
- }
- compositeElement.append("</TR>");
- }
- compositeElement.append("</TABLE><P> <P>");
- htmlKit.insertHTML(htmlDoc, caretPos, compositeElement.toString(), 0, 0, HTML.Tag.TABLE);
- jtpMain.setCaretPosition(caretPos + 1);
- refreshOnUpdate();
- }
-
- /** Method for inserting a row into an HTML Table
- */
- private void insertTableRow()
- {
- int caretPos = jtpMain.getCaretPosition();
- Element element = htmlDoc.getCharacterElement(jtpMain.getCaretPosition());
- Element elementParent = element.getParentElement();
- int startPoint = -1;
- int columnCount = -1;
- while(elementParent != null && !elementParent.getName().equals("body"))
- {
- if(elementParent.getName().equals("tr"))
- {
- startPoint = elementParent.getStartOffset();
- columnCount = elementParent.getElementCount();
- break;
- }
- else
- {
- elementParent = elementParent.getParentElement();
- }
- }
- if(startPoint > -1 && columnCount > -1)
- {
- jtpMain.setCaretPosition(startPoint);
- StringBuffer sRow = new StringBuffer();
- sRow.append("<TR>");
- for(int i = 0; i < columnCount; i++)
- {
- sRow.append("<TD></TD>");
- }
- sRow.append("</TR>");
- ActionEvent actionEvent = new ActionEvent(jtpMain, 0, "insertTableRow");
- new HTMLEditorKit.InsertHTMLTextAction("insertTableRow", sRow.toString(), HTML.Tag.TABLE, HTML.Tag.TR).actionPerformed(actionEvent);
- refreshOnUpdate();
- jtpMain.setCaretPosition(caretPos);
- }
- }
-
- /** Method for inserting a column into an HTML Table
- */
- private void insertTableColumn()
- {
- int caretPos = jtpMain.getCaretPosition();
- Element element = htmlDoc.getCharacterElement(jtpMain.getCaretPosition());
- Element elementParent = element.getParentElement();
- int startPoint = -1;
- int rowCount = -1;
- int cellOffset = 0;
- while(elementParent != null && !elementParent.getName().equals("body"))
- {
- if(elementParent.getName().equals("table"))
- {
- startPoint = elementParent.getStartOffset();
- rowCount = elementParent.getElementCount();
- break;
- }
- else if(elementParent.getName().equals("tr"))
- {
- int rowStart = elementParent.getStartOffset();
- int rowCells = elementParent.getElementCount();
- for(int i = 0; i < rowCells; i++)
- {
- Element currentCell = elementParent.getElement(i);
- if(jtpMain.getCaretPosition() >= currentCell.getStartOffset() && jtpMain.getCaretPosition() <= currentCell.getEndOffset())
- {
- cellOffset = i;
- }
- }
- elementParent = elementParent.getParentElement();
- }
- else
- {
- elementParent = elementParent.getParentElement();
- }
- }
- if(startPoint > -1 && rowCount > -1)
- {
- jtpMain.setCaretPosition(startPoint);
- String sCell = "<TD></TD>";
- ActionEvent actionEvent = new ActionEvent(jtpMain, 0, "insertTableCell");
- for(int i = 0; i < rowCount; i++)
- {
- Element row = elementParent.getElement(i);
- Element whichCell = row.getElement(cellOffset);
- jtpMain.setCaretPosition(whichCell.getStartOffset());
- new HTMLEditorKit.InsertHTMLTextAction("insertTableCell", sCell, HTML.Tag.TR, HTML.Tag.TD, HTML.Tag.TH, HTML.Tag.TD).actionPerformed(actionEvent);
- }
- refreshOnUpdate();
- jtpMain.setCaretPosition(caretPos);
- }
- }
-
- /** Method for inserting a cell into an HTML Table
- */
- private void insertTableCell()
- {
- String sCell = "<TD></TD>";
- ActionEvent actionEvent = new ActionEvent(jtpMain, 0, "insertTableCell");
- new HTMLEditorKit.InsertHTMLTextAction("insertTableCell", sCell, HTML.Tag.TR, HTML.Tag.TD, HTML.Tag.TH, HTML.Tag.TD).actionPerformed(actionEvent);
- refreshOnUpdate();
- }
-
- /** Method for deleting a row from an HTML Table
- */
- private void deleteTableRow()
- throws BadLocationException
- {
- int caretPos = jtpMain.getCaretPosition();
- Element element = htmlDoc.getCharacterElement(jtpMain.getCaretPosition());
- Element elementParent = element.getParentElement();
- int startPoint = -1;
- int endPoint = -1;
- while(elementParent != null && !elementParent.getName().equals("body"))
- {
- if(elementParent.getName().equals("tr"))
- {
- startPoint = elementParent.getStartOffset();
- endPoint = elementParent.getEndOffset();
- break;
- }
- else
- {
- elementParent = elementParent.getParentElement();
- }
- }
- if(startPoint > -1 && endPoint > startPoint)
- {
- htmlDoc.remove(startPoint, endPoint - startPoint);
- jtpMain.setDocument(htmlDoc);
- registerDocument(htmlDoc);
- refreshOnUpdate();
- if(caretPos >= htmlDoc.getLength())
- {
- caretPos = htmlDoc.getLength() - 1;
- }
- jtpMain.setCaretPosition(caretPos);
- }
- }
-
- /** Method for deleting a column from an HTML Table
- */
- private void deleteTableColumn()
- throws BadLocationException
- {
- int caretPos = jtpMain.getCaretPosition();
- Element element = htmlDoc.getCharacterElement(jtpMain.getCaretPosition());
- Element elementParent = element.getParentElement();
- Element elementCell = (Element)null;
- Element elementRow = (Element)null;
- Element elementTable = (Element)null;
- // Locate the table, row, and cell location of the cursor
- while(elementParent != null && !elementParent.getName().equals("body"))
- {
- if(elementParent.getName().equals("td"))
- {
- elementCell = elementParent;
- }
- else if(elementParent.getName().equals("tr"))
- {
- elementRow = elementParent;
- }
- else if(elementParent.getName().equals("table"))
- {
- elementTable = elementParent;
- }
- elementParent = elementParent.getParentElement();
- }
- int whichColumn = -1;
- if(elementCell != null && elementRow != null && elementTable != null)
- {
- // Find the column the cursor is in
- for(int i = 0; i < elementRow.getElementCount(); i++)
- {
- if(elementCell == elementRow.getElement(i))
- {
- whichColumn = i;
- }
- }
- if(whichColumn > -1)
- {
- // Iterate through the table rows, deleting cells from the indicated column
- for(int i = 0; i < elementTable.getElementCount(); i++)
- {
- elementRow = elementTable.getElement(i);
- elementCell = (elementRow.getElementCount() > whichColumn ? elementRow.getElement(whichColumn) : elementRow.getElement(elementRow.getElementCount() - 1));
- int columnCellStart = elementCell.getStartOffset();
- int columnCellEnd = elementCell.getEndOffset();
- htmlDoc.remove(columnCellStart, columnCellEnd - columnCellStart);
- }
- jtpMain.setDocument(htmlDoc);
- registerDocument(htmlDoc);
- refreshOnUpdate();
- if(caretPos >= htmlDoc.getLength())
- {
- caretPos = htmlDoc.getLength() - 1;
- }
- jtpMain.setCaretPosition(caretPos);
- }
- }
- }
-
- /** Method for inserting a break (BR) element
- */
- private void insertBreak()
- throws IOException, BadLocationException, RuntimeException
- {
- int caretPos = jtpMain.getCaretPosition();
- htmlKit.insertHTML(htmlDoc, caretPos, "<BR>", 0, 0, HTML.Tag.BR);
- jtpMain.setCaretPosition(caretPos + 1);
- }
-
- /** Method for inserting a non-breaking space ( )
- */
- private void insertNonbreakingSpace()
- throws IOException, BadLocationException, RuntimeException
- {
- int caretPos = jtpMain.getCaretPosition();
- htmlDoc.insertString(caretPos, "\240", jtpMain.getInputAttributes());
- jtpMain.setCaretPosition(caretPos + 1);
- }
-
- /** Method for inserting a form element
- */
- private void insertFormElement(HTML.Tag baseTag, String baseElement, Hashtable attribs, String[] fieldNames, String[] fieldTypes, String[] fieldValues, boolean hasClosingTag)
- throws IOException, BadLocationException, RuntimeException
- {
- int caretPos = jtpMain.getCaretPosition();
- StringBuffer compositeElement = new StringBuffer("<" + baseElement);
- if(attribs != null && attribs.size() > 0)
- {
- Enumeration attribEntries = attribs.keys();
- while(attribEntries.hasMoreElements())
- {
- Object entryKey = attribEntries.nextElement();
- Object entryValue = attribs.get(entryKey);
- if(entryValue != null && entryValue != "")
- {
- compositeElement.append(" " + entryKey + "=" + '"' + entryValue + '"');
- }
- }
- }
- if(fieldNames != null && fieldNames.length > 0)
- {
- PropertiesDialog propertiesDialog = new PropertiesDialog(this.getFrame(), fieldNames, fieldTypes, fieldValues, Translatrix.getTranslationString("FormDialogTitle"), true);
- propertiesDialog.show();
- String decision = propertiesDialog.getDecisionValue();
- if(decision.equals(Translatrix.getTranslationString("DialogCancel")))
- {
- propertiesDialog.dispose();
- propertiesDialog = null;
- return;
- }
- else
- {
- for(int iter = 0; iter < fieldNames.length; iter++)
- {
- String fieldName = fieldNames[iter];
- String propValue = propertiesDialog.getFieldValue(fieldName);
- if(propValue != null && propValue.length() > 0)
- {
- if(fieldName.equals("checked"))
- {
- if(propValue.equals("true"))
- {
- compositeElement.append(" " + fieldName + "=" + '"' + propValue + '"');
- }
- }
- else
- {
- compositeElement.append(" " + fieldName + "=" + '"' + propValue + '"');
- }
- }
- }
- }
- propertiesDialog.dispose();
- propertiesDialog = null;
- }
- // --- Convenience for editing, this makes the FORM visible
- if(useFormIndicator && baseElement.equals("form"))
- {
- compositeElement.append(" bgcolor=" + '"' + clrFormIndicator + '"');
- }
- // --- END
- compositeElement.append(">");
- if(hasClosingTag)
- {
- compositeElement.append("</" + baseElement + ">");
- }
- if(baseTag == HTML.Tag.FORM)
- {
- compositeElement.append("<P> </P>");
- }
- htmlKit.insertHTML(htmlDoc, caretPos, compositeElement.toString(), 0, 0, baseTag);
- // jtpMain.setCaretPosition(caretPos + 1);
- refreshOnUpdate();
- }
-
- /** Alternate method call for inserting a form element
- */
- private void insertFormElement(HTML.Tag baseTag, String baseElement, Hashtable attribs, String[] fieldNames, String[] fieldTypes, boolean hasClosingTag)
- throws IOException, BadLocationException, RuntimeException
- {
- insertFormElement(baseTag, baseElement, attribs, fieldNames, fieldTypes, new String[fieldNames.length], hasClosingTag);
- }
-
- /** Method that handles initial list insertion and deletion
- */
- public void manageListElement(Element element)
- {
- Element h = htmlUtilities.getListItemParent();
- Element listElement = h.getParentElement();
- if(h != null)
- {
- htmlUtilities.removeTag(h, true);
- }
- }
-
- /** Method to initiate a find/replace operation
- */
- private void doSearch(String searchFindTerm, String searchReplaceTerm, boolean bIsFindReplace, boolean bCaseSensitive, boolean bStartAtTop)
- {
- boolean bReplaceAll = false;
- JTextPane searchPane = jtpMain;
- if(jspSource.isShowing() || jtpSource.hasFocus())
- {
- searchPane = jtpSource;
- }
- if(searchFindTerm == null || (bIsFindReplace && searchReplaceTerm == null))
- {
- SearchDialog sdSearchInput = new SearchDialog(this.getFrame(), Translatrix.getTranslationString("SearchDialogTitle"), true, bIsFindReplace, bCaseSensitive, bStartAtTop);
- searchFindTerm = sdSearchInput.getFindTerm();
- searchReplaceTerm = sdSearchInput.getReplaceTerm();
- bCaseSensitive = sdSearchInput.getCaseSensitive();
- bStartAtTop = sdSearchInput.getStartAtTop();
- bReplaceAll = sdSearchInput.getReplaceAll();
- }
- if(searchFindTerm != null && (!bIsFindReplace || searchReplaceTerm != null))
- {
- if(bReplaceAll)
- {
- int results = findText(searchFindTerm, searchReplaceTerm, bCaseSensitive, 0);
- int findOffset = 0;
- if(results > -1)
- {
- while(results > -1)
- {
- findOffset = findOffset + searchReplaceTerm.length();
- results = findText(searchFindTerm, searchReplaceTerm, bCaseSensitive, findOffset);
- }
- }
- else
- {
- SimpleInfoDialog sidWarn = new SimpleInfoDialog(this.getFrame(), "", true, Translatrix.getTranslationString("ErrorNoOccurencesFound") + ":\n" + searchFindTerm, SimpleInfoDialog.WARNING);
- }
- }
- else
- {
- int results = findText(searchFindTerm, searchReplaceTerm, bCaseSensitive, (bStartAtTop ? 0 : searchPane.getCaretPosition()));
- if(results == -1)
- {
- SimpleInfoDialog sidWarn = new SimpleInfoDialog(this.getFrame(), "", true, Translatrix.getTranslationString("ErrorNoMatchFound") + ":\n" + searchFindTerm, SimpleInfoDialog.WARNING);
- }
- }
- lastSearchFindTerm = new String(searchFindTerm);
- if(searchReplaceTerm != null)
- {
- lastSearchReplaceTerm = new String(searchReplaceTerm);
- }
- else
- {
- lastSearchReplaceTerm = (String)null;
- }
- lastSearchCaseSetting = bCaseSensitive;
- lastSearchTopSetting = bStartAtTop;
- }
- }
-
- /** Method for finding (and optionally replacing) a string in the text
- */
- private int findText(String findTerm, String replaceTerm, boolean bCaseSenstive, int iOffset)
- {
- JTextPane jtpFindSource;
- if(jspSource.isShowing() || jtpSource.hasFocus())
- {
- jtpFindSource = jtpSource;
- }
- else
- {
- jtpFindSource = jtpMain;
- }
- int searchPlace = -1;
- try
- {
- Document baseDocument = jtpFindSource.getDocument();
- searchPlace =
- (bCaseSenstive ?
- baseDocument.getText(0, baseDocument.getLength()).indexOf(findTerm, iOffset) :
- baseDocument.getText(0, baseDocument.getLength()).toLowerCase().indexOf(findTerm.toLowerCase(), iOffset)
- );
- if(searchPlace > -1)
- {
- if(replaceTerm != null)
- {
- AttributeSet attribs = null;
- if(baseDocument instanceof HTMLDocument)
- {
- Element element = ((HTMLDocument)baseDocument).getCharacterElement(searchPlace);
- attribs = element.getAttributes();
- }
- baseDocument.remove(searchPlace, findTerm.length());
- baseDocument.insertString(searchPlace, replaceTerm, attribs);
- jtpFindSource.setCaretPosition(searchPlace + replaceTerm.length());
- jtpFindSource.requestFocus();
- jtpFindSource.select(searchPlace, searchPlace + replaceTerm.length());
- }
- else
- {
- jtpFindSource.setCaretPosition(searchPlace + findTerm.length());
- jtpFindSource.requestFocus();
- jtpFindSource.select(searchPlace, searchPlace + findTerm.length());
- }
- }
- }
- catch(BadLocationException ble)
- {
- logException("BadLocationException in actionPerformed method", ble);
- SimpleInfoDialog sidAbout = new SimpleInfoDialog(this.getFrame(), Translatrix.getTranslationString("Error"), true, Translatrix.getTranslationString("ErrorBadLocationException"), SimpleInfoDialog.ERROR);
- }
- return searchPlace;
- }
-
- /** Method for inserting an image from a file
- */
- private void insertLocalImage(File whatImage)
- throws IOException, BadLocationException, RuntimeException
- {
- if(whatImage == null)
- {
- whatImage = getImageFromChooser(".", extsIMG, Translatrix.getTranslationString("FiletypeIMG"));
- }
- if(whatImage != null)
- {
- int caretPos = jtpMain.getCaretPosition();
- htmlKit.insertHTML(htmlDoc, caretPos, "<IMG SRC=\"" + whatImage + "\">", 0, 0, HTML.Tag.IMG);
- jtpMain.setCaretPosition(caretPos + 1);
- refreshOnUpdate();
- }
- }
-
- /** Method for inserting an image from a server
- */
- private void insertServerImage()
- throws BadLocationException
- {
- if(ServletURL != null)
- {
- try
- {
- URL theServlet = new URL(ServletURL + "?GetImages=" + TreePilotSystemID + "&ImageExtensions=" + TreePilotProperties.getString("ValidImageExtensions"));
- URLConnection conn = theServlet.openConnection();
- ObjectInputStream in = new ObjectInputStream(conn.getInputStream());
- String[] imageList = (String[]) in.readObject();
- int caretPos = jtpMain.getCaretPosition();
- ImageDialog imageDialog = new ImageDialog(this, ImageDir + TreePilotSystemID, imageList, "Image Chooser", true);
- String selectedImage = imageDialog.getSelectedImage();
- imageDialog.dispose();
- if(selectedImage != null && !selectedImage.equals(""))
- {
- htmlKit.insertHTML(htmlDoc, caretPos, selectedImage, 0, 0, HTML.Tag.IMG);
- jtpMain.setCaretPosition(caretPos + 1);
- }
- jtpMain.requestFocus();
- in.close();
- }
- catch (MalformedURLException mue)
- {
- System.err.println("MalFormedURLException during insertImage " + mue);
- }
- catch (IOException ie)
- {
- System.err.println("IOException during insertImage " + ie);
- }
- catch (ClassNotFoundException cnfe)
- {
- System.err.println("ClassNotFoundException during insertImage" + cnfe);
- }
- }
- }
-
- /** Method for inserting an image
- */
- public String insertFile()
- {
- String selectedFile = null;
- if(ServletURL != null)
- {
- try
- {
- URL theServlet = new URL(ServletURL + "?GetFiles=" + TreePilotSystemID + "&FileExtensions=" + TreePilotProperties.getString("ValidFileExtensions"));
- URLConnection conn = theServlet.openConnection();
- ObjectInputStream in = new ObjectInputStream(conn.getInputStream());
- String[] fileList = (String[]) in.readObject();
- FileDialog fileDialog = new FileDialog(this, ImageDir + TreePilotSystemID, fileList, "File Chooser", true);
- selectedFile = fileDialog.getSelectedFile();
- fileDialog.dispose();
- in.close();
- }
- catch (MalformedURLException mue)
- {
- System.err.println("MalFormedURLException during insertFile " + mue);
- }
- catch (IOException ie)
- {
- System.err.println("IOException during insertFile " + ie);
- }
- catch (ClassNotFoundException cnfe)
- {
- System.err.println("ClassNotFoundException during insertFile" + cnfe);
- }
- }
- return selectedFile;
- }
-
- /** Method for saving text as a complete HTML document
- */
- private void writeOut(HTMLDocument doc, File whatFile)
- throws IOException, BadLocationException
- {
- if(whatFile == null)
- {
- whatFile = getFileFromChooser(".", JFileChooser.SAVE_DIALOG, extsHTML, Translatrix.getTranslationString("FiletypeHTML"));
- }
- if(whatFile != null)
- {
- FileWriter fw = new FileWriter(whatFile);
- htmlKit.write(fw, doc, 0, doc.getLength());
- fw.flush();
- fw.close();
- currentFile = whatFile;
- updateTitle();
- }
- refreshOnUpdate();
- }
-
- /** Method for saving text as an HTML fragment
- */
- private void writeOutFragment(HTMLDocument doc, String containingTag)
- throws IOException, BadLocationException
- {
- File whatFile = getFileFromChooser(".", JFileChooser.SAVE_DIALOG, extsHTML, Translatrix.getTranslationString("FiletypeHTML"));
- if(whatFile != null)
- {
- FileWriter fw = new FileWriter(whatFile);
-// Element eleBody = locateElementInDocument((StyledDocument)doc, containingTag);
-// htmlKit.write(fw, doc, eleBody.getStartOffset(), eleBody.getEndOffset());
- String docTextCase = jtpSource.getText().toLowerCase();
- int tagStart = docTextCase.indexOf("<" + containingTag.toLowerCase());
- int tagStartClose = docTextCase.indexOf(">", tagStart) + 1;
- String closeTag = "</" + containingTag.toLowerCase() + ">";
- int tagEndOpen = docTextCase.indexOf(closeTag);
- if(tagStartClose < 0) { tagStartClose = 0; }
- if(tagEndOpen < 0 || tagEndOpen > docTextCase.length()) { tagEndOpen = docTextCase.length(); }
- String bodyText = jtpSource.getText().substring(tagStartClose, tagEndOpen);
- fw.write(bodyText, 0, bodyText.length());
- fw.flush();
- fw.close();
- }
- refreshOnUpdate();
- }
-
- /** Method for saving text as an RTF document
- */
- private void writeOutRTF(StyledDocument doc)
- throws IOException, BadLocationException
- {
- File whatFile = getFileFromChooser(".", JFileChooser.SAVE_DIALOG, extsRTF, Translatrix.getTranslationString("FiletypeRTF"));
- if(whatFile != null)
- {
- FileOutputStream fos = new FileOutputStream(whatFile);
- RTFEditorKit rtfKit = new RTFEditorKit();
- rtfKit.write(fos, doc, 0, doc.getLength());
- fos.flush();
- fos.close();
- }
- refreshOnUpdate();
- }
-
- /** Method for saving text as a Base64 encoded document
- */
- private void writeOutBase64(String text)
- throws IOException, BadLocationException
- {
- File whatFile = getFileFromChooser(".", JFileChooser.SAVE_DIALOG, extsB64, Translatrix.getTranslationString("FiletypeB64"));
- if(whatFile != null)
- {
- String base64text = Base64Codec.encode(text);
- FileWriter fw = new FileWriter(whatFile);
- fw.write(base64text, 0, base64text.length());
- fw.flush();
- fw.close();
- }
- refreshOnUpdate();
- }
-
- /** Method to invoke loading HTML into the app
- */
- private void openDocument(File whatFile)
- throws IOException, BadLocationException
- {
- if(whatFile == null)
- {
- whatFile = getFileFromChooser(".", JFileChooser.OPEN_DIALOG, extsHTML, Translatrix.getTranslationString("FiletypeHTML"));
- }
- if(whatFile != null)
- {
- try
- {
- loadDocument(whatFile, null);
- }
- catch(ChangedCharSetException ccse)
- {
- String charsetType = ccse.getCharSetSpec().toLowerCase();
- int pos = charsetType.indexOf("charset");
- if(pos == -1)
- {
- throw ccse;
- }
- while(pos < charsetType.length() && charsetType.charAt(pos) != '=')
- {
- pos++;
- }
- pos++; // Places file cursor past the equals sign (=)
- String whatEncoding = charsetType.substring(pos).trim();
- loadDocument(whatFile, whatEncoding);
- }
- }
- refreshOnUpdate();
- }
-
- /** Method for loading HTML document into the app, including document encoding setting
- */
- private void loadDocument(File whatFile, String whatEncoding)
- throws IOException, BadLocationException
- {
- Reader r = null;
- htmlDoc = (ExtendedHTMLDocument)(htmlKit.createDefaultDocument());
- try
- {
- if(whatEncoding == null)
- {
- r = new InputStreamReader(new FileInputStream(whatFile));
- }
- else
- {
- r = new InputStreamReader(new FileInputStream(whatFile), whatEncoding);
- htmlDoc.putProperty("IgnoreCharsetDirective", new Boolean(true));
- }
- htmlKit.read(r, htmlDoc, 0);
- r.close();
- registerDocument(htmlDoc);
- jtpSource.setText(jtpMain.getText());
- currentFile = whatFile;
- updateTitle();
- }
- finally
- {
- if(r != null)
- {
- r.close();
- }
- }
- }
-
- /** Method for loading a Base64 encoded document
- */
- private void openDocumentBase64(File whatFile)
- throws IOException, BadLocationException
- {
- if(whatFile == null)
- {
- whatFile = getFileFromChooser(".", JFileChooser.OPEN_DIALOG, extsB64, Translatrix.getTranslationString("FiletypeB64"));
- }
- if(whatFile != null)
- {
- FileReader fr = new FileReader(whatFile);
- int nextChar = 0;
- StringBuffer encodedText = new StringBuffer();
- try
- {
- while((nextChar = fr.read()) != -1)
- {
- encodedText.append((char)nextChar);
- }
- fr.close();
- jtpSource.setText(Base64Codec.decode(encodedText.toString()));
- jtpMain.setText(jtpSource.getText());
- registerDocument((ExtendedHTMLDocument)(jtpMain.getDocument()));
- }
- finally
- {
- if(fr != null)
- {
- fr.close();
- }
- }
- }
- }
-
- /** Method for loading a Stylesheet into the app
- */
- private void openStyleSheet(File fileCSS)
- throws IOException
- {
- if(fileCSS == null)
- {
- fileCSS = getFileFromChooser(".", JFileChooser.OPEN_DIALOG, extsCSS, Translatrix.getTranslationString("FiletypeCSS"));
- }
- if(fileCSS != null)
- {
- String currDocText = jtpMain.getText();
- htmlDoc = (ExtendedHTMLDocument)(htmlKit.createDefaultDocument());
- styleSheet = htmlDoc.getStyleSheet();
- URL cssUrl = fileCSS.toURL();
- InputStream is = cssUrl.openStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- styleSheet.loadRules(br, cssUrl);
- br.close();
- htmlDoc = new ExtendedHTMLDocument(styleSheet);
- registerDocument(htmlDoc);
- jtpMain.setText(currDocText);
- jtpSource.setText(jtpMain.getText());
- }
- refreshOnUpdate();
- }
-
- /** Method for serializing the document out to a file
- */
- public void serializeOut(HTMLDocument doc)
- throws IOException
- {
- File whatFile = getFileFromChooser(".", JFileChooser.SAVE_DIALOG, extsSer, Translatrix.getTranslationString("FiletypeSer"));
- if(whatFile != null)
- {
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(whatFile));
- oos.writeObject(doc);
- oos.flush();
- oos.close();
- }
- refreshOnUpdate();
- }
-
- /** Method for reading in a serialized document from a file
- */
- public void serializeIn()
- throws IOException, ClassNotFoundException
- {
- File whatFile = getFileFromChooser(".", JFileChooser.OPEN_DIALOG, extsSer, Translatrix.getTranslationString("FiletypeSer"));
- if(whatFile != null)
- {
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(whatFile));
- htmlDoc = (ExtendedHTMLDocument)(ois.readObject());
- ois.close();
- registerDocument(htmlDoc);
- validate();
- }
- refreshOnUpdate();
- }
-
- /** Method for obtaining a File for input/output using a JFileChooser dialog
- */
- private File getFileFromChooser(String startDir, int dialogType, String[] exts, String desc)
- {
- JFileChooser jfileDialog = new JFileChooser(startDir);
- jfileDialog.setDialogType(dialogType);
- jfileDialog.setFileFilter(new MutableFilter(exts, desc));
- int optionSelected = JFileChooser.CANCEL_OPTION;
- if(dialogType == JFileChooser.OPEN_DIALOG)
- {
- optionSelected = jfileDialog.showOpenDialog(this);
- }
- else if(dialogType == JFileChooser.SAVE_DIALOG)
- {
- optionSelected = jfileDialog.showSaveDialog(this);
- }
- else // default to an OPEN_DIALOG
- {
- optionSelected = jfileDialog.showOpenDialog(this);
- }
- if(optionSelected == JFileChooser.APPROVE_OPTION)
- {
- return jfileDialog.getSelectedFile();
- }
- return (File)null;
- }
-
- /** Method for obtaining an Image for input using a custom JFileChooser dialog
- */
- private File getImageFromChooser(String startDir, String[] exts, String desc)
- {
- ImageFileChooser jImageDialog = new ImageFileChooser(startDir);
- jImageDialog.setDialogType(JFileChooser.CUSTOM_DIALOG);
- jImageDialog.setFileFilter(new MutableFilter(exts, desc));
- jImageDialog.setDialogTitle(Translatrix.getTranslationString("ImageDialogTitle"));
- int optionSelected = JFileChooser.CANCEL_OPTION;
- optionSelected = jImageDialog.showDialog(this, Translatrix.getTranslationString("Insert"));
- if(optionSelected == JFileChooser.APPROVE_OPTION)
- {
- return jImageDialog.getSelectedFile();
- }
- return (File)null;
- }
-
- /** Method for describing the node hierarchy of the document
- */
- private void describeDocument(StyledDocument doc)
- {
- Element[] elements = doc.getRootElements();
- for(int i = 0; i < elements.length; i++)
- {
- indent = indentStep;
- for(int j = 0; j < indent; j++) { System.out.print(" "); }
- System.out.print(elements[i]);
- traverseElement(elements[i]);
- System.out.println("");
- }
- }
-
- /** Traverses nodes for the describing method
- */
- private void traverseElement(Element element)
- {
- indent += indentStep;
- for(int i = 0; i < element.getElementCount(); i++)
- {
- for(int j = 0; j < indent; j++) { System.out.print(" "); }
- System.out.print(element.getElement(i));
- traverseElement(element.getElement(i));
- }
- indent -= indentStep;
- }
-
- /** Method to locate a node element by name
- */
- private Element locateElementInDocument(StyledDocument doc, String elementName)
- {
- Element[] elements = doc.getRootElements();
- for(int i = 0; i < elements.length; i++)
- {
- if(elements[i].getName().equalsIgnoreCase(elementName))
- {
- return elements[i];
- }
- else
- {
- Element rtnElement = locateChildElementInDocument(elements[i], elementName);
- if(rtnElement != null)
- {
- return rtnElement;
- }
- }
- }
- return (Element)null;
- }
-
- /** Traverses nodes for the locating method
- */
- private Element locateChildElementInDocument(Element element, String elementName)
- {
- for(int i = 0; i < element.getElementCount(); i++)
- {
- if(element.getElement(i).getName().equalsIgnoreCase(elementName))
- {
- return element.getElement(i);
- }
- }
- return (Element)null;
- }
-
- /** Convenience method for obtaining the WYSIWYG JTextPane
- */
- public JTextPane getTextPane()
- {
- return jtpMain;
- }
-
- /** Convenience method for obtaining the Source JTextPane
- */
- public JTextPane getSourcePane()
- {
- return jtpSource;
- }
-
- /** Convenience method for obtaining the application as a Frame
- */
- public Frame getFrame()
- {
- return frameHandler;
- }
-
- /** Convenience method for setting the parent Frame
- */
- public void setFrame(Frame parentFrame)
- {
- frameHandler = parentFrame;
- }
-
- /** Convenience method for obtaining the pre-generated menu bar
- */
- public JMenuBar getMenuBar()
- {
- return jMenuBar;
- }
-
- /** Convenience method for obtaining a custom menu bar
- */
- public JMenuBar getCustomMenuBar(Vector vcMenus)
- {
- jMenuBar = new JMenuBar();
- for(int i = 0; i < vcMenus.size(); i++)
- {
- String menuToAdd = ((String)(vcMenus.elementAt(i))).toLowerCase();
- if(htMenus.containsKey(menuToAdd))
- {
- jMenuBar.add((JMenu)(htMenus.get(menuToAdd)));
- }
- }
- return jMenuBar;
- }
-
- /** Convenience method for obtaining the pre-generated toolbar
- */
- public JToolBar getToolBar(boolean isShowing)
- {
- jcbmiViewToolbar.setState(isShowing);
- return jToolBar;
- }
-
- /** Convenience method for obtaining the pre-generated toolbar
- */
- public JToolBar getCustomToolBar(Vector vcTools, boolean isShowing)
- {
- jcbmiViewToolbar.setState(isShowing);
- jToolBar = new JToolBar(JToolBar.HORIZONTAL);
- jToolBar.setFloatable(false);
- for(int i = 0; i < vcTools.size(); i++)
- {
- String toolToAdd = ((String)(vcTools.elementAt(i))).toLowerCase();
- if(toolToAdd.equals(KEY_TOOL_SEP))
- {
- jToolBar.add(new JToolBar.Separator());
- }
- else if(htTools.containsKey(toolToAdd))
- {
- if(htTools.get(toolToAdd) instanceof JButtonNoFocus)
- {
- jToolBar.add((JButtonNoFocus)(htTools.get(toolToAdd)));
- }
- else if(htTools.get(toolToAdd) instanceof JToggleButtonNoFocus)
- {
- jToolBar.add((JToggleButtonNoFocus)(htTools.get(toolToAdd)));
- }
- else if(htTools.get(toolToAdd) instanceof JComboBoxNoFocus)
- {
- jToolBar.add((JComboBoxNoFocus)(htTools.get(toolToAdd)));
- }
- else
- {
- jToolBar.add((JComponent)(htTools.get(toolToAdd)));
- }
- }
- }
- return jToolBar;
- }
-
- /** Convenience method for obtaining the current file handle
- */
- public File getCurrentFile()
- {
- return currentFile;
- }
-
- /** Convenience method for obtaining the application name
- */
- public String getAppName()
- {
- return appName;
- }
-
- /** Convenience method for obtaining the document text
- */
- public String getDocumentText()
- {
- return jtpMain.getText();
- }
-
- /** Convenience method for obtaining the document text
- * contained within a tag pair
- */
- public String getDocumentSubText(String tagBlock)
- {
- return getSubText(tagBlock);
- }
-
- /** Method for extracting the text within a tag
- */
- private String getSubText(String containingTag)
- {
- jtpSource.setText(jtpMain.getText());
- String docTextCase = jtpSource.getText().toLowerCase();
- int tagStart = docTextCase.indexOf("<" + containingTag.toLowerCase());
- int tagStartClose = docTextCase.indexOf(">", tagStart) + 1;
- String closeTag = "</" + containingTag.toLowerCase() + ">";
- int tagEndOpen = docTextCase.indexOf(closeTag);
- if(tagStartClose < 0) { tagStartClose = 0; }
- if(tagEndOpen < 0 || tagEndOpen > docTextCase.length()) { tagEndOpen = docTextCase.length(); }
- return jtpSource.getText().substring(tagStartClose, tagEndOpen);
- }
-
- /** Convenience method for obtaining the document text
- * contained within the BODY tags (a common request)
- */
- public String getDocumentBody()
- {
- return getSubText("body");
- }
-
- /** Convenience method for setting the document text
- */
- public void setDocumentText(String sText)
- {
- jtpMain.setText(sText);
- ((HTMLEditorKit)(jtpMain.getEditorKit())).setDefaultCursor(new Cursor(Cursor.TEXT_CURSOR));
- jtpSource.setText(jtpMain.getText());
- ((HTMLEditorKit)(jtpSource.getEditorKit())).setDefaultCursor(new Cursor(Cursor.TEXT_CURSOR));
- }
-
- /** Convenience method for obtaining the document text
- */
- private void updateTitle()
- {
- frameHandler.setTitle(appName + (currentFile == null ? "" : " - " + currentFile.getName()));
- }
-
- /** Convenience method for clearing out the UndoManager
- */
- public void purgeUndos()
- {
- if(undoMngr != null)
- {
- undoMngr.discardAllEdits();
- undoAction.updateUndoState();
- redoAction.updateRedoState();
- }
- }
-
- /** Convenience method for refreshing and displaying changes
- */
- public void refreshOnUpdate()
- {
- jtpMain.setText(jtpMain.getText());
- jtpSource.setText(jtpMain.getText());
- purgeUndos();
- this.repaint();
- }
-
- /** Convenience method for deallocating the app resources
- */
- public void dispose()
- {
- frameHandler.dispose();
- spellCheck.dispose();
- spellCheck = null;
- spellDialog = null;
- System.exit(0);
- }
-
- /** Convenience method for fetching icon images from jar file
- */
- private ImageIcon getEkitIcon(String iconName)
- {
- return new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("icons/" + iconName + "HK.gif")));
- }
-
- /** Convenience method for outputting exceptions
- */
- private void logException(String internalMessage, Exception e)
- {
- System.err.println(internalMessage);
- e.printStackTrace(System.err);
- }
-
- /** Convenience method for toggling source window visibility
- */
- private void toggleSourceWindow()
- {
- if(!(jspSource.isShowing()))
- {
- jtpSource.setText(jtpMain.getText());
- jspltDisplay.setRightComponent(jspSource);
- if(exclusiveEdit)
- {
- jspltDisplay.setDividerLocation(0);
- jspltDisplay.setEnabled(false);
- }
- else
- {
- jspltDisplay.setDividerLocation(iSplitPos);
- jspltDisplay.setEnabled(true);
- }
- }
- else
- {
- jtpMain.setText(jtpSource.getText());
- iSplitPos = jspltDisplay.getDividerLocation();
- jspltDisplay.remove(jspSource);
- jtpMain.requestFocus();
- }
- this.validate();
- jcbmiViewSource.setSelected(jspSource.isShowing());
- jtbtnViewSource.setSelected(jspSource.isShowing());
- }
-
- /** Searches the specified element for CLASS attribute setting
- */
- private String findStyle(Element element)
- {
- AttributeSet as = element.getAttributes();
- if(as == null)
- {
- return null;
- }
- Object val = as.getAttribute(HTML.Attribute.CLASS);
- if(val != null && (val instanceof String))
- {
- return (String)val;
- }
- for(Enumeration e = as.getAttributeNames(); e.hasMoreElements();)
- {
- Object key = e.nextElement();
- if(key instanceof HTML.Tag)
- {
- AttributeSet eas = (AttributeSet)(as.getAttribute(key));
- if(eas != null)
- {
- val = eas.getAttribute(HTML.Attribute.CLASS);
- if(val != null)
- {
- return (String)val;
- }
- }
- }
-
- }
- return null;
- }
-
- /** Handles caret tracking and related events, such as displaying the current style
- * of the text under the caret
- */
- private void handleCaretPositionChange(CaretEvent ce)
- {
- int caretPos = ce.getDot();
- Element element = htmlDoc.getCharacterElement(caretPos);
-/*
----- TAG EXPLICATOR CODE -------------------------------------------
- javax.swing.text.ElementIterator ei = new javax.swing.text.ElementIterator(htmlDoc);
- Element ele;
- while((ele = ei.next()) != null)
- {
- System.out.println("ELEMENT : " + ele.getName());
- }
- System.out.println("ELEMENT:" + element.getName());
- Element elementParent = element.getParentElement();
- System.out.println("ATTRS:");
- AttributeSet attribs = elementParent.getAttributes();
- for(Enumeration eAttrs = attribs.getAttributeNames(); eAttrs.hasMoreElements();)
- {
- System.out.println(" " + eAttrs.nextElement().toString());
- }
- while(elementParent != null && !elementParent.getName().equals("body"))
- {
- String parentName = elementParent.getName();
- System.out.println("PARENT:" + parentName);
- System.out.println("ATTRS:");
- attribs = elementParent.getAttributes();
- for(Enumeration eAttr = attribs.getAttributeNames(); eAttr.hasMoreElements();)
- {
- System.out.println(" " + eAttr.nextElement().toString());
- }
- elementParent = elementParent.getParentElement();
- }
----- END -------------------------------------------
-*/
- if(element == null)
- {
- return;
- }
- String style = null;
- Vector vcStyles = new Vector();
- while(element != null)
- {
- if(style == null)
- {
- style = findStyle(element);
- }
- vcStyles.add(element);
- element = element.getParentElement();
- }
- int stylefound = -1;
- if(style != null)
- {
- for(int i = 0; i < jcmbStyleSelector.getItemCount(); i++)
- {
- String in = (String)(jcmbStyleSelector.getItemAt(i));
- if(in.equalsIgnoreCase(style))
- {
- stylefound = i;
- break;
- }
- }
- }
- if(stylefound > -1)
- {
- Action ac = jcmbStyleSelector.getAction();
- ac.setEnabled(false);
- jcmbStyleSelector.setSelectedIndex(stylefound);
- ac.setEnabled(true);
- }
- else
- {
- jcmbStyleSelector.setSelectedIndex(0);
- }
- }
-
- /** Server-side image handling methods
- */
- protected void setServletURL(String url)
- {
- ServletURL = url;
- }
-
- protected void setImageDir(String sysDir)
- {
- ImageDir = sysDir;
- }
-
- public void setTreePilotSystemID(String theSystem)
- {
- TreePilotSystemID = theSystem;
- }
-
- /** Utility methods
- */
- public ExtendedHTMLDocument getExtendedHtmlDoc()
- {
- return (ExtendedHTMLDocument)htmlDoc;
- }
-
- public int getCaretPosition()
- {
- return jtpMain.getCaretPosition();
- }
-
- public void setCaretPosition(int newPositon)
- {
- boolean end = true;
- do
- {
- end = true;
- try
- {
- jtpMain.setCaretPosition(newPositon);
- }
- catch (IllegalArgumentException iae)
- {
- end = false;
- newPositon--;
- }
- } while(!end && newPositon >= 0);
- }
-
-/* Inner Classes --------------------------------------------- */
-
- /** Class for implementing Undo as an autonomous action
- */
- class UndoAction extends AbstractAction
- {
- public UndoAction()
- {
- super(Translatrix.getTranslationString("Undo"));
- setEnabled(false);
- }
-
- public void actionPerformed(ActionEvent e)
- {
- try
- {
- undoMngr.undo();
- }
- catch(CannotUndoException ex)
- {
- ex.printStackTrace();
- }
- updateUndoState();
- redoAction.updateRedoState();
- }
-
- protected void updateUndoState()
- {
- if(undoMngr.canUndo())
- {
- setEnabled(true);
- putValue(Action.NAME, undoMngr.getUndoPresentationName());
- }
- else
- {
- setEnabled(false);
- putValue(Action.NAME, Translatrix.getTranslationString("Undo"));
- }
- }
- }
-
- /** Class for implementing Redo as an autonomous action
- */
- class RedoAction extends AbstractAction
- {
- public RedoAction()
- {
- super(Translatrix.getTranslationString("Redo"));
- setEnabled(false);
- }
-
- public void actionPerformed(ActionEvent e)
- {
- try
- {
- undoMngr.redo();
- }
- catch(CannotUndoException ex)
- {
- ex.printStackTrace();
- }
- updateRedoState();
- undoAction.updateUndoState();
- }
-
- protected void updateRedoState()
- {
- if(undoMngr.canRedo())
- {
- setEnabled(true);
- putValue(Action.NAME, undoMngr.getRedoPresentationName());
- }
- else
- {
- setEnabled(false);
- putValue(Action.NAME, Translatrix.getTranslationString("Redo"));
- }
- }
- }
-
- /** Class for implementing the Undo listener to handle the Undo and Redo actions
- */
- class CustomUndoableEditListener implements UndoableEditListener
- {
- public void undoableEditHappened(UndoableEditEvent uee)
- {
- undoMngr.addEdit(uee.getEdit());
- undoAction.updateUndoState();
- redoAction.updateRedoState();
- }
- }
-
-}