package org.docear.plugin.services.communications.components.dialog; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JOptionPane; import org.docear.plugin.services.communications.components.dialog.DocearServiceConnectionWaitPanel; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.TextUtils; import org.jdesktop.swingworker.SwingWorker; public class ConnectionWaitDialog { private final DocearServiceConnectionWaitPanel waitPanel = new DocearServiceConnectionWaitPanel(); private final JButton[] dialogButtons; private SwingWorker< ?, ?> worker; private Boolean started = false; public ConnectionWaitDialog() { dialogButtons = new JButton[] { new JButton(TextUtils.getOptionalText("docear.service.connect.dialog.button.cancel")) }; dialogButtons[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(worker != null){ worker.cancel(true); worker = null; } Container cont = waitPanel.getParent(); closeDialogManually(cont); } }); } public void start() { synchronized (started ) { if(!started) { started = true; JOptionPane.showOptionDialog(UITools.getFrame(), waitPanel, TextUtils.getOptionalText("docear.service.connect.title"), JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, dialogButtons, dialogButtons[0]); } } } public void stop() { synchronized (started) { if(started) { Container cont = waitPanel.getParent(); closeDialogManually(cont); started = false; } } } public void setWorker(SwingWorker<?, ?> worker) { this.worker = worker; } private void closeDialogManually(Container container) { if(container == null) return; while (!(container instanceof JDialog)) { container = container.getParent(); } ((JDialog) container).dispose(); } }