package org.fipro.eclipse.migration.ui.view; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISelectionService; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.part.ViewPart; import org.fipro.eclipse.migration.model.Person; import org.fipro.eclipse.migration.model.Person.Gender; import org.fipro.eclipse.migration.ui.Activator; import org.fipro.eclipse.migration.ui.view.overview.OverviewView; public class DescriptionView extends ViewPart { Text description; ISelectionListener selectionListener = new ISelectionListener() { @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (part instanceof OverviewView && selection instanceof IStructuredSelection) { if (!selection.isEmpty()) { Object selected = ((IStructuredSelection) selection).getFirstElement(); Person p = (Person) selected; description.setText(p.getFirstName() + " " + p.getLastName() + " is a " + (p.isMarried() ? "married " : "single ") + (Gender.MALE.equals(p.getGender()) ? "man" : "woman")); } else { description.setText(""); } } } }; @Override public void createPartControl(Composite parent) { parent.setLayout(new FillLayout()); description = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); // read preferences to set the initial text color String color = Platform.getPreferencesService(). getString("org.fipro.eclipse.migration.ui", "description_color", "black", null); Color toUse = "blue".equals(color) ? Display.getDefault().getSystemColor(SWT.COLOR_BLUE) : Display.getDefault().getSystemColor(SWT.COLOR_BLACK); description.setForeground(toUse); // register a listener on the PreferencesStore to react on changes Activator.getDefault().getPreferenceStore().addPropertyChangeListener( new IPropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == "description_color") { Color toUse = "blue".equals(event.getNewValue()) ? Display.getDefault().getSystemColor(SWT.COLOR_BLUE) : Display.getDefault().getSystemColor(SWT.COLOR_BLACK); if (description != null && !description.isDisposed()) { description.setForeground(toUse); } } } }); getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(selectionListener); } @Override public void setFocus() { } @Override public void dispose() { // on disposal remove the selection listener ISelectionService s = getSite().getWorkbenchWindow().getSelectionService(); s.removeSelectionListener(selectionListener); super.dispose(); } }