From 3f60b92f2f2097ae69cefdd97da17b62212260bb Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 28 Oct 2023 09:23:34 +0200 Subject: [PATCH 1/6] rename ImportDiag to ImportCSVDialog and remove field --- source/Classes/TimeSeriesFile.vb | 5 ----- ...ortDiag.Designer.vb => ImportCSVDialog.Designer.vb} | 4 ++-- .../Dialogs/{ImportDiag.resx => ImportCSVDialog.resx} | 0 source/Dialogs/{ImportDiag.vb => ImportCSVDialog.vb} | 10 +++++----- source/Wave.vb | 6 +++--- source/Wave.vbproj | 10 +++++----- 6 files changed, 15 insertions(+), 20 deletions(-) rename source/Dialogs/{ImportDiag.Designer.vb => ImportCSVDialog.Designer.vb} (98%) rename source/Dialogs/{ImportDiag.resx => ImportCSVDialog.resx} (100%) rename source/Dialogs/{ImportDiag.vb => ImportCSVDialog.vb} (96%) diff --git a/source/Classes/TimeSeriesFile.vb b/source/Classes/TimeSeriesFile.vb index 08c6f549..2fc1fc81 100644 --- a/source/Classes/TimeSeriesFile.vb +++ b/source/Classes/TimeSeriesFile.vb @@ -159,11 +159,6 @@ Public MustInherit Class TimeSeriesFile ''' Public TimeSeries As Dictionary(Of Integer, TimeSeries) - ''' - ''' Instance of the ImportDialog - ''' - Friend ImportDiag As ImportDiag - #End Region 'Eigenschaften #Region "Properties" diff --git a/source/Dialogs/ImportDiag.Designer.vb b/source/Dialogs/ImportCSVDialog.Designer.vb similarity index 98% rename from source/Dialogs/ImportDiag.Designer.vb rename to source/Dialogs/ImportCSVDialog.Designer.vb index 493484b0..3cbd5e87 100644 --- a/source/Dialogs/ImportDiag.Designer.vb +++ b/source/Dialogs/ImportCSVDialog.Designer.vb @@ -1,5 +1,5 @@ -Partial Class ImportDiag +Partial Class ImportCSVDialog Inherits System.Windows.Forms.Form 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. @@ -24,7 +24,7 @@ Partial Class ImportDiag Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim SplitContainer1 As System.Windows.Forms.SplitContainer - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ImportDiag)) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ImportCSVDialog)) Me.GroupBox_Selection = New System.Windows.Forms.GroupBox() Me.Label_Selected = New System.Windows.Forms.Label() Me.Label_Search = New System.Windows.Forms.Label() diff --git a/source/Dialogs/ImportDiag.resx b/source/Dialogs/ImportCSVDialog.resx similarity index 100% rename from source/Dialogs/ImportDiag.resx rename to source/Dialogs/ImportCSVDialog.resx diff --git a/source/Dialogs/ImportDiag.vb b/source/Dialogs/ImportCSVDialog.vb similarity index 96% rename from source/Dialogs/ImportDiag.vb rename to source/Dialogs/ImportCSVDialog.vb index c42bfd3f..cb224527 100644 --- a/source/Dialogs/ImportDiag.vb +++ b/source/Dialogs/ImportCSVDialog.vb @@ -18,7 +18,7 @@ Imports System.IO Imports System.Text.RegularExpressions -Friend Class ImportDiag +Friend Class ImportCSVDialog Inherits System.Windows.Forms.Form #Region "Eigenschaften" @@ -135,7 +135,7 @@ Friend Class ImportDiag Me.ComboBox_DecimalSeparator.Items.Add(Constants.comma) Me.ComboBox_DecimalSeparator.EndUpdate() - 'Combobox Datumsformat füllen + 'Combobox Datumsformat füllen For Each datumsformat As String In Helpers.DateFormats.Values Me.DateFormat = datumsformat Next @@ -207,7 +207,7 @@ Friend Class ImportDiag End If 'replace tab characters with a visual representation - line = line.Replace(vbTab, " » ") + line = line.Replace(vbTab, " » ") text &= line & Constants.eol @@ -226,7 +226,7 @@ Friend Class ImportDiag End Sub - 'OK Button gedrückt + 'OK Button gedrückt '****************** Private Sub Button_OK_Click(sender As Object, e As EventArgs) Handles Button_OK.Click @@ -267,7 +267,7 @@ Friend Class ImportDiag '------------------ Try - 'Datenzeile muss nach Überschriften und Einheiten sein! + 'Datenzeile muss nach Ãœberschriften und Einheiten sein! Me.IsInitializing = True If (Me.NumericUpDown_LineData.Value <= Me.NumericUpDown_LineTitles.Value) Then Me.NumericUpDown_LineData.Value = Me.NumericUpDown_LineTitles.Value + 1 diff --git a/source/Wave.vb b/source/Wave.vb index e71493ee..30789540 100644 --- a/source/Wave.vb +++ b/source/Wave.vb @@ -136,7 +136,7 @@ Public Class Wave ok = Me.ShowImportDialog(fileInstance) Call Application.DoEvents() Else - 'Ansonsten alle Spalten auswählen + 'Ansonsten alle Spalten auswählen Call fileInstance.selectAllSeries() ok = True End If @@ -807,12 +807,12 @@ Public Class Wave ''' Instanz der Datei, die importiert werden soll Friend Function ShowImportDialog(ByRef Datei As TimeSeriesFile) As Boolean - Datei.ImportDiag = New ImportDiag(Datei) + Dim ImportDiag As New ImportCSVDialog(Datei) Dim DiagResult As DialogResult 'Dialog anzeigen - DiagResult = Datei.ImportDiag.ShowDialog() + DiagResult = ImportDiag.ShowDialog() If (DiagResult = Windows.Forms.DialogResult.OK) Then Return True diff --git a/source/Wave.vbproj b/source/Wave.vbproj index 17a06c9b..0db3cc7a 100644 --- a/source/Wave.vbproj +++ b/source/Wave.vbproj @@ -256,10 +256,10 @@ Form - - ImportDiag.vb + + ImportCSVDialog.vb - + Form @@ -417,8 +417,8 @@ ExportDiag.vb - - ImportDiag.vb + + ImportCSVDialog.vb LogWindow.vb From c12f00a3e72805c832b28354441b8f968ee9877d Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 28 Oct 2023 10:13:36 +0200 Subject: [PATCH 2/6] added a new SelectSeriesDialog for selecting series from known (non-CSV) file types --- source/Dialogs/SelectSeriesDialog.Designer.vb | 219 ++++++++++++++++++ source/Dialogs/SelectSeriesDialog.resx | 148 ++++++++++++ source/Dialogs/SelectSeriesDialog.vb | 179 ++++++++++++++ source/Wave.vb | 20 +- source/Wave.vbproj | 9 + 5 files changed, 567 insertions(+), 8 deletions(-) create mode 100644 source/Dialogs/SelectSeriesDialog.Designer.vb create mode 100644 source/Dialogs/SelectSeriesDialog.resx create mode 100644 source/Dialogs/SelectSeriesDialog.vb diff --git a/source/Dialogs/SelectSeriesDialog.Designer.vb b/source/Dialogs/SelectSeriesDialog.Designer.vb new file mode 100644 index 00000000..df4abda7 --- /dev/null +++ b/source/Dialogs/SelectSeriesDialog.Designer.vb @@ -0,0 +1,219 @@ + +Partial Class SelectSeriesDialog + Inherits System.Windows.Forms.Form + + 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + + 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 + + '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(SelectSeriesDialog)) + Me.GroupBox_Selection = New System.Windows.Forms.GroupBox() + Me.Label_Selected = New System.Windows.Forms.Label() + Me.Label_Search = New System.Windows.Forms.Label() + Me.TextBox_Search = New System.Windows.Forms.TextBox() + Me.Label_Series = New System.Windows.Forms.Label() + Me.ListBox_Series = New System.Windows.Forms.ListBox() + Me.Button_SelectAll = New System.Windows.Forms.Button() + Me.Button_OK = New System.Windows.Forms.Button() + Me.Button_Cancel = New System.Windows.Forms.Button() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label_FileName = New System.Windows.Forms.Label() + Me.Label_FileType = New System.Windows.Forms.Label() + Me.GroupBox_Selection.SuspendLayout() + Me.SuspendLayout() + ' + 'GroupBox_Selection + ' + Me.GroupBox_Selection.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.GroupBox_Selection.Controls.Add(Me.Label_Selected) + Me.GroupBox_Selection.Controls.Add(Me.Label_Search) + Me.GroupBox_Selection.Controls.Add(Me.TextBox_Search) + Me.GroupBox_Selection.Controls.Add(Me.Label_Series) + Me.GroupBox_Selection.Controls.Add(Me.ListBox_Series) + Me.GroupBox_Selection.Controls.Add(Me.Button_SelectAll) + Me.GroupBox_Selection.Location = New System.Drawing.Point(12, 53) + Me.GroupBox_Selection.Margin = New System.Windows.Forms.Padding(0) + Me.GroupBox_Selection.Name = "GroupBox_Selection" + Me.GroupBox_Selection.Size = New System.Drawing.Size(219, 322) + Me.GroupBox_Selection.TabIndex = 0 + Me.GroupBox_Selection.TabStop = False + Me.GroupBox_Selection.Text = "Series selection" + ' + 'Label_Selected + ' + Me.Label_Selected.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label_Selected.Location = New System.Drawing.Point(138, 292) + Me.Label_Selected.Name = "Label_Selected" + Me.Label_Selected.Size = New System.Drawing.Size(75, 13) + Me.Label_Selected.TabIndex = 34 + Me.Label_Selected.Text = "0 selected" + Me.Label_Selected.TextAlign = System.Drawing.ContentAlignment.TopRight + ' + 'Label_Search + ' + Me.Label_Search.AutoSize = True + Me.Label_Search.Location = New System.Drawing.Point(12, 21) + Me.Label_Search.Name = "Label_Search" + Me.Label_Search.Size = New System.Drawing.Size(44, 13) + Me.Label_Search.TabIndex = 0 + Me.Label_Search.Text = "Search:" + ' + 'TextBox_Search + ' + Me.TextBox_Search.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TextBox_Search.Location = New System.Drawing.Point(59, 18) + Me.TextBox_Search.Name = "TextBox_Search" + Me.TextBox_Search.Size = New System.Drawing.Size(154, 20) + Me.TextBox_Search.TabIndex = 1 + ' + 'Label_Series + ' + Me.Label_Series.AutoSize = True + Me.Label_Series.Location = New System.Drawing.Point(12, 46) + Me.Label_Series.Name = "Label_Series" + Me.Label_Series.Size = New System.Drawing.Size(83, 13) + Me.Label_Series.TabIndex = 2 + Me.Label_Series.Text = "Available series:" + ' + 'ListBox_Series + ' + 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(15, 64) + Me.ListBox_Series.Name = "ListBox_Series" + Me.ListBox_Series.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.ListBox_Series.Size = New System.Drawing.Size(198, 212) + Me.ListBox_Series.TabIndex = 3 + ' + 'Button_SelectAll + ' + Me.Button_SelectAll.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Button_SelectAll.Location = New System.Drawing.Point(15, 287) + Me.Button_SelectAll.Name = "Button_SelectAll" + Me.Button_SelectAll.Size = New System.Drawing.Size(73, 23) + Me.Button_SelectAll.TabIndex = 4 + Me.Button_SelectAll.Text = "Select all" + Me.Button_SelectAll.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(75, 388) + Me.Button_OK.Name = "Button_OK" + Me.Button_OK.Size = New System.Drawing.Size(75, 23) + Me.Button_OK.TabIndex = 4 + Me.Button_OK.Text = "OK" + Me.Button_OK.UseVisualStyleBackColor = True + ' + '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(156, 388) + Me.Button_Cancel.Name = "Button_Cancel" + Me.Button_Cancel.Size = New System.Drawing.Size(75, 23) + Me.Button_Cancel.TabIndex = 5 + Me.Button_Cancel.Text = "Cancel" + Me.Button_Cancel.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 13) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(58, 13) + Me.Label1.TabIndex = 6 + Me.Label1.Text = "File name: " + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(12, 30) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(52, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "File type: " + ' + 'Label_FileName + ' + Me.Label_FileName.AutoSize = True + Me.Label_FileName.Location = New System.Drawing.Point(68, 13) + Me.Label_FileName.Name = "Label_FileName" + Me.Label_FileName.Size = New System.Drawing.Size(52, 13) + Me.Label_FileName.TabIndex = 8 + Me.Label_FileName.Text = "File name" + ' + 'Label_FileType + ' + Me.Label_FileType.AutoSize = True + Me.Label_FileType.Location = New System.Drawing.Point(68, 30) + Me.Label_FileType.Name = "Label_FileType" + Me.Label_FileType.Size = New System.Drawing.Size(46, 13) + Me.Label_FileType.TabIndex = 9 + Me.Label_FileType.Text = "File type" + ' + 'SelectSeriesDialog + ' + Me.AcceptButton = Me.Button_OK + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.CancelButton = Me.Button_Cancel + Me.ClientSize = New System.Drawing.Size(239, 423) + Me.Controls.Add(Me.Label_FileType) + Me.Controls.Add(Me.Label_FileName) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.GroupBox_Selection) + Me.Controls.Add(Me.Button_OK) + Me.Controls.Add(Me.Button_Cancel) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(220, 320) + Me.Name = "SelectSeriesDialog" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Import series from file" + Me.GroupBox_Selection.ResumeLayout(False) + Me.GroupBox_Selection.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents Button_OK As System.Windows.Forms.Button + Private WithEvents Button_Cancel As System.Windows.Forms.Button + Private WithEvents ListBox_Series As System.Windows.Forms.ListBox + Private WithEvents Label_Search As System.Windows.Forms.Label + Private WithEvents TextBox_Search As System.Windows.Forms.TextBox + Private WithEvents Label_Series As System.Windows.Forms.Label + Friend WithEvents Button_SelectAll As System.Windows.Forms.Button + Friend WithEvents GroupBox_Selection As System.Windows.Forms.GroupBox + Friend WithEvents Label_Selected As Label + Friend WithEvents Label1 As Label + Friend WithEvents Label2 As Label + Friend WithEvents Label_FileName As Label + Friend WithEvents Label_FileType As Label +End Class diff --git a/source/Dialogs/SelectSeriesDialog.resx b/source/Dialogs/SelectSeriesDialog.resx new file mode 100644 index 00000000..7b62891c --- /dev/null +++ b/source/Dialogs/SelectSeriesDialog.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 34 + + + + + 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/Dialogs/SelectSeriesDialog.vb b/source/Dialogs/SelectSeriesDialog.vb new file mode 100644 index 00000000..5d6eb0a3 --- /dev/null +++ b/source/Dialogs/SelectSeriesDialog.vb @@ -0,0 +1,179 @@ +'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 SelectSeriesDialog + Inherits System.Windows.Forms.Form + + Private IsInitializing As Boolean + + Private tsFile As TimeSeriesFile + Private WithEvents inputTimer As Timers.Timer + + Public Sub New(ByRef fileInstance As TimeSeriesFile) + + Call MyBase.New() + + IsInitializing = True + + Call InitializeComponent() + + Me.tsFile = fileInstance + + 'Set labels + Me.Label_FileName.Text = IO.Path.GetFileName(Me.tsFile.File) + Me.Label_FileType.Text = Me.tsFile.GetType().Name + + 'initialize input delay timer + Me.inputTimer = New Timers.Timer(1000) + Me.inputTimer.SynchronizingObject = Me + Me.inputTimer.AutoReset = False + + End Sub + + Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load + + 'Versuchen, die Spalten auszulesen (mit Standardeinstellungen) + Call Me.tsFile.readSeriesInfo() + + 'Anzeige aktualisieren + Call Me.RefreshDisplay() + + 'Ende der Initialisierung + IsInitializing = False + + End Sub + + Private Sub Button_OK_Click(sender As Object, e As EventArgs) Handles Button_OK.Click + + If (Me.ListBox_Series.SelectedItems.Count < 1) Then + MsgBox("Please select at least one series!", MsgBoxStyle.Exclamation) + Me.DialogResult = Windows.Forms.DialogResult.None + Exit Sub + Else + For Each sInfo As TimeSeriesInfo In Me.ListBox_Series.SelectedItems + Me.tsFile.selectSeries(sInfo.Index) + Next + End If + + End Sub + + Private Sub RefreshDisplay() + + 'Available series + Dim sInfo As TimeSeriesInfo + Me.Label_Series.Text = $"Available series ({Me.tsFile.TimeSeriesInfos.Count}):" + 'remember currently selected series + Dim selectedSeries As New List(Of String) + For Each sInfo In Me.ListBox_Series.SelectedItems + selectedSeries.Add(sInfo.Name) + Next + 'update list box + Me.ListBox_Series.Items.Clear() + Me.ListBox_Series.BeginUpdate() + For Each sInfo In Me.tsFile.TimeSeriesInfos + Me.ListBox_Series.Items.Add(sInfo) + Next + Me.ListBox_Series.EndUpdate() + 'reselect any previously selected items + For Each sName As String In selectedSeries + For i As Integer = 0 To Me.ListBox_Series.Items.Count - 1 + sInfo = Me.ListBox_Series.Items(i) + If sInfo.Name = sName Then + Me.ListBox_Series.SetSelected(i, True) + Continue For + End If + Next + Next + + End Sub + + ''' + ''' Handles text changed in the search text box by resetting the input timer + ''' + ''' + ''' + Private Sub TextBox_Search_TextChanged(sender As Object, e As EventArgs) Handles TextBox_Search.TextChanged + + 'reset the input timer + Me.inputTimer.Stop() + Me.inputTimer.Start() + + End Sub + + ''' + ''' Do a case-insensitive search for matching list items and select them + ''' + ''' + ''' + ''' + Private Sub searchSeries(sender As Object, e As Timers.ElapsedEventArgs) Handles inputTimer.Elapsed + + Dim search, itemname As String + + search = Me.TextBox_Search.Text.ToLower() + + If (search = "") Then Return + + Me.IsInitializing = True + Me.ListBox_Series.BeginUpdate() + Me.ListBox_Series.ClearSelected() + For i As Integer = 0 To Me.ListBox_Series.Items.Count - 1 + itemname = Me.ListBox_Series.Items(i).ToString().ToLower() + If (itemname.Contains(search)) Then + Me.ListBox_Series.SetSelected(i, True) + End If + Next + Me.ListBox_Series.EndUpdate() + Me.IsInitializing = False + Call ListBox_Series_SelectedIndexChanged(ListBox_Series, New EventArgs()) + + End Sub + + ''' + ''' Handles Select all button clicked by selecting all series + ''' + ''' + ''' + Private Sub Select_All(sender As Object, e As EventArgs) Handles Button_SelectAll.Click + + Me.IsInitializing = True + Me.ListBox_Series.BeginUpdate() + For i As Integer = 0 To Me.ListBox_Series.Items.Count - 1 + Me.ListBox_Series.SetSelected(i, True) + Next + Me.ListBox_Series.EndUpdate() + Me.IsInitializing = False + Call ListBox_Series_SelectedIndexChanged(ListBox_Series, New EventArgs()) + + End Sub + + ''' + ''' Handles selected series changed by updating the displayed number of selected series + ''' + ''' + ''' + Private Sub ListBox_Series_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox_Series.SelectedIndexChanged + If Not Me.IsInitializing Then + Me.Label_Selected.Text = $"{ListBox_Series.SelectedIndices.Count} selected" + End If + End Sub + + Private Sub ImportDiag_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed + Me.inputTimer.Dispose() + End Sub + +End Class \ No newline at end of file diff --git a/source/Wave.vb b/source/Wave.vb index 30789540..c7bad39f 100644 --- a/source/Wave.vb +++ b/source/Wave.vb @@ -802,19 +802,23 @@ Public Class Wave End Sub ''' - ''' Zeigt den Importdialog an und liest im Anschluss die Datei mit den eingegebenen Einstellungen ein + ''' Shows the import dialog for series selection ''' - ''' Instanz der Datei, die importiert werden soll - Friend Function ShowImportDialog(ByRef Datei As TimeSeriesFile) As Boolean + ''' File instance from which to import + Friend Function ShowImportDialog(ByRef tsFile As TimeSeriesFile) As Boolean - Dim ImportDiag As New ImportCSVDialog(Datei) + Dim dialog As Form + Dim dialogResult As DialogResult - Dim DiagResult As DialogResult + If TypeOf tsFile Is Fileformats.CSV Then + dialog = New ImportCSVDialog(tsFile) + Else + dialog = New SelectSeriesDialog(tsFile) + End If - 'Dialog anzeigen - DiagResult = ImportDiag.ShowDialog() + dialogResult = dialog.ShowDialog() - If (DiagResult = Windows.Forms.DialogResult.OK) Then + If dialogResult = Windows.Forms.DialogResult.OK Then Return True Else Return False diff --git a/source/Wave.vbproj b/source/Wave.vbproj index 0db3cc7a..8ec34118 100644 --- a/source/Wave.vbproj +++ b/source/Wave.vbproj @@ -202,6 +202,12 @@ Form + + SelectSeriesDialog.vb + + + Form + @@ -417,6 +423,9 @@ ExportDiag.vb + + SelectSeriesDialog.vb + ImportCSVDialog.vb From 7ecc0f7d55fc24bbda1f5eb50947d563c45d2260 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 28 Oct 2023 10:15:07 +0200 Subject: [PATCH 3/6] remove unnecessary workarounds for binary files --- source/Dialogs/ImportCSVDialog.vb | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/source/Dialogs/ImportCSVDialog.vb b/source/Dialogs/ImportCSVDialog.vb index cb224527..2a36e9a4 100644 --- a/source/Dialogs/ImportCSVDialog.vb +++ b/source/Dialogs/ImportCSVDialog.vb @@ -172,25 +172,6 @@ Friend Class ImportCSVDialog 'Dateiname anzeigen Me.Label_File.Text = "File: " & Path.GetFileName(Me.datei.File) - 'Workaround for binary file formats - If TypeOf Me.datei Is Fileformats.SWMM_OUT _ - Or TypeOf Me.datei Is Fileformats.SydroSQLite _ - Or TypeOf Me.datei Is Fileformats.DFS0 _ - Or TypeOf Me.datei Is Fileformats.WBL Then - - Me.TextBox_Preview.Text = $"{Path.GetFileName(Me.datei.File)} is a binary file.{eol}Preview is not available!" - 'Disable all other fields - Me.GroupBox_Dateformat.Enabled = False - Me.GroupBox_Columns.Enabled = False - Me.GroupBox_DecimalMark.Enabled = False - Me.GroupBox_Settings.Enabled = False - Me.Label_Encoding.Enabled = False - Me.ComboBox_Encoding.Enabled = False - Me.Button_EncodingAutodetect.Enabled = False - - Exit Sub - End If - 'Vorschau anzeigen Dim fs As New FileStream(Me.datei.File, FileMode.Open, FileAccess.Read) Dim StrRead As New StreamReader(fs, Me.selectedEncoding) From 1321a2787adce338eb3160ffb2ff8d4d96a10894 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 28 Oct 2023 10:15:35 +0200 Subject: [PATCH 4/6] change dialog title --- source/Dialogs/ImportCSVDialog.Designer.vb | 6 +++--- source/Dialogs/ImportCSVDialog.vb | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/source/Dialogs/ImportCSVDialog.Designer.vb b/source/Dialogs/ImportCSVDialog.Designer.vb index 3cbd5e87..52b0a115 100644 --- a/source/Dialogs/ImportCSVDialog.Designer.vb +++ b/source/Dialogs/ImportCSVDialog.Designer.vb @@ -527,7 +527,7 @@ Partial Class ImportCSVDialog Me.ComboBox_Dateformat.Size = New System.Drawing.Size(139, 21) Me.ComboBox_Dateformat.TabIndex = 1 ' - 'ImportDiag + 'ImportCSVDialog ' Me.AcceptButton = Me.Button_OK Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -546,10 +546,10 @@ Partial Class ImportCSVDialog Me.MaximizeBox = False Me.MinimizeBox = False Me.MinimumSize = New System.Drawing.Size(565, 500) - Me.Name = "ImportDiag" + Me.Name = "ImportCSVDialog" Me.ShowInTaskbar = False Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Import series from file" + Me.Text = "Import series from CSV file" SplitContainer1.Panel1.ResumeLayout(False) SplitContainer1.Panel2.ResumeLayout(False) CType(SplitContainer1, System.ComponentModel.ISupportInitialize).EndInit() diff --git a/source/Dialogs/ImportCSVDialog.vb b/source/Dialogs/ImportCSVDialog.vb index 2a36e9a4..04784e42 100644 --- a/source/Dialogs/ImportCSVDialog.vb +++ b/source/Dialogs/ImportCSVDialog.vb @@ -106,9 +106,6 @@ Friend Class ImportCSVDialog Me.datei = fileInstance - 'add type name of file instance to dialog title - Me.Text &= $" - file format: {Me.datei.GetType().Name}" - 'initialize input delay timer Me.inputTimer = New Timers.Timer(1000) Me.inputTimer.SynchronizingObject = Me From 115b992c54121df106512164d62e8595ba40df51 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 28 Oct 2023 10:17:46 +0200 Subject: [PATCH 5/6] set tab order and initial focus --- source/Dialogs/SelectSeriesDialog.Designer.vb | 16 ++++++++-------- source/Dialogs/SelectSeriesDialog.vb | 3 +++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/Dialogs/SelectSeriesDialog.Designer.vb b/source/Dialogs/SelectSeriesDialog.Designer.vb index df4abda7..a925bf6d 100644 --- a/source/Dialogs/SelectSeriesDialog.Designer.vb +++ b/source/Dialogs/SelectSeriesDialog.Designer.vb @@ -54,7 +54,7 @@ Partial Class SelectSeriesDialog Me.GroupBox_Selection.Margin = New System.Windows.Forms.Padding(0) Me.GroupBox_Selection.Name = "GroupBox_Selection" Me.GroupBox_Selection.Size = New System.Drawing.Size(219, 322) - Me.GroupBox_Selection.TabIndex = 0 + Me.GroupBox_Selection.TabIndex = 4 Me.GroupBox_Selection.TabStop = False Me.GroupBox_Selection.Text = "Series selection" ' @@ -64,7 +64,7 @@ Partial Class SelectSeriesDialog Me.Label_Selected.Location = New System.Drawing.Point(138, 292) Me.Label_Selected.Name = "Label_Selected" Me.Label_Selected.Size = New System.Drawing.Size(75, 13) - Me.Label_Selected.TabIndex = 34 + Me.Label_Selected.TabIndex = 5 Me.Label_Selected.Text = "0 selected" Me.Label_Selected.TextAlign = System.Drawing.ContentAlignment.TopRight ' @@ -124,7 +124,7 @@ Partial Class SelectSeriesDialog Me.Button_OK.Location = New System.Drawing.Point(75, 388) Me.Button_OK.Name = "Button_OK" Me.Button_OK.Size = New System.Drawing.Size(75, 23) - Me.Button_OK.TabIndex = 4 + Me.Button_OK.TabIndex = 5 Me.Button_OK.Text = "OK" Me.Button_OK.UseVisualStyleBackColor = True ' @@ -135,7 +135,7 @@ Partial Class SelectSeriesDialog Me.Button_Cancel.Location = New System.Drawing.Point(156, 388) Me.Button_Cancel.Name = "Button_Cancel" Me.Button_Cancel.Size = New System.Drawing.Size(75, 23) - Me.Button_Cancel.TabIndex = 5 + Me.Button_Cancel.TabIndex = 6 Me.Button_Cancel.Text = "Cancel" Me.Button_Cancel.UseVisualStyleBackColor = True ' @@ -145,7 +145,7 @@ Partial Class SelectSeriesDialog Me.Label1.Location = New System.Drawing.Point(12, 13) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(58, 13) - Me.Label1.TabIndex = 6 + Me.Label1.TabIndex = 0 Me.Label1.Text = "File name: " ' 'Label2 @@ -154,7 +154,7 @@ Partial Class SelectSeriesDialog Me.Label2.Location = New System.Drawing.Point(12, 30) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(52, 13) - Me.Label2.TabIndex = 7 + Me.Label2.TabIndex = 2 Me.Label2.Text = "File type: " ' 'Label_FileName @@ -163,7 +163,7 @@ Partial Class SelectSeriesDialog Me.Label_FileName.Location = New System.Drawing.Point(68, 13) Me.Label_FileName.Name = "Label_FileName" Me.Label_FileName.Size = New System.Drawing.Size(52, 13) - Me.Label_FileName.TabIndex = 8 + Me.Label_FileName.TabIndex = 1 Me.Label_FileName.Text = "File name" ' 'Label_FileType @@ -172,7 +172,7 @@ Partial Class SelectSeriesDialog Me.Label_FileType.Location = New System.Drawing.Point(68, 30) Me.Label_FileType.Name = "Label_FileType" Me.Label_FileType.Size = New System.Drawing.Size(46, 13) - Me.Label_FileType.TabIndex = 9 + Me.Label_FileType.TabIndex = 3 Me.Label_FileType.Text = "File type" ' 'SelectSeriesDialog diff --git a/source/Dialogs/SelectSeriesDialog.vb b/source/Dialogs/SelectSeriesDialog.vb index 5d6eb0a3..b41acc80 100644 --- a/source/Dialogs/SelectSeriesDialog.vb +++ b/source/Dialogs/SelectSeriesDialog.vb @@ -42,6 +42,9 @@ Friend Class SelectSeriesDialog Me.inputTimer.SynchronizingObject = Me Me.inputTimer.AutoReset = False + 'set intial focus + Me.TextBox_Search.Focus() + End Sub Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load From 0d34671a8e669075a25cae2505b1600f1b229f30 Mon Sep 17 00:00:00 2001 From: jamaa <90166+jamaa@users.noreply.github.com> Date: Sat, 28 Oct 2023 10:24:01 +0200 Subject: [PATCH 6/6] update changelog --- source/CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/CHANGELOG.md b/source/CHANGELOG.md index b2482cdb..c22b004d 100644 --- a/source/CHANGELOG.md +++ b/source/CHANGELOG.md @@ -3,6 +3,10 @@ Development ------------- +NEW: +* Added a new series selection dialog for known (non-CSV) file types + +CHANGED: * Upgrade TeeChart to v4.2023.4.18 Version 2.5.0 @@ -15,7 +19,7 @@ NEW: * Added support for reading and writing REXCHANGE header values for ZRXP files #123 FIXED: -* Analysis function Accumulate now repects the input interpretation +* Analysis function Accumulate now respects the input interpretation * Time Series Properties and Values windows now restore on toolbar button press if previously minimized * Importing from SWMM binary output format: * Read and store metadata