/*
* 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.
*
*/
package org.apache.directory.studio.ldapbrowser.ui.editors.searchresult;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.ldapbrowser.common.BrowserCommonActivator;
import org.apache.directory.studio.ldapbrowser.common.BrowserCommonConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
/**
* The SearchResultEditorQuickFilterWidget implements an instant search
* for the search result edtior. It contains one fields for all displayed values.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class SearchResultEditorQuickFilterWidget
{
/** The filter. */
private SearchResultEditorFilter filter;
/** The parent. */
private Composite parent;
/** The composite. */
private Composite composite;
/** The inner composite. */
private Composite innerComposite;
/** The quick filter value text. */
private Text quickFilterValueText;
/** The clear quick filter button. */
private Button clearQuickFilterButton;
/**
* Creates a new instance of SearchResultEditorQuickFilterWidget.
*
* @param filter the filter
*/
public SearchResultEditorQuickFilterWidget( SearchResultEditorFilter filter )
{
this.filter = filter;
}
/**
* Creates the outer composite.
*
* @param parent the parent
*/
public void createComposite( Composite parent )
{
this.parent = parent;
composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
GridLayout gl = new GridLayout();
gl.marginHeight = 2;
gl.marginWidth = 2;
composite.setLayout( gl );
// Setting the default width and height of the composite to 0
GridData compositeGridData = new GridData( SWT.NONE, SWT.NONE, false, false );
compositeGridData.heightHint = 0;
compositeGridData.widthHint = 0;
composite.setLayoutData( compositeGridData );
innerComposite = null;
}
/**
* Creates the inner composite with its input fields.
*/
private void create()
{
// Reseting the layout of the composite to be displayed correctly
GridData compositeGridData = new GridData( SWT.FILL, SWT.NONE, true, false );
composite.setLayoutData( compositeGridData );
innerComposite = BaseWidgetUtils.createColumnContainer( this.composite, 2, 1 );
quickFilterValueText = new Text( innerComposite, SWT.BORDER );
quickFilterValueText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
quickFilterValueText.addModifyListener( new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
filter.setQuickFilterValue( quickFilterValueText.getText() );
clearQuickFilterButton.setEnabled( !"".equals( quickFilterValueText.getText() ) ); //$NON-NLS-1$
}
} );
clearQuickFilterButton = new Button( innerComposite, SWT.PUSH );
clearQuickFilterButton.setToolTipText( Messages
.getString( "SearchResultEditorQuickFilterWidget.ClearQuickFilterToolTip" ) ); //$NON-NLS-1$
clearQuickFilterButton.setImage( BrowserCommonActivator.getDefault()
.getImage( BrowserCommonConstants.IMG_CLEAR ) );
clearQuickFilterButton.setEnabled( false );
clearQuickFilterButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
if ( !"".equals( quickFilterValueText.getText() ) ) //$NON-NLS-1$
quickFilterValueText.setText( "" ); //$NON-NLS-1$
}
} );
setEnabled( composite.isEnabled() );
composite.layout( true, true );
parent.layout( true, true );
}
/**
* Destroys the inner widget.
*/
private void destroy()
{
// Reseting the layout of the composite with a width and height set to 0
GridData compositeGridData = new GridData( SWT.NONE, SWT.NONE, false, false );
compositeGridData.heightHint = 0;
compositeGridData.widthHint = 0;
composite.setLayoutData( compositeGridData );
if ( !"".equals( quickFilterValueText.getText() ) ) //$NON-NLS-1$
{
quickFilterValueText.setText( "" ); //$NON-NLS-1$
}
innerComposite.dispose();
innerComposite = null;
composite.layout( true, true );
parent.layout( true, true );
}
/**
* Disposes this widget.
*/
public void dispose()
{
if ( innerComposite != null && !innerComposite.isDisposed() )
{
quickFilterValueText.dispose();
quickFilterValueText = null;
clearQuickFilterButton = null;
innerComposite = null;
}
if ( filter != null )
{
composite.dispose();
composite = null;
parent = null;
filter = null;
}
}
/**
* Enables or disables this quick filter widget.
*
* @param enabled true to enable this quick filter widget, false to disable it
*/
public void setEnabled( boolean enabled )
{
if ( composite != null && !composite.isDisposed() )
{
composite.setEnabled( enabled );
}
if ( innerComposite != null && !innerComposite.isDisposed() )
{
innerComposite.setEnabled( enabled );
quickFilterValueText.setEnabled( enabled );
clearQuickFilterButton.setEnabled( enabled );
}
}
/**
* Activates or deactivates this quick filter widget.
*
* @param visible true to create this quick filter widget, false to destroy it
*/
public void setActive( boolean visible )
{
if ( visible && innerComposite == null && composite != null )
{
create();
this.quickFilterValueText.setFocus();
}
else if ( !visible && innerComposite != null && composite != null )
{
destroy();
}
}
}