name.schedenig.eclipse.grepconsole.preferences.GrepConsolePreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for name.schedenig.eclipse.grepconsole.preferences.GrepConsolePreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2008 - 2014 Marian Schedenig
 * 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:
 *    Marian Schedenig - initial API and implementation
 *******************************************************************************/

package name.schedenig.eclipse.grepconsole.preferences;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import name.schedenig.eclipse.grepconsole.Activator;
import name.schedenig.eclipse.grepconsole.i18n.Messages;
import name.schedenig.eclipse.grepconsole.model.GrepExpressionRootFolder;
import name.schedenig.eclipse.grepconsole.model.GrepExpressionsWithSelection;
import name.schedenig.eclipse.grepconsole.util.GrepConsoleUtil;
import name.schedenig.eclipse.grepconsole.view.items.EditableItemsPanel;
import name.schedenig.eclipse.grepconsole.view.styles.StylesPanel;
import name.schedenig.eclipse.grepconsole.view.whatsnew.WhatsNewDialog;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.osgi.service.prefs.BackingStoreException;

/**
 * Grep Console preference page. Contains two tabs, one for editing the grep
 * expressions and one for editing the styles.
 * 
 * @author msched
 */
public class GrepConsolePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
    // --- GUI variables ---
    private TabFolder tabFolder;
    private TabItem tiExpressions;
    private TabItem tiStyles;
    private EditableItemsPanel panelExpressions;
    private StylesPanel panelStyles;

    /**
     * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected Control createContents(Composite parent) {
        Activator activator = Activator.getDefault();
        GrepExpressionsWithSelection expressions = new GrepExpressionsWithSelection(
                activator.getExpressions().copy(true), null, null, null, null);

        tabFolder = new TabFolder(parent, SWT.TOP);
        tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        tiExpressions = new TabItem(tabFolder, SWT.NONE);
        tiExpressions.setText(Messages.GrepConsolePreferencePage_expressions);
        panelExpressions = createExpressionsPanel(tabFolder);
        tiExpressions.setControl(panelExpressions);
        panelExpressions.setExpressions(expressions);

        tiStyles = new TabItem(tabFolder, SWT.NONE);
        tiStyles.setText(Messages.GrepConsolePreferencePage_styles);
        panelStyles = createStylesPanel(tabFolder);
        tiStyles.setControl(panelStyles);
        panelStyles.setRoot(expressions.getRootFolder());

        return tabFolder;
    }

    /**
     * By default, PreferencePage will return its content's preferred size, which
     * in turn depends on the number of groups/items and styles displayed in the
     * panels. This can lead to huge page sizes and also forces scroll bars on
     * the panels instead of the tables inside them.
     * 
     * To prevent this, we return a predetermined minimum size similar to what
     * we do for the items/styles dialog.
     * 
     * @see org.eclipse.jface.preference.PreferencePage#doComputeSize()
     */
    @Override
    protected Point doComputeSize() {
        return GrepConsoleUtil.charsToPixelDimensions(getShell(), 40, 25);
    }

    /**
     * @see org.eclipse.jface.preference.PreferencePage#createControl(org.eclipse.swt.widgets.Composite)
     */
    @Override
    public void createControl(Composite parent) {
        super.createControl(parent);

        panelExpressions.resizeColumns();

        WhatsNewDialog.showIfEnabled(parent.getShell());
    }

    /**
     * Creates the contents of the expressions tab.
     * 
     * @param parent Parent tab folder.
     * 
     * @return Expressions panel.
     */
    private EditableItemsPanel createExpressionsPanel(Composite parent) {
        EditableItemsPanel panel = new EditableItemsPanel(parent, SWT.NONE);
        panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        return panel;
    }

    /**
     * Creates the contents of the styles tab.
     * 
     * @param parent Parent tab folder.
     * 
     * @return Styles panel.
     */
    private StylesPanel createStylesPanel(Composite parent) {
        StylesPanel panel = new StylesPanel(parent, SWT.NONE);
        panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        return panel;
    }

    /**
     * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
     */
    @Override
    public void init(IWorkbench workbench) {
    }

    /**
     * @see org.eclipse.jface.preference.PreferencePage#performOk()
     */
    @Override
    public boolean performOk() {
        Activator activator = Activator.getDefault();
        GrepExpressionRootFolder activatorExpressions = activator.getExpressions();
        activatorExpressions.copyFrom(panelExpressions.getExpressions().getRootFolder(), true);

        try {
            activator.saveSettings();
        } catch (ParserConfigurationException ex) {
            Activator.getDefault().log(IStatus.ERROR, Messages.Error_could_not_save_settings, ex);
        } catch (TransformerException ex) {
            Activator.getDefault().log(IStatus.ERROR, Messages.Error_could_not_save_settings, ex);
        } catch (BackingStoreException ex) {
            Activator.getDefault().log(IStatus.ERROR, Messages.Error_could_not_save_settings, ex);
        }

        return super.performOk();
    }

    /**
     * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
     */
    @Override
    protected void performDefaults() {
        GrepExpressionRootFolder expressions = Activator.getDefault().loadDefaults().copy(true);

        panelExpressions.setExpressions(new GrepExpressionsWithSelection(expressions, null, null, null, null));
        panelStyles.setRoot(expressions);

        super.performDefaults();
    }
}