/*******************************************************************************
 * Copyright (c) 2000, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.custom;

/**
 * Use StyledTextPrintOptions to specify printing options for the
 * StyledText.print(Printer, StyledTextPrintOptions) API.
 * <p>
 * The following example prints a right aligned page number in the footer,
 * sets the job name to "Example" and prints line background colors but no other
 * formatting:
 * </p>
 * <pre>
 * StyledTextPrintOptions options = new StyledTextPrintOptions();
 * options.footer = "\t\t&lt;page&gt;"; 
 * options.jobName = "Example";
 * options.printLineBackground = true;
 * 
 * Runnable runnable = styledText.print(new Printer(), options); 
 * runnable.run();
 * </pre>
 *
 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
 *
 * @since 2.1
 */
public class StyledTextPrintOptions {
	/**
	 * Page number placeholder constant for use in <code>header</code>
	 * and <code>footer</code>. Value is <code>&lt;page&gt;</code>
	 */
	public static final String PAGE_TAG = "<page>";
	/**
	 * Separator constant for use in <code>header</code> and
	 * <code>footer</code>. Value is <code>\t</code>
	 */
	public static final String SEPARATOR = "\t";
	/**
	 * Formatted text to print in the header of each page.
	 * <p>"left '\t' center '\t' right"</p>
	 * <p>left, center, right = &lt;page&gt; | #CDATA</p>
	 * <p>Header and footer are defined as three separate regions for arbitrary
	 * text or the page number placeholder &lt;page&gt;
	 * (<code>StyledTextPrintOptions.PAGE_TAG</code>). The three regions are 
	 * left aligned, centered and right aligned. They are separated by a tab
	 * character (<code>StyledTextPrintOptions.SEPARATOR</code>).
	 */
	public String header = null;
	/**
	 * Formatted text to print in the footer of each page.
	 * <p>"left '\t' center '\t' right"</p>
	 * <p>left, center, right = &lt;page&gt; | #CDATA</p>
	 * <p>Header and footer are defined as three separate regions for arbitrary
	 * text or the page number placeholder &lt;page&gt;
	 * (<code>StyledTextPrintOptions.PAGE_TAG</code>). The three regions are 
	 * left aligned, centered and right aligned. They are separated by a tab
	 * character (<code>StyledTextPrintOptions.SEPARATOR</code>).
	 */
	public String footer = null;
	/**
	 * Name of the print job.
	 */
	public String jobName = null;
	
	/**
	 * Print the text foreground color. Default value is <code>false</code>.
	 */
	public boolean printTextForeground = false;
	/**
	 * Print the text background color. Default value is <code>false</code>.
	 */
	public boolean printTextBackground = false;
	/**
	 * Print the font styles. Default value is <code>false</code>.
	 */
	public boolean printTextFontStyle = false;
	/**
	 * Print the line background color. Default value is <code>false</code>.
	 */
	public boolean printLineBackground = false;
	
	/**
	 * Print line numbers. Default value is <code>false</code>.
	 * 
	 * @since 3.3
	 */
	public boolean printLineNumbers = false;
	
	/**
	 * Labels used for printing line numbers.
	 * 
	 * @since 3.4
	 */
	public String[] lineLabels = null;
	
}
