Java tutorial
/****************************************************************************** * Copyright (c) 2007 g-Eclipse consortium * 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 * * Initial development of the original code was made for * project g-Eclipse founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributor(s): * PSNC: * - Katarzyna Bylec (katis@man.poznan.pl) * *****************************************************************************/ package eu.geclipse.servicejob.ui.preferences; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import eu.geclipse.servicejob.model.ServiceJobStates; /** * {@link PreferencePage} implementation for managing colors used for ysplaying * different Operator's Job's statuses. */ public class ServiceJobPreferences extends PreferencePage implements IWorkbenchPreferencePage { protected Map<ServiceJobStates, Button> buttonsMap = new HashMap<ServiceJobStates, Button>(); protected Map<ServiceJobStates, Color> colors = new HashMap<ServiceJobStates, Color>(); protected boolean changed; @Override protected Control createContents(final Composite parent) { noDefaultAndApplyButton(); Composite mainComp = new Composite(parent, SWT.NONE); mainComp.setLayout(new GridLayout(2, false)); GridData gData = new GridData(); Label infoText = new Label(mainComp, SWT.LEAD); infoText.setText(Messages.getString("OperatorJobsViewGeneralPreferences.preferences_title")); //$NON-NLS-1$ gData.horizontalSpan = 2; infoText.setLayoutData(gData); for (ServiceJobStates value : ServiceJobStates.values()) { if (!value.equals(ServiceJobStates.NULL)) { Label labelValue = new Label(mainComp, SWT.LEAD); labelValue.setText(Messages.getString("OperatorJobsViewGeneralPreferences.color_for") //$NON-NLS-1$ + " &" //$NON-NLS-1$ + value.getAlias() + Messages.getString("OperatorJobsViewGeneralPreferences.result")); //$NON-NLS-1$ gData = new GridData(); labelValue.setLayoutData(gData); Button newButton = new Button(mainComp, SWT.PUSH); this.buttonsMap.put(value, newButton); Color colorButton = PreferencesManager.getManager().getColor(value.getAlias()); buttonColor(colorButton, newButton); this.colors.put(value, colorButton); final ServiceJobStates valFinal = value; newButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { ColorDialog dialog = new ColorDialog(parent.getShell()); dialog.setText(Messages.getString("OperatorJobsViewGeneralPreferences.select_color") //$NON-NLS-1$ + valFinal.getAlias() + Messages.getString("OperatorJobsViewGeneralPreferences.result")); //$NON-NLS-1$ RGB chosenColor = dialog.open(); if (chosenColor != null) { Color newColor = new Color(Display.getCurrent(), chosenColor); buttonColor(newColor, ServiceJobPreferences.this.buttonsMap.get(valFinal)); ServiceJobPreferences.this.colors.put(valFinal, newColor); ServiceJobPreferences.this.changed = true; } } }); } } return mainComp; } public void init(final IWorkbench workbench) { // do nothing } protected final void buttonColor(final Color color, final Button button) { Color foreground = button.getForeground(); Color background = color; int x = 0; int y = 0; Rectangle rect = button.getBounds(); int width = rect.width; int height = rect.height; String text = button.getText(); width = 30; height = 10; button.setImage(new Image(button.getParent().getDisplay(), width, height)); Image original = button.getImage(); GC gc; gc = new GC(original); gc.setForeground(foreground); gc.setBackground(background); gc.drawRectangle(x, y, width, height); gc.fillRectangle(x, y, width, height); gc.setFont(button.getFont()); int ximg = 2;// ( x + width ) / 2 - fontSize * text.length() / 3; int yimg = 2;// ( y + height ) / 2 - fontSize * 3 / 4; gc.drawText(text, ximg > 4 ? ximg : 4, yimg > 4 ? yimg : 4, SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC); gc.dispose(); Image iDisable = new Image(button.getParent().getDisplay(), original, SWT.IMAGE_BMP); button.setImage(iDisable); } @Override public boolean performOk() { PreferencesManager.getManager().saveState(this.colors); return super.performOk(); } }