/*
* 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.common.widgets.search;
import org.apache.directory.api.ldap.model.message.SearchScope;
import org.apache.directory.studio.common.ui.widgets.AbstractWidget;
import org.eclipse.swt.SWT;
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.Group;
/**
* The ScopeWidget could be used to select the scope of a search.
* It is composed of a group with radio buttons.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ScopeWidget extends AbstractWidget
{
/** The initial scope. */
private SearchScope initialScope;
/** The scope group. */
private Group scopeGroup;
/** The scope object button. */
private Button scopeObjectButton;
/** The scope onelevel button. */
private Button scopeOnelevelButton;
/** The scope subtree button. */
private Button scopeSubtreeButton;
/**
* Creates a new instance of ScopeWidget with the given
* initial scope.
*
* @param initialScope the initial scope
*/
public ScopeWidget( SearchScope initialScope )
{
this.initialScope = initialScope;
}
/**
* Creates a new instance of ScopeWidget with initial scope
* {@link SearchScope.OBJECT}.
*/
public ScopeWidget()
{
this.initialScope = SearchScope.OBJECT;
}
/**
* Creates the widget.
*
* @param parent the parent
*/
public void createWidget( Composite parent )
{
// Scope group
scopeGroup = new Group( parent, SWT.NONE );
scopeGroup.setText( Messages.getString( "ScopeWidget.Scope" ) ); //$NON-NLS-1$
scopeGroup.setLayout( new GridLayout( 1, false ) );
scopeGroup.setLayoutData( new GridData( GridData.FILL_BOTH ) );
// Object radio
scopeObjectButton = new Button( scopeGroup, SWT.RADIO );
scopeObjectButton.setText( Messages.getString( "ScopeWidget.Object" ) ); //$NON-NLS-1$
scopeObjectButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
notifyListeners();
}
} );
// Onelevel radio
scopeOnelevelButton = new Button( scopeGroup, SWT.RADIO );
scopeOnelevelButton.setText( Messages.getString( "ScopeWidget.OneLevel" ) ); //$NON-NLS-1$
scopeOnelevelButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
notifyListeners();
}
} );
// subtree button
scopeSubtreeButton = new Button( scopeGroup, SWT.RADIO );
scopeSubtreeButton.setText( Messages.getString( "ScopeWidget.Subtree" ) ); //$NON-NLS-1$
scopeSubtreeButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
notifyListeners();
}
} );
setScope( initialScope );
}
/**
* Sets the scope.
*
* @param scope the scope
*/
public void setScope( SearchScope scope )
{
initialScope = scope;
scopeObjectButton.setSelection( initialScope == SearchScope.OBJECT );
scopeOnelevelButton.setSelection( initialScope == SearchScope.ONELEVEL );
scopeSubtreeButton.setSelection( initialScope == SearchScope.SUBTREE );
}
/**
* Gets the scope.
*
* @return the scope
*/
public SearchScope getScope()
{
SearchScope scope;
if ( scopeSubtreeButton.getSelection() )
{
scope = SearchScope.SUBTREE;
}
else if ( scopeOnelevelButton.getSelection() )
{
scope = SearchScope.ONELEVEL;
}
else if ( scopeObjectButton.getSelection() )
{
scope = SearchScope.OBJECT;
}
else
{
scope = SearchScope.ONELEVEL;
}
return scope;
}
/**
* Sets the enabled state of the widget.
*
* @param b true to enable the widget, false to disable the widget
*/
public void setEnabled( boolean b )
{
scopeGroup.setEnabled( b );
scopeObjectButton.setEnabled( b );
scopeOnelevelButton.setEnabled( b );
scopeSubtreeButton.setEnabled( b );
}
}