Changed lists mechanic: not 3 messagelists any more but one oversable messagelist for all messages. The 3 categories of messages are now filteredlists, derived from this global messagelist.

Added a new panel down of the userlist which will be dynamically generated and shows filtered messages to a selected callsign
This commit is contained in:
Marc Froehlich
2024-02-18 02:39:37 +01:00
committed by praktimarc
parent 7fe2930ee2
commit c369888c37
8 changed files with 817 additions and 45 deletions

View File

@@ -11,15 +11,15 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableStringValue;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import kst4contest.ApplicationConstants; import kst4contest.ApplicationConstants;
import kst4contest.model.*; import kst4contest.model.*;
import kst4contest.utils.PlayAudioUtils; import kst4contest.utils.PlayAudioUtils;
import java.io.*; import java.io.*;
import java.util.function.Predicate;
/** /**
* *
@@ -334,17 +334,23 @@ public class ChatController {
// ******All abstract types below here are used by the messageprocessor! // ******All abstract types below here are used by the messageprocessor!
// *************** // ***************
// private Hashtable<String, ChatMember> chatMemberTable = new Hashtable<String, ChatMember>();
// private HashMap<String, ChatMember> chatMemberTable = new HashMap<String, ChatMember>();
// private Hashtable<String, ChatMember> dXClusterMemberTable = new Hashtable<String, ChatMember>();
private ObservableList<ChatMessage> lst_toAllMessageList = FXCollections.observableArrayList(); // directed to all private ObservableList<ChatMessage> lst_globalChatMessageList = FXCollections.observableArrayList(); //All chatmessages will be put in there, later create filtered message lists
// private ObservableList<ChatMessage> lst_toAllMessageList = FXCollections.observableArrayList(); // directed to all
// (beacon) // (beacon)
private ObservableList<ChatMessage> lst_toMeMessageList = FXCollections.observableArrayList(); // directed to my private FilteredList<ChatMessage> lst_toAllMessageList = new FilteredList<>(lst_globalChatMessageList); // directed to all
// private ObservableList<ChatMessage> lst_toMeMessageList = FXCollections.observableArrayList(); // directed to my
// call // call
private ObservableList<ChatMessage> lst_toOtherMessageList = FXCollections.observableArrayList(); // directed to a private FilteredList<ChatMessage> lst_toMeMessageList = new FilteredList<>(lst_globalChatMessageList);
private FilteredList<ChatMessage> lst_selectedCallSignInfofilteredMessageList = new FilteredList<>(lst_globalChatMessageList); // directed to all
// private ObservableList<ChatMessage> lst_toOtherMessageList = FXCollections.observableArrayList(); // directed to a
// call but not // call but not
// mine // mine
private FilteredList<ChatMessage> lst_toOtherMessageList = new FilteredList<>(lst_globalChatMessageList);
private ObservableList<ChatMember> chatMemberList = FXCollections.observableArrayList(); // List of active stations private ObservableList<ChatMember> chatMemberList = FXCollections.observableArrayList(); // List of active stations
// in chat // in chat
private ObservableList<ChatMember> lst_chatMemberList = FXCollections.synchronizedObservableList(chatMemberList); // List private ObservableList<ChatMember> lst_chatMemberList = FXCollections.synchronizedObservableList(chatMemberList); // List
@@ -405,6 +411,22 @@ public class ChatController {
} }
public FilteredList<ChatMessage> getLst_selectedCallSignInfofilteredMessageList() {
return lst_selectedCallSignInfofilteredMessageList;
}
public void setLst_selectedCallSignInfofilteredMessageList(FilteredList<ChatMessage> lst_selectedCallSignInfofilteredMessageList) {
this.lst_selectedCallSignInfofilteredMessageList = lst_selectedCallSignInfofilteredMessageList;
}
public ObservableList<ChatMessage> getLst_globalChatMessageList() {
return lst_globalChatMessageList;
}
public void setLst_globalChatMessageList(ObservableList<ChatMessage> lst_globalChatMessageList) {
this.lst_globalChatMessageList = lst_globalChatMessageList;
}
public String getHostname() { public String getHostname() {
return hostname; return hostname;
} }
@@ -485,15 +507,21 @@ public class ChatController {
return lst_toAllMessageList; return lst_toAllMessageList;
} }
public void setLst_toAllMessageList(ObservableList<ChatMessage> lst_toAllMessageList) { // public void setLst_toAllMessageList(ObservableList<ChatMessage> lst_toAllMessageList) {
this.lst_toAllMessageList = lst_toAllMessageList; // this.lst_toAllMessageList = lst_toAllMessageList;
// }
public void setLst_toAllMessageList(FilteredList<ChatMessage> lst_toAllMessageList) {
this.lst_toAllMessageList = lst_toAllMessageList;
} }
public ObservableList<ChatMessage> getLst_toMeMessageList() { public ObservableList<ChatMessage> getLst_toMeMessageList() {
return lst_toMeMessageList; return lst_toMeMessageList;
} }
public void setLst_toMeMessageList(ObservableList<ChatMessage> lst_toMeMessageList) { // public void setLst_toMeMessageList(ObservableList<ChatMessage> lst_toMeMessageList) {
// this.lst_toMeMessageList = lst_toMeMessageList;
// }
public void setLst_toMeMessageList(FilteredList<ChatMessage> lst_toMeMessageList) {
this.lst_toMeMessageList = lst_toMeMessageList; this.lst_toMeMessageList = lst_toMeMessageList;
} }
@@ -501,7 +529,11 @@ public class ChatController {
return lst_toOtherMessageList; return lst_toOtherMessageList;
} }
public void setLst_toOtherMessageList(ObservableList<ChatMessage> lst_toOtherMessageList) { // public void setLst_toOtherMessageList(ObservableList<ChatMessage> lst_toOtherMessageList) {
// this.lst_toOtherMessageList = lst_toOtherMessageList;
// }
public void setLst_toOtherMessageList(FilteredList<ChatMessage> lst_toOtherMessageList) {
this.lst_toOtherMessageList = lst_toOtherMessageList; this.lst_toOtherMessageList = lst_toOtherMessageList;
} }
@@ -539,6 +571,73 @@ category = new ChatCategory(2);
updateInformation = checkForUpdates.parseUpdateXMLFile(); updateInformation = checkForUpdates.parseUpdateXMLFile();
}; };
lst_toMeMessageList.setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
try {
if (chatMessage.getReceiver().getCallSign().equals(getChatPreferences().getLoginCallSign())) {
return true; //messages addressed to you
}
if (chatMessage.getSender().getCallSign().equals(getChatPreferences().getLoginCallSign())) {
return true; //your own echo
}
String ignoreCaseString = chatMessage.getMessageText();
if (chatMessage.getMessageText().contains(chatPreferences.getLoginCallSign().toLowerCase()) || (chatMessage.getMessageText().contains(chatPreferences.getLoginCallSign().toUpperCase()))) {
return true; //if someone writes about you, you will get the mail, too!
}
else {
return false;
}
}
catch (Exception nullPointerExc) {
nullPointerExc.printStackTrace();
System.out.println("ChatController, ERROR: maybe the receiver was null!");
return false;
}
}
});
lst_toAllMessageList.setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
try {
if (chatMessage.getReceiver().getCallSign().equals("ALL")) { //TODO: ALL have to be an application-constant
return true;
} else return false;
}
catch (Exception nullPointerExc) {
nullPointerExc.printStackTrace();
System.out.println("ChatController, ERROR: maybe the receiver was null, mostly like a cq message!");
return true;
}
}
});
lst_toOtherMessageList.setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
try {
if ((!chatMessage.getSender().getCallSign().equals(getChatPreferences().getLoginCallSign())) &&
(!chatMessage.getReceiver().getCallSign().equals(getChatPreferences().getLoginCallSign()))) {
return true;
} else return false;
} catch (Exception nullPointerExc) {
nullPointerExc.printStackTrace();
System.out.println("ChatController, ERROR: maybe the receiver was null!");
return false;
}
}
});
dbHandler = new DBController(); dbHandler = new DBController();
chatPreferences = new ChatPreferences(); chatPreferences = new ChatPreferences();

View File

@@ -12,6 +12,7 @@ import java.util.regex.Pattern;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import kst4contest.ApplicationConstants; import kst4contest.ApplicationConstants;
import kst4contest.locatorUtils.Location;
import kst4contest.model.AirPlaneReflectionInfo; import kst4contest.model.AirPlaneReflectionInfo;
import kst4contest.model.ChatMember; import kst4contest.model.ChatMember;
import kst4contest.model.ChatMessage; import kst4contest.model.ChatMessage;
@@ -362,6 +363,9 @@ public class MessageBusManagementThread extends Thread {
newMember.setName(splittedMessageLine[3]); newMember.setName(splittedMessageLine[3]);
newMember.setQra(splittedMessageLine[4]); newMember.setQra(splittedMessageLine[4]);
newMember.setState(Integer.parseInt(splittedMessageLine[5])); newMember.setState(Integer.parseInt(splittedMessageLine[5]));
// newMember.setQTFdirection(LocatorUtils);
newMember.setQrb(new Location().getDistanceKmByTwoLocatorStrings(client.getChatPreferences().getLoginLocator(), newMember.getQra()));
newMember.setQTFdirection(new Location(client.getChatPreferences().getLoginLocator()).getBearing(new Location(newMember.getQra())));
newMember.setLastActivity(new Utils4KST().time_generateActualTimeInDateFormat()); newMember.setLastActivity(new Utils4KST().time_generateActualTimeInDateFormat());
// this.client.getChatMemberTable().put(splittedMessageLine[2], newMember); //TODO: map -> List // this.client.getChatMemberTable().put(splittedMessageLine[2], newMember); //TODO: map -> List
@@ -402,6 +406,8 @@ public class MessageBusManagementThread extends Thread {
newMember.setQra(splittedMessageLine[4]); newMember.setQra(splittedMessageLine[4]);
newMember.setState(Integer.parseInt(splittedMessageLine[5])); newMember.setState(Integer.parseInt(splittedMessageLine[5]));
newMember.setLastActivity(new Utils4KST().time_generateActualTimeInDateFormat()); newMember.setLastActivity(new Utils4KST().time_generateActualTimeInDateFormat());
newMember.setQrb(new Location().getDistanceKmByTwoLocatorStrings(client.getChatPreferences().getLoginLocator(), newMember.getQra()));
newMember.setQTFdirection(new Location(client.getChatPreferences().getLoginLocator()).getBearing(new Location(newMember.getQra())));
newMember = this.client.getDbHandler().fetchChatMemberWkdDataForOnlyOneCallsignFromDB(newMember); newMember = this.client.getDbHandler().fetchChatMemberWkdDataForOnlyOneCallsignFromDB(newMember);
@@ -512,7 +518,8 @@ public class MessageBusManagementThread extends Thread {
dummy.setCallSign("ALL"); dummy.setCallSign("ALL");
newMessage.setReceiver(dummy); newMessage.setReceiver(dummy);
this.client.getLst_toAllMessageList().add(0, newMessage); // sdtout to all message-List // this.client.getLst_toAllMessageList().add(0, newMessage); // sdtout to all message-List //TODO: change, moved to globalmessagelist - original
this.client.getLst_globalChatMessageList().add(0, newMessage); // sdtout to all message-List //TODO: change, moved to globalmessagelist
} else { } else {
@@ -553,7 +560,8 @@ public class MessageBusManagementThread extends Thread {
if (newMessage.getReceiver().getCallSign() if (newMessage.getReceiver().getCallSign()
.equals(this.client.getChatPreferences().getLoginCallSign())) { .equals(this.client.getChatPreferences().getLoginCallSign())) {
this.client.getLst_toMeMessageList().add(0, newMessage); // this.client.getLst_toMeMessageList().add(0, newMessage); //TODO: change, moved to globalmessagelist, original
this.client.getLst_globalChatMessageList().add(0, newMessage); //TODO: change, moved to globalmessagelist, original
if (this.client.getChatPreferences().isNotify_playSimpleSounds()) { if (this.client.getChatPreferences().isNotify_playSimpleSounds()) {
this.client.getPlayAudioUtils().playNoiseLauncher('P'); this.client.getPlayAudioUtils().playNoiseLauncher('P');
@@ -582,13 +590,15 @@ public class MessageBusManagementThread extends Thread {
String originalMessage = newMessage.getMessageText(); String originalMessage = newMessage.getMessageText();
newMessage newMessage
.setMessageText("(>" + newMessage.getReceiver().getCallSign() + ")" + originalMessage); .setMessageText("(>" + newMessage.getReceiver().getCallSign() + ")" + originalMessage);
this.client.getLst_toMeMessageList().add(0, newMessage); // this.client.getLst_toMeMessageList().add(0, newMessage); //TODO: change, moved to globalmessagelist, original
this.client.getLst_globalChatMessageList().add(0,newMessage);//TODO: change, moved to globalmessagelist
// if you sent the message to another station, it will be sorted in to // if you sent the message to another station, it will be sorted in to
// the "to me message list" with modified messagetext, added rxers callsign // the "to me message list" with modified messagetext, added rxers callsign
} else { } else {
this.client.getLst_toOtherMessageList().add(0, newMessage); // this.client.getLst_toOtherMessageList().add(0, newMessage); //TODO: change, moved to globalmessagelist, original
this.client.getLst_globalChatMessageList().add(0, newMessage);
// System.out.println("MSGBS bgfx: tx call = " + newMessage.getSender().getCallSign() + " / rx call = " + newMessage.getReceiver().getCallSign()); // System.out.println("MSGBS bgfx: tx call = " + newMessage.getSender().getCallSign() + " / rx call = " + newMessage.getReceiver().getCallSign());
} }
} catch (NullPointerException referenceDeletedByUserLeftChatDuringMessageprocessing) { } catch (NullPointerException referenceDeletedByUserLeftChatDuringMessageprocessing) {
@@ -681,6 +691,9 @@ public class MessageBusManagementThread extends Thread {
+ splittedMessageLine[3])); + splittedMessageLine[3]));
this.client.getLst_chatMemberList().get(index).setQra(splittedMessageLine[3]); this.client.getLst_chatMemberList().get(index).setQra(splittedMessageLine[3]);
this.client.getLst_chatMemberList().get(index).setQrb(new Location().getDistanceKmByTwoLocatorStrings(client.getChatPreferences().getLoginLocator(), splittedMessageLine[3]));
this.client.getLst_chatMemberList().get(index).setQTFdirection(new Location(client.getChatPreferences().getLoginLocator()).getBearing(new Location(splittedMessageLine[3])));
} else { } else {
System.out.println("[MSGBUSMGT:] ERROR! Locator Change of [" System.out.println("[MSGBUSMGT:] ERROR! Locator Change of ["
@@ -837,6 +850,8 @@ public class MessageBusManagementThread extends Thread {
stateChangeMember.setQra(splittedMessageLine[4]); stateChangeMember.setQra(splittedMessageLine[4]);
stateChangeMember.setState(Integer.parseInt(splittedMessageLine[5])); stateChangeMember.setState(Integer.parseInt(splittedMessageLine[5]));
stateChangeMember.setLastActivity(new Utils4KST().time_generateActualTimeInDateFormat()); stateChangeMember.setLastActivity(new Utils4KST().time_generateActualTimeInDateFormat());
stateChangeMember.setQrb(new Location().getDistanceKmByTwoLocatorStrings(client.getChatPreferences().getLoginLocator(), stateChangeMember.getQra()));
stateChangeMember.setQTFdirection(new Location(client.getChatPreferences().getLoginLocator()).getBearing(new Location(stateChangeMember.getQra())));
this.client.getDbHandler().storeChatMember(stateChangeMember); // TODO: not clean, it should be an this.client.getDbHandler().storeChatMember(stateChangeMember); // TODO: not clean, it should be an
// upodate // upodate

View File

@@ -20,6 +20,7 @@ import java.net.URL;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
public class UpdateChecker { public class UpdateChecker {
@@ -115,10 +116,113 @@ public class UpdateChecker {
} }
} }
} }
/**
* Section changeLog
*/
list = doc.getElementsByTagName("changeLog");
ArrayList<String[]> changeLogArrayList = new ArrayList<String[]>();
if (list.getLength() != 0) {
for (int temp = 0; temp < list.getLength(); temp++) {
Node node = list.item(temp);
Element element = (Element) node;
int childNodeCounter = 0; //need an extra counter due to childnodes are counted...no idea, how
String[] aChangeLogEntry = new String[7];
aChangeLogEntry[0] = "";
aChangeLogEntry[1] = "Date: ";
aChangeLogEntry[2] = "Desc: ";
aChangeLogEntry[3] = "Added: ";
aChangeLogEntry[4] = "Changed: ";
aChangeLogEntry[5] = "Fixed: ";
aChangeLogEntry[6] = "Removed: ";
for (int i = 0; i < element.getChildNodes().getLength(); i++) {
if (element.getChildNodes().item(i).getNodeType() == Node.ELEMENT_NODE) {
// System.out.println(element.getChildNodes().item(i).getTextContent() + " <<<<<<<<<<<<<<<<<< " + i + " / " + childNodeCounter);
// System.out.println(element.getChildNodes().item(i).getNodeName());
aChangeLogEntry[childNodeCounter] = aChangeLogEntry[childNodeCounter] + element.getChildNodes().item(i).getTextContent();
childNodeCounter++;
}
}
changeLogArrayList.add(aChangeLogEntry);
}
updateInfos.setChangeLog(changeLogArrayList);
}
/**
* Section Buglist
*/
list = doc.getElementsByTagName("bug");
ArrayList<String[]> bugFixArrayList = new ArrayList<String[]>();
if (list.getLength() != 0) {
for (int temp = 0; temp < list.getLength(); temp++) {
Node node = list.item(temp);
Element element = (Element) node;
int childNodeCounter = 0; //need an extra counter due to childnodes are counted...no idea, how
String[] aChangeLogEntry = new String[3];
aChangeLogEntry[0] = "";
aChangeLogEntry[1] = "State: ";
for (int i = 0; i < element.getChildNodes().getLength(); i++) {
if (element.getChildNodes().item(i).getNodeType() == Node.ELEMENT_NODE) {
System.out.println(element.getChildNodes().item(i).getTextContent() + " <<<<<<<<<<<<<<<<<< " + i + " / " + childNodeCounter);
// System.out.println(element.getChildNodes().item(i).getNodeName());
aChangeLogEntry[childNodeCounter] = aChangeLogEntry[childNodeCounter] + element.getChildNodes().item(i).getTextContent();
childNodeCounter++;
}
}
bugFixArrayList.add(aChangeLogEntry);
}
updateInfos.setBugList(bugFixArrayList);
}
} catch (Exception e) { } catch (Exception e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
e.printStackTrace();
} }
String[] testEntry = new String[7];
testEntry[0] = "0.99";
testEntry[1] = "2022-09";
testEntry[2] = "researched the Chatprotocol";
testEntry[3] = "addednothing";
testEntry[4] = "changedsome";
testEntry[5] = "fixedxed";
testEntry[6] = "removedYourMom";
String[] testEntry2 = new String[7];
testEntry2[0] = "0.29";
testEntry2[1] = "2033-09";
testEntry2[2] = "tested";
testEntry2[3] = "addednotashing";
testEntry2[4] = "changeasdsome";
testEntry2[5] = "fixedxeds";
testEntry2[6] = "removedYosssurMom";
// changeLogArrayList.add(testEntry);
// changeLogArrayList.add(testEntry2);
return updateInfos; return updateInfos;
} }

View File

@@ -226,7 +226,6 @@ public class Location {
String format = decimalFormat.format(loc1.getDistanceKm(loc2)); String format = decimalFormat.format(loc1.getDistanceKm(loc2));
// return df.format(number);
return Double.parseDouble(format); return Double.parseDouble(format);
} }
@@ -340,6 +339,21 @@ public class Location {
- Math.sin(loc1.getLatitude().getRadians()) - Math.sin(loc1.getLatitude().getRadians())
* Math.cos(loc2.getLatitude().getRadians()) * Math.cos(loc2.getLatitude().getRadians())
* Math.cos(dLon); * Math.cos(dLon);
return (Angle.radiansToDegrees(Math.atan2(y, x)) + 360) % 360;
double bearing = (Angle.radiansToDegrees(Math.atan2(y, x)) + 360) % 360;
// return bearing;
Locale locale = new Locale("en", "UK");
String pattern = "###.##";
DecimalFormat decimalFormat = (DecimalFormat)
NumberFormat.getNumberInstance(locale);
decimalFormat.applyPattern(pattern);
String format = decimalFormat.format(bearing);
return Double.parseDouble(format);
} }
} }

View File

@@ -22,10 +22,10 @@ public class ChatMember {
long activityCounter; // time of last activity in epochtimesec long activityCounter; // time of last activity in epochtimesec
Date lastActivity; // time of last activity in epochtimesec Date lastActivity; // time of last activity in epochtimesec
Date lastActualizationTimeOfThisMember; // time of last state change if that member Date lastActualizationTimeOfThisMember; // time of last state change if that member
int qrb; Double qrb;
int state; int state;
int QTFdirection; // antenna direction in deg Double QTFdirection; // antenna direction in deg
int[] workedCategories; // Chatcategory where the station is in the log, see kst4contest.model.ChatCategory int[] workedCategories; // Chatcategory where the station is in the log, see kst4contest.model.ChatCategory
boolean worked; // true if the callsign is logged already - for temporary worked processing boolean worked; // true if the callsign is logged already - for temporary worked processing
@@ -153,19 +153,19 @@ public class ChatMember {
this.lastActualizationTimeOfThisMember = lastActualizationTimeOfThisMember; this.lastActualizationTimeOfThisMember = lastActualizationTimeOfThisMember;
} }
public int getQrb() { public Double getQrb() {
return qrb; return qrb;
} }
public void setQrb(int qrb) { public void setQrb(Double qrb) {
this.qrb = qrb; this.qrb = qrb;
} }
public int getQTFdirection() { public Double getQTFdirection() {
return QTFdirection; return QTFdirection;
} }
public void setQTFdirection(int qTFdirection) { public void setQTFdirection(Double qTFdirection) {
QTFdirection = qTFdirection; QTFdirection = qTFdirection;
} }

View File

@@ -3,11 +3,31 @@ package kst4contest.model;
import java.util.ArrayList; import java.util.ArrayList;
public class UpdateInformation { public class UpdateInformation {
double latestVersionNumberOnServer; double latestVersionNumberOnServer = 100; //dummy value to prevent nullpointerexc
String adminMessage, majorChanges,latestVersionPathOnWebserver; String adminMessage ="";
ArrayList<String> needUpdateResourcesSinceLastVersion; String majorChanges ="";
ArrayList<String[]> featureRequest; String latestVersionPathOnWebserver="";
ArrayList<String[]> bugRequests; ArrayList<String> needUpdateResourcesSinceLastVersion = new ArrayList<String>();
ArrayList<String[]> featureRequest = new ArrayList<String[]>();
ArrayList<String[]> bugRequests = new ArrayList<String[]>();
ArrayList<String[]> changeLog = new ArrayList<String[]>();
ArrayList<String[]> bugList = new ArrayList<String[]>();
public ArrayList<String[]> getBugList() {
return bugList;
}
public void setBugList(ArrayList<String[]> bugList) {
this.bugList = bugList;
}
public ArrayList<String[]> getChangeLog() {
return changeLog;
}
public void setChangeLog(ArrayList<String[]> changeLog) {
this.changeLog = changeLog;
}
public double getLatestVersionNumberOnServer() { public double getLatestVersionNumberOnServer() {
return latestVersionNumberOnServer; return latestVersionNumberOnServer;

View File

@@ -4,14 +4,13 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.*; import java.util.*;
import java.util.function.Predicate;
import javafx.beans.value.ObservableStringValue;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.media.Media; import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaPlayer;
import kst4contest.ApplicationConstants; import kst4contest.ApplicationConstants;
import kst4contest.controller.ChatController; import kst4contest.controller.ChatController;
import kst4contest.controller.DBController;
import kst4contest.controller.Utils4KST; import kst4contest.controller.Utils4KST;
import javafx.application.Application; import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
@@ -69,6 +68,173 @@ public class Kst4ContestApplication extends Application {
Timer timer_buildWindowTitle; Timer timer_buildWindowTitle;
Timer timer_chatMemberTableSortTimer; // need that because javafx bug, it´s the only way to actualize the table... Timer timer_chatMemberTableSortTimer; // need that because javafx bug, it´s the only way to actualize the table...
Timer timer_updatePrivatemessageTable; // same here Timer timer_updatePrivatemessageTable; // same here
VBox selectedCallSignFurtherInfoPane = new VBox();
private BorderPane generateFurtherInfoAbtSelectedCallsignBP(ChatMember selectedCallSignInfoStageChatMember) {
selectedCallSignInfoBorderPane = new BorderPane();
SplitPane selectedCallSignSplitPane = new SplitPane();
selectedCallSignSplitPane.setOrientation(Orientation.VERTICAL);
TableView<ChatMessage> initFurtherInfoAbtCallsignMSGTable = initFurtherInfoAbtCallsignMSGTable();
// ChatMember dummy = new ChatMember();
// dummy.setCallSign("DM5M");
// dummy.setQra("JO51IJ");
// dummy.setQrb(0.0);
// dummy.setQTFdirection(0.0);
// dummy.setName("me");
// dummy.setState(0);
//
// selectedCallSignInfoStageChatMember = dummy;
Label selectedCallSignInfoLblQTFInfo = new Label("QTF:" + selectedCallSignInfoStageChatMember.getQTFdirection() + " deg");
// System.out.println("qtfinfolabel should show: " + selectedCallSignInfoStageChatMember.getQrb());
Label selectedCallSignInfoLblQRBInfo = new Label("QRB: " + selectedCallSignInfoStageChatMember.getQrb() + " km");
GridPane selectedCallSignDownerSiteGridPane = new GridPane();
selectedCallSignDownerSiteGridPane.setHgap(10);
selectedCallSignDownerSiteGridPane.setVgap(2);
selectedCallSignDownerSiteGridPane.add(selectedCallSignInfoLblQTFInfo, 0,0,1,1);
selectedCallSignDownerSiteGridPane.add(selectedCallSignInfoLblQRBInfo, 0,1,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("last activity dateTime"), 0,2,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("last activity duration"), 0,3,1,1);
selectedCallSignDownerSiteGridPane.add(new Button("show path in AS"), 1,0,1,3);
selectedCallSignDownerSiteGridPane.add(new Label("publicmsgCount"), 3,0,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("toMeMsgCount"), 3,1,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("fromMeMSGCount"), 3,2,1,1);
// HBox selectedCallSignDownerSiteHBox = new HBox();
// selectedCallSignDownerSiteHBox.getChildren().add(selectedCallSignInfoLblQRBInfo);
// selectedCallSignDownerSiteHBox.getChildren().add(selectedCallSignInfoLblQTFInfo);
selectedCallSignSplitPane.getItems().add(initFurtherInfoAbtCallsignMSGTable);
selectedCallSignSplitPane.getItems().add(selectedCallSignDownerSiteGridPane);
selectedCallSignInfoBorderPane.setCenter(selectedCallSignSplitPane);
HBox selectedCallSignInfoBottomControlsBox = new HBox();
selectedCallSignInfoBottomControlsBox.setSpacing(10);
// selectedCallSignInfoBottomControlsBox.getChildren().add(new CheckBox("Always on top"));
ToggleGroup selectedCallSignInfoFilterMessagesRadioGrp = new ToggleGroup();
RadioButton selectedCallSignFilterToMeMsgRB = new RadioButton("pm to me ");
selectedCallSignFilterToMeMsgRB.setToggleGroup(selectedCallSignInfoFilterMessagesRadioGrp);
RadioButton selectedCallSignFilterMsgToOtherRB = new RadioButton("pm to other");
selectedCallSignFilterMsgToOtherRB.setToggleGroup(selectedCallSignInfoFilterMessagesRadioGrp);
RadioButton selectedCallSignFilterMsgpublic = new RadioButton("public msgs");
selectedCallSignFilterMsgpublic.setToggleGroup(selectedCallSignInfoFilterMessagesRadioGrp);
RadioButton selectedCallSignNoFilterRB = new RadioButton("nothing");
selectedCallSignNoFilterRB.setToggleGroup(selectedCallSignInfoFilterMessagesRadioGrp);
selectedCallSignNoFilterRB.setSelected(true); //TODO: that behavior as default selection could be made preferencable
selectedCallSignInfoFilterMessagesRadioGrp.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
@Override
public void changed(ObservableValue<? extends Toggle> observableValue, Toggle toggle, Toggle t1) {
RadioButton radioButton = (RadioButton) selectedCallSignInfoFilterMessagesRadioGrp.getSelectedToggle();
if (radioButton.equals(selectedCallSignFilterToMeMsgRB)) {
chatcontroller.getLst_selectedCallSignInfofilteredMessageList().setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
if (((chatMessage.getReceiver().getCallSign().equals(chatcontroller.getChatPreferences().getLoginCallSign())) || (chatMessage.getSender().getCallSign().equals(chatcontroller.getChatPreferences().getLoginCallSign()))
) && ((chatMessage.getReceiver().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) || (chatMessage.getSender().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())))) {
return true;
}
else return false;
}
});
System.out.println(t1 + " filter to me was selected <<<<<<<<<<<<<<<<<<<");
} else if (radioButton.equals(selectedCallSignFilterMsgToOtherRB)) {
chatcontroller.getLst_selectedCallSignInfofilteredMessageList().setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
if ((chatMessage.getSender().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) && (!chatMessage.getReceiver().getCallSign().equals("ALL")) && (!chatMessage.getReceiver().getCallSign().equals(chatcontroller.getChatPreferences().getLoginCallSign()))) {
return true;
} else if ((chatMessage.getReceiver().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) && (!chatMessage.getReceiver().getCallSign().equals("ALL")) && (!chatMessage.getReceiver().getCallSign().equals(chatcontroller.getChatPreferences().getLoginCallSign()))) {
return true;
}
else return false;
}
});
System.out.println(t1 + " filter to other was selected <<<<<<<<<<<<<<<<<<<");
} else if (radioButton.equals(selectedCallSignFilterMsgpublic)) {
chatcontroller.getLst_selectedCallSignInfofilteredMessageList().setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
if ((chatMessage.getSender().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) && (chatMessage.getReceiver().getCallSign().equals("ALL"))) {
return true;
}
else return false;
}
});
System.out.println(t1 + " filter to public was selected <<<<<<<<<<<<<<<<<<<");
} else {
System.out.println(t1 + " no filter was selected <<<<<<<<<<<<<<<<<<<");
chatcontroller.getLst_selectedCallSignInfofilteredMessageList().setPredicate(new Predicate<ChatMessage>() {
@Override
public boolean test(ChatMessage chatMessage) {
if ((chatMessage.getSender().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) ||
chatMessage.getReceiver().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) {
return true;
}
else return false;
}
});
}
}
});
selectedCallSignInfoBottomControlsBox.getChildren().add(new Label("Messages of " + selectedCallSignInfoStageChatMember.getCallSign() + " -> Filter: "));
selectedCallSignInfoBottomControlsBox.getChildren().add(selectedCallSignNoFilterRB);
selectedCallSignInfoBottomControlsBox.getChildren().add(selectedCallSignFilterToMeMsgRB);
selectedCallSignInfoBottomControlsBox.getChildren().add(selectedCallSignFilterMsgToOtherRB);
selectedCallSignInfoBottomControlsBox.getChildren().add(selectedCallSignFilterMsgpublic);
// selectedCallSignInfoBottomControlsBox.getChildren().add(new CheckBox("Filter messages to me"));
// selectedCallSignInfoBottomControlsBox.getChildren().add(new CheckBox("Filter messages to Other"));
selectedCallSignInfoBorderPane.setTop(selectedCallSignInfoBottomControlsBox);
chatcontroller.getLst_selectedCallSignInfofilteredMessageList().setPredicate(new Predicate<ChatMessage>() {
/**
* This is the filter "nothing" option. It will get all communication of a callsign to all directions
*
* @param chatMessage the input argument
* @return
*/
@Override
public boolean test(ChatMessage chatMessage) {
if ((chatMessage.getSender().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) ||
chatMessage.getReceiver().getCallSign().equals(selectedCallSignInfoStageChatMember.getCallSign())) {
return true;
}
else return false;
}
});
return selectedCallSignInfoBorderPane;
}
private TableView<ChatMember> initChatMemberTable() { private TableView<ChatMember> initChatMemberTable() {
@@ -451,7 +617,7 @@ public class Kst4ContestApplication extends Application {
* created out of exact one array-entry). These are initialized by the * created out of exact one array-entry). These are initialized by the
* chatpreferences object out of the config-xml * chatpreferences object out of the config-xml
* *
* @param menuTexts *
* @return * @return
*/ */
// private ContextMenu initChatMemberTableContextMenu(String[] menuTexts) { old mechanic // private ContextMenu initChatMemberTableContextMenu(String[] menuTexts) { old mechanic
@@ -496,6 +662,75 @@ public class Kst4ContestApplication extends Application {
// //
// } // }
private Stage initializeFurtherInfoOnSelectedChatMemberStage(ChatMember selectedChatMember) {
try {
// stage_selectedCallSignInfoStage = new Stage();
// stage_selectedCallSignInfoStage.close();
stage_selectedCallSignInfoStage.setTitle("Further info on "+ selectedChatMember.getCallSign());
Label selectedCallSignInfoLblQTFInfo = new Label("QTF: " + selectedChatMember.getQTFdirection() + " deg");
Label selectedCallSignInfoLblQRBInfo = new Label("QRB: " + selectedChatMember.getQrb() + " km");
AnchorPane selectedCallSignInfoPane = new AnchorPane();
BorderPane selectedCallSignInfoBorderPane = new BorderPane();
selectedCallSignInfoPane.getChildren().add(selectedCallSignInfoBorderPane);
SplitPane selectedCallSignSplitPane = new SplitPane();
selectedCallSignSplitPane.setOrientation(Orientation.VERTICAL);
TableView<ChatMessage> initFurtherInfoAbtCallsignMSGTable = initFurtherInfoAbtCallsignMSGTable();
GridPane selectedCallSignDownerSiteGridPane = new GridPane();
selectedCallSignDownerSiteGridPane.setHgap(10);
selectedCallSignDownerSiteGridPane.setVgap(2);
selectedCallSignDownerSiteGridPane.add(selectedCallSignInfoLblQTFInfo, 0,0,1,1);
selectedCallSignDownerSiteGridPane.add(selectedCallSignInfoLblQRBInfo, 0,1,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("last activity dateTime"), 0,2,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("last activity duration"), 0,3,1,1);
selectedCallSignDownerSiteGridPane.add(new Button("show path in AS"), 1,0,1,3);
selectedCallSignDownerSiteGridPane.add(new Label("publicmsgCount"), 3,0,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("toMeMsgCount"), 3,1,1,1);
selectedCallSignDownerSiteGridPane.add(new Label("fromMeMSGCount"), 3,2,1,1);
// HBox selectedCallSignDownerSiteHBox = new HBox();
// selectedCallSignDownerSiteHBox.getChildren().add(selectedCallSignInfoLblQRBInfo);
// selectedCallSignDownerSiteHBox.getChildren().add(selectedCallSignInfoLblQTFInfo);
selectedCallSignSplitPane.getItems().add(initFurtherInfoAbtCallsignMSGTable);
selectedCallSignSplitPane.getItems().add(selectedCallSignDownerSiteGridPane);
selectedCallSignInfoBorderPane.setCenter(selectedCallSignSplitPane);
HBox selectedCallSignInfoBottomControlsBox = new HBox();
selectedCallSignInfoBottomControlsBox.getChildren().add(new CheckBox("Always on top"));
selectedCallSignInfoBottomControlsBox.getChildren().add(new CheckBox("Filter messages to me"));
selectedCallSignInfoBottomControlsBox.getChildren().add(new CheckBox("Filter messages to Other"));
selectedCallSignInfoBorderPane.setBottom(selectedCallSignInfoBottomControlsBox);
stage_selectedCallSignInfoStage.setScene(new Scene(selectedCallSignInfoPane, 500, 400));
stage_selectedCallSignInfoStage.setAlwaysOnTop(false);
if (!stage_selectedCallSignInfoStage.isShowing()) {
stage_selectedCallSignInfoStage.show();
}
stage_selectedCallSignInfoStage.show();
return stage_selectedCallSignInfoStage;
}
catch (Exception e) {
e.printStackTrace();
System.out.println("There occured an error due to the selected callsign had been deleted!");
return stage_selectedCallSignInfoStage;
}
}
/** /**
* Initializes the right click contextmenu for the chatmember-table, sets the * Initializes the right click contextmenu for the chatmember-table, sets the
* clickhandler for the contextmenu out of a string array (each menuitam will be * clickhandler for the contextmenu out of a string array (each menuitam will be
@@ -549,6 +784,185 @@ public class Kst4ContestApplication extends Application {
} }
private TableView<ChatMessage> initFurtherInfoAbtCallsignMSGTable() {
TableView<ChatMessage> tbl_furtherInfoAbtCallsignMSGTable = new TableView<ChatMessage>();
tbl_furtherInfoAbtCallsignMSGTable.setTooltip(new Tooltip("Messages of selected station are shown here"));
TableColumn<ChatMessage, String> timeCol = new TableColumn<ChatMessage, String>("Time");
timeCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
SimpleStringProperty time = new SimpleStringProperty();
time.setValue(new Utils4KST()
.time_convertEpochToReadable(cellDataFeatures.getValue().getMessageGeneratedTime()));
return time;
}
});
TableColumn<ChatMessage, String> callSignTRCVCol = new TableColumn<ChatMessage, String>("Call TX");
callSignTRCVCol
.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
SimpleStringProperty callSign = new SimpleStringProperty();
if (cellDataFeatures.getValue().getSender() != null) {
callSign.setValue(cellDataFeatures.getValue().getSender().getCallSign());
} else {
callSign.setValue("");// TODO: Prevents a bug of not setting all values as a default
}
return callSign;
}
});
TableColumn<ChatMessage, String> callSignRCVRCol = new TableColumn<ChatMessage, String>("Call RX");
callSignRCVRCol
.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
SimpleStringProperty callTX = new SimpleStringProperty();
if (cellDataFeatures.getValue().getReceiver().getCallSign() != null) {
callTX.setValue(cellDataFeatures.getValue().getReceiver().getCallSign());
} else {
callTX.setValue("");// TODO: Prevents a bug of not setting all values as a default
}
return callTX;
}
});
// TableColumn<ChatMessage, String> nameCol = new TableColumn<ChatMessage, String>("Name");
// nameCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
//
// @Override
// public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
// SimpleStringProperty name = new SimpleStringProperty();
//
// if (cellDataFeatures.getValue().getSender() != null) {
//
// name.setValue(cellDataFeatures.getValue().getSender().getName());
// } else {
//
// name.setValue("");// TODO: Prevents a bug of not setting all values as a default
// }
// return name;
// }
// });
TableColumn<ChatMessage, String> qrgTXerCol = new TableColumn<ChatMessage, String>("Last QRG TX");
qrgTXerCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
StringProperty qrg = new SimpleStringProperty();
if (cellDataFeatures.getValue().getSender() != null) {
// qrg.setValue(cellDataFeatures.getValue().getSender().getFrequency());
qrg = cellDataFeatures.getValue().getSender().getFrequency();
} else {
qrg.setValue("");// TODO: Prevents a bug of not setting all values as a default
}
return qrg;
}
});
TableColumn<ChatMessage, String> qrgRXerCol = new TableColumn<ChatMessage, String>("Last QRG RX");
qrgRXerCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
StringProperty qrg = new SimpleStringProperty();
if (cellDataFeatures.getValue().getReceiver() != null) {
// qrg.setValue(cellDataFeatures.getValue().getReceiver().getFrequency());
qrg = cellDataFeatures.getValue().getReceiver().getFrequency();
} else {
qrg.setValue("");// TODO: Prevents a bug of not setting all values as a default
}
return qrg;
}
});
TableColumn<ChatMessage, String> msgCol = new TableColumn<ChatMessage, String>("Message");
msgCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
SimpleStringProperty msg = new SimpleStringProperty();
if (cellDataFeatures.getValue().getMessageText() != null) {
msg.setValue(cellDataFeatures.getValue().getMessageText());
} else {
msg.setValue("");// TODO: Prevents a bug of not setting all values as a default
}
return msg;
}
});
msgCol.prefWidthProperty().bind(tbl_furtherInfoAbtCallsignMSGTable.widthProperty().divide(2));
TableColumn<ChatMessage, String> workedRXCol = new TableColumn<ChatMessage, String>("wkd RX?");
workedRXCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
SimpleStringProperty wkd = new SimpleStringProperty();
if (cellDataFeatures.getValue().getReceiver().isWorked()) {
wkd.setValue("X");
} else {
wkd.setValue("");
}
return wkd;
}
});
TableColumn<ChatMessage, String> workedTXCol = new TableColumn<ChatMessage, String>("wkd TX?");
workedRXCol.setCellValueFactory(new Callback<CellDataFeatures<ChatMessage, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChatMessage, String> cellDataFeatures) {
SimpleStringProperty wkd = new SimpleStringProperty();
if (cellDataFeatures.getValue().getSender().isWorked()) {
wkd.setValue("X");
} else {
wkd.setValue("");
}
return wkd;
}
});
tbl_furtherInfoAbtCallsignMSGTable.getColumns().addAll(timeCol, callSignTRCVCol, callSignRCVRCol,
msgCol);
ObservableList<ChatMessage> toOtherMSGList = chatcontroller.getLst_toOtherMessageList();
tbl_furtherInfoAbtCallsignMSGTable.setItems(chatcontroller.getLst_selectedCallSignInfofilteredMessageList());
return tbl_furtherInfoAbtCallsignMSGTable;
}
/** /**
* initializes the tableview in which the cq- and beacon-texts are shown * initializes the tableview in which the cq- and beacon-texts are shown
* *
@@ -1811,6 +2225,10 @@ public class Kst4ContestApplication extends Application {
FlowPane flwPane_textSnippets; FlowPane flwPane_textSnippets;
Stage clusterAndQSOMonStage; Stage clusterAndQSOMonStage;
Stage stage_selectedCallSignInfoStage;
ChatMember selectedCallSignInfoStageChatMember = new ChatMember();
BorderPane selectedCallSignInfoBorderPane;
Stage stage_updateStage; Stage stage_updateStage;
@@ -2602,6 +3020,31 @@ public class Kst4ContestApplication extends Application {
// do nothing, that was a deselection-event! // do nothing, that was a deselection-event!
} else { } else {
// selectedCallSignInfoStageChatMember = selectedChatMember.getList().get(0); //initialize Chatmember for showing detals at another stage
// try {
//// stage_selectedCallSignInfoStage.close();
// } catch (NullPointerException ne) {
// //no stage was opened
// System.out.println("Kst4ContestApplication, Info: no infowindow was open: " + ne.getMessage());
// }
// stage_selectedCallSignInfoStage = initializeFurtherInfoOnSelectedChatMemberStage(selectedChatMember.getList().get(0));
selectedCallSignInfoStageChatMember = selectedChatMember.getList().get(0);
selectedCallSignFurtherInfoPane.getChildren().clear();
selectedCallSignFurtherInfoPane.getChildren().add(generateFurtherInfoAbtSelectedCallsignBP(selectedCallSignInfoStageChatMember));
// selectedCallSignInfoBorderPane.
// selectedCallSignInfoBorderPane.setVisible(false);
// selectedCallSignInfoBorderPane.setVisible(true);
// stage_selectedCallSignInfoStage.setTitle("Further info on " + selectedCallSignInfoStageChatMember.getCallSign());
// stage_selectedCallSignInfoStage.show();
txt_chatMessageUserInput.clear(); txt_chatMessageUserInput.clear();
txt_chatMessageUserInput txt_chatMessageUserInput
.setText("/cq " + selectedChatMember.getList().get(0).getCallSign() + " "); .setText("/cq " + selectedChatMember.getList().get(0).getCallSign() + " ");
@@ -2636,7 +3079,34 @@ public class Kst4ContestApplication extends Application {
} }
}); });
mainWindowLeftSplitPane.getItems().addAll(messageSectionSplitpane, tbl_chatMember); SplitPane mainWindowRightSplitPane = new SplitPane();
mainWindowRightSplitPane.setOrientation(Orientation.VERTICAL);
mainWindowRightSplitPane.getItems().add(tbl_chatMember);
mainWindowLeftSplitPane.getItems().addAll(messageSectionSplitpane, mainWindowRightSplitPane);
/**
* initializing the furter infos of a callsign part of the right splitpane
*/
// selectedCallSignFurtherInfoPane.getChildren().add(generateFurtherInfoAbtSelectedCallsignBP(selectedCallSignInfoStageChatMember));
// selectedCallSignInfoPane.getChildren().add(selectedCallSignInfoBorderPane);
/**
* end of initializing the furter infos of a callsign part of the right splitpane
*/
mainWindowRightSplitPane.getItems().add(selectedCallSignFurtherInfoPane);
primaryStage.setScene(scene); primaryStage.setScene(scene);
@@ -2646,6 +3116,23 @@ public class Kst4ContestApplication extends Application {
e.printStackTrace(); e.printStackTrace();
} }
/**
* Window selected callsign information
* Works with a ChatMember variable, initialized by a selected-listener of the Chatmemberlist
*/
stage_selectedCallSignInfoStage = new Stage();
// stage_selectedCallSignInfoStage.hide();
//
// stage_selectedCallSignInfoStage.setScene(new Scene(new Label("Further info on selected Callsign"), 500, 400));
// stage_selectedCallSignInfoStage.setAlwaysOnTop(true);
// stage_selectedCallSignInfoStage.show();
/**
* end Window selected callsign information
*/
/** /**
* Window Cluster & qso of the other * Window Cluster & qso of the other
*/ */
@@ -2664,6 +3151,7 @@ public class Kst4ContestApplication extends Application {
* end Window Cluster & qso of the other * end Window Cluster & qso of the other
*/ */
/** /**
* Window updates * Window updates
*/ */
@@ -2675,6 +3163,9 @@ public class Kst4ContestApplication extends Application {
// pnl_directedMSGWin.getItems().addAll(initDXClusterTable(), initChatToOtherMSGTable()); // pnl_directedMSGWin.getItems().addAll(initDXClusterTable(), initChatToOtherMSGTable());
try {
stage_updateStage.setAlwaysOnTop(true); stage_updateStage.setAlwaysOnTop(true);
Label lblUpdateInfo = new Label("Update aviable!"); Label lblUpdateInfo = new Label("Update aviable!");
@@ -2727,19 +3218,42 @@ public class Kst4ContestApplication extends Application {
vbxUpdateWindow.getChildren().add(treeView); vbxUpdateWindow.getChildren().add(treeView);
TreeItem rootItem = new TreeItem(ApplicationConstants.APPLICATION_NAME); TreeItem rootItem = new TreeItem(ApplicationConstants.APPLICATION_NAME);
TreeItem latestVersionNumber = new TreeItem<>(chatcontroller.getUpdateInformation().getLatestVersionNumberOnServer()); TreeItem changeLog = new TreeItem<>("ChangeLog");
TreeItem adminMessage = new TreeItem<>(chatcontroller.getUpdateInformation().getAdminMessage());
TreeItem majorChanges = new TreeItem<>(chatcontroller.getUpdateInformation().getMajorChanges()); ArrayList<String[]> changeLogArrayWith7Fiels = chatcontroller.getUpdateInformation().getChangeLog();
TreeItem latestVersionPathOnWebserver = new TreeItem<>(chatcontroller.getUpdateInformation().getLatestVersionPathOnWebserver());
for (String[] aSubversionArray : changeLogArrayWith7Fiels) {
TreeItem aSubversionEntry = new TreeItem(aSubversionArray[0]);
for (int i = 1; i < aSubversionArray.length; i++) {
aSubversionEntry.getChildren().add(new TreeItem<>(aSubversionArray[i]));
}
changeLog.getChildren().add(aSubversionEntry);
}
rootItem.getChildren().add(changeLog);
TreeItem knownBugs = new TreeItem<>("Known bugs");
ArrayList<String[]> BugArrayWith2Fiels = chatcontroller.getUpdateInformation().getBugList();
for (String[] aBugArray : BugArrayWith2Fiels) {
TreeItem aBugEntry = new TreeItem(aBugArray[0]);
for (int i = 1; i < aBugArray.length; i++) {
aBugEntry.getChildren().add(new TreeItem<>(aBugArray[i]));
}
knownBugs.getChildren().add(aBugEntry);
}
rootItem.getChildren().add(knownBugs);
rootItem.getChildren().add(latestVersionNumber);
rootItem.getChildren().add(adminMessage);
rootItem.getChildren().add(majorChanges);
rootItem.getChildren().add(latestVersionPathOnWebserver);
treeView.setRoot(rootItem); treeView.setRoot(rootItem);
treeView.setShowRoot(false);
stage_updateStage.setScene(new Scene(vbxUpdateWindow, 640, 480)); stage_updateStage.setScene(new Scene(vbxUpdateWindow, 640, 480));
@@ -2748,7 +3262,10 @@ public class Kst4ContestApplication extends Application {
} else { } else {
//nothing to do //nothing to do
} }
} catch (Exception excOnUpdateFileProcessing) {
System.out.println("[KST4ContestApp, ERROR]: Problem on Updateservice! " + excOnUpdateFileProcessing.getMessage());
excOnUpdateFileProcessing.printStackTrace();
}
/** /**
* end Window Update * end Window Update
*/ */

View File

@@ -17,7 +17,10 @@ public class TestLocatorUtils {
// System.out.println(Location.getBearing(location, location2)); // System.out.println(Location.getBearing(location, location2));
System.out.println(new Location().getDistanceKmByTwoLocatorStrings("JN49FL", "Jo51ij") + ""); System.out.println((new Location().getDistanceKmByTwoLocatorStrings("JN49FL", "kn02fx") + ""));
// System.out.println((new Location().getBearing());
// int test = 888.08;
// System.out.println(test);
// String test = new Location().getDistanceKmByTwoLocatorStrings("JN49FL", "Jo51ij") + ""; // String test = new Location().getDistanceKmByTwoLocatorStrings("JN49FL", "Jo51ij") + "";
// //