/**************************************************************
 * 
 * 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_embed_EmbedStates_idl__
#define __com_sun_star_embed_EmbedStates_idl__


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

module com { module sun { module star { module embed {

//============================================================================
/** This constant set contains possible states for
<type>EmbeddedObject</type>.
*/
published constants EmbedStates
{
	//------------------------------------------------------------------------
	/** "Loaded" - the persistent representation of the object is loaded in
		memory.

		<p> 
		The object is created and assigned with a persistent entry, 
		and a view representation ( metafile and etc. ) can be retrieved
		( if there is any ).
		</p>
	 */
	const long LOADED = 0;

	//------------------------------------------------------------------------
	/** "Running" - the object is connected and loaded.
	
		<p>
		The object has a connection to the container client and a component
		loaded from persistent entry. In case of internal document it also
		means existing of document model that implements
		<type scope="com::sun::star::frame">XModel</type> interface.
		</p>
	 */
	const long RUNNING = 1;

	//------------------------------------------------------------------------
	/** "Active" - the object is activated in separate window
		( outplace activation ).
	 */
	const long ACTIVE = 2;

	//------------------------------------------------------------------------
	/** "Inplace active" - the object has own window in the container's
		window.

		<p>
		The object is activated and has it's own window in the container's
		window that allows object to process mouse events and control own
		rendering.
		</p>
	 */
	const long INPLACE_ACTIVE = 3;

	//------------------------------------------------------------------------
	/** "UI active" - the inplace active object that has user interface.

		<p>
		The object is inplace active, allowed to have menues, toolbars,
		keyboard accelerators, and has the focus.
		</p>
	 */
	const long UI_ACTIVE = 4;
};

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

}; }; }; };

#endif

