/*
* This file is part of the OpenSCADA project
* Copyright (C) 2006-2011 TH4 SYSTEMS GmbH (http://th4-systems.com)
*
* OpenSCADA is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenSCADA 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 Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenSCADA. If not, see
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
*/
package org.openscada.hd.ui.printing;
import java.util.Map;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.Printer;
import org.eclipse.swt.printing.PrinterData;
import org.openscada.hd.Value;
import org.openscada.hd.ValueInformation;
import org.openscada.hd.ui.connection.handler.AbstractQueryHandler;
import org.openscada.hd.ui.data.AbstractQueryBuffer;
public class PrintCommand extends AbstractQueryHandler
{
@Override
public Object execute ( final ExecutionEvent event ) throws ExecutionException
{
for ( final AbstractQueryBuffer query : getQueries () )
{
printQuery ( query );
}
return null;
}
private void printQuery ( final AbstractQueryBuffer query )
{
final ValueInformation[] vis = query.getValueInformation ();
final Map<String, Value[]> values = query.getValues ();
final PrintDialog dlg = new PrintDialog ( getWorkbenchWindow ().getShell () );
final PrinterData printerData = dlg.open ();
if ( printerData == null )
{
return;
}
printerData.orientation = PrinterData.LANDSCAPE;
final Printer printer = new Printer ( printerData );
try
{
final PrintProcessor processor = new PrintProcessor ( vis, values );
processor.print ( printer );
}
finally
{
printer.dispose ();
}
}
}