Search in sources :

Example 1 with HTMLWriter

use of javax.swing.text.html.HTMLWriter in project pcgen by PCGen.

the class NotesTreeNode method save.

/** Saves this node's data. */
public void save() {
    if (dirty) {
        try {
            File notes = new File(dir.getAbsolutePath() + File.separator + DATA_HTML);
            if (!notes.exists()) {
                notes.createNewFile();
            }
            if (pane != null) {
                FileWriter fw = new FileWriter(notes);
                HTMLWriter hw = new HTMLWriter(fw, notesDoc);
                hw.write();
                fw.flush();
                fw.close();
                dirty = false;
            }
        } catch (Exception e) {
            Logging.errorPrint(e.getMessage(), e);
        }
    }
}
Also used : HTMLWriter(javax.swing.text.html.HTMLWriter) FileWriter(java.io.FileWriter) File(java.io.File) NoSuchElementException(java.util.NoSuchElementException)

Example 2 with HTMLWriter

use of javax.swing.text.html.HTMLWriter in project freeplane by freeplane.

the class HtmlProcessor method htmlSubstring.

public String htmlSubstring(int pos, int length) {
    final StringWriter writer = new StringWriter();
    try {
        if (pos < doc.getLength() && length > 0) {
            final HTMLWriter hw = new HTMLWriter(writer, (HTMLDocument) doc, pos, Math.min(length, doc.getLength() - pos));
            hw.write();
        }
    } catch (Exception e) {
    }
    return writer.toString();
}
Also used : HTMLWriter(javax.swing.text.html.HTMLWriter) StringWriter(java.io.StringWriter)

Example 3 with HTMLWriter

use of javax.swing.text.html.HTMLWriter in project freeplane by freeplane.

the class EditNodeTextField method show.

/* (non-Javadoc)
	 * @see org.freeplane.view.swing.map.INodeTextField#show()
	 */
@SuppressWarnings("serial")
@Override
public void show(final RootPaneContainer frame) {
    final ModeController modeController = Controller.getCurrentModeController();
    final IMapViewManager viewController = modeController.getController().getMapViewManager();
    final MTextController textController = (MTextController) TextController.getController(modeController);
    nodeView = (NodeView) SwingUtilities.getAncestorOfClass(NodeView.class, parent);
    font = parent.getFont();
    zoom = viewController.getZoom();
    if (zoom != 1F) {
        final float fontSize = (int) (Math.rint(font.getSize() * zoom));
        font = font.deriveFont(fontSize);
    }
    final HTMLEditorKit kit = new ScaledEditorKit() {

        @Override
        public void write(Writer out, Document doc, int pos, int len) throws IOException, BadLocationException {
            if (doc instanceof HTMLDocument) {
                HTMLWriter w = new SHTMLWriter(out, (HTMLDocument) doc, pos, len);
                w.write();
            } else {
                super.write(out, doc, pos, len);
            }
        }
    };
    textfield.setEditorKit(kit);
    final InputMap inputMap = textfield.getInputMap();
    final ActionMap actionMap = textfield.getActionMap();
    actionMap.put(DefaultEditorKit.pasteAction, pasteAction);
    inputMap.put((KeyStroke) boldAction.getValue(Action.ACCELERATOR_KEY), "boldAction");
    actionMap.put("boldAction", boldAction);
    inputMap.put((KeyStroke) italicAction.getValue(Action.ACCELERATOR_KEY), "italicAction");
    actionMap.put("italicAction", italicAction);
    inputMap.put((KeyStroke) underlineAction.getValue(Action.ACCELERATOR_KEY), "underlineAction");
    actionMap.put("underlineAction", underlineAction);
    inputMap.put((KeyStroke) redAction.getValue(Action.ACCELERATOR_KEY), "redAction");
    actionMap.put("redAction", redAction);
    inputMap.put((KeyStroke) greenAction.getValue(Action.ACCELERATOR_KEY), "greenAction");
    actionMap.put("greenAction", greenAction);
    inputMap.put((KeyStroke) blueAction.getValue(Action.ACCELERATOR_KEY), "blueAction");
    actionMap.put("blueAction", blueAction);
    inputMap.put((KeyStroke) blackAction.getValue(Action.ACCELERATOR_KEY), "blackAction");
    actionMap.put("blackAction", blackAction);
    inputMap.put((KeyStroke) defaultColorAction.getValue(Action.ACCELERATOR_KEY), "defaultColorAction");
    actionMap.put("defaultColorAction", defaultColorAction);
    inputMap.put((KeyStroke) removeFormattingAction.getValue(Action.ACCELERATOR_KEY), "removeFormattingAction");
    actionMap.put("removeFormattingAction", removeFormattingAction);
    final Color nodeTextColor = parent.getForeground();
    textfield.setCaretColor(nodeTextColor);
    final StringBuilder ruleBuilder = new StringBuilder(100);
    ruleBuilder.append("body {");
    final int labelHorizontalAlignment = parent.getHorizontalAlignment();
    ruleBuilder.append(new CssRuleBuilder().withCSSFont(font, UITools.FONT_SCALE_FACTOR).withColor(nodeTextColor).withBackground(getBackground()).withAlignment(labelHorizontalAlignment));
    ruleBuilder.append("}\n");
    final HTMLDocument document = (HTMLDocument) textfield.getDocument();
    final StyleSheet styleSheet = document.getStyleSheet();
    styleSheet.addRule(ruleBuilder.toString());
    textfield.setText(text);
    final MapView mapView = nodeView.getMap();
    if (!mapView.isValid())
        mapView.validate();
    final NodeStyleController nsc = NodeStyleController.getController(modeController);
    maxWidth = Math.max(mapView.getZoomed(nsc.getMaxWidth(node).toBaseUnitsRounded()), parent.getWidth());
    final Icon icon = parent.getIcon();
    if (icon != null) {
        maxWidth -= mapView.getZoomed(icon.getIconWidth());
        maxWidth -= mapView.getZoomed(parent.getIconTextGap());
    }
    Insets parentInsets = parent.getZoomedInsets();
    maxWidth -= parentInsets.left + parentInsets.right;
    extraWidth = ResourceController.getResourceController().getIntProperty("editor_extra_width", 80);
    extraWidth = mapView.getZoomed(extraWidth);
    final TextFieldListener textFieldListener = new TextFieldListener();
    this.textFieldListener = textFieldListener;
    textfield.addFocusListener(textFieldListener);
    textfield.addKeyListener(textFieldListener);
    textfield.addMouseListener(textFieldListener);
    mapViewChangeListener = new MapViewChangeListener();
    Controller.getCurrentController().getMapViewManager().addMapViewChangeListener(mapViewChangeListener);
    SpellCheckerController.getController().enableAutoSpell(textfield, true);
    mapView.scrollNodeToVisible(nodeView);
    assert (parent.isValid());
    final int nodeWidth = parent.getWidth();
    final int textFieldBorderWidth = 2;
    textfield.setBorder(new MatteBorder(textFieldBorderWidth, textFieldBorderWidth, textFieldBorderWidth, textFieldBorderWidth, nodeView.getSelectedColor()));
    final Dimension textFieldMinimumSize = textfield.getPreferredSize();
    textFieldMinimumSize.width += 1;
    if (textFieldMinimumSize.width < extraWidth)
        textFieldMinimumSize.width = extraWidth;
    if (textFieldMinimumSize.width < 10)
        textFieldMinimumSize.width = 10;
    if (textFieldMinimumSize.width > maxWidth) {
        textFieldMinimumSize.width = maxWidth;
        setLineWrap();
        textFieldMinimumSize.height = textfield.getPreferredSize().height;
    }
    final ZoomableLabelUI parentUI = (ZoomableLabelUI) parent.getUI();
    final LayoutData layoutData = parentUI.getLayoutData(parent);
    Rectangle iconR = layoutData.iconR;
    final Rectangle textR = layoutData.textR;
    int textFieldX = parentInsets.left - textFieldBorderWidth + (iconR.width > 0 ? textR.x - iconR.x : 0);
    final EventBuffer eventQueue = MTextController.getController().getEventQueue();
    KeyEvent firstEvent = eventQueue.getFirstEvent();
    Point mouseEventPoint = null;
    if (firstEvent == null) {
        MouseEvent currentEvent = eventQueue.getMouseEvent();
        if (currentEvent != null) {
            MouseEvent mouseEvent = (MouseEvent) currentEvent;
            if (mouseEvent.getComponent().equals(parent)) {
                mouseEventPoint = mouseEvent.getPoint();
                mouseEventPoint.x -= textR.x;
                mouseEventPoint.y -= textR.y;
            }
        }
    }
    textFieldMinimumSize.width = Math.max(textFieldMinimumSize.width, nodeWidth - textFieldX - (parentInsets.right - textFieldBorderWidth));
    textFieldMinimumSize.height = Math.max(textFieldMinimumSize.height, textR.height);
    textfield.setSize(textFieldMinimumSize.width, textFieldMinimumSize.height);
    final int textY = Math.max(textR.y - (textFieldMinimumSize.height - textR.height) / 2, 0);
    final Dimension newParentSize = new Dimension(textFieldX + textFieldMinimumSize.width + parentInsets.right, 2 * textY + textFieldMinimumSize.height);
    horizontalSpace = newParentSize.width - textFieldMinimumSize.width;
    verticalSpace = 2 * textY;
    final int widthAddedToParent = newParentSize.width - parent.getWidth();
    final Point location = new Point(textR.x - textFieldBorderWidth, textY);
    final int widthAddedToTextField = textFieldMinimumSize.width - (textR.width + 2 * textFieldBorderWidth);
    if (widthAddedToTextField > 0) {
        switch(labelHorizontalAlignment) {
            case SwingConstants.CENTER:
                location.x -= (widthAddedToTextField - widthAddedToParent) / 2;
                if (mouseEventPoint != null)
                    mouseEventPoint.x += widthAddedToTextField / 2;
                break;
            case SwingConstants.RIGHT:
                location.x -= widthAddedToTextField - widthAddedToParent;
                if (mouseEventPoint != null)
                    mouseEventPoint.x += widthAddedToTextField;
                break;
        }
    }
    keepNodePosition();
    parent.setPreferredSize(newParentSize);
    parent.setText("");
    parent.setHorizontalAlignment(JLabel.LEFT);
    if (!layoutMapOnTextChange) {
        mapView.doLayout();
        UITools.convertPointToAncestor(parent, location, mapView);
    }
    textfield.setBounds(location.x, location.y, textFieldMinimumSize.width, textFieldMinimumSize.height);
    if (layoutMapOnTextChange)
        parent.add(textfield, 0);
    else
        mapView.add(textfield, 0);
    redispatchKeyEvents(textfield, firstEvent);
    if (firstEvent == null) {
        int pos = document.getLength();
        if (mouseEventPoint != null)
            pos = textfield.viewToModel(mouseEventPoint);
        textfield.setCaretPosition(pos);
    }
    document.addDocumentListener(documentListener);
    if (textController.isMinimized(node)) {
        layout();
    }
    textfield.repaint();
    textfield.requestFocusInWindow();
}
Also used : Insets(java.awt.Insets) HTMLDocument(javax.swing.text.html.HTMLDocument) Rectangle(java.awt.Rectangle) EventBuffer(org.freeplane.features.text.mindmapmode.EventBuffer) ModeController(org.freeplane.features.mode.ModeController) ScaledEditorKit(org.freeplane.core.ui.components.html.ScaledEditorKit) HTMLDocument(javax.swing.text.html.HTMLDocument) Document(javax.swing.text.Document) KeyEvent(java.awt.event.KeyEvent) SHTMLWriter(com.lightdev.app.shtm.SHTMLWriter) MatteBorder(javax.swing.border.MatteBorder) ZoomableLabelUI(org.freeplane.view.swing.map.ZoomableLabelUI) MapView(org.freeplane.view.swing.map.MapView) HTMLWriter(javax.swing.text.html.HTMLWriter) SHTMLWriter(com.lightdev.app.shtm.SHTMLWriter) MouseEvent(java.awt.event.MouseEvent) CssRuleBuilder(org.freeplane.core.ui.components.html.CssRuleBuilder) ActionMap(javax.swing.ActionMap) Color(java.awt.Color) HTMLEditorKit(javax.swing.text.html.HTMLEditorKit) Dimension(java.awt.Dimension) Point(java.awt.Point) Point(java.awt.Point) IMapViewManager(org.freeplane.features.ui.IMapViewManager) StyleSheet(javax.swing.text.html.StyleSheet) IMapViewChangeListener(org.freeplane.features.ui.IMapViewChangeListener) LayoutData(org.freeplane.view.swing.map.ZoomableLabelUI.LayoutData) NodeStyleController(org.freeplane.features.nodestyle.NodeStyleController) InputMap(javax.swing.InputMap) MTextController(org.freeplane.features.text.mindmapmode.MTextController) Icon(javax.swing.Icon) HTMLWriter(javax.swing.text.html.HTMLWriter) Writer(java.io.Writer) SHTMLWriter(com.lightdev.app.shtm.SHTMLWriter)

Aggregations

HTMLWriter (javax.swing.text.html.HTMLWriter)3 SHTMLWriter (com.lightdev.app.shtm.SHTMLWriter)1 Color (java.awt.Color)1 Dimension (java.awt.Dimension)1 Insets (java.awt.Insets)1 Point (java.awt.Point)1 Rectangle (java.awt.Rectangle)1 KeyEvent (java.awt.event.KeyEvent)1 MouseEvent (java.awt.event.MouseEvent)1 File (java.io.File)1 FileWriter (java.io.FileWriter)1 StringWriter (java.io.StringWriter)1 Writer (java.io.Writer)1 NoSuchElementException (java.util.NoSuchElementException)1 ActionMap (javax.swing.ActionMap)1 Icon (javax.swing.Icon)1 InputMap (javax.swing.InputMap)1 MatteBorder (javax.swing.border.MatteBorder)1 Document (javax.swing.text.Document)1 HTMLDocument (javax.swing.text.html.HTMLDocument)1