diff --git a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java index 00ad492..2bc6cf5 100644 --- a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java +++ b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java @@ -36,6 +36,7 @@ import java.awt.event.AdjustmentEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; +import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -681,95 +682,45 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { centralPanel.getActionMap().put("startRecord", new AbstractAction() { public void actionPerformed(ActionEvent e) { Debug.trace(); + if (!canStartRecording()) return; if (!getLock()) return; - if (getFocusOwner() == bookNotesArea) { freeLock(); return; } - if (getFocusOwner() == chapterNotesArea) { freeLock(); return; } - if (getFocusOwner() == sentenceNotesArea) { freeLock(); return; } - if (bookTree.isEditing()) { - freeLock(); - return; - } - if (getBook().getNoiseFloor() == 0) { - freeLock(); - alertNoRoomNoise(); - return; - } + startRecording(); } }); centralPanel.getActionMap().put("startRecordShort", new AbstractAction() { public void actionPerformed(ActionEvent e) { Debug.trace(); + if (!canStartRecording()) return; if (!getLock()) return; - if (getFocusOwner() == bookNotesArea) { freeLock(); return; } - if (getFocusOwner() == chapterNotesArea) { freeLock(); return; } - if (getFocusOwner() == sentenceNotesArea) { freeLock(); return; } - if (bookTree.isEditing()) { - freeLock(); - return; - } - if (getBook().getNoiseFloor() == 0) { - freeLock(); - alertNoRoomNoise(); - return; - } + startRecordingShort(); } }); centralPanel.getActionMap().put("startRecordNewPara", new AbstractAction() { public void actionPerformed(ActionEvent e) { Debug.trace(); + if (!canStartRecording()) return; if (!getLock()) return; - if (getFocusOwner() == bookNotesArea) { freeLock(); return; } - if (getFocusOwner() == chapterNotesArea) { freeLock(); return; } - if (getFocusOwner() == sentenceNotesArea) { freeLock(); return; } - if (bookTree.isEditing()) { - freeLock(); - return; - } - if (getBook().getNoiseFloor() == 0) { - alertNoRoomNoise(); - freeLock(); - return; - } + startRecordingNewParagraph(); } }); centralPanel.getActionMap().put("startRecordNewSection", new AbstractAction() { public void actionPerformed(ActionEvent e) { Debug.trace(); + if (!canStartRecording()) return; if (!getLock()) return; - if (getFocusOwner() == bookNotesArea) { freeLock(); return; } - if (getFocusOwner() == chapterNotesArea) { freeLock(); return; } - if (getFocusOwner() == sentenceNotesArea) { freeLock(); return; } - if (bookTree.isEditing()) { - freeLock(); - return; - } - if (getBook().getNoiseFloor() == 0) { - freeLock(); - alertNoRoomNoise(); - return; - } + startRecordingNewSection(); } }); centralPanel.getActionMap().put("startRerecord", new AbstractAction() { public void actionPerformed(ActionEvent e) { Debug.trace(); + if (!canStartRecording()) return; if (!getLock()) return; - if (getFocusOwner() == bookNotesArea) { freeLock(); return; } - if (getFocusOwner() == chapterNotesArea) { freeLock(); return; } - if (getFocusOwner() == sentenceNotesArea) { freeLock(); return; } - if (bookTree.isEditing()) { - freeLock(); - return; - } - if (getBook().getNoiseFloor() == 0) { - freeLock(); - alertNoRoomNoise(); - return; - } + startReRecording(); } }); @@ -834,6 +785,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { mainScroll.setViewportView(bookTree); bookTree.setEditable(true); + for (KeyListener kl : bookTree.getListeners(KeyListener.class)) { + bookTree.removeKeyListener(kl); + } + TreeCellRenderer renderer = new BookTreeRenderer(); try { bookTree.setCellRenderer(renderer); @@ -1038,6 +993,27 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { } } + boolean canStartRecording() { + if (getFocusOwner() == bookNotesArea) { return false; } + if (getFocusOwner() == chapterNotesArea) { return false; } + if (getFocusOwner() == sentenceNotesArea) { return false; } + if (bookTree.isEditing()) { return false; } + if (getBook() == null) { + JOptionPane.showMessageDialog(AudiobookRecorder.window, "No book selected. Select a book to record.", "Error", JOptionPane.ERROR_MESSAGE); + return false; + } + if (Microphone.getDevice() == null) { + JOptionPane.showMessageDialog(AudiobookRecorder.window, "Microphone not started. Start the microphone first.", "Error", JOptionPane.ERROR_MESSAGE); + return false; + } + if (getBook().getNoiseFloor() == 0) { + alertNoRoomNoise(); + return false; + } + + return true; + } + void bindKeys(JComponent component) { Debug.trace(); component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F"), "startRecordShort"); diff --git a/src/uk/co/majenko/audiobookrecorder/Sentence.java b/src/uk/co/majenko/audiobookrecorder/Sentence.java index a8bdba5..1b78881 100644 --- a/src/uk/co/majenko/audiobookrecorder/Sentence.java +++ b/src/uk/co/majenko/audiobookrecorder/Sentence.java @@ -995,6 +995,8 @@ public class Sentence extends BookTreeNode implements Cacheable { public void backup() throws IOException { Debug.trace(); + if (getFile() == null) return; + if (!getFile().exists()) return; File whereto = getFile().getParentFile(); String name = getFile().getName();