blob: a1ea990645d7d6e3e4afce07b9bb47362d4e7e2a [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.ldifeditor.dialogs.preferences;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.ldifeditor.LdifEditorActivator;
import org.apache.directory.studio.ldifeditor.LdifEditorConstants;
import org.apache.directory.studio.ldifeditor.editor.ILdifEditor;
import org.apache.directory.studio.ldifeditor.widgets.LdifEditorWidget;
import org.apache.directory.studio.ldifparser.model.LdifFile;
import org.eclipse.jface.preference.ColorSelector;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.RGB;
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.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
public class LdifEditorSyntaxColoringPreferencePage extends PreferencePage implements IWorkbenchPreferencePage,
ILdifEditor
{
private static final String LDIF_INITIAL = "" + "# Content record" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$ //$NON-NLS-2$
+ "dn: cn=content record" + BrowserCoreConstants.LINE_SEPARATOR + "objectClass: person" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "cn: content record" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$
+ "cn;lang-ja:: 5Za25qWt6YOo" + BrowserCoreConstants.LINE_SEPARATOR + "" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$ //$NON-NLS-2$
+ "# Add record with control" + BrowserCoreConstants.LINE_SEPARATOR + "dn: cn=add record" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "control: 1.2.3.4 true: controlValue" //$NON-NLS-1$
+ BrowserCoreConstants.LINE_SEPARATOR + "changetype: add" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$
+ "objectClass: person" + BrowserCoreConstants.LINE_SEPARATOR + "cn: add record" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$
+ "# Modify record" + BrowserCoreConstants.LINE_SEPARATOR + "dn: cn=modify record" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "changetype: modify" + BrowserCoreConstants.LINE_SEPARATOR + "add: cn" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "cn: modify record" + BrowserCoreConstants.LINE_SEPARATOR + "-" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "delete: cn" + BrowserCoreConstants.LINE_SEPARATOR + "-" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "replace: cn" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$
+ "cn: modify record" + BrowserCoreConstants.LINE_SEPARATOR + "-" + BrowserCoreConstants.LINE_SEPARATOR + "" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ BrowserCoreConstants.LINE_SEPARATOR
+ "# Delete record" + BrowserCoreConstants.LINE_SEPARATOR + "dn: cn=delete record" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "changetype: delete" + BrowserCoreConstants.LINE_SEPARATOR + "" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR
+ "# Modify Dn record" + BrowserCoreConstants.LINE_SEPARATOR + "dn: cn=moddn record" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "changetype: moddn" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$
+ "newrdn: cn=new rdn" + BrowserCoreConstants.LINE_SEPARATOR + "deleteoldrdn: 1" //$NON-NLS-1$ //$NON-NLS-2$
+ BrowserCoreConstants.LINE_SEPARATOR + "newsuperior: cn=new superior" + BrowserCoreConstants.LINE_SEPARATOR //$NON-NLS-1$
+ "" + BrowserCoreConstants.LINE_SEPARATOR; //$NON-NLS-1$
private LdifEditorWidget ldifEditorWidget;
private SyntaxItem[] syntaxItems;
private ColorSelector colorSelector;
private Button boldCheckBox;
private Button italicCheckBox;
private Button underlineCheckBox;
private Button strikethroughCheckBox;
private TableViewer syntaxItemViewer;
private class SyntaxItem
{
String displayName;
String key;
RGB rgb;
boolean bold;
boolean italic;
boolean strikethrough;
boolean underline;
SyntaxItem( String displayName, String key )
{
this.displayName = displayName;
this.key = key;
loadPreferences();
}
int getStyle()
{
int style = SWT.NORMAL;
if ( bold )
style |= SWT.BOLD;
if ( italic )
style |= SWT.ITALIC;
if ( strikethrough )
style |= TextAttribute.STRIKETHROUGH;
if ( underline )
style |= TextAttribute.UNDERLINE;
return style;
}
void setStyle( int style )
{
this.bold = ( style & SWT.BOLD ) != SWT.NORMAL;
this.italic = ( style & SWT.ITALIC ) != SWT.NORMAL;
this.strikethrough = ( style & TextAttribute.STRIKETHROUGH ) != SWT.NORMAL;
this.underline = ( style & TextAttribute.UNDERLINE ) != SWT.NORMAL;
}
void loadPreferences()
{
IPreferenceStore store = getPreferenceStore();
this.rgb = PreferenceConverter.getColor( store, key
+ LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX );
int style = store.getInt( key + LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX );
setStyle( style );
}
void savePreferences()
{
IPreferenceStore store = getPreferenceStore();
PreferenceConverter
.setValue( store, key + LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX, rgb );
store.setValue( key + LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX, getStyle() );
}
void loadDefaultPreferences()
{
IPreferenceStore store = getPreferenceStore();
String colorKey = key + LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX;
store.setToDefault( colorKey);
String styleKey = key + LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX;
store.setToDefault( styleKey);
this.rgb = PreferenceConverter.getDefaultColor( store, colorKey );
int style = store.getDefaultInt( styleKey );
setStyle( style );
System.out.println( colorKey + ": isDefault=" + store.isDefault( colorKey ) );
System.out.println( colorKey + ": string=" + store.getString( colorKey ) );
System.out.println( colorKey + ": rgb=" + PreferenceConverter.getColor( store, colorKey ) );
}
public String toString()
{
return displayName;
}
}
public LdifEditorSyntaxColoringPreferencePage()
{
super( Messages.getString( "LdifEditorSyntaxColoringPreferencePage.SyntaxColoring" ) ); //$NON-NLS-1$
super.setPreferenceStore( LdifEditorActivator.getDefault().getPreferenceStore() );
// super.setDescription("");
}
public void init( IWorkbench workbench )
{
}
public void dispose()
{
ldifEditorWidget.dispose();
super.dispose();
}
protected Control createContents( Composite parent )
{
Composite composite = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout( 1, false );
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.marginLeft = 0;
layout.marginRight = 0;
layout.marginTop = 0;
layout.marginBottom = 0;
composite.setLayout( layout );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
composite.setLayoutData( gd );
BaseWidgetUtils.createSpacer( composite, 1 );
BaseWidgetUtils.createSpacer( composite, 1 );
createSyntaxPage( composite );
createPreviewer( composite );
syntaxItems = new SyntaxItem[10];
syntaxItems[0] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.Comments" ), LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_COMMENT ); //$NON-NLS-1$
syntaxItems[1] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.DN" ), LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_DN ); //$NON-NLS-1$
syntaxItems[2] = new SyntaxItem( Messages
.getString( "LdifEditorSyntaxColoringPreferencePage.AttributeDescriptions" ), //$NON-NLS-1$
LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_ATTRIBUTE );
syntaxItems[3] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.ValueTypes" ), LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_VALUETYPE ); //$NON-NLS-1$
syntaxItems[4] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.Values" ), LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_VALUE ); //$NON-NLS-1$
syntaxItems[5] = new SyntaxItem( Messages.getString( "LdifEditorSyntaxColoringPreferencePage.Keywords" ), //$NON-NLS-1$
LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_KEYWORD );
syntaxItems[6] = new SyntaxItem( Messages.getString( "LdifEditorSyntaxColoringPreferencePage.ChangetypeAdd" ), //$NON-NLS-1$
LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEADD );
syntaxItems[7] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.ChangetypeModify" ), //$NON-NLS-1$
LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEMODIFY );
syntaxItems[8] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.ChangetypeDelete" ), //$NON-NLS-1$
LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEDELETE );
syntaxItems[9] = new SyntaxItem(
Messages.getString( "LdifEditorSyntaxColoringPreferencePage.ChangetypeModdn" ), //$NON-NLS-1$
LdifEditorConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEMODDN );
syntaxItemViewer.setInput( syntaxItems );
syntaxItemViewer.setSelection( new StructuredSelection( syntaxItems[0] ) );
return composite;
}
private void createSyntaxPage( Composite parent )
{
BaseWidgetUtils.createLabel( parent, Messages.getString( "LdifEditorSyntaxColoringPreferencePage.Element" ), 1 ); //$NON-NLS-1$
Composite editorComposite = BaseWidgetUtils.createColumnContainer( parent, 2, 1 );
syntaxItemViewer = new TableViewer( editorComposite, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER
| SWT.FULL_SELECTION );
syntaxItemViewer.setLabelProvider( new LabelProvider() );
syntaxItemViewer.setContentProvider( new ArrayContentProvider() );
// colorListViewer.setSorter(new WorkbenchViewerSorter());
GridData gd = new GridData( GridData.FILL_BOTH );
gd.heightHint = convertHeightInCharsToPixels( 5 );
syntaxItemViewer.getControl().setLayoutData( gd );
Composite stylesComposite = BaseWidgetUtils.createColumnContainer( editorComposite, 1, 1 );
stylesComposite.setLayoutData( new GridData( GridData.FILL_BOTH ) );
Composite colorComposite = BaseWidgetUtils.createColumnContainer( stylesComposite, 2, 1 );
BaseWidgetUtils.createLabel( colorComposite, Messages
.getString( "LdifEditorSyntaxColoringPreferencePage.Color" ), 1 ); //$NON-NLS-1$
colorSelector = new ColorSelector( colorComposite );
boldCheckBox = BaseWidgetUtils.createCheckbox( stylesComposite, Messages
.getString( "LdifEditorSyntaxColoringPreferencePage.Bold" ), 1 ); //$NON-NLS-1$
italicCheckBox = BaseWidgetUtils.createCheckbox( stylesComposite, Messages
.getString( "LdifEditorSyntaxColoringPreferencePage.Italic" ), 1 ); //$NON-NLS-1$
strikethroughCheckBox = BaseWidgetUtils.createCheckbox( stylesComposite, Messages
.getString( "LdifEditorSyntaxColoringPreferencePage.Strikethrough" ), 1 ); //$NON-NLS-1$
underlineCheckBox = BaseWidgetUtils.createCheckbox( stylesComposite, Messages
.getString( "LdifEditorSyntaxColoringPreferencePage.Underline" ), 1 ); //$NON-NLS-1$
syntaxItemViewer.addSelectionChangedListener( new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
handleSyntaxItemViewerSelectionEvent();
}
} );
colorSelector.addListener( new IPropertyChangeListener()
{
public void propertyChange( PropertyChangeEvent event )
{
handleColorSelectorEvent();
}
} );
boldCheckBox.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
handleBoldSelectionEvent();
}
} );
italicCheckBox.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
handleItalicSelectionEvent();
}
} );
strikethroughCheckBox.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
handleStrikethroughSelectionEvent();
}
} );
underlineCheckBox.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
handleUnderlineSelectionEvent();
}
} );
}
private void handleUnderlineSelectionEvent()
{
SyntaxItem item = getSyntaxItem();
if ( item != null )
{
item.underline = underlineCheckBox.getSelection();
setTextAttribute( item );
}
}
private void handleStrikethroughSelectionEvent()
{
SyntaxItem item = getSyntaxItem();
if ( item != null )
{
item.strikethrough = strikethroughCheckBox.getSelection();
setTextAttribute( item );
}
}
private void handleItalicSelectionEvent()
{
SyntaxItem item = getSyntaxItem();
if ( item != null )
{
item.italic = italicCheckBox.getSelection();
setTextAttribute( item );
}
}
private void handleBoldSelectionEvent()
{
SyntaxItem item = getSyntaxItem();
if ( item != null )
{
item.bold = boldCheckBox.getSelection();
setTextAttribute( item );
}
}
private void handleColorSelectorEvent()
{
SyntaxItem item = getSyntaxItem();
if ( item != null )
{
item.rgb = colorSelector.getColorValue();
setTextAttribute( item );
}
}
private void handleSyntaxItemViewerSelectionEvent()
{
SyntaxItem item = getSyntaxItem();
if ( item != null )
{
colorSelector.setColorValue( item.rgb );
boldCheckBox.setSelection( item.bold );
italicCheckBox.setSelection( item.italic );
strikethroughCheckBox.setSelection( item.strikethrough );
underlineCheckBox.setSelection( item.underline );
}
}
private SyntaxItem getSyntaxItem()
{
SyntaxItem item = ( SyntaxItem ) ( ( IStructuredSelection ) syntaxItemViewer.getSelection() ).getFirstElement();
return item;
}
private void setTextAttribute( SyntaxItem item )
{
ldifEditorWidget.getSourceViewerConfiguration().setTextAttribute( item.key, item.rgb, item.getStyle() );
int topIndex = ldifEditorWidget.getSourceViewer().getTopIndex();
// ldifEditorWidget.getSourceViewer().getDocument().set("");
ldifEditorWidget.getSourceViewer().getDocument().set( LDIF_INITIAL );
ldifEditorWidget.getSourceViewer().setTopIndex( topIndex );
}
private void createPreviewer( Composite parent )
{
BaseWidgetUtils.createLabel( parent, Messages.getString( "LdifEditorSyntaxColoringPreferencePage.Preview" ), 1 ); //$NON-NLS-1$
ldifEditorWidget = new LdifEditorWidget( null, LDIF_INITIAL, false );
ldifEditorWidget.createWidget( parent );
ldifEditorWidget.getSourceViewer().setEditable( false );
GridData gd = new GridData( GridData.FILL_BOTH );
gd.widthHint = convertWidthInCharsToPixels( 20 );
gd.heightHint = convertHeightInCharsToPixels( 5 );
ldifEditorWidget.getSourceViewer().getControl().setLayoutData( gd );
}
public IBrowserConnection getConnection()
{
return ldifEditorWidget.getConnection();
}
public LdifFile getLdifModel()
{
return ldifEditorWidget.getLdifModel();
}
public boolean performOk()
{
for ( int i = 0; i < syntaxItems.length; i++ )
{
syntaxItems[i].savePreferences();
}
return true;
}
protected void performDefaults()
{
for ( int i = 0; i < syntaxItems.length; i++ )
{
syntaxItems[i].loadDefaultPreferences();
setTextAttribute( syntaxItems[i] );
}
handleSyntaxItemViewerSelectionEvent();
super.performDefaults();
}
public Object getAdapter( Class adapter )
{
return null;
}
}