package org.eclipse.uml2.diagram.common.async;
import java.util.LinkedList;
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.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.uml2.diagram.common.Messages;
import org.eclipse.uml2.diagram.common.async.SyncModelLabelProvider;
import org.eclipse.uml2.diagram.common.async.SyncModelNode;
import org.eclipse.uml2.diagram.common.async.SyncModelUI;
public class SynchronizeDiagramDialog extends Dialog {
private final ILabelProvider myPluginSpecificLabelProvider;
private SyncModelUI mySyncUI;
private final SyncModelNode myRootNode;
private final List<ViewerFilter> myViewerFilters = new LinkedList<ViewerFilter>();
public SynchronizeDiagramDialog(Shell shell, SyncModelNode rootNode, ILabelProvider pluginSpecificLableProvider) {
super(shell);
myRootNode = rootNode;
myPluginSpecificLabelProvider = pluginSpecificLableProvider;
setShellStyle(getShellStyle() | SWT.RESIZE);
setBlockOnOpen(true);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
getShell().setText(Messages.SynchronizeDiagramDialog_dialog_choose_synchronization_mode);
mySyncUI = new SyncModelUI(composite, new SyncModelLabelProvider(myPluginSpecificLabelProvider));
mySyncUI.setRootNode(getRootSyncNode());
for (ViewerFilter nextFilter : myViewerFilters) {
mySyncUI.getUI().addFilter(nextFilter);
}
mySyncUI.revealRootChildren();
return composite;
}
protected void addFilter(ViewerFilter filter) {
if (mySyncUI == null || mySyncUI.getUI() == null) {
myViewerFilters.add(filter);
} else {
mySyncUI.getUI().addFilter(filter);
}
}
@Override
protected Control createButtonBar(Composite parent) {
Control buttonBar = super.createButtonBar(parent);
setOkButtonEnabled(true);
return buttonBar;
}
private void setOkButtonEnabled(boolean enabled) {
getButton(IDialogConstants.OK_ID).setEnabled(enabled);
}
public SyncModelNode getRootSyncNode() {
return myRootNode;
}
protected SyncModelUI getSyncUI() {
return mySyncUI;
}
}