/* -*- 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_frame_XPopupMenuController_idl__
#define __com_sun_star_frame_XPopupMenuController_idl__

#include <com/sun/star/awt/XPopupMenu.idl>


module com { module sun { module star { module frame {


/** provides data to a pop-up menu controller implementation to
    fill and update a pop-up menu dynamically.

    <p>
    A pop-up menu controller gets a com::sun::star::awt::XPopupMenu
    from its parent menu implementation. The controller has to fill this pop-up
    menu with a set of menu items and/or sub menus. The parent menu implementation
    briefs the controller whenever the pop-up menu gets activated by a user.
    </p>

    @since OOo 2.0
*/
interface XPopupMenuController : com::sun::star::uno::XInterface
{
    /** provides a com::sun::star::awt::XPopupMenu to a
        pop-up menu controller implementation. The controller must fill this
        pop-up menu with its functions.

        @param PopupMenu
            An empty pop-up menu that must be filled by the pop-up menu controller.
    */
    void setPopupMenu( [in] com::sun::star::awt::XPopupMenu PopupMenu );

    /** briefs the pop-up menu controller to update the contents of the provided
        pop-up menu to reflect the current state.

        <p>A controller should <b>never</b> update the pop-up menu structure on its
        own to prevent performance problems. A better way would be that a controller
        registers itself as status listener to for a command URL and immediately
        deregister after that. Therefore status updates will not be send regularly
        for a non visible pop-up menu.
        </p>
    */
    void updatePopupMenu();
};

}; }; }; };


#endif

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