From 46735bddd345863252cd860b6783cb48d99c55ec Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 7 Mar 2026 19:38:21 -0600 Subject: [PATCH] Initial population --- .gitignore | 428 +++++++++++++ AADeleteMe.Designer.vb | 81 +++ AADeleteMe.resx | 63 ++ AADeleteMe.vb | 3 + AssemblyInfo.vb | 32 + BaseEditForm.resx | 138 ++++ BaseEditForm.vb | 492 ++++++++++++++ BaseQueryForm.resx | 138 ++++ BaseQueryForm.vb | 294 +++++++++ My Project/Application.myapp | 10 + MyGlobals.vb | 109 ++++ ORGANLIT.ICO | Bin 0 -> 766 bytes OrganLit.exe.config | 6 + OrganLit.sln | 24 + OrganLit.vbproj | 81 +++ OrganLitHymnTuneBased.xsl | 149 +++++ OrganLitHymnTuneBasedByTune.xsl | 151 +++++ OrganLitIndexByBook.xsl | 51 ++ OrganLitIndexByComposer.xsl | 31 + OrganLitIndexByHymn.xsl | 41 ++ OrganLitIndexByHymnTuneName.xsl | 26 + OrganLitNonHymnTuneBased.xsl | 101 +++ OrganLitWorksByBook.xsl | 84 +++ OrganLitWorksByComposer.xsl | 91 +++ References/combotypeahead.dll | Bin 0 -> 8704 bytes app.config | 23 + clsBook.vb | 553 ++++++++++++++++ clsComposer.vb | 371 +++++++++++ clsDatabaseLayer.vb | 75 +++ clsGridSorter.vb | 217 +++++++ clsHymn.vb | 487 ++++++++++++++ clsHymnTuneName.vb | 686 ++++++++++++++++++++ clsHymnal.vb | 437 +++++++++++++ clsInstrumentation.vb | 370 +++++++++++ clsPublisher.vb | 398 ++++++++++++ clsWork.vb | 672 ++++++++++++++++++++ frmAddAlternateHymnTuneName.resx | 166 +++++ frmAddAlternateHymnTuneName.vb | 158 +++++ frmEditBook.resx | 120 ++++ frmEditBook.vb | 588 +++++++++++++++++ frmEditComposer.resx | 120 ++++ frmEditComposer.vb | 250 ++++++++ frmEditHymn.resx | 120 ++++ frmEditHymn.vb | 481 ++++++++++++++ frmEditHymnTuneName.resx | 120 ++++ frmEditHymnTuneName.vb | 354 +++++++++++ frmEditHymnal.resx | 120 ++++ frmEditHymnal.vb | 286 +++++++++ frmEditInstrumentation.resx | 120 ++++ frmEditInstrumentation.vb | 251 ++++++++ frmEditPublisher.resx | 60 ++ frmEditPublisher.vb | 302 +++++++++ frmEditWork.resx | 120 ++++ frmEditWork.vb | 779 +++++++++++++++++++++++ frmMain.resx | 81 +++ frmMain.vb | 351 ++++++++++ index.htm | 14 + log.txt | 12 + modGenerateWebSite.vb | 1025 ++++++++++++++++++++++++++++++ 59 files changed, 12911 insertions(+) create mode 100644 .gitignore create mode 100644 AADeleteMe.Designer.vb create mode 100644 AADeleteMe.resx create mode 100644 AADeleteMe.vb create mode 100644 AssemblyInfo.vb create mode 100644 BaseEditForm.resx create mode 100644 BaseEditForm.vb create mode 100644 BaseQueryForm.resx create mode 100644 BaseQueryForm.vb create mode 100644 My Project/Application.myapp create mode 100644 MyGlobals.vb create mode 100644 ORGANLIT.ICO create mode 100644 OrganLit.exe.config create mode 100644 OrganLit.sln create mode 100644 OrganLit.vbproj create mode 100644 OrganLitHymnTuneBased.xsl create mode 100644 OrganLitHymnTuneBasedByTune.xsl create mode 100644 OrganLitIndexByBook.xsl create mode 100644 OrganLitIndexByComposer.xsl create mode 100644 OrganLitIndexByHymn.xsl create mode 100644 OrganLitIndexByHymnTuneName.xsl create mode 100644 OrganLitNonHymnTuneBased.xsl create mode 100644 OrganLitWorksByBook.xsl create mode 100644 OrganLitWorksByComposer.xsl create mode 100644 References/combotypeahead.dll create mode 100644 app.config create mode 100644 clsBook.vb create mode 100644 clsComposer.vb create mode 100644 clsDatabaseLayer.vb create mode 100644 clsGridSorter.vb create mode 100644 clsHymn.vb create mode 100644 clsHymnTuneName.vb create mode 100644 clsHymnal.vb create mode 100644 clsInstrumentation.vb create mode 100644 clsPublisher.vb create mode 100644 clsWork.vb create mode 100644 frmAddAlternateHymnTuneName.resx create mode 100644 frmAddAlternateHymnTuneName.vb create mode 100644 frmEditBook.resx create mode 100644 frmEditBook.vb create mode 100644 frmEditComposer.resx create mode 100644 frmEditComposer.vb create mode 100644 frmEditHymn.resx create mode 100644 frmEditHymn.vb create mode 100644 frmEditHymnTuneName.resx create mode 100644 frmEditHymnTuneName.vb create mode 100644 frmEditHymnal.resx create mode 100644 frmEditHymnal.vb create mode 100644 frmEditInstrumentation.resx create mode 100644 frmEditInstrumentation.vb create mode 100644 frmEditPublisher.resx create mode 100644 frmEditPublisher.vb create mode 100644 frmEditWork.resx create mode 100644 frmEditWork.vb create mode 100644 frmMain.resx create mode 100644 frmMain.vb create mode 100644 index.htm create mode 100644 log.txt create mode 100644 modGenerateWebSite.vb 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 0000000000000000000000000000000000000000..4d547a6162d3fdc43ffc58729a211f0f373b5266 GIT binary patch literal 766 zcmds#F%H8Z5CqpzBzKT1waYvsPx2G!@&+2e#ZPe=8bs-i%wZ{Z;XYCh-yVB=U}=Ta zv4-I$i}yvkQy=6&KFLm3Pzq@05fD*A*b2y&44UT|p|(%8+Kyyd3&_fgJHWC!A9l!o z9qVfc=QWmo2e(UY_y1f6KT7Wwto-`pONQf5Gfg8LYkg^4)!{S&HxuEI6w|^bj!~JI pBCzqC<3z)X7()4S>)Pa|Q{a{-+%BCa8&2)K@z@TxU-2A%8Xw1LPrLvC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d55d4d6e51f1585bd2630af71d2d15321a23d63d GIT binary patch literal 8704 zcmeHMYj7OLaqii>+glvTBOW9TQ3!MdA?5%Q7eD|=!XhQSNl*X@696T~qQJeoC9u)m z?rC=q1QM}i#5j}^JpMDA79xS3c zdDFL(^v#+dYP&jy>n-#Z*qWEZa+Ejg(WiQl^y}J~EXm+Ib_hVMC%d zP(3+9G%g}^#{)tSd%H+2sdZwKXe%hHPkpctWeRUUUZOf#SA4sf!1l{$5fF5KB6RX2 zM78pNxeQRBg*u`42-o|G7TFQ2pOZxESJU1Jo+8q!_%z@LtMH6xobiBv^acR5$*~4@ z1CvjR=w!xmog6S}TR$p1&?dZ9Pd}{BI7Yz+qqOxT8d+BgZ`IRJG+2eoYM%Xyhiy|R zM$zp=FEtPeNhSK5-9+=N>j$8IBvMW~Cq7;0h>x}q*7Ho+r` zx;JtSV~VzC9$+RLV@sgUZ1!*Yb!N1i{W`PSH*uY)p)*2v2UaNQ6o`s)Rb7Xeakl|U zw*(aUM0GK)M7lMgY+T~GIiMg)0;wHLNhg3S?@9kQkoNl{yBd_UHRyTQI={5j%oItt zakJWfo05h(i4IjsZ-87io@5+0vaKILi80nG_D*o8cd?Fi2jJ`LHRWs!`a3m6JI9rF zpC_S8u66M(T_cK`&VYAA&6ZpGlp6bYSUR5WeEoRGvT+W_I@;}?T37E#k~#aIhJXs!Kp)oB8Yfi zKMOsX&P;b_cb8lnF)Dzzh(T?Cfau>)UV-}UQ=Vg5b1s_bM+hEXmfL5h=wgs=wjY=o z8wTwP@PC3G+XoAFmYMMY6?bm_VoeRgklqsAgcXCK5~6~jo)CM)X@PBlnS=@DF|r(1 zsQ0fRv!eqFd+{@yqB|`UmZ`cr*Pd#+pA2Jt{pDzYO}5 z@z-Ggw_;rX*XV2Ut@P(HrgTG3Gab=hh}P5R<0q(|-ip5ksW;+0-rHp_cc_sX^9EiO`~Ex zotKzDq7C%C#3I@?@NS?hE85tqVMKtSr?G4lQr~fX6#RlV3LnF~g!ch%r4Iq7=<|RoJt^Tc68;t74*Gk*&GciyTKc7= zKP=&+60VnUlY~tYwgz+_|0ZJCBw?$Bmt9mU)E2``bk+|l=Vef|AK@sN_a7Vtbrn|Ar(NT z%ps2c4115jzQH@gpn4cFn~qHZz7e|%@G12KU_@lGrlZJfe8!9MT7ZOtw+65gUd~W2 zJU>KFU|wFNmkE;ytwb+3|7sis9^UG>kMMbwa?G%bb^%#(HSOEHNy%MJHlqG2-M@zH z#_MGNgC|&v!yx(V$A=~1k_c6Ut zHcocY^t@x}`6>OBaU}bDM$Vgb>;*G#IB428Vdu*Q<2IV6Vbd+yt}#11X1ShjjRV*R44tPkKJT0zar* z`GQf+;ZyD~DwB@kx)3Rv7K=OXVcVNB3K#*1uHns2*$!8ID?_ts4lM@^ZwWVp@eqgy zb$5OUpJ$S3*l^7`3m!0N%pbj;Ef{pPY7|@o*g>OEf;&#z zP8IQhVHpm1^E{ko-eDtKo||J$%d}NpEH_}*Fp1_0<^j08m@QPMO|M!9?6UH@llS9g zS;avFl21FV7pwa8?J%4v&nO}O?DE|Fvd~f=j-EG)x^wSx)3okj{zma_ZD71r4WUAG zm^Z9tfr-iiXfF-f1r7{&ceyF-2J@VA%+kt6jJ;$QFJT{r zWYwyh9XIp^LoP7CwlYXF#|+1Xe{iCwQPax%hkIVCCEY>X@ll_q?VysE*?>uGhrj9| zJZ@NX-n_r~YcGt6%9P~%Vzv#F2_-|2x+2HjfK84P6c5^HWg>Vu`*?XHsc!3bwoB7 zOZEDOiOQWuHXP+DG1st=g(=K*BMTU=pI@Biq2!HWyNDFR(F*1<9=2{`?aKkNF{_+2 zJHoD%Vc^%+^k{|?8gwlfNTI&2a18LwQgr}JYC%VWqD;<*vItZToBEuEDK~TOuStEw zhMZn$Yn3C=#R_b#Jtb2$J)r|bw*)K4j~ctQ)Vy|>h0a@I3n$x8^h?fNYKK78y5ja~ z6uXjLb`Z4W=Oio=4pKKXj=Nh9-OQw87EO4O8G`TW6*E5I;0t@?K5V7G&WWS8Q(V%1 zCzdYuii}ST9KkyTRyQ31I!2QWlvqj;$)u$2kEf!jCzI;t z`X*7o-Y+!2IN=wK(G-s6EY#GfLcV_SVZV43$`v&pO==qVlf(&COQNEo7cHq$L`xW#X^XYh^OOiDAwY6Ue@Gyx2x29musP#k5^N4ZcMn1%ZnfZEq?pZ#Fn ztBLn&-@5k3%e3;qU@}Sg$@T3D#DAb`f;1cSzC8h*i-5#Q1fHS^WOw6f(+M=u?=t&uZ1 zLvFad_n&qJ_!P;=^9r8R*zMa!cpl zp5CGEzM(;)UO|nS!z0stl0sV86>Meu7kV?eQ=3k1S~@WBIj*2r_%K59f(Sj!F7bs% ziHXXzf&CfBCatRr7hw1!(gpPd839Qt6J`M{T-&pAcEQa|*?Q@q=aq&ECQ@`rufP6u z+_2Um8V7Yj>n18P&+sOJn^HkZ5UMg9Zo=?^1Ded}AwzYNB)SJK{NeZC{7W7Wd`F)Z zVIm7NQfB0gXIQ+;yS(igj$FY=P)7rfqd1)#&aTwk2<}RS-sLMo{Ow8&l?z_kG4@+V z*>m*5uGC~Xi^DAP$h3X0VeQZ5_GG)dPo2u;Z^`HLy5!6`C|mk>aOm;H zAv>-Z44se7yt7W=v}-s^hcY*`W!ViJD7~GX@5mF`J$v-tT<`9#zV05Qb8p||k8_{; z?B%PE|KX0G|L4~ap?kjPW?4H9)HRL&sTd&;=9d)ba-yK}=uVuIopv9H_ z`*{NS;5s_<9mIQAKT!+EQSh`x_$&MvP0=ji2pvUj48OD;20jKj>i_CSFGSzG>Ia{o zUyZ-q%ylkr5A+}p2iY+opcuw0pp~a^6hTms(`X?eY{}G0EagwNh43hV(*qw*v;TZ8 z`XDA$z$OnmOwe)ezfKe96hWO!e?62%oqwuhe+)riQAU{sE%Ju|w6#>VmC&z+U<;!$ z=$zUmPuL#^w~HWTJ4&nUf!V3oH zk8PRHpM^Z+ijZ?~(-wM)U_A0s+mxGkv%!uf4kl{eSQOmmc_U D^--jq literal 0 HcmV?d00001 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