16 Commits

Author SHA1 Message Date
MikeMaximus
96eac6a100 Merge pull request #96 from MikeMaximus/v104
Merge v104 into master
2017-09-26 10:29:40 -06:00
MikeMaximus
af13d51557 Updates and tweaks for v104 release 2017-09-26 10:27:12 -06:00
Michael J. Seiferling
59748309ad Merge branch 'v104' of https://github.com/MikeMaximus/gbm into v104 2017-09-23 15:21:23 -06:00
Michael J. Seiferling
0f874ae74a Enhancement for issue #83 2017-09-23 15:20:53 -06:00
MikeMaximus
19de263050 Fixed another ui problem with issue #89 2017-08-11 10:36:18 -06:00
MikeMaximus
34a9159719 Fixed various problems caused by issue #89 2017-08-10 22:38:14 -06:00
MikeMaximus
f0bd3db4ad Revert "Disabled Monitor only restore for issue #89"
This reverts commit 0003ee1f11.
2017-08-10 22:22:20 -06:00
MikeMaximus
0003ee1f11 Disabled Monitor only restore for issue #89 2017-08-10 22:18:15 -06:00
MikeMaximus
a4fff6b900 Fixed missing control for issue #89 2017-08-10 22:13:27 -06:00
MikeMaximus
e3bfc6adb1 Changes for issue #89 2017-08-10 22:02:31 -06:00
Michael J. Seiferling
2ef141ee9b Fixed possible filter crash 2017-08-06 19:18:38 -06:00
Michael J. Seiferling
94086d0c05 Operator feature change and minor bug fixes 2017-08-05 14:00:52 -06:00
Michael J. Seiferling
6e2298df49 Custom Filter Enhancement Final Phase 2017-08-05 12:49:10 -06:00
Michael J. Seiferling
c0d6a79aa7 Custom Filter Enhancement Phase #3 2017-08-04 23:31:48 -06:00
Michael J. Seiferling
19812d1cd2 Custom Filter Enhancement Phase #2 2017-08-04 23:13:35 -06:00
Michael J. Seiferling
11cc244b18 Custom Filter Enhancement Phase #1 2017-08-04 18:17:07 -06:00
18 changed files with 1514 additions and 339 deletions
+10
View File
@@ -7,6 +7,7 @@
Private bFolderSave As Boolean Private bFolderSave As Boolean
Private sFileType As String Private sFileType As String
Private sExcludeList As String Private sExcludeList As String
Private bMonitorOnly As Boolean
Private oTags As List(Of Tag) Private oTags As List(Of Tag)
Property Name As String Property Name As String
@@ -81,6 +82,15 @@
End Get End Get
End Property End Property
Property MonitorOnly As Boolean
Set(value As Boolean)
bMonitorOnly = value
End Set
Get
Return bMonitorOnly
End Get
End Property
Property Tags As List(Of Tag) Property Tags As List(Of Tag)
Get Get
Return oTags Return oTags
+2 -1
View File
@@ -1,4 +1,5 @@
Public Class Tag <Serializable()>
Public Class Tag
Private sTagName As String Private sTagName As String
Property Name As String Property Name As String
+10 -1
View File
@@ -1,4 +1,5 @@
Public Class clsGame <Serializable()>
Public Class clsGame
Private sGameID As String = Guid.NewGuid.ToString Private sGameID As String = Guid.NewGuid.ToString
Private sGameName As String = String.Empty Private sGameName As String = String.Empty
Private sProcessName As String = String.Empty Private sProcessName As String = String.Empty
@@ -405,4 +406,12 @@
Return sProcessName Return sProcessName
End Function 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 End Class
+71
View File
@@ -0,0 +1,71 @@
Public Class clsGameFilter
Private sID As String
Private oField As clsGameFilterField
Private oData As Object
Private eNumericOperator As eNumericOperators = eNumericOperators.Equals
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 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
+77
View File
@@ -0,0 +1,77 @@
Public Class clsGameFilterField
Public Enum eDataType As Integer
fString = 1
fNumeric = 2
fBool = 3
End Enum
<Flags()> 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
+18 -4
View File
@@ -1,10 +1,11 @@
Imports GBM.My.Resources Imports GBM.My.Resources
Imports System.IO
Public Class frmAdvancedImport Public Class frmAdvancedImport
Private hshImportData As Hashtable Private hshImportData As Hashtable
Private hshFinalData As New Hashtable Private hshFinalData As New Hashtable
Private bSelectAll As Boolean = False Private bSelectAll As Boolean = True
Private bIsLoading As Boolean = False Private bIsLoading As Boolean = False
Private iCurrentSort As Integer = 0 Private iCurrentSort As Integer = 0
Private WithEvents tmFilterTimer As Timer Private WithEvents tmFilterTimer As Timer
@@ -44,7 +45,7 @@ Public Class frmAdvancedImport
End If End If
End Sub End Sub
Private Sub LoadData(Optional ByVal sFilter As String = "") Private Sub LoadData(Optional ByVal sFilter As String = "", Optional ByVal bAutoDetect As Boolean = False)
Dim oApp As clsGame Dim oApp As clsGame
Dim oListViewItem As ListViewItem Dim oListViewItem As ListViewItem
Dim sTags As String Dim sTags As String
@@ -79,6 +80,19 @@ Public Class frmAdvancedImport
oListViewItem.Checked = False oListViewItem.Checked = False
End If End If
If bAutoDetect Then
If oApp.AbsolutePath Then
If Directory.Exists(oApp.Path) Then
oListViewItem.Checked = True
SaveChecked(oListViewItem)
Else
oListViewItem.Checked = False
End If
Else
oListViewItem.Checked = False
End If
End If
If sFilter = String.Empty Then If sFilter = String.Empty Then
bAddItem = True bAddItem = True
Else Else
@@ -142,8 +156,7 @@ Public Class frmAdvancedImport
Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load
bIsLoading = True bIsLoading = True
SetForm() SetForm()
LoadData() LoadData(String.Empty, True)
SelectToggle()
bIsLoading = False bIsLoading = False
End Sub End Sub
@@ -184,6 +197,7 @@ Public Class frmAdvancedImport
tmFilterTimer.Stop() tmFilterTimer.Stop()
tmFilterTimer.Enabled = False tmFilterTimer.Enabled = False
End Sub End Sub
End Class End Class
' Column Sorter ' Column Sorter
+282 -124
View File
@@ -22,8 +22,6 @@ Partial Class frmFilter
'Do not modify it using the code editor. 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() 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.grpTagFilter = New System.Windows.Forms.GroupBox()
Me.grpTagOptions = New System.Windows.Forms.GroupBox() Me.grpTagOptions = New System.Windows.Forms.GroupBox()
Me.optAll = New System.Windows.Forms.RadioButton() Me.optAll = New System.Windows.Forms.RadioButton()
@@ -32,45 +30,42 @@ Partial Class frmFilter
Me.lblTags = New System.Windows.Forms.Label() Me.lblTags = New System.Windows.Forms.Label()
Me.btnRemove = New System.Windows.Forms.Button() Me.btnRemove = New System.Windows.Forms.Button()
Me.btnAdd = 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.lstTags = New System.Windows.Forms.ListBox()
Me.btnOK = New System.Windows.Forms.Button() Me.btnOK = New System.Windows.Forms.Button()
Me.grpGameFilter = New System.Windows.Forms.GroupBox() Me.grpGameFilter = New System.Windows.Forms.GroupBox()
Me.grpGameInfoOptions = 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.grpFilterType = New System.Windows.Forms.GroupBox()
Me.optOr = New System.Windows.Forms.RadioButton() Me.optOr = New System.Windows.Forms.RadioButton()
Me.optAnd = New System.Windows.Forms.RadioButton() Me.optAnd = New System.Windows.Forms.RadioButton()
Me.txtCompany = New System.Windows.Forms.TextBox() Me.txtStringFilter = New System.Windows.Forms.TextBox()
Me.lblCompany = New System.Windows.Forms.Label() Me.grpSorting = New System.Windows.Forms.GroupBox()
Me.txtProcess = New System.Windows.Forms.TextBox() Me.grpSortOptions = New System.Windows.Forms.GroupBox()
Me.lblProcess = New System.Windows.Forms.Label() Me.optSortAsc = New System.Windows.Forms.RadioButton()
Me.lblName = New System.Windows.Forms.Label() Me.optSortDesc = New System.Windows.Forms.RadioButton()
Me.txtName = New System.Windows.Forms.TextBox() Me.lblSortFields = New System.Windows.Forms.Label()
Me.cboSortField = New System.Windows.Forms.ComboBox()
Me.chkTag = New System.Windows.Forms.CheckBox()
Me.chkGameInfo = New System.Windows.Forms.CheckBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.grpTagFilter.SuspendLayout() Me.grpTagFilter.SuspendLayout()
Me.grpTagOptions.SuspendLayout() Me.grpTagOptions.SuspendLayout()
Me.grpGameFilter.SuspendLayout() Me.grpGameFilter.SuspendLayout()
Me.grpGameInfoOptions.SuspendLayout() CType(Me.numFilter, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpFilterType.SuspendLayout()
Me.grpSorting.SuspendLayout()
Me.grpSortOptions.SuspendLayout()
Me.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 'grpTagFilter
' '
Me.grpTagFilter.Controls.Add(Me.grpTagOptions) Me.grpTagFilter.Controls.Add(Me.grpTagOptions)
@@ -78,11 +73,11 @@ Partial Class frmFilter
Me.grpTagFilter.Controls.Add(Me.lblTags) Me.grpTagFilter.Controls.Add(Me.lblTags)
Me.grpTagFilter.Controls.Add(Me.btnRemove) Me.grpTagFilter.Controls.Add(Me.btnRemove)
Me.grpTagFilter.Controls.Add(Me.btnAdd) 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.Controls.Add(Me.lstTags)
Me.grpTagFilter.Location = New System.Drawing.Point(12, 213) Me.grpTagFilter.Location = New System.Drawing.Point(12, 236)
Me.grpTagFilter.Name = "grpTagFilter" 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.TabIndex = 3
Me.grpTagFilter.TabStop = False Me.grpTagFilter.TabStop = False
' '
@@ -90,7 +85,7 @@ Partial Class frmFilter
' '
Me.grpTagOptions.Controls.Add(Me.optAll) Me.grpTagOptions.Controls.Add(Me.optAll)
Me.grpTagOptions.Controls.Add(Me.optAny) 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.Name = "grpTagOptions"
Me.grpTagOptions.Size = New System.Drawing.Size(150, 46) Me.grpTagOptions.Size = New System.Drawing.Size(150, 46)
Me.grpTagOptions.TabIndex = 6 Me.grpTagOptions.TabIndex = 6
@@ -138,7 +133,7 @@ Partial Class frmFilter
' '
'btnRemove '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.Name = "btnRemove"
Me.btnRemove.Size = New System.Drawing.Size(61, 23) Me.btnRemove.Size = New System.Drawing.Size(61, 23)
Me.btnRemove.TabIndex = 3 Me.btnRemove.TabIndex = 3
@@ -147,22 +142,22 @@ Partial Class frmFilter
' '
'btnAdd '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.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(61, 23) Me.btnAdd.Size = New System.Drawing.Size(61, 23)
Me.btnAdd.TabIndex = 2 Me.btnAdd.TabIndex = 2
Me.btnAdd.Text = ">" Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True Me.btnAdd.UseVisualStyleBackColor = True
' '
'lstFilter 'lstTagFilter
' '
Me.lstFilter.FormattingEnabled = True Me.lstTagFilter.FormattingEnabled = True
Me.lstFilter.Location = New System.Drawing.Point(229, 32) Me.lstTagFilter.Location = New System.Drawing.Point(229, 32)
Me.lstFilter.Name = "lstFilter" Me.lstTagFilter.Name = "lstTagFilter"
Me.lstFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended Me.lstTagFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstFilter.Size = New System.Drawing.Size(150, 173) Me.lstTagFilter.Size = New System.Drawing.Size(150, 108)
Me.lstFilter.Sorted = True Me.lstTagFilter.Sorted = True
Me.lstFilter.TabIndex = 5 Me.lstTagFilter.TabIndex = 5
' '
'lstTags 'lstTags
' '
@@ -170,124 +165,270 @@ Partial Class frmFilter
Me.lstTags.Location = New System.Drawing.Point(6, 32) Me.lstTags.Location = New System.Drawing.Point(6, 32)
Me.lstTags.Name = "lstTags" Me.lstTags.Name = "lstTags"
Me.lstTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended 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.Sorted = True
Me.lstTags.TabIndex = 1 Me.lstTags.TabIndex = 1
' '
'btnOK 'btnOK
' '
Me.btnOK.Location = New System.Drawing.Point(322, 484) Me.btnOK.Location = New System.Drawing.Point(322, 526)
Me.btnOK.Name = "btnOK" Me.btnOK.Name = "btnOK"
Me.btnOK.Size = New System.Drawing.Size(75, 23) Me.btnOK.Size = New System.Drawing.Size(75, 23)
Me.btnOK.TabIndex = 4 Me.btnOK.TabIndex = 6
Me.btnOK.Text = "&OK" Me.btnOK.Text = "&OK"
Me.btnOK.UseVisualStyleBackColor = True Me.btnOK.UseVisualStyleBackColor = True
' '
'grpGameFilter 'grpGameFilter
' '
Me.grpGameFilter.Controls.Add(Me.grpGameInfoOptions) Me.grpGameFilter.Controls.Add(Me.cboBoolFilter)
Me.grpGameFilter.Controls.Add(Me.txtCompany) Me.grpGameFilter.Controls.Add(Me.numFilter)
Me.grpGameFilter.Controls.Add(Me.lblCompany) Me.grpGameFilter.Controls.Add(Me.cboNumericOps)
Me.grpGameFilter.Controls.Add(Me.txtProcess) Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters)
Me.grpGameFilter.Controls.Add(Me.lblProcess) Me.grpGameFilter.Controls.Add(Me.lblFilterData)
Me.grpGameFilter.Controls.Add(Me.lblName) Me.grpGameFilter.Controls.Add(Me.lblFields)
Me.grpGameFilter.Controls.Add(Me.txtName) 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.grpFilterType)
Me.grpGameFilter.Controls.Add(Me.txtStringFilter)
Me.grpGameFilter.Location = New System.Drawing.Point(12, 35) Me.grpGameFilter.Location = New System.Drawing.Point(12, 35)
Me.grpGameFilter.Name = "grpGameFilter" Me.grpGameFilter.Name = "grpGameFilter"
Me.grpGameFilter.Size = New System.Drawing.Size(385, 150) Me.grpGameFilter.Size = New System.Drawing.Size(385, 172)
Me.grpGameFilter.TabIndex = 1 Me.grpGameFilter.TabIndex = 1
Me.grpGameFilter.TabStop = False Me.grpGameFilter.TabStop = False
' '
'grpGameInfoOptions 'cboBoolFilter
' '
Me.grpGameInfoOptions.Controls.Add(Me.optOr) Me.cboBoolFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.grpGameInfoOptions.Controls.Add(Me.optAnd) Me.cboBoolFilter.FormattingEnabled = True
Me.grpGameInfoOptions.Location = New System.Drawing.Point(14, 97) Me.cboBoolFilter.Location = New System.Drawing.Point(162, 36)
Me.grpGameInfoOptions.Name = "grpGameInfoOptions" Me.cboBoolFilter.Name = "cboBoolFilter"
Me.grpGameInfoOptions.Size = New System.Drawing.Size(106, 46) Me.cboBoolFilter.Size = New System.Drawing.Size(136, 21)
Me.grpGameInfoOptions.TabIndex = 6 Me.cboBoolFilter.TabIndex = 3
Me.grpGameInfoOptions.TabStop = False '
Me.grpGameInfoOptions.Text = "Options" '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, 140)
Me.btnRemoveFilter.Name = "btnRemoveFilter"
Me.btnRemoveFilter.Size = New System.Drawing.Size(75, 23)
Me.btnRemoveFilter.TabIndex = 9
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, 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 = 5
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(150, 21)
Me.cboFilterField.TabIndex = 1
'
'grpFilterType
'
Me.grpFilterType.Controls.Add(Me.optOr)
Me.grpFilterType.Controls.Add(Me.optAnd)
Me.grpFilterType.Location = New System.Drawing.Point(259, 81)
Me.grpFilterType.Name = "grpFilterType"
Me.grpFilterType.Size = New System.Drawing.Size(105, 46)
Me.grpFilterType.TabIndex = 8
Me.grpFilterType.TabStop = False
Me.grpFilterType.Text = "Filter Type"
' '
'optOr 'optOr
' '
Me.optOr.Location = New System.Drawing.Point(56, 19) Me.optOr.Checked = True
Me.optOr.Location = New System.Drawing.Point(6, 19)
Me.optOr.Name = "optOr" Me.optOr.Name = "optOr"
Me.optOr.Size = New System.Drawing.Size(36, 17) Me.optOr.Size = New System.Drawing.Size(44, 17)
Me.optOr.TabIndex = 1 Me.optOr.TabIndex = 0
Me.optOr.TabStop = True Me.optOr.TabStop = True
Me.optOr.Text = "Or" Me.optOr.Text = "Any"
Me.optOr.UseVisualStyleBackColor = True Me.optOr.UseVisualStyleBackColor = True
' '
'optAnd 'optAnd
' '
Me.optAnd.Checked = True Me.optAnd.Location = New System.Drawing.Point(56, 19)
Me.optAnd.Location = New System.Drawing.Point(6, 19)
Me.optAnd.Name = "optAnd" Me.optAnd.Name = "optAnd"
Me.optAnd.Size = New System.Drawing.Size(44, 17) Me.optAnd.Size = New System.Drawing.Size(44, 17)
Me.optAnd.TabIndex = 0 Me.optAnd.TabIndex = 1
Me.optAnd.TabStop = True Me.optAnd.Text = "All"
Me.optAnd.Text = "And"
Me.optAnd.UseVisualStyleBackColor = True Me.optAnd.UseVisualStyleBackColor = True
' '
'txtCompany 'txtStringFilter
' '
Me.txtCompany.Location = New System.Drawing.Point(70, 71) Me.txtStringFilter.Location = New System.Drawing.Point(162, 36)
Me.txtCompany.Name = "txtCompany" Me.txtStringFilter.Name = "txtStringFilter"
Me.txtCompany.Size = New System.Drawing.Size(309, 20) Me.txtStringFilter.Size = New System.Drawing.Size(136, 20)
Me.txtCompany.TabIndex = 5 Me.txtStringFilter.TabIndex = 3
' '
'lblCompany 'grpSorting
' '
Me.lblCompany.AutoSize = True Me.grpSorting.Controls.Add(Me.grpSortOptions)
Me.lblCompany.Location = New System.Drawing.Point(11, 74) Me.grpSorting.Controls.Add(Me.lblSortFields)
Me.lblCompany.Name = "lblCompany" Me.grpSorting.Controls.Add(Me.cboSortField)
Me.lblCompany.Size = New System.Drawing.Size(54, 13) Me.grpSorting.Location = New System.Drawing.Point(12, 440)
Me.lblCompany.TabIndex = 4 Me.grpSorting.Name = "grpSorting"
Me.lblCompany.Text = "Company:" Me.grpSorting.Size = New System.Drawing.Size(385, 80)
Me.grpSorting.TabIndex = 4
Me.grpSorting.TabStop = False
Me.grpSorting.Text = "Sorting"
' '
'txtProcess 'grpSortOptions
' '
Me.txtProcess.Location = New System.Drawing.Point(70, 45) Me.grpSortOptions.Controls.Add(Me.optSortAsc)
Me.txtProcess.Name = "txtProcess" Me.grpSortOptions.Controls.Add(Me.optSortDesc)
Me.txtProcess.Size = New System.Drawing.Size(309, 20) Me.grpSortOptions.Location = New System.Drawing.Point(162, 19)
Me.txtProcess.TabIndex = 3 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"
' '
'lblProcess 'optSortAsc
' '
Me.lblProcess.AutoSize = True Me.optSortAsc.AutoSize = True
Me.lblProcess.Location = New System.Drawing.Point(11, 48) Me.optSortAsc.Location = New System.Drawing.Point(6, 17)
Me.lblProcess.Name = "lblProcess" Me.optSortAsc.Name = "optSortAsc"
Me.lblProcess.Size = New System.Drawing.Size(48, 13) Me.optSortAsc.Size = New System.Drawing.Size(75, 17)
Me.lblProcess.TabIndex = 2 Me.optSortAsc.TabIndex = 0
Me.lblProcess.Text = "Process:" Me.optSortAsc.TabStop = True
Me.optSortAsc.Text = "Ascending"
Me.optSortAsc.UseVisualStyleBackColor = True
' '
'lblName 'optSortDesc
' '
Me.lblName.AutoSize = True Me.optSortDesc.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(11, 22) Me.optSortDesc.Location = New System.Drawing.Point(90, 17)
Me.lblName.Name = "lblName" Me.optSortDesc.Name = "optSortDesc"
Me.lblName.Size = New System.Drawing.Size(38, 13) Me.optSortDesc.Size = New System.Drawing.Size(82, 17)
Me.lblName.TabIndex = 0 Me.optSortDesc.TabIndex = 1
Me.lblName.Text = "Name:" Me.optSortDesc.TabStop = True
Me.optSortDesc.Text = "Descending"
Me.optSortDesc.UseVisualStyleBackColor = True
' '
'txtName 'lblSortFields
' '
Me.txtName.Location = New System.Drawing.Point(70, 19) Me.lblSortFields.AutoSize = True
Me.txtName.Name = "txtName" Me.lblSortFields.Location = New System.Drawing.Point(41, 19)
Me.txtName.Size = New System.Drawing.Size(309, 20) Me.lblSortFields.Name = "lblSortFields"
Me.txtName.TabIndex = 1 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(6, 35)
Me.cboSortField.Name = "cboSortField"
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, 213)
Me.chkTag.Name = "chkTag"
Me.chkTag.Size = New System.Drawing.Size(45, 17)
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, 12)
Me.chkGameInfo.Name = "chkGameInfo"
Me.chkGameInfo.Size = New System.Drawing.Size(109, 17)
Me.chkGameInfo.TabIndex = 0
Me.chkGameInfo.Text = "Game Information"
Me.chkGameInfo.UseVisualStyleBackColor = True
'
'Label1
'
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 'frmFilter
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(409, 516) 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) Me.Controls.Add(Me.grpGameFilter)
Me.Controls.Add(Me.chkGameInfo)
Me.Controls.Add(Me.grpTagFilter) Me.Controls.Add(Me.grpTagFilter)
Me.Controls.Add(Me.btnOK) Me.Controls.Add(Me.btnOK)
Me.Controls.Add(Me.optTag)
Me.Controls.Add(Me.optGameInfo)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
@@ -300,13 +441,16 @@ Partial Class frmFilter
Me.grpTagOptions.ResumeLayout(False) Me.grpTagOptions.ResumeLayout(False)
Me.grpGameFilter.ResumeLayout(False) Me.grpGameFilter.ResumeLayout(False)
Me.grpGameFilter.PerformLayout() Me.grpGameFilter.PerformLayout()
Me.grpGameInfoOptions.ResumeLayout(False) CType(Me.numFilter, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpFilterType.ResumeLayout(False)
Me.grpSorting.ResumeLayout(False)
Me.grpSorting.PerformLayout()
Me.grpSortOptions.ResumeLayout(False)
Me.grpSortOptions.PerformLayout()
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
End Sub 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 grpTagFilter As System.Windows.Forms.GroupBox
Friend WithEvents grpTagOptions As System.Windows.Forms.GroupBox Friend WithEvents grpTagOptions As System.Windows.Forms.GroupBox
Friend WithEvents optAll As System.Windows.Forms.RadioButton Friend WithEvents optAll As System.Windows.Forms.RadioButton
@@ -315,17 +459,31 @@ Partial Class frmFilter
Friend WithEvents lblTags As System.Windows.Forms.Label Friend WithEvents lblTags As System.Windows.Forms.Label
Friend WithEvents btnRemove As System.Windows.Forms.Button Friend WithEvents btnRemove As System.Windows.Forms.Button
Friend WithEvents btnAdd 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 lstTags As System.Windows.Forms.ListBox
Friend WithEvents btnOK As System.Windows.Forms.Button Friend WithEvents btnOK As System.Windows.Forms.Button
Friend WithEvents grpGameFilter As System.Windows.Forms.GroupBox Friend WithEvents grpGameFilter As System.Windows.Forms.GroupBox
Friend WithEvents txtProcess As System.Windows.Forms.TextBox Friend WithEvents txtStringFilter As System.Windows.Forms.TextBox
Friend WithEvents lblProcess As System.Windows.Forms.Label Friend WithEvents grpFilterType As System.Windows.Forms.GroupBox
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 grpGameInfoOptions As System.Windows.Forms.GroupBox
Friend WithEvents optOr As System.Windows.Forms.RadioButton Friend WithEvents optOr As System.Windows.Forms.RadioButton
Friend WithEvents optAnd 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 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
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 End Class
+455 -52
View File
@@ -3,36 +3,74 @@
Public Class frmFilter Public Class frmFilter
Public Enum eFilterType As Integer Public Enum eFilterType As Integer
NoFilter = 1 BaseFilter = 1
AnyTag = 2 AnyTag = 2
AllTags = 3 AllTags = 3
NoTags = 4 NoTags = 4
FieldAnd = 5
FieldOr = 6
End Enum End Enum
Dim oTagFilters As New List(Of clsTag) Dim oTagFilters As New List(Of clsTag)
Dim hshStringFilters As New Hashtable Dim oGameFilters As New List(Of clsGameFilter)
Dim eCurrentFilterType As eFilterType = eFilterType.AnyTag Dim oValidFields As New List(Of clsGameFilterField)
Dim eCurrentFilterType As eFilterType = eFilterType.BaseFilter
Dim bAndOperator As Boolean = False
Dim bSortAsc As Boolean = True
Dim sSortField As String = "Name"
Dim hshTags As New Hashtable Dim hshTags As New Hashtable
Dim bShutdown As Boolean = False Dim bShutdown As Boolean = False
Public ReadOnly Property StringFilters As Hashtable Public Property GameFilters As List(Of clsGameFilter)
Get Get
Return hshStringFilters Return oGameFilters
End Get End Get
Set(value As List(Of clsGameFilter))
oGameFilters = value
End Set
End Property End Property
Public ReadOnly Property TagFilters As List(Of clsTag) Public Property TagFilters As List(Of clsTag)
Get Get
Return oTagFilters Return oTagFilters
End Get End Get
Set(value As List(Of clsTag))
oTagFilters = value
End Set
End Property End Property
Public ReadOnly Property FilterType As eFilterType Public Property FilterType As eFilterType
Get Get
Return eCurrentFilterType Return eCurrentFilterType
End Get End Get
Set(value As eFilterType)
eCurrentFilterType = 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
Public Property SortAsc As Boolean
Get
Return bSortAsc
End Get
Set(value As Boolean)
bSortAsc = value
End Set
End Property
Public Property SortField As String
Get
Return sSortField
End Get
Set(value As String)
sSortField = value
End Set
End Property End Property
Private Sub AddTag() Private Sub AddTag()
@@ -41,7 +79,7 @@ Public Class frmFilter
If lstTags.SelectedItems.Count = 1 Then If lstTags.SelectedItems.Count = 1 Then
oData = lstTags.SelectedItems(0) oData = lstTags.SelectedItems(0)
lstFilter.Items.Add(oData) lstTagFilter.Items.Add(oData)
lstTags.Items.Remove(oData) lstTags.Items.Remove(oData)
ElseIf lstTags.SelectedItems.Count > 1 Then ElseIf lstTags.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String)) oTags = New List(Of KeyValuePair(Of String, String))
@@ -51,7 +89,7 @@ Public Class frmFilter
Next Next
For Each kp As KeyValuePair(Of String, String) In oTags For Each kp As KeyValuePair(Of String, String) In oTags
lstFilter.Items.Add(kp) lstTagFilter.Items.Add(kp)
lstTags.Items.Remove(kp) lstTags.Items.Remove(kp)
Next Next
End If End If
@@ -62,26 +100,173 @@ Public Class frmFilter
Dim oData As KeyValuePair(Of String, String) Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String)) Dim oTags As List(Of KeyValuePair(Of String, String))
If lstFilter.SelectedItems.Count = 1 Then If lstTagFilter.SelectedItems.Count = 1 Then
oData = lstFilter.SelectedItems(0) oData = lstTagFilter.SelectedItems(0)
lstFilter.Items.Remove(oData) lstTagFilter.Items.Remove(oData)
lstTags.Items.Add(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)) oTags = New List(Of KeyValuePair(Of String, String))
For Each oData In lstFilter.SelectedItems For Each oData In lstTagFilter.SelectedItems
oTags.Add(oData) oTags.Add(oData)
Next Next
For Each kp As KeyValuePair(Of String, String) In oTags For Each kp As KeyValuePair(Of String, String) In oTags
lstFilter.Items.Remove(kp) lstTagFilter.Items.Remove(kp)
lstTags.Items.Add(kp) lstTags.Items.Add(kp)
Next Next
End If End If
End Sub 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 oTag As clsTag
Dim oData As KeyValuePair(Of String, String) Dim oData As KeyValuePair(Of String, String)
@@ -90,12 +275,13 @@ Public Class frmFilter
'Handle Lists 'Handle Lists
lstTags.Items.Clear() lstTags.Items.Clear()
lstFilter.Items.Clear() lstTagFilter.Items.Clear()
lstTags.ValueMember = "Key" lstTags.ValueMember = "Key"
lstTags.DisplayMember = "Value" lstTags.DisplayMember = "Value"
lstFilter.ValueMember = "Key"
lstFilter.DisplayMember = "Value" lstTagFilter.ValueMember = "Key"
lstTagFilter.DisplayMember = "Value"
For Each de As DictionaryEntry In hshTags For Each de As DictionaryEntry In hshTags
oTag = DirectCast(de.Value, clsTag) oTag = DirectCast(de.Value, clsTag)
@@ -105,32 +291,140 @@ Public Class frmFilter
End Sub End Sub
Private Sub LoadExistingFilters()
Dim sFilter As String = String.Empty
Dim oListTag As KeyValuePair(Of String, String)
'Game Filters
If bAndOperator Then
optAnd.Checked = True
Else
optOr.Checked = True
End If
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
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data
Case clsGameFilterField.eDataType.fBool
sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select
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 = Guid.NewGuid.ToString.Split("-")(0)
oFilter.Field = cboFilterField.SelectedValue
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
oGameFilters.Add(oFilter)
lstFilter.Items.Add(New KeyValuePair(Of clsGameFilter, String)(oFilter, sFilter))
End Sub
Private Sub RemoveFilter()
Dim oFilter As Object
If lstFilter.SelectedIndex <> -1 Then
oFilter = lstFilter.SelectedItem
oGameFilters.Remove(DirectCast(oFilter, KeyValuePair(Of clsGameFilter, String)).Key)
lstFilter.Items.Remove(oFilter)
End If
End Sub
Private Sub GetFilters() Private Sub GetFilters()
Dim oData As KeyValuePair(Of String, String) Dim oData As KeyValuePair(Of String, String)
Dim oTag As clsTag Dim oTag As clsTag
If optGameInfo.Checked Then If chkGameInfo.Checked Then
'Set Filter Type 'Set Filter Type(s)
If optAnd.Checked Then eCurrentFilterType = eFilterType.BaseFilter
eCurrentFilterType = eFilterType.FieldAnd bAndOperator = optAnd.Checked
Else End If
eCurrentFilterType = eFilterType.FieldOr
End If
'Set String Filter If chkTag.Checked Then
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
Else
'Set Tags 'Set Tags
For Each oData In lstFilter.Items TagFilters.Clear()
For Each oData In lstTagFilter.Items
oTag = DirectCast(hshTags(oData.Value), clsTag) oTag = DirectCast(hshTags(oData.Value), clsTag)
TagFilters.Add(oTag) TagFilters.Add(oTag)
Next Next
@@ -145,6 +439,72 @@ Public Class frmFilter
End If End If
End If End If
'Sorting
If optSortAsc.Checked Then
bSortAsc = True
Else
bSortAsc = False
End If
sSortField = cboSortField.SelectedValue
End Sub
Private Sub LoadCombos()
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"
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
'cboSortField
cboSortField.ValueMember = "Key"
cboSortField.DisplayMember = "Value"
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 End Sub
Private Sub SetForm() Private Sub SetForm()
@@ -154,10 +514,7 @@ Public Class frmFilter
'Set Form Text 'Set Form Text
optOr.Text = frmFilter_optOr optOr.Text = frmFilter_optOr
optAnd.Text = frmFilter_optAnd optAnd.Text = frmFilter_optAnd
lblCompany.Text = frmFilter_lblCompany grpFilterType.Text = frmFilter_grpFilterType
lblProcess.Text = frmFilter_lblProcess
lblName.Text = frmFilter_lblName
grpGameInfoOptions.Text = frmFilter_grpGameInfoOptions
optAll.Text = frmFilter_optAll optAll.Text = frmFilter_optAll
optAny.Text = frmFilter_optAny optAny.Text = frmFilter_optAny
lblGameTags.Text = frmFilter_lblGameTags lblGameTags.Text = frmFilter_lblGameTags
@@ -166,14 +523,36 @@ Public Class frmFilter
btnAdd.Text = frmFilter_btnAdd btnAdd.Text = frmFilter_btnAdd
btnOK.Text = frmFilter_btnOK btnOK.Text = frmFilter_btnOK
grpTagOptions.Text = frmFilter_grpTagOptions grpTagOptions.Text = frmFilter_grpTagOptions
optTag.Text = frmFilter_optTag chkTag.Text = frmFilter_chkTag
optGameInfo.Text = frmFilter_optGameInfo chkGameInfo.Text = frmFilter_chkGameInfo
grpSorting.Text = frmFilter_grpSorting
lblSortFields.Text = frmFilter_lblSortsFields
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
grpSortOptions.Text = frmFilter_grpSortOptions
'Defaults
optOr.Checked = True
optSortAsc.Checked = True
grpGameFilter.Enabled = False
grpTagFilter.Enabled = False
'Init Game Filter
lstFilter.ValueMember = "Key"
lstFilter.DisplayMember = "Value"
End Sub End Sub
Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm() SetForm()
optGameInfo.Checked = True LoadFilterFields()
LoadData() LoadCombos()
LoadTagData()
LoadExistingFilters()
End Sub End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
@@ -196,13 +575,37 @@ Public Class frmFilter
End If End If
End Sub End Sub
Private Sub optGameInfo_Click(sender As Object, e As EventArgs) Handles optGameInfo.Click, optTag.Click Private Sub chkGameInfo_CheckedChanged(sender As Object, e As EventArgs) Handles chkGameInfo.CheckedChanged
If optGameInfo.Checked = True Then If chkGameInfo.Checked Then
grpGameFilter.Enabled = True grpGameFilter.Enabled = True
grpTagFilter.Enabled = False
Else Else
optOr.Checked = True
grpGameFilter.Enabled = False grpGameFilter.Enabled = False
grpTagFilter.Enabled = True oGameFilters.Clear()
lstFilter.Items.Clear()
End If End If
End Sub 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
oTagFilters.Clear()
LoadTagData()
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
Private Sub cboFilterField_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFilterField.SelectedIndexChanged
ChangeFilterMode()
End Sub
End Class End Class
+76 -38
View File
@@ -1,4 +1,5 @@
Imports GBM.My.Resources Imports GBM.My.Resources
Imports System.Collections.Specialized
Imports System.IO Imports System.IO
Public Class frmGameManager Public Class frmGameManager
@@ -13,14 +14,17 @@ Public Class frmGameManager
Private bTriggerRestore As Boolean = False Private bTriggerRestore As Boolean = False
Private oBackupList As New List(Of clsGame) Private oBackupList As New List(Of clsGame)
Private oRestoreList As New Hashtable Private oRestoreList As New Hashtable
Private oAppData As Hashtable Private oGameData As OrderedDictionary
Private oLocalBackupData As SortedList Private oLocalBackupData As SortedList
Private oRemoteBackupData As SortedList Private oRemoteBackupData As SortedList
Private bIsDirty As Boolean = False Private bIsDirty As Boolean = False
Private bIsLoading As Boolean = False Private bIsLoading As Boolean = False
Private oCurrentTagFilters As New List(Of clsTag) Private oCurrentTagFilters As New List(Of clsTag)
Private oCurrentStringFilters As New Hashtable Private oCurrentFilters As New List(Of clsGameFilter)
Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter
Private bCurrentAndOperator As Boolean = False
Private bCurrentSortAsc As Boolean = True
Private sCurrentSortField As String = "Name"
Private WithEvents tmFilterTimer As Timer Private WithEvents tmFilterTimer As Timer
Private Enum eModes As Integer Private Enum eModes As Integer
@@ -70,12 +74,12 @@ Public Class frmGameManager
End Set End Set
End Property End Property
Private Property AppData As Hashtable Private Property GameData As OrderedDictionary
Get Get
Return oAppData Return oGameData
End Get End Get
Set(value As Hashtable) Set(value As OrderedDictionary)
oAppData = value oGameData = value
End Set End Set
End Property End Property
@@ -222,41 +226,55 @@ Public Class frmGameManager
If optCustom.Checked Then If optCustom.Checked Then
If Not bRetainFilter Then If Not bRetainFilter Then
frm = New frmFilter frm = New frmFilter
frm.TagFilters = oCurrentTagFilters
frm.GameFilters = oCurrentFilters
frm.FilterType = eCurrentFilter
frm.AndOperator = bCurrentAndOperator
frm.SortAsc = bCurrentSortAsc
frm.SortField = sCurrentSortField
frm.ShowDialog() frm.ShowDialog()
oCurrentTagFilters = frm.TagFilters oCurrentTagFilters = frm.TagFilters
oCurrentStringFilters = frm.StringFilters oCurrentFilters = frm.GameFilters
eCurrentFilter = frm.FilterType eCurrentFilter = frm.FilterType
bCurrentAndOperator = frm.AndOperator
bCurrentSortAsc = frm.SortAsc
sCurrentSortField = frm.SortField
End If End If
Else Else
oCurrentTagFilters.Clear() oCurrentTagFilters.Clear()
oCurrentStringFilters.Clear() oCurrentFilters.Clear()
eCurrentFilter = frmFilter.eFilterType.NoFilter eCurrentFilter = frmFilter.eFilterType.BaseFilter
bCurrentSortAsc = True
sCurrentSortField = "Name"
End If End If
AppData = mgrMonitorList.ReadFilteredList(oCurrentTagFilters, oCurrentStringFilters, eCurrentFilter) GameData = mgrMonitorList.ReadFilteredList(oCurrentTagFilters, oCurrentFilters, eCurrentFilter, bCurrentAndOperator, bCurrentSortAsc, sCurrentSortField)
If optPendingRestores.Checked Then If optPendingRestores.Checked Then
oRestoreData = mgrRestore.CompareManifests oRestoreData = mgrRestore.CompareManifests
'Only show games with data to restore 'Only show games with data to restore
Dim oTemporaryList As Hashtable = AppData.Clone Dim oTemporaryList As OrderedDictionary = mgrCommon.GenericClone(GameData)
For Each de As DictionaryEntry In oTemporaryList For Each de As DictionaryEntry In oTemporaryList
oGame = DirectCast(de.Value, clsGame) oGame = DirectCast(de.Value, clsGame)
If Not oRestoreData.ContainsKey(oGame.Name) Then If Not oRestoreData.ContainsKey(oGame.Name) Then
AppData.Remove(de.Key) GameData.Remove(de.Key)
Else Else
oRestoreData.Remove(oGame.Name) oRestoreData.Remove(oGame.Name)
End If End If
Next Next
ElseIf optBackupData.Checked Then ElseIf optBackupData.Checked Then
'Only show games with backup data 'Only show games with backup data
Dim oTemporaryList As Hashtable = AppData.Clone Dim oTemporaryList As OrderedDictionary = mgrCommon.GenericClone(GameData)
oRestoreData = oRemoteBackupData.Clone oRestoreData = oRemoteBackupData.Clone
For Each de As DictionaryEntry In oTemporaryList For Each de As DictionaryEntry In oTemporaryList
oGame = DirectCast(de.Value, clsGame) oGame = DirectCast(de.Value, clsGame)
If Not oRemoteBackupData.ContainsKey(oGame.Name) Then If Not oRemoteBackupData.ContainsKey(oGame.Name) Then
AppData.Remove(de.Key) GameData.Remove(de.Key)
Else Else
oRestoreData.Remove(oGame.Name) oRestoreData.Remove(oGame.Name)
End If End If
@@ -269,7 +287,7 @@ Public Class frmGameManager
oGame = New clsGame oGame = New clsGame
oGame.Name = oBackup.Name oGame.Name = oBackup.Name
oGame.Temporary = True oGame.Temporary = True
AppData.Add(oGame.ID, oGame) GameData.Add(oGame.ID, oGame)
Next Next
End If End If
@@ -387,7 +405,7 @@ Public Class frmGameManager
Dim oList As New List(Of KeyValuePair(Of String, String)) Dim oList As New List(Of KeyValuePair(Of String, String))
Dim sFilter As String = txtQuickFilter.Text Dim sFilter As String = txtQuickFilter.Text
For Each de As DictionaryEntry In AppData For Each de As DictionaryEntry In GameData
oApp = DirectCast(de.Value, clsGame) oApp = DirectCast(de.Value, clsGame)
oData = New KeyValuePair(Of String, String)(oApp.ID, oApp.Name) oData = New KeyValuePair(Of String, String)(oApp.ID, oApp.Name)
'Apply the quick filter if applicable 'Apply the quick filter if applicable
@@ -400,8 +418,6 @@ Public Class frmGameManager
End If End If
Next Next
oList.Sort(AddressOf mgrCommon.CompareByListBoxItemByValue)
lstGames.BeginUpdate() lstGames.BeginUpdate()
lstGames.ValueMember = "Key" lstGames.ValueMember = "Key"
lstGames.DisplayMember = "Value" lstGames.DisplayMember = "Value"
@@ -545,7 +561,7 @@ Public Class frmGameManager
frm.TagList = oTagsToSave frm.TagList = oTagsToSave
Else Else
For Each oData In lstGames.SelectedItems For Each oData In lstGames.SelectedItems
oApp = DirectCast(AppData(oData.Key), clsGame) oApp = DirectCast(GameData(oData.Key), clsGame)
sMonitorIDs.Add(oApp.ID) sMonitorIDs.Add(oApp.ID)
Next Next
frm.GameName = CurrentGame.Name frm.GameName = CurrentGame.Name
@@ -731,7 +747,7 @@ Public Class frmGameManager
IsLoading = True IsLoading = True
Dim oData As KeyValuePair(Of String, String) = lstGames.SelectedItems(0) Dim oData As KeyValuePair(Of String, String) = lstGames.SelectedItems(0)
Dim oApp As clsGame = DirectCast(AppData(oData.Key), clsGame) Dim oApp As clsGame = DirectCast(GameData(oData.Key), clsGame)
'Core 'Core
txtID.Text = oApp.ID txtID.Text = oApp.ID
@@ -1028,6 +1044,27 @@ Public Class frmGameManager
VerifyCleanFolder() VerifyCleanFolder()
End Sub End Sub
Private Sub MonitorOnlyModeChange()
If chkMonitorOnly.Checked Then
chkFolderSave.Enabled = False
chkTimeStamp.Enabled = False
lblSavePath.Enabled = False
txtSavePath.Enabled = False
btnSavePathBrowse.Enabled = False
btnInclude.Enabled = False
btnExclude.Enabled = False
Else
chkFolderSave.Enabled = True
chkTimeStamp.Enabled = True
lblSavePath.Enabled = True
txtSavePath.Enabled = True
btnSavePathBrowse.Enabled = True
btnInclude.Enabled = True
btnExclude.Enabled = True
End If
VerifyCleanFolder()
End Sub
Private Sub TimeStampModeChange() Private Sub TimeStampModeChange()
If chkTimeStamp.Checked Then If chkTimeStamp.Checked Then
nudLimit.Visible = True nudLimit.Visible = True
@@ -1042,7 +1079,7 @@ Public Class frmGameManager
Private Sub VerifyCleanFolder() Private Sub VerifyCleanFolder()
If Not bIsLoading Then If Not bIsLoading Then
If chkFolderSave.Checked = True And txtExclude.Text = String.Empty And txtSavePath.Text <> String.Empty Then If (chkFolderSave.Checked = True And txtExclude.Text = String.Empty And txtSavePath.Text <> String.Empty) And Not chkMonitorOnly.Checked Then
chkCleanFolder.Enabled = True chkCleanFolder.Enabled = True
Else Else
chkCleanFolder.Checked = False chkCleanFolder.Checked = False
@@ -1195,7 +1232,7 @@ Public Class frmGameManager
If lstGames.SelectedItems.Count = 1 Then If lstGames.SelectedItems.Count = 1 Then
oData = lstGames.SelectedItems(0) oData = lstGames.SelectedItems(0)
oApp = DirectCast(AppData(oData.Key), clsGame) oApp = DirectCast(GameData(oData.Key), clsGame)
If mgrCommon.ShowMessage(frmGameManager_ConfirmGameDelete, oApp.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(frmGameManager_ConfirmGameDelete, oApp.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrMonitorList.DoListDelete(oApp.ID) mgrMonitorList.DoListDelete(oApp.ID)
@@ -1207,7 +1244,7 @@ Public Class frmGameManager
Dim sMonitorIDs As New List(Of String) Dim sMonitorIDs As New List(Of String)
For Each oData In lstGames.SelectedItems For Each oData In lstGames.SelectedItems
oApp = DirectCast(AppData(oData.Key), clsGame) oApp = DirectCast(GameData(oData.Key), clsGame)
sMonitorIDs.Add(oApp.ID) sMonitorIDs.Add(oApp.ID)
Next Next
@@ -1247,7 +1284,7 @@ Public Class frmGameManager
Return False Return False
End If End If
If chkFolderSave.Checked = False And txtFileType.Text = String.Empty Then If (chkFolderSave.Checked = False And txtFileType.Text = String.Empty) And Not chkMonitorOnly.Checked Then
mgrCommon.ShowMessage(frmGameManager_ErrorNoItems, MsgBoxStyle.Exclamation) mgrCommon.ShowMessage(frmGameManager_ErrorNoItems, MsgBoxStyle.Exclamation)
btnInclude.Focus() btnInclude.Focus()
Return False Return False
@@ -1334,8 +1371,8 @@ Public Class frmGameManager
BackupList.Clear() BackupList.Clear()
For Each oData In lstGames.SelectedItems For Each oData In lstGames.SelectedItems
oGame = DirectCast(AppData(oData.Key), clsGame) oGame = DirectCast(GameData(oData.Key), clsGame)
BackupList.Add(oGame) If Not oGame.MonitorOnly Then BackupList.Add(oGame)
Next Next
If BackupList.Count = 1 Then If BackupList.Count = 1 Then
@@ -1372,17 +1409,14 @@ Public Class frmGameManager
If lstGames.SelectedItems.Count > 0 Then If lstGames.SelectedItems.Count > 0 Then
RestoreList.Clear() RestoreList.Clear()
If lstGames.SelectedItems.Count = 1 Then
RestoreList.Add(CurrentGame, CurrentBackupItem) For Each oData In lstGames.SelectedItems
Else If oRemoteBackupData.Contains(oData.Value) Then
For Each oData In lstGames.SelectedItems oGame = DirectCast(GameData(oData.Key), clsGame)
If oRemoteBackupData.Contains(oData.Value) Then oBackup = DirectCast(oRemoteBackupData(oData.Value), clsBackup)
oGame = DirectCast(AppData(oData.Key), clsGame) If Not oGame.MonitorOnly Then RestoreList.Add(oGame, oBackup)
oBackup = DirectCast(oRemoteBackupData(oData.Value), clsBackup) End If
RestoreList.Add(oGame, oBackup) Next
End If
Next
End If
If RestoreList.Count = 1 Then If RestoreList.Count = 1 Then
bDoRestore = True bDoRestore = True
@@ -1713,4 +1747,8 @@ Public Class frmGameManager
Private Sub frmGameManager_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown Private Sub frmGameManager_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
txtQuickFilter.Focus() txtQuickFilter.Focus()
End Sub End Sub
Private Sub chkMonitorOnly_CheckedChanged(sender As Object, e As EventArgs) Handles chkMonitorOnly.CheckedChanged
MonitorOnlyModeChange()
End Sub
End Class End Class
+12 -12
View File
@@ -67,49 +67,49 @@ Public Class frmSyncFields
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
If chkTimeStamp.Checked Then If chkTimeStamp.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp) SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
Else Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp) SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
End If End If
End Sub End Sub
Private Sub chkGamePath_CheckedChanged(sender As Object, e As EventArgs) Handles chkGamePath.CheckedChanged Private Sub chkGamePath_CheckedChanged(sender As Object, e As EventArgs) Handles chkGamePath.CheckedChanged
If chkGamePath.Checked Then If chkGamePath.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath) SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
Else Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath) SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
End If End If
End Sub End Sub
Private Sub chkCompany_CheckedChanged(sender As Object, e As EventArgs) Handles chkCompany.CheckedChanged Private Sub chkCompany_CheckedChanged(sender As Object, e As EventArgs) Handles chkCompany.CheckedChanged
If chkCompany.Checked Then If chkCompany.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company) SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
Else Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company) SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
End If End If
End Sub End Sub
Private Sub chkVersion_CheckedChanged(sender As Object, e As EventArgs) Handles chkVersion.CheckedChanged Private Sub chkVersion_CheckedChanged(sender As Object, e As EventArgs) Handles chkVersion.CheckedChanged
If chkVersion.Checked Then If chkVersion.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version) SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
Else Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version) SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
End If End If
End Sub End Sub
Private Sub chkIcon_CheckedChanged(sender As Object, e As EventArgs) Handles chkIcon.CheckedChanged Private Sub chkIcon_CheckedChanged(sender As Object, e As EventArgs) Handles chkIcon.CheckedChanged
If chkIcon.Checked Then If chkIcon.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon) SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
Else Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon) SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
End If End If
End Sub End Sub
Private Sub chkMonitorGame_CheckedChanged(sender As Object, e As EventArgs) Handles chkMonitorGame.CheckedChanged Private Sub chkMonitorGame_CheckedChanged(sender As Object, e As EventArgs) Handles chkMonitorGame.CheckedChanged
If chkMonitorGame.Checked Then If chkMonitorGame.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame) SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
Else Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame) SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
End If End If
End Sub End Sub
End Class End Class
+2
View File
@@ -122,6 +122,8 @@
<Import Include="System.Windows.Forms" /> <Import Include="System.Windows.Forms" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Classes\clsGameFilter.vb" />
<Compile Include="Classes\clsGameFilterField.vb" />
<Compile Include="Classes\clsSavedPath.vb" /> <Compile Include="Classes\clsSavedPath.vb" />
<Compile Include="Classes\XML Serialize Classes\Tag.vb" /> <Compile Include="Classes\XML Serialize Classes\Tag.vb" />
<Compile Include="Classes\XML Serialize Classes\Game.vb" /> <Compile Include="Classes\XML Serialize Classes\Game.vb" />
+27 -9
View File
@@ -3,6 +3,8 @@ Imports System.Net
Imports System.IO Imports System.IO
Imports System.Security.Principal Imports System.Security.Principal
Imports System.Text.RegularExpressions Imports System.Text.RegularExpressions
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Public Class mgrCommon Public Class mgrCommon
@@ -35,6 +37,28 @@ Public Class mgrCommon
End Get End Get
End Property End Property
'Source - https://stackoverflow.com/questions/18873152/deep-copy-of-ordereddictionary
Public Shared Function GenericClone(ByVal oOriginal As Object) As Object
'Construct a temporary memory stream
Dim oStream As MemoryStream = New MemoryStream()
'Construct a serialization formatter that does all the hard work
Dim oFormatter As BinaryFormatter = New BinaryFormatter()
'This line Is explained in the "Streaming Contexts" section
oFormatter.Context = New StreamingContext(StreamingContextStates.Clone)
'Serialize the object graph into the memory stream
oFormatter.Serialize(oStream, oOriginal)
'Seek back to the start of the memory stream before deserializing
oStream.Position = 0
'Deserialize the graph into a New set of objects
'Return the root of the graph (deep copy) to the caller
Return oFormatter.Deserialize(oStream)
End Function
Public Shared Function CheckAddress(ByVal URL As String) As Boolean Public Shared Function CheckAddress(ByVal URL As String) As Boolean
Try Try
Dim request As WebRequest = WebRequest.Create(URL) Dim request As WebRequest = WebRequest.Create(URL)
@@ -213,14 +237,6 @@ Public Class mgrCommon
oProcess.Start() oProcess.Start()
End Sub 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 'Get a file size
Public Shared Function GetFileSize(ByVal sFile As String) As Long Public Shared Function GetFileSize(ByVal sFile As String) As Long
Dim oFileInfo As FileInfo Dim oFileInfo As FileInfo
@@ -253,13 +269,15 @@ Public Class mgrCommon
End Function End Function
'Calculate the current size of a folder 'Calculate the current size of a folder
Public Shared Function GetFolderSize(ByVal sPath As String, ByVal sInclude As String(), ByVal sExclude As String()) Public Shared Function GetFolderSize(ByVal sPath As String, ByVal sInclude As String(), ByVal sExclude As String()) As Long
Dim oFolder As DirectoryInfo Dim oFolder As DirectoryInfo
Dim bInclude As Boolean Dim bInclude As Boolean
Dim bExclude As Boolean Dim bExclude As Boolean
Dim lSize As Long = 0 Dim lSize As Long = 0
Try Try
If Not Directory.Exists(sPath) Then Return lSize
oFolder = New DirectoryInfo(sPath) oFolder = New DirectoryInfo(sPath)
'Files 'Files
+70 -39
View File
@@ -1,4 +1,5 @@
Imports GBM.My.Resources Imports GBM.My.Resources
Imports System.Collections.Specialized
Imports System.IO Imports System.IO
Public Class mgrMonitorList Public Class mgrMonitorList
@@ -496,36 +497,22 @@ Public Class mgrMonitorList
End Sub End Sub
'Filter Functions 'Filter Functions
Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, ByRef hshParams As Hashtable) As String Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of clsGameFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bAndOperator As Boolean,
ByVal bSortAsc As Boolean, ByVal sSortField As String, ByRef hshParams As Hashtable) As String
Dim sSQL As String = String.Empty Dim sSQL As String = String.Empty
Dim iCounter As Integer = 0 Dim iCounter As Integer = 0
Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter FROM monitorlist" Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter FROM monitorlist"
Dim sSort As String = " ORDER BY " & sSortField
If bSortAsc Then
sSort &= " ASC"
Else
sSort &= " DESC"
End If
Select Case eFilterType Select Case eFilterType
Case frmFilter.eFilterType.NoFilter Case frmFilter.eFilterType.BaseFilter
sSQL = "SELECT " & sBaseSelect & " ORDER BY Name Asc"
Case frmFilter.eFilterType.FieldAnd, frmFilter.eFilterType.FieldOr
sSQL = "SELECT " & sBaseSelect 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 &= " ORDER BY Name Asc"
Case frmFilter.eFilterType.AnyTag Case frmFilter.eFilterType.AnyTag
sSQL = "SELECT DISTINCT " & sBaseSelect sSQL = "SELECT DISTINCT " & sBaseSelect
sSQL &= " NATURAL JOIN gametags WHERE gametags.TagID IN (" sSQL &= " NATURAL JOIN gametags WHERE gametags.TagID IN ("
@@ -537,7 +524,7 @@ Public Class mgrMonitorList
Next Next
sSQL = sSQL.TrimEnd(",") sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc" sSQL &= ")"
Case frmFilter.eFilterType.AllTags Case frmFilter.eFilterType.AllTags
sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID IN " sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID IN "
@@ -549,41 +536,78 @@ Public Class mgrMonitorList
hshParams.Add("TagID" & iCounter, oTag.ID) hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1 iCounter += 1
Next Next
sSQL &= " ORDER BY Name Asc"
Case frmFilter.eFilterType.NoTags Case frmFilter.eFilterType.NoTags
sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags) ORDER BY Name Asc" sSQL = "SELECT " & sBaseSelect & " WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags)"
End Select End Select
'Handle Other Filters
If oFilters.Count > 0 Then
If eFilterType = frmFilter.eFilterType.BaseFilter Then
sSQL &= " WHERE ("
Else
sSQL &= " AND ("
End If
iCounter = 0
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 bAndOperator Then
sSQL &= " AND "
Else
sSQL &= " OR "
End If
End If
Next
sSQL &= ")"
End If
'Handle Sorting
sSQL &= sSort
Return sSQL Return sSQL
End Function End Function
Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of clsGameFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bAndOperator As Boolean,
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 oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String = String.Empty Dim sSQL As String = String.Empty
Dim hshList As New Hashtable Dim oList As New OrderedDictionary
Dim oGame As clsGame Dim oGame As clsGame
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
Dim iCounter As Integer = 0 Dim iCounter As Integer = 0
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams) sSQL = BuildFilterQuery(oTagFilters, oFilters, eFilterType, bAndOperator, bSortAsc, sSortField, hshParams)
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = MapToObject(dr) oGame = MapToObject(dr)
hshList.Add(oGame.ID, oGame) oList.Add(oGame.ID, oGame)
Next Next
Return hshList Return oList
End Function End Function
'Import / Export Functions 'Import / Export Functions
Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game) Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal oFilters As List(Of clsGameFilter), ByVal eFilterType As frmFilter.eFilterType, ByVal bAndOperator As Boolean,
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 oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String = String.Empty Dim sSQL As String = String.Empty
@@ -592,7 +616,7 @@ Public Class mgrMonitorList
Dim oGame As Game Dim oGame As Game
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams) sSQL = BuildFilterQuery(oTagFilters, oFilters, eFilterType, bAndOperator, bSortAsc, sSortField, hshParams)
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -606,6 +630,7 @@ Public Class mgrMonitorList
oGame.FolderSave = CBool(dr("FolderSave")) oGame.FolderSave = CBool(dr("FolderSave"))
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType")) If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList")) If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter")) If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter"))
oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID) oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID)
oList.Add(oGame) oList.Add(oGame)
@@ -685,18 +710,24 @@ Public Class mgrMonitorList
Dim oList As List(Of Game) Dim oList As List(Of Game)
Dim bSuccess As Boolean = False Dim bSuccess As Boolean = False
Dim oTagFilters As New List(Of clsTag) Dim oTagFilters As New List(Of clsTag)
Dim oStringFilters As New Hashtable Dim oFilters As New List(Of clsGameFilter)
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.BaseFilter
Dim bAndOperator As Boolean = True
Dim bSortAsc As Boolean = True
Dim sSortField As String = "Name"
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmApplyFilter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(mgrMonitorList_ConfirmApplyFilter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Dim frm As New frmFilter Dim frm As New frmFilter
frm.ShowDialog() frm.ShowDialog()
oTagFilters = frm.TagFilters oTagFilters = frm.TagFilters
oStringFilters = frm.StringFilters oFilters = frm.GameFilters
eCurrentFilter = frm.FilterType eCurrentFilter = frm.FilterType
bAndOperator = frm.AndOperator
bSortAsc = frm.SortAsc
sSortField = frm.SortField
End If End If
oList = ReadListForExport(oTagFilters, oStringFilters, eCurrentFilter) oList = ReadListForExport(oTagFilters, oFilters, eCurrentFilter, bAndOperator, bSortAsc, sSortField)
bSuccess = mgrXML.SerializeAndExport(oList, sLocation) bSuccess = mgrXML.SerializeAndExport(oList, sLocation)
+1
View File
@@ -28,6 +28,7 @@ Public Class mgrXML
oGame.FolderSave = g.FolderSave oGame.FolderSave = g.FolderSave
oGame.FileType = g.FileType oGame.FileType = g.FileType
oGame.ExcludeList = g.ExcludeList oGame.ExcludeList = g.ExcludeList
oGame.MonitorOnly = g.MonitorOnly
oGame.Parameter = g.Parameter oGame.Parameter = g.Parameter
For Each t As Tag In g.Tags For Each t As Tag In g.Tags
oGame.ImportTags.Add(t) oGame.ImportTags.Add(t)
+2 -2
View File
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.3.*")> <Assembly: AssemblyVersion("1.0.4.*")>
<Assembly: AssemblyFileVersion("1.0.3.0")> <Assembly: AssemblyFileVersion("1.0.4.0")>
<Assembly: NeutralResourcesLanguageAttribute("en")> <Assembly: NeutralResourcesLanguageAttribute("en")>
+284 -32
View File
@@ -924,6 +924,15 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Add.
'''</summary>
Friend ReadOnly Property frmFilter_btnAddFilter() As String
Get
Return ResourceManager.GetString("frmFilter_btnAddFilter", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to &amp;OK. ''' Looks up a localized string similar to &amp;OK.
'''</summary> '''</summary>
@@ -942,6 +951,204 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Remove.
'''</summary>
Friend ReadOnly Property frmFilter_btnRemoveFilter() As String
Get
Return ResourceManager.GetString("frmFilter_btnRemoveFilter", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Disabled.
'''</summary>
Friend ReadOnly Property frmFilter_cboBoolFilterDisabled() As String
Get
Return ResourceManager.GetString("frmFilter_cboBoolFilterDisabled", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Enabled.
'''</summary>
Friend ReadOnly Property frmFilter_cboBoolFilterEnabled() As String
Get
Return ResourceManager.GetString("frmFilter_cboBoolFilterEnabled", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Game Information.
'''</summary>
Friend ReadOnly Property frmFilter_chkGameInfo() As String
Get
Return ResourceManager.GetString("frmFilter_chkGameInfo", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Tag.
'''</summary>
Friend ReadOnly Property frmFilter_chkTag() As String
Get
Return ResourceManager.GetString("frmFilter_chkTag", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Backup Limit *.
'''</summary>
Friend ReadOnly Property frmFilter_FieldBackupLimit() As String
Get
Return ResourceManager.GetString("frmFilter_FieldBackupLimit", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Delete Folder on Restore.
'''</summary>
Friend ReadOnly Property frmFilter_FieldCleanFolder() As String
Get
Return ResourceManager.GetString("frmFilter_FieldCleanFolder", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Company.
'''</summary>
Friend ReadOnly Property frmFilter_FieldCompany() As String
Get
Return ResourceManager.GetString("frmFilter_FieldCompany", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Monitor Game.
'''</summary>
Friend ReadOnly Property frmFilter_FieldEnabled() As String
Get
Return ResourceManager.GetString("frmFilter_FieldEnabled", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Exclude Items.
'''</summary>
Friend ReadOnly Property frmFilter_FieldExcludeList() As String
Get
Return ResourceManager.GetString("frmFilter_FieldExcludeList", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Include Items.
'''</summary>
Friend ReadOnly Property frmFilter_FieldFileType() As String
Get
Return ResourceManager.GetString("frmFilter_FieldFileType", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Save Entire Folder.
'''</summary>
Friend ReadOnly Property frmFilter_FieldFolderSave() As String
Get
Return ResourceManager.GetString("frmFilter_FieldFolderSave", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Hours.
'''</summary>
Friend ReadOnly Property frmFilter_FieldHours() As String
Get
Return ResourceManager.GetString("frmFilter_FieldHours", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Icon.
'''</summary>
Friend ReadOnly Property frmFilter_FieldIcon() As String
Get
Return ResourceManager.GetString("frmFilter_FieldIcon", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Monitor Only.
'''</summary>
Friend ReadOnly Property frmFilter_FieldMonitorOnly() As String
Get
Return ResourceManager.GetString("frmFilter_FieldMonitorOnly", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Name.
'''</summary>
Friend ReadOnly Property frmFilter_FieldName() As String
Get
Return ResourceManager.GetString("frmFilter_FieldName", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Parameter.
'''</summary>
Friend ReadOnly Property frmFilter_FieldParameter() As String
Get
Return ResourceManager.GetString("frmFilter_FieldParameter", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Save Path *.
'''</summary>
Friend ReadOnly Property frmFilter_FieldPath() As String
Get
Return ResourceManager.GetString("frmFilter_FieldPath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Process.
'''</summary>
Friend ReadOnly Property frmFilter_FieldProcess() As String
Get
Return ResourceManager.GetString("frmFilter_FieldProcess", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Game Path.
'''</summary>
Friend ReadOnly Property frmFilter_FieldProcessPath() As String
Get
Return ResourceManager.GetString("frmFilter_FieldProcessPath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Save Multiple Backups.
'''</summary>
Friend ReadOnly Property frmFilter_FieldTimeStamp() As String
Get
Return ResourceManager.GetString("frmFilter_FieldTimeStamp", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Version.
'''</summary>
Friend ReadOnly Property frmFilter_FieldVersion() As String
Get
Return ResourceManager.GetString("frmFilter_FieldVersion", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Custom Filter. ''' Looks up a localized string similar to Custom Filter.
'''</summary> '''</summary>
@@ -952,11 +1159,29 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Options. ''' Looks up a localized string similar to Filter Type.
'''</summary> '''</summary>
Friend ReadOnly Property frmFilter_grpGameInfoOptions() As String Friend ReadOnly Property frmFilter_grpFilterType() As String
Get Get
Return ResourceManager.GetString("frmFilter_grpGameInfoOptions", resourceCulture) Return ResourceManager.GetString("frmFilter_grpFilterType", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Sorting.
'''</summary>
Friend ReadOnly Property frmFilter_grpSorting() As String
Get
Return ResourceManager.GetString("frmFilter_grpSorting", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Sort Options.
'''</summary>
Friend ReadOnly Property frmFilter_grpSortOptions() As String
Get
Return ResourceManager.GetString("frmFilter_grpSortOptions", resourceCulture)
End Get End Get
End Property End Property
@@ -970,11 +1195,29 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Company:. ''' Looks up a localized string similar to Current Filters.
'''</summary> '''</summary>
Friend ReadOnly Property frmFilter_lblCompany() As String Friend ReadOnly Property frmFilter_lblCurrentFilters() As String
Get Get
Return ResourceManager.GetString("frmFilter_lblCompany", resourceCulture) Return ResourceManager.GetString("frmFilter_lblCurrentFilters", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Available Fields.
'''</summary>
Friend ReadOnly Property frmFilter_lblFields() As String
Get
Return ResourceManager.GetString("frmFilter_lblFields", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Filter.
'''</summary>
Friend ReadOnly Property frmFilter_lblFilterData() As String
Get
Return ResourceManager.GetString("frmFilter_lblFilterData", resourceCulture)
End Get End Get
End Property End Property
@@ -988,20 +1231,11 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Name:. ''' Looks up a localized string similar to Available Fields.
'''</summary> '''</summary>
Friend ReadOnly Property frmFilter_lblName() As String Friend ReadOnly Property frmFilter_lblSortsFields() As String
Get Get
Return ResourceManager.GetString("frmFilter_lblName", resourceCulture) Return ResourceManager.GetString("frmFilter_lblSortsFields", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Process:.
'''</summary>
Friend ReadOnly Property frmFilter_lblProcess() As String
Get
Return ResourceManager.GetString("frmFilter_lblProcess", resourceCulture)
End Get End Get
End Property End Property
@@ -1014,6 +1248,24 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to * Indicates a field that may give unexpected results..
'''</summary>
Friend ReadOnly Property frmFilter_lblWarning() As String
Get
Return ResourceManager.GetString("frmFilter_lblWarning", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to contains.
'''</summary>
Friend ReadOnly Property frmFilter_lstFilterContains() As String
Get
Return ResourceManager.GetString("frmFilter_lstFilterContains", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to All Tags. ''' Looks up a localized string similar to All Tags.
'''</summary> '''</summary>
@@ -1024,7 +1276,7 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to And. ''' Looks up a localized string similar to All.
'''</summary> '''</summary>
Friend ReadOnly Property frmFilter_optAnd() As String Friend ReadOnly Property frmFilter_optAnd() As String
Get Get
@@ -1042,16 +1294,7 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Game Information. ''' Looks up a localized string similar to Any.
'''</summary>
Friend ReadOnly Property frmFilter_optGameInfo() As String
Get
Return ResourceManager.GetString("frmFilter_optGameInfo", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Or.
'''</summary> '''</summary>
Friend ReadOnly Property frmFilter_optOr() As String Friend ReadOnly Property frmFilter_optOr() As String
Get Get
@@ -1060,11 +1303,20 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Tag. ''' Looks up a localized string similar to Ascending.
'''</summary> '''</summary>
Friend ReadOnly Property frmFilter_optTag() As String Friend ReadOnly Property frmFilter_optSortAsc() As String
Get Get
Return ResourceManager.GetString("frmFilter_optTag", resourceCulture) Return ResourceManager.GetString("frmFilter_optSortAsc", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Descending.
'''</summary>
Friend ReadOnly Property frmFilter_optSortDesc() As String
Get
Return ResourceManager.GetString("frmFilter_optSortDesc", resourceCulture)
End Get End Get
End Property End Property
+99 -15
View File
@@ -895,18 +895,9 @@
<data name="frmFilter_FormName" xml:space="preserve"> <data name="frmFilter_FormName" xml:space="preserve">
<value>Custom Filter</value> <value>Custom Filter</value>
</data> </data>
<data name="frmFilter_lblCompany" xml:space="preserve">
<value>Company:</value>
</data>
<data name="frmFilter_lblGameTags" xml:space="preserve"> <data name="frmFilter_lblGameTags" xml:space="preserve">
<value>Current Filter</value> <value>Current Filter</value>
</data> </data>
<data name="frmFilter_lblName" xml:space="preserve">
<value>Name:</value>
</data>
<data name="frmFilter_lblProcess" xml:space="preserve">
<value>Process:</value>
</data>
<data name="frmFilter_lblTags" xml:space="preserve"> <data name="frmFilter_lblTags" xml:space="preserve">
<value>Available Tags</value> <value>Available Tags</value>
</data> </data>
@@ -914,18 +905,18 @@
<value>All Tags</value> <value>All Tags</value>
</data> </data>
<data name="frmFilter_optAnd" xml:space="preserve"> <data name="frmFilter_optAnd" xml:space="preserve">
<value>And</value> <value>All</value>
</data> </data>
<data name="frmFilter_optAny" xml:space="preserve"> <data name="frmFilter_optAny" xml:space="preserve">
<value>Any Tag</value> <value>Any Tag</value>
</data> </data>
<data name="frmFilter_optGameInfo" xml:space="preserve"> <data name="frmFilter_chkGameInfo" xml:space="preserve">
<value>Game Information</value> <value>Game Information</value>
</data> </data>
<data name="frmFilter_optOr" xml:space="preserve"> <data name="frmFilter_optOr" xml:space="preserve">
<value>Or</value> <value>Any</value>
</data> </data>
<data name="frmFilter_optTag" xml:space="preserve"> <data name="frmFilter_chkTag" xml:space="preserve">
<value>Tag</value> <value>Tag</value>
</data> </data>
<data name="frmGameTags_btnAdd" xml:space="preserve"> <data name="frmGameTags_btnAdd" xml:space="preserve">
@@ -1015,8 +1006,8 @@
<data name="frmIncludeExclude_ToolTipTitle" xml:space="preserve"> <data name="frmIncludeExclude_ToolTipTitle" xml:space="preserve">
<value>Saved Game Explorer</value> <value>Saved Game Explorer</value>
</data> </data>
<data name="frmFilter_grpGameInfoOptions" xml:space="preserve"> <data name="frmFilter_grpFilterType" xml:space="preserve">
<value>Options</value> <value>Filter Type</value>
</data> </data>
<data name="frmFilter_grpTagOptions" xml:space="preserve"> <data name="frmFilter_grpTagOptions" xml:space="preserve">
<value>Options</value> <value>Options</value>
@@ -1801,4 +1792,97 @@
<data name="App_ErrorFocus" xml:space="preserve"> <data name="App_ErrorFocus" xml:space="preserve">
<value>GBM is busy with an open window on your desktop.</value> <value>GBM is busy with an open window on your desktop.</value>
</data> </data>
<data name="frmFilter_grpSorting" xml:space="preserve">
<value>Sorting</value>
</data>
<data name="frmFilter_optSortAsc" xml:space="preserve">
<value>Ascending</value>
</data>
<data name="frmFilter_optSortDesc" xml:space="preserve">
<value>Descending</value>
</data>
<data name="frmFilter_FieldCompany" xml:space="preserve">
<value>Company</value>
</data>
<data name="frmFilter_FieldHours" xml:space="preserve">
<value>Hours</value>
</data>
<data name="frmFilter_FieldName" xml:space="preserve">
<value>Name</value>
</data>
<data name="frmFilter_FieldProcess" xml:space="preserve">
<value>Process</value>
</data>
<data name="frmFilter_btnAddFilter" xml:space="preserve">
<value>Add</value>
</data>
<data name="frmFilter_btnRemoveFilter" xml:space="preserve">
<value>Remove</value>
</data>
<data name="frmFilter_FieldParameter" xml:space="preserve">
<value>Parameter</value>
</data>
<data name="frmFilter_FieldVersion" xml:space="preserve">
<value>Version</value>
</data>
<data name="frmFilter_lblCurrentFilters" xml:space="preserve">
<value>Current Filters</value>
</data>
<data name="frmFilter_lblFields" xml:space="preserve">
<value>Available Fields</value>
</data>
<data name="frmFilter_lblFilterData" xml:space="preserve">
<value>Filter</value>
</data>
<data name="frmFilter_cboBoolFilterDisabled" xml:space="preserve">
<value>Disabled</value>
</data>
<data name="frmFilter_cboBoolFilterEnabled" xml:space="preserve">
<value>Enabled</value>
</data>
<data name="frmFilter_FieldBackupLimit" xml:space="preserve">
<value>Backup Limit *</value>
</data>
<data name="frmFilter_FieldCleanFolder" xml:space="preserve">
<value>Delete Folder on Restore</value>
</data>
<data name="frmFilter_FieldEnabled" xml:space="preserve">
<value>Monitor Game</value>
</data>
<data name="frmFilter_FieldExcludeList" xml:space="preserve">
<value>Exclude Items</value>
</data>
<data name="frmFilter_FieldFileType" xml:space="preserve">
<value>Include Items</value>
</data>
<data name="frmFilter_FieldFolderSave" xml:space="preserve">
<value>Save Entire Folder</value>
</data>
<data name="frmFilter_FieldIcon" xml:space="preserve">
<value>Icon</value>
</data>
<data name="frmFilter_FieldMonitorOnly" xml:space="preserve">
<value>Monitor Only</value>
</data>
<data name="frmFilter_FieldPath" xml:space="preserve">
<value>Save Path *</value>
</data>
<data name="frmFilter_FieldProcessPath" xml:space="preserve">
<value>Game Path</value>
</data>
<data name="frmFilter_FieldTimeStamp" xml:space="preserve">
<value>Save Multiple Backups</value>
</data>
<data name="frmFilter_lblSortsFields" xml:space="preserve">
<value>Available Fields</value>
</data>
<data name="frmFilter_lblWarning" xml:space="preserve">
<value>* Indicates a field that may give unexpected results.</value>
</data>
<data name="frmFilter_lstFilterContains" xml:space="preserve">
<value>contains</value>
</data>
<data name="frmFilter_grpSortOptions" xml:space="preserve">
<value>Sort Options</value>
</data>
</root> </root>
+13 -7
View File
@@ -1,14 +1,20 @@
Game Backup Monitor v1.03 Readme Game Backup Monitor v1.04 Readme
http://mikemaximus.github.io/gbm-web/ http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com gamebackupmonitor@gmail.com
August 2, 2017 September 26, 2017
New in 1.03 New in 1.04
- (Windows) You can no longer Alt-Tab to GBM while it's minimized to the system tray. This was an unintentional change in v1.02 and caused various bugs. - (All) The import feature now detects most saved games currently on your PC and automatically selects configurations for you.
- (Windows) Fixed various issues and inconsistent behavior when using the system tray and menu. - (All) The Game Manager's "Custom Filter" feature has received a major overhaul:
- (Linux) Free drive space is now checked correctly when performing a backup. GBM now requires "df" (Coreutils) on Linux. - More fields are now available for use.
- (All) Error messages related to SQLite will now be displayed correctly, instead of forcing the application to exit. - Added the ability to combine different filters.
- Added the ability to set a sort field and order.
- The current filter is now saved when the Custom Filter window is closed and re-opened.
- (All) The "Monitor Only" feature has been updated. This feature allows tracking play time for games that do not require a backup, such as MMOs or CCGs.
- The Game Manager now disables and ignores validation on fields that aren't needed for a Monitor Only configuration.
- Monitor Only is now included in the XML Import / Export.
- Monitor Only configurations may now be included in the official game lists.
The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html