1
0
mirror of https://github.com/sethm/symon.git synced 2025-08-09 11:25:13 +00:00

add menu entry to allow to switch the emulated machine type

This commit is contained in:
Maik Merten
2014-07-26 18:52:57 +02:00
parent 827e9991d5
commit fdaeb661d3
2 changed files with 88 additions and 31 deletions

View File

@@ -40,9 +40,9 @@ public class Main {
*
* @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) {
String arg = args[i].toLowerCase(Locale.ENGLISH);
if(arg.equals("-machine") && (i+1) < args.length) {
@@ -55,6 +55,7 @@ public class Main {
}
}
while(true) {
if(machineClass == null) {
Object[] possibilities = {"Symon", "Multicomp"};
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() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// Create the main UI window
Simulator simulator = new Simulator(mClass);
simulator.createAndShowUi();
} catch (Exception e) {
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;
}
}
}
}

View File

@@ -116,6 +116,13 @@ public class Simulator {
private JFileChooser fileChooser;
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.
*/
@@ -231,6 +238,18 @@ public class Simulator {
handleReset();
}
public MAIN_CMD waitForCommand() {
synchronized(commandMonitorObject) {
try {
commandMonitorObject.wait();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
return command;
}
private void handleStart() {
// Shift focus to the console.
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 {
public QuitAction() {
super("Quit", null);
@@ -669,11 +716,13 @@ public class Simulator {
loadProgramItem = new JMenuItem(new LoadProgramAction());
loadRomItem = new JMenuItem(new LoadRomAction());
JMenuItem prefsItem = new JMenuItem(new ShowPrefsAction());
JMenuItem selectMachineItem = new JMenuItem(new SelectMachineAction());
JMenuItem quitItem = new JMenuItem(new QuitAction());
fileMenu.add(loadProgramItem);
fileMenu.add(loadRomItem);
fileMenu.add(prefsItem);
fileMenu.add(selectMachineItem);
fileMenu.add(quitItem);
add(fileMenu);