// September 2015 // Levee Patroller / Dijk Patrouille // This source file is (c) by Deltares. This source file is open source but only available to select users. Do not redistribute without written permission of Stichting Deltares, Delft, The Netherlands. // This header has been automatically generated. //============================================================================= // In game menu for filling in the questions associated with // rip-rap / pitching stone (zet- en stortsteen) // ------------------------------------------------------------ // Created by Maarten Wesselius // © 2006, GeoDelft //============================================================================= class MenuRipPitching extends MenuSignalQuestions DependsOn(GeoPlayerController); function InitComponent(GUIController MyController, GUIComponent MyOwner) { local float verticalOffset; GeoPC=GeoPlayerController(MyController.ViewportOwner.Actor); if(GeoPC!=None) UpdateLanguage(); else log("ERROR WITH TYPE OF GAME"); InitializeHashTable(); InitializeStringData(); Super.InitComponent(MyController, MyOwner); // the distance verticalOffset = QuestionHeight + CheckBoxHeight + ButtonVGapSmall + ButtonVGapLarge; // Initialize the values of questions InitializeCheckedness(); if(GeoPC.ReportingMode == MODE_CreatingNewObservation || GeoPC.ReportingMode == MODE_EditingFirstReport) { InitFirstReport(verticalOffset); } else { InitLaterReport(verticalOffset); } ResetQuestionVisibilities(); } function InitFirstReport(float verticalOffset) { // put question 7/1A in the right place GUILabel(Controls[HashTable.getValue("Q7")]).WinTop = GUILabel(Controls[HashTable.getValue("Q2")]).WinTop; moCheckBox(Controls[HashTable.getValue("Q7A1")]).WinTop = moCheckBox(Controls[HashTable.getValue("Q2A1")]).WinTop; moCheckBox(Controls[HashTable.getValue("Q7A2")]).WinTop = moCheckBox(Controls[HashTable.getValue("Q2A2")]).WinTop; // move question 2 down GUILabel(Controls[HashTable.getValue("Q2")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q2A1")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q2A2")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q2A3")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q2A4")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q2A5")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q2A6")]).WinTop += verticalOffset; // move question 3 down GUILabel(Controls[HashTable.getValue("Q3")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q3A1")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q3A2")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q3A3")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q3A4")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q3A5")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q3A6")]).WinTop += verticalOffset; // move question 4 down GUILabel(Controls[HashTable.getValue("Q4")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q4A1")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q4A2")]).WinTop += verticalOffset; // move question 5 down GUILabel(Controls[HashTable.getValue("Q5")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q5A1")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q5A2")]).WinTop += verticalOffset; // move question 6/5A down GUILabel(Controls[HashTable.getValue("Q6")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q6A1")]).WinTop += verticalOffset; moCheckBox(Controls[HashTable.getValue("Q6A2")]).WinTop += verticalOffset; } function InitLaterReport(float verticalOffset) { local moCheckBox Q1A1, Q1A2; Q1A1 = moCheckBox(Controls[HashTable.getValue("Q1A1")]); Q1A2 = moCheckBox(Controls[HashTable.getValue("Q1A2")]); // put the right caption in the answers, telling the user that this is what they filled in before if(GeoPC.Dutch) { Q1A1.MyLabel.Caption = NL_ChosenBefore $ Q1A1.MyLabel.Caption; Q1A2.MyLabel.Caption = NL_ChosenBefore $ Q1A2.MyLabel.Caption; } else { Q1A1.MyLabel.Caption = EN_ChosenBefore $ Q1A1.MyLabel.Caption; Q1A2.MyLabel.Caption = EN_ChosenBefore $ Q1A2.MyLabel.Caption; } Q1A1.WinWidth = getAnswerWidthValue(Q1A1.myLabel.Caption); Q1A2.WinWidth = getAnswerWidthValue(Q1A2.myLabel.Caption); //Check which answer of question 1 is true if(Q1A1.IsChecked()) { //the first answer of question 1 is true; show only this answer, without checkbox Q1A1.MyCheckBox.SetVisibility(false); Q1A2.SetVisibility(false); } else { //the second answer of question 1 is true; show only this answer, without checkbox Q1A2.MyCheckBox.SetVisibility(false); Q1A1.SetVisibility(false); Q1A2.WinLeft = moCheckBox(Controls[HashTable.getValue("Q1A1")]).WinLeft; // get question 7 inbetween 1 and 2, and move the following stuff down InitFirstReport(verticalOffset); } } function InitializeHashTable() { // FUNCTIONALITY: initialize the hashtable with the keys (which should be "Q1", "Q1A1", // "Q2", "Q2A3", etc.) and its corresponding values (the index in the controls-array). HashTable = New class'QAHashTable'; HashTable.add("Q1", 7); HashTable.add("Q1A1", 8); HashTable.add("Q1A2", 9); HashTable.add("Q2", 10); HashTable.add("Q2A1", 11); HashTable.add("Q2A2", 12); HashTable.add("Q2A3", 13); HashTable.add("Q2A4", 14); HashTable.add("Q2A5", 15); HashTable.add("Q2A6", 16); HashTable.add("Q3", 17); HashTable.add("Q3A1", 18); HashTable.add("Q3A2", 19); HashTable.add("Q3A3", 20); HashTable.add("Q3A4", 21); HashTable.add("Q3A5", 22); HashTable.add("Q3A6", 23); HashTable.add("Q4", 24); HashTable.add("Q4A1", 25); HashTable.add("Q4A2", 26); HashTable.add("Q5", 27); HashTable.add("Q5A1", 28); HashTable.add("Q5A2", 29); HashTable.add("Q6", 30); HashTable.add("Q6A1", 31); HashTable.add("Q6A2", 32); HashTable.add("Q7", 33); HashTable.add("Q7A1", 34); HashTable.add("Q7A2", 35); } function InitializeStringData() { local Signal.GeoSignalTypes TypeThis; TypeThis = SIG_RipRapPitching; if (!GeoPC.IsDroogte()) { DataObject = new class'SignalStringData'; }else { DataObject = new class'SignalStringDataDroogte'; } NrQuestions = DataObject.GetNrQuestions(TypeThis); EN_QuestionStrings = DataObject.GetQuestionStrings(TypeThis, false); NL_QuestionStrings = DataObject.GetQuestionStrings(TypeThis, true); EN_AnswerStrings = DataObject.GetAnswerStrings(TypeThis, false); NL_AnswerStrings = DataObject.GetAnswerStrings(TypeThis, true); } function bool OnAnswerButtonClick(GUIComponent Sender) { super.OnAnswerButtonClick(Sender); ResetQuestionVisibilities(); return true; } function ResetQuestionVisibilities() { // if Question 5, answer 1 was clicked, make question 6 and it's answers visible // and if Question 5, answer 2 was clicked, make question 6 and it's answers invisible //if(Sender == moCheckBox(Controls[HashTable.getValue("Q5A1")]).myCheckBox) if(moCheckBox(Controls[HashTable.getValue("Q5A1")]).isChecked()) setQuestionVisibility(6, true); else setQuestionVisibility(6, false); // if Question 1, answer 2 was clicked, make question 7 and it's answers visible // and if Question 1, answer 1 was clicked, make question 7 and it's answers invisible if(moCheckBox(Controls[HashTable.getValue("Q1A2")]).isChecked()) setQuestionVisibility(7, true); else setQuestionVisibility(7, false); } function InitializeCheckedness() { // FUNCTIONALITY: load values from GeoPC.NewSignal and set answerButtons checkedness accordingly local SignalRipPitching theSignal; local SignalReportRipPitching theSignalReport; local moCheckBox Q1A1, Q1A2, Q2A1, Q2A2, Q2A3, Q2A4, Q2A5, Q2A6, Q3A1, Q3A2, Q3A3, Q3A4, Q3A5, Q3A6, Q4A1, Q4A2, Q5A1, Q5A2, Q6A1, Q6A2, Q7A1, Q7A2; Q1A1 = moCheckBox(Controls[HashTable.getValue("Q1A1")]); Q1A2 = moCheckBox(Controls[HashTable.getValue("Q1A2")]); Q2A1 = moCheckBox(Controls[HashTable.getValue("Q2A1")]); Q2A2 = moCheckBox(Controls[HashTable.getValue("Q2A2")]); Q2A3 = moCheckBox(Controls[HashTable.getValue("Q2A3")]); Q2A4 = moCheckBox(Controls[HashTable.getValue("Q2A4")]); Q2A5 = moCheckBox(Controls[HashTable.getValue("Q2A5")]); Q2A6 = moCheckBox(Controls[HashTable.getValue("Q2A6")]); Q3A1 = moCheckBox(Controls[HashTable.getValue("Q3A1")]); Q3A2 = moCheckBox(Controls[HashTable.getValue("Q3A2")]); Q3A3 = moCheckBox(Controls[HashTable.getValue("Q3A3")]); Q3A4 = moCheckBox(Controls[HashTable.getValue("Q3A4")]); Q3A5 = moCheckBox(Controls[HashTable.getValue("Q3A5")]); Q3A6 = moCheckBox(Controls[HashTable.getValue("Q3A6")]); Q4A1 = moCheckBox(Controls[HashTable.getValue("Q4A1")]); Q4A2 = moCheckBox(Controls[HashTable.getValue("Q4A2")]); Q5A1 = moCheckBox(Controls[HashTable.getValue("Q5A1")]); Q5A2 = moCheckBox(Controls[HashTable.getValue("Q5A2")]); Q6A1 = moCheckBox(Controls[HashTable.getValue("Q6A1")]); Q6A2 = moCheckBox(Controls[HashTable.getValue("Q6A2")]); Q7A1 = moCheckBox(Controls[HashTable.getValue("Q7A1")]); Q7A2 = moCheckBox(Controls[HashTable.getValue("Q7A2")]); theSignal = SignalRipPitching(GeoPC.NewSignal); // get signal properties that are independent of the state of the failure // QUESTION 1 if(theSignal.RevetmentType == REV_RipRap) Q1A1.Checked(true); else if(theSignal.RevetmentType == REV_PitchingStone) Q1A2.Checked(true); // get signal properties that are dependent of the state of the failure if(theSignal.SignalReports.length > 0) { theSignalReport = SignalReportRipPitching(theSignal.SignalReports[theSignal.SignalReports.length-1]); // QUESTION 2 if(theSignalReport.LengthOfDamage == SIZE_VerySmall) Q2A1.Checked(true); else if(theSignalReport.LengthOfDamage == SIZE_Small) Q2A2.Checked(true); else if(theSignalReport.LengthOfDamage == SIZE_Medium) Q2A3.Checked(true); else if(theSignalReport.LengthOfDamage == SIZE_MediumLarge) Q2A4.Checked(true); else if(theSignalReport.LengthOfDamage == SIZE_Large) Q2A5.Checked(true); else if(theSignalReport.LengthOfDamage == SIZE_VeryLarge) Q2A6.Checked(true); // QUESTION 3 if(theSignalReport.WidthOfDamage == SIZE_VerySmall) Q3A1.Checked(true); else if(theSignalReport.WidthOfDamage == SIZE_Small) Q3A2.Checked(true); else if(theSignalReport.WidthOfDamage == SIZE_Medium) Q3A3.Checked(true); else if(theSignalReport.WidthOfDamage == SIZE_MediumLarge) Q3A4.Checked(true); else if(theSignalReport.WidthOfDamage == SIZE_Large) Q3A5.Checked(true); else if(theSignalReport.WidthOfDamage == SIZE_VeryLarge) Q3A6.Checked(true); // QUESTION 4 if(theSignalReport.ElementsMissingOrMoved == GEO_Yes) Q4A1.Checked(true); else if(theSignalReport.ElementsMissingOrMoved == GEO_No) Q4A2.Checked(true); // QUESTION 5 if(theSignalReport.FlushingSoil == GEO_Yes) Q5A1.Checked(true); else if(theSignalReport.FlushingSoil == GEO_No) Q5A2.Checked(true); // QUESTION 6 if(theSignalReport.FlushingSoilQuantity == QUA_Little) Q6A1.Checked(true); else if(theSignalReport.FlushingSoilQuantity == QUA_Much) Q6A2.Checked(true); // QUESTION 7 if(theSignalReport.ElementsLoose == GEO_Yes) Q7A1.Checked(true); else if(theSignalReport.ElementsLoose == GEO_No) Q7A2.Checked(true); } } function storeAnswerValues() { // FUNCTIONALITY: look at current values in answers and save it in GeoPC.NewSignal local SignalRipPitching theSignal; // set to GeoPC.NewSignal, working variable for the Signal answers local SignalRipPitching OriginalSignal; // the original report made, to check for changes in observations local SignalReportRipPitching tempSignalReport; // temporary working SignalReport for the SignalReport answers local moCheckBox Q1A1, Q1A2, Q2A1, Q2A2, Q2A3, Q2A4, Q2A5, Q2A6, Q3A1, Q3A2, Q3A3, Q3A4, Q3A5, Q3A6, Q4A1, Q4A2, Q5A1, Q5A2, Q6A1, Q6A2, Q7A1, Q7A2; local bool bObservationsChanged; local int tmp; // these two are not really used, but they have // to be there as parameters to SignalReport's isEqual bObservationsChanged = false; Q1A1 = moCheckBox(Controls[HashTable.getValue("Q1A1")]); Q1A2 = moCheckBox(Controls[HashTable.getValue("Q1A2")]); Q2A1 = moCheckBox(Controls[HashTable.getValue("Q2A1")]); Q2A2 = moCheckBox(Controls[HashTable.getValue("Q2A2")]); Q2A3 = moCheckBox(Controls[HashTable.getValue("Q2A3")]); Q2A4 = moCheckBox(Controls[HashTable.getValue("Q2A4")]); Q2A5 = moCheckBox(Controls[HashTable.getValue("Q2A5")]); Q2A6 = moCheckBox(Controls[HashTable.getValue("Q2A6")]); Q3A1 = moCheckBox(Controls[HashTable.getValue("Q3A1")]); Q3A2 = moCheckBox(Controls[HashTable.getValue("Q3A2")]); Q3A3 = moCheckBox(Controls[HashTable.getValue("Q3A3")]); Q3A4 = moCheckBox(Controls[HashTable.getValue("Q3A4")]); Q3A5 = moCheckBox(Controls[HashTable.getValue("Q3A5")]); Q3A6 = moCheckBox(Controls[HashTable.getValue("Q3A6")]); Q4A1 = moCheckBox(Controls[HashTable.getValue("Q4A1")]); Q4A2 = moCheckBox(Controls[HashTable.getValue("Q4A2")]); Q5A1 = moCheckBox(Controls[HashTable.getValue("Q5A1")]); Q5A2 = moCheckBox(Controls[HashTable.getValue("Q5A2")]); Q6A1 = moCheckBox(Controls[HashTable.getValue("Q6A1")]); Q6A2 = moCheckBox(Controls[HashTable.getValue("Q6A2")]); Q7A1 = moCheckBox(Controls[HashTable.getValue("Q7A1")]); Q7A2 = moCheckBox(Controls[HashTable.getValue("Q7A2")]); theSignal = SignalRipPitching(GeoPC.NewSignal.Duplicate()); // create a SignalReport for this Signal (a working version) tempSignalReport = new class'SignalReportRipPitching'; // set Signal properties (that are independent of the state of the failure) // QUESTION 1 if(Q1A1.isChecked()) theSignal.RevetmentType = REV_RipRap; else if(Q1A2.isChecked()) theSignal.RevetmentType = REV_PitchingStone; // set SignalReport properties (that are dependent of the failure state) // for these properties, a different way is used to set bSignalChanged (see below) // QUESTION 2 if(Q2A1.isChecked()) tempSignalReport.LengthOfDamage = SIZE_VerySmall; else if(Q2A2.isChecked()) tempSignalReport.LengthOfDamage = SIZE_Small; else if(Q2A3.isChecked()) tempSignalReport.LengthOfDamage = SIZE_Medium; else if(Q2A4.isChecked()) tempSignalReport.LengthOfDamage = SIZE_MediumLarge; else if(Q2A5.isChecked()) tempSignalReport.LengthOfDamage = SIZE_Large; else if(Q2A6.isChecked()) tempSignalReport.LengthOfDamage = SIZE_VeryLarge; // QUESTION 3 if(Q3A1.isChecked()) tempSignalReport.WidthOfDamage = SIZE_VerySmall; else if(Q3A2.isChecked()) tempSignalReport.WidthOfDamage = SIZE_Small; else if(Q3A3.isChecked()) tempSignalReport.WidthOfDamage = SIZE_Medium; else if(Q3A4.isChecked()) tempSignalReport.WidthOfDamage = SIZE_MediumLarge; else if(Q3A5.isChecked()) tempSignalReport.WidthOfDamage = SIZE_Large; else if(Q3A6.isChecked()) tempSignalReport.WidthOfDamage = SIZE_VeryLarge; // QUESTION 4 if(Q4A1.isChecked()) tempSignalReport.ElementsMissingOrMoved = GEO_Yes; else if(Q4A2.isChecked()) tempSignalReport.ElementsMissingOrMoved = GEO_No; // QUESTION 5 if(Q5A1.isChecked()) tempSignalReport.FlushingSoil = GEO_Yes; else if(Q5A2.isChecked()) tempSignalReport.FlushingSoil = GEO_No; // QUESTION 6 if(tempSignalReport.FlushingSoil == GEO_No) tempSignalReport.FlushingSoilQuantity = QUA_NONE; else if(Q6A1.isChecked()) tempSignalReport.FlushingSoilQuantity = QUA_Little; else if(Q6A2.isChecked()) tempSignalReport.FlushingSoilQuantity = QUA_Much; // QUESTION 7 if(theSignal.RevetmentType == REV_RipRap) tempSignalReport.ElementsLoose = GEO_NONE; else if(Q7A1.isChecked()) tempSignalReport.ElementsLoose = GEO_Yes; else if(Q7A2.isChecked()) tempSignalReport.ElementsLoose = GEO_No; // now check if observations have changed (only applicable in editing mode) if(GeoPC.ReportingMode == MODE_EditingFirstReport || GeoPC.ReportingMode == MODE_EditingLaterReport) { // if there is already an original, use it to get the answers // from last time, in order to see if any changes were made regarding the original. OriginalSignal = SignalRipPitching(GeoPC.NearbyMarker.SignalOriginals[GeoPC.EditIndex]); if(OriginalSignal.RevetmentType != theSignal.RevetmentType) bObservationsChanged = true; // for the SignalReport-answers, IsEqual() is used to check for changes if(!tempSignalReport.IsEqual(OriginalSignal.SignalReports[OriginalSignal.SignalReports.length - 1], 0.95,tmp,tmp)) bObservationsChanged = true; // bChanged reflects if any changes were made regarding the original report tempSignalReport.bChanged = bObservationsChanged; } if(theSignal.RevetmentType!=4) { theSignal.NL_DamageName = NL_AnswerStrings[0].Answers[theSignal.RevetmentType-2]; theSignal.EN_DamageName = EN_AnswerStrings[0].Answers[theSignal.RevetmentType-2]; } SaveAnswers(theSignal, tempSignalReport); } defaultproperties { // Controls 6 to 34 are the labels for the questions, and the buttons for the possible answers // common properties of all answer buttons // QUESTION 1 Controls(7)=GUILabel'QuestionLabel' Controls(8)=moCheckBox'AnswerButton' Controls(9)=moCheckBox'AnswerButton' // QUESTION 2 Controls(10)=GUILabel'QuestionLabel' Controls(11)=moCheckBox'AnswerButton' Controls(12)=moCheckBox'AnswerButton' Controls(13)=moCheckBox'AnswerButton' Controls(14)=moCheckBox'AnswerButton' Controls(15)=moCheckBox'AnswerButton' Controls(16)=moCheckBox'AnswerButton' // QUESTION 3 Controls(17)=GUILabel'QuestionLabel' Controls(18)=moCheckBox'AnswerButton' Controls(19)=moCheckBox'AnswerButton' Controls(20)=moCheckBox'AnswerButton' Controls(21)=moCheckBox'AnswerButton' Controls(22)=moCheckBox'AnswerButton' Controls(23)=moCheckBox'AnswerButton' // QUESTION 4 Controls(24)=GUILabel'QuestionLabel' Controls(25)=moCheckBox'AnswerButton' Controls(26)=moCheckBox'AnswerButton' // QUESTION 5 Controls(27)=GUILabel'QuestionLabel' Controls(28)=moCheckBox'AnswerButton' Controls(29)=moCheckBox'AnswerButton' // QUESTION 6 (not always visible) Controls(30)=GUILabel'QuestionLabel' Controls(31)=moCheckBox'AnswerButton' Controls(32)=moCheckBox'AnswerButton' // QUESTION 7 (not always visible) Controls(33)=GUILabel'QuestionLabel' Controls(34)=moCheckBox'AnswerButton' Controls(35)=moCheckBox'AnswerButton' MenuWidth=0.85 MenuHeight=0.9 // override standard values of superclass here! EN_Title = "Observation report for rip-rap / pitching stone" NL_Title = "Observatie rapport voor zet- en stortsteen" HelpMenuOption=5 }