From 3d0a9b88a3db8e6a0ca7843ff814e1c0e1003ee7 Mon Sep 17 00:00:00 2001 From: joelmoniz Date: Sun, 20 Jul 2014 19:33:19 +0400 Subject: [PATCH] Added a restart button in case restarless update/removal fails --- .../contrib/ContributionManagerDialog.java | 47 ++++++++++++++++++- .../app/contrib/ContributionPanel.java | 16 ++++++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/app/src/processing/app/contrib/ContributionManagerDialog.java b/app/src/processing/app/contrib/ContributionManagerDialog.java index 22133b374..46e70598a 100644 --- a/app/src/processing/app/contrib/ContributionManagerDialog.java +++ b/app/src/processing/app/contrib/ContributionManagerDialog.java @@ -27,6 +27,9 @@ import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.event.*; +import java.io.File; +import java.io.IOException; +import java.lang.management.ManagementFactory; import java.net.SocketTimeoutException; import java.util.*; @@ -79,13 +82,55 @@ public class ContributionManagerDialog { return contribListing.hasUpdates(base); } - public void showFrame(Editor editor) { + public void showFrame(final Editor editor) { this.editor = editor; if (dialog == null) { dialog = new JFrame(title); restartButton = new JButton("Restart Processing"); + restartButton.setVisible(false); + restartButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + + for (Editor ed : editor.getBase().getEditors()) + if (ed.getSketch().isModified() || ed.getSketch().isUntitled()) { + int option = Base + .showYesNoQuestion(editor, title, + "Unsaved changes have been found", + "Are you sure you want to restart Processing without saving first?"); + + if (option == JOptionPane.NO_OPTION) + return; + else + break; + } + + // Thanks to http://stackoverflow.com/a/4160543 + StringBuilder cmd = new StringBuilder(); + cmd.append(System.getProperty("java.home") + File.separator + "bin" + + File.separator + "java "); + for (String jvmArg : ManagementFactory.getRuntimeMXBean() + .getInputArguments()) { + cmd.append(jvmArg + " "); + } + cmd.append("-cp ") + .append(ManagementFactory.getRuntimeMXBean().getClassPath()) + .append(" "); + cmd.append(Base.class.getName()); + + try { + Runtime.getRuntime().exec(cmd.toString()); + System.exit(0); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + }); Toolkit.setIcon(dialog); createComponents(); diff --git a/app/src/processing/app/contrib/ContributionPanel.java b/app/src/processing/app/contrib/ContributionPanel.java index 280919d7a..f393066f4 100644 --- a/app/src/processing/app/contrib/ContributionPanel.java +++ b/app/src/processing/app/contrib/ContributionPanel.java @@ -26,6 +26,7 @@ import java.awt.event.*; import java.io.File; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.Date; @@ -132,6 +133,17 @@ class ContributionPanel extends JPanel { LocalContribution installed = (LocalContribution) contrib; installed.setDeletionFlag(false); contribListing.replaceContribution(contrib, contrib); // ?? + ArrayList contribsList = contribListing.allContributions; + boolean toBeRestarted = false; + for(Contribution contribElement : contribsList) + if (contrib.getType().equals(contribElement.getType())) { + if (contribElement.isDeletionFlagged() || contribElement.isUpdateFlagged()) + { + toBeRestarted = !toBeRestarted; + break; + } + } + listPanel.contribManager.restartButton.setVisible(toBeRestarted); } } }; @@ -162,6 +174,7 @@ class ContributionPanel extends JPanel { public void cancel() { super.cancel(); resetInstallProgressBarState(); + listPanel.contribManager.restartButton.setVisible(true); isRemoveInProgress = false; installRemoveButton.setEnabled(true); // ((CardLayout) barButtonCardPane.getLayout()).show(barButtonCardPane, BUTTON_CONSTRAINT); @@ -274,6 +287,7 @@ class ContributionPanel extends JPanel { public void cancel() { super.cancel(); resetInstallProgressBarState(); + listPanel.contribManager.status.setMessage(""); isUpdateInProgress = false; installRemoveButton.setEnabled(true); if (contrib.isDeletionFlagged()) { @@ -282,7 +296,7 @@ class ContributionPanel extends JPanel { contribListing.replaceContribution(contrib,contrib); // updateButton.setVisible(false); } - listPanel.contribManager.status.setMessage(""); + listPanel.contribManager.restartButton.setVisible(true); } }, listPanel.contribManager.status);