/*******************************************************************************
 * Copyright (c) 2016 ALL4TEC & CEA LIST.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     ALL4TEC & CEA LIST - initial API and implementation
 ******************************************************************************/
package org.polarsys.esf.core.common.ui.actions;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
import org.polarsys.esf.core.common.ui.widget.FilterComposite;

/**
 * Control contribution used to manage the widgets used to apply 
 * filters on listener parts.
 *   
 * @author  $Author: jdumont $
 * @version $Revision: 83 $
 */
public class FilterPartControlContribution
    extends WorkbenchWindowControlContribution {
    
    /** The filter composite. */
    private FilterComposite mFilterComposite = null;

    /**
     * The default constructor.
     */
    public FilterPartControlContribution() {
        // Call the parent constructor
        super();
    }
    
    /**
     * Creates and returns the control for this contribution item 
     * under the given parent composite.
     * 
     * @param pParent The parent composite
     * @return The new control
     */
    @Override
    protected Control createControl(final Composite pParent) {
        // Create and remember of the filter composite 
        mFilterComposite = new FilterComposite(pParent);
        
        return mFilterComposite;
    }
}
