在Eclipse插件进度监视器中重新启用已禁用的取消按钮?

时间:2015-06-19 14:39:07

标签: java eclipse-plugin swt jface

我在启用了取消按钮的插件中安装了ProgressMonitorDialog。

当操作正在运行时,如果用户单击取消按钮,我想询问他们是否确定要取消。我通过检查ProgressMonitorDialog.isCanceled()方法来完成此操作。

为此,我使用MessageDialog openQuestion方法。如果他们单击是,则抛出异常并取消操作。

如果他们单击否,那么我调用ProgressMonitorDialog.setCanceled(false)方法并继续操作。

我遇到的问题是,一旦他们点击取消,该按钮就会被禁用并且不会重新启用。

有没有办法强制取消按钮重新启用,以便用户有机会再次取消请求?

这大致是我的确认取消'方法现在看起来像:

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
    }
}

1 个答案:

答案 0 :(得分:1)

像往常一样,在我发布问题的那一刻,我想出了一个答案:)

我覆盖ProgressMonitorDialog的{​​{3}}方法向用户显示问题,如果他们回答是,我会运行super.cancelPrssed()方法。