/**************************************************************
 * 
 * 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_EntryInitModes_idl__
#define __com_sun_star_embed_EntryInitModes_idl__


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

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

//============================================================================
/** This constant set contains possible modes to initialize object
	persistance.

	@see XEmbedPersist
*/
published constants EntryInitModes
{
	// -----------------------------------------------------------------------
	/** In case object persistance is created based on existing entry,
		the object should be initialized from this entry. Otherwise
		the object should be initialized as a new one.
	 */
	const long DEFAULT_INIT = 0;

	// -----------------------------------------------------------------------
	/** The object should be initialized as a new empty one.
	 */
	const long TRUNCATE_INIT = 1;

	// -----------------------------------------------------------------------
	/** The object should be initialized as a new one only in case it still
		was not initialized. If the object initialized already do not
		reinitialize it.
	 */
	const long NO_INIT = 2;

	// -----------------------------------------------------------------------
	/** The object should be initialized using additional arguments from
		provided
		<type scope="com::sun::star::document">MediaDescriptor</type>.
	 */
	const long MEDIA_DESCRIPTOR_INIT = 3;

	// -----------------------------------------------------------------------
	/** The object should be initialized as a link using URL provided in
		additional arguments.
	 */
	const long URL_LINK_INIT = 4;
};

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

}; }; }; };

#endif

