From 19812d1cd2d25dfbbd96536bd8154f2864411edc Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Fri, 4 Aug 2017 21:23:03 -0600 Subject: [PATCH] Custom Filter Enhancement Phase #2 --- GBM/Forms/frmFilter.Designer.vb | 108 +++++++++++++-------------- GBM/Forms/frmFilter.vb | 37 ++++----- GBM/Forms/frmGameManager.vb | 7 +- GBM/Managers/mgrMonitorList.vb | 62 ++++++++------- GBM/My Project/Resources.Designer.vb | 36 ++++----- GBM/My Project/Resources.resx | 4 +- 6 files changed, 130 insertions(+), 124 deletions(-) diff --git a/GBM/Forms/frmFilter.Designer.vb b/GBM/Forms/frmFilter.Designer.vb index 9572373..42778bc 100644 --- a/GBM/Forms/frmFilter.Designer.vb +++ b/GBM/Forms/frmFilter.Designer.vb @@ -22,8 +22,6 @@ Partial Class frmFilter 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.optGameInfo = New System.Windows.Forms.RadioButton() - Me.optTag = New System.Windows.Forms.RadioButton() Me.grpTagFilter = New System.Windows.Forms.GroupBox() Me.grpTagOptions = New System.Windows.Forms.GroupBox() Me.optAll = New System.Windows.Forms.RadioButton() @@ -46,10 +44,12 @@ Partial Class frmFilter Me.lblName = New System.Windows.Forms.Label() Me.txtName = New System.Windows.Forms.TextBox() Me.grpSorting = New System.Windows.Forms.GroupBox() - Me.lblOrderBy = New System.Windows.Forms.Label() - Me.cboSortField = New System.Windows.Forms.ComboBox() - Me.optSortAsc = New System.Windows.Forms.RadioButton() Me.optSortDesc = New System.Windows.Forms.RadioButton() + Me.optSortAsc = New System.Windows.Forms.RadioButton() + Me.cboSortField = New System.Windows.Forms.ComboBox() + Me.lblOrderBy = New System.Windows.Forms.Label() + Me.chkTag = New System.Windows.Forms.CheckBox() + Me.chkGameInfo = New System.Windows.Forms.CheckBox() Me.grpTagFilter.SuspendLayout() Me.grpTagOptions.SuspendLayout() Me.grpGameFilter.SuspendLayout() @@ -57,26 +57,6 @@ Partial Class frmFilter Me.grpSorting.SuspendLayout() Me.SuspendLayout() ' - 'optGameInfo - ' - Me.optGameInfo.AutoSize = True - Me.optGameInfo.Location = New System.Drawing.Point(12, 12) - Me.optGameInfo.Name = "optGameInfo" - Me.optGameInfo.Size = New System.Drawing.Size(108, 17) - Me.optGameInfo.TabIndex = 0 - Me.optGameInfo.Text = "Game Information" - Me.optGameInfo.UseVisualStyleBackColor = True - ' - 'optTag - ' - Me.optTag.AutoSize = True - Me.optTag.Location = New System.Drawing.Point(12, 190) - Me.optTag.Name = "optTag" - Me.optTag.Size = New System.Drawing.Size(44, 17) - Me.optTag.TabIndex = 2 - Me.optTag.Text = "Tag" - Me.optTag.UseVisualStyleBackColor = True - ' 'grpTagFilter ' Me.grpTagFilter.Controls.Add(Me.grpTagOptions) @@ -297,23 +277,16 @@ Partial Class frmFilter Me.grpSorting.TabStop = False Me.grpSorting.Text = "Sorting" ' - 'lblOrderBy + 'optSortDesc ' - Me.lblOrderBy.AutoSize = True - Me.lblOrderBy.Location = New System.Drawing.Point(6, 28) - Me.lblOrderBy.Name = "lblOrderBy" - Me.lblOrderBy.Size = New System.Drawing.Size(51, 13) - Me.lblOrderBy.TabIndex = 0 - Me.lblOrderBy.Text = "Order By:" - ' - 'cboSortField - ' - Me.cboSortField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboSortField.FormattingEnabled = True - Me.cboSortField.Location = New System.Drawing.Point(63, 25) - Me.cboSortField.Name = "cboSortField" - Me.cboSortField.Size = New System.Drawing.Size(147, 21) - Me.cboSortField.TabIndex = 1 + Me.optSortDesc.AutoSize = True + Me.optSortDesc.Location = New System.Drawing.Point(297, 26) + Me.optSortDesc.Name = "optSortDesc" + Me.optSortDesc.Size = New System.Drawing.Size(82, 17) + Me.optSortDesc.TabIndex = 3 + Me.optSortDesc.TabStop = True + Me.optSortDesc.Text = "Descending" + Me.optSortDesc.UseVisualStyleBackColor = True ' 'optSortAsc ' @@ -326,28 +299,55 @@ Partial Class frmFilter Me.optSortAsc.Text = "Ascending" Me.optSortAsc.UseVisualStyleBackColor = True ' - 'optSortDesc + 'cboSortField ' - Me.optSortDesc.AutoSize = True - Me.optSortDesc.Location = New System.Drawing.Point(297, 26) - Me.optSortDesc.Name = "optSortDesc" - Me.optSortDesc.Size = New System.Drawing.Size(82, 17) - Me.optSortDesc.TabIndex = 3 - Me.optSortDesc.TabStop = True - Me.optSortDesc.Text = "Descending" - Me.optSortDesc.UseVisualStyleBackColor = True + Me.cboSortField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboSortField.FormattingEnabled = True + Me.cboSortField.Location = New System.Drawing.Point(63, 25) + Me.cboSortField.Name = "cboSortField" + Me.cboSortField.Size = New System.Drawing.Size(147, 21) + Me.cboSortField.TabIndex = 1 + ' + 'lblOrderBy + ' + Me.lblOrderBy.AutoSize = True + Me.lblOrderBy.Location = New System.Drawing.Point(6, 28) + Me.lblOrderBy.Name = "lblOrderBy" + Me.lblOrderBy.Size = New System.Drawing.Size(51, 13) + Me.lblOrderBy.TabIndex = 0 + Me.lblOrderBy.Text = "Order By:" + ' + 'chkTag + ' + Me.chkTag.AutoSize = True + Me.chkTag.Location = New System.Drawing.Point(12, 192) + Me.chkTag.Name = "chkTag" + Me.chkTag.Size = New System.Drawing.Size(45, 17) + Me.chkTag.TabIndex = 6 + Me.chkTag.Text = "Tag" + Me.chkTag.UseVisualStyleBackColor = True + ' + 'chkGameInfo + ' + Me.chkGameInfo.AutoSize = True + Me.chkGameInfo.Location = New System.Drawing.Point(12, 14) + Me.chkGameInfo.Name = "chkGameInfo" + Me.chkGameInfo.Size = New System.Drawing.Size(109, 17) + Me.chkGameInfo.TabIndex = 7 + Me.chkGameInfo.Text = "Game Information" + Me.chkGameInfo.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(409, 586) + Me.Controls.Add(Me.chkGameInfo) + Me.Controls.Add(Me.chkTag) Me.Controls.Add(Me.grpSorting) Me.Controls.Add(Me.grpGameFilter) Me.Controls.Add(Me.grpTagFilter) Me.Controls.Add(Me.btnOK) - Me.Controls.Add(Me.optTag) - Me.Controls.Add(Me.optGameInfo) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.MaximizeBox = False Me.MinimizeBox = False @@ -367,8 +367,6 @@ Partial Class frmFilter Me.PerformLayout() End Sub - Friend WithEvents optGameInfo As System.Windows.Forms.RadioButton - Friend WithEvents optTag As System.Windows.Forms.RadioButton Friend WithEvents grpTagFilter As System.Windows.Forms.GroupBox Friend WithEvents grpTagOptions As System.Windows.Forms.GroupBox Friend WithEvents optAll As System.Windows.Forms.RadioButton @@ -395,4 +393,6 @@ Partial Class frmFilter Friend WithEvents optSortAsc As RadioButton Friend WithEvents cboSortField As ComboBox Friend WithEvents lblOrderBy As Label + Friend WithEvents chkTag As CheckBox + Friend WithEvents chkGameInfo As CheckBox End Class diff --git a/GBM/Forms/frmFilter.vb b/GBM/Forms/frmFilter.vb index 4b78cd1..fc5be01 100644 --- a/GBM/Forms/frmFilter.vb +++ b/GBM/Forms/frmFilter.vb @@ -3,17 +3,15 @@ Public Class frmFilter Public Enum eFilterType As Integer - NoFilter = 1 + BaseFilter = 1 AnyTag = 2 AllTags = 3 NoTags = 4 - FieldAnd = 5 - FieldOr = 6 End Enum Dim oTagFilters As New List(Of clsTag) Dim hshStringFilters As New Hashtable - Dim eCurrentFilterType As eFilterType = eFilterType.AnyTag + Dim eCurrentFilterType As eFilterType = eFilterType.BaseFilter Dim bSortAsc As Boolean = True Dim sSortField As String = "Name" Dim hshTags As New Hashtable @@ -124,13 +122,9 @@ Public Class frmFilter Dim oTag As clsTag - If optGameInfo.Checked Then + If chkGameInfo.Checked Then 'Set Filter Type - If optAnd.Checked Then - eCurrentFilterType = eFilterType.FieldAnd - Else - eCurrentFilterType = eFilterType.FieldOr - End If + eCurrentFilterType = eFilterType.BaseFilter 'Set String Filter If txtName.Text <> String.Empty Then @@ -142,7 +136,9 @@ Public Class frmFilter If txtCompany.Text <> String.Empty Then hshStringFilters.Add("Company", txtCompany.Text) End If - Else + End If + + If chkTag.Checked Then 'Set Tags For Each oData In lstFilter.Items oTag = DirectCast(hshTags(oData.Value), clsTag) @@ -207,8 +203,8 @@ Public Class frmFilter btnAdd.Text = frmFilter_btnAdd btnOK.Text = frmFilter_btnOK grpTagOptions.Text = frmFilter_grpTagOptions - optTag.Text = frmFilter_optTag - optGameInfo.Text = frmFilter_optGameInfo + chkTag.Text = frmFilter_chkTag + chkGameInfo.Text = frmFilter_chkGameInfo grpSorting.Text = frmFilter_grpSorting lblOrderBy.Text = frmFilter_lblOrderBy optSortAsc.Text = frmFilter_optSortAsc @@ -216,12 +212,13 @@ Public Class frmFilter 'Defaults optSortAsc.Checked = True + grpGameFilter.Enabled = False + grpTagFilter.Enabled = False End Sub Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load SetForm() LoadCombos() - optGameInfo.Checked = True LoadData() End Sub @@ -245,13 +242,19 @@ Public Class frmFilter End If End Sub - Private Sub optGameInfo_Click(sender As Object, e As EventArgs) Handles optGameInfo.Click, optTag.Click - If optGameInfo.Checked = True Then + Private Sub chkGameInfo_CheckedChanged(sender As Object, e As EventArgs) Handles chkGameInfo.CheckedChanged + If chkGameInfo.Checked Then grpGameFilter.Enabled = True - grpTagFilter.Enabled = False Else grpGameFilter.Enabled = False + End If + End Sub + + Private Sub chkTag_CheckedChanged(sender As Object, e As EventArgs) Handles chkTag.CheckedChanged + If chkTag.Checked Then grpTagFilter.Enabled = True + Else + grpTagFilter.Enabled = False End If End Sub End Class \ No newline at end of file diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index c55feed..feec031 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -21,7 +21,7 @@ Public Class frmGameManager Private bIsLoading As Boolean = False Private oCurrentTagFilters As New List(Of clsTag) Private oCurrentStringFilters As New Hashtable - Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter + Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter Private bCurrentSortAsc As Boolean = True Private sCurrentSortField As String = "Name" Private WithEvents tmFilterTimer As Timer @@ -235,7 +235,7 @@ Public Class frmGameManager Else oCurrentTagFilters.Clear() oCurrentStringFilters.Clear() - eCurrentFilter = frmFilter.eFilterType.NoFilter + eCurrentFilter = frmFilter.eFilterType.BaseFilter bCurrentSortAsc = True sCurrentSortField = "Name" End If @@ -1550,9 +1550,6 @@ Public Class frmGameManager AssignDirtyHandlers(grpExtra.Controls) AssignDirtyHandlers(grpStats.Controls) AssignDirtyHandlersMisc() - - LoadData(False) - ModeChange() End Sub Private Sub lstGames_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedIndexChanged diff --git a/GBM/Managers/mgrMonitorList.vb b/GBM/Managers/mgrMonitorList.vb index f0e1906..93e6ce3 100644 --- a/GBM/Managers/mgrMonitorList.vb +++ b/GBM/Managers/mgrMonitorList.vb @@ -511,30 +511,8 @@ Public Class mgrMonitorList End If Select Case eFilterType - Case frmFilter.eFilterType.NoFilter - sSQL = "SELECT " & sBaseSelect & sSort - Case frmFilter.eFilterType.FieldAnd, frmFilter.eFilterType.FieldOr + Case frmFilter.eFilterType.BaseFilter sSQL = "SELECT " & sBaseSelect - - If hshStringFilters.Count > 0 Then - sSQL &= " WHERE (" - For Each de As DictionaryEntry In hshStringFilters - sSQL &= de.Key & " LIKE @" & de.Key - hshParams.Add(de.Key, "%" & de.Value.ToString & "%") - iCounter += 1 - If iCounter <> hshStringFilters.Count Then - Select Case eFilterType - Case frmFilter.eFilterType.FieldAnd - sSQL &= " AND " - Case frmFilter.eFilterType.FieldOr - sSQL &= " OR " - End Select - End If - - Next - sSQL &= ")" - End If - sSQL &= sSort Case frmFilter.eFilterType.AnyTag sSQL = "SELECT DISTINCT " & sBaseSelect sSQL &= " NATURAL JOIN gametags WHERE gametags.TagID IN (" @@ -546,7 +524,7 @@ Public Class mgrMonitorList Next sSQL = sSQL.TrimEnd(",") - sSQL &= ")" & sSort + sSQL &= ")" Case frmFilter.eFilterType.AllTags sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID IN " @@ -558,12 +536,40 @@ Public Class mgrMonitorList hshParams.Add("TagID" & iCounter, oTag.ID) iCounter += 1 Next - - sSQL &= sSort Case frmFilter.eFilterType.NoTags - sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags)" & sSort + sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags)" End Select + 'Handle String Filters + If hshStringFilters.Count > 0 Then + If eFilterType = frmFilter.eFilterType.BaseFilter Then + sSQL &= " WHERE (" + Else + sSQL &= " AND (" + End If + + iCounter = 0 + For Each de As DictionaryEntry In hshStringFilters + sSQL &= de.Key & " LIKE @" & de.Key + hshParams.Add(de.Key, "%" & de.Value.ToString & "%") + iCounter += 1 + If iCounter <> hshStringFilters.Count Then + 'Select Case eFilterType + 'Case frmFilter.eFilterType.FieldAnd + 'sSQL &= " AND " + 'Case frmFilter.eFilterType.FieldOr + sSQL &= " OR " + 'End Select + End If + + Next + sSQL &= ")" + End If + + 'Handle Sorting + sSQL &= sSort + + Return sSQL End Function @@ -697,7 +703,7 @@ Public Class mgrMonitorList Dim bSuccess As Boolean = False Dim oTagFilters As New List(Of clsTag) Dim oStringFilters As New Hashtable - Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter + Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter Dim bSortAsc As Boolean = True Dim sSortField As String = "Name" diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index de37caf..b191d24 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -942,6 +942,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Game Information. + ''' + Friend ReadOnly Property frmFilter_chkGameInfo() As String + Get + Return ResourceManager.GetString("frmFilter_chkGameInfo", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Tag. + ''' + Friend ReadOnly Property frmFilter_chkTag() As String + Get + Return ResourceManager.GetString("frmFilter_chkTag", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Custom Filter. ''' @@ -1059,15 +1077,6 @@ Namespace My.Resources End Get End Property - ''' - ''' Looks up a localized string similar to Game Information. - ''' - Friend ReadOnly Property frmFilter_optGameInfo() As String - Get - Return ResourceManager.GetString("frmFilter_optGameInfo", resourceCulture) - End Get - End Property - ''' ''' Looks up a localized string similar to Or. ''' @@ -1095,15 +1104,6 @@ Namespace My.Resources End Get End Property - ''' - ''' Looks up a localized string similar to Tag. - ''' - Friend ReadOnly Property frmFilter_optTag() As String - Get - Return ResourceManager.GetString("frmFilter_optTag", resourceCulture) - End Get - End Property - ''' ''' Looks up a localized string similar to Company. ''' diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index c1cb9b0..ca92904 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -919,13 +919,13 @@ Any Tag - + Game Information Or - + Tag