src/de/uapcore/sudoku/ActionHandler.java

changeset 6
5bab2e971333
parent 5
8ddf4af937d7
child 7
2c0a2766461c
     1.1 --- a/src/de/uapcore/sudoku/ActionHandler.java	Sat Jan 26 19:34:31 2013 +0100
     1.2 +++ b/src/de/uapcore/sudoku/ActionHandler.java	Sun Jan 27 15:03:57 2013 +0100
     1.3 @@ -28,6 +28,9 @@
     1.4  
     1.5  import java.awt.event.ActionEvent;
     1.6  import java.awt.event.ActionListener;
     1.7 +import java.io.File;
     1.8 +import java.io.IOException;
     1.9 +import javax.swing.JFileChooser;
    1.10  import javax.swing.JOptionPane;
    1.11  
    1.12  /**
    1.13 @@ -57,19 +60,60 @@
    1.14      }
    1.15      
    1.16      private boolean chooseSaveFilename() {
    1.17 -        // TODO: fileselector
    1.18 -        return false;
    1.19 +        JFileChooser fc = new JFileChooser(".");
    1.20 +        fc.setMultiSelectionEnabled(false);
    1.21 +        if (fc.showSaveDialog(field) == JFileChooser.APPROVE_OPTION) {
    1.22 +            File f = fc.getSelectedFile();
    1.23 +            if (f.exists()) {
    1.24 +                int result = JOptionPane.showConfirmDialog(field,
    1.25 +                        "Bereits existierende Datei überschreiben?", "Sudoku",
    1.26 +                        JOptionPane.YES_NO_OPTION);
    1.27 +                if (result == JOptionPane.YES_OPTION) {
    1.28 +                    doc.setFilename(f.getAbsolutePath());
    1.29 +                    return true;
    1.30 +                } else {
    1.31 +                    return false;
    1.32 +                }
    1.33 +            } else {
    1.34 +                doc.setFilename(f.getAbsolutePath());
    1.35 +                return true;
    1.36 +            }
    1.37 +        } else {
    1.38 +            return false;
    1.39 +        }
    1.40      }
    1.41      
    1.42 -    private boolean save() {
    1.43 -        if (!doc.isFilenameSet()) {
    1.44 +    private void open() {
    1.45 +        JFileChooser fc = new JFileChooser(".");
    1.46 +        fc.setMultiSelectionEnabled(false);
    1.47 +        if (fc.showOpenDialog(field) == JFileChooser.APPROVE_OPTION) {
    1.48 +            File f = fc.getSelectedFile();
    1.49 +            doc.setFilename(f.getAbsolutePath());
    1.50 +            try {
    1.51 +                doc.load(field);
    1.52 +            } catch (IOException e) {
    1.53 +                JOptionPane.showMessageDialog(field,
    1.54 +                    "Datei konnte nicht geladen werden: "+e.getMessage(),
    1.55 +                    "Sudoku", JOptionPane.ERROR_MESSAGE);
    1.56 +            }
    1.57 +        }
    1.58 +    }
    1.59 +    
    1.60 +    private boolean save(boolean rename) {
    1.61 +        if (!doc.isFilenameSet() || rename) {
    1.62              if (!chooseSaveFilename()) {
    1.63                  return false;
    1.64              }
    1.65          }
    1.66          if (solver.check(field)) {
    1.67              field.setAllCellsModified(false);
    1.68 -            // TODO: save to file
    1.69 +            try {
    1.70 +                doc.save(field);
    1.71 +            } catch (IOException e) {
    1.72 +                JOptionPane.showMessageDialog(field,
    1.73 +                    "Datei konnte nicht gespeichert werden: "+e.getMessage(),
    1.74 +                    "Sudoku", JOptionPane.ERROR_MESSAGE);
    1.75 +            }
    1.76              return true;
    1.77          } else {
    1.78              JOptionPane.showMessageDialog(field,
    1.79 @@ -100,7 +144,7 @@
    1.80                      "Das Feld ist ungespeichert - jetzt speichern?",
    1.81                      "Sudoku", JOptionPane.YES_NO_CANCEL_OPTION);
    1.82              if (result == JOptionPane.YES_OPTION) {
    1.83 -                if (save()) {
    1.84 +                if (save(false)) {
    1.85                      proceed = true;
    1.86                  }
    1.87              } else if (result == JOptionPane.NO_OPTION) {
    1.88 @@ -121,8 +165,14 @@
    1.89                  field.clear();
    1.90              }
    1.91              break;
    1.92 +        case OPEN:
    1.93 +            open();
    1.94 +            break;
    1.95          case SAVE:
    1.96 -            save();
    1.97 +            save(false);
    1.98 +            break;
    1.99 +        case SAVE_AS:
   1.100 +            save(true);
   1.101              break;
   1.102          case CHECK:
   1.103              check();

mercurial