commit 46735bddd345863252cd860b6783cb48d99c55ec Author: Jon Date: Sat Mar 7 19:38:21 2026 -0600 Initial population diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..558fe14 --- /dev/null +++ b/.gitignore @@ -0,0 +1,428 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates +*.env + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ + +[Dd]ebug/x64/ +[Dd]ebugPublic/x64/ +[Rr]elease/x64/ +[Rr]eleases/x64/ +bin/x64/ +obj/x64/ + +[Dd]ebug/x86/ +[Dd]ebugPublic/x86/ +[Rr]elease/x86/ +[Rr]eleases/x86/ +bin/x86/ +obj/x86/ + +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +[Aa][Rr][Mm]64[Ee][Cc]/ +bld/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Build results on 'Bin' directories +**/[Bb]in/* +# Uncomment if you have tasks that rely on *.refresh files to move binaries +# (https://github.com/github/gitignore/pull/3736) +#!**/[Bb]in/*.refresh + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* +*.trx + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Approval Tests result files +*.received.* + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.idb +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +# but not Directory.Build.rsp, as it configures directory-level build defaults +!Directory.Build.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +**/.paket/paket.exe +paket-files/ + +# FAKE - F# Make +**/.fake/ + +# CodeRush personal settings +**/.cr/personal + +# Python Tools for Visual Studio (PTVS) +**/__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +#tools/** +#!tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog +MSBuild_Logs/ + +# AWS SAM Build and Temporary Artifacts folder +.aws-sam + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +**/.mfractor/ + +# Local History for Visual Studio +**/.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +**/.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp \ No newline at end of file diff --git a/AADeleteMe.Designer.vb b/AADeleteMe.Designer.vb new file mode 100644 index 0000000..202b978 --- /dev/null +++ b/AADeleteMe.Designer.vb @@ -0,0 +1,81 @@ + +Partial Class AADeleteMe + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + 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. + + Private Sub InitializeComponent() + Me.MenuStrip1 = New System.Windows.Forms.MenuStrip() + Me.Test1ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.Test1SubToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.Test2ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MenuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'MenuStrip1 + ' + Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.Test1ToolStripMenuItem, Me.Test2ToolStripMenuItem}) + Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip1.Name = "MenuStrip1" + Me.MenuStrip1.Size = New System.Drawing.Size(800, 24) + Me.MenuStrip1.TabIndex = 0 + Me.MenuStrip1.Text = "MenuStrip1" + ' + 'Test1ToolStripMenuItem + ' + Me.Test1ToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.Test1SubToolStripMenuItem}) + Me.Test1ToolStripMenuItem.Name = "Test1ToolStripMenuItem" + Me.Test1ToolStripMenuItem.Size = New System.Drawing.Size(45, 20) + Me.Test1ToolStripMenuItem.Text = "Test1" + ' + 'Test1SubToolStripMenuItem + ' + Me.Test1SubToolStripMenuItem.Name = "Test1SubToolStripMenuItem" + Me.Test1SubToolStripMenuItem.Size = New System.Drawing.Size(120, 22) + Me.Test1SubToolStripMenuItem.Text = "Test1Sub" + ' + 'Test2ToolStripMenuItem + ' + Me.Test2ToolStripMenuItem.Name = "Test2ToolStripMenuItem" + Me.Test2ToolStripMenuItem.Size = New System.Drawing.Size(45, 20) + Me.Test2ToolStripMenuItem.Text = "Test2" + ' + 'AADeleteMe + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(800, 450) + Me.Controls.Add(Me.MenuStrip1) + Me.IsMdiContainer = True + Me.MainMenuStrip = Me.MenuStrip1 + Me.Name = "AADeleteMe" + Me.Text = "AADeleteMe" + Me.MenuStrip1.ResumeLayout(False) + Me.MenuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents MenuStrip1 As Windows.Forms.MenuStrip + Friend WithEvents Test1ToolStripMenuItem As Windows.Forms.ToolStripMenuItem + Friend WithEvents Test1SubToolStripMenuItem As Windows.Forms.ToolStripMenuItem + Friend WithEvents Test2ToolStripMenuItem As Windows.Forms.ToolStripMenuItem +End Class diff --git a/AADeleteMe.resx b/AADeleteMe.resx new file mode 100644 index 0000000..77e374a --- /dev/null +++ b/AADeleteMe.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/AADeleteMe.vb b/AADeleteMe.vb new file mode 100644 index 0000000..852e9b7 --- /dev/null +++ b/AADeleteMe.vb @@ -0,0 +1,3 @@ +Public Class AADeleteMe + +End Class \ No newline at end of file diff --git a/AssemblyInfo.vb b/AssemblyInfo.vb new file mode 100644 index 0000000..5098ec5 --- /dev/null +++ b/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/BaseEditForm.resx b/BaseEditForm.resx new file mode 100644 index 0000000..7a7fa89 --- /dev/null +++ b/BaseEditForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8A7gDu4A7uAO7gDu4A7uAO7uD4Dg+A4PgOD4Dg+A4PgO4P+HD/hw/4cP+HD/hw/4cODwBw8AcP + AHDwBw8AcPAHDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4 + cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/ + hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+H + D/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP + +HD/hw/4cP+HDg8AcP+HD/hw/4cP+HDwBw7g/wD/hw/4cP+HD/hwD/Du4P8A8AcP+HD/hw8AcA/w7u4A + 7g/wD/hw/4cA/w7gDu7u7u4P8A8AcPAHAP8O7u7u6Znp4A7g/w4P8O4A7u7u7umZ7u7u4P8OD/Du7u6Z + nu7u6e7umZ4A6eAO6ZnumZ7u7unu7pme7unu7umZ7u6e7u7p7u7unu7p7u7u6e7unu7u6e7u7p7u6e7u + 7unu7p7u7u7u7u6enumZ7u7p7pme7u7u7u7ume7pme7u6Znu7u4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/BaseEditForm.vb b/BaseEditForm.vb new file mode 100644 index 0000000..df8674a --- /dev/null +++ b/BaseEditForm.vb @@ -0,0 +1,492 @@ +Imports System.Windows.Forms + +Public Class BaseEditForm + Inherits Windows.Forms.Form + + Enum EditingOrAdding + Editing + Adding + Loading + NoAction + End Enum 'EditingOrAdding + + Private mvalEditingOrAdding As EditingOrAdding + Private mintCurrentSortColumn As Integer + Private mobjEditFormExistingItemColumnSortRules() As clsGridColumnSortRule + +#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. + Protected WithEvents fraAddEdit As Windows.Forms.GroupBox + Private WithEvents btnEdit As Windows.Forms.Button + Private WithEvents btnDelete As Windows.Forms.Button + Private WithEvents btnSave As Windows.Forms.Button + Private WithEvents btnCancel As Windows.Forms.Button + Private WithEvents btnRevert As Windows.Forms.Button + Private WithEvents btnExit As Windows.Forms.Button + Private WithEvents lvwExistingItemsList As Windows.Forms.ListView + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(BaseEditForm)) + Me.btnEdit = New Windows.Forms.Button + Me.btnDelete = New Windows.Forms.Button + Me.btnExit = New Windows.Forms.Button + Me.fraAddEdit = New Windows.Forms.GroupBox + Me.btnRevert = New Windows.Forms.Button + Me.btnCancel = New Windows.Forms.Button + Me.btnSave = New Windows.Forms.Button + Me.lvwExistingItemsList = New Windows.Forms.ListView + Me.fraAddEdit.SuspendLayout() + Me.SuspendLayout() + ' + 'btnEdit + ' + Me.btnEdit.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnEdit.Location = New System.Drawing.Point(976, 8) + Me.btnEdit.Name = "btnEdit" + Me.btnEdit.Size = New System.Drawing.Size(96, 24) + Me.btnEdit.TabIndex = 1 + Me.btnEdit.Text = "&Edit" + ' + 'btnDelete + ' + Me.btnDelete.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnDelete.Location = New System.Drawing.Point(976, 40) + Me.btnDelete.Name = "btnDelete" + Me.btnDelete.Size = New System.Drawing.Size(96, 24) + Me.btnDelete.TabIndex = 2 + Me.btnDelete.Text = "&Delete" + ' + 'btnExit + ' + Me.btnExit.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnExit.Location = New System.Drawing.Point(976, 72) + Me.btnExit.Name = "btnExit" + Me.btnExit.Size = New System.Drawing.Size(96, 24) + Me.btnExit.TabIndex = 3 + Me.btnExit.Text = "E&xit" + ' + 'fraAddEdit + ' + Me.fraAddEdit.Anchor = CType(((Windows.Forms.AnchorStyles.Bottom Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.fraAddEdit.Controls.Add(Me.btnRevert) + Me.fraAddEdit.Controls.Add(Me.btnCancel) + Me.fraAddEdit.Controls.Add(Me.btnSave) + Me.fraAddEdit.Location = New System.Drawing.Point(10, 320) + Me.fraAddEdit.Name = "fraAddEdit" + Me.fraAddEdit.Size = New System.Drawing.Size(1064, 272) + Me.fraAddEdit.TabIndex = 4 + Me.fraAddEdit.TabStop = False + Me.fraAddEdit.Text = "Add..." + ' + 'btnRevert + ' + Me.btnRevert.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnRevert.Location = New System.Drawing.Point(952, 80) + Me.btnRevert.Name = "btnRevert" + Me.btnRevert.Size = New System.Drawing.Size(104, 24) + Me.btnRevert.TabIndex = 2 + Me.btnRevert.Text = "&Revert" + ' + 'btnCancel + ' + Me.btnCancel.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnCancel.Location = New System.Drawing.Point(952, 48) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(104, 24) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "&Cancel" + ' + 'btnSave + ' + Me.btnSave.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnSave.Location = New System.Drawing.Point(952, 16) + Me.btnSave.Name = "btnSave" + Me.btnSave.Size = New System.Drawing.Size(104, 24) + Me.btnSave.TabIndex = 0 + Me.btnSave.Text = "&Save" + ' + 'lvwExistingItemsList + ' + Me.lvwExistingItemsList.Anchor = CType(((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.lvwExistingItemsList.FullRowSelect = True + Me.lvwExistingItemsList.GridLines = True + Me.lvwExistingItemsList.HideSelection = False + Me.lvwExistingItemsList.Location = New System.Drawing.Point(8, 8) + Me.lvwExistingItemsList.MultiSelect = False + Me.lvwExistingItemsList.Name = "lvwExistingItemsList" + Me.lvwExistingItemsList.Size = New System.Drawing.Size(960, 312) + Me.lvwExistingItemsList.TabIndex = 0 + Me.lvwExistingItemsList.UseCompatibleStateImageBehavior = False + Me.lvwExistingItemsList.View = Windows.Forms.View.Details + ' + 'BaseEditForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1080, 598) + Me.Controls.Add(Me.lvwExistingItemsList) + Me.Controls.Add(Me.fraAddEdit) + Me.Controls.Add(Me.btnExit) + Me.Controls.Add(Me.btnDelete) + Me.Controls.Add(Me.btnEdit) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MinimumSize = New System.Drawing.Size(848, 568) + Me.Name = "BaseEditForm" + Me.Text = "BaseEditForm" + Me.fraAddEdit.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub BaseEditForm_FormClosed(ByVal sender As Object, ByVal e As Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed + MyGlobals.FlushCachedObjects() + End Sub + + Private Sub BaseEditForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Me.DesignMode Then + MessageBox.Show("The BaseEditForm class must be inherited, and contains methods that must be overridden." + vbCrLf + "They have been declared in the base class and will throw NotImplementedException at runtime if not overridden.") + End If + MyGlobals.FlushCachedObjects() + lvwExistingItemsList.Sorting = SortOrder.None + mintCurrentSortColumn = 0 + mvalEditingOrAdding = EditingOrAdding.NoAction + LoadExistingItemsList() + InitializeDetailControls() + EnableDisableControls() + 'Dim lobjColumnClickEventArgs As New Windows.Forms.ColumnClickEventArgs(0) + 'lvwExistingItemsList_ColumnClick(Me, lobjColumnClickEventArgs) + lvwExistingItemsList.Height = fraAddEdit.Top - lvwExistingItemsList.Top - 10 + End Sub + + Protected Overridable Sub LoadExistingItemsList() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Sub InitializeDetailControls() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Sub EmptyOutDetailControls() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Function DetailControlsHaveSignificantData() As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return False + End Function + + Protected Overridable Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return False + End Function + + Protected Overridable Function DeleteExistingItem(ByVal lstvwItemToDelete As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return True + End Function + + Protected Overridable Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return True + End Function + + Protected Overridable Function SaveNewItem() As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return True + End Function + + Protected Overridable Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return True + End Function + + Protected Overridable Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + Return True + End Function + + Protected Overridable Sub SetFocusToFirstDetailControlForEdit() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Sub UserRequestedToExit() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Sub EditOrAddStarting() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Sub EditOrAddCompleted() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected ReadOnly Property ExistingObjectsListItems() As ListView.ListViewItemCollection + Get + Return lvwExistingItemsList.Items + End Get + End Property + + Protected ReadOnly Property ExistingObjectsListColumns() As ListView.ColumnHeaderCollection + Get + Return lvwExistingItemsList.Columns + End Get + End Property + + Protected ReadOnly Property GetEditingOrAdding() As EditingOrAdding + Get + Return mvalEditingOrAdding + End Get + End Property + + Protected Property MyBaseEditFormColumnSortRules() As clsGridColumnSortRule() + Get + Return mobjEditFormExistingItemColumnSortRules + End Get + Set(ByVal iValue As clsGridColumnSortRule()) + mobjEditFormExistingItemColumnSortRules = iValue + End Set + End Property + Private Sub EnableDisableControls() + Select Case mvalEditingOrAdding + Case EditingOrAdding.Loading + Exit Sub + Case EditingOrAdding.Adding, EditingOrAdding.NoAction + If DetailControlsHaveSignificantData() Then + If btnCancel.Enabled = False Then + EditOrAddStarting() + End If + mvalEditingOrAdding = EditingOrAdding.Adding + lvwExistingItemsList.Enabled = False + btnEdit.Enabled = False + btnDelete.Enabled = False + btnExit.Enabled = False + fraAddEdit.Text = "Add..." + btnSave.Enabled = True + btnCancel.Enabled = True + btnRevert.Enabled = False + Else + If btnCancel.Enabled = True Then + EditOrAddCompleted() + End If + mvalEditingOrAdding = EditingOrAdding.NoAction + lvwExistingItemsList.Enabled = True + btnEdit.Enabled = True + btnDelete.Enabled = True + btnExit.Enabled = True + fraAddEdit.Text = "Add..." + btnSave.Enabled = False + btnCancel.Enabled = False + btnRevert.Enabled = False + End If + Case EditingOrAdding.Editing + If btnCancel.Enabled = False Then + EditOrAddStarting() + End If + lvwExistingItemsList.Enabled = False + btnEdit.Enabled = False + btnDelete.Enabled = False + btnExit.Enabled = False + fraAddEdit.Text = "Edit..." + btnCancel.Enabled = True + If DetailControlsHaveDifferentDataThanExistingData(lvwExistingItemsList.SelectedItems(0)) Then + btnSave.Enabled = True + btnRevert.Enabled = True + Else + btnSave.Enabled = False + btnRevert.Enabled = False + End If + End Select + If Not Me.DesignMode Then + If btnCancel.Enabled Then + Me.CancelButton = btnCancel + Else + Me.CancelButton = Nothing + End If + If btnSave.Enabled Then + Me.AcceptButton = btnSave + Else + Me.AcceptButton = Nothing + End If + End If + End Sub + + + Private Sub btnEdit_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEdit.Click + DoEditClick() + End Sub + + Private Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDelete.Click + If lvwExistingItemsList.SelectedItems.Count = 0 Then + MessageBox.Show("Must select an item to delete", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + If ConfirmOKToDeleteExistingItem(lvwExistingItemsList.SelectedItems(0)) Then + If DeleteExistingItem(lvwExistingItemsList.SelectedItems(0)) Then + lvwExistingItemsList.Items.Remove(lvwExistingItemsList.SelectedItems(0)) + End If + End If + End Sub + + Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click + EmptyOutDetailControls() + mvalEditingOrAdding = EditingOrAdding.NoAction + EnableDisableControls() + SetFocusToFirstDetailControlForEdit() + End Sub + + Private Sub btnRevert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRevert.Click + LoadExistingDataToDetailControls(lvwExistingItemsList.SelectedItems(0)) + SetFocusToFirstDetailControlForEdit() + End Sub + + Private Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click + If mvalEditingOrAdding = EditingOrAdding.Adding Then + If SaveNewItem() Then + mvalEditingOrAdding = EditingOrAdding.NoAction + EmptyOutDetailControls() + EnableDisableControls() + End If + Else + If SaveNewDataForExistingItem(lvwExistingItemsList.SelectedItems(0)) Then + mvalEditingOrAdding = EditingOrAdding.NoAction + EmptyOutDetailControls() + EnableDisableControls() + End If + End If + SetFocusToFirstDetailControlForEdit() + End Sub + + Private Sub DoEditClick() + If lvwExistingItemsList.SelectedItems.Count = 0 Then + MessageBox.Show("Must select an item to edit", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + + mvalEditingOrAdding = EditingOrAdding.Loading + If LoadExistingDataToDetailControls(lvwExistingItemsList.SelectedItems(0)) Then + mvalEditingOrAdding = EditingOrAdding.Editing + EnableDisableControls() + Else + mvalEditingOrAdding = EditingOrAdding.NoAction + EmptyOutDetailControls() + Exit Sub + End If + End Sub + + Protected Sub DetailDataHasChanged() + EnableDisableControls() + End Sub + + Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click + UserRequestedToExit() + End Sub + + Private Sub lvwExistingItemsList_ColumnClick(ByVal sender As System.Object, ByVal e As Windows.Forms.ColumnClickEventArgs) Handles lvwExistingItemsList.ColumnClick + mintCurrentSortColumn = e.Column + lvwExistingItemsList.ListViewItemSorter = New clsGridSorter(e.Column, mobjEditFormExistingItemColumnSortRules) + End Sub + + Private Sub lvwExistingItemsList_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvwExistingItemsList.DoubleClick + DoEditClick() + End Sub + + Private Sub BaseEditForm_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize + lvwExistingItemsList.Height = fraAddEdit.Top - lvwExistingItemsList.Top - 10 + End Sub + + Private Sub fraAddEdit_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles fraAddEdit.Resize + lvwExistingItemsList.Height = fraAddEdit.Top - lvwExistingItemsList.Top - 10 + End Sub + + Private Sub BaseEditForm_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + If mobjEditFormExistingItemColumnSortRules Is Nothing Then + Exit Sub + End If + + Dim intSavedSortColumn As Integer = mintCurrentSortColumn + 'If there is more than one column, temporarily sort by some other column + 'This is because, when first shown, for some reason, it was sorting only by the first + 'column, with no subsorts. I'm not sure if this is because .NET thinks that we're already + 'sorted by the first column. + If mobjEditFormExistingItemColumnSortRules.Length > 1 Then + Dim intTempSortColumn As Integer + If mintCurrentSortColumn = 0 Then + intTempSortColumn = 1 + Else + intTempSortColumn = 0 + End If + Dim lobjTempColumnClickEventArgs As New Windows.Forms.ColumnClickEventArgs(intTempSortColumn) + lvwExistingItemsList_ColumnClick(Me, lobjTempColumnClickEventArgs) + End If + + 'Sort by the current column + Dim lobjColumnClickEventArgs As New Windows.Forms.ColumnClickEventArgs(intSavedSortColumn) + lvwExistingItemsList_ColumnClick(Me, lobjColumnClickEventArgs) + End Sub + + Public Sub ExistingItemsListSuspendLayout() + lvwExistingItemsList.SuspendLayout() + End Sub + + Public Sub ExistingItemsListResumeLayout() + lvwExistingItemsList.ResumeLayout() + End Sub +End Class + diff --git a/BaseQueryForm.resx b/BaseQueryForm.resx new file mode 100644 index 0000000..7a7fa89 --- /dev/null +++ b/BaseQueryForm.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8A7gDu4A7uAO7gDu4A7uAO7uD4Dg+A4PgOD4Dg+A4PgO4P+HD/hw/4cP+HD/hw/4cODwBw8AcP + AHDwBw8AcPAHDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4 + cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/ + hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+H + D/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP + +HD/hw/4cP+HDg8AcP+HD/hw/4cP+HDwBw7g/wD/hw/4cP+HD/hwD/Du4P8A8AcP+HD/hw8AcA/w7u4A + 7g/wD/hw/4cA/w7gDu7u7u4P8A8AcPAHAP8O7u7u6Znp4A7g/w4P8O4A7u7u7umZ7u7u4P8OD/Du7u6Z + nu7u6e7umZ4A6eAO6ZnumZ7u7unu7pme7unu7umZ7u6e7u7p7u7unu7p7u7u6e7unu7u6e7u7p7u6e7u + 7unu7p7u7u7u7u6enumZ7u7p7pme7u7u7u7ume7pme7u6Znu7u4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/BaseQueryForm.vb b/BaseQueryForm.vb new file mode 100644 index 0000000..06d93c8 --- /dev/null +++ b/BaseQueryForm.vb @@ -0,0 +1,294 @@ +Imports System.Windows.Forms + +Public Class BaseQueryForm + Inherits Windows.Forms.Form + + Private mintCurrentQueryBySortColumn As Integer + Private mintCurrentReportSortColumn As Integer + Private mobjQueryFormQueryByItemColumnSortRules() As clsGridColumnSortRule + Private mobjQueryFormReportItemColumnSortRules() As clsGridColumnSortRule + +#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. + Private WithEvents btnExit As Windows.Forms.Button + Protected WithEvents fraReport As Windows.Forms.GroupBox + Private WithEvents lvwReportItemsList As Windows.Forms.ListView + Friend WithEvents fraQueryBy As Windows.Forms.GroupBox + Private WithEvents lvwQueryByItemsList As Windows.Forms.ListView + Friend WithEvents fraOtherQueryParms As Windows.Forms.GroupBox + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(BaseQueryForm)) + Me.btnExit = New Windows.Forms.Button + Me.fraReport = New Windows.Forms.GroupBox + Me.lvwReportItemsList = New Windows.Forms.ListView + Me.fraQueryBy = New Windows.Forms.GroupBox + Me.lvwQueryByItemsList = New Windows.Forms.ListView + Me.fraOtherQueryParms = New Windows.Forms.GroupBox + Me.fraReport.SuspendLayout() + Me.fraQueryBy.SuspendLayout() + Me.SuspendLayout() + ' + 'btnExit + ' + Me.btnExit.Anchor = CType((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.btnExit.Location = New System.Drawing.Point(976, 16) + Me.btnExit.Name = "btnExit" + Me.btnExit.Size = New System.Drawing.Size(96, 24) + Me.btnExit.TabIndex = 2 + Me.btnExit.Text = "E&xit" + ' + 'fraReport + ' + Me.fraReport.Anchor = CType(((Windows.Forms.AnchorStyles.Bottom Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.fraReport.Controls.Add(Me.lvwReportItemsList) + Me.fraReport.Location = New System.Drawing.Point(10, 320) + Me.fraReport.Name = "fraReport" + Me.fraReport.Size = New System.Drawing.Size(1064, 272) + Me.fraReport.TabIndex = 1 + Me.fraReport.TabStop = False + Me.fraReport.Text = "Add..." + ' + 'lvwReportItemsList + ' + Me.lvwReportItemsList.Anchor = CType((((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Bottom) _ + Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.lvwReportItemsList.FullRowSelect = True + Me.lvwReportItemsList.GridLines = True + Me.lvwReportItemsList.HideSelection = False + Me.lvwReportItemsList.Location = New System.Drawing.Point(8, 16) + Me.lvwReportItemsList.MultiSelect = False + Me.lvwReportItemsList.Name = "lvwReportItemsList" + Me.lvwReportItemsList.Size = New System.Drawing.Size(960, 312) + Me.lvwReportItemsList.TabIndex = 0 + Me.lvwReportItemsList.UseCompatibleStateImageBehavior = False + Me.lvwReportItemsList.View = Windows.Forms.View.Details + ' + 'fraQueryBy + ' + Me.fraQueryBy.Anchor = CType(((Windows.Forms.AnchorStyles.Bottom Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.fraQueryBy.Controls.Add(Me.lvwQueryByItemsList) + Me.fraQueryBy.Controls.Add(Me.fraOtherQueryParms) + Me.fraQueryBy.Location = New System.Drawing.Point(10, 10) + Me.fraQueryBy.Name = "fraQueryBy" + Me.fraQueryBy.Size = New System.Drawing.Size(958, 302) + Me.fraQueryBy.TabIndex = 0 + Me.fraQueryBy.TabStop = False + Me.fraQueryBy.Text = "Query By" + ' + 'lvwQueryByItemsList + ' + Me.lvwQueryByItemsList.Anchor = CType((((Windows.Forms.AnchorStyles.Top Or Windows.Forms.AnchorStyles.Bottom) _ + Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.lvwQueryByItemsList.FullRowSelect = True + Me.lvwQueryByItemsList.GridLines = True + Me.lvwQueryByItemsList.HideSelection = False + Me.lvwQueryByItemsList.Location = New System.Drawing.Point(8, 16) + Me.lvwQueryByItemsList.MultiSelect = False + Me.lvwQueryByItemsList.Name = "lvwQueryByItemsList" + Me.lvwQueryByItemsList.Size = New System.Drawing.Size(944, 200) + Me.lvwQueryByItemsList.TabIndex = 0 + Me.lvwQueryByItemsList.UseCompatibleStateImageBehavior = False + Me.lvwQueryByItemsList.View = Windows.Forms.View.Details + ' + 'fraOtherQueryParms + ' + Me.fraOtherQueryParms.Anchor = CType(((Windows.Forms.AnchorStyles.Bottom Or Windows.Forms.AnchorStyles.Left) _ + Or Windows.Forms.AnchorStyles.Right), Windows.Forms.AnchorStyles) + Me.fraOtherQueryParms.Location = New System.Drawing.Point(8, 216) + Me.fraOtherQueryParms.Name = "fraOtherQueryParms" + Me.fraOtherQueryParms.Size = New System.Drawing.Size(944, 75) + Me.fraOtherQueryParms.TabIndex = 1 + Me.fraOtherQueryParms.TabStop = False + ' + 'BaseQueryForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1080, 598) + Me.Controls.Add(Me.fraQueryBy) + Me.Controls.Add(Me.fraReport) + Me.Controls.Add(Me.btnExit) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MinimumSize = New System.Drawing.Size(848, 568) + Me.Name = "BaseQueryForm" + Me.Text = "BaseQueryForm" + Me.fraReport.ResumeLayout(False) + Me.fraQueryBy.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub BaseQueryForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Me.DesignMode Then + MessageBox.Show("The BaseQueryForm class must be inherited, and contains methods that must be overridden." + vbCrLf + "They have been declared in the base class and will throw NotImplementedException at runtime if not overridden.") + End If + lvwQueryByItemsList.Sorting = SortOrder.None + lvwReportItemsList.Sorting = SortOrder.None + LoadQueryByItemsList() + InitializeReportControls() + Dim lobjQueryByColumnClickEventArgs As New Windows.Forms.ColumnClickEventArgs(0) + lvwQueryByItemsList_ColumnClick(Me, lobjQueryByColumnClickEventArgs) + Dim lobjReportColumnClickEventArgs As New Windows.Forms.ColumnClickEventArgs(0) + lvwReportItemsList_ColumnClick(Me, lobjReportColumnClickEventArgs) + fraQueryBy.Height() = fraReport.Top - fraQueryBy.Top - 10 + If fraOtherQueryParms.Controls.Count > 0 Then + fraOtherQueryParms.Visible = False + lvwQueryByItemsList.Height = fraQueryBy.Height - 10 + Else + lvwQueryByItemsList.Height = fraOtherQueryParms.Top - 10 + End If + lvwReportItemsList.Height = fraReport.Height - 10 + End Sub + + Protected Overridable Sub LoadQueryByItemsList() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Sub InitializeReportControls() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected Overridable Function ReportOnQueryByItem(ByVal lstvwQueryByItem As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Function + + Protected Overridable Function UserWantsDetailOnResult(ByVal lstvwResultItem As ListViewItem) As Boolean + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Function + + Protected Overridable Sub UserRequestedToExit() + If Not Me.DesignMode Then + Throw New NotImplementedException + End If + End Sub + + Protected ReadOnly Property QueryByListItems() As ListView.ListViewItemCollection + Get + Return lvwQueryByItemsList.Items + End Get + End Property + + Protected ReadOnly Property QueryByListColumns() As ListView.ColumnHeaderCollection + Get + Return lvwQueryByItemsList.Columns + End Get + End Property + + Protected Property MyBaseQueryFormQueryByColumnSortRules() As clsGridColumnSortRule() + Get + Return mobjQueryFormQueryByItemColumnSortRules + End Get + Set(ByVal iValue As clsGridColumnSortRule()) + mobjQueryFormQueryByItemColumnSortRules = iValue + End Set + End Property + + Protected ReadOnly Property ReportListItems() As ListView.ListViewItemCollection + Get + Return lvwReportItemsList.Items + End Get + End Property + + Protected ReadOnly Property ReportListColumns() As ListView.ColumnHeaderCollection + Get + Return lvwReportItemsList.Columns + End Get + End Property + + Protected Property MyBaseQueryFormReportColumnSortRules() As clsGridColumnSortRule() + Get + Return mobjQueryFormReportItemColumnSortRules + End Get + Set(ByVal iValue As clsGridColumnSortRule()) + mobjQueryFormReportItemColumnSortRules = iValue + End Set + End Property + + Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click + UserRequestedToExit() + End Sub + + Private Sub lvwQueryByItemsList_ColumnClick(ByVal sender As System.Object, ByVal e As Windows.Forms.ColumnClickEventArgs) + mintCurrentQueryBySortColumn = e.Column + lvwQueryByItemsList.ListViewItemSorter = New clsGridSorter(e.Column, mobjQueryFormQueryByItemColumnSortRules) + End Sub + + Private Sub lvwQueryByItemsList_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + DoReportClick() + End Sub + + Private Sub lvwReportItemsList_ColumnClick(ByVal sender As System.Object, ByVal e As Windows.Forms.ColumnClickEventArgs) Handles lvwReportItemsList.ColumnClick + mintCurrentReportSortColumn = e.Column + lvwReportItemsList.ListViewItemSorter = New clsGridSorter(e.Column, mobjQueryFormReportItemColumnSortRules) + End Sub + + Private Sub lvwReportItemsList_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvwReportItemsList.DoubleClick + DoUserWantsDetailOnResult() + End Sub + + Private Sub DoReportClick() + If lvwQueryByItemsList.SelectedItems.Count = 0 Then + MessageBox.Show("Must select an item to query by", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + + ReportOnQueryByItem(lvwQueryByItemsList.SelectedItems(0)) + 'Check if there are results - if so show them + ' - if not hide them + If lvwReportItemsList.Items.Count = 0 Then + lvwReportItemsList.Visible = False + Else + lvwReportItemsList.Visible = True + End If + End Sub + + Private Sub DoUserWantsDetailOnResult() + If lvwReportItemsList.SelectedItems.Count = 0 Then + MessageBox.Show("Must select an item to show details results for", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + + UserWantsDetailOnResult(lvwReportItemsList.SelectedItems(0)) + End Sub + +End Class + diff --git a/My Project/Application.myapp b/My Project/Application.myapp new file mode 100644 index 0000000..458ea32 --- /dev/null +++ b/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Form1 + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/MyGlobals.vb b/MyGlobals.vb new file mode 100644 index 0000000..1f0b201 --- /dev/null +++ b/MyGlobals.vb @@ -0,0 +1,109 @@ +Imports System.Data.SqlClient +Imports System.IO +Imports System.Xml.Xsl +Imports System.Collections.Generic +Imports System.Windows.Forms + +Public Class MyGlobals + Public Shared g_objDatabaseLayer As clsDatabaseLayer + Public Shared g_objCachedObjects As Hashtable + Public Shared g_objObjectTypesCached As New List(Of String) + + Public Const COMPOSER_NAME_SIZE As Integer = 60 + Public Const PUBLISHER_NAME_SIZE As Integer = 60 + Public Const PUBLISHER_STREAMING_ALLOWED_SIZE As Integer = 7 + Public Const HYMNAL_NAME_SIZE As Integer = 60 + Public Const HYMNAL_ABBREVIATION_SIZE As Integer = 10 + Public Const BOOK_TITLE_SIZE As Integer = 120 + Public Const HYMN_TUNE_NAME_SIZE As Integer = 60 + Public Const HYMN_NAME_SIZE As Integer = 120 + Public Const WORK_NAME_SIZE As Integer = 150 + Public Const OPUS_INFO_SIZE As Integer = 50 + Public Const INSTRUMENTATION_NAME_SIZE As Integer = 60 + Public Const COLLECTION_STRING As String = "(Collection)" + Public Const NONE_STRING As String = "(None)" + Public Const PUBLISHER_STREAMING_ALLOWED_UNKNOWN As String = "Unknown" + + Public Shared Function GetItemFromHashWithStringKey(ByVal strKeyValue As String, ByVal objHash As Hashtable) As Object + If objHash.ContainsKey(strKeyValue) Then + Return objHash.Item(strKeyValue) + Else + Return Nothing + End If + End Function + + Public Shared Sub FlushCachedObjects() + If g_objCachedObjects Is Nothing Then + g_objCachedObjects = New Hashtable + Else + g_objCachedObjects.Clear() + End If + g_objObjectTypesCached.Clear() + End Sub + + Public Shared Sub AddCachedObject(ByRef objObject As Object, ByVal strKeyValue As String) + If g_objCachedObjects Is Nothing Then + FlushCachedObjects() + End If + + If g_objCachedObjects.ContainsKey(strKeyValue) Then + g_objCachedObjects.Remove(strKeyValue) + End If + g_objCachedObjects.Add(strKeyValue, objObject) + End Sub + + Public Shared Sub RemoveCachedObject(ByVal strKeyValue As String) + If g_objCachedObjects Is Nothing Then + FlushCachedObjects() + End If + + If g_objCachedObjects.ContainsKey(strKeyValue) Then + g_objCachedObjects.Remove(strKeyValue) + End If + End Sub + + Public Shared Function CachedObjectExists(ByVal strKeyValue As String) As Boolean + If g_objCachedObjects Is Nothing Then + FlushCachedObjects() + End If + + Return g_objCachedObjects.ContainsKey(strKeyValue) + End Function + + Public Shared Function CachedObjectRetrieve(ByVal strKeyValue As String) As Object + If g_objCachedObjects Is Nothing Then + FlushCachedObjects() + End If + + Return GetItemFromHashWithStringKey(strKeyValue, g_objCachedObjects) + End Function + + Public Shared Function AllowKeypressInNumericTextBox(ByVal sChar As Char) As Boolean + If Not Char.IsDigit(sChar) Then + Select Case Asc(sChar) + Case 8, 3, 24 '8=Backspace,3=ctrlC,24=ctrlX + 'Let these through + Case 22 '22=ctrlV + If Clipboard.GetDataObject.GetDataPresent("System.String", True) Then + Dim sClipboardText As String + sClipboardText = Clipboard.GetDataObject.GetData("System.String", True).ToString + Dim sCharInClipboard As Char + For Each sCharInClipboard In sClipboardText + If Not Char.IsDigit(sCharInClipboard) Then + 'There is a non-digit in the clipboard - don't allow the paste + Return False + End If + Next + Else + Return False + End If + Case Else + Return False + End Select + End If + + Return True + + End Function + +End Class diff --git a/ORGANLIT.ICO b/ORGANLIT.ICO new file mode 100644 index 0000000..4d547a6 Binary files /dev/null and b/ORGANLIT.ICO differ diff --git a/OrganLit.exe.config b/OrganLit.exe.config new file mode 100644 index 0000000..c2a88da --- /dev/null +++ b/OrganLit.exe.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/OrganLit.sln b/OrganLit.sln new file mode 100644 index 0000000..e1a7f31 --- /dev/null +++ b/OrganLit.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33122.133 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "OrganLit", "OrganLit.vbproj", "{77265D90-970B-4B0E-A99F-974E4EA852D0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {77265D90-970B-4B0E-A99F-974E4EA852D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77265D90-970B-4B0E-A99F-974E4EA852D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77265D90-970B-4B0E-A99F-974E4EA852D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77265D90-970B-4B0E-A99F-974E4EA852D0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {01F7DDB8-06D9-492A-A62A-DDBA84268474} + EndGlobalSection +EndGlobal diff --git a/OrganLit.vbproj b/OrganLit.vbproj new file mode 100644 index 0000000..ef5cb25 --- /dev/null +++ b/OrganLit.vbproj @@ -0,0 +1,81 @@ + + + net7.0-windows + Local + ORGANLIT.ICO + + + None + JScript + Grid + IE50 + false + WinExe + On + OrganLit.frmMain + WindowsFormsWithCustomSubMain + false + true + true + false + + + OrganLit.xml + 285212672 + + + false + false + 42016,42017,42018,42019,42032,42353,42354,42355 + + + OrganLit.xml + 285212672 + + + false + false + false + 42016,42017,42018,42019,42032,42353,42354,42355 + none + + + + References\combotypeahead.dll + + + System + + + System.Data + + + System.Drawing + + + System.XML + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OrganLitHymnTuneBased.xsl b/OrganLitHymnTuneBased.xsl new file mode 100644 index 0000000..52ab5fd --- /dev/null +++ b/OrganLitHymnTuneBased.xsl @@ -0,0 +1,149 @@ + + + + + + + OrganLit - Hymn Tune Names, Hymns and Works + + +

Hymn Tune Names, Hymns and Works

+ + + +
+
+ OrganLit Home + + +
+ + +

+ + + + +
Tune Name (with potential alternate names or spellings):
+ + + + +
+ + + + + +
+ + + +
Hymn(s):
+ + + + + +
+ + + + + +
+ + +
Work(s):
+
+ + + + + + + + + +

+
+ + +
Tune Name:
+
+ + +

+
+ + +
Hymn:
+
+ + +

+
+ + +
+ + + " + - + " + + + + + + + + + + + + p. + + + + ( + + ) + +
+
+
+ + + + + + + + + (Collection) + + + (Collection - ) + + + + + + (filed under + + ) + + + + + + - Publisher Streaming Allowed Unknown + + + - Publisher Streaming Allowed + + + + +
diff --git a/OrganLitHymnTuneBasedByTune.xsl b/OrganLitHymnTuneBasedByTune.xsl new file mode 100644 index 0000000..ef362a1 --- /dev/null +++ b/OrganLitHymnTuneBasedByTune.xsl @@ -0,0 +1,151 @@ + + + + + + + + OrganLit - Hymn Tune Names, Hymns and Works + + +

Hymn Tune Names, Hymns and Works

+ + + +
+
+
OrganLit Home + + + + + +

+ + + + +
Tune Name (with potential alternate names or spellings):
+ + + + +
+ + + + + +
+ + + +

Hymn(s):
+ + + + + +
+ + + + + +
+ + +

Work(s):
+
+ + + + + + + + + +

+
+
+ + +
Tune Name:
+
+ + +

+
+ + +
Hymn:
+
+ + +

+
+ + +
+ + + " + - + " + + + + + + + + + + + + p. + + + + ( + + ) + +
+
+
+ + + + + + + + + (Collection) + + + (Collection - ) + + + + + + (filed under + + ) + + + + + + - Publisher Streaming Allowed Unknown + + + - Publisher Streaming Allowed + + + + + diff --git a/OrganLitIndexByBook.xsl b/OrganLitIndexByBook.xsl new file mode 100644 index 0000000..e86e4a8 --- /dev/null +++ b/OrganLitIndexByBook.xsl @@ -0,0 +1,51 @@ + + + + + + + OrganLit - Index By Book + + +

Index By Book

+ + + + + + +
+
+
OrganLit Home + + + + + +
+ + + +
+
+ + + + + + + + (Collection) + + + (Collection - ) + + + + + + + + + + diff --git a/OrganLitIndexByComposer.xsl b/OrganLitIndexByComposer.xsl new file mode 100644 index 0000000..c5c8d6a --- /dev/null +++ b/OrganLitIndexByComposer.xsl @@ -0,0 +1,31 @@ + + + + + + + OrganLit - Index By Composer + + +

Index By Composer

+ + + + +
+
+ OrganLit Home + + +
+ + +
+ + + +
+
+ + +
diff --git a/OrganLitIndexByHymn.xsl b/OrganLitIndexByHymn.xsl new file mode 100644 index 0000000..fcb36c2 --- /dev/null +++ b/OrganLitIndexByHymn.xsl @@ -0,0 +1,41 @@ + + + + + + + OrganLit - Index By Hymn + + +

Index By Hymn

+ + + + +
+
+ OrganLit Home + + +
+ + +

+ + + + +
+ + +
+ + + + + + +
+
+ +
diff --git a/OrganLitIndexByHymnTuneName.xsl b/OrganLitIndexByHymnTuneName.xsl new file mode 100644 index 0000000..cf94a0d --- /dev/null +++ b/OrganLitIndexByHymnTuneName.xsl @@ -0,0 +1,26 @@ + + + + + + + OrganLit - Index By Hymn Tune Name + + +

Index By Hymn Tune Name

+ + + + +
+
+ OrganLit Home + + +
+ + +

+
+ +
diff --git a/OrganLitNonHymnTuneBased.xsl b/OrganLitNonHymnTuneBased.xsl new file mode 100644 index 0000000..0294286 --- /dev/null +++ b/OrganLitNonHymnTuneBased.xsl @@ -0,0 +1,101 @@ + + + + + + + OrganLit - Non-Hymn-Tune-Based Works By Composer + + +

Organ Works Not based on HymnTunes

+ + + + + + + +
+
+ OrganLit Home + + +
+ + + + +

+ + + + + + + + + +

+
+
+ + + +
" + - + " + + + + + + + + + + + p. + + + + ( + + ) + +
+
+
+ + + + + + + + + (Collection) + + + (Collection - ) + + + + + + (filed under + + ) + + + + + + - Publisher Streaming Allowed Unknown + + + - Publisher Streaming Allowed + + + + +
diff --git a/OrganLitWorksByBook.xsl b/OrganLitWorksByBook.xsl new file mode 100644 index 0000000..32aecb5 --- /dev/null +++ b/OrganLitWorksByBook.xsl @@ -0,0 +1,84 @@ + + + + + + + OrganLit - Works By Book + + +

Works By Book

+ + + + + + +
+
+ OrganLit Home + + +
+ + +

+
+ + +
+ + + + +

+
+ + +
+ + + + + p. + + + " + - + " + + + + + +
+
+ + + + + + + + (Collection) + + + (Collection - ) + + + + + + + + + + - Publisher Streaming Allowed Unknown + + + - Publisher Streaming Allowed + + + + +
diff --git a/OrganLitWorksByComposer.xsl b/OrganLitWorksByComposer.xsl new file mode 100644 index 0000000..ad79476 --- /dev/null +++ b/OrganLitWorksByComposer.xsl @@ -0,0 +1,91 @@ + + + + + + + OrganLit - Works By Composer + + +

Works By Composer

+ + + + +
+
+
OrganLit Home + + + + + +

+ +

+ + + + + + + +

+
+ + +
+ " + - + " + + + + + + + + + + + + p. + + +
+
+
+ + + + + + + + + (Collection) + + + (Collection - ) + + + + + + (filed under + + ) + + + + + + - Publisher Streaming Allowed Unknown + + + - Publisher Streaming Allowed + + + + + diff --git a/References/combotypeahead.dll b/References/combotypeahead.dll new file mode 100644 index 0000000..d55d4d6 Binary files /dev/null and b/References/combotypeahead.dll differ diff --git a/app.config b/app.config new file mode 100644 index 0000000..59be084 --- /dev/null +++ b/app.config @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clsBook.vb b/clsBook.vb new file mode 100644 index 0000000..dbc9976 --- /dev/null +++ b/clsBook.vb @@ -0,0 +1,553 @@ +Imports System.Data +Imports System.Text +Imports System.Windows.Forms +Imports System.Xml + +Public Class clsBook + Implements ICloneable + + Private mguidBookID As Guid + Private m_objComposer As clsComposer + Private m_objInstrumentation As clsInstrumentation + Private m_strBookTitle As String + Private m_objPublisher As clsPublisher + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidBookID = Guid.NewGuid + m_objComposer = Nothing + m_objInstrumentation = Nothing + m_strBookTitle = "" + m_objPublisher = Nothing + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal objComposer As clsComposer, ByVal strBookTitle As String, ByVal objInstrumentation As clsInstrumentation, ByVal objPublisher As clsPublisher) + mguidBookID = Guid.NewGuid + m_objComposer = objComposer + m_objInstrumentation = objInstrumentation + m_strBookTitle = strBookTitle + m_objPublisher = objPublisher + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal guidBookID As Guid) + mguidBookID = guidBookID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_book" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmBookID.Size = 5 + prmBookID.Value = guidBookID + ldbcmdCommand.Parameters.Add(prmBookID) + + Dim ldbdsBooks As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsBooks.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsBooks.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.BookID.ToString) + End If + ldbdsBooks.Clear() + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.BookID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + mguidBookID = CType(ldbrwRow.Item("book_id"), Guid) + + If ldbrwRow.IsNull("composer_id") Then + m_objComposer = Nothing + Else + Dim guidComposerID As Guid = CType(ldbrwRow.Item("composer_id"), Guid) + If MyGlobals.CachedObjectExists(guidComposerID.ToString) Then + m_objComposer = CType(MyGlobals.CachedObjectRetrieve(guidComposerID.ToString), clsComposer) + Else + m_objComposer = New clsComposer(guidComposerID) + End If + End If + + If ldbrwRow.IsNull("instrumentation_id") Then + m_objInstrumentation = Nothing + Else + Dim guidInstrumentationID As Guid = CType(ldbrwRow.Item("instrumentation_id"), Guid) + If MyGlobals.CachedObjectExists(guidInstrumentationID.ToString) Then + m_objInstrumentation = CType(MyGlobals.CachedObjectRetrieve(guidInstrumentationID.ToString), clsInstrumentation) + Else + m_objInstrumentation = New clsInstrumentation(guidInstrumentationID) + End If + End If + + m_strBookTitle = CType(ldbrwRow.Item("book_title"), String) + + If ldbrwRow.IsNull("publisher_id") Then + m_objPublisher = Nothing + Else + Dim guidPublisherID As Guid = CType(ldbrwRow.Item("publisher_id"), Guid) + If MyGlobals.CachedObjectExists(guidPublisherID.ToString) Then + m_objPublisher = CType(MyGlobals.CachedObjectRetrieve(guidPublisherID.ToString), clsPublisher) + Else + m_objPublisher = New clsPublisher(guidPublisherID) + End If + End If + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.BookID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_book" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmBookID.Size = 5 + prmBookID.Value = mguidBookID + ldbcmdCommand.Parameters.Add(prmBookID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + If Not m_objComposer Is Nothing Then + If Not m_objComposer.ItemAlreadyPersisted Then + m_objComposer.Save() + End If + End If + If Not m_objInstrumentation Is Nothing Then + If Not m_objInstrumentation.ItemAlreadyPersisted Then + m_objInstrumentation.Save() + End If + End If + If Not m_objPublisher Is Nothing Then + If Not m_objPublisher.ItemAlreadyPersisted Then + m_objPublisher.Save() + End If + End If + + MyGlobals.AddCachedObject(Me, Me.BookID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_book" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmBookID.Value = mguidBookID + ldbcmdCommand.Parameters.Add(prmBookID) + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + If m_objComposer Is Nothing Then + prmComposerID.Value = DBNull.Value + Else + prmComposerID.Value = m_objComposer.ComposerID + End If + ldbcmdCommand.Parameters.Add(prmComposerID) + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + If m_objInstrumentation Is Nothing Then + prmInstrumentationID.Value = DBNull.Value + Else + prmInstrumentationID.Value = m_objInstrumentation.InstrumentationID + End If + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + ' Set up parameter for stored procedure + Dim prmBookTitle As New SqlClient.SqlParameter + prmBookTitle.ParameterName = "@book_title" + prmBookTitle.SqlDbType = SqlDbType.VarChar + prmBookTitle.Size = MyGlobals.BOOK_TITLE_SIZE + prmBookTitle.Value = m_strBookTitle + ldbcmdCommand.Parameters.Add(prmBookTitle) + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + If m_objPublisher Is Nothing Then + prmPublisherID.Value = DBNull.Value + Else + prmPublisherID.Value = m_objPublisher.PublisherID + End If + ldbcmdCommand.Parameters.Add(prmPublisherID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_book" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmBookID.Value = mguidBookID + ldbcmdCommand.Parameters.Add(prmBookID) + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + If m_objComposer Is Nothing Then + prmComposerID.Value = DBNull.Value + Else + prmComposerID.Value = m_objComposer.ComposerID + End If + ldbcmdCommand.Parameters.Add(prmComposerID) + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + If m_objInstrumentation Is Nothing Then + prmInstrumentationID.Value = DBNull.Value + Else + prmInstrumentationID.Value = m_objInstrumentation.InstrumentationID + End If + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + ' Set up parameter for stored procedure + Dim prmBookTitle As New SqlClient.SqlParameter + prmBookTitle.ParameterName = "@book_title" + prmBookTitle.SqlDbType = SqlDbType.VarChar + prmBookTitle.Size = MyGlobals.BOOK_TITLE_SIZE + prmBookTitle.Value = m_strBookTitle + ldbcmdCommand.Parameters.Add(prmBookTitle) + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + If m_objPublisher Is Nothing Then + prmPublisherID.Value = DBNull.Value + Else + prmPublisherID.Value = m_objPublisher.PublisherID + End If + ldbcmdCommand.Parameters.Add(prmPublisherID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch e As SqlClient.SqlException + MessageBox.Show(e.Message) + Return False + Catch + Return False + End Try + + End Function + + Public Property BookID() As Guid + Get + Return mguidBookID + End Get + Set(ByVal Value As Guid) + mguidBookID = Value + End Set + End Property + + Public Property Composer() As clsComposer + Get + Return m_objComposer + End Get + Set(ByVal Value As clsComposer) + m_objComposer = Value + End Set + End Property + + Public Property Instrumentation() As clsInstrumentation + Get + Return m_objInstrumentation + End Get + Set(ByVal Value As clsInstrumentation) + m_objInstrumentation = Value + End Set + End Property + + Public Property BookTitle() As String + Get + Return m_strBookTitle + End Get + Set(ByVal Value As String) + m_strBookTitle = Value.Trim + End Set + End Property + + Public Property Publisher() As clsPublisher + Get + Return m_objPublisher + End Get + Set(ByVal Value As clsPublisher) + m_objPublisher = Value + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsBook + lobjReturnValue.BookID = Me.BookID + lobjReturnValue.Composer = Me.Composer + lobjReturnValue.Instrumentation = Me.Instrumentation + lobjReturnValue.BookTitle = Me.BookTitle + lobjReturnValue.Publisher = Me.Publisher + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherBook As clsBook) As Boolean + Dim blnResult As Boolean + + If Me.BookID.Equals(lobjOtherBook.BookID) _ + AndAlso Me.BookTitle = lobjOtherBook.BookTitle Then + blnResult = True + + If Me.Composer Is Nothing Then + If lobjOtherBook.Composer Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherBook.Composer Is Nothing Then + Return False + Else + blnResult = Me.Composer.ComposerID.Equals(lobjOtherBook.Composer.ComposerID) + End If + End If + + If Not blnResult Then + Return False + End If + + If Me.Instrumentation Is Nothing Then + If lobjOtherBook.Instrumentation Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherBook.Instrumentation Is Nothing Then + Return False + Else + blnResult = Me.Instrumentation.InstrumentationID.Equals(lobjOtherBook.Instrumentation.InstrumentationID) + End If + End If + + If Not blnResult Then + Return False + End If + + If Me.Publisher Is Nothing Then + If lobjOtherBook.Publisher Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherBook.Publisher Is Nothing Then + Return False + Else + blnResult = Me.Publisher.PublisherID.Equals(lobjOtherBook.Publisher.PublisherID) + End If + End If + Else + Return False + End If + + Return blnResult + + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + If Me.BookTitle.Length = 0 Then + lstrErrorString = "Book Title is required" + Return False + End If + + If Me.Publisher Is Nothing Then + lstrErrorString = "Publisher is required" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + Dim lblnReturnValue As Boolean + + lblnReturnValue = True + + lstrReferencedByString = "" + + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_book_isreferenced" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmBookID.Size = 5 + prmBookID.Value = mguidBookID + ldbcmdCommand.Parameters.Add(prmBookID) + + Dim ldbdsBooks As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsBooks.Tables(0).Rows.Count > 0 Then + lblnReturnValue = False + + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsBooks.Tables(0).Rows + If Not ldbrwRow.IsNull("table_referencing_instance") Then + If lstrReferencedByString.Length = 0 Then + lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + Else + lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + End If + End If + Next + + End If + ldbdsBooks.Clear() + + Return lblnReturnValue + + End Function + + Public Overrides Function ToString() As String + Dim strReturnString As New StringBuilder + + If m_objComposer Is Nothing Then + strReturnString.Append(MyGlobals.COLLECTION_STRING) + Else + strReturnString.Append(m_objComposer.ComposerName) + End If + + strReturnString.Append(" - ") + strReturnString.Append(m_strBookTitle) + + Return strReturnString.ToString + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Book") + + objXMLWriter.WriteElementString("BookID", Me.BookID.ToString) + objXMLWriter.WriteElementString("BookTitle", Me.BookTitle) + If Me.Composer Is Nothing Then + objXMLWriter.WriteElementString("ComposerID", "") + Else + objXMLWriter.WriteElementString("ComposerID", Me.Composer.ComposerID.ToString) + Me.Composer.WriteXML(objXMLWriter) + End If + If Me.Instrumentation Is Nothing Then + objXMLWriter.WriteElementString("InstrumentationID", "") + Else + objXMLWriter.WriteElementString("InstrumentationID", Me.Instrumentation.InstrumentationID.ToString) + Me.Instrumentation.WriteXML(objXMLWriter) + End If + objXMLWriter.WriteElementString("BookPublisherID", Me.Publisher.PublisherID.ToString) + Me.Publisher.WriteXML(objXMLWriter) + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllBooks() As System.Collections.Generic.List(Of clsBook) + + 'Preload to cache + clsComposer.AddAllComposersToCache() + clsInstrumentation.AddAllInstrumentationsToCache() + clsPublisher.AddAllPublishersToCache() + + Dim lguidBookID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjBook As clsBook + Dim lcolBooks As New System.Collections.Generic.List(Of clsBook) + + ldbcmdCommand.CommandText = "sel_book_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + + Dim ldbdsBooks As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsBooks.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsBooks.Tables(0).Rows + lguidBookID = CType(ldbrwRow.Item("book_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidBookID.ToString) Then + lobjBook = CType(MyGlobals.CachedObjectRetrieve(lguidBookID.ToString), clsBook) + Else + 'lobjBook = New clsBook(lguidBookID) + lobjBook = New clsBook(ldbrwRow) + End If + lcolBooks.Add(lobjBook) + Next + End If + ldbdsBooks.Clear() + + Return lcolBooks + End Function + + Public Shared Sub AddAllBooksToCache() + If MyGlobals.g_objObjectTypesCached.Contains("Books") = False Then + GetAllBooks() + MyGlobals.g_objObjectTypesCached.Add("Books") + End If + End Sub +End Class diff --git a/clsComposer.vb b/clsComposer.vb new file mode 100644 index 0000000..9745089 --- /dev/null +++ b/clsComposer.vb @@ -0,0 +1,371 @@ +Imports System.Data +Imports System.Xml + +Public Class clsComposer + Implements ICloneable + + Private mguidComposerID As Guid + Private mstrComposerName As String + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidComposerID = Guid.NewGuid + mstrComposerName = "" + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal lstrComposerName As String) + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_composer_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerName As New SqlClient.SqlParameter + prmComposerName.ParameterName = "@composer_name" + prmComposerName.SqlDbType = SqlDbType.VarChar + prmComposerName.Size = MyGlobals.COMPOSER_NAME_SIZE + prmComposerName.Value = lstrComposerName + ldbcmdCommand.Parameters.Add(prmComposerName) + + Dim ldbdsComposers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsComposers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsComposers.Tables(0).Rows(0) + + PopulateFromDBRow(ldbrwRow) + + ldbdsComposers.Clear() + m_blnObjectAlreadyPersisted = True + Else + ldbdsComposers.Clear() + mguidComposerID = Guid.NewGuid + mstrComposerName = lstrComposerName.Trim + m_blnObjectAlreadyPersisted = False + End If + End Sub + + Public Sub New(ByVal lguidComposerID As Guid) + mguidComposerID = lguidComposerID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_composer" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmComposerID.Value = lguidComposerID + ldbcmdCommand.Parameters.Add(prmComposerID) + + Dim ldbdsComposers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsComposers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsComposers.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.ComposerID.ToString) + End If + ldbdsComposers.Clear() + + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.ComposerID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + mguidComposerID = CType(ldbrwRow.Item("composer_id"), Guid) + + mstrComposerName = CType(ldbrwRow.Item("composer_name"), String) + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.ComposerID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_composer" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmComposerID.Value = mguidComposerID + ldbcmdCommand.Parameters.Add(prmComposerID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = False + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + MyGlobals.AddCachedObject(Me, Me.ComposerID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_composer" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmComposerID.Value = mguidComposerID + ldbcmdCommand.Parameters.Add(prmComposerID) + ' Set up parameter for stored procedure + Dim prmComposerName As New SqlClient.SqlParameter + prmComposerName.ParameterName = "@composer_name" + prmComposerName.SqlDbType = SqlDbType.VarChar + prmComposerName.Size = MyGlobals.COMPOSER_NAME_SIZE + prmComposerName.Value = mstrComposerName + ldbcmdCommand.Parameters.Add(prmComposerName) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_composer" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmComposerID.Value = mguidComposerID + ldbcmdCommand.Parameters.Add(prmComposerID) + ' Set up parameter for stored procedure + Dim prmComposerName As New SqlClient.SqlParameter + prmComposerName.ParameterName = "@composer_name" + prmComposerName.SqlDbType = SqlDbType.VarChar + prmComposerName.Size = MyGlobals.COMPOSER_NAME_SIZE + prmComposerName.Value = mstrComposerName + ldbcmdCommand.Parameters.Add(prmComposerName) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch + Return False + End Try + + End Function + + Public Function DuplicateExists(ByVal lstrComposerNameToCheck As String) As Boolean + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_composer_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerName As New SqlClient.SqlParameter + prmComposerName.ParameterName = "@composer_name" + prmComposerName.SqlDbType = SqlDbType.VarChar + prmComposerName.Size = MyGlobals.COMPOSER_NAME_SIZE + prmComposerName.Value = lstrComposerNameToCheck + ldbcmdCommand.Parameters.Add(prmComposerName) + + Dim ldbdsComposers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsComposers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsComposers.Tables(0).Rows + If mguidComposerID.Equals(CType(ldbrwRow.Item("composer_id"), Guid)) Then + 'OK + Else + ldbdsComposers.Clear() + Return True + End If + Next + End If + ldbdsComposers.Clear() + Return False + Catch + Return False + End Try + + End Function + + Public Property ComposerID() As Guid + Get + Return mguidComposerID + End Get + + Set(ByVal lguidValue As Guid) + mguidComposerID = lguidValue + End Set + End Property + + Public Property ComposerName() As String + Get + Return mstrComposerName + End Get + + Set(ByVal sValue As String) + mstrComposerName = sValue.Trim + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsComposer + lobjReturnValue.ComposerID = Me.ComposerID + lobjReturnValue.ComposerName = Me.ComposerName + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherComposer As clsComposer) As Boolean + If Me.ComposerID.Equals(lobjOtherComposer.ComposerID) _ + AndAlso Me.ComposerName = lobjOtherComposer.ComposerName Then + Return True + Else + Return False + End If + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + If Me.ComposerName.Length = 0 Then + lstrErrorString = "Composer Name is required" + Return False + End If + + If Me.DuplicateExists(Me.ComposerName) Then + lstrErrorString = "Given Composer Name already exists" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + Dim lblnReturnValue As Boolean + + lblnReturnValue = True + + lstrReferencedByString = "" + + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_composer_isreferenced" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + prmComposerID.Value = mguidComposerID + ldbcmdCommand.Parameters.Add(prmComposerID) + + Dim ldbdsComposers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsComposers.Tables(0).Rows.Count > 0 Then + lblnReturnValue = False + + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsComposers.Tables(0).Rows + If Not ldbrwRow.IsNull("table_referencing_instance") Then + If lstrReferencedByString.Length = 0 Then + lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + Else + lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + End If + End If + Next + + End If + ldbdsComposers.Clear() + + Return lblnReturnValue + + End Function + + Public Overrides Function ToString() As String + Return mstrComposerName + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Composer") + + objXMLWriter.WriteElementString("ComposerID", Me.ComposerID.ToString) + objXMLWriter.WriteElementString("ComposerName", Me.ComposerName) + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllComposers() As System.Collections.Generic.List(Of clsComposer) + Dim lguidComposerID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjComposer As clsComposer + Dim lcolComposers As New System.Collections.Generic.List(Of clsComposer) + + ldbcmdCommand.CommandText = "sel_composer_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsComposers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsComposers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsComposers.Tables(0).Rows + lguidComposerID = CType(ldbrwRow.Item("composer_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidComposerID.ToString) Then + lobjComposer = CType(MyGlobals.CachedObjectRetrieve(lguidComposerID.ToString), clsComposer) + Else + 'lobjComposer = New clsComposer(lguidComposerID) + lobjComposer = New clsComposer(ldbrwRow) + End If + lcolComposers.Add(lobjComposer) + Next + End If + ldbdsComposers.Clear() + + Return lcolComposers + End Function + + Public Shared Sub AddAllComposersToCache() + If MyGlobals.g_objObjectTypesCached.Contains("Composers") = False Then + GetAllComposers() + MyGlobals.g_objObjectTypesCached.Add("Composers") + End If + End Sub + +End Class diff --git a/clsDatabaseLayer.vb b/clsDatabaseLayer.vb new file mode 100644 index 0000000..6e41cc0 --- /dev/null +++ b/clsDatabaseLayer.vb @@ -0,0 +1,75 @@ +Imports System.Data +Imports System.Windows.Forms + +Public Class clsDatabaseLayer + Private m_dbcnctConnection As SqlClient.SqlConnection + + Public Function OpenDatabaseConnection() As Boolean + Try + m_dbcnctConnection = New SqlClient.SqlConnection + 'm_dbcnctConnection.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=OrganLit;server=REUSS\SQLEXPRESS;Connect Timeout=30" + 'm_dbcnctConnection.ConnectionString = "Persist Security Info=False;Integrated Security=False;User ID=OrganLitDBLogin;Password=OrganLitDBL0gin7;database=OrganLit;server=REUSS\SQLEXPRESS;Connect Timeout=30" + 'm_dbcnctConnection.ConnectionString = "Persist Security Info=False;Integrated Security=False;User ID=OrganLitDBLogin;Password=OrganLitDBL0gin7;database=OrganLit;server=SIRJON\REUSSSQL;Connect Timeout=30" + 'm_dbcnctConnection.ConnectionString = "Persist Security Info=False;Integrated Security=False;User ID=OrganLitDBLogin;Password=OrganLitDBL0gin7;database=OrganLit;server=SIRJ\REUSSSQL;Connect Timeout=30" + m_dbcnctConnection.ConnectionString = "Persist Security Info=False;Integrated Security=True;database=OrganLit;server=SIRJ\REUSSSQL;Connect Timeout=30" + m_dbcnctConnection.Open() + Return True + Catch e As SqlClient.SqlException + MessageBox.Show("Error in OpenDatabaseConnection: " + e.Message) + Return False + Catch e As Exception + MessageBox.Show("Error in OpenDatabaseConnection: " + e.Message) + Return False + End Try + End Function + + Public Function CloseDatabaseConnection() As Boolean + Try + m_dbcnctConnection.Close() + Catch e As SqlClient.SqlException + MessageBox.Show("Error in CloseDatabaseConnection: " + e.Message) + Return False + Catch e As Exception + MessageBox.Show("Error in CloseDatabaseConnection: " + e.Message) + Return False + End Try + + End Function + + Public Function ExecuteDataSet(ByVal objSQLCommand As SqlClient.SqlCommand) As DataSet + Try + objSQLCommand.Connection = m_dbcnctConnection + Dim ldbdaDataAdapter As New SqlClient.SqlDataAdapter + ldbdaDataAdapter.SelectCommand = objSQLCommand + Dim ldbdsDataSet As New DataSet + ldbdaDataAdapter.Fill(ldbdsDataSet) + + Return ldbdsDataSet + Catch e As SqlClient.SqlException + MessageBox.Show("Error in ExecuteDataSet: Procedure=" + e.Procedure + ControlChars.CrLf + "Error=" + e.Message) + Return Nothing + Catch e As Exception + MessageBox.Show("Error in ExecuteDataSet: " + e.Message) + Return Nothing + End Try + End Function + + Public Function ExecuteNonQuery(ByVal objSQLCommand As SqlClient.SqlCommand) As Integer + 'Returns rows affected + + Try + objSQLCommand.Connection = m_dbcnctConnection + Dim lintRowsAffected As Integer = objSQLCommand.ExecuteNonQuery + + Return lintRowsAffected + + Catch e As SqlClient.SqlException + MessageBox.Show("Error in ExecuteNonQuery: Procedure=" + e.Procedure + ControlChars.CrLf + "Error=" + e.Message) + Return 0 + Catch e As Exception + MessageBox.Show("Error in ExecuteNonQuery: " + e.Message) + Return 0 + End Try + End Function + +End Class diff --git a/clsGridSorter.vb b/clsGridSorter.vb new file mode 100644 index 0000000..302ce07 --- /dev/null +++ b/clsGridSorter.vb @@ -0,0 +1,217 @@ +Imports System.Windows.Forms + +Public Class clsGridSorter : Implements IComparer + Dim mintColumnIndexToSort As Integer + Dim mobjGridColumnSortRules() As clsGridColumnSortRule + + Public Sub New() + mintColumnIndexToSort = 0 + End Sub + + Public Sub New(ByVal lintInputColumnToSort As Integer) + mintColumnIndexToSort = lintInputColumnToSort + End Sub + + Public Sub New(ByVal lintInputColumnToSort As Integer, ByVal lobjGridColumnSortRules As clsGridColumnSortRule()) + mintColumnIndexToSort = lintInputColumnToSort + mobjGridColumnSortRules = lobjGridColumnSortRules + End Sub + + Public Property ColumnIndexToSort() As Integer + Get + Return mintColumnIndexToSort + End Get + Set(ByVal iValue As Integer) + mintColumnIndexToSort = iValue + End Set + End Property + + Public Property ColumnSortRules() As clsGridColumnSortRule() + Get + Return mobjGridColumnSortRules + End Get + Set(ByVal iValue As clsGridColumnSortRule()) + mobjGridColumnSortRules = iValue + End Set + End Property + + Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare + Dim row1 As ListViewItem + Dim row2 As ListViewItem + Dim lintReturnValue As Integer + + row1 = CType(x, ListViewItem) + row2 = CType(y, ListViewItem) + + If mintColumnIndexToSort > row1.SubItems.Count Then + Return -1 + End If + If mobjGridColumnSortRules Is Nothing _ + OrElse mintColumnIndexToSort >= mobjGridColumnSortRules.Length Then + 'Default to string comparison + Dim s1 As String = row1.SubItems(0).Text + Dim s2 As String = row2.SubItems(0).Text + Return String.Compare(s1, s2) + End If + Select Case mobjGridColumnSortRules(mintColumnIndexToSort).SortType + Case clsGridColumnSortRule.enumSortType.SortAsNumber + Dim ldblValue1 As Double = Val(row1.SubItems(mintColumnIndexToSort).Text) + Dim ldblValue2 As Double = Val(row2.SubItems(mintColumnIndexToSort).Text) + lintReturnValue = CompareDouble(ldblValue1, ldblValue2) + If lintReturnValue = 0 Then + lintReturnValue = CompareSubColumns(row1, row2, Me.mobjGridColumnSortRules(mintColumnIndexToSort).SubColumnSort) + End If + Return lintReturnValue + Case clsGridColumnSortRule.enumSortType.SortAsString + Dim lstrValue1 As String = row1.SubItems(mintColumnIndexToSort).Text + Dim lstrValue2 As String = row2.SubItems(mintColumnIndexToSort).Text + lintReturnValue = CompareString(lstrValue1, lstrValue2) + If lintReturnValue = 0 Then + lintReturnValue = CompareSubColumns(row1, row2, Me.mobjGridColumnSortRules(mintColumnIndexToSort).SubColumnSort) + End If + Return lintReturnValue + Case Else 'No Sort here - go to subcolumn sorts, if any + lintReturnValue = CompareSubColumns(row1, row2, Me.mobjGridColumnSortRules(mintColumnIndexToSort).SubColumnSort) + Return lintReturnValue + End Select + + Return 0 + End Function + + Private Function CompareString(ByVal lstrString1 As String, ByVal lstrString2 As String) As Integer + Return String.Compare(lstrString1, lstrString2) + End Function + + Private Function CompareDouble(ByVal ldblDouble1 As Double, ByVal ldblDouble2 As Double) As Integer + If ldblDouble1 < ldblDouble2 Then + Return -1 + Else + If ldblDouble2 < ldblDouble1 Then + Return 1 + Else + Return 0 + End If + End If + End Function + + Private Function CompareSubColumns(ByVal row1 As ListViewItem, ByVal row2 As ListViewItem, ByVal lobjSubColumnSort As clsGridSubColumnSortRule) As Integer + Dim lintReturnValue As Integer + + If lobjSubColumnSort Is Nothing Then + Return 0 + Else + If lobjSubColumnSort.ColumnIndex > row1.SubItems.Count Then + Return -1 + End If + Select Case lobjSubColumnSort.SortType + Case clsGridSubColumnSortRule.enumSortType.SortAsNumber + Dim ldblValue1 As Double = Val(row1.SubItems(lobjSubColumnSort.ColumnIndex).Text) + Dim ldblValue2 As Double = Val(row2.SubItems(lobjSubColumnSort.ColumnIndex).Text) + lintReturnValue = CompareDouble(ldblValue1, ldblValue2) + If lintReturnValue = 0 Then + lintReturnValue = CompareSubColumns(row1, row2, lobjSubColumnSort.SubColumnSortRule) + End If + Return lintReturnValue + Case clsGridSubColumnSortRule.enumSortType.SortAsString + Dim lstrValue1 As String = row1.SubItems(lobjSubColumnSort.ColumnIndex).Text + Dim lstrValue2 As String = row2.SubItems(lobjSubColumnSort.ColumnIndex).Text + lintReturnValue = CompareString(lstrValue1, lstrValue2) + If lintReturnValue = 0 Then + lintReturnValue = CompareSubColumns(row1, row2, lobjSubColumnSort.SubColumnSortRule) + End If + Return lintReturnValue + Case Else 'No Sort here - go to subcolumn sorts, if any + lintReturnValue = CompareSubColumns(row1, row2, lobjSubColumnSort.SubColumnSortRule) + Return lintReturnValue + End Select + End If + End Function +End Class +Public Class clsGridColumnSortRule + Public Enum enumSortType + SortAsString + SortAsNumber + SortNone + End Enum + Private menumSortType As enumSortType + Private mobjSubColumnSort As clsGridSubColumnSortRule + + Public Sub New() + menumSortType = enumSortType.SortAsString + End Sub + + Public Sub New(ByVal lenumSortType As enumSortType) + menumSortType = lenumSortType + End Sub + + Public Property SortType() As enumSortType + Get + Return menumSortType + End Get + Set(ByVal iValue As enumSortType) + menumSortType = iValue + End Set + End Property + + Public Property SubColumnSort() As clsGridSubColumnSortRule + Get + Return mobjSubColumnSort + End Get + Set(ByVal iValue As clsGridSubColumnSortRule) + mobjSubColumnSort = iValue + End Set + End Property +End Class + +Public Class clsGridSubColumnSortRule + Public Enum enumSortType + SortAsString + SortAsNumber + End Enum + + Private menumSortType As enumSortType + Private mintColumnIndex As Integer + Private mobjSubColumnSortRule As clsGridSubColumnSortRule + + Public Sub New(ByVal lintColumnIndex As Integer) + mintColumnIndex = lintColumnIndex + menumSortType = enumSortType.SortAsString + End Sub + Public Sub New(ByVal lintColumnIndex As Integer, ByVal lobjSubColumnSortRule As clsGridSubColumnSortRule) + mintColumnIndex = lintColumnIndex + mobjSubColumnSortRule = lobjSubColumnSortRule + menumSortType = enumSortType.SortAsString + End Sub + Public Sub New(ByVal lintColumnIndex As Integer, ByVal lenumSortType As enumSortType, ByVal lobjSubColumnSortRule As clsGridSubColumnSortRule) + mintColumnIndex = lintColumnIndex + mobjSubColumnSortRule = lobjSubColumnSortRule + menumSortType = lenumSortType + End Sub + + Public Property ColumnIndex() As Integer + Get + Return mintColumnIndex + End Get + Set(ByVal iValue As Integer) + mintColumnIndex = iValue + End Set + End Property + + Public Property SortType() As enumSortType + Get + Return menumSortType + End Get + Set(ByVal iValue As enumSortType) + menumSortType = iValue + End Set + End Property + + Public Property SubColumnSortRule() As clsGridSubColumnSortRule + Get + Return mobjSubColumnSortRule + End Get + Set(ByVal iValue As clsGridSubColumnSortRule) + mobjSubColumnSortRule = iValue + End Set + End Property +End Class diff --git a/clsHymn.vb b/clsHymn.vb new file mode 100644 index 0000000..183d675 --- /dev/null +++ b/clsHymn.vb @@ -0,0 +1,487 @@ +Imports System.Data +Imports System.Text +Imports System.Windows.Forms +Imports System.Xml + +Public Class clsHymn + Implements ICloneable + + Private mguidHymnID As Guid + Private m_objHymnal As clsHymnal + Private m_intHymnNumber As Integer + Private m_strHymnName As String + Private m_objHymnTuneName As clsHymnTuneName + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidHymnID = Guid.NewGuid + m_objHymnal = Nothing + m_intHymnNumber = 0 + m_strHymnName = "" + m_objHymnTuneName = Nothing + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal objHymnal As clsHymnal, ByVal intHymnNumber As Integer, ByVal strHymnName As String, ByVal objHymnTuneName As clsHymnTuneName) + mguidHymnID = Guid.NewGuid + m_objHymnal = objHymnal + m_intHymnNumber = intHymnNumber + m_strHymnName = strHymnName + m_objHymnTuneName = objHymnTuneName + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal guidHymnID As Guid) + mguidHymnID = guidHymnID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymn" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnID As New SqlClient.SqlParameter + prmHymnID.ParameterName = "@hymn_id" + prmHymnID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnID.Size = 5 + prmHymnID.Value = guidHymnID + ldbcmdCommand.Parameters.Add(prmHymnID) + + Dim ldbdsHymns As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymns.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsHymns.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.HymnID.ToString) + End If + ldbdsHymns.Clear() + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.HymnID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + mguidHymnID = CType(ldbrwRow.Item("hymn_id"), Guid) + + If ldbrwRow.IsNull("hymnal_id") Then + m_objHymnal = Nothing + Else + Dim guidHymnalID As Guid = CType(ldbrwRow.Item("hymnal_id"), Guid) + If MyGlobals.CachedObjectExists(guidHymnalID.ToString) Then + m_objHymnal = CType(MyGlobals.CachedObjectRetrieve(guidHymnalID.ToString), clsHymnal) + Else + m_objHymnal = New clsHymnal(guidHymnalID) + End If + End If + + m_intHymnNumber = CType(ldbrwRow.Item("hymn_number"), Integer) + m_strHymnName = CType(ldbrwRow.Item("hymn_name"), String) + + If ldbrwRow.IsNull("hymn_tune_name_id") Then + m_objHymnTuneName = Nothing + Else + Dim guidHymnTuneNameID As Guid = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) + If MyGlobals.CachedObjectExists(guidHymnTuneNameID.ToString) Then + m_objHymnTuneName = CType(MyGlobals.CachedObjectRetrieve(guidHymnTuneNameID.ToString), clsHymnTuneName) + Else + m_objHymnTuneName = New clsHymnTuneName(guidHymnTuneNameID) + End If + End If + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.HymnID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_hymn" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnID As New SqlClient.SqlParameter + prmHymnID.ParameterName = "@hymn_id" + prmHymnID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnID.Size = 5 + prmHymnID.Value = mguidHymnID + ldbcmdCommand.Parameters.Add(prmHymnID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + If Not m_objHymnal Is Nothing Then + If Not m_objHymnal.ItemAlreadyPersisted Then + m_objHymnal.Save() + End If + End If + If Not m_objHymnTuneName Is Nothing Then + If Not m_objHymnTuneName.ItemAlreadyPersisted Then + m_objHymnTuneName.Save() + End If + End If + + MyGlobals.AddCachedObject(Me, Me.HymnID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_hymn" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnID As New SqlClient.SqlParameter + prmHymnID.ParameterName = "@hymn_id" + prmHymnID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnID.Value = mguidHymnID + ldbcmdCommand.Parameters.Add(prmHymnID) + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + If m_objHymnal Is Nothing Then + prmHymnalID.Value = DBNull.Value + Else + prmHymnalID.Value = m_objHymnal.HymnalID + End If + ldbcmdCommand.Parameters.Add(prmHymnalID) + ' Set up parameter for stored procedure + Dim prmHymnNumber As New SqlClient.SqlParameter + prmHymnNumber.ParameterName = "@hymn_number" + prmHymnNumber.SqlDbType = SqlDbType.Int + 'prmHymnNumber.Size = 5 + prmHymnNumber.Value = m_intHymnNumber + ldbcmdCommand.Parameters.Add(prmHymnNumber) + ' Set up parameter for stored procedure + Dim prmHymnName As New SqlClient.SqlParameter + prmHymnName.ParameterName = "@hymn_name" + prmHymnName.SqlDbType = SqlDbType.VarChar + prmHymnName.Size = MyGlobals.HYMN_NAME_SIZE + prmHymnName.Value = m_strHymnName + ldbcmdCommand.Parameters.Add(prmHymnName) + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + If m_objHymnTuneName Is Nothing Then + prmHymnTuneNameID.Value = DBNull.Value + Else + prmHymnTuneNameID.Value = m_objHymnTuneName.HymnTuneNameID + End If + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_hymn" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnID As New SqlClient.SqlParameter + prmHymnID.ParameterName = "@hymn_id" + prmHymnID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnID.Value = mguidHymnID + ldbcmdCommand.Parameters.Add(prmHymnID) + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + If m_objHymnal Is Nothing Then + prmHymnalID.Value = DBNull.Value + Else + prmHymnalID.Value = m_objHymnal.HymnalID + End If + ldbcmdCommand.Parameters.Add(prmHymnalID) + Dim prmHymnNumber As New SqlClient.SqlParameter + prmHymnNumber.ParameterName = "@hymn_number" + prmHymnNumber.SqlDbType = SqlDbType.Int + 'prmHymnNumber.Size = 5 + prmHymnNumber.Value = m_intHymnNumber + ldbcmdCommand.Parameters.Add(prmHymnNumber) + ' Set up parameter for stored procedure + Dim prmHymnName As New SqlClient.SqlParameter + prmHymnName.ParameterName = "@hymn_name" + prmHymnName.SqlDbType = SqlDbType.VarChar + prmHymnName.Size = MyGlobals.HYMN_NAME_SIZE + prmHymnName.Value = m_strHymnName + ldbcmdCommand.Parameters.Add(prmHymnName) + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + If m_objHymnTuneName Is Nothing Then + prmHymnTuneNameID.Value = DBNull.Value + Else + prmHymnTuneNameID.Value = m_objHymnTuneName.HymnTuneNameID + End If + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch e As SqlClient.SqlException + MessageBox.Show(e.Message) + Return False + Catch + Return False + End Try + + End Function + + Public Property HymnID() As Guid + Get + Return mguidHymnID + End Get + Set(ByVal Value As Guid) + mguidHymnID = Value + End Set + End Property + + Public Property Hymnal() As clsHymnal + Get + Return m_objHymnal + End Get + Set(ByVal Value As clsHymnal) + m_objHymnal = Value + End Set + End Property + + Public Property HymnNumber() As Integer + Get + Return m_intHymnNumber + End Get + Set(ByVal Value As Integer) + m_intHymnNumber = Value + End Set + End Property + + Public Property HymnNumberAsString() As String + Get + Return m_intHymnNumber.ToString + End Get + Set(ByVal Value As String) + If Val(Value) > 0 Then + m_intHymnNumber = CType(Value, Integer) + Else + m_intHymnNumber = 0 + End If + End Set + End Property + + Public Property HymnName() As String + Get + Return m_strHymnName + End Get + Set(ByVal Value As String) + m_strHymnName = Value.Trim + End Set + End Property + + Public Property HymnTuneName() As clsHymnTuneName + Get + Return m_objHymnTuneName + End Get + Set(ByVal Value As clsHymnTuneName) + m_objHymnTuneName = Value + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsHymn + lobjReturnValue.HymnID = Me.HymnID + lobjReturnValue.Hymnal = Me.Hymnal + lobjReturnValue.HymnNumber = Me.HymnNumber + lobjReturnValue.HymnName = Me.HymnName + lobjReturnValue.HymnTuneName = Me.HymnTuneName + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherHymn As clsHymn) As Boolean + Dim blnResult As Boolean + + If Me.HymnID.Equals(lobjOtherHymn.HymnID) _ + AndAlso Me.HymnNumber = lobjOtherHymn.HymnNumber _ + AndAlso Me.HymnName = lobjOtherHymn.HymnName Then + blnResult = True + + If Me.Hymnal Is Nothing Then + If lobjOtherHymn.Hymnal Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherHymn.Hymnal Is Nothing Then + Return False + Else + blnResult = Me.Hymnal.HymnalID.Equals(lobjOtherHymn.Hymnal.HymnalID) + End If + End If + + If Not blnResult Then + Return False + End If + + If Me.HymnTuneName Is Nothing Then + If lobjOtherHymn.HymnTuneName Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherHymn.HymnTuneName Is Nothing Then + Return False + Else + blnResult = Me.HymnTuneName.HymnTuneNameID.Equals(lobjOtherHymn.HymnTuneName.HymnTuneNameID) + End If + End If + Else + Return False + End If + + Return blnResult + + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + + If Me.Hymnal Is Nothing Then + lstrErrorString = "Hymnal is required" + Return False + End If + + If Me.HymnNumber = 0 Then + lstrErrorString = "Hymn Number is required and must be numeric" + Return False + End If + + If Me.HymnName.Length = 0 Then + lstrErrorString = "Hymn Name is required" + Return False + End If + + If Me.HymnTuneName Is Nothing Then + lstrErrorString = "HymnTuneName is required" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + lstrReferencedByString = "" + Return True + End Function + + Public Overrides Function ToString() As String + Dim strReturnString As New StringBuilder + + If m_objHymnal Is Nothing Then + 'strReturnString.Append(MyGlobals.COLLECTION_STRING) + Else + strReturnString.Append(m_objHymnal.HymnalAbbreviation) + End If + + strReturnString.Append(m_intHymnNumber) + strReturnString.Append(" - ") + strReturnString.Append(m_strHymnName) + + Return strReturnString.ToString + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Hymn") + + objXMLWriter.WriteElementString("HymnID", Me.HymnID.ToString) + objXMLWriter.WriteElementString("HymnName", Me.HymnName) + objXMLWriter.WriteElementString("HymnNumber", Me.HymnNumberAsString) + objXMLWriter.WriteElementString("HymnalID", Me.Hymnal.HymnalID.ToString) + Me.Hymnal.WriteXML(objXMLWriter) + If Me.HymnTuneName Is Nothing Then + objXMLWriter.WriteElementString("HymnTuneNameID", "") + Else + objXMLWriter.WriteElementString("HymnTuneNameID", Me.HymnTuneName.HymnTuneNameID.ToString) + Me.HymnTuneName.WriteXML(objXMLWriter) + End If + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllHymns() As System.Collections.Generic.List(Of clsHymn) + 'Preload to cache + clsHymnTuneName.AddAllHymnTuneNamesToCache() + clsHymnal.AddAllHymnalsToCache() + + Dim lguidHymnID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjHymn As clsHymn + Dim lcolHymns As New System.Collections.Generic.List(Of clsHymn) + + ldbcmdCommand.CommandText = "sel_hymn_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + + Dim ldbdsHymns As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymns.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymns.Tables(0).Rows + lguidHymnID = CType(ldbrwRow.Item("hymn_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidHymnID.ToString) Then + lobjHymn = CType(MyGlobals.CachedObjectRetrieve(lguidHymnID.ToString), clsHymn) + Else + 'lobjHymn = New clsHymn(lguidHymnID) + lobjHymn = New clsHymn(ldbrwRow) + End If + lcolHymns.Add(lobjHymn) + Next + End If + ldbdsHymns.Clear() + + Return lcolHymns + End Function + +End Class diff --git a/clsHymnTuneName.vb b/clsHymnTuneName.vb new file mode 100644 index 0000000..bf85a5b --- /dev/null +++ b/clsHymnTuneName.vb @@ -0,0 +1,686 @@ +Imports System.Data +Imports System.Xml + +Public Class clsHymnTuneName + Implements ICloneable + + Private mguidHymnTuneNameID As Guid + Private mstrHymnTuneName As String + Private mguidHymnTuneID As Guid + Private m_OtherHymnTuneNamesForTune As SortedList + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidHymnTuneNameID = Guid.NewGuid + mstrHymnTuneName = "" + mguidHymnTuneID = Guid.NewGuid + m_OtherHymnTuneNamesForTune = New SortedList + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal lstrHymnTuneName As String) + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymn_tune_name_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneName As New SqlClient.SqlParameter + prmHymnTuneName.ParameterName = "@hymn_tune_name" + prmHymnTuneName.SqlDbType = SqlDbType.VarChar + prmHymnTuneName.Size = MyGlobals.HYMN_TUNE_NAME_SIZE + prmHymnTuneName.Value = lstrHymnTuneName + ldbcmdCommand.Parameters.Add(prmHymnTuneName) + + Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsHymnTuneNames.Tables(0).Rows(0) + + mguidHymnTuneNameID = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) + mstrHymnTuneName = CType(ldbrwRow.Item("hymn_tune_name"), String) + mguidHymnTuneID = CType(ldbrwRow.Item("hymn_tune_id"), Guid) + + m_OtherHymnTuneNamesForTune = GetOtherTuneNamesForTune(mguidHymnTuneNameID) + + ldbdsHymnTuneNames.Clear() + m_blnObjectAlreadyPersisted = True + Else + ldbdsHymnTuneNames.Clear() + mguidHymnTuneNameID = Guid.NewGuid + mstrHymnTuneName = lstrHymnTuneName.Trim + mguidHymnTuneID = Guid.NewGuid + m_OtherHymnTuneNamesForTune = New SortedList + m_blnObjectAlreadyPersisted = False + End If + End Sub + + Public Sub New(ByVal lguidHymnTuneNameID As Guid) + LoadByHymnTuneNameId(lguidHymnTuneNameID, True) + End Sub + + Protected Sub New(ByVal lguidHymnTuneNameID As Guid, ByVal lblnLoadOtherTuneNamesForTune As Boolean) + LoadByHymnTuneNameId(lguidHymnTuneNameID, lblnLoadOtherTuneNamesForTune) + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow, True) + m_blnObjectAlreadyPersisted = True + End Sub + + Protected Sub New(ByVal ldbrwRow As DataRow, ByVal lblnLoadOtherTuneNamesForTune As Boolean) + PopulateFromDBRow(ldbrwRow, lblnLoadOtherTuneNamesForTune) + m_blnObjectAlreadyPersisted = True + End Sub + + Private Sub LoadByHymnTuneNameId(ByVal lguidHymnTuneNameID As Guid, ByVal lblnLoadOtherTuneNamesForTune As Boolean) + mguidHymnTuneNameID = lguidHymnTuneNameID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymn_tune_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + prmHymnTuneNameID.Value = lguidHymnTuneNameID + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsHymnTuneNames.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow, lblnLoadOtherTuneNamesForTune) + m_blnObjectAlreadyPersisted = True + If lblnLoadOtherTuneNamesForTune Then + MyGlobals.AddCachedObject(Me, Me.HymnTuneID.ToString) + End If + End If + ldbdsHymnTuneNames.Clear() + + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow, ByVal lblnLoadOtherTuneNamesForTune As Boolean) + mguidHymnTuneNameID = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) + + mstrHymnTuneName = CType(ldbrwRow.Item("hymn_tune_name"), String) + mguidHymnTuneID = CType(ldbrwRow.Item("hymn_tune_id"), Guid) + If lblnLoadOtherTuneNamesForTune Then + m_OtherHymnTuneNamesForTune = GetOtherTuneNamesForTune(mguidHymnTuneNameID) + Else + m_OtherHymnTuneNamesForTune = New SortedList + End If + If lblnLoadOtherTuneNamesForTune Then + MyGlobals.AddCachedObject(Me, Me.HymnTuneID.ToString) + End If + End Sub + + Public Sub Refresh() + LoadByHymnTuneNameId(mguidHymnTuneNameID, True) + End Sub + + Public Function Delete() As Boolean + MyGlobals.RemoveCachedObject(Me.HymnTuneNameID.ToString) + + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_hymn_tune_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + prmHymnTuneNameID.Value = mguidHymnTuneNameID + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = False + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + MyGlobals.AddCachedObject(Me, Me.HymnTuneNameID.ToString) + + If m_blnObjectAlreadyPersisted Then + + Dim objPersisted_OtherHymnTuneNamesForTune As SortedList = GetOtherTuneNamesForTune(mguidHymnTuneNameID) + + Dim objAddedOtherHymnTuneNamesForTune As SortedList = Nothing + Dim objDroppedOtherHymnTuneNamesForTune As SortedList = Nothing + Dim objRemainingOtherHymnTuneNamesForTune As SortedList = Nothing + + GetAddedDroppedRemainingOtherHymnTuneNamesForTune(objPersisted_OtherHymnTuneNamesForTune, m_OtherHymnTuneNamesForTune, objAddedOtherHymnTuneNamesForTune, objDroppedOtherHymnTuneNamesForTune, objRemainingOtherHymnTuneNamesForTune) + + 'If alternate tune names were droped from the list, then we need to change + 'the current hymn tune name and all alternate hymn tune names that remained + 'on the list to a new hymn tune ID + If objDroppedOtherHymnTuneNamesForTune.Count > 0 Then + 'Get a new Hymn Tune ID for THIS hymn tune name + mguidHymnTuneID = Guid.NewGuid + + Dim objDictionaryEntry As DictionaryEntry + Dim objOtherHymnTuneName As clsHymnTuneName + + 'Update the hymn tune ID for all hymn tune names which should REMAIN + 'matched with THIS hymn tune name + For Each objDictionaryEntry In objRemainingOtherHymnTuneNamesForTune + objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) + objOtherHymnTuneName.HymnTuneID = mguidHymnTuneID + + Dim ldbcmdCommandSaveOtherRemaining As New SqlClient.SqlCommand + ldbcmdCommandSaveOtherRemaining.CommandText = "upd_hymn_tune_name_with_tune_id" + + ldbcmdCommandSaveOtherRemaining.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameIDSaveOtherRemaining As New SqlClient.SqlParameter + prmHymnTuneNameIDSaveOtherRemaining.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameIDSaveOtherRemaining.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameIDSaveOtherRemaining.Size = 5 + prmHymnTuneNameIDSaveOtherRemaining.Value = objOtherHymnTuneName.HymnTuneNameID + ldbcmdCommandSaveOtherRemaining.Parameters.Add(prmHymnTuneNameIDSaveOtherRemaining) + ' Set up parameter for stored procedure + Dim prmHymnTuneIDSaveOtherRemaining As New SqlClient.SqlParameter + prmHymnTuneIDSaveOtherRemaining.ParameterName = "@hymn_tune_id" + prmHymnTuneIDSaveOtherRemaining.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneIDSaveOtherRemaining.Size = 5 + prmHymnTuneIDSaveOtherRemaining.Value = mguidHymnTuneID + ldbcmdCommandSaveOtherRemaining.Parameters.Add(prmHymnTuneIDSaveOtherRemaining) + + Dim lintRowsAffectedSaveOtherRemaining As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandSaveOtherRemaining) + Next + End If + + 'If alternate hymn tune names were added, we need to change the hymn tune ID for all + 'hymn tune names that were added (along with THEIR matches) to the hymn tune ID of + 'the current hymn tune name + If objAddedOtherHymnTuneNamesForTune.Count > 0 Then + Dim objDictionaryEntry As DictionaryEntry + Dim objOtherHymnTuneName As clsHymnTuneName + For Each objDictionaryEntry In objAddedOtherHymnTuneNamesForTune + objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) + objOtherHymnTuneName.HymnTuneID = mguidHymnTuneID + + Dim ldbcmdCommandSaveOtherAdded As New SqlClient.SqlCommand + ldbcmdCommandSaveOtherAdded.CommandText = "upd_hymn_tune_name_with_tune_id_with_matches" + + ldbcmdCommandSaveOtherAdded.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameIDSaveOtherAdded As New SqlClient.SqlParameter + prmHymnTuneNameIDSaveOtherAdded.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameIDSaveOtherAdded.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + prmHymnTuneNameIDSaveOtherAdded.Value = objOtherHymnTuneName.HymnTuneNameID + ldbcmdCommandSaveOtherAdded.Parameters.Add(prmHymnTuneNameIDSaveOtherAdded) + ' Set up parameter for stored procedure + Dim prmHymnTuneIDSaveOtherAdded As New SqlClient.SqlParameter + prmHymnTuneIDSaveOtherAdded.ParameterName = "@hymn_tune_id" + prmHymnTuneIDSaveOtherAdded.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneID.Size = 5 + prmHymnTuneIDSaveOtherAdded.Value = mguidHymnTuneID + ldbcmdCommandSaveOtherAdded.Parameters.Add(prmHymnTuneIDSaveOtherAdded) + + Dim lintRowsAffectedSaveOtherAdded As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandSaveOtherAdded) + Next + End If + + + Dim ldbcmdCommandUpdateThis As New SqlClient.SqlCommand + ldbcmdCommandUpdateThis.CommandText = "upd_hymn_tune_name" + + ldbcmdCommandUpdateThis.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameIDUpdateThis As New SqlClient.SqlParameter + prmHymnTuneNameIDUpdateThis.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameIDUpdateThis.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameIDUpdateThis.Size = 5 + prmHymnTuneNameIDUpdateThis.Value = mguidHymnTuneNameID + ldbcmdCommandUpdateThis.Parameters.Add(prmHymnTuneNameIDUpdateThis) + ' Set up parameter for stored procedure + Dim prmHymnTuneNameUpdateThis As New SqlClient.SqlParameter + prmHymnTuneNameUpdateThis.ParameterName = "@hymn_tune_name" + prmHymnTuneNameUpdateThis.SqlDbType = SqlDbType.VarChar + prmHymnTuneNameUpdateThis.Size = MyGlobals.HYMN_TUNE_NAME_SIZE + prmHymnTuneNameUpdateThis.Value = mstrHymnTuneName + ldbcmdCommandUpdateThis.Parameters.Add(prmHymnTuneNameUpdateThis) + ' Set up parameter for stored procedure + Dim prmHymnTuneIDUpdateThis As New SqlClient.SqlParameter + prmHymnTuneIDUpdateThis.ParameterName = "@hymn_tune_id" + prmHymnTuneIDUpdateThis.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneIDUpdateThis.Size = 5 + prmHymnTuneIDUpdateThis.Value = mguidHymnTuneID + ldbcmdCommandUpdateThis.Parameters.Add(prmHymnTuneIDUpdateThis) + + Dim lintRowsAffectedUpdateThis As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandUpdateThis) + If lintRowsAffectedUpdateThis > 0 Then + Return True + Else + Return False + End If + Else + 'If alternate tune names listed, grab hymn tune ID from first one listed, + 'and update tune ID for all others, including THIS object + If m_OtherHymnTuneNamesForTune.Count > 0 Then + Dim objguidFirstTuneID As Guid + Dim blnFirstAlternameTuneName As Boolean = True + + Dim objDictionaryEntry As DictionaryEntry + Dim objOtherHymnTuneName As clsHymnTuneName + For Each objDictionaryEntry In m_OtherHymnTuneNamesForTune + objOtherHymnTuneName = CType(objDictionaryEntry.Value, clsHymnTuneName) + If blnFirstAlternameTuneName Then + blnFirstAlternameTuneName = False + objguidFirstTuneID = objOtherHymnTuneName.HymnTuneID + mguidHymnTuneID = objguidFirstTuneID + Else + objOtherHymnTuneName.HymnTuneID = objguidFirstTuneID + + Dim ldbcmdCommandUpdateOtherAdding As New SqlClient.SqlCommand + ldbcmdCommandUpdateOtherAdding.CommandText = "upd_hymn_tune_name_with_tune_id_with_matches" + + ldbcmdCommandUpdateOtherAdding.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameIDUpdateOtherAdding As New SqlClient.SqlParameter + prmHymnTuneNameIDUpdateOtherAdding.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameIDUpdateOtherAdding.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameIDUpdateOtherAdding.Size = 5 + prmHymnTuneNameIDUpdateOtherAdding.Value = objOtherHymnTuneName.HymnTuneNameID + ldbcmdCommandUpdateOtherAdding.Parameters.Add(prmHymnTuneNameIDUpdateOtherAdding) + ' Set up parameter for stored procedure + Dim prmHymnTuneIDUpdateOtherAdding As New SqlClient.SqlParameter + prmHymnTuneIDUpdateOtherAdding.ParameterName = "@hymn_tune_id" + prmHymnTuneIDUpdateOtherAdding.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneIDUpdateOtherAdding.Size = 5 + prmHymnTuneIDUpdateOtherAdding.Value = objguidFirstTuneID + ldbcmdCommandUpdateOtherAdding.Parameters.Add(prmHymnTuneIDUpdateOtherAdding) + + Dim lintRowsAffectedUpdateOtherAdding As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandUpdateOtherAdding) + + End If + Next + End If + + Dim ldbcmdCommandAddThis As New SqlClient.SqlCommand + ldbcmdCommandAddThis.CommandText = "ins_hymn_tune_name" + + ldbcmdCommandAddThis.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameIDAddThis As New SqlClient.SqlParameter + prmHymnTuneNameIDAddThis.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameIDAddThis.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + prmHymnTuneNameIDAddThis.Value = mguidHymnTuneNameID + ldbcmdCommandAddThis.Parameters.Add(prmHymnTuneNameIDAddThis) + ' Set up parameter for stored procedure + Dim prmHymnTuneNameAddThis As New SqlClient.SqlParameter + prmHymnTuneNameAddThis.ParameterName = "@hymn_tune_name" + prmHymnTuneNameAddThis.SqlDbType = SqlDbType.VarChar + prmHymnTuneNameAddThis.Size = MyGlobals.HYMN_TUNE_NAME_SIZE + prmHymnTuneNameAddThis.Value = mstrHymnTuneName + ldbcmdCommandAddThis.Parameters.Add(prmHymnTuneNameAddThis) + ' Set up parameter for stored procedure + Dim prmHymnTuneIDAddThis As New SqlClient.SqlParameter + prmHymnTuneIDAddThis.ParameterName = "@hymn_tune_id" + prmHymnTuneIDAddThis.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneIDAddThis.Size = 5 + prmHymnTuneIDAddThis.Value = mguidHymnTuneID + ldbcmdCommandAddThis.Parameters.Add(prmHymnTuneIDAddThis) + + Dim lintRowsAffectedAddThis As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommandAddThis) + If lintRowsAffectedAddThis > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch + Return False + End Try + + End Function + + Public Function DuplicateExists(ByVal lstrHymnTuneNameToCheck As String) As Boolean + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymn_tune_name_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneName As New SqlClient.SqlParameter + prmHymnTuneName.ParameterName = "@hymn_tune_name" + prmHymnTuneName.SqlDbType = SqlDbType.VarChar + prmHymnTuneName.Size = MyGlobals.HYMN_TUNE_NAME_SIZE + prmHymnTuneName.Value = lstrHymnTuneNameToCheck + ldbcmdCommand.Parameters.Add(prmHymnTuneName) + + Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows + If mguidHymnTuneNameID.Equals(CType(ldbrwRow.Item("hymn_tune_name_id"), Guid)) Then + 'OK + Else + ldbdsHymnTuneNames.Clear() + Return True + End If + Next + End If + ldbdsHymnTuneNames.Clear() + Return False + Catch + Return False + End Try + + End Function + + Public Property HymnTuneNameID() As Guid + Get + Return mguidHymnTuneNameID + End Get + + Set(ByVal lguidValue As Guid) + mguidHymnTuneNameID = lguidValue + End Set + End Property + + Public Property HymnTuneName() As String + Get + Return mstrHymnTuneName + End Get + + Set(ByVal sValue As String) + mstrHymnTuneName = sValue.Trim + End Set + End Property + + Public Property HymnTuneID() As Guid + Get + Return mguidHymnTuneID + End Get + + Set(ByVal lguidValue As Guid) + mguidHymnTuneID = lguidValue + End Set + End Property + + Public ReadOnly Property OtherHymnTuneNamesForTune() As SortedList + Get + Return m_OtherHymnTuneNamesForTune + End Get + End Property + + Protected WriteOnly Property OtherHymnTuneNamesForTuneForCloning() As SortedList + Set(ByVal Value As SortedList) + m_OtherHymnTuneNamesForTune = Value + End Set + End Property + + Public Sub AddAlternateHymnTuneName(ByVal lobjHymnTuneName As clsHymnTuneName) + AddAlternateTuneNameToList(lobjHymnTuneName, m_OtherHymnTuneNamesForTune) + End Sub + + Public Sub RemoveAlternateHymnTuneName(ByVal lobjHymnTuneName As clsHymnTuneName) + RemoveAlternateTuneNameFromList(lobjHymnTuneName, m_OtherHymnTuneNamesForTune) + End Sub + + Public Sub RemoveAlternateHymnTuneName(ByVal lstrHymnTuneName As String) + RemoveAlternateTuneNameFromList(lstrHymnTuneName, m_OtherHymnTuneNamesForTune) + End Sub + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsHymnTuneName + lobjReturnValue.HymnTuneNameID = Me.HymnTuneNameID + lobjReturnValue.HymnTuneName = Me.HymnTuneName + lobjReturnValue.HymnTuneID = Me.HymnTuneID + lobjReturnValue.OtherHymnTuneNamesForTuneForCloning = CType(Me.OtherHymnTuneNamesForTune.Clone, SortedList) + + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherHymnTuneName As clsHymnTuneName) As Boolean + If Me.HymnTuneNameID.Equals(lobjOtherHymnTuneName.HymnTuneNameID) _ + AndAlso Me.HymnTuneName = lobjOtherHymnTuneName.HymnTuneName _ + AndAlso Me.HymnTuneID.Equals(lobjOtherHymnTuneName.HymnTuneID) Then + If Me.OtherHymnTuneNamesForTune.Count <> lobjOtherHymnTuneName.OtherHymnTuneNamesForTune.Count Then + Return False + End If + + 'We have the same number of alternate tune names. + 'Just need to check from one side to see if all are on the other + ' - If none were added, and the number is the same, then none could have been deleted + Dim objDictionaryEntry As DictionaryEntry + Dim objMeOtherHymnTuneNameForTune As clsHymnTuneName + For Each objDictionaryEntry In Me.OtherHymnTuneNamesForTune + objMeOtherHymnTuneNameForTune = CType(objDictionaryEntry.Value, clsHymnTuneName) + If Not lobjOtherHymnTuneName.OtherHymnTuneNamesForTune.ContainsKey(objMeOtherHymnTuneNameForTune.HymnTuneName) Then + Return False + End If + Next + Return True + Else + Return False + End If + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + If Me.HymnTuneName.Length = 0 Then + lstrErrorString = "Hymn Tune Name is required" + Return False + End If + + If Me.DuplicateExists(Me.HymnTuneName) Then + lstrErrorString = "Given Hymn Tune Name already exists" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + Dim lblnReturnValue As Boolean + + lblnReturnValue = True + + lstrReferencedByString = "" + + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymn_tune_name_isreferenced" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + prmHymnTuneNameID.Value = mguidHymnTuneNameID + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then + lblnReturnValue = False + + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows + If Not ldbrwRow.IsNull("table_referencing_instance") Then + If lstrReferencedByString.Length = 0 Then + lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + Else + lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + End If + End If + Next + + End If + ldbdsHymnTuneNames.Clear() + + Return lblnReturnValue + + End Function + + Public Overrides Function ToString() As String + Return mstrHymnTuneName + End Function + + Public Function GetOtherTuneNamesForTune(ByVal lguidHymnTuneNameId As Guid) As SortedList + Dim objSortedListToReturn As New SortedList + + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymn_tune_name_others_by_hymn_tune_name_id" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + prmHymnTuneNameID.Value = lguidHymnTuneNameId + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + Dim lobjHymnTuneName As clsHymnTuneName + For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows + lguidHymnTuneNameId = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) + + lobjHymnTuneName = New clsHymnTuneName(lguidHymnTuneNameId, False) + AddAlternateTuneNameToList(lobjHymnTuneName, objSortedListToReturn) + Next + End If + ldbdsHymnTuneNames.Clear() + Return objSortedListToReturn + Catch + Return objSortedListToReturn + End Try + End Function + + Private Sub AddAlternateTuneNameToList(ByVal lobjHymnTuneName As clsHymnTuneName, ByRef lobjSortedListToReturn As SortedList) + If lobjSortedListToReturn.ContainsKey(lobjHymnTuneName.HymnTuneName) Then + Return + End If + lobjSortedListToReturn.Add(lobjHymnTuneName.HymnTuneName, lobjHymnTuneName) + End Sub + + Private Sub RemoveAlternateTuneNameFromList(ByVal lobjHymnTuneName As clsHymnTuneName, ByRef lobjSortedListToReturn As SortedList) + If lobjSortedListToReturn.ContainsKey(lobjHymnTuneName.HymnTuneName) Then + lobjSortedListToReturn.Remove(lobjHymnTuneName.HymnTuneName) + End If + End Sub + + Private Sub RemoveAlternateTuneNameFromList(ByVal lstrHymnTuneName As String, ByRef lobjSortedListToReturn As SortedList) + If lobjSortedListToReturn.ContainsKey(lstrHymnTuneName) Then + lobjSortedListToReturn.Remove(lstrHymnTuneName) + End If + End Sub + + Private Sub GetAddedDroppedRemainingOtherHymnTuneNamesForTune(ByVal objPersisted_OtherHymnTuneNamesForTune As SortedList, ByVal objCurrentOtherHymnTuneNamesForTune As SortedList, ByRef objAddedOtherHymnTuneNamesForTune As SortedList, ByRef objDroppedOtherHymnTuneNamesForTune As SortedList, ByRef objRemainingOtherHymnTuneNamesForTune As SortedList) + Dim objDictionaryEntry As DictionaryEntry + Dim objHymnTuneNameToCheck As clsHymnTuneName + Dim strHymnTuneNameToCheck As String + + objAddedOtherHymnTuneNamesForTune = New SortedList + objDroppedOtherHymnTuneNamesForTune = New SortedList + objRemainingOtherHymnTuneNamesForTune = New SortedList + + For Each objDictionaryEntry In objPersisted_OtherHymnTuneNamesForTune + objHymnTuneNameToCheck = CType(objDictionaryEntry.Value, clsHymnTuneName) + strHymnTuneNameToCheck = objHymnTuneNameToCheck.HymnTuneName + If objCurrentOtherHymnTuneNamesForTune.ContainsKey(strHymnTuneNameToCheck) Then + objRemainingOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) + Else + objDroppedOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) + End If + Next + + For Each objDictionaryEntry In objCurrentOtherHymnTuneNamesForTune + objHymnTuneNameToCheck = CType(objDictionaryEntry.Value, clsHymnTuneName) + strHymnTuneNameToCheck = objHymnTuneNameToCheck.HymnTuneName + If objPersisted_OtherHymnTuneNamesForTune.ContainsKey(strHymnTuneNameToCheck) Then + 'Not necessary to save to REMAINING list, as it should already be there from above + 'objRemainingOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) + Else + objAddedOtherHymnTuneNamesForTune.Add(strHymnTuneNameToCheck, objHymnTuneNameToCheck) + End If + Next + + End Sub + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("HymnTuneName") + + objXMLWriter.WriteElementString("HymnTuneNameID", Me.HymnTuneNameID.ToString) + objXMLWriter.WriteElementString("HymnTuneID", Me.HymnTuneID.ToString) + objXMLWriter.WriteElementString("HymnTuneName", Me.HymnTuneName) + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllHymnTuneNames() As System.Collections.Generic.List(Of clsHymnTuneName) + Dim lguidHymnTuneNameID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjHymnTuneName As clsHymnTuneName + Dim lcolHymnTuneNames As New System.Collections.Generic.List(Of clsHymnTuneName) + + ldbcmdCommand.CommandText = "sel_hymn_tune_name_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnTuneNames.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnTuneNames.Tables(0).Rows + lguidHymnTuneNameID = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidHymnTuneNameID.ToString) Then + lobjHymnTuneName = CType(MyGlobals.CachedObjectRetrieve(lguidHymnTuneNameID.ToString), clsHymnTuneName) + Else + 'lobjHymnTuneName = New clsHymnTuneName(lguidHymnTuneNameID) + lobjHymnTuneName = New clsHymnTuneName(ldbrwRow) + End If + lcolHymnTuneNames.Add(lobjHymnTuneName) + Next + End If + ldbdsHymnTuneNames.Clear() + + Return lcolHymnTuneNames + End Function + + Public Shared Sub AddAllHymnTuneNamesToCache() + If MyGlobals.g_objObjectTypesCached.Contains("HymnTuneNames") = False Then + GetAllHymnTuneNames() + MyGlobals.g_objObjectTypesCached.Add("HymnTuneNames") + End If + End Sub + +End Class diff --git a/clsHymnal.vb b/clsHymnal.vb new file mode 100644 index 0000000..c6dd8ac --- /dev/null +++ b/clsHymnal.vb @@ -0,0 +1,437 @@ +Imports System.Data +Imports System.Xml + +Public Class clsHymnal + Implements ICloneable + + Private mguidHymnalID As Guid + Private mstrHymnalName As String + Private mstrHymnalAbbreviation As String + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidHymnalID = Guid.NewGuid + mstrHymnalName = "" + mstrHymnalAbbreviation = "" + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal lstrHymnalName As String) + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymnal_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalName As New SqlClient.SqlParameter + prmHymnalName.ParameterName = "@hymnal_name" + prmHymnalName.SqlDbType = SqlDbType.VarChar + prmHymnalName.Size = MyGlobals.HYMNAL_NAME_SIZE + prmHymnalName.Value = lstrHymnalName + ldbcmdCommand.Parameters.Add(prmHymnalName) + + Dim ldbdsHymnals As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnals.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsHymnals.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + + ldbdsHymnals.Clear() + m_blnObjectAlreadyPersisted = True + Else + ldbdsHymnals.Clear() + mguidHymnalID = Guid.NewGuid + mstrHymnalName = lstrHymnalName.Trim + m_blnObjectAlreadyPersisted = False + End If + End Sub + + Public Sub New(ByVal lguidHymnalID As Guid) + mguidHymnalID = lguidHymnalID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymnal" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnalID.Value = lguidHymnalID + ldbcmdCommand.Parameters.Add(prmHymnalID) + + Dim ldbdsHymnals As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnals.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsHymnals.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.HymnalID.ToString) + End If + ldbdsHymnals.Clear() + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.HymnalID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + mguidHymnalID = CType(ldbrwRow.Item("hymnal_id"), Guid) + + mstrHymnalName = CType(ldbrwRow.Item("hymnal_name"), String) + mstrHymnalAbbreviation = CType(ldbrwRow.Item("hymnal_abbreviation"), String) + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.HymnalID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_hymnal" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnalID.Value = mguidHymnalID + ldbcmdCommand.Parameters.Add(prmHymnalID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = False + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + MyGlobals.AddCachedObject(Me, Me.HymnalID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_hymnal" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnalID.Value = mguidHymnalID + ldbcmdCommand.Parameters.Add(prmHymnalID) + ' Set up parameter for stored procedure + Dim prmHymnalName As New SqlClient.SqlParameter + prmHymnalName.ParameterName = "@hymnal_name" + prmHymnalName.SqlDbType = SqlDbType.VarChar + prmHymnalName.Size = MyGlobals.HYMNAL_NAME_SIZE + prmHymnalName.Value = mstrHymnalName + Dim prmHymnalAbbreviation As New SqlClient.SqlParameter + prmHymnalAbbreviation.ParameterName = "@hymnal_abbreviation" + prmHymnalAbbreviation.SqlDbType = SqlDbType.VarChar + prmHymnalAbbreviation.Size = MyGlobals.HYMNAL_ABBREVIATION_SIZE + prmHymnalAbbreviation.Value = mstrHymnalAbbreviation + ldbcmdCommand.Parameters.Add(prmHymnalAbbreviation) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_hymnal" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnalID.Value = mguidHymnalID + ldbcmdCommand.Parameters.Add(prmHymnalID) + ' Set up parameter for stored procedure + Dim prmHymnalName As New SqlClient.SqlParameter + prmHymnalName.ParameterName = "@hymnal_name" + prmHymnalName.SqlDbType = SqlDbType.VarChar + prmHymnalName.Size = MyGlobals.HYMNAL_NAME_SIZE + prmHymnalName.Value = mstrHymnalName + ldbcmdCommand.Parameters.Add(prmHymnalName) + Dim prmHymnalAbbreviation As New SqlClient.SqlParameter + prmHymnalAbbreviation.ParameterName = "@hymnal_abbreviation" + prmHymnalAbbreviation.SqlDbType = SqlDbType.VarChar + prmHymnalAbbreviation.Size = MyGlobals.HYMNAL_ABBREVIATION_SIZE + prmHymnalAbbreviation.Value = mstrHymnalAbbreviation + ldbcmdCommand.Parameters.Add(prmHymnalAbbreviation) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch + Return False + End Try + + End Function + + Public Function DuplicateHymnalNameExists(ByVal lstrHymnalNameToCheck As String) As Boolean + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymnal_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalName As New SqlClient.SqlParameter + prmHymnalName.ParameterName = "@hymnal_name" + prmHymnalName.SqlDbType = SqlDbType.VarChar + prmHymnalName.Size = MyGlobals.HYMNAL_NAME_SIZE + prmHymnalName.Value = lstrHymnalNameToCheck + ldbcmdCommand.Parameters.Add(prmHymnalName) + + Dim ldbdsHymnals As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnals.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnals.Tables(0).Rows + If mguidHymnalID.Equals(CType(ldbrwRow.Item("hymnal_id"), Guid)) Then + 'OK + Else + ldbdsHymnals.Clear() + Return True + End If + Next + End If + ldbdsHymnals.Clear() + Return False + Catch + Return False + End Try + + End Function + + Public Function DuplicateHymnalAbbreviationExists(ByVal lstrHymnalAbbreviationToCheck As String) As Boolean + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymnal_by_abbreviation" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalAbbreviation As New SqlClient.SqlParameter + prmHymnalAbbreviation.ParameterName = "@hymnal_abbreviation" + prmHymnalAbbreviation.SqlDbType = SqlDbType.VarChar + prmHymnalAbbreviation.Size = MyGlobals.HYMNAL_ABBREVIATION_SIZE + prmHymnalAbbreviation.Value = mstrHymnalAbbreviation + ldbcmdCommand.Parameters.Add(prmHymnalAbbreviation) + + Dim ldbdsHymnals As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnals.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnals.Tables(0).Rows + If mguidHymnalID.Equals(CType(ldbrwRow.Item("hymnal_id"), Guid)) Then + 'OK + Else + ldbdsHymnals.Clear() + Return True + End If + Next + End If + ldbdsHymnals.Clear() + Return False + Catch + Return False + End Try + + End Function + + Public Property HymnalID() As Guid + Get + Return mguidHymnalID + End Get + + Set(ByVal lguidValue As Guid) + mguidHymnalID = lguidValue + End Set + End Property + + Public Property HymnalName() As String + Get + Return mstrHymnalName + End Get + + Set(ByVal sValue As String) + mstrHymnalName = sValue.Trim + End Set + End Property + + Public Property HymnalAbbreviation() As String + Get + Return mstrHymnalAbbreviation + End Get + + Set(ByVal sValue As String) + mstrHymnalAbbreviation = sValue.Trim + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsHymnal + lobjReturnValue.HymnalID = Me.HymnalID + lobjReturnValue.HymnalName = Me.HymnalName + lobjReturnValue.HymnalAbbreviation = Me.HymnalAbbreviation + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherHymnal As clsHymnal) As Boolean + If Me.HymnalID.Equals(lobjOtherHymnal.HymnalID) _ + AndAlso Me.HymnalName = lobjOtherHymnal.HymnalName _ + AndAlso Me.HymnalAbbreviation = lobjOtherHymnal.HymnalAbbreviation Then + Return True + Else + Return False + End If + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + If Me.HymnalName.Length = 0 Then + lstrErrorString = "Hymnal Name is required" + Return False + End If + + If Me.DuplicateHymnalNameExists(Me.HymnalName) Then + lstrErrorString = "Given Hymnal Name already exists" + Return False + End If + + If Me.DuplicateHymnalAbbreviationExists(Me.HymnalAbbreviation) Then + lstrErrorString = "Given Hymnal Abbreviation already exists" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + Dim lblnReturnValue As Boolean + + lblnReturnValue = True + + lstrReferencedByString = "" + + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_hymnal_isreferenced" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmHymnalID As New SqlClient.SqlParameter + prmHymnalID.ParameterName = "@hymnal_id" + prmHymnalID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnalID.Size = 5 + prmHymnalID.Value = mguidHymnalID + ldbcmdCommand.Parameters.Add(prmHymnalID) + + Dim ldbdsHymnals As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnals.Tables(0).Rows.Count > 0 Then + lblnReturnValue = False + + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnals.Tables(0).Rows + If Not ldbrwRow.IsNull("table_referencing_instance") Then + If lstrReferencedByString.Length = 0 Then + lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + Else + lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + End If + End If + Next + + End If + ldbdsHymnals.Clear() + + Return lblnReturnValue + + End Function + + Public Overrides Function ToString() As String + Return mstrHymnalName + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Hymnal") + + objXMLWriter.WriteElementString("HymnalID", Me.HymnalID.ToString) + objXMLWriter.WriteElementString("HymnalName", Me.HymnalName) + objXMLWriter.WriteElementString("HymnalAbbreviation", Me.HymnalAbbreviation) + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllHymnals() As System.Collections.Generic.List(Of clsHymnal) + Dim lguidHymnalID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjHymnal As clsHymnal + Dim lcolHymnals As New System.Collections.Generic.List(Of clsHymnal) + + ldbcmdCommand.CommandText = "sel_hymnal_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsHymnals As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsHymnals.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsHymnals.Tables(0).Rows + lguidHymnalID = CType(ldbrwRow.Item("hymnal_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidHymnalID.ToString) Then + lobjHymnal = CType(MyGlobals.CachedObjectRetrieve(lguidHymnalID.ToString), clsHymnal) + Else + 'lobjHymnal = New clsHymnal(lguidHymnalID) + lobjHymnal = New clsHymnal(ldbrwRow) + End If + lcolHymnals.Add(lobjHymnal) + Next + End If + ldbdsHymnals.Clear() + + Return lcolHymnals + End Function + + Public Shared Sub AddAllHymnalsToCache() + If MyGlobals.g_objObjectTypesCached.Contains("Hymnals") = False Then + GetAllHymnals() + MyGlobals.g_objObjectTypesCached.Add("Hymnals") + End If + End Sub + +End Class diff --git a/clsInstrumentation.vb b/clsInstrumentation.vb new file mode 100644 index 0000000..b6e9d10 --- /dev/null +++ b/clsInstrumentation.vb @@ -0,0 +1,370 @@ +Imports System.Data +Imports System.Xml + +Public Class clsInstrumentation + Implements ICloneable + + Private mguidInstrumentationID As Guid + Private mstrInstrumentationName As String + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidInstrumentationID = Guid.NewGuid + mstrInstrumentationName = "" + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal lstrInstrumentationName As String) + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_instrumentation_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationName As New SqlClient.SqlParameter + prmInstrumentationName.ParameterName = "@instrumentation_name" + prmInstrumentationName.SqlDbType = SqlDbType.VarChar + prmInstrumentationName.Size = MyGlobals.INSTRUMENTATION_NAME_SIZE + prmInstrumentationName.Value = lstrInstrumentationName + ldbcmdCommand.Parameters.Add(prmInstrumentationName) + + Dim ldbdsInstrumentations As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsInstrumentations.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsInstrumentations.Tables(0).Rows(0) + + PopulateFromDBRow(ldbrwRow) + + ldbdsInstrumentations.Clear() + m_blnObjectAlreadyPersisted = True + Else + ldbdsInstrumentations.Clear() + mguidInstrumentationID = Guid.NewGuid + mstrInstrumentationName = lstrInstrumentationName.Trim + m_blnObjectAlreadyPersisted = False + End If + End Sub + + Public Sub New(ByVal lguidInstrumentationID As Guid) + mguidInstrumentationID = lguidInstrumentationID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_instrumentation" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + prmInstrumentationID.Value = lguidInstrumentationID + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + + Dim ldbdsInstrumentations As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsInstrumentations.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsInstrumentations.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.InstrumentationID.ToString) + End If + ldbdsInstrumentations.Clear() + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.InstrumentationID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + mguidInstrumentationID = CType(ldbrwRow.Item("instrumentation_id"), Guid) + + mstrInstrumentationName = CType(ldbrwRow.Item("instrumentation_name"), String) + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.InstrumentationID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_instrumentation" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + prmInstrumentationID.Value = mguidInstrumentationID + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = False + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + MyGlobals.AddCachedObject(Me, Me.InstrumentationID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_instrumentation" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + prmInstrumentationID.Value = mguidInstrumentationID + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + ' Set up parameter for stored procedure + Dim prmInstrumentationName As New SqlClient.SqlParameter + prmInstrumentationName.ParameterName = "@instrumentation_name" + prmInstrumentationName.SqlDbType = SqlDbType.VarChar + prmInstrumentationName.Size = MyGlobals.INSTRUMENTATION_NAME_SIZE + prmInstrumentationName.Value = mstrInstrumentationName + ldbcmdCommand.Parameters.Add(prmInstrumentationName) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_instrumentation" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + prmInstrumentationID.Value = mguidInstrumentationID + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + ' Set up parameter for stored procedure + Dim prmInstrumentationName As New SqlClient.SqlParameter + prmInstrumentationName.ParameterName = "@instrumentation_name" + prmInstrumentationName.SqlDbType = SqlDbType.VarChar + prmInstrumentationName.Size = MyGlobals.INSTRUMENTATION_NAME_SIZE + prmInstrumentationName.Value = mstrInstrumentationName + ldbcmdCommand.Parameters.Add(prmInstrumentationName) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch + Return False + End Try + + End Function + + Public Function DuplicateExists(ByVal lstrInstrumentationNameToCheck As String) As Boolean + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_instrumentation_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationName As New SqlClient.SqlParameter + prmInstrumentationName.ParameterName = "@instrumentation_name" + prmInstrumentationName.SqlDbType = SqlDbType.VarChar + prmInstrumentationName.Size = MyGlobals.INSTRUMENTATION_NAME_SIZE + prmInstrumentationName.Value = lstrInstrumentationNameToCheck + ldbcmdCommand.Parameters.Add(prmInstrumentationName) + + Dim ldbdsInstrumentations As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsInstrumentations.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsInstrumentations.Tables(0).Rows + If mguidInstrumentationID.Equals(CType(ldbrwRow.Item("instrumentation_id"), Guid)) Then + 'OK + Else + ldbdsInstrumentations.Clear() + Return True + End If + Next + End If + ldbdsInstrumentations.Clear() + Return False + Catch + Return False + End Try + + End Function + + Public Property InstrumentationID() As Guid + Get + Return mguidInstrumentationID + End Get + + Set(ByVal lguidValue As Guid) + mguidInstrumentationID = lguidValue + End Set + End Property + + Public Property InstrumentationName() As String + Get + Return mstrInstrumentationName + End Get + + Set(ByVal sValue As String) + mstrInstrumentationName = sValue.Trim + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsInstrumentation + lobjReturnValue.InstrumentationID = Me.InstrumentationID + lobjReturnValue.InstrumentationName = Me.InstrumentationName + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherInstrumentation As clsInstrumentation) As Boolean + If Me.InstrumentationID.Equals(lobjOtherInstrumentation.InstrumentationID) _ + AndAlso Me.InstrumentationName = lobjOtherInstrumentation.InstrumentationName Then + Return True + Else + Return False + End If + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + If Me.InstrumentationName.Length = 0 Then + lstrErrorString = "Instrumentation Name is required" + Return False + End If + + If Me.DuplicateExists(Me.InstrumentationName) Then + lstrErrorString = "Given Instrumentation Name already exists" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + Dim lblnReturnValue As Boolean + + lblnReturnValue = True + + lstrReferencedByString = "" + + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_instrumentation_isreferenced" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = 5 + prmInstrumentationID.Value = mguidInstrumentationID + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + + Dim ldbdsInstrumentations As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsInstrumentations.Tables(0).Rows.Count > 0 Then + lblnReturnValue = False + + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsInstrumentations.Tables(0).Rows + If Not ldbrwRow.IsNull("table_referencing_instance") Then + If lstrReferencedByString.Length = 0 Then + lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + Else + lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + End If + End If + Next + + End If + ldbdsInstrumentations.Clear() + + Return lblnReturnValue + + End Function + + Public Overrides Function ToString() As String + Return mstrInstrumentationName + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Instrumentation") + + objXMLWriter.WriteElementString("InstrumentationID", Me.InstrumentationID.ToString) + objXMLWriter.WriteElementString("InstrumentationName", Me.InstrumentationName) + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllInstrumentations() As System.Collections.Generic.List(Of clsInstrumentation) + Dim lguidInstrumentationID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjInstrumentation As clsInstrumentation + Dim lcolInstrumentations As New System.Collections.Generic.List(Of clsInstrumentation) + + ldbcmdCommand.CommandText = "sel_instrumentation_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsInstrumentations As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsInstrumentations.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsInstrumentations.Tables(0).Rows + lguidInstrumentationID = CType(ldbrwRow.Item("instrumentation_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidInstrumentationID.ToString) Then + lobjInstrumentation = CType(MyGlobals.CachedObjectRetrieve(lguidInstrumentationID.ToString), clsInstrumentation) + Else + 'lobjInstrumentation = New clsInstrumentation(lguidInstrumentationID) + lobjInstrumentation = New clsInstrumentation(ldbrwRow) + End If + lcolInstrumentations.Add(lobjInstrumentation) + Next + End If + ldbdsInstrumentations.Clear() + + Return lcolInstrumentations + End Function + + Public Shared Sub AddAllInstrumentationsToCache() + If MyGlobals.g_objObjectTypesCached.Contains("Instrumentations") = False Then + GetAllInstrumentations() + MyGlobals.g_objObjectTypesCached.Add("Instrumentations") + End If + End Sub + +End Class diff --git a/clsPublisher.vb b/clsPublisher.vb new file mode 100644 index 0000000..4168aaa --- /dev/null +++ b/clsPublisher.vb @@ -0,0 +1,398 @@ +Imports System.Data +Imports System.Xml + +Public Class clsPublisher + Implements ICloneable + + Private mguidPublisherID As Guid + Private mstrPublisherName As String + Private mstrPublisherStreamingAllowed As String + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + mguidPublisherID = Guid.NewGuid + mstrPublisherName = String.Empty + mstrPublisherStreamingAllowed = "Unknown" + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal lstrPublisherName As String, ByVal lstrPublisherStreamingAllowed As String) + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_publisher_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherName As New SqlClient.SqlParameter + prmPublisherName.ParameterName = "@publisher_name" + prmPublisherName.SqlDbType = SqlDbType.VarChar + prmPublisherName.Size = MyGlobals.PUBLISHER_NAME_SIZE + prmPublisherName.Value = lstrPublisherName + ldbcmdCommand.Parameters.Add(prmPublisherName) + + Dim ldbdsPublishers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsPublishers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsPublishers.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + + ldbdsPublishers.Clear() + m_blnObjectAlreadyPersisted = True + Else + ldbdsPublishers.Clear() + mguidPublisherID = Guid.NewGuid + mstrPublisherName = lstrPublisherName + mstrPublisherStreamingAllowed = lstrPublisherStreamingAllowed + m_blnObjectAlreadyPersisted = False + End If + End Sub + + Public Sub New(ByVal lguidPublisherID As Guid) + mguidPublisherID = lguidPublisherID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_publisher" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + prmPublisherID.Value = lguidPublisherID + ldbcmdCommand.Parameters.Add(prmPublisherID) + + Dim ldbdsPublishers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsPublishers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsPublishers.Tables(0).Rows(0) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.PublisherID.ToString) + End If + ldbdsPublishers.Clear() + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.PublisherID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + mguidPublisherID = CType(ldbrwRow.Item("publisher_id"), Guid) + + mstrPublisherName = CType(ldbrwRow.Item("publisher_name"), String) + mstrPublisherStreamingAllowed = CType(ldbrwRow.Item("publisher_streaming_allowed"), String) + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.PublisherID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_publisher" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + prmPublisherID.Value = mguidPublisherID + ldbcmdCommand.Parameters.Add(prmPublisherID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + MyGlobals.AddCachedObject(Me, Me.PublisherID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_publisher" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + prmPublisherID.Value = mguidPublisherID + ldbcmdCommand.Parameters.Add(prmPublisherID) + ' Set up parameter for stored procedure + Dim prmPublisherName As New SqlClient.SqlParameter + prmPublisherName.ParameterName = "@publisher_name" + prmPublisherName.SqlDbType = SqlDbType.VarChar + prmPublisherName.Size = MyGlobals.PUBLISHER_NAME_SIZE + prmPublisherName.Value = mstrPublisherName + ldbcmdCommand.Parameters.Add(prmPublisherName) + + Dim prmPublisherStreamingAllowed As New SqlClient.SqlParameter + prmPublisherStreamingAllowed.ParameterName = "@publisher_streaming_allowed" + prmPublisherStreamingAllowed.SqlDbType = SqlDbType.VarChar + prmPublisherStreamingAllowed.Size = MyGlobals.PUBLISHER_STREAMING_ALLOWED_SIZE + prmPublisherStreamingAllowed.Value = mstrPublisherStreamingAllowed + ldbcmdCommand.Parameters.Add(prmPublisherStreamingAllowed) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_publisher" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + prmPublisherID.Value = mguidPublisherID + ldbcmdCommand.Parameters.Add(prmPublisherID) + ' Set up parameter for stored procedure + Dim prmPublisherName As New SqlClient.SqlParameter + prmPublisherName.ParameterName = "@publisher_name" + prmPublisherName.SqlDbType = SqlDbType.VarChar + prmPublisherName.Size = MyGlobals.PUBLISHER_NAME_SIZE + prmPublisherName.Value = mstrPublisherName + ldbcmdCommand.Parameters.Add(prmPublisherName) + + Dim prmPublisherStreamingAllowed As New SqlClient.SqlParameter + prmPublisherStreamingAllowed.ParameterName = "@publisher_streaming_allowed" + prmPublisherStreamingAllowed.SqlDbType = SqlDbType.VarChar + prmPublisherStreamingAllowed.Size = MyGlobals.PUBLISHER_STREAMING_ALLOWED_SIZE + prmPublisherStreamingAllowed.Value = mstrPublisherStreamingAllowed + ldbcmdCommand.Parameters.Add(prmPublisherStreamingAllowed) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch + Return False + End Try + + End Function + + Public Function DuplicateExists(ByVal lstrPublisherNameToCheck As String) As Boolean + Try + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_publisher_by_name" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherName As New SqlClient.SqlParameter + prmPublisherName.ParameterName = "@publisher_name" + prmPublisherName.SqlDbType = SqlDbType.VarChar + prmPublisherName.Size = MyGlobals.PUBLISHER_NAME_SIZE + prmPublisherName.Value = lstrPublisherNameToCheck + ldbcmdCommand.Parameters.Add(prmPublisherName) + + Dim ldbdsPublishers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsPublishers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsPublishers.Tables(0).Rows + If mguidPublisherID.Equals(CType(ldbrwRow.Item("publisher_id"), Guid)) Then + 'OK + Else + ldbdsPublishers.Clear() + Return True + End If + Next + End If + ldbdsPublishers.Clear() + Return False + Catch + Return False + End Try + + End Function + + Public Property PublisherID() As Guid + Get + Return mguidPublisherID + End Get + + Set(ByVal lguidValue As Guid) + mguidPublisherID = lguidValue + End Set + End Property + + Public Property PublisherName() As String + Get + Return mstrPublisherName + End Get + + Set(ByVal sValue As String) + mstrPublisherName = sValue.Trim + End Set + End Property + + Public Property PublisherStreamingAllowed() As String + Get + Return mstrPublisherStreamingAllowed + End Get + + Set(ByVal sValue As String) + mstrPublisherStreamingAllowed = sValue.Trim + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsPublisher + lobjReturnValue.PublisherID = Me.PublisherID + lobjReturnValue.PublisherName = Me.PublisherName + lobjReturnValue.PublisherStreamingAllowed = Me.PublisherStreamingAllowed + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherPublisher As clsPublisher) As Boolean + If Me.PublisherID.Equals(lobjOtherPublisher.PublisherID) _ + AndAlso Me.PublisherName = lobjOtherPublisher.PublisherName _ + AndAlso Me.PublisherStreamingAllowed = lobjOtherPublisher.PublisherStreamingAllowed Then + Return True + Else + Return False + End If + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + If Me.PublisherName.Length = 0 Then + lstrErrorString = "Publisher Name is required" + Return False + End If + + If Me.DuplicateExists(Me.PublisherName) Then + lstrErrorString = "Given Publisher Name already exists" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + Dim lblnReturnValue As Boolean + + lblnReturnValue = True + + lstrReferencedByString = "" + + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_publisher_isreferenced" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmPublisherID As New SqlClient.SqlParameter + prmPublisherID.ParameterName = "@publisher_id" + prmPublisherID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmPublisherID.Size = 5 + prmPublisherID.Value = mguidPublisherID + ldbcmdCommand.Parameters.Add(prmPublisherID) + + Dim ldbdsPublishers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsPublishers.Tables(0).Rows.Count > 0 Then + lblnReturnValue = False + + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsPublishers.Tables(0).Rows + If Not ldbrwRow.IsNull("table_referencing_instance") Then + If lstrReferencedByString.Length = 0 Then + lstrReferencedByString = CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + Else + lstrReferencedByString = lstrReferencedByString + " and " + CType(ldbrwRow.Item("table_referencing_instance"), String) + "(s)" + End If + End If + Next + + End If + ldbdsPublishers.Clear() + + Return lblnReturnValue + + End Function + + Public Overrides Function ToString() As String + Return mstrPublisherName + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Publisher") + + objXMLWriter.WriteElementString("PublisherID", Me.PublisherID.ToString) + objXMLWriter.WriteElementString("PublisherName", Me.PublisherName) + objXMLWriter.WriteElementString("PublisherStreamingAllowed", Me.PublisherStreamingAllowed) + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllPublishers() As System.Collections.Generic.List(Of clsPublisher) + Dim lguidPublisherID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjPublisher As clsPublisher + Dim lcolPublishers As New System.Collections.Generic.List(Of clsPublisher) + + ldbcmdCommand.CommandText = "sel_publisher_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsPublishers As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsPublishers.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsPublishers.Tables(0).Rows + lguidPublisherID = CType(ldbrwRow.Item("publisher_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidPublisherID.ToString) Then + lobjPublisher = CType(MyGlobals.CachedObjectRetrieve(lguidPublisherID.ToString), clsPublisher) + Else + 'lobjPublisher = New clsPublisher(lguidPublisherID) + lobjPublisher = New clsPublisher(ldbrwRow) + End If + lcolPublishers.Add(lobjPublisher) + Next + End If + ldbdsPublishers.Clear() + + Return lcolPublishers + End Function + + Public Shared Sub AddAllPublishersToCache() + If MyGlobals.g_objObjectTypesCached.Contains("Publishers") = False Then + GetAllPublishers() + MyGlobals.g_objObjectTypesCached.Add("Publishers") + End If + End Sub + +End Class diff --git a/clsWork.vb b/clsWork.vb new file mode 100644 index 0000000..400dc6e --- /dev/null +++ b/clsWork.vb @@ -0,0 +1,672 @@ +Imports System.Data +Imports System.Text +Imports System.Windows.Forms +Imports System.Xml + +Public Class clsWork + Implements ICloneable + + Private m_guidWorkID As Guid + Private m_objComposer As clsComposer + Private m_objBook As clsBook + Private m_intPageNumber As Integer + Private m_strWorkName As String + Private m_strOpusInfo As String + Private m_objInstrumentation As clsInstrumentation + Private m_objHymnTuneName As clsHymnTuneName + Private m_blnObjectAlreadyPersisted As Boolean + + Public Sub New() + m_guidWorkID = Guid.NewGuid + m_objComposer = Nothing + m_objBook = Nothing + m_intPageNumber = 0 + m_strWorkName = "" + m_strOpusInfo = "" + m_objInstrumentation = Nothing + m_objHymnTuneName = Nothing + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal objComposer As clsComposer, ByVal objInstrumentation As clsInstrumentation, ByVal objBook As clsBook, ByVal intPageNumber As Integer, ByVal strWorkName As String, ByVal strOpusInfo As String, ByVal objHymnTuneName As clsHymnTuneName) + m_guidWorkID = Guid.NewGuid + m_objComposer = objComposer + m_objInstrumentation = objInstrumentation + m_objBook = objBook + m_intPageNumber = intPageNumber + m_strWorkName = strWorkName + m_strOpusInfo = strOpusInfo + m_objHymnTuneName = objHymnTuneName + m_blnObjectAlreadyPersisted = False + End Sub + + Public Sub New(ByVal guidWorkID As Guid) + 'm_guidWorkID = guidWorkID + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "sel_work" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmWorkID As New SqlClient.SqlParameter + prmWorkID.ParameterName = "@work_id" + prmWorkID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmWorkID.Size = 5 + prmWorkID.Value = guidWorkID + ldbcmdCommand.Parameters.Add(prmWorkID) + + Dim ldbdsWorks As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsWorks.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + ldbrwRow = ldbdsWorks.Tables(0).Rows(0) + + PopulateFromDBRow(ldbrwRow) + + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.WorkID.ToString) + Else + m_guidWorkID = Guid.NewGuid + End If + ldbdsWorks.Clear() + End Sub + + Public Sub New(ByVal ldbrwRow As DataRow) + PopulateFromDBRow(ldbrwRow) + + m_blnObjectAlreadyPersisted = True + MyGlobals.AddCachedObject(Me, Me.WorkID.ToString) + End Sub + + Private Sub PopulateFromDBRow(ByVal ldbrwRow As DataRow) + m_guidWorkID = CType(ldbrwRow.Item("work_id"), Guid) + + If ldbrwRow.IsNull("composer_id") Then + m_objComposer = Nothing + Else + Dim guidComposerID As Guid = CType(ldbrwRow.Item("composer_id"), Guid) + If MyGlobals.CachedObjectExists(guidComposerID.ToString) Then + m_objComposer = CType(MyGlobals.CachedObjectRetrieve(guidComposerID.ToString), clsComposer) + Else + m_objComposer = New clsComposer(guidComposerID) + End If + End If + + If ldbrwRow.IsNull("book_id") Then + m_objBook = Nothing + Else + Dim guidBookID As Guid = CType(ldbrwRow.Item("book_id"), Guid) + If MyGlobals.CachedObjectExists(guidBookID.ToString) Then + m_objBook = CType(MyGlobals.CachedObjectRetrieve(guidBookID.ToString), clsBook) + Else + m_objBook = New clsBook(guidBookID) + End If + End If + + m_intPageNumber = CType(ldbrwRow.Item("page_number"), Integer) + m_strWorkName = CType(ldbrwRow.Item("work_name"), String) + m_strOpusInfo = CType(ldbrwRow.Item("opus_info"), String) + + If ldbrwRow.IsNull("instrumentation_id") Then + m_objInstrumentation = Nothing + Else + Dim guidInstrumentationID As Guid = CType(ldbrwRow.Item("instrumentation_id"), Guid) + If MyGlobals.CachedObjectExists(guidInstrumentationID.ToString) Then + m_objInstrumentation = CType(MyGlobals.CachedObjectRetrieve(guidInstrumentationID.ToString), clsInstrumentation) + Else + m_objInstrumentation = New clsInstrumentation(guidInstrumentationID) + End If + End If + + If ldbrwRow.IsNull("hymn_tune_name_id") Then + m_objHymnTuneName = Nothing + Else + Dim guidHymnTuneNameID As Guid = CType(ldbrwRow.Item("hymn_tune_name_id"), Guid) + If MyGlobals.CachedObjectExists(guidHymnTuneNameID.ToString) Then + m_objHymnTuneName = CType(MyGlobals.CachedObjectRetrieve(guidHymnTuneNameID.ToString), clsHymnTuneName) + Else + m_objHymnTuneName = New clsHymnTuneName(guidHymnTuneNameID) + End If + End If + End Sub + + Public Function Delete() As Boolean + Try + MyGlobals.RemoveCachedObject(Me.WorkID.ToString) + + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "del_work" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmWorkID As New SqlClient.SqlParameter + prmWorkID.ParameterName = "@work_id" + prmWorkID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmWorkID.Size = 5 + prmWorkID.Value = m_guidWorkID + ldbcmdCommand.Parameters.Add(prmWorkID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Catch + Return False + End Try + + End Function + + Public Function Save() As Boolean + Try + If Not m_objComposer Is Nothing Then + If Not m_objComposer.ItemAlreadyPersisted Then + m_objComposer.Save() + End If + End If + If Not m_objBook Is Nothing Then + If Not m_objBook.ItemAlreadyPersisted Then + m_objBook.Save() + End If + End If + If Not m_objHymnTuneName Is Nothing Then + If Not m_objHymnTuneName.ItemAlreadyPersisted Then + m_objHymnTuneName.Save() + End If + End If + If Not m_objInstrumentation Is Nothing Then + If Not m_objInstrumentation.ItemAlreadyPersisted Then + m_objInstrumentation.Save() + End If + End If + + MyGlobals.AddCachedObject(Me, Me.WorkID.ToString) + + If m_blnObjectAlreadyPersisted Then + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "upd_work" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmWorkID As New SqlClient.SqlParameter + prmWorkID.ParameterName = "@work_id" + prmWorkID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmWorkID.Size = 5 + prmWorkID.Value = m_guidWorkID + ldbcmdCommand.Parameters.Add(prmWorkID) + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + If m_objComposer Is Nothing Then + prmComposerID.Value = DBNull.Value + Else + prmComposerID.Value = m_objComposer.ComposerID + End If + ldbcmdCommand.Parameters.Add(prmComposerID) + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmBookID.Size = 5 + If m_objBook Is Nothing Then + prmBookID.Value = DBNull.Value + Else + prmBookID.Value = m_objBook.BookID + End If + ldbcmdCommand.Parameters.Add(prmBookID) + ' Set up parameter for stored procedure + Dim prmPageNumber As New SqlClient.SqlParameter + prmPageNumber.ParameterName = "@page_number" + prmPageNumber.SqlDbType = SqlDbType.Int + 'prmPageNumber.Size = 5 + prmPageNumber.Value = m_intPageNumber + ldbcmdCommand.Parameters.Add(prmPageNumber) + ' Set up parameter for stored procedure + Dim prmWorkName As New SqlClient.SqlParameter + prmWorkName.ParameterName = "@work_name" + prmWorkName.SqlDbType = SqlDbType.VarChar + prmWorkName.Size = MyGlobals.WORK_NAME_SIZE + prmWorkName.Value = m_strWorkName + ldbcmdCommand.Parameters.Add(prmWorkName) + ' Set up parameter for stored procedure + Dim prmOpusInfo As New SqlClient.SqlParameter + prmOpusInfo.ParameterName = "@opus_info" + prmOpusInfo.SqlDbType = SqlDbType.VarChar + prmOpusInfo.Size = MyGlobals.OPUS_INFO_SIZE + prmOpusInfo.Value = m_strOpusInfo + ldbcmdCommand.Parameters.Add(prmOpusInfo) + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = MyGlobals.INSTRUMENTATION_SIZE + If m_objInstrumentation Is Nothing Then + prmInstrumentationID.Value = DBNull.Value + Else + prmInstrumentationID.Value = m_objInstrumentation.InstrumentationID + End If + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + If m_objHymnTuneName Is Nothing Then + prmHymnTuneNameID.Value = DBNull.Value + Else + prmHymnTuneNameID.Value = m_objHymnTuneName.HymnTuneNameID + End If + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + Return True + Else + Return False + End If + Else + Dim ldbcmdCommand As New SqlClient.SqlCommand + ldbcmdCommand.CommandText = "ins_work" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + ' Set up parameter for stored procedure + Dim prmWorkID As New SqlClient.SqlParameter + prmWorkID.ParameterName = "@work_id" + prmWorkID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmWorkID.Size = 5 + prmWorkID.Value = m_guidWorkID + ldbcmdCommand.Parameters.Add(prmWorkID) + ' Set up parameter for stored procedure + Dim prmComposerID As New SqlClient.SqlParameter + prmComposerID.ParameterName = "@composer_id" + prmComposerID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmComposerID.Size = 5 + If m_objComposer Is Nothing Then + prmComposerID.Value = DBNull.Value + Else + prmComposerID.Value = m_objComposer.ComposerID + End If + ldbcmdCommand.Parameters.Add(prmComposerID) + ' Set up parameter for stored procedure + Dim prmBookID As New SqlClient.SqlParameter + prmBookID.ParameterName = "@book_id" + prmBookID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmBookID.Size = 5 + If m_objBook Is Nothing Then + prmBookID.Value = DBNull.Value + Else + prmBookID.Value = m_objBook.BookID + End If + ldbcmdCommand.Parameters.Add(prmBookID) + ' Set up parameter for stored procedure + Dim prmPageNumber As New SqlClient.SqlParameter + prmPageNumber.ParameterName = "@page_number" + prmPageNumber.SqlDbType = SqlDbType.Int + 'prmPageNumber.Size = 5 + prmPageNumber.Value = m_intPageNumber + ldbcmdCommand.Parameters.Add(prmPageNumber) + ' Set up parameter for stored procedure + Dim prmWorkName As New SqlClient.SqlParameter + prmWorkName.ParameterName = "@work_name" + prmWorkName.SqlDbType = SqlDbType.VarChar + prmWorkName.Size = MyGlobals.WORK_NAME_SIZE + prmWorkName.Value = m_strWorkName + ldbcmdCommand.Parameters.Add(prmWorkName) + ' Set up parameter for stored procedure + Dim prmOpusInfo As New SqlClient.SqlParameter + prmOpusInfo.ParameterName = "@opus_info" + prmOpusInfo.SqlDbType = SqlDbType.VarChar + prmOpusInfo.Size = MyGlobals.OPUS_INFO_SIZE + prmOpusInfo.Value = m_strOpusInfo + ldbcmdCommand.Parameters.Add(prmOpusInfo) + ' Set up parameter for stored procedure + Dim prmInstrumentationID As New SqlClient.SqlParameter + prmInstrumentationID.ParameterName = "@instrumentation_id" + prmInstrumentationID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmInstrumentationID.Size = MyGlobals.INSTRUMENTATION_SIZE + If m_objInstrumentation Is Nothing Then + prmInstrumentationID.Value = DBNull.Value + Else + prmInstrumentationID.Value = m_objInstrumentation.InstrumentationID + End If + ldbcmdCommand.Parameters.Add(prmInstrumentationID) + ' Set up parameter for stored procedure + Dim prmHymnTuneNameID As New SqlClient.SqlParameter + prmHymnTuneNameID.ParameterName = "@hymn_tune_name_id" + prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + 'prmHymnTuneNameID.Size = 5 + If m_objHymnTuneName Is Nothing Then + prmHymnTuneNameID.Value = DBNull.Value + Else + prmHymnTuneNameID.Value = m_objHymnTuneName.HymnTuneNameID + End If + ldbcmdCommand.Parameters.Add(prmHymnTuneNameID) + + Dim lintRowsAffected As Integer = MyGlobals.g_objDatabaseLayer.ExecuteNonQuery(ldbcmdCommand) + If lintRowsAffected > 0 Then + m_blnObjectAlreadyPersisted = True + Return True + Else + Return False + End If + End If + Catch e As SqlClient.SqlException + MessageBox.Show(e.Message) + Return False + Catch + Return False + End Try + + End Function + + Public Property WorkID() As Guid + Get + Return m_guidWorkID + End Get + Set(ByVal Value As Guid) + m_guidWorkID = Value + End Set + End Property + + Public Property Composer() As clsComposer + Get + Return m_objComposer + End Get + Set(ByVal Value As clsComposer) + m_objComposer = Value + End Set + End Property + + Public Property Book() As clsBook + Get + Return m_objBook + End Get + Set(ByVal Value As clsBook) + m_objBook = Value + End Set + End Property + + Public Property PageNumber() As Integer + Get + Return m_intPageNumber + End Get + Set(ByVal Value As Integer) + m_intPageNumber = Value + End Set + End Property + + Public Property PageNumberAsString() As String + Get + Return m_intPageNumber.ToString + End Get + Set(ByVal Value As String) + If Val(Value) > 0 Then + m_intPageNumber = CType(Value, Integer) + Else + m_intPageNumber = 0 + End If + End Set + End Property + + Public Property WorkName() As String + Get + Return m_strWorkName + End Get + Set(ByVal Value As String) + m_strWorkName = Value.Trim + End Set + End Property + + Public Property OpusInfo() As String + Get + Return m_strOpusInfo + End Get + Set(ByVal Value As String) + m_strOpusInfo = Value.Trim + End Set + End Property + + Public Property Instrumentation() As clsInstrumentation + Get + Return m_objInstrumentation + End Get + Set(ByVal Value As clsInstrumentation) + m_objInstrumentation = Value + End Set + End Property + + Public Property HymnTuneName() As clsHymnTuneName + Get + Return m_objHymnTuneName + End Get + Set(ByVal Value As clsHymnTuneName) + m_objHymnTuneName = Value + End Set + End Property + + Public Property ItemAlreadyPersisted() As Boolean + Get + Return m_blnObjectAlreadyPersisted + End Get + Set(ByVal Value As Boolean) + m_blnObjectAlreadyPersisted = Value + End Set + End Property + + Public Function Clone() As Object Implements ICloneable.Clone + Dim lobjReturnValue As New clsWork + lobjReturnValue.WorkID = Me.WorkID + lobjReturnValue.Composer = Me.Composer + lobjReturnValue.Book = Me.Book + lobjReturnValue.PageNumber = Me.PageNumber + lobjReturnValue.WorkName = Me.WorkName + lobjReturnValue.OpusInfo = Me.OpusInfo + lobjReturnValue.Instrumentation = Me.Instrumentation + lobjReturnValue.HymnTuneName = Me.HymnTuneName + lobjReturnValue.ItemAlreadyPersisted = Me.ItemAlreadyPersisted + + Return lobjReturnValue + End Function + + Public Function StateIsIdentical(ByVal lobjOtherWork As clsWork) As Boolean + Dim blnResult As Boolean + + If Me.WorkID.Equals(lobjOtherWork.WorkID) _ + AndAlso Me.PageNumber = lobjOtherWork.PageNumber _ + AndAlso Me.WorkName = lobjOtherWork.WorkName _ + AndAlso Me.OpusInfo = lobjOtherWork.OpusInfo Then + blnResult = True + + If Me.Composer Is Nothing Then + If lobjOtherWork.Composer Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherWork.Composer Is Nothing Then + Return False + Else + blnResult = Me.Composer.ComposerID.Equals(lobjOtherWork.Composer.ComposerID) + End If + End If + + If Not blnResult Then + Return False + End If + + If Me.Book Is Nothing Then + If lobjOtherWork.Book Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherWork.Book Is Nothing Then + Return False + Else + blnResult = Me.Book.BookID.Equals(lobjOtherWork.Book.BookID) + End If + End If + + If Not blnResult Then + Return False + End If + + If Me.Instrumentation Is Nothing Then + If lobjOtherWork.Instrumentation Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherWork.Instrumentation Is Nothing Then + Return False + Else + blnResult = Me.Instrumentation.InstrumentationID.Equals(lobjOtherWork.Instrumentation.InstrumentationID) + End If + End If + + If Not blnResult Then + Return False + End If + + If Me.HymnTuneName Is Nothing Then + If lobjOtherWork.HymnTuneName Is Nothing Then + 'OK + Else + Return False + End If + Else + If lobjOtherWork.HymnTuneName Is Nothing Then + Return False + Else + blnResult = Me.HymnTuneName.HymnTuneNameID.Equals(lobjOtherWork.HymnTuneName.HymnTuneNameID) + End If + End If + Else + Return False + End If + + Return blnResult + + End Function + + Public Function Validate(ByRef lstrErrorString As String) As Boolean + lstrErrorString = "" + + If Me.Composer Is Nothing Then + lstrErrorString = "Composer is required" + Return False + End If + + If Me.Book Is Nothing Then + lstrErrorString = "Book is required" + Return False + End If + + If Me.WorkName.Length = 0 Then + lstrErrorString = "Work Name is required" + Return False + End If + + If Me.Instrumentation Is Nothing Then + lstrErrorString = "Instrumentation is required" + Return False + End If + + Return True + End Function + + Public Function OKToDelete(ByRef lstrReferencedByString As String) As Boolean + lstrReferencedByString = "" + Return True + End Function + + Public Overrides Function ToString() As String + Dim strReturnString As New StringBuilder + + If m_objBook Is Nothing Then + 'strReturnString.Append(MyGlobals.COLLECTION_STRING) + Else + strReturnString.Append(m_objBook.BookTitle) + End If + + strReturnString.Append(m_intPageNumber) + strReturnString.Append(" - ") + strReturnString.Append(m_strWorkName) + + If m_objComposer Is Nothing Then + 'strReturnString.Append(MyGlobals.COLLECTION_STRING) + Else + strReturnString.Append(m_objComposer.ComposerName) + End If + + Return strReturnString.ToString + End Function + + Public Sub WriteXML(ByRef objXMLWriter As XmlTextWriter) + objXMLWriter.WriteStartElement("Work") + + objXMLWriter.WriteElementString("WorkID", Me.WorkID.ToString) + objXMLWriter.WriteElementString("WorkName", Me.WorkName) + objXMLWriter.WriteElementString("ComposerID", Me.Composer.ComposerID.ToString) + Me.Composer.WriteXML(objXMLWriter) + objXMLWriter.WriteElementString("BookID", Me.Book.BookID.ToString) + Me.Book.WriteXML(objXMLWriter) + If Me.HymnTuneName Is Nothing Then + objXMLWriter.WriteElementString("HymnTuneNameID", "") + Else + objXMLWriter.WriteElementString("HymnTuneNameID", Me.HymnTuneName.HymnTuneNameID.ToString) + Me.HymnTuneName.WriteXML(objXMLWriter) + End If + objXMLWriter.WriteElementString("OpusInfo", Me.OpusInfo) + objXMLWriter.WriteElementString("InstrumentationID", Me.Instrumentation.InstrumentationID.ToString) + Me.Instrumentation.WriteXML(objXMLWriter) + objXMLWriter.WriteElementString("PageNumber", Me.PageNumberAsString) + + objXMLWriter.WriteEndElement() + End Sub + + Public Shared Function GetAllWorks() As System.Collections.Generic.List(Of clsWork) + 'Preload to cache + clsHymnTuneName.AddAllHymnTuneNamesToCache() + clsComposer.AddAllComposersToCache() + clsInstrumentation.AddAllInstrumentationsToCache() + clsPublisher.AddAllPublishersToCache() + clsBook.AddAllBooksToCache() + + Dim lguidWorkID As Guid + Dim ldbcmdCommand As New SqlClient.SqlCommand + Dim lobjWork As clsWork + Dim lcolWorks As New System.Collections.Generic.List(Of clsWork) + + ldbcmdCommand.CommandText = "sel_work_all" + + ldbcmdCommand.CommandType = CommandType.StoredProcedure + + Dim ldbdsWorks As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdCommand) + + If ldbdsWorks.Tables(0).Rows.Count > 0 Then + Dim ldbrwRow As DataRow + For Each ldbrwRow In ldbdsWorks.Tables(0).Rows + lguidWorkID = CType(ldbrwRow.Item("work_id"), Guid) + + If MyGlobals.CachedObjectExists(lguidWorkID.ToString) Then + lobjWork = CType(MyGlobals.CachedObjectRetrieve(lguidWorkID.ToString), clsWork) + Else + 'lobjWork = New clsWork(lguidWorkID) + lobjWork = New clsWork(ldbrwRow) + End If + lcolWorks.Add(lobjWork) + Next + End If + ldbdsWorks.Clear() + + Return lcolWorks + End Function + +End Class diff --git a/frmAddAlternateHymnTuneName.resx b/frmAddAlternateHymnTuneName.resx new file mode 100644 index 0000000..5672f00 --- /dev/null +++ b/frmAddAlternateHymnTuneName.resx @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + Assembly + + + False + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + frmAddAlternateHymnTuneName + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/frmAddAlternateHymnTuneName.vb b/frmAddAlternateHymnTuneName.vb new file mode 100644 index 0000000..8b7bea4 --- /dev/null +++ b/frmAddAlternateHymnTuneName.vb @@ -0,0 +1,158 @@ +Imports System.Windows.Forms + +Public Class frmAddAlternateHymnTuneName + Inherits Windows.Forms.Form + Private m_objCurrentHymnTuneName As clsHymnTuneName + Private m_objAlternateHymnTuneNameChosen As clsHymnTuneName + +#Region " Windows Form Designer generated code " + + Protected 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 lblAlternateHymnTuneName As Windows.Forms.Label + Friend WithEvents lstAlternateHymnTuneNames As Windows.Forms.ListBox + Friend WithEvents btnOK As Windows.Forms.Button + Friend WithEvents btnCancel As Windows.Forms.Button + Private Sub InitializeComponent() + Me.lblAlternateHymnTuneName = New Windows.Forms.Label + Me.lstAlternateHymnTuneNames = New Windows.Forms.ListBox + Me.btnOK = New Windows.Forms.Button + Me.btnCancel = New Windows.Forms.Button + Me.SuspendLayout() + ' + 'lblAlternateHymnTuneName + ' + Me.lblAlternateHymnTuneName.Location = New System.Drawing.Point(8, 8) + Me.lblAlternateHymnTuneName.Name = "lblAlternateHymnTuneName" + Me.lblAlternateHymnTuneName.Size = New System.Drawing.Size(448, 16) + Me.lblAlternateHymnTuneName.TabIndex = 0 + ' + 'lstAlternateHymnTuneNames + ' + Me.lstAlternateHymnTuneNames.Location = New System.Drawing.Point(8, 24) + Me.lstAlternateHymnTuneNames.Name = "lstAlternateHymnTuneNames" + Me.lstAlternateHymnTuneNames.Size = New System.Drawing.Size(456, 433) + Me.lstAlternateHymnTuneNames.Sorted = True + Me.lstAlternateHymnTuneNames.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.DialogResult = Windows.Forms.DialogResult.OK + Me.btnOK.Location = New System.Drawing.Point(480, 8) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(112, 24) + Me.btnOK.TabIndex = 2 + Me.btnOK.Text = "&OK" + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(480, 40) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(112, 24) + Me.btnCancel.TabIndex = 3 + Me.btnCancel.Text = "&Cancel" + ' + 'frmAddAlternateHymnTuneName + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(600, 462) + Me.ControlBox = False + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.lstAlternateHymnTuneNames) + Me.Controls.Add(Me.lblAlternateHymnTuneName) + Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmAddAlternateHymnTuneName" + Me.Text = "Add Alternate Hymn Tune Name" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Public Property CurrentHymnTuneName() As clsHymnTuneName + Get + Return m_objCurrentHymnTuneName + End Get + Set(ByVal Value As clsHymnTuneName) + m_objCurrentHymnTuneName = Value + End Set + End Property + + Public ReadOnly Property AlternateHymnTuneNameChosen() As clsHymnTuneName + Get + Return m_objAlternateHymnTuneNameChosen + End Get + End Property + + Public Sub LoadGUI(ByVal objCurrentHymnTuneName As clsHymnTuneName) + CurrentHymnTuneName = objCurrentHymnTuneName + + lblAlternateHymnTuneName.Text = "Select Alternate Hymn Tune Name for: " + objCurrentHymnTuneName.HymnTuneName + Dim objHymnTuneNames As System.Collections.Generic.List(Of clsHymnTuneName) = clsHymnTuneName.GetAllHymnTuneNames() + Dim objHymnTuneName As clsHymnTuneName + For Each objHymnTuneName In objHymnTuneNames + If objHymnTuneName.HymnTuneName = objCurrentHymnTuneName.HymnTuneName Then + 'Do not load this one - it is the one we are comparing to + Else + If objHymnTuneName.OtherHymnTuneNamesForTune.ContainsKey(objHymnTuneName.HymnTuneName) Then + 'Do not load this one - it already matches + Else + lstAlternateHymnTuneNames.Items.Add(objHymnTuneName) + End If + End If + Next + + m_objAlternateHymnTuneNameChosen = Nothing + End Sub + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + If lstAlternateHymnTuneNames.SelectedItems.Count = 0 Then + MessageBox.Show("Must select an alternate hymn tune name") + Me.DialogResult = Windows.Forms.DialogResult.None + Exit Sub + End If + + m_objAlternateHymnTuneNameChosen = CType(lstAlternateHymnTuneNames.SelectedItem, clsHymnTuneName) + + 'This button will close the form with Dialog Result OK + End Sub + + Public Shared Function GetAlternateHymnTuneNameChosen(ByVal objCurrentHymnTuneName As clsHymnTuneName) As clsHymnTuneName + Dim objFrmAddAlternateHymnTuneName As New frmAddAlternateHymnTuneName + objFrmAddAlternateHymnTuneName.LoadGUI(objCurrentHymnTuneName) + objFrmAddAlternateHymnTuneName.ShowDialog() + Dim lobjReturnValue As clsHymnTuneName = objFrmAddAlternateHymnTuneName.AlternateHymnTuneNameChosen + objFrmAddAlternateHymnTuneName.Dispose() + Return lobjReturnValue + End Function +End Class diff --git a/frmEditBook.resx b/frmEditBook.resx new file mode 100644 index 0000000..d80f77b --- /dev/null +++ b/frmEditBook.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditBook.vb b/frmEditBook.vb new file mode 100644 index 0000000..fc6223f --- /dev/null +++ b/frmEditBook.vb @@ -0,0 +1,588 @@ +Imports System.Windows.Forms + +Public Class frmEditBook + Inherits OrganLit.BaseEditForm + + Private mobjDetailBook As New clsBook + Private m_objComposersHash As Hashtable + Private m_objInstrumentationsHash As Hashtable + Private m_objPublishersHash 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 lblBookTitle As Windows.Forms.Label + Friend WithEvents txtBookTitle As Windows.Forms.TextBox + Friend WithEvents lblComposer As Windows.Forms.Label + Friend WithEvents cboComposer As ComboTypeAhead.ComboTypeAhead + Friend WithEvents lblPublisher As Windows.Forms.Label + Friend WithEvents cboPublisher As ComboTypeAhead.ComboTypeAhead + Friend WithEvents cboInstrumentation As ComboTypeAhead.ComboTypeAhead + Friend WithEvents lblInstrumentation As Windows.Forms.Label + Private Sub InitializeComponent() + Me.lblBookTitle = New Windows.Forms.Label + Me.txtBookTitle = New Windows.Forms.TextBox + Me.lblComposer = New Windows.Forms.Label + Me.cboComposer = New ComboTypeAhead.ComboTypeAhead + Me.lblPublisher = New Windows.Forms.Label + Me.cboPublisher = New ComboTypeAhead.ComboTypeAhead + Me.cboInstrumentation = New ComboTypeAhead.ComboTypeAhead + Me.lblInstrumentation = New Windows.Forms.Label + Me.fraAddEdit.SuspendLayout() + Me.SuspendLayout() + ' + 'fraAddEdit + ' + Me.fraAddEdit.Controls.Add(Me.cboInstrumentation) + Me.fraAddEdit.Controls.Add(Me.lblInstrumentation) + Me.fraAddEdit.Controls.Add(Me.cboPublisher) + Me.fraAddEdit.Controls.Add(Me.lblPublisher) + Me.fraAddEdit.Controls.Add(Me.cboComposer) + Me.fraAddEdit.Controls.Add(Me.lblComposer) + Me.fraAddEdit.Controls.Add(Me.txtBookTitle) + Me.fraAddEdit.Controls.Add(Me.lblBookTitle) + Me.fraAddEdit.Location = New System.Drawing.Point(10, 438) + Me.fraAddEdit.Size = New System.Drawing.Size(1064, 142) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblBookTitle, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.txtBookTitle, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblComposer, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.cboComposer, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblPublisher, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.cboPublisher, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblInstrumentation, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.cboInstrumentation, 0) + ' + 'lblBookTitle + ' + Me.lblBookTitle.Location = New System.Drawing.Point(16, 24) + Me.lblBookTitle.Name = "lblBookTitle" + Me.lblBookTitle.Size = New System.Drawing.Size(96, 16) + Me.lblBookTitle.TabIndex = 3 + Me.lblBookTitle.Text = "Book Title" + ' + 'txtBookTitle + ' + Me.txtBookTitle.Location = New System.Drawing.Point(109, 24) + Me.txtBookTitle.Name = "txtBookTitle" + Me.txtBookTitle.Size = New System.Drawing.Size(424, 20) + Me.txtBookTitle.TabIndex = 4 + ' + 'lblComposer + ' + Me.lblComposer.Location = New System.Drawing.Point(16, 48) + Me.lblComposer.Name = "lblComposer" + Me.lblComposer.Size = New System.Drawing.Size(80, 16) + Me.lblComposer.TabIndex = 5 + Me.lblComposer.Text = "Composer" + ' + 'cboComposer + ' + Me.cboComposer.Location = New System.Drawing.Point(109, 48) + Me.cboComposer.Name = "cboComposer" + Me.cboComposer.Size = New System.Drawing.Size(288, 21) + Me.cboComposer.Sorted = True + Me.cboComposer.TabIndex = 6 + ' + 'lblPublisher + ' + Me.lblPublisher.Location = New System.Drawing.Point(16, 107) + Me.lblPublisher.Name = "lblPublisher" + Me.lblPublisher.Size = New System.Drawing.Size(80, 16) + Me.lblPublisher.TabIndex = 9 + Me.lblPublisher.Text = "Publisher" + ' + 'cboPublisher + ' + Me.cboPublisher.Location = New System.Drawing.Point(109, 107) + Me.cboPublisher.Name = "cboPublisher" + Me.cboPublisher.Size = New System.Drawing.Size(288, 21) + Me.cboPublisher.Sorted = True + Me.cboPublisher.TabIndex = 10 + ' + 'cboInstrumentation + ' + Me.cboInstrumentation.Location = New System.Drawing.Point(109, 80) + Me.cboInstrumentation.Name = "cboInstrumentation" + Me.cboInstrumentation.Size = New System.Drawing.Size(288, 21) + Me.cboInstrumentation.Sorted = True + Me.cboInstrumentation.TabIndex = 8 + ' + 'lblInstrumentation + ' + Me.lblInstrumentation.Location = New System.Drawing.Point(16, 80) + Me.lblInstrumentation.Name = "lblInstrumentation" + Me.lblInstrumentation.Size = New System.Drawing.Size(96, 16) + Me.lblInstrumentation.TabIndex = 7 + Me.lblInstrumentation.Text = "Instrumentation" + ' + 'frmEditBook + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1080, 586) + Me.Name = "frmEditBook" + Me.StartPosition = Windows.Forms.FormStartPosition.Manual + Me.Text = "Edit Book" + Me.fraAddEdit.ResumeLayout(False) + Me.fraAddEdit.PerformLayout() + Me.ResumeLayout(False) + + End Sub + +#End Region + + Protected Overrides Sub LoadExistingItemsList() + Dim lobjBook As clsBook + Dim lobjBooks As System.Collections.Generic.List(Of clsBook) + + SetUpExistingItemsHeaders() + + lobjBooks = clsBook.GetAllBooks + + Me.ExistingItemsListSuspendLayout() + + For Each lobjBook In lobjBooks + Me.ExistingObjectsListItems.Add(ConvertBookToListViewItem(lobjBook)) + Next + + Me.ExistingItemsListResumeLayout() + End Sub + + Private Sub SetUpExistingItemsHeaders() + Me.ExistingObjectsListColumns.Add("Composer", 300, HorizontalAlignment.Left) + Me.ExistingObjectsListColumns.Add("Book Title", 400, HorizontalAlignment.Left) + Me.ExistingObjectsListColumns.Add("Publisher", 200, HorizontalAlignment.Left) + + 'Set up sorting rules + Dim lobjBaseEditFormColumnSortRules(2) As clsGridColumnSortRule + lobjBaseEditFormColumnSortRules(0) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) + lobjBaseEditFormColumnSortRules(0).SubColumnSort = New clsGridSubColumnSortRule(1, clsGridSubColumnSortRule.enumSortType.SortAsString, Nothing) + lobjBaseEditFormColumnSortRules(1) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) + lobjBaseEditFormColumnSortRules(1).SubColumnSort = New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, Nothing) + lobjBaseEditFormColumnSortRules(2) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) + lobjBaseEditFormColumnSortRules(2).SubColumnSort = New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, New clsGridSubColumnSortRule(0, clsGridSubColumnSortRule.enumSortType.SortAsString, Nothing)) + + MyBaseEditFormColumnSortRules = lobjBaseEditFormColumnSortRules + + End Sub + + Protected Overrides Sub InitializeDetailControls() + 'Load data to detail controls here at form load time + txtBookTitle.MaxLength = MyGlobals.BOOK_TITLE_SIZE + cboComposer.MaxLength = MyGlobals.COMPOSER_NAME_SIZE + cboInstrumentation.MaxLength = MyGlobals.INSTRUMENTATION_NAME_SIZE + cboPublisher.MaxLength = MyGlobals.PUBLISHER_NAME_SIZE + + txtBookTitle.Text = "" + + Dim objComposer As clsComposer + Dim objComposers As System.Collections.Generic.List(Of clsComposer) + + If cboComposer.Items.Count = 0 Then + Me.cboComposer.Items.Clear() + m_objComposersHash = New Hashtable + + objComposers = clsComposer.GetAllComposers + For Each objComposer In objComposers + AddComposerToForm(objComposer) + Next + + Me.cboComposer.Items.Add(MyGlobals.COLLECTION_STRING) + End If + + Dim objInstrumentation As clsInstrumentation + Dim objInstrumentations As System.Collections.Generic.List(Of clsInstrumentation) + + If cboInstrumentation.Items.Count = 0 Then + Me.cboInstrumentation.Items.Clear() + m_objInstrumentationsHash = New Hashtable + + objInstrumentations = clsInstrumentation.GetAllInstrumentations + For Each objInstrumentation In objInstrumentations + AddInstrumentationToForm(objInstrumentation) + Next + End If + + If cboPublisher.Items.Count = 0 Then + Dim objPublisher As clsPublisher + Dim objPublishers As System.Collections.Generic.List(Of clsPublisher) + + Me.cboPublisher.Items.Clear() + m_objPublishersHash = New Hashtable + + objPublishers = clsPublisher.GetAllPublishers + For Each objPublisher In objPublishers + AddPublisherToForm(objPublisher) + Next + + Me.cboPublisher.Items.Add(MyGlobals.NONE_STRING) + End If + End Sub + + Protected Overrides Sub SetFocusToFirstDetailControlForEdit() + txtBookTitle.Focus() + End Sub + + Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjSavedBook As clsBook + Dim lblnReturnValue As Boolean = False + + lobjSavedBook = CType(lstvwExistingItem.Tag, clsBook) + + Dim objComposer As clsComposer + Select Case cboComposer.Text.ToUpper.Trim + Case MyGlobals.COLLECTION_STRING.ToUpper, "" + objComposer = Nothing + Case Else + objComposer = CType(MyGlobals.GetItemFromHashWithStringKey(cboComposer.Text.ToUpper.Trim, m_objComposersHash), clsComposer) + If objComposer Is Nothing Then + objComposer = New clsComposer(cboComposer.Text.Trim) + End If + End Select + + Dim objInstrumentation As clsInstrumentation + Select Case cboInstrumentation.Text.ToUpper.Trim + Case "" + objInstrumentation = Nothing + Case Else + objInstrumentation = CType(MyGlobals.GetItemFromHashWithStringKey(cboInstrumentation.Text.ToUpper.Trim, m_objInstrumentationsHash), clsInstrumentation) + If objInstrumentation Is Nothing Then + objInstrumentation = New clsInstrumentation(cboInstrumentation.Text.Trim) + End If + End Select + + Dim objPublisher As clsPublisher + Select Case cboPublisher.Text.ToUpper.Trim + Case MyGlobals.NONE_STRING.ToUpper, "" + objPublisher = Nothing + Case Else + objPublisher = CType(MyGlobals.GetItemFromHashWithStringKey(cboPublisher.Text.ToUpper.Trim, m_objPublishersHash), clsPublisher) + If objPublisher Is Nothing Then + objPublisher = New clsPublisher(cboPublisher.Text.Trim, MyGlobals.PUBLISHER_STREAMING_ALLOWED_UNKNOWN) + End If + End Select + + mobjDetailBook.BookTitle = txtBookTitle.Text + mobjDetailBook.Composer = objComposer + mobjDetailBook.Instrumentation = objInstrumentation + mobjDetailBook.Publisher = objPublisher + + If lobjSavedBook.StateIsIdentical(mobjDetailBook) Then + Return False + Else + Return True + End If + End Function + + Protected Overrides Function DetailControlsHaveSignificantData() As Boolean + If txtBookTitle.Text.Trim.Length > 0 Then + Return True + End If + + Return False + End Function + + Protected Overrides Sub EmptyOutDetailControls() + InitializeDetailControls() + txtBookTitle.Text = "" + mobjDetailBook = New clsBook + End Sub + + Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjBook As clsBook + Dim lblnReturnValue As Boolean = False + lobjBook = CType(lstvwExistingItem.Tag, clsBook) + txtBookTitle.Text = lobjBook.BookTitle + + If lobjBook.Composer Is Nothing Then + cboComposer.Text = MyGlobals.COLLECTION_STRING + Else + cboComposer.Text = lobjBook.Composer.ComposerName + End If + + If lobjBook.Instrumentation Is Nothing Then + cboInstrumentation.Text = "" + Else + cboInstrumentation.Text = lobjBook.Instrumentation.InstrumentationName + End If + + If lobjBook.Publisher Is Nothing Then + cboPublisher.Text = MyGlobals.NONE_STRING + Else + cboPublisher.Text = lobjBook.Publisher.PublisherName + End If + + mobjDetailBook = CType(lobjBook.Clone(), clsBook) + Return True + End Function + + Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As Windows.Forms.ListViewItem) As Boolean + Dim lobjBook As clsBook + Dim lstrReferencedBy As String = "" + + lobjBook = CType(lstvwItemToDelete.Tag, clsBook) + + If Not lobjBook.OKToDelete(lstrReferencedBy) Then + MessageBox.Show("Can't delete book: " + lobjBook.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 book: " + lobjBook.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 lobjBook As clsBook + lobjBook = CType(lstvwItemToDelete.Tag, clsBook) + + Return lobjBook.Delete() + End Function + + Protected Overrides Function SaveNewItem() As Boolean + Dim lstrErrorString As String = "" + Dim lblnAddedComposer As Boolean + Dim lblnAddedInstrumentation As Boolean + Dim lblnAddedPublisher As Boolean + + lblnAddedComposer = False + lblnAddedInstrumentation = False + lblnAddedPublisher = False + + Dim objComposer As clsComposer + Select Case cboComposer.Text.ToUpper.Trim + Case MyGlobals.COLLECTION_STRING.ToUpper, "" + objComposer = Nothing + Case Else + objComposer = CType(MyGlobals.GetItemFromHashWithStringKey(cboComposer.Text.ToUpper.Trim, m_objComposersHash), clsComposer) + If objComposer Is Nothing Then + objComposer = New clsComposer(cboComposer.Text.Trim) + lblnAddedComposer = True + End If + End Select + + Dim objInstrumentation As clsInstrumentation + Select Case cboInstrumentation.Text.ToUpper.Trim + Case "" + objInstrumentation = Nothing + Case Else + objInstrumentation = CType(MyGlobals.GetItemFromHashWithStringKey(cboInstrumentation.Text.ToUpper.Trim, m_objInstrumentationsHash), clsInstrumentation) + If objInstrumentation Is Nothing Then + objInstrumentation = New clsInstrumentation(cboInstrumentation.Text.Trim) + lblnAddedInstrumentation = True + End If + End Select + + Dim objPublisher As clsPublisher + Select Case cboPublisher.Text.ToUpper.Trim + Case MyGlobals.NONE_STRING.ToUpper, "" + objPublisher = Nothing + Case Else + objPublisher = CType(MyGlobals.GetItemFromHashWithStringKey(cboPublisher.Text.ToUpper.Trim, m_objPublishersHash), clsPublisher) + If objPublisher Is Nothing Then + objPublisher = New clsPublisher(cboPublisher.Text.Trim, MyGlobals.PUBLISHER_STREAMING_ALLOWED_UNKNOWN) + lblnAddedPublisher = True + End If + End Select + + mobjDetailBook.BookTitle = txtBookTitle.Text + mobjDetailBook.Composer = objComposer + mobjDetailBook.Instrumentation = objInstrumentation + mobjDetailBook.Publisher = objPublisher + + If Not mobjDetailBook.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailBook.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Add(ConvertBookToListViewItem(mobjDetailBook)) + + If lblnAddedComposer Then + AddComposerToForm(objComposer) + End If + + If lblnAddedInstrumentation Then + AddInstrumentationToForm(objInstrumentation) + End If + + If lblnAddedPublisher Then + AddPublisherToForm(objPublisher) + 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 ConvertBookToListViewItem(ByVal lobjBook As clsBook) As ListViewItem + Dim lobjItem As ListViewItem + If lobjBook.Composer Is Nothing Then + lobjItem = New ListViewItem(MyGlobals.COLLECTION_STRING) + Else + lobjItem = New ListViewItem(lobjBook.Composer.ComposerName) + End If + + lobjItem.SubItems.Add(lobjBook.BookTitle) + + If lobjBook.Publisher Is Nothing Then + lobjItem.SubItems.Add(MyGlobals.NONE_STRING) + Else + lobjItem.SubItems.Add(lobjBook.Publisher.PublisherName) + End If + + lobjItem.Tag = lobjBook + + Return lobjItem + + End Function + + Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lstrErrorString As String = "" + Dim lblnAddedComposer As Boolean + Dim lblnAddedInstrumentation As Boolean + Dim lblnAddedPublisher As Boolean + + lblnAddedComposer = False + lblnAddedInstrumentation = False + lblnAddedPublisher = False + + Dim objComposer As clsComposer + Select Case cboComposer.Text.ToUpper.Trim + Case MyGlobals.COLLECTION_STRING.ToUpper, "" + objComposer = Nothing + Case Else + objComposer = CType(MyGlobals.GetItemFromHashWithStringKey(cboComposer.Text.ToUpper.Trim, m_objComposersHash), clsComposer) + If objComposer Is Nothing Then + objComposer = New clsComposer(cboComposer.Text.Trim) + lblnAddedComposer = True + End If + End Select + + Dim objInstrumentation As clsInstrumentation + Select Case cboInstrumentation.Text.ToUpper.Trim + Case "" + objInstrumentation = Nothing + Case Else + objInstrumentation = CType(MyGlobals.GetItemFromHashWithStringKey(cboInstrumentation.Text.ToUpper.Trim, m_objInstrumentationsHash), clsInstrumentation) + If objInstrumentation Is Nothing Then + objInstrumentation = New clsInstrumentation(cboInstrumentation.Text.Trim) + lblnAddedInstrumentation = True + End If + End Select + + Dim objPublisher As clsPublisher + Select Case cboPublisher.Text.ToUpper.Trim + Case MyGlobals.NONE_STRING.ToUpper, "" + objPublisher = Nothing + Case Else + objPublisher = CType(MyGlobals.GetItemFromHashWithStringKey(cboPublisher.Text.ToUpper.Trim, m_objPublishersHash), clsPublisher) + If objPublisher Is Nothing Then + objPublisher = New clsPublisher(cboPublisher.Text.Trim, MyGlobals.PUBLISHER_STREAMING_ALLOWED_UNKNOWN) + lblnAddedPublisher = True + End If + End Select + + mobjDetailBook.BookTitle = txtBookTitle.Text + mobjDetailBook.Composer = objComposer + mobjDetailBook.Instrumentation = objInstrumentation + mobjDetailBook.Publisher = objPublisher + + If Not mobjDetailBook.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailBook.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Remove(lstvwExistingItem) + Me.ExistingObjectsListItems.Add(ConvertBookToListViewItem(mobjDetailBook)) + + If lblnAddedComposer Then + AddComposerToForm(objComposer) + End If + + If lblnAddedInstrumentation Then + AddInstrumentationToForm(objInstrumentation) + End If + + If lblnAddedPublisher Then + AddPublisherToForm(objPublisher) + End If + + Return True + End Function + + Private Sub txtBookTitle_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBookTitle.TextChanged + MyBase.DetailDataHasChanged() + End Sub + + Private Sub cboComposer_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboComposer.TextChanged + MyBase.DetailDataHasChanged() + End Sub + + Private Sub cboInstrumentation_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboInstrumentation.TextChanged + MyBase.DetailDataHasChanged() + End Sub + + Private Sub cboPublisher_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboPublisher.TextChanged + MyBase.DetailDataHasChanged() + End Sub + + Protected Sub AddComposerToForm(ByVal objComposer As clsComposer) + Me.cboComposer.Items.Add(objComposer.ComposerName) + m_objComposersHash.Add(objComposer.ComposerName.ToUpper, objComposer) + End Sub + + Protected Sub AddInstrumentationToForm(ByVal objInstrumentation As clsInstrumentation) + Me.cboInstrumentation.Items.Add(objInstrumentation.InstrumentationName) + m_objInstrumentationsHash.Add(objInstrumentation.InstrumentationName.ToUpper, objInstrumentation) + End Sub + + Protected Sub AddPublisherToForm(ByVal objPublisher As clsPublisher) + Me.cboPublisher.Items.Add(objPublisher.PublisherName) + m_objPublishersHash.Add(objPublisher.PublisherName.ToUpper, objPublisher) + End Sub + +End Class diff --git a/frmEditComposer.resx b/frmEditComposer.resx new file mode 100644 index 0000000..d80f77b --- /dev/null +++ b/frmEditComposer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditComposer.vb b/frmEditComposer.vb new file mode 100644 index 0000000..75a22e3 --- /dev/null +++ b/frmEditComposer.vb @@ -0,0 +1,250 @@ +Imports System.Windows.Forms + +Public Class frmEditComposer + Inherits BaseEditForm + + Private mobjDetailComposer As New clsComposer + +#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 lblComposerName As Windows.Forms.Label + Friend WithEvents txtComposerName As Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.lblComposerName = New Windows.Forms.Label + Me.txtComposerName = New Windows.Forms.TextBox + Me.fraAddEdit.SuspendLayout() + Me.SuspendLayout() + ' + 'fraAddEdit + ' + Me.fraAddEdit.Controls.Add(Me.txtComposerName) + Me.fraAddEdit.Controls.Add(Me.lblComposerName) + Me.fraAddEdit.Location = New System.Drawing.Point(8, 412) + Me.fraAddEdit.Size = New System.Drawing.Size(1072, 116) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblComposerName, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.txtComposerName, 0) + ' + 'lblComposerName + ' + Me.lblComposerName.Location = New System.Drawing.Point(16, 24) + Me.lblComposerName.Name = "lblComposerName" + Me.lblComposerName.Size = New System.Drawing.Size(96, 16) + Me.lblComposerName.TabIndex = 3 + Me.lblComposerName.Text = "Composer Name" + ' + 'txtComposerName + ' + Me.txtComposerName.Location = New System.Drawing.Point(112, 24) + Me.txtComposerName.Name = "txtComposerName" + Me.txtComposerName.Size = New System.Drawing.Size(448, 20) + Me.txtComposerName.TabIndex = 4 + ' + 'frmEditComposer + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1088, 534) + Me.Name = "frmEditComposer" + Me.StartPosition = Windows.Forms.FormStartPosition.Manual + Me.Text = "Edit Composer" + Me.fraAddEdit.ResumeLayout(False) + Me.fraAddEdit.PerformLayout() + Me.ResumeLayout(False) + + End Sub + +#End Region + + Protected Overrides Sub LoadExistingItemsList() + Dim lobjComposer As clsComposer + Dim lobjComposers As System.Collections.Generic.List(Of clsComposer) + + SetUpExistingItemsHeaders() + + lobjComposers = clsComposer.GetAllComposers + + Me.ExistingItemsListSuspendLayout() + + For Each lobjComposer In lobjComposers + Me.ExistingObjectsListItems.Add(ConvertComposerToListViewItem(lobjComposer)) + Next + + Me.ExistingItemsListResumeLayout() + End Sub + + Private Sub SetUpExistingItemsHeaders() + Me.ExistingObjectsListColumns.Add("Composer 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 + txtComposerName.MaxLength = MyGlobals.COMPOSER_NAME_SIZE + End Sub + + Protected Overrides Sub SetFocusToFirstDetailControlForEdit() + txtComposerName.Focus() + End Sub + + Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjSavedComposer As clsComposer + Dim lblnReturnValue As Boolean = False + + lobjSavedComposer = CType(lstvwExistingItem.Tag, clsComposer) + + mobjDetailComposer.ComposerName = txtComposerName.Text + + If lobjSavedComposer.StateIsIdentical(mobjDetailComposer) Then + Return False + Else + Return True + End If + End Function + + Protected Overrides Function DetailControlsHaveSignificantData() As Boolean + If txtComposerName.Text.Trim.Length > 0 Then + Return True + End If + + Return False + End Function + + Protected Overrides Sub EmptyOutDetailControls() + txtComposerName.Text = "" + mobjDetailComposer = New clsComposer + End Sub + + Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjComposer As clsComposer + Dim lblnReturnValue As Boolean = False + lobjComposer = CType(lstvwExistingItem.Tag, clsComposer) + txtComposerName.Text = lobjComposer.ComposerName + + mobjDetailComposer = CType(lobjComposer.Clone(), clsComposer) + Return True + End Function + + Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As Windows.Forms.ListViewItem) As Boolean + Dim lobjComposer As clsComposer + Dim lstrReferencedBy As String = "" + + lobjComposer = CType(lstvwItemToDelete.Tag, clsComposer) + + If Not lobjComposer.OKToDelete(lstrReferencedBy) Then + MessageBox.Show("Can't delete composer: " + lobjComposer.ComposerName + ". 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 composer: " + lobjComposer.ComposerName + "?", "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 lobjComposer As clsComposer + lobjComposer = CType(lstvwItemToDelete.Tag, clsComposer) + + Return lobjComposer.Delete() + End Function + + Protected Overrides Function SaveNewItem() As Boolean + Dim lstrErrorString As String = "" + + mobjDetailComposer.ComposerName = txtComposerName.Text + + If Not mobjDetailComposer.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailComposer.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Add(ConvertComposerToListViewItem(mobjDetailComposer)) + + 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 ConvertComposerToListViewItem(ByVal lobjComposer As clsComposer) As ListViewItem + Dim lobjItem As ListViewItem + lobjItem = New ListViewItem(lobjComposer.ComposerName) + 'lobjItem.SubItems.Add("Item1Col2") + 'lobjItem.SubItems.Add("Item1Col3") + lobjItem.Tag = lobjComposer + + Return lobjItem + + End Function + + Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lstrErrorString As String = "" + + mobjDetailComposer.ComposerName = txtComposerName.Text + + If Not mobjDetailComposer.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailComposer.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Remove(lstvwExistingItem) + Me.ExistingObjectsListItems.Add(ConvertComposerToListViewItem(mobjDetailComposer)) + + Return True + End Function + + Private Sub txtComposerName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtComposerName.TextChanged + MyBase.DetailDataHasChanged() + End Sub + +End Class \ No newline at end of file diff --git a/frmEditHymn.resx b/frmEditHymn.resx new file mode 100644 index 0000000..d80f77b --- /dev/null +++ b/frmEditHymn.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditHymn.vb b/frmEditHymn.vb new file mode 100644 index 0000000..4609f2a --- /dev/null +++ b/frmEditHymn.vb @@ -0,0 +1,481 @@ +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 diff --git a/frmEditHymnTuneName.resx b/frmEditHymnTuneName.resx new file mode 100644 index 0000000..d80f77b --- /dev/null +++ b/frmEditHymnTuneName.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditHymnTuneName.vb b/frmEditHymnTuneName.vb new file mode 100644 index 0000000..f373364 --- /dev/null +++ b/frmEditHymnTuneName.vb @@ -0,0 +1,354 @@ +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 \ No newline at end of file diff --git a/frmEditHymnal.resx b/frmEditHymnal.resx new file mode 100644 index 0000000..d80f77b --- /dev/null +++ b/frmEditHymnal.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditHymnal.vb b/frmEditHymnal.vb new file mode 100644 index 0000000..c4b378c --- /dev/null +++ b/frmEditHymnal.vb @@ -0,0 +1,286 @@ +Imports System.Windows.Forms + +Public Class frmEditHymnal + Inherits OrganLit.BaseEditForm + + Private mobjDetailHymnal As New clsHymnal + +#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 lblHymnalName As Windows.Forms.Label + Friend WithEvents txtHymnalName As Windows.Forms.TextBox + Friend WithEvents Label1 As Windows.Forms.Label + Friend WithEvents txtHymnalAbbreviation As Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.lblHymnalName = New Windows.Forms.Label + Me.txtHymnalName = New Windows.Forms.TextBox + Me.Label1 = New Windows.Forms.Label + Me.txtHymnalAbbreviation = New Windows.Forms.TextBox + Me.fraAddEdit.SuspendLayout() + Me.SuspendLayout() + ' + 'fraAddEdit + ' + Me.fraAddEdit.Controls.Add(Me.txtHymnalAbbreviation) + Me.fraAddEdit.Controls.Add(Me.Label1) + Me.fraAddEdit.Controls.Add(Me.txtHymnalName) + Me.fraAddEdit.Controls.Add(Me.lblHymnalName) + Me.fraAddEdit.Location = New System.Drawing.Point(10, 481) + Me.fraAddEdit.Size = New System.Drawing.Size(1064, 111) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblHymnalName, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.txtHymnalName, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.Label1, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.txtHymnalAbbreviation, 0) + ' + 'lblHymnalName + ' + Me.lblHymnalName.Location = New System.Drawing.Point(8, 24) + Me.lblHymnalName.Name = "lblHymnalName" + Me.lblHymnalName.Size = New System.Drawing.Size(80, 16) + Me.lblHymnalName.TabIndex = 3 + Me.lblHymnalName.Text = "Hymnal Name" + ' + 'txtHymnalName + ' + Me.txtHymnalName.Location = New System.Drawing.Point(128, 24) + Me.txtHymnalName.Name = "txtHymnalName" + Me.txtHymnalName.Size = New System.Drawing.Size(360, 20) + Me.txtHymnalName.TabIndex = 4 + ' + 'Label1 + ' + Me.Label1.Location = New System.Drawing.Point(8, 56) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(112, 16) + Me.Label1.TabIndex = 5 + Me.Label1.Text = "Hymnal Abbreviation" + ' + 'txtHymnalAbbreviation + ' + Me.txtHymnalAbbreviation.Location = New System.Drawing.Point(128, 56) + Me.txtHymnalAbbreviation.Name = "txtHymnalAbbreviation" + Me.txtHymnalAbbreviation.Size = New System.Drawing.Size(88, 20) + Me.txtHymnalAbbreviation.TabIndex = 6 + ' + 'frmEditHymnal + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1080, 598) + Me.Name = "frmEditHymnal" + Me.StartPosition = Windows.Forms.FormStartPosition.Manual + Me.Text = "Edit Hymnal" + Me.fraAddEdit.ResumeLayout(False) + Me.fraAddEdit.PerformLayout() + Me.ResumeLayout(False) + + End Sub + +#End Region + + Protected Overrides Sub LoadExistingItemsList() + Dim lobjHymnal As clsHymnal + Dim lcolHymnals As System.Collections.Generic.List(Of clsHymnal) + + SetUpExistingItemsHeaders() + + lcolHymnals = clsHymnal.GetAllHymnals + + Me.ExistingItemsListSuspendLayout() + + For Each lobjHymnal In lcolHymnals + Me.ExistingObjectsListItems.Add(ConvertHymnalToListViewItem(lobjHymnal)) + Next + + Me.ExistingItemsListResumeLayout() + + End Sub + + Private Sub SetUpExistingItemsHeaders() + Me.ExistingObjectsListColumns.Add("Hymnal Name", 400, HorizontalAlignment.Left) + Me.ExistingObjectsListColumns.Add("Hymnal Abbreviation", 150, HorizontalAlignment.Left) + 'Me.ExistingObjectsListColumns.Add("Column3", 200, HorizontalAlignment.Left) + + 'Set up sorting rules + Dim lobjBaseEditFormColumnSortRules(1) As clsGridColumnSortRule + lobjBaseEditFormColumnSortRules(0) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) + lobjBaseEditFormColumnSortRules(1) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) + MyBaseEditFormColumnSortRules = lobjBaseEditFormColumnSortRules + + End Sub + + Protected Overrides Sub InitializeDetailControls() + 'Load data to detail controls here at form load time + txtHymnalName.MaxLength = MyGlobals.HYMNAL_NAME_SIZE + txtHymnalAbbreviation.MaxLength = MyGlobals.HYMNAL_ABBREVIATION_SIZE + End Sub + + Protected Overrides Sub SetFocusToFirstDetailControlForEdit() + txtHymnalName.Focus() + End Sub + + Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjSavedHymnal As clsHymnal + + lobjSavedHymnal = CType(lstvwExistingItem.Tag, clsHymnal) + + mobjDetailHymnal.HymnalName = txtHymnalName.Text + mobjDetailHymnal.HymnalAbbreviation = txtHymnalAbbreviation.Text + + If lobjSavedHymnal.StateIsIdentical(mobjDetailHymnal) Then + Return False + Else + Return True + End If + End Function + + Protected Overrides Function DetailControlsHaveSignificantData() As Boolean + If txtHymnalName.Text.Trim.Length > 0 Then + Return True + End If + If txtHymnalAbbreviation.Text.Trim.Length > 0 Then + Return True + End If + + Return False + End Function + + Protected Overrides Sub EmptyOutDetailControls() + txtHymnalName.Text = "" + txtHymnalAbbreviation.Text = "" + mobjDetailHymnal = New clsHymnal + End Sub + + Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjHymnal As clsHymnal + Dim lblnReturnValue As Boolean = False + lobjHymnal = CType(lstvwExistingItem.Tag, clsHymnal) + txtHymnalName.Text = lobjHymnal.HymnalName + + mobjDetailHymnal = CType(lobjHymnal.Clone(), clsHymnal) + Return True + End Function + + Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As Windows.Forms.ListViewItem) As Boolean + Dim lobjHymnal As clsHymnal + Dim lstrReferencedBy As String = "" + + lobjHymnal = CType(lstvwItemToDelete.Tag, clsHymnal) + + If Not lobjHymnal.OKToDelete(lstrReferencedBy) Then + MessageBox.Show("Can't delete hymnal: " + lobjHymnal.HymnalName + ". 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 hymnal: " + lobjHymnal.HymnalName + "?", "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 lobjHymnal As clsHymnal + lobjHymnal = CType(lstvwItemToDelete.Tag, clsHymnal) + + Return lobjHymnal.Delete() + End Function + + Protected Overrides Function SaveNewItem() As Boolean + Dim lstrErrorString As String = "" + + mobjDetailHymnal.HymnalName = txtHymnalName.Text + mobjDetailHymnal.HymnalAbbreviation = txtHymnalAbbreviation.Text + + If Not mobjDetailHymnal.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailHymnal.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Add(ConvertHymnalToListViewItem(mobjDetailHymnal)) + + 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 ConvertHymnalToListViewItem(ByVal lobjHymnal As clsHymnal) As ListViewItem + Dim lobjItem As ListViewItem + lobjItem = New ListViewItem(lobjHymnal.HymnalName) + lobjItem.SubItems.Add(lobjHymnal.HymnalAbbreviation) + 'lobjItem.SubItems.Add("Item1Col3") + lobjItem.Tag = lobjHymnal + + Return lobjItem + + End Function + + Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lstrErrorString As String = "" + + mobjDetailHymnal.HymnalName = txtHymnalName.Text + mobjDetailHymnal.HymnalAbbreviation = txtHymnalAbbreviation.Text + + If Not mobjDetailHymnal.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailHymnal.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Remove(lstvwExistingItem) + Me.ExistingObjectsListItems.Add(ConvertHymnalToListViewItem(mobjDetailHymnal)) + + Return True + End Function + + Private Sub txtHymnalName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnalName.TextChanged + MyBase.DetailDataHasChanged() + End Sub + + Private Sub txtHymnalAbbreviation_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnalAbbreviation.TextChanged + MyBase.DetailDataHasChanged() + End Sub +End Class diff --git a/frmEditInstrumentation.resx b/frmEditInstrumentation.resx new file mode 100644 index 0000000..d80f77b --- /dev/null +++ b/frmEditInstrumentation.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditInstrumentation.vb b/frmEditInstrumentation.vb new file mode 100644 index 0000000..d4de6d4 --- /dev/null +++ b/frmEditInstrumentation.vb @@ -0,0 +1,251 @@ +Imports System.Windows.Forms + +Public Class frmEditInstrumentation + Inherits BaseEditForm + + Private mobjDetailInstrumentation As New clsInstrumentation + +#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 lblInstrumentationName As Windows.Forms.Label + Friend WithEvents txtInstrumentationName As Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.lblInstrumentationName = New Windows.Forms.Label + Me.txtInstrumentationName = New Windows.Forms.TextBox + Me.fraAddEdit.SuspendLayout() + Me.SuspendLayout() + ' + 'fraAddEdit + ' + Me.fraAddEdit.Controls.Add(Me.txtInstrumentationName) + Me.fraAddEdit.Controls.Add(Me.lblInstrumentationName) + Me.fraAddEdit.Location = New System.Drawing.Point(8, 417) + Me.fraAddEdit.Size = New System.Drawing.Size(1072, 111) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblInstrumentationName, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.txtInstrumentationName, 0) + ' + 'lblInstrumentationName + ' + Me.lblInstrumentationName.Location = New System.Drawing.Point(16, 24) + Me.lblInstrumentationName.Name = "lblInstrumentationName" + Me.lblInstrumentationName.Size = New System.Drawing.Size(96, 16) + Me.lblInstrumentationName.TabIndex = 3 + Me.lblInstrumentationName.Text = "Instrumentation" + ' + 'txtInstrumentationName + ' + Me.txtInstrumentationName.Location = New System.Drawing.Point(112, 24) + Me.txtInstrumentationName.Name = "txtInstrumentationName" + Me.txtInstrumentationName.Size = New System.Drawing.Size(448, 20) + Me.txtInstrumentationName.TabIndex = 4 + ' + 'frmEditInstrumentation + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1088, 534) + Me.Name = "frmEditInstrumentation" + Me.StartPosition = Windows.Forms.FormStartPosition.Manual + Me.Text = "Edit Instrumentation" + Me.fraAddEdit.ResumeLayout(False) + Me.fraAddEdit.PerformLayout() + Me.ResumeLayout(False) + + End Sub + +#End Region + + Protected Overrides Sub LoadExistingItemsList() + Dim lobjInstrumentation As clsInstrumentation + Dim lobjInstrumentations As System.Collections.Generic.List(Of clsInstrumentation) + + SetUpExistingItemsHeaders() + + lobjInstrumentations = clsInstrumentation.GetAllInstrumentations + + Me.ExistingItemsListSuspendLayout() + + For Each lobjInstrumentation In lobjInstrumentations + Me.ExistingObjectsListItems.Add(ConvertInstrumentationToListViewItem(lobjInstrumentation)) + Next + + Me.ExistingItemsListResumeLayout() + + End Sub + + Private Sub SetUpExistingItemsHeaders() + Me.ExistingObjectsListColumns.Add("Instrumentation 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 + txtInstrumentationName.MaxLength = MyGlobals.INSTRUMENTATION_NAME_SIZE + End Sub + + Protected Overrides Sub SetFocusToFirstDetailControlForEdit() + txtInstrumentationName.Focus() + End Sub + + Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjSavedInstrumentation As clsInstrumentation + Dim lblnReturnValue As Boolean = False + + lobjSavedInstrumentation = CType(lstvwExistingItem.Tag, clsInstrumentation) + + mobjDetailInstrumentation.InstrumentationName = txtInstrumentationName.Text + + If lobjSavedInstrumentation.StateIsIdentical(mobjDetailInstrumentation) Then + Return False + Else + Return True + End If + End Function + + Protected Overrides Function DetailControlsHaveSignificantData() As Boolean + If txtInstrumentationName.Text.Trim.Length > 0 Then + Return True + End If + + Return False + End Function + + Protected Overrides Sub EmptyOutDetailControls() + txtInstrumentationName.Text = "" + mobjDetailInstrumentation = New clsInstrumentation + End Sub + + Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lobjInstrumentation As clsInstrumentation + Dim lblnReturnValue As Boolean = False + lobjInstrumentation = CType(lstvwExistingItem.Tag, clsInstrumentation) + txtInstrumentationName.Text = lobjInstrumentation.InstrumentationName + + mobjDetailInstrumentation = CType(lobjInstrumentation.Clone(), clsInstrumentation) + Return True + End Function + + Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As Windows.Forms.ListViewItem) As Boolean + Dim lobjInstrumentation As clsInstrumentation + Dim lstrReferencedBy As String = "" + + lobjInstrumentation = CType(lstvwItemToDelete.Tag, clsInstrumentation) + + If Not lobjInstrumentation.OKToDelete(lstrReferencedBy) Then + MessageBox.Show("Can't delete Instrumentation: " + lobjInstrumentation.InstrumentationName + ". 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 Instrumentation: " + lobjInstrumentation.InstrumentationName + "?", "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 lobjInstrumentation As clsInstrumentation + lobjInstrumentation = CType(lstvwItemToDelete.Tag, clsInstrumentation) + + Return lobjInstrumentation.Delete() + End Function + + Protected Overrides Function SaveNewItem() As Boolean + Dim lstrErrorString As String = "" + + mobjDetailInstrumentation.InstrumentationName = txtInstrumentationName.Text + + If Not mobjDetailInstrumentation.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailInstrumentation.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Add(ConvertInstrumentationToListViewItem(mobjDetailInstrumentation)) + + 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 ConvertInstrumentationToListViewItem(ByVal lobjInstrumentation As clsInstrumentation) As ListViewItem + Dim lobjItem As ListViewItem + lobjItem = New ListViewItem(lobjInstrumentation.InstrumentationName) + 'lobjItem.SubItems.Add("Item1Col2") + 'lobjItem.SubItems.Add("Item1Col3") + lobjItem.Tag = lobjInstrumentation + + Return lobjItem + + End Function + + Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As Windows.Forms.ListViewItem) As Boolean + Dim lstrErrorString As String = "" + + mobjDetailInstrumentation.InstrumentationName = txtInstrumentationName.Text + + If Not mobjDetailInstrumentation.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailInstrumentation.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Remove(lstvwExistingItem) + Me.ExistingObjectsListItems.Add(ConvertInstrumentationToListViewItem(mobjDetailInstrumentation)) + + Return True + End Function + + Private Sub txtInstrumentationName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInstrumentationName.TextChanged + MyBase.DetailDataHasChanged() + End Sub + +End Class \ No newline at end of file diff --git a/frmEditPublisher.resx b/frmEditPublisher.resx new file mode 100644 index 0000000..7c5f1a9 --- /dev/null +++ b/frmEditPublisher.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditPublisher.vb b/frmEditPublisher.vb new file mode 100644 index 0000000..f4155d2 --- /dev/null +++ b/frmEditPublisher.vb @@ -0,0 +1,302 @@ +Imports System.Windows.Forms + +Public Class frmEditPublisher + Inherits BaseEditForm + + Private mobjDetailPublisher As New clsPublisher + +#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 lblPublisherName As Windows.Forms.Label + Friend WithEvents cboStreamingAllowed As ComboBox + Friend WithEvents lblPublisherStreamingAllowed As Label + Friend WithEvents txtPublisherName As Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.lblPublisherName = New System.Windows.Forms.Label() + Me.txtPublisherName = New System.Windows.Forms.TextBox() + Me.lblPublisherStreamingAllowed = New System.Windows.Forms.Label() + Me.cboStreamingAllowed = New System.Windows.Forms.ComboBox() + Me.fraAddEdit.SuspendLayout() + Me.SuspendLayout() + ' + 'fraAddEdit + ' + Me.fraAddEdit.Controls.Add(Me.cboStreamingAllowed) + Me.fraAddEdit.Controls.Add(Me.lblPublisherStreamingAllowed) + Me.fraAddEdit.Controls.Add(Me.txtPublisherName) + Me.fraAddEdit.Controls.Add(Me.lblPublisherName) + + Me.fraAddEdit.Location = New System.Drawing.Point(8, 412) + Me.fraAddEdit.Size = New System.Drawing.Size(1072, 116) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblPublisherName, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.txtPublisherName, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.lblPublisherStreamingAllowed, 0) + Me.fraAddEdit.Controls.SetChildIndex(Me.cboStreamingAllowed, 0) + ' + 'lblPublisherName + ' + Me.lblPublisherName.Location = New System.Drawing.Point(16, 24) + Me.lblPublisherName.Name = "lblPublisherName" + Me.lblPublisherName.Size = New System.Drawing.Size(96, 16) + Me.lblPublisherName.TabIndex = 3 + Me.lblPublisherName.Text = "Publisher Name" + ' + 'txtPublisherName + ' + Me.txtPublisherName.Location = New System.Drawing.Point(135, 24) + Me.txtPublisherName.Name = "txtPublisherName" + Me.txtPublisherName.Size = New System.Drawing.Size(448, 20) + Me.txtPublisherName.TabIndex = 4 + ' + 'lblPublisherStreamingAllowed + ' + Me.lblPublisherStreamingAllowed.Location = New System.Drawing.Point(16, 46) + Me.lblPublisherStreamingAllowed.Name = "lblPublisherStreamingAllowed" + Me.lblPublisherStreamingAllowed.Size = New System.Drawing.Size(130, 16) + Me.lblPublisherStreamingAllowed.TabIndex = 5 + Me.lblPublisherStreamingAllowed.Text = "Publisher Streaming Allowed" + ' + 'cboPublisherStreamingAllowed + ' + Me.cboStreamingAllowed.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboStreamingAllowed.FormattingEnabled = True + Me.cboStreamingAllowed.Location = New System.Drawing.Point(135, 46) + Me.cboStreamingAllowed.Name = "cboStreamingAllowed" + Me.cboStreamingAllowed.Size = New System.Drawing.Size(120, 16) + Me.cboStreamingAllowed.TabIndex = 6 + ' + 'frmEditComposer + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(1088, 534) + Me.Name = "frmEditComposer" + Me.StartPosition = Windows.Forms.FormStartPosition.Manual + Me.Text = "Edit Composer" + Me.fraAddEdit.ResumeLayout(False) + Me.fraAddEdit.PerformLayout() + Me.ResumeLayout(False) + + End Sub + +#End Region + + Protected Overrides Sub LoadExistingItemsList() + Dim lobjPublisher As clsPublisher + Dim lobjPublishers As System.Collections.Generic.List(Of clsPublisher) + + SetUpExistingItemsHeaders() + + lobjPublishers = clsPublisher.GetAllPublishers + + Me.ExistingItemsListSuspendLayout() + + For Each lobjPublisher In lobjPublishers + Me.ExistingObjectsListItems.Add(ConvertPublisherToListViewItem(lobjPublisher)) + Next + + Me.ExistingItemsListResumeLayout() + + End Sub + + Private Sub SetUpExistingItemsHeaders() + Me.ExistingObjectsListColumns.Add("Publisher 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 + txtPublisherName.MaxLength = MyGlobals.PUBLISHER_NAME_SIZE + + cboStreamingAllowed.Items.Clear() + cboStreamingAllowed.Items.Add(MyGlobals.PUBLISHER_STREAMING_ALLOWED_UNKNOWN) + cboStreamingAllowed.Items.Add("No") + cboStreamingAllowed.Items.Add("Yes") + cboStreamingAllowed.SelectedIndex = 0 + + End Sub + + Protected Overrides Sub SetFocusToFirstDetailControlForEdit() + txtPublisherName.Focus() + End Sub + + Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean + Dim lobjSavedPublisher As clsPublisher + Dim lblnReturnValue As Boolean = False + + lobjSavedPublisher = CType(lstvwExistingItem.Tag, clsPublisher) + + mobjDetailPublisher.PublisherName = txtPublisherName.Text + mobjDetailPublisher.PublisherStreamingAllowed = cboStreamingAllowed.SelectedItem.ToString() + + If lobjSavedPublisher.StateIsIdentical(mobjDetailPublisher) Then + Return False + Else + Return True + End If + End Function + + Protected Overrides Function DetailControlsHaveSignificantData() As Boolean + If txtPublisherName.Text.Trim.Length > 0 Then + Return True + End If + + Return False + End Function + + Protected Overrides Sub EmptyOutDetailControls() + txtPublisherName.Text = String.Empty + cboStreamingAllowed.SelectedIndex = 0 + mobjDetailPublisher = New clsPublisher + End Sub + + Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean + Dim lobjPublisher As clsPublisher + Dim lblnReturnValue As Boolean = False + lobjPublisher = CType(lstvwExistingItem.Tag, clsPublisher) + txtPublisherName.Text = lobjPublisher.PublisherName + + Dim intSelectedIndex As Int32 = 0 + Dim intIndex As Int32 + For intIndex = 0 To cboStreamingAllowed.Items.Count + If String.Compare(cboStreamingAllowed.Items(intIndex).ToString, lobjPublisher.PublisherStreamingAllowed, True) = 0 Then + intSelectedIndex = intIndex + Exit For + End If + Next + + cboStreamingAllowed.SelectedIndex = intSelectedIndex + + mobjDetailPublisher = CType(lobjPublisher.Clone(), clsPublisher) + Return True + End Function + + Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As System.Windows.Forms.ListViewItem) As Boolean + Dim lobjPublisher As clsPublisher + Dim lstrReferencedBy As String = "" + + lobjPublisher = CType(lstvwItemToDelete.Tag, clsPublisher) + + If Not lobjPublisher.OKToDelete(lstrReferencedBy) Then + MessageBox.Show("Can't delete publisher: " + lobjPublisher.PublisherName + ". 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 publisher: " + lobjPublisher.PublisherName + "?", "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 System.Windows.Forms.ListViewItem) As Boolean + Dim lobjPublisher As clsPublisher + lobjPublisher = CType(lstvwItemToDelete.Tag, clsPublisher) + + Return lobjPublisher.Delete() + End Function + + Protected Overrides Function SaveNewItem() As Boolean + Dim lstrErrorString As String = "" + + mobjDetailPublisher.PublisherName = txtPublisherName.Text + mobjDetailPublisher.PublisherStreamingAllowed = cboStreamingAllowed.SelectedItem.ToString + + If Not mobjDetailPublisher.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailPublisher.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Add(ConvertPublisherToListViewItem(mobjDetailPublisher)) + + 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 ConvertPublisherToListViewItem(ByVal lobjPublisher As clsPublisher) As ListViewItem + Dim lobjItem As ListViewItem + lobjItem = New ListViewItem(lobjPublisher.PublisherName) + 'lobjItem.SubItems.Add("Item1Col2") + 'lobjItem.SubItems.Add("Item1Col3") + lobjItem.Tag = lobjPublisher + + Return lobjItem + + End Function + + Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean + Dim lstrErrorString As String = "" + + mobjDetailPublisher.PublisherName = txtPublisherName.Text + mobjDetailPublisher.PublisherStreamingAllowed = cboStreamingAllowed.SelectedItem.ToString + + If Not mobjDetailPublisher.Validate(lstrErrorString) Then + MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + End If + + If Not mobjDetailPublisher.Save() Then + Return False + End If + + Me.ExistingObjectsListItems.Remove(lstvwExistingItem) + Me.ExistingObjectsListItems.Add(ConvertPublisherToListViewItem(mobjDetailPublisher)) + + Return True + End Function + + Private Sub txtPublisherName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPublisherName.TextChanged + MyBase.DetailDataHasChanged() + End Sub + + Private Sub cboStreamingAllowed_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboStreamingAllowed.SelectedIndexChanged + MyBase.DetailDataHasChanged() + End Sub + +End Class \ No newline at end of file diff --git a/frmEditWork.resx b/frmEditWork.resx new file mode 100644 index 0000000..c70fcef --- /dev/null +++ b/frmEditWork.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/frmEditWork.vb b/frmEditWork.vb new file mode 100644 index 0000000..4dee3ee --- /dev/null +++ b/frmEditWork.vb @@ -0,0 +1,779 @@ +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 diff --git a/frmMain.resx b/frmMain.resx new file mode 100644 index 0000000..8fcf105 --- /dev/null +++ b/frmMain.resx @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8A7gDu4A7uAO7gDu4A7uAO7uD4Dg+A4PgOD4Dg+A4PgO4P+HD/hw/4cP+HD/hw/4cODwBw8AcP + AHDwBw8AcPAHDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4 + cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/ + hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+H + D/hw/4cOD/hw/4cP+HD/hw/4cP+HDg/4cP+HD/hw/4cP+HD/hw4P+HD/hw/4cP+HD/hw/4cOD/hw/4cP + +HD/hw/4cP+HDg8AcP+HD/hw/4cP+HDwBw7g/wD/hw/4cP+HD/hwD/Du4P8A8AcP+HD/hw8AcA/w7u4A + 7g/wD/hw/4cA/w7gDu7u7u4P8A8AcPAHAP8O7u7u6Znp4A7g/w4P8O4A7u7u7umZ7u7u4P8OD/Du7u6Z + nu7u6e7umZ4A6eAO6ZnumZ7u7unu7pme7unu7umZ7u6e7u7p7u7unu7p7u7u6e7unu7u6e7u7p7u6e7u + 7unu7p7u7u7u7u6enumZ7u7p7pme7u7u7u7ume7pme7u6Znu7u4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/frmMain.vb b/frmMain.vb new file mode 100644 index 0000000..8c291ff --- /dev/null +++ b/frmMain.vb @@ -0,0 +1,351 @@ +Imports System.Windows.Forms + +Public Class frmMain + Inherits Windows.Forms.Form + + Private m_frmEditComposer As frmEditComposer + Private m_frmEditInstrumentation As frmEditInstrumentation + Private m_frmEditPublisher As frmEditPublisher + Private m_frmEditHymnal As frmEditHymnal + Private m_frmEditBook As frmEditBook + Private m_frmEditHymnTuneName As frmEditHymnTuneName + Private m_frmEditHymn As frmEditHymn + Friend WithEvents mnuEditInstrumentations As Windows.Forms.ToolStripMenuItem + Friend WithEvents MenuItem1 As Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator2 As ToolStripSeparator + Private m_frmEditWork As frmEditWork + +#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 MenuStrip1 As Windows.Forms.MenuStrip + Friend WithEvents mnuFile As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuFileExit As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEdit As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditComposer As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditPublisher As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditHymnal As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditBook As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditHymnTuneNames As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditHymn As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuEditWork As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuGenerate As Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuGenerateWebSite As Windows.Forms.ToolStripMenuItem + + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) + Me.MenuStrip1 = New System.Windows.Forms.MenuStrip() + Me.mnuFile = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFileExit = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEdit = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditBook = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditHymn = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditHymnTuneNames = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditHymnal = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditWork = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditComposer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditInstrumentations = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuEditPublisher = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuGenerate = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuGenerateWebSite = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() + Me.MenuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'MenuStrip1 + ' + Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuFile, Me.mnuEdit, Me.mnuGenerate}) + Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip1.Name = "MenuStrip1" + Me.MenuStrip1.TabIndex = 1 + ' + 'mnuFile + ' + Me.mnuFile.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuFileExit}) + Me.mnuFile.Name = "mnuFile" + Me.mnuFile.Text = "&File" + ' + 'mnuFileExit + ' + Me.mnuFileExit.Name = "mnuFileExit" + Me.mnuFileExit.Size = New System.Drawing.Size(180, 22) + Me.mnuFileExit.Text = "E&xit" + ' + 'mnuEdit + ' + Me.mnuEdit.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuEditBook, Me.mnuEditHymn, Me.mnuEditHymnTuneNames, Me.mnuEditHymnal, Me.mnuEditWork, Me.ToolStripSeparator2, Me.mnuEditComposer, Me.mnuEditInstrumentations, Me.mnuEditPublisher}) + Me.mnuEdit.Name = "mnuEdit" + Me.mnuEdit.Size = New System.Drawing.Size(39, 20) + Me.mnuEdit.Text = "&Edit" + ' + 'mnuEditBook + ' + Me.mnuEditBook.Name = "mnuEditBook" + Me.mnuEditBook.Size = New System.Drawing.Size(185, 22) + Me.mnuEditBook.Text = "Books..." + ' + 'mnuEditHymn + ' + Me.mnuEditHymn.Name = "mnuEditHymn" + Me.mnuEditHymn.Size = New System.Drawing.Size(185, 22) + Me.mnuEditHymn.Text = "Hymns..." + ' + 'mnuEditHymnTuneNames + ' + Me.mnuEditHymnTuneNames.Name = "mnuEditHymnTuneNames" + Me.mnuEditHymnTuneNames.Size = New System.Drawing.Size(185, 22) + Me.mnuEditHymnTuneNames.Text = "Hymn Tune Names..." + ' + 'mnuEditHymnal + ' + Me.mnuEditHymnal.Name = "mnuEditHymnal" + Me.mnuEditHymnal.Size = New System.Drawing.Size(185, 22) + Me.mnuEditHymnal.Text = "Hymnals..." + ' + 'mnuEditWork + ' + Me.mnuEditWork.Name = "mnuEditWork" + Me.mnuEditWork.Size = New System.Drawing.Size(185, 22) + Me.mnuEditWork.Text = "Works..." + ' + 'mnuEditComposer + ' + Me.mnuEditComposer.Name = "mnuEditComposer" + Me.mnuEditComposer.Size = New System.Drawing.Size(185, 22) + Me.mnuEditComposer.Text = "&Composers..." + ' + 'mnuEditInstrumentations + ' + Me.mnuEditInstrumentations.Name = "mnuEditInstrumentations" + Me.mnuEditInstrumentations.Size = New System.Drawing.Size(185, 22) + Me.mnuEditInstrumentations.Text = "Instrumentations..." + ' + 'mnuEditPublisher + ' + Me.mnuEditPublisher.Name = "mnuEditPublisher" + Me.mnuEditPublisher.Size = New System.Drawing.Size(185, 22) + Me.mnuEditPublisher.Text = "Publishers..." + ' + 'mnuGenerate + ' + Me.mnuGenerate.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuGenerateWebSite}) + Me.mnuGenerate.Name = "mnuGenerate" + Me.mnuGenerate.Size = New System.Drawing.Size(66, 20) + Me.mnuGenerate.Text = "&Generate" + ' + 'mnuGenerateWebSite + ' + Me.mnuGenerateWebSite.Name = "mnuGenerateWebSite" + Me.mnuGenerateWebSite.Size = New System.Drawing.Size(180, 22) + Me.mnuGenerateWebSite.Text = "&Web Site" + ' + 'ToolStripSeparator2 + ' + Me.ToolStripSeparator2.Name = "ToolStripSeparator2" + Me.ToolStripSeparator2.Size = New System.Drawing.Size(182, 6) + ' + 'frmMain + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 16) + Me.ClientSize = New System.Drawing.Size(960, 574) + Me.Controls.Add(Me.MenuStrip1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.IsMdiContainer = True + Me.MainMenuStrip = Me.MenuStrip1 + Me.Name = "frmMain" + Me.Text = "OrganLit" + Me.WindowState = System.Windows.Forms.FormWindowState.Maximized + Me.MenuStrip1.ResumeLayout(False) + Me.MenuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + +#End Region + + Private Function OpenDatabaseConnection() As Boolean + Try + MyGlobals.g_objDatabaseLayer = New clsDatabaseLayer + Return MyGlobals.g_objDatabaseLayer.OpenDatabaseConnection() + Catch + Return False + End Try + End Function + + Private Function CloseDatabaseConnection() As Boolean + Try + Return MyGlobals.g_objDatabaseLayer.CloseDatabaseConnection() + Catch + Return False + End Try + End Function + + Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not OpenDatabaseConnection() Then + MessageBox.Show("Error connecting to database", "Database error", MessageBoxButtons.OK, MessageBoxIcon.Error) + Me.Close() + End If + + End Sub + + Public Sub DisableMenus() + mnuFile.Enabled = False + mnuEdit.Enabled = False + End Sub + + Public Sub EnableMenus() + mnuFile.Enabled = True + mnuEdit.Enabled = True + End Sub + + Private Sub mnuEditComposer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditComposer.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + m_frmEditComposer = New frmEditComposer + m_frmEditComposer.MdiParent = Me + m_frmEditComposer.Show() + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditPublisher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditPublisher.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + If m_frmEditPublisher Is Nothing OrElse m_frmEditPublisher.IsDisposed Then + m_frmEditPublisher = New frmEditPublisher + m_frmEditPublisher.MdiParent = Me + m_frmEditPublisher.Show() + Else + m_frmEditPublisher.Activate() + End If + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditHymnal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditHymnal.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + If m_frmEditHymnal Is Nothing OrElse m_frmEditHymnal.IsDisposed Then + m_frmEditHymnal = New frmEditHymnal + m_frmEditHymnal.MdiParent = Me + m_frmEditHymnal.Show() + Else + m_frmEditHymnal.Activate() + End If + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditBook_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditBook.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + If m_frmEditBook Is Nothing OrElse m_frmEditBook.IsDisposed Then + m_frmEditBook = New frmEditBook + m_frmEditBook.MdiParent = Me + m_frmEditBook.Show() + Else + m_frmEditBook.Activate() + End If + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditHymnTuneNames_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditHymnTuneNames.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + If m_frmEditHymnTuneName Is Nothing OrElse m_frmEditHymnTuneName.IsDisposed Then + m_frmEditHymnTuneName = New frmEditHymnTuneName + m_frmEditHymnTuneName.MdiParent = Me + m_frmEditHymnTuneName.Show() + Else + m_frmEditHymnTuneName.Activate() + End If + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditHymn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditHymn.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + If m_frmEditHymn Is Nothing OrElse m_frmEditHymn.IsDisposed Then + m_frmEditHymn = New frmEditHymn + m_frmEditHymn.MdiParent = Me + m_frmEditHymn.Show() + Else + m_frmEditHymn.Activate() + End If + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditWork_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditWork.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + If m_frmEditWork Is Nothing OrElse m_frmEditWork.IsDisposed Then + m_frmEditWork = New frmEditWork + m_frmEditWork.MdiParent = Me + m_frmEditWork.Show() + Else + m_frmEditWork.Activate() + End If + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuFileExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileExit.Click + Me.Close() + End Sub + + Private Sub mnuGenerateWebSite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuGenerateWebSite.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + modGenerateWebSite.GenerateWebSite() + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub mnuEditInstrumentations_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditInstrumentations.Click + Me.Cursor = Windows.Forms.Cursors.WaitCursor + CloseAllEditWindows() + m_frmEditInstrumentation = New frmEditInstrumentation + m_frmEditInstrumentation.MdiParent = Me + m_frmEditInstrumentation.Show() + Me.Cursor = Windows.Forms.Cursors.Default + End Sub + + Private Sub CloseAllEditWindows() + CloseWindow(m_frmEditBook) + CloseWindow(m_frmEditComposer) + CloseWindow(m_frmEditHymn) + CloseWindow(m_frmEditHymnal) + CloseWindow(m_frmEditHymnTuneName) + CloseWindow(m_frmEditInstrumentation) + CloseWindow(m_frmEditPublisher) + CloseWindow(m_frmEditWork) + End Sub + + Private Sub CloseWindow(ByVal objWindow As Windows.Forms.Form) + If objWindow Is Nothing OrElse objWindow.IsDisposed Then + Else + objWindow.Close() + End If + End Sub +End Class diff --git a/index.htm b/index.htm new file mode 100644 index 0000000..a9c1c1c --- /dev/null +++ b/index.htm @@ -0,0 +1,14 @@ + + + Organ Literature Index + + + +

Organ Literature Index

+

Index by Hymn

+

Index by Hymn Tune Name

+

Organ Works Not Based on Hymn Tunes

+

Index by Composer

+

Index by Book

+ + diff --git a/log.txt b/log.txt new file mode 100644 index 0000000..02669a5 --- /dev/null +++ b/log.txt @@ -0,0 +1,12 @@ +2021-08-08 13:59:13.435 -05:00 [INF] Loaded 5 extensions +2021-08-08 13:59:14.125 -05:00 [INF] MSBuild registered from C:\Program Files\dotnet\sdk\5.0.302\ +2021-08-08 13:59:14.798 -05:00 [INF] Found Visual Studio v16.10.31410.357 [C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional] +2021-08-08 13:59:17.893 -05:00 [INF] Initializing upgrade step Select an entrypoint +2021-08-08 13:59:17.903 -05:00 [INF] Setting entrypoint to only project in solution: Z:\VBDOTNETPROJECTS\OrganLit\OrganLit.vbproj +2021-08-08 13:59:17.973 -05:00 [INF] Recommending Windows TFM net5.0-windows because the project either has Windows-specific dependencies or builds to a WinExe +2021-08-08 13:59:18.004 -05:00 [INF] Initializing upgrade step Finalize upgrade +2021-08-08 13:59:18.055 -05:00 [INF] Recommending Windows TFM net5.0-windows because the project either has Windows-specific dependencies or builds to a WinExe +2021-08-08 13:59:31.830 -05:00 [INF] Applying upgrade step Finalize upgrade +2021-08-08 13:59:31.837 -05:00 [INF] Upgrade step Finalize upgrade applied successfully +2021-08-08 13:59:37.577 -05:00 [INF] Upgrade has completed. Please review any changes. +2021-08-08 13:59:37.590 -05:00 [INF] No state to save diff --git a/modGenerateWebSite.vb b/modGenerateWebSite.vb new file mode 100644 index 0000000..2cbed6a --- /dev/null +++ b/modGenerateWebSite.vb @@ -0,0 +1,1025 @@ +Imports System.Data +Imports System.IO +Imports System.Windows.Forms +Imports System.Xml +Imports System.Xml.Xsl + +Module modGenerateWebSite + 'Private Const cstrOrganLitWebPath As String = "F:\Data\Shared\JREUSS Web page\OrganLit\" + 'Private Const cstrXSLPath As String = "F:\VBDOTNETPROJECTS\OrganLit\" + Private Const cstrOrganLitWebPath As String = "Z:\REUSS Web page\organlit\" + Private Const cstrXSLPath As String = "Z:\VBDOTNETPROJECTS\OrganLit\" + + Public Sub GenerateWebSite() + Try + MyGlobals.FlushCachedObjects() + Dim lstrOrganLitWebPath As String + lstrOrganLitWebPath = cstrOrganLitWebPath + + Dim lstrXMLFileName As String + lstrXMLFileName = lstrOrganLitWebPath & "OrganLit.xml" + + Dim lstrXSLPath As String + lstrXSLPath = cstrXSLPath + + GenerateXML(lstrXMLFileName) + GenerateHymnTuneBasedPage(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateNonHymnTuneBasedPage(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateComposerPage(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateBookPage(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateHymnTuneNameIndex(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateHymnIndex(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateBookIndex(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateComposerIndex(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + GenerateRootIndex(lstrOrganLitWebPath, lstrXSLPath, lstrXMLFileName) + File.Delete(lstrXMLFileName) + + MyGlobals.FlushCachedObjects() + + MessageBox.Show("Done") + + Catch ex As Exception + MessageBox.Show("Error in GenerateWebSite:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXML(ByVal lstrXMLFileName As String) + Try + Dim objXMLWriter As New XmlTextWriter(lstrXMLFileName, System.Text.Encoding.UTF8) + objXMLWriter.Formatting = Formatting.Indented + + objXMLWriter.WriteStartDocument() + objXMLWriter.WriteStartElement("OrganLit") + + GenerateXMLForHymnTunes(objXMLWriter) + GenerateXMLForHymnTuneNames(objXMLWriter) + GenerateXMLForComposers(objXMLWriter) + GenerateXMLForInstrumentations(objXMLWriter) + GenerateXMLForPublishers(objXMLWriter) + GenerateXMLForHymnals(objXMLWriter) + GenerateXMLForHymns(objXMLWriter) + GenerateXMLForBooks(objXMLWriter) + GenerateXMLForWorks(objXMLWriter) + + objXMLWriter.WriteEndElement() + objXMLWriter.WriteEndDocument() + + objXMLWriter.Close() + + Catch ex As Exception + MessageBox.Show("Error in GenerateWebSite:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForHymnTunes(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lintTuneCountOnPage As Integer + Dim lintPageCount As Integer + + Dim ldbcmdHymnTuneCommand As New SqlClient.SqlCommand + + ldbcmdHymnTuneCommand.CommandText = "sel_hymn_tune_all" + + ldbcmdHymnTuneCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsHymnTunes As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdHymnTuneCommand) + + Dim ldbrwHymnTune As DataRow + + lintTuneCountOnPage = 0 + + lintPageCount = 0 + + objXMLWriter.WriteStartElement("HymnTunes") + + For Each ldbrwHymnTune In ldbdsHymnTunes.Tables(0).Rows + + lintTuneCountOnPage = lintTuneCountOnPage + 1 + + If lintTuneCountOnPage = 1 Then + lintPageCount = lintPageCount + 1 + End If + + Dim strHymnTuneBookmark As String = "Tune" & lintTuneCountOnPage + + Dim ldbcmdHymnTuneNameCommand As New SqlClient.SqlCommand + + objXMLWriter.WriteStartElement("HymnTune") + + objXMLWriter.WriteElementString("HymnTuneID", CType(ldbrwHymnTune.Item("hymn_tune_id"), Guid).ToString) + objXMLWriter.WriteElementString("WebPageNumber", CType(lintPageCount, String)) + objXMLWriter.WriteElementString("WebPageBookmark", CType(lintTuneCountOnPage, String)) + + objXMLWriter.WriteEndElement() + + 'If lintTuneCountOnPage = 50 Then + ' lintTuneCountOnPage = 0 + 'End If + Next + + ldbdsHymnTunes.Clear() + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForHymnTunes:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForHymnTuneNames(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjHymnTuneNameCollection As System.Collections.Generic.List(Of clsHymnTuneName) = clsHymnTuneName.GetAllHymnTuneNames + Dim lobjHymnTuneName As clsHymnTuneName + + objXMLWriter.WriteStartElement("HymnTuneNames") + + For Each lobjHymnTuneName In lobjHymnTuneNameCollection + lobjHymnTuneName.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForHymnTuneNames:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForComposers(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjComposerCollection As System.Collections.Generic.List(Of clsComposer) = clsComposer.GetAllComposers + Dim lobjComposer As clsComposer + + objXMLWriter.WriteStartElement("Composers") + + For Each lobjComposer In lobjComposerCollection + lobjComposer.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForComposers:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForInstrumentations(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjInstrumentationCollection As System.Collections.Generic.List(Of clsInstrumentation) = clsInstrumentation.GetAllInstrumentations + Dim lobjInstrumentation As clsInstrumentation + + objXMLWriter.WriteStartElement("Instrumentations") + + For Each lobjInstrumentation In lobjInstrumentationCollection + lobjInstrumentation.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForInstrumentations:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForPublishers(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjPublisherCollection As System.Collections.Generic.List(Of clsPublisher) = clsPublisher.GetAllPublishers + Dim lobjPublisher As clsPublisher + + objXMLWriter.WriteStartElement("Publishers") + + For Each lobjPublisher In lobjPublisherCollection + lobjPublisher.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForPublishers:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForHymnals(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjHymnalCollection As System.Collections.Generic.List(Of clsHymnal) = clsHymnal.GetAllHymnals + Dim lobjHymnal As clsHymnal + + objXMLWriter.WriteStartElement("Hymnals") + + For Each lobjHymnal In lobjHymnalCollection + lobjHymnal.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForHymnals:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForHymns(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjHymnCollection As System.Collections.Generic.List(Of clsHymn) = clsHymn.GetAllHymns + Dim lobjHymn As clsHymn + + objXMLWriter.WriteStartElement("Hymns") + + For Each lobjHymn In lobjHymnCollection + lobjHymn.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForHymns:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForBooks(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjBookCollection As System.Collections.Generic.List(Of clsBook) = clsBook.GetAllBooks + Dim lobjBook As clsBook + + objXMLWriter.WriteStartElement("Books") + + For Each lobjBook In lobjBookCollection + lobjBook.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForBooks:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateXMLForWorks(ByRef objXMLWriter As XmlTextWriter) + Try + Dim lobjWorkCollection As System.Collections.Generic.List(Of clsWork) = clsWork.GetAllWorks + Dim lobjWork As clsWork + + objXMLWriter.WriteStartElement("Works") + + For Each lobjWork In lobjWorkCollection + lobjWork.WriteXML(objXMLWriter) + Next + + objXMLWriter.WriteEndElement() + + Catch ex As Exception + MessageBox.Show("Error in GenerateXMLForWorks:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateHymnTuneBasedPage(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim ldbcmdHymnTuneCommand As New SqlClient.SqlCommand + + ldbcmdHymnTuneCommand.CommandText = "sel_hymn_tune_name_distinct_id" + + ldbcmdHymnTuneCommand.CommandType = CommandType.StoredProcedure + Dim ldbdsHymnTunes As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdHymnTuneCommand) + + Dim ldbrwHymnTune As DataRow + + For Each ldbrwHymnTune In ldbdsHymnTunes.Tables(0).Rows + + Dim strHymnTuneID As String + strHymnTuneID = CType(ldbrwHymnTune.Item("hymn_tune_id"), Guid).ToString + + Dim strHymnTuneBookmark As String = "Tune" & strHymnTuneID + + Dim ldbcmdHymnTuneNameCommand As New SqlClient.SqlCommand + + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitHymnTuneBasedByTune.xsl") + Dim objArgList As New System.Xml.Xsl.XsltArgumentList + objArgList.AddParam("HymnTuneID", "", strHymnTuneID) + Dim objTextWriter As New System.IO.FileStream(lstrOrganLitWebPath & GeneratePageNameForHymnTune(strHymnTuneID), FileMode.Create) + + xslt.Transform(lstrXMLFileName, objArgList, objTextWriter) + objTextWriter.Close() + objTextWriter.Dispose() + objTextWriter = Nothing + + Next + + ldbdsHymnTunes.Clear() + + + Catch ex As XsltException + MessageBox.Show("Error in GenerateHymnTuneBasedPage:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateHymnTuneBasedPage:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Function GeneratePageNameForHymnTune(ByVal strHymnTuneID As String) As String + Return "hymntuneworks-" + strHymnTuneID + ".htm" + End Function + + Private Sub GenerateNonHymnTuneBasedPage(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitNonHymnTuneBased.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "nonhymntuneworks.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateNonHymnTuneBasedPage:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateNonHymnTuneBasedPage:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateComposerPage(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitWorksByComposer.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "worksbycomposer.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateComposerPage:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateComposerPage:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateBookPage(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitWorksByBook.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "worksbybook.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateBookPage:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateBookPage:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateHymnTuneNameIndex(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitIndexByHymnTuneName.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "indexbyhymntunename.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateHymnTuneNameIndex:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateHymnTuneNameIndex:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateHymnIndex(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitIndexByHymn.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "indexbyhymn.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateHymnIndex:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateHymnIndex:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateBookIndex(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitIndexByBook.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "indexbybook.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateBookIndex:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateBookIndex:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateComposerIndex(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + Try + Dim xslt As New System.Xml.Xsl.XslCompiledTransform + xslt.Load(lstrXSLPath & "OrganLitIndexByComposer.xsl") + xslt.Transform(lstrXMLFileName, lstrOrganLitWebPath & "indexbycomposer.htm") + Catch ex As XsltException + MessageBox.Show("Error in GenerateComposerIndex:" & ControlChars.CrLf & ex.ToString) + Catch ex As Exception + MessageBox.Show("Error in GenerateComposerIndex:" & ControlChars.CrLf & ex.ToString) + End Try + End Sub + + Private Sub GenerateRootIndex(ByVal lstrOrganLitWebPath As String, ByVal lstrXSLPath As String, ByVal lstrXMLFileName As String) + File.Copy(lstrXSLPath & "index.htm", lstrOrganLitWebPath & "index.htm", True) + End Sub + + 'Public Sub GenerateWebSite() + ' Dim lcolWebHymnTuneBookmarkCollection As New Hashtable + ' Dim lblnSuccess As Boolean + ' Dim llngTuneArraySubCount As Long + ' Dim lstrLastHymnalName As String + ' Dim llngHymnTunePageToUse As Long + ' Dim llngHymnTuneNameCount As Long + ' Dim lstrOrganLitWebPath As String + ' Dim lstrLastComposerName As String + ' Dim llngPageCount As Long + ' Dim llngHymnCount As Long + ' Dim lstrBookmarkToUse As String + ' Dim lblnFirstHymnTuneNameForTune As Boolean + + ' Dim objOutputFile As StreamWriter + + + ' lstrOrganLitWebPath = "C:\Documents and Settings\Jon\My Documents\JReuss Web page\OrganLit\" + + ' Dim ldbcmdHymnTuneCommand As New SqlClient.SqlCommand + + ' ldbcmdHymnTuneCommand.CommandText = "sel_hymn_tune_all" + + ' ldbcmdHymnTuneCommand.CommandType = CommandType.StoredProcedure + ' Dim ldbdsHymnTunes As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdHymnTuneCommand) + + ' Dim ldbrwHymnTune As DataRow + + ' llngTuneArraySubCount = 0 + + ' llngPageCount = 0 + + ' For Each ldbrwHymnTune In ldbdsHymnTunes.Tables(0).Rows + + ' llngTuneArraySubCount = llngTuneArraySubCount + 1 + + ' If llngTuneArraySubCount = 1 Then + ' llngPageCount = llngPageCount + 1 + + ' objOutputFile = New StreamWriter(lstrOrganLitWebPath & "OrganLitPage" & llngPageCount & ".htm") + ' WriteWebPageStart(objOutputFile) + + ' WriteAsHeadingText(objOutputFile, "Partial Listing of Hymn Tunes") + ' WriteParagraphBreak(objOutputFile) + ' End If + + ' Dim strHymnTuneBookmark As String = "Tune" & llngTuneArraySubCount + ' lcolWebHymnTuneBookmarkCollection.Add(CType(ldbrwHymnTune.Item("hymn_tune_id"), Guid), New clsWebHymnTuneBookmark(CType(ldbrwHymnTune.Item("hymn_tune_id"), Guid), llngPageCount, strHymnTuneBookmark)) + + ' WriteBookmarkTarget(objOutputFile, strHymnTuneBookmark) + + ' Dim ldbcmdHymnTuneNameCommand As New SqlClient.SqlCommand + + ' ldbcmdHymnTuneNameCommand.CommandText = "sel_hymn_tune_name_by_hymn_tune_id" + + ' ' Set up parameter for stored procedure + ' Dim prmHymnTuneNameID As New SqlClient.SqlParameter + ' prmHymnTuneNameID.ParameterName = "@hymn_tune_id" + ' prmHymnTuneNameID.SqlDbType = SqlDbType.UniqueIdentifier + ' 'prmHymnTuneNameID.Size = 5 + ' prmHymnTuneNameID.Value = CType(ldbrwHymnTune.Item("hymn_tune_id"), Guid) + ' ldbcmdHymnTuneNameCommand.Parameters.Add(prmHymnTuneNameID) + + ' ldbcmdHymnTuneNameCommand.CommandType = CommandType.StoredProcedure + ' Dim ldbdsHymnTuneNames As DataSet = MyGlobals.g_objDatabaseLayer.ExecuteDataSet(ldbcmdHymnTuneNameCommand) + + ' Dim ldbrwHymnTuneName As DataRow + + ' lblnFirstHymnTuneNameForTune = True + + ' For Each ldbrwHymnTuneName In ldbdsHymnTuneNames.Tables(0).Rows + + ' If lblnFirstHymnTuneNameForTune Then + ' If ldbdsHymnTuneNames.Tables(0).Rows.Count > 1 Then + + ' WriteAsBoldText(objOutputFile, "Tune Name (with potential alternate names or spellings):") + ' WriteLineBreak(objOutputFile) + ' WriteAsBoldText(objOutputFile, " " & CType(ldbrwHymnTuneName.Item("hymn_tune_name"), String)) + ' WriteLineBreak(objOutputFile) + ' Else + ' WriteAsBoldText(objOutputFile, "Tune Name: " & CType(ldbrwHymnTuneName.Item("hymn_tune_name"), String)) + ' WriteLineBreak(objOutputFile) + ' End If + + ' lblnFirstHymnTuneNameForTune = False + ' Else + ' WriteAsBoldText(objOutputFile, " " & CType(ldbrwHymnTuneName.Item("hymn_tune_name"), String)) + ' WriteLineBreak(objOutputFile) + ' End If + + ' Next + + ' ldbdsHymnTuneNames.Clear() + + ' lstrSQL = "sel_hymn_info_by_hymn_tune_id '" & ldbrwHymnTune("hymn_tune_id") & "'" + ' lblnSuccess = GetDBData(ldbDatabase, lsnaHymn, "SS", lstrSQL) + + ' If lblnSuccess Then + ' If Not lsnaHymn.EOF Then + + ' llngHymnCount = 0 + ' Do Until lsnaHymn.EOF + ' llngHymnCount = llngHymnCount + 1 + ' Select Case llngHymnCount + ' Case 1 + ' WriteAsBoldText(objOutputFile,"Hymn(s): " & lsnaHymn("hymnal_abbreviation") & lsnaHymn("hymn_number") & " " & lsnaHymn("hymn_name")) + ' WriteLineBreak(objOutputFile) + ' Case Else + ' WriteAsBoldText(objOutputFile, " " & lsnaHymn("hymnal_abbreviation") & lsnaHymn("hymn_number") & " " & lsnaHymn("hymn_name")) + ' WriteLineBreak(objOutputFile) + ' End Select + + ' lsnaHymn.MoveNext() + ' Loop + ' End If + + ' lsnaHymn.Close() + ' End If + ' lsnaHymn = Nothing + + ' lstrSQL = "sel_work_info_by_hymn_tune_id '" & ldbrwHymnTune("hymn_tune_id") & "'" + ' lblnSuccess = GetDBData(ldbDatabase, lsnaWork, "SS", lstrSQL) + + ' If lblnSuccess Then + ' If Not lsnaWork.EOF Then + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="Work(s):") + ' WriteLineBreak(objOutputFile) + ' Do Until lsnaWork.EOF + ' 'If Trim$(("" & lsnaWork("composer_name"))) <> Trim$(("" & lsnaWork("book_info_composer_name"))) Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("composer_name") & " ") + ' 'End If + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="""" & lsnaWork("work_name")) + + ' If Trim$("" & lsnaWork("opus_info")) <> "" Then + ' Selection.TypeText(Text:=" - " & Trim$(lsnaWork("opus_info"))) + ' End If + + ' Selection.TypeText(Text:="""" & " ") + + ' Selection.Font.Italic = True + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("book_info_book_title") & " ") + ' If Trim$(("" & lsnaWork("book_info_composer_name"))) = "" Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="(Collection) ") + ' Else + ' If Trim$(("" & lsnaWork("composer_name"))) <> Trim$(("" & lsnaWork("book_info_composer_name"))) Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("book_info_composer_name") & " ") + ' End If + ' End If + + ' If Not IsNull(lsnaWork("page_number")) Then + ' If lsnaWork("page_number") <> 0 Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="p." & lsnaWork("page_number")) + ' End If + ' End If + + ' WriteLineBreak(objOutputFile) + + ' lsnaWork.MoveNext() + ' Loop + ' End If + + ' lsnaWork.Close() + ' End If + ' lsnaWork = Nothing + + ' WriteParagraphBreak(objOutputFile) + + ' If llngTuneArraySubCount = 30 Then + ' llngTuneArraySubCount = 0 + + ' objOutputFile.Close() + ' End If + + ' Next + + ' If llngTuneArraySubCount > 0 Then + ' objOutputFile.Close() + ' End If + + ' ldbdsHymnTunes.Clear() + + ' lstrSQL = "sel_hymn_info_all" + + ' lblnSuccess = GetDBData(ldbDatabase, lsnaHymn, "SS", lstrSQL) + ' If lblnSuccess = False Then + ' MsgBox("Error getting data - quitting") + ' Exit Sub + ' End If + + ' If Not lsnaHymn.EOF Then + + ' Documents.Add(Template:="Normal", NewTemplate:=False, DocumentType:=1) + ' Selection.Font.Name = "Times New Roman" + ' Selection.Font.Size = 18 + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + + ' Selection.TypeText(Text:="OrganLit Hymns") + ' WriteParagraphBreak(objOutputFile) + ' Selection.Font.Size = 12 + + ' lstrLastHymnalName = "" + ' Do Until lsnaHymn.EOF + ' If lstrLastHymnalName <> lsnaHymn("hymnal_name") Then + ' Selection.TypeParagraph() + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + ' Selection.TypeText(Text:=lsnaHymn("hymnal_name")) + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' WriteParagraphBreak(objOutputFile) + ' lstrLastHymnalName = lsnaHymn("hymnal_name") + ' End If + + + ' llngHymnTunePageToUse = 0 + ' If Not IsNull(lsnaHymn("hymn_tune_id")) Then + ' GetPageNumberAndBookmarkForTune(lsnaHymn("hymn_tune_id"), llngHymnTunePageToUse, lstrBookmarkToUse) + ' End If + + ' If llngHymnTunePageToUse = 0 Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaHymn("hymnal_abbreviation") & lsnaHymn("hymn_number") & " " & lsnaHymn("hymn_name")) 'no hyperlink + ' Else + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, _ + ' Address:="OrganLitPage" & llngHymnTunePageToUse & ".htm", _ + ' SubAddress:=lstrBookmarkToUse, _ + ' ScreenTip:="", _ + ' TextToDisplay:=lsnaHymn("hymnal_abbreviation") & lsnaHymn("hymn_number") & " " & lsnaHymn("hymn_name")) + ' End If + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' WriteLineBreak(objOutputFile) + ' lsnaHymn.MoveNext() + ' Loop + + ' ActiveDocument.SaveAs(FileName:=lstrOrganLitWebPath & "indexbyhymn.htm", _ + ' FileFormat:=wdFormatFilteredHTML, _ + ' LockComments:=False, Password:="", AddToRecentFiles:=False, _ + ' WritePassword:="", ReadOnlyRecommended:=False, _ + ' EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _ + ' SaveFormsData:=False, SaveAsAOCELetter:=False) + ' ActiveDocument.Close() + ' End If + + ' lsnaHymn.Close() + ' lsnaHymn = Nothing + + ' lstrSQL = "sel_hymn_tune_name_all" + + ' lblnSuccess = GetDBData(ldbDatabase, ldbrwHymnTune, "SS", lstrSQL) + ' If lblnSuccess = False Then + ' MsgBox("Error getting data - quitting") + ' Exit Sub + ' End If + + ' If Not ldbrwHymnTune.EOF Then + + ' Documents.Add(Template:="Normal", NewTemplate:=False, DocumentType:=1) + ' Selection.Font.Name = "Times New Roman" + ' Selection.Font.Size = 18 + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + + ' Selection.TypeText(Text:="OrganLit Hymn Tunes") + ' WriteParagraphBreak(objOutputFile) + ' Selection.Font.Size = 12 + + ' lstrLastHymnalName = "" + ' Do Until ldbrwHymnTune.EOF + ' llngHymnTunePageToUse = 0 + ' If Not IsNull(ldbrwHymnTune("hymn_tune_id")) Then + ' GetPageNumberAndBookmarkForTune(ldbrwHymnTune("hymn_tune_id"), llngHymnTunePageToUse, lstrBookmarkToUse) + ' End If + + + ' If llngHymnTunePageToUse = 0 Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=ldbrwHymnTune("hymn_tune_name")) 'No hyperlink + ' Else + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, _ + ' Address:="OrganLitPage" & llngHymnTunePageToUse & ".htm", _ + ' SubAddress:=lstrBookmarkToUse, _ + ' ScreenTip:="", _ + ' TextToDisplay:=ldbrwHymnTune("hymn_tune_name")) + ' End If + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' WriteLineBreak(objOutputFile) + ' ldbrwHymnTune.MoveNext() + ' Loop + + ' ActiveDocument.SaveAs(FileName:=lstrOrganLitWebPath & "indexbyhymntune.htm", _ + ' FileFormat:=wdFormatFilteredHTML, _ + ' LockComments:=False, Password:="", AddToRecentFiles:=False, _ + ' WritePassword:="", ReadOnlyRecommended:=False, _ + ' EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _ + ' SaveFormsData:=False, SaveAsAOCELetter:=False) + ' ActiveDocument.Close() + ' End If + + ' ldbrwHymnTune.Close() + ' ldbrwHymnTune = Nothing + + + ' 'non-hymn tune based works + ' lstrSQL = "sel_work_info_all_non_tune_based" + ' lblnSuccess = GetDBData(ldbDatabase, lsnaWork, "SS", lstrSQL) + + ' If lblnSuccess = False Then + ' MsgBox("Error getting data - quitting") + ' Exit Sub + ' End If + + ' Documents.Add(Template:="Normal", NewTemplate:=False, DocumentType:=1) + ' Selection.Font.Name = "Times New Roman" + ' Selection.Font.Size = 18 + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + + ' Selection.TypeText(Text:="OrganLit Works Not Based on Hymn Tunes") + ' WriteParagraphBreak(objOutputFile) + ' Selection.Font.Size = 12 + + ' If Not lsnaWork.EOF Then + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Do Until lsnaWork.EOF + ' 'If Trim$(("" & lsnaWork("composer_name"))) <> Trim$(("" & lsnaWork("book_info_composer_name"))) Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("composer_name") & " ") + ' 'End If + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="""" & lsnaWork("work_name")) + + ' If Trim$("" & lsnaWork("opus_info")) <> "" Then + ' Selection.TypeText(Text:=" - " & Trim$(lsnaWork("opus_info"))) + ' End If + + ' Selection.TypeText(Text:="""" & " ") + + ' Selection.Font.Italic = True + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("book_info_book_title") & " ") + ' If Trim$(("" & lsnaWork("book_info_composer_name"))) = "" Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="(Collection) ") + ' Else + ' If Trim$(("" & lsnaWork("composer_name"))) <> Trim$(("" & lsnaWork("book_info_composer_name"))) Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("book_info_composer_name") & " ") + ' End If + ' End If + + ' If Not IsNull(lsnaWork("page_number")) Then + ' If lsnaWork("page_number") <> 0 Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="p." & lsnaWork("page_number") & " ") + ' End If + ' End If + + ' WriteLineBreak(objOutputFile) + + ' lsnaWork.MoveNext() + ' Loop + ' End If + + ' lsnaWork.Close() + ' lsnaWork = Nothing + + ' ActiveDocument.SaveAs(FileName:=lstrOrganLitWebPath & "nonhymntuneworks.htm", _ + ' FileFormat:=wdFormatFilteredHTML, _ + ' LockComments:=False, Password:="", AddToRecentFiles:=False, _ + ' WritePassword:="", ReadOnlyRecommended:=False, _ + ' EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _ + ' SaveFormsData:=False, SaveAsAOCELetter:=False) + ' ActiveDocument.Close() + + + ' 'Works By Composer + ' lstrSQL = "sel_work_info_all_composer_order" + ' lblnSuccess = GetDBData(ldbDatabase, lsnaWork, "SS", lstrSQL) + + ' If lblnSuccess = False Then + ' MsgBox("Error getting data - quitting") + ' Exit Sub + ' End If + + ' Documents.Add(Template:="Normal", NewTemplate:=False, DocumentType:=1) + ' Selection.Font.Name = "Times New Roman" + ' Selection.Font.Size = 18 + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + + ' Selection.TypeText(Text:="OrganLit Works By Composer") + ' WriteParagraphBreak(objOutputFile) + ' Selection.Font.Size = 12 + + ' If Not lsnaWork.EOF Then + + ' 'Documents.Add Template:="C:\OFS\WORDTEMPLATES\Normal.dot", NewTemplate:= _ + ' ' False + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Do Until lsnaWork.EOF + ' If lstrLastComposerName <> lsnaWork("composer_name") Then + ' 'With ActiveDocument.Bookmarks + ' ' .Add Range:=Selection.Range, Name:="Composer" & lsnaWork("Composer.ComposerId") + ' ' .DefaultSorting = wdSortByName + ' ' .ShowHidden = False + ' 'End With + + ' Selection.TypeParagraph() + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + ' Selection.TypeText(Text:=lsnaWork("composer_name")) + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' WriteLineBreak(objOutputFile) + ' lstrLastComposerName = lsnaWork("composer_name") + ' End If + + ' Selection.Font.Italic = True + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("book_info_book_title") & " ") + ' If Trim$(("" & lsnaWork("book_info_composer_name"))) = "" Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="(Collection) ") + ' Else + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:=lsnaWork("book_info_composer_name") & " ") + ' End If + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="""" & lsnaWork("work_name")) + + ' If Trim$("" & lsnaWork("opus_info")) <> "" Then + ' Selection.TypeText(Text:=" - " & Trim$(lsnaWork("opus_info"))) + ' End If + + ' Selection.TypeText(Text:="""" & " ") + + ' If Not IsNull(lsnaWork("page_number")) Then + ' If lsnaWork("page_number") <> 0 Then + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' Selection.TypeText(Text:="p." & lsnaWork("page_number") & " ") + ' End If + ' End If + + ' WriteLineBreak(objOutputFile) + + ' lsnaWork.MoveNext() + ' Loop + ' End If + + ' lsnaWork.Close() + ' lsnaWork = Nothing + + ' ActiveDocument.SaveAs(FileName:=lstrOrganLitWebPath & "worksbycomposer.htm", _ + ' FileFormat:=wdFormatFilteredHTML, _ + ' LockComments:=False, Password:="", AddToRecentFiles:=False, _ + ' WritePassword:="", ReadOnlyRecommended:=False, _ + ' EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _ + ' SaveFormsData:=False, SaveAsAOCELetter:=False) + ' ActiveDocument.Close() + + + ' ldbDatabase.Close() + ' ldbDatabase = Nothing + + ' 'Create main index page + ' Documents.Add(Template:="Normal", NewTemplate:=False, DocumentType:=1) + ' Selection.Font.Name = "Times New Roman" + ' Selection.Font.Size = 18 + ' Selection.Font.Italic = False + ' Selection.Font.Bold = True + + ' Selection.TypeText(Text:="Organ Literature Index") + ' WriteParagraphBreak(objOutputFile) + ' Selection.Font.Size = 12 + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, _ + ' Address:="indexbyhymn.htm", _ + ' SubAddress:="", _ + ' ScreenTip:="", _ + ' TextToDisplay:="Index by Hymn") + + ' WriteParagraphBreak(objOutputFile) + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, _ + ' Address:="indexbyhymntune.htm", _ + ' SubAddress:="", _ + ' ScreenTip:="", _ + ' TextToDisplay:="Index by Hymn Tune") + + ' WriteParagraphBreak(objOutputFile) + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, _ + ' Address:="nonhymntuneworks.htm", _ + ' SubAddress:="", _ + ' ScreenTip:="", _ + ' TextToDisplay:="Organ Works Not Based on Hymn Tunes") + + ' WriteParagraphBreak(objOutputFile) + + ' Selection.Font.Italic = False + ' Selection.Font.Bold = False + ' ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, _ + ' Address:="worksbycomposer.htm", _ + ' SubAddress:="", _ + ' ScreenTip:="", _ + ' TextToDisplay:="Organ Works By Composer") + + ' ActiveDocument.SaveAs(FileName:=lstrOrganLitWebPath & "index.htm", _ + ' FileFormat:=wdFormatFilteredHTML, _ + ' LockComments:=False, Password:="", AddToRecentFiles:=False, _ + ' WritePassword:="", ReadOnlyRecommended:=False, _ + ' EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _ + ' SaveFormsData:=False, SaveAsAOCELetter:=False) + ' ActiveDocument.Close() + + + ' MessageBox.Show("Pages have been created") + 'End Sub + + 'Private Sub GetPageNumberAndBookmarkForTune(ByVal lguidInputTuneNameId As Guid, ByVal lcolWebHymnTuneBookmarkCollection As Hashtable, ByRef llngPageNumber As Long, ByRef lstrBookmark As String) + ' llngPageNumber = 0 + ' lstrBookmark = "" + + ' If lcolWebHymnTuneBookmarkCollection.ContainsKey(lguidInputTuneNameId) Then + ' Dim objWebHymnTuneBookmark As clsWebHymnTuneBookmark = CType(lcolWebHymnTuneBookmarkCollection.Item(lguidInputTuneNameId), clsWebHymnTuneBookmark) + ' llngPageNumber = objWebHymnTuneBookmark.HymnTunePage + ' lstrBookmark = objWebHymnTuneBookmark.HymnTuneBookmark + ' End If + 'End Sub + + 'Private Sub WriteAsNormalText(ByRef objOutputFile As StreamWriter, ByVal strText As String) + ' objOutputFile.Write(strText) + 'End Sub + + 'Private Sub WriteAsItalicText(ByRef objOutputFile As StreamWriter, ByVal strText As String) + ' objOutputFile.Write("") + ' objOutputFile.Write(strText) + ' objOutputFile.Write("") + 'End Sub + + 'Private Sub WriteAsBoldText(ByRef objOutputFile As StreamWriter, ByVal strText As String) + ' objOutputFile.Write("") + ' objOutputFile.Write(strText) + ' objOutputFile.Write("") + 'End Sub + + 'Private Sub WriteAsBoldItalicText(ByRef objOutputFile As StreamWriter, ByVal strText As String) + ' objOutputFile.Write("") + ' objOutputFile.Write(strText) + ' objOutputFile.Write("") + 'End Sub + + 'Private Sub WriteAsHeadingText(ByRef objOutputFile As StreamWriter, ByVal strText As String) + ' objOutputFile.Write("

") + ' objOutputFile.Write(strText) + ' objOutputFile.Write("

") + 'End Sub + + 'Private Sub WriteLineBreak(ByRef objOutputFile As StreamWriter) + ' objOutputFile.Write("

") + 'End Sub + + 'Private Sub WriteParagraphBreak(ByRef objOutputFile As StreamWriter) + ' objOutputFile.Write("

") + 'End Sub + + 'Private Sub WriteWebPageStart(ByRef objOutputFile As StreamWriter) + ' 'objOutputFile.Write("") + 'End Sub + + 'Private Sub WriteBookmarkTarget(ByRef objOutputFile As StreamWriter, ByVal strBookmarkName As String) + ' objOutputFile.Write("Do bookmark stuff here") + ' objOutputFile.Write(strBookmarkName) + 'End Sub +End Module