package org.docear.plugin.core.listeners; import java.awt.Dimension; import javax.swing.SwingUtilities; import org.docear.plugin.core.features.DocearInternallyLoadedMap; import org.docear.plugin.core.ui.CreateProjectPagePanel; import org.docear.plugin.core.ui.SelectProjectPagePanel; import org.docear.plugin.core.ui.wizard.Wizard; import org.docear.plugin.core.ui.wizard.WizardSession; import org.docear.plugin.core.ui.wizard.WizardPageDescriptor; import org.docear.plugin.core.workspace.actions.DocearNewProjectAction; import org.docear.plugin.core.workspace.model.DocearWorkspaceProject; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.map.MapModel; import org.freeplane.features.mode.Controller; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.model.project.AWorkspaceProject; public class MapWithoutProjectHandler { public static AWorkspaceProject showProjectSelectionWizard(MapModel map) { return showProjectSelectionWizard(map, true); } public static AWorkspaceProject showProjectSelectionWizard(MapModel map, boolean showCloseButton) { final Wizard wizard = new Wizard(UITools.getFrame()); wizard.getSession().set(MapModel.class, map); initWizard(wizard, showCloseButton); int ret = wizard.show(); if(ret == Wizard.OK_OPTION) { DocearWorkspaceProject project = wizard.getSession().get(DocearWorkspaceProject.class); Boolean contextObject = wizard.getSession().get(Boolean.class); if (wizard.getSession().get(Boolean.class) != null) { if (contextObject) { DocearNewProjectAction.createProject(project); } else { //skip action means close map, hoewever, do not close internally opened maps if (map.getExtension(DocearInternallyLoadedMap.class) == null) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Controller.getCurrentController().close(true); } }); } return null; } } if(project != null) { WorkspaceController.getMapModelExtension(map).setProject(project); try { LogUtils.info("set project \""+project+"\" for map: \""+map.getTitle()); } catch (Exception e) { } } return project; } return null; } private static void initWizard(Wizard wizard, boolean showCloseButton) { WizardPageDescriptor desc = new WizardPageDescriptor("page.project.select", new SelectProjectPagePanel(showCloseButton)) { public WizardPageDescriptor getBackPageDescriptor(WizardSession context) { AWorkspaceProject project = ((SelectProjectPagePanel)getPage()).getSelectedProject(); context.set(DocearWorkspaceProject.class, project); return Wizard.FINISH_PAGE; } public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { return context.getModel().getPage("page.project.create"); } public WizardPageDescriptor getSkipPageDescriptor(WizardSession context) { context.set(Boolean.class, false); return Wizard.FINISH_PAGE; } }; wizard.registerWizardPanel(desc); wizard.setStartPage(desc.getIdentifier()); wizard.setCancelEnabled(false); //new project page desc = new WizardPageDescriptor("page.project.create", new CreateProjectPagePanel()) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { context.set(DocearWorkspaceProject.class, ((CreateProjectPagePanel) getPage()).getProject()); context.set(Boolean.class, true); return Wizard.FINISH_PAGE; } public WizardPageDescriptor getBackPageDescriptor(WizardSession context) { return context.getModel().getPage("page.project.select"); } @Override public void aboutToDisplayPage(WizardSession context) { super.aboutToDisplayPage(context); context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.controls.finish")); } @Override public void displayingPage(WizardSession context) { super.displayingPage(context); context.setWizardTitle(TextUtils.getText("workspace.action.node.new.project.dialog.title")); context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.controls.finish")); } }; desc.getPage().setPreferredSize(new Dimension(640, 450)); wizard.registerWizardPanel(desc); } }