package org.docear.plugin.services.recommendations.mode; import java.net.URL; import java.util.Collections; import javax.swing.Box; import javax.swing.JPopupMenu; import javax.swing.JTabbedPane; import javax.swing.SwingConstants; import org.docear.plugin.core.DocearController; import org.docear.plugin.core.event.DocearEvent; import org.docear.plugin.services.recommendations.actions.RecommendationsRefreshAction; import org.freeplane.core.resources.ResourceBundles; import org.freeplane.core.ui.MenuBuilder; import org.freeplane.core.ui.components.FreeplaneToolBar; import org.freeplane.core.ui.components.JResizer.Direction; import org.freeplane.core.ui.components.OneTouchCollapseResizer; import org.freeplane.core.ui.components.OneTouchCollapseResizer.CollapseDirection; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.clipboard.ClipboardController; import org.freeplane.features.cloud.CloudController; import org.freeplane.features.edge.EdgeController; import org.freeplane.features.filter.FilterController; import org.freeplane.features.icon.IconController; import org.freeplane.features.link.LinkController; import org.freeplane.features.map.NodeModel; import org.freeplane.features.map.filemode.CenterAction; import org.freeplane.features.map.filemode.OpenPathAction; import org.freeplane.features.mapio.MapIO; import org.freeplane.features.mode.Controller; import org.freeplane.features.mode.IPropertyHandler; import org.freeplane.features.mode.ModeController; import org.freeplane.features.nodelocation.LocationController; import org.freeplane.features.nodestyle.NodeStyleController; import org.freeplane.features.styles.LogicalStyleController; import org.freeplane.features.styles.MapStyle; import org.freeplane.features.text.TextController; import org.freeplane.features.ui.ViewController; import org.freeplane.features.url.UrlManager; import org.freeplane.view.swing.features.nodehistory.NodeHistory; import org.freeplane.view.swing.ui.UserInputListenerFactory; public class DocearRecommendationsModeController extends ModeController { static public final String MODENAME = "DcrRecommendations"; private DocearRecommendationsModeController(final Controller controller) { super(controller); setLanguage(); } @Override public String getModeName() { return DocearRecommendationsModeController.MODENAME; } @Override public void startup() { DocearController.getController().dispatchDocearEvent(new DocearEvent(this, "DOCEAR_MODE_STARTUP")); final Controller controller = getController(); this.getUserInputListenerFactory().getMapPopup().setName(TextUtils.getText("recommendations.popup_title")); controller.getMapViewManager().changeToMode(MODENAME); if (controller.getMap() == null) { ((DocearRecommendationsMapController) getMapController()).newMap(); } super.startup(); } @Override public void shutdown() { super.shutdown(); DocearController.getController().dispatchDocearEvent(new DocearEvent(this, "DOCEAR_MODE_SHUTDOWN")); } public static DocearRecommendationsModeController createController() { final Controller controller = Controller.getCurrentController(); return createController(controller); } public DocearRecommendationsMapController getMapController() { return (DocearRecommendationsMapController) super.getMapController(); } public static DocearRecommendationsModeController createController(Controller controller) { DocearRecommendationsModeController modeController = new DocearRecommendationsModeController(controller); final UserInputListenerFactory userInputListenerFactory = new UserInputListenerFactory(modeController); modeController.setUserInputListenerFactory(userInputListenerFactory); controller.addModeController(modeController); controller.selectModeForBuild(modeController); controller.addAction(new RecommendationsRefreshAction()); new DocearRecommendationsMapController(modeController); UrlManager.install(new UrlManager()); MapIO.install(modeController); IconController.install(new IconController(modeController)); NodeStyleController.install(new NodeStyleController(modeController)); EdgeController.install(new EdgeController(modeController)); TextController.install(new TextController(modeController)); LinkController.install(new LinkController()); CloudController.install(new CloudController(modeController)); ClipboardController.install(new ClipboardController()); LocationController.install(new LocationController()); LogicalStyleController.install(new LogicalStyleController(modeController)); MapStyle.install(true); NodeStyleController.getController().addShapeGetter(new Integer(0), new IPropertyHandler<String, NodeModel>() { public String getProperty(final NodeModel node, final String currentValue) { return "fork"; } }); modeController.addAction(new CenterAction()); modeController.addAction(new OpenPathAction()); userInputListenerFactory.setNodePopupMenu(new JPopupMenu()); final FreeplaneToolBar toolBar = new FreeplaneToolBar("main_toolbar", SwingConstants.HORIZONTAL); toolBar.putClientProperty(ViewController.VISIBLE_PROPERTY_KEY, "toolbarVisible"); userInputListenerFactory.addToolBar("/main_toolbar", ViewController.TOP, toolBar); userInputListenerFactory.addToolBar("/filter_toolbar", ViewController.TOP, FilterController.getCurrentFilterController().getFilterToolbar()); userInputListenerFactory.addToolBar("/status", ViewController.BOTTOM, controller.getViewController().getStatusBar()); NodeHistory.install(modeController); Box resisableTabs = Box.createHorizontalBox(); resisableTabs.add(new OneTouchCollapseResizer(Direction.RIGHT, CollapseDirection.COLLAPSE_RIGHT)); resisableTabs.add(new JTabbedPane()); userInputListenerFactory.addToolBar("/format", ViewController.RIGHT, resisableTabs); modeController.updateMenus(userInputListenerFactory, modeController.getClass().getResource("/xml/recommendationsMode.xml")); return modeController; } private void updateMenus(UserInputListenerFactory userInputListenerFactory, URL resource) { updateMenus(resource.toExternalForm(), Collections.<String> emptySet()); final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder(); final boolean isUserDefined = resource.getProtocol().equalsIgnoreCase("file"); try { menuBuilder.processMenuCategory(resource, Collections.<String> emptySet()); } catch (RuntimeException e) { if (isUserDefined) { LogUtils.warn(e); } } final ViewController viewController = Controller.getCurrentController().getViewController(); viewController.updateMenus(menuBuilder); } public void setLanguage() { final String DEFAULT_LANGUAGE = "en"; ResourceBundles resBundle = ((ResourceBundles)Controller.getCurrentController().getResourceController().getResources()); String lang = resBundle.getLanguageCode(); if (lang == null || lang.equals(ResourceBundles.LANGUAGE_AUTOMATIC)) { lang = DEFAULT_LANGUAGE; } URL res = this.getClass().getResource("/translations/Resources_"+lang+".properties"); if (res == null) { lang = DEFAULT_LANGUAGE; res = this.getClass().getResource("/translations/Resources_"+lang+".properties"); } if (res == null) { return; } resBundle.addResources(resBundle.getLanguageCode(), res); } }