Imports System.Windows.Forms Public Class frmEditHymn Inherits OrganLit.BaseEditForm Private mobjDetailHymn As New clsHymn Private m_objHymnTuneNamesHash As Hashtable #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 lblHymnName As Windows.Forms.Label Friend WithEvents txtHymnName As Windows.Forms.TextBox Friend WithEvents lblHymnTuneName As Windows.Forms.Label Friend WithEvents cboHymnTuneName As ComboTypeAhead.ComboTypeAhead Friend WithEvents lblHymnal As Windows.Forms.Label Friend WithEvents lblHymnNumber As Windows.Forms.Label Friend WithEvents txtHymnNumber As Windows.Forms.TextBox Friend WithEvents cboHymnal As Windows.Forms.ComboBox Private Sub InitializeComponent() Me.lblHymnName = New Windows.Forms.Label Me.txtHymnName = New Windows.Forms.TextBox Me.lblHymnal = New Windows.Forms.Label Me.lblHymnTuneName = New Windows.Forms.Label Me.cboHymnTuneName = New ComboTypeAhead.ComboTypeAhead Me.lblHymnNumber = New Windows.Forms.Label Me.txtHymnNumber = New Windows.Forms.TextBox Me.cboHymnal = New Windows.Forms.ComboBox Me.fraAddEdit.SuspendLayout() Me.SuspendLayout() ' 'fraAddEdit ' Me.fraAddEdit.Controls.Add(Me.cboHymnal) Me.fraAddEdit.Controls.Add(Me.txtHymnNumber) Me.fraAddEdit.Controls.Add(Me.lblHymnNumber) Me.fraAddEdit.Controls.Add(Me.cboHymnTuneName) Me.fraAddEdit.Controls.Add(Me.lblHymnTuneName) Me.fraAddEdit.Controls.Add(Me.lblHymnal) Me.fraAddEdit.Controls.Add(Me.txtHymnName) Me.fraAddEdit.Controls.Add(Me.lblHymnName) Me.fraAddEdit.Location = New System.Drawing.Point(10, 475) Me.fraAddEdit.Size = New System.Drawing.Size(1064, 117) Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.txtHymnName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnal, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnTuneName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.cboHymnTuneName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnNumber, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.txtHymnNumber, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.cboHymnal, 0) ' 'lblHymnName ' Me.lblHymnName.Location = New System.Drawing.Point(16, 64) Me.lblHymnName.Name = "lblHymnName" Me.lblHymnName.Size = New System.Drawing.Size(96, 16) Me.lblHymnName.TabIndex = 4 Me.lblHymnName.Text = "Hymn Name" ' 'txtHymnName ' Me.txtHymnName.Location = New System.Drawing.Point(112, 64) Me.txtHymnName.Name = "txtHymnName" Me.txtHymnName.Size = New System.Drawing.Size(424, 20) Me.txtHymnName.TabIndex = 5 ' 'lblHymnal ' Me.lblHymnal.Location = New System.Drawing.Point(16, 16) Me.lblHymnal.Name = "lblHymnal" Me.lblHymnal.Size = New System.Drawing.Size(80, 16) Me.lblHymnal.TabIndex = 0 Me.lblHymnal.Text = "Hymnal" ' 'lblHymnTuneName ' Me.lblHymnTuneName.Location = New System.Drawing.Point(16, 88) Me.lblHymnTuneName.Name = "lblHymnTuneName" Me.lblHymnTuneName.Size = New System.Drawing.Size(96, 16) Me.lblHymnTuneName.TabIndex = 6 Me.lblHymnTuneName.Text = "Hymn Tune Name" ' 'cboHymnTuneName ' Me.cboHymnTuneName.Location = New System.Drawing.Point(112, 88) Me.cboHymnTuneName.Name = "cboHymnTuneName" Me.cboHymnTuneName.Size = New System.Drawing.Size(288, 21) Me.cboHymnTuneName.Sorted = True Me.cboHymnTuneName.TabIndex = 7 ' 'lblHymnNumber ' Me.lblHymnNumber.Location = New System.Drawing.Point(16, 40) Me.lblHymnNumber.Name = "lblHymnNumber" Me.lblHymnNumber.Size = New System.Drawing.Size(80, 16) Me.lblHymnNumber.TabIndex = 2 Me.lblHymnNumber.Text = "Hymn Number" ' 'txtHymnNumber ' Me.txtHymnNumber.Location = New System.Drawing.Point(112, 40) Me.txtHymnNumber.Name = "txtHymnNumber" Me.txtHymnNumber.Size = New System.Drawing.Size(64, 20) Me.txtHymnNumber.TabIndex = 3 ' 'cboHymnal ' Me.cboHymnal.DropDownStyle = Windows.Forms.ComboBoxStyle.DropDownList Me.cboHymnal.Location = New System.Drawing.Point(112, 16) Me.cboHymnal.Name = "cboHymnal" Me.cboHymnal.Size = New System.Drawing.Size(424, 21) Me.cboHymnal.Sorted = True Me.cboHymnal.TabIndex = 1 ' 'frmEditHymn ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(1080, 598) Me.Name = "frmEditHymn" Me.StartPosition = Windows.Forms.FormStartPosition.Manual Me.Text = "Edit Hymn" Me.fraAddEdit.ResumeLayout(False) Me.fraAddEdit.PerformLayout() Me.ResumeLayout(False) End Sub #End Region Protected Overrides Sub LoadExistingItemsList() Dim lobjHymn As clsHymn Dim lobjHymns As System.Collections.Generic.List(Of clsHymn) SetUpExistingItemsHeaders() lobjHymns = clsHymn.GetAllHymns Me.ExistingItemsListSuspendLayout() For Each lobjHymn In lobjHymns Me.ExistingObjectsListItems.Add(ConvertHymnToListViewItem(lobjHymn)) Next Me.ExistingItemsListResumeLayout() End Sub Private Sub SetUpExistingItemsHeaders() Me.ExistingObjectsListColumns.Add("Hymnal", 100, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Hymn Number", 100, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Hymn Name", 400, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Hymn Tune Name", 200, HorizontalAlignment.Left) 'Set up sorting rules Dim lobjBaseEditFormColumnSortRules(3) As clsGridColumnSortRule 'First column, sort by Hymnal, then Hymn Number lobjBaseEditFormColumnSortRules(0) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(0).SubColumnSort = New clsGridSubColumnSortRule(1, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing) 'Second column, sort by Hymnal, then Hymn Number lobjBaseEditFormColumnSortRules(1) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortNone) lobjBaseEditFormColumnSortRules(1).SubColumnSort = New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(1, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing)) 'Third column, sort by Hymn name, then Hymnal and Hymn Number lobjBaseEditFormColumnSortRules(2) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(2).SubColumnSort = New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(1, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing)) 'Fourth column, sort by Hymn Tune name, then Hymn Name, Hymnal and Hymn Number lobjBaseEditFormColumnSortRules(3) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(3).SubColumnSort = New clsGridSubColumnSortRule(2, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(1, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing))) MyBaseEditFormColumnSortRules = lobjBaseEditFormColumnSortRules End Sub Protected Overrides Sub InitializeDetailControls() 'Load data to detail controls here at form load time txtHymnName.MaxLength = MyGlobals.HYMN_NAME_SIZE cboHymnTuneName.MaxLength = MyGlobals.HYMN_TUNE_NAME_SIZE txtHymnNumber.Text = "" txtHymnName.Text = "" 'Only set up hymnal if first time in If cboHymnal.Items.Count = 0 Then Dim objHymnal As clsHymnal Dim objHymnals As System.Collections.Generic.List(Of clsHymnal) Me.cboHymnal.Items.Clear() objHymnals = clsHymnal.GetAllHymnals For Each objHymnal In objHymnals Me.cboHymnal.Items.Add(objHymnal) Next 'Select first hymnal if there is one If Me.cboHymnal.Items.Count > 0 Then Me.cboHymnal.SelectedIndex = 0 End If End If If cboHymnTuneName.Items.Count = 0 Then Dim objHymnTuneName As clsHymnTuneName Dim objHymnTuneNames As System.Collections.Generic.List(Of clsHymnTuneName) 'Dim objObject As Object Me.cboHymnTuneName.Items.Clear() m_objHymnTuneNamesHash = New Hashtable objHymnTuneNames = clsHymnTuneName.GetAllHymnTuneNames For Each objHymnTuneName In objHymnTuneNames AddHymnTuneNameToForm(objHymnTuneName) Next End If End Sub Protected Overrides Sub SetFocusToFirstDetailControlForEdit() cboHymnal.Focus() End Sub Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean Dim lobjSavedHymn As clsHymn Dim lblnReturnValue As Boolean = False lobjSavedHymn = CType(lstvwExistingItem.Tag, clsHymn) Dim objHymnTuneName As clsHymnTuneName Select Case cboHymnTuneName.Text.ToUpper.Trim Case MyGlobals.NONE_STRING.ToUpper, "" objHymnTuneName = Nothing Case Else objHymnTuneName = CType(MyGlobals.GetItemFromHashWithStringKey(cboHymnTuneName.Text.ToUpper.Trim, m_objHymnTuneNamesHash), clsHymnTuneName) If objHymnTuneName Is Nothing Then objHymnTuneName = New clsHymnTuneName(cboHymnTuneName.Text.Trim) End If End Select mobjDetailHymn.HymnNumberAsString = txtHymnNumber.Text mobjDetailHymn.HymnName = txtHymnName.Text mobjDetailHymn.Hymnal = CType(cboHymnal.SelectedItem, clsHymnal) mobjDetailHymn.HymnTuneName = objHymnTuneName If lobjSavedHymn.StateIsIdentical(mobjDetailHymn) Then Return False Else Return True End If End Function Protected Overrides Function DetailControlsHaveSignificantData() As Boolean If txtHymnName.Text.Trim.Length > 0 _ OrElse txtHymnNumber.Text.Trim.Length > 0 Then Return True End If Return False End Function Protected Overrides Sub EmptyOutDetailControls() InitializeDetailControls() txtHymnNumber.Text = "" txtHymnName.Text = "" cboHymnTuneName.Text = "" mobjDetailHymn = New clsHymn End Sub Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean Dim lobjHymn As clsHymn Dim lblnReturnValue As Boolean = False lobjHymn = CType(lstvwExistingItem.Tag, clsHymn) txtHymnNumber.Text = lobjHymn.HymnNumberAsString txtHymnName.Text = lobjHymn.HymnName cboHymnal.Text = lobjHymn.Hymnal.ToString If lobjHymn.HymnTuneName Is Nothing Then cboHymnTuneName.Text = MyGlobals.NONE_STRING Else cboHymnTuneName.Text = lobjHymn.HymnTuneName.HymnTuneName End If mobjDetailHymn = CType(lobjHymn.Clone(), clsHymn) Return True End Function Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As Windows.Forms.ListViewItem) As Boolean Dim lobjHymn As clsHymn Dim lstrReferencedBy As String = "" lobjHymn = CType(lstvwItemToDelete.Tag, clsHymn) If Not lobjHymn.OKToDelete(lstrReferencedBy) Then MessageBox.Show("Can't delete hymn: " + lobjHymn.ToString + ". 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: " + lobjHymn.ToString + "?", "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 lobjHymn As clsHymn lobjHymn = CType(lstvwItemToDelete.Tag, clsHymn) Return lobjHymn.Delete() End Function Protected Overrides Function SaveNewItem() As Boolean Dim lstrErrorString As String = "" Dim lblnAddedNewHymnTuneName As Boolean lblnAddedNewHymnTuneName = False Dim objHymnTuneName As clsHymnTuneName Select Case cboHymnTuneName.Text.ToUpper.Trim Case MyGlobals.NONE_STRING.ToUpper, "" objHymnTuneName = Nothing Case Else objHymnTuneName = CType(MyGlobals.GetItemFromHashWithStringKey(cboHymnTuneName.Text.ToUpper.Trim, m_objHymnTuneNamesHash), clsHymnTuneName) If objHymnTuneName Is Nothing Then objHymnTuneName = New clsHymnTuneName(cboHymnTuneName.Text.Trim) lblnAddedNewHymnTuneName = True End If End Select mobjDetailHymn.HymnNumberAsString = txtHymnNumber.Text mobjDetailHymn.HymnName = txtHymnName.Text mobjDetailHymn.Hymnal = CType(cboHymnal.SelectedItem, clsHymnal) mobjDetailHymn.HymnTuneName = objHymnTuneName If Not mobjDetailHymn.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailHymn.Save() Then Return False End If Me.ExistingObjectsListItems.Add(ConvertHymnToListViewItem(mobjDetailHymn)) If lblnAddedNewHymnTuneName Then AddHymnTuneNameToForm(objHymnTuneName) End If 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 ConvertHymnToListViewItem(ByVal lobjHymn As clsHymn) As ListViewItem Dim lobjItem As ListViewItem If lobjHymn.Hymnal Is Nothing Then lobjItem = New ListViewItem("") Else lobjItem = New ListViewItem(lobjHymn.Hymnal.HymnalAbbreviation) End If lobjItem.SubItems.Add(lobjHymn.HymnNumberAsString) lobjItem.SubItems.Add(lobjHymn.HymnName) If lobjHymn.HymnTuneName Is Nothing Then lobjItem.SubItems.Add(MyGlobals.NONE_STRING) Else lobjItem.SubItems.Add(lobjHymn.HymnTuneName.HymnTuneName) End If lobjItem.Tag = lobjHymn Return lobjItem End Function Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean Dim lstrErrorString As String = "" Dim lblnAddedNewHymnTuneName As Boolean lblnAddedNewHymnTuneName = False Dim objHymnTuneName As clsHymnTuneName Select Case cboHymnTuneName.Text.ToUpper.Trim Case MyGlobals.NONE_STRING.ToUpper, "" objHymnTuneName = Nothing Case Else objHymnTuneName = CType(MyGlobals.GetItemFromHashWithStringKey(cboHymnTuneName.Text.ToUpper.Trim, m_objHymnTuneNamesHash), clsHymnTuneName) If objHymnTuneName Is Nothing Then objHymnTuneName = New clsHymnTuneName(cboHymnTuneName.Text.Trim) lblnAddedNewHymnTuneName = True End If End Select mobjDetailHymn.HymnNumberAsString = txtHymnNumber.Text mobjDetailHymn.HymnName = txtHymnName.Text mobjDetailHymn.Hymnal = CType(cboHymnal.SelectedItem, clsHymnal) mobjDetailHymn.HymnTuneName = objHymnTuneName If Not mobjDetailHymn.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailHymn.Save() Then Return False End If Me.ExistingObjectsListItems.Remove(lstvwExistingItem) Me.ExistingObjectsListItems.Add(ConvertHymnToListViewItem(mobjDetailHymn)) If lblnAddedNewHymnTuneName Then AddHymnTuneNameToForm(objHymnTuneName) End If Return True End Function Private Sub txtHymnName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnName.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub cboHymnTuneName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboHymnTuneName.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub txtHymnNumber_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnNumber.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub cboHymnal_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboHymnal.SelectedIndexChanged MyBase.DetailDataHasChanged() End Sub Private Sub txtHymnNumber_KeyPress(ByVal sender As Object, ByVal e As Windows.Forms.KeyPressEventArgs) Handles txtHymnNumber.KeyPress If Not MyGlobals.AllowKeypressInNumericTextBox(e.KeyChar) Then e.Handled = True End If End Sub Protected Sub AddHymnTuneNameToForm(ByVal objHymnTuneName As clsHymnTuneName) Me.cboHymnTuneName.Items.Add(objHymnTuneName.HymnTuneName) m_objHymnTuneNamesHash.Add(objHymnTuneName.HymnTuneName.ToUpper, objHymnTuneName) End Sub End Class