/*
* Created on 30.12.2004
*
* TODO To change the template for this generated file go to Window -
* Preferences - Java - Code Style - Code Templates
*/
package com.liferay.ide.velocity.editor.compare;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.compare.CompareEditorInput;
import org.eclipse.compare.internal.ICompareContextIds;
import org.eclipse.compare.internal.ResizableDialog;
import org.eclipse.compare.internal.Utilities;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
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.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
/**
* @author akmal
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class CompareDialog extends ResizableDialog implements IPropertyChangeListener
{
private CompareEditorInput fCompareEditorInput;
private Button fCommitButton;
private String _error;
public CompareDialog(Shell shell, CompareEditorInput input, String error)
{
super(shell, null);
_error = error;
fCompareEditorInput = input;
fCompareEditorInput.addPropertyChangeListener(this);
setHelpContextId(ICompareContextIds.COMPARE_DIALOG);
}
public boolean close()
{
if (super.close())
{
if (fCompareEditorInput != null) fCompareEditorInput.addPropertyChangeListener(this);
return true;
}
return false;
}
/*
* (non-Javadoc) Method declared on Dialog.
*/
protected void createButtonsForButtonBar(Composite parent)
{
fCommitButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); //$NON-NLS-1$
fCommitButton.setEnabled(true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
public void propertyChange(PropertyChangeEvent event)
{
if (fCommitButton != null && fCompareEditorInput != null) fCommitButton.setEnabled(fCompareEditorInput.isSaveNeeded());
}
/*
* (non-Javadoc) Method declared on Dialog.
*/
protected Control createDialogArea(Composite parent2)
{
Composite parent = (Composite) super.createDialogArea(parent2);
Control c = fCompareEditorInput.createContents(parent);
GridData gridData = new GridData(GridData.FILL_BOTH);
c.setLayoutData(gridData);
if (_error != null)
{
Text editorComposite = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
editorComposite.setEditable(false);
editorComposite.setText(_error);
GridLayout layout = new GridLayout();
RGB rgb = new RGB(201, 209, 218);
Color color = new Color(Display.getCurrent(), rgb);
editorComposite.setBackground(color);
editorComposite.setLayoutData(gridData);
}
Shell shell = c.getShell();
shell.setText(fCompareEditorInput.getTitle());
shell.setImage(fCompareEditorInput.getTitleImage());
applyDialogFont(parent);
return parent;
}
/*
* (non-Javadoc) Method declared on Window.
*/
public int open()
{
int rc = super.open();
if (rc == OK && fCompareEditorInput.isSaveNeeded())
{
WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
public void execute(IProgressMonitor pm) throws CoreException
{
fCompareEditorInput.saveChanges(pm);
}
};
Shell shell = getParentShell();
ProgressMonitorDialog pmd = new ProgressMonitorDialog(shell);
try
{
operation.run(pmd.getProgressMonitor());
}
catch (InterruptedException x)
{
// NeedWork
}
catch (OperationCanceledException x)
{
// NeedWork
}
catch (InvocationTargetException x)
{
String title = Utilities.getString("CompareDialog.saveErrorTitle"); //$NON-NLS-1$
String msg = Utilities.getString("CompareDialog.saveErrorMessage"); //$NON-NLS-1$
MessageDialog.openError(shell, title, msg + x.getTargetException().getMessage());
}
}
return rc;
}
}