/* * 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.apache.directory.studio.ldapbrowser.core.model.IQuickSearch; 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; /** The quick search. */ private IQuickSearch quickSearch; /** * 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; } /** * Sets the quick search. * * @param quickSearch the new quick search */ public void setQuickSearch( IQuickSearch quickSearch ) { this.quickSearch = quickSearch; } /** * Gets the quick search. * * @return the quick search */ public IQuickSearch getQuickSearch() { return quickSearch; } }