diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 076c8f4..282c3fc 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -7,6 +7,7 @@ Public Class frmGameManager Private bPendingRestores As Boolean = False Private oCurrentBackupItem As clsBackup Private oCurrentGame As clsGame + Private oTagsToSave As New List(Of KeyValuePair(Of String, String)) Private bDisableExternalFunctions As Boolean = False Private bTriggerBackup As Boolean = False Private bTriggerRestore As Boolean = False @@ -526,26 +527,41 @@ Public Class frmGameManager Dim oApp As clsGame Dim sMonitorIDs As New List(Of String) - For Each oData In lstGames.SelectedItems - oApp = DirectCast(AppData(oData.Key), clsGame) - sMonitorIDs.Add(oApp.ID) - Next - - frm.IDList = sMonitorIDs - frm.GameName = CurrentGame.Name - frm.ShowDialog() - - '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 optCustom.Checked Then - LoadData() + If eCurrentMode = eModes.Add Then + 'Use a dummy ID + sMonitorIDs.Add(Guid.NewGuid.ToString) + frm.GameName = txtName.Text + frm.NewMode = True + frm.TagList = oTagsToSave + Else + For Each oData In lstGames.SelectedItems + oApp = DirectCast(AppData(oData.Key), clsGame) + sMonitorIDs.Add(oApp.ID) + Next + frm.GameName = CurrentGame.Name + frm.NewMode = False + End If + + frm.IDList = sMonitorIDs + frm.ShowDialog() + + If eCurrentMode = eModes.Add Then + oTagsToSave = frm.TagList + FillTagsbyList(frm.TagList) + Else + 'Only update visible tags if one item is selected + If lstGames.SelectedItems.Count = 1 Then FillTagsbyID(CurrentGame.ID) + + 'If a tag filter is enabled, reload list to reflect changes + If optCustom.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 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 Private Sub UpdateBackupInfo(ByVal sManifestID As String) @@ -731,7 +747,7 @@ Public Class frmGameManager txtVersion.Text = oApp.Version txtIcon.Text = oApp.Icon - FillTags(oData.Key) + FillTagsbyID(oData.Key) 'Icon If IO.File.Exists(oApp.Icon) Then @@ -756,7 +772,7 @@ Public Class frmGameManager IsLoading = False End Sub - Private Sub FillTags(ByVal sID As String) + Private Sub FillTagsbyID(ByVal sID As String) Dim hshTags As Hashtable Dim oTag As clsTag Dim sTags As String = String.Empty @@ -772,6 +788,17 @@ Public Class frmGameManager lblTags.Text = sTags.TrimEnd(cTrim) End Sub + Private Sub FillTagsbyList(ByVal oList As List(Of KeyValuePair(Of String, String))) + Dim sTags As String = String.Empty + Dim cTrim() As Char = {",", " "} + + For Each kp As KeyValuePair(Of String, String) In oList + sTags &= "#" & kp.Value & ", " + Next + + lblTags.Text = sTags.TrimEnd(cTrim) + End Sub + Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs) If Not IsLoading And Not eCurrentMode = eModes.MultiSelect Then IsDirty = True @@ -817,6 +844,7 @@ Public Class frmGameManager Select Case eCurrentMode Case eModes.Add + oTagsToSave.Clear() grpFilter.Enabled = False lstGames.Enabled = False lblQuickFilter.Enabled = False @@ -844,8 +872,9 @@ Public Class frmGameManager btnOpenRestorePath.Enabled = False chkEnabled.Checked = True chkMonitorOnly.Checked = False - btnTags.Enabled = False - lblTags.Visible = False + btnTags.Enabled = True + lblTags.Text = String.Empty + lblTags.Visible = True btnInclude.Text = frmGameManager_btnInclude btnExclude.Text = frmGameManager_btnExclude btnImport.Enabled = False @@ -1053,6 +1082,22 @@ Public Class frmGameManager End If End Sub + Private Sub SaveTags(ByVal sID As String) + Dim oGameTag As clsGameTag + Dim oGameTags As List(Of clsGameTag) + + If oTagsToSave.Count > 0 Then + oGameTags = New List(Of clsGameTag) + For Each kp As KeyValuePair(Of String, String) In oTagsToSave + oGameTag = New clsGameTag + oGameTag.MonitorID = sID + oGameTag.TagID = kp.Key + oGameTags.Add(oGameTag) + Next + mgrGameTags.DoGameTagAddBatch(oGameTags) + End If + End Sub + Private Sub SaveApp() Dim oData As KeyValuePair(Of String, String) Dim oApp As New clsGame @@ -1093,6 +1138,7 @@ Public Class frmGameManager If CoreValidatation(oApp) Then bSuccess = True mgrMonitorList.DoListAdd(oApp) + SaveTags(oApp.ID) eCurrentMode = eModes.View End If Case eModes.Edit diff --git a/GBM/Forms/frmGameTags.vb b/GBM/Forms/frmGameTags.vb index 0f58d0d..737147c 100644 --- a/GBM/Forms/frmGameTags.vb +++ b/GBM/Forms/frmGameTags.vb @@ -2,8 +2,10 @@ Public Class frmGameTags - Dim sMonitorIDs As List(Of String) - Dim sGameName As String = String.Empty + Private sMonitorIDs As List(Of String) + Private sGameName As String = String.Empty + Private bNewMode As Boolean = False + Private oTagList As List(Of KeyValuePair(Of String, String)) Public Property IDList As List(Of String) Get @@ -23,6 +25,25 @@ Public Class frmGameTags End Set End Property + Public Property NewMode As Boolean + Get + Return bNewMode + End Get + Set(value As Boolean) + bNewMode = value + End Set + End Property + + Public Property TagList As List(Of KeyValuePair(Of String, String)) + Get + Return oTagList + End Get + Set(value As List(Of KeyValuePair(Of String, String))) + oTagList = value + End Set + End Property + + Private Sub AddTag() Dim oData As KeyValuePair(Of String, String) Dim oTags As List(Of KeyValuePair(Of String, String)) @@ -40,7 +61,7 @@ Public Class frmGameTags oGameTags.Add(oGameTag) Next - mgrGameTags.DoGameTagAddBatch(oGameTags) + If Not bNewMode Then mgrGameTags.DoGameTagAddBatch(oGameTags) lstGameTags.Items.Add(oData) lstTags.Items.Remove(oData) @@ -60,7 +81,7 @@ Public Class frmGameTags oGameTags.Add(oGameTag) Next - mgrGameTags.DoGameTagAddBatch(oGameTags) + If Not bNewMode Then mgrGameTags.DoGameTagAddBatch(oGameTags) lstGameTags.Items.Add(kp) lstTags.Items.Remove(kp) @@ -86,12 +107,12 @@ Public Class frmGameTags oGameTags.Add(oGameTag) Next - mgrGameTags.DoGameTagDelete(oGameTags) + If Not bNewMode Then mgrGameTags.DoGameTagDelete(oGameTags) lstGameTags.Items.Remove(oData) - lstTags.Items.Add(oData) - ElseIf lstGameTags.SelectedItems.Count > 1 Then - oTags = New List(Of KeyValuePair(Of String, String)) + lstTags.Items.Add(oData) + ElseIf lstGameTags.SelectedItems.Count > 1 Then + oTags = New List(Of KeyValuePair(Of String, String)) For Each oData In lstGameTags.SelectedItems oTags.Add(oData) @@ -106,7 +127,7 @@ Public Class frmGameTags oGameTags.Add(oGameTag) Next - mgrGameTags.DoGameTagDelete(oGameTags) + If Not bNewMode Then mgrGameTags.DoGameTagDelete(oGameTags) lstGameTags.Items.Remove(kp) lstTags.Items.Add(kp) @@ -121,16 +142,8 @@ Public Class frmGameTags Dim oTag As clsTag Dim oData As KeyValuePair(Of String, String) - 'Handle Data + 'Load Tags hshTags = mgrTags.ReadTags() - hshGameTags = mgrGameTags.GetTagsByGameMulti(IDList) - - For Each de As DictionaryEntry In hshGameTags - oTag = DirectCast(de.Value, clsTag) - If hshTags.ContainsKey(oTag.Name) Then - hshTags.Remove(oTag.Name) - End If - Next 'Handle Lists lstTags.Items.Clear() @@ -141,11 +154,32 @@ Public Class frmGameTags lstGameTags.ValueMember = "Key" lstGameTags.DisplayMember = "Value" - For Each de As DictionaryEntry In hshGameTags - oTag = DirectCast(de.Value, clsTag) - oData = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name) - lstGameTags.Items.Add(oData) - Next + If bNewMode Then + For Each kp As KeyValuePair(Of String, String) In oTagList + If hshTags.ContainsKey(kp.Value) Then + hshTags.Remove(kp.Value) + End If + Next + + For Each kp As KeyValuePair(Of String, String) In oTagList + lstGameTags.Items.Add(kp) + Next + Else + hshGameTags = mgrGameTags.GetTagsByGameMulti(IDList) + + For Each de As DictionaryEntry In hshGameTags + oTag = DirectCast(de.Value, clsTag) + If hshTags.ContainsKey(oTag.Name) Then + hshTags.Remove(oTag.Name) + End If + Next + + For Each de As DictionaryEntry In hshGameTags + oTag = DirectCast(de.Value, clsTag) + oData = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name) + lstGameTags.Items.Add(oData) + Next + End If For Each de As DictionaryEntry In hshTags oTag = DirectCast(de.Value, clsTag) @@ -155,6 +189,14 @@ Public Class frmGameTags End Sub + Private Sub BuildTagList() + Dim oData As KeyValuePair(Of String, String) + oTagList.Clear() + For Each oData In lstGameTags.Items + oTagList.Add(oData) + Next + End Sub + Private Sub OpenTags() Dim frm As New frmTags frm.ShowDialog() @@ -185,6 +227,7 @@ Public Class frmGameTags End Sub Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click + If bNewMode Then BuildTagList() Me.Close() End Sub