/**************************************************************
 * 
 * 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_linguistic2_LinguServiceEvent_idl__
#define __com_sun_star_linguistic2_LinguServiceEvent_idl__

#ifndef __com_sun_star_lang_EventObject_idl__
#include <com/sun/star/lang/EventObject.idl>
#endif

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

module com { module sun { module star { module linguistic2 {

//=============================================================================
/** represents a linguistic service event.

	<P>This type of event may be broadcast by a spellchecker or
	hyphenator service implementation to inform its listeners (clients)
	that the results of previous function calls may be different now.
	It is possible to suggest that hyphenation should be done again
	and/or the spelling of previously incorrect or correct words
	should be checked again.</P>

    @see    <type scope="com::sun::star::linguistic2">XLinguServiceEventBroadcaster</type>
    @see    <type scope="com::sun::star::linguistic2">XLinguServiceEventListener</type>
    @see    <type scope="com::sun::star::linguistic2">SpellChecker</type>
    @see    <type scope="com::sun::star::linguistic2">Hyphenator</type>
    @see    <type scope="com::sun::star::lang">EventObject</type>
*/
published struct LinguServiceEvent : com::sun::star::lang::EventObject
{
	//-------------------------------------------------------------------------
	/** The type of event.

	 	<p>The value may be combined via logical OR from those values
        defined in <type scope="com::sun::star::linguistic2">LinguServiceEventFlags</type></p>
	*/
	short nEvent;

};

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

}; }; }; };

#endif

