/*
* 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.entryeditor;
import org.apache.directory.studio.common.ui.widgets.ViewFormWidget;
import org.apache.directory.studio.valueeditors.ValueEditorManager;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
/**
* The EntryEditorWidget is a reusable widget to display and edit the attributes of an entry.
* It is used by
* {@link org.apache.directory.studio.ldapbrowser.ui.editors.entry.EntryEditor},
* {@link org.apache.directory.studio.ldapbrowser.common.dialogs.MultivaluedDialog},
* {@link org.apache.directory.studio.ldapbrowser.common.dialogs.LdifEntryEditorDialog} and
* {@link org.apache.directory.studio.ldapbrowser.common.wizards.NewEntryAttributesWizardPage}.
*
* It provides a context menu and a local toolbar with actions to
* manage attributes. Further there is an instant search feature to filter
* the visible attributes.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class EntryEditorWidget extends ViewFormWidget
{
/** The configuration. */
private EntryEditorWidgetConfiguration configuration;
/** The quick filter widget. */
private EntryEditorWidgetQuickFilterWidget quickFilterWidget;
/** The tree. */
private Tree tree;
/** The viewer. */
private TreeViewer viewer;
/**
* Creates a new instance of EntryEditorWidget.
*
* @param configuration the configuration
*/
public EntryEditorWidget( EntryEditorWidgetConfiguration configuration )
{
this.configuration = configuration;
}
/**
* {@inheritDoc}
*/
protected Control createContent( Composite parent )
{
// Create the filter widget
quickFilterWidget = new EntryEditorWidgetQuickFilterWidget( configuration.getFilter(), this );
quickFilterWidget.createComposite( parent );
// create tree widget and viewer
tree = new Tree( parent, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION
| SWT.HIDE_SELECTION );
GridData data = new GridData( GridData.FILL_BOTH );
data.widthHint = 450;
data.heightHint = 250;
tree.setLayoutData( data );
tree.setHeaderVisible( true );
tree.setLinesVisible( true );
viewer = new TreeViewer( tree );
viewer.setUseHashlookup( true );
// set tree columns. We have 2 : one for the KEY, one for the Value
for ( int i = 0; i < EntryEditorWidgetTableMetadata.COLUM_NAMES.length; i++ )
{
TreeColumn column = new TreeColumn( tree, SWT.LEFT, i );
column.setText( EntryEditorWidgetTableMetadata.COLUM_NAMES[i] );
column.setWidth( 200 );
column.setResizable( true );
}
viewer.setColumnProperties( EntryEditorWidgetTableMetadata.COLUM_NAMES );
tree.addControlListener( new ControlAdapter()
{
public void controlResized( ControlEvent e )
{
if ( tree.getClientArea().width > 0 )
{
int width = tree.getClientArea().width - 2 * tree.getBorderWidth();
if ( tree.getVerticalBar().isVisible() )
{
width -= tree.getVerticalBar().getSize().x;
}
tree.getColumn( EntryEditorWidgetTableMetadata.VALUE_COLUMN_INDEX ).setWidth(
width - tree.getColumn( EntryEditorWidgetTableMetadata.KEY_COLUMN_INDEX ).getWidth() );
}
}
} );
// setup sorter, filter and layout
configuration.getSorter().connect( viewer );
configuration.getFilter().connect( viewer );
configuration.getPreferences().connect( viewer );
// Get the ValueEditorManager
ValueEditorManager valueEditorManager = configuration.getValueEditorManager( viewer );
// setup providers
viewer.setContentProvider( configuration.getContentProvider( this ) );
viewer.setLabelProvider( configuration.getLabelProvider( valueEditorManager, viewer ) );
// set table cell editors
viewer.setCellModifier( configuration.getCellModifier( valueEditorManager ) );
CellEditor[] editors = new CellEditor[EntryEditorWidgetTableMetadata.COLUM_NAMES.length];
viewer.setCellEditors( editors );
return tree;
}
/**
* Sets the focus to the tree viewer.
*/
public void setFocus()
{
viewer.getTree().setFocus();
}
/**
* {@inheritDoc}
*/
public void dispose()
{
if ( viewer != null )
{
configuration.dispose();
configuration = null;
if ( quickFilterWidget != null )
{
quickFilterWidget.dispose();
quickFilterWidget = null;
}
tree.dispose();
tree = null;
viewer = null;
}
super.dispose();
}
/**
* Gets the viewer.
*
* @return the viewer
*/
public TreeViewer getViewer()
{
return viewer;
}
/**
* Gets the quick filter widget.
*
* @return the quick filter widget
*/
public EntryEditorWidgetQuickFilterWidget getQuickFilterWidget()
{
return quickFilterWidget;
}
/**
* Enables or disables this widget.
*
* @param enabled true to enable this widget, false to disable this widget
*/
public void setEnabled( boolean enabled )
{
tree.setEnabled( enabled );
}
}