eu.geclipse.servicejob.ui.preferences.ServiceJobPreferences.java Source code

Java tutorial

Introduction

Here is the source code for eu.geclipse.servicejob.ui.preferences.ServiceJobPreferences.java

Source

/******************************************************************************
 * 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();
    }
}