summaryrefslogtreecommitdiff
path: root/apps/plugins/puzzles/src/PuzzleApplet.java
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2017-04-29 18:21:56 -0400
committerFranklin Wei <git@fwei.tk>2017-04-29 18:24:42 -0400
commit881746789a489fad85aae8317555f73dbe261556 (patch)
treecec2946362c4698c8db3c10f3242ef546c2c22dd /apps/plugins/puzzles/src/PuzzleApplet.java
parent03dd4b92be7dcd5c8ab06da3810887060e06abd5 (diff)
downloadrockbox-881746789a489fad85aae8317555f73dbe261556.zip
rockbox-881746789a489fad85aae8317555f73dbe261556.tar.gz
rockbox-881746789a489fad85aae8317555f73dbe261556.tar.bz2
rockbox-881746789a489fad85aae8317555f73dbe261556.tar.xz
puzzles: refactor and resync with upstream
This brings puzzles up-to-date with upstream revision 2d333750272c3967cfd5cd3677572cddeaad5932, though certain changes made by me, including cursor-only Untangle and some compilation fixes remain. Upstream code has been moved to its separate subdirectory and future syncs can be done by simply copying over the new sources. Change-Id: Ia6506ca5f78c3627165ea6791d38db414ace0804
Diffstat (limited to '')
-rw-r--r--apps/plugins/puzzles/src/PuzzleApplet.java (renamed from apps/plugins/puzzles/PuzzleApplet.java)61
1 files changed, 47 insertions, 14 deletions
diff --git a/apps/plugins/puzzles/PuzzleApplet.java b/apps/plugins/puzzles/src/PuzzleApplet.java
index 0b0648c..512aede 100644
--- a/apps/plugins/puzzles/PuzzleApplet.java
+++ b/apps/plugins/puzzles/src/PuzzleApplet.java
@@ -28,6 +28,9 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
private JFrame mainWindow;
private JMenu typeMenu;
+ private JMenuItem[] typeMenuItems;
+ private int customMenuItemIndex;
+
private JMenuItem solveCommand;
private Color[] colors;
private JLabel statusBar;
@@ -219,17 +222,17 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
}
private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int arg) {
- return addMenuItemCallback(jm, name, callback, new int[] {arg});
+ return addMenuItemCallback(jm, name, callback, new int[] {arg}, false);
}
private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback) {
- return addMenuItemCallback(jm, name, callback, new int[0]);
+ return addMenuItemCallback(jm, name, callback, new int[0], false);
}
- private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int[] args) {
+ private JMenuItem addMenuItemCallback(JMenu jm, String name, final String callback, final int[] args, boolean checkbox) {
JMenuItem jmi;
- if (jm == typeMenu)
- typeMenu.add(jmi = new JCheckBoxMenuItem(name));
+ if (checkbox)
+ jm.add(jmi = new JCheckBoxMenuItem(name));
else
jm.add(jmi = new JMenuItem(name));
jmi.addActionListener(new ActionListener() {
@@ -261,12 +264,29 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
} else {
typeMenu.setVisible(true);
}
- addMenuItemCallback(typeMenu, "Custom...", "jcallback_config_event", CFG_SETTINGS);
+ typeMenuItems[customMenuItemIndex] =
+ addMenuItemCallback(typeMenu, "Custom...",
+ "jcallback_config_event",
+ new int[] {CFG_SETTINGS}, true);
}
- private void addTypeItem(String name, final int ptrGameParams) {
+ private void addTypeItem
+ (JMenu targetMenu, String name, int newId, final int ptrGameParams) {
+
typeMenu.setVisible(true);
- addMenuItemCallback(typeMenu, name, "jcallback_preset_event", ptrGameParams);
+ typeMenuItems[newId] =
+ addMenuItemCallback(targetMenu, name,
+ "jcallback_preset_event",
+ new int[] {ptrGameParams}, true);
+ }
+
+ private void addTypeSubmenu
+ (JMenu targetMenu, String name, int newId) {
+
+ JMenu newMenu = new JMenu(name);
+ newMenu.setVisible(true);
+ typeMenuItems[newId] = newMenu;
+ targetMenu.add(newMenu);
}
public int call(int cmd, int arg1, int arg2, int arg3) {
@@ -279,8 +299,20 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
if ((arg2 & 4) != 0) solveCommand.setEnabled(true);
colors = new Color[arg3];
return 0;
- case 1: // Type menu item
- addTypeItem(runtime.cstring(arg1), arg2);
+ case 1: // configure Type menu
+ if (arg1 == 0) {
+ // preliminary setup
+ typeMenuItems = new JMenuItem[arg2 + 2];
+ typeMenuItems[arg2] = typeMenu;
+ customMenuItemIndex = arg2 + 1;
+ return arg2;
+ } else if (xarg1 != 0) {
+ addTypeItem((JMenu)typeMenuItems[arg2],
+ runtime.cstring(arg1), arg3, xarg1);
+ } else {
+ addTypeSubmenu((JMenu)typeMenuItems[arg2],
+ runtime.cstring(arg1), arg3);
+ }
return 0;
case 2: // MessageBox
JOptionPane.showMessageDialog(this, runtime.cstring(arg2), runtime.cstring(arg1), arg3 == 0 ? JOptionPane.INFORMATION_MESSAGE : JOptionPane.ERROR_MESSAGE);
@@ -432,10 +464,11 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
dlg = null;
return 0;
case 13: // tick a menu item
- if (arg1 < 0) arg1 = typeMenu.getItemCount() - 1;
- for (int i = 0; i < typeMenu.getItemCount(); i++) {
- if (typeMenu.getMenuComponent(i) instanceof JCheckBoxMenuItem) {
- ((JCheckBoxMenuItem)typeMenu.getMenuComponent(i)).setSelected(arg1 == i);
+ if (arg1 < 0) arg1 = customMenuItemIndex;
+ for (int i = 0; i < typeMenuItems.length; i++) {
+ if (typeMenuItems[i] instanceof JCheckBoxMenuItem) {
+ ((JCheckBoxMenuItem)typeMenuItems[i]).setSelected
+ (arg1 == i);
}
}
return 0;