/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.actions; import java.io.File; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.jface.action.Action; import org.eclipse.jface.util.SafeRunnable; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; import org.xmind.ui.internal.MindMapMessages; import org.xmind.ui.internal.MindMapTemplateManager; import org.xmind.ui.internal.dialogs.DialogMessages; import org.xmind.ui.internal.editor.MME; import org.xmind.ui.internal.editor.MindMapEditor; import org.xmind.ui.mindmap.MindMapUI; public class SaveAsTemplateAction extends Action implements IWorkbenchAction, IPartListener { private IWorkbenchWindow window; private MindMapEditor targetEditor; public SaveAsTemplateAction(String id, IWorkbenchWindow window) { super(); setId(id); this.window = window; setText(MindMapMessages.SaveAsTemplate_text); setToolTipText(MindMapMessages.SaveAsTemplate_toolTip); window.getPartService().addPartListener(this); } public void run() { if (targetEditor == null) return; SafeRunner.run(new SafeRunnable() { public void run() throws Exception { targetEditor.doSaveAs(new NullProgressMonitor(), MindMapUI.FILE_EXT_TEMPLATE, DialogMessages.TemplateFilterName); IEditorInput input = targetEditor.getEditorInput(); if (input != null) { File file = MME.getFile(input); if (file != null) { saveTemplateFromFile(file); } } } }); } private void saveTemplateFromFile(File file) { MindMapTemplateManager.getInstance().importCustomTemplate( file.getAbsolutePath()); } public void dispose() { targetEditor = null; if (window != null) { window.getPartService().removePartListener(this); window = null; } } public void partActivated(IWorkbenchPart part) { if (part instanceof MindMapEditor) { this.targetEditor = (MindMapEditor) part; } else { this.targetEditor = null; } setEnabled(this.targetEditor != null); } public void partBroughtToTop(IWorkbenchPart part) { } public void partClosed(IWorkbenchPart part) { if (part == this.targetEditor) { this.targetEditor = null; setEnabled(this.targetEditor != null); } } public void partDeactivated(IWorkbenchPart part) { } public void partOpened(IWorkbenchPart part) { } }