Error message is printed at the bottom of the dialog

This commit is contained in:
Federico Fissore 2015-02-27 17:54:45 +01:00
parent 6f5f9bedb4
commit 357d5954c3
5 changed files with 72 additions and 38 deletions

View File

@ -28,19 +28,19 @@
*/ */
package cc.arduino.libraries.contributions.ui; package cc.arduino.libraries.contributions.ui;
import static processing.app.I18n._;
import java.awt.Dialog;
import java.awt.Frame;
import java.util.Collection;
import cc.arduino.libraries.contributions.ContributedLibrary; import cc.arduino.libraries.contributions.ContributedLibrary;
import cc.arduino.libraries.contributions.LibrariesIndexer; import cc.arduino.libraries.contributions.LibrariesIndexer;
import cc.arduino.packages.contributions.ui.InstallerJDialogUncaughtExceptionHandler;
import cc.arduino.ui.FilteredAbstractTableModel; import cc.arduino.ui.FilteredAbstractTableModel;
import cc.arduino.ui.InstallerJDialog; import cc.arduino.ui.InstallerJDialog;
import cc.arduino.ui.InstallerTableCell; import cc.arduino.ui.InstallerTableCell;
import cc.arduino.utils.Progress; import cc.arduino.utils.Progress;
import java.awt.*;
import java.util.Collection;
import static processing.app.I18n._;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class LibraryManagerUI extends InstallerJDialog { public class LibraryManagerUI extends InstallerJDialog {
@ -48,7 +48,7 @@ public class LibraryManagerUI extends InstallerJDialog {
protected FilteredAbstractTableModel createContribModel() { protected FilteredAbstractTableModel createContribModel() {
return new LibrariesIndexTableModel(); return new LibrariesIndexTableModel();
} }
private LibrariesIndexTableModel getContribModel() { private LibrariesIndexTableModel getContribModel() {
return (LibrariesIndexTableModel) contribModel; return (LibrariesIndexTableModel) contribModel;
} }
@ -125,12 +125,15 @@ public class LibraryManagerUI extends InstallerJDialog {
@Override @Override
protected void onCancelPressed() { protected void onCancelPressed() {
if (installerThread != null) super.onUpdatePressed();
if (installerThread != null) {
installerThread.interrupt(); installerThread.interrupt();
}
} }
@Override @Override
protected void onUpdatePressed() { protected void onUpdatePressed() {
super.onUpdatePressed();
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -145,10 +148,12 @@ public class LibraryManagerUI extends InstallerJDialog {
} }
} }
}); });
installerThread.setUncaughtExceptionHandler(new InstallerJDialogUncaughtExceptionHandler(this));
installerThread.start(); installerThread.start();
} }
public void onInstallPressed(final ContributedLibrary lib, final ContributedLibrary replaced) { public void onInstallPressed(final ContributedLibrary lib, final ContributedLibrary replaced) {
clearErrorMessage();
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -164,10 +169,12 @@ public class LibraryManagerUI extends InstallerJDialog {
} }
} }
}); });
installerThread.setUncaughtExceptionHandler(new InstallerJDialogUncaughtExceptionHandler(this));
installerThread.start(); installerThread.start();
} }
public void onRemovePressed(final ContributedLibrary lib) { public void onRemovePressed(final ContributedLibrary lib) {
clearErrorMessage();
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -183,6 +190,7 @@ public class LibraryManagerUI extends InstallerJDialog {
} }
} }
}); });
installerThread.setUncaughtExceptionHandler(new InstallerJDialogUncaughtExceptionHandler(this));
installerThread.start(); installerThread.start();
} }

View File

@ -28,7 +28,6 @@
*/ */
package cc.arduino.packages.contributions.ui; package cc.arduino.packages.contributions.ui;
import static processing.app.I18n._;
import cc.arduino.packages.contributions.ContributedPlatform; import cc.arduino.packages.contributions.ContributedPlatform;
import cc.arduino.packages.contributions.ContributionInstaller; import cc.arduino.packages.contributions.ContributionInstaller;
import cc.arduino.packages.contributions.ContributionsIndexer; import cc.arduino.packages.contributions.ContributionsIndexer;
@ -40,6 +39,8 @@ import cc.arduino.utils.Progress;
import java.awt.*; import java.awt.*;
import java.util.Collection; import java.util.Collection;
import static processing.app.I18n._;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class ContributionManagerUI extends InstallerJDialog { public class ContributionManagerUI extends InstallerJDialog {
@ -122,6 +123,7 @@ public class ContributionManagerUI extends InstallerJDialog {
@Override @Override
public void onCancelPressed() { public void onCancelPressed() {
super.onCancelPressed();
if (installerThread != null) { if (installerThread != null) {
installerThread.interrupt(); installerThread.interrupt();
} }
@ -129,6 +131,7 @@ public class ContributionManagerUI extends InstallerJDialog {
@Override @Override
public void onUpdatePressed() { public void onUpdatePressed() {
super.onUpdatePressed();
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -143,11 +146,12 @@ public class ContributionManagerUI extends InstallerJDialog {
} }
} }
}); });
installerThread.setUncaughtExceptionHandler(new ContributionUncaughtExceptionHandler(this)); installerThread.setUncaughtExceptionHandler(new InstallerJDialogUncaughtExceptionHandler(this));
installerThread.start(); installerThread.start();
} }
public void onInstallPressed(final ContributedPlatform platformToInstall, final ContributedPlatform platformToRemove) { public void onInstallPressed(final ContributedPlatform platformToInstall, final ContributedPlatform platformToRemove) {
clearErrorMessage();
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -165,11 +169,12 @@ public class ContributionManagerUI extends InstallerJDialog {
} }
} }
}); });
installerThread.setUncaughtExceptionHandler(new ContributionUncaughtExceptionHandler(this)); installerThread.setUncaughtExceptionHandler(new InstallerJDialogUncaughtExceptionHandler(this));
installerThread.start(); installerThread.start();
} }
public void onRemovePressed(final ContributedPlatform platform) { public void onRemovePressed(final ContributedPlatform platform) {
clearErrorMessage();
installerThread = new Thread(new Runnable() { installerThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -184,7 +189,7 @@ public class ContributionManagerUI extends InstallerJDialog {
} }
} }
}); });
installerThread.setUncaughtExceptionHandler(new ContributionUncaughtExceptionHandler(this)); installerThread.setUncaughtExceptionHandler(new InstallerJDialogUncaughtExceptionHandler(this));
installerThread.start(); installerThread.start();
} }

View File

@ -1,22 +0,0 @@
package cc.arduino.packages.contributions.ui;
import javax.swing.*;
import java.awt.*;
import static processing.app.I18n._;
public class ContributionUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
private final Component parent;
public ContributionUncaughtExceptionHandler(Component parent) {
this.parent = parent;
}
@Override
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
JOptionPane.showMessageDialog(parent, _(e.getMessage()), "Error", JOptionPane.ERROR_MESSAGE);
}
}

View File

@ -0,0 +1,28 @@
package cc.arduino.packages.contributions.ui;
import cc.arduino.ui.InstallerJDialog;
import javax.swing.*;
import static processing.app.I18n._;
public class InstallerJDialogUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
private final InstallerJDialog parent;
public InstallerJDialogUncaughtExceptionHandler(InstallerJDialog parent) {
this.parent = parent;
}
@Override
public void uncaughtException(Thread t, final Throwable e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
e.printStackTrace();
}
});
parent.setErrorMessage(_(e.getMessage().substring(e.getMessage().indexOf(":") + 2)));
}
}

View File

@ -35,14 +35,12 @@ import javax.swing.*;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener; import javax.swing.event.TableModelListener;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer; import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn; import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel; import javax.swing.table.TableColumnModel;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import static cc.arduino.packages.contributions.ui.ContributionIndexTableModel.DESCRIPTION_COL; import static cc.arduino.packages.contributions.ui.ContributionIndexTableModel.DESCRIPTION_COL;
@ -91,6 +89,7 @@ public abstract class InstallerJDialog extends JDialog {
protected ProgressJProgressBar progressBar; protected ProgressJProgressBar progressBar;
protected Box progressBox; protected Box progressBox;
protected Box updateBox; protected Box updateBox;
private final JLabel errorMessage;
protected InstallerTableCell cellEditor; protected InstallerTableCell cellEditor;
@ -170,6 +169,10 @@ public abstract class InstallerJDialog extends JDialog {
progressBar.setString(" "); progressBar.setString(" ");
progressBar.setVisible(true); progressBar.setVisible(true);
errorMessage = new JLabel("");
errorMessage.setForeground(Color.RED);
errorMessage.setVisible(false);
{ {
JButton cancelButton = new JButton(_("Cancel")); JButton cancelButton = new JButton(_("Cancel"));
cancelButton.addActionListener(new ActionListener() { cancelButton.addActionListener(new ActionListener() {
@ -194,6 +197,8 @@ public abstract class InstallerJDialog extends JDialog {
updateBox = Box.createHorizontalBox(); updateBox = Box.createHorizontalBox();
updateBox.add(Box.createHorizontalGlue()); updateBox.add(Box.createHorizontalGlue());
updateBox.add(errorMessage);
updateBox.add(Box.createHorizontalGlue());
updateBox.add(updateButton); updateBox.add(updateButton);
} }
@ -219,6 +224,16 @@ public abstract class InstallerJDialog extends JDialog {
}); });
} }
public void setErrorMessage(String message) {
errorMessage.setText(message);
errorMessage.setVisible(true);
}
public void clearErrorMessage() {
errorMessage.setText("");
errorMessage.setVisible(false);
}
public void setProgressVisible(boolean visible, String status) { public void setProgressVisible(boolean visible, String status) {
progressBox.setVisible(visible); progressBox.setVisible(visible);
@ -258,14 +273,14 @@ public abstract class InstallerJDialog extends JDialog {
* Action performed when the Cancel button is pressed. * Action performed when the Cancel button is pressed.
*/ */
protected void onCancelPressed() { protected void onCancelPressed() {
// Empty clearErrorMessage();
} }
/** /**
* Action performed when the "Update List" button is pressed. * Action performed when the "Update List" button is pressed.
*/ */
protected void onUpdatePressed() { protected void onUpdatePressed() {
// Empty clearErrorMessage();
} }
} }