/******************************************************************************
 * Copyright (c) 2002, 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.gmf.runtime.diagram.ui.internal.pagesetup;

import java.util.Locale;

/**
 * Contains default values that will be used to initialize printing
 * preferences declared in WorkspaceViewerProperties.PREF.  Two sets of preferences 
 * exist: one set in workspace and one set in diagram preference store.
 * 
 * @author etworkow
 * @canBeSeenBy org.eclipse.gmf.runtime.diagram.ui.*
 */
public class DefaultValues {

	/** Represents default value for WorkspaceViewerProperties.PREF_USE_WORKSPACE_SETTINGS. */
	public static boolean DEFAULT_USE_WORKSPACE_SETTINGS = true;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_USE_DIAGRAM_SETTINGS. */
	public static boolean DEFAULT_USE_DIAGRAM_SETTINGS = false;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_USE_INCHES. */
	public static boolean DEFAULT_INCHES = !useDefaultMetricMeasures();
	
	/** Represents default value for WorkspaceViewerProperties.PREF_USE_MILLIM. */
	public static boolean DEFAULT_MILLIM = useDefaultMetricMeasures();
	
	/** Represents default value for WorkspaceViewerProperties.PREF_USE_PORTRAIT. */
	public static boolean DEFAULT_PORTRAIT = true;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_USE_LANDSCAPE. */
	public static boolean DEFAULT_LANDSCAPE = false;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_PAGE_SIZE. */
	public static String DEFAULT_PAGE_SIZE = getLocaleSpecificPageType().getName();
	
	/** Represents default value for WorkspaceViewerProperties.PREF_PAGE_HEIGHT. */
	public static double DEFAULT_PAGE_WIDTH = getLocaleSpecificPageType().getWidth();
	
	/** Represents default value for WorkspaceViewerProperties.PREF_PAGE_WIDTH. */
	public static double DEFAULT_PAGE_HEIGHT = getLocaleSpecificPageType().getHeight();
	
	/** Represents default value for WorkspaceViewerProperties.PREF_MARGIN_TOP. */
	public static double DEFAULT_MARGIN_TOP = 0.5;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_MARGIN_BOTTOM. */
	public static double DEFAULT_MARGIN_BOTTOM = 0.5;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_MARGIN_LEFT. */
	public static double DEFAULT_MARGIN_LEFT = 0.5;
	
	/** Represents default value for WorkspaceViewerProperties.PREF_MARGIN_RIGHT. */
	public static double DEFAULT_MARGIN_RIGHT = 0.5;
			
	/** Enforce a minimum margin to take printer limitations into account */
	public static double MINIMUM_MARGIN_TOP = 0.25;
	
	/** Enforce a minimum margin to take printer limitations into account */
	public static double MINIMUM_MARGIN_BOTTOM = 0.25;
	
	/** Enforce a minimum margin to take printer limitations into account */
	public static double MINIMUM_MARGIN_LEFT = 0.25;
	
	/** Enforce a minimum margin to take printer limitations into account */
	public static double MINIMUM_MARGIN_RIGHT = 0.25;
	
	/**
	 * Returns locale specific page size.
	 * 
	 * @return PSPageType PSPageType.LETTER on US/Canada locale, PSPageType.A4 otherwise.
	 */
	static public PageSetupPageType getLocaleSpecificPageType() {
		if (!useDefaultMetricMeasures()) {
			return PageSetupPageType.LETTER;
		}
		return PageSetupPageType.A4;
	}
	
	/**
	 * Inspects the locale to determine if we are in a location that does 
	 * use the metric system by default.
	 * 
	 * @return boolean true if we are in a location that uses metric.
	 */
	static public boolean useDefaultMetricMeasures() {
		Locale defaultLocale = Locale.getDefault();
		String defaultCountry = defaultLocale.getCountry();
		
		if (defaultCountry != null
				&& (defaultCountry.equals(Locale.US.getCountry()) || 
					defaultCountry.equals(Locale.CANADA.getCountry()) || 
				    (defaultCountry.length() == 0 && defaultLocale.getLanguage().equals(Locale.ENGLISH.getLanguage())))) {
			return false;
		}
		return true;
	}
}
