diff --git a/GBM/Forms/frmFilter.Designer.vb b/GBM/Forms/frmFilter.Designer.vb index 42778bc..c376553 100644 --- a/GBM/Forms/frmFilter.Designer.vb +++ b/GBM/Forms/frmFilter.Designer.vb @@ -30,19 +30,18 @@ Partial Class frmFilter Me.lblTags = New System.Windows.Forms.Label() Me.btnRemove = New System.Windows.Forms.Button() Me.btnAdd = New System.Windows.Forms.Button() - Me.lstFilter = New System.Windows.Forms.ListBox() + Me.lstTagFilter = New System.Windows.Forms.ListBox() Me.lstTags = New System.Windows.Forms.ListBox() Me.btnOK = New System.Windows.Forms.Button() Me.grpGameFilter = New System.Windows.Forms.GroupBox() + Me.btnRemoveFilter = New System.Windows.Forms.Button() + Me.lstFilter = New System.Windows.Forms.ListBox() + Me.btnAddFilter = New System.Windows.Forms.Button() + Me.cboFilterField = New System.Windows.Forms.ComboBox() Me.grpGameInfoOptions = New System.Windows.Forms.GroupBox() Me.optOr = New System.Windows.Forms.RadioButton() Me.optAnd = New System.Windows.Forms.RadioButton() - Me.txtCompany = New System.Windows.Forms.TextBox() - Me.lblCompany = New System.Windows.Forms.Label() - Me.txtProcess = New System.Windows.Forms.TextBox() - Me.lblProcess = New System.Windows.Forms.Label() - Me.lblName = New System.Windows.Forms.Label() - Me.txtName = New System.Windows.Forms.TextBox() + Me.txtFilterData = New System.Windows.Forms.TextBox() Me.grpSorting = New System.Windows.Forms.GroupBox() Me.optSortDesc = New System.Windows.Forms.RadioButton() Me.optSortAsc = New System.Windows.Forms.RadioButton() @@ -50,6 +49,9 @@ Partial Class frmFilter Me.lblOrderBy = New System.Windows.Forms.Label() Me.chkTag = New System.Windows.Forms.CheckBox() Me.chkGameInfo = New System.Windows.Forms.CheckBox() + Me.lblFields = New System.Windows.Forms.Label() + Me.lblFilterData = New System.Windows.Forms.Label() + Me.lblCurrentFilters = New System.Windows.Forms.Label() Me.grpTagFilter.SuspendLayout() Me.grpTagOptions.SuspendLayout() Me.grpGameFilter.SuspendLayout() @@ -64,11 +66,11 @@ Partial Class frmFilter Me.grpTagFilter.Controls.Add(Me.lblTags) Me.grpTagFilter.Controls.Add(Me.btnRemove) Me.grpTagFilter.Controls.Add(Me.btnAdd) - Me.grpTagFilter.Controls.Add(Me.lstFilter) + Me.grpTagFilter.Controls.Add(Me.lstTagFilter) Me.grpTagFilter.Controls.Add(Me.lstTags) - Me.grpTagFilter.Location = New System.Drawing.Point(12, 213) + Me.grpTagFilter.Location = New System.Drawing.Point(12, 253) Me.grpTagFilter.Name = "grpTagFilter" - Me.grpTagFilter.Size = New System.Drawing.Size(385, 265) + Me.grpTagFilter.Size = New System.Drawing.Size(385, 198) Me.grpTagFilter.TabIndex = 3 Me.grpTagFilter.TabStop = False ' @@ -76,7 +78,7 @@ Partial Class frmFilter ' Me.grpTagOptions.Controls.Add(Me.optAll) Me.grpTagOptions.Controls.Add(Me.optAny) - Me.grpTagOptions.Location = New System.Drawing.Point(6, 211) + Me.grpTagOptions.Location = New System.Drawing.Point(6, 146) Me.grpTagOptions.Name = "grpTagOptions" Me.grpTagOptions.Size = New System.Drawing.Size(150, 46) Me.grpTagOptions.TabIndex = 6 @@ -124,7 +126,7 @@ Partial Class frmFilter ' 'btnRemove ' - Me.btnRemove.Location = New System.Drawing.Point(162, 122) + Me.btnRemove.Location = New System.Drawing.Point(162, 88) Me.btnRemove.Name = "btnRemove" Me.btnRemove.Size = New System.Drawing.Size(61, 23) Me.btnRemove.TabIndex = 3 @@ -133,22 +135,22 @@ Partial Class frmFilter ' 'btnAdd ' - Me.btnAdd.Location = New System.Drawing.Point(162, 93) + Me.btnAdd.Location = New System.Drawing.Point(162, 59) Me.btnAdd.Name = "btnAdd" Me.btnAdd.Size = New System.Drawing.Size(61, 23) Me.btnAdd.TabIndex = 2 Me.btnAdd.Text = ">" Me.btnAdd.UseVisualStyleBackColor = True ' - 'lstFilter + 'lstTagFilter ' - Me.lstFilter.FormattingEnabled = True - Me.lstFilter.Location = New System.Drawing.Point(229, 32) - Me.lstFilter.Name = "lstFilter" - Me.lstFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstFilter.Size = New System.Drawing.Size(150, 173) - Me.lstFilter.Sorted = True - Me.lstFilter.TabIndex = 5 + Me.lstTagFilter.FormattingEnabled = True + Me.lstTagFilter.Location = New System.Drawing.Point(229, 32) + Me.lstTagFilter.Name = "lstTagFilter" + Me.lstTagFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstTagFilter.Size = New System.Drawing.Size(150, 108) + Me.lstTagFilter.Sorted = True + Me.lstTagFilter.TabIndex = 5 ' 'lstTags ' @@ -156,13 +158,13 @@ Partial Class frmFilter Me.lstTags.Location = New System.Drawing.Point(6, 32) Me.lstTags.Name = "lstTags" Me.lstTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstTags.Size = New System.Drawing.Size(150, 173) + Me.lstTags.Size = New System.Drawing.Size(150, 108) Me.lstTags.Sorted = True Me.lstTags.TabIndex = 1 ' 'btnOK ' - Me.btnOK.Location = New System.Drawing.Point(322, 551) + Me.btnOK.Location = New System.Drawing.Point(322, 526) Me.btnOK.Name = "btnOK" Me.btnOK.Size = New System.Drawing.Size(75, 23) Me.btnOK.TabIndex = 5 @@ -171,27 +173,64 @@ Partial Class frmFilter ' 'grpGameFilter ' + Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters) + Me.grpGameFilter.Controls.Add(Me.lblFilterData) + Me.grpGameFilter.Controls.Add(Me.lblFields) + Me.grpGameFilter.Controls.Add(Me.btnRemoveFilter) + Me.grpGameFilter.Controls.Add(Me.lstFilter) + Me.grpGameFilter.Controls.Add(Me.btnAddFilter) + Me.grpGameFilter.Controls.Add(Me.cboFilterField) Me.grpGameFilter.Controls.Add(Me.grpGameInfoOptions) - Me.grpGameFilter.Controls.Add(Me.txtCompany) - Me.grpGameFilter.Controls.Add(Me.lblCompany) - Me.grpGameFilter.Controls.Add(Me.txtProcess) - Me.grpGameFilter.Controls.Add(Me.lblProcess) - Me.grpGameFilter.Controls.Add(Me.lblName) - Me.grpGameFilter.Controls.Add(Me.txtName) + Me.grpGameFilter.Controls.Add(Me.txtFilterData) Me.grpGameFilter.Location = New System.Drawing.Point(12, 35) Me.grpGameFilter.Name = "grpGameFilter" - Me.grpGameFilter.Size = New System.Drawing.Size(385, 150) + Me.grpGameFilter.Size = New System.Drawing.Size(385, 189) Me.grpGameFilter.TabIndex = 1 Me.grpGameFilter.TabStop = False ' + 'btnRemoveFilter + ' + Me.btnRemoveFilter.Location = New System.Drawing.Point(259, 153) + Me.btnRemoveFilter.Name = "btnRemoveFilter" + Me.btnRemoveFilter.Size = New System.Drawing.Size(75, 23) + Me.btnRemoveFilter.TabIndex = 8 + Me.btnRemoveFilter.Text = "Remove" + Me.btnRemoveFilter.UseVisualStyleBackColor = True + ' + 'lstFilter + ' + Me.lstFilter.FormattingEnabled = True + Me.lstFilter.Location = New System.Drawing.Point(6, 81) + Me.lstFilter.Name = "lstFilter" + Me.lstFilter.Size = New System.Drawing.Size(247, 95) + Me.lstFilter.TabIndex = 6 + ' + 'btnAddFilter + ' + Me.btnAddFilter.Location = New System.Drawing.Point(304, 34) + Me.btnAddFilter.Name = "btnAddFilter" + Me.btnAddFilter.Size = New System.Drawing.Size(75, 23) + Me.btnAddFilter.TabIndex = 4 + Me.btnAddFilter.Text = "Add" + Me.btnAddFilter.UseVisualStyleBackColor = True + ' + 'cboFilterField + ' + Me.cboFilterField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboFilterField.FormattingEnabled = True + Me.cboFilterField.Location = New System.Drawing.Point(6, 36) + Me.cboFilterField.Name = "cboFilterField" + Me.cboFilterField.Size = New System.Drawing.Size(121, 21) + Me.cboFilterField.TabIndex = 1 + ' 'grpGameInfoOptions ' Me.grpGameInfoOptions.Controls.Add(Me.optOr) Me.grpGameInfoOptions.Controls.Add(Me.optAnd) - Me.grpGameInfoOptions.Location = New System.Drawing.Point(14, 97) + Me.grpGameInfoOptions.Location = New System.Drawing.Point(259, 81) Me.grpGameInfoOptions.Name = "grpGameInfoOptions" Me.grpGameInfoOptions.Size = New System.Drawing.Size(106, 46) - Me.grpGameInfoOptions.TabIndex = 6 + Me.grpGameInfoOptions.TabIndex = 7 Me.grpGameInfoOptions.TabStop = False Me.grpGameInfoOptions.Text = "Options" ' @@ -216,53 +255,12 @@ Partial Class frmFilter Me.optAnd.Text = "And" Me.optAnd.UseVisualStyleBackColor = True ' - 'txtCompany + 'txtFilterData ' - Me.txtCompany.Location = New System.Drawing.Point(70, 71) - Me.txtCompany.Name = "txtCompany" - Me.txtCompany.Size = New System.Drawing.Size(309, 20) - Me.txtCompany.TabIndex = 5 - ' - 'lblCompany - ' - Me.lblCompany.AutoSize = True - Me.lblCompany.Location = New System.Drawing.Point(11, 74) - Me.lblCompany.Name = "lblCompany" - Me.lblCompany.Size = New System.Drawing.Size(54, 13) - Me.lblCompany.TabIndex = 4 - Me.lblCompany.Text = "Company:" - ' - 'txtProcess - ' - Me.txtProcess.Location = New System.Drawing.Point(70, 45) - Me.txtProcess.Name = "txtProcess" - Me.txtProcess.Size = New System.Drawing.Size(309, 20) - Me.txtProcess.TabIndex = 3 - ' - 'lblProcess - ' - Me.lblProcess.AutoSize = True - Me.lblProcess.Location = New System.Drawing.Point(11, 48) - Me.lblProcess.Name = "lblProcess" - Me.lblProcess.Size = New System.Drawing.Size(48, 13) - Me.lblProcess.TabIndex = 2 - Me.lblProcess.Text = "Process:" - ' - 'lblName - ' - Me.lblName.AutoSize = True - Me.lblName.Location = New System.Drawing.Point(11, 22) - Me.lblName.Name = "lblName" - Me.lblName.Size = New System.Drawing.Size(38, 13) - Me.lblName.TabIndex = 0 - Me.lblName.Text = "Name:" - ' - 'txtName - ' - Me.txtName.Location = New System.Drawing.Point(70, 19) - Me.txtName.Name = "txtName" - Me.txtName.Size = New System.Drawing.Size(309, 20) - Me.txtName.TabIndex = 1 + Me.txtFilterData.Location = New System.Drawing.Point(133, 36) + Me.txtFilterData.Name = "txtFilterData" + Me.txtFilterData.Size = New System.Drawing.Size(165, 20) + Me.txtFilterData.TabIndex = 3 ' 'grpSorting ' @@ -270,7 +268,7 @@ Partial Class frmFilter Me.grpSorting.Controls.Add(Me.optSortAsc) Me.grpSorting.Controls.Add(Me.cboSortField) Me.grpSorting.Controls.Add(Me.lblOrderBy) - Me.grpSorting.Location = New System.Drawing.Point(12, 484) + Me.grpSorting.Location = New System.Drawing.Point(12, 457) Me.grpSorting.Name = "grpSorting" Me.grpSorting.Size = New System.Drawing.Size(385, 61) Me.grpSorting.TabIndex = 4 @@ -280,7 +278,7 @@ Partial Class frmFilter 'optSortDesc ' Me.optSortDesc.AutoSize = True - Me.optSortDesc.Location = New System.Drawing.Point(297, 26) + Me.optSortDesc.Location = New System.Drawing.Point(271, 26) Me.optSortDesc.Name = "optSortDesc" Me.optSortDesc.Size = New System.Drawing.Size(82, 17) Me.optSortDesc.TabIndex = 3 @@ -291,7 +289,7 @@ Partial Class frmFilter 'optSortAsc ' Me.optSortAsc.AutoSize = True - Me.optSortAsc.Location = New System.Drawing.Point(216, 26) + Me.optSortAsc.Location = New System.Drawing.Point(190, 26) Me.optSortAsc.Name = "optSortAsc" Me.optSortAsc.Size = New System.Drawing.Size(75, 17) Me.optSortAsc.TabIndex = 2 @@ -305,7 +303,7 @@ Partial Class frmFilter 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.Size = New System.Drawing.Size(121, 21) Me.cboSortField.TabIndex = 1 ' 'lblOrderBy @@ -320,32 +318,59 @@ Partial Class frmFilter 'chkTag ' Me.chkTag.AutoSize = True - Me.chkTag.Location = New System.Drawing.Point(12, 192) + Me.chkTag.Location = New System.Drawing.Point(12, 230) Me.chkTag.Name = "chkTag" Me.chkTag.Size = New System.Drawing.Size(45, 17) - Me.chkTag.TabIndex = 6 + Me.chkTag.TabIndex = 2 Me.chkTag.Text = "Tag" Me.chkTag.UseVisualStyleBackColor = True ' 'chkGameInfo ' Me.chkGameInfo.AutoSize = True - Me.chkGameInfo.Location = New System.Drawing.Point(12, 14) + Me.chkGameInfo.Location = New System.Drawing.Point(12, 12) Me.chkGameInfo.Name = "chkGameInfo" Me.chkGameInfo.Size = New System.Drawing.Size(109, 17) - Me.chkGameInfo.TabIndex = 7 + Me.chkGameInfo.TabIndex = 0 Me.chkGameInfo.Text = "Game Information" Me.chkGameInfo.UseVisualStyleBackColor = True ' + 'lblFields + ' + Me.lblFields.AutoSize = True + Me.lblFields.Location = New System.Drawing.Point(26, 20) + Me.lblFields.Name = "lblFields" + Me.lblFields.Size = New System.Drawing.Size(80, 13) + Me.lblFields.TabIndex = 0 + Me.lblFields.Text = "Available Fields" + ' + 'lblFilterData + ' + Me.lblFilterData.AutoSize = True + Me.lblFilterData.Location = New System.Drawing.Point(199, 20) + Me.lblFilterData.Name = "lblFilterData" + Me.lblFilterData.Size = New System.Drawing.Size(32, 13) + Me.lblFilterData.TabIndex = 2 + Me.lblFilterData.Text = "Filter " + ' + 'lblCurrentFilters + ' + Me.lblCurrentFilters.AutoSize = True + Me.lblCurrentFilters.Location = New System.Drawing.Point(94, 65) + Me.lblCurrentFilters.Name = "lblCurrentFilters" + Me.lblCurrentFilters.Size = New System.Drawing.Size(71, 13) + Me.lblCurrentFilters.TabIndex = 5 + Me.lblCurrentFilters.Text = "Current Filters" + ' '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.ClientSize = New System.Drawing.Size(409, 561) Me.Controls.Add(Me.grpSorting) + Me.Controls.Add(Me.chkTag) Me.Controls.Add(Me.grpGameFilter) + Me.Controls.Add(Me.chkGameInfo) Me.Controls.Add(Me.grpTagFilter) Me.Controls.Add(Me.btnOK) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle @@ -375,16 +400,11 @@ Partial Class frmFilter Friend WithEvents lblTags As System.Windows.Forms.Label Friend WithEvents btnRemove As System.Windows.Forms.Button Friend WithEvents btnAdd As System.Windows.Forms.Button - Friend WithEvents lstFilter As System.Windows.Forms.ListBox + Friend WithEvents lstTagFilter As System.Windows.Forms.ListBox Friend WithEvents lstTags As System.Windows.Forms.ListBox Friend WithEvents btnOK As System.Windows.Forms.Button Friend WithEvents grpGameFilter As System.Windows.Forms.GroupBox - Friend WithEvents txtProcess As System.Windows.Forms.TextBox - Friend WithEvents lblProcess As System.Windows.Forms.Label - Friend WithEvents lblName As System.Windows.Forms.Label - Friend WithEvents txtName As System.Windows.Forms.TextBox - Friend WithEvents txtCompany As System.Windows.Forms.TextBox - Friend WithEvents lblCompany As System.Windows.Forms.Label + Friend WithEvents txtFilterData As System.Windows.Forms.TextBox Friend WithEvents grpGameInfoOptions As System.Windows.Forms.GroupBox Friend WithEvents optOr As System.Windows.Forms.RadioButton Friend WithEvents optAnd As System.Windows.Forms.RadioButton @@ -395,4 +415,11 @@ Partial Class frmFilter Friend WithEvents lblOrderBy As Label Friend WithEvents chkTag As CheckBox Friend WithEvents chkGameInfo As CheckBox + Friend WithEvents cboFilterField As ComboBox + Friend WithEvents lstFilter As ListBox + Friend WithEvents btnAddFilter As Button + Friend WithEvents btnRemoveFilter As Button + Friend WithEvents lblCurrentFilters As Label + Friend WithEvents lblFilterData As Label + Friend WithEvents lblFields As Label End Class diff --git a/GBM/Forms/frmFilter.vb b/GBM/Forms/frmFilter.vb index fc5be01..8515505 100644 --- a/GBM/Forms/frmFilter.vb +++ b/GBM/Forms/frmFilter.vb @@ -9,17 +9,63 @@ Public Class frmFilter NoTags = 4 End Enum + Public Class clsFilter + + Private sID As String + Private sField As String + Private oData As Object + Private bAndOperator As Boolean + + Public Property ID As String + Get + Return sID + End Get + Set(value As String) + sID = value + End Set + End Property + + Public Property Field As String + Get + Return sField + End Get + Set(value As String) + sField = value + End Set + End Property + + Public Property Data As Object + Get + Return oData + End Get + Set(value As Object) + oData = value + End Set + End Property + + Public Property AndOperator As Boolean + Get + Return bAndOperator + End Get + Set(value As Boolean) + bAndOperator = value + End Set + End Property + + End Class + Dim oTagFilters As New List(Of clsTag) - Dim hshStringFilters As New Hashtable + Dim oGameFilters As New List(Of clsFilter) Dim eCurrentFilterType As eFilterType = eFilterType.BaseFilter Dim bSortAsc As Boolean = True Dim sSortField As String = "Name" Dim hshTags As New Hashtable Dim bShutdown As Boolean = False + Dim iParameterIndex As Integer = 0 - Public ReadOnly Property StringFilters As Hashtable + Public ReadOnly Property GameFilters As List(Of clsFilter) Get - Return hshStringFilters + Return oGameFilters End Get End Property @@ -53,7 +99,7 @@ Public Class frmFilter If lstTags.SelectedItems.Count = 1 Then oData = lstTags.SelectedItems(0) - lstFilter.Items.Add(oData) + lstTagFilter.Items.Add(oData) lstTags.Items.Remove(oData) ElseIf lstTags.SelectedItems.Count > 1 Then oTags = New List(Of KeyValuePair(Of String, String)) @@ -63,7 +109,7 @@ Public Class frmFilter Next For Each kp As KeyValuePair(Of String, String) In oTags - lstFilter.Items.Add(kp) + lstTagFilter.Items.Add(kp) lstTags.Items.Remove(kp) Next End If @@ -74,19 +120,19 @@ Public Class frmFilter Dim oData As KeyValuePair(Of String, String) Dim oTags As List(Of KeyValuePair(Of String, String)) - If lstFilter.SelectedItems.Count = 1 Then - oData = lstFilter.SelectedItems(0) - lstFilter.Items.Remove(oData) + If lstTagFilter.SelectedItems.Count = 1 Then + oData = lstTagFilter.SelectedItems(0) + lstTagFilter.Items.Remove(oData) lstTags.Items.Add(oData) - ElseIf lstFilter.SelectedItems.Count > 1 Then + ElseIf lstTagFilter.SelectedItems.Count > 1 Then oTags = New List(Of KeyValuePair(Of String, String)) - For Each oData In lstFilter.SelectedItems + For Each oData In lstTagFilter.SelectedItems oTags.Add(oData) Next For Each kp As KeyValuePair(Of String, String) In oTags - lstFilter.Items.Remove(kp) + lstTagFilter.Items.Remove(kp) lstTags.Items.Add(kp) Next End If @@ -102,12 +148,12 @@ Public Class frmFilter 'Handle Lists lstTags.Items.Clear() - lstFilter.Items.Clear() + lstTagFilter.Items.Clear() lstTags.ValueMember = "Key" lstTags.DisplayMember = "Value" - lstFilter.ValueMember = "Key" - lstFilter.DisplayMember = "Value" + lstTagFilter.ValueMember = "Key" + lstTagFilter.DisplayMember = "Value" For Each de As DictionaryEntry In hshTags oTag = DirectCast(de.Value, clsTag) @@ -117,6 +163,45 @@ Public Class frmFilter End Sub + Private Sub AddFilter() + Dim oFilter As New clsFilter + Dim sFilter As String + + lstFilter.ValueMember = "Key" + lstFilter.DisplayMember = "Value" + + 'Build Filter + oFilter.ID = "PARAM" & iParameterIndex + oFilter.Field = cboFilterField.SelectedValue + oFilter.Data = txtFilterData.Text + oFilter.AndOperator = optAnd.Checked + + oGameFilters.Add(oFilter) + + 'Build String + sFilter = oFilter.Field & " / " & oFilter.Data & " / " + If oFilter.AndOperator Then + sFilter &= frmFilter_optAnd + Else + sFilter &= frmFilter_optOr + End If + + lstFilter.Items.Add(New KeyValuePair(Of clsFilter, String)(oFilter, sFilter)) + + iParameterIndex += 1 + End Sub + + Private Sub RemoveFilter() + Dim oFilter As Object + + If lstFilter.SelectedIndex <> -1 Then + oFilter = lstFilter.SelectedItem + oGameFilters.Remove(DirectCast(oFilter, KeyValuePair(Of clsFilter, String)).Key) + lstFilter.Items.Remove(oFilter) + End If + + End Sub + Private Sub GetFilters() Dim oData As KeyValuePair(Of String, String) Dim oTag As clsTag @@ -125,22 +210,11 @@ Public Class frmFilter If chkGameInfo.Checked Then 'Set Filter Type eCurrentFilterType = eFilterType.BaseFilter - - 'Set String Filter - If txtName.Text <> String.Empty Then - hshStringFilters.Add("Name", txtName.Text) - End If - If txtProcess.Text <> String.Empty Then - hshStringFilters.Add("Process", txtProcess.Text) - End If - If txtCompany.Text <> String.Empty Then - hshStringFilters.Add("Company", txtCompany.Text) - End If End If If chkTag.Checked Then 'Set Tags - For Each oData In lstFilter.Items + For Each oData In lstTagFilter.Items oTag = DirectCast(hshTags(oData.Value), clsTag) TagFilters.Add(oTag) Next @@ -167,20 +241,36 @@ Public Class frmFilter End Sub Private Sub LoadCombos() + Dim oFilterFields As New List(Of KeyValuePair(Of String, String)) Dim oSortFields As New List(Of KeyValuePair(Of String, String)) + 'cboFilterField + cboFilterField.ValueMember = "Key" + cboFilterField.DisplayMember = "Value" + + oFilterFields.Add(New KeyValuePair(Of String, String)("Name", frmFilter_FieldName)) + oFilterFields.Add(New KeyValuePair(Of String, String)("Process", frmFilter_FieldProcess)) + oFilterFields.Add(New KeyValuePair(Of String, String)("Parameter", frmFilter_FieldParameter)) + oFilterFields.Add(New KeyValuePair(Of String, String)("Company", frmFilter_FieldCompany)) + oFilterFields.Add(New KeyValuePair(Of String, String)("Version", frmFilter_FieldVersion)) + + cboFilterField.DataSource = oFilterFields + 'cboSortField cboSortField.ValueMember = "Key" cboSortField.DisplayMember = "Value" - oSortFields.Add(New KeyValuePair(Of String, String)("Name", frmFilter_SortName)) - oSortFields.Add(New KeyValuePair(Of String, String)("Process", frmFilter_SortProcess)) - oSortFields.Add(New KeyValuePair(Of String, String)("Company", frmFilter_SortCompany)) - oSortFields.Add(New KeyValuePair(Of String, String)("Hours", frmFilter_SortHours)) + oSortFields.Add(New KeyValuePair(Of String, String)("Name", frmFilter_FieldName)) + oSortFields.Add(New KeyValuePair(Of String, String)("Process", frmFilter_FieldProcess)) + oSortFields.Add(New KeyValuePair(Of String, String)("Parameter", frmFilter_FieldParameter)) + oSortFields.Add(New KeyValuePair(Of String, String)("Company", frmFilter_FieldCompany)) + oSortFields.Add(New KeyValuePair(Of String, String)("Version", frmFilter_FieldVersion)) + oSortFields.Add(New KeyValuePair(Of String, String)("Hours", frmFilter_FieldHours)) cboSortField.DataSource = oSortFields - 'Select Default + 'Select Defaults + cboFilterField.SelectedIndex = 0 cboSortField.SelectedIndex = 0 End Sub @@ -191,9 +281,6 @@ Public Class frmFilter 'Set Form Text optOr.Text = frmFilter_optOr optAnd.Text = frmFilter_optAnd - lblCompany.Text = frmFilter_lblCompany - lblProcess.Text = frmFilter_lblProcess - lblName.Text = frmFilter_lblName grpGameInfoOptions.Text = frmFilter_grpGameInfoOptions optAll.Text = frmFilter_optAll optAny.Text = frmFilter_optAny @@ -209,6 +296,11 @@ Public Class frmFilter lblOrderBy.Text = frmFilter_lblOrderBy optSortAsc.Text = frmFilter_optSortAsc optSortDesc.Text = frmFilter_optSortDesc + btnAddFilter.Text = frmFilter_btnAddFilter + btnRemoveFilter.Text = frmFilter_btnRemoveFilter + lblCurrentFilters.Text = frmFilter_lblCurrentFilters + lblFields.Text = frmFilter_lblFields + lblFilterData.Text = frmFilter_lblFilterData 'Defaults optSortAsc.Checked = True @@ -257,4 +349,12 @@ Public Class frmFilter grpTagFilter.Enabled = False End If End Sub + + Private Sub btnAddFilter_Click(sender As Object, e As EventArgs) Handles btnAddFilter.Click + AddFilter() + End Sub + + Private Sub btnRemoveFilter_Click(sender As Object, e As EventArgs) Handles btnRemoveFilter.Click + RemoveFilter() + End Sub End Class \ No newline at end of file diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index feec031..7195522 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -20,7 +20,7 @@ Public Class frmGameManager Private bIsDirty As Boolean = False Private bIsLoading As Boolean = False Private oCurrentTagFilters As New List(Of clsTag) - Private oCurrentStringFilters As New Hashtable + Private oCurrentFilters As New List(Of frmFilter.clsFilter) Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter Private bCurrentSortAsc As Boolean = True Private sCurrentSortField As String = "Name" @@ -227,20 +227,20 @@ Public Class frmGameManager frm = New frmFilter frm.ShowDialog() oCurrentTagFilters = frm.TagFilters - oCurrentStringFilters = frm.StringFilters + oCurrentFilters = frm.GameFilters eCurrentFilter = frm.FilterType bCurrentSortAsc = frm.SortAsc sCurrentSortField = frm.SortField End If Else oCurrentTagFilters.Clear() - oCurrentStringFilters.Clear() + oCurrentFilters.Clear() eCurrentFilter = frmFilter.eFilterType.BaseFilter bCurrentSortAsc = True sCurrentSortField = "Name" End If - GameData = mgrMonitorList.ReadFilteredList(oCurrentTagFilters, oCurrentStringFilters, eCurrentFilter, bCurrentSortAsc, sCurrentSortField) + GameData = mgrMonitorList.ReadFilteredList(oCurrentTagFilters, oCurrentFilters, eCurrentFilter, bCurrentSortAsc, sCurrentSortField) If optPendingRestores.Checked Then oRestoreData = mgrRestore.CompareManifests @@ -1550,6 +1550,9 @@ 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 93e6ce3..5616839 100644 --- a/GBM/Managers/mgrMonitorList.vb +++ b/GBM/Managers/mgrMonitorList.vb @@ -497,7 +497,7 @@ Public Class mgrMonitorList End Sub 'Filter Functions - Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, + Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of frmFilter.clsFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, ByVal sSortField As String, ByRef hshParams As Hashtable) As String Dim sSQL As String = String.Empty Dim iCounter As Integer = 0 @@ -541,7 +541,7 @@ Public Class mgrMonitorList End Select 'Handle String Filters - If hshStringFilters.Count > 0 Then + If oFilters.Count > 0 Then If eFilterType = frmFilter.eFilterType.BaseFilter Then sSQL &= " WHERE (" Else @@ -549,19 +549,17 @@ Public Class mgrMonitorList End If iCounter = 0 - For Each de As DictionaryEntry In hshStringFilters - sSQL &= de.Key & " LIKE @" & de.Key - hshParams.Add(de.Key, "%" & de.Value.ToString & "%") + For Each oFilter As frmFilter.clsFilter In oFilters + sSQL &= oFilter.Field & " LIKE @" & oFilter.ID + hshParams.Add(oFilter.ID, "%" & oFilter.Data & "%") iCounter += 1 - If iCounter <> hshStringFilters.Count Then - 'Select Case eFilterType - 'Case frmFilter.eFilterType.FieldAnd - 'sSQL &= " AND " - 'Case frmFilter.eFilterType.FieldOr - sSQL &= " OR " - 'End Select + If iCounter <> oFilters.Count Then + If oFilter.AndOperator Then + sSQL &= " AND " + Else + sSQL &= " OR " + End If End If - Next sSQL &= ")" End If @@ -574,7 +572,7 @@ Public Class mgrMonitorList End Function - Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, + Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of frmFilter.clsFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, ByVal sSortField As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As OrderedDictionary Dim oDatabase As New mgrSQLite(iSelectDB) Dim oData As DataSet @@ -584,7 +582,7 @@ Public Class mgrMonitorList Dim hshParams As New Hashtable Dim iCounter As Integer = 0 - sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, bSortAsc, sSortField, hshParams) + sSQL = BuildFilterQuery(oTagFilters, oFilters, eFilterType, bSortAsc, sSortField, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams) @@ -599,7 +597,7 @@ Public Class mgrMonitorList 'Import / Export Functions - Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, + Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of frmFilter.clsFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, ByVal sSortField As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game) Dim oDatabase As New mgrSQLite(iSelectDB) Dim oData As DataSet @@ -609,7 +607,7 @@ Public Class mgrMonitorList Dim oGame As Game Dim hshParams As New Hashtable - sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, bSortAsc, sSortField, hshParams) + sSQL = BuildFilterQuery(oTagFilters, oFilters, eFilterType, bSortAsc, sSortField, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams) @@ -702,7 +700,7 @@ Public Class mgrMonitorList Dim oList As List(Of Game) Dim bSuccess As Boolean = False Dim oTagFilters As New List(Of clsTag) - Dim oStringFilters As New Hashtable + Dim oFilters As New List(Of frmFilter.clsFilter) Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter Dim bSortAsc As Boolean = True Dim sSortField As String = "Name" @@ -711,13 +709,13 @@ Public Class mgrMonitorList Dim frm As New frmFilter frm.ShowDialog() oTagFilters = frm.TagFilters - oStringFilters = frm.StringFilters + oFilters = frm.GameFilters eCurrentFilter = frm.FilterType bSortAsc = frm.SortAsc sSortField = frm.SortField End If - oList = ReadListForExport(oTagFilters, oStringFilters, eCurrentFilter, bSortAsc, sSortField) + oList = ReadListForExport(oTagFilters, oFilters, eCurrentFilter, bSortAsc, sSortField) bSuccess = mgrXML.SerializeAndExport(oList, sLocation) diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index b191d24..f2cb9a3 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -924,6 +924,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Add. + ''' + Friend ReadOnly Property frmFilter_btnAddFilter() As String + Get + Return ResourceManager.GetString("frmFilter_btnAddFilter", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to &OK. ''' @@ -942,6 +951,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Remove. + ''' + Friend ReadOnly Property frmFilter_btnRemoveFilter() As String + Get + Return ResourceManager.GetString("frmFilter_btnRemoveFilter", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Game Information. ''' @@ -960,6 +978,60 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Company. + ''' + Friend ReadOnly Property frmFilter_FieldCompany() As String + Get + Return ResourceManager.GetString("frmFilter_FieldCompany", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Hours. + ''' + Friend ReadOnly Property frmFilter_FieldHours() As String + Get + Return ResourceManager.GetString("frmFilter_FieldHours", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Name. + ''' + Friend ReadOnly Property frmFilter_FieldName() As String + Get + Return ResourceManager.GetString("frmFilter_FieldName", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Parameter. + ''' + Friend ReadOnly Property frmFilter_FieldParameter() As String + Get + Return ResourceManager.GetString("frmFilter_FieldParameter", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Process. + ''' + Friend ReadOnly Property frmFilter_FieldProcess() As String + Get + Return ResourceManager.GetString("frmFilter_FieldProcess", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Version. + ''' + Friend ReadOnly Property frmFilter_FieldVersion() As String + Get + Return ResourceManager.GetString("frmFilter_FieldVersion", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Custom Filter. ''' @@ -997,11 +1069,29 @@ Namespace My.Resources End Property ''' - ''' Looks up a localized string similar to Company:. + ''' Looks up a localized string similar to Current Filters. ''' - Friend ReadOnly Property frmFilter_lblCompany() As String + Friend ReadOnly Property frmFilter_lblCurrentFilters() As String Get - Return ResourceManager.GetString("frmFilter_lblCompany", resourceCulture) + Return ResourceManager.GetString("frmFilter_lblCurrentFilters", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Available Fields. + ''' + Friend ReadOnly Property frmFilter_lblFields() As String + Get + Return ResourceManager.GetString("frmFilter_lblFields", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Filter. + ''' + Friend ReadOnly Property frmFilter_lblFilterData() As String + Get + Return ResourceManager.GetString("frmFilter_lblFilterData", resourceCulture) End Get End Property @@ -1014,15 +1104,6 @@ Namespace My.Resources End Get End Property - ''' - ''' Looks up a localized string similar to Name:. - ''' - Friend ReadOnly Property frmFilter_lblName() As String - Get - Return ResourceManager.GetString("frmFilter_lblName", resourceCulture) - End Get - End Property - ''' ''' Looks up a localized string similar to Order By:. ''' @@ -1032,15 +1113,6 @@ Namespace My.Resources End Get End Property - ''' - ''' Looks up a localized string similar to Process:. - ''' - Friend ReadOnly Property frmFilter_lblProcess() As String - Get - Return ResourceManager.GetString("frmFilter_lblProcess", resourceCulture) - End Get - End Property - ''' ''' Looks up a localized string similar to Available Tags. ''' @@ -1104,42 +1176,6 @@ Namespace My.Resources End Get End Property - ''' - ''' Looks up a localized string similar to Company. - ''' - Friend ReadOnly Property frmFilter_SortCompany() As String - Get - Return ResourceManager.GetString("frmFilter_SortCompany", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized string similar to Time Played. - ''' - Friend ReadOnly Property frmFilter_SortHours() As String - Get - Return ResourceManager.GetString("frmFilter_SortHours", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized string similar to Name. - ''' - Friend ReadOnly Property frmFilter_SortName() As String - Get - Return ResourceManager.GetString("frmFilter_SortName", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized string similar to Process. - ''' - Friend ReadOnly Property frmFilter_SortProcess() As String - Get - Return ResourceManager.GetString("frmFilter_SortProcess", resourceCulture) - End Get - End Property - ''' ''' Looks up a localized string similar to [PARAM] ([PARAM]). ''' diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index ca92904..67376ae 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -895,18 +895,9 @@ Custom Filter - - Company: - Current Filter - - Name: - - - Process: - Available Tags @@ -1813,16 +1804,37 @@ Descending - + Company - - Time Played + + Hours - + Name - + Process + + Add + + + Remove + + + Parameter + + + Version + + + Current Filters + + + Available Fields + + + Filter + \ No newline at end of file