/* * Created on Feb 27, 2005 * */ package net.atlanticbb.tantlinger.ui.text.actions; import java.awt.event.ActionEvent; import javax.swing.Action; import javax.swing.JEditorPane; import javax.swing.text.AttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledEditorKit; import net.atlanticbb.tantlinger.ui.text.HTMLUtils; import org.bushe.swing.action.ActionManager; /** * Action which edits HTML font size * * @author Bob Tantlinger * */ public class HTMLFontSizeAction extends HTMLTextEditAction { /** * */ private static final long serialVersionUID = 1L; public static final int XXSMALL = 0; public static final int XSMALL = 1; public static final int SMALL = 2; public static final int MEDIUM = 3; public static final int LARGE = 4; public static final int XLARGE = 5; public static final int XXLARGE = 6; private static final String SML = i18n.str("small"); private static final String MED = i18n.str("medium"); private static final String LRG = i18n.str("large"); public static final int FONT_SIZES[] = {8, 10, 12, 14, 18, 24, 36/*28*/}; public static final String SIZES[] = { "xx-" + SML, "x-" + SML, SML, MED, LRG, "x-" + LRG, "xx-" + LRG }; private int size; /** * Creates a new HTMLFontSizeAction * * @param size one of the FONT_SIZES * (XXSMALL, xSMALL, SMALL, MEDIUM, LARGE, XLARGE, XXLARGE) * * @throws IllegalArgumentException */ public HTMLFontSizeAction(int size) throws IllegalArgumentException { super(""); if(size < 0 || size > 6) throw new IllegalArgumentException("Invalid size"); this.size = size; putValue(NAME, SIZES[size]); putValue(ActionManager.BUTTON_TYPE, ActionManager.BUTTON_TYPE_VALUE_RADIO); putValue(Action.SHORT_DESCRIPTION, getValue(Action.NAME)); } protected void updateWysiwygContextState(JEditorPane ed) { /*HTMLDocument document = (HTMLDocument)ed.getDocument(); int caret = (ed.getCaretPosition() > 0) ? (ed.getCaretPosition() - 1) : ed.getCaretPosition(); AttributeSet at = document.getCharacterElement(caret).getAttributes();*/ AttributeSet at = HTMLUtils.getCharacterAttributes(ed); if(at.isDefined(StyleConstants.FontSize)) { setSelected(at.containsAttribute( StyleConstants.FontSize, new Integer(FONT_SIZES[size]))); } else { setSelected(size == MEDIUM); } } protected void updateSourceContextState(JEditorPane ed) { setSelected(false); } protected void sourceEditPerformed(ActionEvent e, JEditorPane editor) { String prefix = "<font size=" + (size + 1) + ">"; String postfix = "</font>"; String sel = editor.getSelectedText(); if(sel == null) { editor.replaceSelection(prefix + postfix); int pos = editor.getCaretPosition() - postfix.length(); if(pos >= 0) editor.setCaretPosition(pos); } else { sel = prefix + sel + postfix; editor.replaceSelection(sel); } } /* (non-Javadoc) * @see com.bob.blah.HTMLTextEditAction#wysiwygEditPerformed(java.awt.event.ActionEvent, javax.swing.JTextPane) */ protected void wysiwygEditPerformed(ActionEvent e, JEditorPane editor) { Action a = new StyledEditorKit.FontSizeAction(SIZES[size], FONT_SIZES[size]); a.actionPerformed(e); } }