/******************************************************************************* * Copyright (c) 2016 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets.quickfix; import org.eclipse.eef.EEFValidationRuleDescription; import org.eclipse.eef.ide.ui.internal.Messages; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.forms.IMessage; /** * This optional page will let the user select the violated validation rule to fix. * * @author sbegaudeau */ public class EEFValidationMessagesPage extends WizardPage { /** * The messages. */ private IMessage[] messages; /** * The selected message. */ private IMessage selectedMessage; /** * The table viewer used to display all the validation messages. */ private TableViewer validationMessagesList; /** * Creates the wizard page with the message to display. * * @param messages * The messages */ public EEFValidationMessagesPage(IMessage[] messages) { super(Messages.EEFValidationRulesPage_title); this.setTitle(Messages.EEFValidationRulesPage_title); this.setDescription(Messages.EEFValidationRulesPage_description); this.messages = messages; } /** * Creates the wizard page with the message to display and one of those messages selected. * * @param messages * The messages * @param selectedMessage * The message to select */ public EEFValidationMessagesPage(IMessage[] messages, IMessage selectedMessage) { this(messages); this.selectedMessage = selectedMessage; } /** * {@inheritDoc} * * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { this.initializeDialogUnits(parent); Composite control = new Composite(parent, SWT.NONE); control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.setControl(control); FormLayout layout = new FormLayout(); layout.marginHeight = this.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = this.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.spacing = this.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); control.setLayout(layout); Label label = new Label(control, SWT.NONE); label.setText(Messages.EEFValidationRulesPage_label); label.setLayoutData(new FormData()); // Create the list for the message this.validationMessagesList = new TableViewer(control, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL); this.validationMessagesList.setContentProvider(new EEFValidationMessagesTableContentProvider()); this.validationMessagesList.setLabelProvider(new EEFValidationMessagesTableLabelProvider()); this.validationMessagesList.setComparator(new EEFValidationMessagesTableComparator()); this.validationMessagesList.addSelectionChangedListener((event) -> { // Sets the new selected message ISelection selection = event.getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; Object element = structuredSelection.getFirstElement(); if (element instanceof IMessage) { this.selectedMessage = (IMessage) element; } } if (this.selectedMessage.getKey() instanceof EEFValidationRuleDescription) { EEFValidationRuleDescription validationRuleDescription = (EEFValidationRuleDescription) this.selectedMessage.getKey(); if (validationRuleDescription.getFixes().size() == 0) { this.setMessage(Messages.EEFQuickFixWizard_noQuickFixAvailable, IMessageProvider.ERROR); } else { this.setMessage(null); } } this.setPageComplete(true); }); FormData listData = new FormData(); listData.top = new FormAttachment(label, 0); listData.left = new FormAttachment(0); listData.right = new FormAttachment(100, 0); listData.height = convertHeightInCharsToPixels(10); this.validationMessagesList.getControl().setLayoutData(listData); this.validationMessagesList.setInput(this.messages); Dialog.applyDialogFont(control); // Select the first quick fix available this.validationMessagesList.setSelection(new StructuredSelection(this.validationMessagesList.getElementAt(0))); } /** * {@inheritDoc} * * @see org.eclipse.jface.wizard.WizardPage#isPageComplete() */ @Override public boolean isPageComplete() { // There is always a next page return true; } /** * Returns the selected {@link IMessage}. * * @return The selected message */ public IMessage getSelectedMessage() { return this.selectedMessage; } }