/******************************************************************************* * Copyright (c) 2015 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.foundation.checkup.dialog; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.jboss.tools.foundation.checkup.JVMProblemDetectorMessages; import org.jboss.tools.foundation.checkup.internal.model.UnresolvedClass; public class UnresolvedClassesDialog extends Dialog{ public static volatile boolean showing = false; private List<UnresolvedClass> classes; private String currnetJavaVersion = ""; private boolean showNextTime = true; public UnresolvedClassesDialog(Shell parentShell, List<UnresolvedClass> classes, String currentJavaVersion) { super(parentShell); setShellStyle(getShellStyle() | SWT.RESIZE); this.classes = classes; this.currnetJavaVersion = currentJavaVersion; } public boolean showNextTime(){ return showNextTime; } protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); } protected Control createDialogArea(Composite parent) { getShell().setText("Warning"); Composite title = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginTop = layout.marginBottom = layout.marginLeft = layout.marginRight = 5; title.setLayout(layout); GridData data = new GridData(SWT.LEFT, SWT.FILL, true, false); data.widthHint = 500; title.setLayoutData(data); Composite composite = new Composite(parent, SWT.NONE); layout = new GridLayout(); layout.numColumns = 1; layout.marginTop = layout.marginBottom = layout.marginLeft = layout.marginRight = 5; composite.setLayout(layout); data = new GridData(SWT.FILL, SWT.FILL, true, true); composite.setLayoutData(data); // create image Image image = PlatformUI.getWorkbench().getDisplay().getSystemImage(SWT.ICON_WARNING); Label warning = new Label(title, 0); image.setBackground(warning.getBackground()); warning.setImage(image); warning.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING| GridData.VERTICAL_ALIGN_CENTER)); // message Label label = new Label(title, SWT.WRAP); data = new GridData(SWT.LEFT, SWT.FILL, true, false); label.setLayoutData(data); label.setFont(parent.getFont()); StringBuilder sb = new StringBuilder(); sb.append(NLS.bind(JVMProblemDetectorMessages.UNRESOLVED_CLASSES_WARNING_DIALOG_MESSAGE, currnetJavaVersion)); label.setText(sb.toString()); final ListViewer list = new ListViewer(composite, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER); data = new GridData(SWT.FILL, SWT.FILL, true, true); data.heightHint = 200; list.getList().setLayoutData(data); list.setContentProvider(new ListContent()); list.setLabelProvider(new ListLabelProvider()); list.setInput(classes); label = new Label(composite, SWT.WRAP); data = new GridData(SWT.LEFT, SWT.FILL, true, false); label.setLayoutData(data); label.setFont(parent.getFont()); label.setText(JVMProblemDetectorMessages.UNRESOLVED_CLASSES_WARNING_DIALOG_ADVISE); final Button button = new Button(composite, SWT.CHECK); button.setText(JVMProblemDetectorMessages.DO_NOT_SHOW); button.addSelectionListener(new SelectionListener(){ public void widgetSelected(SelectionEvent e) { showNextTime = !button.getSelection(); } public void widgetDefaultSelected(SelectionEvent e) { } }); return composite; } public class ListContent implements IStructuredContentProvider { public Object[] getElements(Object inputElement) { if(inputElement == classes){ return classes.toArray(); } return null; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } public class ListLabelProvider implements ILabelProvider{ public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } public Image getImage(Object element) { return null; } public String getText(Object element) { if(element instanceof UnresolvedClass){ return ((UnresolvedClass) element).toString(); } return null; } } public boolean close() { showing = false; return super.close(); } public int open() { showing = true; return super.open(); } }