blob: 70856a29064e197eb7c10b88aafeec9bf0ec2092 [file] [log] [blame]
/*
* 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.browser;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.common.ui.widgets.ViewFormWidget;
import org.apache.directory.studio.ldapbrowser.common.dialogs.SelectEntryDialog;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IActionBars;
/**
* The BrowserWidget is a reusable widget that displays the DIT, searches
* and bookmarks of a connection a tree viewer.
* It is used by {@link BrowserView} and {@link SelectEntryDialog}.
*
* It provides a context menu and a local toolbar with actions to
* manage entries, searches and bookmarks.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class BrowserWidget extends ViewFormWidget
{
/** The widget's configuration with the content provider, label provider and menu manager */
private BrowserConfiguration configuration;
/** The quick search widget. */
private BrowserQuickSearchWidget quickSearchWidget;
/** The action bars. */
private IActionBars actionBars;
/** The tree widget used by the tree viewer */
private Tree tree;
/** The tree viewer. */
private TreeViewer viewer;
/**
* Creates a new instance of BrowserWidget.
*
* @param configuration the configuration
* @param actionBars the action bars
*/
public BrowserWidget( BrowserConfiguration configuration, IActionBars actionBars )
{
this.configuration = configuration;
this.actionBars = actionBars;
}
/**
* {@inheritDoc}
*/
public void createWidget( Composite parent )
{
if ( actionBars == null )
{
super.createWidget( parent );
}
else
{
createContent( parent );
}
}
/**
* {@inheritDoc}
*/
public IToolBarManager getToolBarManager()
{
if ( actionBars == null )
{
return super.getToolBarManager();
}
else
{
return actionBars.getToolBarManager();
}
}
/**
* {@inheritDoc}
*/
public IMenuManager getMenuManager()
{
if ( actionBars == null )
{
return super.getMenuManager();
}
else
{
return actionBars.getMenuManager();
}
}
/**
* {@inheritDoc}
*/
public IMenuManager getContextMenuManager()
{
if ( actionBars == null )
{
return super.getContextMenuManager();
}
else
{
return configuration.getContextMenuManager( viewer );
}
}
/**
* {@inheritDoc}
*/
protected Control createContent( Composite parent )
{
Composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
GridLayout gl = new GridLayout( 1, false );
gl.marginHeight = gl.marginWidth = 0;
gl.verticalSpacing = gl.horizontalSpacing = 0;
composite.setLayout( gl );
GridData gd = new GridData( GridData.FILL_BOTH );
composite.setLayoutData( gd );
quickSearchWidget = new BrowserQuickSearchWidget( this );
quickSearchWidget.createComposite( composite );
// create tree widget and viewer
tree = new Tree( composite, SWT.VIRTUAL | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
GridData data = new GridData( GridData.FILL_BOTH );
data.widthHint = 450;
data.heightHint = 250;
tree.setLayoutData( data );
viewer = new TreeViewer( tree );
viewer.setUseHashlookup( true );
// setup sorter, filter and layout
configuration.getSorter().connect( viewer );
configuration.getPreferences().connect( viewer );
// setup providers
viewer.setContentProvider( configuration.getContentProvider( this ) );
viewer.setLabelProvider( configuration.getLabelProvider( viewer ) );
return tree;
}
/**
* Sets the input to the tree viewer.
*
* @param input the input
*/
public void setInput( Object input )
{
viewer.setInput( input );
}
/**
* Sets focus to the table viewer.
*/
public void setFocus()
{
viewer.getTree().setFocus();
}
/**
* {@inheritDoc}
*/
public void dispose()
{
if ( this.viewer != null )
{
this.configuration.dispose();
this.configuration = null;
if ( quickSearchWidget != null )
{
quickSearchWidget.dispose();
quickSearchWidget = null;
}
this.tree.dispose();
this.tree = null;
this.viewer = null;
}
}
/**
* Gets the quick search widget.
*
* @return the quick search widget
*/
public BrowserQuickSearchWidget getQuickSearchWidget()
{
return quickSearchWidget;
}
/**
* Gets the tree viewer.
*
* @return the tree viewer
*/
public TreeViewer getViewer()
{
return viewer;
}
}