Search in sources :

Example 26 with IMapViewManager

use of org.freeplane.features.ui.IMapViewManager 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 {");
    ruleBuilder.append("font-family: ").append(font.getFamily()).append(";");
    final int fontSize = Math.round(font.getSize() / UITools.FONT_SCALE_FACTOR);
    ruleBuilder.append("font-size: ").append(fontSize).append("pt;");
    if (font.isItalic()) {
        ruleBuilder.append("font-style: italic; ");
    }
    if (font.isBold()) {
        ruleBuilder.append("font-weight: bold; ");
    }
    ruleBuilder.append("color: ").append(ColorUtils.colorToString(nodeTextColor)).append(";");
    final Color bgColor = getBackground();
    ruleBuilder.append("background-color: ").append(ColorUtils.colorToString(bgColor)).append(";");
    ruleBuilder.append("}\n");
    final HTMLDocument document = (HTMLDocument) textfield.getDocument();
    final StyleSheet styleSheet = document.getStyleSheet();
    styleSheet.addRule(ruleBuilder.toString());
    textfield.setText(text);
    final MapView mapView = (MapView) viewController.getMapViewComponent();
    if (!mapView.isValid())
        mapView.validate();
    final NodeStyleController nsc = NodeStyleController.getController(modeController);
    maxWidth = nsc.getMaxWidth(node);
    final Icon icon = parent.getIcon();
    if (icon != null) {
        maxWidth -= icon.getIconWidth();
        maxWidth -= parent.getIconTextGap();
    }
    maxWidth = mapView.getZoomed(maxWidth);
    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 nodeHeight = parent.getHeight();
    final Dimension textFieldSize;
    textfield.setBorder(new MatteBorder(2, 2, 2, 2, nodeView.getSelectedColor()));
    textFieldSize = textfield.getPreferredSize();
    textFieldSize.width += 1;
    if (textFieldSize.width < extraWidth)
        textFieldSize.width = extraWidth;
    if (textFieldSize.width < 10)
        textFieldSize.width = 10;
    if (textFieldSize.width > maxWidth) {
        textFieldSize.width = maxWidth;
        setLineWrap();
        textFieldSize.height = textfield.getPreferredSize().height;
    }
    final Rectangle textR = ((ZoomableLabelUI) parent.getUI()).getTextR(parent);
    textFieldSize.width = Math.max(textFieldSize.width, textR.width);
    textFieldSize.height = Math.max(textFieldSize.height, textR.height);
    textfield.setSize(textFieldSize.width, textFieldSize.height);
    horizontalSpace = Math.max(nodeWidth - textFieldSize.width, textR.x);
    verticalSpace = Math.max(nodeHeight - textFieldSize.height, textR.y);
    final Dimension newParentSize = new Dimension(horizontalSpace + textFieldSize.width, verticalSpace + textFieldSize.height);
    parent.setPreferredSize(newParentSize);
    final Point location = new Point(textR.x - 2, textR.y);
    if (!layoutMapOnTextChange)
        UITools.convertPointToAncestor(parent, location, mapView);
    textfield.setBounds(location.x, location.y, textFieldSize.width, textFieldSize.height);
    parent.setText("");
    if (nodeView.isRoot() && parent instanceof MainView)
        parent.setHorizontalAlignment(JLabel.LEFT);
    if (layoutMapOnTextChange)
        parent.add(textfield, 0);
    else
        mapView.add(textfield, 0);
    final EventBuffer eventQueue = MTextController.getController().getEventQueue();
    KeyEvent firstEvent = eventQueue.getFirstEvent();
    redispatchKeyEvents(textfield, firstEvent);
    if (firstEvent == null) {
        MouseEvent currentEvent = eventQueue.getMouseEvent();
        int pos = document.getLength();
        if (currentEvent != null) {
            MouseEvent mouseEvent = (MouseEvent) currentEvent;
            if (mouseEvent.getComponent().equals(parent)) {
                final Point point = mouseEvent.getPoint();
                point.x -= textR.x;
                point.y -= textR.y;
                pos = textfield.viewToModel(point);
            }
        }
        textfield.setCaretPosition(pos);
    }
    document.addDocumentListener(documentListener);
    if (textController.isMinimized(node)) {
        layout();
    }
    textfield.repaint();
    textfield.requestFocusInWindow();
}
Also used : MainView(org.freeplane.view.swing.map.MainView) 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) 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) 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)

Example 27 with IMapViewManager

use of org.freeplane.features.ui.IMapViewManager in project freeplane by freeplane.

the class ChangeNodeLevelController method moveUpwards.

private void moveUpwards(final NodeModel selectedNode) {
    if (!checkSelection()) {
        return;
    }
    final MMapController mapController = (MMapController) Controller.getCurrentModeController().getMapController();
    NodeModel selectedParent = selectedNode.getParentNode();
    final List<NodeModel> selectedNodes = Controller.getCurrentController().getSelection().getSortedSelection(true);
    int position;
    final boolean changeSide;
    boolean leftSide = selectedNode.isLeft();
    if (selectedParent.isRoot()) {
        final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
        final Component mapViewComponent = mapViewManager.getMapViewComponent();
        if (!mapViewManager.isLeftTreeSupported(mapViewComponent)) {
            return;
        }
        changeSide = true;
        leftSide = !leftSide;
        final int childCount = selectedParent.getChildCount();
        for (position = childCount - 1; position >= 0 && ((NodeModel) selectedParent.getChildAt(position)).isLeft() != leftSide; position--) ;
    } else {
        final NodeModel grandParent = selectedParent.getParentNode();
        position = grandParent.getChildPosition(selectedParent);
        selectedParent = grandParent;
        changeSide = false;
    }
    boolean increasePosition = !changeSide;
    for (final NodeModel node : selectedNodes) {
        ((FreeNode) Controller.getCurrentModeController().getExtension(FreeNode.class)).undoableDeactivateHook(node);
        increasePosition = increasePosition || selectedParent.getIndex(node) > position;
        if (increasePosition) {
            position++;
        }
        mapController.moveNode(node, selectedParent, position, leftSide, changeSide);
    }
    mapController.selectMultipleNodes(selectedNode, selectedNodes);
}
Also used : IMapViewManager(org.freeplane.features.ui.IMapViewManager) NodeModel(org.freeplane.features.map.NodeModel) FreeNode(org.freeplane.features.map.FreeNode) Component(java.awt.Component)

Example 28 with IMapViewManager

use of org.freeplane.features.ui.IMapViewManager in project freeplane by freeplane.

the class MMapController method newDocumentationMap.

/**
 *@throws XMLException
 * @deprecated -- use MMapIO
 */
@Deprecated
public boolean newDocumentationMap(final URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException {
    final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
    if (mapViewManager.tryToChangeToMapView(url))
        return false;
    try {
        Controller.getCurrentController().getViewController().setWaitingCursor(true);
        final MapModel newModel = new MMapModel();
        newModel.addExtension(DocuMapAttribute.instance);
        UrlManager.getController().load(url, newModel);
        newModel.setReadOnly(true);
        fireMapCreated(newModel);
        newMapView(newModel);
        return true;
    } finally {
        Controller.getCurrentController().getViewController().setWaitingCursor(false);
    }
}
Also used : IMapViewManager(org.freeplane.features.ui.IMapViewManager) MapModel(org.freeplane.features.map.MapModel)

Example 29 with IMapViewManager

use of org.freeplane.features.ui.IMapViewManager in project freeplane by freeplane.

the class MMapController method newMap.

/**
 *@throws XMLException
 * @deprecated -- use MMapIO
 */
@Deprecated
@Override
public boolean newMap(URL url) throws FileNotFoundException, IOException, URISyntaxException, XMLException {
    // load as documentation map if necessary
    if (getMModeController().containsExtension(DocuMapAttribute.class)) {
        return newDocumentationMap(url);
    }
    final IMapViewManager mapViewManager = Controller.getCurrentController().getMapViewManager();
    if (mapViewManager.tryToChangeToMapView(url))
        return false;
    if (AddOnsController.getController().installIfAppropriate(url))
        return false;
    URL alternativeURL = null;
    try {
        final File file = Compat.urlToFile(url);
        if (file == null) {
            alternativeURL = url;
        } else {
            if (file.exists()) {
                final MFileManager fileManager = MFileManager.getController(getMModeController());
                File alternativeFile = fileManager.getAlternativeFile(file, AlternativeFileMode.AUTOSAVE);
                if (alternativeFile != null) {
                    alternativeURL = Compat.fileToUrl(alternativeFile);
                } else
                    return false;
            } else {
                alternativeURL = url;
            }
        }
    } catch (MalformedURLException e) {
    } catch (URISyntaxException e) {
    }
    if (alternativeURL == null)
        return false;
    Controller.getCurrentController().getViewController().setWaitingCursor(true);
    try {
        final MapModel newModel = new MMapModel();
        final MFileManager fileManager = MFileManager.getController(getMModeController());
        fileManager.loadAndLock(alternativeURL, newModel);
        newModel.setURL(url);
        newModel.setSaved(alternativeURL.equals(url));
        fireMapCreated(newModel);
        newMapView(newModel);
        return true;
    } finally {
        Controller.getCurrentController().getViewController().setWaitingCursor(false);
    }
}
Also used : IMapViewManager(org.freeplane.features.ui.IMapViewManager) MalformedURLException(java.net.MalformedURLException) MFileManager(org.freeplane.features.url.mindmapmode.MFileManager) URISyntaxException(java.net.URISyntaxException) MapModel(org.freeplane.features.map.MapModel) File(java.io.File) URL(java.net.URL)

Example 30 with IMapViewManager

use of org.freeplane.features.ui.IMapViewManager in project freeplane by freeplane.

the class NewFreeNodeAction method actionPerformed.

public void actionPerformed(final ActionEvent e) {
    final ModeController modeController = Controller.getCurrentModeController();
    final MMapController mapController = (MMapController) modeController.getMapController();
    final Controller controller = Controller.getCurrentController();
    final IMapViewManager viewController = controller.getMapViewManager();
    final float zoom = viewController.getZoom();
    final Component component = viewController.getComponent(mapController.getRootNode());
    int x = (int) (component.getWidth() / zoom);
    mapController.addFreeNode(new Point(x, 0), false);
}
Also used : IMapViewManager(org.freeplane.features.ui.IMapViewManager) ModeController(org.freeplane.features.mode.ModeController) Point(java.awt.Point) Controller(org.freeplane.features.mode.Controller) ModeController(org.freeplane.features.mode.ModeController) Component(java.awt.Component) Point(java.awt.Point)

Aggregations

IMapViewManager (org.freeplane.features.ui.IMapViewManager)35 Component (java.awt.Component)13 Controller (org.freeplane.features.mode.Controller)13 MapModel (org.freeplane.features.map.MapModel)12 ModeController (org.freeplane.features.mode.ModeController)11 JComponent (javax.swing.JComponent)7 URL (java.net.URL)5 ResourceController (org.freeplane.core.resources.ResourceController)5 NodeModel (org.freeplane.features.map.NodeModel)5 MapView (org.freeplane.view.swing.map.MapView)5 Point (java.awt.Point)4 JTextComponent (javax.swing.text.JTextComponent)4 IUndoHandler (org.freeplane.core.undo.IUndoHandler)3 LinkController (org.freeplane.features.link.LinkController)3 MLinkController (org.freeplane.features.link.mindmapmode.MLinkController)3 ViewController (org.freeplane.features.ui.ViewController)3 Color (java.awt.Color)2 Dimension (java.awt.Dimension)2 ComponentAdapter (java.awt.event.ComponentAdapter)2 ComponentEvent (java.awt.event.ComponentEvent)2