From eece45e523cbdc5fd4144c598b41671cbfc39312 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Thu, 7 Apr 2022 19:27:26 +0200 Subject: [PATCH 01/10] started work on an analysis wizard (only AnnualStatistics partially implemented so far) --- source/Analysis/Analysis.vb | 11 +- source/Analysis/AnalysisDialog.Designer.vb | 208 ++++++++++++++------- source/Analysis/AnalysisDialog.resx | 11 +- source/Analysis/AnalysisDialog.vb | 119 +++++++++--- source/Analysis/AnalysisFactory.vb | 29 ++- source/Analysis/AnalysisParameter.vb | 44 +++++ source/Analysis/AnnualStatistics.vb | 41 +++- source/Dialogs/WizardPages.vb | 53 ++++++ source/Wave.vbproj | 4 + 9 files changed, 390 insertions(+), 130 deletions(-) create mode 100644 source/Analysis/AnalysisParameter.vb create mode 100644 source/Dialogs/WizardPages.vb diff --git a/source/Analysis/Analysis.vb b/source/Analysis/Analysis.vb index 4356d802..51e094de 100644 --- a/source/Analysis/Analysis.vb +++ b/source/Analysis/Analysis.vb @@ -42,9 +42,9 @@ Friend MustInherit Class Analysis #Region "Eigenschaften" ''' - ''' List of input TimeSeries for analysis + ''' List of analysis parameters ''' - Protected InputTimeSeries As List(Of TimeSeries) + Friend parameters As List(Of AnalysisParameter) ''' ''' Result text @@ -177,13 +177,10 @@ Friend MustInherit Class Analysis ''' ''' Constructor ''' - ''' List of input TimeSeries - Public Sub New(inputseries As List(Of TimeSeries)) - - 'Zeitreihen - Me.InputTimeSeries = inputseries + Public Sub New() 'Datenstrukturen initialisieren + Me.parameters = New List(Of AnalysisParameter) Me.ResultValues = New Dictionary(Of String, Double) Me.ResultSeries = New List(Of TimeSeries) End Sub diff --git a/source/Analysis/AnalysisDialog.Designer.vb b/source/Analysis/AnalysisDialog.Designer.vb index e5add809..ac8702ca 100644 --- a/source/Analysis/AnalysisDialog.Designer.vb +++ b/source/Analysis/AnalysisDialog.Designer.vb @@ -22,115 +22,179 @@ Partial Class AnalysisDialog 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. _ Private Sub InitializeComponent() - Dim Label_Series As System.Windows.Forms.Label Dim Label_Analysis As System.Windows.Forms.Label Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(AnalysisDialog)) Me.Button_Cancel = New System.Windows.Forms.Button() - Me.Button_OK = New System.Windows.Forms.Button() - Me.ListBox_Series = New System.Windows.Forms.ListBox() - Me.ComboBox_Analysis = New System.Windows.Forms.ComboBox() + Me.Button_Next = New System.Windows.Forms.Button() Me.Label_AnalaysisDescription = New System.Windows.Forms.Label() Me.LinkLabel_Helplink = New System.Windows.Forms.LinkLabel() - Label_Series = New System.Windows.Forms.Label() + Me.ListBox_AnalysisFunctions = New System.Windows.Forms.ListBox() + Me.WizardPages1 = New BlueM.Wave.WizardPages() + Me.TabPage3 = New System.Windows.Forms.TabPage() + Me.TabPage4 = New System.Windows.Forms.TabPage() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.Label_AnalysisFunction = New System.Windows.Forms.Label() + Me.Button_Previous = New System.Windows.Forms.Button() + Me.Button_Execute = New System.Windows.Forms.Button() Label_Analysis = New System.Windows.Forms.Label() + Me.WizardPages1.SuspendLayout() + Me.TabPage3.SuspendLayout() + Me.TabPage4.SuspendLayout() Me.SuspendLayout() ' - 'Label_Series - ' - Label_Series.AutoSize = True - Label_Series.Location = New System.Drawing.Point(12, 120) - Label_Series.Name = "Label_Series" - Label_Series.Size = New System.Drawing.Size(39, 13) - Label_Series.TabIndex = 8 - Label_Series.Text = "Series:" - ' 'Label_Analysis ' Label_Analysis.AutoSize = True - Label_Analysis.Location = New System.Drawing.Point(12, 15) + Label_Analysis.Location = New System.Drawing.Point(6, 3) Label_Analysis.Name = "Label_Analysis" - Label_Analysis.Size = New System.Drawing.Size(48, 13) + Label_Analysis.Size = New System.Drawing.Size(136, 13) Label_Analysis.TabIndex = 8 - Label_Analysis.Text = "Analysis:" + Label_Analysis.Text = "Select an analysis function:" ' 'Button_Cancel ' Me.Button_Cancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Button_Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Button_Cancel.Location = New System.Drawing.Point(207, 308) + Me.Button_Cancel.Location = New System.Drawing.Point(357, 308) Me.Button_Cancel.Name = "Button_Cancel" Me.Button_Cancel.Size = New System.Drawing.Size(75, 23) Me.Button_Cancel.TabIndex = 9 Me.Button_Cancel.Text = "Cancel" Me.Button_Cancel.UseVisualStyleBackColor = True ' - 'Button_OK - ' - Me.Button_OK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Button_OK.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Button_OK.Location = New System.Drawing.Point(126, 308) - Me.Button_OK.Name = "Button_OK" - Me.Button_OK.Size = New System.Drawing.Size(75, 23) - Me.Button_OK.TabIndex = 7 - Me.Button_OK.Text = "OK" - Me.Button_OK.UseVisualStyleBackColor = True - ' - 'ListBox_Series + 'Button_Next ' - Me.ListBox_Series.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ - Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.ListBox_Series.FormattingEnabled = True - Me.ListBox_Series.Location = New System.Drawing.Point(12, 140) - Me.ListBox_Series.Name = "ListBox_Series" - Me.ListBox_Series.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.ListBox_Series.Size = New System.Drawing.Size(272, 160) - Me.ListBox_Series.TabIndex = 6 - ' - 'ComboBox_Analysis - ' - Me.ComboBox_Analysis.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.ComboBox_Analysis.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.ComboBox_Analysis.FormattingEnabled = True - Me.ComboBox_Analysis.Location = New System.Drawing.Point(69, 12) - Me.ComboBox_Analysis.Name = "ComboBox_Analysis" - Me.ComboBox_Analysis.Size = New System.Drawing.Size(213, 21) - Me.ComboBox_Analysis.TabIndex = 10 + Me.Button_Next.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button_Next.Location = New System.Drawing.Point(519, 308) + Me.Button_Next.Name = "Button_Next" + Me.Button_Next.Size = New System.Drawing.Size(75, 23) + Me.Button_Next.TabIndex = 7 + Me.Button_Next.Text = "Next >" + Me.Button_Next.UseVisualStyleBackColor = True ' 'Label_AnalaysisDescription ' Me.Label_AnalaysisDescription.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Label_AnalaysisDescription.Location = New System.Drawing.Point(12, 44) + Me.Label_AnalaysisDescription.Location = New System.Drawing.Point(233, 19) Me.Label_AnalaysisDescription.Name = "Label_AnalaysisDescription" - Me.Label_AnalaysisDescription.Size = New System.Drawing.Size(272, 51) + Me.Label_AnalaysisDescription.Size = New System.Drawing.Size(428, 216) Me.Label_AnalaysisDescription.TabIndex = 11 - Me.Label_AnalaysisDescription.Text = "Select an analysis method" + Me.Label_AnalaysisDescription.Text = "Select an analysis function" ' 'LinkLabel_Helplink ' Me.LinkLabel_Helplink.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.LinkLabel_Helplink.Location = New System.Drawing.Point(12, 98) + Me.LinkLabel_Helplink.Location = New System.Drawing.Point(233, 251) Me.LinkLabel_Helplink.Name = "LinkLabel_Helplink" - Me.LinkLabel_Helplink.Size = New System.Drawing.Size(272, 16) + Me.LinkLabel_Helplink.Size = New System.Drawing.Size(428, 19) Me.LinkLabel_Helplink.TabIndex = 12 Me.LinkLabel_Helplink.TabStop = True Me.LinkLabel_Helplink.Text = "Open wiki page" ' + 'ListBox_AnalysisFunctions + ' + Me.ListBox_AnalysisFunctions.FormattingEnabled = True + Me.ListBox_AnalysisFunctions.Location = New System.Drawing.Point(6, 19) + Me.ListBox_AnalysisFunctions.Name = "ListBox_AnalysisFunctions" + Me.ListBox_AnalysisFunctions.Size = New System.Drawing.Size(221, 251) + Me.ListBox_AnalysisFunctions.TabIndex = 14 + ' + 'WizardPages1 + ' + Me.WizardPages1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.WizardPages1.Controls.Add(Me.TabPage3) + Me.WizardPages1.Controls.Add(Me.TabPage4) + Me.WizardPages1.Location = New System.Drawing.Point(0, 0) + Me.WizardPages1.Margin = New System.Windows.Forms.Padding(0) + Me.WizardPages1.Name = "WizardPages1" + Me.WizardPages1.SelectedIndex = 0 + Me.WizardPages1.Size = New System.Drawing.Size(675, 305) + Me.WizardPages1.TabIndex = 16 + ' + 'TabPage3 + ' + Me.TabPage3.BackColor = System.Drawing.SystemColors.Control + Me.TabPage3.Controls.Add(Label_Analysis) + Me.TabPage3.Controls.Add(Me.ListBox_AnalysisFunctions) + Me.TabPage3.Controls.Add(Me.Label_AnalaysisDescription) + Me.TabPage3.Controls.Add(Me.LinkLabel_Helplink) + Me.TabPage3.Location = New System.Drawing.Point(4, 22) + Me.TabPage3.Name = "TabPage3" + Me.TabPage3.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage3.Size = New System.Drawing.Size(667, 279) + Me.TabPage3.TabIndex = 0 + Me.TabPage3.Text = "Step1" + ' + 'TabPage4 + ' + Me.TabPage4.BackColor = System.Drawing.SystemColors.Control + Me.TabPage4.Controls.Add(Me.TableLayoutPanel1) + Me.TabPage4.Controls.Add(Me.Label_AnalysisFunction) + Me.TabPage4.Location = New System.Drawing.Point(4, 22) + Me.TabPage4.Name = "TabPage4" + Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage4.Size = New System.Drawing.Size(667, 279) + Me.TabPage4.TabIndex = 1 + Me.TabPage4.Text = "Step2" + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.AutoSize = True + Me.TableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(6, 23) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 2 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(656, 26) + Me.TableLayoutPanel1.TabIndex = 10 + ' + 'Label_AnalysisFunction + ' + Me.Label_AnalysisFunction.AutoSize = True + Me.Label_AnalysisFunction.Location = New System.Drawing.Point(11, 7) + Me.Label_AnalysisFunction.Name = "Label_AnalysisFunction" + Me.Label_AnalysisFunction.Size = New System.Drawing.Size(86, 13) + Me.Label_AnalysisFunction.TabIndex = 9 + Me.Label_AnalysisFunction.Text = "Analysis function" + ' + 'Button_Previous + ' + Me.Button_Previous.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button_Previous.Enabled = False + Me.Button_Previous.Location = New System.Drawing.Point(438, 308) + Me.Button_Previous.Name = "Button_Previous" + Me.Button_Previous.Size = New System.Drawing.Size(75, 23) + Me.Button_Previous.TabIndex = 17 + Me.Button_Previous.Text = "< Previous" + Me.Button_Previous.UseVisualStyleBackColor = True + ' + 'Button_Execute + ' + Me.Button_Execute.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button_Execute.Location = New System.Drawing.Point(600, 308) + Me.Button_Execute.Name = "Button_Execute" + Me.Button_Execute.Size = New System.Drawing.Size(75, 23) + Me.Button_Execute.TabIndex = 18 + Me.Button_Execute.Text = "Execute" + Me.Button_Execute.UseVisualStyleBackColor = True + ' 'AnalysisDialog ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(294, 343) - Me.Controls.Add(Me.LinkLabel_Helplink) - Me.Controls.Add(Me.Label_AnalaysisDescription) - Me.Controls.Add(Label_Analysis) - Me.Controls.Add(Me.ComboBox_Analysis) - Me.Controls.Add(Label_Series) - Me.Controls.Add(Me.ListBox_Series) - Me.Controls.Add(Me.Button_OK) + Me.ClientSize = New System.Drawing.Size(684, 343) + Me.Controls.Add(Me.Button_Execute) + Me.Controls.Add(Me.Button_Previous) + Me.Controls.Add(Me.WizardPages1) + Me.Controls.Add(Me.Button_Next) Me.Controls.Add(Me.Button_Cancel) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.MaximizeBox = False @@ -140,14 +204,24 @@ Partial Class AnalysisDialog Me.ShowInTaskbar = False Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent Me.Text = "Analysis" + Me.WizardPages1.ResumeLayout(False) + Me.TabPage3.ResumeLayout(False) + Me.TabPage3.PerformLayout() + Me.TabPage4.ResumeLayout(False) + Me.TabPage4.PerformLayout() Me.ResumeLayout(False) - Me.PerformLayout() End Sub Private WithEvents Button_Cancel As System.Windows.Forms.Button - Private WithEvents Button_OK As System.Windows.Forms.Button - Private WithEvents ListBox_Series As System.Windows.Forms.ListBox - Private WithEvents ComboBox_Analysis As System.Windows.Forms.ComboBox + Private WithEvents Button_Next As System.Windows.Forms.Button Friend WithEvents Label_AnalaysisDescription As Label Friend WithEvents LinkLabel_Helplink As LinkLabel + Friend WithEvents ListBox_AnalysisFunctions As ListBox + Friend WithEvents WizardPages1 As WizardPages + Friend WithEvents TabPage3 As TabPage + Friend WithEvents TabPage4 As TabPage + Private WithEvents Button_Previous As Button + Friend WithEvents Label_AnalysisFunction As Label + Friend WithEvents TableLayoutPanel1 As TableLayoutPanel + Private WithEvents Button_Execute As Button End Class diff --git a/source/Analysis/AnalysisDialog.resx b/source/Analysis/AnalysisDialog.resx index d8f15b44..f988780f 100644 --- a/source/Analysis/AnalysisDialog.resx +++ b/source/Analysis/AnalysisDialog.resx @@ -112,18 +112,15 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + False - - False - - + AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA diff --git a/source/Analysis/AnalysisDialog.vb b/source/Analysis/AnalysisDialog.vb index 02e176da..50719515 100644 --- a/source/Analysis/AnalysisDialog.vb +++ b/source/Analysis/AnalysisDialog.vb @@ -20,17 +20,22 @@ ''' Friend Class AnalysisDialog + Private analysis As Analysis + Private isInitializing As Boolean + Private seriesList As List(Of TimeSeries) + Public Sub New(seriesList As List(Of TimeSeries)) Call InitializeComponent() + Me.isInitializing = True + 'Populate combobox with analysis functions - Me.ComboBox_Analysis.DataSource = System.Enum.GetValues(GetType(AnalysisFactory.AnalysisFunctions)) + Me.ListBox_AnalysisFunctions.DataSource = System.Enum.GetValues(GetType(AnalysisFactory.AnalysisFunctions)) - 'Populate listbox with time series - For Each series As TimeSeries In seriesList - Me.ListBox_Series.Items.Add(series) - Next + Me.seriesList = seriesList + + Me.isInitializing = False End Sub @@ -40,21 +45,8 @@ Friend Class AnalysisDialog ''' Friend ReadOnly Property selectedAnalysisFunction() As AnalysisFactory.AnalysisFunctions Get - Return Me.ComboBox_Analysis.SelectedItem - End Get - End Property - ''' - ''' List of selected time series - ''' - ''' - Friend ReadOnly Property selectedTimeseries() As List(Of TimeSeries) - Get - Dim seriesList As New List(Of TimeSeries)() - For Each item As Object In Me.ListBox_Series.SelectedItems - seriesList.Add(CType(item, TimeSeries).Clone()) - Next - Return seriesList + Return Me.ListBox_AnalysisFunctions.SelectedItem End Get End Property @@ -63,7 +55,14 @@ Friend Class AnalysisDialog ''' ''' ''' - Private Sub ComboBox_Analysis_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_Analysis.SelectedIndexChanged + Private Sub ComboBox_Analysis_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox_AnalysisFunctions.SelectedIndexChanged + + If Me.isInitializing Then + Return + End If + + Me.analysis = AnalysisFactory.CreateAnalysis(Me.selectedAnalysisFunction) + Dim url As String 'update the description and wiki link Me.Label_AnalaysisDescription.Text = AnalysisFactory.getAnalysisDescription(Me.selectedAnalysisFunction) @@ -71,6 +70,52 @@ Friend Class AnalysisDialog Me.LinkLabel_Helplink.Text = url Me.LinkLabel_Helplink.Links.Clear() Me.LinkLabel_Helplink.Links.Add(0, Me.LinkLabel_Helplink.Text.Length, url) + + 'prepare second wizard page + Me.Label_AnalysisFunction.Text = Me.selectedAnalysisFunction.ToString("g") + Me.TableLayoutPanel1.Controls.Clear() + Me.TableLayoutPanel1.RowCount = analysis.parameters.Count + Me.TableLayoutPanel1.Visible = True + Dim row As Integer = 0 + For Each param As AnalysisParameter In analysis.parameters + + 'label + Dim label As New Label() + label.Text = param.Description & ":" + label.AutoSize = True + Me.TableLayoutPanel1.Controls.Add(label) + Me.TableLayoutPanel1.SetCellPosition(label, New TableLayoutPanelCellPosition(0, row)) + + 'input control + Dim control As New Control() + Select Case param.ParameterType + + Case AnalysisParameter.ParameterTypeEnum.Timeseries + Dim combobox As New ComboBox() + combobox.DropDownStyle = ComboBoxStyle.DropDownList + For Each ts As TimeSeries In Me.seriesList + combobox.Items.Add(ts) + Next + combobox.SelectedIndex = 0 + param.Value = combobox.SelectedItem + combobox.DataBindings.Add(New Binding("SelectedItem", param, "Value")) + control = combobox + + Case AnalysisParameter.ParameterTypeEnum.Integer + Dim numericupdown As New NumericUpDown() + numericupdown.Minimum = param.MinValue + numericupdown.Maximum = param.MaxValue + param.Value = param.DefaultValue + numericupdown.DataBindings.Add(New Binding("Value", param, "Value")) + control = numericupdown + End Select + + Me.TableLayoutPanel1.Controls.Add(control) + Me.TableLayoutPanel1.SetCellPosition(control, New TableLayoutPanelCellPosition(1, row)) + + row += 1 + Next + 'Me.TableLayoutPanel1.Refresh() End Sub ''' @@ -87,12 +132,36 @@ Friend Class AnalysisDialog ''' ''' ''' - Private Sub Button_OK_Click(sender As System.Object, e As System.EventArgs) Handles Button_OK.Click - 'Eingabekontrolle - If (Me.ListBox_Series.SelectedItems.Count < 1) Then - MsgBox("Please select at least one series!", MsgBoxStyle.Exclamation) - Me.DialogResult = Windows.Forms.DialogResult.None + Private Sub Button_Next_Click(sender As System.Object, e As System.EventArgs) Handles Button_Next.Click + Me.WizardPages1.SelectedIndex += 1 + End Sub + + Private Sub Button_Previous_Click(sender As Object, e As EventArgs) Handles Button_Previous.Click + Me.WizardPages1.SelectedIndex -= 1 + End Sub + + Private Sub WizardPages1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles WizardPages1.SelectedIndexChanged + + If Me.WizardPages1.SelectedIndex > 0 Then + Me.Button_Previous.Enabled = True + Else + Me.Button_Previous.Enabled = False + End If + + If Me.WizardPages1.SelectedIndex < Me.WizardPages1.TabCount - 1 Then + Me.Button_Next.Enabled = True + Else + Me.Button_Next.Enabled = False + End If + + If Me.WizardPages1.SelectedIndex = Me.WizardPages1.TabCount - 1 Then + Me.Button_Execute.Enabled = True + Else + Me.Button_Execute.Enabled = False End If End Sub + Private Sub Button_Execute_Click(sender As Object, e As EventArgs) Handles Button_Execute.Click + Me.analysis.ProcessAnalysis() + End Sub End Class \ No newline at end of file diff --git a/source/Analysis/AnalysisFactory.vb b/source/Analysis/AnalysisFactory.vb index b5d9b99f..22b7143d 100644 --- a/source/Analysis/AnalysisFactory.vb +++ b/source/Analysis/AnalysisFactory.vb @@ -81,52 +81,51 @@ Friend Module AnalysisFactory ''' Factory method for creating an analysis instance ''' ''' the type of analysis instance to create - ''' list of input TimeSeries ''' the analysis instance - Public Function CreateAnalysis(analysisfunction As AnalysisFunctions, seriesList As List(Of TimeSeries)) As Analysis + Public Function CreateAnalysis(analysisfunction As AnalysisFunctions) As Analysis Dim oAnalysis As Analysis Select Case analysisfunction Case AnalysisFunctions.AnnualStatistics - oAnalysis = New AnnualStatistics(seriesList) + oAnalysis = New AnnualStatistics() Case AnalysisFunctions.Autocorrelation - oAnalysis = New Autocorrelation(seriesList) + oAnalysis = New Autocorrelation() Case AnalysisFunctions.Calculator - oAnalysis = New Calculator(seriesList) + oAnalysis = New Calculator() Case AnalysisFunctions.ChangeTimestep - oAnalysis = New ChangeTimestep(seriesList) + oAnalysis = New ChangeTimestep() Case AnalysisFunctions.Comparison - oAnalysis = New Comparison(seriesList) + oAnalysis = New Comparison() Case AnalysisFunctions.Cumulative - oAnalysis = New Cumulative(seriesList) + oAnalysis = New Cumulative() Case AnalysisFunctions.DoubleSumCurve - oAnalysis = New DoubleSumCurve(seriesList) + oAnalysis = New DoubleSumCurve() Case AnalysisFunctions.GoodnessOfFit - oAnalysis = New GoodnessOfFit(seriesList) + oAnalysis = New GoodnessOfFit() Case AnalysisFunctions.Histogram - oAnalysis = New Histogram(seriesList) + oAnalysis = New Histogram() Case AnalysisFunctions.LinearRegression - oAnalysis = New LinearRegression(seriesList) + oAnalysis = New LinearRegression() Case AnalysisFunctions.MonthlyStatistics - oAnalysis = New MonthlyStatistics(seriesList) + oAnalysis = New MonthlyStatistics() Case AnalysisFunctions.TimestepAnalysis - oAnalysis = New TimeStepAnalysis(seriesList) + oAnalysis = New TimeStepAnalysis() 'Case AnalysisFunctions.TestAnalysis 'EDIT THIS - ' oAnalysis = New TestAnalysis(seriesList) 'EDIT THIS + ' oAnalysis = New TestAnalysis() 'EDIT THIS Case Else Throw New Exception("Analysis not found!") diff --git a/source/Analysis/AnalysisParameter.vb b/source/Analysis/AnalysisParameter.vb new file mode 100644 index 00000000..115980ed --- /dev/null +++ b/source/Analysis/AnalysisParameter.vb @@ -0,0 +1,44 @@ +Friend Class AnalysisParameter + + Public Enum ParameterTypeEnum + Timeseries + [Integer] + [Date] + End Enum + + Public Enum ParameterAmountEnum + [Single] + Multiple + End Enum + + Public ParameterType As ParameterTypeEnum + Public ParameterAmount As ParameterAmountEnum + Public Description As String + Public DefaultValue As Object + Public MinValue As Object + Public MaxValue As Object + Private _Value As Object + + Public Property Value As Object + Get + Return _Value + End Get + Set + _Value = Value + End Set + End Property + + Public Sub New(description As String, type As ParameterTypeEnum, amount As ParameterAmountEnum, Optional def As Object = Nothing, Optional min As Object = Nothing, Optional max As Object = Nothing) + + Me.Description = description + Me.ParameterType = type + Me.ParameterAmount = amount + Me.DefaultValue = def + Me.MinValue = min + Me.MaxValue = max + + Me.Value = Nothing + + End Sub + +End Class diff --git a/source/Analysis/AnnualStatistics.vb b/source/Analysis/AnnualStatistics.vb index a0ee1648..99c96560 100644 --- a/source/Analysis/AnnualStatistics.vb +++ b/source/Analysis/AnnualStatistics.vb @@ -35,6 +35,24 @@ Friend Class AnnualStatistics Private stats As Dictionary(Of String, struct_stat) Private generateBoundingBoxes As Boolean + Private ReadOnly Property paramInputTimeseries As TimeSeries + Get + Return MyBase.parameters(0).Value + End Get + End Property + + Private ReadOnly Property paramStartOfHydrologicalYear As Integer + Get + Return MyBase.parameters(1).Value + End Get + End Property + + Private ReadOnly Property paramGenerateBoundingBoxes As Boolean + Get + Return MyBase.parameters(2).Value + End Get + End Property + Public Overloads Shared Function Description() As String Return "Calculates annual statistics (min, max, avg, vol) based on hydrological years." End Function @@ -73,12 +91,17 @@ Friend Class AnnualStatistics End Get End Property - Public Sub New(ByRef series As List(Of TimeSeries)) - MyBase.New(series) - 'Check: expects exactly one series - If (series.Count <> 1) Then - Throw New Exception("The Annual Statistics analysis requires the selection of exactly 1 time series!") - End If + Public Sub New() + MyBase.New() + MyBase.parameters.Add( + New AnalysisParameter("Input time series", AnalysisParameter.ParameterTypeEnum.Timeseries, AnalysisParameter.ParameterAmountEnum.Single) + ) + MyBase.parameters.Add( + New AnalysisParameter("Start of hydrological year", AnalysisParameter.ParameterTypeEnum.Integer, AnalysisParameter.ParameterAmountEnum.Single, def:=11, min:=1, max:=12) + ) + MyBase.parameters.Add( + New AnalysisParameter("Generate annual bounding boxes (max, avg, min)", AnalysisParameter.ParameterTypeEnum.Boolean, AnalysisParameter.ParameterAmountEnum.Single, def:=False) + ) stats = New Dictionary(Of String, struct_stat) End Sub @@ -109,10 +132,10 @@ Friend Class AnnualStatistics Me.generateBoundingBoxes = dialog.CheckBox_boundingbox.Checked 'stats for entire series - Me.stats.Add("Entire series", calculateStats(Me.InputTimeSeries(0))) + Me.stats.Add("Entire series", calculateStats(Me.paramInputTimeseries)) 'stats for hydrological years - hyoseries = Me.InputTimeSeries(0).SplitHydroYears(startMonth) + hyoseries = Me.paramInputTimeseries.SplitHydroYears(Me.paramStartOfHydrologicalYear) For Each kvp As KeyValuePair(Of Integer, TimeSeries) In hyoseries year = kvp.Key series = kvp.Value @@ -124,7 +147,7 @@ Friend Class AnnualStatistics Public Overrides Sub PrepareResults() 'result table - Me.ResultTable = New DataTable($"Annual statistics: {Me.InputTimeSeries(0).Title}") + Me.ResultTable = New DataTable($"Annual statistics: {Me.paramInputTimeseries.Title}") Me.ResultTable.Columns.Add("Period", GetType(String)) Me.ResultTable.Columns.Add("Start", GetType(DateTime)) diff --git a/source/Dialogs/WizardPages.vb b/source/Dialogs/WizardPages.vb new file mode 100644 index 00000000..a3690f78 --- /dev/null +++ b/source/Dialogs/WizardPages.vb @@ -0,0 +1,53 @@ +'Copyright (c) BlueM Dev Group +'Website: https://bluemodel.org +' +'All rights reserved. +' +'Released under the BSD-2-Clause License: +' +'Redistribution and use in source and binary forms, with or without modification, +'are permitted provided that the following conditions are met: +' +'* Redistributions of source code must retain the above copyright notice, this list +' of conditions and the following disclaimer. +'* Redistributions in binary form must reproduce the above copyright notice, this list +' of conditions and the following disclaimer in the documentation and/or other materials +' provided with the distribution. +' +'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +'EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +'OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +'SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +'SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +'OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +'HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +'TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +'EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +'-------------------------------------------------------------------------------------------- +' +Imports System +Imports System.Windows.Forms +''' +''' TabControl with hidden tabs +''' Source: https://stackoverflow.com/questions/2340566/creating-wizards-for-windows-forms-in-c-sharp +''' +Friend Class WizardPages + Inherits TabControl + + Protected Overrides Sub WndProc(ByRef m As Message) + 'Hide tabs by trapping the TCM_ADJUSTRECT message + If (m.Msg = Convert.ToInt32("0x1328", 16) And Not DesignMode) Then + m.Result = CType(1, IntPtr) + Else + MyBase.WndProc(m) + End If + End Sub + + Protected Overrides Sub OnKeyDown(ke As KeyEventArgs) + 'Block Ctrl+Tab And Ctrl+Shift+Tab hotkeys + If (ke.Control And ke.KeyCode = Keys.Tab) Then + Return + End If + MyBase.OnKeyDown(ke) + End Sub +End Class \ No newline at end of file diff --git a/source/Wave.vbproj b/source/Wave.vbproj index e7dc3ff6..2f1999ce 100644 --- a/source/Wave.vbproj +++ b/source/Wave.vbproj @@ -121,6 +121,7 @@ Form + AnalysisResultTable.vb @@ -284,6 +285,9 @@ Form + + Component + From e36bf5014401a2757195e9ddfc097a7546f533a4 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Tue, 12 Apr 2022 20:43:33 +0200 Subject: [PATCH 02/10] slight refactoring --- source/Analysis/Analysis.vb | 4 +- source/Analysis/AnalysisDialog.Designer.vb | 2 + source/Analysis/AnalysisDialog.vb | 9 ++-- source/Analysis/AnnualStatistics.vb | 51 +++++++--------------- source/Controllers/WaveController.vb | 3 +- 5 files changed, 25 insertions(+), 44 deletions(-) diff --git a/source/Analysis/Analysis.vb b/source/Analysis/Analysis.vb index 51e094de..b51d5d67 100644 --- a/source/Analysis/Analysis.vb +++ b/source/Analysis/Analysis.vb @@ -44,7 +44,7 @@ Friend MustInherit Class Analysis ''' ''' List of analysis parameters ''' - Friend parameters As List(Of AnalysisParameter) + Friend parameters As Dictionary(Of String, AnalysisParameter) ''' ''' Result text @@ -180,7 +180,7 @@ Friend MustInherit Class Analysis Public Sub New() 'Datenstrukturen initialisieren - Me.parameters = New List(Of AnalysisParameter) + Me.parameters = New Dictionary(Of String, AnalysisParameter) Me.ResultValues = New Dictionary(Of String, Double) Me.ResultSeries = New List(Of TimeSeries) End Sub diff --git a/source/Analysis/AnalysisDialog.Designer.vb b/source/Analysis/AnalysisDialog.Designer.vb index ac8702ca..b76c1521 100644 --- a/source/Analysis/AnalysisDialog.Designer.vb +++ b/source/Analysis/AnalysisDialog.Designer.vb @@ -179,6 +179,8 @@ Partial Class AnalysisDialog 'Button_Execute ' Me.Button_Execute.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button_Execute.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Button_Execute.Enabled = False Me.Button_Execute.Location = New System.Drawing.Point(600, 308) Me.Button_Execute.Name = "Button_Execute" Me.Button_Execute.Size = New System.Drawing.Size(75, 23) diff --git a/source/Analysis/AnalysisDialog.vb b/source/Analysis/AnalysisDialog.vb index 50719515..44c496e8 100644 --- a/source/Analysis/AnalysisDialog.vb +++ b/source/Analysis/AnalysisDialog.vb @@ -20,7 +20,7 @@ ''' Friend Class AnalysisDialog - Private analysis As Analysis + Friend analysis As Analysis Private isInitializing As Boolean Private seriesList As List(Of TimeSeries) @@ -32,7 +32,9 @@ Friend Class AnalysisDialog 'Populate combobox with analysis functions Me.ListBox_AnalysisFunctions.DataSource = System.Enum.GetValues(GetType(AnalysisFactory.AnalysisFunctions)) + Me.ListBox_AnalysisFunctions.SelectedIndex = -1 + 'store list of time series Me.seriesList = seriesList Me.isInitializing = False @@ -77,7 +79,7 @@ Friend Class AnalysisDialog Me.TableLayoutPanel1.RowCount = analysis.parameters.Count Me.TableLayoutPanel1.Visible = True Dim row As Integer = 0 - For Each param As AnalysisParameter In analysis.parameters + For Each param As AnalysisParameter In analysis.parameters.Values 'label Dim label As New Label() @@ -161,7 +163,4 @@ Friend Class AnalysisDialog End If End Sub - Private Sub Button_Execute_Click(sender As Object, e As EventArgs) Handles Button_Execute.Click - Me.analysis.ProcessAnalysis() - End Sub End Class \ No newline at end of file diff --git a/source/Analysis/AnnualStatistics.vb b/source/Analysis/AnnualStatistics.vb index 99c96560..f329c306 100644 --- a/source/Analysis/AnnualStatistics.vb +++ b/source/Analysis/AnnualStatistics.vb @@ -32,27 +32,11 @@ Friend Class AnnualStatistics Public vol As Double End Structure + Private timeseries As TimeSeries + Private startOfHydrologicalYear As Integer Private stats As Dictionary(Of String, struct_stat) Private generateBoundingBoxes As Boolean - Private ReadOnly Property paramInputTimeseries As TimeSeries - Get - Return MyBase.parameters(0).Value - End Get - End Property - - Private ReadOnly Property paramStartOfHydrologicalYear As Integer - Get - Return MyBase.parameters(1).Value - End Get - End Property - - Private ReadOnly Property paramGenerateBoundingBoxes As Boolean - Get - Return MyBase.parameters(2).Value - End Get - End Property - Public Overloads Shared Function Description() As String Return "Calculates annual statistics (min, max, avg, vol) based on hydrological years." End Function @@ -93,15 +77,16 @@ Friend Class AnnualStatistics Public Sub New() MyBase.New() - MyBase.parameters.Add( + MyBase.parameters.Add("timeseries", New AnalysisParameter("Input time series", AnalysisParameter.ParameterTypeEnum.Timeseries, AnalysisParameter.ParameterAmountEnum.Single) ) - MyBase.parameters.Add( + MyBase.parameters.Add("startOfHydrologicalYear", New AnalysisParameter("Start of hydrological year", AnalysisParameter.ParameterTypeEnum.Integer, AnalysisParameter.ParameterAmountEnum.Single, def:=11, min:=1, max:=12) ) - MyBase.parameters.Add( + MyBase.parameters.Add("generateBoundingBoxes", New AnalysisParameter("Generate annual bounding boxes (max, avg, min)", AnalysisParameter.ParameterTypeEnum.Boolean, AnalysisParameter.ParameterAmountEnum.Single, def:=False) ) + 'initialize data structures stats = New Dictionary(Of String, struct_stat) End Sub @@ -120,26 +105,22 @@ Friend Class AnnualStatistics Public Overrides Sub ProcessAnalysis() Dim hyoseries As Dictionary(Of Integer, TimeSeries) Dim year As Integer - Dim series As TimeSeries - - Dim dialog As New AnnualStatistics_Dialog() - Dim dialogResult As DialogResult = dialog.ShowDialog() - If dialogResult <> DialogResult.OK Then - Throw New Exception("User abort!") - End If + Dim ts As TimeSeries - Dim startMonth As Integer = CType(dialog.ComboBox_startMonth.SelectedItem, Month).number - Me.generateBoundingBoxes = dialog.CheckBox_boundingbox.Checked + 'get input parameters + Me.timeseries = MyBase.parameters("timeseries").Value + Me.startOfHydrologicalYear = MyBase.parameters("startOfHydrologicalYear").Value + Me.generateBoundingBoxes = MyBase.parameters("generateBoundingBoxes").Value 'stats for entire series - Me.stats.Add("Entire series", calculateStats(Me.paramInputTimeseries)) + Me.stats.Add("Entire series", calculateStats(Me.timeseries)) 'stats for hydrological years - hyoseries = Me.paramInputTimeseries.SplitHydroYears(Me.paramStartOfHydrologicalYear) + hyoseries = Me.timeseries.SplitHydroYears(Me.startOfHydrologicalYear) For Each kvp As KeyValuePair(Of Integer, TimeSeries) In hyoseries year = kvp.Key - series = kvp.Value - Me.stats.Add(year.ToString, calculateStats(series)) + ts = kvp.Value + Me.stats.Add(year.ToString, calculateStats(ts)) Next End Sub @@ -147,7 +128,7 @@ Friend Class AnnualStatistics Public Overrides Sub PrepareResults() 'result table - Me.ResultTable = New DataTable($"Annual statistics: {Me.paramInputTimeseries.Title}") + Me.ResultTable = New DataTable($"Annual statistics: {Me.timeseries.Title}") Me.ResultTable.Columns.Add("Period", GetType(String)) Me.ResultTable.Columns.Add("Start", GetType(DateTime)) diff --git a/source/Controllers/WaveController.vb b/source/Controllers/WaveController.vb index 5e333b29..a11f1e31 100644 --- a/source/Controllers/WaveController.vb +++ b/source/Controllers/WaveController.vb @@ -818,8 +818,7 @@ Friend Class WaveController Call Log.AddLogEntry(Log.levels.info, $"Starting analysis {oAnalysisDialog.selectedAnalysisFunction} ...") 'Analyse instanzieren - Dim oAnalysis As Analysis - oAnalysis = AnalysisFactory.CreateAnalysis(oAnalysisDialog.selectedAnalysisFunction, oAnalysisDialog.selectedTimeseries) + Dim oAnalysis As Analysis = oAnalysisDialog.analysis 'Add handlers for progress events AddHandler oAnalysis.AnalysisStarted, AddressOf ProgressReset From 98f05abb74432c39e5440481a79b67de7ad0656d Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Tue, 12 Apr 2022 20:52:51 +0200 Subject: [PATCH 03/10] refactor Autocorrelation to use wizard --- .../AnnualStatistics_Dialog.Designer.vb | 96 --------- source/Analysis/AnnualStatistics_Dialog.resx | 145 ------------- source/Analysis/AnnualStatistics_Dialog.vb | 34 --- source/Analysis/Autocorrelation.vb | 44 ++-- .../Autocorrelation_Dialog.Designer.vb | 201 ------------------ source/Analysis/Autocorrelation_Dialog.resx | 145 ------------- source/Analysis/Autocorrelation_Dialog.vb | 66 ------ source/Wave.vbproj | 18 -- 8 files changed, 23 insertions(+), 726 deletions(-) delete mode 100644 source/Analysis/AnnualStatistics_Dialog.Designer.vb delete mode 100644 source/Analysis/AnnualStatistics_Dialog.resx delete mode 100644 source/Analysis/AnnualStatistics_Dialog.vb delete mode 100644 source/Analysis/Autocorrelation_Dialog.Designer.vb delete mode 100644 source/Analysis/Autocorrelation_Dialog.resx delete mode 100644 source/Analysis/Autocorrelation_Dialog.vb diff --git a/source/Analysis/AnnualStatistics_Dialog.Designer.vb b/source/Analysis/AnnualStatistics_Dialog.Designer.vb deleted file mode 100644 index 305a0b97..00000000 --- a/source/Analysis/AnnualStatistics_Dialog.Designer.vb +++ /dev/null @@ -1,96 +0,0 @@ - -Partial Class AnnualStatistics_Dialog - Inherits System.Windows.Forms.Form - - 'Form overrides dispose to clean up the component list. - - Protected Overrides Sub Dispose(disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Required by the Windows Form Designer - Private components As System.ComponentModel.IContainer - - 'NOTE: The following procedure is required by the Windows Form Designer - 'It can be modified using the Windows Form Designer. - 'Do not modify it using the code editor. - - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(AnnualStatistics_Dialog)) - Me.Button_OK = New System.Windows.Forms.Button() - Me.ComboBox_startMonth = New System.Windows.Forms.ComboBox() - Me.Label_startMonth = New System.Windows.Forms.Label() - Me.CheckBox_boundingbox = New System.Windows.Forms.CheckBox() - Me.SuspendLayout() - ' - 'Button_OK - ' - Me.Button_OK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Button_OK.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Button_OK.Location = New System.Drawing.Point(192, 59) - Me.Button_OK.Name = "Button_OK" - Me.Button_OK.Size = New System.Drawing.Size(75, 23) - Me.Button_OK.TabIndex = 3 - Me.Button_OK.Text = "OK" - Me.Button_OK.UseVisualStyleBackColor = True - ' - 'ComboBox_startMonth - ' - Me.ComboBox_startMonth.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.ComboBox_startMonth.FormattingEnabled = True - Me.ComboBox_startMonth.Location = New System.Drawing.Point(144, 6) - Me.ComboBox_startMonth.Name = "ComboBox_startMonth" - Me.ComboBox_startMonth.Size = New System.Drawing.Size(123, 21) - Me.ComboBox_startMonth.TabIndex = 14 - ' - 'Label_startMonth - ' - Me.Label_startMonth.AutoSize = True - Me.Label_startMonth.Location = New System.Drawing.Point(12, 9) - Me.Label_startMonth.Name = "Label_startMonth" - Me.Label_startMonth.Size = New System.Drawing.Size(126, 13) - Me.Label_startMonth.TabIndex = 13 - Me.Label_startMonth.Text = "Start of hydrological year:" - ' - 'CheckBox_boundingbox - ' - Me.CheckBox_boundingbox.AutoSize = True - Me.CheckBox_boundingbox.Location = New System.Drawing.Point(12, 33) - Me.CheckBox_boundingbox.Name = "CheckBox_boundingbox" - Me.CheckBox_boundingbox.Size = New System.Drawing.Size(257, 17) - Me.CheckBox_boundingbox.TabIndex = 15 - Me.CheckBox_boundingbox.Text = "Generate annual bounding boxes (max, avg, min)" - Me.CheckBox_boundingbox.UseVisualStyleBackColor = True - ' - 'AnnualStatistics_Dialog - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(279, 94) - Me.Controls.Add(Me.CheckBox_boundingbox) - Me.Controls.Add(Me.ComboBox_startMonth) - Me.Controls.Add(Me.Label_startMonth) - Me.Controls.Add(Me.Button_OK) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "AnnualStatistics_Dialog" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "AnnualStatistics" - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - Private WithEvents Button_OK As System.Windows.Forms.Button - Friend WithEvents ComboBox_startMonth As ComboBox - Friend WithEvents Label_startMonth As Label - Friend WithEvents CheckBox_boundingbox As CheckBox -End Class diff --git a/source/Analysis/AnnualStatistics_Dialog.resx b/source/Analysis/AnnualStatistics_Dialog.resx deleted file mode 100644 index 192f6f4e..00000000 --- a/source/Analysis/AnnualStatistics_Dialog.resx +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALRpK/+zaCv/smgq/7FoKv+wZir/r2Yq/69mKf+uZSn/rmUo/61kKP+tZCj/rGQo/6tj - KP+rYyj/AAAAAAAAAAC2ai3/KWgyTydoMUY5UCdFJ2gxCQAAAABIKBMdAAAAAAAAAABCJRIdAAAAACdv - MhosWihoKHM1DAAAAAAAAAAAt2st/yx0ORkrdTiZLXU34it1OO0sdjhoAAAAAAAAAAAAAAAAAAAAACt/ - OAgsgjjeK4Q2kwAAAAAAAAAAAAAAALltLv8oFZxAAAAAAAAAAAAyiEGWMolB8TGKQKIxjEAMAAAAAAAA - AAAxj0CIL5I+7wAAAAAAAAAAAAAAAAAAAAC7bi//BAD5VAQA+xcAAAAAAAAAADmZSko5mUjoN5pI4Dib - Rq02nUW+NZ9E9DOgQl8AAAAAEQ39GgAAAAAAAAAAvW8w/wUB/08GAv/cAAAAAAAAAAAAAAAA3FAAd0Ci - Spc8pEvMOqRJzTejRlcAAAAAAAAAABsX+7AAAAAAAAAAAL5xMP9QMHsvEQ39/hIO/IbgWACE4FcA/+BX - Av3gVwP+31YGVwAAAAAAAAAAAAAAAAAAAAAkIfn6AAAAAAAAAADAcjL/AAAAABoW+6UcGfn7uk499+Bh - CpLhYg0D32IQuN5hEfjdYhV+AAAAAAAAAAAtKvnALiv38AAAAAAAAAAAwnMy/wAAAAAAAAAAOSrr/kUx - 4fkAAAAAAAAAAAAAAADgbyCo3nIk+95zJ581MvclNjP2/4hbppcAAAAAAAAAAMNzM/+ARyId4XYbiq9g - Z/o4MvX3OTb2lQAAAAAAAAAAAAAAAOB/M43fgTf934I5+9+GPPnfiD7+AAAAAAAAAADEdDT/4oAmA+B/ - LPnggTC2QT71h0NA9P5GQ/M8AAAAAAAAAABJRvMiS0jx8VBK7vbgk0uAAAAAAAAAAAAAAAAAxXU0/+CH - ODPeiT/93oxBCQAAAABQTfHDUk/y+lJP8spTUfDdU1Hw+1NR8OJTUfAiAAAAAAAAAAAAAAAAAAAAAMZ2 - NP/GfT9m3ZJPpwAAAAAAAAAAAAAAAFpY74paWO/gWVfv01lX714AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADGdjT/3ZdbVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//8AAIABAAC//wAAo/MAALjnAAC+DwAArx0AAKB9AAChOQAAs4kAAKHBAACh4wAArA8AAK4/ - //+//////////w== - - - \ No newline at end of file diff --git a/source/Analysis/AnnualStatistics_Dialog.vb b/source/Analysis/AnnualStatistics_Dialog.vb deleted file mode 100644 index 1d3ff8ee..00000000 --- a/source/Analysis/AnnualStatistics_Dialog.vb +++ /dev/null @@ -1,34 +0,0 @@ -'BlueM.Wave -'Copyright (C) BlueM Dev Group -' -' -'This program is free software: you can redistribute it and/or modify -'it under the terms of the GNU Lesser General Public License as published by -'the Free Software Foundation, either version 3 of the License, or -'(at your option) any later version. -' -'This program is distributed in the hope that it will be useful, -'but WITHOUT ANY WARRANTY; without even the implied warranty of -'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -'GNU Lesser General Public License for more details. -' -'You should have received a copy of the GNU Lesser General Public License -'along with this program. If not, see . -' -Friend Class AnnualStatistics_Dialog - - Public Sub New() - - ' This call is required by the Windows Form Designer. - InitializeComponent() - - ' Add any initialization after the InitializeComponent() call. - - Me.ComboBox_startMonth.BeginUpdate() - Me.ComboBox_startMonth.Items.AddRange(Helpers.CalendarMonths.ToArray) - Me.ComboBox_startMonth.EndUpdate() - - Me.ComboBox_startMonth.SelectedIndex = 10 'November - End Sub - -End Class \ No newline at end of file diff --git a/source/Analysis/Autocorrelation.vb b/source/Analysis/Autocorrelation.vb index 05b9db6a..dfd58bc1 100644 --- a/source/Analysis/Autocorrelation.vb +++ b/source/Analysis/Autocorrelation.vb @@ -82,17 +82,18 @@ Friend Class Autocorrelation ''' ''' Konstruktor ''' - ''' zu analysierende Zeitreihen - Public Sub New(ByRef zeitreihen As List(Of TimeSeries)) - - 'Konstruktor der Basisklasse aufrufen! - Call MyBase.New(zeitreihen) - - 'Prüfung: Anzahl erwarteter Zeitreihen - If (zeitreihen.Count <> 1) Then - Throw New Exception("The Autocorrelation analysis requires the selection of exactly 1 time series!") - End If - + Public Sub New() + MyBase.New() + 'define input parameters + MyBase.parameters.Add("timeseries", + New AnalysisParameter("Input time series", AnalysisParameter.ParameterTypeEnum.Timeseries, AnalysisParameter.ParameterAmountEnum.Single) + ) + MyBase.parameters.Add("lagSize", + New AnalysisParameter("Number of time steps", AnalysisParameter.ParameterTypeEnum.Integer, AnalysisParameter.ParameterAmountEnum.Single, def:=5, min:=1, max:=10) + ) + MyBase.parameters.Add("numberOfOffsets", + New AnalysisParameter("Number of offsets", AnalysisParameter.ParameterTypeEnum.Integer, AnalysisParameter.ParameterAmountEnum.Single, def:=300, min:=1, max:=2000) + ) End Sub ''' @@ -100,18 +101,19 @@ Friend Class Autocorrelation ''' Public Overrides Sub ProcessAnalysis() - Me.ts_in = Me.InputTimeSeries(0) - - 'Parameter-Dialog anzeigen - Dim dialog As New Autocorrelation_Dialog(Me.ts_in) - If (dialog.ShowDialog() <> DialogResult.OK) Then - Throw New Exception("User abort") + 'get input parameters + Me.ts_in = MyBase.parameters("timeseries").Value + Me.lagSize = MyBase.parameters("lagSize").Value + Me.lagCount = MyBase.parameters("numberOfOffsets").Value + + 'Check max possible lag + Dim maxlag As Integer = Me.ts_in.Length / Me.lagSize - 1 + If Me.lagSize * Me.lagCount > Me.ts_in.Length Then + Throw New Exception( + $"The selected time series is too short or the largest lag is too long! " & + $"Please select at most {maxlag} offsets with the currently set number of time steps!") End If - 'Parameter der Lags aus Dialog abfragen - Me.lagSize = dialog.lagSize - Me.lagCount = dialog.lagCount - 'Announce progress start MyBase.AnalysisProgressStart(lagCount) diff --git a/source/Analysis/Autocorrelation_Dialog.Designer.vb b/source/Analysis/Autocorrelation_Dialog.Designer.vb deleted file mode 100644 index f55b24aa..00000000 --- a/source/Analysis/Autocorrelation_Dialog.Designer.vb +++ /dev/null @@ -1,201 +0,0 @@ - _ -Partial Class Autocorrelation_Dialog - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Autocorrelation_Dialog)) - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.OK_Button = New System.Windows.Forms.Button() - Me.spnAnzahlLag = New System.Windows.Forms.NumericUpDown() - Me.spnGroesseLag = New System.Windows.Forms.NumericUpDown() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.Label4 = New System.Windows.Forms.Label() - Me.Label5 = New System.Windows.Forms.Label() - Me.Label7 = New System.Windows.Forms.Label() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.TableLayoutPanel1.SuspendLayout() - CType(Me.spnAnzahlLag, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.spnGroesseLag, System.ComponentModel.ISupportInitialize).BeginInit() - Me.GroupBox1.SuspendLayout() - Me.SuspendLayout() - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(152, 171) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 1 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) - Me.TableLayoutPanel1.TabIndex = 0 - ' - 'Cancel_Button - ' - Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'OK_Button - ' - Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.OK_Button.Location = New System.Drawing.Point(3, 3) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'spnAnzahlLag - ' - Me.spnAnzahlLag.Location = New System.Drawing.Point(121, 47) - Me.spnAnzahlLag.Maximum = New Decimal(New Integer() {2000, 0, 0, 0}) - Me.spnAnzahlLag.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.spnAnzahlLag.Name = "spnAnzahlLag" - Me.spnAnzahlLag.Size = New System.Drawing.Size(68, 20) - Me.spnAnzahlLag.TabIndex = 9 - Me.spnAnzahlLag.Value = New Decimal(New Integer() {300, 0, 0, 0}) - ' - 'spnGroesseLag - ' - Me.spnGroesseLag.Location = New System.Drawing.Point(121, 22) - Me.spnGroesseLag.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) - Me.spnGroesseLag.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.spnGroesseLag.Name = "spnGroesseLag" - Me.spnGroesseLag.Size = New System.Drawing.Size(68, 20) - Me.spnGroesseLag.TabIndex = 8 - Me.spnGroesseLag.Value = New Decimal(New Integer() {5, 0, 0, 0}) - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Location = New System.Drawing.Point(6, 49) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(93, 13) - Me.Label2.TabIndex = 6 - Me.Label2.Text = "Number of offsets:" - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Location = New System.Drawing.Point(6, 24) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(109, 13) - Me.Label1.TabIndex = 5 - Me.Label1.Text = "Number of time steps:" - ' - 'Label4 - ' - Me.Label4.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ - Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Label4.AutoEllipsis = True - Me.Label4.Location = New System.Drawing.Point(12, 93) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(286, 75) - Me.Label4.TabIndex = 10 - Me.Label4.Text = "More offsets take longer to compute." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "NOTE: The time series should not contain " & - "a trend and be equidistant." - ' - 'Label5 - ' - Me.Label5.AutoSize = True - Me.Label5.ForeColor = System.Drawing.SystemColors.ControlText - Me.Label5.Location = New System.Drawing.Point(195, 24) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(40, 13) - Me.Label5.TabIndex = 13 - Me.Label5.Text = "(1 - 10)" - ' - 'Label7 - ' - Me.Label7.AutoSize = True - Me.Label7.Location = New System.Drawing.Point(195, 49) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(52, 13) - Me.Label7.TabIndex = 14 - Me.Label7.Text = "(1 - 2000)" - ' - 'GroupBox1 - ' - Me.GroupBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.GroupBox1.Controls.Add(Me.Label7) - Me.GroupBox1.Controls.Add(Me.Label1) - Me.GroupBox1.Controls.Add(Me.Label5) - Me.GroupBox1.Controls.Add(Me.Label2) - Me.GroupBox1.Controls.Add(Me.spnGroesseLag) - Me.GroupBox1.Controls.Add(Me.spnAnzahlLag) - Me.GroupBox1.Location = New System.Drawing.Point(12, 12) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(286, 78) - Me.GroupBox1.TabIndex = 15 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Offsets (lag)" - ' - 'Autocorrelation_Dialog - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(310, 212) - Me.Controls.Add(Me.GroupBox1) - Me.Controls.Add(Me.Label4) - Me.Controls.Add(Me.TableLayoutPanel1) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "Autocorrelation_Dialog" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Autocorrelation" - Me.TableLayoutPanel1.ResumeLayout(False) - CType(Me.spnAnzahlLag, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.spnGroesseLag, System.ComponentModel.ISupportInitialize).EndInit() - Me.GroupBox1.ResumeLayout(False) - Me.GroupBox1.PerformLayout() - Me.ResumeLayout(False) - - End Sub - Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents OK_Button As System.Windows.Forms.Button - Friend WithEvents Cancel_Button As System.Windows.Forms.Button - Friend WithEvents spnAnzahlLag As System.Windows.Forms.NumericUpDown - Friend WithEvents spnGroesseLag As System.Windows.Forms.NumericUpDown - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Label4 As System.Windows.Forms.Label - Friend WithEvents Label5 As Label - Friend WithEvents Label7 As Label - Friend WithEvents GroupBox1 As GroupBox -End Class diff --git a/source/Analysis/Autocorrelation_Dialog.resx b/source/Analysis/Autocorrelation_Dialog.resx deleted file mode 100644 index 192f6f4e..00000000 --- a/source/Analysis/Autocorrelation_Dialog.resx +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALRpK/+zaCv/smgq/7FoKv+wZir/r2Yq/69mKf+uZSn/rmUo/61kKP+tZCj/rGQo/6tj - KP+rYyj/AAAAAAAAAAC2ai3/KWgyTydoMUY5UCdFJ2gxCQAAAABIKBMdAAAAAAAAAABCJRIdAAAAACdv - MhosWihoKHM1DAAAAAAAAAAAt2st/yx0ORkrdTiZLXU34it1OO0sdjhoAAAAAAAAAAAAAAAAAAAAACt/ - OAgsgjjeK4Q2kwAAAAAAAAAAAAAAALltLv8oFZxAAAAAAAAAAAAyiEGWMolB8TGKQKIxjEAMAAAAAAAA - AAAxj0CIL5I+7wAAAAAAAAAAAAAAAAAAAAC7bi//BAD5VAQA+xcAAAAAAAAAADmZSko5mUjoN5pI4Dib - Rq02nUW+NZ9E9DOgQl8AAAAAEQ39GgAAAAAAAAAAvW8w/wUB/08GAv/cAAAAAAAAAAAAAAAA3FAAd0Ci - Spc8pEvMOqRJzTejRlcAAAAAAAAAABsX+7AAAAAAAAAAAL5xMP9QMHsvEQ39/hIO/IbgWACE4FcA/+BX - Av3gVwP+31YGVwAAAAAAAAAAAAAAAAAAAAAkIfn6AAAAAAAAAADAcjL/AAAAABoW+6UcGfn7uk499+Bh - CpLhYg0D32IQuN5hEfjdYhV+AAAAAAAAAAAtKvnALiv38AAAAAAAAAAAwnMy/wAAAAAAAAAAOSrr/kUx - 4fkAAAAAAAAAAAAAAADgbyCo3nIk+95zJ581MvclNjP2/4hbppcAAAAAAAAAAMNzM/+ARyId4XYbiq9g - Z/o4MvX3OTb2lQAAAAAAAAAAAAAAAOB/M43fgTf934I5+9+GPPnfiD7+AAAAAAAAAADEdDT/4oAmA+B/ - LPnggTC2QT71h0NA9P5GQ/M8AAAAAAAAAABJRvMiS0jx8VBK7vbgk0uAAAAAAAAAAAAAAAAAxXU0/+CH - ODPeiT/93oxBCQAAAABQTfHDUk/y+lJP8spTUfDdU1Hw+1NR8OJTUfAiAAAAAAAAAAAAAAAAAAAAAMZ2 - NP/GfT9m3ZJPpwAAAAAAAAAAAAAAAFpY74paWO/gWVfv01lX714AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADGdjT/3ZdbVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//8AAIABAAC//wAAo/MAALjnAAC+DwAArx0AAKB9AAChOQAAs4kAAKHBAACh4wAArA8AAK4/ - //+//////////w== - - - \ No newline at end of file diff --git a/source/Analysis/Autocorrelation_Dialog.vb b/source/Analysis/Autocorrelation_Dialog.vb deleted file mode 100644 index c319b484..00000000 --- a/source/Analysis/Autocorrelation_Dialog.vb +++ /dev/null @@ -1,66 +0,0 @@ -'BlueM.Wave -'Copyright (C) BlueM Dev Group -' -' -'This program is free software: you can redistribute it and/or modify -'it under the terms of the GNU Lesser General Public License as published by -'the Free Software Foundation, either version 3 of the License, or -'(at your option) any later version. -' -'This program is distributed in the hope that it will be useful, -'but WITHOUT ANY WARRANTY; without even the implied warranty of -'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -'GNU Lesser General Public License for more details. -' -'You should have received a copy of the GNU Lesser General Public License -'along with this program. If not, see . -' -Friend Class Autocorrelation_Dialog - - Private timeseries As TimeSeries - - Public ReadOnly Property lagSize As Integer - Get - 'Größe der Lags auslesen - Return Me.spnGroesseLag.Value - End Get - End Property - - Public ReadOnly Property lagCount As Integer - Get - 'Anzahl der Lags auslesen - Return Me.spnAnzahlLag.Value() - End Get - End Property - - Public Sub New(ts As TimeSeries) - - ' This call is required by the designer. - InitializeComponent() - - ' Add any initialization after the InitializeComponent() call. - Me.timeseries = ts - - End Sub - - Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click - - 'Check max possible lag - Dim maxlag As Integer = Me.timeseries.Length / lagSize - 1 - If lagSize * lagCount > Me.timeseries.Length Then - MsgBox( - $"The selected time series is too short or the largest lag is too long! " & - $"Please select at most {maxlag} offsets with the currently set number of time steps!", MsgBoxStyle.Exclamation) - Return - End If - - Me.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Close() - End Sub - - Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close() - End Sub - -End Class diff --git a/source/Wave.vbproj b/source/Wave.vbproj index 2f1999ce..fc50ee50 100644 --- a/source/Wave.vbproj +++ b/source/Wave.vbproj @@ -130,12 +130,6 @@ - - Autocorrelation_Dialog.vb - - - Form - @@ -161,12 +155,6 @@ - - AnnualStatistics_Dialog.vb - - - Form - GoodnessOfFit_Dialog.vb @@ -372,9 +360,6 @@ AnalysisResultTable.vb - - Autocorrelation_Dialog.vb - CumulativeDialog.vb @@ -384,9 +369,6 @@ Comparison_Dialog.vb - - AnnualStatistics_Dialog.vb - GoodnessOfFit_Dialog.vb From 5104694cea27e916377f666fe21e107c3253063e Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Tue, 12 Apr 2022 21:01:40 +0200 Subject: [PATCH 04/10] refactor Analysis.Description as an instance property --- source/Analysis/Analysis.vb | 5 +--- source/Analysis/AnalysisDialog.vb | 2 +- source/Analysis/AnalysisFactory.vb | 39 ---------------------------- source/Analysis/AnnualStatistics.vb | 8 +++--- source/Analysis/Autocorrelation.vb | 8 +++--- source/Analysis/ChangeTimestep.vb | 8 +++--- source/Analysis/Comparison.vb | 8 +++--- source/Analysis/Cumulative.vb | 8 +++--- source/Analysis/DoubleSumCurve.vb | 8 +++--- source/Analysis/GoodnessOfFit.vb | 8 +++--- source/Analysis/Histogram.vb | 8 +++--- source/Analysis/LinearRegression.vb | 8 +++--- source/Analysis/MonthlyStatistics.vb | 8 +++--- source/Analysis/TestAnalysis.vb | 8 +++--- source/Analysis/TimestepAnalysis.vb | 8 +++--- 15 files changed, 62 insertions(+), 80 deletions(-) diff --git a/source/Analysis/Analysis.vb b/source/Analysis/Analysis.vb index b51d5d67..053e8bf8 100644 --- a/source/Analysis/Analysis.vb +++ b/source/Analysis/Analysis.vb @@ -87,11 +87,8 @@ Friend MustInherit Class Analysis ''' ''' Returns a text description of the analysis function - ''' Should be overloaded by inheriting analysis functions ''' - Public Shared Function Description() As String - Return "No description found" - End Function + Public MustOverride ReadOnly Property Description() As String ''' ''' Flag indicating whether the analysis function has a result text diff --git a/source/Analysis/AnalysisDialog.vb b/source/Analysis/AnalysisDialog.vb index 44c496e8..01616636 100644 --- a/source/Analysis/AnalysisDialog.vb +++ b/source/Analysis/AnalysisDialog.vb @@ -67,7 +67,7 @@ Friend Class AnalysisDialog Dim url As String 'update the description and wiki link - Me.Label_AnalaysisDescription.Text = AnalysisFactory.getAnalysisDescription(Me.selectedAnalysisFunction) + Me.Label_AnalaysisDescription.Text = Me.analysis.Description url = "https://wiki.bluemodel.org/index.php/Wave:" & Me.selectedAnalysisFunction.ToString("g") Me.LinkLabel_Helplink.Text = url Me.LinkLabel_Helplink.Links.Clear() diff --git a/source/Analysis/AnalysisFactory.vb b/source/Analysis/AnalysisFactory.vb index 22b7143d..44a9bc6e 100644 --- a/source/Analysis/AnalysisFactory.vb +++ b/source/Analysis/AnalysisFactory.vb @@ -39,45 +39,6 @@ Friend Module AnalysisFactory 'TestAnalysis 'EDIT THIS End Enum - ''' - ''' Returns a text description of the analysis function - ''' - ''' - ''' - Public Function getAnalysisDescription(analysisfunction As AnalysisFunctions) As String - Select Case analysisfunction - Case AnalysisFunctions.AnnualStatistics - Return AnnualStatistics.Description - Case AnalysisFunctions.Autocorrelation - Return Autocorrelation.Description - Case AnalysisFunctions.Calculator - Return Calculator.Description - Case AnalysisFunctions.ChangeTimestep - Return ChangeTimestep.Description - Case AnalysisFunctions.Comparison - Return Comparison.Description - Case AnalysisFunctions.Cumulative - Return Cumulative.Description - Case AnalysisFunctions.DoubleSumCurve - Return DoubleSumCurve.Description - Case AnalysisFunctions.GoodnessOfFit - Return GoodnessOfFit.Description - Case AnalysisFunctions.Histogram - Return Histogram.Description - Case AnalysisFunctions.LinearRegression - Return LinearRegression.Description - Case AnalysisFunctions.MonthlyStatistics - Return MonthlyStatistics.Description - Case AnalysisFunctions.TimestepAnalysis - Return TimeStepAnalysis.Description - 'Case AnalysisFunctions.TestAnalysis 'EDIT THIS - ' Return TestAnalysis.Description 'EDIT THIS - Case Else - Return "Description not found" - End Select - End Function - - ''' ''' Factory method for creating an analysis instance ''' ''' the type of analysis instance to create diff --git a/source/Analysis/AnnualStatistics.vb b/source/Analysis/AnnualStatistics.vb index f329c306..bf1ff010 100644 --- a/source/Analysis/AnnualStatistics.vb +++ b/source/Analysis/AnnualStatistics.vb @@ -37,9 +37,11 @@ Friend Class AnnualStatistics Private stats As Dictionary(Of String, struct_stat) Private generateBoundingBoxes As Boolean - Public Overloads Shared Function Description() As String - Return "Calculates annual statistics (min, max, avg, vol) based on hydrological years." - End Function + Public Overrides ReadOnly Property Description() As String + Get + Return "Calculates annual statistics (min, max, avg, vol) based on hydrological years." + End Get + End Property Public Overrides ReadOnly Property hasResultChart() As Boolean Get diff --git a/source/Analysis/Autocorrelation.vb b/source/Analysis/Autocorrelation.vb index dfd58bc1..6717e23b 100644 --- a/source/Analysis/Autocorrelation.vb +++ b/source/Analysis/Autocorrelation.vb @@ -32,9 +32,11 @@ Friend Class Autocorrelation Private dtList As List(Of TimeSpan) 'list of time step differences Private periode_avg As Double 'Durchschinttliche Periode - Public Overloads Shared Function Description() As String - Return "Autocorrelation analysis for analyzing time series periodicity" - End Function + Public Overrides ReadOnly Property Description() As String + Get + Return "Autocorrelation analysis for analyzing time series periodicity" + End Get + End Property ''' ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt diff --git a/source/Analysis/ChangeTimestep.vb b/source/Analysis/ChangeTimestep.vb index 3344c853..91d8e12d 100644 --- a/source/Analysis/ChangeTimestep.vb +++ b/source/Analysis/ChangeTimestep.vb @@ -27,9 +27,11 @@ Friend Class ChangeTimestep ''' ''' Returns a text description of the analysis function ''' - Public Overloads Shared Function Description() As String - Return "Make a time series equidistant with a user-specified timestep" - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Make a time series equidistant with a user-specified timestep" + End Get + End Property ''' ''' Flag indicating whether the analysis function has a result test diff --git a/source/Analysis/Comparison.vb b/source/Analysis/Comparison.vb index 2bb8b9be..e53242b8 100644 --- a/source/Analysis/Comparison.vb +++ b/source/Analysis/Comparison.vb @@ -25,9 +25,11 @@ Friend Class Comparison Private ts_x, ts_y As TimeSeries - Public Overloads Shared Function Description() As String - Return "Plots the coincident values of two time series against each other, least-squares fits a line to the resulting points and calculates the linear correlation coefficient." - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Plots the coincident values of two time series against each other, least-squares fits a line to the resulting points and calculates the linear correlation coefficient." + End Get + End Property ''' ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt diff --git a/source/Analysis/Cumulative.vb b/source/Analysis/Cumulative.vb index dd7690be..6eb954f3 100644 --- a/source/Analysis/Cumulative.vb +++ b/source/Analysis/Cumulative.vb @@ -23,9 +23,11 @@ Friend Class Cumulative #Region "Properties" - Public Overloads Shared Function Description() As String - Return "For each selected time series, calculates a new time series that consists of the cumulative values of the original series. NaN values are ignored." - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "For each selected time series, calculates a new time series that consists of the cumulative values of the original series. NaN values are ignored." + End Get + End Property ''' ''' Flag indicating whether the analysis function has a result test diff --git a/source/Analysis/DoubleSumCurve.vb b/source/Analysis/DoubleSumCurve.vb index a3556ac9..802af2c0 100644 --- a/source/Analysis/DoubleSumCurve.vb +++ b/source/Analysis/DoubleSumCurve.vb @@ -25,9 +25,11 @@ Friend Class DoubleSumCurve Private ts_1, ts_2 As TimeSeries Private summe1(), summe2() As Double - Public Overloads Shared Function Description() As String - Return "Plots the cumulative coincident values of two time series against each other and adds a 45° line to the resulting plot." - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Plots the cumulative coincident values of two time series against each other and adds a 45° line to the resulting plot." + End Get + End Property ''' ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt diff --git a/source/Analysis/GoodnessOfFit.vb b/source/Analysis/GoodnessOfFit.vb index 3e151171..c9b63ccb 100644 --- a/source/Analysis/GoodnessOfFit.vb +++ b/source/Analysis/GoodnessOfFit.vb @@ -31,9 +31,11 @@ Friend Class GoodnessOfFit ''' Private GoFResults As Dictionary(Of String, Dictionary(Of String, GoF)) - Public Overloads Shared Function Description() As String - Return "Calculates multiple goodness of fit criteria between two or more time series. Only coincident data points where both values are not NaN are considered." - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Calculates multiple goodness of fit criteria between two or more time series. Only coincident data points where both values are not NaN are considered." + End Get + End Property Private Structure GoF Public startDate As DateTime diff --git a/source/Analysis/Histogram.vb b/source/Analysis/Histogram.vb index d4b8d2ac..79944423 100644 --- a/source/Analysis/Histogram.vb +++ b/source/Analysis/Histogram.vb @@ -37,10 +37,12 @@ Friend Class Histogram Private results As histogramResults() - Public Overloads Shared Function Description() As String - Return "Divides the entire range of values into a series of user-defined intervals (bins) and calculates the percentage of values falling into each interval." & + Public Overrides ReadOnly Property Description As String + Get + Return "Divides the entire range of values into a series of user-defined intervals (bins) and calculates the percentage of values falling into each interval." & "Also estimates a corresponding density function." - End Function + End Get + End Property ''' ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt diff --git a/source/Analysis/LinearRegression.vb b/source/Analysis/LinearRegression.vb index 497400e5..75d13409 100644 --- a/source/Analysis/LinearRegression.vb +++ b/source/Analysis/LinearRegression.vb @@ -30,9 +30,11 @@ Friend Class LinearRegression Private r As Double 'correlation coefficient Private filled_nodes As SortedDictionary(Of DateTime, Double) 'filled nodes - Public Overloads Shared Function Description() As String - Return "Fills gaps (NaN values and missing timestamps) in one time series by applying a linear regression relationship with a second time series." - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Fills gaps (NaN values and missing timestamps) in one time series by applying a linear regression relationship with a second time series." + End Get + End Property ''' ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt diff --git a/source/Analysis/MonthlyStatistics.vb b/source/Analysis/MonthlyStatistics.vb index f1878717..9294d88f 100644 --- a/source/Analysis/MonthlyStatistics.vb +++ b/source/Analysis/MonthlyStatistics.vb @@ -63,10 +63,12 @@ Friend Class MonthlyStatistics #Region "Properties" - Public Overloads Shared Function Description() As String - Return "Calculates the following statistical values for each month of the year: average, median, minimum, maximum, standard deviation " & + Public Overrides ReadOnly Property Description As String + Get + Return "Calculates the following statistical values for each month of the year: average, median, minimum, maximum, standard deviation " & "and displays them in a chart." - End Function + End Get + End Property ''' ''' Flag indicating whether the analysis function has a result text diff --git a/source/Analysis/TestAnalysis.vb b/source/Analysis/TestAnalysis.vb index e8fb7486..b014d451 100644 --- a/source/Analysis/TestAnalysis.vb +++ b/source/Analysis/TestAnalysis.vb @@ -32,9 +32,11 @@ Friend Class TestAnalysis ''' ''' Returns the description of the analysis function ''' - Public Overloads Shared Function Description() As String - Return "Write description!" - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Write description!" + End Get + End Property ''' ''' Flag indicating whether the analysis function produces a result text diff --git a/source/Analysis/TimestepAnalysis.vb b/source/Analysis/TimestepAnalysis.vb index 2ecb6594..85947506 100644 --- a/source/Analysis/TimestepAnalysis.vb +++ b/source/Analysis/TimestepAnalysis.vb @@ -40,9 +40,11 @@ Friend Class TimeStepAnalysis #Region "Properties" - Public Overloads Shared Function Description() As String - Return "Calculates the the timestep between nodes and returns a new timeseries of timestep sizes in the user-specified unit." - End Function + Public Overrides ReadOnly Property Description As String + Get + Return "Calculates the the timestep between nodes and returns a new timeseries of timestep sizes in the user-specified unit." + End Get + End Property ''' ''' Flag indicating whether the analysis function has a result test From 135e36dcd97ff58c421aa0858ba00b282d311b10 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Thu, 26 May 2022 09:28:37 +0200 Subject: [PATCH 05/10] attempt to implement multiparameters for Calculator analysis function --- source/Analysis/AnalysisDialog.vb | 32 +++++++++++++++++++-------- source/Analysis/Calculator.vb | 36 ++++++++++++++++++------------- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/source/Analysis/AnalysisDialog.vb b/source/Analysis/AnalysisDialog.vb index 01616636..87de483e 100644 --- a/source/Analysis/AnalysisDialog.vb +++ b/source/Analysis/AnalysisDialog.vb @@ -93,15 +93,29 @@ Friend Class AnalysisDialog Select Case param.ParameterType Case AnalysisParameter.ParameterTypeEnum.Timeseries - Dim combobox As New ComboBox() - combobox.DropDownStyle = ComboBoxStyle.DropDownList - For Each ts As TimeSeries In Me.seriesList - combobox.Items.Add(ts) - Next - combobox.SelectedIndex = 0 - param.Value = combobox.SelectedItem - combobox.DataBindings.Add(New Binding("SelectedItem", param, "Value")) - control = combobox + Select Case param.ParameterAmount + Case AnalysisParameter.ParameterAmountEnum.Single + Dim combobox As New ComboBox() + combobox.DropDownStyle = ComboBoxStyle.DropDownList + For Each ts As TimeSeries In Me.seriesList + combobox.Items.Add(ts) + Next + combobox.SelectedIndex = 0 + param.Value = combobox.SelectedItem + combobox.DataBindings.Add(New Binding("SelectedItem", param, "Value")) + control = combobox + + Case AnalysisParameter.ParameterAmountEnum.Multiple + Dim listbox As New ListBox() + listbox.SelectionMode = SelectionMode.MultiExtended + For Each ts As TimeSeries In Me.seriesList + listbox.Items.Add(ts) + Next + listbox.SelectedIndex = -1 + param.Value = listbox.SelectedItems + listbox.DataBindings.Add(New Binding("SelectedItems", param, "Value")) + control = listbox + End Select Case AnalysisParameter.ParameterTypeEnum.Integer Dim numericupdown As New NumericUpDown() diff --git a/source/Analysis/Calculator.vb b/source/Analysis/Calculator.vb index ba3a6f40..7f8eb349 100644 --- a/source/Analysis/Calculator.vb +++ b/source/Analysis/Calculator.vb @@ -27,9 +27,11 @@ Friend Class Calculator ''' ''' Returns a text description of the analysis function ''' - Public Overloads Shared Function Description() As String - Return "Performs mathematical operations on time series and returns a new time series as the result." - End Function + Public Overrides ReadOnly Property Description() As String + Get + Return "Performs mathematical operations on time series and returns a new time series as the result." + End Get + End Property ''' ''' Flag indicating whether the analysis function has a result test @@ -91,10 +93,21 @@ Friend Class Calculator ''' ''' Constructor ''' - ''' list of TimeSeries - Public Sub New(ByRef seriesList As List(Of TimeSeries)) + Public Sub New() + MyBase.New() + 'define input parameters + MyBase.parameters.Add("timeseries", + New AnalysisParameter("Input time series", AnalysisParameter.ParameterTypeEnum.Timeseries, AnalysisParameter.ParameterAmountEnum.Multiple) + ) + End Sub - Call MyBase.New(seriesList) + ''' + ''' Analyse durchführen + ''' + Public Overrides Sub ProcessAnalysis() + + 'get input parameters + Dim seriesList As List(Of TimeSeries) = MyBase.parameters("timeseries").Value If seriesList.Count > 26 Then ' only 26 variable names are available @@ -106,18 +119,11 @@ Friend Class Calculator Dim varNames As New List(Of String) From {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} Dim i As Integer = 0 - For Each ts As TimeSeries In Me.InputTimeSeries + For Each ts As TimeSeries In Me.seriesList tsVariables.Add(New CalculatorVariable(varNames(i), ts)) i += 1 Next - End Sub - - ''' - ''' Analyse durchführen - ''' - Public Overrides Sub ProcessAnalysis() - 'show the ChangeTimeStepDialog Dim dlg As New CalculatorDialog(Me.tsVariables) If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then @@ -137,7 +143,7 @@ Friend Class Calculator 'collect unique timestamps Dim timestamps As New HashSet(Of DateTime) - For Each ts As TimeSeries In Me.InputTimeSeries + For Each ts As TimeSeries In seriesList timestamps.UnionWith(ts.Dates) Next From 3bcda3d0841afa7f5f9a4b91118212cd96a8b2a4 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Mon, 26 Dec 2022 11:50:26 +0100 Subject: [PATCH 06/10] fix some errors from rebasing --- source/Analysis/AnalysisParameter.vb | 1 + source/Analysis/AnnualStatistics.vb | 4 ++-- source/Analysis/Calculator.vb | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source/Analysis/AnalysisParameter.vb b/source/Analysis/AnalysisParameter.vb index 115980ed..e2431d68 100644 --- a/source/Analysis/AnalysisParameter.vb +++ b/source/Analysis/AnalysisParameter.vb @@ -4,6 +4,7 @@ Timeseries [Integer] [Date] + [Boolean] End Enum Public Enum ParameterAmountEnum diff --git a/source/Analysis/AnnualStatistics.vb b/source/Analysis/AnnualStatistics.vb index bf1ff010..6d7b09cb 100644 --- a/source/Analysis/AnnualStatistics.vb +++ b/source/Analysis/AnnualStatistics.vb @@ -159,7 +159,7 @@ Friend Class AnnualStatistics 'Generate timeseries with max/avg/min values if checkbox is checked and at least two years are present If (Me.generateBoundingBoxes And Me.stats.Count > 2) Then 'Prepare output timeseries - Dim basename As String = Me.InputTimeSeries(0).Title + Dim basename As String = Me.timeseries.Title Dim timeseries_max As TimeSeries = New TimeSeries(basename & " (annual maximum)") Dim timeseries_avg As TimeSeries = New TimeSeries(basename & " (annual average)") Dim timeseries_min As TimeSeries = New TimeSeries(basename & " (annual minimum)") @@ -170,7 +170,7 @@ Friend Class AnnualStatistics timeseries_min.Interpretation = TimeSeries.InterpretationEnum.BlockRight 'Transfer unit from input timeseries - Dim unit As String = Me.InputTimeSeries(0).Unit + Dim unit As String = Me.timeseries.Unit timeseries_max.Unit = unit timeseries_avg.Unit = unit timeseries_min.Unit = unit diff --git a/source/Analysis/Calculator.vb b/source/Analysis/Calculator.vb index 7f8eb349..03d9e88b 100644 --- a/source/Analysis/Calculator.vb +++ b/source/Analysis/Calculator.vb @@ -119,7 +119,7 @@ Friend Class Calculator Dim varNames As New List(Of String) From {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"} Dim i As Integer = 0 - For Each ts As TimeSeries In Me.seriesList + For Each ts As TimeSeries In seriesList tsVariables.Add(New CalculatorVariable(varNames(i), ts)) i += 1 Next From 7d5c05aadb54c58859770fba01889b7d573de93f Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Mon, 26 Dec 2022 11:53:31 +0100 Subject: [PATCH 07/10] fix license boilerplate --- source/Analysis/AnalysisParameter.vb | 19 ++++++++++++++- source/Dialogs/WizardPages.vb | 36 ++++++++++------------------ 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/source/Analysis/AnalysisParameter.vb b/source/Analysis/AnalysisParameter.vb index e2431d68..d689696e 100644 --- a/source/Analysis/AnalysisParameter.vb +++ b/source/Analysis/AnalysisParameter.vb @@ -1,4 +1,21 @@ -Friend Class AnalysisParameter +'BlueM.Wave +'Copyright (C) BlueM Dev Group +' +' +'This program is free software: you can redistribute it and/or modify +'it under the terms of the GNU Lesser General Public License as published by +'the Free Software Foundation, either version 3 of the License, or +'(at your option) any later version. +' +'This program is distributed in the hope that it will be useful, +'but WITHOUT ANY WARRANTY; without even the implied warranty of +'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'GNU Lesser General Public License for more details. +' +'You should have received a copy of the GNU Lesser General Public License +'along with this program. If not, see . +' +Friend Class AnalysisParameter Public Enum ParameterTypeEnum Timeseries diff --git a/source/Dialogs/WizardPages.vb b/source/Dialogs/WizardPages.vb index a3690f78..8d1ebf18 100644 --- a/source/Dialogs/WizardPages.vb +++ b/source/Dialogs/WizardPages.vb @@ -1,29 +1,19 @@ -'Copyright (c) BlueM Dev Group -'Website: https://bluemodel.org +'BlueM.Wave +'Copyright (C) BlueM Dev Group +' ' -'All rights reserved. +'This program is free software: you can redistribute it and/or modify +'it under the terms of the GNU Lesser General Public License as published by +'the Free Software Foundation, either version 3 of the License, or +'(at your option) any later version. ' -'Released under the BSD-2-Clause License: +'This program is distributed in the hope that it will be useful, +'but WITHOUT ANY WARRANTY; without even the implied warranty of +'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'GNU Lesser General Public License for more details. ' -'Redistribution and use in source and binary forms, with or without modification, -'are permitted provided that the following conditions are met: -' -'* Redistributions of source code must retain the above copyright notice, this list -' of conditions and the following disclaimer. -'* Redistributions in binary form must reproduce the above copyright notice, this list -' of conditions and the following disclaimer in the documentation and/or other materials -' provided with the distribution. -' -'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -'EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -'OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -'SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -'SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -'OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -'HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -'TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -'EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -'-------------------------------------------------------------------------------------------- +'You should have received a copy of the GNU Lesser General Public License +'along with this program. If not, see . ' Imports System Imports System.Windows.Forms From 3d638edc54ca30b76a688d89cf39d2348e4b4b03 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Mon, 26 Dec 2022 12:34:05 +0100 Subject: [PATCH 08/10] add checkbox as input control for boolean parameters --- source/Analysis/AnalysisDialog.vb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/Analysis/AnalysisDialog.vb b/source/Analysis/AnalysisDialog.vb index 87de483e..4aa1fccd 100644 --- a/source/Analysis/AnalysisDialog.vb +++ b/source/Analysis/AnalysisDialog.vb @@ -113,7 +113,7 @@ Friend Class AnalysisDialog Next listbox.SelectedIndex = -1 param.Value = listbox.SelectedItems - listbox.DataBindings.Add(New Binding("SelectedItems", param, "Value")) + listbox.DataBindings.Add(New Binding("SelectedItems", param, "Value")) 'TODO: cannot bind to a read-only property! control = listbox End Select @@ -124,6 +124,13 @@ Friend Class AnalysisDialog param.Value = param.DefaultValue numericupdown.DataBindings.Add(New Binding("Value", param, "Value")) control = numericupdown + + Case AnalysisParameter.ParameterTypeEnum.Boolean + Dim checkbox As New CheckBox() + checkbox.Checked = param.DefaultValue + checkbox.DataBindings.Add(New Binding("Checked", param, "Value", True)) + control = checkbox + End Select Me.TableLayoutPanel1.Controls.Add(control) From 359ab35004841f051770e6c6665ed4acabbcf7e5 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Mon, 26 Dec 2022 12:47:09 +0100 Subject: [PATCH 09/10] some comments --- source/Analysis/AnalysisParameter.vb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/Analysis/AnalysisParameter.vb b/source/Analysis/AnalysisParameter.vb index d689696e..d60aa08d 100644 --- a/source/Analysis/AnalysisParameter.vb +++ b/source/Analysis/AnalysisParameter.vb @@ -15,6 +15,9 @@ 'You should have received a copy of the GNU Lesser General Public License 'along with this program. If not, see . ' +''' +''' Class representing an input parameter for an analysis +''' Friend Class AnalysisParameter Public Enum ParameterTypeEnum @@ -37,6 +40,10 @@ Friend Class AnalysisParameter Public MaxValue As Object Private _Value As Object + ''' + ''' Parameter value + ''' + ''' Public Property Value As Object Get Return _Value @@ -46,6 +53,15 @@ Friend Class AnalysisParameter End Set End Property + ''' + ''' Constructor + ''' + ''' Parameter description + ''' Parameter type + ''' Parameter amount (single/multiple) + ''' Default value + ''' Minimum value + ''' Maximum value Public Sub New(description As String, type As ParameterTypeEnum, amount As ParameterAmountEnum, Optional def As Object = Nothing, Optional min As Object = Nothing, Optional max As Object = Nothing) Me.Description = description From 989af12141e40026a245eadb629a1e2be672f02f Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 1 Jul 2023 11:15:00 +0200 Subject: [PATCH 10/10] temporarily disable unfinished analysis functions --- source/Analysis/AnalysisFactory.vb | 40 +++++++-------- source/Wave.vbproj | 82 ------------------------------ 2 files changed, 20 insertions(+), 102 deletions(-) diff --git a/source/Analysis/AnalysisFactory.vb b/source/Analysis/AnalysisFactory.vb index 44a9bc6e..dcf30eb9 100644 --- a/source/Analysis/AnalysisFactory.vb +++ b/source/Analysis/AnalysisFactory.vb @@ -58,35 +58,35 @@ Friend Module AnalysisFactory Case AnalysisFunctions.Calculator oAnalysis = New Calculator() - Case AnalysisFunctions.ChangeTimestep - oAnalysis = New ChangeTimestep() + 'Case AnalysisFunctions.ChangeTimestep + ' oAnalysis = New ChangeTimestep() - Case AnalysisFunctions.Comparison - oAnalysis = New Comparison() + 'Case AnalysisFunctions.Comparison + ' oAnalysis = New Comparison() - Case AnalysisFunctions.Cumulative - oAnalysis = New Cumulative() + 'Case AnalysisFunctions.Cumulative + ' oAnalysis = New Cumulative() - Case AnalysisFunctions.DoubleSumCurve - oAnalysis = New DoubleSumCurve() + 'Case AnalysisFunctions.DoubleSumCurve + ' oAnalysis = New DoubleSumCurve() - Case AnalysisFunctions.GoodnessOfFit - oAnalysis = New GoodnessOfFit() + 'Case AnalysisFunctions.GoodnessOfFit + ' oAnalysis = New GoodnessOfFit() - Case AnalysisFunctions.Histogram - oAnalysis = New Histogram() + 'Case AnalysisFunctions.Histogram + ' oAnalysis = New Histogram() - Case AnalysisFunctions.LinearRegression - oAnalysis = New LinearRegression() + 'Case AnalysisFunctions.LinearRegression + ' oAnalysis = New LinearRegression() - Case AnalysisFunctions.MonthlyStatistics - oAnalysis = New MonthlyStatistics() + 'Case AnalysisFunctions.MonthlyStatistics + ' oAnalysis = New MonthlyStatistics() - Case AnalysisFunctions.TimestepAnalysis - oAnalysis = New TimeStepAnalysis() + 'Case AnalysisFunctions.TimestepAnalysis + ' oAnalysis = New TimeStepAnalysis() - 'Case AnalysisFunctions.TestAnalysis 'EDIT THIS - ' oAnalysis = New TestAnalysis() 'EDIT THIS + 'Case AnalysisFunctions.TestAnalysis 'EDIT THIS + ' oAnalysis = New TestAnalysis() 'EDIT THIS Case Else Throw New Exception("Analysis not found!") diff --git a/source/Wave.vbproj b/source/Wave.vbproj index fc50ee50..535faed6 100644 --- a/source/Wave.vbproj +++ b/source/Wave.vbproj @@ -131,65 +131,7 @@ - - - CumulativeDialog.vb - - - Form - - - ChangeTimestepDialog.vb - - - Form - - - - Comparison_Dialog.vb - - - Form - - - - - - GoodnessOfFit_Dialog.vb - - - Form - - - - HistogramDialog.vb - - - Form - - - - LinearRegression_Dialog.vb - - - Form - - - - MonthlyStatisticsDialog.vb - - - Form - - - - - TimestepAnalysisDialog.vb - - - Form - @@ -360,30 +302,6 @@ AnalysisResultTable.vb - - CumulativeDialog.vb - - - ChangeTimestepDialog.vb - - - Comparison_Dialog.vb - - - GoodnessOfFit_Dialog.vb - - - HistogramDialog.vb - - - LinearRegression_Dialog.vb - - - MonthlyStatisticsDialog.vb - - - TimestepAnalysisDialog.vb - AboutBox.vb