org.eclipse.team.internal.ccvs.ui.CommentTemplatesPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.team.internal.ccvs.ui.CommentTemplatesPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2010 IBM Corporation and others.
 * 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:
 *    Maik Schreiber - initial API and implementation
 *    IBM - ongoing development
 *******************************************************************************/

package org.eclipse.team.internal.ccvs.ui;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.internal.ccvs.core.util.Util;
import org.eclipse.ui.*;

public class CommentTemplatesPreferencePage extends PreferencePage
        implements IWorkbenchPreferencePage, ISelectionChangedListener {

    private ListViewer viewer;
    private Button editButton;
    private Button removeButton;
    private Text preview;

    protected Control createContents(Composite ancestor) {
        Composite parent = new Composite(ancestor, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        layout.numColumns = 1;
        parent.setLayout(layout);
        parent.setLayoutData(new GridData(GridData.FILL_BOTH));

        createListAndButtons(parent);

        Label previewLabel = new Label(parent, SWT.NONE);
        previewLabel.setText(CVSUIMessages.CommentTemplatesPreferencePage_Preview);

        preview = new Text(parent, SWT.MULTI | SWT.READ_ONLY | SWT.BORDER);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.heightHint = convertHeightInCharsToPixels(5);
        preview.setLayoutData(gd);

        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
                IHelpContextIds.COMMENT_TEMPLATE_PREFERENCE_PAGE);
        Dialog.applyDialogFont(ancestor);

        return parent;
    }

    private Composite createListAndButtons(Composite parent) {
        Composite listAndButtons = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        layout.numColumns = 2;
        listAndButtons.setLayout(layout);
        listAndButtons.setLayoutData(new GridData(GridData.FILL_BOTH));

        Label viewerLabel = new Label(listAndButtons, SWT.NONE);
        viewerLabel.setText(CVSUIMessages.CommentTemplatesPreferencePage_Description);
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        data.horizontalSpan = 2;
        viewerLabel.setLayoutData(data);

        viewer = new ListViewer(listAndButtons);
        viewer.setLabelProvider(new LabelProvider() {
            public String getText(Object element) {
                String template = (String) element;
                return Util.flattenText(template);
            }
        });
        viewer.addSelectionChangedListener(this);
        viewer.setComparator(new ViewerComparator() {
            public int compare(Viewer viewer, Object e1, Object e2) {
                String template1 = Util.flattenText((String) e1);
                String template2 = Util.flattenText((String) e2);
                return template1.compareToIgnoreCase(template2);
            }
        });
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                editTemplate();
            }
        });
        List list = viewer.getList();
        list.setLayoutData(new GridData(GridData.FILL_BOTH));

        // populate list
        String[] templates = CVSUIPlugin.getPlugin().getRepositoryManager().getCommentTemplates();
        for (int i = 0; i < templates.length; i++) {
            viewer.add(templates[i]);
        }

        createButtons(listAndButtons);
        return listAndButtons;
    }

    private void createButtons(Composite parent) {
        Composite buttons = new Composite(parent, SWT.NONE);
        buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
        GridLayout layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        buttons.setLayout(layout);

        Button newButton = new Button(buttons, SWT.PUSH);
        newButton.setText(CVSUIMessages.CommentTemplatesPreferencePage_New);
        GridData data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
        data.widthHint = Math.max(widthHint, newButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
        newButton.setLayoutData(data);
        newButton.setEnabled(true);
        newButton.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                newTemplate();
            }
        });

        editButton = new Button(buttons, SWT.PUSH);
        editButton.setText(CVSUIMessages.CommentTemplatesPreferencePage_Edit);
        data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
        data.widthHint = Math.max(widthHint, editButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
        editButton.setLayoutData(data);
        editButton.setEnabled(false);
        editButton.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event e) {
                editTemplate();
            }
        });

        removeButton = new Button(buttons, SWT.PUSH);
        removeButton.setText(CVSUIMessages.CommentTemplatesPreferencePage_Remove);
        data = new GridData();
        data.horizontalAlignment = GridData.FILL;
        widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
        data.widthHint = Math.max(widthHint, removeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
        removeButton.setLayoutData(data);
        removeButton.setEnabled(false);
        removeButton.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event e) {
                remove();
            }
        });
    }

    public void selectionChanged(SelectionChangedEvent event) {
        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
        switch (selection.size()) {
        case 0:
            editButton.setEnabled(false);
            removeButton.setEnabled(false);
            preview.setText(""); //$NON-NLS-1$
            break;

        case 1:
            editButton.setEnabled(true);
            removeButton.setEnabled(true);
            preview.setText((String) selection.getFirstElement());
            break;

        default:
            editButton.setEnabled(false);
            removeButton.setEnabled(true);
            preview.setText(""); //$NON-NLS-1$
            break;
        }
    }

    void newTemplate() {
        CommentTemplateEditDialog dialog = new CommentTemplateEditDialog(getShell(),
                CVSUIMessages.CommentTemplatesPreferencePage_EditCommentTemplateTitle,
                CVSUIMessages.CommentTemplatesPreferencePage_EditCommentTemplateMessage, "", null); //$NON-NLS-1$
        if (dialog.open() == Window.OK) {
            viewer.add(dialog.getValue());
        }
    }

    void editTemplate() {
        IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
        if (selection.size() == 1) {
            String oldTemplate = (String) selection.getFirstElement();
            CommentTemplateEditDialog dialog = new CommentTemplateEditDialog(getShell(),
                    CVSUIMessages.CommentTemplatesPreferencePage_EditCommentTemplateTitle,
                    CVSUIMessages.CommentTemplatesPreferencePage_EditCommentTemplateMessage, oldTemplate, null);
            if (dialog.open() == Window.OK) {
                viewer.remove(oldTemplate);
                viewer.add(dialog.getValue());
            }
        }
    }

    void remove() {
        IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
        viewer.remove(selection.toArray());
    }

    public boolean performOk() {
        int numTemplates = viewer.getList().getItemCount();
        String[] templates = new String[numTemplates];
        for (int i = 0; i < numTemplates; i++) {
            templates[i] = (String) viewer.getElementAt(i);
        }
        try {
            CVSUIPlugin.getPlugin().getRepositoryManager().replaceAndSaveCommentTemplates(templates);
        } catch (TeamException e) {
            CVSUIPlugin.openError(getShell(), null, null, e, CVSUIPlugin.LOG_OTHER_EXCEPTIONS);
        }

        return super.performOk();
    }

    public void init(IWorkbench workbench) {
        // Nothing to do
    }

    protected void performDefaults() {
        // default: the list of comments is cleaned
        viewer.getList().removeAll();
        super.performDefaults();
    }

}