/* * Freeplane - mind map editor * Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev * * This file is modified by Dimitry Polivaev in 2008. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.freeplane.view.swing.map; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.text.MessageFormat; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.SwingUtilities; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import org.freeplane.core.resources.IFreeplanePropertyListener; import org.freeplane.core.resources.ResourceController; import org.freeplane.core.ui.MenuBuilder; import org.freeplane.core.ui.ribbon.RibbonBuilder; import org.freeplane.core.ui.ribbon.special.ZoomContributorFactory; import org.freeplane.core.util.TextUtils; import org.freeplane.features.map.IMapSelection; import org.freeplane.features.map.IMapSelectionListener; import org.freeplane.features.map.MapController; import org.freeplane.features.map.MapModel; import org.freeplane.features.map.NodeModel; import org.freeplane.features.mode.Controller; import org.freeplane.features.mode.ModeController; import org.freeplane.features.styles.MapStyle; import org.freeplane.features.styles.MapViewLayout; import org.freeplane.features.ui.IMapViewChangeListener; import org.freeplane.features.ui.IMapViewManager; import org.freeplane.features.ui.ViewController; /** * Manages the list of MapViews. As this task is very complex, I exported it * from Controller to this class to keep Controller simple. The information * exchange between controller and this class is managed by observer pattern * (the controller observes changes to the map mapViews here). */ public class MapViewController implements IMapViewManager , IMapViewChangeListener, IFreeplanePropertyListener { private String lastModeName; /** reference to the current mapmapView; null is allowed, too. */ private MapView mapView; MapViewChangeObserverCompound mapViewChangeListeners = new MapViewChangeObserverCompound(); /** * A vector of MapView instances. They are ordered according to their screen * order. */ final private Vector<MapView> mapViewVector = new Vector<MapView>(); private float zoom; final private JScrollPane scrollPane; private boolean setZoomComboBoxRun; private Controller controller; /** * Reference to the current mode as the mapView may be null. */ public MapViewController(Controller controller){ this.controller =controller; controller.setMapViewManager(this); addMapViewChangeListener(this); scrollPane = new MapViewScrollPane(); zoomIn = new ZoomInAction(this); controller.addAction(zoomIn); zoomOut = new ZoomOutAction(this); controller.addAction(zoomOut); userDefinedZoom = TextUtils.getText("user_defined_zoom"); zoomModel = new DefaultComboBoxModel(getZooms()); zoomModel.addElement(userDefinedZoom); ResourceController resourceController = ResourceController.getResourceController(); resourceController.addPropertyChangeListener(this); zoomModel.setSelectedItem("100%"); zoomModel.addListDataListener(new ListDataListener() { public void intervalRemoved(ListDataEvent e) { } public void intervalAdded(ListDataEvent e) { } public void contentsChanged(ListDataEvent e) { if (!setZoomComboBoxRun && e.getIndex0() == -1) { EventQueue.invokeLater(new Runnable() { public void run() { setZoomByItem(zoomModel.getSelectedItem()); } }); } } }) ; final String antialiasProperty = resourceController.getProperty(ViewController.RESOURCE_ANTIALIAS); changeAntialias(antialiasProperty); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#addMapChangeListener(org.freeplane.core.frame.IMapChangeListener) */ public void addMapSelectionListener(final IMapSelectionListener pListener) { mapViewChangeListeners.addListener(pListener); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#addMapViewChangeListener(org.freeplane.core.frame.IMapViewChangeListener) */ public void addMapViewChangeListener(final IMapViewChangeListener pListener) { mapViewChangeListeners.addListener(pListener); } private void addToOrChangeInMapViews(final String key, final MapView newOrChangedMapView) { String extension = ""; int count = 1; final List<String> mapKeys = getMapKeys(); while (mapKeys.contains(key + extension)) { extension = "<" + (++count) + ">"; } newOrChangedMapView.setName((key + extension)); newOrChangedMapView.setName((key + extension)); if (!mapViewVector.contains(newOrChangedMapView)) { mapViewVector.add(newOrChangedMapView); } } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#changeToMapView(org.freeplane.view.swing.map.MapView) */ public boolean changeToMapView(final Component newMapViewComponent) { final MapView newMapView = (MapView) newMapViewComponent; final MapView oldMapView = mapView; if (newMapView == oldMapView) { return true; } mapViewChangeListeners.beforeMapViewChange(oldMapView, newMapView); mapView = newMapView; if (mapView != null) { mapView.revalidateSelecteds(); final ModeController modeController = mapView.getModeController(); lastModeName = modeController.getModeName(); final float mapViewZoom = mapView.getZoom(); if (zoom != mapViewZoom) { setZoom(mapViewZoom); } modeController.getController().selectMode(modeController); } mapViewChangeListeners.afterMapViewChange(oldMapView, newMapView); return true; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#changeToMapView(java.lang.String) */ public boolean changeToMapView(final String mapViewDisplayName) { MapView mapViewCandidate = null; for (final MapView mapView : mapViewVector) { final String mapViewName = mapView.getName(); if (mapViewDisplayName == mapViewName || mapViewDisplayName != null && mapViewDisplayName.equals(mapViewName)) { mapViewCandidate = mapView; break; } } if (mapViewCandidate == null) { throw new IllegalArgumentException("Map mapView " + mapViewDisplayName + " not found."); } return changeToMapView(mapViewCandidate); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#changeToMode(java.lang.String) */ public boolean changeToMode(final String modeName) { if (modeName.equals(lastModeName)) { return true; } MapView mapViewCandidate = null; for (final MapView mapView : mapViewVector) { if (modeName.equals(mapView.getModeController().getModeName())) { mapViewCandidate = mapView; break; } } final MapView oldMapView = mapView; final boolean changed = changeToMapView(mapViewCandidate); if (changed) { lastModeName = modeName; if (oldMapView == mapView) { // if the same map remains selected post event for menu updates. mapViewChangeListeners.afterMapViewChange(oldMapView, mapView); } } return changed; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#checkIfFileIsAlreadyOpened(java.net.URL) */ public String checkIfFileIsAlreadyOpened(final URL urlToCheck) throws MalformedURLException { for (final MapView mapView : mapViewVector) { if (getModel(mapView) != null) { final URL mapViewUrl = getModel(mapView).getURL(); if (sameFile(urlToCheck, mapViewUrl)) { return mapView.getName(); } } } return null; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#close(boolean) */ public boolean close(final boolean force) { final MapView mapView = getMapView(); if (mapView == null) { return false; } final MapController mapController = mapView.getModeController().getMapController(); final boolean closingNotCancelled = mapController.close(force); if (!closingNotCancelled) { return false; } int index = mapViewVector.indexOf(mapView); mapController.removeMapChangeListener(mapView); ResourceController.getResourceController().removePropertyChangeListener(mapView); mapViewVector.remove(mapView); if (mapViewVector.isEmpty()) { /* Keep the current running mode */ changeToMapView((MapView) null); } else { if (index >= mapViewVector.size() || index < 0) { index = mapViewVector.size() - 1; } changeToMapView((mapViewVector.get(index))); } mapViewChangeListeners.afterMapViewClose(mapView); return true; } public String createHtmlMap() { final MapModel model = getModel(); final ClickableImageCreator creator = new ClickableImageCreator(model.getRootNode(), getMapView() .getModeController(), "FM$1FM"); return creator.generateHtml(); } public RenderedImage createImage() { final MapView view = getMapView(); if (view == null) { return null; } view.preparePrinting(); final Rectangle innerBounds = view.getInnerBounds(); final int BOUND = 1; innerBounds.x -= BOUND; innerBounds.y -= BOUND; innerBounds.width += 2 * BOUND; innerBounds.height += 2 * BOUND; final BufferedImage myImage = (BufferedImage) view.createImage(innerBounds.width, innerBounds.height); final Graphics g = myImage.getGraphics(); g.translate(-innerBounds.x, -innerBounds.y); view.print(g); view.endPrinting(); return myImage; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getBackgroundColor(org.freeplane.core.model.NodeModel) */ public Color getBackgroundColor(final NodeModel node) { final MapView mapView = getMapView(); if (mapView == null) { return null; } final NodeView nodeView = mapView.getNodeView(node); if (nodeView == null) { return null; } return nodeView.getTextBackground(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getComponent(org.freeplane.core.model.NodeModel) */ public Component getComponent(final NodeModel node) { if(mapView == null) return null; final NodeView nodeView = mapView.getNodeView(node); if(nodeView == null) return null; return nodeView.getMainView(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getFont(org.freeplane.core.model.NodeModel) */ public Font getFont(final NodeModel node) { final MapView mapView = getMapView(); if (mapView == null) { return null; } final NodeView nodeView = mapView.getNodeView(node); if (nodeView == null) { return null; } return nodeView.getMainView().getFont(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getMapKeys() */ public List<String> getMapKeys() { final LinkedList<String> returnValue = new LinkedList<String>(); for (final MapView mapView : mapViewVector) { returnValue.add(mapView.getName()); } return Collections.unmodifiableList(returnValue); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getMaps() */ public Map<String, MapModel> getMaps() { final HashMap<String, MapModel> returnValue = new HashMap<String, MapModel>(mapViewVector.size()); for (final MapView mapView : mapViewVector) { returnValue.put(mapView.getName(), getModel(mapView)); } return Collections.unmodifiableMap(returnValue); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getMapSelection() */ public IMapSelection getMapSelection() { final MapView mapView = getMapView(); return mapView == null ? null : mapView.getMapSelection(); } public MapView getMapView() { return mapView; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getMapViewComponent() */ public Component getMapViewComponent() { return getMapView(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getMapViewVector() */ public List<MapView> getMapViewVector() { return Collections.unmodifiableList(mapViewVector); } public ModeController getModeController(final Component mapView) { return ((MapView) mapView).getModeController(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getModel() */ public MapModel getModel() { final MapView mapView = getMapView(); return mapView == null ? null : getModel(mapView); } public MapModel getModel(final Component mapView) { return ((MapView) mapView).getModel(); } private MapModel getModel(final MapView mapView) { return mapView == null ? null : mapView.getModel(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getSelectedComponent() */ public Component getSelectedComponent() { final MapView mapView = getMapView(); return mapView == null ? null : mapView.getSelected(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getTextColor(org.freeplane.core.model.NodeModel) */ public Color getTextColor(final NodeModel node) { final MapView mapView = getMapView(); if (mapView == null) { return null; } final NodeView nodeView = mapView.getNodeView(node); if (nodeView == null) { return null; } return nodeView.getTextColor(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getViewNumber() */ public int getViewNumber() { return mapViewVector.size(); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#getZoom() */ public float getZoom() { return zoom; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#newMapView(org.freeplane.core.model.MapModel, org.freeplane.core.modecontroller.ModeController) */ public void newMapView(final MapModel map, final ModeController modeController) { final MapView mapView = new MapView(map, modeController); addToOrChangeInMapViews(mapView.getName(), mapView); modeController.getMapController().addMapChangeListener(mapView); ResourceController.getResourceController().addPropertyChangeListener(mapView); mapViewChangeListeners.mapViewCreated(mapView); changeToMapView(mapView); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#nextMapView() */ public void nextMapView() { int index; final int size = mapViewVector.size(); if (getMapView() != null) { index = mapViewVector.indexOf(getMapView()); } else { index = size - 1; } if (index + 1 < size && index >= 0) { changeToMapView((mapViewVector.get(index + 1))); } else if (size > 0) { changeToMapView((mapViewVector.get(0))); } } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#previousMapView() */ public void previousMapView() { int index; final int size = mapViewVector.size(); if (getMapView() != null) { index = mapViewVector.indexOf(getMapView()); } else { index = 0; } if (index > 0) { changeToMapView((mapViewVector.get(index - 1))); } else { if (size > 0) { changeToMapView((mapViewVector.get(size - 1))); } } } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#removeIMapViewChangeListener(org.freeplane.core.frame.IMapChangeListener) */ public void removeMapSelectionListener(final IMapSelectionListener pListener) { mapViewChangeListeners.removeListener(pListener); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#removeMapViewChangeListener(org.freeplane.core.frame.IMapViewChangeListener) */ public void removeMapViewChangeListener(final IMapViewChangeListener pListener) { mapViewChangeListeners.removeListener(pListener); } private boolean sameFile(final URL urlToCheck, final URL mapViewUrl) { if (mapViewUrl == null) { return false; } if (urlToCheck.getProtocol().equals("file") && mapViewUrl.getProtocol().equals("file")) { return (new File(urlToCheck.getFile())).equals(new File(mapViewUrl.getFile())); } return urlToCheck.sameFile(mapViewUrl); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#scrollNodeToVisible(org.freeplane.core.model.NodeModel) */ public void scrollNodeToVisible(final NodeModel node) { final NodeView nodeView = mapView.getNodeView(node); if (nodeView != null) { mapView.scrollNodeToVisible(nodeView); } } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#setZoom(float) */ public void setZoom(final float zoom) { this.zoom = zoom; final MapView mapView = getMapView(); if (mapView == null) { return; } final MapModel map = mapView.getModel(); final MapStyle mapStyle = (MapStyle) mapView.getModeController().getExtension(MapStyle.class); if(mapView.getZoom() == zoom){ return; } mapStyle.setZoom(map, zoom); mapView.setZoom(zoom); setZoomComboBox(zoom); final Object[] messageArguments = { String.valueOf(zoom * 100f) }; final String stringResult = TextUtils.format("user_defined_zoom_status_bar", messageArguments); controller.getViewController().out(stringResult); } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#tryToChangeToMapView(java.lang.String) */ public boolean tryToChangeToMapView(final String mapView) { if (mapView != null && getMapKeys().contains(mapView)) { changeToMapView(mapView); return true; } else { return false; } } public boolean tryToChangeToMapView(URL url) throws MalformedURLException { final String mapExtensionKey = checkIfFileIsAlreadyOpened(url); if (mapExtensionKey != null) { tryToChangeToMapView(mapExtensionKey); return true; } return false; } /* (non-Javadoc) * @see org.freeplane.core.frame.IMapViewController#updateMapViewName() */ public void updateMapViewName() { final MapView r = getMapView(); final String name = r.getModel().getTitle(); addToOrChangeInMapViews(name, getMapView()); changeToMapView(getMapView()); } public boolean isLeftTreeSupported(final Component mapViewComponent) { return ((MapView) mapViewComponent).getLayoutType() != MapViewLayout.OUTLINE; } public Map<String, MapModel> getMaps(final String modename) { final HashMap<String, MapModel> returnValue = new HashMap<String, MapModel>(mapViewVector.size()); for (final MapView mapView : mapViewVector) { if (mapView.getModeController().getModeName().equals(modename)) { returnValue.put(mapView.getName(), getModel(mapView)); } } return Collections.unmodifiableMap(returnValue); } public List<Component> getViews(final MapModel map) { final LinkedList<Component> list = new LinkedList<Component>(); for (final MapView view : mapViewVector) { if (view.getModel().equals(map)) { list.add(view); } } return list; } public void afterViewChange(final Component oldMap, final Component pNewMap) { Controller controller = Controller.getCurrentController(); final ModeController oldModeController = controller.getModeController(); ModeController newModeController = oldModeController; if (pNewMap != null) { setViewportView(pNewMap); final IMapSelection mapSelection = getMapSelection(); final NodeModel selected = mapSelection.getSelected(); mapSelection.scrollNodeToVisible(selected); setZoomComboBox(getZoom()); obtainFocusForSelected(); newModeController = getModeController(pNewMap); if (newModeController != oldModeController) { controller.selectMode(newModeController); } } else { setViewportView(null); } setTitle(); controller.getViewController().viewNumberChanged(getViewNumber()); newModeController.getUserInputListenerFactory().updateMapList(); if (pNewMap != null) { newModeController.setVisible(true); } } public void afterViewClose(final Component oldView) { } public void afterViewCreated(final Component mapView) { } public void beforeViewChange(final Component oldMap, final Component newMap) { Controller controller = Controller.getCurrentController(); final ModeController modeController = controller.getModeController(); if (oldMap != null) { modeController.setVisible(false); } } public Container getViewport() { return scrollPane.getViewport(); } public JScrollPane getScrollPane() { return scrollPane; } private void setViewportView(final Component view) { scrollPane.setViewportView(view); } private void setZoomByItem(final Object item) { final float zoomValue; if (((String) item).equals(userDefinedZoom)) { final float zoom =getZoom(); final int zoomInt = Math.round(100 * zoom); final SpinnerNumberModel spinnerNumberModel = new SpinnerNumberModel(zoomInt, 1, 3200, 1); JSpinner spinner = new JSpinner(spinnerNumberModel); final int option = JOptionPane.showConfirmDialog(scrollPane, spinner, TextUtils.getText("enter_zoom"), JOptionPane.OK_CANCEL_OPTION); if(option == JOptionPane.OK_OPTION) zoomValue = spinnerNumberModel.getNumber().floatValue() / 100; else zoomValue = zoom; } else zoomValue = getZoomValue(item); setZoom(zoomValue); } final private String userDefinedZoom; final private ZoomInAction zoomIn; final private DefaultComboBoxModel zoomModel; final private ZoomOutAction zoomOut; private float getCurrentZoomIndex() { final int selectedIndex = zoomModel.getIndexOf(zoomModel.getSelectedItem()); final int itemCount = zoomModel.getSize(); if (selectedIndex != - 1) { return selectedIndex; } final float userZoom = getZoom(); for (int i = 0; i < itemCount - 1; i++) { if (userZoom < getZoomValue(zoomModel.getElementAt(i))) { return i - 0.5f; } } return itemCount - 1.5f; } public String getItemForZoom(final float f) { return (int) (f * 100F) + "%"; } private void setZoomComboBox(final float f) { setZoomComboBoxRun = true; try { final String toBeFound = getItemForZoom(f); zoomModel.setSelectedItem(toBeFound); } finally { setZoomComboBoxRun = false; } } public void zoomIn() { final float currentZoomIndex = getCurrentZoomIndex(); if (currentZoomIndex < zoomModel.getSize() - 2) { setZoomByItem(zoomModel.getElementAt((int) (currentZoomIndex + 1f))); } } public void zoomOut() { final float currentZoomIndex = getCurrentZoomIndex(); if (currentZoomIndex > 0) { setZoomByItem(zoomModel.getElementAt((int) (currentZoomIndex - 0.5f))); } } public JComboBox createZoomBox() { return new JComboBox(zoomModel); } public void updateMenus(final MenuBuilder menuBuilder) { if (menuBuilder.contains("main_toolbar_zoom")) { final JComboBox zoomBox = new JComboBox(zoomModel); menuBuilder.addElement("main_toolbar_zoom", zoomBox, MenuBuilder.AS_CHILD); // FELIXHACK //zoomBox.setRenderer(new ComboBoxRendererWithTooltip(zoomBox)); } } public String[] getZooms() { return zooms; } private float getZoomValue(final Object item) { final String dirty = (String) item; final String cleaned = dirty.substring(0, dirty.length() - 1); final float zoomValue = Integer.parseInt(cleaned, 10) / 100F; return zoomValue; } private static final String[] zooms = { "25%", "50%", "75%", "100%", "150%", "200%", "300%", "400%" }; public void obtainFocusForSelected() { SwingUtilities.invokeLater(new Runnable() { public void run() { if (getMapView() != null) { final Component selectedComponent = getSelectedComponent(); if(selectedComponent != null){ selectedComponent.requestFocus(); } } } }); } public boolean closeAllMaps() { while (getMapViewVector().size() > 0) { if (getMapView() != null) { final boolean closingNotCancelled = close(false); if (!closingNotCancelled) { return false; } } else { nextMapView(); } } ResourceController.getResourceController().setProperty("antialiasEdges", (antialiasEdges ? "true" : "false")); ResourceController.getResourceController().setProperty("antialiasAll", (antialiasAll ? "true" : "false")); return true; } private boolean antialiasAll = false; private boolean antialiasEdges = false; private boolean getAntialiasAll() { return antialiasAll; } private boolean getAntialiasEdges() { return antialiasEdges; } public void setAntialiasAll(final boolean antialiasAll) { this.antialiasAll = antialiasAll; } public void setAntialiasEdges(final boolean antialiasEdges) { this.antialiasEdges = antialiasEdges; } public Object setEdgesRenderingHint(final Graphics2D g) { final Object renderingHint = g.getRenderingHint(RenderingHints.KEY_ANTIALIASING); if (getAntialiasEdges()) { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } else { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); } return renderingHint; } public void setTextRenderingHint(final Graphics2D g) { if (getAntialiasAll()) { g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } else { g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } } /** */ private void changeAntialias(final String command) { if (command == null) { return; } if (command.equals("antialias_none")) { setAntialiasEdges(false); setAntialiasAll(false); } if (command.equals("antialias_edges")) { setAntialiasEdges(true); setAntialiasAll(false); } if (command.equals("antialias_all")) { setAntialiasEdges(true); setAntialiasAll(true); } final Component mapView = getMapViewComponent(); if (mapView != null) { mapView.repaint(); } } public void propertyChanged(final String propertyName, final String newValue, final String oldValue) { if (propertyName.equals(ViewController.RESOURCE_ANTIALIAS)) { changeAntialias(newValue); } } public void setTitle() { final ModeController modeController = Controller.getCurrentModeController(); if (modeController == null) { controller.getViewController().setTitle(""); return; } final Object[] messageArguments = { TextUtils.getText(("mode_" + modeController.getModeName())) }; final MessageFormat formatter = new MessageFormat(TextUtils.getText("mode_title")); String title = formatter.format(messageArguments); String rawTitle = ""; final MapModel model = getModel(); if (model != null) { rawTitle = getMapViewComponent().getName(); title = rawTitle + (model.isSaved() ? "" : "*") + " - " + title + (model.isReadOnly() ? " (" + TextUtils.getText("read_only") + ")" : ""); final File file = model.getFile(); if (file != null) { title += " " + file.getAbsolutePath(); } } controller.getViewController().setTitle(title); modeController.getUserInputListenerFactory().updateMapList(); } public void setScrollbarsVisible(boolean areScrollbarsVisible) { scrollPane.setHorizontalScrollBarPolicy(areScrollbarsVisible ? JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS : JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scrollPane.setVerticalScrollBarPolicy(areScrollbarsVisible ? JScrollPane.VERTICAL_SCROLLBAR_ALWAYS : JScrollPane.VERTICAL_SCROLLBAR_NEVER); } }