From 3602a252b44e0b3b0427333ac74b10dd7a19bde2 Mon Sep 17 00:00:00 2001 From: Marc Froehlich Date: Fri, 26 Jan 2024 22:42:45 +0100 Subject: [PATCH] added contextmenu to cq-message-table --- .../MessageBusManagementThread.java | 7 + .../kst4contest/utils/PlayAudioUtils.java | 299 +++++++++++------- .../utils}/TestAudioPlayerUtils.java | 2 +- .../view/Kst4ContestApplication.java | 81 ++++- 4 files changed, 271 insertions(+), 118 deletions(-) rename src/{test/java/kst4contest/test => main/java/kst4contest/utils}/TestAudioPlayerUtils.java (93%) diff --git a/src/main/java/kst4contest/controller/MessageBusManagementThread.java b/src/main/java/kst4contest/controller/MessageBusManagementThread.java index df3c200..8e3a1c6 100644 --- a/src/main/java/kst4contest/controller/MessageBusManagementThread.java +++ b/src/main/java/kst4contest/controller/MessageBusManagementThread.java @@ -563,6 +563,13 @@ public class MessageBusManagementThread extends Thread { this.client.getPlayAudioUtils().playVoiceLauncher( "?" + newMessage.getSender().getCallSign().toUpperCase()); } + if (this.client.getChatPreferences().isNotify_playSimpleSounds()) { + if (newMessage.getMessageText().toUpperCase().contains("//BELL")) { + this.client.getPlayAudioUtils().playVoiceLauncher("!"); + } + } + + System.out.println("message directed to me: " + newMessage.getReceiver().getCallSign() + "."); } else if (newMessage.getSender().getCallSign().toUpperCase() diff --git a/src/main/java/kst4contest/utils/PlayAudioUtils.java b/src/main/java/kst4contest/utils/PlayAudioUtils.java index 1c07df9..3d17294 100644 --- a/src/main/java/kst4contest/utils/PlayAudioUtils.java +++ b/src/main/java/kst4contest/utils/PlayAudioUtils.java @@ -2,6 +2,7 @@ package kst4contest.utils; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; +import kst4contest.ApplicationConstants; import java.io.File; import java.util.Arrays; @@ -11,27 +12,104 @@ import java.util.Queue; /** * This part of the client drives the sounds. Its a singleton instance. All audio outs are directed to this instance.
*
- * Instance of this classes will use the audio-notification-settings of the ChatPreferences instance and then wheter - * play a sound or not. Each method of this class will only cause an audio output if the settings for audio-out are - * made. This is good for less typing work. If audio is switched off by the user, all audio out callings will do:
- * nothing. - * - */ + * */ public class PlayAudioUtils { -// public boolean useNormalProgramSounds, useCWCallSignSounds, useVoiceCallSignSounds; + /** + * Default constructor initializes the sound files and copies it to the project home folder + */ + public PlayAudioUtils() { -// public void setUseNormalProgramSounds(boolean useNormalProgramSounds) { -// this.useNormalProgramSounds = useNormalProgramSounds; -// } -// -// public void setUseCWCallSignSounds(boolean useCWCallSignSounds) { -// this.useCWCallSignSounds = useCWCallSignSounds; -// } -// -// public void setUseVoiceCallSignSounds(boolean useVoiceCallSignSounds) { -// this.useVoiceCallSignSounds = useVoiceCallSignSounds; -// } + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/NOISESTARTUP.mp3", "NOISESTARTUP.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/NOISECQWINDOW.mp3", "NOISECQWINDOW.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/NOISEPMWINDOW.mp3", "NOISEPMWINDOW.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/NOISEERROR.mp3", "NOISEERROR.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/NOISENOTIFY.mp3", "NOISENOTIFY.mp3"); + + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRA.mp3", "LTTRA.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRB.mp3", "LTTRB.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRC.mp3", "LTTRC.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRD.mp3", "LTTRD.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRE.mp3", "LTTRE.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRF.mp3", "LTTRF.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRG.mp3", "LTTRG.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRH.mp3", "LTTRH.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRI.mp3", "LTTRI.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRJ.mp3", "LTTRJ.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRK.mp3", "LTTRK.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRL.mp3", "LTTRL.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRM.mp3", "LTTRM.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRN.mp3", "LTTRN.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRO.mp3", "LTTRO.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRP.mp3", "LTTRP.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRQ.mp3", "LTTRQ.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRR.mp3", "LTTRR.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRS.mp3", "LTTRS.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRT.mp3", "LTTRT.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRU.mp3", "LTTRU.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRV.mp3", "LTTRV.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRW.mp3", "LTTRW.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRX.mp3", "LTTRX.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRY.mp3", "LTTRY.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRZ.mp3", "LTTRZ.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR0.mp3", "LTTR0.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR1.mp3", "LTTR1.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR2.mp3", "LTTR2.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR3.mp3", "LTTR3.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR4.mp3", "LTTR4.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR5.mp3", "LTTR5.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR6.mp3", "LTTR6.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR7.mp3", "LTTR7.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR8.mp3", "LTTR8.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTR9.mp3", "LTTR9.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRSTROKE.mp3", "LTTRSTROKE.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/LTTRSPACE.mp3", "LTTRSPACE.mp3"); + + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEA.mp3", "VOICEA.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEB.mp3", "VOICEB.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEC.mp3", "VOICEC.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICED.mp3", "VOICED.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEE.mp3", "VOICEE.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEF.mp3", "VOICEF.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEG.mp3", "VOICEG.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEH.mp3", "VOICEH.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEI.mp3", "VOICEI.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEJ.mp3", "VOICEJ.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEK.mp3", "VOICEK.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEL.mp3", "VOICEL.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEM.mp3", "VOICEM.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEN.mp3", "VOICEN.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEO.mp3", "VOICEO.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEP.mp3", "VOICEP.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEQ.mp3", "VOICEQ.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICER.mp3", "VOICER.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICES.mp3", "VOICES.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICET.mp3", "VOICET.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEU.mp3", "VOICEU.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEV.mp3", "VOICEV.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEW.mp3", "VOICEW.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEX.mp3", "VOICEX.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEY.mp3", "VOICEY.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEZ.mp3", "VOICEZ.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE0.mp3", "VOICE0.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE1.mp3", "VOICE1.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE2.mp3", "VOICE2.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE3.mp3", "VOICE3.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE4.mp3", "VOICE4.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE5.mp3", "VOICE5.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE6.mp3", "VOICE6.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE7.mp3", "VOICE7.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE8.mp3", "VOICE8.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE9.mp3", "VOICE9.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICESTROKE.mp3", "VOICESTROKE.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEBELL.mp3", "VOICEBELL.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEYOUGOTMAIL.mp3", "VOICEYOUGOTMAIL.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICEHELLO.mp3", "VOICEHELLO.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICE73.mp3", "VOICE73.mp3"); + ApplicationFileUtils.copyResourceIfRequired(ApplicationConstants.APPLICATION_NAME, "/VOICESTROKEPORTABLE.mp3", "VOICESTROKEPORTABLE.mp3"); + + + } private Queue musicList = new LinkedList(); private MediaPlayer mediaPlayer ; @@ -39,7 +117,7 @@ public class PlayAudioUtils { /** * Plays notification sounds out of the windws 95 box by given action character
*
- * Note that the audio settings (ChatPreferences) must be switched on in order to make the sounds playing.
+ * * case '!': Startup
* case 'C': CQ Window new entry
* case 'P': PM Window new entry
@@ -50,21 +128,26 @@ public class PlayAudioUtils { */ public void playNoiseLauncher(char actionChar) { + + +// ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/NOISESTARTUP.mp3"); + + switch (actionChar){ case '!': - musicList.add(new Media(new File ("NOISESTARTUP.mp3").toURI().toString())); + musicList.add(new Media(new File (ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/NOISESTARTUP.mp3")).toURI().toString())); break; case 'C': - musicList.add(new Media(new File ("NOISECQWINDOW.mp3").toURI().toString())); + musicList.add(new Media(new File (ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/NOISECQWINDOW.mp3")).toURI().toString())); break; case 'P': - musicList.add(new Media(new File ("NOISEPMWINDOW.mp3").toURI().toString())); + musicList.add(new Media(new File (ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/NOISEPMWINDOW.mp3")).toURI().toString())); break; case 'E': - musicList.add(new Media(new File ("NOISEERROR.mp3").toURI().toString())); + musicList.add(new Media(new File (ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/NOISEERROR.mp3")).toURI().toString())); break; case 'N': - musicList.add(new Media(new File ("NOISENOTIFY.mp3").toURI().toString())); + musicList.add(new Media(new File (ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/NOISENOTIFY.mp3")).toURI().toString())); break; // case 'M': // musicList.add(new Media(new File ("VOICE.mp3").toURI().toString())); @@ -83,7 +166,7 @@ public class PlayAudioUtils { /** * Plays all chars of a given String-parameter as CW Sound out of the speaker. * As a workaround for delay problems at the beginning of playing, there are added 2x pause chars to the string. - * Note that the audio settings (ChatPreferences) must be switched on in order to make the sounds playing.
+ * * @param playThisChars */ public void playCWLauncher(String playThisChars) { @@ -94,118 +177,118 @@ public class PlayAudioUtils { for (char letterToPlay: playThisInCW){ switch (letterToPlay){ case 'A': - musicList.add(new Media(new File("LTTRA.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRA.mp3")).toURI().toString())); break; case 'B': - musicList.add(new Media(new File ("LTTRB.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRB.mp3")).toURI().toString())); break; case 'C': - musicList.add(new Media(new File ("LTTRC.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRC.mp3")).toURI().toString())); break; case 'D': - musicList.add(new Media(new File ("LTTRD.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRD.mp3")).toURI().toString())); break; case 'E': - musicList.add(new Media(new File ("LTTRE.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRE.mp3")).toURI().toString())); break; case 'F': - musicList.add(new Media(new File ("LTTRF.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRF.mp3")).toURI().toString())); break; case 'G': - musicList.add(new Media(new File ("LTTRG.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRG.mp3")).toURI().toString())); break; case 'H': - musicList.add(new Media(new File ("LTTRH.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRH.mp3")).toURI().toString())); break; case 'I': - musicList.add(new Media(new File ("LTTRI.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRI.mp3")).toURI().toString())); break; case 'J': - musicList.add(new Media(new File ("LTTRJ.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRJ.mp3")).toURI().toString())); break; case 'K': - musicList.add(new Media(new File ("LTTRK.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRK.mp3")).toURI().toString())); break; case 'L': - musicList.add(new Media(new File ("LTTRL.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRL.mp3")).toURI().toString())); break; case 'M': - musicList.add(new Media(new File ("LTTRM.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRM.mp3")).toURI().toString())); break; case 'N': - musicList.add(new Media(new File ("LTTRN.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRN.mp3")).toURI().toString())); break; case 'O': - musicList.add(new Media(new File ("LTTRO.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRO.mp3")).toURI().toString())); break; case 'P': - musicList.add(new Media(new File ("LTTRP.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRP.mp3")).toURI().toString())); break; case 'Q': - musicList.add(new Media(new File ("LTTRQ.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRQ.mp3")).toURI().toString())); break; case 'R': - musicList.add(new Media(new File ("LTTRR.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRR.mp3")).toURI().toString())); break; case 'S': - musicList.add(new Media(new File ("LTTRS.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRS.mp3")).toURI().toString())); break; case 'T': - musicList.add(new Media(new File ("LTTRT.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRT.mp3")).toURI().toString())); break; case 'U': - musicList.add(new Media(new File ("LTTRU.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRU.mp3")).toURI().toString())); break; case 'V': - musicList.add(new Media(new File ("LTTRV.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRV.mp3")).toURI().toString())); break; case 'W': - musicList.add(new Media(new File ("LTTRW.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRW.mp3")).toURI().toString())); break; case 'X': - musicList.add(new Media(new File ("LTTRX.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRX.mp3")).toURI().toString())); break; case 'Y': - musicList.add(new Media(new File ("LTTRY.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRY.mp3")).toURI().toString())); break; case 'Z': - musicList.add(new Media(new File ("LTTRZ.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRZ.mp3")).toURI().toString())); break; case '1': - musicList.add(new Media(new File ("LTTR1.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR1.mp3")).toURI().toString())); break; case '2': - musicList.add(new Media(new File ("LTTR2.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR2.mp3")).toURI().toString())); break; case '3': - musicList.add(new Media(new File ("LTTR3.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR3.mp3")).toURI().toString())); break; case '4': - musicList.add(new Media(new File ("LTTR4.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR4.mp3")).toURI().toString())); break; case '5': - musicList.add(new Media(new File ("LTTR5.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR5.mp3")).toURI().toString())); break; case '6': - musicList.add(new Media(new File ("LTTR6.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR6.mp3")).toURI().toString())); break; case '7': - musicList.add(new Media(new File ("LTTR7.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR7.mp3")).toURI().toString())); break; case '8': - musicList.add(new Media(new File ("LTTR8.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR8.mp3")).toURI().toString())); break; case '9': - musicList.add(new Media(new File ("LTTR9.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR9.mp3")).toURI().toString())); break; case '0': - musicList.add(new Media(new File ("LTTR0.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTR0.mp3")).toURI().toString())); break; case '/': - musicList.add(new Media(new File ("LTTRSTROKE.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRSTROKE.mp3")).toURI().toString())); break; case ' ': - musicList.add(new Media(new File ("LTTRSPACE.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/LTTRSPACE.mp3")).toURI().toString())); break; default: System.out.println("[KST4ContestApp, warning, letter not defined:] cwLetters = " + Arrays.toString(playThisInCW)); @@ -229,141 +312,141 @@ public class PlayAudioUtils { */ public void playVoiceLauncher(String playThisChars) { - char[] playThisInCW = playThisChars.toUpperCase().toCharArray(); + char[] spellThisWithVoice = playThisChars.toUpperCase().toCharArray(); - for (char letterToPlay: playThisInCW){ + for (char letterToPlay: spellThisWithVoice){ switch (letterToPlay){ case '!': - musicList.add(new Media(new File ("VOICEBELL.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEBELL.mp3")).toURI().toString())); break; case '?': - musicList.add(new Media(new File ("VOICEYOUGOTMAIL.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEYOUGOTMAIL.mp3")).toURI().toString())); break; case '#': - musicList.add(new Media(new File ("VOICEHELLO.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEHELLO.mp3")).toURI().toString())); break; case '*': - musicList.add(new Media(new File ("VOICE73.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE73.mp3")).toURI().toString())); break; case '$': - musicList.add(new Media(new File ("VOICESTROKEPORTABLE.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICESTROKEPORTABLE.mp3")).toURI().toString())); break; case 'A': - musicList.add(new Media(new File ("VOICEA.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEA.mp3")).toURI().toString())); break; case 'B': - musicList.add(new Media(new File ("VOICEB.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEB.mp3")).toURI().toString())); break; case 'C': - musicList.add(new Media(new File ("VOICEC.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEC.mp3")).toURI().toString())); break; case 'D': - musicList.add(new Media(new File ("VOICED.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICED.mp3")).toURI().toString())); break; case 'E': - musicList.add(new Media(new File ("VOICEE.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEE.mp3")).toURI().toString())); break; case 'F': - musicList.add(new Media(new File ("VOICEF.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEF.mp3")).toURI().toString())); break; case 'G': - musicList.add(new Media(new File ("VOICEG.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEG.mp3")).toURI().toString())); break; case 'H': - musicList.add(new Media(new File ("VOICEH.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEH.mp3")).toURI().toString())); break; case 'I': - musicList.add(new Media(new File ("VOICEI.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEI.mp3")).toURI().toString())); break; case 'J': - musicList.add(new Media(new File ("VOICEJ.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEJ.mp3")).toURI().toString())); break; case 'K': - musicList.add(new Media(new File ("VOICEK.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEK.mp3")).toURI().toString())); break; case 'L': - musicList.add(new Media(new File ("VOICEL.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEL.mp3")).toURI().toString())); break; case 'M': - musicList.add(new Media(new File ("VOICEM.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEM.mp3")).toURI().toString())); break; case 'N': - musicList.add(new Media(new File ("VOICEN.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEN.mp3")).toURI().toString())); break; case 'O': - musicList.add(new Media(new File ("VOICEO.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEO.mp3")).toURI().toString())); break; case 'P': - musicList.add(new Media(new File ("VOICEP.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEP.mp3")).toURI().toString())); break; case 'Q': - musicList.add(new Media(new File ("VOICEQ.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEQ.mp3")).toURI().toString())); break; case 'R': - musicList.add(new Media(new File ("VOICER.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICER.mp3")).toURI().toString())); break; case 'S': - musicList.add(new Media(new File ("VOICES.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICES.mp3")).toURI().toString())); break; case 'T': - musicList.add(new Media(new File ("VOICET.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICET.mp3")).toURI().toString())); break; case 'U': - musicList.add(new Media(new File ("VOICEU.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEU.mp3")).toURI().toString())); break; case 'V': - musicList.add(new Media(new File ("VOICEV.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEV.mp3")).toURI().toString())); break; case 'W': - musicList.add(new Media(new File ("VOICEW.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEW.mp3")).toURI().toString())); break; case 'X': - musicList.add(new Media(new File ("VOICEX.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEX.mp3")).toURI().toString())); break; case 'Y': - musicList.add(new Media(new File ("VOICEY.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEY.mp3")).toURI().toString())); break; case 'Z': - musicList.add(new Media(new File ("VOICEZ.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICEZ.mp3")).toURI().toString())); break; case '1': - musicList.add(new Media(new File ("VOICE1.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE1.mp3")).toURI().toString())); break; case '2': - musicList.add(new Media(new File ("VOICE2.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE2.mp3")).toURI().toString())); break; case '3': - musicList.add(new Media(new File ("VOICE3.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE3.mp3")).toURI().toString())); break; case '4': - musicList.add(new Media(new File ("VOICE4.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE4.mp3")).toURI().toString())); break; case '5': - musicList.add(new Media(new File ("VOICE5.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE5.mp3")).toURI().toString())); break; case '6': - musicList.add(new Media(new File ("VOICE6.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE6.mp3")).toURI().toString())); break; case '7': - musicList.add(new Media(new File ("VOICE7.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE7.mp3")).toURI().toString())); break; case '8': - musicList.add(new Media(new File ("VOICE8.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE8.mp3")).toURI().toString())); break; case '9': - musicList.add(new Media(new File ("VOICE9.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE9.mp3")).toURI().toString())); break; case '0': - musicList.add(new Media(new File ("VOICE0.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICE0.mp3")).toURI().toString())); break; case '/': - musicList.add(new Media(new File ("VOICESTROKE.mp3").toURI().toString())); + musicList.add(new Media(new File(ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, "/VOICESTROKE.mp3")).toURI().toString())); break; // case ' ': // musicList.add(new Media(new File ("VOICESPACE.mp3").toURI().toString())); // break; default: - System.out.println("[KST4ContestApp, warning, letter not defined:] cwLetters = " + Arrays.toString(playThisInCW)); + System.out.println("[KST4ContestApp, warning, letter not defined:] cwLetters = " + Arrays.toString(spellThisWithVoice)); } } playMusic(); diff --git a/src/test/java/kst4contest/test/TestAudioPlayerUtils.java b/src/main/java/kst4contest/utils/TestAudioPlayerUtils.java similarity index 93% rename from src/test/java/kst4contest/test/TestAudioPlayerUtils.java rename to src/main/java/kst4contest/utils/TestAudioPlayerUtils.java index 4ca6b75..def1fde 100644 --- a/src/test/java/kst4contest/test/TestAudioPlayerUtils.java +++ b/src/main/java/kst4contest/utils/TestAudioPlayerUtils.java @@ -1,4 +1,4 @@ -package kst4contest.test; +package kst4contest.utils; import javafx.application.Application; import javafx.stage.Stage; diff --git a/src/main/java/kst4contest/view/Kst4ContestApplication.java b/src/main/java/kst4contest/view/Kst4ContestApplication.java index ba43cef..df97725 100644 --- a/src/main/java/kst4contest/view/Kst4ContestApplication.java +++ b/src/main/java/kst4contest/view/Kst4ContestApplication.java @@ -2445,8 +2445,6 @@ public class Kst4ContestApplication extends Application { .getSelectionModel(); privateChatselectionModelChatMessage.setSelectionMode(SelectionMode.SINGLE); -// tbl_chatMember.getda - ObservableList selectedChatMessageList = privateChatselectionModelChatMessage .getSelectedItems(); selectedChatMessageList.addListener(new ListChangeListener() { @@ -2456,13 +2454,34 @@ public class Kst4ContestApplication extends Application { // do nothing, that was a deselection-event! } else { - txt_chatMessageUserInput.clear(); - txt_chatMessageUserInput.setText("/cq " - + selectedChatMemberPrivateChat.getList().get(0).getSender().getCallSign() + " "); - System.out.println("privChat selected ChatMember: " - + selectedChatMemberPrivateChat.getList().get(0).getSender()); - // selectedChatMemberList.clear(); + /** + * We need a special trick here. Since the private message list is a messagelist only for my own callsign, it´s not useful to show a sender and receiver. + * But if you choose a line with a message which you sent do another station, the default mechanism will type "/cq MYOWNCALL" to the textfield and if you are sleepy, + * you wouldnt remark that you sent a message to yourself. Thatswhy the rx-callsign (in brackets) will be extracted out of your sended message and added to the sendmessage-field. + * Thats what happening in line with //here1 + * Your own sent texts will look like this: + * + * (>ON4KST) Hi team! Nice to meet you + * + */ + + if (selectedChatMemberPrivateChat.getList().get(0).getSender().getCallSign().equals(chatcontroller.getChatPreferences().getLoginCallSign()) ) { + System.out.println("privChat selected ChatMember: was own object..." + "rx was: " + selectedChatMemberPrivateChat.getList().get(0).getMessageText().substring(2,(selectedChatMemberPrivateChat.getList().get(0).getMessageText().indexOf(")")))); + + txt_chatMessageUserInput.clear(); + txt_chatMessageUserInput.setText("/cq " + + selectedChatMemberPrivateChat.getList().get(0).getMessageText().substring(2,(selectedChatMemberPrivateChat.getList().get(0).getMessageText().indexOf(")"))) + " "); //here1 + + } else { + + txt_chatMessageUserInput.clear(); + txt_chatMessageUserInput.setText("/cq " + + selectedChatMemberPrivateChat.getList().get(0).getSender().getCallSign() + " "); + System.out.println("privChat selected ChatMember: " + + selectedChatMemberPrivateChat.getList().get(0).getSender()); + // selectedChatMemberList.clear(); // selectionModelChatMember.clearSelection(0); + } } } }); @@ -2480,8 +2499,52 @@ public class Kst4ContestApplication extends Application { } }, new Date(), 5000); + + TableView tbl_generalMessageTable = new TableView(); + tbl_generalMessageTable = initChatGeneralMSGTable(); + + tbl_generalMessageTable.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler() { + + @Override + public void handle(MouseEvent t) { + if (t.getButton() == MouseButton.SECONDARY) { + chatMemberContextMenu.show(primaryStage, t.getScreenX(), t.getScreenY()); + + } + } + }); + + TableViewSelectionModel generalChatselectionModelChatMessage = tbl_generalMessageTable + .getSelectionModel(); + privateChatselectionModelChatMessage.setSelectionMode(SelectionMode.SINGLE); + + ObservableList selectedChatMessageListGeneralChat = generalChatselectionModelChatMessage + .getSelectedItems(); + selectedChatMessageListGeneralChat.addListener(new ListChangeListener() { + @Override + public void onChanged(Change selectedChatMemberGeneralChat) { + if (generalChatselectionModelChatMessage.getSelectedItems().isEmpty()) { + // do nothing, that was a deselection-event! + } else { + + txt_chatMessageUserInput.clear(); + txt_chatMessageUserInput.setText("/cq " + + selectedChatMemberGeneralChat.getList().get(0).getSender().getCallSign() + " "); + System.out.println("privChat selected ChatMember: " + + selectedChatMemberGeneralChat.getList().get(0).getSender()); + // selectedChatMemberList.clear(); +// selectionModelChatMember.clearSelection(0); + } + } + }); + + + messageSectionSplitpane.getItems().addAll(privateMessageTable, flwPane_textSnippets, textInputFlowPane, - initChatGeneralMSGTable()); + tbl_generalMessageTable); + //Changed to add contextmenu to cq message table +// messageSectionSplitpane.getItems().addAll(privateMessageTable, flwPane_textSnippets, textInputFlowPane, +// initChatGeneralMSGTable()); bPaneChatWindow.setCenter(mainWindowLeftSplitPane);