Imports System.Windows.Forms Public Class frmEditHymnTuneName Inherits BaseEditForm Private mobjDetailHymnTuneName As New clsHymnTuneName #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents lblHymnTuneName As Windows.Forms.Label Friend WithEvents txtHymnTuneName As Windows.Forms.TextBox Friend WithEvents grpAlternateTuneNames As Windows.Forms.GroupBox Friend WithEvents lstAlternateTuneNames As Windows.Forms.ListBox Friend WithEvents btnAddAlternateHymnTuneName As Windows.Forms.Button Friend WithEvents btnRemoveAlternateHymnTuneName As Windows.Forms.Button Private Sub InitializeComponent() Me.lblHymnTuneName = New Windows.Forms.Label Me.txtHymnTuneName = New Windows.Forms.TextBox Me.grpAlternateTuneNames = New Windows.Forms.GroupBox Me.btnRemoveAlternateHymnTuneName = New Windows.Forms.Button Me.btnAddAlternateHymnTuneName = New Windows.Forms.Button Me.lstAlternateTuneNames = New Windows.Forms.ListBox Me.fraAddEdit.SuspendLayout() Me.grpAlternateTuneNames.SuspendLayout() Me.SuspendLayout() ' 'fraAddEdit ' Me.fraAddEdit.Controls.Add(Me.grpAlternateTuneNames) Me.fraAddEdit.Controls.Add(Me.txtHymnTuneName) Me.fraAddEdit.Controls.Add(Me.lblHymnTuneName) Me.fraAddEdit.Location = New System.Drawing.Point(8, 300) Me.fraAddEdit.Size = New System.Drawing.Size(1072, 228) Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnTuneName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.txtHymnTuneName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.grpAlternateTuneNames, 0) ' 'lblHymnTuneName ' Me.lblHymnTuneName.Location = New System.Drawing.Point(16, 24) Me.lblHymnTuneName.Name = "lblHymnTuneName" Me.lblHymnTuneName.Size = New System.Drawing.Size(96, 16) Me.lblHymnTuneName.TabIndex = 3 Me.lblHymnTuneName.Text = "Hymn Tune Name" ' 'txtHymnTuneName ' Me.txtHymnTuneName.Location = New System.Drawing.Point(112, 24) Me.txtHymnTuneName.Name = "txtHymnTuneName" Me.txtHymnTuneName.Size = New System.Drawing.Size(448, 20) Me.txtHymnTuneName.TabIndex = 4 ' 'grpAlternateTuneNames ' Me.grpAlternateTuneNames.Controls.Add(Me.btnRemoveAlternateHymnTuneName) Me.grpAlternateTuneNames.Controls.Add(Me.btnAddAlternateHymnTuneName) Me.grpAlternateTuneNames.Controls.Add(Me.lstAlternateTuneNames) Me.grpAlternateTuneNames.Location = New System.Drawing.Point(8, 48) Me.grpAlternateTuneNames.Name = "grpAlternateTuneNames" Me.grpAlternateTuneNames.Size = New System.Drawing.Size(552, 168) Me.grpAlternateTuneNames.TabIndex = 5 Me.grpAlternateTuneNames.TabStop = False Me.grpAlternateTuneNames.Text = "Alternate Tune Names for this Tune" ' 'btnRemoveAlternateHymnTuneName ' Me.btnRemoveAlternateHymnTuneName.Location = New System.Drawing.Point(464, 48) Me.btnRemoveAlternateHymnTuneName.Name = "btnRemoveAlternateHymnTuneName" Me.btnRemoveAlternateHymnTuneName.Size = New System.Drawing.Size(80, 24) Me.btnRemoveAlternateHymnTuneName.TabIndex = 2 Me.btnRemoveAlternateHymnTuneName.Text = "Remove" ' 'btnAddAlternateHymnTuneName ' Me.btnAddAlternateHymnTuneName.Location = New System.Drawing.Point(464, 16) Me.btnAddAlternateHymnTuneName.Name = "btnAddAlternateHymnTuneName" Me.btnAddAlternateHymnTuneName.Size = New System.Drawing.Size(80, 24) Me.btnAddAlternateHymnTuneName.TabIndex = 1 Me.btnAddAlternateHymnTuneName.Text = "Add..." ' 'lstAlternateTuneNames ' Me.lstAlternateTuneNames.Location = New System.Drawing.Point(8, 16) Me.lstAlternateTuneNames.Name = "lstAlternateTuneNames" Me.lstAlternateTuneNames.Size = New System.Drawing.Size(440, 147) Me.lstAlternateTuneNames.TabIndex = 0 ' 'frmEditHymnTuneName ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(1088, 534) Me.Name = "frmEditHymnTuneName" Me.StartPosition = Windows.Forms.FormStartPosition.Manual Me.Text = "Edit Hymn Tune Name" Me.fraAddEdit.ResumeLayout(False) Me.fraAddEdit.PerformLayout() Me.grpAlternateTuneNames.ResumeLayout(False) Me.ResumeLayout(False) End Sub #End Region 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 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 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 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 = Windows.Forms.DialogResult.No Then Return False End If Return True End Function Protected Overrides Function DeleteExistingItem(ByVal lstvwItemToDelete As 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 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