diff --git a/src/main/java/kst4contest/ApplicationConstants.java b/src/main/java/kst4contest/ApplicationConstants.java index 89a18a4..e8a8749 100644 --- a/src/main/java/kst4contest/ApplicationConstants.java +++ b/src/main/java/kst4contest/ApplicationConstants.java @@ -9,7 +9,7 @@ public class ApplicationConstants { /** * Name of file to store preferences in. */ - public static final double APPLICATION_CURRENTVERSIONNUMBER = 1.0; + public static final double APPLICATION_CURRENTVERSIONNUMBER = 1.17; public static final String VERSIONINFOURLFORUPDATES_KST4CONTEST = "https://do5amf.funkerportal.de/kst4ContestVersionInfo.xml"; public static final String VERSIONINFDOWNLOADEDLOCALFILE = "kst4ContestVersionInfo.xml"; diff --git a/src/main/java/kst4contest/controller/UpdateChecker.java b/src/main/java/kst4contest/controller/UpdateChecker.java index 570973c..8f6778e 100644 --- a/src/main/java/kst4contest/controller/UpdateChecker.java +++ b/src/main/java/kst4contest/controller/UpdateChecker.java @@ -37,13 +37,13 @@ public class UpdateChecker { System.out.println("[Updatechecker: checking for updates...]"); - double currentVersionNumber = ApplicationConstants.APPLICATION_CURRENTVERSIONNUMBER; +// double currentVersionNumber = ApplicationConstants.APPLICATION_CURRENTVERSIONNUMBER; } String versionInfoDownloadedFromServerFileName = ApplicationFileUtils.getFilePath(ApplicationConstants.APPLICATION_NAME, ApplicationConstants.VERSIONINFDOWNLOADEDLOCALFILE); String versionInfoXMLURLAtServer = ApplicationConstants.VERSIONINFOURLFORUPDATES_KST4CONTEST; - double currentVersion = ApplicationConstants.APPLICATION_CURRENTVERSIONNUMBER; +// double currentVersion = ApplicationConstants.APPLICATION_CURRENTVERSIONNUMBER; //DOWNLOAD from URL, then parse, then do anything with it... /** @@ -230,7 +230,7 @@ public class UpdateChecker { public String toString() { String toString = ""; - toString += this.currentVersion; +// toString += this.currentVersion; return toString; } diff --git a/src/main/java/kst4contest/model/ChatPreferences.java b/src/main/java/kst4contest/model/ChatPreferences.java index 5a816bc..c50a400 100644 --- a/src/main/java/kst4contest/model/ChatPreferences.java +++ b/src/main/java/kst4contest/model/ChatPreferences.java @@ -214,15 +214,95 @@ public class ChatPreferences { String unwkd_unworkedStnRequesterBeaconsText; String unwkd_beaconUnworkedstationsPrefix; -// public String getMYQRG() { -// return MYQRG; -// } -// -// public void setMYQRG(String mYQRG) { -// -// MYQRG = mYQRG; -// } + /********************************************************************************* + * + * GUI SETTING VARIABLES WILL BE BUFFERED HERE, DEFAULTS TOO + * + *********************************************************************************/ + private double[] GUIscn_ChatwindowMainSceneSizeHW = new double[] {768, 1234}; + private double[] GUIclusterAndQSOMonStage_SceneSizeHW = new double[] {700, 500}; + private double[] GUIstage_updateStage_SceneSizeHW = new double[] {640, 480}; + private double[] GUIsettingsStageSceneSizeHW = new double[] {720, 768}; + + private double[] GUIselectedCallSignSplitPane_dividerposition = {0.55}; + private double[] GUImainWindowLeftSplitPane_dividerposition = {0.51}; + private double[] GUImessageSectionSplitpane_dividerposition = {0.62, 0.7, 0.75}; //3 deviders now //TODO: more should be possible? + private double[] GUImainWindowRightSplitPane_dividerposition = {0.72}; + private double[] GUIpnl_directedMSGWin_dividerpositionDefault = {0.8}; + + + public double[] getGUIscn_ChatwindowMainSceneSizeHW() { + return GUIscn_ChatwindowMainSceneSizeHW; + } + + public void setGUIscn_ChatwindowMainSceneSizeHW(double[] GUIscn_ChatwindowMainSceneSizeHW) { + this.GUIscn_ChatwindowMainSceneSizeHW = GUIscn_ChatwindowMainSceneSizeHW; + } + + public double[] getGUIclusterAndQSOMonStage_SceneSizeHW() { + return GUIclusterAndQSOMonStage_SceneSizeHW; + } + + public void setGUIclusterAndQSOMonStage_SceneSizeHW(double[] GUIclusterAndQSOMonStage_SceneSizeHW) { + this.GUIclusterAndQSOMonStage_SceneSizeHW = GUIclusterAndQSOMonStage_SceneSizeHW; + } + + public double[] getGUIstage_updateStage_SceneSizeHW() { + return GUIstage_updateStage_SceneSizeHW; + } + + public void setGUIstage_updateStage_SceneSizeHW(double[] GUIstage_updateStage_SceneSizeHW) { + this.GUIstage_updateStage_SceneSizeHW = GUIstage_updateStage_SceneSizeHW; + } + + public double[] getGUIsettingsStageSceneSizeHW() { + return GUIsettingsStageSceneSizeHW; + } + + public void setGUIsettingsStageSceneSizeHW(double[] GUIsettingsStageSceneSizeHW) { + this.GUIsettingsStageSceneSizeHW = GUIsettingsStageSceneSizeHW; + } + + public double[] getGUIselectedCallSignSplitPane_dividerposition() { + return GUIselectedCallSignSplitPane_dividerposition; + } + + public void setGUIselectedCallSignSplitPane_dividerposition(double[] GUIselectedCallSignSplitPane_dividerposition) { + this.GUIselectedCallSignSplitPane_dividerposition = GUIselectedCallSignSplitPane_dividerposition; + } + + public double[] getGUImainWindowLeftSplitPane_dividerposition() { + return GUImainWindowLeftSplitPane_dividerposition; + } + + public void setGUImainWindowLeftSplitPane_dividerposition(double[] GUImainWindowLeftSplitPane_dividerposition) { + this.GUImainWindowLeftSplitPane_dividerposition = GUImainWindowLeftSplitPane_dividerposition; + } + + public double[] getGUImessageSectionSplitpane_dividerposition() { + return GUImessageSectionSplitpane_dividerposition; + } + + public void setGUImessageSectionSplitpane_dividerposition(double[] GUImessageSectionSplitpane_dividerposition) { + this.GUImessageSectionSplitpane_dividerposition = GUImessageSectionSplitpane_dividerposition; + } + + public double[] getGUImainWindowRightSplitPane_dividerposition() { + return GUImainWindowRightSplitPane_dividerposition; + } + + public void setGUImainWindowRightSplitPane_dividerposition(double[] GUImainWindowRightSplitPane_dividerposition) { + this.GUImainWindowRightSplitPane_dividerposition = GUImainWindowRightSplitPane_dividerposition; + } + + public double[] getGUIpnl_directedMSGWin_dividerpositionDefault() { + return GUIpnl_directedMSGWin_dividerpositionDefault; + } + + public void setGUIpnl_directedMSGWin_dividerpositionDefault(double[] GUIpnl_directedMSGWin_dividerpositionDefault) { + this.GUIpnl_directedMSGWin_dividerpositionDefault = GUIpnl_directedMSGWin_dividerpositionDefault; + } public double getStn_antennaBeamWidthDeg() { return stn_antennaBeamWidthDeg; @@ -802,8 +882,7 @@ public class ChatPreferences { Element beaconUnworkedstations = doc.createElement("beaconUnworkedstations"); rootElement.appendChild(beaconUnworkedstations); - - + Element beaconUnworkedstationsText = doc.createElement("beaconUnworkedstationsText"); beaconUnworkedstationsText.setTextContent(this.getUnwkd_unworkedStnRequesterBeaconsText()); beaconUnworkedstations.appendChild(beaconUnworkedstationsText); @@ -819,10 +898,62 @@ public class ChatPreferences { Element beaconUnworkedstationsPrefix = doc.createElement("beaconUnworkedstationsPrefix"); beaconUnworkedstationsPrefix.setTextContent(this.getUnwkd_beaconUnworkedstationsPrefix()); beaconUnworkedstations.appendChild(beaconUnworkedstationsPrefix); - - - writeXml(doc, System.out); + /**************************** + * GUI BEHAVIOUR + ***************************/ + + /** + * window sizes + */ + Element guiOptions = doc.createElement("guiOptions"); + rootElement.appendChild(guiOptions); + + Element GUIscn_ChatwindowMainSceneSizeHW = doc.createElement("GUIscn_ChatwindowMainSceneSizeHW"); + GUIscn_ChatwindowMainSceneSizeHW.setTextContent(this.getGUIscn_ChatwindowMainSceneSizeHW()[0]+";"+this.getGUIscn_ChatwindowMainSceneSizeHW()[1]); + guiOptions.appendChild(GUIscn_ChatwindowMainSceneSizeHW); + + Element GUIclusterAndQSOMonStage_SceneSizeHW = doc.createElement("GUIclusterAndQSOMonStage_SceneSizeHW"); + GUIclusterAndQSOMonStage_SceneSizeHW.setTextContent(this.getGUIclusterAndQSOMonStage_SceneSizeHW()[0]+";"+this.getGUIclusterAndQSOMonStage_SceneSizeHW()[1]); + guiOptions.appendChild(GUIclusterAndQSOMonStage_SceneSizeHW); + + Element GUIstage_updateStage_SceneSizeHW = doc.createElement("GUIstage_updateStage_SceneSizeHW"); + GUIstage_updateStage_SceneSizeHW.setTextContent(this.getGUIstage_updateStage_SceneSizeHW()[0]+";"+this.getGUIstage_updateStage_SceneSizeHW()[1]); + guiOptions.appendChild(GUIstage_updateStage_SceneSizeHW); + + Element GUIsettingsStageSceneSizeHW = doc.createElement("GUIsettingsStageSceneSizeHW"); + GUIsettingsStageSceneSizeHW.setTextContent(this.getGUIsettingsStageSceneSizeHW()[0]+";"+this.getGUIsettingsStageSceneSizeHW()[1]); + guiOptions.appendChild(GUIsettingsStageSceneSizeHW); + + /************************************ + * save splitpanel divider positions + ************************************/ + + Element GUIselectedCallSignSplitPane_dividerposition = doc.createElement("GUIselectedCallSignSplitPane_dividerposition"); + GUIselectedCallSignSplitPane_dividerposition.setTextContent(doubleArrayToCSVString(getGUIselectedCallSignSplitPane_dividerposition())); + guiOptions.appendChild(GUIselectedCallSignSplitPane_dividerposition); + + Element GUImainWindowLeftSplitPane_dividerposition = doc.createElement("GUImainWindowLeftSplitPane_dividerposition"); + GUImainWindowLeftSplitPane_dividerposition.setTextContent(doubleArrayToCSVString(getGUImainWindowLeftSplitPane_dividerposition())); + guiOptions.appendChild(GUImainWindowLeftSplitPane_dividerposition); + + Element GUImessageSectionSplitpane_dividerposition = doc.createElement("GUImessageSectionSplitpane_dividerposition"); + GUImessageSectionSplitpane_dividerposition.setTextContent(doubleArrayToCSVString(getGUImessageSectionSplitpane_dividerposition())); + guiOptions.appendChild(GUImessageSectionSplitpane_dividerposition); + + Element GUImainWindowRightSplitPane_dividerposition = doc.createElement("GUImainWindowRightSplitPane_dividerposition"); + GUImainWindowRightSplitPane_dividerposition.setTextContent(doubleArrayToCSVString(getGUImainWindowRightSplitPane_dividerposition())); + guiOptions.appendChild(GUImainWindowRightSplitPane_dividerposition); + + Element GUIpnl_directedMSGWin_dividerpositionDefault = doc.createElement("GUIpnl_directedMSGWin_dividerpositionDefault"); + GUIpnl_directedMSGWin_dividerpositionDefault.setTextContent(doubleArrayToCSVString(getGUIpnl_directedMSGWin_dividerpositionDefault())); + guiOptions.appendChild(GUIpnl_directedMSGWin_dividerpositionDefault); + + /**************************************************************************************** + ****************************** now write this XML! ************************************* + ****************************************************************************************/ + + writeXml(doc, System.out); // write dom document to a file try (FileOutputStream output = @@ -887,6 +1018,7 @@ public class ChatPreferences { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(xmlConfigFile); + /** * case station settings * @@ -1417,6 +1549,105 @@ public class ChatPreferences { + unwkd_unworkedStnRequesterBeaconsText); } + + /*********************************************** + * + * case read GUI options + * + ***********************************************/ + list = doc.getElementsByTagName("guiOptions"); + if (list.getLength() != 0) { + + for (int temp = 0; temp < list.getLength(); temp++) { + + Node node = list.item(temp); + + if (node.getNodeType() == Node.ELEMENT_NODE) { + + Element element = (Element) node; + + try{ + + String GUIscn_ChatwindowMainSceneSizeHW = element.getElementsByTagName("GUIscn_ChatwindowMainSceneSizeHW").item(0) + .getTextContent(); + + for (int i = 0; i < (GUIscn_ChatwindowMainSceneSizeHW.split(";").length); i++) { + this.getGUIscn_ChatwindowMainSceneSizeHW()[i] = + Double.parseDouble(GUIscn_ChatwindowMainSceneSizeHW.split(";")[i]); + } + + System.out.println( + "[ChatPreferences, info]: Set the GUIscn_ChatwindowMainSceneSizeHW size to " + GUIclusterAndQSOMonStage_SceneSizeHW); + + + String GUIclusterAndQSOMonStage_SceneSizeHW = element.getElementsByTagName("GUIclusterAndQSOMonStage_SceneSizeHW").item(0) + .getTextContent(); + + for (int i = 0; i < (GUIclusterAndQSOMonStage_SceneSizeHW.split(";").length); i++) { + this.getGUIclusterAndQSOMonStage_SceneSizeHW()[i] = + Double.parseDouble(GUIclusterAndQSOMonStage_SceneSizeHW.split(";")[i]); + } + + String GUIselectedCallSignSplitPane_dividerposition = element.getElementsByTagName("GUIselectedCallSignSplitPane_dividerposition").item(0) + .getTextContent(); + this.setGUIselectedCallSignSplitPane_dividerposition(csvStringToDoubleArray(GUIselectedCallSignSplitPane_dividerposition)); + + String GUImainWindowLeftSplitPane_dividerposition = element.getElementsByTagName("GUImainWindowLeftSplitPane_dividerposition").item(0) + .getTextContent(); + this.setGUImainWindowLeftSplitPane_dividerposition(csvStringToDoubleArray(GUImainWindowLeftSplitPane_dividerposition)); + + String GUImessageSectionSplitpane_dividerposition = element.getElementsByTagName("GUImessageSectionSplitpane_dividerposition").item(0) + .getTextContent(); + this.setGUImessageSectionSplitpane_dividerposition(csvStringToDoubleArray(GUImessageSectionSplitpane_dividerposition)); + + String GUImainWindowRightSplitPane_dividerposition = element.getElementsByTagName("GUImainWindowRightSplitPane_dividerposition").item(0) + .getTextContent(); + this.setGUImainWindowRightSplitPane_dividerposition(csvStringToDoubleArray(GUImainWindowRightSplitPane_dividerposition)); + + String GUIpnl_directedMSGWin_dividerpositionDefault = element.getElementsByTagName("GUIpnl_directedMSGWin_dividerpositionDefault").item(0) + .getTextContent(); + this.setGUIpnl_directedMSGWin_dividerpositionDefault(csvStringToDoubleArray(GUIpnl_directedMSGWin_dividerpositionDefault)); + + + + +// System.out.println( +// "[ChatPreferences, info]: Set the GUIclusterAndQSOMonStage_SceneSizeHW size to " + GUIclusterAndQSOMonStage_SceneSizeHW); + + } + + + + + + catch (NullPointerException tooOldConfigFileOrFormatError) { + /** + * In program version 1.2 there had not been these settings in the xml and not founding em + * would cause an exception and dumb values for the preferences. So we have to initialize + * these variables and later write a proper configfile which can be used correctly then. + * + * So THESE ARE DEFULTS + */ + + tooOldConfigFileOrFormatError.printStackTrace(); + GUIscn_ChatwindowMainSceneSizeHW = new double[] {768, 1234}; + GUIclusterAndQSOMonStage_SceneSizeHW = new double[] {700, 500}; + GUIstage_updateStage_SceneSizeHW = new double[] {640, 480}; + GUIsettingsStageSceneSizeHW = new double[] {720, 768}; + + GUIselectedCallSignSplitPane_dividerposition = new double[]{0.9}; + setGUImainWindowLeftSplitPane_dividerposition(new double[]{0.7}); + GUImessageSectionSplitpane_dividerposition = new double[]{0.5}; + GUImainWindowRightSplitPane_dividerposition = new double[]{0.8}; + GUIpnl_directedMSGWin_dividerpositionDefault = new double[]{0.8}; +// GUImainWindowLeftSplitPane_dividerposition + } + } + } + } + + + } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); System.out.println(e.getCause()); @@ -1427,6 +1658,41 @@ public class ChatPreferences { } + /** + * + * @return double array with separated values for each doublevalue, seperated by ";", empty array if none + */ + private double [] csvStringToDoubleArray(String csvStringWithDoubles){ + + String separator = ";"; + double[] result = new double[csvStringWithDoubles.split(separator).length]; + + for (int i = 0; i < (csvStringWithDoubles.split(separator).length); i++) { + result[i] = + Double.parseDouble(csvStringWithDoubles.split(separator)[i]); +// System.out.println("EXTRACTED " + result[i]); + } + + return result; + } + + private String doubleArrayToCSVString(double[] doubleArrayToCSVConvert){ + + String separator = ";"; + String result = ""; + + for (int i = 0; i < (doubleArrayToCSVConvert.length); i++) { + result += doubleArrayToCSVConvert[i]; + + if (i+1 + * - at the userlist
+ * - at the CQ message list (senders callsign)
+ * - at the PM message list (senders callsign)

+ * Method gets its information source out of the original chatmember object of the userlist, not a copy + * + * @param selectedCallSignInfoStageChatMember + * @return + */ private BorderPane generateFurtherInfoAbtSelectedCallsignBP(ChatMember selectedCallSignInfoStageChatMember) { + selectedCallSignInfoBorderPane = new BorderPane(); SplitPane selectedCallSignSplitPane = new SplitPane(); selectedCallSignSplitPane.setOrientation(Orientation.VERTICAL); - selectedCallSignSplitPane.setDividerPositions(0.9); + selectedCallSignSplitPane.setDividerPositions(chatcontroller.getChatPreferences().getGUIselectedCallSignSplitPane_dividerposition()); + TableView initFurtherInfoAbtCallsignMSGTable = initFurtherInfoAbtCallsignMSGTable(); @@ -127,14 +138,9 @@ public class Kst4ContestApplication extends Application { selectedCallSignDownerSiteGridPane.add(new Label("Last activity: " + new Utils4KST().time_convertEpochToReadable(selectedCallSignInfoStageChatMember.getActivityTimeLastInEpoch()+"")), 0,2,1,1); selectedCallSignDownerSiteGridPane.add(new Label(("(" + Utils4KST.time_getSecondsBetweenEpochAndNow(selectedCallSignInfoStageChatMember.getActivityTimeLastInEpoch()+"") /60%60) +" min ago)"), 0,3,1,1); -// selectedCallSignDownerSiteGridPane.add(createArrow(selectedCallSignInfoStageChatMember.getQTFdirection()),1,2,2,2); //moved to as button - /** * users qrv info setting will follow here */ -// CheckBox chkbx_tagMemberNotQRVFurtherInfoPane = new CheckBox("tag NOT QRV ALL"); -// chkbx_tagMemberNotQRVFurtherInfoPane.setSelected(selectedCallSignInfoStageChatMember.isQrvAny()); -// chkbx_tagMemberNotQRVFurtherInfoPanefurtherInfoPnl_chkbx_notQRV144 CheckBox furtherInfoPnl_chkbx_notQRV144 = new CheckBox("tag not qrv 144"); furtherInfoPnl_chkbx_notQRV144.setSelected(!selectedCallSignInfoStageChatMember.isQrv144()); @@ -149,6 +155,12 @@ public class Kst4ContestApplication extends Application { try { chatcontroller.getDbHandler().updateNotQRVInfoOnChatMember(selectedCallSignInfoStageChatMember); + +// double[] deviderPos = selectedCallSignSplitPane.getDividerPositions(); +// for (int i = 0; i() { + @Override + public void changed(ObservableValue observableValue, Number oldDividerPos, Number newDividerPosition) { +// System.out.println("<<<<<<<<<<<<<<<<<<< devider " + selectedCallSignSplitPane.getDividers().indexOf(divider) + " position change, new position: " + newDividerPosition + " // size dev: " + selectedCallSignSplitPane.getDividers().size()); + chatcontroller.getChatPreferences().getGUIselectedCallSignSplitPane_dividerposition()[selectedCallSignSplitPane.getDividers().indexOf(divider)] = newDividerPosition.doubleValue(); + } + }); + + } + selectedCallSignInfoBorderPane.setCenter(selectedCallSignSplitPane); @@ -822,7 +850,7 @@ public class Kst4ContestApplication extends Application { return wkd; } }); - wkdAny_subcol.prefWidthProperty().bind(tbl_chatMemberTable.widthProperty().divide(28)); + wkdAny_subcol.prefWidthProperty().bind(tbl_chatMemberTable.widthProperty().divide(14)); TableColumn vhfCol_subcol = new TableColumn("144"); vhfCol_subcol @@ -1103,7 +1131,7 @@ public class Kst4ContestApplication extends Application { Thread.currentThread().setName("chatMemberTableSortTimer"); System.out.println("[KST4CApp, Info:] Chatmemberlist-Filterlist predicates size: " + chatcontroller.getLst_chatMemberListFilterPredicates().size()); -// +// System.out.println("[KST4CApp, Info:] Deviderpos: " + spl); // for (int i = 0; i < chatcontroller.getLst_chatMemberListFilterPredicates().size(); i++) { // // Predicate test = chatcontroller.getLst_chatMemberListFilterPredicates().get(i); @@ -1216,8 +1244,7 @@ public class Kst4ContestApplication extends Application { * clickhandler for the contextmenu out of a string array (each menuitam will be * created out of exact one array-entry). These are initialized by the * chatpreferences object out of the config-xml - * - * @param menuTexts + * * @return */ private ContextMenu initChatMemberTableContextMenu(ObservableList contextMenuEntries) { // new mechanic @@ -2788,7 +2815,7 @@ public class Kst4ContestApplication extends Application { FlowPane flwPane_textSnippets; Stage clusterAndQSOMonStage; - Stage stage_selectedCallSignInfoStage; +// Stage stage_selectedCallSignInfoStage; ChatMember selectedCallSignInfoStageChatMember; BorderPane selectedCallSignInfoBorderPane; @@ -2809,7 +2836,7 @@ public class Kst4ContestApplication extends Application { * For identification of the button in the dom and make it functional, the * init-value have to be "MYQRG"! * - * @param buttonText + * * @return */ private Node[] buttonFactory(ObservableList shortcuts) { @@ -3283,9 +3310,24 @@ public class Kst4ContestApplication extends Application { BorderPane bPaneChatWindow = new BorderPane(); - Scene scene = new Scene(bPaneChatWindow, 1024, 768); + Scene scn_ChatwindowMainScene = new Scene(bPaneChatWindow, chatcontroller.getChatPreferences().getGUIscn_ChatwindowMainSceneSizeHW()[1], chatcontroller.getChatPreferences().getGUIscn_ChatwindowMainSceneSizeHW()[0]); - scene.setOnKeyPressed(new EventHandler() { + //add listeners for size changes to restore after startup + scn_ChatwindowMainScene.widthProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number number, Number newWidthValue) { + chatcontroller.getChatPreferences().getGUIscn_ChatwindowMainSceneSizeHW()[1] = newWidthValue.doubleValue(); + } + }); + + scn_ChatwindowMainScene.heightProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number number, Number newHeightValue) { + chatcontroller.getChatPreferences().getGUIscn_ChatwindowMainSceneSizeHW()[0] = newHeightValue.doubleValue(); + } + }); + + scn_ChatwindowMainScene.setOnKeyPressed(new EventHandler() { KeyCombination keyComboSTRGplus1 = new KeyCodeCombination(KeyCode.DIGIT1, KeyCombination.CONTROL_DOWN); KeyCombination keyComboSTRGplus2 = new KeyCodeCombination(KeyCode.DIGIT2, KeyCombination.CONTROL_DOWN); KeyCombination keyComboSTRGplus3 = new KeyCodeCombination(KeyCode.DIGIT3, KeyCombination.CONTROL_DOWN); @@ -3721,7 +3763,24 @@ public class Kst4ContestApplication extends Application { messageSectionSplitpane.getItems().addAll(privateMessageTable, flwPane_textSnippets, textInputFlowPane, tbl_generalMessageTable); - messageSectionSplitpane.setDividerPositions(0.9); + messageSectionSplitpane.setDividerPositions(chatcontroller.getChatPreferences().getGUImessageSectionSplitpane_dividerposition()); + + //first initialize how much divider positions we need... +// chatcontroller.getChatPreferences().setGUImessageSectionSplitpane_dividerposition(chatcontroller.getChatPreferences().getGUImessageSectionSplitpane_dividerposition()); + /** + * Then add change listeners to the dividers to save their state + */ + for (SplitPane.Divider divider : messageSectionSplitpane.getDividers()) { + divider.positionProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number oldDividerPos, Number newDividerPosition) { + System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<< devider>>>>>> " + messageSectionSplitpane.getDividers().indexOf(divider) + " position change, new position: " + newDividerPosition + " // size dev: " + messageSectionSplitpane.getDividers().size()); + chatcontroller.getChatPreferences().getGUImessageSectionSplitpane_dividerposition()[messageSectionSplitpane.getDividers().indexOf(divider)] = newDividerPosition.doubleValue(); + } + }); + + } + //Changed to add contextmenu to cq message table // messageSectionSplitpane.getItems().addAll(privateMessageTable, flwPane_textSnippets, textInputFlowPane, // initChatGeneralMSGTable()); @@ -3798,7 +3857,7 @@ public class Kst4ContestApplication extends Application { SplitPane mainWindowRightSplitPane = new SplitPane(); mainWindowRightSplitPane.setOrientation(Orientation.VERTICAL); - mainWindowRightSplitPane.setDividerPositions(0.8); + mainWindowRightSplitPane.setDividerPositions(chatcontroller.getChatPreferences().getGUImainWindowRightSplitPane_dividerposition()); BorderPane chatMemberTableBorderPane = new BorderPane(); chatMemberTableBorderPane.setCenter(tbl_chatMember); @@ -3817,8 +3876,11 @@ public class Kst4ContestApplication extends Application { "-fx-border-radius: 1;" + "-fx-border-color: lightgreen;"); - HBox chatMemberTableFilterQRBHBox = new HBox(); +// HBox chatMemberTableFilterQRBHBox = new HBox(); + FlowPane chatMemberTableFilterQRBHBox = new FlowPane(); chatMemberTableFilterQRBHBox.setAlignment(Pos.CENTER_LEFT); + chatMemberTableFilterQRBHBox.setHgap(2); + chatMemberTableFilterQRBHBox.setPrefWidth(210); TextField chatMemberTableFilterMaxQrbTF = new TextField(chatcontroller.getChatPreferences().getStn_maxQRBDefault() + ""); ToggleButton tglBtnQRBEnable = new ToggleButton("Show only QRB [km] <= "); @@ -3863,8 +3925,11 @@ public class Kst4ContestApplication extends Application { chatMemberTableFilterQTFAndQRBHbox.getChildren().add(chatMemberTableFilterQRBHBox); - HBox chatMemberTableFilterQTFHBox = new HBox(); +// HBox chatMemberTableFilterQTFHBox = new HBox(); + FlowPane chatMemberTableFilterQTFHBox = new FlowPane(); chatMemberTableFilterQTFHBox.setAlignment(Pos.CENTER_LEFT); + chatMemberTableFilterQTFHBox.setPrefWidth(490); + chatMemberTableFilterQTFHBox.setHgap(2); CheckBox chatMemberTableFilterQtfEnableChkbx = new CheckBox("Show only QTF:"); TextField chatMemberTableFilterQtfTF = new TextField(chatcontroller.getChatPreferences().getStn_qtfDefault()+""); @@ -3977,8 +4042,8 @@ public class Kst4ContestApplication extends Application { } }); - chatMemberTableFilterQTFHBox.setSpacing(5); - chatMemberTableFilterQTFHBox.getChildren().addAll(chatMemberTableFilterQtfTF, new Label("deg, " + chatcontroller.getChatPreferences().getStn_antennaBeamWidthDeg() + " beamwidth"), qtfNorth, qtfNorthEast, qtfEast, qtfSouthEast, qtfSouth, qtfSouthWest, qtfWest, qtfNorthWest); +// chatMemberTableFilterQTFHBox.setSpacing(5); + chatMemberTableFilterQTFHBox.getChildren().addAll(chatMemberTableFilterQtfTF, new Label("deg +/- " + chatcontroller.getChatPreferences().getStn_antennaBeamWidthDeg() + ""), qtfNorth, qtfNorthEast, qtfEast, qtfSouthEast, qtfSouth, qtfSouthWest, qtfWest, qtfNorthWest); chatMemberTableFilterQTFAndQRBHbox.getChildren().add(chatMemberTableFilterQTFHBox); chatMemberTableFilterVBoxForAllFilters.getChildren().add(chatMemberTableFilterQTFAndQRBHbox); @@ -4316,9 +4381,11 @@ public class Kst4ContestApplication extends Application { chatMemberTableFilterTextFieldBox.getChildren().addAll(chatMemberTableFilterTextField); - HBox chatMemberTableFilterTextFieldAndWorkedBandsHbx = new HBox(); +// HBox chatMemberTableFilterTextFieldAndWorkedBandsHbx = new HBox(); + FlowPane chatMemberTableFilterTextFieldAndWorkedBandsHbx = new FlowPane(); chatMemberTableFilterTextFieldAndWorkedBandsHbx.getChildren().addAll(chatMemberTableFilterTextFieldBox, chatMemberTableFilterWorkedBandFiltersHbx); - chatMemberTableFilterTextFieldAndWorkedBandsHbx.setSpacing(5); +// chatMemberTableFilterTextFieldAndWorkedBandsHbx.setSpacing(5); + chatMemberTableFilterTextFieldAndWorkedBandsHbx.setHgap(2); chatMemberTableFilterVBoxForAllFilters.getChildren().add(chatMemberTableFilterTextFieldAndWorkedBandsHbx); @@ -4335,7 +4402,24 @@ public class Kst4ContestApplication extends Application { mainWindowLeftSplitPane.getItems().addAll(messageSectionSplitpane, mainWindowRightSplitPane); - mainWindowLeftSplitPane.setDividerPositions(0.8); + mainWindowLeftSplitPane.setDividerPositions(chatcontroller.getChatPreferences().getGUImainWindowLeftSplitPane_dividerposition()); + + //first initialize how much divider positions we need... +// chatcontroller.getChatPreferences().setGUImainWindowLeftSplitPane_dividerposition(new double[mainWindowLeftSplitPane.getDividers().size()]); +// chatcontroller.getChatPreferences().getGUImainWindowLeftSplitPane_dividerposition()[0] = 0.2; + /** + * here will follow the Splitpane divider listener to save the user made UI changes, should been made at the very end of all splitpane operations + */ + for (SplitPane.Divider divider : mainWindowLeftSplitPane.getDividers()) { + divider.positionProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number oldDividerPos, Number newDividerPosition) { + System.out.println("<<<<<<<<<<<<<<<<<<< mainWindowLeftSplitPanedevider " + mainWindowLeftSplitPane.getDividers().indexOf(divider) + " position change, new position: " + newDividerPosition + " // size dev: " + mainWindowLeftSplitPane.getDividers().size()); + chatcontroller.getChatPreferences().getGUImainWindowLeftSplitPane_dividerposition()[mainWindowLeftSplitPane.getDividers().indexOf(divider)] = newDividerPosition.doubleValue(); + } + }); + + } /** * initializing the furter infos of a callsign part of the right splitpane @@ -4359,7 +4443,25 @@ public class Kst4ContestApplication extends Application { mainWindowRightSplitPane.getItems().add(selectedCallSignFurtherInfoPane); - primaryStage.setScene(scene); + //first initialize how much divider positions we need... +// chatcontroller.getChatPreferences().setGUImainWindowRightSplitPane_dividerposition(new double[mainWindowRightSplitPane.getDividers().size()]); + + /** + * here will follow the Splitpane divider listener to save the user made UI changes, should been made at the very end of all splitpane operations + */ + + for (SplitPane.Divider divider : mainWindowRightSplitPane.getDividers()) { + divider.positionProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number oldDividerPos, Number newDividerPosition) { + System.out.println("<<<<<<<<<<<<<<<<<<<>>>>>> devider mainwindowRIGHTsplitpane " + mainWindowRightSplitPane.getDividers().indexOf(divider) + " position change, new position: " + newDividerPosition + " // size dev: " + mainWindowRightSplitPane.getDividers().size()); + chatcontroller.getChatPreferences().getGUImainWindowRightSplitPane_dividerposition()[mainWindowRightSplitPane.getDividers().indexOf(divider)] = newDividerPosition.doubleValue(); + } + }); + + } + + primaryStage.setScene(scn_ChatwindowMainScene); primaryStage.show(); @@ -4373,12 +4475,6 @@ public class Kst4ContestApplication extends Application { */ - 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 @@ -4392,10 +4488,49 @@ public class Kst4ContestApplication extends Application { clusterAndQSOMonStage.setTitle("Cluster & QSO of the other"); SplitPane pnl_directedMSGWin = new SplitPane(); pnl_directedMSGWin.setOrientation(Orientation.VERTICAL); - + pnl_directedMSGWin.setDividerPositions(chatcontroller.getChatPreferences().getGUIpnl_directedMSGWin_dividerpositionDefault()); pnl_directedMSGWin.getItems().addAll(initDXClusterTable(), initChatToOtherMSGTable()); - clusterAndQSOMonStage.setScene(new Scene(pnl_directedMSGWin, 700, 500)); + + + //first initialize how much divider positions we need... +// chatcontroller.getChatPreferences().setGUIpnl_directedMSGWin_dividerpositionDefault(new double[pnl_directedMSGWin.getDividers().size()]); + + /** + * here will follow the Splitpane divider listener to save the user made UI changes, should been made at the very end of all splitpane operations + */ + + for (SplitPane.Divider divider : pnl_directedMSGWin.getDividers()) { + divider.positionProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number oldDividerPos, Number newDividerPosition) { + System.out.println("<<<<<<<<<<<<<<<<<<<|||||||||||||||||||| devider " + pnl_directedMSGWin.getDividers().indexOf(divider) + " position change, new position: " + newDividerPosition + " // size dev: " + pnl_directedMSGWin.getDividers().size()); + chatcontroller.getChatPreferences().getGUIpnl_directedMSGWin_dividerpositionDefault()[pnl_directedMSGWin.getDividers().indexOf(divider)] = newDividerPosition.doubleValue(); + } + }); + + } + + + Scene clusterAndQSOMonScene = new Scene(pnl_directedMSGWin, chatcontroller.getChatPreferences().getGUIclusterAndQSOMonStage_SceneSizeHW()[0], chatcontroller.getChatPreferences().getGUIclusterAndQSOMonStage_SceneSizeHW()[1]); + + clusterAndQSOMonScene.heightProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number number, Number newHeightValue) { + chatcontroller.getChatPreferences().getGUIclusterAndQSOMonStage_SceneSizeHW()[1] = newHeightValue.doubleValue(); + } + }); + + clusterAndQSOMonScene.widthProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number number, Number newWidthValue) { + chatcontroller.getChatPreferences().getGUIclusterAndQSOMonStage_SceneSizeHW()[0] = newWidthValue.doubleValue(); + } + }); + + clusterAndQSOMonStage.setScene(clusterAndQSOMonScene); + + clusterAndQSOMonStage.show(); /** @@ -4506,7 +4641,9 @@ public class Kst4ContestApplication extends Application { treeView.setRoot(rootItem); treeView.setShowRoot(false); - stage_updateStage.setScene(new Scene(vbxUpdateWindow, 640, 480)); + System.out.println("SRVR Version: " + chatcontroller.getUpdateInformation().getLatestVersionNumberOnServer() + " // installed versioasdn " + ApplicationConstants.APPLICATION_CURRENTVERSIONNUMBER); + + stage_updateStage.setScene(new Scene(vbxUpdateWindow, chatcontroller.getChatPreferences().getGUIstage_updateStage_SceneSizeHW()[0], chatcontroller.getChatPreferences().getGUIstage_updateStage_SceneSizeHW()[1])); if (chatcontroller.getUpdateInformation().getLatestVersionNumberOnServer() > ApplicationConstants.APPLICATION_CURRENTVERSIONNUMBER) { stage_updateStage.show(); @@ -4637,7 +4774,7 @@ public class Kst4ContestApplication extends Application { // labeledSeparator.setAlignment(Pos.CENTER); TextField txtFldstn_antennaBeamWidthDeg = new TextField(this.chatcontroller.getChatPreferences().getStn_antennaBeamWidthDeg() + ""); - + txtFldstn_antennaBeamWidthDeg.setTooltip(new Tooltip("Your antenna beamwidth in DEG\n\nEnter correct values here due it´s used for path suggestions!!!")); txtFldstn_antennaBeamWidthDeg.textProperty().addListener(new ChangeListener() { @Override @@ -5512,8 +5649,6 @@ public class Kst4ContestApplication extends Application { // a.setContentText(chatcontroller.getChatPreferences().getProgramVersion()); a.show(); } - - // System.out.println("DB reset via DBHandler needs to be implemented"); } @@ -5722,7 +5857,7 @@ public class Kst4ContestApplication extends Application { // optionsPanel.setAlignment(vbxButtons, Pos.CENTER);; // VBox vBox = new VBox(tabPaneOptions); - settingsStage.setScene(new Scene(optionsPanel, 720, 768)); + settingsStage.setScene(new Scene(optionsPanel, chatcontroller.getChatPreferences().getGUIsettingsStageSceneSizeHW()[0], chatcontroller.getChatPreferences().getGUIsettingsStageSceneSizeHW()[1])); // settingsStage.getScene().getWindow().addEventFilter(WindowEvent.WINDOW_CLOSE_REQUEST, this::closeWindowEvent);