Usability updates for filters and wizards

This commit is contained in:
Michael J. Seiferling
2015-12-05 21:27:53 -06:00
parent 80badb577a
commit d26c78c093
5 changed files with 123 additions and 85 deletions
+18 -9
View File
@@ -194,24 +194,23 @@ Public Class frmAddWizard
End Function End Function
Private Sub DoSave() Private Sub DoSave()
Dim oGames As New List(Of clsGame)
Dim hshDupeCheck As New Hashtable Dim hshDupeCheck As New Hashtable
Dim sExistingGame As String Dim sNewGame As String = oGameToSave.ProcessName & ":" & oGameToSave.Name
Dim sNewGame As String = oGameToSave.Name & ":" & oGameToSave.ProcessName
For Each o As clsGame In GameData.Values For Each o As clsGame In GameData.Values
oGames.Add(o) hshDupeCheck.Add(o.CompoundKey, String.Empty)
sExistingGame = o.Name & ":" & o.ProcessName
hshDupeCheck.Add(sExistingGame, String.Empty)
Next Next
If hshDupeCheck.Contains(sNewGame) Then If hshDupeCheck.Contains(sNewGame) Then
MsgBox("The monitor list already contains a game with this exact name and process.", MsgBoxStyle.Exclamation, "Game Backup Monitor") MsgBox("A game with this exact name and process already exists.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
Else Else
mgrMonitorList.DoListAdd(oGameToSave) mgrMonitorList.DoListAdd(oGameToSave)
MsgBox(oGameToSave.Name & " has been added to the monitor list.", MsgBoxStyle.Exclamation, "Game Backup Monitor") If MsgBox(oGameToSave.Name & " has been saved." & vbCrLf & vbCrLf &
"Would you like to add tags for " & oGameToSave.Name & "?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
OpenTags(oGameToSave)
End If
Me.Close() Me.Close()
End If End If
End Sub End Sub
Private Sub ValidateBack() Private Sub ValidateBack()
@@ -397,6 +396,16 @@ Public Class frmAddWizard
txtBox.Text = frm.BuilderString txtBox.Text = frm.BuilderString
End Sub End Sub
Private Sub OpenTags(ByVal oGame As clsGame)
Dim frm As New frmGameTags
Dim sMonitorIDs As New List(Of String)
sMonitorIDs.Add(oGame.ID)
frm.IDList = sMonitorIDs
frm.GameName = oGame.Name
frm.ShowDialog()
End Sub
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
ValidateBack() ValidateBack()
End Sub End Sub
+10 -6
View File
@@ -1,12 +1,14 @@
Public Class frmFilter Public Class frmFilter
Public Enum eFilterType As Integer Public Enum eFilterType As Integer
Any = 1 NoFilter = 1
All = 2 AnyTag = 2
AllTags = 3
NoTags = 4
End Enum End Enum
Dim oFilters As New List(Of clsTag) Dim oFilters As New List(Of clsTag)
Dim eCurrentFilterType As eFilterType = eFilterType.Any Dim eCurrentFilterType As eFilterType = eFilterType.AnyTag
Dim hshTags As New Hashtable Dim hshTags As New Hashtable
Dim bShutdown As Boolean = False Dim bShutdown As Boolean = False
@@ -103,10 +105,12 @@
Next Next
'Set Filter Type 'Set Filter Type
If optAll.Checked Then If Filters.Count = 0 Then
eCurrentFilterType = eFilterType.All eCurrentFilterType = eFilterType.NoTags
ElseIf optAll.Checked Then
eCurrentFilterType = eFilterType.AllTags
Else Else
eCurrentFilterType = eFilterType.Any eCurrentFilterType = eFilterType.AnyTag
End If End If
End Sub End Sub
+28 -11
View File
@@ -16,6 +16,8 @@ Public Class frmGameManager
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 oCurrentFilters As New List(Of clsTag)
Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
Private Enum eModes As Integer Private Enum eModes As Integer
View = 1 View = 1
@@ -201,22 +203,25 @@ Public Class frmGameManager
End If End If
End Sub End Sub
Private Sub LoadData() Private Sub LoadData(Optional ByVal bRetainFilter As Boolean = True)
Dim oRestoreData As New SortedList Dim oRestoreData As New SortedList
Dim oGame As clsGame Dim oGame As clsGame
Dim oBackup As clsBackup Dim oBackup As clsBackup
Dim frm As frmFilter Dim frm As frmFilter
Dim oFilters As New List(Of clsTag)
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.Any
If optTag.Checked Then If optTag.Checked Then
frm = New frmFilter If Not bRetainFilter Then
frm.ShowDialog() frm = New frmFilter
oFilters = frm.Filters frm.ShowDialog()
eCurrentFilter = frm.FilterType oCurrentFilters = frm.Filters
eCurrentFilter = frm.FilterType
End If
Else
oCurrentFilters.Clear()
eCurrentFilter = frmFilter.eFilterType.NoFilter
End If End If
AppData = mgrMonitorList.ReadFilteredList(oFilters, eCurrentFilter) AppData = mgrMonitorList.ReadFilteredList(oCurrentFilters, eCurrentFilter)
If optPendingRestores.Checked Then If optPendingRestores.Checked Then
oRestoreData = mgrRestore.CompareManifests oRestoreData = mgrRestore.CompareManifests
@@ -492,7 +497,18 @@ Public Class frmGameManager
frm.IDList = sMonitorIDs frm.IDList = sMonitorIDs
frm.GameName = CurrentGame.Name frm.GameName = CurrentGame.Name
frm.ShowDialog() frm.ShowDialog()
FillTags(CurrentGame.ID)
'Only update visible tags if one item is selected
If lstGames.SelectedItems.Count = 1 Then FillTags(CurrentGame.ID)
'If a tag filter is enabled, reload list to reflect changes
If optTag.Checked Then
LoadData()
End If
'If the selected game(s) no longer match the filter, disable the form
If lstGames.SelectedIndex = -1 Then eCurrentMode = eModes.Disabled
ModeChange()
End Sub End Sub
Private Sub GetBackupInfo(ByVal oApp As clsGame) Private Sub GetBackupInfo(ByVal oApp As clsGame)
@@ -801,7 +817,6 @@ Public Class frmGameManager
WipeControls(grpExtra.Controls) WipeControls(grpExtra.Controls)
WipeControls(grpStats.Controls) WipeControls(grpStats.Controls)
pbIcon.Image = My.Resources.Unknown pbIcon.Image = My.Resources.Unknown
lblTags.Text = String.Empty
lblSync.Visible = False lblSync.Visible = False
btnSave.Enabled = False btnSave.Enabled = False
btnCancel.Enabled = False btnCancel.Enabled = False
@@ -816,6 +831,7 @@ Public Class frmGameManager
btnRestore.Enabled = False btnRestore.Enabled = False
btnMarkAsRestored.Enabled = False btnMarkAsRestored.Enabled = False
btnTags.Enabled = False btnTags.Enabled = False
lblTags.Visible = False
btnInclude.Text = "In&clude Items..." btnInclude.Text = "In&clude Items..."
btnExclude.Text = "E&xclude Items..." btnExclude.Text = "E&xclude Items..."
Case eModes.MultiSelect Case eModes.MultiSelect
@@ -840,6 +856,7 @@ Public Class frmGameManager
btnRestore.Enabled = True btnRestore.Enabled = True
btnMarkAsRestored.Enabled = True btnMarkAsRestored.Enabled = True
btnTags.Enabled = True btnTags.Enabled = True
lblTags.Visible = False
End Select End Select
IsLoading = False IsLoading = False
@@ -1257,7 +1274,7 @@ Public Class frmGameManager
lstGames.ClearSelected() lstGames.ClearSelected()
eCurrentMode = eModes.Disabled eCurrentMode = eModes.Disabled
ModeChange() ModeChange()
LoadData() LoadData(False)
End Sub End Sub
Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click
+2 -2
View File
@@ -72,7 +72,7 @@ Public Class frmStartUpWizard
Private Sub DownloadSettings() Private Sub DownloadSettings()
If MsgBox("Would you like to import from the latest pre-configured game list?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then If MsgBox("Would you like to import from the latest pre-configured game list?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
If mgrMonitorList.DoImport(mgrPath.OfficialImportURL) Then If mgrMonitorList.DoImport(mgrPath.OfficialImportURL) Then
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.ScanList) oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
End If End If
End If End If
@@ -80,7 +80,7 @@ Public Class frmStartUpWizard
Private Sub LoadGameSettings() Private Sub LoadGameSettings()
'Load Game XML 'Load Game XML
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.ScanList) oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
End Sub End Sub
Private Sub OpenGameWizard() Private Sub OpenGameWizard()
+65 -57
View File
@@ -39,12 +39,19 @@ Public Class mgrMonitorList
End Sub End Sub
Public Shared Sub ExportMonitorList(ByVal sLocation As String) Public Shared Sub ExportMonitorList(ByVal sLocation As String)
Dim frm As New frmFilter
Dim oList As List(Of Game) Dim oList As List(Of Game)
Dim bSuccess As Boolean = False Dim bSuccess As Boolean = False
Dim oFilters As New List(Of clsTag)
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
frm.ShowDialog() If MsgBox("Would you like to apply a filter to your export?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
oList = ReadListForExport(frm.Filters, frm.FilterType) Dim frm As New frmFilter
frm.ShowDialog()
oFilters = frm.Filters
eCurrentFilter = frm.FilterType
End If
oList = ReadListForExport(oFilters, eCurrentFilter)
bSuccess = mgrXML.SerializeAndExport(oList, sLocation) bSuccess = mgrXML.SerializeAndExport(oList, sLocation)
@@ -266,37 +273,38 @@ Public Class mgrMonitorList
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
Dim iCounter As Integer = 0 Dim iCounter As Integer = 0
If oFilters.Count > 0 Then
Select Case eFilterType
Case frmFilter.eFilterType.Any
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
For Each oTag As clsTag In oFilters Select Case eFilterType
sSQL &= "@TagID" & iCounter & "," Case frmFilter.eFilterType.NoFilter
hshParams.Add("TagID" & iCounter, oTag.ID) sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc"
iCounter += 1 Case frmFilter.eFilterType.AnyTag
Next sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
sSQL = sSQL.TrimEnd(",") For Each oTag As clsTag In oFilters
sSQL &= ") ORDER BY Name Asc" sSQL &= "@TagID" & iCounter & ","
Case frmFilter.eFilterType.All hshParams.Add("TagID" & iCounter, oTag.ID)
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN " iCounter += 1
Next
For Each oTag As clsTag In oFilters sSQL = sSQL.TrimEnd(",")
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")" sSQL &= ") ORDER BY Name Asc"
If iCounter <> oFilters.Count - 1 Then Case frmFilter.eFilterType.AllTags
sSQL &= " AND MonitorID IN " sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN "
End If
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL &= " ORDER BY Name Asc" For Each oTag As clsTag In oFilters
End Select sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
Else If iCounter <> oFilters.Count - 1 Then
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc" sSQL &= " AND MonitorID IN "
End If End If
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL &= " ORDER BY Name Asc"
Case frmFilter.eFilterType.NoTags
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags) ORDER BY Name Asc"
End Select
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -382,37 +390,37 @@ Public Class mgrMonitorList
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
Dim iCounter As Integer = 0 Dim iCounter As Integer = 0
If oFilters.Count > 0 Then Select Case eFilterType
Select Case eFilterType Case frmFilter.eFilterType.NoFilter
Case frmFilter.eFilterType.Any sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc"
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist " Case frmFilter.eFilterType.AnyTag
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN (" sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
For Each oTag As clsTag In oFilters For Each oTag As clsTag In oFilters
sSQL &= "@TagID" & iCounter & "," sSQL &= "@TagID" & iCounter & ","
hshParams.Add("TagID" & iCounter, oTag.ID) hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1 iCounter += 1
Next Next
sSQL = sSQL.TrimEnd(",") sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc" sSQL &= ") ORDER BY Name Asc"
Case frmFilter.eFilterType.All Case frmFilter.eFilterType.AllTags
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN " sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN "
For Each oTag As clsTag In oFilters For Each oTag As clsTag In oFilters
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")" sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
If iCounter <> oFilters.Count - 1 Then If iCounter <> oFilters.Count - 1 Then
sSQL &= " AND MonitorID IN " sSQL &= " AND MonitorID IN "
End If End If
hshParams.Add("TagID" & iCounter, oTag.ID) hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1 iCounter += 1
Next Next
sSQL &= " ORDER BY Name Asc" sSQL &= " ORDER BY Name Asc"
End Select Case frmFilter.eFilterType.NoTags
Else sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags) ORDER BY Name Asc"
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc" End Select
End If
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)