/**************************************************************
 * 
 * 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_form_NavigationBarMode_idl__ 
#define __com_sun_star_form_NavigationBarMode_idl__ 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module form {  
 
//============================================================================= 
 
/** describes in which way the navigation of the records of a database form is performed.
 */
published enum NavigationBarMode
{ 
	//------------------------------------------------------------------------- 
	 
	/** no navigation bar is provided and navigation on the current
		form is only possible with the keyboard (TAB/SHIFT TAB).

		<p>Note that when this mode is set, a simultaneous <type>TabulatorCycle</type>
		value of <member>TabulatorCycle::CURRENT</member> means that you cannot travel
		between records anymore.</p>

		@see TabulatorCycle
	 */
	NONE, 
 
	//------------------------------------------------------------------------- 
	 
	/** a navigation bar is provided and navigation will be performed
		on the current/active form.
		<p>This is the default and most often encountered mode.</p>
	 */
	CURRENT, 
 
	//------------------------------------------------------------------------- 
	 
	/** a navigation bar is provided and navigation will be performed
		on the parent of the current/active form.

		<p>This options is usually used for forms containing an grid control only.
		In such a form, the control has it's own navigation elements, so there is
		no need to use the navigation bar for the form, but rather for it's parent.
		</p>
	 */
	PARENT 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
