Imports System.Windows.Forms Public Class frmEditHymnTuneName Private mobjDetailHymnTuneName As New clsHymnTuneName Protected Overrides Sub LoadExistingItemsList() Dim lobjHymnTuneName As clsHymnTuneName Dim lobjHymnTuneNames As System.Collections.Generic.List(Of clsHymnTuneName) SetUpExistingItemsHeaders() lobjHymnTuneNames = clsHymnTuneName.GetAllHymnTuneNames Me.ExistingItemsListSuspendLayout() For Each lobjHymnTuneName In lobjHymnTuneNames Me.ExistingObjectsListItems.Add(ConvertHymnTuneNameToListViewItem(lobjHymnTuneName)) Next Me.ExistingItemsListResumeLayout() End Sub Private Sub SetUpExistingItemsHeaders() Me.ExistingObjectsListColumns.Add("Hymn Tune Name", 800, HorizontalAlignment.Left) 'Me.ExistingObjectsListColumns.Add("Column2", 0, HorizontalAlignment.Left) 'Me.ExistingObjectsListColumns.Add("Column3", 200, HorizontalAlignment.Left) 'Set up sorting rules Dim lobjBaseEditFormColumnSortRules(0) As clsGridColumnSortRule lobjBaseEditFormColumnSortRules(0) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) MyBaseEditFormColumnSortRules = lobjBaseEditFormColumnSortRules End Sub Protected Overrides Sub InitializeDetailControls() 'Load data to detail controls here at form load time txtHymnTuneName.MaxLength = MyGlobals.HYMN_TUNE_NAME_SIZE End Sub Protected Overrides Sub SetFocusToFirstDetailControlForEdit() txtHymnTuneName.Focus() End Sub Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean Dim lobjSavedHymnTuneName As clsHymnTuneName Dim lblnReturnValue As Boolean = False lobjSavedHymnTuneName = CType(lstvwExistingItem.Tag, clsHymnTuneName) mobjDetailHymnTuneName.HymnTuneName = txtHymnTuneName.Text 'Alternate tune names should already be in mobjDetailHymnTuneName If lobjSavedHymnTuneName.StateIsIdentical(mobjDetailHymnTuneName) Then Return False Else Return True End If End Function Protected Overrides Function DetailControlsHaveSignificantData() As Boolean If txtHymnTuneName.Text.Trim.Length > 0 Then Return True End If Return False End Function Protected Overrides Sub EmptyOutDetailControls() txtHymnTuneName.Text = "" lstAlternateTuneNames.Items.Clear() mobjDetailHymnTuneName = New clsHymnTuneName End Sub Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean Dim lobjHymnTuneName As clsHymnTuneName Dim lblnReturnValue As Boolean = False lobjHymnTuneName = CType(lstvwExistingItem.Tag, clsHymnTuneName) lobjHymnTuneName.Refresh() txtHymnTuneName.Text = lobjHymnTuneName.HymnTuneName Dim objDictionaryEntry As DictionaryEntry Dim objOtherHymnTuneName As clsHymnTuneName For Each objDictionaryEntry In lobjHymnTuneName.OtherHymnTuneNamesForTune objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) lstAlternateTuneNames.Items.Add(objOtherHymnTuneName) Next mobjDetailHymnTuneName = CType(lobjHymnTuneName.Clone(), clsHymnTuneName) Return True End Function Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As System.Windows.Forms.ListViewItem) As Boolean Dim lobjHymnTuneName As clsHymnTuneName Dim lstrReferencedBy As String = "" lobjHymnTuneName = CType(lstvwItemToDelete.Tag, clsHymnTuneName) If Not lobjHymnTuneName.OKToDelete(lstrReferencedBy) Then MessageBox.Show("Can't delete hymn tune name: " + lobjHymnTuneName.HymnTuneName + ". Currently used by " + lstrReferencedBy + ".", "Unable to delete", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Return False End If Dim ldrDialogResult As DialogResult = MessageBox.Show("Are you sure you want to delete hymn tune name: " + lobjHymnTuneName.HymnTuneName + "?", "Delete confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) If ldrDialogResult = System.Windows.Forms.DialogResult.No Then Return False End If Return True End Function Protected Overrides Function DeleteExistingItem(ByVal lstvwItemToDelete As System.Windows.Forms.ListViewItem) As Boolean Dim lobjHymnTuneName As clsHymnTuneName lobjHymnTuneName = CType(lstvwItemToDelete.Tag, clsHymnTuneName) Return lobjHymnTuneName.Delete() End Function Protected Overrides Function SaveNewItem() As Boolean Dim lstrErrorString As String = "" mobjDetailHymnTuneName.HymnTuneName = txtHymnTuneName.Text 'Alternate tune names should already be in mobjDetailHymnTuneName If Not mobjDetailHymnTuneName.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailHymnTuneName.Save() Then Return False End If 'Refresh to pick up any other alternate hymn tune names that 'may have gotten added by adding an entry mobjDetailHymnTuneName.Refresh() Me.ExistingObjectsListItems.Add(ConvertHymnTuneNameToListViewItem(mobjDetailHymnTuneName)) Return True End Function Protected Overrides Sub UserRequestedToExit() Me.Close() End Sub Protected Overrides Sub EditOrAddStarting() CType(Me.ParentForm, frmMain).DisableMenus() End Sub Protected Overrides Sub EditOrAddCompleted() CType(Me.ParentForm, frmMain).EnableMenus() End Sub Private Function ConvertHymnTuneNameToListViewItem(ByVal lobjHymnTuneName As clsHymnTuneName) As ListViewItem Dim lobjItem As ListViewItem lobjItem = New ListViewItem(lobjHymnTuneName.HymnTuneName) 'lobjItem.SubItems.Add("Item1Col2") 'lobjItem.SubItems.Add("Item1Col3") lobjItem.Tag = lobjHymnTuneName Return lobjItem End Function Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean Dim lstrErrorString As String = "" mobjDetailHymnTuneName.HymnTuneName = txtHymnTuneName.Text If Not mobjDetailHymnTuneName.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailHymnTuneName.Save() Then Return False End If mobjDetailHymnTuneName.Refresh() Me.ExistingObjectsListItems.Remove(lstvwExistingItem) Me.ExistingObjectsListItems.Add(ConvertHymnTuneNameToListViewItem(mobjDetailHymnTuneName)) Return True End Function Private Sub txtHymnTuneName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnTuneName.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub btnAddAlternateHymnTuneName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddAlternateHymnTuneName.Click If txtHymnTuneName.Text.Trim.Length = 0 Then MessageBox.Show("Cannot add alternate hymn tune name when no hymn tune name has been entered") Exit Sub End If Dim objNewAlternateHymnTuneName As clsHymnTuneName mobjDetailHymnTuneName.HymnTuneName = txtHymnTuneName.Text.Trim objNewAlternateHymnTuneName = frmAddAlternateHymnTuneName.GetAlternateHymnTuneNameChosen(mobjDetailHymnTuneName) If objNewAlternateHymnTuneName Is Nothing Then 'User cancelled Else lstAlternateTuneNames.Items.Add(objNewAlternateHymnTuneName) mobjDetailHymnTuneName.AddAlternateHymnTuneName(objNewAlternateHymnTuneName) MyBase.DetailDataHasChanged() End If End Sub Private Sub btnRemoveAlternateHymnTuneName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveAlternateHymnTuneName.Click If txtHymnTuneName.Text.Trim.Length = 0 Then MessageBox.Show("Cannot remove alternate hymn tune name when no hymn tune name has been entered") Exit Sub End If If lstAlternateTuneNames.SelectedItems.Count = 0 Then MessageBox.Show("Must select an alternate hymn tune name to remove") Exit Sub End If Dim objHymnTuneNameToRemove As clsHymnTuneName objHymnTuneNameToRemove = CType(lstAlternateTuneNames.SelectedItem, clsHymnTuneName) mobjDetailHymnTuneName.RemoveAlternateHymnTuneName(objHymnTuneNameToRemove) lstAlternateTuneNames.Items.RemoveAt(lstAlternateTuneNames.SelectedIndex) MyBase.DetailDataHasChanged() End Sub End Class