public class NumbersMenu extends JMenu implements L10nComponent {\r
\r
private final SwingView view;\r
- private final JRadioButtonMenuItem itemArabicNumbers = new JRadioButtonMenuItem();\r
+ private final JRadioButtonMenuItem itemStandardNumbers = new JRadioButtonMenuItem();\r
private final JRadioButtonMenuItem itemChineseNumbers = new JRadioButtonMenuItem();\r
- private final Action actionArabicNumbers;\r
+ private final JRadioButtonMenuItem itemArabicNumbers = new JRadioButtonMenuItem();\r
+ private final Action actionStandardNumbers;\r
private final Action actionChineseNumbers;\r
+ private final Action actionArabicNumbers;\r
private LocaleListenerImpl localeListener;\r
\r
public NumbersMenu(SwingView view) {\r
this.view = view;\r
\r
- actionArabicNumbers = new AbstractAction(_("Arabic"), null) {\r
-\r
- @Override\r
- public void actionPerformed(ActionEvent arg0) {\r
- setKanjiMode(false);\r
- }\r
+ actionStandardNumbers = new AbstractAction(_("Standard"), null) {\r
+ \r
+ @Override\r
+ public void actionPerformed(ActionEvent arg0) {\r
+ setNumbersMode(0);\r
+ }\r
};\r
\r
actionChineseNumbers = new AbstractAction(_("Chinese"), null) {\r
\r
@Override\r
public void actionPerformed(ActionEvent arg0) {\r
- setKanjiMode(true);\r
+ setNumbersMode(1);\r
}\r
};\r
\r
+ actionArabicNumbers = new AbstractAction(_("Arabic"), null) {\r
+ \r
+ @Override\r
+ public void actionPerformed(ActionEvent arg0) {\r
+ setNumbersMode(2);\r
+ }\r
+ };\r
+ \r
addItems();\r
setIcon(StockIcons.ICON_FONT);\r
\r
@Override\r
public void setL10nMessages(Locale locale, String languageCode) {\r
setText(_("Numbers"));\r
- itemArabicNumbers.setText(_("Arabic"));\r
+ itemStandardNumbers.setText(_("Standard"));\r
itemChineseNumbers.setText(_("Chinese"));\r
+ itemArabicNumbers.setText(_("Arabic"));\r
}\r
\r
private void addItems() {\r
\r
ButtonGroup numbersGroup = new ButtonGroup();\r
\r
- boolean kanjiMode = UserPreferences.getInstance().getBoolean("KanjiMode", false);\r
- \r
- itemArabicNumbers.setAction(actionArabicNumbers);\r
- numbersGroup.add(itemArabicNumbers);\r
- itemArabicNumbers.setSelected(!kanjiMode);\r
- add(itemArabicNumbers);\r
+ int numbersMode = UserPreferences.getInstance().getInteger("NumbersMode", Integer.valueOf(0)).intValue();\r
\r
+ itemStandardNumbers.setAction(actionStandardNumbers);\r
+ numbersGroup.add(itemStandardNumbers);\r
+ itemStandardNumbers.setSelected(numbersMode == 0);\r
+ add(itemStandardNumbers);\r
+ \r
itemChineseNumbers.setAction(actionChineseNumbers);\r
numbersGroup.add(itemChineseNumbers);\r
- itemChineseNumbers.setSelected(kanjiMode);\r
+ itemChineseNumbers.setSelected(numbersMode == 1);\r
add(itemChineseNumbers);\r
+ \r
+ itemArabicNumbers.setAction(actionArabicNumbers);\r
+ numbersGroup.add(itemArabicNumbers);\r
+ itemArabicNumbers.setSelected(numbersMode == 2);\r
+ add(itemArabicNumbers);\r
}\r
\r
- private void setKanjiMode(boolean mode) {\r
- UserPreferences.getInstance().set("kanjiMode", mode);\r
+ private void setNumbersMode(int mode) {\r
+ UserPreferences.getInstance().set("numbersMode", Integer.valueOf(mode));\r
view.getController().notifyGridChanged();\r
}\r
\r
@Override\r
/* Executed in the SwingWorker thread */\r
protected Integer doInBackground() {\r
- return generateFourGrids();\r
+ return Integer.valueOf(generateFourGrids());\r
}\r
\r
@Override\r
if (dialogCancelled()) {\r
return 1;\r
}\r
- final int minRating = UserPreferences.getInstance().getInteger("minRating", 0);\r
- final int maxRating = UserPreferences.getInstance().getInteger("maxRating", Integer.MAX_VALUE);\r
+ final int minRating = UserPreferences.getInstance().getInteger("minRating", Integer.valueOf(0)).intValue();\r
+ final int maxRating = UserPreferences.getInstance().getInteger("maxRating", Integer.valueOf(Integer.MAX_VALUE)).intValue();\r
SudokuGrid su1 = SudokuGeneratorFactory.getGenerator().generateGrid(minRating, maxRating);\r
if (dialogCancelled()) {\r
return 1;\r
private static final int CELL_SIZE = 26;
- private int FONT_SIZE = 20;
- // private static final int CELL_SIZE = 22;
- // private int FONT_SIZE = 18;
+ private int FONT_SIZE = 22;
private MouseListener innerMouseListener = new InnerMouseListener();
addMouseListener(innerMouseListener);
addKeyListener(innerKeyListener);
setPreferredSize(new Dimension(columns[columns.length - 1].getEnd()
- - columns[0].getStart() + offX * 2,
- rows[rows.length - 1].getEnd() - rows[0].getStart() + offY * 2));
+ - columns[0].getStart() + offX * 2 + 1,
+ rows[rows.length - 1].getEnd() - rows[0].getStart() + offY * 2 + 1));
}
/**
* @return A Point giving the position where to draw the digit for cell (li,
* co)
*/
- private Point getPosition(Graphics2D g2, int li, int co) {
+ private Point getPosition(Graphics2D g2, int li, int co, String digit) {
if (!(0 <= li && li < 9 && 0 <= co && co < 9)) {
throw new IllegalArgumentException();
}
FontMetrics fm = getFontMetrics(g2.getFont());
int h = fm.getHeight();
- int w = fm.stringWidth("X");
+ int w = fm.stringWidth(digit);
- int x = columns[co].getStart() + CELL_SIZE / 2 - w / 2;
- int y = rows[li].getStart() + CELL_SIZE / 2 + h / 4;
+ int x = columns[co].getStart() + (CELL_SIZE - w ) / 2;
+ int y = rows[li].getStart() + (CELL_SIZE + h / 2) / 2;
- return new Point(x, y);
+ return new Point(x, y + 1);
}
/**
paintGridBoard(g2);
paintFocusMark(g2);
- boolean kanjiMode = UserPreferences.getInstance().getBoolean("kanjiMode", false);
- paintGridNumbers(g2, kanjiMode);
+ int numbersMode = UserPreferences.getInstance().getInteger("numbersMode", Integer.valueOf(0)).intValue();
+ paintGridNumbers(g2, numbersMode);
paintPlayerMemos(g2);
- paintPlayerNumbers(g2, kanjiMode);
+ paintPlayerNumbers(g2, numbersMode);
}
- private void paintGridNumbers(Graphics2D g2, boolean kanjiMode) {
+ private void paintGridNumbers(Graphics2D g2, int numbersMode) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.BLACK);
// Font font = new Font("Serif", Font.BOLD, FONT_SIZE);
Font font = new Font("Serif", Font.BOLD, FONT_SIZE
- - (kanjiMode ? 4 : 0));
+ - (numbersMode==1 ? 4 : 0));
g2.setFont(font);
for (int li = 0; li < 9; li++) {
for (int co = 0; co < 9; co++) {
if (view.isCellReadOnly(li, co)) {
- Point pos = getPosition(g2, li, co);
- g2.drawString(getValueAsStringAt(li, co, kanjiMode), pos.x, pos.y);
+ String digit = getValueAsStringAt(li, co, numbersMode);
+ Point pos = getPosition(g2, li, co, digit);
+ g2.drawString(digit, pos.x, pos.y);
}
}
}
}
- private String getValueAsStringAt(int li, int co, boolean kanjiMode) {
+ private static String[] digits = { "", "1", "2", "3", "4", "5", "6", "7", "8", "9",
+ "", "\u4e00", "\u4E8C", "\u4e09", "\u56DB", "\u4E94", "\u516D", "\u4E03", "\u516B", "\u4E5D",
+ "", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669",
+ };
+
+ private String getValueAsStringAt(int li, int co, int numbersMode) {
int value = view.getValueAt(li, co);
- String result = "";
- if (kanjiMode) {
- switch (value) {
- case 1:
- result = "\u4e00";
- break;
- case 2:
- result = "\u4E8C";
- break;
- case 3:
- result = "\u4e09";
- break;
- case 4:
- result = "\u56DB";
- break;
- case 5:
- result = "\u4E94";
- break;
- case 6:
- result = "\u516D";
- break;
- case 7:
- result = "\u4E03";
- break;
- case 8:
- result = "\u516B";
- break;
- case 9:
- result = "\u4E5D";
- break;
- }
- } else {
- result = (value == 0) ? "" : String.valueOf(value);
- }
+ String result = digits[value + (10 * numbersMode)];
return result;
}
CELL_SIZE - 4);
}
- private void paintPlayerNumbers(Graphics2D g2, boolean kanjiMode) {
+ private void paintPlayerNumbers(Graphics2D g2, int numbersMode) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
- Font font = new Font("Serif", Font.PLAIN, FONT_SIZE- (kanjiMode?4:0));
+ Font font = new Font("Serif", Font.PLAIN, FONT_SIZE- (numbersMode==1?4:0));
g2.setFont(font);
GridValidity validity = view.getGridValidity();
for (int li = 0; li < 9; li++) {
for (int co = 0; co < 9; co++) {
if (!view.isCellReadOnly(li, co)) {
- Point pos = getPosition(g2, li, co);
+ String digit = getValueAsStringAt(li, co, numbersMode);
+ Point pos = getPosition(g2, li, co, digit);
- if ((firstErrorLine != null && firstErrorLine == li)
- || (firstErrorColumn != null && firstErrorColumn == co)
- || ((firstErrorSquareX != null && firstErrorSquareX <= co && co < firstErrorSquareX + 3) &&
- ((firstErrorSquareY != null && firstErrorSquareY <= li && li < firstErrorSquareY + 3)))) {
+ if ((firstErrorLine != null && firstErrorLine.intValue() == li)
+ || (firstErrorColumn != null && firstErrorColumn.intValue() == co)
+ || ((firstErrorSquareX != null && firstErrorSquareX.intValue() <= co && co < firstErrorSquareX.intValue() + 3) &&
+ ((firstErrorSquareY != null && firstErrorSquareY.intValue() <= li && li < firstErrorSquareY.intValue() + 3)))) {
g2.setColor(Color.RED);
} else {
if (view.isGrigComplete()) {
}
}
- g2.drawString(getValueAsStringAt(li, co, kanjiMode), pos.x, pos.y);
+ g2.drawString(digit, pos.x, pos.y);
}
}
}
g2.translate(-160, 140);
paintGridBoard(g2);
- boolean kanjiMode = UserPreferences.getInstance().getBoolean("kanjiMode", false);
- paintGridNumbers(g2, kanjiMode);
- paintPlayerNumbers(g2, kanjiMode);
+ int numbersMode = UserPreferences.getInstance().getInteger("numbersMode", Integer.valueOf(0)).intValue();
+ paintGridNumbers(g2, numbersMode);
+ paintPlayerNumbers(g2, numbersMode);
return PAGE_EXISTS;
}
private SudokuGrid su4;
SwingMultiGrid(SudokuGrid su1, SudokuGrid su2, SudokuGrid su3, SudokuGrid su4) {
-
- setPreferredSize(new Dimension(columns[columns.length-1].getEnd()
- - columns[0].getStart() + offX * 2, rows[rows.length-1].getEnd()
- - rows[0].getStart() + offY * 2));
-
+ setPreferredSize(new Dimension(columns[columns.length - 1].getEnd()
+ - columns[0].getStart() + offX * 2 + 1,
+ rows[rows.length - 1].getEnd() - rows[0].getStart() + offY * 2 + 1));
this.su1 = su1;
this.su2 = su2;
this.su3 = su3;
* @return A Point giving the position where to draw the digit for cell (li,
* co)
*/
- private Point getPosition(Graphics2D g2, int li, int co) {
- if (!(0 <= li && li < 9 && 0 <= co && co < 9)) {
- throw new IllegalArgumentException();
- }
+ private Point getPosition(Graphics2D g2, int li, int co, String digit) {
+ if (!(0 <= li && li < 9 && 0 <= co && co < 9)) {
+ throw new IllegalArgumentException();
+ }
- FontMetrics fm = getFontMetrics(g2.getFont());
- int h = fm.getHeight();
- int w = fm.stringWidth("X");
+ FontMetrics fm = getFontMetrics(g2.getFont());
+ int h = fm.getHeight();
+ int w = fm.stringWidth(digit);
- int x = columns[co].getStart() + CELL_SIZE / 2 - w / 2;
- int y = rows[li].getStart() + CELL_SIZE / 2 + h / 4;
+ int x = columns[co].getStart() + (CELL_SIZE - w ) / 2;
+ int y = rows[li].getStart() + (CELL_SIZE + h / 2) / 2;
- return new Point(x, y);
- }
+ return new Point(x, y + 1);
+ }
- private void paintGridNumbers(Graphics2D g2, SudokuGrid grid, boolean kanjiMode) {
+ private void paintGridNumbers(Graphics2D g2, SudokuGrid grid, int numbersMode) {
g2.setColor(Color.BLACK);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Font font = new Font("Serif", Font.BOLD, FONT_SIZE);
- Font font = new Font("Serif", Font.BOLD, FONT_SIZE - (kanjiMode?4:0));
+ Font font = new Font("Serif", Font.BOLD, FONT_SIZE - (numbersMode==1?4:0));
g2.setFont(font);
for (int li = 0; li < 9; li++) {
for (int co = 0; co < 9; co++) {
- Point pos = getPosition(g2, li, co);
- g2.drawString(getValueAsStringAt(grid, li, co, kanjiMode), pos.x, pos.y);
+
+ String digit = getValueAsStringAt(grid, li, co, numbersMode);
+ Point pos = getPosition(g2, li, co, digit);
+ g2.drawString(digit, pos.x, pos.y);
}
}
}
- private String getValueAsStringAt(SudokuGrid grid, int li, int co, boolean kanjiMode) {
- int value = grid.getValueAt(li, co);
- String result = "";
- if (kanjiMode) {
- switch (value) {
- case 1:
- result = "\u4e00";
- break;
- case 2:
- result = "\u4E8C";
- break;
- case 3:
- result = "\u4e09";
- break;
- case 4:
- result = "\u56DB";
- break;
- case 5:
- result = "\u4E94";
- break;
- case 6:
- result = "\u516D";
- break;
- case 7:
- result = "\u4E03";
- break;
- case 8:
- result = "\u516B";
- break;
- case 9:
- result = "\u4E5D";
- break;
- }
- } else {
- result = (value == 0) ? "" : String.valueOf(value);
- }
- return result;
- }
+ private static String[] digits = { "", "1", "2", "3", "4", "5", "6", "7", "8", "9",
+ "", "\u4e00", "\u4E8C", "\u4e09", "\u56DB", "\u4E94", "\u516D", "\u4E03", "\u516B", "\u4E5D",
+ "", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669",
+ };
+
+ private String getValueAsStringAt(SudokuGrid grid, int li, int co, int numbersMode) {
+ int value = grid.getValueAt(li, co);
+ String result = digits[value + (10 * numbersMode)];
+ return result;
+ }
private void paintGridBoard(Graphics2D g2) {
g2.setColor(Color.WHITE);
/* Now we perform our rendering */
g2.translate(-240, 140);
- boolean kanjiMode = UserPreferences.getInstance().getBoolean("kanjiMode", false);
+ int numbersMode = UserPreferences.getInstance().getInteger("numbersMode", Integer.valueOf(0)).intValue();
paintGridBoard(g2);
- paintGridNumbers(g2, su1, kanjiMode);
+ paintGridNumbers(g2, su1, numbersMode);
g2.translate(230, 0);
paintGridBoard(g2);
- paintGridNumbers(g2, su2, kanjiMode);
+ paintGridNumbers(g2, su2, numbersMode);
g2.translate(-230, 250);
paintGridBoard(g2);
- paintGridNumbers(g2, su3, kanjiMode);
+ paintGridNumbers(g2, su3, numbersMode);
g2.translate(230, 0);
paintGridBoard(g2);
- paintGridNumbers(g2, su4, kanjiMode);
+ paintGridNumbers(g2, su4, numbersMode);
return PAGE_EXISTS;
}