/*=============================================================================#
 # Copyright (c) 2012, 2021 Original NatTable authors and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0
 # 
 # Contributors:
 #     Original NatTable authors and others - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.ecommons.waltable.print;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.statet.ecommons.waltable.command.AbstractContextFreeCommand;
import org.eclipse.statet.ecommons.waltable.config.IConfigRegistry;


public class PrintCommand extends AbstractContextFreeCommand {

	private final IConfigRegistry configRegistry;
	private final Shell shell;

	public PrintCommand(final IConfigRegistry configRegistry, final Shell shell) {
		this.configRegistry= configRegistry;
		this.shell= shell;
	}
	
	public IConfigRegistry getConfigRegistry() {
		return this.configRegistry;
	}

	public Shell getShell() {
		return this.shell;
	}
}
