/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef __com_sun_star_sheet_GlobalSheetSettings_idl__
#define __com_sun_star_sheet_GlobalSheetSettings_idl__

#ifndef __com_sun_star_beans_XPropertySet_idl__
#include <com/sun/star/beans/XPropertySet.idl>
#endif

//=============================================================================

module com {  module sun {  module star {  module sheet {

//=============================================================================

/** contributes properties to access the settings for all spreadsheets of
	a spreadsheet document.
 */
published service GlobalSheetSettings
{
	//-------------------------------------------------------------------------

//! service com::sun::star::beans::PropertySet;
	/** provides access to the properties.
	 */
	interface com::sun::star::beans::XPropertySet;

	//=========================================================================

	/** specifies whether the cursor is moved after entering into cells.
	 */
	[property] boolean MoveSelection;

	//-------------------------------------------------------------------------

	/** contains the direction the cursor moves after entering cells.

		@see com::sun::star::sheet::MoveDirection
	 */
	[property] short MoveDirection;

	//-------------------------------------------------------------------------

	/** specifies whether the enter key can be used to start editing a cell.
	 */
	[property] boolean EnterEdit;

	//-------------------------------------------------------------------------

	/** specifies whether cell formatting is extended when entering data.
	 */
	[property] boolean ExtendFormat;

	//-------------------------------------------------------------------------

	/** specifies whether ranges are highlighted on the sheet when
		editing a formula.
	 */
	[property] boolean RangeFinder;

	//-------------------------------------------------------------------------

	/** specifies whether formula references are extended when cells
		are inserted below or to the right of them.
	 */
	[property] boolean ExpandReferences;

	//-------------------------------------------------------------------------

	/** specifies whether the current selection is highlighted in
		column and row headers.
	 */
	[property] boolean MarkHeader;

	//-------------------------------------------------------------------------

	/** specifies whether the enter key moves the cursor to the column
		it was in before using the tab key to change columns.
	 */
	[property] boolean UseTabCol;

	//-------------------------------------------------------------------------

	/** contains the metric for all spreadsheet documents.

		@see com::sun::star::util::MeasureUnit
	 */
	[property] short Metric;

	//-------------------------------------------------------------------------

	/** contains the default scale for new spreadsheet documents
		(in percent).

		<p>There are several special values:</p>
		<p>-1 = Optimal width</p>
		<p>-2 = Show whole page</p>
		<p>-3 = Page width</p>
	 */
	[property] short Scale;

	//-------------------------------------------------------------------------

	/** specifies whether automatic completion of text in a cell is used.
	 */
	[property] boolean DoAutoComplete;

	//-------------------------------------------------------------------------

	/** contains the function that is displayed in the status bar.

		@see com::sun::star::sheet::StatusBarFunction
	 */
	[property] short StatusBarFunction;

	//-------------------------------------------------------------------------

	/** contains the string lists used for sorting and filling.

		<p>Each string contains the members of a list, separated by
		commas.</p>
	 */
	[property] sequence< string > UserLists;

	//-------------------------------------------------------------------------

	/** specifies the update mode for external linked data.

		<p>0 = always</p>
		<p>1 = never</p>
		<p>2 = on demand</p>
	 */
	[optional, property] short LinkUpdateMode;

	//-------------------------------------------------------------------------

	/** specifies whether all sheets or only selected sheets are printed.
	 */
	[optional, property] boolean PrintAllSheets;

	//-------------------------------------------------------------------------

	/** specifies whether empty pages are printed.
	 */
	[optional, property] boolean PrintEmptyPages;

	//-------------------------------------------------------------------------

	/** specifies whether printer metrics are used for display.
	 */
	[optional, property] boolean UsePrinterMetrics;

	//-------------------------------------------------------------------------

	/** specifies whether a warning is shown before replacing cells
		(i.e. when pasting from clipboard).
	 */
	[optional, property] boolean ReplaceCellsWarning;

};

//=============================================================================

}; }; }; };

#endif

