/* ******************************************************************************
* 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 org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.PrinterData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.actions.ActionFactory;
import org.xmind.gef.IGraphicalViewer;
import org.xmind.gef.ui.actions.PageAction;
import org.xmind.gef.ui.editor.IGraphicalEditor;
import org.xmind.gef.ui.editor.IGraphicalEditorPage;
import org.xmind.ui.internal.print.PageSetupDialog;
import org.xmind.ui.internal.print.PrintClient;
import org.xmind.ui.internal.print.PrintConstants;
import org.xmind.ui.mindmap.IMindMap;
public class PrintMapAction extends PageAction {
public PrintMapAction(IGraphicalEditorPage page) {
super(ActionFactory.PRINT.getId(), page);
}
private IMindMap findMindMap(IGraphicalEditorPage page) {
IMindMap map = (IMindMap) page.getAdapter(IMindMap.class);
if (map != null)
return map;
if (page.getInput() instanceof IMindMap)
return (IMindMap) page.getInput();
IGraphicalViewer viewer = page.getViewer();
if (viewer != null) {
map = (IMindMap) viewer.getAdapter(IMindMap.class);
if (map != null)
return map;
if (viewer.getInput() instanceof IMindMap)
return (IMindMap) viewer.getInput();
}
return null;
}
public void run() {
IGraphicalEditor editor = getEditor();
if (editor == null)
return;
IGraphicalEditorPage page = getPage();
if (page == null)
return;
// IGraphicalViewer viewer = page.getViewer();
// if (viewer == null || !(viewer instanceof IMindMapViewer))
// return;
//
// IMindMapViewer mmv = (IMindMapViewer) viewer;
// IMindMap mindMap = mmv.getMindMap();
// if (mindMap == null)
// return;
Shell parentShell = editor.getSite().getShell();
if (parentShell == null || parentShell.isDisposed())
return;
IMindMap mindMap = findMindMap(page);
if (mindMap == null)
return;
PageSetupDialog pageSetupDialog = new PageSetupDialog(parentShell,
mindMap);
while (true) {
int open = pageSetupDialog.open();
if (open == PageSetupDialog.CANCEL)
return;
IDialogSettings settings = pageSetupDialog.getSettings();
PrinterData printerData = new PrinterData();
try {
printerData.orientation = settings
.getInt(PrintConstants.ORIENTATION);
} catch (NumberFormatException e) {
printerData.orientation = PrinterData.LANDSCAPE;
}
PrintDialog printDialog = new PrintDialog(parentShell);
printDialog.setPrinterData(printerData);
printerData = printDialog.open();
if (printerData != null) {
print(mindMap, printerData, settings, page.getViewer(),
parentShell);
return;
}
}
}
private void print(final IMindMap map, PrinterData printerData,
IDialogSettings settings, final IGraphicalViewer sourceViewer,
Shell parentShell) {
final PrintClient client = new PrintClient(getJobName(map),
parentShell, printerData, settings);
Display display = parentShell.getDisplay();
try {
BusyIndicator.showWhile(display, new Runnable() {
public void run() {
//client.print(sourceViewer);
client.print(map);
}
});
} finally {
client.dispose();
}
}
private String getJobName(IMindMap map) {
return map.getCentralTopic().getTitleText()
.replaceAll("\r\n|\r|\n", " "); //$NON-NLS-1$ //$NON-NLS-2$
}
}