From 6e2298df49220780489068432cbc32b85fc86695 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 5 Aug 2017 12:49:10 -0600 Subject: [PATCH] Custom Filter Enhancement Final Phase --- GBM/Classes/clsGame.vb | 8 + GBM/Classes/clsGameFilter.vb | 81 ++++++ GBM/Classes/clsGameFilterField.vb | 77 +++++ GBM/Forms/frmFilter.Designer.vb | 247 ++++++++++------ GBM/Forms/frmFilter.vb | 410 +++++++++++++++++++++------ GBM/Forms/frmGameManager.vb | 9 +- GBM/Forms/frmSyncFields.vb | 24 +- GBM/Game Backup Monitor.vbproj | 2 + GBM/Managers/mgrCommon.vb | 8 - GBM/Managers/mgrMonitorList.vb | 29 +- GBM/My Project/AssemblyInfo.vb | 4 +- GBM/My Project/Resources.Designer.vb | 156 +++++++++- GBM/My Project/Resources.resx | 58 +++- 13 files changed, 898 insertions(+), 215 deletions(-) create mode 100644 GBM/Classes/clsGameFilter.vb create mode 100644 GBM/Classes/clsGameFilterField.vb diff --git a/GBM/Classes/clsGame.vb b/GBM/Classes/clsGame.vb index 5340ebe..fb7ce2e 100644 --- a/GBM/Classes/clsGame.vb +++ b/GBM/Classes/clsGame.vb @@ -406,4 +406,12 @@ Public Class clsGame Return sProcessName End Function + Public Shared Function SetSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields + Return eSyncFields Or eSyncField + End Function + + Public Shared Function RemoveSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields + Return eSyncFields And (Not eSyncField) + End Function + End Class diff --git a/GBM/Classes/clsGameFilter.vb b/GBM/Classes/clsGameFilter.vb new file mode 100644 index 0000000..e6c2f24 --- /dev/null +++ b/GBM/Classes/clsGameFilter.vb @@ -0,0 +1,81 @@ +Public Class clsGameFilter + + Private sID As String + Private oField As clsGameFilterField + Private oData As Object + Private eNumericOperator As eNumericOperators = eNumericOperators.Equals + Private bNextBoolOperator As Boolean + + Public Enum eNumericOperators + Equals = 1 + Greater = 2 + Lesser = 3 + GreaterEquals = 4 + LesserEquals = 5 + End Enum + + Public Property ID As String + Get + Return sID + End Get + Set(value As String) + sID = value + End Set + End Property + + Public Property Field As clsGameFilterField + Get + Return oField + End Get + Set(value As clsGameFilterField) + oField = 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 NextBoolOperator As Boolean + Get + Return bNextBoolOperator + End Get + Set(value As Boolean) + bNextBoolOperator = value + End Set + End Property + + Public Property NumericOperator As eNumericOperators + Get + Return eNumericOperator + End Get + Set(value As eNumericOperators) + eNumericOperator = value + End Set + End Property + + Public ReadOnly Property NumericOperatorAsString As String + Get + Select Case eNumericOperator + Case eNumericOperators.Equals + Return "=" + Case eNumericOperators.Greater + Return ">" + Case eNumericOperators.GreaterEquals + Return ">=" + Case eNumericOperators.Lesser + Return "<" + Case eNumericOperators.LesserEquals + Return "<=" + Case Else + Return String.Empty + End Select + End Get + End Property + +End Class diff --git a/GBM/Classes/clsGameFilterField.vb b/GBM/Classes/clsGameFilterField.vb new file mode 100644 index 0000000..7e97302 --- /dev/null +++ b/GBM/Classes/clsGameFilterField.vb @@ -0,0 +1,77 @@ +Public Class clsGameFilterField + + Public Enum eDataType As Integer + fString = 1 + fNumeric = 2 + fBool = 3 + End Enum + + Public Enum eFieldStatus + None = 0 + ValidFilter = 1 + ValidSort = 2 + End Enum + + Private sFieldName As String + Private sFriendlyFieldName As String + Private eType As eDataType + Private eStatus As eFieldStatus + + Public Property FieldName As String + Get + Return sFieldName + End Get + Set(value As String) + sFieldName = value + End Set + End Property + + Public Property FriendlyFieldName As String + Get + Return sFriendlyFieldName + End Get + Set(value As String) + sFriendlyFieldName = value + End Set + End Property + + Public Property Type As eDataType + Get + Return eType + End Get + Set(value As eDataType) + eType = value + End Set + End Property + + 'This is a flag property - Setting a value will toggle that flag on and off. + Public Property Status As eFieldStatus + Get + Return eStatus + End Get + Set(value As eFieldStatus) + If (eStatus And value) = value Then + eStatus = RemoveFieldStatus(value) + Else + eStatus = SetFieldStatus(value) + End If + End Set + End Property + + Private Function SetFieldStatus(ByVal eFlag As eFieldStatus) As eFieldStatus + Return eStatus Or eFlag + End Function + + Private Function RemoveFieldStatus(ByVal eFlag As eFieldStatus) As eFieldStatus + Return eStatus And (Not eFlag) + End Function + + Public Function CheckStatus(ByVal eFlag As eFieldStatus) As Boolean + If (eStatus And eFlag) = eFlag Then + Return True + Else + Return False + End If + End Function + +End Class diff --git a/GBM/Forms/frmFilter.Designer.vb b/GBM/Forms/frmFilter.Designer.vb index c376553..7de0d3f 100644 --- a/GBM/Forms/frmFilter.Designer.vb +++ b/GBM/Forms/frmFilter.Designer.vb @@ -34,29 +34,36 @@ Partial Class frmFilter Me.lstTags = New System.Windows.Forms.ListBox() Me.btnOK = New System.Windows.Forms.Button() Me.grpGameFilter = New System.Windows.Forms.GroupBox() + Me.cboBoolFilter = New System.Windows.Forms.ComboBox() + Me.numFilter = New System.Windows.Forms.NumericUpDown() + Me.cboNumericOps = New System.Windows.Forms.ComboBox() + Me.lblCurrentFilters = New System.Windows.Forms.Label() + Me.lblFilterData = New System.Windows.Forms.Label() + Me.lblFields = New System.Windows.Forms.Label() 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.grpNextFilterOperator = New System.Windows.Forms.GroupBox() Me.optOr = New System.Windows.Forms.RadioButton() Me.optAnd = New System.Windows.Forms.RadioButton() - Me.txtFilterData = New System.Windows.Forms.TextBox() + Me.txtStringFilter = New System.Windows.Forms.TextBox() Me.grpSorting = New System.Windows.Forms.GroupBox() - Me.optSortDesc = New System.Windows.Forms.RadioButton() + Me.grpSortOptions = New System.Windows.Forms.GroupBox() Me.optSortAsc = New System.Windows.Forms.RadioButton() + Me.optSortDesc = New System.Windows.Forms.RadioButton() + Me.lblSortFields = New System.Windows.Forms.Label() 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.lblFields = New System.Windows.Forms.Label() - Me.lblFilterData = New System.Windows.Forms.Label() - Me.lblCurrentFilters = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() Me.grpTagFilter.SuspendLayout() Me.grpTagOptions.SuspendLayout() Me.grpGameFilter.SuspendLayout() - Me.grpGameInfoOptions.SuspendLayout() + CType(Me.numFilter, System.ComponentModel.ISupportInitialize).BeginInit() + Me.grpNextFilterOperator.SuspendLayout() Me.grpSorting.SuspendLayout() + Me.grpSortOptions.SuspendLayout() Me.SuspendLayout() ' 'grpTagFilter @@ -68,7 +75,7 @@ Partial Class frmFilter Me.grpTagFilter.Controls.Add(Me.btnAdd) Me.grpTagFilter.Controls.Add(Me.lstTagFilter) Me.grpTagFilter.Controls.Add(Me.lstTags) - Me.grpTagFilter.Location = New System.Drawing.Point(12, 253) + Me.grpTagFilter.Location = New System.Drawing.Point(12, 236) Me.grpTagFilter.Name = "grpTagFilter" Me.grpTagFilter.Size = New System.Drawing.Size(385, 198) Me.grpTagFilter.TabIndex = 3 @@ -167,12 +174,15 @@ Partial Class frmFilter 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 + Me.btnOK.TabIndex = 6 Me.btnOK.Text = "&OK" Me.btnOK.UseVisualStyleBackColor = True ' 'grpGameFilter ' + Me.grpGameFilter.Controls.Add(Me.cboBoolFilter) + Me.grpGameFilter.Controls.Add(Me.numFilter) + Me.grpGameFilter.Controls.Add(Me.cboNumericOps) Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters) Me.grpGameFilter.Controls.Add(Me.lblFilterData) Me.grpGameFilter.Controls.Add(Me.lblFields) @@ -180,20 +190,74 @@ Partial Class frmFilter 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.txtFilterData) + Me.grpGameFilter.Controls.Add(Me.grpNextFilterOperator) + Me.grpGameFilter.Controls.Add(Me.txtStringFilter) Me.grpGameFilter.Location = New System.Drawing.Point(12, 35) Me.grpGameFilter.Name = "grpGameFilter" - Me.grpGameFilter.Size = New System.Drawing.Size(385, 189) + Me.grpGameFilter.Size = New System.Drawing.Size(385, 172) Me.grpGameFilter.TabIndex = 1 Me.grpGameFilter.TabStop = False ' + 'cboBoolFilter + ' + Me.cboBoolFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboBoolFilter.FormattingEnabled = True + Me.cboBoolFilter.Location = New System.Drawing.Point(162, 36) + Me.cboBoolFilter.Name = "cboBoolFilter" + Me.cboBoolFilter.Size = New System.Drawing.Size(136, 21) + Me.cboBoolFilter.TabIndex = 3 + ' + 'numFilter + ' + Me.numFilter.DecimalPlaces = 1 + Me.numFilter.Location = New System.Drawing.Point(233, 37) + Me.numFilter.Maximum = New Decimal(New Integer() {1000000, 0, 0, 0}) + Me.numFilter.Name = "numFilter" + Me.numFilter.Size = New System.Drawing.Size(65, 20) + Me.numFilter.TabIndex = 4 + ' + 'cboNumericOps + ' + Me.cboNumericOps.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboNumericOps.FormattingEnabled = True + Me.cboNumericOps.Location = New System.Drawing.Point(162, 36) + Me.cboNumericOps.Name = "cboNumericOps" + Me.cboNumericOps.Size = New System.Drawing.Size(65, 21) + Me.cboNumericOps.TabIndex = 3 + ' + '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 = 6 + Me.lblCurrentFilters.Text = "Current Filters" + ' + 'lblFilterData + ' + Me.lblFilterData.AutoSize = True + Me.lblFilterData.Location = New System.Drawing.Point(214, 20) + Me.lblFilterData.Name = "lblFilterData" + Me.lblFilterData.Size = New System.Drawing.Size(32, 13) + Me.lblFilterData.TabIndex = 2 + Me.lblFilterData.Text = "Filter " + ' + 'lblFields + ' + Me.lblFields.AutoSize = True + Me.lblFields.Location = New System.Drawing.Point(41, 20) + Me.lblFields.Name = "lblFields" + Me.lblFields.Size = New System.Drawing.Size(80, 13) + Me.lblFields.TabIndex = 0 + Me.lblFields.Text = "Available Fields" + ' 'btnRemoveFilter ' - Me.btnRemoveFilter.Location = New System.Drawing.Point(259, 153) + Me.btnRemoveFilter.Location = New System.Drawing.Point(259, 140) Me.btnRemoveFilter.Name = "btnRemoveFilter" Me.btnRemoveFilter.Size = New System.Drawing.Size(75, 23) - Me.btnRemoveFilter.TabIndex = 8 + Me.btnRemoveFilter.TabIndex = 9 Me.btnRemoveFilter.Text = "Remove" Me.btnRemoveFilter.UseVisualStyleBackColor = True ' @@ -202,15 +266,15 @@ Partial Class frmFilter 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 + Me.lstFilter.Size = New System.Drawing.Size(247, 82) + Me.lstFilter.TabIndex = 7 ' '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.TabIndex = 5 Me.btnAddFilter.Text = "Add" Me.btnAddFilter.UseVisualStyleBackColor = True ' @@ -220,19 +284,19 @@ Partial Class frmFilter 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.Size = New System.Drawing.Size(150, 21) Me.cboFilterField.TabIndex = 1 ' - 'grpGameInfoOptions + 'grpNextFilterOperator ' - Me.grpGameInfoOptions.Controls.Add(Me.optOr) - Me.grpGameInfoOptions.Controls.Add(Me.optAnd) - 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 = 7 - Me.grpGameInfoOptions.TabStop = False - Me.grpGameInfoOptions.Text = "Options" + Me.grpNextFilterOperator.Controls.Add(Me.optOr) + Me.grpNextFilterOperator.Controls.Add(Me.optAnd) + Me.grpNextFilterOperator.Location = New System.Drawing.Point(259, 81) + Me.grpNextFilterOperator.Name = "grpNextFilterOperator" + Me.grpNextFilterOperator.Size = New System.Drawing.Size(106, 46) + Me.grpNextFilterOperator.TabIndex = 8 + Me.grpNextFilterOperator.TabStop = False + Me.grpNextFilterOperator.Text = "Next Filter" ' 'optOr ' @@ -255,70 +319,80 @@ Partial Class frmFilter Me.optAnd.Text = "And" Me.optAnd.UseVisualStyleBackColor = True ' - 'txtFilterData + 'txtStringFilter ' - 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 + Me.txtStringFilter.Location = New System.Drawing.Point(162, 36) + Me.txtStringFilter.Name = "txtStringFilter" + Me.txtStringFilter.Size = New System.Drawing.Size(136, 20) + Me.txtStringFilter.TabIndex = 3 ' 'grpSorting ' - Me.grpSorting.Controls.Add(Me.optSortDesc) - Me.grpSorting.Controls.Add(Me.optSortAsc) + Me.grpSorting.Controls.Add(Me.grpSortOptions) + Me.grpSorting.Controls.Add(Me.lblSortFields) Me.grpSorting.Controls.Add(Me.cboSortField) - Me.grpSorting.Controls.Add(Me.lblOrderBy) - Me.grpSorting.Location = New System.Drawing.Point(12, 457) + Me.grpSorting.Location = New System.Drawing.Point(12, 440) Me.grpSorting.Name = "grpSorting" - Me.grpSorting.Size = New System.Drawing.Size(385, 61) + Me.grpSorting.Size = New System.Drawing.Size(385, 80) Me.grpSorting.TabIndex = 4 Me.grpSorting.TabStop = False Me.grpSorting.Text = "Sorting" ' - 'optSortDesc + 'grpSortOptions ' - Me.optSortDesc.AutoSize = True - 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 - Me.optSortDesc.TabStop = True - Me.optSortDesc.Text = "Descending" - Me.optSortDesc.UseVisualStyleBackColor = True + Me.grpSortOptions.Controls.Add(Me.optSortAsc) + Me.grpSortOptions.Controls.Add(Me.optSortDesc) + Me.grpSortOptions.Location = New System.Drawing.Point(162, 19) + Me.grpSortOptions.Name = "grpSortOptions" + Me.grpSortOptions.Size = New System.Drawing.Size(189, 43) + Me.grpSortOptions.TabIndex = 3 + Me.grpSortOptions.TabStop = False + Me.grpSortOptions.Text = "Sort Options" ' 'optSortAsc ' Me.optSortAsc.AutoSize = True - Me.optSortAsc.Location = New System.Drawing.Point(190, 26) + Me.optSortAsc.Location = New System.Drawing.Point(6, 17) Me.optSortAsc.Name = "optSortAsc" Me.optSortAsc.Size = New System.Drawing.Size(75, 17) - Me.optSortAsc.TabIndex = 2 + Me.optSortAsc.TabIndex = 0 Me.optSortAsc.TabStop = True Me.optSortAsc.Text = "Ascending" Me.optSortAsc.UseVisualStyleBackColor = True ' + 'optSortDesc + ' + Me.optSortDesc.AutoSize = True + Me.optSortDesc.Location = New System.Drawing.Point(90, 17) + Me.optSortDesc.Name = "optSortDesc" + Me.optSortDesc.Size = New System.Drawing.Size(82, 17) + Me.optSortDesc.TabIndex = 1 + Me.optSortDesc.TabStop = True + Me.optSortDesc.Text = "Descending" + Me.optSortDesc.UseVisualStyleBackColor = True + ' + 'lblSortFields + ' + Me.lblSortFields.AutoSize = True + Me.lblSortFields.Location = New System.Drawing.Point(41, 19) + Me.lblSortFields.Name = "lblSortFields" + Me.lblSortFields.Size = New System.Drawing.Size(80, 13) + Me.lblSortFields.TabIndex = 1 + Me.lblSortFields.Text = "Available Fields" + ' 'cboSortField ' Me.cboSortField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList Me.cboSortField.FormattingEnabled = True - Me.cboSortField.Location = New System.Drawing.Point(63, 25) + Me.cboSortField.Location = New System.Drawing.Point(6, 35) Me.cboSortField.Name = "cboSortField" - Me.cboSortField.Size = New System.Drawing.Size(121, 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:" + Me.cboSortField.Size = New System.Drawing.Size(150, 21) + Me.cboSortField.TabIndex = 2 ' 'chkTag ' Me.chkTag.AutoSize = True - Me.chkTag.Location = New System.Drawing.Point(12, 230) + Me.chkTag.Location = New System.Drawing.Point(12, 213) Me.chkTag.Name = "chkTag" Me.chkTag.Size = New System.Drawing.Size(45, 17) Me.chkTag.TabIndex = 2 @@ -335,38 +409,21 @@ Partial Class frmFilter Me.chkGameInfo.Text = "Game Information" Me.chkGameInfo.UseVisualStyleBackColor = True ' - 'lblFields + 'Label1 ' - 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" + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 531) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(249, 13) + Me.Label1.TabIndex = 5 + Me.Label1.Text = "* Indicates a field that may give unexpected results." ' '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, 561) + Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.grpSorting) Me.Controls.Add(Me.chkTag) Me.Controls.Add(Me.grpGameFilter) @@ -385,9 +442,12 @@ Partial Class frmFilter Me.grpTagOptions.ResumeLayout(False) Me.grpGameFilter.ResumeLayout(False) Me.grpGameFilter.PerformLayout() - Me.grpGameInfoOptions.ResumeLayout(False) + CType(Me.numFilter, System.ComponentModel.ISupportInitialize).EndInit() + Me.grpNextFilterOperator.ResumeLayout(False) Me.grpSorting.ResumeLayout(False) Me.grpSorting.PerformLayout() + Me.grpSortOptions.ResumeLayout(False) + Me.grpSortOptions.PerformLayout() Me.ResumeLayout(False) Me.PerformLayout() @@ -404,15 +464,14 @@ Partial Class frmFilter 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 txtFilterData As System.Windows.Forms.TextBox - Friend WithEvents grpGameInfoOptions As System.Windows.Forms.GroupBox + Friend WithEvents txtStringFilter As System.Windows.Forms.TextBox + Friend WithEvents grpNextFilterOperator As System.Windows.Forms.GroupBox Friend WithEvents optOr As System.Windows.Forms.RadioButton Friend WithEvents optAnd As System.Windows.Forms.RadioButton Friend WithEvents grpSorting As GroupBox Friend WithEvents optSortDesc As RadioButton 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 Friend WithEvents cboFilterField As ComboBox @@ -422,4 +481,10 @@ Partial Class frmFilter Friend WithEvents lblCurrentFilters As Label Friend WithEvents lblFilterData As Label Friend WithEvents lblFields As Label + Friend WithEvents cboNumericOps As ComboBox + Friend WithEvents numFilter As NumericUpDown + Friend WithEvents cboBoolFilter As ComboBox + Friend WithEvents lblSortFields As Label + Friend WithEvents Label1 As Label + Friend WithEvents grpSortOptions As GroupBox End Class diff --git a/GBM/Forms/frmFilter.vb b/GBM/Forms/frmFilter.vb index 8515505..d2bd274 100644 --- a/GBM/Forms/frmFilter.vb +++ b/GBM/Forms/frmFilter.vb @@ -9,53 +9,9 @@ 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 oGameFilters As New List(Of clsFilter) + Dim oGameFilters As New List(Of clsGameFilter) + Dim oValidFields As New List(Of clsGameFilterField) Dim eCurrentFilterType As eFilterType = eFilterType.BaseFilter Dim bSortAsc As Boolean = True Dim sSortField As String = "Name" @@ -63,34 +19,49 @@ Public Class frmFilter Dim bShutdown As Boolean = False Dim iParameterIndex As Integer = 0 - Public ReadOnly Property GameFilters As List(Of clsFilter) + Public Property GameFilters As List(Of clsGameFilter) Get Return oGameFilters End Get + Set(value As List(Of clsGameFilter)) + oGameFilters = value + End Set End Property - Public ReadOnly Property TagFilters As List(Of clsTag) + Public Property TagFilters As List(Of clsTag) Get Return oTagFilters End Get + Set(value As List(Of clsTag)) + oTagFilters = value + End Set End Property - Public ReadOnly Property FilterType As eFilterType + Public Property FilterType As eFilterType Get Return eCurrentFilterType End Get + Set(value As eFilterType) + eCurrentFilterType = value + End Set End Property - Public ReadOnly Property SortAsc As Boolean + Public Property SortAsc As Boolean Get Return bSortAsc End Get + Set(value As Boolean) + bSortAsc = value + End Set End Property - Public ReadOnly Property SortField As String + Public Property SortField As String Get Return sSortField End Get + Set(value As String) + sSortField = value + End Set End Property Private Sub AddTag() @@ -139,7 +110,154 @@ Public Class frmFilter End Sub - Private Sub LoadData() + Private Sub LoadFilterFields() + Dim oField As clsGameFilterField + + 'Name + oField = New clsGameFilterField + oField.FieldName = "Name" + oField.FriendlyFieldName = frmFilter_FieldName + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidSort + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Process + oField = New clsGameFilterField + oField.FieldName = "Process" + oField.FriendlyFieldName = frmFilter_FieldProcess + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidSort + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Parameter + oField = New clsGameFilterField + oField.FieldName = "Parameter" + oField.FriendlyFieldName = frmFilter_FieldParameter + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidSort + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Save Path + oField = New clsGameFilterField + oField.FieldName = "Path" + oField.FriendlyFieldName = frmFilter_FieldPath + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Include Items + oField = New clsGameFilterField + oField.FieldName = "FileType" + oField.FriendlyFieldName = frmFilter_FieldFileType + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Exclude Items + oField = New clsGameFilterField + oField.FieldName = "ExcludeList" + oField.FriendlyFieldName = frmFilter_FieldExcludeList + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Save Entire Folder + oField = New clsGameFilterField + oField.FieldName = "FolderSave" + oField.FriendlyFieldName = frmFilter_FieldFolderSave + oField.Type = clsGameFilterField.eDataType.fBool + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Delete Folder on Restore + oField = New clsGameFilterField + oField.FieldName = "CleanFolder" + oField.FriendlyFieldName = frmFilter_FieldCleanFolder + oField.Type = clsGameFilterField.eDataType.fBool + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Save Multiple Backups + oField = New clsGameFilterField + oField.FieldName = "TimeStamp" + oField.FriendlyFieldName = frmFilter_FieldTimeStamp + oField.Type = clsGameFilterField.eDataType.fBool + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Backup Limit + oField = New clsGameFilterField + oField.FieldName = "BackupLimit" + oField.FriendlyFieldName = frmFilter_FieldBackupLimit + oField.Type = clsGameFilterField.eDataType.fNumeric + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Game Path + oField = New clsGameFilterField + oField.FieldName = "ProcessPath" + oField.FriendlyFieldName = frmFilter_FieldProcessPath + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Company + oField = New clsGameFilterField + oField.FieldName = "Company" + oField.FriendlyFieldName = frmFilter_FieldCompany + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidSort + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Version + oField = New clsGameFilterField + oField.FieldName = "Version" + oField.FriendlyFieldName = frmFilter_FieldVersion + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidSort + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Icon + oField = New clsGameFilterField + oField.FieldName = "Icon" + oField.FriendlyFieldName = frmFilter_FieldIcon + oField.Type = clsGameFilterField.eDataType.fString + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Hours + oField = New clsGameFilterField + oField.FieldName = "Hours" + oField.FriendlyFieldName = frmFilter_FieldHours + oField.Type = clsGameFilterField.eDataType.fNumeric + oField.Status = clsGameFilterField.eFieldStatus.ValidSort + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Enabled + oField = New clsGameFilterField + oField.FieldName = "Enabled" + oField.FriendlyFieldName = frmFilter_FieldEnabled + oField.Type = clsGameFilterField.eDataType.fBool + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + 'Monitor Only + oField = New clsGameFilterField + oField.FieldName = "MonitorOnly" + oField.FriendlyFieldName = frmFilter_FieldMonitorOnly + oField.Type = clsGameFilterField.eDataType.fBool + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + + End Sub + + Private Sub LoadTagData() Dim oTag As clsTag Dim oData As KeyValuePair(Of String, String) @@ -152,6 +270,7 @@ Public Class frmFilter lstTags.ValueMember = "Key" lstTags.DisplayMember = "Value" + lstTagFilter.ValueMember = "Key" lstTagFilter.DisplayMember = "Value" @@ -163,30 +282,121 @@ Public Class frmFilter End Sub - Private Sub AddFilter() - Dim oFilter As New clsFilter - Dim sFilter As String + Private Sub LoadExistingFilters() + Dim sFilter As String = String.Empty + Dim oListTag As KeyValuePair(Of String, String) - lstFilter.ValueMember = "Key" - lstFilter.DisplayMember = "Value" + 'Game Filters + If oGameFilters.Count > 0 Then + chkGameInfo.Checked = True + For Each oFilter As clsGameFilter In oGameFilters + Select Case oFilter.Field.Type + Case clsGameFilterField.eDataType.fString + sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """ / " + Case clsGameFilterField.eDataType.fNumeric + oFilter.NumericOperator = DirectCast(cboNumericOps.SelectedValue, clsGameFilter.eNumericOperators) + sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data & " / " + Case clsGameFilterField.eDataType.fBool + sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data & " / " + End Select + + If oFilter.NextBoolOperator Then + sFilter &= frmFilter_optAnd + Else + sFilter &= frmFilter_optOr + End If + + iParameterIndex += 1 + + lstFilter.Items.Add(New KeyValuePair(Of clsGameFilter, String)(oFilter, sFilter)) + Next + End If + + 'Tag Filters + If oTagFilters.Count > 0 Then + chkTag.Checked = True + For Each oTag As clsTag In oTagFilters + oListTag = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name) + lstTagFilter.Items.Add(oListTag) + lstTags.Items.Remove(oListTag) + Next + + If eCurrentFilterType = eFilterType.AllTags Then + optAll.Checked = True + Else + optAny.Checked = True + End If + End If + + 'Sorting + cboSortField.SelectedValue = sSortField + If bSortAsc Then + optSortAsc.Checked = True + Else + optSortDesc.Checked = True + End If + + End Sub + + Private Sub ChangeFilterMode() + Dim oFilterType As clsGameFilterField.eDataType = DirectCast(cboFilterField.SelectedValue, clsGameFilterField).Type + + 'Reset + cboNumericOps.SelectedIndex = 0 + cboBoolFilter.SelectedIndex = 0 + numFilter.Value = 0 + txtStringFilter.Text = String.Empty + + 'Reset Visibilty + cboBoolFilter.Visible = False + cboNumericOps.Visible = False + numFilter.Visible = False + txtStringFilter.Visible = False + + 'Set Visiblity + Select Case oFilterType + Case clsGameFilterField.eDataType.fString + txtStringFilter.Visible = True + Case clsGameFilterField.eDataType.fNumeric + cboNumericOps.Visible = True + numFilter.Visible = True + txtStringFilter.Visible = False + Case clsGameFilterField.eDataType.fBool + cboBoolFilter.Visible = True + End Select + + End Sub + + Private Sub AddFilter() + Dim oFilter As New clsGameFilter + Dim sFilter As String = String.Empty 'Build Filter oFilter.ID = "PARAM" & iParameterIndex oFilter.Field = cboFilterField.SelectedValue - oFilter.Data = txtFilterData.Text - oFilter.AndOperator = optAnd.Checked + oFilter.NextBoolOperator = optAnd.Checked - oGameFilters.Add(oFilter) + Select Case oFilter.Field.Type + Case clsGameFilterField.eDataType.fString + oFilter.Data = txtStringFilter.Text + sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """ / " + Case clsGameFilterField.eDataType.fNumeric + oFilter.Data = numFilter.Value + oFilter.NumericOperator = DirectCast(cboNumericOps.SelectedValue, clsGameFilter.eNumericOperators) + sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data & " / " + Case clsGameFilterField.eDataType.fBool + oFilter.Data = cboBoolFilter.SelectedValue + sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data & " / " + End Select - 'Build String - sFilter = oFilter.Field & " / " & oFilter.Data & " / " - If oFilter.AndOperator Then + If oFilter.NextBoolOperator Then sFilter &= frmFilter_optAnd Else sFilter &= frmFilter_optOr End If - lstFilter.Items.Add(New KeyValuePair(Of clsFilter, String)(oFilter, sFilter)) + oGameFilters.Add(oFilter) + lstFilter.Items.Add(New KeyValuePair(Of clsGameFilter, String)(oFilter, sFilter)) iParameterIndex += 1 End Sub @@ -196,7 +406,7 @@ Public Class frmFilter If lstFilter.SelectedIndex <> -1 Then oFilter = lstFilter.SelectedItem - oGameFilters.Remove(DirectCast(oFilter, KeyValuePair(Of clsFilter, String)).Key) + oGameFilters.Remove(DirectCast(oFilter, KeyValuePair(Of clsGameFilter, String)).Key) lstFilter.Items.Remove(oFilter) End If @@ -214,6 +424,7 @@ Public Class frmFilter If chkTag.Checked Then 'Set Tags + TagFilters.Clear() For Each oData In lstTagFilter.Items oTag = DirectCast(hshTags(oData.Value), clsTag) TagFilters.Add(oTag) @@ -241,18 +452,41 @@ Public Class frmFilter End Sub Private Sub LoadCombos() - Dim oFilterFields As New List(Of KeyValuePair(Of String, String)) + Dim oFilterFields As New List(Of KeyValuePair(Of clsGameFilterField, String)) Dim oSortFields As New List(Of KeyValuePair(Of String, String)) + Dim oNumericOperators As New List(Of KeyValuePair(Of clsGameFilter.eNumericOperators, String)) + Dim oBoolOperators As New List(Of KeyValuePair(Of Boolean, String)) + + 'cboBoolFilter + cboBoolFilter.ValueMember = "Key" + cboBoolFilter.DisplayMember = "Value" + + oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(True, frmFilter_cboBoolFilterEnabled)) + oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(False, frmFilter_cboBoolFilterDisabled)) + + cboBoolFilter.DataSource = oBoolOperators + + 'cboNumericOps + cboNumericOps.ValueMember = "Key" + cboNumericOps.DisplayMember = "Value" + + oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.Equals, "=")) + oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.Greater, ">")) + oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.Lesser, "<")) + oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.GreaterEquals, ">=")) + oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.LesserEquals, "<=")) + + cboNumericOps.DataSource = oNumericOperators '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)) + For Each oField As clsGameFilterField In oValidFields + If oField.CheckStatus(clsGameFilterField.eFieldStatus.ValidFilter) Then + oFilterFields.Add(New KeyValuePair(Of clsGameFilterField, String)(oField, oField.FriendlyFieldName)) + End If + Next cboFilterField.DataSource = oFilterFields @@ -260,16 +494,16 @@ Public Class frmFilter cboSortField.ValueMember = "Key" cboSortField.DisplayMember = "Value" - 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)) + For Each oField As clsGameFilterField In oValidFields + If oField.CheckStatus(clsGameFilterField.eFieldStatus.ValidSort) Then + oSortFields.Add(New KeyValuePair(Of String, String)(oField.FieldName, oField.FriendlyFieldName)) + End If + Next cboSortField.DataSource = oSortFields 'Select Defaults + cboNumericOps.SelectedIndex = 0 cboFilterField.SelectedIndex = 0 cboSortField.SelectedIndex = 0 End Sub @@ -281,7 +515,7 @@ Public Class frmFilter 'Set Form Text optOr.Text = frmFilter_optOr optAnd.Text = frmFilter_optAnd - grpGameInfoOptions.Text = frmFilter_grpGameInfoOptions + grpNextFilterOperator.Text = frmFilter_grpNextFilterOperator optAll.Text = frmFilter_optAll optAny.Text = frmFilter_optAny lblGameTags.Text = frmFilter_lblGameTags @@ -293,7 +527,7 @@ Public Class frmFilter chkTag.Text = frmFilter_chkTag chkGameInfo.Text = frmFilter_chkGameInfo grpSorting.Text = frmFilter_grpSorting - lblOrderBy.Text = frmFilter_lblOrderBy + lblSortFields.Text = frmFilter_lblSortsFields optSortAsc.Text = frmFilter_optSortAsc optSortDesc.Text = frmFilter_optSortDesc btnAddFilter.Text = frmFilter_btnAddFilter @@ -301,17 +535,24 @@ Public Class frmFilter lblCurrentFilters.Text = frmFilter_lblCurrentFilters lblFields.Text = frmFilter_lblFields lblFilterData.Text = frmFilter_lblFilterData + grpSortOptions.Text = frmFilter_grpSortOptions 'Defaults optSortAsc.Checked = True grpGameFilter.Enabled = False grpTagFilter.Enabled = False + + 'Init Game Filter + lstFilter.ValueMember = "Key" + lstFilter.DisplayMember = "Value" End Sub Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load SetForm() + LoadFilterFields() LoadCombos() - LoadData() + LoadTagData() + LoadExistingFilters() End Sub Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click @@ -339,6 +580,8 @@ Public Class frmFilter grpGameFilter.Enabled = True Else grpGameFilter.Enabled = False + oGameFilters.Clear() + lstFilter.Items.Clear() End If End Sub @@ -347,6 +590,8 @@ Public Class frmFilter grpTagFilter.Enabled = True Else grpTagFilter.Enabled = False + oTagFilters.Clear() + LoadTagData() End If End Sub @@ -357,4 +602,9 @@ Public Class frmFilter Private Sub btnRemoveFilter_Click(sender As Object, e As EventArgs) Handles btnRemoveFilter.Click RemoveFilter() End Sub + + Private Sub cboFilterField_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFilterField.SelectedIndexChanged + ChangeFilterMode() + End Sub + End Class \ No newline at end of file diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 7195522..ae4d61a 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 oCurrentFilters As New List(Of frmFilter.clsFilter) + Private oCurrentFilters As New List(Of clsGameFilter) Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter Private bCurrentSortAsc As Boolean = True Private sCurrentSortField As String = "Name" @@ -225,7 +225,14 @@ Public Class frmGameManager If optCustom.Checked Then If Not bRetainFilter Then frm = New frmFilter + frm.TagFilters = oCurrentTagFilters + frm.GameFilters = oCurrentFilters + frm.FilterType = eCurrentFilter + frm.SortAsc = bCurrentSortAsc + frm.SortField = sCurrentSortField + frm.ShowDialog() + oCurrentTagFilters = frm.TagFilters oCurrentFilters = frm.GameFilters eCurrentFilter = frm.FilterType diff --git a/GBM/Forms/frmSyncFields.vb b/GBM/Forms/frmSyncFields.vb index 7200cc9..cea9a57 100644 --- a/GBM/Forms/frmSyncFields.vb +++ b/GBM/Forms/frmSyncFields.vb @@ -67,49 +67,49 @@ Public Class frmSyncFields Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged If chkTimeStamp.Checked Then - SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp) + SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp) Else - SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp) + SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp) End If End Sub Private Sub chkGamePath_CheckedChanged(sender As Object, e As EventArgs) Handles chkGamePath.CheckedChanged If chkGamePath.Checked Then - SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath) + SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath) Else - SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath) + SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath) End If End Sub Private Sub chkCompany_CheckedChanged(sender As Object, e As EventArgs) Handles chkCompany.CheckedChanged If chkCompany.Checked Then - SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company) + SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company) Else - SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company) + SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company) End If End Sub Private Sub chkVersion_CheckedChanged(sender As Object, e As EventArgs) Handles chkVersion.CheckedChanged If chkVersion.Checked Then - SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version) + SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version) Else - SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version) + SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version) End If End Sub Private Sub chkIcon_CheckedChanged(sender As Object, e As EventArgs) Handles chkIcon.CheckedChanged If chkIcon.Checked Then - SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon) + SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon) Else - SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon) + SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon) End If End Sub Private Sub chkMonitorGame_CheckedChanged(sender As Object, e As EventArgs) Handles chkMonitorGame.CheckedChanged If chkMonitorGame.Checked Then - SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame) + SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame) Else - SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame) + SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame) End If End Sub End Class \ No newline at end of file diff --git a/GBM/Game Backup Monitor.vbproj b/GBM/Game Backup Monitor.vbproj index 0267ad9..d4826e5 100644 --- a/GBM/Game Backup Monitor.vbproj +++ b/GBM/Game Backup Monitor.vbproj @@ -122,6 +122,8 @@ + + diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index d5b1c5a..5b19883 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -237,14 +237,6 @@ Public Class mgrCommon oProcess.Start() End Sub - Public Shared Function SetSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields - Return eSyncFields Or eSyncField - End Function - - Public Shared Function RemoveSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields - Return eSyncFields And (Not eSyncField) - End Function - 'Get a file size Public Shared Function GetFileSize(ByVal sFile As String) As Long Dim oFileInfo As FileInfo diff --git a/GBM/Managers/mgrMonitorList.vb b/GBM/Managers/mgrMonitorList.vb index 5616839..890c053 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 oFilters As List(Of frmFilter.clsFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bSortAsc As Boolean, + Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of clsGameFilter), 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 @@ -540,7 +540,7 @@ Public Class mgrMonitorList sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags)" End Select - 'Handle String Filters + 'Handle Other Filters If oFilters.Count > 0 Then If eFilterType = frmFilter.eFilterType.BaseFilter Then sSQL &= " WHERE (" @@ -549,12 +549,22 @@ Public Class mgrMonitorList End If iCounter = 0 - For Each oFilter As frmFilter.clsFilter In oFilters - sSQL &= oFilter.Field & " LIKE @" & oFilter.ID - hshParams.Add(oFilter.ID, "%" & oFilter.Data & "%") + For Each oFilter As clsGameFilter In oFilters + Select Case oFilter.Field.Type + Case clsGameFilterField.eDataType.fString + sSQL &= oFilter.Field.FieldName & " LIKE @" & oFilter.ID + hshParams.Add(oFilter.ID, "%" & oFilter.Data & "%") + Case clsGameFilterField.eDataType.fNumeric + sSQL &= oFilter.Field.FieldName & " " & oFilter.NumericOperatorAsString & " @" & oFilter.ID + hshParams.Add(oFilter.ID, oFilter.Data) + Case clsGameFilterField.eDataType.fBool + sSQL &= oFilter.Field.FieldName & " = @" & oFilter.ID + hshParams.Add(oFilter.ID, oFilter.Data) + End Select + iCounter += 1 If iCounter <> oFilters.Count Then - If oFilter.AndOperator Then + If oFilter.NextBoolOperator Then sSQL &= " AND " Else sSQL &= " OR " @@ -567,12 +577,11 @@ Public Class mgrMonitorList 'Handle Sorting sSQL &= sSort - Return sSQL End Function - 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, + Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of clsGameFilter), 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 @@ -597,7 +606,7 @@ Public Class mgrMonitorList 'Import / Export Functions - 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, + Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of clsGameFilter), 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 @@ -700,7 +709,7 @@ Public Class mgrMonitorList Dim oList As List(Of Game) Dim bSuccess As Boolean = False Dim oTagFilters As New List(Of clsTag) - Dim oFilters As New List(Of frmFilter.clsFilter) + Dim oFilters As New List(Of clsGameFilter) Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter Dim bSortAsc As Boolean = True Dim sSortField As String = "Name" diff --git a/GBM/My Project/AssemblyInfo.vb b/GBM/My Project/AssemblyInfo.vb index f79cf5e..66ef53c 100644 --- a/GBM/My Project/AssemblyInfo.vb +++ b/GBM/My Project/AssemblyInfo.vb @@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + \ No newline at end of file diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index f2cb9a3..7e01667 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -960,6 +960,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Disabled. + ''' + Friend ReadOnly Property frmFilter_cboBoolFilterDisabled() As String + Get + Return ResourceManager.GetString("frmFilter_cboBoolFilterDisabled", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Enabled. + ''' + Friend ReadOnly Property frmFilter_cboBoolFilterEnabled() As String + Get + Return ResourceManager.GetString("frmFilter_cboBoolFilterEnabled", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Game Information. ''' @@ -978,6 +996,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Backup Limit *. + ''' + Friend ReadOnly Property frmFilter_FieldBackupLimit() As String + Get + Return ResourceManager.GetString("frmFilter_FieldBackupLimit", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Delete Folder on Restore. + ''' + Friend ReadOnly Property frmFilter_FieldCleanFolder() As String + Get + Return ResourceManager.GetString("frmFilter_FieldCleanFolder", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Company. ''' @@ -987,6 +1023,42 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Monitor Game. + ''' + Friend ReadOnly Property frmFilter_FieldEnabled() As String + Get + Return ResourceManager.GetString("frmFilter_FieldEnabled", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Exclude Items. + ''' + Friend ReadOnly Property frmFilter_FieldExcludeList() As String + Get + Return ResourceManager.GetString("frmFilter_FieldExcludeList", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Include Items. + ''' + Friend ReadOnly Property frmFilter_FieldFileType() As String + Get + Return ResourceManager.GetString("frmFilter_FieldFileType", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Save Entire Folder. + ''' + Friend ReadOnly Property frmFilter_FieldFolderSave() As String + Get + Return ResourceManager.GetString("frmFilter_FieldFolderSave", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Hours. ''' @@ -996,6 +1068,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Icon. + ''' + Friend ReadOnly Property frmFilter_FieldIcon() As String + Get + Return ResourceManager.GetString("frmFilter_FieldIcon", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Monitor Only. + ''' + Friend ReadOnly Property frmFilter_FieldMonitorOnly() As String + Get + Return ResourceManager.GetString("frmFilter_FieldMonitorOnly", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Name. ''' @@ -1014,6 +1104,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Save Path *. + ''' + Friend ReadOnly Property frmFilter_FieldPath() As String + Get + Return ResourceManager.GetString("frmFilter_FieldPath", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Process. ''' @@ -1023,6 +1122,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Game Path. + ''' + Friend ReadOnly Property frmFilter_FieldProcessPath() As String + Get + Return ResourceManager.GetString("frmFilter_FieldProcessPath", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Save Multiple Backups. + ''' + Friend ReadOnly Property frmFilter_FieldTimeStamp() As String + Get + Return ResourceManager.GetString("frmFilter_FieldTimeStamp", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Version. ''' @@ -1042,11 +1159,11 @@ Namespace My.Resources End Property ''' - ''' Looks up a localized string similar to Options. + ''' Looks up a localized string similar to Next Filter. ''' - Friend ReadOnly Property frmFilter_grpGameInfoOptions() As String + Friend ReadOnly Property frmFilter_grpNextFilterOperator() As String Get - Return ResourceManager.GetString("frmFilter_grpGameInfoOptions", resourceCulture) + Return ResourceManager.GetString("frmFilter_grpNextFilterOperator", resourceCulture) End Get End Property @@ -1059,6 +1176,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Sort Options. + ''' + Friend ReadOnly Property frmFilter_grpSortOptions() As String + Get + Return ResourceManager.GetString("frmFilter_grpSortOptions", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Options. ''' @@ -1105,11 +1231,11 @@ Namespace My.Resources End Property ''' - ''' Looks up a localized string similar to Order By:. + ''' Looks up a localized string similar to Available Fields. ''' - Friend ReadOnly Property frmFilter_lblOrderBy() As String + Friend ReadOnly Property frmFilter_lblSortsFields() As String Get - Return ResourceManager.GetString("frmFilter_lblOrderBy", resourceCulture) + Return ResourceManager.GetString("frmFilter_lblSortsFields", resourceCulture) End Get End Property @@ -1122,6 +1248,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to * Indicates a field that may give unexpected results.. + ''' + Friend ReadOnly Property frmFilter_lblWarning() As String + Get + Return ResourceManager.GetString("frmFilter_lblWarning", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to contains. + ''' + Friend ReadOnly Property frmFilter_lstFilterContains() As String + Get + Return ResourceManager.GetString("frmFilter_lstFilterContains", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to All Tags. ''' diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index 67376ae..1f1b3dc 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -1006,8 +1006,8 @@ Saved Game Explorer - - Options + + Next Filter Options @@ -1795,9 +1795,6 @@ Sorting - - Order By: - Ascending @@ -1837,4 +1834,55 @@ Filter + + Disabled + + + Enabled + + + Backup Limit * + + + Delete Folder on Restore + + + Monitor Game + + + Exclude Items + + + Include Items + + + Save Entire Folder + + + Icon + + + Monitor Only + + + Save Path * + + + Game Path + + + Save Multiple Backups + + + Available Fields + + + * Indicates a field that may give unexpected results. + + + contains + + + Sort Options + \ No newline at end of file