blob: 4f34be7e9bbca17b5ea00b0a1f1b5ad0606ef796 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2006 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.ui.internal.activities.ws;
import com.ibm.icu.text.MessageFormat;
import java.util.Collection;
import java.util.HashSet;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Set;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
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.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.activities.IActivity;
import org.eclipse.ui.activities.IActivityManager;
import org.eclipse.ui.activities.NotDefinedException;
import org.eclipse.ui.activities.WorkbenchTriggerPointAdvisor;
/**
* Dialog that will prompt the user and confirm that they wish to activate a set
* of activities.
*
* @since 3.0
*/
public class EnablementDialog extends Dialog {
/**
* The translation bundle in which to look up internationalized text.
*/
private final static ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(EnablementDialog.class.getName());
private Button dontAskButton;
private Set activitiesToEnable = new HashSet(7);
private Collection activityIds;
private boolean dontAsk;
private Button detailsButton;
boolean showDetails = false;
private Composite detailsComposite;
private Label detailsLabel;
private String selectedActivity;
private Text detailsText;
private Properties strings;
/**
* Create a new instance of the reciever.
*
* @param parentShell the parent shell
* @param activityIds the candidate activities
* @param strings string overrides
*/
public EnablementDialog(Shell parentShell, Collection activityIds, Properties strings) {
super(parentShell);
this.activityIds = activityIds;
this.strings = strings;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
Font dialogFont = parent.getFont();
composite.setFont(dialogFont);
Label text = new Label(composite, SWT.NONE);
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
text.setFont(dialogFont);
IActivityManager manager = PlatformUI.getWorkbench()
.getActivitySupport().getActivityManager();
if (activityIds.size() == 1) {
String activityId = (String) activityIds.iterator().next();
activitiesToEnable.add(activityId);
selectedActivity = activityId;
IActivity activity = manager.getActivity(activityId);
String activityText;
try {
activityText = activity.getName();
} catch (NotDefinedException e) {
activityText = activity.getId();
}
text.setText(MessageFormat.format(RESOURCE_BUNDLE
.getString("requiresSingle"), //$NON-NLS-1$
new Object[] { activityText }));
text = new Label(composite, SWT.NONE);
text
.setText(strings
.getProperty(
WorkbenchTriggerPointAdvisor.PROCEED_SINGLE,
RESOURCE_BUNDLE
.getString(WorkbenchTriggerPointAdvisor.PROCEED_SINGLE)));
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
text.setFont(dialogFont);
} else {
text.setText(RESOURCE_BUNDLE.getString("requiresMulti")); //$NON-NLS-1$
Set activityIdsCopy = new HashSet(activityIds);
CheckboxTableViewer viewer = CheckboxTableViewer.newCheckList(
composite, SWT.CHECK | SWT.BORDER | SWT.SINGLE);
viewer.setContentProvider(new ActivityContentProvider());
viewer.setLabelProvider(new ActivityLabelProvider(manager));
viewer.setInput(activityIdsCopy);
viewer.setCheckedElements(activityIdsCopy.toArray());
viewer.addCheckStateListener(new ICheckStateListener() {
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent)
*/
public void checkStateChanged(CheckStateChangedEvent event) {
if (event.getChecked()) {
activitiesToEnable.add(event.getElement());
} else {
activitiesToEnable.remove(event.getElement());
}
getButton(Window.OK).setEnabled(
!activitiesToEnable.isEmpty());
}
});
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
*/
public void selectionChanged(SelectionChangedEvent event) {
selectedActivity = (String) ((IStructuredSelection) event
.getSelection()).getFirstElement();
setDetails();
}
});
activitiesToEnable.addAll(activityIdsCopy);
viewer.getControl().setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
viewer.getControl().setFont(dialogFont);
text = new Label(composite, SWT.NONE);
text.setText(strings.getProperty(WorkbenchTriggerPointAdvisor.PROCEED_MULTI, RESOURCE_BUNDLE
.getString(WorkbenchTriggerPointAdvisor.PROCEED_MULTI)));
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
text.setFont(dialogFont);
}
Label seperator = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
seperator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
dontAskButton = new Button(composite, SWT.CHECK);
dontAskButton.setSelection(false);
dontAskButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
dontAskButton.setText(strings.getProperty(
WorkbenchTriggerPointAdvisor.DONT_ASK, RESOURCE_BUNDLE
.getString(WorkbenchTriggerPointAdvisor.DONT_ASK)));
dontAskButton.setFont(dialogFont);
detailsComposite = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
detailsComposite.setLayout(layout);
detailsLabel = new Label(detailsComposite, SWT.NONE);
detailsLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
detailsLabel.setFont(dialogFont);
detailsText = new Text(detailsComposite, SWT.WRAP | SWT.V_SCROLL
| SWT.BORDER | SWT.READ_ONLY);
detailsText.setLayoutData(new GridData(GridData.FILL_BOTH));
detailsText.setFont(dialogFont);
setDetails();
GridData data = new GridData(GridData.FILL_BOTH);
detailsComposite.setLayoutData(data);
setDetailHints();
return composite;
}
/**
* Set the text of the detail label and text area.
*/
protected void setDetails() {
if (selectedActivity == null) {
detailsLabel
.setText(strings
.getProperty(
WorkbenchTriggerPointAdvisor.NO_DETAILS,
RESOURCE_BUNDLE
.getString(WorkbenchTriggerPointAdvisor.NO_DETAILS)));
detailsText.setText(""); //$NON-NLS-1$
} else {
IActivity activity = PlatformUI.getWorkbench().getActivitySupport()
.getActivityManager().getActivity(selectedActivity);
String name;
try {
name = activity.getName();
} catch (NotDefinedException e1) {
name = selectedActivity;
}
String desc;
try {
desc = activity.getDescription();
} catch (NotDefinedException e) {
desc = RESOURCE_BUNDLE.getString("noDescAvailable"); //$NON-NLS-1$
}
detailsLabel.setText(MessageFormat.format(RESOURCE_BUNDLE
.getString("detailsLabel"), new Object[] { name })); //$NON-NLS-1$
detailsText.setText(desc);
}
}
/**
*
*/
protected void setDetailHints() {
GridData data = (GridData) detailsComposite.getLayoutData();
if (showDetails) {
Composite parent = detailsComposite.getParent();
data.widthHint = parent.getSize().x - ((GridLayout)parent.getLayout()).marginWidth * 2;
data.heightHint = convertHeightInCharsToPixels(5);
} else {
data.widthHint = 0;
data.heightHint = 0;
}
}
/**
* Set the label of the detail button based on whether we're currently showing the description text.
*/
private void setDetailButtonLabel() {
if (!showDetails) {
detailsButton.setText(RESOURCE_BUNDLE.getString("showDetails")); //$NON-NLS-1$
} else {
detailsButton.setText(RESOURCE_BUNDLE.getString("hideDetails")); //$NON-NLS-1$
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(RESOURCE_BUNDLE.getString("title")); //$NON-NLS-1$
}
/**
* @return Returns whether the user has declared that there is to be no further
* prompting for the supplied activities
*/
public boolean getDontAsk() {
return dontAsk;
}
/**
* @return Returns the activities to enable
*/
public Set getActivitiesToEnable() {
return activitiesToEnable;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
protected void okPressed() {
dontAsk = dontAskButton.getSelection();
super.okPressed();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
detailsButton = createButton(parent, IDialogConstants.DETAILS_ID,
"", false); //$NON-NLS-1$
setDetailButtonLabel();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
*/
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.DETAILS_ID) {
detailsPressed();
return;
}
super.buttonPressed(buttonId);
}
/**
* Handles selection of the Details button.
*/
private void detailsPressed() {
showDetails = !showDetails;
setDetailButtonLabel();
setDetailHints();
setDetails();
((Composite) getDialogArea()).layout(true);
getShell().setSize(getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
}