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();
}
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);
}
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);
}
}
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);
}
}
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);
}
Aggregations