alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*******************************************************************************
 * Copyright (c) 2005, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.pde.internal.ui.preferences;

import org.eclipse.jface.preference.*;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.*;
import org.eclipse.pde.internal.ui.PDEPlugin;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.editor.text.*;
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.*;

public abstract class SyntaxColorTab {

	protected IColorManager fColorManager;
	private TableViewer fElementViewer;
	private SourceViewer fPreviewViewer;
	private ChangeAwareSourceViewerConfiguration fSourceViewerConfiguration;
	private Button fBoldButton;
	private Button fItalicButton;

	class ColorElement {
		private String fDisplayName;
		private String fColorKey;
		private RGB fColorValue;
		private boolean fBold;
		private boolean fItalic;

		public ColorElement(String displayName, String colorKey, RGB colorValue, boolean bold, boolean italic) {
			fDisplayName = displayName;
			fColorKey = colorKey;
			fColorValue = colorValue;
			fBold = bold;
			fItalic = italic;
		}

		public String getColorKey() {
			return fColorKey;
		}

		public String getDisplayName() {
			return fDisplayName;
		}

		public RGB getColorValue() {
			return fColorValue;
		}

		public void setColorValue(RGB rgb) {
			if (fColorValue.equals(rgb))
				return;
			RGB oldrgb = fColorValue;
			fColorValue = rgb;
			firePropertyChange(new PropertyChangeEvent(this, fColorKey, oldrgb, rgb));
		}

		public void setBold(boolean bold) {
			if (bold == fBold)
				return;
			Boolean oldValue = Boolean.valueOf(fBold);
			fBold = bold;
			Boolean newValue = Boolean.valueOf(bold);
			String property = fColorKey + IPDEColorConstants.P_BOLD_SUFFIX;
			firePropertyChange(new PropertyChangeEvent(this, property, oldValue, newValue));
		}

		public boolean isBold() {
			return fBold;
		}

		public void setItalic(boolean italic) {
			if (italic == fItalic)
				return;
			Boolean oldValue = Boolean.valueOf(fItalic);
			fItalic = italic;
			Boolean newValue = Boolean.valueOf(italic);
			String property = fColorKey + IPDEColorConstants.P_ITALIC_SUFFIX;
			firePropertyChange(new PropertyChangeEvent(this, property, oldValue, newValue));
		}

		public boolean isItalic() {
			return fItalic;
		}

		public String toString() {
			return getDisplayName();
		}

		public void firePropertyChange(PropertyChangeEvent event) {
			if (fSourceViewerConfiguration != null) {
				fSourceViewerConfiguration.adaptToPreferenceChange(event);
				fPreviewViewer.invalidateTextPresentation();
			}
		}
	}

	public SyntaxColorTab(IColorManager manager) {
		fColorManager = manager;
	}

	protected abstract String[][] getColorStrings();

	private ColorElement[] getColorData() {
		String[][] colors = getColorStrings();
		IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
		ColorElement[] list = new ColorElement[colors.length];
		for (int i = 0; i < colors.length; i++) {
			String displayName = colors[i][0];
			String key = colors[i][1];
			RGB setting = PreferenceConverter.getColor(store, key);
			boolean bold = store.getBoolean(key + IPDEColorConstants.P_BOLD_SUFFIX);
			boolean italic = store.getBoolean(key + IPDEColorConstants.P_ITALIC_SUFFIX);
			list[i] = new ColorElement(displayName, key, setting, bold, italic);
		}
		return list;
	}

	public Control createContents(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		container.setLayout(new GridLayout());
		container.setLayoutData(new GridData(GridData.FILL_BOTH));
		createElementTable(container);
		createPreviewer(container);
		return container;
	}

	private void createElementTable(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		GridLayout layout = new GridLayout(2, true);
		layout.marginWidth = layout.marginHeight = 0;
		container.setLayout(layout);
		container.setLayoutData(new GridData(GridData.FILL_BOTH));

		Label label = new Label(container, SWT.LEFT);
		label.setText(PDEUIMessages.SyntaxColorTab_elements);
		GridData gd = new GridData();
		gd.horizontalSpan = 2;
		label.setLayoutData(gd);

		fElementViewer = new TableViewer(container, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER);
		fElementViewer.setLabelProvider(new LabelProvider());
		fElementViewer.setContentProvider(new ArrayContentProvider());
		fElementViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));

		Composite colorComposite = new Composite(container, SWT.NONE);
		colorComposite.setLayout(new GridLayout(2, false));
		colorComposite.setLayoutData(new GridData(GridData.FILL_BOTH));

		label = new Label(colorComposite, SWT.LEFT);
		label.setText(PDEUIMessages.SyntaxColorTab_color);

		final ColorSelector colorSelector = new ColorSelector(colorComposite);
		Button colorButton = colorSelector.getButton();
		colorButton.setLayoutData(new GridData(GridData.BEGINNING));

		colorButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				ColorElement item = getColorElement(fElementViewer);
				item.setColorValue(colorSelector.getColorValue());
			}
		});

		fBoldButton = new Button(colorComposite, SWT.CHECK);
		gd = new GridData();
		gd.horizontalSpan = 2;
		fBoldButton.setLayoutData(gd);
		fBoldButton.setText(PDEUIMessages.SyntaxColorTab_bold);
		fBoldButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				ColorElement item = getColorElement(fElementViewer);
				item.setBold(fBoldButton.getSelection());
			}
		});

		fItalicButton = new Button(colorComposite, SWT.CHECK);
		gd = new GridData();
		gd.horizontalSpan = 2;
		fItalicButton.setLayoutData(gd);
		fItalicButton.setText(PDEUIMessages.SyntaxColorTab_italic);
		fItalicButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				ColorElement item = getColorElement(fElementViewer);
				item.setItalic(fItalicButton.getSelection());
			}
		});

		fElementViewer.addSelectionChangedListener(new ISelectionChangedListener() {
			public void selectionChanged(SelectionChangedEvent event) {
				ColorElement item = getColorElement(fElementViewer);
				colorSelector.setColorValue(item.getColorValue());
				fBoldButton.setSelection(item.isBold());
				fItalicButton.setSelection(item.isItalic());
			}
		});
		fElementViewer.setInput(getColorData());
		fElementViewer.setComparator(new ViewerComparator());
		fElementViewer.setSelection(new StructuredSelection(fElementViewer.getElementAt(0)));
	}

	private void createPreviewer(Composite parent) {
		Composite previewComp = new Composite(parent, SWT.NONE);
		GridLayout layout = new GridLayout();
		layout.marginHeight = layout.marginWidth = 0;
		previewComp.setLayout(layout);
		previewComp.setLayoutData(new GridData(GridData.FILL_BOTH));

		Label label = new Label(previewComp, SWT.NONE);
		label.setText(PDEUIMessages.SyntaxColorTab_preview);
		label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

		fPreviewViewer = new SourceViewer(previewComp, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
		fSourceViewerConfiguration = getSourceViewerConfiguration();

		if (fSourceViewerConfiguration != null)
			fPreviewViewer.configure(fSourceViewerConfiguration);

		fPreviewViewer.setEditable(false);
		fPreviewViewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
		fPreviewViewer.setDocument(getDocument());

		Control control = fPreviewViewer.getControl();
		control.setLayoutData(new GridData(GridData.FILL_BOTH));
	}

	protected abstract ChangeAwareSourceViewerConfiguration getSourceViewerConfiguration();

	public void performOk() {
		IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
		int count = fElementViewer.getTable().getItemCount();
		for (int i = 0; i < count; i++) {
			ColorElement item = (ColorElement) fElementViewer.getElementAt(i);
			PreferenceConverter.setValue(store, item.getColorKey(), item.getColorValue());
			store.setValue(item.getColorKey() + IPDEColorConstants.P_BOLD_SUFFIX, item.isBold());
			store.setValue(item.getColorKey() + IPDEColorConstants.P_ITALIC_SUFFIX, item.isItalic());
		}
	}

	public void performDefaults() {
		IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
		int count = fElementViewer.getTable().getItemCount();
		for (int i = 0; i < count; i++) {
			ColorElement item = (ColorElement) fElementViewer.getElementAt(i);
			RGB rgb = PreferenceConverter.getDefaultColor(store, item.getColorKey());
			item.setColorValue(rgb);
			item.setBold(store.getDefaultBoolean(item.getColorKey() + IPDEColorConstants.P_BOLD_SUFFIX));
			item.setItalic(store.getDefaultBoolean(item.getColorKey() + IPDEColorConstants.P_ITALIC_SUFFIX));
		}
		ColorElement element = getColorElement(fElementViewer);
		fBoldButton.setSelection(element.isBold());
		fItalicButton.setSelection(element.isItalic());
	}

	public void dispose() {
		fSourceViewerConfiguration.dispose();
	}

	protected abstract IDocument getDocument();

	private ColorElement getColorElement(TableViewer viewer) {
		IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
		return (ColorElement) selection.getFirstElement();
	}

}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.