blob: 732767be12df2431a1b95b9f86c6bc6c105d1982 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}