com.brosinski.eclipse.regex.view.FontPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.brosinski.eclipse.regex.view.FontPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Stephan Brosinski
 *  
 * 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:
 *   Stephan Brosinski - initial API and implementation
 ******************************************************************************/
package com.brosinski.eclipse.regex.view;

import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
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.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.brosinski.eclipse.regex.RegExPlugin;

public class FontPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, SelectionListener {

    private Button regexFontButton;
    private Text regexFontText;
    private FontData regexFontData;
    private Text searchTextFontText;
    private Button searchTextFontButton;
    private Text resultFontText;
    private Button resultFontButton;
    private FontData searchTextFontData;
    private FontData resultFontData;

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
     */
    protected void performDefaults() {
        String fontName = getPreferenceStore().getDefaultString("font.regex.name");
        int fontHeight = getPreferenceStore().getDefaultInt("font.regex.height");
        int fontStyle = getPreferenceStore().getDefaultInt("font.regex.style");
        regexFontData = new FontData(fontName, fontHeight, fontStyle);
        regexFontText.setText(buildDescription(fontName, fontHeight));
    }

    private void setFontData() {
        if (regexFontData != null) {
            getPreferenceStore().setValue("font.regex.name", regexFontData.getName());
            getPreferenceStore().setValue("font.regex.height", regexFontData.getHeight());
            getPreferenceStore().setValue("font.regex.style", regexFontData.getStyle());
        }
        if (searchTextFontData != null) {
            getPreferenceStore().setValue("font.searchtext.name", searchTextFontData.getName());
            getPreferenceStore().setValue("font.searchtext.height", searchTextFontData.getHeight());
            getPreferenceStore().setValue("font.searchtext.style", searchTextFontData.getStyle());
        }
        if (resultFontData != null) {
            getPreferenceStore().setValue("font.result.name", resultFontData.getName());
            getPreferenceStore().setValue("font.result.height", resultFontData.getHeight());
            getPreferenceStore().setValue("font.result.style", resultFontData.getStyle());
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#performApply()
     */
    protected void performApply() {
        setFontData();
    }

    /* (non-Javadoc)
      * @see org.eclipse.jface.preference.IPreferencePage#performOk()
      */
    public boolean performOk() {
        setFontData();
        RegExPlugin.getDefault().savePluginPreferences();
        return true;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
     */
    protected Control createContents(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);

        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        composite.setLayout(gridLayout);
        composite.setLayoutData(
                new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH));

        Label regexFontLabel = new Label(composite, SWT.NONE);
        regexFontLabel.setText("Regular Expression Font:");
        GridData gridData = new GridData();
        gridData.horizontalSpan = 2;
        regexFontLabel.setLayoutData(gridData);

        regexFontText = new Text(composite, SWT.BORDER);
        regexFontText.setText(buildDescription(fontName("regex"), fontHeight("regex")));
        regexFontText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        regexFontText.setFont(createFont("regex"));

        regexFontButton = new Button(composite, SWT.PUSH);
        regexFontButton.setText("Change...");
        regexFontButton.addSelectionListener(this);
        regexFontButton.setData("regex");
        regexFontButton.setLayoutData(new GridData());

        Label searchTextFontLabel = new Label(composite, SWT.NONE);
        searchTextFontLabel.setText("Search Text Font:");
        gridData = new GridData();
        gridData.horizontalSpan = 2;
        searchTextFontLabel.setLayoutData(gridData);

        searchTextFontText = new Text(composite, SWT.BORDER);
        searchTextFontText.setText(buildDescription(fontName("searchtext"), fontHeight("searchtext")));
        searchTextFontText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        searchTextFontText.setFont(createFont("searchtext"));

        searchTextFontButton = new Button(composite, SWT.PUSH);
        searchTextFontButton.setText("Change...");
        searchTextFontButton.addSelectionListener(this);
        searchTextFontButton.setData("searchtext");
        searchTextFontButton.setLayoutData(new GridData());

        Label resultFontLabel = new Label(composite, SWT.NONE);
        resultFontLabel.setText("Result Font:");
        gridData = new GridData();
        gridData.horizontalSpan = 2;
        resultFontLabel.setLayoutData(gridData);

        resultFontText = new Text(composite, SWT.BORDER);
        resultFontText.setText(buildDescription(fontName("result"), fontHeight("result")));
        resultFontText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        resultFontText.setFont(createFont("result"));

        resultFontButton = new Button(composite, SWT.PUSH);
        resultFontButton.setText("Change...");
        resultFontButton.addSelectionListener(this);
        resultFontButton.setData("result");
        resultFontButton.setLayoutData(new GridData());

        return parent;
    }

    private String fontName(String type) {
        return getPreferenceStore().getString("font." + type + ".name");
    }

    private int fontHeight(String type) {
        return getPreferenceStore().getInt("font." + type + ".height");
    }

    private int fontStyle(String type) {
        return getPreferenceStore().getInt("font." + type + ".style");
    }

    private FontData fontData(String type) {
        return new FontData(fontName(type), fontHeight(type), fontStyle(type));
    }

    private Font createFont(String type) {
        return new Font(Display.getCurrent(), fontData(type));
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
     */
    public void init(IWorkbench workbench) {
        this.setPreferenceStore(RegExPlugin.getDefault().getPreferenceStore());

    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
     */
    public void widgetSelected(SelectionEvent e) {
        if (e.widget == regexFontButton || e.widget == searchTextFontButton || e.widget == resultFontButton) {
            FontDialog fontDialog = new FontDialog(getShell());
            fontDialog.setFontList(new FontData[] { fontData((String) ((Button) e.widget).getData()) });
            FontData fontData = fontDialog.open();
            if (fontData != null) {
                if (e.widget == regexFontButton) {
                    regexFontData = fontData;
                    regexFontText.setText(fontData.getName() + ", " + fontData.getHeight());
                    regexFontText.setFont(new Font(Display.getCurrent(), fontData));
                }
                if (e.widget == searchTextFontButton) {
                    searchTextFontData = fontData;
                    searchTextFontText.setText(fontData.getName() + ", " + fontData.getHeight());
                    searchTextFontText.setFont(new Font(Display.getCurrent(), fontData));
                }
                if (e.widget == resultFontButton) {
                    resultFontData = fontData;
                    resultFontText.setText(fontData.getName() + ", " + fontData.getHeight());
                    resultFontText.setFont(new Font(Display.getCurrent(), fontData));
                }
            }
        }

    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
     */
    public void widgetDefaultSelected(SelectionEvent e) {
        // TODO Auto-generated method stub

    }

    private String buildDescription(String fontName, int fontHeight) {
        return fontName + ", " + fontHeight;
    }

}