add menu entry to allow to switch the emulated machine type

This commit is contained in:
Maik Merten committed 2014-07-26 18:52:57 +02:00
1 parent 827e9991d5
commit fdaeb661d3
2 files changed
+61 -4

No files matched your search

+12 -4
View File
@@ -40,9 +40,9 @@ public class Main {
* *
* @param args * @param args
*/ */
public static void main(String args[]) { public static void main(String args[]) throws Exception {
Class machineClass = null; Class machineClass = SymonMachine.class;
for(int i = 0; i < args.length; ++i) { for(int i = 0; i < args.length; ++i) {
String arg = args[i].toLowerCase(Locale.ENGLISH); String arg = args[i].toLowerCase(Locale.ENGLISH);
if(arg.equals("-machine") && (i+1) < args.length) { if(arg.equals("-machine") && (i+1) < args.length) {
@@ -55,6 +55,7 @@ public class Main {
} }
} }
while(true) {
if(machineClass == null) { if(machineClass == null) {
Object[] possibilities = {"Symon", "Multicomp"}; Object[] possibilities = {"Symon", "Multicomp"};
String s = (String)JOptionPane.showInputDialog( String s = (String)JOptionPane.showInputDialog(
@@ -72,14 +73,13 @@ public class Main {
} }
} }
final Simulator simulator = new Simulator(machineClass);
final Class mClass = machineClass;
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
public void run() { public void run() {
try { try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// Create the main UI window // Create the main UI window
Simulator simulator = new Simulator(mClass);
simulator.createAndShowUi(); simulator.createAndShowUi();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@@ -88,6 +88,14 @@ public class Main {
}); });
Simulator.MAIN_CMD cmd = simulator.waitForCommand();
if(cmd.equals(Simulator.MAIN_CMD.SELECTMACHINE)) {
machineClass = null;
} else {
break;
}
}
} }
} }
@@ -116,6 +116,13 @@ public class Simulator {
private JFileChooser fileChooser; private JFileChooser fileChooser;
private PreferencesDialog preferences; private PreferencesDialog preferences;
private final Object commandMonitorObject = new Object();
private MAIN_CMD command = MAIN_CMD.NONE;
public static enum MAIN_CMD {
NONE,
SELECTMACHINE
}
/** /**
* The list of step counts that will appear in the "Step" drop-down. * The list of step counts that will appear in the "Step" drop-down.
*/ */
@@ -231,6 +238,18 @@ public class Simulator {
handleReset(); handleReset();
} }
public MAIN_CMD waitForCommand() {
synchronized(commandMonitorObject) {
try {
commandMonitorObject.wait();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
return command;
}
private void handleStart() { private void handleStart() {
// Shift focus to the console. // Shift focus to the console.
console.requestFocus(); console.requestFocus();
@@ -544,6 +563,34 @@ public class Simulator {
} }
} }
class SelectMachineAction extends AbstractAction {
Simulator simulator;
public SelectMachineAction() {
super("Switch emulated machine...", null);
putValue(SHORT_DESCRIPTION, "Select the type of the machine to be emulated");
putValue(MNEMONIC_KEY, KeyEvent.VK_M);
}
public void actionPerformed(ActionEvent actionEvent) {
if(runLoop != null) {
runLoop.requestStop();
}
memoryWindow.dispose();
traceLog.dispose();
if(videoWindow != null) {
videoWindow.dispose();
}
mainWindow.dispose();
command = MAIN_CMD.SELECTMACHINE;
synchronized(commandMonitorObject) {
commandMonitorObject.notifyAll();
}
}
}
class QuitAction extends AbstractAction { class QuitAction extends AbstractAction {
public QuitAction() { public QuitAction() {
super("Quit", null); super("Quit", null);
@@ -669,11 +716,13 @@ public class Simulator {
loadProgramItem = new JMenuItem(new LoadProgramAction()); loadProgramItem = new JMenuItem(new LoadProgramAction());
loadRomItem = new JMenuItem(new LoadRomAction()); loadRomItem = new JMenuItem(new LoadRomAction());
JMenuItem prefsItem = new JMenuItem(new ShowPrefsAction()); JMenuItem prefsItem = new JMenuItem(new ShowPrefsAction());
JMenuItem selectMachineItem = new JMenuItem(new SelectMachineAction());
JMenuItem quitItem = new JMenuItem(new QuitAction()); JMenuItem quitItem = new JMenuItem(new QuitAction());
fileMenu.add(loadProgramItem); fileMenu.add(loadProgramItem);
fileMenu.add(loadRomItem); fileMenu.add(loadRomItem);
fileMenu.add(prefsItem); fileMenu.add(prefsItem);
fileMenu.add(selectMachineItem);
fileMenu.add(quitItem); fileMenu.add(quitItem);
add(fileMenu); add(fileMenu);