blob: 98036b15e2c518b9531e6a19056b1d001c31eaa3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2008 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.dialogs;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.preferences.MembersOrderPreferencePage;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
public class SortMembersMessageDialog extends OptionalMessageDialog {
private final static String OPTIONAL_ID= "SortMembersMessageDialog.optionalDialog.id"; //$NON-NLS-1$
private final static String DIALOG_SETTINGS_SORT_ALL= "SortMembers.sort_all"; //$NON-NLS-1$
private SelectionButtonDialogField fNotSortAllRadio;
private SelectionButtonDialogField fSortAllRadio;
private final IDialogSettings fDialogSettings;
public SortMembersMessageDialog(Shell parentShell) {
super(OPTIONAL_ID, parentShell, DialogsMessages.SortMembersMessageDialog_dialog_title, null, new String(), INFORMATION, new String[] {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL}, 0);
fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
boolean isSortAll= fDialogSettings.getBoolean(DIALOG_SETTINGS_SORT_ALL);
fNotSortAllRadio= new SelectionButtonDialogField(SWT.RADIO);
fNotSortAllRadio.setLabelText(DialogsMessages.SortMembersMessageDialog_do_not_sort_fields_label);
fNotSortAllRadio.setSelection(!isSortAll);
fSortAllRadio= new SelectionButtonDialogField(SWT.RADIO);
fSortAllRadio.setLabelText(DialogsMessages.SortMembersMessageDialog_sort_all_label);
fSortAllRadio.setSelection(isSortAll);
}
/*
* @see org.eclipse.jface.dialogs.Dialog#isResizable()
* @since 3.4
*/
@Override
protected boolean isResizable() {
return true;
}
private Control createLinkControl(Composite composite) {
Link link= new Link(composite, SWT.WRAP | SWT.RIGHT);
link.setText(DialogsMessages.SortMembersMessageDialog_description);
link.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
openMembersSortOrderPage();
}
});
link.setToolTipText(DialogsMessages.SortMembersMessageDialog_link_tooltip);
GridData gridData= new GridData(GridData.FILL, GridData.CENTER, true, false);
gridData.widthHint= convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);//convertWidthInCharsToPixels(60);
link.setLayoutData(gridData);
link.setFont(composite.getFont());
return link;
}
/**
* Opens the 'Members Sort Order' preference page.
*/
protected void openMembersSortOrderPage() {
PreferencesUtil.createPreferenceDialogOn(getShell(), MembersOrderPreferencePage.PREF_ID, null, null).open();
}
/*
* @see org.eclipse.jface.dialogs.IconAndMessageDialog#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createContents(Composite parent) {
Control contents= super.createContents(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.SORT_MEMBERS_DIALOG);
return contents;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IconAndMessageDialog#createMessageArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createMessageArea(Composite parent) {
initializeDialogUnits(parent);
Composite messageComposite= new Composite(parent, SWT.NONE);
messageComposite.setFont(parent.getFont());
GridLayout layout= new GridLayout();
layout.numColumns= 1;
layout.marginHeight= 0;
layout.marginWidth= 0;
layout.verticalSpacing= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
messageComposite.setLayout(layout);
messageComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createLinkControl(messageComposite);
int indent= convertWidthInCharsToPixels(3);
fNotSortAllRadio.doFillIntoGrid(messageComposite, 1);
LayoutUtil.setHorizontalIndent(fNotSortAllRadio.getSelectionButton(null), indent);
fSortAllRadio.doFillIntoGrid(messageComposite, 1);
LayoutUtil.setHorizontalIndent(fSortAllRadio.getSelectionButton(null), indent);
final Composite warningComposite= new Composite(messageComposite, SWT.NONE);
layout= new GridLayout();
layout.numColumns= 2;
layout.marginWidth= 0;
layout.marginHeight= 0;
warningComposite.setLayout(layout);
warningComposite.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
warningComposite.setFont(messageComposite.getFont());
Image image= Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING);
final Label imageLabel1= new Label(warningComposite, SWT.LEFT | SWT.WRAP);
imageLabel1.setImage(image);
imageLabel1.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 1, 1));
final Label label= new Label(warningComposite, SWT.WRAP);
label.setText(DialogsMessages.SortMembersMessageDialog_sort_warning_label);
GridData gridData= new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1);
gridData.widthHint= convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(gridData);
label.setFont(warningComposite.getFont());
fNotSortAllRadio.setDialogFieldListener(new IDialogFieldListener() {
public void dialogFieldChanged(DialogField field) {
imageLabel1.setEnabled(!fNotSortAllRadio.isSelected());
label.setEnabled(!fNotSortAllRadio.isSelected());
}
});
imageLabel1.setEnabled(!fNotSortAllRadio.isSelected());
label.setEnabled(!fNotSortAllRadio.isSelected());
return messageComposite;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#open()
*/
@Override
public int open() {
if (isDialogEnabled(OPTIONAL_ID)) {
int res= super.open();
if (res != Window.OK) {
setDialogEnabled(OPTIONAL_ID, true); // don't save state on cancel
}
return res;
}
return Window.OK;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#close()
*/
@Override
public boolean close() {
fDialogSettings.put(DIALOG_SETTINGS_SORT_ALL, fSortAllRadio.isSelected());
return super.close();
}
public boolean isNotSortingFieldsEnabled() {
return fNotSortAllRadio.isSelected();
}
}