Added more filter options

This commit is contained in:
Michael J. Seiferling
2015-11-16 13:35:10 -06:00
parent a8cda1d5f8
commit c05ef0f32f
4 changed files with 135 additions and 38 deletions
+46 -2
View File
@@ -29,6 +29,10 @@ Partial Class frmFilter
Me.btnAdd = New System.Windows.Forms.Button()
Me.lstFilter = New System.Windows.Forms.ListBox()
Me.lstTags = New System.Windows.Forms.ListBox()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.optAll = New System.Windows.Forms.RadioButton()
Me.optAny = New System.Windows.Forms.RadioButton()
Me.GroupBox1.SuspendLayout()
Me.SuspendLayout()
'
'btnOK
@@ -82,7 +86,7 @@ Partial Class frmFilter
Me.lstFilter.Location = New System.Drawing.Point(222, 24)
Me.lstFilter.Name = "lstFilter"
Me.lstFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstFilter.Size = New System.Drawing.Size(150, 199)
Me.lstFilter.Size = New System.Drawing.Size(150, 173)
Me.lstFilter.TabIndex = 11
'
'lstTags
@@ -91,14 +95,49 @@ Partial Class frmFilter
Me.lstTags.Location = New System.Drawing.Point(12, 24)
Me.lstTags.Name = "lstTags"
Me.lstTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstTags.Size = New System.Drawing.Size(150, 199)
Me.lstTags.Size = New System.Drawing.Size(150, 173)
Me.lstTags.TabIndex = 8
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.optAll)
Me.GroupBox1.Controls.Add(Me.optAny)
Me.GroupBox1.Location = New System.Drawing.Point(12, 206)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(150, 46)
Me.GroupBox1.TabIndex = 14
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Matching Options"
'
'optAll
'
Me.optAll.AutoSize = True
Me.optAll.Location = New System.Drawing.Point(77, 19)
Me.optAll.Name = "optAll"
Me.optAll.Size = New System.Drawing.Size(63, 17)
Me.optAll.TabIndex = 0
Me.optAll.TabStop = True
Me.optAll.Text = "All Tags"
Me.optAll.UseVisualStyleBackColor = True
'
'optAny
'
Me.optAny.AutoSize = True
Me.optAny.Checked = True
Me.optAny.Location = New System.Drawing.Point(6, 19)
Me.optAny.Name = "optAny"
Me.optAny.Size = New System.Drawing.Size(65, 17)
Me.optAny.TabIndex = 1
Me.optAny.TabStop = True
Me.optAny.Text = "Any Tag"
Me.optAny.UseVisualStyleBackColor = True
'
'frmFilter
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(384, 261)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.btnOK)
Me.Controls.Add(Me.lblGameTags)
Me.Controls.Add(Me.lblTags)
@@ -113,6 +152,8 @@ Partial Class frmFilter
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Filter by Tags"
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox1.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -124,4 +165,7 @@ Partial Class frmFilter
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents lstFilter As System.Windows.Forms.ListBox
Friend WithEvents lstTags As System.Windows.Forms.ListBox
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents optAll As RadioButton
Friend WithEvents optAny As RadioButton
End Class
+22 -4
View File
@@ -1,16 +1,25 @@
Public Class frmFilter
Public Enum eFilterType As Integer
Any = 1
All = 2
End Enum
Dim oFilters As New List(Of clsTag)
Dim eCurrentFilterType As eFilterType = eFilterType.Any
Dim hshTags As New Hashtable
Dim bShutdown As Boolean = False
Public Property Filters As List(Of clsTag)
Public ReadOnly Property Filters As List(Of clsTag)
Get
Return oFilters
End Get
Set(value As List(Of clsTag))
oFilters = value
End Set
End Property
Public ReadOnly Property FilterType As eFilterType
Get
Return eCurrentFilterType
End Get
End Property
Private Sub AddTag()
@@ -87,10 +96,19 @@
Dim oData As KeyValuePair(Of String, String)
Dim oTag As clsTag
'Set Tags
For Each oData In lstFilter.Items
oTag = DirectCast(hshTags(oData.Value), clsTag)
Filters.Add(oTag)
Next
'Set Filter Type
If optAll.Checked Then
eCurrentFilterType = eFilterType.All
Else
eCurrentFilterType = eFilterType.Any
End If
End Sub
Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+3 -1
View File
@@ -207,14 +207,16 @@ Public Class frmGameManager
Dim oBackup As clsBackup
Dim frm As frmFilter
Dim oFilters As New List(Of clsTag)
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.Any
If optTag.Checked Then
frm = New frmFilter
frm.ShowDialog()
oFilters = frm.Filters
eCurrentFilter = frm.FilterType
End If
AppData = mgrMonitorList.ReadFilteredList(oFilters)
AppData = mgrMonitorList.ReadFilteredList(oFilters, eCurrentFilter)
If optPendingRestores.Checked Then
oRestoreData = mgrRestore.CompareManifests
+64 -31
View File
@@ -44,7 +44,7 @@ Public Class mgrMonitorList
Dim bSuccess As Boolean = False
frm.ShowDialog()
oList = ReadListForExport(frm.Filters)
oList = ReadListForExport(frm.Filters, frm.FilterType)
bSuccess = mgrXML.SerializeAndExport(oList, sLocation)
@@ -258,30 +258,46 @@ Public Class mgrMonitorList
End Function
Public Shared Function ReadFilteredList(ByVal oFilters As List(Of clsTag), Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Public Shared Function ReadFilteredList(ByVal oFilters As List(Of clsTag), ByVal eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim sSQL As String = String.Empty
Dim hshList As New Hashtable
Dim oGame As clsGame
Dim hshParams As New Hashtable
Dim iCounter As Integer = 0
If oFilters.Count > 0 Then
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
Select Case eFilterType
Case frmFilter.eFilterType.Any
If oFilters.Count > 0 Then
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
For Each oTag As clsTag In oFilters
sSQL &= "@TagID" & iCounter & ","
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
For Each oTag As clsTag In oFilters
sSQL &= "@TagID" & iCounter & ","
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc"
Else
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc"
End If
sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc"
Else
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc"
End If
Case frmFilter.eFilterType.All
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN "
For Each oTag As clsTag In oFilters
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
If iCounter <> oFilters.Count - 1 Then
sSQL &= " AND MonitorID IN "
End If
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL &= " ORDER BY Name Asc"
End Select
oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -319,7 +335,7 @@ Public Class mgrMonitorList
Dim oGame As clsGame
Dim oDupeGame As clsGame
sSQL = "SELECT * from monitorlist ORDER BY Name Asc"
sSQL = "Select * from monitorlist ORDER BY Name Asc"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
@@ -371,30 +387,47 @@ Public Class mgrMonitorList
Return hshList
End Function
Public Shared Function ReadListForExport(ByVal oFilters As List(Of clsTag), Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game)
Public Shared Function ReadListForExport(ByVal oFilters As List(Of clsTag), ByVal eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim sSQL As String = String.Empty
Dim sID As String
Dim oList As New List(Of Game)
Dim oGame As Game
Dim hshParams As New Hashtable
Dim iCounter As Integer = 0
If oFilters.Count > 0 Then
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, ExcludeList FROM monitorlist NATURAL JOIN gametags WHERE gametags.TagID IN ("
Select Case eFilterType
Case frmFilter.eFilterType.Any
If oFilters.Count > 0 Then
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
For Each oTag As clsTag In oFilters
sSQL &= "@TagID" & iCounter & ","
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
For Each oTag As clsTag In oFilters
sSQL &= "@TagID" & iCounter & ","
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc"
Else
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, ExcludeList from monitorlist ORDER BY Name Asc"
End If
sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc"
Else
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc"
End If
Case frmFilter.eFilterType.All
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN "
For Each oTag As clsTag In oFilters
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
If iCounter <> oFilters.Count - 1 Then
sSQL &= " AND MonitorID IN "
End If
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL &= " ORDER BY Name Asc"
End Select
oData = oDatabase.ReadParamData(sSQL, hshParams)