blob: 04cde16639e9b12b5e3c8c2cd85af967fcf893da [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.contentassist;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
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.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wst.sse.ui.internal.SSEUIMessages;
import org.eclipse.wst.sse.ui.internal.SSEUIPlugin;
/**
* <p>This is a <code>MessageDialog</code> which allows the user
* to choose that the dialog isn't shown again the next time.</p>
*
* @base org.eclipse.jdt.internal.ui.dialogs.OptionalMessageDialog
*/
public class OptionalMessageDialog extends MessageDialog {
// String constants for widgets
private static final String CHECKBOX_TEXT = SSEUIMessages.OptionalMessageDialog_dontShowAgain;
// Dialog store id constants
private static final String STORE_ID = "ContentAssist_OptionalMessageDialog.hide."; //$NON-NLS-1$
public static final int NOT_SHOWN = IDialogConstants.CLIENT_ID + 1;
private final String fId;
private final String fCheckBoxText;
private Button fHideDialogCheckBox;
/**
* Opens the dialog but only if the user hasn't chosen to hide it.
*
* @return the index of the pressed button or {@link SWT#DEFAULT} if the dialog got dismissed
* without pressing a button (e.g. via Esc) or {{@link #NOT_SHOWN} if the dialog was not
* shown
*/
public static int open(String id, Shell parent, String title, Image titleImage, String message, int dialogType, String[] buttonLabels, int defaultButtonIndex) {
return open(id, parent, title, titleImage, message, dialogType, buttonLabels, defaultButtonIndex, CHECKBOX_TEXT);
}
/**
* Opens the dialog but only if the user hasn't chosen to hide it.
*
* @return the index of the pressed button or {@link SWT#DEFAULT} if the dialog got dismissed
* without pressing a button (e.g. via Esc) or {{@link #NOT_SHOWN} if the dialog was not
* shown
*/
public static int open(String id, Shell parent, String title, Image titleImage, String message, int dialogType, String[] buttonLabels, int defaultButtonIndex, String checkboxText) {
if (!isDialogEnabled(id))
return OptionalMessageDialog.NOT_SHOWN;
MessageDialog dialog= new OptionalMessageDialog(id, parent, title, titleImage, message, dialogType, buttonLabels, defaultButtonIndex, checkboxText);
return dialog.open();
}
protected OptionalMessageDialog(String id, Shell parent, String title, Image titleImage, String message, int dialogType, String[] buttonLabels, int defaultButtonIndex) {
this(id, parent, title, titleImage, message, dialogType, buttonLabels, defaultButtonIndex, CHECKBOX_TEXT);
}
protected OptionalMessageDialog(String id, Shell parent, String title, Image titleImage, String message, int dialogType, String[] buttonLabels, int defaultButtonIndex, String checkBoxText) {
super(parent, title, titleImage, message, dialogType, buttonLabels, defaultButtonIndex);
fId= id;
fCheckBoxText= checkBoxText;
}
protected Control createCustomArea(Composite parent) {
Composite composite= new Composite(parent, SWT.NONE);
GridLayout layout= new GridLayout();
layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
fHideDialogCheckBox= new Button(composite, SWT.CHECK | SWT.LEFT);
fHideDialogCheckBox.setText(fCheckBoxText);
fHideDialogCheckBox.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
setDialogEnabled(fId, !((Button)e.widget).getSelection());
}
});
applyDialogFont(fHideDialogCheckBox);
return fHideDialogCheckBox;
}
//--------------- Configuration handling --------------
/**
* Returns this dialog
*
* @return the settings to be used
*/
private static IDialogSettings getDialogSettings() {
IDialogSettings settings= SSEUIPlugin.getDefault().getDialogSettings();
settings= settings.getSection(STORE_ID);
if (settings == null)
settings= SSEUIPlugin.getDefault().getDialogSettings().addNewSection(STORE_ID);
return settings;
}
/**
* Answers whether the optional dialog is enabled and should be shown.
*/
public static boolean isDialogEnabled(String key) {
IDialogSettings settings= getDialogSettings();
return !settings.getBoolean(key);
}
/**
* Sets whether the optional dialog is enabled and should be shown.
*/
public static void setDialogEnabled(String key, boolean isEnabled) {
IDialogSettings settings= getDialogSettings();
settings.put(key, !isEnabled);
}
/**
* Clears all remembered information about hidden dialogs
*/
public static void clearAllRememberedStates() {
IDialogSettings settings= SSEUIPlugin.getDefault().getDialogSettings();
settings.addNewSection(STORE_ID);
}
}