diff --git a/instat/Model/DataFrame/clsDataFrame.vb b/instat/Model/DataFrame/clsDataFrame.vb index c51d6d523f..dc3de08652 100644 --- a/instat/Model/DataFrame/clsDataFrame.vb +++ b/instat/Model/DataFrame/clsDataFrame.vb @@ -181,6 +181,7 @@ Public Class clsDataFrame Else bRefreshed = False End If + _clsVisibleDataFramePage.HasDataChangedForAutoSave = True End If _clsColumnMetaData.RefreshData() Return bRefreshed diff --git a/instat/Model/DataFrame/clsDataFramePage.vb b/instat/Model/DataFrame/clsDataFramePage.vb index 0131071054..2dbf663ab1 100644 --- a/instat/Model/DataFrame/clsDataFramePage.vb +++ b/instat/Model/DataFrame/clsDataFramePage.vb @@ -31,6 +31,7 @@ Public Class clsDataFramePage Private _lstColumns As List(Of clsColumnHeaderDisplay) Private _hasChanged As Boolean Private _useColumnSelectionInDataView As Boolean + Private _HasDataChangedForAutoSave As Boolean Private ReadOnly Property iColumnIncrements As Integer Get @@ -140,6 +141,19 @@ Public Class clsDataFramePage End Set End Property + ''' + ''' holds whether the dataframe is different from visual grid component and trigger auto save + ''' + ''' + Public Property HasDataChangedForAutoSave() As Boolean + Get + Return _HasDataChangedForAutoSave + End Get + Set(ByVal value As Boolean) + _HasDataChangedForAutoSave = value + End Set + End Property + ''' ''' Create a new instance of a dataframe page ''' @@ -152,6 +166,7 @@ Public Class clsDataFramePage _iColumnStart = 1 _iRowStart = 1 _hasChanged = True + _HasDataChangedForAutoSave = True _useColumnSelectionInDataView = True End Sub diff --git a/instat/dlgCalculator.vb b/instat/dlgCalculator.vb index c7eee20e0a..31c557a35f 100644 --- a/instat/dlgCalculator.vb +++ b/instat/dlgCalculator.vb @@ -122,10 +122,8 @@ Public Class dlgCalculator clsDetachScalarsFunction.AddParameter("unload", "TRUE") ucrBase.clsRsyntax.AddToBeforeCodes(clsAttachFunction, 0) - ucrBase.clsRsyntax.AddToBeforeCodes(clsAttachScalarsFunction, 1) ucrBase.clsRsyntax.AddToAfterCodes(clsDetachFunction, 1) - ucrBase.clsRsyntax.AddToAfterCodes(clsDetachScalarsFunction, 2) ucrBase.clsRsyntax.SetCommandString("") @@ -204,7 +202,11 @@ Public Class dlgCalculator Dim strResut As String = ucrCalc.ucrSaveResultInto.GetText clsAddScalarFunction.AddParameter("scalar_name", Chr(34) & strResut & Chr(34), iPosition:=1) clsAddScalarFunction.AddParameter("scalar_value", strResut, iPosition:=2) + clsAddScalarFunction.AddParameter("data_name", Chr(34) & dataFrameName & Chr(34), iPosition:=0) + clsScalarsDataFuntion.AddParameter("data_name", Chr(34) & dataFrameName & Chr(34), iPosition:=0) ucrBase.clsRsyntax.AddToAfterCodes(clsAddScalarFunction, 0) + ucrBase.clsRsyntax.AddToBeforeCodes(clsAttachScalarsFunction, 1) + ucrBase.clsRsyntax.AddToAfterCodes(clsDetachScalarsFunction, 2) ucrBase.clsRsyntax.SetAssignTo(strResut) ucrCalc.ucrSaveResultInto.btnColumnPosition.Enabled = False ucrCalc.ucrSaveResultInto.btnColumnPosition.Visible = True @@ -212,14 +214,22 @@ Public Class dlgCalculator ucrCalc.ucrSaveResultInto.ucrChkSave.Enabled = False ucrCalc.ucrSaveResultInto.ucrInputComboSave.Visible = True ucrCalc.ucrSaveResultInto.ucrInputComboSave.Enabled = True + ElseIf ucrCalc.ucrSelectorForCalculations.checkBoxScalar.Checked Then + Dim strResut As String = ucrCalc.ucrSaveResultInto.GetText + clsAddScalarFunction.AddParameter("data_name", Chr(34) & dataFrameName & Chr(34), iPosition:=0) + clsScalarsDataFuntion.AddParameter("data_name", Chr(34) & dataFrameName & Chr(34), iPosition:=0) + ucrBase.clsRsyntax.AddToAfterCodes(clsAddScalarFunction, 0) + ucrBase.clsRsyntax.AddToBeforeCodes(clsAttachScalarsFunction, 1) + ucrBase.clsRsyntax.AddToAfterCodes(clsDetachScalarsFunction, 2) Else ucrBase.clsRsyntax.RemoveFromAfterCodes(clsAddScalarFunction) + ucrBase.clsRsyntax.RemoveFromBeforeCodes(clsAttachScalarsFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsDetachScalarsFunction) ucrCalc.ucrSaveResultInto.btnColumnPosition.Enabled = True ucrCalc.ucrSaveResultInto.btnColumnPosition.Visible = True ucrCalc.ucrSaveResultInto.ucrChkSave.Enabled = True ucrCalc.ucrSaveResultInto.ucrInputComboSave.Visible = True ucrCalc.ucrSaveResultInto.ucrInputComboSave.Enabled = True - End If ' Update command string and clear input try message name @@ -253,7 +263,6 @@ Public Class dlgCalculator ucrBase.clsRsyntax.AddToBeforeCodes(clsAttachScalarsFunction, 1) ucrBase.clsRsyntax.AddToAfterCodes(clsDetachFunction, 1) - ucrBase.clsRsyntax.AddToAfterCodes(clsDetachScalarsFunction, 2) ucrCalc.ucrSaveResultInto.Enabled = True ucrCalc.ucrChkStoreScalar.Visible = True Else diff --git a/instat/dlgClimaticLengthOfSeason.Designer.vb b/instat/dlgClimaticLengthOfSeason.Designer.vb index 25c8f8d3ee..e245d05139 100644 --- a/instat/dlgClimaticLengthOfSeason.Designer.vb +++ b/instat/dlgClimaticLengthOfSeason.Designer.vb @@ -36,6 +36,8 @@ Partial Class dlgClimaticLengthOfSeason Me.ucrReceiverStartofRains = New instat.ucrReceiverSingle() Me.ucrSelectorLengthofSeason = New instat.ucrSelectorByDataFrameAddRemove() Me.ucrBase = New instat.ucrButtons() + Me.ucrChkLengthmore = New instat.ucrCheck() + Me.ucrNudLenghtmore = New instat.ucrNud() Me.SuspendLayout() ' 'lblStartofRains @@ -50,16 +52,16 @@ Partial Class dlgClimaticLengthOfSeason 'lblStartofRainsLogical ' Me.lblStartofRainsLogical.AutoSize = True - Me.lblStartofRainsLogical.Location = New System.Drawing.Point(281, 86) + Me.lblStartofRainsLogical.Location = New System.Drawing.Point(281, 75) Me.lblStartofRainsLogical.Name = "lblStartofRainsLogical" - Me.lblStartofRainsLogical.Size = New System.Drawing.Size(44, 13) + Me.lblStartofRainsLogical.Size = New System.Drawing.Size(80, 13) Me.lblStartofRainsLogical.TabIndex = 3 - Me.lblStartofRainsLogical.Text = "Start(L):" + Me.lblStartofRainsLogical.Text = "Start Status (L):" ' 'lblEndofRains ' Me.lblEndofRains.AutoSize = True - Me.lblEndofRains.Location = New System.Drawing.Point(280, 136) + Me.lblEndofRains.Location = New System.Drawing.Point(280, 120) Me.lblEndofRains.Name = "lblEndofRains" Me.lblEndofRains.Size = New System.Drawing.Size(29, 13) Me.lblEndofRains.TabIndex = 5 @@ -68,17 +70,17 @@ Partial Class dlgClimaticLengthOfSeason 'lblEndofRainsLogical ' Me.lblEndofRainsLogical.AutoSize = True - Me.lblEndofRainsLogical.Location = New System.Drawing.Point(280, 182) + Me.lblEndofRainsLogical.Location = New System.Drawing.Point(280, 166) Me.lblEndofRainsLogical.Name = "lblEndofRainsLogical" - Me.lblEndofRainsLogical.Size = New System.Drawing.Size(41, 13) + Me.lblEndofRainsLogical.Size = New System.Drawing.Size(77, 13) Me.lblEndofRainsLogical.TabIndex = 7 - Me.lblEndofRainsLogical.Text = "End(L):" + Me.lblEndofRainsLogical.Text = "End Status (L):" ' 'ucrChkType ' Me.ucrChkType.AutoSize = True Me.ucrChkType.Checked = False - Me.ucrChkType.Location = New System.Drawing.Point(5, 279) + Me.ucrChkType.Location = New System.Drawing.Point(5, 260) Me.ucrChkType.Name = "ucrChkType" Me.ucrChkType.Size = New System.Drawing.Size(87, 23) Me.ucrChkType.TabIndex = 11 @@ -87,7 +89,7 @@ Partial Class dlgClimaticLengthOfSeason ' Me.ucrChkLengthofSeason.AutoSize = True Me.ucrChkLengthofSeason.Checked = False - Me.ucrChkLengthofSeason.Location = New System.Drawing.Point(5, 247) + Me.ucrChkLengthofSeason.Location = New System.Drawing.Point(5, 228) Me.ucrChkLengthofSeason.Name = "ucrChkLengthofSeason" Me.ucrChkLengthofSeason.Size = New System.Drawing.Size(143, 23) Me.ucrChkLengthofSeason.TabIndex = 9 @@ -98,7 +100,7 @@ Partial Class dlgClimaticLengthOfSeason Me.ucrInputTextType.AutoSize = True Me.ucrInputTextType.IsMultiline = False Me.ucrInputTextType.IsReadOnly = False - Me.ucrInputTextType.Location = New System.Drawing.Point(149, 278) + Me.ucrInputTextType.Location = New System.Drawing.Point(149, 259) Me.ucrInputTextType.Name = "ucrInputTextType" Me.ucrInputTextType.Size = New System.Drawing.Size(137, 21) Me.ucrInputTextType.TabIndex = 12 @@ -109,7 +111,7 @@ Partial Class dlgClimaticLengthOfSeason Me.ucrInputLengthofSeason.AutoSize = True Me.ucrInputLengthofSeason.IsMultiline = False Me.ucrInputLengthofSeason.IsReadOnly = False - Me.ucrInputLengthofSeason.Location = New System.Drawing.Point(149, 246) + Me.ucrInputLengthofSeason.Location = New System.Drawing.Point(149, 227) Me.ucrInputLengthofSeason.Name = "ucrInputLengthofSeason" Me.ucrInputLengthofSeason.Size = New System.Drawing.Size(137, 21) Me.ucrInputLengthofSeason.TabIndex = 10 @@ -118,7 +120,7 @@ Partial Class dlgClimaticLengthOfSeason ' Me.ucrReceiverStartofRainsLogical.AutoSize = True Me.ucrReceiverStartofRainsLogical.frmParent = Me - Me.ucrReceiverStartofRainsLogical.Location = New System.Drawing.Point(283, 103) + Me.ucrReceiverStartofRainsLogical.Location = New System.Drawing.Point(283, 92) Me.ucrReceiverStartofRainsLogical.Margin = New System.Windows.Forms.Padding(0) Me.ucrReceiverStartofRainsLogical.Name = "ucrReceiverStartofRainsLogical" Me.ucrReceiverStartofRainsLogical.Selector = Nothing @@ -131,7 +133,7 @@ Partial Class dlgClimaticLengthOfSeason ' Me.ucrReceiverEndofRainsLogical.AutoSize = True Me.ucrReceiverEndofRainsLogical.frmParent = Me - Me.ucrReceiverEndofRainsLogical.Location = New System.Drawing.Point(283, 198) + Me.ucrReceiverEndofRainsLogical.Location = New System.Drawing.Point(283, 182) Me.ucrReceiverEndofRainsLogical.Margin = New System.Windows.Forms.Padding(0) Me.ucrReceiverEndofRainsLogical.Name = "ucrReceiverEndofRainsLogical" Me.ucrReceiverEndofRainsLogical.Selector = Nothing @@ -144,7 +146,7 @@ Partial Class dlgClimaticLengthOfSeason ' Me.ucrReceiverEndofRains.AutoSize = True Me.ucrReceiverEndofRains.frmParent = Me - Me.ucrReceiverEndofRains.Location = New System.Drawing.Point(283, 152) + Me.ucrReceiverEndofRains.Location = New System.Drawing.Point(283, 136) Me.ucrReceiverEndofRains.Margin = New System.Windows.Forms.Padding(0) Me.ucrReceiverEndofRains.Name = "ucrReceiverEndofRains" Me.ucrReceiverEndofRains.Selector = Nothing @@ -182,17 +184,41 @@ Partial Class dlgClimaticLengthOfSeason ' Me.ucrBase.AutoSize = True Me.ucrBase.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.ucrBase.Location = New System.Drawing.Point(5, 311) + Me.ucrBase.Location = New System.Drawing.Point(5, 328) Me.ucrBase.Name = "ucrBase" Me.ucrBase.Size = New System.Drawing.Size(408, 52) Me.ucrBase.TabIndex = 13 ' + 'ucrChkLengthmore + ' + Me.ucrChkLengthmore.AutoSize = True + Me.ucrChkLengthmore.Checked = False + Me.ucrChkLengthmore.Location = New System.Drawing.Point(5, 293) + Me.ucrChkLengthmore.Name = "ucrChkLengthmore" + Me.ucrChkLengthmore.Size = New System.Drawing.Size(143, 23) + Me.ucrChkLengthmore.TabIndex = 14 + ' + 'ucrNudLenghtmore + ' + Me.ucrNudLenghtmore.AutoSize = True + Me.ucrNudLenghtmore.DecimalPlaces = New Decimal(New Integer() {0, 0, 0, 0}) + Me.ucrNudLenghtmore.Increment = New Decimal(New Integer() {1, 0, 0, 0}) + Me.ucrNudLenghtmore.Location = New System.Drawing.Point(149, 291) + Me.ucrNudLenghtmore.Maximum = New Decimal(New Integer() {100, 0, 0, 0}) + Me.ucrNudLenghtmore.Minimum = New Decimal(New Integer() {0, 0, 0, 0}) + Me.ucrNudLenghtmore.Name = "ucrNudLenghtmore" + Me.ucrNudLenghtmore.Size = New System.Drawing.Size(50, 20) + Me.ucrNudLenghtmore.TabIndex = 15 + Me.ucrNudLenghtmore.Value = New Decimal(New Integer() {0, 0, 0, 0}) + ' 'dlgClimaticLengthOfSeason ' Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi Me.AutoSize = True - Me.ClientSize = New System.Drawing.Size(416, 365) + Me.ClientSize = New System.Drawing.Size(416, 384) + Me.Controls.Add(Me.ucrNudLenghtmore) + Me.Controls.Add(Me.ucrChkLengthmore) Me.Controls.Add(Me.ucrChkType) Me.Controls.Add(Me.ucrChkLengthofSeason) Me.Controls.Add(Me.ucrInputTextType) @@ -230,4 +256,6 @@ Partial Class dlgClimaticLengthOfSeason Friend WithEvents ucrChkLengthofSeason As ucrCheck Friend WithEvents ucrInputTextType As ucrInputTextBox Friend WithEvents ucrInputLengthofSeason As ucrInputTextBox + Friend WithEvents ucrNudLenghtmore As ucrNud + Friend WithEvents ucrChkLengthmore As ucrCheck End Class diff --git a/instat/dlgClimaticLengthOfSeason.vb b/instat/dlgClimaticLengthOfSeason.vb index e6221ade61..673c14b017 100644 --- a/instat/dlgClimaticLengthOfSeason.vb +++ b/instat/dlgClimaticLengthOfSeason.vb @@ -20,8 +20,8 @@ Public Class dlgClimaticLengthOfSeason Private bReset As Boolean = True Private strCurrDataName As String = "" - Private clsLengthOfSeasonFunction, clsConvertColumnTypeFunction, clsApplyInstatCalcFunction, clsAsCharacterFunction, clsCombinationCalcFunction, clsStartEndStatusFunction, clsCaseWhenFunction, clsIsNAFunction, clsIsNA1Function, clsCombinationListFunction As New RFunction - Private clsMinusOpertor, clsAndOperator, clsOROperator, clsCaseWhenOperator, clsCaseWhen1Operator, clsCaseWhen2Operator, clsCaseWhen3Operator, clsAssignOperator, clsAssign1Operator, clsAssign2Operator, clsAssign3Operator, clsAssign4Operator, clsAnd1Operator, clsAnd2Operator As New ROperator + Private clsLengthOfSeasonFunction, clsLengthmoreFunction, clsListFunction, clsAscharactermoreFunction, clsConvertColumnTypeFunction, clsElseIfMoreFunction, clsApplyInstatCalcFunction, clsAsCharacterFunction, clsCombinationCalcFunction, clsStartEndStatusFunction, clsCaseWhenFunction, clsIsNAFunction, clsIsNA1Function, clsCombinationListFunction As New RFunction + Private clsMinusOpertor, clsAssignMoreOperator, clsMinusmoreOPerator, clsAndOperator, clsOROperator, clsCaseWhenOperator, clsCaseWhen1Operator, clsCaseWhen2Operator, clsCaseWhen3Operator, clsAssignOperator, clsAssign1Operator, clsAssign2Operator, clsAssign3Operator, clsAssign4Operator, clsAnd1Operator, clsAnd2Operator As New ROperator Private Sub dlgClimaticLengthOfSeason_Load(sender As Object, e As EventArgs) Handles MyBase.Load If bFirstLoad Then @@ -77,12 +77,28 @@ Public Class dlgClimaticLengthOfSeason ucrInputTextType.SetParameter(New RParameter("result_name", 2)) ucrInputTextType.SetDataFrameSelector(ucrSelectorLengthofSeason.ucrAvailableDataFrames) ucrInputTextType.SetName("length_status") + + ucrChkLengthmore.SetText("Length_More") + ucrChkLengthmore.AddParameterPresentCondition(True, "sub3", True) + ucrChkLengthmore.AddParameterPresentCondition(False, "sub3", False) + ucrChkLengthmore.AddToLinkedControls(ucrNudLenghtmore, {True}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True, bNewLinkedChangeToDefaultState:=True, objNewDefaultState:=366) + + ucrNudLenghtmore.SetParameter(New RParameter("left", 0, False)) + ucrNudLenghtmore.DecimalPlaces = 0 + ucrNudLenghtmore.Increment = 1 + ucrNudLenghtmore.Minimum = 1 + ucrNudLenghtmore.Maximum = 366 + EnableLengthmore() End Sub Private Sub SetDefaults() Dim strLengthName As String = "length" Dim strTypeName As String = "length_status" + clsAscharactermoreFunction = New RFunction + clsListFunction = New RFunction + clsMinusmoreOPerator =New ROperator + clsLengthOfSeasonFunction.Clear() clsCombinationCalcFunction.Clear() clsApplyInstatCalcFunction.Clear() @@ -91,7 +107,10 @@ Public Class dlgClimaticLengthOfSeason clsIsNAFunction.Clear() clsIsNA1Function.Clear() clsAsCharacterFunction.Clear() + clsLengthmoreFunction.Clear() + clsElseIfMoreFunction.Clear() + clsAssignMoreOperator.Clear() clsMinusOpertor.Clear() clsAndOperator.Clear() clsOROperator.Clear() @@ -217,6 +236,30 @@ Public Class dlgClimaticLengthOfSeason clsConvertColumnTypeFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") clsConvertColumnTypeFunction.AddParameter("to_type", Chr(34) & "factor" & Chr(34), iPosition:=2) + clsLengthmoreFunction.SetRCommand("instat_calculation$new") + clsLengthmoreFunction.AddParameter("type", Chr(34) & "calculation" & Chr(34), iPosition:=0) + clsLengthmoreFunction.AddParameter("function_exp", clsRFunctionParameter:=clsElseIfMoreFunction, iPosition:=1) + clsLengthmoreFunction.AddParameter("sub_calculations", clsRFunctionParameter:=clsListFunction, iPosition:=4) + clsLengthmoreFunction.AddParameter("save", 2, iPosition:=5) + clsLengthmoreFunction.SetAssignTo("length_more") + + clsListFunction.SetRCommand("list") + clsListFunction.AddParameter("x", "start_end_status", iPosition:=0, bIncludeArgumentName:=False) + clsListFunction.AddParameter("y", "length_of_season", iPosition:=1, bIncludeArgumentName:=False) + + clsElseIfMoreFunction.SetRCommand("ifelse") + clsElseIfMoreFunction.bToScriptAsRString = True + clsElseIfMoreFunction.AddParameter("test", clsROperatorParameter:=clsAssignMoreOperator, iPosition:=0, bIncludeArgumentName:=False) + clsElseIfMoreFunction.AddParameter("yes", clsROperatorParameter:=clsMinusmoreOPerator, iPosition:=1, bIncludeArgumentName:=False) + + clsAssignMoreOperator.SetOperation("==") + clsAssignMoreOperator.AddParameter("left", clsRFunctionParameter:=clsAscharactermoreFunction, iPosition:=0, bIncludeArgumentName:=False) + clsAssignMoreOperator.AddParameter("rigth", Chr(34) & "MORE" & Chr(34), iPosition:=1, bIncludeArgumentName:=False) + + clsAscharactermoreFunction.SetRCommand("as.character") + + clsMinusmoreOPerator.SetOperation("-") + 'Base Function ucrBase.clsRsyntax.ClearCodes() ucrBase.clsRsyntax.SetBaseRFunction(clsApplyInstatCalcFunction) @@ -233,6 +276,7 @@ Public Class dlgClimaticLengthOfSeason ucrReceiverEndofRainsLogical.AddAdditionalCodeParameterPair(clsAnd2Operator, New RParameter("end_status", 1), iAdditionalPairNo:=4) ucrReceiverStartofRainsLogical.AddAdditionalCodeParameterPair(clsAssign3Operator, New RParameter("start_status", 0), iAdditionalPairNo:=5) ucrInputTextType.AddAdditionalCodeParameterPair(clsConvertColumnTypeFunction, New RParameter("col_names", 1), iAdditionalPairNo:=1) + ucrReceiverStartofRains.AddAdditionalCodeParameterPair(clsMinusmoreOPerator, New RParameter("rigth", 1, bNewIncludeArgumentName:=False), iAdditionalPairNo:=1) ucrReceiverStartofRains.SetRCode(clsMinusOpertor, bReset) ucrReceiverEndofRains.SetRCode(clsMinusOpertor, bReset) @@ -242,6 +286,8 @@ Public Class dlgClimaticLengthOfSeason ucrInputTextType.SetRCode(clsStartEndStatusFunction, bReset) ucrChkLengthofSeason.SetRCode(clsCombinationListFunction, bReset) ucrChkType.SetRCode(clsCombinationListFunction, bReset) + ucrChkLengthmore.SetRCode(clsCombinationListFunction, bReset) + ucrNudLenghtmore.SetRCode(clsMinusmoreOPerator, bReset) End Sub Private Sub TestOKEnabled() @@ -288,6 +334,7 @@ Public Class dlgClimaticLengthOfSeason End Sub Private Sub ucrChkType_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrChkType.ControlValueChanged + EnableLengthmore() If ucrChkType.Checked Then clsCombinationListFunction.AddParameter("sub2", clsRFunctionParameter:=clsStartEndStatusFunction, bIncludeArgumentName:=False, iPosition:=1) ucrBase.clsRsyntax.AddToAfterCodes(clsConvertColumnTypeFunction, iPosition:=0) @@ -305,4 +352,35 @@ Public Class dlgClimaticLengthOfSeason Private Sub ucrSelectorLengthofSeason_DataFrameChanged() Handles ucrSelectorLengthofSeason.DataFrameChanged clsConvertColumnTypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorLengthofSeason.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) End Sub + + Private Sub ucrChkLengthmore_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrChkLengthmore.ControlValueChanged + EnableLengthmore() + If ucrChkLengthmore.Checked Then + clsCombinationListFunction.AddParameter("sub3", clsRFunctionParameter:=clsLengthmoreFunction, bIncludeArgumentName:=False, iPosition:=2) + Else + clsCombinationListFunction.RemoveParameterByName("sub3") + End If + End Sub + + Private Sub EnableLengthmore() + ucrChkLengthmore.Enabled = ucrChkType.Checked + End Sub + + Private Sub ucrInputLengthofSeason_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrInputLengthofSeason.ControlValueChanged + If Not ucrInputLengthofSeason.IsEmpty Then + clsElseIfMoreFunction.AddParameter("no", ucrInputLengthofSeason.GetText(), iPosition:=2, bIncludeArgumentName:=False) + clsLengthmoreFunction.AddParameter("result_name", Chr(34) & ucrInputLengthofSeason.GetText & "_more" & Chr(34), iPosition:=2) + Else + clsElseIfMoreFunction.RemoveParameterByName("no") + clsLengthmoreFunction.RemoveParameterByName("result_name") + End If + End Sub + + Private Sub ucrInputTextType_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrInputTextType.ControlValueChanged + If Not ucrInputTextType.IsEmpty Then + clsAscharactermoreFunction.AddParameter("x", ucrInputTextType.GetText(), iPosition:=0, bIncludeArgumentName:=False) + Else + clsAscharactermoreFunction.RemoveParameterByName("x") + End If + End Sub End Class \ No newline at end of file diff --git a/instat/dlgClimaticSummary.vb b/instat/dlgClimaticSummary.vb index 122ed4dfdc..9afa0c5980 100644 --- a/instat/dlgClimaticSummary.vb +++ b/instat/dlgClimaticSummary.vb @@ -22,7 +22,7 @@ Public Class dlgClimaticSummary Private iReceiverMaxY As Integer Private iReceiverLabelMaxY As Integer Private bResetSubdialog As Boolean = False - Private clsDefaultFunction, clsConcFunction, clsSummariesList, + Private clsDefaultFunction, clsIfElseFirstDoyFilledFunction, clsConcFunction, clsSummariesList, clsDefaultFactors, clsDayFilterCalc, clsDayFilterCalcFromConvert, clsDayFilterCalcFromList, clsAddDateFunction, clsDummyFunction As New RFunction @@ -157,6 +157,7 @@ Public Class dlgClimaticSummary clsConcFunction = New RFunction clsAddDateFunction = New RFunction clsDummyFunction = New RFunction + clsIfElseFirstDoyFilledFunction = New RFunction clsFromAndToConditionOperator = New ROperator clsDayFilterCalc = New RFunction @@ -288,7 +289,7 @@ Public Class dlgClimaticSummary End Sub Private Sub cmdDoyRange_Click(sender As Object, e As EventArgs) Handles cmdDoyRange.Click - sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFilterCalc, clsNewDayFromOperator:=clsFromConditionOperator, clsNewDayToOperator:=clsToConditionOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorVariable.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) + sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFilterCalc, clsNewIfElseFirstDoyFilledFunction:=clsIfElseFirstDoyFilledFunction, clsNewDayFromOperator:=clsFromConditionOperator, clsNewDayToOperator:=clsToConditionOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorVariable.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) sdgDoyRange.ShowDialog() UpdateDayFilterPreview() End Sub diff --git a/instat/dlgEndOfRainsSeason.Designer.vb b/instat/dlgEndOfRainsSeason.Designer.vb index 8b4b820361..e877a70e9b 100644 --- a/instat/dlgEndOfRainsSeason.Designer.vb +++ b/instat/dlgEndOfRainsSeason.Designer.vb @@ -52,6 +52,8 @@ Partial Class dlgEndOfRainsSeason Me.rdoVariableEvaporation = New System.Windows.Forms.RadioButton() Me.rdoValueEvaporation = New System.Windows.Forms.RadioButton() Me.grpEndofSeason = New System.Windows.Forms.GroupBox() + Me.ucrInputFilled = New instat.ucrInputTextBox() + Me.ucrChkFilled = New instat.ucrCheck() Me.ucrInputEndofSeasonOccurence = New instat.ucrInputTextBox() Me.ucrInputSeasonDoy = New instat.ucrInputTextBox() Me.ucrInputEndofSeasonDate = New instat.ucrInputTextBox() @@ -214,19 +216,43 @@ Partial Class dlgEndOfRainsSeason ' 'grpEndofSeason ' + Me.grpEndofSeason.Controls.Add(Me.ucrInputFilled) + Me.grpEndofSeason.Controls.Add(Me.ucrChkFilled) Me.grpEndofSeason.Controls.Add(Me.ucrInputEndofSeasonOccurence) Me.grpEndofSeason.Controls.Add(Me.ucrInputSeasonDoy) Me.grpEndofSeason.Controls.Add(Me.ucrInputEndofSeasonDate) Me.grpEndofSeason.Controls.Add(Me.ucrChkEndofSeasonOccurence) Me.grpEndofSeason.Controls.Add(Me.ucrChkEndofSeasonDate) Me.grpEndofSeason.Controls.Add(Me.ucrChkEndofSeasonDoy) - Me.grpEndofSeason.Location = New System.Drawing.Point(3, 426) + Me.grpEndofSeason.Location = New System.Drawing.Point(3, 403) Me.grpEndofSeason.Name = "grpEndofSeason" - Me.grpEndofSeason.Size = New System.Drawing.Size(472, 41) + Me.grpEndofSeason.Size = New System.Drawing.Size(472, 83) Me.grpEndofSeason.TabIndex = 32 Me.grpEndofSeason.TabStop = False Me.grpEndofSeason.Text = "End of Season" ' + 'ucrInputFilled + ' + Me.ucrInputFilled.AddQuotesIfUnrecognised = True + Me.ucrInputFilled.AutoSize = True + Me.ucrInputFilled.IsMultiline = False + Me.ucrInputFilled.IsReadOnly = False + Me.ucrInputFilled.Location = New System.Drawing.Point(121, 53) + Me.ucrInputFilled.Margin = New System.Windows.Forms.Padding(9) + Me.ucrInputFilled.Name = "ucrInputFilled" + Me.ucrInputFilled.Size = New System.Drawing.Size(104, 21) + Me.ucrInputFilled.TabIndex = 49 + ' + 'ucrChkFilled + ' + Me.ucrChkFilled.AutoSize = True + Me.ucrChkFilled.Checked = False + Me.ucrChkFilled.Location = New System.Drawing.Point(4, 53) + Me.ucrChkFilled.Margin = New System.Windows.Forms.Padding(6) + Me.ucrChkFilled.Name = "ucrChkFilled" + Me.ucrChkFilled.Size = New System.Drawing.Size(105, 25) + Me.ucrChkFilled.TabIndex = 50 + ' 'ucrInputEndofSeasonOccurence ' Me.ucrInputEndofSeasonOccurence.AddQuotesIfUnrecognised = True @@ -598,7 +624,7 @@ Partial Class dlgEndOfRainsSeason ' Me.ucrBase.AutoSize = True Me.ucrBase.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.ucrBase.Location = New System.Drawing.Point(3, 472) + Me.ucrBase.Location = New System.Drawing.Point(3, 493) Me.ucrBase.Margin = New System.Windows.Forms.Padding(4) Me.ucrBase.Name = "ucrBase" Me.ucrBase.Size = New System.Drawing.Size(408, 52) @@ -732,4 +758,6 @@ Partial Class dlgEndOfRainsSeason Friend WithEvents ucrInputEvaporation As ucrInputTextBox Friend WithEvents ucrNudWB As ucrNud Friend WithEvents ucrChkWB As ucrCheck + Friend WithEvents ucrInputFilled As ucrInputTextBox + Friend WithEvents ucrChkFilled As ucrCheck End Class \ No newline at end of file diff --git a/instat/dlgEndOfRainsSeason.vb b/instat/dlgEndOfRainsSeason.vb index 8bf2b645f9..7b8056768b 100644 --- a/instat/dlgEndOfRainsSeason.vb +++ b/instat/dlgEndOfRainsSeason.vb @@ -23,13 +23,15 @@ Public Class dlgEndOfRainsSeason Private strWBMin As String = "wb_min" Private strWBMax As String = "wb_max" Private strWB As String = "wb" + Private strCondCheck As String = "conditions_check" Private strEvapReplaceNA As String = "evap_NA_as_value" Private strCurrDataName As String = "" Private iCapacityDefault As Integer = 60 + Private strYearType As String = "year_type" #Region "general_code_structures" ' General - Private clsRunCalculation, clsListCalFunction, clsDummyFunction As New RFunction + Private clsVectorFunction, clsDeleteunusedrowFunction, clsStationtypeFunction, clsConvertColumnTypeStationFunction, clsConvertlinkedvariable1Function, clsConvertlinkedvariableFunction, clsConvertColumnType1Function, clsGetColumnDataTypeFunction, clsConvertColumnTypeFunction, clsRunCalculation, clsListCalFunction, clsDummyFunction As New RFunction Private clsFirstOrLastFunction As New RFunction ' Group by @@ -47,7 +49,7 @@ Public Class dlgEndOfRainsSeason #Region "end_of_rains_code_structures" ' Rolling sum rain - Private clsEndRainsRollingSumCalc, clsWBEvaporationMinFunction, clsWBEvaporationMaxFunction As New RFunction + Private clsEndRainsRollingSumCalc, clsElseIfENdRainStatusFunction, clsWBEvaporationMinFunction, clsWBEvaporationMaxFunction As New RFunction Private clsRollSumRainFunction As New RFunction Private clsWBOperator1, clsWBOperator2 As New ROperator ' Conditions filter @@ -80,8 +82,7 @@ Public Class dlgEndOfRainsSeason #Region "end_of_season_code_structures" - Private clsEndSeasonIsNaRain As New RFunction - + Private clsEndSeasonIsNaRain, clsLastFunction, clsnaIsRainFunction, clsElseIfRainFunction As New RFunction ' Rain min Private clsEndSeasonRainMinCalc As New RFunction Private clsIfElseRainMinFunction As New RFunction @@ -131,6 +132,11 @@ Public Class dlgEndOfRainsSeason Private clsIfElseVariableEvaporation As New RFunction Private clsIsNaEvaporation As New RFunction + 'Check Condition + Private clsConditionCheckFunction, clsConvertColumnlinkeddataFunction, clsRunCalculationStatus2Function, clsSetNamesEndSeasonStatusFunction, clsSetNamesEndSeasonFunction, clsVectorCalFormListFunction, clsLinkeddataFunction, clsRunCalculationStatusFunction, clsAllStatusFunction, clsListCondCheckFilterFunction, clsIsnaSecondConditionFilterFunction, clsListCondCheckFunction, clsConditionsFilterCondCheckFunction, clsElseifCondCheckFunction, clsIsnaConditionCheckFunction As New RFunction + + Private clsConditionCheckOperator, clsCheckSecondConditionFilterOperator, clsCheckConditionFilterOperator, clsConditionChecksecondOperator As ROperator + ' Conditions filter Private clsEndSeasonConditionsFilterCalc As New RFunction Private clsEndSeasonConditionsFilterSubCalcsList As New RFunction @@ -139,9 +145,12 @@ Public Class dlgEndOfRainsSeason ' Doy summary Private clsEndSeasonFirstDoySummaryCalc As New RFunction + Private clsEndSeasonFirstDoySummaryCalcFilledFunction As New RFunction Private clsIfElseFirstDoyFunction As New RFunction - Private clsIsNaFirstWB As New RFunction - Private clsFirstDoyFunction As New RFunction + Public clsIfElseFirstDoyFilledFunction As New RFunction + Private clsIfElseFirstDoyFilled1Function, clsrunfilledFunction, clsFirstFilledFunction, clsFirstFilled1Function, clsIsNafilledFunction As New RFunction + Private clsAssignOperator As New ROperator + Private clsFirstDoyFunction, clsIsNaFirstWB As New RFunction Private clsFirstWBFunction As New RFunction ' Date summary @@ -150,12 +159,12 @@ Public Class dlgEndOfRainsSeason Private clsFirstDateFunction As New RFunction ' Status summary - Private clsEndSeasonStatusSummaryCalc As New RFunction + Private clsEndSeasonStatusSummaryCalc, clsIfelseStatus2Function, clsIsnaStatus2Function, clsEndSeasonStatus2Function, clsIsNAStatusFunction, clsFirstStatusFunction, clsIfelseStatusFunction, clsIfelseStatus1Function As New RFunction ' Combination - Private clsEndSeasonCombinationCalc As New RFunction - Private clsEndSeasonCombinationManipulationList As New RFunction - Private clsEndSeasonCombinationSubCalcList As New RFunction + Private clsEndSeasonCombinationCalc, clsEndSeasonCombiStatus2ListFunction, clsEndSeasonCombiStatus2Function, clsEndSeasonCombinationCalcStatusFunction As New RFunction + Private clsEndSeasonCombinationManipulationList, clsEndSeasonCombinationManipulationListStatusFunction As New RFunction + Private clsEndSeasonCombinationSubCalcList, clsEndSeasonCombinationSubCalcListStatusFunction As New RFunction #End Region Private Sub dlgEndOfRainsSeason_Load(sender As Object, e As EventArgs) Handles MyBase.Load @@ -304,6 +313,15 @@ Public Class dlgEndOfRainsSeason ucrInputEndofSeasonOccurence.SetDataFrameSelector(ucrSelectorForWaterBalance.ucrAvailableDataFrames) ucrInputEndofSeasonOccurence.SetValidationTypeAsRVariable() + ucrChkFilled.AddParameterValuesCondition(True, "sub4", "True") + ucrChkFilled.AddParameterValuesCondition(False, "sub4", "False") + ucrChkFilled.SetText("Filled") + + ucrInputFilled.SetParameter(New RParameter("result_name", 2)) + ucrInputFilled.SetDataFrameSelector(ucrSelectorForWaterBalance.ucrAvailableDataFrames) + ucrInputFilled.SetValidationTypeAsRVariable() + + ucrChkWB.AddParameterPresentCondition(True, "WB_evap", True) ucrChkWB.AddParameterPresentCondition(False, "WB_evap", False) ucrChkWB.SetText("Reducing") @@ -319,6 +337,7 @@ Public Class dlgEndOfRainsSeason ucrChkEndofSeasonOccurence.AddToLinkedControls(ucrInputEndofSeasonOccurence, {True}, bNewLinkedHideIfParameterMissing:=True) ucrChkEndofSeasonDate.AddToLinkedControls(ucrInputEndofSeasonDate, {True}, bNewLinkedHideIfParameterMissing:=True) ucrChkEndofSeasonDoy.AddToLinkedControls(ucrInputSeasonDoy, {True}, bNewLinkedHideIfParameterMissing:=True) + ucrChkFilled.AddToLinkedControls(ucrInputFilled, {True}, bNewLinkedHideIfParameterMissing:=True) ucrChkWB.AddToLinkedControls(ucrNudWB, {True}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True, bNewLinkedChangeToDefaultState:=True, objNewDefaultState:=0.5) ucrPnlEvaporation.AddToLinkedControls(ucrInputEvaporation, {rdoValueEvaporation}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True, bNewLinkedChangeToDefaultState:=True, objNewDefaultState:=5) ucrPnlEvaporation.AddToLinkedControls(ucrReceiverEvaporation, {rdoVariableEvaporation}, bNewLinkedHideIfParameterMissing:=True) @@ -328,7 +347,7 @@ Public Class dlgEndOfRainsSeason ucrPnlEndOfRainsAndSeasons.AddToLinkedControls({ucrNudCapacity, ucrNudWBLessThan, ucrChkEndofSeasonDoy}, {rdoEndOfSeasons}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True) ucrPnlEndOfRainsAndSeasons.AddToLinkedControls({ucrPnlEvaporation}, {rdoEndOfSeasons}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True) ucrPnlEndOfRainsAndSeasons.AddToLinkedControls({ucrChkWB}, {rdoEndOfSeasons}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True) - ucrPnlEndOfRainsAndSeasons.AddToLinkedControls({ucrChkEndofSeasonDate, ucrChkEndofSeasonDoy, ucrChkEndofSeasonOccurence}, {rdoEndOfSeasons}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True) + ucrPnlEndOfRainsAndSeasons.AddToLinkedControls({ucrChkEndofSeasonDate, ucrChkEndofSeasonDoy, ucrChkEndofSeasonOccurence, ucrChkFilled}, {rdoEndOfSeasons}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True) ucrPnlEndOfRainsAndSeasons.AddToLinkedControls({ucrChkEndofRainsDate, ucrChkEndofRainsDoy, ucrChkEndofRainsOccurence}, {rdoEndOfRains}, bNewLinkedAddRemoveParameter:=True, bNewLinkedHideIfParameterMissing:=True) ucrChkEndofRainsDoy.SetLinkedDisplayControl(grpEndofRains) @@ -349,22 +368,48 @@ Public Class dlgEndOfRainsSeason Dim strWaterBalanceMin As String = "water_balance_min" Dim strDifference As String = "difference" Dim strConditionsFilter As String = "conditions_filter" + Dim strConditionFilterCondCheck As String = "conditions_filter" Dim strRollSumRain As String = "roll_sum_rain" Dim strEndRains As String = "end_rains" Dim strEndRainsStatus As String = "end_rains_status" Dim strEndRainsDate As String = "end_rains_date" Dim strEndSeason As String = "end_season" + Dim strEndSeasonFilled As String = "end_season_filled" Dim strEndSeasonStatus As String = "end_season_status" Dim strEndSeasonDate As String = "end_season_date" Dim strDoyFilter As String = "doy_filter" Dim strEndofRains As String = "end_of_rains_combined" Dim strEndofSeason As String = "end_of_season_combined" + Dim strEndofSeasonStatus As String = "end_of_season_combined_status" + Dim strEndSeasonStatus2 As String = "end_season_status_2" + Dim strEndSeasonCombiStatus2 As String = "end_season_combined_status_2" + Dim strStationType As String = "station_type" + Dim strLinkeddata As String = "linked_data_name" + Dim strCalformlist As String = "calculated_from_list" + + clsVectorFunction = New RFunction + clsConvertlinkedvariableFunction = New RFunction + clsConvertlinkedvariable1Function = New RFunction + clsIfElseFirstDoyFilled1Function = New RFunction + clsFirstFilledFunction = New RFunction + clsIsNafilledFunction = New RFunction + clsFirstFilled1Function = New RFunction + clsDeleteunusedrowFunction = New RFunction + clsConditionCheckOperator = New ROperator + clsConditionChecksecondOperator = New ROperator + clsCheckConditionFilterOperator = New ROperator + clsCheckSecondConditionFilterOperator = New ROperator #Region "clear_code_structures" ' General clsRunCalculation.Clear() clsListCalFunction.Clear() clsFirstOrLastFunction.Clear() + clsConvertColumnTypeFunction.Clear() + clsGetColumnDataTypeFunction.Clear() + clsConvertColumnType1Function.Clear() + clsStationtypeFunction.Clear() + clsConvertColumnTypeStationFunction.Clear() ' Group by clsGroupByStationYearCalc.Clear() @@ -382,6 +427,10 @@ Public Class dlgEndOfRainsSeason ' Rolling sum rain clsEndRainsRollingSumCalc.Clear() clsRollSumRainFunction.Clear() + clsElseIfENdRainStatusFunction.Clear() + clsElseIfRainFunction.Clear() + clsnaIsRainFunction.Clear() + clsLastFunction.Clear() ' Conditions filter clsEndRainsConditionsFilterCalc.Clear() @@ -404,6 +453,10 @@ Public Class dlgEndOfRainsSeason ' Status summary clsEndRainsStatusSummaryCalc.Clear() + clsIfelseStatusFunction.Clear() + clsIfelseStatus1Function.Clear() + clsFirstStatusFunction.Clear() + clsIsNAStatusFunction.Clear() ' Combination clsEndRainsCombinationCalc.Clear() @@ -464,6 +517,18 @@ Public Class dlgEndOfRainsSeason clsIsNaEvaporation.Clear() ' Conditions filter + clsConditionCheckFunction.Clear() + clsElseifCondCheckFunction.Clear() + clsIsnaConditionCheckFunction.Clear() + clsListCondCheckFunction.Clear() + clsConditionsFilterCondCheckFunction.Clear() + clsIsnaSecondConditionFilterFunction.Clear() + clsListCondCheckFilterFunction.Clear() + clsEndSeasonStatus2Function.Clear() + clsIfelseStatus2Function.Clear() + clsIsnaStatus2Function.Clear() + clsEndSeasonCombiStatus2Function.Clear() + clsEndSeasonCombiStatus2ListFunction.Clear() clsEndSeasonConditionsFilterCalc.Clear() clsEndSeasonConditionsFilterSubCalcsList.Clear() clsEndSeasonConditionsOperator.Clear() @@ -471,10 +536,14 @@ Public Class dlgEndOfRainsSeason ' Doy summary clsEndSeasonFirstDoySummaryCalc.Clear() + clsEndSeasonFirstDoySummaryCalcFilledFunction.Clear() clsIfElseFirstDoyFunction.Clear() + clsIfElseFirstDoyFilledFunction.Clear() + clsAssignOperator.Clear() clsIsNaFirstWB.Clear() clsFirstDoyFunction.Clear() clsFirstWBFunction.Clear() + clsrunfilledFunction.Clear() ' Date summary clsEndSeasonFirstDateSummaryCalc.Clear() @@ -486,9 +555,11 @@ Public Class dlgEndOfRainsSeason ' Combination clsEndSeasonCombinationCalc.Clear() + clsEndSeasonCombinationCalcStatusFunction.Clear() clsEndSeasonCombinationManipulationList.Clear() + clsEndSeasonCombinationManipulationListStatusFunction.Clear() clsEndSeasonCombinationSubCalcList.Clear() - + clsEndSeasonCombinationSubCalcListStatusFunction.Clear() #End Region ucrSelectorForWaterBalance.Reset() @@ -513,17 +584,17 @@ Public Class dlgEndOfRainsSeason clsGroupByStationCalc.SetAssignTo("grouping_by_station") ' Doy Filter - clsDoyFilterCalcFromConvert.SetRCommand("calc_from_convert") - clsDoyFilterCalcFromConvert.AddParameter("x", clsRFunctionParameter:=clsDoyFilterCalcFromList, iPosition:=0) - - clsDoyFilterCalcFromList.SetRCommand("list") - clsDoyFilterCalc.SetRCommand("instat_calculation$new") clsDoyFilterCalc.AddParameter("type", Chr(34) & "filter" & Chr(34), iPosition:=0) clsDoyFilterCalc.AddParameter("function_exp", clsROperatorParameter:=clsDoyFilterOperator, iPosition:=1) clsDoyFilterCalc.AddParameter("calculated_from", clsRFunctionParameter:=clsDoyFilterCalcFromConvert, iPosition:=2) clsDoyFilterCalc.SetAssignTo(strDoyFilter) + clsDoyFilterCalcFromConvert.SetRCommand("calc_from_convert") + clsDoyFilterCalcFromConvert.AddParameter("x", clsRFunctionParameter:=clsDoyFilterCalcFromList, iPosition:=0) + + clsDoyFilterCalcFromList.SetRCommand("list") + clsDoyFilterOperator.SetOperation("&") clsDoyFilterOperator.AddParameter("from_operator", clsROperatorParameter:=clsDayFromOperator, iPosition:=0) clsDoyFilterOperator.AddParameter("to_operator", clsROperatorParameter:=clsDayToOperator, iPosition:=1) @@ -619,11 +690,29 @@ Public Class dlgEndOfRainsSeason ' Status summary clsEndRainsStatusSummaryCalc.SetRCommand("instat_calculation$new") clsEndRainsStatusSummaryCalc.AddParameter("type", Chr(34) & "summary" & Chr(34), iPosition:=0) - clsEndRainsStatusSummaryCalc.AddParameter("function_exp", Chr(34) & "n() > 0" & Chr(34), iPosition:=1) + clsEndRainsStatusSummaryCalc.AddParameter("function_exp", clsRFunctionParameter:=clsElseIfENdRainStatusFunction, iPosition:=1) clsEndRainsStatusSummaryCalc.AddParameter("result_name", Chr(34) & strEndRainsStatus & Chr(34), iPosition:=3) clsEndRainsStatusSummaryCalc.AddParameter("save", 2, iPosition:=4) clsEndRainsStatusSummaryCalc.SetAssignTo(strEndRainsStatus) + clsElseIfENdRainStatusFunction.SetRCommand("ifelse") + clsElseIfENdRainStatusFunction.bToScriptAsRString = True + clsElseIfENdRainStatusFunction.AddParameter("x", "n() > 0", iPosition:=0, bIncludeArgumentName:=False) + clsElseIfENdRainStatusFunction.AddParameter("yes", clsRFunctionParameter:=clsElseIfRainFunction, iPosition:=1) + clsElseIfENdRainStatusFunction.AddParameter("no", "FALSE", iPosition:=2) + + clsElseIfRainFunction.SetRCommand("ifelse") + clsElseIfRainFunction.AddParameter("y", clsRFunctionParameter:=clsnaIsRainFunction, iPosition:=0, bIncludeArgumentName:=False) + clsElseIfRainFunction.AddParameter("yes", "NA", iPosition:=1) + clsElseIfRainFunction.AddParameter("no", "TRUE", iPosition:=2) + + clsnaIsRainFunction.SetRCommand("is.na") + clsnaIsRainFunction.AddParameter("x", clsRFunctionParameter:=clsLastFunction, iPosition:=1) + + clsLastFunction.SetPackageName("dplyr") + clsLastFunction.SetRCommand("last") + clsLastFunction.AddParameter("x", strRollSumRain, iPosition:=0) + ' Combined clsEndRainsCombinationCalc.SetRCommand("instat_calculation$new") clsEndRainsCombinationCalc.AddParameter("type", Chr(34) & "combination" & Chr(34), iPosition:=0) @@ -648,16 +737,17 @@ Public Class dlgEndOfRainsSeason clsEndRainsCombinationSubCalcList.SetRCommand("list") clsEndRainsCombinationSubCalcList.AddParameter("sub1", clsRFunctionParameter:=clsEndRainsLastDoySummaryCalc, bIncludeArgumentName:=False, iPosition:=0) + clsEndRainsCombinationSubCalcList.AddParameter("sub2", clsRFunctionParameter:=clsEndRainsLastDateSummaryCalc, bIncludeArgumentName:=False, iPosition:=1) + clsEndRainsCombinationSubCalcList.AddParameter("sub3", clsRFunctionParameter:=clsEndRainsStatusSummaryCalc, bIncludeArgumentName:=False, iPosition:=2) clsListCalFunction.SetRCommand("list") clsListCalFunction.AddParameter("drop", "FALSE", iPosition:=0) clsRunCalculation.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$run_instat_calculation") - clsRunCalculation.AddParameter("display", "FALSE") - clsRunCalculation.AddParameter("calc", clsRFunctionParameter:=clsEndRainsCombinationCalc) + clsRunCalculation.AddParameter("display", "FALSE", iPosition:=0) + clsRunCalculation.AddParameter("calc", clsRFunctionParameter:=clsEndRainsCombinationCalc, iPosition:=1) clsRunCalculation.AddParameter("param_list", clsRFunctionParameter:=clsListCalFunction, iPosition:=2) - ucrBase.clsRsyntax.SetBaseRFunction(clsRunCalculation) #End Region #Region "end_of_season" @@ -685,7 +775,7 @@ Public Class dlgEndOfRainsSeason clsIfElseRainMaxFunction.bToScriptAsRString = True clsIfElseRainMaxFunction.SetRCommand("ifelse") clsIfElseRainMaxFunction.AddParameter("test", clsRFunctionParameter:=clsEndSeasonIsNaRain, iPosition:=0) - clsIfElseRainMaxFunction.AddParameter("yes", 100, iPosition:=0) + clsIfElseRainMaxFunction.AddParameter("yes", 100, iPosition:=1) 'Pmax clsPMaxFunction.SetRCommand("pmax") @@ -713,15 +803,15 @@ Public Class dlgEndOfRainsSeason clsReduceWBMinFunction1.bToScriptAsRString = True clsReduceWBMinFunction1.SetPackageName("purrr") clsReduceWBMinFunction1.SetRCommand("accumulate2") - clsReduceWBMinFunction1.AddParameter(".f", clsRFunctionParameter:=clsPMinWBMinFunction, iPosition:=0) - clsReduceWBMinFunction1.AddParameter(".x", clsRFunctionParameter:=clsWBMinTailFunction, iPosition:=1) + clsReduceWBMinFunction1.AddParameter(".x", clsRFunctionParameter:=clsWBMinTailFunction, iPosition:=0) + clsReduceWBMinFunction1.AddParameter(".f", clsRFunctionParameter:=clsPMinWBMinFunction, iPosition:=1) clsReduceWBMinFunction1.AddParameter(".init", "0", iPosition:=2) clsReduceWBMinFunction2.bToScriptAsRString = True clsReduceWBMinFunction2.SetPackageName("purrr") clsReduceWBMinFunction2.SetRCommand("accumulate") - clsReduceWBMinFunction2.AddParameter(".f", clsRFunctionParameter:=clsPMinWBMinFunction, iPosition:=0) - clsReduceWBMinFunction2.AddParameter(".x", clsRFunctionParameter:=clsWBMinTailFunction2, iPosition:=1) + clsReduceWBMinFunction2.AddParameter(".x", clsRFunctionParameter:=clsWBMinTailFunction2, iPosition:=0) + clsReduceWBMinFunction2.AddParameter(".f", clsRFunctionParameter:=clsPMinWBMinFunction, iPosition:=1) clsReduceWBMinFunction2.AddParameter(".init", "0", iPosition:=2) clsPMinWBMinFunction.SetRCommand(" ~ pmin") @@ -841,12 +931,12 @@ Public Class dlgEndOfRainsSeason ' Conditions filter clsEndSeasonConditionsFilterCalc.SetRCommand("instat_calculation$new") clsEndSeasonConditionsFilterCalc.AddParameter("type", Chr(34) & "filter" & Chr(34), iPosition:=0) - clsEndSeasonConditionsFilterCalc.AddParameter("function_exp", clsROperatorParameter:=clsEndSeasonConditionsOperator, iPosition:=1) + clsEndSeasonConditionsFilterCalc.AddParameter("function_exp", Chr(34) & "conditions_check == 1" & Chr(34), iPosition:=1) clsEndSeasonConditionsFilterCalc.AddParameter("sub_calculations", clsRFunctionParameter:=clsEndSeasonConditionsFilterSubCalcsList, iPosition:=4) clsEndSeasonConditionsFilterCalc.SetAssignTo(strConditionsFilter) clsEndSeasonConditionsFilterSubCalcsList.SetRCommand("list") - clsEndSeasonConditionsFilterSubCalcsList.AddParameter("sub1", clsRFunctionParameter:=clsEndSeasonWBCalc, iPosition:=0, bIncludeArgumentName:=False) + clsEndSeasonConditionsFilterSubCalcsList.AddParameter("sub1", clsRFunctionParameter:=clsConditionCheckFunction, iPosition:=0, bIncludeArgumentName:=False) clsEndSeasonConditionsOperator.bToScriptAsRString = True clsEndSeasonConditionsOperator.SetOperation("|") @@ -865,12 +955,35 @@ Public Class dlgEndOfRainsSeason clsEndSeasonFirstDoySummaryCalc.AddParameter("save", "2", iPosition:=6) clsEndSeasonFirstDoySummaryCalc.SetAssignTo(strEndSeason) + clsEndSeasonFirstDoySummaryCalcFilledFunction.SetRCommand("instat_calculation$new") + clsEndSeasonFirstDoySummaryCalcFilledFunction.AddParameter("type", Chr(34) & "calculation" & Chr(34), iPosition:=0) + clsEndSeasonFirstDoySummaryCalcFilledFunction.AddParameter("function_exp", clsRFunctionParameter:=clsIfElseFirstDoyFilledFunction, iPosition:=1) + clsEndSeasonFirstDoySummaryCalcFilledFunction.AddParameter("result_name", Chr(34) & strEndSeasonFilled & Chr(34), iPosition:=3) + clsEndSeasonFirstDoySummaryCalcFilledFunction.AddParameter("save", "2", iPosition:=4) + clsEndSeasonFirstDoySummaryCalcFilledFunction.AddParameter("calculated_from", strCalformlist, iPosition:=2) + clsEndSeasonFirstDoySummaryCalcFilledFunction.SetAssignTo(strEndSeasonFilled) + clsIfElseFirstDoyFunction.bToScriptAsRString = True clsIfElseFirstDoyFunction.SetRCommand("ifelse") clsIfElseFirstDoyFunction.AddParameter("test", clsRFunctionParameter:=clsIsNaFirstWB, iPosition:=0) clsIfElseFirstDoyFunction.AddParameter("yes", "NA", iPosition:=1) clsIfElseFirstDoyFunction.AddParameter("no", clsRFunctionParameter:=clsFirstDoyFunction, iPosition:=2) + clsIfElseFirstDoyFilledFunction.bToScriptAsRString = True + clsIfElseFirstDoyFilledFunction.SetRCommand("ifelse") + clsIfElseFirstDoyFilledFunction.AddParameter("test", clsROperatorParameter:=clsAssignOperator, iPosition:=0, bIncludeArgumentName:=False) + clsIfElseFirstDoyFilledFunction.AddParameter("yes", "366", iPosition:=1) + clsIfElseFirstDoyFilledFunction.AddParameter("no", strEndSeason, iPosition:=2) + + clsAssignOperator.SetOperation("==") + clsAssignOperator.AddParameter("left", strEndSeasonStatus, iPosition:=0, bIncludeArgumentName:=False) + clsAssignOperator.AddParameter("right", "FALSE", iPosition:=1, bIncludeArgumentName:=False) + + clsrunfilledFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$run_instat_calculation") + clsrunfilledFunction.AddParameter("display", "FALSE", iPosition:=0) + clsrunfilledFunction.AddParameter("param_list", clsRFunctionParameter:=clsListCalFunction, iPosition:=1) + clsrunfilledFunction.AddParameter("calc", strEndSeasonFilled, iPosition:=2) + clsIsNaFirstWB.SetRCommand("is.na") clsIsNaFirstWB.AddParameter("x", clsRFunctionParameter:=clsFirstWBFunction, iPosition:=0) @@ -902,11 +1015,30 @@ Public Class dlgEndOfRainsSeason ' Status summary clsEndSeasonStatusSummaryCalc.SetRCommand("instat_calculation$new") clsEndSeasonStatusSummaryCalc.AddParameter("type", Chr(34) & "summary" & Chr(34), iPosition:=0) - clsEndSeasonStatusSummaryCalc.AddParameter("function_exp", Chr(34) & "n() > 0" & Chr(34), iPosition:=1) + clsEndSeasonStatusSummaryCalc.AddParameter("function_exp", clsRFunctionParameter:=clsIfelseStatusFunction, iPosition:=1) clsEndSeasonStatusSummaryCalc.AddParameter("result_name", Chr(34) & strEndSeasonStatus & Chr(34), iPosition:=3) - clsEndSeasonStatusSummaryCalc.AddParameter("save", 2, iPosition:=4) + clsEndSeasonStatusSummaryCalc.AddParameter("sub_calculations", clsRFunctionParameter:=clsListCondCheckFilterFunction, iPosition:=4) + clsEndSeasonStatusSummaryCalc.AddParameter("save", 2, iPosition:=5) clsEndSeasonStatusSummaryCalc.SetAssignTo(strEndSeasonStatus) + clsIfelseStatusFunction.SetRCommand("ifelse") + clsIfelseStatusFunction.bToScriptAsRString = True + clsIfelseStatusFunction.AddParameter("x", "n() == 0", iPosition:=0, bIncludeArgumentName:=False) + clsIfelseStatusFunction.AddParameter("y", "NA", iPosition:=1, bIncludeArgumentName:=False) + clsIfelseStatusFunction.AddParameter("z", clsRFunctionParameter:=clsIfelseStatus1Function, iPosition:=2, bIncludeArgumentName:=False) + + clsIfelseStatus1Function.SetRCommand("ifelse") + clsIfelseStatus1Function.AddParameter("test", clsRFunctionParameter:=clsAllStatusFunction, iPosition:=0, bIncludeArgumentName:=False) + clsIfelseStatus1Function.AddParameter("yes", "FALSE", iPosition:=1, bIncludeArgumentName:=False) + clsIfelseStatus1Function.AddParameter("no", "NA", iPosition:=2, bIncludeArgumentName:=False) + + clsAllStatusFunction.SetRCommand("all") + clsAllStatusFunction.AddParameter("x", "conditions_check == 0", iPosition:=0, bIncludeArgumentName:=False) + clsAllStatusFunction.AddParameter("na.rm", "TRUE", iPosition:=1) + + clsIsNAStatusFunction.SetRCommand("is.na") + clsIsNAStatusFunction.AddParameter("x", strWB, iPosition:=0, bIncludeArgumentName:=False) + ' Combined clsEndSeasonCombinationCalc.SetRCommand("instat_calculation$new") clsEndSeasonCombinationCalc.AddParameter("type", Chr(34) & "combination" & Chr(34), iPosition:=0) @@ -921,18 +1053,173 @@ Public Class dlgEndOfRainsSeason clsEndSeasonCombinationSubCalcList.SetRCommand("list") clsEndSeasonCombinationSubCalcList.AddParameter("sub1", clsRFunctionParameter:=clsEndSeasonFirstDoySummaryCalc, bIncludeArgumentName:=False, iPosition:=0) + clsEndSeasonCombinationSubCalcList.AddParameter("sub2", clsRFunctionParameter:=clsEndSeasonFirstDateSummaryCalc, bIncludeArgumentName:=False, iPosition:=1) + + clsGetColumnDataTypeFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$get_column_data_types") + clsGetColumnDataTypeFunction.SetAssignTo(strYearType) + + clsConvertColumnTypeFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") + clsConvertColumnTypeFunction.AddParameter("to_type", Chr(34) & "factor" & Chr(34), iPosition:=2) + + clsVectorFunction.SetRCommand("c") + + clsConvertColumnType1Function.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") + clsConvertColumnType1Function.AddParameter("to_type", "year_type", iPosition:=2) + + clsConvertlinkedvariableFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_linked_variable") + + clsConvertlinkedvariable1Function.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_linked_variable") + + clsConditionCheckFunction.SetRCommand("instat_calculation$new") + clsConditionCheckFunction.AddParameter("type", Chr(34) & "calculation" & Chr(34), iPosition:=0) + clsConditionCheckFunction.AddParameter("function_exp", clsRFunctionParameter:=clsElseifCondCheckFunction, iPosition:=1) + clsConditionCheckFunction.AddParameter("result_name", Chr(34) & strCondCheck & Chr(34), iPosition:=2) + clsConditionCheckFunction.AddParameter("sub_calculations", clsRFunctionParameter:=clsListCondCheckFunction, iPosition:=3) + clsConditionCheckFunction.SetAssignTo(strCondCheck) + + clsListCondCheckFunction.SetRCommand("list") + clsListCondCheckFunction.AddParameter("x", clsRFunctionParameter:=clsEndSeasonWBCalc, iPosition:=0, bIncludeArgumentName:=False) + + clsElseifCondCheckFunction.bToScriptAsRString = True + clsElseifCondCheckFunction.SetRCommand("ifelse") + clsElseifCondCheckFunction.AddParameter("test", clsROperatorParameter:=clsConditionCheckOperator, iPosition:=0, bIncludeArgumentName:=False) + clsElseifCondCheckFunction.AddParameter("yes", "1", iPosition:=1, bIncludeArgumentName:=False) + clsElseifCondCheckFunction.AddParameter("no", "0", iPosition:=2, bIncludeArgumentName:=False) + + clsConditionCheckOperator.SetOperation("|") + clsConditionCheckOperator.AddParameter("left", clsROperatorParameter:=clsConditionChecksecondOperator, iPosition:=0, bIncludeArgumentName:=False) + clsConditionCheckOperator.AddParameter("riht", clsRFunctionParameter:=clsIsnaConditionCheckFunction, iPosition:=1, bIncludeArgumentName:=False) + + clsConditionChecksecondOperator.SetOperation("<=") + clsConditionChecksecondOperator.AddParameter("left", strWB, iPosition:=0, bIncludeArgumentName:=False) + clsConditionChecksecondOperator.AddParameter("right", "0.5", iPosition:=1, bIncludeArgumentName:=False) + + clsIsnaConditionCheckFunction.SetRCommand("is.na") + + clsConditionsFilterCondCheckFunction.SetRCommand("instat_calculation$new") + clsConditionsFilterCondCheckFunction.AddParameter("type", Chr(34) & "filter" & Chr(34), iPosition:=0) + clsConditionsFilterCondCheckFunction.AddParameter("function_exp", clsROperatorParameter:=clsCheckConditionFilterOperator, iPosition:=1) + clsConditionsFilterCondCheckFunction.AddParameter("sub_calculations", clsRFunctionParameter:=clsListCondCheckFilterFunction, iPosition:=2) + clsConditionsFilterCondCheckFunction.SetAssignTo(strConditionFilterCondCheck) + + clsListCondCheckFilterFunction.SetRCommand("list") + clsListCondCheckFilterFunction.AddParameter("x", strCondCheck, iPosition:=0, bIncludeArgumentName:=False) + + clsCheckConditionFilterOperator.SetOperation("|") + clsCheckConditionFilterOperator.bToScriptAsRString = True + clsCheckConditionFilterOperator.AddParameter("left", "conditions_check == 1", iPosition:=0, bIncludeArgumentName:=False) + clsCheckConditionFilterOperator.AddParameter("right", clsROperatorParameter:=clsCheckSecondConditionFilterOperator, iPosition:=1, bIncludeArgumentName:=False) + + clsCheckSecondConditionFilterOperator.SetOperation("|") + clsCheckSecondConditionFilterOperator.AddParameter("left", clsRFunctionParameter:=clsIsnaSecondConditionFilterFunction, iPosition:=0, bIncludeArgumentName:=False) + clsCheckSecondConditionFilterOperator.AddParameter("right", "conditions_check == 0", iPosition:=1, bIncludeArgumentName:=False) + + clsIsnaSecondConditionFilterFunction.SetRCommand("is.na") + clsIsnaSecondConditionFilterFunction.AddParameter("x", "conditions_check", iPosition:=0, bIncludeArgumentName:=False) + + clsEndSeasonCombinationCalcStatusFunction.SetRCommand("instat_calculation$new") + clsEndSeasonCombinationCalcStatusFunction.AddParameter("type", Chr(34) & "combination" & Chr(34), iPosition:=0) + clsEndSeasonCombinationCalcStatusFunction.AddParameter("manipulations", clsRFunctionParameter:=clsEndSeasonCombinationManipulationListStatusFunction, iPosition:=1) + clsEndSeasonCombinationCalcStatusFunction.AddParameter("sub_calculations", clsRFunctionParameter:=clsEndSeasonCombinationSubCalcListStatusFunction, iPosition:=2) + clsEndSeasonCombinationCalcStatusFunction.SetAssignTo(strEndofSeasonStatus) + + clsEndSeasonCombinationManipulationListStatusFunction.SetRCommand("list") + clsEndSeasonCombinationManipulationListStatusFunction.AddParameter("manip1", strConditionsFilter, bIncludeArgumentName:=False, iPosition:=0) + clsEndSeasonCombinationManipulationListStatusFunction.AddParameter("manip2", "grouping_by_station_year", bIncludeArgumentName:=False, iPosition:=1) + clsEndSeasonCombinationManipulationListStatusFunction.AddParameter("manip3", strDoyFilter, bIncludeArgumentName:=False, iPosition:=2) + + clsEndSeasonCombinationSubCalcListStatusFunction.SetRCommand("list") + clsEndSeasonCombinationSubCalcListStatusFunction.AddParameter("sub3", strEndSeasonStatus, bIncludeArgumentName:=False, iPosition:=0) + + clsRunCalculationStatusFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$run_instat_calculation") + clsRunCalculationStatusFunction.AddParameter("display", "FALSE", iPosition:=0) + clsRunCalculationStatusFunction.AddParameter("param_list", clsRFunctionParameter:=clsListCalFunction, iPosition:=1) + clsRunCalculationStatusFunction.AddParameter("calc", strEndofSeasonStatus, iPosition:=2) + + clsLinkeddataFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$get_linked_to_data_name") + clsLinkeddataFunction.SetAssignTo(strLinkeddata) + + clsVectorCalFormListFunction.SetRCommand("c") + clsVectorCalFormListFunction.AddParameter("x", clsRFunctionParameter:=clsSetNamesEndSeasonStatusFunction, iPosition:=0, bIncludeArgumentName:=False) + clsVectorCalFormListFunction.AddParameter("y", clsRFunctionParameter:=clsSetNamesEndSeasonFunction, iPosition:=1, bIncludeArgumentName:=False) + clsVectorCalFormListFunction.SetAssignTo(strCalformlist) + + clsSetNamesEndSeasonStatusFunction.SetRCommand("setNames") + clsSetNamesEndSeasonStatusFunction.AddParameter("x", Chr(34) & strEndSeasonStatus & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsSetNamesEndSeasonStatusFunction.AddParameter("y", strLinkeddata, iPosition:=1, bIncludeArgumentName:=False) + + clsSetNamesEndSeasonFunction.SetRCommand("setNames") + clsSetNamesEndSeasonFunction.AddParameter("x", Chr(34) & strEndSeason & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsSetNamesEndSeasonFunction.AddParameter("y", strLinkeddata, iPosition:=1, bIncludeArgumentName:=False) + + clsEndSeasonStatus2Function.SetRCommand("instat_calculation$new") + clsEndSeasonStatus2Function.AddParameter("type", Chr(34) & "calculation" & Chr(34), iPosition:=0) + clsEndSeasonStatus2Function.AddParameter("function_exp", clsRFunctionParameter:=clsIfelseStatus2Function, iPosition:=1) + clsEndSeasonStatus2Function.AddParameter("calculated_from", strCalformlist, iPosition:=2) + clsEndSeasonStatus2Function.AddParameter("result_name", Chr(34) & strEndSeasonStatus & Chr(34), iPosition:=4) + clsEndSeasonStatus2Function.AddParameter("save", 2, iPosition:=5) + clsEndSeasonStatus2Function.SetAssignTo(strEndSeasonStatus2) + + clsIfelseStatus2Function.SetRCommand("ifelse") + clsIfelseStatus2Function.bToScriptAsRString = True + clsIfelseStatus2Function.AddParameter("test", clsRFunctionParameter:=clsIsnaStatus2Function, iPosition:=0, bIncludeArgumentName:=False) + clsIfelseStatus2Function.AddParameter("yes", "TRUE", iPosition:=1, bIncludeArgumentName:=False) + clsIfelseStatus2Function.AddParameter("no", strEndSeasonStatus, iPosition:=2, bIncludeArgumentName:=False) + + clsIsnaStatus2Function.SetRCommand("!is.na") + clsIsnaStatus2Function.AddParameter("x", strEndSeason, iPosition:=0, bIncludeArgumentName:=False) + + clsEndSeasonCombiStatus2Function.SetRCommand("instat_calculation$new") + clsEndSeasonCombiStatus2Function.AddParameter("type", Chr(34) & "combination" & Chr(34), iPosition:=0) + clsEndSeasonCombiStatus2Function.AddParameter("sub_calculations", clsRFunctionParameter:=clsEndSeasonCombiStatus2ListFunction, iPosition:=2) + clsEndSeasonCombiStatus2Function.SetAssignTo(strEndSeasonCombiStatus2) + + clsEndSeasonCombiStatus2ListFunction.SetRCommand("list") + clsEndSeasonCombiStatus2ListFunction.AddParameter("x", strEndSeasonStatus2, iPosition:=0, bIncludeArgumentName:=False) + + clsRunCalculationStatus2Function.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$run_instat_calculation") + clsRunCalculationStatus2Function.AddParameter("display", "FALSE", iPosition:=0) + clsRunCalculationStatus2Function.AddParameter("param_list", clsRFunctionParameter:=clsListCalFunction, iPosition:=1) + clsRunCalculationStatus2Function.AddParameter("calc", strEndSeasonCombiStatus2, iPosition:=2) + + clsConvertColumnlinkeddataFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") + clsConvertColumnlinkeddataFunction.AddParameter("data_name", strLinkeddata, iPosition:=0) + clsConvertColumnlinkeddataFunction.AddParameter("to_type", "year_type", iPosition:=2) + + clsStationtypeFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$get_column_data_types") + clsStationtypeFunction.SetAssignTo(strStationType) + + clsConvertColumnTypeStationFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") + clsConvertColumnTypeStationFunction.AddParameter("to_type", Chr(34) & "factor" & Chr(34), iPosition:=2) + + clsDeleteunusedrowFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$remove_unused_station_year_combinations") + #End Region + ucrBase.clsRsyntax.ClearCodes() + + ucrBase.clsRsyntax.AddToBeforeCodes(clsGetColumnDataTypeFunction, iPosition:=0) + ucrBase.clsRsyntax.AddToBeforeCodes(clsConvertColumnTypeFunction, iPosition:=1) + ucrBase.clsRsyntax.AddToBeforeCodes(clsConvertlinkedvariableFunction, iPosition:=4) + ucrBase.clsRsyntax.AddToAfterCodes(clsLinkeddataFunction, iPosition:=4) + ucrBase.clsRsyntax.AddToAfterCodes(clsConvertColumnType1Function, iPosition:=11) + ucrBase.clsRsyntax.AddToAfterCodes(clsConvertColumnlinkeddataFunction, iPosition:=12) + ucrBase.clsRsyntax.SetBaseRFunction(clsRunCalculation) clsFirstOrLastFunction = clsLastDoyFunction + RemoveUnusedRow() + StationType() + EnableFilledvariable() End Sub Private Sub SetRCodeForControls(bReset As Boolean) ucrReceiverDOY.AddAdditionalCodeParameterPair(clsDayFromOperator, New RParameter("doy", 0), iAdditionalPairNo:=1) ucrReceiverDOY.AddAdditionalCodeParameterPair(clsLastDoyFunction, New RParameter("x", 0), iAdditionalPairNo:=2) ucrReceiverDOY.AddAdditionalCodeParameterPair(clsFirstDoyFunction, New RParameter("x", 0), iAdditionalPairNo:=3) + ucrReceiverDOY.AddAdditionalCodeParameterPair(clsFirstFilled1Function, New RParameter("x", 0), iAdditionalPairNo:=4) ucrReceiverRainfall.AddAdditionalCodeParameterPair(clsEndSeasonIsNaRain, New RParameter("x", 0), iAdditionalPairNo:=1) ucrReceiverRainfall.AddAdditionalCodeParameterPair(clsIfElseRainMinFunction, New RParameter("no", 2), iAdditionalPairNo:=2) ucrReceiverRainfall.AddAdditionalCodeParameterPair(clsIfElseRainMaxFunction, New RParameter("no", 2), iAdditionalPairNo:=3) + ucrReceiverRainfall.AddAdditionalCodeParameterPair(clsIsnaConditionCheckFunction, New RParameter("x", 0), iAdditionalPairNo:=4) ucrReceiverEvaporation.AddAdditionalCodeParameterPair(clsWBMaxTailFunction1, New RParameter("x", 0), iAdditionalPairNo:=1) ucrReceiverEvaporation.AddAdditionalCodeParameterPair(clsAsNumericFunction, New RParameter("x", 0), iAdditionalPairNo:=2) ucrReceiverDate.AddAdditionalCodeParameterPair(clsFirstDateFunction, New RParameter("x", 0), iAdditionalPairNo:=1) @@ -946,6 +1233,7 @@ Public Class dlgEndOfRainsSeason ucrInputSeasonDoy.SetRCode(clsEndSeasonFirstDoySummaryCalc, bReset) ucrInputEndofSeasonDate.SetRCode(clsEndSeasonFirstDateSummaryCalc, bReset) ucrInputEndofSeasonOccurence.SetRCode(clsEndSeasonStatusSummaryCalc, bReset) + ucrInputFilled.SetRCode(clsEndSeasonFirstDoySummaryCalcFilledFunction, bReset) ucrReceiverDate.SetRCode(clsLastDateFunction, bReset) @@ -958,17 +1246,17 @@ Public Class dlgEndOfRainsSeason ucrNudWB.SetRCode(clsWBEvaporationMinFunction, bReset) ucrPnlEvaporation.SetRCode(clsWBMinEvapOperator, bReset) ucrReceiverEvaporation.SetRCode(clsWBMinTailFunction1, bReset) + ucrChkFilled.SetRCode(clsEndSeasonCombinationSubCalcList, bReset) + ucrChkEndofRainsDoy.SetRCode(clsEndRainsCombinationSubCalcList, bReset) + ucrChkEndofRainsDate.SetRCode(clsDummyFunction, bReset) + ucrChkEndofRainsOccurence.SetRCode(clsDummyFunction, bReset) + ucrChkEndofSeasonDoy.SetRCode(clsEndSeasonCombinationSubCalcList, bReset) + ucrChkEndofSeasonDate.SetRCode(clsDummyFunction, bReset) + ucrChkEndofSeasonOccurence.SetRCode(clsDummyFunction, bReset) End If - ucrChkEndofSeasonDoy.SetRCode(clsEndSeasonCombinationSubCalcList, bReset) - ucrChkEndofSeasonDate.SetRCode(clsDummyFunction, bReset) - ucrChkEndofSeasonOccurence.SetRCode(clsDummyFunction, bReset) - ucrNudAmount.SetRCode(clsEndRainsRollSumRainConditionOperator, bReset) ucrNudTotalOverDays.SetRCode(clsRollSumRainFunction, bReset) - ucrChkEndofRainsDoy.SetRCode(clsEndRainsCombinationSubCalcList, bReset) - ucrChkEndofRainsDate.SetRCode(clsDummyFunction, bReset) - ucrChkEndofRainsOccurence.SetRCode(clsDummyFunction, bReset) ucrPnlEndOfRainsAndSeasons.SetRCode(clsFirstOrLastFunction, bReset) End Sub @@ -999,6 +1287,8 @@ Public Class dlgEndOfRainsSeason bOkEnabled = False ElseIf ucrChkEndofSeasonOccurence.Checked AndAlso ucrInputEndofSeasonOccurence.IsEmpty Then bOkEnabled = False + ElseIf ucrChkFilled.Checked AndAlso ucrInputFilled.IsEmpty Then + bOkEnabled = False ElseIf rdoValueEvaporation.Checked AndAlso ucrInputEvaporation.IsEmpty Then bOkEnabled = False ElseIf rdoVariableEvaporation.Checked AndAlso ucrReceiverEvaporation.IsEmpty Then @@ -1011,7 +1301,7 @@ Public Class dlgEndOfRainsSeason End Sub Private Sub cmdDoyRange_Click(sender As Object, e As EventArgs) Handles cmdDoyRange.Click - sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDoyFilterCalc, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDoyFilterCalcFromList, strNewMainDataFrame:=ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) + sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDoyFilterCalc, clsNewDayFromOperator:=clsDayFromOperator, clsNewIfElseFirstDoyFilledFunction:=clsIfElseFirstDoyFilledFunction, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDoyFilterCalcFromList, strNewMainDataFrame:=ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) sdgDoyRange.ShowDialog() UpdateDayFilterPreview() End Sub @@ -1043,6 +1333,7 @@ Public Class dlgEndOfRainsSeason End Sub Private Sub DayChange() + clsEndSeasonStatusSummaryCalc.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverDOY.GetVariableNames() & ")", iPosition:=3) clsEndRainsLastDoySummaryCalc.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverDOY.GetVariableNames() & ")", iPosition:=3) clsEndSeasonFirstDoySummaryCalc.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverDOY.GetVariableNames() & ")", iPosition:=3) clsEndRainsLastDateSummaryCalc.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverDate.GetVariableNames() & ")", iPosition:=3) @@ -1054,8 +1345,64 @@ Public Class dlgEndOfRainsSeason clsEndSeasonRainMaxCalc.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverRainfall.GetVariableNames & ")", iPosition:=3) End Sub + Private Sub RemoveUnusedRow() + If Not ucrReceiverStation.IsEmpty AndAlso Not ucrReceiverYear.IsEmpty Then + clsDeleteunusedrowFunction.AddParameter("station", ucrReceiverStation.GetVariableNames(), iPosition:=2) + clsDeleteunusedrowFunction.AddParameter("year", ucrReceiverYear.GetVariableNames(), iPosition:=1) + ucrBase.clsRsyntax.AddToAfterCodes(clsDeleteunusedrowFunction, iPosition:=13) + Else + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsDeleteunusedrowFunction) + clsDeleteunusedrowFunction.RemoveParameterByName("station") + clsDeleteunusedrowFunction.RemoveParameterByName("year") + End If + End Sub + + Private Sub StationType() + If Not ucrReceiverStation.IsEmpty Then + ucrBase.clsRsyntax.AddToBeforeCodes(clsConvertColumnTypeStationFunction, iPosition:=3) + ucrBase.clsRsyntax.AddToBeforeCodes(clsStationtypeFunction, iPosition:=2) + clsVectorFunction.AddParameter("y", ucrReceiverStation.GetVariableNames(), iPosition:=1, bIncludeArgumentName:=False) + clsStationtypeFunction.AddParameter("columns", ucrReceiverStation.GetVariableNames(), iPosition:=1) + clsConvertColumnTypeStationFunction.AddParameter("col_names", ucrReceiverStation.GetVariableNames(), iPosition:=1) + Else + ucrBase.clsRsyntax.RemoveFromBeforeCodes(clsConvertColumnTypeStationFunction) + ucrBase.clsRsyntax.RemoveFromBeforeCodes(clsStationtypeFunction) + clsVectorFunction.RemoveParameterByName("y") + clsConvertColumnTypeStationFunction.RemoveParameterByName("col_names") + clsStationtypeFunction.RemoveParameterByName("columns") + End If + End Sub + + Private Sub YearStationVariable() + If Not ucrReceiverYear.IsEmpty Then + clsVectorFunction.AddParameter("x", ucrReceiverYear.GetVariableNames(), iPosition:=0, bIncludeArgumentName:=False) + clsConvertlinkedvariableFunction.AddParameter("link_cols", clsRFunctionParameter:=clsVectorFunction, iPosition:=1) + clsConvertlinkedvariable1Function.AddParameter("link_cols", clsRFunctionParameter:=clsVectorFunction, iPosition:=1) + clsLinkeddataFunction.AddParameter("link_cols", clsRFunctionParameter:=clsVectorFunction, iPosition:=1) + Else + clsLinkeddataFunction.RemoveParameterByName("link_cols") + clsConvertlinkedvariableFunction.RemoveParameterByName("link_cols") + clsConvertlinkedvariable1Function.RemoveParameterByName("link_cols") + clsVectorFunction.RemoveParameterByName("x") + End If + End Sub + Private Sub ucrReceiverStationYear_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrReceiverYear.ControlValueChanged, ucrReceiverStation.ControlValueChanged GroupingBy() + YearStationVariable() + RemoveUnusedRow() + StationType() + If Not ucrReceiverYear.IsEmpty Then + clsGetColumnDataTypeFunction.AddParameter("columns", ucrReceiverYear.GetVariableNames(), iPosition:=1) + clsConvertColumnTypeFunction.AddParameter("col_names", ucrReceiverYear.GetVariableNames(), iPosition:=1) + clsConvertColumnType1Function.AddParameter("col_names", ucrReceiverYear.GetVariableNames(), iPosition:=1) + clsConvertColumnlinkeddataFunction.AddParameter("col_names", ucrReceiverYear.GetVariableNames(), iPosition:=1) + Else + clsConvertColumnlinkeddataFunction.RemoveParameterByName("col_names") + clsConvertColumnType1Function.RemoveParameterByName("col_names") + clsGetColumnDataTypeFunction.RemoveParameterByName("columns") + clsConvertColumnTypeFunction.RemoveParameterByName("col_names") + End If End Sub Private Sub ucrReceiverDOY_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrReceiverDOY.ControlValueChanged, ucrSelectorForWaterBalance.ControlValueChanged @@ -1076,6 +1423,16 @@ Public Class dlgEndOfRainsSeason Private Sub ucrSelectorForWaterBalance_DataFrameChanged() Handles ucrSelectorForWaterBalance.DataFrameChanged clsDoyFilterCalcFromList.ClearParameters() + clsGetColumnDataTypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertColumnTypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertColumnType1Function.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertlinkedvariableFunction.AddParameter("from_data_frame", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertlinkedvariable1Function.AddParameter("from_data_frame", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertColumnTypeStationFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsStationtypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertColumnTypeStationFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsLinkeddataFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsDeleteunusedrowFunction.AddParameter("data_name", Chr(34) & ucrSelectorForWaterBalance.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) End Sub Private Sub ucrPnlEvaporation_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrPnlEvaporation.ControlValueChanged, ucrReceiverEvaporation.ControlValueChanged, ucrInputEvaporation.ControlValueChanged @@ -1135,11 +1492,39 @@ Public Class dlgEndOfRainsSeason End If End Sub - Private Sub ucrPnlEndOfRainsAndSeasons_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrPnlEndOfRainsAndSeasons.ControlValueChanged + Private Sub ucrPnlEndOfRainsAndSeasons_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrPnlEndOfRainsAndSeasons.ControlValueChanged, ucrChkEndofSeasonOccurence.ControlValueChanged If rdoEndOfRains.Checked Then + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsConditionsFilterCondCheckFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonStatusSummaryCalc) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonCombinationCalcStatusFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsRunCalculationStatusFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsVectorCalFormListFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonStatus2Function) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonCombiStatus2Function) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsRunCalculationStatus2Function) + clsRunCalculation.AddParameter("calc", clsRFunctionParameter:=clsEndRainsCombinationCalc) clsFirstOrLastFunction = clsLastDoyFunction Else + If ucrChkEndofSeasonOccurence.Checked Then + ucrBase.clsRsyntax.AddToAfterCodes(clsConditionsFilterCondCheckFunction, iPosition:=0) + ucrBase.clsRsyntax.AddToAfterCodes(clsEndSeasonStatusSummaryCalc, iPosition:=1) + ucrBase.clsRsyntax.AddToAfterCodes(clsEndSeasonCombinationCalcStatusFunction, iPosition:=2) + ucrBase.clsRsyntax.AddToAfterCodes(clsRunCalculationStatusFunction, iPosition:=3) + ucrBase.clsRsyntax.AddToAfterCodes(clsVectorCalFormListFunction, iPosition:=5) + ucrBase.clsRsyntax.AddToAfterCodes(clsEndSeasonStatus2Function, iPosition:=6) + ucrBase.clsRsyntax.AddToAfterCodes(clsEndSeasonCombiStatus2Function, iPosition:=7) + ucrBase.clsRsyntax.AddToAfterCodes(clsRunCalculationStatus2Function, iPosition:=8) + Else + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsConditionsFilterCondCheckFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonStatusSummaryCalc) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsRunCalculationStatusFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonCombinationCalcStatusFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsVectorCalFormListFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonStatus2Function) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonCombiStatus2Function) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsRunCalculationStatus2Function) + End If clsRunCalculation.AddParameter("calc", clsRFunctionParameter:=clsEndSeasonCombinationCalc) clsFirstOrLastFunction = clsFirstDoyFunction Evaporation() @@ -1162,14 +1547,6 @@ Public Class dlgEndOfRainsSeason End If End Sub - Private Sub ucrChkEndofSeasonOccurence_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrChkEndofSeasonOccurence.ControlValueChanged - If ucrChkEndofSeasonOccurence.Checked Then - clsEndSeasonCombinationSubCalcList.AddParameter("sub3", clsRFunctionParameter:=clsEndSeasonStatusSummaryCalc, bIncludeArgumentName:=False, iPosition:=2) - Else - clsEndSeasonCombinationSubCalcList.RemoveParameterByName("sub3") - End If - End Sub - Private Sub ucrChkEndofSeasonDoy_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrChkEndofSeasonDoy.ControlValueChanged If ucrChkEndofSeasonDoy.Checked Then clsEndSeasonCombinationSubCalcList.AddParameter("sub1", clsRFunctionParameter:=clsEndSeasonFirstDoySummaryCalc, bIncludeArgumentName:=False, iPosition:=0) @@ -1207,11 +1584,26 @@ Public Class dlgEndOfRainsSeason End Sub Private Sub ucrNudWBLessThan_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrNudWBLessThan.ControlValueChanged, ucrChkEndofSeasonOccurence.ControlValueChanged, ucrInputEndofSeasonOccurence.ControlValueChanged, ucrChkEndofSeasonDate.ControlValueChanged, ucrInputEndofSeasonDate.ControlValueChanged, ucrChkEndofSeasonDoy.ControlValueChanged, ucrInputSeasonDoy.ControlValueChanged, ucrSelectorForWaterBalance.ControlValueChanged + EnableFilledvariable() If Not ucrNudWBLessThan.IsEmpty Then clsEndSeasonWBConditionOperator.AddParameter("1", ucrNudWBLessThan.GetText(), iPosition:=1) Else clsEndSeasonWBConditionOperator.RemoveParameterByName("1") End If - 'Evaporation() + End Sub + + Private Sub ucrChkFilled_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrChkFilled.ControlValueChanged + EnableFilledvariable() + End Sub + + Private Sub EnableFilledvariable() + If ucrChkFilled.Checked Then + ucrBase.clsRsyntax.AddToAfterCodes(clsEndSeasonFirstDoySummaryCalcFilledFunction, iPosition:=9) + ucrBase.clsRsyntax.AddToAfterCodes(clsrunfilledFunction, iPosition:=10) + Else + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsrunfilledFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsEndSeasonFirstDoySummaryCalcFilledFunction) + End If + ucrChkFilled.Enabled = ucrChkEndofSeasonOccurence.Checked End Sub End Class \ No newline at end of file diff --git a/instat/dlgExtremesClimatic.vb b/instat/dlgExtremesClimatic.vb index 06d745e640..6fb03d26cb 100644 --- a/instat/dlgExtremesClimatic.vb +++ b/instat/dlgExtremesClimatic.vb @@ -22,7 +22,7 @@ Public Class dlgExtremesClimatic Private bUpdateMinMax As Boolean = True Private clsExtreme As New RFunction Private strCurrDataName As String = "" - Private clsGroupByFunction, clsRunCalcFunction, clsDayFromAndTo, clsDayManipulation As New RFunction + Private clsGroupByFunction, clsIfElseFirstDoyFilledFunction, clsRunCalcFunction, clsDayFromAndTo, clsDayManipulation As New RFunction Private clsDayFilterCalcFromConvert, clsDayFilterCalcFromList As New RFunction Private clsDayFromAndToOperator, clsDayFromOperator, clsDayToOperator As New ROperator Private clsCurrCalc As RFunction @@ -334,6 +334,7 @@ Public Class dlgExtremesClimatic clsPlotMrlFunction = New RFunction clsThresholdPlotFunction = New RFunction clsDeclusteringFunction = New RFunction + clsIfElseFirstDoyFilledFunction = New RFunction clsDummyRfunction = clsPlotMrlFunction ucrSelectorClimaticExtremes.Reset() @@ -637,7 +638,7 @@ Public Class dlgExtremesClimatic End Sub Private Sub cmdDoyRange_Click(sender As Object, e As EventArgs) Handles cmdDoyRange.Click - sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFromAndTo, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorClimaticExtremes.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) + sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFromAndTo, clsNewIfElseFirstDoyFilledFunction:=clsIfElseFirstDoyFilledFunction, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorClimaticExtremes.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) sdgDoyRange.ShowDialog() UpdateDayFilterPreview() End Sub diff --git a/instat/dlgScript.Designer.vb b/instat/dlgScript.Designer.vb index a5686b7ed2..8df12cb676 100644 --- a/instat/dlgScript.Designer.vb +++ b/instat/dlgScript.Designer.vb @@ -92,6 +92,14 @@ Partial Class dlgScript Me.clmDesc = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) Me.Label3 = New System.Windows.Forms.Label() Me.ucrCboExamplePackages = New instat.ucrInputComboBox() + Me.tbPageRepeat = New System.Windows.Forms.TabPage() + Me.lblColumns = New System.Windows.Forms.Label() + Me.ucrReceiverColumns = New instat.ucrReceiverSingle() + Me.lblExpression = New System.Windows.Forms.Label() + Me.ucrReceiverForCalculation = New instat.ucrReceiverExpression() + Me.lblSelectColumns = New System.Windows.Forms.Label() + Me.ucrReceiverRank = New instat.ucrReceiverSingle() + Me.ucrSelectorForRank = New instat.ucrSelectorByDataFrameAddRemove() Me.lblPreview = New System.Windows.Forms.Label() Me.txtScript = New System.Windows.Forms.TextBox() Me.ucrBase = New instat.ucrButtons() @@ -100,6 +108,7 @@ Partial Class dlgScript Me.tbPageGetData.SuspendLayout() Me.tbPageCommand.SuspendLayout() Me.tbPageExamples.SuspendLayout() + Me.tbPageRepeat.SuspendLayout() Me.SuspendLayout() ' 'tbFeatures @@ -108,6 +117,7 @@ Partial Class dlgScript Me.tbFeatures.Controls.Add(Me.tbPageGetData) Me.tbFeatures.Controls.Add(Me.tbPageCommand) Me.tbFeatures.Controls.Add(Me.tbPageExamples) + Me.tbFeatures.Controls.Add(Me.tbPageRepeat) Me.tbFeatures.Location = New System.Drawing.Point(8, 7) Me.tbFeatures.Name = "tbFeatures" Me.tbFeatures.SelectedIndex = 0 @@ -250,8 +260,9 @@ Partial Class dlgScript Me.ucrChkDisplayGraph.AutoSize = True Me.ucrChkDisplayGraph.Checked = False Me.ucrChkDisplayGraph.Location = New System.Drawing.Point(88, 217) + Me.ucrChkDisplayGraph.Margin = New System.Windows.Forms.Padding(6) Me.ucrChkDisplayGraph.Name = "ucrChkDisplayGraph" - Me.ucrChkDisplayGraph.Size = New System.Drawing.Size(113, 23) + Me.ucrChkDisplayGraph.Size = New System.Drawing.Size(113, 34) Me.ucrChkDisplayGraph.TabIndex = 60 ' 'ucrChkSaveDataFrameSingle @@ -259,8 +270,9 @@ Partial Class dlgScript Me.ucrChkSaveDataFrameSingle.AutoSize = True Me.ucrChkSaveDataFrameSingle.Checked = False Me.ucrChkSaveDataFrameSingle.Location = New System.Drawing.Point(55, 174) + Me.ucrChkSaveDataFrameSingle.Margin = New System.Windows.Forms.Padding(6) Me.ucrChkSaveDataFrameSingle.Name = "ucrChkSaveDataFrameSingle" - Me.ucrChkSaveDataFrameSingle.Size = New System.Drawing.Size(146, 23) + Me.ucrChkSaveDataFrameSingle.Size = New System.Drawing.Size(146, 34) Me.ucrChkSaveDataFrameSingle.TabIndex = 59 ' 'ucrInputSaveDataFrame @@ -613,8 +625,9 @@ Partial Class dlgScript Me.ucrChkWindow.AutoSize = True Me.ucrChkWindow.Checked = False Me.ucrChkWindow.Location = New System.Drawing.Point(233, 94) + Me.ucrChkWindow.Margin = New System.Windows.Forms.Padding(6) Me.ucrChkWindow.Name = "ucrChkWindow" - Me.ucrChkWindow.Size = New System.Drawing.Size(126, 23) + Me.ucrChkWindow.Size = New System.Drawing.Size(126, 34) Me.ucrChkWindow.TabIndex = 67 ' 'rdoWindow @@ -724,8 +737,9 @@ Partial Class dlgScript Me.ucrChkInto.AutoSize = True Me.ucrChkInto.Checked = False Me.ucrChkInto.Location = New System.Drawing.Point(233, 33) + Me.ucrChkInto.Margin = New System.Windows.Forms.Padding(6) Me.ucrChkInto.Name = "ucrChkInto" - Me.ucrChkInto.Size = New System.Drawing.Size(84, 23) + Me.ucrChkInto.Size = New System.Drawing.Size(84, 34) Me.ucrChkInto.TabIndex = 63 ' 'ucrInputSaveData @@ -781,8 +795,9 @@ Partial Class dlgScript Me.ucrChkOpenRFile.AutoSize = True Me.ucrChkOpenRFile.Checked = False Me.ucrChkOpenRFile.Location = New System.Drawing.Point(156, 64) + Me.ucrChkOpenRFile.Margin = New System.Windows.Forms.Padding(6) Me.ucrChkOpenRFile.Name = "ucrChkOpenRFile" - Me.ucrChkOpenRFile.Size = New System.Drawing.Size(100, 23) + Me.ucrChkOpenRFile.Size = New System.Drawing.Size(100, 34) Me.ucrChkOpenRFile.TabIndex = 53 ' 'ucrInputChooseFile @@ -958,6 +973,108 @@ Partial Class dlgScript Me.ucrCboExamplePackages.Size = New System.Drawing.Size(137, 21) Me.ucrCboExamplePackages.TabIndex = 51 ' + 'tbPageRepeat + ' + Me.tbPageRepeat.Controls.Add(Me.lblColumns) + Me.tbPageRepeat.Controls.Add(Me.ucrReceiverColumns) + Me.tbPageRepeat.Controls.Add(Me.lblExpression) + Me.tbPageRepeat.Controls.Add(Me.ucrReceiverForCalculation) + Me.tbPageRepeat.Controls.Add(Me.lblSelectColumns) + Me.tbPageRepeat.Controls.Add(Me.ucrReceiverRank) + Me.tbPageRepeat.Controls.Add(Me.ucrSelectorForRank) + Me.tbPageRepeat.Location = New System.Drawing.Point(4, 22) + Me.tbPageRepeat.Name = "tbPageRepeat" + Me.tbPageRepeat.Padding = New System.Windows.Forms.Padding(3) + Me.tbPageRepeat.Size = New System.Drawing.Size(438, 278) + Me.tbPageRepeat.TabIndex = 5 + Me.tbPageRepeat.Text = "Repeat" + Me.tbPageRepeat.UseVisualStyleBackColor = True + ' + 'lblColumns + ' + Me.lblColumns.AutoSize = True + Me.lblColumns.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lblColumns.Location = New System.Drawing.Point(248, 83) + Me.lblColumns.Name = "lblColumns" + Me.lblColumns.Size = New System.Drawing.Size(50, 13) + Me.lblColumns.TabIndex = 124 + Me.lblColumns.Tag = "" + Me.lblColumns.Text = "Columns:" + ' + 'ucrReceiverColumns + ' + Me.ucrReceiverColumns.AutoSize = True + Me.ucrReceiverColumns.frmParent = Nothing + Me.ucrReceiverColumns.Location = New System.Drawing.Point(246, 101) + Me.ucrReceiverColumns.Margin = New System.Windows.Forms.Padding(0) + Me.ucrReceiverColumns.Name = "ucrReceiverColumns" + Me.ucrReceiverColumns.Selector = Nothing + Me.ucrReceiverColumns.Size = New System.Drawing.Size(120, 20) + Me.ucrReceiverColumns.strNcFilePath = "" + Me.ucrReceiverColumns.TabIndex = 123 + Me.ucrReceiverColumns.ucrSelector = Nothing + ' + 'lblExpression + ' + Me.lblExpression.AutoSize = True + Me.lblExpression.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lblExpression.Location = New System.Drawing.Point(12, 213) + Me.lblExpression.Margin = New System.Windows.Forms.Padding(2, 0, 2, 0) + Me.lblExpression.Name = "lblExpression" + Me.lblExpression.Size = New System.Drawing.Size(58, 13) + Me.lblExpression.TabIndex = 122 + Me.lblExpression.Tag = "Expression" + Me.lblExpression.Text = "Statement:" + ' + 'ucrReceiverForCalculation + ' + Me.ucrReceiverForCalculation.AutoSize = True + Me.ucrReceiverForCalculation.frmParent = Nothing + Me.ucrReceiverForCalculation.Location = New System.Drawing.Point(9, 235) + Me.ucrReceiverForCalculation.Margin = New System.Windows.Forms.Padding(2) + Me.ucrReceiverForCalculation.Name = "ucrReceiverForCalculation" + Me.ucrReceiverForCalculation.Selector = Nothing + Me.ucrReceiverForCalculation.Size = New System.Drawing.Size(390, 30) + Me.ucrReceiverForCalculation.strNcFilePath = "" + Me.ucrReceiverForCalculation.TabIndex = 121 + Me.ucrReceiverForCalculation.ucrSelector = Nothing + ' + 'lblSelectColumns + ' + Me.lblSelectColumns.AutoSize = True + Me.lblSelectColumns.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lblSelectColumns.Location = New System.Drawing.Point(248, 32) + Me.lblSelectColumns.Name = "lblSelectColumns" + Me.lblSelectColumns.Size = New System.Drawing.Size(40, 13) + Me.lblSelectColumns.TabIndex = 10 + Me.lblSelectColumns.Tag = "" + Me.lblSelectColumns.Text = "Select:" + ' + 'ucrReceiverRank + ' + Me.ucrReceiverRank.AutoSize = True + Me.ucrReceiverRank.frmParent = Nothing + Me.ucrReceiverRank.Location = New System.Drawing.Point(246, 48) + Me.ucrReceiverRank.Margin = New System.Windows.Forms.Padding(0) + Me.ucrReceiverRank.Name = "ucrReceiverRank" + Me.ucrReceiverRank.Selector = Nothing + Me.ucrReceiverRank.Size = New System.Drawing.Size(145, 20) + Me.ucrReceiverRank.strNcFilePath = "" + Me.ucrReceiverRank.TabIndex = 11 + Me.ucrReceiverRank.ucrSelector = Nothing + ' + 'ucrSelectorForRank + ' + Me.ucrSelectorForRank.AutoSize = True + Me.ucrSelectorForRank.bDropUnusedFilterLevels = False + Me.ucrSelectorForRank.bShowHiddenColumns = False + Me.ucrSelectorForRank.bUseCurrentFilter = True + Me.ucrSelectorForRank.Location = New System.Drawing.Point(12, 16) + Me.ucrSelectorForRank.Margin = New System.Windows.Forms.Padding(0) + Me.ucrSelectorForRank.Name = "ucrSelectorForRank" + Me.ucrSelectorForRank.Size = New System.Drawing.Size(318, 274) + Me.ucrSelectorForRank.TabIndex = 9 + ' 'lblPreview ' Me.lblPreview.AutoSize = True @@ -992,7 +1109,7 @@ Partial Class dlgScript Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi Me.AutoSize = True - Me.ClientSize = New System.Drawing.Size(458, 489) + Me.ClientSize = New System.Drawing.Size(458, 467) Me.Controls.Add(Me.txtScript) Me.Controls.Add(Me.lblPreview) Me.Controls.Add(Me.tbFeatures) @@ -1012,6 +1129,8 @@ Partial Class dlgScript Me.tbPageCommand.PerformLayout() Me.tbPageExamples.ResumeLayout(False) Me.tbPageExamples.PerformLayout() + Me.tbPageRepeat.ResumeLayout(False) + Me.tbPageRepeat.PerformLayout() Me.ResumeLayout(False) Me.PerformLayout() @@ -1090,4 +1209,12 @@ Partial Class dlgScript Friend WithEvents ucrInputDataframeColumn As ucrInputTextBox Friend WithEvents ucrInputSaveColumn As ucrInputTextBox Friend WithEvents rdoVariable As RadioButton + Friend WithEvents tbPageRepeat As TabPage + Friend WithEvents lblSelectColumns As Label + Friend WithEvents ucrReceiverRank As ucrReceiverSingle + Friend WithEvents ucrSelectorForRank As ucrSelectorByDataFrameAddRemove + Friend WithEvents ucrReceiverForCalculation As ucrReceiverExpression + Friend WithEvents lblExpression As Label + Friend WithEvents lblColumns As Label + Friend WithEvents ucrReceiverColumns As ucrReceiverSingle End Class diff --git a/instat/dlgScript.vb b/instat/dlgScript.vb index 2f8f71f0b7..8604fd5f5c 100644 --- a/instat/dlgScript.vb +++ b/instat/dlgScript.vb @@ -20,7 +20,7 @@ Public Class dlgScript Private strComment As String = "Code generated by the dialog, Script" Private bFirstload As Boolean = True Private clsSaveDataFunction As New RFunction - Private clsGetRObjectFunction As New RFunction + Private clsGetRObjectFunction, clsGetSelectedDataFrameFunction As New RFunction Private dctOutputObjectTypes As New Dictionary(Of String, String) Private dctOutputObjectFormats As New Dictionary(Of String, String) @@ -96,6 +96,8 @@ Public Class dlgScript ucrReceiverGetColumns.Selector = ucrSelectorGetObject ucrReceiverGetColumns.SetLinkedDisplayControl(lblGetColumn) + ucrReceiverColumns.Selector = ucrSelectorForRank + ucrCboGetOutputObjectType.SetItems(dctOutputObjectTypes, bSetConditions:=False) ucrCboGetOutputObjectType.SetDropDownStyleAsNonEditable() ucrCboGetOutputObjectType.SetLinkedDisplayControl(lblGetObjectType) @@ -152,6 +154,15 @@ Public Class dlgScript ucrBase.bAddScriptToScriptWindowOnClickOk = False ucrBase.bMakeVisibleScriptWindow = False + ucrReceiverRank.SetParameter(New RParameter("x", 0)) + ucrReceiverRank.Selector = ucrSelectorForRank + ucrReceiverRank.SetMeAsReceiver() + ucrReceiverRank.bUseFilteredData = False + ucrReceiverRank.SetParameterIsRFunction() + + ucrSelectorForRank.SetItemType("column_selection") + ucrReceiverRank.strSelectorHeading = "Column selections" + End Sub 'todo. this function should eventually be removed once we have a control that displays packages @@ -197,7 +208,8 @@ Public Class dlgScript ucrDataFrameGetDF.Reset() rdoGetDataFrame.Checked = True rdoDataFrame.Checked = True - + ucrSelectorForRank.Reset() + ucrReceiverForCalculation.Clear() 'activate the selected tab to library tab tbFeatures.SelectedIndex = -1 tbFeatures.SelectedTab = tbPageSaveData @@ -840,4 +852,47 @@ Public Class dlgScript PreviewScript(strScript) End Sub + Private Function ConstructScript(strSelectedScript As String, strVariable As String, strDataFrame As String) As String + + ' Extract the LHS variable + Dim match As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(strSelectedScript, "(\S+)\s*<-\s*(.*)") + Dim lhsVariable As String = If(match.Success, match.Groups(1).Value, "calc") ' Default to "calc" if no match + Dim rhs As String = If(match.Success, match.Groups(2).Value, strSelectedScript) + + ' Modify RHS with the selected variable + Dim modifiedRhs As String = If(Not String.IsNullOrEmpty(strVariable), rhs.Replace(strVariable, $"{strDataFrame}[[.x]]"), rhs) + + ' Construct the main script using string interpolation + Dim strConstructedScript As String = $" + {lhsVariable} <- purrr::map(.x = {"names(" & lhsVariable & ")"}, + .f = ~{modifiedRhs}) %>% + dplyr::bind_cols(.)" + Dim strAssignedScript As String = "" + + ' Get the selected data frame columns + Dim clsGetSelectedDataFrameFunction As New RFunction + clsGetSelectedDataFrameFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$get_data_frame") + clsGetSelectedDataFrameFunction.AddParameter("data_name", Chr(34) & ucrSelectorForRank.strCurrentDataFrame & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsGetSelectedDataFrameFunction.AddParameter("column_selection_name ", ucrReceiverRank.GetVariableNames, iPosition:=1) + clsGetSelectedDataFrameFunction.SetAssignTo(lhsVariable) + clsGetSelectedDataFrameFunction.ToScript(strScript:=strAssignedScript) + + ' Prepend the dataframe selection script + strConstructedScript = "#Get the variables in the chosen select." & Environment.NewLine & "# Then do the calculation for each variable in turn, " & Environment.NewLine & "# So produce a new column for each variable in the select." & Environment.NewLine & strAssignedScript & Environment.NewLine & strConstructedScript.Trim() + + Return strConstructedScript + End Function + + Private Sub ucrReceiverForCalculation_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrReceiverForCalculation.ControlValueChanged + PreviewScript(ConstructScript(ucrReceiverForCalculation.GetVariableNames(False), ucrReceiverColumns.GetVariableNames(False), ucrSelectorForRank.strCurrentDataFrame)) + End Sub + + Private Sub ucrReceiverColumns_Enter(sender As Object, e As EventArgs) Handles ucrReceiverColumns.Enter + ucrReceiverColumns.SetItemType("column") + End Sub + + Private Sub ucrReceiverRank_Enter(sender As Object, e As EventArgs) Handles ucrReceiverRank.Enter + ucrSelectorForRank.SetItemType("column_selection") + End Sub + End Class \ No newline at end of file diff --git a/instat/dlgSpells.vb b/instat/dlgSpells.vb index d8db2c82ea..81b979c704 100644 --- a/instat/dlgSpells.vb +++ b/instat/dlgSpells.vb @@ -18,7 +18,7 @@ Imports instat.Translations Public Class dlgSpells Private bFirstload As Boolean = True Private bReset As Boolean = True - Private clsSpellLength, clsMaxSpellManipulation, clsSubSpellLength1 As New RFunction + Private clsSpellLength, clsMaxSpellManipulation, clsIfElseFirstDoyFilledFunction, clsSubSpellLength1 As New RFunction Private clsMaxSpellSummary, clsMaxValueList, clsMaxFunction, clsMaxSpellSubCalcs As New RFunction Private clsDayFilter, clsGroupBy, clsGroupByStation, clsDayFilterCalcFromConvert, clsDayFilterCalcFromList As New RFunction Private clsDayFromAndToOperator, clsDayFromOperator, clsDayToOperator As New ROperator @@ -135,6 +135,7 @@ Public Class dlgSpells clsRSpellFilterSubFunct = New RFunction clsSpellFilterFunction = New RFunction clsDotSpellsFunction = New RFunction + clsIfElseFirstDoyFilledFunction = New RFunction Dim strSpellLogical As String = "spell_day" Dim strSpellName As String = "spell_length" @@ -348,7 +349,7 @@ Public Class dlgSpells End Sub Private Sub cmdDoyRange_Click(sender As Object, e As EventArgs) Handles cmdDoyRange.Click - sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFilter, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorForSpells.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) + sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFilter, clsNewIfElseFirstDoyFilledFunction:=clsIfElseFirstDoyFilledFunction, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorForSpells.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) sdgDoyRange.ShowDialog() UpdateDayFilterPreview() End Sub diff --git a/instat/dlgStartofRains.vb b/instat/dlgStartofRains.vb index ca242b4e7c..a64ddd626b 100644 --- a/instat/dlgStartofRains.vb +++ b/instat/dlgStartofRains.vb @@ -18,12 +18,12 @@ Imports instat.Translations Public Class dlgStartofRains Private bResetSubdialog As Boolean = True - Private clsCalcRainDay, clsCalcStartDOY, clsVectorFunction, clsGetlinkeddataFunction, clsGetDataFrameFunction, clsListevapFunction, clsRollEvaporationFunction, clsFractionEvapFunction, clsSumEvapFunction, clsConvertColumnType1Function, clsConvertColumnType2Function, clsConvertColumnTypeFunction, clsGetColumnDataTypeFunction, clsDummyFunction, clsIfelseStatusFunction, clsIfelseStatus1Function, clsFirstStatusFunction, clsIsNAStatusFunction, clsCalcStartDate, clsCombinationCalc, clsListCalFunction, clsCombinationManipList, clsCombinationSubCalcList, clsListSubCalc, clsManipulationFirstDOYPerYear, clsConditionsFilter, clsCombinedList As New RFunction + Private clsCalcRainDay, clsCalcStartDOY, clsConvertssndLinkedVariableFunction, clsDeleteunusedrowFunction, clsRunStartStatus2Function, clsStartRainCombine2Function, clsListFunction, clsNastatus2Function, clsIfElseStatus2Function, clsStatRainStatus2Function, clsSetnameRainStatusFunction, clsSetnameRainFunction, clsCalculatedListformFunction, clsConvertLinkedvariablesvectorFunction, clsConvertLinkedVariablesFunction, clsStationTypeFunction, clsConvertStationtypeFunction, clsVectorFunction, clsGetlinkeddataFunction, clsGetDataFrameFunction, clsListevapFunction, clsRollEvaporationFunction, clsFractionEvapFunction, clsSumEvapFunction, clsConvertColumnType1Function, clsConvertColumnType2Function, clsConvertColumnTypeFunction, clsGetColumnDataTypeFunction, clsDummyFunction, clsIfelseStatusFunction, clsIfelseStatus1Function, clsFirstStatusFunction, clsIsNAStatusFunction, clsCalcStartDate, clsCombinationCalc, clsListCalFunction, clsCombinationManipList, clsCombinationSubCalcList, clsListSubCalc, clsManipulationFirstDOYPerYear, clsConditionsFilter, clsCombinedList As New RFunction Private clsDayFromAndTo, clsGroupByStation, clsGroupByYear, clsListToTalRain, clsApplyInstatFunction, clsFirstDOY, clsFirstDate As New RFunction Private clsDayFromAndToOperator, clsEvapOperator, clsDayFromOperator, clsDayToOperator, clsRainDayOperator, clsRainDayConditionOperator, clsConditionsAndOperator, clsTRCombineOperator, clsRollingSumRainDayOperator, clsDSCombineOperator, clsDPCombineOperator As New ROperator Private clsDayFilterCalcFromConvert, clsDayFilterCalcFromList As New RFunction - Private clsSpellsFunction As New RFunction + Private clsSpellsFunction, clsIfElseFirstDoyFilledFunction As New RFunction Private clsRainDaySpellsOperator As New ROperator Private clsConditionsOrOverallOperator As New ROperator @@ -238,6 +238,10 @@ Public Class dlgStartofRains Dim strStartDoy As String = "start_rain" Dim strRollSumRainDryPeriod As String = "roll_sum_rain_dry_period" Dim strYearType As String = "year_type" + Dim strStationType As String = "station_type" + Dim strcalculatedfromlist As String = "calculated_from_list" + Dim strStartStatus2 As String = "start_rain_status2" + Dim strstartraincombinedstatus2 As String = "start_rain_combined_status_2" clsRainRollingSumFunction = New RFunction clsGetlinkeddataFunction = New RFunction @@ -246,6 +250,13 @@ Public Class dlgStartofRains clsDayFilterCalcFromConvert = New RFunction clsDayFilterCalcFromList = New RFunction clsDummyFunction = New RFunction + clsIfElseFirstDoyFilledFunction = New RFunction + clsConvertLinkedvariablesvectorFunction = New RFunction + clsSetnameRainStatusFunction = New RFunction + clsSetnameRainFunction = New RFunction + clsIfElseStatus2Function = New RFunction + clsNastatus2Function = New RFunction + clsListFunction = New RFunction clsDayFromAndTo.Clear() clsDayFromAndToOperator.Clear() @@ -275,6 +286,15 @@ Public Class dlgStartofRains clsEvapOperator.Clear() clsRollEvaporationFunction.Clear() clsListevapFunction.Clear() + clsStationTypeFunction.Clear() + clsConvertStationtypeFunction.Clear() + clsConvertLinkedVariablesFunction.Clear() + clsCalculatedListformFunction.Clear() + clsStatRainStatus2Function.Clear() + clsStartRainCombine2Function.Clear() + clsRunStartStatus2Function.Clear() + clsConvertssndLinkedVariableFunction.Clear() + clsDeleteunusedrowFunction.Clear() clsSpellsFunction.Clear() clsRainDaySpellsOperator.Clear() @@ -390,7 +410,7 @@ Public Class dlgStartofRains clsConvertColumnType1Function.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") clsConvertColumnType1Function.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) - clsConvertColumnType1Function.AddParameter("to_type", "year_type", iPosition:=2) + clsConvertColumnType1Function.AddParameter("to_type", strYearType, iPosition:=2) 'TOTAL RAIN: associated with ucrChkTotalRainfall clsCalcRainRollingSum.SetRCommand("instat_calculation$new") @@ -768,8 +788,8 @@ Public Class dlgStartofRains clsVectorFunction.SetRCommand("c") clsConvertColumnType2Function.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") - clsConvertColumnType2Function.AddParameter("data_name", "linked_data_name", iPosition:=0) - clsConvertColumnType2Function.AddParameter("to_type", "year_type", iPosition:=2) + clsConvertColumnType2Function.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertColumnType2Function.AddParameter("to_type", strStationType, iPosition:=2) 'Run Calculations clsListCalFunction.SetRCommand("list") @@ -780,17 +800,82 @@ Public Class dlgStartofRains clsApplyInstatFunction.AddParameter("calc", clsRFunctionParameter:=clsCombinationCalc, iPosition:=0) clsApplyInstatFunction.AddParameter("param_list", clsRFunctionParameter:=clsListCalFunction, iPosition:=2) + clsStationTypeFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$get_column_data_types") + clsStationTypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsStationTypeFunction.SetAssignTo(strStationType) + + clsConvertStationtypeFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_column_to_type") + clsConvertStationtypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertStationtypeFunction.AddParameter("to_type", Chr(34) & "factor" & Chr(34), iPosition:=2) + + clsConvertLinkedVariablesFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_linked_variable") + clsConvertLinkedVariablesFunction.AddParameter("from_data_frame", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertLinkedVariablesFunction.AddParameter("link_cols", clsRFunctionParameter:=clsConvertLinkedvariablesvectorFunction, iPosition:=2) + + clsConvertLinkedvariablesvectorFunction.SetRCommand("c") + + clsCalculatedListformFunction.SetRCommand("c") + clsCalculatedListformFunction.AddParameter("x", clsRFunctionParameter:=clsSetnameRainStatusFunction, iPosition:=0, bIncludeArgumentName:=False) + clsCalculatedListformFunction.AddParameter("y", clsRFunctionParameter:=clsSetNameRainFunction, iPosition:=1, bIncludeArgumentName:=False) + clsCalculatedListformFunction.SetAssignTo(strcalculatedfromlist) + + clsSetnameRainStatusFunction.SetRCommand("setNames") + clsSetnameRainStatusFunction.AddParameter("x", Chr(34) & strStartStatus & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsSetnameRainStatusFunction.AddParameter("y", "linked_data_name", iPosition:=1, bIncludeArgumentName:=False) + + clsSetnameRainFunction.SetRCommand("setNames") + clsSetnameRainFunction.AddParameter("x", Chr(34) & strStartDoy & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsSetnameRainFunction.AddParameter("y", "linked_data_name", iPosition:=1, bIncludeArgumentName:=False) + + clsStatRainStatus2Function.SetRCommand("instat_calculation$new") + clsStatRainStatus2Function.AddParameter("type", Chr(34) & "calculation" & Chr(34), iPosition:=0) + clsStatRainStatus2Function.AddParameter("function_exp", clsRFunctionParameter:=clsIfElseStatus2Function, iPosition:=1) + clsStatRainStatus2Function.AddParameter("calculated_from", strcalculatedfromlist, iPosition:=2) + clsStatRainStatus2Function.AddParameter("result_name", Chr(34) & "start_rain_status" & Chr(34), iPosition:=3) + clsStatRainStatus2Function.AddParameter("save", "2", iPosition:=4) + clsStatRainStatus2Function.SetAssignTo(strStartStatus2) + clsIfElseStatus2Function.SetRCommand("ifelse") + clsIfElseStatus2Function.bToScriptAsRString = True + clsIfElseStatus2Function.AddParameter("test", clsRFunctionParameter:=clsNastatus2Function, iPosition:=0, bIncludeArgumentName:=False) + clsIfElseStatus2Function.AddParameter("yes", "TRUE", iPosition:=1, bIncludeArgumentName:=False) + clsIfElseStatus2Function.AddParameter("no", strStartStatus, iPosition:=2, bIncludeArgumentName:=False) + + clsNastatus2Function.SetRCommand("!is.na") + clsNastatus2Function.AddParameter("x", strStartDoy, iPosition:=0, bIncludeArgumentName:=False) + + clsStartRainCombine2Function.SetRCommand("instat_calculation$new") + clsStartRainCombine2Function.AddParameter("type", Chr(34) & "combination" & Chr(34), iPosition:=0) + clsStartRainCombine2Function.AddParameter("sub_calculations", clsRFunctionParameter:=clsListFunction, iPosition:=1) + clsStartRainCombine2Function.SetAssignTo(strstartraincombinedstatus2) + + clsListFunction.SetRCommand("list") + clsListFunction.AddParameter("x", strStartStatus2, iPosition:=0, bIncludeArgumentName:=False) + + clsRunStartStatus2Function.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$run_instat_calculation") + clsRunStartStatus2Function.AddParameter("calc", strstartraincombinedstatus2, iPosition:=0) + clsRunStartStatus2Function.AddParameter("display", "FALSE", iPosition:=1) + clsRunStartStatus2Function.AddParameter("param_list", clsRFunctionParameter:=clsListCalFunction, iPosition:=2) + + clsConvertssndLinkedVariableFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$convert_linked_variable") + clsConvertssndLinkedVariableFunction.AddParameter("from_data_frame", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertssndLinkedVariableFunction.AddParameter("link_cols", clsRFunctionParameter:=clsConvertLinkedvariablesvectorFunction, iPosition:=1) + + clsDeleteunusedrowFunction.SetRCommand(frmMain.clsRLink.strInstatDataObject & "$remove_unused_station_year_combinations") + clsDeleteunusedrowFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + ucrBase.clsRsyntax.ClearCodes() ucrBase.clsRsyntax.SetBaseRFunction(clsApplyInstatFunction) ucrBase.clsRsyntax.AddToBeforeCodes(clsGetColumnDataTypeFunction, iPosition:=0) ucrBase.clsRsyntax.AddToBeforeCodes(clsConvertColumnTypeFunction, iPosition:=1) - ucrBase.clsRsyntax.AddToAfterCodes(clsGetlinkeddataFunction, iPosition:=0) - ucrBase.clsRsyntax.AddToAfterCodes(clsConvertColumnType1Function, iPosition:=1) - ucrBase.clsRsyntax.AddToAfterCodes(clsConvertColumnType2Function, iPosition:=2) + ucrBase.clsRsyntax.AddToBeforeCodes(clsConvertLinkedVariablesFunction, iPosition:=4) + ucrBase.clsRsyntax.AddToAfterCodes(clsConvertColumnType1Function, iPosition:=5) + ucrBase.clsRsyntax.AddToAfterCodes(clsConvertssndLinkedVariableFunction, iPosition:=8) SetReceiver() ChangeDSValue() AdditionalCondition() + GroupByStationOptions() + AddRemoveStartStatus() End Sub Private Sub SetRCodeForControls(bReset As Boolean) @@ -807,10 +892,10 @@ Public Class dlgStartofRains ucrNudTROverDays.AddAdditionalCodeParameterPair(clsRollEvaporationFunction, New RParameter("n", 1), iAdditionalPairNo:=1) ucrReceiverDOY.SetRCode(clsDayToOperator, bReset) - ucrChkAsDoy.SetRCode(clsCombinationSubCalcList, bReset) - ucrChkStatus.SetRCode(clsDummyFunction, bReset) - ucrChkAsDate.SetRCode(clsDummyFunction, bReset) If bReset Then + ucrChkAsDoy.SetRCode(clsCombinationSubCalcList, bReset) + ucrChkStatus.SetRCode(clsDummyFunction, bReset) + ucrChkAsDate.SetRCode(clsDummyFunction, bReset) ucrChkAdditional.SetRCode(clsDummyFunction, bReset) End If ucrInputThreshold.SetRCode(clsRainDayOperator, bReset) @@ -865,7 +950,7 @@ Public Class dlgStartofRains End Sub Private Sub cmdDoyRange_Click(sender As Object, e As EventArgs) Handles cmdDoyRange.Click - sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFromAndTo, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) + sdgDoyRange.Setup(clsNewDoyFilterCalc:=clsDayFromAndTo, clsNewIfElseFirstDoyFilledFunction:=clsIfElseFirstDoyFilledFunction, clsNewDayFromOperator:=clsDayFromOperator, clsNewDayToOperator:=clsDayToOperator, clsNewCalcFromList:=clsDayFilterCalcFromList, strNewMainDataFrame:=ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text, strNewDoyColumn:=ucrReceiverDOY.GetVariableNames(False)) sdgDoyRange.ShowDialog() UpdateDayFilterPreview() End Sub @@ -927,15 +1012,31 @@ Public Class dlgStartofRains Private Sub GroupByStationOptions() If Not ucrReceiverStation.IsEmpty Then + clsDeleteunusedrowFunction.AddParameter("station", ucrReceiverStation.GetVariableNames(), iPosition:=2) clsCombinationManipList.AddParameter("manip1", clsRFunctionParameter:=clsGroupByStation, bIncludeArgumentName:=False, iPosition:=0) clsListToTalRain.AddParameter("manip1", clsRFunctionParameter:=clsGroupByStation, bIncludeArgumentName:=False) clsCalcRainRollingSum.AddParameter("manipulations", clsRFunctionParameter:=clsListToTalRain, iPosition:=4) clsGroupByStation.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverStation.GetVariableNames & ")", iPosition:=3) + clsConvertStationtypeFunction.AddParameter("col_names", ucrReceiverStation.GetVariableNames(), iPosition:=1) + clsConvertLinkedvariablesvectorFunction.AddParameter("y", ucrReceiverStation.GetVariableNames(), iPosition:=1, bIncludeArgumentName:=False) + clsStationTypeFunction.AddParameter("columns", ucrReceiverStation.GetVariableNames(), iPosition:=1) + clsConvertColumnType2Function.AddParameter("col_names", ucrReceiverStation.GetVariableNames(), iPosition:=1) + ucrBase.clsRsyntax.AddToBeforeCodes(clsStationTypeFunction, iPosition:=2) + ucrBase.clsRsyntax.AddToBeforeCodes(clsConvertStationtypeFunction, iPosition:=3) + ucrBase.clsRsyntax.AddToAfterCodes(clsDeleteunusedrowFunction, iPosition:=7) Else + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsDeleteunusedrowFunction) + ucrBase.clsRsyntax.RemoveFromBeforeCodes(clsStationTypeFunction) + ucrBase.clsRsyntax.RemoveFromBeforeCodes(clsConvertStationtypeFunction) + clsDeleteunusedrowFunction.RemoveParameterByName("station") + clsConvertStationtypeFunction.RemoveParameterByName("col_names") clsCombinationManipList.RemoveParameterByName("manip1") clsListToTalRain.RemoveParameterByName("manip1") clsCalcRainRollingSum.RemoveParameterByName("manipulations") clsGroupByStation.RemoveParameterByName("calculated_from") + clsConvertLinkedvariablesvectorFunction.RemoveParameterByName("y") + clsStationTypeFunction.RemoveParameterByName("columns") + clsConvertColumnType2Function.RemoveParameterByName("col_names") End If End Sub @@ -944,14 +1045,16 @@ Public Class dlgStartofRains clsGetColumnDataTypeFunction.AddParameter("columns", ucrReceiverYear.GetVariableNames(), iPosition:=1) clsConvertColumnTypeFunction.AddParameter("col_names", ucrReceiverYear.GetVariableNames(), iPosition:=1) clsConvertColumnType1Function.AddParameter("col_names", ucrReceiverYear.GetVariableNames(), iPosition:=1) - clsConvertColumnType2Function.AddParameter("col_names", ucrReceiverYear.GetVariableNames(), iPosition:=1) + clsDeleteunusedrowFunction.AddParameter("year", ucrReceiverYear.GetVariableNames(), iPosition:=1) clsGroupByYear.AddParameter("calculated_from", "list(" & strCurrDataName & "=" & ucrReceiverYear.GetVariableNames & ")", iPosition:=3) + clsConvertLinkedvariablesvectorFunction.AddParameter("x", ucrReceiverYear.GetVariableNames(), iPosition:=0, bIncludeArgumentName:=False) Else + clsDeleteunusedrowFunction.RemoveParameterByName("year") clsGroupByYear.RemoveParameterByName("calculated_from") clsGetColumnDataTypeFunction.RemoveParameterByName("columns") clsConvertColumnTypeFunction.RemoveParameterByName("col_names") clsConvertColumnType1Function.RemoveParameterByName("col_names") - clsConvertColumnType2Function.RemoveParameterByName("col_names") + clsConvertLinkedvariablesvectorFunction.RemoveParameterByName("x") End If End Sub @@ -1024,6 +1127,13 @@ Public Class dlgStartofRains clsConvertColumnTypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) clsConvertColumnType1Function.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) clsGetlinkeddataFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0, bIncludeArgumentName:=False) + clsStationTypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertStationtypeFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertLinkedVariablesFunction.AddParameter("from_data_frame", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertssndLinkedVariableFunction.AddParameter("from_data_frame", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsDeleteunusedrowFunction.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsConvertColumnType2Function.AddParameter("data_name", Chr(34) & ucrSelectorForStartofRains.ucrAvailableDataFrames.cboAvailableDataFrames.Text & Chr(34), iPosition:=0) + clsDayFilterCalcFromList.ClearParameters() End Sub @@ -1056,7 +1166,24 @@ Public Class dlgStartofRains clsSORStatusSummary.clsSORFilterOperator.AddParameter("left", strParameterValue:=ucrInputNewDoyColumnName.GetText, bIncludeArgumentName:=False, iPosition:=0) End Sub + Private Sub AddRemoveStartStatus() + If ucrChkStatus.Checked Then + ucrBase.clsRsyntax.AddToAfterCodes(clsGetlinkeddataFunction, iPosition:=0) + ucrBase.clsRsyntax.AddToAfterCodes(clsCalculatedListformFunction, iPosition:=1) + ucrBase.clsRsyntax.AddToAfterCodes(clsStatRainStatus2Function, iPosition:=2) + ucrBase.clsRsyntax.AddToAfterCodes(clsStartRainCombine2Function, iPosition:=3) + ucrBase.clsRsyntax.AddToAfterCodes(clsRunStartStatus2Function, iPosition:=4) + Else + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsGetlinkeddataFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsCalculatedListformFunction) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsStatRainStatus2Function) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsStartRainCombine2Function) + ucrBase.clsRsyntax.RemoveFromAfterCodes(clsRunStartStatus2Function) + End If + End Sub + Private Sub ucrChkStatus_ControlValueChanged(ucrChangedControl As ucrCore) Handles ucrChkStatus.ControlValueChanged + AddRemoveStartStatus() If ucrChkStatus.Checked Then clsCombinationSubCalcList.AddParameter("sub3", clsRFunctionParameter:=clsCalcStatus, bIncludeArgumentName:=False, iPosition:=2) clsListSubCalc.AddParameter("sub3", clsRFunctionParameter:=clsCalcStatus, bIncludeArgumentName:=False, iPosition:=2) diff --git a/instat/frmMain.vb b/instat/frmMain.vb index 73e94dbbbf..4bc5ef23b8 100644 --- a/instat/frmMain.vb +++ b/instat/frmMain.vb @@ -1185,7 +1185,7 @@ Public Class frmMain Dim strCurrentStatus As String strCurrentStatus = tstatus.Text - If clsRLink.bInstatObjectExists Then + If clsRLink.bInstatObjectExists AndAlso ucrDataViewer.HasDataChanged Then tstatus.Text = GetTranslation("Auto saving data...") Cursor = Cursors.WaitCursor If Not Directory.Exists(strAutoSaveDataFolderPath) Then @@ -1196,7 +1196,7 @@ Public Class frmMain strTempFile = "data_" & DateTime.Now.ToString("yyyyMMdd_HHmmss") & ".rds" strCurrentAutoSaveDataFilePath = Path.Combine(strAutoSaveDataFolderPath, strTempFile) - Dim strBackupMessage As String = $"##########{vbCrLf}## Backing up data and log files on: {DateTime.Now}{vbCrLf}##########" + Dim strBackupMessage As String = $"##########{vbCrLf}## Backing up data and metadata on: {DateTime.Now}{vbCrLf}##########" Me.ucrScriptWindow.LogText(strBackupMessage) clsRLink.AppendToAutoSaveLog(strBackupMessage) @@ -1208,6 +1208,7 @@ Public Class frmMain tstatus.Text = strCurrentStatus Cursor = Cursors.Default bFirstBackupDone = True + ucrDataViewer.HasDataChanged = False End If End Sub diff --git a/instat/sdgDoyRange.vb b/instat/sdgDoyRange.vb index a8a2d55b02..cab5c87e4e 100644 --- a/instat/sdgDoyRange.vb +++ b/instat/sdgDoyRange.vb @@ -21,6 +21,7 @@ Public Class sdgDoyRange Private clsDoyFilterCalc As RFunction Private clsCalcFromList As RFunction Private clsCalcFromMainDataFrame As RFunction + Public clsIfElseFirstDoyFilledFunction As RFunction Private clsDayFromOperator As ROperator Private clsDayToOperator As ROperator Private bControlsInitialised As Boolean = False @@ -32,7 +33,7 @@ Public Class sdgDoyRange autoTranslate(Me) End Sub - Public Sub Setup(clsNewDoyFilterCalc As RFunction, clsNewDayFromOperator As ROperator, clsNewDayToOperator As ROperator, clsNewCalcFromList As RFunction, strNewMainDataFrame As String, strNewDoyColumn As String) + Public Sub Setup(clsNewDoyFilterCalc As RFunction, clsNewDayFromOperator As ROperator, clsNewDayToOperator As ROperator, clsNewCalcFromList As RFunction, strNewMainDataFrame As String, strNewDoyColumn As String, Optional clsNewIfElseFirstDoyFilledFunction As RFunction = Nothing) Dim iFrom As Integer Dim iTo As Integer Dim iDiff As Integer @@ -55,6 +56,7 @@ Public Class sdgDoyRange End If clsDoyFilterCalc = clsNewDoyFilterCalc clsCalcFromList = clsNewCalcFromList + clsIfElseFirstDoyFilledFunction = clsNewIfElseFirstDoyFilledFunction strMainDataFrame = strNewMainDataFrame strDoyColumn = strNewDoyColumn @@ -217,8 +219,10 @@ Public Class sdgDoyRange If bUpdate Then If rdoToFixed.Checked Then clsDayToOperator.AddParameter("to", strParameterValue:=ucrDoyTo.GetValue(), iPosition:=1) + clsIfElseFirstDoyFilledFunction.AddParameter("yes", strParameterValue:=ucrDoyTo.GetValue(), iPosition:=1) ElseIf rdoToVariable.Checked Then clsDayToOperator.AddParameter("to", strParameterValue:=ucrReceiverTo.GetVariableNames(False), iPosition:=1) + clsIfElseFirstDoyFilledFunction.AddParameter("yes", strParameterValue:=ucrReceiverTo.GetVariableNames(False), iPosition:=1) ElseIf rdoLength.Checked Then clsFixedDiffOp.SetOperation("+") If clsDayFromOperator.ContainsParameter("from") Then @@ -226,6 +230,7 @@ Public Class sdgDoyRange clsFixedDiffOp.AddParameter("diff", strParameterValue:=ucrNudToDiff.Value, iPosition:=1) clsFixedDiffOp.bBrackets = True clsDayToOperator.AddParameter("to", clsROperatorParameter:=clsFixedDiffOp, iPosition:=1) + clsIfElseFirstDoyFilledFunction.AddParameter("yes", clsROperatorParameter:=clsFixedDiffOp, iPosition:=1) End If End If UpdateCalculatedFrom() diff --git a/instat/static/InstatObject/R/Backend_Components/calculations.R b/instat/static/InstatObject/R/Backend_Components/calculations.R index ebb95254ec..e7a52f6259 100644 --- a/instat/static/InstatObject/R/Backend_Components/calculations.R +++ b/instat/static/InstatObject/R/Backend_Components/calculations.R @@ -448,8 +448,29 @@ DataBook$set("public", "apply_instat_calculation", function(calc, curr_data_list if(length(by) == 0) { stop("Cannot find linking columns to merge output from sub calculations with data for calculated_from.") } - if(join_into_overall) curr_data_list[[c_data_label]] <- dplyr::full_join(curr_data_list[[c_data_label]], self$get_data_frame(data_frame_name, use_current_filter = FALSE), by = by) - else { + if(join_into_overall){ + new_data_list <- self$get_data_frame(data_frame_name, use_current_filter = FALSE) + by_col_attributes <- list() + for(i in seq_along(by)) { + # Collect column attributes + by_col_attributes[[by[[i]]]] <- get_column_attributes(new_data_list[[by[[i]]]]) + + # Check and align the data types for each "by" column + if (class(new_data_list[[by[[i]]]]) != class(curr_data_list[[c_data_label]][[by[[i]]]])) { + warning(paste0("Type is different for ", by[[i]], " in the two data frames. Setting as numeric in both data frames.")) + + # Convert factors to numeric if necessary + if (class(new_data_list[[by[[i]]]]) == "factor") { + new_data_list[[by[[i]]]] <- as.numeric(as.character(new_data_list[[by[[i]]]])) + } else if (class(curr_data_list[[c_data_label]][[by[[i]]]]) == "factor") { + curr_data_list[[c_data_label]][[by[[i]]]] <- as.numeric(as.character(curr_data_list[[c_data_label]][[by[[i]]]])) + } else { + stop(paste0("Type is different for ", by[[i]], " in the two data frames and cannot be coerced.")) + } + } + } + curr_data_list[[c_data_label]] <- dplyr::full_join(curr_data_list[[c_data_label]], self$get_data_frame(data_frame_name, use_current_filter = FALSE), by = by) + } else { curr_groups <- dplyr::groups(curr_data_list[[c_data_label]]) curr_data_list[[c_data_label]] <- dplyr::full_join(self$get_data_frame(data_frame_name, use_current_filter = FALSE), curr_data_list[[c_data_label]], by = by) #TODO investigate better way to do this @@ -853,3 +874,27 @@ find_df_from_calc_from <- function(x, column) { } return("") } + +DataBook$set("public", "remove_unused_station_year_combinations", function(data_name, year, station){ + # Create linked data name + linked_data_name <- self$get_linked_to_data_name(data_name, link_cols=c(year, station)) + + # Column Summaries + self$calculate_summary(data_name = data_name, + store_results=TRUE, + factors=c(year, station), + summaries=c("summary_count"), + silent=TRUE) + + self$rename_column_in_data(data_name = linked_data_name, column_name="count_all", new_val="count_year_station_combination_for_linking", label="") + + # Create Filter subdialog: Created new filter + self$add_filter(filter=list(C0=list(column="count_year_station_combination_for_linking", operation="! is.na")), data_name = linked_data_name, filter_name = "removing_additional_years") + + # Dialog: Filter + self$copy_data_object(data_name = linked_data_name, new_name = linked_data_name, filter_name="removing_additional_years") + + # Right click menu: Delete Column(s) + self$remove_columns_in_data(data_name=linked_data_name, cols="count_year_station_combination_for_linking") +} +) diff --git a/instat/static/InstatObject/R/Backend_Components/link.R b/instat/static/InstatObject/R/Backend_Components/link.R index ccd14b356e..47219b1b13 100644 --- a/instat/static/InstatObject/R/Backend_Components/link.R +++ b/instat/static/InstatObject/R/Backend_Components/link.R @@ -379,4 +379,23 @@ DataBook$set("public", "view_link", function(link_name) { paste("Link columns:", paste(names(temp_link$link_columns), "=", temp_link$link_columns, collapse = ", ")), sep = "\n")) } } -) \ No newline at end of file +) + +# A function to convert the variables in the linked "to data frame"" to be the same class as that of the "from data frame"". +DataBook$set("public", "convert_linked_variable", function(from_data_frame, link_cols) { + to_data_name <- self$get_linked_to_data_name(from_data_frame, link_cols=c(link_cols)) + if (!is.null(to_data_name)){ + linked_variable_name <- self$get_link_between(from_data_frame, to_data_name)$link_columns[[1]] + + # loop through all columns given in variable argument + for (i in seq_along(linked_variable_name)){ + variable_type <- self$get_column_data_types(data_name = from_data_frame, columns = names(linked_variable_name[i])) + linked_variable_type <- self$get_column_data_types(data_name = to_data_name, columns=linked_variable_name[i]) + + if (variable_type != linked_variable_type){ + self$convert_column_to_type(data_name=to_data_name, col_names=linked_variable_name[i], to_type=variable_type) + } + } + } +} +) diff --git a/instat/translations/rInstatTranslations.db b/instat/translations/rInstatTranslations.db index 992781e440..dc7ebd2632 100644 Binary files a/instat/translations/rInstatTranslations.db and b/instat/translations/rInstatTranslations.db differ diff --git a/instat/ucrDataView.vb b/instat/ucrDataView.vb index ebd14bf4db..8a29fd4162 100644 --- a/instat/ucrDataView.vb +++ b/instat/ucrDataView.vb @@ -23,6 +23,7 @@ Public Class ucrDataView Private _clsDataBook As clsDataBook Private _grid As IDataViewGrid Private bOnlyUpdateOneCell As Boolean = False + Private _hasChanged As Boolean Public WriteOnly Property DataBook() As clsDataBook Set(value As clsDataBook) @@ -157,6 +158,7 @@ Public Class ucrDataView RefreshDisplayInformation() End If End If + _hasChanged = True EnableDisableUndoMenu() _grid.Focus() End Sub @@ -185,6 +187,23 @@ Public Class ucrDataView Return If(_grid.CurrentWorksheet Is Nothing, Nothing, _grid.CurrentWorksheet.Name) End Function + Public Property HasDataChanged() As Boolean + Get + Dim currentDataFrame = GetCurrentDataFrameFocus() + If currentDataFrame IsNot Nothing AndAlso currentDataFrame.clsVisibleDataFramePage IsNot Nothing Then + Return currentDataFrame.clsVisibleDataFramePage.HasDataChangedForAutoSave + End If + Return False ' Or a default value + End Get + Set(ByVal value As Boolean) + Dim currentDataFrame = GetCurrentDataFrameFocus() + If currentDataFrame IsNot Nothing AndAlso currentDataFrame.clsVisibleDataFramePage IsNot Nothing Then + currentDataFrame.clsVisibleDataFramePage.HasDataChangedForAutoSave = value + End If + ' Optionally handle the case where currentDataFrame is Nothing + End Set + End Property + Private Sub mnuDeleteCol_Click(sender As Object, e As EventArgs) Handles mnuDeleteCol.Click If GetSelectedColumns.Count = GetCurrentDataFrameFocus()?.iTotalColumnCount Then MsgBox("Cannot delete all visible columns." & Environment.NewLine & "Use Prepare > Data Object > Delete Data Frame if you wish to delete the data.", MsgBoxStyle.Information, "Cannot Delete All Columns")