Imports System.Windows.Forms Public Class frmEditWork Inherits OrganLit.BaseEditForm Private mobjDetailWork As New clsWork Private m_objHymnTuneNamesHash As Hashtable Private m_objComposersHash As Hashtable Private m_objInstrumentationsHash 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 lblHymnTuneName As Windows.Forms.Label Friend WithEvents cboHymnTuneName As ComboTypeAhead.ComboTypeAhead Friend WithEvents lblWorkName As Windows.Forms.Label Friend WithEvents txtWorkName As Windows.Forms.TextBox Friend WithEvents lblBook As Windows.Forms.Label Friend WithEvents lblPageNumber As Windows.Forms.Label Friend WithEvents txtPageNumber As Windows.Forms.TextBox Friend WithEvents cboBook As Windows.Forms.ComboBox Friend WithEvents cboComposerName As ComboTypeAhead.ComboTypeAhead Friend WithEvents lblComposerName As Windows.Forms.Label Friend WithEvents cboInstrumentationName As ComboTypeAhead.ComboTypeAhead Friend WithEvents lblInstrumentation As Windows.Forms.Label Friend WithEvents txtOpusInfo As Windows.Forms.TextBox Friend WithEvents lblOpusInfo As Windows.Forms.Label Private Sub InitializeComponent() Me.lblWorkName = New Windows.Forms.Label() Me.txtWorkName = New Windows.Forms.TextBox() Me.lblBook = New Windows.Forms.Label() Me.lblHymnTuneName = New Windows.Forms.Label() Me.cboHymnTuneName = New ComboTypeAhead.ComboTypeAhead() Me.lblPageNumber = New Windows.Forms.Label() Me.txtPageNumber = New Windows.Forms.TextBox() Me.cboBook = New Windows.Forms.ComboBox() Me.cboComposerName = New ComboTypeAhead.ComboTypeAhead() Me.lblComposerName = New Windows.Forms.Label() Me.txtOpusInfo = New Windows.Forms.TextBox() Me.lblOpusInfo = New Windows.Forms.Label() Me.cboInstrumentationName = New ComboTypeAhead.ComboTypeAhead() Me.lblInstrumentation = New Windows.Forms.Label() Me.fraAddEdit.SuspendLayout() Me.SuspendLayout() ' 'fraAddEdit ' Me.fraAddEdit.Controls.Add(Me.cboInstrumentationName) Me.fraAddEdit.Controls.Add(Me.lblInstrumentation) Me.fraAddEdit.Controls.Add(Me.txtOpusInfo) Me.fraAddEdit.Controls.Add(Me.lblOpusInfo) Me.fraAddEdit.Controls.Add(Me.cboComposerName) Me.fraAddEdit.Controls.Add(Me.lblComposerName) Me.fraAddEdit.Controls.Add(Me.cboBook) Me.fraAddEdit.Controls.Add(Me.txtPageNumber) Me.fraAddEdit.Controls.Add(Me.lblPageNumber) Me.fraAddEdit.Controls.Add(Me.cboHymnTuneName) Me.fraAddEdit.Controls.Add(Me.lblHymnTuneName) Me.fraAddEdit.Controls.Add(Me.lblBook) Me.fraAddEdit.Controls.Add(Me.txtWorkName) Me.fraAddEdit.Controls.Add(Me.lblWorkName) Me.fraAddEdit.Location = New System.Drawing.Point(12, 381) Me.fraAddEdit.Size = New System.Drawing.Size(1123, 220) Me.fraAddEdit.Controls.SetChildIndex(Me.lblWorkName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.txtWorkName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblBook, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnTuneName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.cboHymnTuneName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblPageNumber, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.txtPageNumber, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.cboBook, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblComposerName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.cboComposerName, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblOpusInfo, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.txtOpusInfo, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.lblInstrumentation, 0) Me.fraAddEdit.Controls.SetChildIndex(Me.cboInstrumentationName, 0) ' 'lblWorkName ' Me.lblWorkName.Location = New System.Drawing.Point(19, 127) Me.lblWorkName.Name = "lblWorkName" Me.lblWorkName.Size = New System.Drawing.Size(115, 18) Me.lblWorkName.TabIndex = 8 Me.lblWorkName.Text = "Work Name" ' 'txtWorkName ' Me.txtWorkName.Location = New System.Drawing.Point(134, 127) Me.txtWorkName.Name = "txtWorkName" Me.txtWorkName.Size = New System.Drawing.Size(701, 22) Me.txtWorkName.TabIndex = 9 ' 'lblBook ' Me.lblBook.Location = New System.Drawing.Point(19, 18) Me.lblBook.Name = "lblBook" Me.lblBook.Size = New System.Drawing.Size(96, 19) Me.lblBook.TabIndex = 0 Me.lblBook.Text = "Book" ' 'lblHymnTuneName ' Me.lblHymnTuneName.Location = New System.Drawing.Point(19, 182) Me.lblHymnTuneName.Name = "lblHymnTuneName" Me.lblHymnTuneName.Size = New System.Drawing.Size(115, 19) Me.lblHymnTuneName.TabIndex = 12 Me.lblHymnTuneName.Text = "Hymn Tune Name" ' 'cboHymnTuneName ' Me.cboHymnTuneName.Location = New System.Drawing.Point(134, 182) Me.cboHymnTuneName.Name = "cboHymnTuneName" Me.cboHymnTuneName.Size = New System.Drawing.Size(346, 24) Me.cboHymnTuneName.Sorted = True Me.cboHymnTuneName.TabIndex = 13 ' 'lblPageNumber ' Me.lblPageNumber.Location = New System.Drawing.Point(19, 46) Me.lblPageNumber.Name = "lblPageNumber" Me.lblPageNumber.Size = New System.Drawing.Size(96, 19) Me.lblPageNumber.TabIndex = 2 Me.lblPageNumber.Text = "Page Number" ' 'txtPageNumber ' Me.txtPageNumber.Location = New System.Drawing.Point(134, 46) Me.txtPageNumber.Name = "txtPageNumber" Me.txtPageNumber.Size = New System.Drawing.Size(77, 22) Me.txtPageNumber.TabIndex = 3 ' 'cboBook ' Me.cboBook.DropDownStyle = Windows.Forms.ComboBoxStyle.DropDownList Me.cboBook.Location = New System.Drawing.Point(134, 18) Me.cboBook.Name = "cboBook" Me.cboBook.Size = New System.Drawing.Size(509, 24) Me.cboBook.Sorted = True Me.cboBook.TabIndex = 1 ' 'cboComposerName ' Me.cboComposerName.Location = New System.Drawing.Point(134, 99) Me.cboComposerName.Name = "cboComposerName" Me.cboComposerName.Size = New System.Drawing.Size(509, 24) Me.cboComposerName.Sorted = True Me.cboComposerName.TabIndex = 7 ' 'lblComposerName ' Me.lblComposerName.Location = New System.Drawing.Point(19, 99) Me.lblComposerName.Name = "lblComposerName" Me.lblComposerName.Size = New System.Drawing.Size(115, 19) Me.lblComposerName.TabIndex = 6 Me.lblComposerName.Text = "Composer Name" ' 'txtOpusInfo ' Me.txtOpusInfo.Location = New System.Drawing.Point(134, 155) Me.txtOpusInfo.Name = "txtOpusInfo" Me.txtOpusInfo.Size = New System.Drawing.Size(250, 22) Me.txtOpusInfo.TabIndex = 11 ' 'lblOpusInfo ' Me.lblOpusInfo.Location = New System.Drawing.Point(19, 155) Me.lblOpusInfo.Name = "lblOpusInfo" Me.lblOpusInfo.Size = New System.Drawing.Size(115, 18) Me.lblOpusInfo.TabIndex = 10 Me.lblOpusInfo.Text = "Opus Info" ' 'cboInstrumentationName ' Me.cboInstrumentationName.Location = New System.Drawing.Point(134, 73) Me.cboInstrumentationName.Name = "cboInstrumentationName" Me.cboInstrumentationName.Size = New System.Drawing.Size(509, 24) Me.cboInstrumentationName.Sorted = True Me.cboInstrumentationName.TabIndex = 5 ' 'lblInstrumentation ' Me.lblInstrumentation.Location = New System.Drawing.Point(19, 73) Me.lblInstrumentation.Name = "lblInstrumentation" Me.lblInstrumentation.Size = New System.Drawing.Size(115, 18) Me.lblInstrumentation.TabIndex = 4 Me.lblInstrumentation.Text = "Instrumentation" ' 'frmEditWork ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) Me.ClientSize = New System.Drawing.Size(1143, 608) Me.MinimumSize = New System.Drawing.Size(1018, 655) Me.Name = "frmEditWork" Me.StartPosition = Windows.Forms.FormStartPosition.Manual Me.Text = "Edit Work" Me.fraAddEdit.ResumeLayout(False) Me.fraAddEdit.PerformLayout() Me.ResumeLayout(False) End Sub #End Region Protected Overrides Sub LoadExistingItemsList() Dim lobjWork As clsWork Dim lobjWorks As System.Collections.Generic.List(Of clsWork) SetUpExistingItemsHeaders() lobjWorks = clsWork.GetAllWorks Me.ExistingItemsListSuspendLayout() For Each lobjWork In lobjWorks Me.ExistingObjectsListItems.Add(ConvertWorkToListViewItem(lobjWork)) Next Me.ExistingItemsListResumeLayout() End Sub Private Sub SetUpExistingItemsHeaders() Me.ExistingObjectsListColumns.Add("Composer", 200, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Work Name", 300, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Book", 300, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Page", 100, HorizontalAlignment.Right) Me.ExistingObjectsListColumns.Add("Hymn Tune Name", 200, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Instrumentation", 200, HorizontalAlignment.Left) 'Set up sorting rules Dim lobjBaseEditFormColumnSortRules(5) As clsGridColumnSortRule 'First column, sort by Composer, then Work Name lobjBaseEditFormColumnSortRules(0) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(0).SubColumnSort = New clsGridSubColumnSortRule(1, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing) 'Second column, sort by Work Name, then Composer lobjBaseEditFormColumnSortRules(1) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(1).SubColumnSort = New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, Nothing) 'Third column, sort by Book, then Page lobjBaseEditFormColumnSortRules(2) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(2).SubColumnSort = New clsGridSubColumnSortRule(3, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing) 'Fourth column, sort by Book, then Page lobjBaseEditFormColumnSortRules(3) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortNone) lobjBaseEditFormColumnSortRules(3).SubColumnSort = New clsGridSubColumnSortRule(2, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(3, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing)) 'Fifth column, sort by Hymn Tune Name, then Composer lobjBaseEditFormColumnSortRules(4) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(4).SubColumnSort = New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, Nothing) 'Sixth column, sort by Instrumentation, then Book, then Page lobjBaseEditFormColumnSortRules(5) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(5).SubColumnSort = New clsGridSubColumnSortRule(2, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(3, clsGridSubColumnSortRule.enumSortType.SortAsNumber, Nothing)) MyBaseEditFormColumnSortRules = lobjBaseEditFormColumnSortRules End Sub Protected Overrides Sub InitializeDetailControls() 'Load data to detail controls here at form load time txtWorkName.MaxLength = MyGlobals.WORK_NAME_SIZE txtOpusInfo.MaxLength = MyGlobals.OPUS_INFO_SIZE cboComposerName.MaxLength = MyGlobals.COMPOSER_NAME_SIZE cboInstrumentationName.MaxLength = MyGlobals.INSTRUMENTATION_NAME_SIZE cboHymnTuneName.MaxLength = MyGlobals.HYMN_TUNE_NAME_SIZE txtPageNumber.Text = "" txtWorkName.Text = "" txtOpusInfo.Text = "" 'Only set up book if first time in If cboBook.Items.Count = 0 Then Dim objBook As clsBook Dim objBooks As System.Collections.Generic.List(Of clsBook) Me.cboBook.Items.Clear() objBooks = clsBook.GetAllBooks For Each objBook In objBooks Me.cboBook.Items.Add(objBook) Next 'Select first book if there is one If Me.cboBook.Items.Count > 0 Then Me.cboBook.SelectedIndex = 0 End If End If If m_objComposersHash Is Nothing Then m_objComposersHash = New Hashtable End If If cboComposerName.Items.Count = 0 Then Dim objComposer As clsComposer Dim objComposers As System.Collections.Generic.List(Of clsComposer) Me.cboComposerName.Items.Clear() m_objComposersHash = New Hashtable objComposers = clsComposer.GetAllComposers For Each objComposer In objComposers AddComposerToForm(objComposer) Next End If If m_objInstrumentationsHash Is Nothing Then m_objInstrumentationsHash = New Hashtable End If If cboInstrumentationName.Items.Count = 0 Then Dim objInstrumentation As clsInstrumentation Dim objInstrumentations As System.Collections.Generic.List(Of clsInstrumentation) Me.cboInstrumentationName.Items.Clear() m_objInstrumentationsHash = New Hashtable objInstrumentations = clsInstrumentation.GetAllInstrumentations For Each objInstrumentation In objInstrumentations AddInstrumentationToForm(objInstrumentation) Next End If If cboHymnTuneName.Items.Count = 0 Then Dim objHymnTuneName As clsHymnTuneName Dim objHymnTuneNames As System.Collections.Generic.List(Of clsHymnTuneName) Me.cboHymnTuneName.Items.Clear() m_objHymnTuneNamesHash = New Hashtable objHymnTuneNames = clsHymnTuneName.GetAllHymnTuneNames For Each objHymnTuneName In objHymnTuneNames AddHymnTuneNameToForm(objHymnTuneName) Next Me.cboHymnTuneName.Items.Add(MyGlobals.NONE_STRING) End If End Sub Protected Overrides Sub SetFocusToFirstDetailControlForEdit() cboBook.Focus() End Sub Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean Dim lobjSavedWork As clsWork Dim lblnReturnValue As Boolean = False lobjSavedWork = CType(lstvwExistingItem.Tag, clsWork) Dim objComposer As clsComposer Select Case cboComposerName.Text.ToUpper.Trim Case "" objComposer = Nothing Case Else objComposer = CType(MyGlobals.GetItemFromHashWithStringKey(cboComposerName.Text.ToUpper.Trim, m_objComposersHash), clsComposer) If objComposer Is Nothing Then objComposer = New clsComposer(cboComposerName.Text.Trim) End If End Select Dim objInstrumentation As clsInstrumentation Select Case cboInstrumentationName.Text.ToUpper.Trim Case "" objInstrumentation = Nothing Case Else objInstrumentation = CType(MyGlobals.GetItemFromHashWithStringKey(cboInstrumentationName.Text.ToUpper.Trim, m_objInstrumentationsHash), clsInstrumentation) If objInstrumentation Is Nothing Then objInstrumentation = New clsInstrumentation(cboInstrumentationName.Text.Trim) End If End Select 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 mobjDetailWork.Book = CType(cboBook.SelectedItem, clsBook) mobjDetailWork.PageNumberAsString = txtPageNumber.Text mobjDetailWork.WorkName = txtWorkName.Text mobjDetailWork.Composer = objComposer mobjDetailWork.Instrumentation = objInstrumentation mobjDetailWork.OpusInfo = txtOpusInfo.Text mobjDetailWork.HymnTuneName = objHymnTuneName If lobjSavedWork.StateIsIdentical(mobjDetailWork) Then Return False Else Return True End If End Function Protected Overrides Function DetailControlsHaveSignificantData() As Boolean If txtWorkName.Text.Trim.Length > 0 _ OrElse txtPageNumber.Text.Trim.Length > 0 _ OrElse txtOpusInfo.Text.Trim.Length > 0 Then 'Pre-load composer from book, if composer hasn't already been set If cboComposerName.Text.Trim.Length = 0 Then Dim objBook As clsBook objBook = CType(cboBook.SelectedItem, clsBook) If objBook.Composer Is Nothing Then 'Do nothing - this is collection Else cboComposerName.Text = objBook.Composer.ComposerName End If End If 'Pre-load instrumentation from book, if instrumentation hasn't already been set If cboInstrumentationName.Text.Trim.Length = 0 Then Dim objBook As clsBook objBook = CType(cboBook.SelectedItem, clsBook) If objBook.Instrumentation Is Nothing Then 'Do nothing - this is collection Else cboInstrumentationName.Text = objBook.Instrumentation.InstrumentationName End If End If Return True End If Return False End Function Protected Overrides Sub EmptyOutDetailControls() InitializeDetailControls() txtWorkName.Text = "" txtPageNumber.Text = "" cboComposerName.Text = "" cboInstrumentationName.Text = "" txtOpusInfo.Text = "" cboHymnTuneName.Text = "" mobjDetailWork = New clsWork End Sub Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean Dim lobjWork As clsWork Dim lblnReturnValue As Boolean = False lobjWork = CType(lstvwExistingItem.Tag, clsWork) 'MessageBox.Show(lobjWork.Book.ToString) 'cboBook.SelectedText = lobjWork.Book.ToString cboBook.Text = lobjWork.Book.ToString txtPageNumber.Text = lobjWork.PageNumberAsString txtWorkName.Text = lobjWork.WorkName If lobjWork.Composer Is Nothing Then cboComposerName.Text = "" Else cboComposerName.Text = lobjWork.Composer.ComposerName End If If lobjWork.Instrumentation Is Nothing Then cboInstrumentationName.Text = "" Else cboInstrumentationName.Text = lobjWork.Instrumentation.InstrumentationName End If txtOpusInfo.Text = lobjWork.OpusInfo If lobjWork.HymnTuneName Is Nothing Then cboHymnTuneName.Text = MyGlobals.NONE_STRING Else cboHymnTuneName.Text = lobjWork.HymnTuneName.HymnTuneName End If mobjDetailWork = CType(lobjWork.Clone(), clsWork) Return True End Function Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As Windows.Forms.ListViewItem) As Boolean Dim lobjWork As clsWork Dim lstrReferencedBy As String = "" lobjWork = CType(lstvwItemToDelete.Tag, clsWork) If Not lobjWork.OKToDelete(lstrReferencedBy) Then MessageBox.Show("Can't delete work: " + lobjWork.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 work: " + lobjWork.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 lobjWork As clsWork lobjWork = CType(lstvwItemToDelete.Tag, clsWork) Return lobjWork.Delete() End Function Protected Overrides Function SaveNewItem() As Boolean Dim lstrErrorString As String = "" Dim lblnAddedNewComposer As Boolean Dim lblnAddedNewInstrumentation As Boolean Dim lblnAddedNewHymnTuneName As Boolean lblnAddedNewComposer = False lblnAddedNewInstrumentation = False lblnAddedNewHymnTuneName = False Dim objComposer As clsComposer Select Case cboComposerName.Text.ToUpper.Trim Case "" objComposer = Nothing Case Else objComposer = CType(MyGlobals.GetItemFromHashWithStringKey(cboComposerName.Text.ToUpper.Trim, m_objComposersHash), clsComposer) If objComposer Is Nothing Then objComposer = New clsComposer(cboComposerName.Text.Trim) lblnAddedNewComposer = True End If End Select Dim objInstrumentation As clsInstrumentation Select Case cboInstrumentationName.Text.ToUpper.Trim Case "" objInstrumentation = Nothing Case Else objInstrumentation = CType(MyGlobals.GetItemFromHashWithStringKey(cboInstrumentationName.Text.ToUpper.Trim, m_objInstrumentationsHash), clsInstrumentation) If objInstrumentation Is Nothing Then objInstrumentation = New clsInstrumentation(cboInstrumentationName.Text.Trim) lblnAddedNewInstrumentation = True End If End Select 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 mobjDetailWork.Book = CType(cboBook.SelectedItem, clsBook) mobjDetailWork.PageNumberAsString = txtPageNumber.Text mobjDetailWork.WorkName = txtWorkName.Text mobjDetailWork.Composer = objComposer mobjDetailWork.Instrumentation = objInstrumentation mobjDetailWork.OpusInfo = txtOpusInfo.Text mobjDetailWork.HymnTuneName = objHymnTuneName If Not mobjDetailWork.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailWork.Save() Then Return False End If If lblnAddedNewComposer Then AddComposerToForm(objComposer) End If If lblnAddedNewInstrumentation Then AddInstrumentationToForm(objInstrumentation) End If If lblnAddedNewHymnTuneName Then AddHymnTuneNameToForm(objHymnTuneName) End If Me.ExistingObjectsListItems.Add(ConvertWorkToListViewItem(mobjDetailWork)) 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 ConvertWorkToListViewItem(ByVal lobjWork As clsWork) As ListViewItem Dim lobjItem As ListViewItem If lobjWork.Composer Is Nothing Then lobjItem = New ListViewItem("") Else lobjItem = New ListViewItem(lobjWork.Composer.ComposerName) End If lobjItem.SubItems.Add(lobjWork.WorkName) lobjItem.SubItems.Add(lobjWork.Book.ToString) lobjItem.SubItems.Add(lobjWork.PageNumberAsString) If lobjWork.HymnTuneName Is Nothing Then lobjItem.SubItems.Add(MyGlobals.NONE_STRING) Else lobjItem.SubItems.Add(lobjWork.HymnTuneName.HymnTuneName) End If lobjItem.SubItems.Add(lobjWork.Instrumentation.InstrumentationName) 'If lobjWork.HymnTuneName Is Nothing Then ' lobjItem.SubItems.Add(MyGlobals.NONE_STRING) 'Else ' lobjItem.SubItems.Add(lobjWork.HymnTuneName.HymnTuneName) 'End If lobjItem.Tag = lobjWork Return lobjItem End Function Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean Dim lstrErrorString As String = "" Dim lblnAddedNewComposer As Boolean Dim lblnAddedNewInstrumentation As Boolean Dim lblnAddedNewHymnTuneName As Boolean lblnAddedNewComposer = False lblnAddedNewInstrumentation = False lblnAddedNewHymnTuneName = False Dim objComposer As clsComposer Select Case cboComposerName.Text.ToUpper.Trim Case "" objComposer = Nothing Case Else objComposer = CType(MyGlobals.GetItemFromHashWithStringKey(cboComposerName.Text.ToUpper.Trim, m_objComposersHash), clsComposer) If objComposer Is Nothing Then objComposer = New clsComposer(cboComposerName.Text.Trim) lblnAddedNewComposer = True End If End Select Dim objInstrumentation As clsInstrumentation Select Case cboInstrumentationName.Text.ToUpper.Trim Case "" objInstrumentation = Nothing Case Else objInstrumentation = CType(MyGlobals.GetItemFromHashWithStringKey(cboInstrumentationName.Text.ToUpper.Trim, m_objInstrumentationsHash), clsInstrumentation) If objInstrumentation Is Nothing Then objInstrumentation = New clsInstrumentation(cboInstrumentationName.Text.Trim) lblnAddedNewInstrumentation = True End If End Select 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 mobjDetailWork.Book = CType(cboBook.SelectedItem, clsBook) mobjDetailWork.PageNumberAsString = txtPageNumber.Text mobjDetailWork.WorkName = txtWorkName.Text mobjDetailWork.Composer = objComposer mobjDetailWork.Instrumentation = objInstrumentation mobjDetailWork.OpusInfo = txtOpusInfo.Text mobjDetailWork.HymnTuneName = objHymnTuneName If Not mobjDetailWork.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailWork.Save() Then Return False End If If lblnAddedNewComposer Then AddComposerToForm(objComposer) End If If lblnAddedNewInstrumentation Then AddInstrumentationToForm(objInstrumentation) End If If lblnAddedNewHymnTuneName Then AddHymnTuneNameToForm(objHymnTuneName) End If Me.ExistingObjectsListItems.Remove(lstvwExistingItem) Me.ExistingObjectsListItems.Add(ConvertWorkToListViewItem(mobjDetailWork)) Return True End Function Private Sub txtWorkName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtWorkName.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub cboComposerName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboComposerName.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub cboInstrumentationName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboInstrumentationName.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 txtPageNumber_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPageNumber.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub txtOpusInfo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtOpusInfo.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub cboBook_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboBook.SelectedIndexChanged MyBase.DetailDataHasChanged() End Sub Private Sub txtPageNumber_KeyPress(ByVal sender As System.Object, ByVal e As Windows.Forms.KeyPressEventArgs) Handles txtPageNumber.KeyPress If Not MyGlobals.AllowKeypressInNumericTextBox(e.KeyChar) Then e.Handled = True End If End Sub Protected Sub AddComposerToForm(ByVal objComposer As clsComposer) Me.cboComposerName.Items.Add(objComposer.ComposerName) m_objComposersHash.Add(objComposer.ComposerName.ToUpper, objComposer) End Sub Protected Sub AddInstrumentationToForm(ByVal objInstrumentation As clsInstrumentation) Me.cboInstrumentationName.Items.Add(objInstrumentation.InstrumentationName) m_objInstrumentationsHash.Add(objInstrumentation.InstrumentationName.ToUpper, objInstrumentation) 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