Each version has its own settings

This commit is contained in:
huangyuhui
2016-01-29 22:21:13 +08:00
parent d2162f31e4
commit f8eec1b7d5
30 changed files with 710 additions and 574 deletions

View File

@@ -46,11 +46,13 @@ public abstract class OverridableSwingWorker<T> extends SwingWorker<Void, T> {
}
public OverridableSwingWorker reg(Consumer<T> c) {
Utils.requireNonNull(c);
processListeners.add(c);
return this;
}
public OverridableSwingWorker regDone(Runnable c) {
Utils.requireNonNull(c);
doneListeners.add(c);
return this;
}

View File

@@ -40,7 +40,7 @@ public final class UpdateChecker implements IUpdateChecker {
VersionNumber value;
@Override
public OverridableSwingWorker<VersionNumber> process(boolean showMessage) {
public OverridableSwingWorker<VersionNumber> process(final boolean showMessage) {
return new OverridableSwingWorker() {
@Override
protected void work() throws Exception {

View File

@@ -87,11 +87,11 @@ public abstract class Task {
public abstract String getInfo();
public Collection<Task> getDependTasks() {
public Collection<? extends Task> getDependTasks() {
return null;
}
public Collection<Task> getAfterTasks() {
public Collection<? extends Task> getAfterTasks() {
return null;
}

View File

@@ -79,15 +79,15 @@ public class TaskList extends Thread {
public void run() {
executeTask(task);
s.remove(this);
threadPool.remove(this);
THREAD_POOL.remove(this);
}
}
static final Set<InvokeThread> threadPool = Collections.synchronizedSet(new HashSet<InvokeThread>());
static final Set<Task> taskPool = Collections.synchronizedSet(new HashSet<Task>());
static final Set<InvokeThread> THREAD_POOL = Collections.synchronizedSet(new HashSet<InvokeThread>());
static final Set<Task> TASK_POOL = Collections.synchronizedSet(new HashSet<Task>());
private void processTasks(Collection<Task> c) {
private void processTasks(Collection<? extends Task> c) {
if (c == null)
return;
this.totTask += c.size();
@@ -95,7 +95,7 @@ public class TaskList extends Thread {
for (Task t2 : c) {
t2.setParallelExecuting(true);
InvokeThread thread = new InvokeThread(t2, runningThread);
threadPool.add(thread);
THREAD_POOL.add(thread);
runningThread.add(thread);
thread.start();
}
@@ -147,7 +147,7 @@ public class TaskList extends Thread {
public void run() {
Thread.currentThread().setName("TaskList");
threadPool.clear();
THREAD_POOL.clear();
totTask = taskQueue.size();
while (!taskQueue.isEmpty())
executeTask(taskQueue.remove(0));
@@ -162,12 +162,12 @@ public class TaskList extends Thread {
public void abort() {
shouldContinue = false;
while (!threadPool.isEmpty())
synchronized (threadPool) {
InvokeThread it = threadPool.iterator().next();
while (!THREAD_POOL.isEmpty())
synchronized (THREAD_POOL) {
InvokeThread it = THREAD_POOL.iterator().next();
if (!it.task.abort())
it.interrupt();
threadPool.remove(it);
THREAD_POOL.remove(it);
}
this.interrupt();
}

View File

@@ -199,20 +199,23 @@ public class NavButtonManager implements ActionListener {
final boolean enableNext = nextStep != null && canContinue && problem == null && !isDeferredResult;
final boolean enablePrevious = wizard.getPreviousStep() != null && !isDeferredResult;
final Runnable runnable = () -> {
next.setEnabled(enableNext);
prev.setEnabled(enablePrevious);
finish.setEnabled(enableFinish);
JRootPane root = next.getRootPane();
if (root != null)
if (next.isEnabled())
root.setDefaultButton(next);
else if (finish.isEnabled())
root.setDefaultButton(finish);
else if (prev.isEnabled())
root.setDefaultButton(prev);
else
root.setDefaultButton(null);
final Runnable runnable = new Runnable() {
@Override
public void run() {
next.setEnabled(enableNext);
prev.setEnabled(enablePrevious);
finish.setEnabled(enableFinish);
JRootPane root = next.getRootPane();
if (root != null)
if (next.isEnabled())
root.setDefaultButton(next);
else if (finish.isEnabled())
root.setDefaultButton(finish);
else if (prev.isEnabled())
root.setDefaultButton(prev);
else
root.setDefaultButton(null);
}
};
if (EventQueue.isDispatchThread())
@@ -263,18 +266,21 @@ public class NavButtonManager implements ActionListener {
}
void deferredResultFailed(final boolean canGoBack) {
final Runnable runnable = () -> {
if (!canGoBack)
getCancel().setText(getCloseString());
getPrev().setEnabled(true);
getNext().setEnabled(false);
getCancel().setEnabled(true);
getFinish().setEnabled(false);
final Runnable runnable = new Runnable() {
@Override
public void run() {
if (!canGoBack)
getCancel().setText(getCloseString());
getPrev().setEnabled(true);
getNext().setEnabled(false);
getCancel().setEnabled(true);
getFinish().setEnabled(false);
if (NAME_CLOSE.equals(deferredStatus)) {
// no action
} else
deferredStatus = DEFERRED_FAILED + deferredStatus;
if (NAME_CLOSE.equals(deferredStatus)) {
// no action
} else
deferredStatus = DEFERRED_FAILED + deferredStatus;
}
};
if (EventQueue.isDispatchThread())
runnable.run();
@@ -596,22 +602,25 @@ public class NavButtonManager implements ActionListener {
}
public void navigabilityChanged(final Wizard wizard) {
final Runnable runnable = () -> {
if (wizard.isBusy()) {
next.setEnabled(false);
prev.setEnabled(false);
finish.setEnabled(false);
cancel.setEnabled(false);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
wasBusy = true;
return;
} else if (wasBusy) {
cancel.setEnabled(true);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
configureNavigationButtons(wizard, prev, next, finish);
final Runnable runnable = new Runnable() {
@Override
public void run() {
if (wizard.isBusy()) {
next.setEnabled(false);
prev.setEnabled(false);
finish.setEnabled(false);
cancel.setEnabled(false);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
wasBusy = true;
return;
} else if (wasBusy) {
cancel.setEnabled(true);
parent.getOuterPanel().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
configureNavigationButtons(wizard, prev, next, finish);
parent.updateProblem();
parent.updateProblem();
}
};
if (EventQueue.isDispatchThread())
runnable.run();

View File

@@ -29,7 +29,6 @@ import java.awt.IllegalComponentStateException;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.Locale;
import java.util.Arrays;
import javax.accessibility.Accessible;
@@ -119,34 +118,6 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
}
public InstructionsPanelImpl(BufferedImage img, Wizard wizard) {
if (img == null)
//In the event of classloader issues, also have a way to get
//the image from UIManager - slightly more portable for large
//apps
img = (BufferedImage) UIManager.get("wizard.sidebar.image");
String imgStr = System.getProperty("wizard.sidebar.image");
//image has not been loaded and user wishes to supply their own image
if (img == null && imgStr != null) {
//get an URL, works for jars
ClassLoader cl = this.getClass().getClassLoader();
URL url = cl.getResource(imgStr);
//successfully parsed the URL
if (url != null)
try {
img = ImageIO.read(url);
} catch (IOException ioe) {
System.err.println("Could not load wizard image "
+ ioe.getMessage());
System.setProperty("wizard.sidebar.image", null);
img = null; //error loading img, set to null to use default
}
else { //URL was not successfully parsed, set img to null to use default
System.err.println("Bad URL for wizard image " + imgStr);
System.setProperty("wizard.sidebar.image", null);
img = null;
}
}
if (img == null)
try {
img = ImageIO.read(InstructionsPanelImpl.class.getResourceAsStream(

View File

View File