package net.sf.eclipsefp.haskell.ui.internal.preferences.editor; 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.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.List; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.dialogs.PreferencesUtil; /** * <p>Default Editor page: appearance</p> * * @author JP Moresmau */ public class AppearancePP extends AbstractEditorPP { private final ColorListEntry[] colorListModel = new ColorListEntry[] { new ColorListEntry( UITexts.preferences_editor_appearance_matching_brackets_color, EDITOR_MATCHING_BRACKETS_COLOR )}; private List colorList; private ColorSelector colorSelector; @Override public void init( final IWorkbench workbench ) { super.init( workbench ); } @Override protected void addPreferences( final OverlayPreferenceStore store ) { store.addBooleanKey( EDITOR_MATCHING_BRACKETS ); store.addStringKey( EDITOR_MATCHING_BRACKETS_COLOR ); store.addIntKey( EDITOR_TAB_WIDTH ); store.addIntKey( EDITOR_CABAL_TAB_WIDTH ); store.addStringKey( CA_AUTOACTIVATION_TRIGGERS ); store.addBooleanKey( IMPORT_CLEAN_FORMAT ); // store.addStringKey( CA_PROPOSALS_SCOPE ); } // interface methods of Tab /////////////////////////// @Override protected Control createContents( final Composite parent ) { Composite control = new Composite( parent, SWT.NONE ); GridLayout layout = new GridLayout(); layout.numColumns = 2; control.setLayout( layout ); String text= UITexts.preferences_editor_description; Link link= new Link(control, SWT.NONE); link.setText(text); link.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { PreferencesUtil.createPreferenceDialogOn(parent.getShell(), "org.eclipse.ui.preferencePages.GeneralTextEditor", null, null); //$NON-NLS-1$ } }); link.setToolTipText(UITexts.preferences_editor_description_hover); GridData gd=new GridData(SWT.FILL, SWT.BEGINNING, true, false); gd.horizontalSpan=2; link.setLayoutData( gd ); tab.addIntegerField( control, UITexts.preferences_editor_typing_tab_width, IEditorPreferenceNames.EDITOR_TAB_WIDTH, 3, 0 ); tab.addIntegerField( control, UITexts.preferences_editor_typing_cabal_tab_width, IEditorPreferenceNames.EDITOR_CABAL_TAB_WIDTH, 3, 0 ); addFields( control ); createSpacer( control ); createAppearanceColorLabel( control ); Composite editorComposite = createEditorComposite( control ); createColorList( control, editorComposite ); Composite stylesComposite = createStylesComposite( editorComposite ); tab.createLabel( stylesComposite, UITexts.preferences_editor_color); createColorSelector( stylesComposite ); initialize(); return control; } // UI creation methods ////////////////////// private void createColorSelector( 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 ].getColorKey(); RGB colorValue = colorSelector.getColorValue(); PreferenceConverter.setValue( getPreferenceStore(), key, colorValue ); } } ); } private Composite createStylesComposite( final Composite parent ) { Composite stylesComposite = new Composite( parent, SWT.NONE ); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.numColumns = 2; stylesComposite.setLayout( layout ); stylesComposite.setLayoutData( new GridData( GridData.FILL_BOTH ) ); return stylesComposite; } private void createColorList( final Composite parent, final Composite editorComposite ) { int style = SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER; colorList = new List( editorComposite, style ); GridData gridData = new GridData( GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL ); gridData.heightHint = DialogUtil.convertHeightInCharsToPixels( parent, 8 ); colorList.setLayoutData( gridData ); colorList.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( final SelectionEvent e ) { handleColorListSelection(); } } ); } private Composite createEditorComposite( 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 createAppearanceColorLabel( final Composite parent ) { Label label = new Label( parent, SWT.LEFT ); label.setText( UITexts.preferences_editor_appearance_color_options ); GridData gridData = new GridData( GridData.HORIZONTAL_ALIGN_FILL ); gridData.horizontalSpan = 2; label.setLayoutData( gridData ); } private void createSpacer( final Composite parent ) { Label label = new Label( parent, SWT.LEFT ); GridData gridData = new GridData( GridData.HORIZONTAL_ALIGN_FILL ); gridData.horizontalSpan = 2; int height = DialogUtil.convertHeightInCharsToPixels( parent, 1 ); gridData.heightHint = height / 2; label.setLayoutData( gridData ); } private void addFields( final Composite parent ) { Label labelControl = new Label( parent, SWT.NONE ); labelControl.setText( UITexts.preferences_editor_contentass ); GridData gd = new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING ); gd.horizontalSpan=2; labelControl.setLayoutData( gd ); String atText = UITexts.preferences_editor_contentass_autoactivation_triggers; String atKey = CA_AUTOACTIVATION_TRIGGERS; tab.addTextField( parent, atText, atKey, 4, 10 ); // Label labelScope=new Label( parent, SWT.NONE ); // labelScope.setText( UITexts.preferences_editor_contentass_scope ); // gd = new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING ); // gd.horizontalIndent=10; // labelScope.setLayoutData( gd ); // // ComboViewer cv=new ComboViewer( parent,SWT.READ_ONLY ); // cv.setContentProvider( new ArrayContentProvider() ); // cv.setLabelProvider( new LabelProvider(){ // @Override // public String getText(final Object element) { // ProposalScope ps=(ProposalScope)element; // switch (ps){ // case ALL: // return UITexts.preferences_editor_contentass_scope_all; // case IMPORTED: // return UITexts.preferences_editor_contentass_scope_imported; // case PROJECT: // return UITexts.preferences_editor_contentass_scope_project; // } // return super.getText( element ); // } // } ); // cv.setInput( ProposalScope.values() ); // cv.getCombo().setLayoutData( new GridData( GridData.HORIZONTAL_ALIGN_BEGINNING) ); // cv.addSelectionChangedListener( new ISelectionChangedListener() { // // @Override // public void selectionChanged( final SelectionChangedEvent arg0 ) { // ProposalScope ps=(ProposalScope)((IStructuredSelection)arg0.getSelection()).getFirstElement(); // getPreferenceStore().setValue( CA_PROPOSALS_SCOPE, ps.toString() ); // } // } ); // ProposalScope ps=ProposalScope.valueOf(getPreferenceStore().getString( IEditorPreferenceNames.CA_PROPOSALS_SCOPE ) ); // cv.setSelection( new StructuredSelection( ps ) ); String mbKey = EDITOR_MATCHING_BRACKETS; createBooleanField( parent, UITexts.preferences_editor_appearance_matching_brackets, mbKey ); createBooleanField( parent, UITexts.preferences_editor_appearance_import_clean_format, IMPORT_CLEAN_FORMAT ); } public void propertyChange( final PropertyChangeEvent event ) { colorList.getDisplay().asyncExec( new Runnable() { @Override public void run() { if( ( colorList != null ) && !colorList.isDisposed() ) { handleColorListSelection(); } } } ); /*if (spaceForTabs!=null){ spaceForTabs.setInfo( getFromStore( IEditorPreferenceNames.EDITOR_SPACES_FOR_TABS ) ); }*/ } // helping methods ////////////////// private void handleColorListSelection() { int i = colorList.getSelectionIndex(); String key = colorListModel[ i ].getColorKey(); RGB rgb = PreferenceConverter.getColor( getPreferenceStore(), key ); colorSelector.setColorValue( rgb ); } private void initialize() { for( int i = 0; i < colorListModel.length; i++ ) { colorList.add( colorListModel[ i ].getLabel() ); } colorList.getDisplay().asyncExec( new Runnable() { @Override public void run() { if( ( colorList != null ) && !colorList.isDisposed() ) { colorList.select( 0 ); handleColorListSelection(); } } } ); tab.initializeFields(); } }