/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */
#ifndef __com_sun_star_linguistic2_XDictionaryList_idl__
#define __com_sun_star_linguistic2_XDictionaryList_idl__

#include <com/sun/star/uno/XInterface.idl>
#include <com/sun/star/linguistic2/XDictionary.idl>
#include <com/sun/star/linguistic2/XDictionaryListEventListener.idl>


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

/** is used to manage and maintain a list of dictionaries.

    <P>A dictionary-list may be given to a spell checker or hyphenator
    service implementation on their creation in order to supply a set
    of dictionaries and additional information to be used for
    those purposes.</P>

    @see    com::sun::star::linguistic2::XDictionary
    @see    com::sun::star::uno::XInterface
*/
published interface XDictionaryList : com::sun::star::uno::XInterface
{
    /**
        @returns
            the number of dictionaries in the list.
    */
    short getCount();

    /**
        @returns
             a sequence with an entry for every dictionary
            in the list.

        @see    com::sun::star::linguistic2::XDictionary
    */
    sequence<com::sun::star::linguistic2::XDictionary> getDictionaries();

    /** searches the list for a dictionary with a given name.

         @returns
            the XDictionary with the specified name. If no such
            dictionary exists, `NULL` will be returned.

        @param  aDictionaryName
            specifies the name of the dictionary to look for.

        @see    com::sun::star::linguistic2::XDictionary
    */
    com::sun::star::linguistic2::XDictionary getDictionaryByName(
            [in] string aDictionaryName );

    /** adds a dictionary to the list.

        <P>Additionally, the dictionary-list will add itself to the list of dictionary
         event listeners of that dictionary.</P>

        @returns
             `TRUE` if the dictionary was added successfully,
            `FALSE` otherwise.

        @param  xDictionary
            the dictionary to be added.

        @see    com::sun::star::linguistic2::XDictionary
    */
    boolean addDictionary(
            [in] com::sun::star::linguistic2::XDictionary xDictionary );

    /** removes a single dictionary from the list.

        <P>If the dictionary is still active, it will be deactivated
        first. The dictionary-list will remove itself from the list of
        dictionary event listeners of the dictionary.</P>

        @returns
             `TRUE` if the dictionary was removed successfully, `FALSE`
             otherwise.

        @param  xDictionary
            dictionary to be removed from the list of dictionaries.

        @see    com::sun::star::linguistic2::XDictionary
    */
    boolean removeDictionary(
            [in] com::sun::star::linguistic2::XDictionary xDictionary );

    /** adds an entry to the list of dictionary-list event listeners.

        <P>On dictionary-list events, each entry in the listener list will
         be notified via a call to
        com::sun::star::linguistic2::XDictionaryListEventListener::processDictionaryListEvent().</P>

        @returns
            `TRUE` if the entry was made, `FALSE` otherwise.
            If com::sun::star::lang::XEventListener::disposing()
            was called before, it will always fail.

        @param  xListener
            the object to be notified of dictionary-list events.

        @param  bReceiveVerbose
            `TRUE` if the listener requires more detailed event
            notification than usual.

        @see    com::sun::star::linguistic2::XDictionaryListEventListener
        @see    com::sun::star::linguistic2::XDictionaryListEvent
    */
    boolean addDictionaryListEventListener(
        [in] com::sun::star::linguistic2::XDictionaryListEventListener xListener,
        [in] boolean bReceiveVerbose );

    /** removes an entry from the list of dictionary-list event listeners.

        @returns
            `TRUE` if the object to be removed was found and removed,
            `FALSE` otherwise.

        @param  xListener
            the object to be removed from the listener list.

        @see    com::sun::star::linguistic2::XDictionaryListEventListener
        @see    com::sun::star::linguistic2::XDictionaryListEvent
    */
    boolean removeDictionaryListEventListener(
        [in] com::sun::star::linguistic2::XDictionaryListEventListener xListener );

    /** increases request level for event buffering by one.

         <P>The request level for event buffering is an integer
         counter that is initially set to 0.
        As long as the request level is not 0, events will be buffered
         until the next flushing of the buffer.</P>

        @returns
             the current request level for event buffering.

        @see    com::sun::star::linguistic2::XDictionaryListEvent
        @see    com::sun::star::linguistic2::XDictionaryListEventListener
        @see    com::sun::star::linguistic2::XDictionaryList::endCollectEvents()
        @see    com::sun::star::linguistic2::XDictionaryList::flushEvents()
    */
    short beginCollectEvents();

    /** flushes the event buffer and decreases the request level for
         event buffering by one.

         <P>There should be one matching endCollectEvents call for every
         beginCollectEvents call. Usually you will group these around
         some code where you do not wish to get notified of every single
         event.</P>

        @returns
             the current request level for event buffering.

        @see    com::sun::star::linguistic2::XDictionaryListEvent
        @see    com::sun::star::linguistic2::XDictionaryListEventListener
        @see    com::sun::star::linguistic2::XDictionaryList::beginCollectEvents()
        @see    com::sun::star::linguistic2::XDictionaryList::flushEvents()
    */
    short endCollectEvents();

    /** notifies the listeners of all buffered events and then clears
         that buffer.

        @returns
             the current request level for event buffering.

        @see    com::sun::star::linguistic2::XDictionaryListEvent
        @see    com::sun::star::linguistic2::XDictionaryListEventListener
        @see    com::sun::star::linguistic2::XDictionaryList::beginCollectEvents()
        @see    com::sun::star::linguistic2::XDictionaryList::endCollectEvents()
    */
    short flushEvents();

    /** creates a new dictionary.

        @returns
            an empty dictionary with the given name, language and type.
             `NULL` on failure.

        @param  aName
            is the name of the dictionary (should be unique).

        @param  aLocale
            defines the language of the dictionary.
             Use an empty aLocale for dictionaries which may contain
            entries of all languages.

        @param  eDicType
            specifies the type of the dictionary.

         @param aURL
            is the URL of the location where the dictionary is persistent,
            if the XStorable interface is supported.
            It may be empty, which means the dictionary will not be persistent.

        @see    com::sun::star::linguistic2::XDictionary
        @see    com::sun::star::lang::Locale
        @see    com::sun::star::linguistic2::DictionaryType
    */
    com::sun::star::linguistic2::XDictionary createDictionary(
            [in] string aName,
            [in] com::sun::star::lang::Locale aLocale,
            [in] com::sun::star::linguistic2::DictionaryType eDicType,
            [in] string aURL );

};


}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
