I've got a ProgressMonitorDialog in a plug-in with the cancel button enabled.
While the operation is running, If the user clicks the cancel button, I want to ask them if they are sure they want to cancel. I do this by checking the ProgressMonitorDialog.isCanceled() method.
To do this I use the MessageDialog openQuestion method. If they click Yes, then I throw an exception and cancel the operation.
If they click No, then I invoke the ProgressMonitorDialog.setCanceled(false) method and continue with the operation.
The problem I'm encounter is, once they click cancel, the button gets disabled and does not re-enable.
Is there a way to force the cancel button to re-enable so the user has an opportunity to cancel the request again?
This is roughly what my 'confirmCancel' method looks like now:
private void confirmCancel(IProgressMonitor monitor) {
Display d = Display.getDefault();
final MutableBoolean cancel = new MutableBoolean(false);
d.syncExec(new Runnable() {
@Override
public void run() {
cancel.setValue(MessageDialog.openQuestion(null,
"Confirm Cancel",
"Are you sure you want to cancel the download?"));
}
});
if (cancel.booleanValue()) {
logDebug("Download canceled in DownloadOperation");
throw new OperationCanceledException("Copy canceled");
} else {
monitor.setCanceled(false);
// this is where I would like to re-enable the cancel button
}
}
As usual, the moment I post my question, I come up with an answer :)
I override the cancelPressed() method of
ProgressMonitorDialog
to display the question to the user and, if they say yes, I run thesuper.cancelPrssed()
method.