blob: 9f4d604fa98297038a5f34dfba1d92d85e748279 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 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 implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.ui.dialogs;
import java.util.ArrayList;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.epf.authoring.ui.AuthoringUIText;
import org.eclipse.epf.authoring.ui.providers.VariabilityElementLabelProvider;
import org.eclipse.epf.library.edit.TngAdapterFactory;
import org.eclipse.epf.library.edit.command.IActionManager;
import org.eclipse.epf.library.edit.command.MoveInSectionListCommand;
import org.eclipse.epf.library.edit.util.SectionList;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.Step;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Table;
/**
* Dialog to order the {@link Step}s.
*
*/
public class SectionsOrderDialog extends Dialog {
private Composite baseComposite;
private Button ctrl_up, ctrl_down;
private Table ctrl_steps;
private TableViewer stepsTableViewer;
private SectionList allSections;
private IStructuredContentProvider stepsViewerContentProvider;
private ILabelProvider stepsViewerLabelProvider;
// private Task contentElement;
private ContentElement contentElement;
private IActionManager actionManager;
private String title;
private String message;
private String label;
private ArrayList commands = new ArrayList();
/**
* Creates a <code>AdvancedSearchDialog</code> giveb the parent control.
*
* @param parent
* The parent control.
*/
public SectionsOrderDialog(Shell parent, ContentElement contentElement,
IActionManager actionManager, String title, String message,
String label) {
super(parent);
this.contentElement = contentElement;
this.actionManager = actionManager;
this.title = title;
this.message = message;
this.label = label;
allSections = null;
}
/**
* @see Dialog#createDialogArea(Composite parent)
*/
protected Control createDialogArea(Composite parent) {
baseComposite = (Composite) super.createDialogArea(parent);
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 4;
baseComposite.setLayout(gridLayout);
baseComposite.setLayoutData(new GridData());
createLabel(baseComposite, message, 4);
// Empty line
createLabel(baseComposite, " ", 4); //$NON-NLS-1$
createLabel(baseComposite, " ", 1); //$NON-NLS-1$
createLabel(baseComposite, label, 3);
createLabel(baseComposite, " ", 1); //$NON-NLS-1$
ctrl_steps = new Table(baseComposite, SWT.BORDER | SWT.MULTI);
{
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
gridData.widthHint = 300;
gridData.heightHint = 400;
ctrl_steps.setLayoutData(gridData);
}
initProviders();
stepsTableViewer = new TableViewer(ctrl_steps);
stepsTableViewer.setContentProvider(stepsViewerContentProvider);
stepsTableViewer.setLabelProvider(stepsViewerLabelProvider);
Composite orderButtonPane = new Composite(baseComposite, SWT.NULL);
{
GridData gridData = new GridData(GridData.VERTICAL_ALIGN_CENTER
| GridData.HORIZONTAL_ALIGN_CENTER);
gridData.horizontalSpan = 1;
orderButtonPane.setLayoutData(gridData);
orderButtonPane.setLayout(new GridLayout());
}
ctrl_up = createButton(orderButtonPane, AuthoringUIText.UP_BUTTON_TEXT);
ctrl_up.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ctrl_down = createButton(orderButtonPane,
AuthoringUIText.DOWN_BUTTON_TEXT);
ctrl_down.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ctrl_up.setEnabled(false);
ctrl_down.setEnabled(false);
// Empty line
createLabel(baseComposite, " ", 4); //$NON-NLS-1$
createLine(baseComposite, 4);
super.getShell().setText(title);
addListeners();
loadData();
return baseComposite;
}
private void createLine(Composite parent, int ncol) {
Label line = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL
| SWT.BOLD);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = ncol;
line.setLayoutData(gridData);
}
private Label createLabel(Composite parent, String text, int nCol) {
Label label = new Label(parent, SWT.NONE);
label.setText(text);
{
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = nCol;
label.setLayoutData(gridData);
}
return label;
}
private Button createButton(Composite parent, String label) {
Button button = new Button(parent, SWT.NONE);
button.setText(label);
return button;
}
/**
* Creates the dialog buttons.
*/
protected void createButtonsForButtonBar(Composite parent) {
// Create the OK button.
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
// Create the Cancel button.
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
private void initProviders() {
stepsViewerContentProvider = new AdapterFactoryContentProvider(
TngAdapterFactory.INSTANCE
.getNavigatorView_ComposedAdapterFactory()) {
public Object[] getElements(Object object) {
if (allSections == null) {
allSections = new SectionList(contentElement,
SectionList.STEPS_FOR_ELEMENT_AND_PARENTS);
}
return allSections.toArray();
}
};
stepsViewerLabelProvider = new VariabilityElementLabelProvider(
TngAdapterFactory.INSTANCE
.getNavigatorView_ComposedAdapterFactory()) {
public boolean isExternal(Object element) {
return !contentElement.getPresentation().getSections()
.contains(element);
}
};
}
public void addListeners() {
stepsTableViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) stepsTableViewer
.getSelection();
if (selection.size() > 0
&& !TngUtil.isLocked(contentElement)) {
if (stepsTableViewer.getTable().getSelectionIndex() > 0
&& !TngUtil.isLocked(contentElement)
&& selection.size() == 1) {
ctrl_up.setEnabled(true);
} else
ctrl_up.setEnabled(false);
if (stepsTableViewer.getTable().getSelectionIndex() < stepsTableViewer
.getTable().getItemCount() - 1
&& !TngUtil.isLocked(contentElement)
&& selection.size() == 1) {
ctrl_down.setEnabled(true);
} else
ctrl_down.setEnabled(false);
}
}
});
ctrl_up.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) stepsTableViewer
.getSelection();
ArrayList moveUpItems = new ArrayList();
moveUpItems.addAll(selection.toList());
MoveInSectionListCommand cmd = new MoveInSectionListCommand(
contentElement, moveUpItems, allSections, 1);
actionManager.execute(cmd);
commands.add(cmd);
stepsTableViewer.refresh();
if (stepsTableViewer.getTable().getSelectionIndex() > 0
&& !TngUtil.isLocked(contentElement)) {
ctrl_up.setEnabled(true);
} else
ctrl_up.setEnabled(false);
if (stepsTableViewer.getTable().getSelectionIndex() < stepsTableViewer
.getTable().getItemCount() - 1
&& !TngUtil.isLocked(contentElement)) {
ctrl_down.setEnabled(true);
} else
ctrl_down.setEnabled(false);
}
});
ctrl_down.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) stepsTableViewer
.getSelection();
ArrayList moveDownItems = new ArrayList();
moveDownItems.addAll(selection.toList());
MoveInSectionListCommand cmd = new MoveInSectionListCommand(
contentElement, moveDownItems, allSections, 0);
actionManager.execute(cmd);
commands.add(cmd);
stepsTableViewer.refresh();
if (stepsTableViewer.getTable().getSelectionIndex() > 0
&& !TngUtil.isLocked(contentElement)) {
ctrl_up.setEnabled(true);
} else
ctrl_up.setEnabled(false);
if (stepsTableViewer.getTable().getSelectionIndex() < stepsTableViewer
.getTable().getItemCount() - 1
&& !TngUtil.isLocked(contentElement)) {
ctrl_down.setEnabled(true);
} else
ctrl_down.setEnabled(false);
}
});
}
/**
* Load initial data from model
*/
private void loadData() {
stepsTableViewer.setInput(contentElement);
}
/**
* Called when the OK button is selected.
*/
protected void okPressed() {
allSections.apply();
super.okPressed();
}
protected void cancelPressed() {
if (!commands.isEmpty()) {
for (int i = commands.size() - 1; i > -1; i--) {
Object cmd = commands.get(i);
if (cmd instanceof MoveInSectionListCommand) {
((MoveInSectionListCommand) cmd).undo();
}
}
}
super.cancelPressed();
}
}