package net.sf.eclipsefp.haskell.ui.internal.preferences.editor;
import java.util.ArrayList;
import java.util.Iterator;
import net.sf.eclipsefp.common.ui.preferences.overlay.OverlayPreferenceStore;
import net.sf.eclipsefp.common.ui.util.DialogUtil;
import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
import org.eclipse.jface.preference.ColorSelector;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.util.PropertyChangeEvent;
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.swt.widgets.List;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.texteditor.AnnotationPreference;
import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
/**
* <p>Annotation preferences page</p>
*
* @author JP Moresmau
* @deprecated we use the Text Editors preferences
*/
@Deprecated
public class AnnotationsPP extends AbstractEditorPP {
private List colorList;
private String[][] colorListModel;
private ColorSelector colorSelector;
private Button cbShowInText;
private Button cbShowInOverviewRuler;
@Override
public void init( final IWorkbench workbench ) {
super.init( workbench );
setDescription( UITexts.preferences_editor_annotations_presentation);
colorListModel = createAnnotationTypeListModel();
}
@Override
protected void addPreferences( final OverlayPreferenceStore store ) {
MarkerAnnotationPreferences preferences = new MarkerAnnotationPreferences();
@SuppressWarnings("unchecked")
Iterator<AnnotationPreference> iter =
preferences.getAnnotationPreferences().iterator();
while( iter.hasNext() ) {
AnnotationPreference info = iter.next();
store.addStringKey( info.getColorPreferenceKey() );
store.addBooleanKey( info.getTextPreferenceKey() );
store.addBooleanKey( info.getOverviewRulerPreferenceKey() );
}
}
@Override
protected Control createContents( final Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout();
layout.numColumns = 2;
composite.setLayout( layout );
Composite editorComposite = initializeEditorComposite( composite );
initializeColorList( composite, editorComposite );
Composite optionsComposite = initializeOptionsComposite( editorComposite );
initializeShowInTextCB( optionsComposite );
initializeShowInOverviewRulerCB( optionsComposite );
tab.createLabel( optionsComposite, UITexts.preferences_editor_color );
initializeColorSelector( optionsComposite );
initialize();
return composite;
}
// UI initialization methods
////////////////////////////
private Composite initializeOptionsComposite( final Composite parent ) {
Composite optionsComposite = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.numColumns = 2;
optionsComposite.setLayout( layout );
optionsComposite.setLayoutData( new GridData( GridData.FILL_BOTH ) );
return optionsComposite;
}
private void initializeColorList( final Composite composite,
final Composite parent ) {
colorList = new List( parent, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER );
GridData gridData = new GridData( GridData.VERTICAL_ALIGN_BEGINNING
| GridData.FILL_HORIZONTAL );
gridData.heightHint = DialogUtil.convertHeightInCharsToPixels( composite,
8 );
colorList.setLayoutData( gridData );
colorList.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
handleAnnotationColorListSelection();
}
} );
}
private void initializeColorSelector( final Composite parent ) {
colorSelector = new ColorSelector( parent );
Button foregroundColorButton = colorSelector.getButton();
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.horizontalAlignment = GridData.BEGINNING;
foregroundColorButton.setLayoutData( gridData );
foregroundColorButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
int i = colorList.getSelectionIndex();
String key = colorListModel[ i ][ 1 ];
RGB colorValue = colorSelector.getColorValue();
PreferenceConverter.setValue( getPreferenceStore(), key, colorValue );
}
} );
}
private Composite initializeEditorComposite( final Composite parent ) {
Composite editorComposite = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginHeight = 0;
layout.marginWidth = 0;
editorComposite.setLayout( layout );
GridData gridData = new GridData( GridData.HORIZONTAL_ALIGN_FILL
| GridData.FILL_VERTICAL );
gridData.horizontalSpan = 2;
editorComposite.setLayoutData( gridData );
return editorComposite;
}
private void initializeShowInOverviewRulerCB( final Composite parent ) {
cbShowInOverviewRuler = new Button( parent, SWT.CHECK );
cbShowInOverviewRuler.setText( UITexts.preferences_editor_annotations_showinruler );
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.horizontalAlignment = GridData.BEGINNING;
gridData.horizontalSpan = 2;
cbShowInOverviewRuler.setLayoutData( gridData );
cbShowInOverviewRuler.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
int i = colorList.getSelectionIndex();
String key = colorListModel[ i ][ 3 ];
boolean selected = cbShowInOverviewRuler.getSelection();
getPreferenceStore().setValue( key, selected );
}
} );
}
private void initializeShowInTextCB( final Composite parent ) {
cbShowInText = new Button( parent, SWT.CHECK );
cbShowInText.setText( UITexts.preferences_editor_annotations_showintext);
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.horizontalAlignment = GridData.BEGINNING;
gridData.horizontalSpan = 2;
cbShowInText.setLayoutData( gridData );
cbShowInText.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
int i = colorList.getSelectionIndex();
String key = colorListModel[ i ][ 2 ];
boolean selected = cbShowInText.getSelection();
getPreferenceStore().setValue( key, selected );
}
} );
}
public void propertyChange( final PropertyChangeEvent event ) {
colorList.getDisplay().asyncExec( new Runnable() {
@Override
public void run() {
if( ( colorList != null ) && !colorList.isDisposed() ) {
handleAnnotationColorListSelection();
}
}
} );
}
// helping methods
//////////////////
private void handleAnnotationColorListSelection() {
int i = colorList.getSelectionIndex();
String key = colorListModel[ i ][ 1 ];
RGB rgb = PreferenceConverter.getColor( getPreferenceStore(), key );
colorSelector.setColorValue( rgb );
key = colorListModel[ i ][ 2 ];
boolean sel = getPreferenceStore().getBoolean( key );
cbShowInText.setSelection( sel );
key = colorListModel[ i ][ 3 ];
cbShowInOverviewRuler.setSelection( sel );
}
private String[][] createAnnotationTypeListModel() {
MarkerAnnotationPreferences preferences = new MarkerAnnotationPreferences();
ArrayList<String[]> listModelItems = new ArrayList<>();
@SuppressWarnings("unchecked")
Iterator<AnnotationPreference> i =
preferences.getAnnotationPreferences().iterator();
while( i.hasNext() ) {
AnnotationPreference info = i.next();
listModelItems.add( new String[] {
info.getPreferenceLabel(),
info.getColorPreferenceKey(),
info.getTextPreferenceKey(),
info.getOverviewRulerPreferenceKey() }
);
}
String[][] listModel = new String[ listModelItems.size() ][];
listModelItems.toArray( listModel );
return listModel;
}
private void initialize() {
for( int i = 0; i < colorListModel.length; i++ ) {
String color = colorListModel[ i ][ 0 ];
if( color != null ) {
colorList.add( color );
}
}
colorList.getDisplay().asyncExec( new Runnable() {
@Override
public void run() {
if( ( colorList != null ) && !colorList.isDisposed() ) {
colorList.select( 0 );
handleAnnotationColorListSelection();
}
}
} );
tab.initializeFields();
}
}