From 300c2d07113eb9d15e789a145de4fb1141b25f9f Mon Sep 17 00:00:00 2001 From: Sylvain Vedrenne Date: Fri, 28 Dec 2012 19:35:47 +0100 Subject: [PATCH] Better centering in cells and added true Arabic numbers --- .../jankenpoi/sudokuki/ui/swing/NumbersMenu.java | 54 +++++++----- .../sudokuki/ui/swing/PrintMultiDialog.java | 6 +- .../net/jankenpoi/sudokuki/ui/swing/SwingGrid.java | 98 ++++++++-------------- .../sudokuki/ui/swing/SwingMultiGrid.java | 98 ++++++++-------------- 4 files changed, 108 insertions(+), 148 deletions(-) diff --git a/src/classes/net/jankenpoi/sudokuki/ui/swing/NumbersMenu.java b/src/classes/net/jankenpoi/sudokuki/ui/swing/NumbersMenu.java index 285462d..d3f1ed5 100644 --- a/src/classes/net/jankenpoi/sudokuki/ui/swing/NumbersMenu.java +++ b/src/classes/net/jankenpoi/sudokuki/ui/swing/NumbersMenu.java @@ -36,31 +36,41 @@ import net.jankenpoi.sudokuki.ui.L10nComponent; public class NumbersMenu extends JMenu implements L10nComponent { private final SwingView view; - private final JRadioButtonMenuItem itemArabicNumbers = new JRadioButtonMenuItem(); + private final JRadioButtonMenuItem itemStandardNumbers = new JRadioButtonMenuItem(); private final JRadioButtonMenuItem itemChineseNumbers = new JRadioButtonMenuItem(); - private final Action actionArabicNumbers; + private final JRadioButtonMenuItem itemArabicNumbers = new JRadioButtonMenuItem(); + private final Action actionStandardNumbers; private final Action actionChineseNumbers; + private final Action actionArabicNumbers; private LocaleListenerImpl localeListener; public NumbersMenu(SwingView view) { this.view = view; - actionArabicNumbers = new AbstractAction(_("Arabic"), null) { - - @Override - public void actionPerformed(ActionEvent arg0) { - setKanjiMode(false); - } + actionStandardNumbers = new AbstractAction(_("Standard"), null) { + + @Override + public void actionPerformed(ActionEvent arg0) { + setNumbersMode(0); + } }; actionChineseNumbers = new AbstractAction(_("Chinese"), null) { @Override public void actionPerformed(ActionEvent arg0) { - setKanjiMode(true); + setNumbersMode(1); } }; + actionArabicNumbers = new AbstractAction(_("Arabic"), null) { + + @Override + public void actionPerformed(ActionEvent arg0) { + setNumbersMode(2); + } + }; + addItems(); setIcon(StockIcons.ICON_FONT); @@ -74,29 +84,35 @@ public class NumbersMenu extends JMenu implements L10nComponent { @Override public void setL10nMessages(Locale locale, String languageCode) { setText(_("Numbers")); - itemArabicNumbers.setText(_("Arabic")); + itemStandardNumbers.setText(_("Standard")); itemChineseNumbers.setText(_("Chinese")); + itemArabicNumbers.setText(_("Arabic")); } private void addItems() { ButtonGroup numbersGroup = new ButtonGroup(); - boolean kanjiMode = UserPreferences.getInstance().getBoolean("KanjiMode", false); - - itemArabicNumbers.setAction(actionArabicNumbers); - numbersGroup.add(itemArabicNumbers); - itemArabicNumbers.setSelected(!kanjiMode); - add(itemArabicNumbers); + int numbersMode = UserPreferences.getInstance().getInteger("NumbersMode", Integer.valueOf(0)).intValue(); + itemStandardNumbers.setAction(actionStandardNumbers); + numbersGroup.add(itemStandardNumbers); + itemStandardNumbers.setSelected(numbersMode == 0); + add(itemStandardNumbers); + itemChineseNumbers.setAction(actionChineseNumbers); numbersGroup.add(itemChineseNumbers); - itemChineseNumbers.setSelected(kanjiMode); + itemChineseNumbers.setSelected(numbersMode == 1); add(itemChineseNumbers); + + itemArabicNumbers.setAction(actionArabicNumbers); + numbersGroup.add(itemArabicNumbers); + itemArabicNumbers.setSelected(numbersMode == 2); + add(itemArabicNumbers); } - private void setKanjiMode(boolean mode) { - UserPreferences.getInstance().set("kanjiMode", mode); + private void setNumbersMode(int mode) { + UserPreferences.getInstance().set("numbersMode", Integer.valueOf(mode)); view.getController().notifyGridChanged(); } diff --git a/src/classes/net/jankenpoi/sudokuki/ui/swing/PrintMultiDialog.java b/src/classes/net/jankenpoi/sudokuki/ui/swing/PrintMultiDialog.java index cb6dcfb..13e6634 100644 --- a/src/classes/net/jankenpoi/sudokuki/ui/swing/PrintMultiDialog.java +++ b/src/classes/net/jankenpoi/sudokuki/ui/swing/PrintMultiDialog.java @@ -73,7 +73,7 @@ public class PrintMultiDialog extends JDialog { @Override /* Executed in the SwingWorker thread */ protected Integer doInBackground() { - return generateFourGrids(); + return Integer.valueOf(generateFourGrids()); } @Override @@ -163,8 +163,8 @@ public class PrintMultiDialog extends JDialog { if (dialogCancelled()) { return 1; } - final int minRating = UserPreferences.getInstance().getInteger("minRating", 0); - final int maxRating = UserPreferences.getInstance().getInteger("maxRating", Integer.MAX_VALUE); + final int minRating = UserPreferences.getInstance().getInteger("minRating", Integer.valueOf(0)).intValue(); + final int maxRating = UserPreferences.getInstance().getInteger("maxRating", Integer.valueOf(Integer.MAX_VALUE)).intValue(); SudokuGrid su1 = SudokuGeneratorFactory.getGenerator().generateGrid(minRating, maxRating); if (dialogCancelled()) { return 1; diff --git a/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingGrid.java b/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingGrid.java index dcd0417..b8404e7 100644 --- a/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingGrid.java +++ b/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingGrid.java @@ -57,9 +57,7 @@ public class SwingGrid extends JPanel implements Printable { 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(); @@ -84,8 +82,8 @@ public class SwingGrid extends JPanel implements Printable { 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)); } /** @@ -98,19 +96,19 @@ public class SwingGrid extends JPanel implements Printable { * @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); } /** @@ -148,68 +146,41 @@ public class SwingGrid extends JPanel implements Printable { 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; } @@ -231,10 +202,10 @@ public class SwingGrid extends JPanel implements Printable { 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(); @@ -246,12 +217,13 @@ public class SwingGrid extends JPanel implements Printable { 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()) { @@ -261,7 +233,7 @@ public class SwingGrid extends JPanel implements Printable { } } - g2.drawString(getValueAsStringAt(li, co, kanjiMode), pos.x, pos.y); + g2.drawString(digit, pos.x, pos.y); } } } @@ -426,9 +398,9 @@ public class SwingGrid extends JPanel implements Printable { 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; } diff --git a/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingMultiGrid.java b/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingMultiGrid.java index f9b9886..93d88a4 100644 --- a/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingMultiGrid.java +++ b/src/classes/net/jankenpoi/sudokuki/ui/swing/SwingMultiGrid.java @@ -53,11 +53,9 @@ public class SwingMultiGrid extends JPanel implements Printable { 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; @@ -74,75 +72,49 @@ public class SwingMultiGrid extends JPanel implements Printable { * @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); @@ -225,21 +197,21 @@ public class SwingMultiGrid extends JPanel implements Printable { /* 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; } -- 2.11.0