From ffa10387700b721f9ad1709fa23c4a3ef71e60a9 Mon Sep 17 00:00:00 2001 From: Jarr3 Date: Wed, 26 Jun 2024 18:25:59 +0200 Subject: [PATCH] 2.5.0: Finally a merge of the source code of B2SBackglassServer & B2SBackglassServerEXE into one. Should not be noticed while running, but huge for development. --- .github/workflows/b2s-backglass.yml | 1 - Changelog.txt | 4 + .../My Project/AssemblyInfo.vb | 6 +- .../b2sbackglassserver/Classes/B2SScreen.vb | 1 - .../b2sbackglassserver/Forms/formBackglass.vb | 4 +- .../My Project/AssemblyInfo.vb | 6 +- .../B2SBackglassServerEXE.ico | Bin 96510 -> 0 bytes .../B2SBackglassServerEXE.sln | 44 - .../B2SBackglassServerEXE.vbproj | 79 - .../My Project/Application.Designer.vb | 13 - .../My Project/Application.myapp | 10 - .../My Project/Settings.Designer.vb | 73 - .../My Project/Settings.settings | 6 - b2sbackglassserverexe/My Project/app.manifest | 79 - .../My Project/launchSettings.json | 8 - b2sbackglassserverexe/Program.vb | 27 - .../B2SBackglassServerEXE.sln | 31 - .../B2SBackglassServerEXE.ico | Bin 96510 -> 0 bytes .../B2SBackglassServerEXE.vbproj | 297 -- .../Classes/B2SAnimation.vb | 999 ----- .../Classes/B2SBackglassServerEXE.vb | 23 - .../Classes/B2SCollectData.vb | 55 - .../b2sbackglassserverexe/Classes/B2SData.vb | 510 --- .../b2sbackglassserverexe/Classes/B2SLED.vb | 36 - .../Classes/B2SPlayer.vb | 128 - .../Classes/B2SReelDisplay.vb | 189 - .../Classes/B2SScreen.vb | 729 ---- .../Classes/B2SSettings.vb | 551 --- .../Classes/B2SSystem.vb | 185 - .../Classes/Processes.vb | 95 - .../Controls/B2SBaseBox.vb | 47 - .../Controls/B2SLEDBox.vb | 163 - .../Controls/B2SPictureBox.vb | 108 - .../Controls/B2SReelBox.vb | 329 -- .../Dream7/Dream7Display.vb | 482 --- .../b2sbackglassserverexe/Dream7/Segment.vb | 284 -- .../Dream7/SegmentNumber.vb | 327 -- .../Forms/Background.Designer.vb | 40 - .../Forms/Background.resx | 1734 --------- .../b2sbackglassserverexe/Forms/Background.vb | 51 - .../Forms/formBackglass.Designer.vb | 47 - .../Forms/formBackglass.resx | 1734 --------- .../Forms/formBackglass.vb | 3335 ----------------- .../Forms/formDMD.Designer.vb | 42 - .../b2sbackglassserverexe/Forms/formDMD.resx | 1734 --------- .../b2sbackglassserverexe/Forms/formDMD.vb | 80 - .../Forms/formMode.Designer.vb | 67 - .../b2sbackglassserverexe/Forms/formMode.resx | 126 - .../b2sbackglassserverexe/Forms/formMode.vb | 56 - .../Forms/formSettings.Designer.vb | 901 ----- .../Forms/formSettings.resx | 258 -- .../Forms/formSettings.vb | 505 --- .../Forms/formSettingsMore.Designer.vb | 325 -- .../Forms/formSettingsMore.resx | 120 - .../Forms/formSettingsMore.vb | 134 - .../b2sbackglassserverexe/Logging/Log.vb | 35 - .../Logging/Statistics.vb | 144 - .../My Project/Application.Designer.vb | 13 - .../My Project/Application.myapp | 10 - .../My Project/AssemblyInfo.vb | 36 - .../My Project/Resources.Designer.vb | 108 - .../My Project/Resources.resx | 136 - .../My Project/Settings.Designer.vb | 73 - .../My Project/Settings.settings | 7 - .../My Project/app.manifest | 79 - .../Resources/EMReel.wav | Bin 15574 -> 0 bytes .../Resources/camera1.wav | Bin 17158 -> 0 bytes .../b2sbackglassserverexe/Server.vb | 1063 ------ .../b2sbackglassserverexe/app.config | 8 - .../moduleImageExtensions.vb | 59 - .../My Project/AssemblyInfo.vb | 6 +- 71 files changed, 15 insertions(+), 18980 deletions(-) delete mode 100644 b2sbackglassserverexe/B2SBackglassServerEXE.ico delete mode 100644 b2sbackglassserverexe/B2SBackglassServerEXE.sln delete mode 100644 b2sbackglassserverexe/B2SBackglassServerEXE.vbproj delete mode 100644 b2sbackglassserverexe/My Project/Application.Designer.vb delete mode 100644 b2sbackglassserverexe/My Project/Application.myapp delete mode 100644 b2sbackglassserverexe/My Project/Settings.Designer.vb delete mode 100644 b2sbackglassserverexe/My Project/Settings.settings delete mode 100644 b2sbackglassserverexe/My Project/app.manifest delete mode 100644 b2sbackglassserverexe/My Project/launchSettings.json delete mode 100644 b2sbackglassserverexe/Program.vb delete mode 100644 b2sbackglassserverexe_tmp/B2SBackglassServerEXE.sln delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/B2SBackglassServerEXE.ico delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/B2SBackglassServerEXE.vbproj delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SAnimation.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SBackglassServerEXE.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SCollectData.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SData.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SLED.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SPlayer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SReelDisplay.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SScreen.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSettings.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSystem.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/Processes.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SBaseBox.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SLEDBox.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SPictureBox.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SReelBox.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Dream7Display.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Segment.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/SegmentNumber.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Log.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Statistics.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.myapp delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/AssemblyInfo.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.resx delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.Designer.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.settings delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/app.manifest delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Resources/EMReel.wav delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Resources/camera1.wav delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/Server.vb delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/app.config delete mode 100644 b2sbackglassserverexe_tmp/b2sbackglassserverexe/moduleImageExtensions.vb diff --git a/.github/workflows/b2s-backglass.yml b/.github/workflows/b2s-backglass.yml index f94fbec..0af3cb0 100644 --- a/.github/workflows/b2s-backglass.yml +++ b/.github/workflows/b2s-backglass.yml @@ -70,7 +70,6 @@ jobs: shell: cmd - name: Bundle run: | - ls -R b2sbackglassserver/b2sbackglassserver/bin mkdir tmp cp b2s_screenresidentifier/b2s_screenresidentifier/bin/${{ matrix.platform }}/${{ matrix.config }}/B2S_ScreenResIdentifier.exe tmp cp b2s_screenresidentifier/b2s_screenresidentifier/bin/${{ matrix.platform }}/${{ matrix.config }}/B2S_ScreenResIdentifier.exe.config tmp diff --git a/Changelog.txt b/Changelog.txt index 8bb089e..54e6bc5 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,7 @@ +2.5.0 +- Finally a merge of the source code of B2SBackglassServer & B2SBackglassServerEXE into one. Should not be noticed while running, but huge for development. +- Added new method B2SSetPos(ImageId, xpos, ypos) to move the images on the backglass. + 2.1.2 - Request to turn off backglass in b2s settings #80 Thanks @stevejones72! It is a setting per table, so the table you save with hidden backglass will have it's backglass not shown. diff --git a/b2s_screenresidentifier/b2s_screenresidentifier/My Project/AssemblyInfo.vb b/b2s_screenresidentifier/b2s_screenresidentifier/My Project/AssemblyInfo.vb index 7064b2e..cc8db81 100644 --- a/b2s_screenresidentifier/b2s_screenresidentifier/My Project/AssemblyInfo.vb +++ b/b2s_screenresidentifier/b2s_screenresidentifier/My Project/AssemblyInfo.vb @@ -31,6 +31,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - - + + + diff --git a/b2sbackglassserver/b2sbackglassserver/Classes/B2SScreen.vb b/b2sbackglassserver/b2sbackglassserver/Classes/B2SScreen.vb index 138821c..54880b5 100644 --- a/b2sbackglassserver/b2sbackglassserver/Classes/B2SScreen.vb +++ b/b2sbackglassserver/b2sbackglassserver/Classes/B2SScreen.vb @@ -27,7 +27,6 @@ Public Class B2SScreen Public Property PlayfieldSize() As Size = New Size(0, 0) Public Property BackglassMonitor() As String = String.Empty Public Property BackglassScreen() As Screen = Nothing - Public Property StartBackground() As Boolean = False Public Property BackglassSize() As Size = New Size(0, 0) Public Property BackglassLocation() As Point = New Point(0, 0) Public Property BackglassGrillHeight() As Integer = 0 diff --git a/b2sbackglassserver/b2sbackglassserver/Forms/formBackglass.vb b/b2sbackglassserver/b2sbackglassserver/Forms/formBackglass.vb index 4e4f326..70c716a 100644 --- a/b2sbackglassserver/b2sbackglassserver/Forms/formBackglass.vb +++ b/b2sbackglassserver/b2sbackglassserver/Forms/formBackglass.vb @@ -2738,7 +2738,7 @@ Public Class formBackglass End If End If - If mergeBulbs Then +#If mergeBulbs Then ' look for the largest bulb amount Dim topSize4Authentic As Integer = 0 Dim topkey4Authentic As String = String.Empty @@ -2816,7 +2816,7 @@ Public Class formBackglass CheckBulbs(TopRomID4Fantasy, TopRomIDType4Fantasy, TopRomInverted4Fantasy, B2SData.eDualMode.Fantasy) CheckBulbs(SecondRomID4Fantasy, SecondRomIDType4Fantasy, SecondRomInverted4Fantasy, B2SData.eDualMode.Fantasy) End If - End If +#End If End If ' get all animation info diff --git a/b2sbackglassserver/b2sbackglassserver/My Project/AssemblyInfo.vb b/b2sbackglassserver/b2sbackglassserver/My Project/AssemblyInfo.vb index 32073fd..0c323e5 100644 --- a/b2sbackglassserver/b2sbackglassserver/My Project/AssemblyInfo.vb +++ b/b2sbackglassserver/b2sbackglassserver/My Project/AssemblyInfo.vb @@ -34,6 +34,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - - + + + diff --git a/b2sbackglassserverexe/B2SBackglassServerEXE.ico b/b2sbackglassserverexe/B2SBackglassServerEXE.ico deleted file mode 100644 index 6cbc31cfc64c09edda93e1b63bb6a2d7b4f6c98e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96510 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𝔷L-(?}v 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 cGw2mJ(Mwy0`v%S5%h9UD0WX$|UdE{WU!dBl!T - - - WinExe - net6.0-windows10.0.17763.0 - B2SBackglassServerEXE.Main - True - WindowsFormsWithCustomSubMain - B2SBackglassServerEXE.ico - My Project\app.manifest - 10.0.17763.0 - - - - - - - - - - - - false - false - - - - - - - - - - - - - - - - - - - True - True - Application.myapp - - - True - True - Resources.resx - - - True - True - Settings.settings - - - - - - My.Resources - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - - - - - - MyApplicationCodeGenerator - Application.Designer.vb - - - My - SettingsSingleFileGenerator - Settings.Designer.vb - - - - \ No newline at end of file diff --git a/b2sbackglassserverexe/My Project/Application.Designer.vb b/b2sbackglassserverexe/My Project/Application.Designer.vb deleted file mode 100644 index 88dd01c..0000000 --- a/b2sbackglassserverexe/My Project/Application.Designer.vb +++ /dev/null @@ -1,13 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - diff --git a/b2sbackglassserverexe/My Project/Application.myapp b/b2sbackglassserverexe/My Project/Application.myapp deleted file mode 100644 index b56becd..0000000 --- a/b2sbackglassserverexe/My Project/Application.myapp +++ /dev/null @@ -1,10 +0,0 @@ - - - false - Form1 - false - 0 - false - 0 - true - \ No newline at end of file diff --git a/b2sbackglassserverexe/My Project/Settings.Designer.vb b/b2sbackglassserverexe/My Project/Settings.Designer.vb deleted file mode 100644 index f016c55..0000000 --- a/b2sbackglassserverexe/My Project/Settings.Designer.vb +++ /dev/null @@ -1,73 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My - - _ - Partial Friend NotInheritable Class MySettings - Inherits Global.System.Configuration.ApplicationSettingsBase - - Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) - -#Region "My.Settings Auto-Save Functionality" -#If _MyType = "WindowsForms" Then - Private Shared addedHandler As Boolean - - Private Shared addedHandlerLockObject As New Object - - _ - Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) - If My.Application.SaveMySettingsOnExit Then - My.Settings.Save() - End If - End Sub -#End If -#End Region - - Public Shared ReadOnly Property [Default]() As MySettings - Get - -#If _MyType = "WindowsForms" Then - If Not addedHandler Then - SyncLock addedHandlerLockObject - If Not addedHandler Then - AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings - addedHandler = True - End If - End SyncLock - End If -#End If - Return defaultInstance - End Get - End Property - End Class -End Namespace - -Namespace My - - _ - Friend Module MySettingsProperty - - _ - Friend ReadOnly Property Settings() As Global.B2SBackglassServerEXE.My.MySettings - Get - Return Global.B2SBackglassServerEXE.My.MySettings.Default - End Get - End Property - End Module -End Namespace diff --git a/b2sbackglassserverexe/My Project/Settings.settings b/b2sbackglassserverexe/My Project/Settings.settings deleted file mode 100644 index 392df0a..0000000 --- a/b2sbackglassserverexe/My Project/Settings.settings +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/b2sbackglassserverexe/My Project/app.manifest b/b2sbackglassserverexe/My Project/app.manifest deleted file mode 100644 index 9ce67d2..0000000 --- a/b2sbackglassserverexe/My Project/app.manifest +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/b2sbackglassserverexe/My Project/launchSettings.json b/b2sbackglassserverexe/My Project/launchSettings.json deleted file mode 100644 index 084405a..0000000 --- a/b2sbackglassserverexe/My Project/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "B2SBackglassServerEXE": { - "commandName": "Project", - "commandLineArgs": "\"4 Square (Gottlieb 1971)\"" - } - } -} \ No newline at end of file diff --git a/b2sbackglassserverexe/Program.vb b/b2sbackglassserverexe/Program.vb deleted file mode 100644 index 52c25fb..0000000 --- a/b2sbackglassserverexe/Program.vb +++ /dev/null @@ -1,27 +0,0 @@ -Imports B2S - -Public Module Main - Sub Main() - - Dim myServer As New EXEServer - - Dim TableFileName As String = "" - Dim topMost As Boolean = False - - If My.Application.CommandLineArgs.Count > 0 Then - TableFileName = My.Application.CommandLineArgs(0).ToString - If My.Application.CommandLineArgs.Count > 1 AndAlso My.Application.CommandLineArgs(1).ToString = "1" Then - topMost = True - End If - Else - MessageBox.Show("Please do not start the EXE this way.", "B2S.Server", MessageBoxButtons.OK, MessageBoxIcon.Error) - End - End If - - Application.EnableVisualStyles() - Application.SetCompatibleTextRenderingDefault(False) - Application.Run(New formBackglass(TableFileName, topMost)) - 'myServer.Run(New formBackglass(TableFileName, topMost)) - End Sub - -End Module diff --git a/b2sbackglassserverexe_tmp/B2SBackglassServerEXE.sln b/b2sbackglassserverexe_tmp/B2SBackglassServerEXE.sln deleted file mode 100644 index f9ed247..0000000 --- a/b2sbackglassserverexe_tmp/B2SBackglassServerEXE.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33205.214 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "B2SBackglassServerEXE", "B2SBackglassServerEXE\B2SBackglassServerEXE.vbproj", "{AC2E94BE-21CD-434A-9039-6551DF43698B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Debug|x64.ActiveCfg = Debug|x64 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Debug|x64.Build.0 = Debug|x64 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Debug|x86.ActiveCfg = Debug|x86 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Debug|x86.Build.0 = Debug|x86 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Release|x64.ActiveCfg = Release|x64 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Release|x64.Build.0 = Release|x64 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Release|x86.ActiveCfg = Release|x86 - {AC2E94BE-21CD-434A-9039-6551DF43698B}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {5F9BB968-681A-4FB2-8074-C179F66DB0F2} - EndGlobalSection -EndGlobal diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/B2SBackglassServerEXE.ico b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/B2SBackglassServerEXE.ico deleted file mode 100644 index 6cbc31cfc64c09edda93e1b63bb6a2d7b4f6c98e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96510 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𝔷L-(?}v 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 cGw2mJ(Mwy0`v%S5%h9UD0WX$|UdE{WU!dBl!T - - - Debug - x86 - {AC2E94BE-21CD-434A-9039-6551DF43698B} - WinExe - B2S - B2SBackglassServerEXE - 512 - WindowsFormsWithCustomSubMain - v4.8 - SAK - SAK - SAK - SAK - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - AnyCPU - true - full - true - true - bin\x86\Debug\ - B2SBackglassServerEXE.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - false - false - - - AnyCPU - pdbonly - false - true - true - bin\x86\Release\ - B2SBackglassServerEXE.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - false - true - false - - - x64 - true - full - true - true - bin\x64\Debug\ - B2SBackglassServerEXE.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - false - false - - - x64 - pdbonly - false - true - true - bin\x64\Release\ - B2SBackglassServerEXE.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - false - true - false - - - On - - - Binary - - - Off - - - On - - - Sub Main - - - B2SBackglassServerEXE.ico - - - true - true - true - bin\Debug\ - B2SBackglassServerEXE.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - full - AnyCPU - - - true - bin\Release\ - true - B2SBackglassServerEXE.xml - true - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - pdbonly - AnyCPU - - - My Project\app.manifest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Component - - - Component - - - Component - - - Component - - - Component - - - - - Background.vb - - - Form - - - formBackglass.vb - - - Form - - - formDMD.vb - - - Form - - - formMode.vb - - - Form - - - formSettings.vb - - - Form - - - formSettingsMore.vb - - - Form - - - - - - - True - Application.myapp - True - - - True - True - Resources.resx - - - True - Settings.settings - True - - - - - Background.vb - Designer - - - formBackglass.vb - Designer - - - formDMD.vb - - - formMode.vb - - - formSettings.vb - - - formSettingsMore.vb - - - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - My.Resources - Designer - - - - - - - MyApplicationCodeGenerator - Application.Designer.vb - - - SettingsSingleFileGenerator - My - Settings.Designer.vb - - - - - - - - - - - False - Microsoft .NET Framework 4.8 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SAnimation.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SAnimation.vb deleted file mode 100644 index 16fc6ae..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SAnimation.vb +++ /dev/null @@ -1,999 +0,0 @@ -Imports System -Imports System.Windows.Forms -Imports System.Drawing -Imports Microsoft.Win32 - -Public Class B2SAnimation - - Private Shared runningAnimations As RunningAnimationsCollection = New RunningAnimationsCollection() - Private Class RunningAnimationsCollection - - Inherits Generic.List(Of String) - - Public Shadows Sub Add(item As String) - If Not Me.Contains(item) Then - MyBase.Add(item) - End If - End Sub - Public Shadows Function Remove(item As String) As Boolean - If Me.Contains(item) Then - Return MyBase.Remove(item) - End If - Return True - End Function - - End Class - - Public Enum eType - Undefined = 0 - ImageCollectionAtForm = 1 - ImageCollectionAtPictureBox = 2 - PictureBoxCollection = 3 - End Enum - Public Enum eLightsStateAtAnimationStart - Undefined = 0 - InvolvedLightsOff = 1 - InvolvedLightsOn = 2 - LightsOff = 3 - NoChange = 4 - End Enum - Public Enum eLightsStateAtAnimationEnd - Undefined = 0 - InvolvedLightsOff = 1 - InvolvedLightsOn = 2 - LightsReseted = 3 - NoChange = 4 - End Enum - Public Enum eAnimationStopBehaviour - Undefined = 0 - StopImmediatelly = 1 - RunAnimationTillEnd = 2 - RunAnimationToFirstStep = 3 - End Enum - - Public MustInherit Class B2SAnimationBase - - Inherits Timers.Timer - - Friend Name As String = String.Empty - Friend Type As eType = eType.Undefined - Friend DualMode As B2SData.eDualMode = B2SData.eDualMode.Both - Friend Loops As Integer = -1 - Friend PlayReverse As Boolean = False - Friend StartMeAtVPActivate As Boolean = True - Friend LightsStateAtAnimationStart As eLightsStateAtAnimationStart = eLightsStateAtAnimationStart.NoChange - Friend LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.InvolvedLightsOff - Friend AnimationStopBehaviour As eAnimationStopBehaviour = eAnimationStopBehaviour.StopImmediatelly - Friend LockInvolvedLamps As Boolean = False - Friend HideScoreDisplays As Boolean = False - Friend BringToFront As Boolean = False - Friend RandomStart As Boolean = False - Friend RandomQuality As Integer = 1 - Friend BaseInterval As Integer = 0 - Friend SlowDown As Integer = 1 - - Friend WouldBeStarted As Boolean = False - Friend StopMeLater As Boolean = False - - Friend Sub New(ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Type As eType, - ByVal _Loops As Integer, - ByVal _PlayReverse As Boolean, - ByVal _StartMeAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer) - Me.DualMode = _DualMode - Me.Interval = _Interval - Me.Loops = _Loops - Me.PlayReverse = _PlayReverse - Me.BaseInterval = _Interval - Me.Type = _Type - Me.StartMeAtVPActivate = _StartMeAtVPActivate - Me.LightsStateAtAnimationStart = _LightsStateAtAnimationStart - If Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.Undefined Then Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.NoChange - Me.LightsStateAtAnimationEnd = _LightsStateAtAnimationEnd - If Me.LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.Undefined Then Me.LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.InvolvedLightsOff - Me.AnimationStopBehaviour = _AnimationStopBehaviour - If Me.AnimationStopBehaviour = eAnimationStopBehaviour.Undefined Then Me.AnimationStopBehaviour = eAnimationStopBehaviour.StopImmediatelly - Me.LockInvolvedLamps = _LockInvolvedLamps - Me.HideScoreDisplays = _HideScoreDisplays - Me.BringToFront = _BringToFront - Me.RandomStart = _RandomStart - Me.RandomQuality = _RandomQuality - Me.Enabled = False - End Sub - - End Class - - Public Class TimerAnimation - - Inherits B2SAnimationBase - - Public Event Finished() - - Private Form As Form = Nothing - Private FormDMD As Form = Nothing - Private PictureBox As PictureBox = Nothing - Private ImageCollection As ImageList.ImageCollection = Nothing - - Public Sub New(ByVal _Form As Form, - ByVal _FormDMD As Form, - ByVal _Name As String, - ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Loops As Integer, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer, - ByVal _ImageCollection As ImageList.ImageCollection) - MyBase.New(_DualMode, _Interval, eType.ImageCollectionAtForm, _Loops, False, _StartTimerAtVPActivate, _LightsStateAtAnimationStart, _LightsStateAtAnimationEnd, _AnimationStopBehaviour, _LockInvolvedLamps, _HideScoreDisplays, _BringToFront, _RandomStart, _RandomQuality) - Me.SynchronizingObject = _Form - Me.Form = _Form - Me.FormDMD = _FormDMD - Me.Name = _Name - Me.ImageCollection = _ImageCollection - End Sub - Public Sub New(ByVal _Form As Form, - ByVal _Picturebox As PictureBox, - ByVal _Name As String, - ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Loops As Integer, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer, - ByVal _ImageCollection As ImageList.ImageCollection) - MyBase.New(_DualMode, _Interval, eType.ImageCollectionAtPictureBox, _Loops, False, _StartTimerAtVPActivate, _LightsStateAtAnimationStart, _LightsStateAtAnimationEnd, _AnimationStopBehaviour, _LockInvolvedLamps, _HideScoreDisplays, _BringToFront, _RandomStart, _RandomQuality) - Me.SynchronizingObject = _Form - Me.PictureBox = _Picturebox - Me.Name = _Name - Me.ImageCollection = _ImageCollection - End Sub - - Private loopticker As Integer = 0 - Private ticker As Integer = 0 - Private reachedThe0Point As Boolean = False - - Public Shadows Sub Start() - - ' set the start flag - Me.WouldBeStarted = True - Me.StopMeLater = False - - ' maybe get out here because animation is not allowed to start - If B2SSettings.AllAnimationSlowDown = 0 OrElse Me.SlowDown = 0 Then - Return - End If - - ' maybe get out here because of not matching dual mode - If B2SData.DualBackglass Then - If Not (Me.DualMode = B2SData.eDualMode.Both OrElse Me.DualMode = B2SSettings.CurrentDualMode) Then - Return - End If - End If - - ' start the base timer - MyBase.Start() - runningAnimations.Add(Me.Name) - - End Sub - Public Shadows Sub [Stop]() - - ' remove the start flag - Me.WouldBeStarted = False - - ' maybe stop the animation a bit later to do the last animation steps - If (Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationTillEnd OrElse Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationToFirstStep) Then - If Not Me.StopMeLater Then - reachedThe0Point = False - End If - Me.StopMeLater = True - Return - End If - - ' stop the base timer - runningAnimations.Remove(Me.Name) - MyBase.Stop() - Me.Enabled = False - MyBase.Enabled = False - - End Sub - - Private Sub TimerAnimation_Tick(sender As Object, e As System.EventArgs) Handles Me.Elapsed - - ' first of all stop the timer - MyBase.Stop() - - ' maybe get out since the timer is already stopped - If Not runningAnimations.Contains(Me.Name) Then - Me.Enabled = False - MyBase.Enabled = False - Return - End If - - ' show image - If Me.Type = eType.ImageCollectionAtForm Then - Me.Form.BackgroundImage = Me.ImageCollection(ticker) - ElseIf eType.ImageCollectionAtPictureBox Then - Me.PictureBox.Image = Me.ImageCollection(ticker) - End If - - ' count on and maybe restart the timer - Dim restart As Boolean = True - ticker += 1 - If ticker >= Me.ImageCollection.Count Then - reachedThe0Point = True - loopticker += 1 - ticker = 0 - If Me.Loops > 0 AndAlso loopticker >= Me.Loops Then - loopticker = 0 - restart = False - RaiseEvent Finished() - End If - End If - If restart Then - If B2SSettings.AllAnimationSlowDown = 0 OrElse Me.SlowDown = 0 Then - Me.Stop() - ElseIf Me.StopMeLater AndAlso Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationTillEnd AndAlso ticker = 0 Then - Me.Stop() - ElseIf Me.StopMeLater AndAlso Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationToFirstStep AndAlso (ticker = 1 OrElse ticker = 2) AndAlso reachedThe0Point Then - Me.Stop() - Else - MyBase.Start() - End If - Else - Me.Stop() - End If - - End Sub - - End Class - - Public Class PictureBoxAnimation - - Inherits B2SAnimationBase - - Public Event Finished() - - Private Class EntryAction - Public Bulbs As String() = Nothing - Public IntervalMultiplier As Integer = 0 - Public Visible As Boolean = True - Public Corrector As Integer = 0 - Public PulseSwitch As Integer = 0 - - Public Sub New(ByVal _Bulbs As String(), ByVal _IntervalMultiplier As Integer, ByVal _Visible As Boolean, ByVal _Corrector As Integer, ByVal _PulseSwitch As Integer) - Bulbs = _Bulbs - IntervalMultiplier = _IntervalMultiplier - Visible = _Visible - Corrector = _Corrector - PulseSwitch = _PulseSwitch - End Sub - End Class - - Private Form As Form = Nothing - Private FormDMD As Form = Nothing - Private Entries As Generic.SortedList(Of Integer, EntryAction) = New Generic.SortedList(Of Integer, EntryAction) - - Private LightsInvolved As Generic.List(Of String) = New Generic.List(Of String) - Private LightsStateAtStartup As Generic.Dictionary(Of String, Boolean) = New Generic.Dictionary(Of String, Boolean) - Private MainFormBackgroundImage As Image = Nothing - - Private SelectedLEDType As B2SSettings.eLEDTypes = B2SSettings.eLEDTypes.Undefined - - Public Sub New(ByVal _Form As Form, - ByVal _FormDMD As Form, - ByVal _Name As String, - ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Loops As Integer, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer, - ByVal ParamArray _Entries As PictureBoxAnimationEntry()) - - MyBase.New(_DualMode, _Interval, eType.PictureBoxCollection, _Loops, False, _StartTimerAtVPActivate, _LightsStateAtAnimationStart, _LightsStateAtAnimationEnd, _AnimationStopBehaviour, _LockInvolvedLamps, _HideScoreDisplays, _BringToFront, _RandomStart, _RandomQuality) - Me.SynchronizingObject = _Form - Me.Form = _Form - Me.FormDMD = _FormDMD - Me.Name = _Name - - ' collect all the entries in a nice collection - For Each entry As PictureBoxAnimationEntry In _Entries - Dim isOn1Valid As Boolean = (Not String.IsNullOrEmpty(entry.On1(0)) OrElse entry.WaitAfterOn1 > 0) - Dim isOff1Valid As Boolean = (Not String.IsNullOrEmpty(entry.Off1(0)) OrElse entry.WaitAfterOff1 > 0) - Dim isOn2Valid As Boolean = (Not String.IsNullOrEmpty(entry.On2(0)) OrElse entry.WaitAfterOn2 > 0) - Dim isOff2Valid As Boolean = (Not String.IsNullOrEmpty(entry.Off2(0)) OrElse entry.WaitAfterOff2 > 0) - Dim pulseswitch As Integer = entry.PulseSwitch - If isOn1Valid Then - Entries.Add(Entries.Count + 1, New EntryAction(entry.On1, entry.WaitAfterOn1, True, If(isOff1Valid, 1, 0), pulseswitch)) - pulseswitch = 0 - End If - If isOff1Valid Then - Entries.Add(Entries.Count + 1, New EntryAction(entry.Off1, entry.WaitAfterOff1, False, If(isOn1Valid, -1, 0), pulseswitch)) - pulseswitch = 0 - End If - If isOn2Valid Then - Entries.Add(Entries.Count + 1, New EntryAction(entry.On2, entry.WaitAfterOn2, True, If(isOff2Valid, 1, 0), pulseswitch)) - pulseswitch = 0 - End If - If isOff2Valid Then - Entries.Add(Entries.Count + 1, New EntryAction(entry.Off2, entry.WaitAfterOff2, False, If(isOn2Valid, -1, 0), pulseswitch)) - pulseswitch = 0 - End If - If pulseswitch > 0 Then - Entries.Add(Entries.Count + 1, New EntryAction(New String() {""}, 0, True, 0, pulseswitch)) - pulseswitch = 0 - End If - Next - - ' pick up all involved lights - LightsInvolved.Clear() - For Each entry As KeyValuePair(Of Integer, EntryAction) In Entries - For Each bulb As String In entry.Value.Bulbs - If Not String.IsNullOrEmpty(bulb) AndAlso Not LightsInvolved.Contains(bulb) Then - LightsInvolved.Add(bulb) - End If - Next - Next - - End Sub - - Private loopticker As Integer = 0 - Private ticker As Integer = 0 - Private reachedThe0Point As Boolean = False - - Public Shadows Sub Start() - - ' set the start flag - Me.WouldBeStarted = True - Me.StopMeLater = False - - ' maybe get out here because animation is not allowed to start - If B2SSettings.AllAnimationSlowDown = 0 OrElse Me.SlowDown = 0 Then - Return - End If - - ' maybe get out here because of not matching dual mode - If B2SData.DualBackglass Then - If Not (Me.DualMode = B2SData.eDualMode.Both OrElse Me.DualMode = B2SSettings.CurrentDualMode) Then - Return - End If - End If - - ' maybe switch off all lights but pick them up - LightsStateAtStartup.Clear() - For i As Integer = 1 To 2 - Dim currentForm As Form = If(i = 2, Me.FormDMD, Me.Form) - If currentForm IsNot Nothing Then - For Each picbox As B2SPictureBox In currentForm.Controls.OfType(Of B2SPictureBox)() - If Me.LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.LightsReseted AndAlso Not LightsStateAtStartup.ContainsKey(picbox.Name) Then - LightsStateAtStartup.Add(picbox.Name, picbox.Visible) - End If - If Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.LightsOff Then - picbox.Visible = False - End If - Next - If Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.LightsOff Then - If TypeOf currentForm Is formBackglass Then - With DirectCast(currentForm, formBackglass) - MainFormBackgroundImage = .BackgroundImage - .BackgroundImage = .DarkImage - .Refresh() - End With - Else - currentForm.Refresh() - End If - End If - End If - Next - - ' maybe switch on or off all involved lights - If Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.InvolvedLightsOff OrElse Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.InvolvedLightsOn Then - For Each groupname As String In LightsInvolved - LightGroup(groupname, (Me.LightsStateAtAnimationStart = eLightsStateAtAnimationStart.InvolvedLightsOn)) - Next - End If - - ' maybe lock some illu - If Me.LockInvolvedLamps Then - For Each groupname As String In LightsInvolved - If B2SData.IlluminationLocks.ContainsKey(groupname) Then - B2SData.IlluminationLocks.Item(groupname) += 1 - Else - B2SData.IlluminationLocks.Add(groupname, 1) - End If - B2SData.UseIlluminationLocks = True - Next - End If - - ' maybe hide score displays - If Me.HideScoreDisplays Then - SelectedLEDType = GetLEDType() - If SelectedLEDType = B2SSettings.eLEDTypes.Dream7 Then - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Visible = False - Next - ElseIf SelectedLEDType = B2SSettings.eLEDTypes.Rendered Then - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - led.Value.Visible = False - Next - End If - End If - - ' maybe set a new timer interval - Me.Interval = Me.BaseInterval * If(B2SSettings.AllAnimationSlowDown > 1, B2SSettings.AllAnimationSlowDown, If(Me.SlowDown > 1, Me.SlowDown, 1)) - - ' start the base timer - loopticker = 0 - ticker = 0 - MyBase.Start() - runningAnimations.Add(Me.Name) - - End Sub - Public Shadows Sub [Stop]() - - ' remove the start flag - Me.WouldBeStarted = False - - ' maybe stop the animation a bit later to do the last animation steps - If (Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationTillEnd OrElse Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationToFirstStep) Then - If Not Me.StopMeLater Then - reachedThe0Point = False - End If - Me.StopMeLater = True - Return - End If - - ' stop the base timer - runningAnimations.Remove(Me.Name) - MyBase.Stop() - Me.Enabled = False - MyBase.Enabled = False - - ' maybe show score displays - If HideScoreDisplays Then - If SelectedLEDType = B2SSettings.eLEDTypes.Dream7 Then - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Visible = True - Next - ElseIf SelectedLEDType = B2SSettings.eLEDTypes.Rendered Then - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - led.Value.Visible = True - Next - End If - End If - - ' maybe unlock all illu - If LockInvolvedLamps Then - For Each groupname As String In LightsInvolved - If B2SData.IlluminationLocks.ContainsKey(groupname) Then - If B2SData.IlluminationLocks.Item(groupname) > 1 Then - B2SData.IlluminationLocks.Item(groupname) -= 1 - Else - B2SData.IlluminationLocks.Remove(groupname) - End If - End If - Next - End If - B2SData.UseIlluminationLocks = (B2SData.IlluminationLocks.Count > 0) - - ' maybe switch all involved lights on/off or set some lights to initial state - If LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.InvolvedLightsOff OrElse LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.InvolvedLightsOn Then - For Each groupname As String In LightsInvolved - LightGroup(groupname, (LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.InvolvedLightsOn)) - Next - ElseIf LightsStateAtAnimationEnd = eLightsStateAtAnimationEnd.LightsReseted Then - For Each picbox As KeyValuePair(Of String, Boolean) In LightsStateAtStartup - LightBulb(picbox.Key, picbox.Value) - Next - If MainFormBackgroundImage IsNot Nothing Then - If TypeOf Form Is formBackglass Then - DirectCast(Form, formBackglass).BackgroundImage = MainFormBackgroundImage - End If - End If - End If - - End Sub - - Private Sub PictureBoxAnimation_Tick(sender As Object, e As System.EventArgs) Handles Me.Elapsed - - ' first of all stop the timer - MyBase.Stop() - - ' maybe get out since the timer is already stopped - If Not runningAnimations.Contains(Me.Name) Then - Me.Enabled = False - MyBase.Enabled = False - Return - End If - - ' show animation stuff - If Me.Entries IsNot Nothing AndAlso Me.Entries.Count > 0 Then - Do While True - Dim index As Integer = If(Not PlayReverse, ticker + 1, Me.Entries.Count - ticker) - If Me.Entries.ContainsKey(index) Then - Dim currentEntryAction As EntryAction = Me.Entries(index) - If currentEntryAction.Corrector <> 0 AndAlso PlayReverse Then currentEntryAction = Me.Entries(index + currentEntryAction.Corrector) - ' light or unlight bulbs - For Each groupname As String In currentEntryAction.Bulbs - If Not String.IsNullOrEmpty(groupname) Then - LightGroup(groupname, currentEntryAction.Visible) - End If - Next - ' maybe set switch - If currentEntryAction.PulseSwitch > 0 Then - SetSwitch(currentEntryAction.PulseSwitch) - End If - ' set next interval - If currentEntryAction.IntervalMultiplier > 0 Then - Me.Interval = currentEntryAction.IntervalMultiplier * Me.BaseInterval * If(B2SSettings.AllAnimationSlowDown > 1, B2SSettings.AllAnimationSlowDown, If(Me.SlowDown > 1, Me.SlowDown, 1)) - Exit Do - Else - ticker += 1 - If ticker >= Me.Entries.Count Then - Exit Do - End If - End If - Else - Exit Do - End If - Loop - End If - - ' count on and maybe restart the timer - Dim restart As Boolean = True - ticker += 1 - If ticker >= Me.Entries.Count Then - reachedThe0Point = True - loopticker += 1 - ticker = 0 - If Me.Loops > 0 AndAlso loopticker >= Me.Loops Then - loopticker = 0 - restart = False - RaiseEvent Finished() - End If - End If - If restart Then - If B2SSettings.AllAnimationSlowDown = 0 OrElse Me.SlowDown = 0 Then - Me.Stop() - ElseIf Me.StopMeLater AndAlso Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationTillEnd AndAlso ticker = 0 Then - Me.Stop() - ElseIf Me.StopMeLater AndAlso Me.AnimationStopBehaviour = eAnimationStopBehaviour.RunAnimationToFirstStep AndAlso (ticker = 1 OrElse ticker = 2) AndAlso reachedThe0Point Then - Me.Stop() - Else - MyBase.Start() - End If - Else - Me.Stop() - End If - - End Sub - - Private Sub LightGroup(ByVal _GroupName As String, ByVal _Visible As Boolean) - - ' only do the lightning stuff if the group has a name - If Not String.IsNullOrEmpty(_GroupName) AndAlso B2SData.IlluminationGroups.ContainsKey(_GroupName) Then - - ' get all matching picture boxes - For Each picbox As B2SPictureBox In B2SData.IlluminationGroups(_GroupName) - Try - picbox.Visible(True) = _Visible - If _Visible AndAlso BringToFront Then - picbox.BringToFront() - End If - Catch - End Try - Next - - End If - - End Sub - Private Sub LightBulb(ByVal _Bulb As String, ByVal _Visible As Boolean) - - ' only do the lightning stuff if the bulb has a name - If Not String.IsNullOrEmpty(_Bulb) Then - Dim currentForm As Form = Nothing - If Form.Controls.ContainsKey(_Bulb) Then - currentForm = Form - ElseIf FormDMD.Controls.ContainsKey(_Bulb) Then - currentForm = FormDMD - End If - If currentForm IsNot Nothing Then - DirectCast(currentForm.Controls(_Bulb), B2SPictureBox).Visible(True) = _Visible - If _Visible AndAlso BringToFront Then - DirectCast(currentForm.Controls(_Bulb), B2SPictureBox).BringToFront() - End If - End If - End If - - End Sub - - Private Function GetLEDType() As B2SSettings.eLEDTypes - Dim ret As B2SSettings.eLEDTypes = B2SSettings.eLEDTypes.Undefined - If B2SData.LEDDisplays.Count > 0 Then - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - If leddisplay.Value.Visible Then ret = B2SSettings.eLEDTypes.Dream7 - Exit For - Next - ElseIf B2SData.LEDs.Count > 0 Then - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - If led.Value.Visible Then ret = B2SSettings.eLEDTypes.Rendered - Exit For - Next - End If - Return ret - End Function - - End Class - Public Class PictureBoxAnimationEntry - - Public On1 As String() = New String() {""} - Public Off1 As String() = New String() {""} - Public On2 As String() = New String() {""} - Public Off2 As String() = New String() {""} - - Public WaitAfterOn1 As Integer = 0 - Public WaitAfterOff1 As Integer = 0 - Public WaitAfterOn2 As Integer = 0 - Public WaitAfterOff2 As Integer = 0 - - Public PulseSwitch As Integer = 0 - - Public Sub New(ByVal _On1 As Object, ByVal _WaitAfterOn1 As Integer, Optional ByVal _Off1 As Object = 0, Optional ByVal _WaitAfterOff1 As Integer = 0, - Optional ByVal _On2 As Object = Nothing, Optional ByVal _WaitAfterOn2 As Integer = 0, Optional ByVal _Off2 As Object = Nothing, Optional ByVal _WaitAfterOff2 As Integer = 0, - Optional ByVal _PulseSwitch As Integer = 0) - On1 = Check4StringOrArray(_On1) - WaitAfterOn1 = _WaitAfterOn1 - Off1 = Check4StringOrArray(_Off1) - WaitAfterOff1 = _WaitAfterOff1 - On2 = Check4StringOrArray(_On2) - WaitAfterOn2 = _WaitAfterOn2 - Off2 = Check4StringOrArray(_Off2) - WaitAfterOff2 = _WaitAfterOff2 - PulseSwitch = _PulseSwitch - End Sub - - Private Function Check4StringOrArray(ByVal _Str As Object) As Object - Dim ret As String() = New String() {""} - If _Str IsNot Nothing Then - If IsArray(_Str) Then - ret = _Str - ElseIf _Str.ToString.Contains(",") Then - ret = _Str.ToString.Split(",") - Else - ret(0) = _Str - End If - End If - Return ret - End Function - - End Class - - Public Class PictureBoxAnimationCollection - - Public Entries As PictureBoxAnimationCollectionEntry() = Nothing - - Public StartMeAtVPActivate As Boolean = True - - Public Sub New(ByVal _StartTimerAtVPActivate As Boolean, ByVal ParamArray _Entries As PictureBoxAnimationCollectionEntry()) - StartMeAtVPActivate = _StartTimerAtVPActivate - Entries = _Entries - End Sub - - End Class - Public Class PictureBoxAnimationCollectionEntry - - Public AnimationName As String = String.Empty - Public Loops As Integer = 1 - Public PlayReverse As Boolean = False - - Public Sub New(ByVal _AnimationName As String, ByVal _Loops As Integer, Optional ByVal _PlayReverse As Boolean = False) - AnimationName = _AnimationName - Loops = _Loops - PlayReverse = _PlayReverse - End Sub - - End Class - - Private TimerAnimations As Generic.Dictionary(Of String, TimerAnimation) = New Generic.Dictionary(Of String, TimerAnimation) - Private PictureBoxAnimations As Generic.Dictionary(Of String, PictureBoxAnimation) = New Generic.Dictionary(Of String, PictureBoxAnimation) - Private PictureBoxAnimationCollections As Generic.Dictionary(Of String, PictureBoxAnimationCollection) = New Generic.Dictionary(Of String, PictureBoxAnimationCollection) - -#Region "constructor and startup" - - Public Sub New() - - ' nothing to do right now - - End Sub - -#End Region - -#Region "add animations and collections of animations" - - Public Sub AddAnimation(ByVal _Name As String, - ByVal _Form As Form, - ByVal _FormDMD As Form, - ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Loops As Integer, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer, - ByVal _ImageCollection As ImageList.ImageCollection) - If Not TimerAnimations.ContainsKey(_Name) Then - TimerAnimations.Add(_Name, New TimerAnimation(_Form, _FormDMD, _Name, _DualMode, _Interval, _Loops, _StartTimerAtVPActivate, _LightsStateAtAnimationStart, _LightsStateAtAnimationEnd, _AnimationStopBehaviour, _LockInvolvedLamps, _HideScoreDisplays, _BringToFront, _RandomStart, _RandomQuality, _ImageCollection)) - End If - End Sub - Public Sub AddAnimation(ByVal _Name As String, - ByVal _Form As Form, - ByVal _Picturebox As PictureBox, - ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Loops As Integer, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer, - ByVal _ImageCollection As ImageList.ImageCollection) - If Not TimerAnimations.ContainsKey(_Name) Then - TimerAnimations.Add(_Name, New TimerAnimation(_Form, _Picturebox, _Name, _DualMode, _Interval, _Loops, _StartTimerAtVPActivate, _LightsStateAtAnimationStart, _LightsStateAtAnimationEnd, _AnimationStopBehaviour, _LockInvolvedLamps, _HideScoreDisplays, _BringToFront, _RandomStart, _RandomQuality, _ImageCollection)) - End If - End Sub - Public Sub AddAnimation(ByVal _Name As String, - ByVal _Form As Form, - ByVal _FormDMD As Form, - ByVal _DualMode As B2SData.eDualMode, - ByVal _Interval As Integer, - ByVal _Loops As Integer, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal _LightsStateAtAnimationStart As eLightsStateAtAnimationStart, - ByVal _LightsStateAtAnimationEnd As eLightsStateAtAnimationEnd, - ByVal _AnimationStopBehaviour As eAnimationStopBehaviour, - ByVal _LockInvolvedLamps As Boolean, - ByVal _HideScoreDisplays As Boolean, - ByVal _BringToFront As Boolean, - ByVal _RandomStart As Boolean, - ByVal _RandomQuality As Integer, - ByVal ParamArray _entries As PictureBoxAnimationEntry()) - If Not PictureBoxAnimations.ContainsKey(_Name) Then - PictureBoxAnimations.Add(_Name, New PictureBoxAnimation(_Form, _FormDMD, _Name, _DualMode, _Interval, _Loops, _StartTimerAtVPActivate, _LightsStateAtAnimationStart, _LightsStateAtAnimationEnd, _AnimationStopBehaviour, _LockInvolvedLamps, _HideScoreDisplays, _BringToFront, _RandomStart, _RandomQuality, _entries)) - End If - End Sub - - Public Sub AddCollection(ByVal _Name As String, - ByVal _StartTimerAtVPActivate As Boolean, - ByVal ParamArray _Entries As PictureBoxAnimationCollectionEntry()) - If Not PictureBoxAnimationCollections.ContainsKey(_Name) Then - PictureBoxAnimationCollections.Add(_Name, New PictureBoxAnimationCollection(_StartTimerAtVPActivate, _Entries)) - End If - End Sub - -#End Region - -#Region "start and stop animations and collections of animations" - - Public ReadOnly Property AreThereAnimations() As Boolean - Get - Return (TimerAnimations.Count > 0 OrElse PictureBoxAnimations.Count > 0) - End Get - End Property - Public ReadOnly Property AreThereTimerAnimations() As Boolean - Get - Return (TimerAnimations.Count > 0) - End Get - End Property - Public ReadOnly Property AreTherePictureBoxAnimations() As Boolean - Get - Return (PictureBoxAnimations.Count > 0) - End Get - End Property - - Public Sub AutoStart() - - ' start all autostart timer animations - For Each timer As KeyValuePair(Of String, TimerAnimation) In TimerAnimations - With timer.Value - If .StartMeAtVPActivate AndAlso Not .Enabled Then - .Start() - End If - End With - Next - - ' start all autostart picture box animations - For Each pictimer As KeyValuePair(Of String, PictureBoxAnimation) In PictureBoxAnimations - With pictimer.Value - If .StartMeAtVPActivate AndAlso Not .Enabled Then - .Start() - End If - End With - Next - - ' and now start all autostart picture box animations' collections - For Each pictimer As KeyValuePair(Of String, PictureBoxAnimationCollection) In PictureBoxAnimationCollections - If pictimer.Value.StartMeAtVPActivate Then - StartCollection(pictimer.Key) - End If - Next - - End Sub - - Public Sub StartAnimation(ByVal _Name As String, - Optional ByVal _PlayReverse As Boolean = False) - If TimerAnimations.ContainsKey(_Name) AndAlso Not TimerAnimations(_Name).Enabled Then - TimerAnimations(_Name).PlayReverse = _PlayReverse - TimerAnimations(_Name).Start() - End If - If PictureBoxAnimations.ContainsKey(_Name) AndAlso Not PictureBoxAnimations(_Name).Enabled Then - PictureBoxAnimations(_Name).PlayReverse = _PlayReverse - PictureBoxAnimations(_Name).Start() - End If - End Sub - Public Sub RestartAnimations() - For Each timer As KeyValuePair(Of String, TimerAnimation) In TimerAnimations - If timer.Value.WouldBeStarted Then - timer.Value.Stop() - timer.Value.Start() - Else - timer.Value.Stop() - End If - Next - For Each timer As KeyValuePair(Of String, PictureBoxAnimation) In PictureBoxAnimations - If timer.Value.WouldBeStarted Then - timer.Value.Stop() - timer.Value.Start() - Else - timer.Value.Stop() - End If - Next - End Sub - Public Sub StopAnimation(ByVal _Name As String) - If TimerAnimations.ContainsKey(_Name) Then - TimerAnimations(_Name).Stop() - End If - If PictureBoxAnimations.ContainsKey(_Name) Then - PictureBoxAnimations(_Name).Stop() - End If - End Sub - Public Sub StopAllAnimations() - For Each timer As KeyValuePair(Of String, TimerAnimation) In TimerAnimations - timer.Value.Stop() - Next - For Each timer As KeyValuePair(Of String, PictureBoxAnimation) In PictureBoxAnimations - timer.Value.Stop() - Next - End Sub - - Public Property AnimationSlowDown(ByVal _Name As String) As Integer - Get - If TimerAnimations.ContainsKey(_Name) Then Return TimerAnimations(_Name).SlowDown - If PictureBoxAnimations.ContainsKey(_Name) Then Return PictureBoxAnimations(_Name).SlowDown - Return 1 - End Get - Set(ByVal value As Integer) - If TimerAnimations.ContainsKey(_Name) Then - TimerAnimations(_Name).SlowDown = value - End If - If PictureBoxAnimations.ContainsKey(_Name) Then - PictureBoxAnimations(_Name).SlowDown = value - End If - End Set - End Property - - Public Function IsAnimationRunning(ByVal _Name As String) As Boolean - If TimerAnimations.ContainsKey(_Name) Then - Return TimerAnimations(_Name).Enabled - End If - If PictureBoxAnimations.ContainsKey(_Name) Then - Return PictureBoxAnimations(_Name).Enabled - End If - Return False - End Function - - Public ReadOnly Property Animations() As Generic.List(Of String) - Get - Dim ret As Generic.List(Of String) = New Generic.List(Of String) - For Each timer As KeyValuePair(Of String, TimerAnimation) In TimerAnimations - If Not ret.Contains(timer.Key) Then ret.Add(timer.Key) - Next - For Each timer As KeyValuePair(Of String, PictureBoxAnimation) In PictureBoxAnimations - If Not ret.Contains(timer.Key) Then ret.Add(timer.Key) ' & If(timer.Value.SlowDown = 1, "", " (" & If(timer.Value.SlowDown = 0, "Off", timer.Value.SlowDown.ToString & "x") & ")")) - Next - Return ret - End Get - End Property - - Private WithEvents CurrentCollectionAnimation As PictureBoxAnimation = Nothing - Private CurrentCollectionEntries As PictureBoxAnimationCollectionEntry() = Nothing - Private CurrentCollectionIndex As Integer = 0 - Public Sub StartCollection(ByVal _Name As String) - If PictureBoxAnimationCollections.ContainsKey(_Name) Then - CurrentCollectionEntries = PictureBoxAnimationCollections(_Name).Entries - CurrentCollectionIndex = 0 - If IsArray(CurrentCollectionEntries) AndAlso CurrentCollectionEntries.Length > 0 Then - Dim firstEntry As PictureBoxAnimationCollectionEntry = CurrentCollectionEntries(0) - If Not String.IsNullOrEmpty(firstEntry.AnimationName) AndAlso PictureBoxAnimations.ContainsKey(firstEntry.AnimationName) AndAlso firstEntry.Loops > 0 Then - CurrentCollectionAnimation = PictureBoxAnimations(firstEntry.AnimationName) - CurrentCollectionAnimation.Loops = firstEntry.Loops - CurrentCollectionAnimation.PlayReverse = firstEntry.PlayReverse - CurrentCollectionAnimation.Start() - End If - End If - End If - End Sub - Public Sub StopCollection(ByVal _Name As String) - If CurrentCollectionAnimation IsNot Nothing Then - CurrentCollectionAnimation.Stop() - End If - End Sub - - Private Sub CurrentCollectionAnimation_Finished() Handles CurrentCollectionAnimation.Finished - CurrentCollectionIndex += 1 - If CurrentCollectionEntries.Length > CurrentCollectionIndex Then - Dim nextEntry As PictureBoxAnimationCollectionEntry = CurrentCollectionEntries(CurrentCollectionIndex) - If Not String.IsNullOrEmpty(nextEntry.AnimationName) AndAlso PictureBoxAnimations.ContainsKey(nextEntry.AnimationName) AndAlso nextEntry.Loops > 0 Then - CurrentCollectionAnimation = PictureBoxAnimations(nextEntry.AnimationName) - CurrentCollectionAnimation.Loops = nextEntry.Loops - CurrentCollectionAnimation.PlayReverse = nextEntry.PlayReverse - CurrentCollectionAnimation.Start() - End If - End If - End Sub - -#End Region - -#Region "switch timer stuff" - - Private Shared Sub SetSwitch(ByVal switchid As Integer) - - For i As Integer = 1 To 2 - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - If regkey.GetValue("B2SSetSwitch" & i.ToString(), "").ToString.Length = 0 Then - regkey.SetValue("B2SSetSwitch" & i.ToString(), switchid, RegistryValueKind.DWord) - Exit For - End If - End Using - Next - - End Sub - -#End Region - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SBackglassServerEXE.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SBackglassServerEXE.vb deleted file mode 100644 index 15e7afe..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SBackglassServerEXE.vb +++ /dev/null @@ -1,23 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.IO -Imports System.Security.Principal -Imports System.Windows.Forms -Imports Microsoft.Win32 - -Module B2SBackglassServerEXE - Sub Main() - 'If IsAdmin() Then - ' MessageBox.Show("You should not start this as Administrator!", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Stop) - ' Exit Sub - 'End If - Application.EnableVisualStyles() - Application.SetCompatibleTextRenderingDefault(False) - Application.Run(New formBackglass()) - End Sub - Private Function IsAdmin() As Boolean - Dim identity As WindowsIdentity = WindowsIdentity.GetCurrent() - Dim principal As New WindowsPrincipal(identity) - Return principal.IsInRole(WindowsBuiltInRole.Administrator) - End Function -End Module \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SCollectData.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SCollectData.vb deleted file mode 100644 index 745adf8..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SCollectData.vb +++ /dev/null @@ -1,55 +0,0 @@ -Public Class B2SCollectData - - Inherits Generic.Dictionary(Of Integer, CollectData) - - Private skipframes As Integer = 0 - - Public Enum eCollectedDataType - TopImage = 1 - SecondImage = 2 - Standard = 4 - Animation = 8 - End Enum - - Public Class CollectData - Public State As Integer = 0 - Public Types As Integer = 0 - - Public Sub New(_state As Integer, _type As eCollectedDataType) - State = _state - Types = _type - End Sub - End Class - - Public Sub New(_skipframes As Integer) - skipframes = _skipframes - End Sub - - Public Shadows Function Add(key As Integer, value As CollectData) As Boolean - Dim ret As Boolean = False - If Me.ContainsKey(key) Then - Me(key).State = value.State - Me(key).Types = Me(key).Types Or value.Types - ret = True - Else - MyBase.Add(key, value) - End If - Return ret - End Function - - Public Sub DataAdded() - skipframes -= 1 - End Sub - - Public ReadOnly Property ShowData() As Boolean - Get - Return (skipframes < 0) - End Get - End Property - - Public Sub ClearData(_skipframes As Integer) - MyBase.Clear() - If skipframes <= 0 Then skipframes = _skipframes - End Sub - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SData.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SData.vb deleted file mode 100644 index 5e6befb..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SData.vb +++ /dev/null @@ -1,510 +0,0 @@ -Imports System -Imports System.Drawing - -Public Class B2SData - - Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal LongName As String, ShortName As String, ByVal bufsize As Integer) As Long - - Public Enum eDMDType - NotDefined = 0 - NoB2SDMD = 1 - B2SAlwaysOnSecondMonitor = 2 - B2SAlwaysOnThirdMonitor = 3 - B2SOnSecondOrThirdMonitor = 4 - End Enum - Public Enum eDualMode - Both = 0 - Authentic = 1 - Fantasy = 2 - End Enum - - Public Shared Property OnAndOffImage() As Boolean = False - Public Shared Property IsOffImageVisible() As Boolean = False - - Public Shared ReadOnly Property UsedRomLampIDs() As Generic.SortedList(Of Integer, B2SBaseBox()) - Get - Return If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, UsedRomLampIDs4Fantasy, UsedRomLampIDs4Authentic) - End Get - End Property - Public Shared ReadOnly Property UsedRomSolenoidIDs() As Generic.SortedList(Of Integer, B2SBaseBox()) - Get - Return If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, UsedRomSolenoidIDs4Fantasy, UsedRomSolenoidIDs4Authentic) - End Get - End Property - Public Shared ReadOnly Property UsedRomGIStringIDs() As Generic.SortedList(Of Integer, B2SBaseBox()) - Get - Return If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, UsedRomGIStringIDs4Fantasy, UsedRomGIStringIDs4Authentic) - End Get - End Property - Public Shared ReadOnly Property UsedRomMechIDs() As Generic.SortedList(Of Integer, B2SBaseBox()) - Get - Return If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, UsedRomMechIDs4Fantasy, UsedRomMechIDs4Authentic) - End Get - End Property - Public Shared Property UsedRomLampIDs4Authentic() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomSolenoidIDs4Authentic() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomGIStringIDs4Authentic() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomMechIDs4Authentic() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomLampIDs4Fantasy() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomSolenoidIDs4Fantasy() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomGIStringIDs4Fantasy() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - Public Shared Property UsedRomMechIDs4Fantasy() As Generic.SortedList(Of Integer, B2SBaseBox()) = New Generic.SortedList(Of Integer, B2SBaseBox()) - - Public Shared ReadOnly Property UsedTopRomIDType() As B2SBaseBox.eRomIDType - Get - Return If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, UsedTopRomIDType4Fantasy, UsedTopRomIDType4Authentic) - End Get - End Property - Public Shared ReadOnly Property UsedSecondRomIDType() As B2SBaseBox.eRomIDType - Get - Return If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, UsedSecondRomIDType4Fantasy, UsedSecondRomIDType4Authentic) - End Get - End Property - Public Shared Property UsedTopRomIDType4Authentic() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Shared Property UsedSecondRomIDType4Authentic() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Shared Property UsedTopRomIDType4Fantasy() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Shared Property UsedSecondRomIDType4Fantasy() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - - Public Shared Property UsedRomReelLampIDs() As Generic.SortedList(Of Integer, B2SReelBox()) = New Generic.SortedList(Of Integer, B2SReelBox()) - - Public Shared Property UsedAnimationLampIDs() As AnimationCollection = New AnimationCollection() - Public Shared Property UsedRandomAnimationLampIDs() As AnimationCollection = New AnimationCollection() - Public Shared Property UsedAnimationSolenoidIDs() As AnimationCollection = New AnimationCollection() - Public Shared Property UsedRandomAnimationSolenoidIDs() As AnimationCollection = New AnimationCollection() - Public Shared Property UsedAnimationGIStringIDs() As AnimationCollection = New AnimationCollection() - Public Shared Property UsedRandomAnimationGIStringIDs() As AnimationCollection = New AnimationCollection() - - Public Shared Property TableName() As String = String.Empty - Public Shared Property TableFileName() As String = String.Empty - Public Shared Property BackglassFileName() As String = String.Empty - Public Shared Property TableType() As Integer = 0 - Public Shared Property DMDType() As Integer = 0 - Public Shared Property GrillHeight() As Integer = 0 - Public Shared Property SmallGrillHeight() As Integer = 0 - Public Shared Property DMDDefaultLocation() As Point = New Point(0, 0) - Public Shared Property DualBackglass() As Boolean = False - - Public Class PictureBoxCollection - Inherits Generic.SortedList(Of String, B2SPictureBox) - - Public Sub New() - MyBase.New(StringComparer.OrdinalIgnoreCase) - End Sub - - Public Shadows Sub Add(ByVal value As B2SPictureBox, Optional ByVal dualmode As B2SData.eDualMode = eDualMode.Both) - If Not MyBase.ContainsKey(value.Name) Then MyBase.Add(value.Name, value) - If value.RomID > 0 Then - Dim UsedRomIDs4Authentic As Generic.SortedList(Of Integer, B2SBaseBox()) = Nothing - Dim UsedRomIDs4Fantasy As Generic.SortedList(Of Integer, B2SBaseBox()) = Nothing - If value.RomIDType = B2SBaseBox.eRomIDType.Lamp Then - UsedRomIDs4Authentic = UsedRomLampIDs4Authentic - UsedRomIDs4Fantasy = UsedRomLampIDs4Fantasy - ElseIf value.RomIDType = B2SBaseBox.eRomIDType.Solenoid Then - UsedRomIDs4Authentic = UsedRomSolenoidIDs4Authentic - UsedRomIDs4Fantasy = UsedRomSolenoidIDs4Fantasy - ElseIf value.RomIDType = B2SBaseBox.eRomIDType.GIString Then - UsedRomIDs4Authentic = UsedRomGIStringIDs4Authentic - UsedRomIDs4Fantasy = UsedRomGIStringIDs4Fantasy - ElseIf value.RomIDType = B2SBaseBox.eRomIDType.Mech Then - UsedRomIDs4Authentic = UsedRomMechIDs4Authentic - UsedRomIDs4Fantasy = UsedRomMechIDs4Fantasy - End If - If UsedRomIDs4Authentic IsNot Nothing AndAlso (dualmode = eDualMode.Both OrElse dualmode = eDualMode.Authentic) Then - If UsedRomIDs4Authentic.ContainsKey(value.RomID) Then - Dim baseboxes As B2SBaseBox() = UsedRomIDs4Authentic(value.RomID) - ReDim Preserve baseboxes(baseboxes.Length) - baseboxes(baseboxes.Length - 1) = value - UsedRomIDs4Authentic(value.RomID) = baseboxes - Else - Dim baseboxes As B2SBaseBox() - ReDim baseboxes(0) - baseboxes(0) = value - UsedRomIDs4Authentic.Add(value.RomID, baseboxes) - End If - End If - If UsedRomIDs4Fantasy IsNot Nothing AndAlso (dualmode = eDualMode.Both OrElse dualmode = eDualMode.Fantasy) Then - If UsedRomIDs4Fantasy.ContainsKey(value.RomID) Then - Dim baseboxes As B2SBaseBox() = UsedRomIDs4Fantasy(value.RomID) - ReDim Preserve baseboxes(baseboxes.Length) - baseboxes(baseboxes.Length - 1) = value - UsedRomIDs4Fantasy(value.RomID) = baseboxes - Else - Dim baseboxes As B2SBaseBox() - ReDim baseboxes(0) - baseboxes(0) = value - UsedRomIDs4Fantasy.Add(value.RomID, baseboxes) - End If - End If - End If - End Sub - End Class - Public Class ReelBoxCollection - Inherits Generic.Dictionary(Of String, B2SReelBox) - - Public Sub New() - MyBase.New(StringComparer.OrdinalIgnoreCase) - End Sub - - Public Shadows Sub Add(value As B2SReelBox) - If Not MyBase.ContainsKey(value.Name) Then MyBase.Add(value.Name, value) - If value.RomID > 0 Then - If UsedRomReelLampIDs.ContainsKey(value.RomID) Then - Dim reelboxes As B2SReelBox() = UsedRomReelLampIDs(value.RomID) - ReDim Preserve reelboxes(reelboxes.Length) - reelboxes(reelboxes.Length - 1) = value - UsedRomReelLampIDs(value.RomID) = reelboxes - Else - Dim reelboxes As B2SReelBox() - ReDim reelboxes(0) - reelboxes(0) = value - UsedRomReelLampIDs.Add(value.RomID, reelboxes) - End If - End If - End Sub - End Class - Public Class ZOrderCollection - Inherits Generic.SortedList(Of Integer, B2SPictureBox()) - - Public Shadows Sub Add(value As B2SPictureBox) - If value.ZOrder > 0 Then - If MyBase.ContainsKey(value.ZOrder) Then - Dim pictureboxes As B2SPictureBox() = MyBase.Item(value.ZOrder) - ReDim Preserve pictureboxes(pictureboxes.Length) - pictureboxes(pictureboxes.Length - 1) = value - MyBase.Item(value.ZOrder) = pictureboxes - Else - Dim pictureboxes As B2SPictureBox() - ReDim pictureboxes(0) - pictureboxes(0) = value - MyBase.Add(value.ZOrder, pictureboxes) - End If - End If - End Sub - End Class - - Public Class AnimationInfo - Public AnimationName As String = String.Empty - Public Inverted As Boolean = False - - Public Sub New(ByVal _name As String, ByVal _inverted As Boolean) - AnimationName = _name - Inverted = _inverted - End Sub - End Class - Public Class AnimationCollection - Inherits Generic.Dictionary(Of Integer, AnimationInfo()) - - Public Shadows Sub Add(key As Integer, value As AnimationInfo) - If Not Me.ContainsKey(key) Then - MyBase.Add(key, New AnimationInfo() {value}) - Else - Dim infos As AnimationInfo() = Me(key) - ReDim Preserve infos(infos.Length) - infos(infos.Length - 1) = value - Me(key) = infos - End If - End Sub - End Class - - Public Class IlluminationGroupCollection - Inherits Generic.Dictionary(Of String, B2SPictureBox()) - - Public Sub New() - MyBase.New(StringComparer.OrdinalIgnoreCase) - End Sub - - Public Shadows Sub Add(ByVal value As B2SPictureBox) - If Not String.IsNullOrEmpty(value.GroupName) Then - If Not Me.ContainsKey(value.GroupName) Then - MyBase.Add(value.GroupName, New B2SPictureBox() {value}) - Else - Dim picboxes As B2SPictureBox() = Me(value.GroupName) - ReDim Preserve picboxes(picboxes.Length) - picboxes(picboxes.Length - 1) = value - Me(value.GroupName) = picboxes - End If - End If - End Sub - End Class - - Public Shared ReadOnly Property UseRomLamps() As Boolean - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return (UsedRomLampIDs4Fantasy.Count > 0 OrElse UsedTopRomIDType4Fantasy = B2SBaseBox.eRomIDType.Lamp OrElse UsedSecondRomIDType4Fantasy = B2SBaseBox.eRomIDType.Lamp) - Else - Return (UsedRomLampIDs4Authentic.Count > 0 OrElse UsedTopRomIDType4Authentic = B2SBaseBox.eRomIDType.Lamp OrElse UsedSecondRomIDType4Authentic = B2SBaseBox.eRomIDType.Lamp) - End If - End Get - End Property - Public Shared ReadOnly Property UseRomSolenoids() As Boolean - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return (UsedRomSolenoidIDs4Fantasy.Count > 0 OrElse UsedTopRomIDType4Fantasy = B2SBaseBox.eRomIDType.Solenoid OrElse UsedSecondRomIDType4Fantasy = B2SBaseBox.eRomIDType.Solenoid) - Else - Return (UsedRomSolenoidIDs4Authentic.Count > 0 OrElse UsedTopRomIDType4Authentic = B2SBaseBox.eRomIDType.Solenoid OrElse UsedSecondRomIDType4Authentic = B2SBaseBox.eRomIDType.Solenoid) - End If - End Get - End Property - Public Shared ReadOnly Property UseRomGIStrings() As Boolean - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return (UsedRomGIStringIDs4Fantasy.Count > 0 OrElse UsedTopRomIDType4Fantasy = B2SBaseBox.eRomIDType.GIString OrElse UsedSecondRomIDType4Fantasy = B2SBaseBox.eRomIDType.GIString) - Else - Return (UsedRomGIStringIDs4Authentic.Count > 0 OrElse UsedTopRomIDType4Authentic = B2SBaseBox.eRomIDType.GIString OrElse UsedSecondRomIDType4Authentic = B2SBaseBox.eRomIDType.GIString) - End If - End Get - End Property - Public Shared ReadOnly Property UseRomMechs() As Boolean - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return (UsedRomMechIDs4Fantasy.Count > 0) - Else - Return (UsedRomMechIDs4Authentic.Count > 0) - End If - End Get - End Property - - Public Shared ReadOnly Property UseAnimationLamps() As Boolean - Get - Return (UsedAnimationLampIDs.Count > 0 OrElse UsedRandomAnimationLampIDs.Count > 0) - End Get - End Property - Public Shared ReadOnly Property UseAnimationSolenoids() As Boolean - Get - Return (UsedAnimationSolenoidIDs.Count > 0 OrElse UsedRandomAnimationSolenoidIDs.Count > 0) - End Get - End Property - Public Shared ReadOnly Property UseAnimationGIStrings() As Boolean - Get - Return (UsedAnimationGIStringIDs.Count > 0 OrElse UsedRandomAnimationGIStringIDs.Count > 0) - End Get - End Property - - Public Shared ReadOnly Property UseRomReelLamps() As Boolean - Get - Return (UsedRomReelLampIDs.Count > 0) - End Get - End Property - - Public Shared ReadOnly Property UseLEDs() As Boolean - Get - Return (LEDs.Count > 0) - End Get - End Property - Public Shared ReadOnly Property UseLEDDisplays() As Boolean - Get - Return (LEDDisplays.Count > 0) - End Get - End Property - - Public Shared ReadOnly Property UseReels() As Boolean - Get - Return (Reels.Count > 0) - End Get - End Property - - Private Shared _ScoreMaxDigit As Integer = 0 - Public Shared Property ScoreMaxDigit() As Integer - Get - Return _ScoreMaxDigit - End Get - Set(value As Integer) - If _ScoreMaxDigit < value Then - _ScoreMaxDigit = value - End If - End Set - End Property - - Public Shared Property Players() As B2SPlayer = New B2SPlayer() - Public Shared Property IsAPlayerAdded() As Boolean = False - - Public Shared Property Reels() As ReelBoxCollection = New ReelBoxCollection - Public Shared Property ReelDisplays() As Generic.Dictionary(Of Integer, B2SReelDisplay) = New Generic.Dictionary(Of Integer, B2SReelDisplay) - Public Shared Property ReelImages() As Generic.Dictionary(Of String, Image) = New Generic.Dictionary(Of String, Image)(StringComparer.OrdinalIgnoreCase) - Public Shared Property ReelIntermediateImages() As Generic.Dictionary(Of String, Image) = New Generic.Dictionary(Of String, Image)(StringComparer.OrdinalIgnoreCase) - Public Shared Property ReelIlluImages() As Generic.Dictionary(Of String, Image) = New Generic.Dictionary(Of String, Image)(StringComparer.OrdinalIgnoreCase) - Public Shared Property ReelIntermediateIlluImages() As Generic.Dictionary(Of String, Image) = New Generic.Dictionary(Of String, Image)(StringComparer.OrdinalIgnoreCase) - - Public Shared Property Sounds() As Generic.Dictionary(Of String, Byte()) = New Generic.Dictionary(Of String, Byte())(StringComparer.OrdinalIgnoreCase) - - Public Shared Property LEDs() As Generic.Dictionary(Of String, B2SLEDBox) = New Generic.Dictionary(Of String, B2SLEDBox)(StringComparer.OrdinalIgnoreCase) - Public Shared Property LEDAreas() As Generic.Dictionary(Of String, LEDAreaInfo) = New Generic.Dictionary(Of String, LEDAreaInfo)(StringComparer.OrdinalIgnoreCase) - Public Class LEDAreaInfo - Public Rect As Rectangle = Nothing - Public IsOnDMD As Boolean = False - - Public Sub New(ByVal _rect As Rectangle, ByVal _isOnDMD As Boolean) - Rect = _rect - IsOnDMD = _isOnDMD - End Sub - End Class - - Public Shared Property LEDDisplays() As Generic.Dictionary(Of String, Dream7Display) = New Generic.Dictionary(Of String, Dream7Display)(StringComparer.OrdinalIgnoreCase) - Public Shared Property LEDDisplayDigits() As Generic.Dictionary(Of Integer, LEDDisplayDigitLocation) = New Generic.Dictionary(Of Integer, LEDDisplayDigitLocation) - Public Class LEDDisplayDigitLocation - Public LEDDisplay As Dream7Display = Nothing - Public Digit As Integer = 0 - Public LEDDisplayID As Integer = 0 - - Public Sub New(ByRef _leddisplay As Dream7Display, ByVal _digit As Integer, ByVal _ledDisplayID As Integer) - LEDDisplay = _leddisplay - Digit = _digit - LEDDisplayID = _ledDisplayID - End Sub - End Class - - Public Shared Property Illuminations() As PictureBoxCollection = New PictureBoxCollection() - Public Shared Property DMDIlluminations() As PictureBoxCollection = New PictureBoxCollection() - - Public Shared Property UseIlluminationLocks() As Boolean = False - Public Shared Property IlluminationGroups() As IlluminationGroupCollection = New IlluminationGroupCollection() - Public Shared Property IlluminationLocks() As Generic.Dictionary(Of String, Integer) = New Generic.Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) - - Public Shared Property UseZOrder() As Boolean = False - Public Shared Property UseDMDZOrder() As Boolean = False - Public Shared Property ZOrderImages() As ZOrderCollection = New ZOrderCollection() - Public Shared Property ZOrderDMDImages() As ZOrderCollection = New ZOrderCollection() - - Public Shared Property UseRotatingImage() As Boolean = False - Public Shared Property UseMechRotatingImage() As Boolean = False - Public Shared Property RotatingImages() As Generic.Dictionary(Of Integer, Generic.Dictionary(Of Integer, Image)) = New Generic.Dictionary(Of Integer, Generic.Dictionary(Of Integer, Image)) - Public Shared Property RotatingPictureBox() As Generic.Dictionary(Of Integer, B2SPictureBox) = New Generic.Dictionary(Of Integer, B2SPictureBox) - - Public Shared Property led8Seg() As Generic.List(Of PointF()) = New Generic.List(Of PointF()) - Public Shared Property led10Seg() As Generic.List(Of PointF()) = New Generic.List(Of PointF()) - Public Shared Property led14Seg() As Generic.List(Of PointF()) = New Generic.List(Of PointF()) - Public Shared Property led16Seg() As Generic.List(Of PointF()) = New Generic.List(Of PointF()) - Public Shared Property ledCoordMax() As Integer - - Public Shared Sub ClearAll(Optional ByVal donotclearnames As Boolean = False) - If Not donotclearnames Then - TableName = String.Empty - TableFileName = String.Empty - BackglassFileName = String.Empty - End If - TableType = 0 - DMDType = 0 - GrillHeight = 0 - SmallGrillHeight = 0 - DMDDefaultLocation = New Point(0, 0) - DualBackglass = False - UsedTopRomIDType4Authentic = B2SBaseBox.eRomIDType.NotDefined - UsedTopRomIDType4Fantasy = B2SBaseBox.eRomIDType.NotDefined - UsedSecondRomIDType4Authentic = B2SBaseBox.eRomIDType.NotDefined - UsedSecondRomIDType4Fantasy = B2SBaseBox.eRomIDType.NotDefined - UsedRomLampIDs4Authentic.Clear() - UsedRomSolenoidIDs4Authentic.Clear() - UsedRomGIStringIDs4Authentic.Clear() - UsedRomMechIDs4Authentic.Clear() - UsedRomLampIDs4Fantasy.Clear() - UsedRomSolenoidIDs4Fantasy.Clear() - UsedRomGIStringIDs4Fantasy.Clear() - UsedRomMechIDs4Fantasy.Clear() - UsedRomReelLampIDs.Clear() - UsedAnimationLampIDs.Clear() - UsedRandomAnimationLampIDs.Clear() - UsedAnimationSolenoidIDs.Clear() - UsedRandomAnimationSolenoidIDs.Clear() - UsedAnimationGIStringIDs.Clear() - UsedRandomAnimationGIStringIDs.Clear() - IsAPlayerAdded = False - Players.Clear() - For Each r In Reels : r.Value.Dispose() : Next - Reels.Clear() - For Each rd In ReelDisplays : rd.Value.Dispose() : Next - ReelDisplays.Clear() - ReelImages.Clear() - ReelIntermediateImages.Clear() - ReelIlluImages.Clear() - ReelIntermediateIlluImages.Clear() - 'For Each s In Sounds : s.Value.Dispose() : Next - Sounds.Clear() - LEDs.Clear() - LEDAreas.Clear() - LEDDisplays.Clear() - LEDDisplayDigits.Clear() - Illuminations.Clear() - DMDIlluminations.Clear() - UseIlluminationLocks = False - IlluminationGroups.Clear() - IlluminationLocks.Clear() - UseZOrder = False - UseDMDZOrder = False - ZOrderImages.Clear() - ZOrderDMDImages.Clear() - UseRotatingImage = False - UseMechRotatingImage = False - For Each r As KeyValuePair(Of Integer, Generic.Dictionary(Of Integer, Image)) In RotatingImages : r.Value.Clear() : Next - RotatingImages.Clear() - RotatingPictureBox.Clear() - End Sub - - Shared Sub New() - - ' set coordinates maximum - ledCoordMax = 103 - - ' add led segments - Const toleft As Integer = 8 - ' 8 segments - led8Seg.Add({New PointF(22, 5), New PointF(26, 2), New PointF(88, 2), New PointF(92, 5), New PointF(85, 11), New PointF(29, 11)}) - led8Seg.Add({New PointF(93, 7), New PointF(96, 10), New PointF(96 - toleft, 46), New PointF(93 - toleft, 49), New PointF(87 - toleft, 43), New PointF(87, 12)}) - led8Seg.Add({New PointF(92 - toleft, 51), New PointF(95 - toleft, 54), New PointF(96 - 2 * toleft, 90), New PointF(93 - 2 * toleft, 93), New PointF(87 - 2 * toleft, 88), New PointF(86 - toleft, 57)}) - led8Seg.Add({New PointF(22 - 2 * toleft, 95), New PointF(29 - 2 * toleft, 89), New PointF(85 - 2 * toleft, 89), New PointF(92 - 2 * toleft, 95), New PointF(88 - 2 * toleft, 98), New PointF(26 - 2 * toleft, 98)}) - led8Seg.Add({New PointF(20 - toleft, 51), New PointF(26 - toleft, 57), New PointF(27 - 2 * toleft, 88), New PointF(21 - 2 * toleft, 93), New PointF(17 - 2 * toleft, 90), New PointF(17 - toleft, 54)}) - led8Seg.Add({New PointF(21, 7), New PointF(27, 12), New PointF(27 - toleft, 43), New PointF(21 - toleft, 49), New PointF(18 - toleft, 46), New PointF(18, 10)}) - led8Seg.Add({New PointF(23 - toleft, 50), New PointF(27 - toleft, 46), New PointF(86 - toleft, 46), New PointF(90 - toleft, 50), New PointF(86 - toleft, 54), New PointF(27 - toleft, 54)}) - ' 10 segments - led10Seg.Add({New PointF(22, 5), New PointF(26, 2), New PointF(88, 2), New PointF(92, 5), New PointF(85, 11), New PointF(72, 11), New PointF(67, 6), New PointF(62, 11), New PointF(29, 11)}) - led10Seg.Add({New PointF(93, 7), New PointF(96, 10), New PointF(96 - toleft, 46), New PointF(93 - toleft, 49), New PointF(87 - toleft, 43), New PointF(87, 12)}) - led10Seg.Add({New PointF(92 - toleft, 51), New PointF(95 - toleft, 54), New PointF(96 - 2 * toleft, 90), New PointF(93 - 2 * toleft, 93), New PointF(87 - 2 * toleft, 88), New PointF(86 - toleft, 57)}) - led10Seg.Add({New PointF(22 - 2 * toleft, 95), New PointF(29 - 2 * toleft, 89), New PointF(61 - 2 * toleft, 89), New PointF(66 - 2 * toleft, 94), New PointF(71 - 2 * toleft, 89), New PointF(85 - 2 * toleft, 89), New PointF(92 - 2 * toleft, 95), New PointF(88 - 2 * toleft, 98), New PointF(26 - 2 * toleft, 98)}) - led10Seg.Add({New PointF(20 - toleft, 51), New PointF(26 - toleft, 57), New PointF(27 - 2 * toleft, 88), New PointF(21 - 2 * toleft, 93), New PointF(17 - 2 * toleft, 90), New PointF(17 - toleft, 54)}) - led10Seg.Add({New PointF(21, 7), New PointF(27, 12), New PointF(27 - toleft, 43), New PointF(21 - toleft, 49), New PointF(18 - toleft, 46), New PointF(18, 10)}) - led10Seg.Add({New PointF(23 - toleft, 50), New PointF(27 - toleft, 46), New PointF(63 - toleft, 46), New PointF(68 - toleft, 51), New PointF(73 - toleft, 46), New PointF(86 - toleft, 46), New PointF(90 - toleft, 50), New PointF(86 - toleft, 54), New PointF(72 - toleft, 54), New PointF(67 - toleft, 49), New PointF(62 - toleft, 54), New PointF(27 - toleft, 54)}) - led10Seg.Add({New PointF(67, 9), New PointF(71, 13), New PointF(71 - toleft, 45), New PointF(67 - toleft, 49), New PointF(63 - toleft, 45), New PointF(63, 13)}) - led10Seg.Add({New PointF(68, 7), New PointF(72, 11), New PointF(72 - toleft, 43), New PointF(68 - toleft, 47), New PointF(64 - toleft, 43), New PointF(64, 7)}) - led10Seg.Add({New PointF(66 - toleft, 51), New PointF(70 - toleft, 55), New PointF(70 - 2 * toleft, 88), New PointF(66 - 2 * toleft, 92), New PointF(62 - 2 * toleft, 88), New PointF(62 - toleft, 51)}) - ' 14 segments - led14Seg.Add({New PointF(22, 5), New PointF(26, 2), New PointF(88, 2), New PointF(92, 5), New PointF(85, 11), New PointF(29, 11)}) - led14Seg.Add({New PointF(93, 7), New PointF(96, 10), New PointF(96 - toleft, 46), New PointF(93 - toleft, 49), New PointF(87 - toleft, 43), New PointF(87, 12)}) - led14Seg.Add({New PointF(92 - toleft, 51), New PointF(95 - toleft, 54), New PointF(96 - 2 * toleft, 90), New PointF(93 - 2 * toleft, 93), New PointF(87 - 2 * toleft, 88), New PointF(86 - toleft, 57)}) - led14Seg.Add({New PointF(22 - 2 * toleft, 95), New PointF(29 - 2 * toleft, 89), New PointF(85 - 2 * toleft, 89), New PointF(92 - 2 * toleft, 95), New PointF(88 - 2 * toleft, 98), New PointF(26 - 2 * toleft, 98)}) - led14Seg.Add({New PointF(20 - toleft, 51), New PointF(26 - toleft, 57), New PointF(27 - 2 * toleft, 88), New PointF(21 - 2 * toleft, 93), New PointF(17 - 2 * toleft, 90), New PointF(17 - toleft, 54)}) - led14Seg.Add({New PointF(21, 7), New PointF(27, 12), New PointF(27 - toleft, 43), New PointF(21 - toleft, 49), New PointF(18 - toleft, 46), New PointF(18, 10)}) - led14Seg.Add({New PointF(23 - toleft, 50), New PointF(27 - toleft, 46), New PointF(52 - toleft, 46), New PointF(55 - toleft, 50), New PointF(52 - toleft, 54), New PointF(27 - toleft, 54)}) - led14Seg.Add({New PointF(104 - 2 * toleft, 87), New PointF(109 - 2 * toleft, 90), New PointF(109 - 2 * toleft, 95), New PointF(104 - 2 * toleft, 99), New PointF(100 - 2 * toleft, 95), New PointF(100 - 2 * toleft, 90)}) - led14Seg.Add({New PointF(30, 13), New PointF(34, 17), New PointF(54 - toleft, 38), New PointF(51 - toleft, 43), New PointF(48 - toleft, 40), New PointF(27, 16)}) - led14Seg.Add({New PointF(57, 13), New PointF(61, 13), New PointF(61 - toleft, 46), New PointF(57 - toleft, 48), New PointF(53 - toleft, 46), New PointF(53, 13)}) - led14Seg.Add({New PointF(82, 13), New PointF(85, 16), New PointF(68 - toleft, 42), New PointF(65 - toleft, 44), New PointF(63 - toleft, 39), New PointF(77, 17)}) - led14Seg.Add({New PointF(58 - toleft, 50), New PointF(62 - toleft, 46), New PointF(86 - toleft, 46), New PointF(90 - toleft, 50), New PointF(86 - toleft, 54), New PointF(62 - toleft, 54)}) - led14Seg.Add({New PointF(82 - 2 * toleft, 85), New PointF(87 - 2 * toleft, 86), New PointF(67 - toleft, 57), New PointF(62 - toleft, 57), New PointF(62 - toleft, 60), New PointF(79 - 2 * toleft, 86)}) - led14Seg.Add({New PointF(57 - toleft, 52), New PointF(61 - toleft, 54), New PointF(61 - 2 * toleft, 88), New PointF(57 - 2 * toleft, 88), New PointF(53 - 2 * toleft, 88), New PointF(53 - toleft, 54)}) - led14Seg.Add({New PointF(30 - 2 * toleft, 83), New PointF(33 - 2 * toleft, 86), New PointF(50 - toleft, 60), New PointF(47 - toleft, 57), New PointF(42 - toleft, 61), New PointF(27 - 2 * toleft, 86)}) - led14Seg.Add({New PointF(102 - 2 * toleft, 97), New PointF(107 - 2 * toleft, 100), New PointF(107 - 2 * toleft, 105), New PointF(102 - 2 * toleft, 109), New PointF(98 - 2 * toleft, 105), New PointF(98 - 2 * toleft, 100)}) - ' 16 segments - led16Seg.Add({New PointF(22, 5), New PointF(26, 2), New PointF(88, 2), New PointF(92, 5), New PointF(85, 11), New PointF(29, 11)}) - 'led16Seg.Add({New PointF(93, 7), New PointF(96, 10), New PointF(96 - toleft, 46), New PointF(93 - toleft, 49), New PointF(87 - toleft, 43), New PointF(87, 12)}) - 'led16Seg.Add({New PointF(92 - toleft, 51), New PointF(95 - toleft, 54), New PointF(96 - 2 * toleft, 90), New PointF(93 - 2 * toleft, 93), New PointF(87 - 2 * toleft, 88), New PointF(86 - toleft, 57)}) - 'led16Seg.Add({New PointF(22 - 2 * toleft, 95), New PointF(29 - 2 * toleft, 89), New PointF(85 - 2 * toleft, 89), New PointF(92 - 2 * toleft, 95), New PointF(88 - 2 * toleft, 98), New PointF(26 - 2 * toleft, 98)}) - 'led16Seg.Add({New PointF(20 - toleft, 51), New PointF(26 - toleft, 57), New PointF(27 - 2 * toleft, 88), New PointF(21 - 2 * toleft, 93), New PointF(17 - 2 * toleft, 90), New PointF(17 - toleft, 54)}) - 'led16Seg.Add({New PointF(21, 7), New PointF(27, 12), New PointF(27 - toleft, 43), New PointF(21 - toleft, 49), New PointF(18 - toleft, 46), New PointF(18, 10)}) - 'led16Seg.Add({New PointF(23 - toleft, 50), New PointF(27 - toleft, 46), New PointF(86 - toleft, 46), New PointF(90 - toleft, 50), New PointF(86 - toleft, 54), New PointF(27 - toleft, 54)}) - - End Sub - - Public Shared Function ShortFileName(ByVal longFileName As String) As String - - On Error Resume Next - Dim ret As String = Space(255) - GetShortPathName(longFileName, ret, Len(ret)) - If Not String.IsNullOrEmpty(ret) AndAlso InStr(ret, Chr(0)) > 0 Then - Return ret.Substring(0, InStr(ret, Chr(0)) - 1) - Else - ' Do not return an empty string as Short File Name - Return longFileName - End If - - End Function - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SLED.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SLED.vb deleted file mode 100644 index 867a438..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SLED.vb +++ /dev/null @@ -1,36 +0,0 @@ -Imports System.Drawing - -Public Class B2SLED - - Public Enum eLEDType - Undefined = 0 - LED8 = 1 - LED10 = 2 - LED14 = 3 - LED16 = 4 - End Enum - -#Region "constructor and startup" - - Public Sub New() - ' nothing to do - End Sub - -#End Region - -#Region "standard colors" - - Private ReadOnly Property LitLEDSegmentStandardColor() As Color - Get - Return Color.OrangeRed - End Get - End Property - Private ReadOnly Property DarkLEDSegmentStandardColor() As Color - Get - Return Color.FromArgb(39, 34, 31) - End Get - End Property - -#End Region - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SPlayer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SPlayer.vb deleted file mode 100644 index 23a5032..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SPlayer.vb +++ /dev/null @@ -1,128 +0,0 @@ -Imports System - -Public Class B2SPlayer - - Inherits Generic.Dictionary(Of Integer, ControlCollection) - - Public Enum eControlType - NotDefined = 0 - LEDBox = 1 - Dream7LEDDisplay = 2 - ReelBox = 3 - ReelDisplay = 4 - End Enum - - Public Class ControlCollection - - Inherits Generic.List(Of ControlInfo) - - Public Shadows Sub Add(ByVal item As ControlInfo) - Dim add As Boolean = True - For Each control As ControlInfo In Me - If control.StartDigit = item.StartDigit Then - add = False - Exit For - End If - Next - If add Then - MyBase.Add(item) - Digits += item.Digits - End If - End Sub - - Public Property Digits() As Integer = 0 - - Private _Score As Integer = -1 - Public Property Score() As Integer - Get - Return _Score - End Get - Set(ByVal value As Integer) - 'If _Score <> value Then - _Score = value - SetScore(value) - 'End If - End Set - End Property - - Private Sub SetScore(ByVal score As Integer) - - Dim scoreAsString As String = New String(" ", Digits - score.ToString().Length) & score.ToString() - - For Each control As ControlInfo In Me - - ' get the part of the score - Dim partofscore As String = scoreasstring.Substring(0, control.Digits) - - ' pass matching score part to real control - Select Case control.Type - Case eControlType.LEDBox - ' nothing to do - Case eControlType.Dream7LEDDisplay - If Not control.LEDDisplay.Visible Then - For i As Integer = control.StartDigit To control.StartDigit + control.Digits - 1 - B2SData.LEDs("LEDBox" & i.ToString()).Text = partofscore.Substring(i - control.StartDigit, 1) - Next - Else - For i As Integer = 0 To control.Digits - 1 - control.LEDDisplay.SetValue(i, partofscore.Substring(i, 1)) - Next - End If - Case eControlType.ReelBox - ' nothing to do - Case eControlType.ReelDisplay - control.ReelDisplay.Score = CInt(partofscore) - End Select - - ' remove already passed score part - scoreasstring = scoreasstring.Substring(control.Digits) - - Next - - End Sub - - End Class - Public Class ControlInfo - - Public StartDigit As Integer = 0 - Public Digits As Integer = 0 - Public Type As eControlType = eControlType.NotDefined - Public LEDBox As B2SLEDBox = Nothing - Public LEDDisplay As Dream7Display = Nothing - Public ReelBox As B2SReelBox = Nothing - Public ReelDisplay As B2SReelDisplay = Nothing - - Public Sub New(ByVal _startdigit As Integer, ByVal _digits As Integer, ByVal _type As eControlType, ByVal _ledbox As B2SLEDBox) - MyNew(_startdigit, _digits, eControlType.LEDBox) - LEDBox = _ledbox - End Sub - Public Sub New(ByVal _startdigit As Integer, ByVal _digits As Integer, ByVal _type As eControlType, ByVal _leddisplay As Dream7Display) - MyNew(_startdigit, _digits, eControlType.Dream7LEDDisplay) - LEDDisplay = _leddisplay - End Sub - Public Sub New(ByVal _startdigit As Integer, ByVal _digits As Integer, ByVal _type As eControlType, ByVal _reelbox As B2SReelBox) - MyNew(_startdigit, _digits, eControlType.ReelBox) - ReelBox = _reelbox - End Sub - Public Sub New(ByVal _startdigit As Integer, ByVal _digits As Integer, ByVal _type As eControlType, ByVal _reeldisplay As B2SReelDisplay) - MyNew(_startdigit, _digits, eControlType.ReelDisplay) - ReelDisplay = _reeldisplay - End Sub - - Private Sub MyNew(ByVal _startdigit As Integer, ByVal _digits As Integer, ByVal _type As eControlType) - StartDigit = _startdigit - Digits = _digits - Type = _type - End Sub - - End Class - - Public Shadows Sub Add(ByVal playerno As Integer) - - Dim controls As ControlCollection = New ControlCollection() - MyBase.Add(playerno, controls) - - End Sub - -End Class - diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SReelDisplay.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SReelDisplay.vb deleted file mode 100644 index 07d8b8d..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SReelDisplay.vb +++ /dev/null @@ -1,189 +0,0 @@ -Imports System - -Public Class B2SReelDisplay - - Implements IDisposable - - Private timerRR As System.Windows.Forms.Timer = Nothing - Private timerIA As System.Windows.Forms.Timer = Nothing - - Public Sub New() - - ' create timers - timerRR = New System.Windows.Forms.Timer - timerRR.Interval = 17 - timerRR.Enabled = False - AddHandler timerRR.Tick, AddressOf TimerRR_Tick - timerIA = New System.Windows.Forms.Timer - timerIA.Interval = 17 - timerIA.Enabled = False - AddHandler timerIA.Tick, AddressOf TimerIA_Tick - - End Sub - - Public Reels As ReelBoxCollection = New ReelBoxCollection() - Public Class ReelBoxCollection - Inherits Generic.Dictionary(Of Integer, B2SReelBox) - - Public Property IsLED() As Boolean = False - - Public Shadows Sub Add(ByVal key As Integer, ByVal value As B2SReelBox) - If Not IsLED AndAlso (value.ReelType.StartsWith("LED", StringComparison.CurrentCultureIgnoreCase) OrElse value.ReelType.StartsWith("ImportedLED", StringComparison.CurrentCultureIgnoreCase)) Then - IsLED = True - End If - MyBase.Add(key, value) - End Sub - End Class - - Public Property StartDigit() As Integer = 0 - Public Property Digits() As Integer = 0 - - Public ReadOnly Property IsInAction() As Boolean - Get - Dim ret As Boolean = False - For Each reelbox As KeyValuePair(Of Integer, B2SReelBox) In Reels - If reelbox.Value.IsInAction Then ret = True : Exit For - Next - Return ret - End Get - End Property - - Private _Score As Integer = -1 - Private _NextScore As Integer = -1 - Public Property Score() As Integer - Get - Return _Score - End Get - Set(ByVal value As Integer) - If IsInAction Then - If _Score <> value Then - _NextScore = value - End If - Else - _Score = value - SetScore(_Score) - End If - End Set - End Property - - Private Sub SetScore(ByVal score As Integer, Optional ByVal startAtIndex As Integer = 0) - - If Reels.Count > 0 Then - - timerIA.Start() - - Dim scoreAsStringX As String = score.ToString("D" & Digits.ToString()) - - Dim j As Integer = 1 - For i As Integer = StartDigit + Digits - startAtIndex - 1 To StartDigit Step -1 - If Reels.ContainsKey(i) Then - Dim reelbox As B2SReelBox = Reels(i) - Dim value As Integer = reelbox.CurrentText - Dim newvalue As Integer = CInt(scoreAsStringX.Substring(i - StartDigit, 1)) - Dim nextReelShouldWait = (value > newvalue AndAlso score > 0) - Reels(i).Text(True) = CInt(scoreAsStringX.Substring(i - StartDigit, 1)) - ' maybe get out here since the current reel is rolling over '9' - If nextReelShouldWait Then - StartTimer(i, newvalue, score, j) - Exit For - End If - End If - j += 1 - Next - - End If - - End Sub - - - ' reel rolling timer stuff - - Dim currentindex As Integer = 0 - Dim currentnewvalue As Integer = 0 - Dim currentscore As Integer = 0 - Dim currentrestartat As Integer = 0 - - Private Sub StartTimer(ByVal index As Integer, ByVal newvalue As Integer, ByVal score As Integer, ByVal restartfromright As Integer) - currentindex = index - currentnewvalue = newvalue - currentscore = score - currentrestartat = restartfromright - timerRR.Start() - End Sub - - Private Sub TimerRR_Tick(ByVal sender As Object, ByVal e As EventArgs) - - If currentrestartat = 0 OrElse Reels(currentindex).CurrentText <= currentnewvalue OrElse (Reels(currentindex).CurrentText >= 9 AndAlso Not Reels(currentindex).IsInReelRolling) Then - - timerRR.Stop() - - Dim restartfromright As Integer = currentrestartat - Dim score As Integer = currentscore - currentindex = 0 - currentnewvalue = 0 - currentscore = 0 - currentrestartat = 0 - SetScore(score, restartfromright) - - End If - - End Sub - - Private Sub TimerIA_Tick(ByVal sender As Object, ByVal e As EventArgs) - - If Not IsInAction Then - - timerIA.Stop() - - If _NextScore > 0 Then - Dim nextscore As Integer = _NextScore - _NextScore = 0 - StartTimer(0, 0, nextscore, 0) - End If - - End If - - End Sub - - -#Region "IDisposable Support" - Private disposedValue As Boolean ' To detect redundant calls - - ' IDisposable - Protected Overridable Sub Dispose(disposing As Boolean) - If Not Me.disposedValue Then - If disposing Then - ' TODO: dispose managed state (managed objects). - On Error Resume Next - RemoveHandler timerIA.Tick, AddressOf TimerIA_Tick - RemoveHandler timerRR.Tick, AddressOf TimerRR_Tick - timerIA.Stop() - timerRR.Stop() - timerIA.Dispose() - timerRR.Stop() - timerIA = Nothing - timerRR = Nothing - End If - - ' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below. - ' TODO: set large fields to null. - End If - Me.disposedValue = True - End Sub - - ' TODO: override Finalize() only if Dispose(ByVal disposing As Boolean) above has code to free unmanaged resources. - 'Protected Overrides Sub Finalize() - ' ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. - ' Dispose(False) - ' MyBase.Finalize() - 'End Sub - - ' This code added by Visual Basic to correctly implement the disposable pattern. - Public Sub Dispose() Implements IDisposable.Dispose - ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. - Dispose(True) - GC.SuppressFinalize(Me) - End Sub -#End Region - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SScreen.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SScreen.vb deleted file mode 100644 index 188e6ae..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SScreen.vb +++ /dev/null @@ -1,729 +0,0 @@ -Imports System -Imports System.Windows.Forms -Imports System.Drawing -Imports Microsoft.Win32 -Imports System.IO -Imports System.Reflection -Imports System.Text.RegularExpressions - -Public Class B2SScreen - - Public Property ScreensOrdered() = Screen.AllScreens.OrderBy(Function(sc) sc.Bounds.Location.X).ToArray() - Public Property VersionTwoFile() As Boolean = False - - Public Shared formBackglass As formBackglass = Nothing - Public formDMD As formDMD = Nothing - Public formbackground As Background = Nothing - Public debugLog As Log = New Log("B2SDebugLog") - - Public Enum eDMDViewMode - NotDefined = 0 - NoDMD = 1 - ShowDMD = 2 - ShowDMDOnlyAtDefaultLocation = 3 - DoNotShowDMDAtDefaultLocation = 4 - End Enum - - Public Property PlayfieldSize() As Size = New Size(0, 0) - Public Property BackglassMonitor() As String = String.Empty - Public Property BackglassScreen() As Screen = Nothing - Public Property BackglassSize() As Size = New Size(0, 0) - Public Property BackglassLocation() As Point = New Point(0, 0) - Public Property BackglassGrillHeight() As Integer = 0 - Public Property BackglassSmallGrillHeight() As Integer = 0 - Public Property DMDSize() As Size = New Size(0, 0) - Public Property DMDLocation() As Point = New Point(0, 0) - Public Property DMDFlipY() As Boolean = False - Public Property DMDAtDefaultLocation() As Boolean = True - Public Property DMDViewMode() As eDMDViewMode = eDMDViewMode.NotDefined - - Public Property BackgroundSize() As Size = New Size(0, 0) - Public Property BackgroundLocation() As Point = New Point(0, 0) - Public Property BackgroundPath() As String = String.Empty - - Public Property BackglassCutOff() As Rectangle = Nothing - - Public Property IsDMDToBeShown() As Boolean = False - Public Property StartBackground() As Boolean = False - - -#Region "constructor and startup" - - Public Sub New() - debugLog.IsLogOn = B2SSettings.B2SDebugLog - debugLog.WriteLogEntry("B2SScreen.New") - - 'searchPathLog.WriteLogEntry("Start Search ScreenRes") - - - ' read settings file - ReadB2SSettingsFromFile() - - End Sub - - Public Sub Start(ByVal _formBackglass As Form) - - ' here we go with one form for the backglass and no DMD and no grill - Me.Start(_formBackglass, Nothing, New Size(0, 0), eDMDViewMode.NoDMD, 0, 0) - - End Sub - Public Sub Start(ByVal _formBackglass As Form, ByVal _BackglassGrillHeight As Integer, ByVal _BackglassSmallGrillHeight As Integer) - - ' here we go with one form for the backglass and no DMD but with grill - Me.Start(_formBackglass, Nothing, New Size(0, 0), eDMDViewMode.NoDMD, _BackglassGrillHeight, _BackglassSmallGrillHeight) - - End Sub - Public Sub Start(ByVal _formBackglass As Form, ByVal _formDMD As Form, ByVal _DefaultDMDLocation As Point) - - ' here we go with two forms for the backglass and DMD and default values for the DMD view mode and the grill height - Me.Start(_formBackglass, _formDMD, _DefaultDMDLocation, eDMDViewMode.ShowDMD, 0, 0) - - End Sub - Public Sub Start(ByVal _formBackglass As Form, ByVal _formDMD As Form, ByVal _DefaultDMDLocation As Point, ByVal _DMDViewMode As eDMDViewMode, ByVal _BackglassGrillHeight As Integer, ByVal _BackglassSmallGrillHeight As Integer) - - ' here we go with one or two forms for the backglass and the DMD - formBackglass = _formBackglass - Me.formDMD = _formDMD - - Me.formbackground = New Background - - - ' get all backglass settings - GetB2SSettings(_DefaultDMDLocation, _DMDViewMode, _BackglassGrillHeight, _BackglassSmallGrillHeight) - - ' show all backglass stuff - Show() - - End Sub - -#End Region - - -#Region "get backglass settings and show backglass" - - Private Sub ReadB2SSettingsFromFile() - Dim loadFileName As String = String.Empty - 'Dim searchPathLog As Log = New Log("BackglassSearchPath") - 'searchPathLog.IsLogOn = B2SSettings.IsBackglassSearchLogOn - - 'searchPathLog.WriteLogEntry("Start Search ScreenRes") - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile Start Search ScreenRes") - Try - Dim loadFileNames() As String = {IO.Path.Combine(B2SData.TableFileName & ".res"), ' .\TableName.res - IO.Path.Combine(B2SData.TableFileName, B2SSettings.B2SScreenResFileName), ' .\TableName\ScreenRes.txt - B2SSettings.B2SScreenResFileName, ' .\ScreenRes.txt - IO.Path.Combine(Application.StartupPath(), B2SSettings.B2SScreenResFileName)' B2SFolder\ScreenRes.txt - } - - For Each testFileName As String In loadFileNames - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile Test " & testFileName) - 'searchPathLog.WriteLogEntry(" Test " & testFileName) - If IO.File.Exists(testFileName) Then - loadFileName = testFileName - B2SSettings.LoadedResFilePath = Path.GetFullPath(loadFileName) - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile Found ScreenRes " & loadFileName) - 'searchPathLog.WriteLogEntry("Found ScreenRes " & loadFileName) - Exit For - End If - Next - Catch - End Try - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile Stop Search ScreenRes") - 'searchPathLog.WriteLogEntry("Stop Search ScreenRes") - - If Not loadFileName = String.Empty Then - - ' open settings file - FileOpen(1, loadFileName, OpenMode.Input, OpenAccess.Read, OpenShare.Shared) - - ' get all settings - Dim line(50) As String - Dim i As Integer = 0 - Do Until EOF(1) Or i > 20 - line(i) = LineInput(1) - If (line(i).StartsWith("#")) Then - If (line(i).Replace(" ", "").StartsWith("#V2")) Then VersionTwoFile = True - Continue Do - End If - i += 1 - Loop - ' close file handle - FileClose(1) - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile A version #2 file " & Me.BackgroundPath) - line(i) = 0 - line(i + 1) = 0 - Me.PlayfieldSize = New Size(CInt(line(0)), CInt(line(1))) - Me.BackglassSize = New Size(CInt(line(2)), CInt(line(3))) - Me.BackglassMonitor = line(4) - Me.BackglassLocation = New Point(CInt(line(5)), CInt(line(6))) - Me.DMDSize = New Size(CInt(line(7)), CInt(line(8))) - Me.DMDLocation = New Point(CInt(line(9)), CInt(line(10))) - Me.DMDFlipY = (Trim(line(11)) = "1") - - If (i > 15) Then - Me.BackgroundLocation = New Point(CInt(line(12)), CInt(line(13))) - Me.BackgroundSize = New Size(CInt(line(14)), CInt(line(15))) - Me.BackgroundPath = line(16) - If Me.BackgroundPath.Contains("{") Then - ' We will try to replace the placeholders with the real values - Me.BackgroundPath = GetBackgroundPath(Me.BackgroundPath, B2SData.TableFileName, B2SSettings.GameName) - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile GetBackgroundPath called and returned " & Me.BackgroundPath) - End If - Else - Me.BackgroundLocation = New Point(0, 0) - Me.BackgroundSize = New Size(0, 0) - Me.BackgroundPath = "" - End If - - Else - debugLog.WriteLogEntry("B2SScreen.ReadB2SSettingsFromFile no B2S screen resolution file found") - - MessageBox.Show("There is no B2S screen resolution file '" & B2SSettings.B2SScreenResFileName & "' in the current folder '" & IO.Directory.GetCurrentDirectory() & "'." & vbCrLf & vbCrLf & - "Please create this file with the tool 'B2S_ScreenResIdentifier.exe'.", - "B2S backglass error", MessageBoxButtons.OK, MessageBoxIcon.Error) - End - - End If - End Sub - Private Function GetBackgroundPath(BackgroundPath As String, ByVal TableFileName As String, ByVal GameName As String) As String - Dim pattern As String = "^(?'name'[\w \-\!']+)(\((?'manufactor'[A-Za-z ]+)? (?'year'[\d{4}]+)\))?(?'extra'.*)?$" - Dim regex As New Regex(pattern) - Dim replacedSomething As Boolean = False - - Dim newPath As String = BackgroundPath - - Dim allGroupNames As List(Of String) = New List(Of String) From {"tablename", "gamename"} - - allGroupNames.AddRange(regex.GetGroupNames()) - allGroupNames.RemoveAll(Function(s) s.Length = 1) - - If regex.IsMatch(TableFileName) Then - For Each groupName As String In allGroupNames - For Each replaceName As String In allGroupNames - If groupName = replaceName And newPath.Contains("{" + replaceName + "}") Then - Select Case replaceName - Case "tablename" - newPath = newPath.Replace("{" + replaceName + "}", TableFileName) - replacedSomething = True - Case "gamename" - newPath = newPath.Replace("{" + replaceName + "}", GameName) - replacedSomething = True - Case Else - Dim replaceValue As String = regex.Match(TableFileName).Groups(replaceName).Value.Trim() - If Not String.IsNullOrEmpty(replaceValue) Then - replacedSomething = True - newPath = newPath.Replace("{" + replaceName + "}", replaceValue) - End If - End Select - Else - newPath = newPath.Replace("{" + replaceName + "}", "") - End If - Next - If File.Exists(newPath) And replacedSomething Then - Return newPath - Else - newPath = BackgroundPath - replacedSomething = False - End If - Next - End If - For Each replaceName As String In allGroupNames - newPath = newPath.Replace("{" + replaceName + "}", "") - Next - Return newPath - - End Function - - Private Sub GetB2SSettings(ByVal _DefaultDMDLocation As Point, ByVal _DMDViewMode As eDMDViewMode, ByVal _BackglassGrillHeight As Integer, ByVal _BackglassSmallGrillHeight As Integer) - - Me.DMDViewMode = _DMDViewMode - - ' show or do not show the grill and do some more DMD stuff - Dim showTheGrill As Boolean = (Me.DMDLocation.X = 0 AndAlso Me.DMDLocation.Y = 0) - If B2SSettings.HideGrill = CheckState.Unchecked Then - showTheGrill = True - ElseIf B2SSettings.HideGrill = CheckState.Checked Then - showTheGrill = False - End If - - If showTheGrill Then - - ' show the grill - Me.DMDAtDefaultLocation = True - - ' use default values for DMD location - If _DefaultDMDLocation <> Nothing AndAlso _DMDViewMode <> eDMDViewMode.DoNotShowDMDAtDefaultLocation Then - Me.DMDLocation = _DefaultDMDLocation - End If - - ' maybe do some corrections since there is a small grill - If _BackglassSmallGrillHeight > 0 AndAlso formBackglass.DarkImage IsNot Nothing Then - If Me.DMDLocation.Y > 0 Then - Me.DMDLocation = New Point(Me.DMDLocation.X, Me.DMDLocation.Y - _BackglassSmallGrillHeight) - End If - - Me.BackglassSmallGrillHeight = _BackglassSmallGrillHeight - - Me.BackglassCutOff = New Rectangle(0, formBackglass.DarkImage.Height - _BackglassGrillHeight - _BackglassSmallGrillHeight, formBackglass.DarkImage.Width, _BackglassSmallGrillHeight) - - ' shrink some images to remove the small grill - formBackglass.DarkImage4Authentic = CutOutImage(formBackglass.DarkImage4Authentic, _BackglassGrillHeight, _BackglassSmallGrillHeight) - If formBackglass.TopLightImage4Authentic IsNot Nothing Then - formBackglass.TopLightImage4Authentic = CutOutImage(formBackglass.TopLightImage4Authentic, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - If formBackglass.SecondLightImage4Authentic IsNot Nothing Then - formBackglass.SecondLightImage4Authentic = CutOutImage(formBackglass.SecondLightImage4Authentic, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - If formBackglass.TopAndSecondLightImage4Authentic IsNot Nothing Then - formBackglass.TopAndSecondLightImage4Authentic = CutOutImage(formBackglass.TopAndSecondLightImage4Authentic, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - If formBackglass.DarkImage4Fantasy IsNot Nothing Then - formBackglass.DarkImage4Fantasy = CutOutImage(formBackglass.DarkImage4Fantasy, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - If formBackglass.TopLightImage4Fantasy IsNot Nothing Then - formBackglass.TopLightImage4Fantasy = CutOutImage(formBackglass.TopLightImage4Fantasy, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - If formBackglass.SecondLightImage4Fantasy IsNot Nothing Then - formBackglass.SecondLightImage4Fantasy = CutOutImage(formBackglass.SecondLightImage4Fantasy, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - If formBackglass.TopAndSecondLightImage4Fantasy IsNot Nothing Then - formBackglass.TopAndSecondLightImage4Fantasy = CutOutImage(formBackglass.TopAndSecondLightImage4Fantasy, _BackglassGrillHeight, _BackglassSmallGrillHeight) - End If - - ' set background image and new backglass form height (without grill) - formBackglass.BackgroundImage = formBackglass.DarkImage - formBackglass.Size = formBackglass.DarkImage.Size - - End If - - Else - - ' do not show the grill (if possible) - Me.DMDAtDefaultLocation = False - - ' maybe hide grill - If _BackglassGrillHeight > 0 AndAlso formBackglass.DarkImage IsNot Nothing Then - - Me.BackglassGrillHeight = _BackglassGrillHeight - Me.BackglassSmallGrillHeight = _BackglassSmallGrillHeight - - Me.BackglassCutOff = New Rectangle(0, formBackglass.DarkImage.Height - _BackglassGrillHeight, formBackglass.DarkImage.Width, _BackglassGrillHeight) - - ' shrink some images to remove the grill - formBackglass.DarkImage4Authentic = ResizeImage(formBackglass.DarkImage4Authentic, _BackglassGrillHeight) - If formBackglass.TopLightImage4Authentic IsNot Nothing Then - formBackglass.TopLightImage4Authentic = ResizeImage(formBackglass.TopLightImage4Authentic, _BackglassGrillHeight) - End If - If formBackglass.SecondLightImage4Authentic IsNot Nothing Then - formBackglass.SecondLightImage4Authentic = ResizeImage(formBackglass.SecondLightImage4Authentic, _BackglassGrillHeight) - End If - If formBackglass.TopAndSecondLightImage4Authentic IsNot Nothing Then - formBackglass.TopAndSecondLightImage4Authentic = ResizeImage(formBackglass.TopAndSecondLightImage4Authentic, _BackglassGrillHeight) - End If - If formBackglass.DarkImage4Fantasy IsNot Nothing Then - formBackglass.DarkImage4Fantasy = ResizeImage(formBackglass.DarkImage4Fantasy, _BackglassGrillHeight) - End If - If formBackglass.TopLightImage4Fantasy IsNot Nothing Then - formBackglass.TopLightImage4Fantasy = ResizeImage(formBackglass.TopLightImage4Fantasy, _BackglassGrillHeight) - End If - If formBackglass.SecondLightImage4Fantasy IsNot Nothing Then - formBackglass.SecondLightImage4Fantasy = ResizeImage(formBackglass.SecondLightImage4Fantasy, _BackglassGrillHeight) - End If - If formBackglass.TopAndSecondLightImage4Fantasy IsNot Nothing Then - formBackglass.TopAndSecondLightImage4Fantasy = ResizeImage(formBackglass.TopAndSecondLightImage4Fantasy, _BackglassGrillHeight) - End If - - ' set background image and new backglass form height (without grill) - formBackglass.BackgroundImage = formBackglass.DarkImage - formBackglass.Size = formBackglass.DarkImage.Size - - End If - - ' maybe rotate DMD image - If Me.DMDFlipY AndAlso Me.formDMD IsNot Nothing AndAlso Me.formDMD.BackgroundImage IsNot Nothing Then - Me.formDMD.BackgroundImage.RotateFlip(RotateFlipType.RotateNoneFlipY) - End If - End If - - End Sub - - Private Sub Show() - 'Dim searchPathLog As Log = New Log("BackglassShow") - 'searchPathLog.IsLogOn = B2SSettings.IsBackglassSearchLogOn - - 'searchPathLog.WriteLogEntry("Start Show") - - 'On Error Resume Next - If (Not Me.BackgroundSize.IsEmpty) And ((B2SSettings.StartBackground.HasValue And B2SSettings.StartBackground) Or - (Not B2SSettings.StartBackground.HasValue And B2SSettings.GlobalStartBackground.HasValue And B2SSettings.GlobalStartBackground)) Then - StartBackground = True - End If - - ' first of all get the info whether the DMD is to be shown or not - IsDMDToBeShown = (Me.formDMD IsNot Nothing AndAlso Not Point.Empty.Equals(Me.DMDLocation) AndAlso - ((Me.DMDViewMode = eDMDViewMode.ShowDMD) OrElse - (Me.DMDViewMode = eDMDViewMode.ShowDMDOnlyAtDefaultLocation AndAlso Me.DMDAtDefaultLocation) OrElse - (Me.DMDViewMode = eDMDViewMode.DoNotShowDMDAtDefaultLocation AndAlso Not Me.DMDAtDefaultLocation))) - - ' get the correct screen - Me.BackglassScreen = ScreensOrdered(0) - Dim s As Screen - Dim currentScreen = 0 - - 'searchPathLog.WriteLogEntry("BackglassMonitor " & BackglassMonitor) - For Each s In ScreensOrdered - currentScreen += 1 - 'searchPathLog.WriteLogEntry("Screen: " & (s.DeviceName) & " Location " & s.Bounds.Location.X & " #" & currentScreen) - If Left(BackglassMonitor, 1) = "@" Then - If s.Bounds.Location.X = CInt(Mid(BackglassMonitor, 2)) Then - Me.BackglassScreen = s - 'searchPathLog.WriteLogEntry("Found: @" & (s.Bounds.Location.X)) - Exit For - End If - ElseIf Left(BackglassMonitor, 1) = "=" Then - If currentScreen = CInt(Mid(BackglassMonitor, 2)) Then - Me.BackglassScreen = s - 'searchPathLog.WriteLogEntry("Found: =" & currentScreen) - Exit For - End If - ElseIf s.DeviceName = "\\.\DISPLAY" + BackglassMonitor Then - 'searchPathLog.WriteLogEntry("Found: " & (s.DeviceName)) - Me.BackglassScreen = s - Exit For - End If - Next - On Error GoTo 0 - - - ' Westworld show background form, only if background is set and enabled in setting - Dim DMDKeepBackglassLocation = Me.BackglassLocation - If StartBackground Then - If Not VersionTwoFile Then - Dim swapSize = Me.BackgroundSize - Dim swapLocation = Me.BackgroundLocation - Me.BackgroundSize = Me.BackglassSize - Me.BackglassSize = swapSize - Me.BackgroundLocation = Me.BackglassLocation - Me.BackglassLocation = swapLocation - End If - - Me.formbackground.StartPosition = FormStartPosition.Manual - Me.formbackground.BackgroundImageLayout = ImageLayout.Stretch - Me.formbackground.FormBorderStyle = FormBorderStyle.None - Me.formbackground.ControlBox = False - Me.formbackground.MaximizeBox = False - Me.formbackground.MinimizeBox = False - Me.formbackground.Location = Me.BackglassScreen.Bounds.Location + Me.BackgroundLocation - Me.formbackground.Size = Me.BackgroundSize - Me.formbackground.Text = "B2S Backglass Server" - Me.formbackground.BackColor = Color.Black - If (IO.File.Exists(Me.BackgroundPath)) Then - Me.formbackground.BackgroundImage = Image.FromFile(Me.BackgroundPath) ' ("C:\backglass.png") - End If - Me.formbackground.Show() - If Not B2SSettings.PureEXE Then - If B2SSettings.FormToBack Then - Me.formbackground.SendToBack() - Me.formbackground.ShowInTaskbar = False - ElseIf B2SSettings.FormToFront Then - Me.formbackground.BringToFront() - Me.formbackground.TopMost = True - If B2SSettings.FormNoFocus Then Me.formbackground.ShowInTaskbar = False - Else - Me.formbackground.BringToFront() - End If - End If - End If - ' set forms to background image size - If formBackglass IsNot Nothing AndAlso formBackglass.BackgroundImage IsNot Nothing Then - formBackglass.Size = formBackglass.BackgroundImage.Size - End If - If Me.formDMD IsNot Nothing AndAlso Me.formDMD.BackgroundImage IsNot Nothing Then - Me.formDMD.Size = Me.formDMD.BackgroundImage.Size - End If - - ' calculate backglass rescale factors - Dim rescaleBackglassX As Single = formBackglass.Width / Me.BackglassSize.Width - Dim rescaleBackglassY As Single = formBackglass.Height / Me.BackglassSize.Height - If formBackglass.BackgroundImage IsNot Nothing Then - rescaleBackglassX = formBackglass.BackgroundImage.Width / Me.BackglassSize.Width - rescaleBackglassY = formBackglass.BackgroundImage.Height / Me.BackglassSize.Height - End If - - ' maybe rescale the location and the size because this is the default and therefore it has to be done - Dim rescaleDMDX As Single = 1 - Dim rescaleDMDY As Single = 1 - If IsDMDToBeShown Then - If Me.DMDAtDefaultLocation Then - Me.DMDSize = Me.formDMD.Size - If rescaleBackglassX <> 1 OrElse rescaleBackglassY <> 1 Then - Me.DMDLocation = New Point(Int(Me.DMDLocation.X / rescaleBackglassX), Int(Me.DMDLocation.Y / rescaleBackglassY)) - Me.DMDSize = New Size(Int(Me.DMDSize.Width / rescaleBackglassX), Int(Me.DMDSize.Height / rescaleBackglassY)) - End If - End If - - ' calculate DMD rescale factors - rescaleDMDX = Me.formDMD.Width / Me.DMDSize.Width - rescaleDMDY = Me.formDMD.Height / Me.DMDSize.Height - If Me.formDMD.BackgroundImage IsNot Nothing Then - rescaleDMDX = Me.formDMD.BackgroundImage.Width / Me.DMDSize.Width - rescaleDMDY = Me.formDMD.BackgroundImage.Height / Me.DMDSize.Height - End If - End If - - ' move and scale all picked objects - ScaleAllControls(rescaleBackglassX, rescaleBackglassY, rescaleDMDX, rescaleDMDY) - - ' show the backglass form - formBackglass.StartPosition = FormStartPosition.Manual - formBackglass.BackgroundImageLayout = ImageLayout.Stretch - formBackglass.FormBorderStyle = FormBorderStyle.None - formBackglass.ControlBox = False - formBackglass.MaximizeBox = False - formBackglass.MinimizeBox = False - formBackglass.Location = Me.BackglassScreen.Bounds.Location + Me.BackglassLocation - formBackglass.Size = Me.BackglassSize - - If Not B2SSettings.PureEXE Then - If B2SSettings.FormToFront Then - ' bring backglass screen to the front and force it to stay - formBackglass.TopMost = True - formBackglass.BringToFront() - If B2SSettings.FormNoFocus Then formBackglass.ShowInTaskbar = False - ElseIf B2SSettings.FormToBack Then - ' bring backglass screen to the back and force it to stay - formBackglass.SendToBack() - formBackglass.ShowInTaskbar = False - Else - formBackglass.BringToFront() - End If - End If - - If StartBackground Then - formBackglass.Text = "B2S Backglass" - formBackglass.ShowInTaskbar = False - - formBackglass.Show(Me.formbackground) - Else - ' Without background picture the backglass is the main form - formBackglass.Text = "B2S Backglass Server" - formBackglass.Show() - End If - - 'If B2sSettings.HideBackglass Then hide this form - ' If B2SSettings.HideB2SBackglass Then - ' formBackglass.Hide() - ' End If - - ' maybe show DMD form - If IsDMDToBeShown Then - ' set DMD location relative to the backglass location - Me.formDMD.StartPosition = FormStartPosition.Manual - Me.formDMD.BackgroundImageLayout = ImageLayout.Stretch - Me.formDMD.FormBorderStyle = FormBorderStyle.None - Me.formDMD.ControlBox = False - Me.formDMD.MaximizeBox = False - Me.formDMD.MinimizeBox = False - Me.formDMD.Location = Me.BackglassScreen.Bounds.Location + DMDKeepBackglassLocation + Me.DMDLocation - Me.formDMD.Size = Me.DMDSize - Me.formDMD.Text = "B2S DMD" - - If B2SSettings.FormToFront Then - If B2SSettings.FormNoFocus Then Me.formDMD.ShowInTaskbar = False - - Me.formDMD.BringToFront() - Me.formDMD.TopMost = True - - If Me.DMDAtDefaultLocation Then - ' DMD and Back Glass one unit, make sure they stay together - Me.formDMD.Show(formBackglass) - Else - ' DMD and Back Glass separate and accessed separately - Me.formDMD.Show() - End If - ElseIf B2SSettings.FormToBack Then - ' DMD and Back Glass one unit, make sure they are together and also make sure it is impossible to activate - Me.formDMD.ShowInTaskbar = False - Me.formDMD.SendToBack() - Me.formDMD.Show(formBackglass) - Else - ' show the DMD form without grill - Me.formDMD.BringToFront() - Me.formDMD.Show() - End If - End If - - End Sub - - Private Sub ScaleAllControls(ByVal _rescaleX As Single, ByVal _rescaleY As Single, ByVal _rescaleDMDX As Single, ByVal _rescaleDMDY As Single) - - ' get scale info for all picked objects and scale some of them - For Each cntrlinfo As KeyValuePair(Of String, B2SReelBox) In B2SData.Reels - Dim isOnDMD As Boolean = (cntrlinfo.Value.Parent IsNot Nothing AndAlso cntrlinfo.Value.Parent.Name.Equals("formDMD")) - ScaleControl(cntrlinfo.Value, If(isOnDMD, _rescaleDMDX, _rescaleX), If(isOnDMD, _rescaleDMDY, _rescaleY), isOnDMD) - Next - For Each cntrlinfo As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - Dim isOnDMD As Boolean = (cntrlinfo.Value.Parent IsNot Nothing AndAlso cntrlinfo.Value.Parent.Name.Equals("formDMD")) - ScaleControl(cntrlinfo.Value, If(isOnDMD, _rescaleDMDX, _rescaleX), If(isOnDMD, _rescaleDMDY, _rescaleY), isOnDMD, isOnDMD AndAlso DMDFlipY AndAlso Not DMDAtDefaultLocation) - Next - For Each cntrlinfo As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - Dim isOnDMD As Boolean = (cntrlinfo.Value.Parent IsNot Nothing AndAlso cntrlinfo.Value.Parent.Name.Equals("formDMD")) - ScaleControl(cntrlinfo.Value, If(isOnDMD, _rescaleDMDX, _rescaleX), If(isOnDMD, _rescaleDMDY, _rescaleY), isOnDMD, isOnDMD AndAlso DMDFlipY AndAlso Not DMDAtDefaultLocation) - Next - For Each cntrlinfo As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - Dim isOnDMD As Boolean = (cntrlinfo.Value.Parent IsNot Nothing AndAlso cntrlinfo.Value.Parent.Name.Equals("formDMD")) - ScaleControl(cntrlinfo.Value, _rescaleX, _rescaleY, isOnDMD) - Next - For Each cntrlinfo As KeyValuePair(Of String, B2SPictureBox) In B2SData.DMDIlluminations - Dim isOnDMD As Boolean = (cntrlinfo.Value.Parent IsNot Nothing AndAlso cntrlinfo.Value.Parent.Name.Equals("formDMD")) - ScaleControl(cntrlinfo.Value, _rescaleDMDX, _rescaleDMDY, isOnDMD, DMDFlipY AndAlso Not DMDAtDefaultLocation) - Next - - ' get scale info for the LED areas - For Each ledarea As KeyValuePair(Of String, B2SData.LEDAreaInfo) In B2SData.LEDAreas - If ledarea.Value.IsOnDMD Then - If formDMD IsNot Nothing Then - Dim y As Single = ledarea.Value.Rect.Y / _rescaleDMDY - If DMDFlipY AndAlso Not DMDAtDefaultLocation Then - y = formDMD.Height / _rescaleDMDY - y - ledarea.Value.Rect.Height / _rescaleDMDY - End If - ledarea.Value.Rect = Rectangle.Round(New Rectangle(ledarea.Value.Rect.X / _rescaleDMDX, y, ledarea.Value.Rect.Width / _rescaleDMDX, ledarea.Value.Rect.Height / _rescaleDMDY)) - End If - Else - ledarea.Value.Rect = Rectangle.Round(New Rectangle(ledarea.Value.Rect.X / _rescaleX, ledarea.Value.Rect.Y / _rescaleY, ledarea.Value.Rect.Width / _rescaleX, ledarea.Value.Rect.Height / _rescaleY)) - End If - Next - - ' and now recalc the backglass cut off rectangle - If BackglassCutOff <> Nothing Then - BackglassCutOff = New Rectangle(BackglassCutOff.X / _rescaleX, BackglassCutOff.Y / _rescaleY, BackglassCutOff.Width / _rescaleX, BackglassCutOff.Height / _rescaleY) - End If - - End Sub - - Private Sub ScaleControl(ByVal _cntrl As B2SBaseBox, ByVal _rescaleX As Single, ByVal _rescaleY As Single, ByVal isOnDMD As Boolean, Optional ByVal flipY As Boolean = False) - - ' calculate the exact location and size of all controls - If Not isOnDMD AndAlso BackglassCutOff <> Nothing Then - If BackglassCutOff.IntersectsWith(New Rectangle(_cntrl.Left, _cntrl.Top, _cntrl.Width, _cntrl.Height)) Then - _cntrl.RectangleF = New RectangleF(0, 0, 0, 0) - ElseIf BackglassCutOff.Top < _cntrl.Top Then - _cntrl.RectangleF = New RectangleF(_cntrl.Left / _rescaleX, (_cntrl.Top - Me.BackglassSmallGrillHeight) / _rescaleY, _cntrl.Width / _rescaleX, _cntrl.Height / _rescaleY) - Else - _cntrl.RectangleF = New RectangleF(_cntrl.Left / _rescaleX, _cntrl.Top / _rescaleY, _cntrl.Width / _rescaleX, _cntrl.Height / _rescaleY) - End If - Else - _cntrl.RectangleF = New RectangleF(_cntrl.Left / _rescaleX, _cntrl.Top / _rescaleY, _cntrl.Width / _rescaleX, _cntrl.Height / _rescaleY) - End If - - ' scale not more than the LED and reel boxes - If TypeOf _cntrl Is B2SLEDBox OrElse TypeOf _cntrl Is B2SReelBox Then - _cntrl.Location = New Point(Point.Round(_cntrl.RectangleF.Location)) - _cntrl.Size = New Size(Size.Round(_cntrl.RectangleF.Size)) - End If - - ' maybe flip DMD images - If flipY AndAlso formDMD IsNot Nothing Then - If TypeOf _cntrl Is B2SLEDBox Then - Else - Dim picbox As B2SPictureBox = TryCast(_cntrl, B2SPictureBox) - If picbox IsNot Nothing Then - ' set new top location - Dim newY As Single = formDMD.Height / _rescaleY - picbox.RectangleF.Y - picbox.RectangleF.Height - picbox.RectangleF = New RectangleF(picbox.RectangleF.X, newY, picbox.RectangleF.Width, picbox.RectangleF.Height) - ' flip the images - If picbox.BackgroundImage IsNot Nothing Then - picbox.BackgroundImage.RotateFlip(RotateFlipType.RotateNoneFlipY) - End If - If picbox.OffImage IsNot Nothing Then - picbox.OffImage.RotateFlip(RotateFlipType.RotateNoneFlipY) - End If - End If - End If - End If - - End Sub - Private Sub ScaleControl(ByVal _cntrl As Dream7Display, ByVal _rescaleX As Single, ByVal _rescaleY As Single, ByVal isOnDMD As Boolean, Optional ByVal flipY As Boolean = False) - - ' store current LED location - Dim rectF As RectangleF = New RectangleF(New PointF(_cntrl.Left / _rescaleX, _cntrl.Top / _rescaleY), New Size(_cntrl.Width / _rescaleX, _cntrl.Height / _rescaleY)) - - ' scale LED display - _cntrl.Location = Point.Round(New PointF(_cntrl.Left / _rescaleX, _cntrl.Top / _rescaleY)) - _cntrl.Size = Size.Round(New Size(_cntrl.Width / _rescaleX, _cntrl.Height / _rescaleY)) - _cntrl.Spacing = _cntrl.Spacing / _rescaleX - _cntrl.OffsetWidth = _cntrl.OffsetWidth / _rescaleX - _cntrl.Thickness = _cntrl.Thickness / _rescaleX - - ' maybe flip LEDs - If flipY Then - _cntrl.Mirrored = True - ' set new top location - If formDMD IsNot Nothing Then - Dim newY As Single = formDMD.Height / _rescaleY - rectF.Y - rectF.Height - _cntrl.Location = Point.Round(New PointF(rectF.X, newY)) - End If - End If - - End Sub - - Private Function ResizeImage(ByVal sourceimage As Image, ByVal grillheight As Integer) As Image - Dim imageWithoutGrill As Bitmap = New Bitmap(sourceimage.Width, sourceimage.Height - grillheight) - Using gr As Graphics = Graphics.FromImage(imageWithoutGrill) - gr.DrawImage(sourceimage, New Rectangle(0, 0, imageWithoutGrill.Width, imageWithoutGrill.Height + grillheight)) - End Using - Return imageWithoutGrill - End Function - Private Function CutOutImage(ByVal sourceimage As Image, ByVal grillheight As Integer, ByVal smallgrillheight As Integer) As Image - Dim imageWithoutSmallGrill As Bitmap = New Bitmap(sourceimage.Width, sourceimage.Height - smallgrillheight) - Using imageBackglass As Bitmap = PartFromImage(sourceimage, New Rectangle(0, 0, sourceimage.Width, sourceimage.Height - grillheight - smallgrillheight)) - Using imageGrill As Bitmap = PartFromImage(sourceimage, New Rectangle(0, sourceimage.Height - grillheight, sourceimage.Width, grillheight)) - Using gr As Graphics = Graphics.FromImage(imageWithoutSmallGrill) - gr.DrawImage(imageBackglass, New Rectangle(0, 0, imageBackglass.Width, imageBackglass.Height)) - gr.DrawImage(imageGrill, New Rectangle(0, imageBackglass.Height, imageGrill.Width, imageGrill.Height)) - End Using - End Using - End Using - Return imageWithoutSmallGrill - End Function - Private Function PartFromImage(image As Image, area As Rectangle) As Image - If image Is Nothing Then Return Nothing - Dim imageBackground As Bitmap = CType(image, Bitmap) - Dim imagePart As Image = New Bitmap(area.Width, area.Height) - imagePart = imageBackground.Clone(area, Imaging.PixelFormat.Format32bppArgb) - Return imagePart - End Function - -#End Region - - -#Region "screenshot stuff" - - Public Function MakeScreenShot(ByVal filename As String, - ByVal fileformat As Imaging.ImageFormat) As Boolean - - ' get screenshot - Dim screenshot As Bitmap = New Bitmap(formBackglass.Width, formBackglass.Height) - Using gr As Graphics = Graphics.FromImage(screenshot) - gr.CopyFromScreen(formBackglass.Location, Point.Empty, formBackglass.Size) - End Using - - ' save it - Try - screenshot.Save(filename, fileformat) - Catch ex As Exception - MessageBox.Show(ex.Message, My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error) - Return False - Finally - screenshot.Dispose() - screenshot = Nothing - End Try - - Return True - - End Function - -#End Region - - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSettings.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSettings.vb deleted file mode 100644 index bf8c563..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSettings.vb +++ /dev/null @@ -1,551 +0,0 @@ -Imports System -Imports System.IO -Imports System.Reflection -Imports System.Windows.Forms -Imports System.Xml -Imports Microsoft.Win32 - -Public Class B2SSettings - - Public Const DirectB2SVersion As String = "3.0.0" - Public Const MinimumDirectB2SVersion As String = "1.0" - Public Shared Property BackglassFileVersion() As String = String.Empty - - Public Enum eDefaultStartMode - Standard = 1 - EXE = 2 - End Enum - - Public Enum eDMDTypes - Standard = 0 - TwoMonitorSetup = 1 - ThreeMonitorSetup = 2 - Hidden = 3 - End Enum - Public Enum eLEDTypes - Undefined = 0 - Rendered = 1 - Dream7 = 2 - End Enum - Public Enum eImageFileType - PNG = 0 - JPG = 1 - GIF = 2 - BMP = 3 - End Enum - Public Enum eDualMode - NotSet = 0 - Authentic = 1 - Fantasy = 2 - End Enum - - Private Const filename As String = "B2STableSettings.xml" - Public Shared Property B2SScreenResFileName As String = SafeReadRegistry("Software\B2S", "B2SScreenResFileNameOverride", "ScreenRes.txt") - Public Shared Property B2STableSettingsExtendedPath() As Boolean = SafeReadRegistry("Software\B2S", "B2STableSettingsExtendedPath", "0") = "1" - Public Shared Property B2SWindowPunchActive() As Boolean = SafeReadRegistry("Software\B2S", "B2SWindowPunchActive", "0") = "1" - Public Shared Property B2SDebugLog() As Boolean = SafeReadRegistry("Software\B2S", "B2SDebugLog", "0") = "1" - Public Shared Property SettingFilePath() As String = Path.GetFullPath(GetSettingFilename()) - - Public Shared Property MatchingFileName() As String = String.Empty - Public Shared Property MatchingFileNames() As String() = Nothing - - Public Shared Property PluginsFilePath() As String = String.Empty - Public Shared Property LoadedResFilePath() As String = String.Empty - Public Shared Property LogPath() As String = String.Empty - Public Shared Property IsLampsStateLogOn() As Boolean = False - Public Shared Property IsSolenoidsStateLogOn() As Boolean = False - Public Shared Property IsGIStringsStateLogOn() As Boolean = False - Public Shared Property IsLEDsStateLogOn() As Boolean = False - Public Shared Property IsPaintingLogOn() As Boolean = True - Public Shared Property IsStatisticsBackglassOn() As Boolean = True - Public Shared Property IsBackglassSearchLogOn As Boolean = False - - Public Shared Property ShowStartupError() As Boolean = False ' set to True to display errors - - Public Shared Property ArePluginsOn() As Boolean = False - - Public Shared Property CPUAffinityMask() As Integer = 0 - - Public Shared Property ScreenshotPath() As String = String.Empty - Public Shared Property ScreenshotFileType() As eImageFileType = eImageFileType.PNG - - Public Shared Property DMDType() As eDMDTypes = eDMDTypes.Standard - - Public Shared Property AllOut() As Boolean = False - Public Shared Property AllOff() As Boolean = False - Public Shared Property LampsOff() As Boolean = False - Public Shared Property SolenoidsOff() As Boolean = False - Public Shared Property GIStringsOff() As Boolean = False - Public Shared Property LEDsOff() As Boolean = False - Public Shared Property StartAsEXE() As Boolean = True - Public Shared Property PureEXE() As Boolean = False - Public Shared Property DefaultStartMode() As eDefaultStartMode = eDefaultStartMode.EXE - Public Shared Property DisableFuzzyMatching() As Boolean = True - - Public Shared Property LampsSkipFrames() As Integer = 0 - Public Shared Property SolenoidsSkipFrames() As Integer = 0 - Public Shared Property GIStringsSkipFrames() As Integer = 0 - Public Shared Property LEDsSkipFrames() As Integer = 0 - - Public Shared Property UsedLEDType() As eLEDTypes = eLEDTypes.Undefined - - Public Shared Property IsGlowBulbOn() As Boolean = False - Public Shared Property GlowIndex() As Integer = -1 - Public Shared Property DefaultGlow() As Integer = -1 - Public Shared Property DisableBuiltInEMReelSound() As Nullable(Of Boolean) = Nothing - Public Shared Property FormToFront() As Boolean = True - Public Shared Property FormToBack() As Boolean = False - Public Shared Property FormNoFocus() As Boolean = False - Public Shared Property HideGrill() As System.Windows.Forms.CheckState = Windows.Forms.CheckState.Indeterminate - Public Shared Property HideB2SDMD() As Boolean = False - Public Shared Property HideB2SBackglass() As Boolean = False - Public Shared Property HideDMD() As System.Windows.Forms.CheckState = Windows.Forms.CheckState.Indeterminate - - Public Shared Property AnimationSlowDowns() As Generic.Dictionary(Of String, Integer) = New Generic.Dictionary(Of String, Integer) - Public Shared Property AllAnimationSlowDown() As Integer = 1 - - Public Shared Property HyperpinXMLFile() As String = String.Empty - - Public Shared Property CurrentDualMode() As B2SSettings.eDualMode = eDualMode.NotSet - - Public Shared Property StartBackground() As Nullable(Of Boolean) = Nothing - Public Shared Property GlobalStartBackground() As Nullable(Of Boolean) = Nothing - - - Public Shared ReadOnly Property IsROMControlled() As Boolean - Get - Return (GameName.Length > 0) - End Get - End Property - - Private Shared _GameName As String = String.Empty - Public Shared Property GameName() As String - Get - Return _GameName - End Get - Set(ByVal value As String) - _GameName = value - Load(False) - End Set - End Property - - Private Shared _IsGameNameFound As Boolean = False - Public Shared ReadOnly Property IsGameNameFound() As Boolean - Get - Return _IsGameNameFound - End Get - End Property - - Private Shared _B2SName As String = String.Empty - Public Shared Property B2SName() As String - Get - Return _B2SName - End Get - Set(ByVal value As String) - _B2SName = value - Load(False) - End Set - End Property - - Public Shared Function SafeReadRegistry(ByVal keyname As String, ByVal valuename As String, ByVal defaultvalue As String) As String - ' Public Property GlobalFileName As String = SafeReadRegistry("Software\B2S", "B2SScreenResFileNameOverride", "ScreenRes.txt") - - Try - Return CStr(Registry.CurrentUser.OpenSubKey(keyname).GetValue(valuename, defaultvalue)) - Catch ex As Exception - Return defaultvalue - End Try - End Function - - Public Shared Function GetSettingFilename() As String - If IO.File.Exists(filename) Then - Return filename - ElseIf B2STableSettingsExtendedPath And IO.File.Exists(IO.Path.Combine(Application.StartupPath(), filename)) Then - Return IO.Path.Combine(Application.StartupPath(), filename) - End If - Return filename - End Function - - Public Shared Sub LoadGlobalAndTableSettings(xmlNode As Xml.XmlNode) - If xmlNode.SelectSingleNode("DisableBuiltInEMReelSound") IsNot Nothing Then DisableBuiltInEMReelSound = (xmlNode.SelectSingleNode("DisableBuiltInEMReelSound").InnerText = "1") - If xmlNode.SelectSingleNode("HideGrill") IsNot Nothing Then HideGrill = CInt(xmlNode.SelectSingleNode("HideGrill").InnerText) - If xmlNode.SelectSingleNode("HideB2SDMD") IsNot Nothing Then HideB2SDMD = (xmlNode.SelectSingleNode("HideB2SDMD").InnerText = "1") - If xmlNode.SelectSingleNode("HideB2SBackglass") IsNot Nothing Then HideB2SBackglass = (xmlNode.SelectSingleNode("HideB2SBackglass").InnerText = "1") - If xmlNode.SelectSingleNode("HideDMD") IsNot Nothing Then HideDMD = CInt(xmlNode.SelectSingleNode("HideDMD").InnerText) - If xmlNode.SelectSingleNode("LampsBlackTurns") IsNot Nothing Then LampsSkipFrames = CInt(xmlNode.SelectSingleNode("LampsBlackTurns").InnerText) - If xmlNode.SelectSingleNode("SolenoidsBlackTurns") IsNot Nothing Then SolenoidsSkipFrames = CInt(xmlNode.SelectSingleNode("SolenoidsBlackTurns").InnerText) - If xmlNode.SelectSingleNode("GIStringsBlackTurns") IsNot Nothing Then GIStringsSkipFrames = CInt(xmlNode.SelectSingleNode("GIStringsBlackTurns").InnerText) - If xmlNode.SelectSingleNode("LEDsBlackTurns") IsNot Nothing Then LEDsSkipFrames = CInt(xmlNode.SelectSingleNode("LEDsBlackTurns").InnerText) - If xmlNode.SelectSingleNode("LampsSkipFrames") IsNot Nothing Then LampsSkipFrames = CInt(xmlNode.SelectSingleNode("LampsSkipFrames").InnerText) - If xmlNode.SelectSingleNode("SolenoidsSkipFrames") IsNot Nothing Then SolenoidsSkipFrames = CInt(xmlNode.SelectSingleNode("SolenoidsSkipFrames").InnerText) - If xmlNode.SelectSingleNode("GIStringsSkipFrames") IsNot Nothing Then GIStringsSkipFrames = CInt(xmlNode.SelectSingleNode("GIStringsSkipFrames").InnerText) - If xmlNode.SelectSingleNode("LEDsSkipFrames") IsNot Nothing Then LEDsSkipFrames = CInt(xmlNode.SelectSingleNode("LEDsSkipFrames").InnerText) - If xmlNode.SelectSingleNode("UsedLEDType") IsNot Nothing Then UsedLEDType = CInt(xmlNode.SelectSingleNode("UsedLEDType").InnerText) - If xmlNode.SelectSingleNode("IsGlowBulbOn") IsNot Nothing Then IsGlowBulbOn = (xmlNode.SelectSingleNode("IsGlowBulbOn").InnerText = "1") - If xmlNode.SelectSingleNode("GlowIndex") IsNot Nothing Then GlowIndex = CInt(xmlNode.SelectSingleNode("GlowIndex").InnerText) - If xmlNode.SelectSingleNode("StartAsEXE") IsNot Nothing Then StartAsEXE = (xmlNode.SelectSingleNode("StartAsEXE").InnerText = "1") - If xmlNode.SelectSingleNode("StartBackground") IsNot Nothing Then StartBackground = (xmlNode.SelectSingleNode("StartBackground").InnerText = "1") - - If Not PureEXE Then - If xmlNode.SelectSingleNode("FormToFront") IsNot Nothing Then FormToFront = (xmlNode.SelectSingleNode("FormToFront").InnerText = "1") - If xmlNode.SelectSingleNode("FormToBack") IsNot Nothing Then - FormToBack = (xmlNode.SelectSingleNode("FormToBack").InnerText = "1") - If FormToBack Then FormToFront = False - FormNoFocus = True - End If - If xmlNode.SelectSingleNode("FormNoFocus") IsNot Nothing Then - FormNoFocus = (xmlNode.SelectSingleNode("FormNoFocus").InnerText = "1") - End If - End If - End Sub - - Public Shared Sub Load(Optional ByVal resetLogs As Boolean = True) - ClearAll() - - ' load settings - If IO.File.Exists(SettingFilePath) Then - Dim XML As Xml.XmlDocument = New Xml.XmlDocument - Try - XML.Load(SettingFilePath) - Catch ex As Exception - MessageBox.Show("The following error occurred opening the file '" & Path.GetFileName(SettingFilePath) & "':" & vbCrLf & vbCrLf & ex.Message, My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - Throw - End Try - - If XML IsNot Nothing AndAlso XML.SelectSingleNode("B2STableSettings") IsNot Nothing Then - Dim nodeHeader As Xml.XmlNode = XML.SelectSingleNode("B2STableSettings") - ' get plugin status - If nodeHeader.SelectSingleNode("ArePluginsOn") IsNot Nothing Then ArePluginsOn = (nodeHeader.SelectSingleNode("ArePluginsOn").InnerText = "1") - ' get default start mode - If nodeHeader.SelectSingleNode("DefaultStartMode") IsNot Nothing Then DefaultStartMode = CInt(nodeHeader.SelectSingleNode("DefaultStartMode").InnerText) - If DefaultStartMode <> eDefaultStartMode.Standard Then DefaultStartMode = eDefaultStartMode.EXE - If DefaultStartMode = eDefaultStartMode.Standard Then StartAsEXE = False - If nodeHeader.SelectSingleNode("DisableFuzzyMatching") IsNot Nothing Then DisableFuzzyMatching = (nodeHeader.SelectSingleNode("DisableFuzzyMatching").InnerText = "1") - - ' get overall settings - If nodeHeader.SelectSingleNode("CPUAffinityMask") IsNot Nothing Then CPUAffinityMask = CInt(nodeHeader.SelectSingleNode("CPUAffinityMask").InnerText) - If nodeHeader.SelectSingleNode("LogPath") IsNot Nothing Then LogPath = nodeHeader.SelectSingleNode("LogPath").InnerText - If nodeHeader.SelectSingleNode("IsLampsStateLogOn") IsNot Nothing Then IsLampsStateLogOn = (nodeHeader.SelectSingleNode("IsLampsStateLogOn").InnerText = "1") - If nodeHeader.SelectSingleNode("IsSolenoidsStateLogOn") IsNot Nothing Then IsSolenoidsStateLogOn = (nodeHeader.SelectSingleNode("IsSolenoidsStateLogOn").InnerText = "1") - If nodeHeader.SelectSingleNode("IsGIStringsStateLogOn") IsNot Nothing Then IsGIStringsStateLogOn = (nodeHeader.SelectSingleNode("IsGIStringsStateLogOn").InnerText = "1") - If nodeHeader.SelectSingleNode("IsLEDsStateLogOn") IsNot Nothing Then IsLEDsStateLogOn = (nodeHeader.SelectSingleNode("IsLEDsStateLogOn").InnerText = "1") - If nodeHeader.SelectSingleNode("IsPaintingLogOn") IsNot Nothing Then IsPaintingLogOn = (nodeHeader.SelectSingleNode("IsPaintingLogOn").InnerText = "1") - If nodeHeader.SelectSingleNode("IsStatisticsBackglassOn") IsNot Nothing Then IsStatisticsBackglassOn = (nodeHeader.SelectSingleNode("IsStatisticsBackglassOn").InnerText = "1") - If nodeHeader.SelectSingleNode("IsBackglassSearchLogOn") IsNot Nothing Then IsBackglassSearchLogOn = (nodeHeader.SelectSingleNode("IsBackglassSearchLogOn").InnerText = "1") - If nodeHeader.SelectSingleNode("ShowStartupError") IsNot Nothing Then ShowStartupError = (nodeHeader.SelectSingleNode("ShowStartupError").InnerText = "1") - LoadGlobalAndTableSettings(nodeHeader) - If StartBackground.HasValue Then GlobalStartBackground = StartBackground - StartBackground = Nothing - - If nodeHeader.SelectSingleNode("ScreenshotPath") IsNot Nothing Then - ScreenshotPath = nodeHeader.SelectSingleNode("ScreenshotPath").InnerText - ScreenshotFileType = CInt(nodeHeader.SelectSingleNode("ScreenshotFileType").InnerText) - End If - If nodeHeader.SelectSingleNode("HyperpinXMLFile") IsNot Nothing Then - HyperpinXMLFile = nodeHeader.SelectSingleNode("HyperpinXMLFile").InnerText - End If - If resetLogs AndAlso (IsLampsStateLogOn OrElse IsSolenoidsStateLogOn OrElse IsGIStringsStateLogOn OrElse IsLEDsStateLogOn OrElse IsPaintingLogOn) Then - AddNode(XML, nodeHeader, "IsLampsStateLogOn", "0") - AddNode(XML, nodeHeader, "IsSolenoidsStateLogOn", "0") - AddNode(XML, nodeHeader, "IsGIStringsStateLogOn", "0") - AddNode(XML, nodeHeader, "IsLEDsStateLogOn", "0") - AddNode(XML, nodeHeader, "IsPaintingLogOn", "0") - XML.Save(SettingFilePath) - End If - ' set default dual mode - 'If B2SData.DualBackglass Then - CurrentDualMode = eDualMode.Authentic - 'End If - ' maybe get table specific settings - If Not String.IsNullOrEmpty(GameName) OrElse Not String.IsNullOrEmpty(B2SName) Then - Dim nodeTable As Xml.XmlElement = nodeHeader.SelectSingleNode(If(Not String.IsNullOrEmpty(GameName), GameName, B2SName)) - If nodeTable IsNot Nothing Then - _IsGameNameFound = True - LoadGlobalAndTableSettings(nodeTable) - If nodeTable.SelectSingleNode("DualMode") IsNot Nothing Then CurrentDualMode = CInt(nodeTable.SelectSingleNode("DualMode").InnerText) - If nodeTable.SelectSingleNode("MatchingFileName") IsNot Nothing Then MatchingFileName = nodeTable.SelectSingleNode("MatchingFileName").InnerText - - Dim nodeAnimations As Xml.XmlElement = nodeTable.SelectSingleNode("Animations") - If nodeAnimations IsNot Nothing Then - For Each nodeAnimation As Xml.XmlElement In nodeAnimations.ChildNodes - If nodeAnimation.Name.Equals("Animation") Then - AnimationSlowDowns.Add(nodeAnimation.Attributes("Name").InnerText, CInt(nodeAnimation.Attributes("SlowDown").InnerText)) - ElseIf nodeAnimation.Name.Equals("AllAnimations") Then - AllAnimationSlowDown = CInt(nodeAnimation.Attributes("SlowDown").InnerText) - End If - Next - End If - End If - End If - End If - End If - End Sub - Public Shared Sub Save(Optional ByVal b2sanimation As B2SAnimation = Nothing, - Optional ByVal justSaveDualMode As Boolean = False, - Optional ByVal justSaveHyperpinXMLFile As Boolean = False) - ' save settings - Dim XML As Xml.XmlDocument = New Xml.XmlDocument - If IO.File.Exists(SettingFilePath) Then XML.Load(SettingFilePath) - Dim nodeHeader As Xml.XmlElement = AddHeader(XML, XML, "B2STableSettings") - If justSaveDualMode Then - If B2SData.DualBackglass AndAlso (Not String.IsNullOrEmpty(GameName) OrElse Not String.IsNullOrEmpty(B2SName)) Then - Dim nodeTable As Xml.XmlElement = AddHeader(XML, nodeHeader, If(Not String.IsNullOrEmpty(GameName), GameName, B2SName)) - AddNode(XML, nodeTable, "DualMode", CInt(CurrentDualMode).ToString()) - End If - ElseIf justSaveHyperpinXMLFile Then - AddNode(XML, nodeHeader, "HyperpinXMLFile", HyperpinXMLFile) - Else - AddNode(XML, nodeHeader, "ArePluginsOn", If(ArePluginsOn, "1", "0")) - AddNode(XML, nodeHeader, "DefaultStartMode", CInt(DefaultStartMode).ToString()) - AddNode(XML, nodeHeader, "DisableFuzzyMatching", If(DisableFuzzyMatching, "1", "0")) - AddNode(XML, nodeHeader, "LogPath", LogPath) - AddNode(XML, nodeHeader, "IsLampsStateLogOn", If(IsLampsStateLogOn, "1", "0")) - AddNode(XML, nodeHeader, "IsSolenoidsStateLogOn", If(IsSolenoidsStateLogOn, "1", "0")) - AddNode(XML, nodeHeader, "IsGIStringsStateLogOn", If(IsGIStringsStateLogOn, "1", "0")) - AddNode(XML, nodeHeader, "IsLEDsStateLogOn", If(IsLEDsStateLogOn, "1", "0")) - AddNode(XML, nodeHeader, "IsPaintingLogOn", If(IsPaintingLogOn, "1", "0")) - AddNode(XML, nodeHeader, "IsStatisticsBackglassOn", If(IsStatisticsBackglassOn, "1", "0")) - AddNode(XML, nodeHeader, "ShowStartupError", If(ShowStartupError, "1", "0")) - AddNode(XML, nodeHeader, "ScreenshotPath", ScreenshotPath) - AddNode(XML, nodeHeader, "ScreenshotFileType", CInt(ScreenshotFileType).ToString()) - ' Only save the StartBackground setting on global level if it is definded - If GlobalStartBackground.HasValue Then - AddNode(XML, nodeHeader, "StartBackground", If(GlobalStartBackground, "1", "0")) - End If - If Not String.IsNullOrEmpty(GameName) OrElse Not String.IsNullOrEmpty(B2SName) Then - Dim nodeTable As Xml.XmlElement = AddHeader(XML, nodeHeader, If(Not String.IsNullOrEmpty(GameName), GameName, B2SName)) - nodeTable.RemoveAll() - AddNode(XML, nodeTable, "HideGrill", CInt(HideGrill).ToString()) - AddNode(XML, nodeTable, "HideB2SDMD", If(HideB2SDMD, "1", "0")) - AddNode(XML, nodeTable, "HideB2SBackglass", If(HideB2SBackglass, "1", "0")) - AddNode(XML, nodeTable, "HideDMD", CInt(HideDMD).ToString()) - If Not String.IsNullOrEmpty(MatchingFileName) Then - AddNode(XML, nodeTable, "MatchingFileName", MatchingFileName) - End If - AddNode(XML, nodeTable, "LampsSkipFrames", LampsSkipFrames.ToString()) - AddNode(XML, nodeTable, "SolenoidsSkipFrames", SolenoidsSkipFrames.ToString()) - AddNode(XML, nodeTable, "GIStringsSkipFrames", GIStringsSkipFrames.ToString()) - If Not B2SData.UseReels Then - AddNode(XML, nodeTable, "LEDsSkipFrames", LEDsSkipFrames.ToString()) - AddNode(XML, nodeTable, "UsedLEDType", CInt(UsedLEDType).ToString()) - AddNode(XML, nodeTable, "IsGlowBulbOn", If(IsGlowBulbOn, "1", "0")) - AddNode(XML, nodeTable, "GlowIndex", GlowIndex.ToString()) - End If - AddNode(XML, nodeTable, "StartAsEXE", If(StartAsEXE, "1", "0")) - - ' Only save the StartBackground setting on table level if not set to standard - If StartBackground.HasValue Then - AddNode(XML, nodeTable, "StartBackground", If(StartBackground, "1", "0")) - End If - If DisableBuiltInEMReelSound.HasValue Then - AddNode(XML, nodeTable, "DisableBuiltInEMReelSound", If(DisableBuiltInEMReelSound, "1", "0")) - End If - - AddNode(XML, nodeTable, "FormToFront", If(FormToFront, "1", "0")) - AddNode(XML, nodeTable, "FormToBack", If(FormToBack, "1", "0")) - AddNode(XML, nodeTable, "FormNoFocus", If(FormNoFocus, "1", "0")) - - If b2sanimation IsNot Nothing Then - Dim nodeAnimations As Xml.XmlElement = AddHeader(XML, nodeTable, "Animations") - nodeAnimations.RemoveAll() - For Each animationname As String In b2sanimation.Animations - Dim slowdown As Integer = b2sanimation.AnimationSlowDown(animationname) - If slowdown <> 1 Then - Dim nodeAnimation As Xml.XmlElement = XML.CreateElement("Animation") - nodeAnimations.AppendChild(nodeAnimation) - nodeAnimation.SetAttribute("Name", animationname) - nodeAnimation.SetAttribute("SlowDown", slowdown) - End If - Next - If AllAnimationSlowDown <> 1 Then - Dim nodeAnimation As Xml.XmlElement = XML.CreateElement("AllAnimations") - nodeAnimations.AppendChild(nodeAnimation) - nodeAnimation.SetAttribute("SlowDown", AllAnimationSlowDown) - End If - End If - End If - End If - XML.Save(SettingFilePath) - End Sub - - Public Shared Sub ClearAll() - ' do not add GameName or B2SName here - DefaultStartMode = eDefaultStartMode.EXE - DisableFuzzyMatching = True - LogPath = String.Empty - IsLampsStateLogOn = False - IsSolenoidsStateLogOn = False - IsGIStringsStateLogOn = False - IsLEDsStateLogOn = False - IsPaintingLogOn = False - IsBackglassSearchLogOn = False - IsStatisticsBackglassOn = False - ScreenshotPath = String.Empty - ScreenshotFileType = eImageFileType.PNG - DMDType = eDMDTypes.Standard - AllOut = False - AllOff = False - LampsOff = False - SolenoidsOff = False - GIStringsOff = False - LEDsOff = False - StartAsEXE = True - LampsSkipFrames = 0 - SolenoidsSkipFrames = 0 - GIStringsSkipFrames = 0 - LEDsSkipFrames = 0 - UsedLEDType = eLEDTypes.Undefined - IsGlowBulbOn = False - GlowIndex = -1 - DefaultGlow = -1 - HideGrill = System.Windows.Forms.CheckState.Indeterminate - HideB2SDMD = False - HideB2SBackglass = False - HideDMD = System.Windows.Forms.CheckState.Indeterminate - HyperpinXMLFile = String.Empty - AnimationSlowDowns.Clear() - AllAnimationSlowDown = 1 - CurrentDualMode = eDualMode.NotSet - FormToFront = True - FormToBack = False - FormNoFocus = False - End Sub - - Private Shared Function AddHeader(XML As Xml.XmlDocument, parentnode As Xml.XmlNode, nodename As String) As Xml.XmlNode - Dim node As Xml.XmlElement = parentnode.SelectSingleNode(nodename) - If node Is Nothing Then - node = XML.CreateElement(nodename) - parentnode.AppendChild(node) - End If - Return node - End Function - Private Shared Sub AddNode(XML As Xml.XmlDocument, parentnode As Xml.XmlNode, nodename As String, nodevalue As String) - Dim node As Xml.XmlElement = parentnode.SelectSingleNode(nodename) - If node Is Nothing Then - node = XML.CreateElement(nodename) - parentnode.AppendChild(node) - End If - node.InnerText = nodevalue - End Sub - - Public Shared Function LocateHyperpinXMLFile() As Boolean - If Not String.IsNullOrEmpty(HyperpinXMLFile) AndAlso HyperpinXMLFile <> "Unknown" AndAlso Not IO.File.Exists(HyperpinXMLFile) Then - HyperpinXMLFile = String.Empty - End If - If String.IsNullOrEmpty(HyperpinXMLFile) Then - Dim vp As DirectoryInfo = Directory.GetParent(IO.Directory.GetCurrentDirectory()) - Dim vpparent As DirectoryInfo = vp.Parent() - ' get thru all directories of the parent of visual pinball - HyperpinXMLFile = CheckDir(vpparent.FullName) - ' maybe check the next parent - If String.IsNullOrEmpty(HyperpinXMLFile) Then - Dim nextparent As DirectoryInfo = vpparent - Do While Not vp.Root.FullName.Equals(nextparent.Parent.FullName) - nextparent = nextparent.Parent - Loop - If Not vpparent.Equals(nextparent) Then - HyperpinXMLFile = CheckDir(nextparent.FullName) - End If - End If - If String.IsNullOrEmpty(HyperpinXMLFile) Then - If IO.Directory.Exists(IO.Path.Combine(vp.Root.FullName, "Hyperpin")) Then - HyperpinXMLFile = CheckDir(IO.Path.Combine(vp.Root.FullName, "Hyperpin")) - End If - End If - If String.IsNullOrEmpty(HyperpinXMLFile) Then - If IO.Directory.Exists(IO.Path.Combine(vp.Root.FullName, "PinballX")) Then - HyperpinXMLFile = CheckDir(IO.Path.Combine(vp.Root.FullName, "PinballX")) - End If - End If - If String.IsNullOrEmpty(HyperpinXMLFile) Then - ' not found - HyperpinXMLFile = "Unknown" - End If - Save(, , True) - End If - Return (HyperpinXMLFile <> "Unknown") - End Function - Public Shared ReadOnly Property HyperpinName() As String - Get - Dim ret As String = String.Empty - Dim searchPathLog As Log = New Log("BackglassSearchPath") - searchPathLog.IsLogOn = B2SSettings.IsBackglassSearchLogOn - - searchPathLog.WriteLogEntry("Start Search Hyperpinname") - If HyperpinXMLFile <> "Unknown" Then - If Not String.IsNullOrEmpty(HyperpinXMLFile) AndAlso IO.File.Exists(HyperpinXMLFile) Then - Dim Xml As Xml.XmlDocument = New Xml.XmlDocument - Xml.Load(HyperpinXMLFile) - searchPathLog.WriteLogEntry("Loop Hyperpinname") - If Xml.SelectNodes("menu") IsNot Nothing Then - For Each node As Xml.XmlNode In Xml.SelectNodes("menu") - For Each gamenode As Xml.XmlNode In node.SelectNodes("game") - If gamenode.Attributes("name") IsNot Nothing Then - Dim name As String = gamenode.Attributes("name").InnerText - searchPathLog.WriteLogEntry("Check name: " + name + " compare with: " + B2SData.TableFileName) - If name.Equals(B2SData.TableFileName, StringComparison.CurrentCultureIgnoreCase) Then - ret = gamenode.SelectSingleNode("description").InnerText - searchPathLog.WriteLogEntry("Found: " + ret + "end search") - Exit For - Else 'Westworld, allow optional syntax - If gamenode.SelectSingleNode("gamename") IsNot Nothing Then - Dim gamename As String = gamenode.SelectSingleNode("gamename").InnerText - If Not String.IsNullOrEmpty(gamename) Then - searchPathLog.WriteLogEntry("Check gamename: " + gamename + " compare with: " + B2SSettings.GameName) - If gamename.Equals(B2SSettings.GameName, StringComparison.CurrentCultureIgnoreCase) Then - ret = gamenode.SelectSingleNode("description").InnerText - searchPathLog.WriteLogEntry("Found: " + ret + "end search") - Exit For - End If - End If - End If - - 'last chance, try rom name - If gamenode.SelectSingleNode("rom") IsNot Nothing Then - Dim romname As String = gamenode.SelectSingleNode("rom").InnerText - If Not String.IsNullOrEmpty(romname) Then - searchPathLog.WriteLogEntry("Check rom: " + romname + " compare with: " + B2SSettings.GameName) - If romname.Equals(B2SSettings.GameName, StringComparison.CurrentCultureIgnoreCase) Then - ret = gamenode.SelectSingleNode("description").InnerText - searchPathLog.WriteLogEntry("Found: " + ret + "end search") - Exit For - End If - End If - End If - End If - End If - Next - If Not String.IsNullOrEmpty(ret) Then Exit For - Next - End If - End If - If String.IsNullOrEmpty(ret) Then - ret = B2SData.TableFileName - searchPathLog.WriteLogEntry("Nothing found, using: " + ret + "as replacement") - End If - End If - ' get out - Return ret - End Get - End Property - - Private Shared Function CheckDir(ByVal direc As String) As String - Dim ret As String = String.Empty - If File.Exists(Path.Combine(direc, "hyperpin.exe")) OrElse File.Exists(Path.Combine(direc, "pinballx.exe")) Then - If File.Exists(Path.Combine(direc, "Databases", "Visual Pinball", "Visual Pinball.xml")) Then - ret = Path.Combine(direc, "Databases", "Visual Pinball", "Visual Pinball.xml") - End If - End If - If String.IsNullOrEmpty(ret) AndAlso Directory.Exists(direc) Then - For Each d As String In Directory.GetDirectories(direc) - Try - ret = CheckDir(d) - Catch - End Try - If Not String.IsNullOrEmpty(ret) Then Exit For - Next - End If - Return ret - End Function - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSystem.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSystem.vb deleted file mode 100644 index 13a88ac..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/B2SSystem.vb +++ /dev/null @@ -1,185 +0,0 @@ -Imports System -Imports System.Text -Imports System.Windows.Forms - -Public Class B2SSystem - - Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Int32) As Short - - Private Const writeLogFile As Boolean = False - - Private formBackglass As formBackglass = Nothing - - Public Class B2SSystemEventArgs - Inherits EventArgs - - Public Value As Integer() - Public IsValueChanged As Boolean() - - Public Sub New(ByVal _value As Integer(), ByVal _isValueChanged As Boolean()) - Value = _value - IsValueChanged = _isValueChanged - End Sub - End Class - - Public Event DataIsSent(ByVal sender As Object, ByVal e As B2SSystemEventArgs) - Public Event EscapeIsHit(ByVal sender As Object, ByVal e As EventArgs) - Public Event VPIsActivated(ByVal sender As Object, ByVal e As EventArgs) - - Private TimerData As Timer = Nothing - Private TimerEscape As Timer = Nothing - Private TimerActivateVP As Timer = Nothing - - Private B2SDataCount As Integer = 0 - -#Region "constructor and startup" - - Public Sub New() - - ' here is the place for a system checkup - CheckUp() - - ' timer to pass data to backglass - TimerData = New Timer - With TimerData - AddHandler .Tick, AddressOf TimerData_Tick - .Interval = 51 - .Enabled = False - End With - - ' timer to get escape key event - TimerEscape = New Timer - With TimerEscape - AddHandler .Tick, AddressOf TimerEscape_Tick - .Interval = 150 - .Enabled = False - End With - - ' timer to activate visual pinball - TimerActivateVP = New Timer - With TimerActivateVP - AddHandler .Tick, AddressOf TimerActivateVP_Tick - .Interval = 2000 - .Enabled = False - End With - - End Sub - - Public Sub Start(ByVal _formBackglass As Form, ByVal _B2SDataCount As Integer, Optional ByVal _StartDataTimerImmediatelly As Boolean = True) - - ' here we go with the backglass form - Me.formBackglass = _formBackglass - - ' this is the count of high priority data elements - ' max count is 50 - Me.B2SDataCount = _B2SDataCount - If Me.B2SDataCount > 50 Then Me.B2SDataCount = 50 - - ' maybe start the VP activation and the escape timer - If Not TimerActivateVP.Enabled Then TimerActivateVP.Start() - 'If Not TimerEscape.Enabled Then TimerEscape.Start() - - ' maybe start the remaining timers - 'If _StartDataTimerImmediatelly Then - ' If Not TimerData.Enabled Then TimerData.Start() - 'End If - - End Sub - - Private Sub CheckUp() - - ' have a look for the .NET framework - - - End Sub - -#End Region - -#Region "timers" - - Private Sub TimerData_Tick(ByVal sender As Object, ByVal e As EventArgs) - - '' initialize the value storage - this storage is to avoid too much update traffic - 'Static value(75) As Integer - 'Static isvaluechanged(75) As Boolean - 'Static valueInit As Boolean = False - 'If Not valueInit Then - ' valueInit = True - ' For I As Integer = 0 To Me.B2SDataCount - ' isvaluechanged(I) = True - ' value(I) = 0 - ' Next - 'End If - - '' get current data - 'Dim data As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\B2S\", "B2SDATA", Nothing) - 'If data = Nothing OrElse data.Length = 0 Then - ' data = Space(75) ' " " - 'End If - - '' get thru all data receiving objects - 'For i As Integer = 1 To Me.B2SDataCount - ' isvaluechanged(i) = False - ' Dim currentvalue As Integer = Asc(data.Substring(i, 1)) - 1 - ' If currentvalue <> value(i) Then - ' isvaluechanged(i) = True - ' value(i) = currentvalue - ' End If - 'Next - 'If writeLogFile Then - ' Dim sb As StringBuilder = New StringBuilder() - ' Dim log As IO.StreamWriter = New IO.StreamWriter("c:\tmp\log.txt", True) - ' For i As Integer = 0 To 50 - ' sb.Append(value(i)) - ' sb.Append(" ") - ' Next - ' log.WriteLine(sb.ToString()) - ' log.Flush() - ' log.Close() - 'End If - 'RaiseEvent DataIsSent(Me, New B2SSystemEventArgs(value, isvaluechanged)) - - End Sub - - Private Sub TimerEscape_Tick(ByVal sender As Object, ByVal e As EventArgs) - - '' stop current timer - 'TimerEscape.Stop() - - '' check whether the escape is pressed - 'Dim keyState As Short = GetAsyncKeyState(Keys.Escape) - 'If keyState <> 0 Then - ' ' raise matching escape key event - ' RaiseEvent EscapeIsHit(Me, New EventArgs()) - ' ' close the backglass - ' formBackglass.Close() - 'Else - ' ' restart current timer - ' TimerEscape.Start() - 'End If - - End Sub - - Private Sub TimerActivateVP_Tick(ByVal sender As Object, ByVal e As EventArgs) - - '' stop current timer - 'TimerActivateVP.Stop() - - '' set focus to VP - 'Try - ' AppActivate("Visual Pinball Player") - 'Catch - 'End Try - - '' raise matching event - 'RaiseEvent VPIsActivated(Me, New EventArgs()) - - '' maybe start the remaining timers - 'If Not TimerData.Enabled Then TimerData.Start() - 'If Not TimerEscape.Enabled Then TimerEscape.Start() - - End Sub - -#End Region - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/Processes.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/Processes.vb deleted file mode 100644 index 0bd968a..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Classes/Processes.vb +++ /dev/null @@ -1,95 +0,0 @@ -Imports System - -Public Class Processes - - Private Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Int32) As Int32 - Private Declare Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As IntPtr) As Boolean - Private Delegate Function EnumWindowsProc(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Boolean - Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As IntPtr, ByVal lpString As String, ByVal cch As Int32) As Int32 - Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As IntPtr) As Int32 - Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Int32) As Int32 - Private Declare Function GetParent Lib "user32.dll" (ByVal intptr As IntPtr) As IntPtr - - Private windowlist As List(Of ProcInfo) - Private _tablename As String = String.Empty - Private _tablecount As Integer = 0 - Private _tablehandle As IntPtr = 0 - - Private Const GWL_HWNDPARENT As Int32 = -8 - - Private Class ProcInfo - Public Name As String - Public Handle As IntPtr - - Public Sub New(ByVal _name As String, ByVal _handle As IntPtr) - Name = _name - Handle = _handle - End Sub - End Class - - Public Sub New() - RefreshWindowList() - For Each proc As ProcInfo In windowlist - If Not String.IsNullOrEmpty(proc.Name) Then - If proc.Name.StartsWith("Visual Pinball - ", StringComparison.CurrentCultureIgnoreCase) Then - If String.IsNullOrEmpty(_tablename) Then - _tablename = proc.Name.Substring(17) - If _tablename.StartsWith("[") AndAlso Not _tablename.EndsWith("]") Then - Dim i As Integer = _tablename.Length - 1 - Dim found As Boolean = False - Do While i > 0 - If _tablename.Substring(i, 1) = "]" Then - found = True - Exit Do - End If - i -= 1 - Loop - If found Then - _tablename = _tablename.Substring(0, i + 1) - End If - End If - If _tablename.StartsWith("[") Then _tablename = _tablename.Substring(1) - If _tablename.EndsWith("]") Then _tablename = _tablename.Substring(0, _tablename.Length - 1) - If _tablename.EndsWith("*") Then _tablename = _tablename.Substring(0, _tablename.Length - 1) - If _tablename.EndsWith(".vpt") Then _tablename = _tablename.Substring(0, _tablename.Length - 4) - If _tablename.EndsWith("*") Then _tablename = _tablename.Substring(0, _tablename.Length - 1) - End If - _tablecount += 1 - End If - If proc.Name.StartsWith("Visual Pinball Player", StringComparison.CurrentCultureIgnoreCase) Then - _tablehandle = proc.Handle - End If - End If - Next - End Sub - - Public ReadOnly Property TableName() As String - Get - Return _tablename - End Get - End Property - Public ReadOnly Property TableCount() As Integer - Get - Return _tablecount - End Get - End Property - Public ReadOnly Property TableHandle() As IntPtr - Get - Return _tablehandle - End Get - End Property - - Private Function EnumWinProc(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Boolean - If IsWindowVisible(hwnd) AndAlso GetParent(hwnd) = IntPtr.Zero AndAlso GetWindowLong(hwnd, GWL_HWNDPARENT) = 0 Then - Dim str As String = String.Empty.PadLeft(GetWindowTextLength(hwnd) + 1) - GetWindowText(hwnd, str, str.Length) - If Not String.IsNullOrEmpty(str.Substring(0, str.Length - 1)) Then windowlist.Add(New ProcInfo(str.Substring(0, str.Length - 1), hwnd)) - End If - EnumWinProc = True - End Function - Private Sub RefreshWindowList() - windowlist = New List(Of ProcInfo) - EnumWindows(AddressOf EnumWinProc, CInt(True)) - End Sub - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SBaseBox.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SBaseBox.vb deleted file mode 100644 index cd0358c..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SBaseBox.vb +++ /dev/null @@ -1,47 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.Windows.Forms - -Public Class B2SBaseBox - - Inherits Control - Implements System.ComponentModel.ISupportInitialize - - Public Enum eType - NotDefined = 0 - OnBackglass = 1 - OnDMD = 2 - End Enum - Public Property Type() As eType = eType.NotDefined - - Public Property ID() As Integer - Public Property DisplayID() As Integer - - Public Property RomID() As Integer = 0 - Public Enum eRomIDType - NotDefined = 0 - Lamp = 1 - Solenoid = 2 - GIString = 3 - Mech = 4 - End Enum - Public Property RomIDType() As eRomIDType = eType.NotDefined - Public Property RomIDValue() As Integer = 0 - Public Property RomInverted() As Boolean = False - - Public Property RectangleF As RectangleF = Nothing - - Public Property StartDigit() As Integer = 0 - Public Property Digits() As Integer = 0 - - Public Property Hidden() As Boolean = False - - Public Sub BeginInit() Implements System.ComponentModel.ISupportInitialize.BeginInit - ' nothing to do right now - End Sub - - Public Sub EndInit() Implements System.ComponentModel.ISupportInitialize.EndInit - ' nothing to do right now - End Sub - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SLEDBox.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SLEDBox.vb deleted file mode 100644 index 1d66edc..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SLEDBox.vb +++ /dev/null @@ -1,163 +0,0 @@ -Imports System -Imports System.Drawing.Drawing2D -Imports System.Drawing -Imports System.Windows.Forms - -Public Class B2SLEDBox - - Inherits B2SBaseBox - - Private currentSeg As Generic.List(Of PointF()) = New Generic.List(Of PointF()) - - Protected Overrides Sub OnResize(e As System.EventArgs) - - ' base call - MyBase.OnResize(e) - - ' resize the led segments and load it into the current segment array - Dim width As Single = Me.Width / B2SData.ledCoordMax - Dim height As Single = Me.Height / B2SData.ledCoordMax - currentSeg.Clear() - For Each entry As PointF() In If(LEDType = B2SLED.eLEDType.LED10, B2SData.led10Seg, If(LEDType = B2SLED.eLEDType.LED14, B2SData.led14Seg, If(LEDType = B2SLED.eLEDType.LED16, B2SData.led16Seg, B2SData.led8Seg))) - Dim scaled(entry.Length - 1) As PointF - For i As Integer = 0 To entry.Length - 1 - scaled(i) = New PointF(entry(i).X * width, entry(i).Y * height) - Next - currentSeg.Add(scaled) - Next - - End Sub - Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) - - ' create or recreate brushes - 'Static glowingbrush As SolidBrush = New SolidBrush(Color.FromArgb(Math.Min(LitLEDSegmentColor.R + 20, 255), Math.Min(LitLEDSegmentColor.G + 20, 255), Math.Min(LitLEDSegmentColor.B + 20, 255))) - Static litbrush As SolidBrush = New SolidBrush(LitLEDSegmentColor) - Static litpen As Pen = New Pen(LitLEDSegmentColor) - Static darkbrush As SolidBrush = New SolidBrush(DarkLEDSegmentColor) - If Not litbrush.Color.Equals(LitLEDSegmentColor) Then - 'glowingbrush.Dispose() - 'glowingbrush = New SolidBrush(Color.FromArgb(Math.Min(LitLEDSegmentColor.R + 30, 255), Math.Max(LitLEDSegmentColor.G + 30, 255), Math.Max(LitLEDSegmentColor.B + 30, 255))) - litbrush.Dispose() - litbrush = New SolidBrush(LitLEDSegmentColor) - litpen.Dispose() - litpen = New Pen(LitLEDSegmentColor) - End If - If Not darkbrush.Color.Equals(DarkLEDSegmentColor) Then - darkbrush.Dispose() - darkbrush = New SolidBrush(DarkLEDSegmentColor) - End If - - ' draw LED segments - Dim width As Single = Me.Width / B2SData.ledCoordMax - Dim height As Single = Me.Height / B2SData.ledCoordMax - - ' set graphics' options - e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias - - ' draw LED segments - For i As Integer = 0 To currentSeg.Count - 1 - If (_Value And 2 ^ i) <> 0 Then - 'e.Graphics.FillPolygon(glowingbrush, currentSeg(i)) - 'e.Graphics.DrawPolygon(litpen, currentSeg(i)) - e.Graphics.FillPolygon(litbrush, currentSeg(i)) - Else - e.Graphics.FillPolygon(darkbrush, currentSeg(i)) - End If - Next - - End Sub - - Public Sub New() - - ' set some styles - 'Me.SetStyle(ControlStyles.ResizeRedraw, True) ' Or ControlStyles.SupportsTransparentBackColor - 'Me.DoubleBuffered = True - Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True) - - ' back color - Me.BackColor = Color.Black - - ' show control - Me.Visible = True - Me.BringToFront() - - End Sub - - Public Property LitLEDSegmentColor() As Color = Nothing - Public Property DarkLEDSegmentColor() As Color = Nothing - - Private _LEDType As B2SLED.eLEDType = B2SLED.eLEDType.Undefined - Public Property LEDType() As B2SLED.eLEDType - Get - Return _LEDType - End Get - Set(ByVal value As B2SLED.eLEDType) - If _LEDType <> value Then - _LEDType = value - Me.Invalidate() - End If - End Set - End Property - - Private _Value As Integer = 0 - Public Property Value(Optional ByVal refresh As Boolean = False) As Integer - Get - Return _Value - End Get - Set(ByVal newvalue As Integer) - If _Value <> newvalue OrElse refresh Then - _Value = newvalue - Me.Refresh() - End If - End Set - End Property - - Private _Text As String = String.Empty - Public Shadows Property Text() As String - Get - Return _Text - End Get - Set(ByVal newvalue As String) - If Not String.IsNullOrEmpty(newvalue) Then - If _Text <> newvalue Then - _Text = newvalue - Select Case LEDType - Case B2SLED.eLEDType.LED8, B2SLED.eLEDType.Undefined - Select Case newvalue - Case " " : Value = 0 - Case "0" : Value = 63 - Case "1" : Value = 6 - Case "2" : Value = 91 - Case "3" : Value = 79 - Case "4" : Value = 102 - Case "5" : Value = 109 - Case "6" : Value = 125 - Case "7" : Value = 7 - Case "8" : Value = 127 - Case "9" : Value = 111 - End Select - Case B2SLED.eLEDType.LED10 - Select Case newvalue - Case " " : Value = 0 - Case "0" : Value = 63 - Case "1" : Value = 768 - Case "2" : Value = 91 - Case "3" : Value = 79 - Case "4" : Value = 102 - Case "5" : Value = 109 - Case "6" : Value = 124 - Case "7" : Value = 7 - Case "8" : Value = 127 - Case "9" : Value = 103 - End Select - Case B2SLED.eLEDType.LED14 - ' TODO - Case B2SLED.eLEDType.LED16 - ' not implemented right now - End Select - End If - End If - End Set - End Property - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SPictureBox.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SPictureBox.vb deleted file mode 100644 index 814b0bc..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SPictureBox.vb +++ /dev/null @@ -1,108 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.Windows.Forms - -Public Class B2SPictureBox - - Inherits B2SBaseBox - - Public Enum ePictureBoxType - StandardImage = 0 - SelfRotatingImage = 1 - MechRotatingImage = 2 - End Enum - Public Enum eSnippitRotationDirection - Clockwise = 0 - AntiClockwise = 1 - End Enum - Public Enum eSnippitRotationStopBehaviour - SpinOff = 0 - StopImmediatelly = 1 - RunAnimationTillEnd = 2 - RunAnimationToFirstStep = 3 - End Enum - - Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs) - ' rectangle area for painting - Dim rect As Rectangle = New Rectangle(0, 0, Me.Width - 1, Me.Height - 1) - - ' draw dashed frame - Dim pen As Pen = New Pen(Brushes.LightGray) - pen.DashPattern = New Single() {3.0F, 3.0F} - e.Graphics.DrawRectangle(pen, rect) - pen.Dispose() - - ' draw text - 'If Not String.IsNullOrEmpty(Me.Text) Then - ' TextRenderer.DrawText(e.Graphics, Me.Text, Me.Font, rect, Color.White, TextFormatFlags.WordBreak Or TextFormatFlags.HorizontalCenter Or TextFormatFlags.VerticalCenter) - 'End If - End Sub - - Public Sub New() - ' set some drawing styles - Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True) - 'Me.SetStyle(ControlStyles.ResizeRedraw Or ControlStyles.SupportsTransparentBackColor, True) - 'Me.DoubleBuffered = True - Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True) - - ' backcolor needs to be transparent - Me.BackColor = Color.Transparent - - ' do not show the control - MyBase.Visible = False - Me.BringToFront() - End Sub - - Public Property PictureBoxType() As ePictureBoxType = ePictureBoxType.StandardImage - - Public Property GroupName() As String = String.Empty - - Public Property Intensity() As Integer = 1 - Public Property InitialState() As Integer = 0 - Public Property DualMode() As B2SData.eDualMode = B2SData.eDualMode.Both - Public Property ZOrder() As Integer = 0 - - Public Property IsImageSnippit() As Boolean = False - Public Property SnippitRotationStopBehaviour() As eSnippitRotationStopBehaviour = eSnippitRotationStopBehaviour.SpinOff - - Private _Visible As Boolean - Public Shadows Property Visible(Optional ByVal _SetThruAnimation As Boolean = False) As Boolean - Get - Return _Visible - End Get - Set(ByVal value As Boolean) - If _Visible <> value Then - SetThruAnimation = _SetThruAnimation - _Visible = value - ' do a invalidate at the parent form - If Me.Parent IsNot Nothing Then Me.Parent.Invalidate(Rectangle.Round(Me.RectangleF)) - End If - End Set - End Property - Public Property SetThruAnimation() As Boolean = False - - Private _BackgroundImage As Image - Public Shadows Property BackgroundImage() As Image - Get - Return _BackgroundImage - End Get - Set(ByVal value As Image) - If _BackgroundImage Is Nothing OrElse Not _BackgroundImage.Equals(value) Then - _BackgroundImage = value - ' do a invalidate at the parent form - If Me.Parent IsNot Nothing Then Me.Parent.Invalidate(Rectangle.Round(Me.RectangleF)) - End If - End Set - End Property - - Private _OffImage As Image - Public Property OffImage() As Image - Get - Return _OffImage - End Get - Set(ByVal value As Image) - _OffImage = value - End Set - End Property - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SReelBox.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SReelBox.vb deleted file mode 100644 index 8940ed6..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Controls/B2SReelBox.vb +++ /dev/null @@ -1,329 +0,0 @@ -Imports System -Imports System.Windows.Forms -Imports System.Drawing - -Public Class B2SReelBox - - Inherits B2SBaseBox - - Public Enum eScoreType - NotUsed = 0 - Scores = 1 - Credits = 2 - End Enum - - Public Class ReelRollOverEventArgs - Inherits EventArgs - - Public Digit As Integer = 0 - - Public Sub New(ByVal _digit As Integer) - Digit = _digit - End Sub - End Class - Public Event ReelRollOver(ByVal sender As Object, ByVal e As ReelRollOverEventArgs) - - Private timer As Timer = Nothing - Private cTimerInterval As Integer = 101 - - Private isLED As Boolean = False - - Private length As Integer = 1 - Private initValue As String = "0" - Private reelindex As String = String.Empty - - Private intermediates As Integer = -1 - Private intermediates2go As Integer = 0 - - Protected Overrides Sub Dispose(disposing As Boolean) - MyBase.Dispose(disposing) - On Error Resume Next - If disposing Then - If timer IsNot Nothing Then - timer.Stop() - RemoveHandler timer.Tick, AddressOf ReelAnimationTimer_Tick - timer.Dispose() - End If - timer = Nothing - End If - End Sub - - Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) - - If Not String.IsNullOrEmpty(reelindex) Then - Dim images As Generic.Dictionary(Of String, Image) = If(_Illuminated, B2SData.ReelIlluImages, B2SData.ReelImages) - Dim intimages As Generic.Dictionary(Of String, Image) = If(_Illuminated, B2SData.ReelIntermediateIlluImages, B2SData.ReelIntermediateImages) - Dim name As String = String.Empty - If intermediates = -1 AndAlso timer.Enabled Then - Static firstintermediatecount As Integer = 1 - name = _ReelType & "_" & reelindex & If(SetID > 0 AndAlso _Illuminated, "_" & SetID.ToString(), "") & "_" & firstintermediatecount.ToString() - If intimages.ContainsKey(name) Then - e.Graphics.DrawImage(intimages(name), e.ClipRectangle) - firstintermediatecount += 1 - intermediates2go = 2 - Else - name = _ReelType & "_" & ConvertText(_CurrentText + 1) & If(SetID > 0 AndAlso _Illuminated, "_" & SetID.ToString(), "") - If images.ContainsKey(name) Then e.Graphics.DrawImage(images(name), e.ClipRectangle) - intermediates = firstintermediatecount - 1 - intermediates2go = 1 - End If - ElseIf intermediates2go > 0 Then - name = _ReelType & "_" & reelindex & If(SetID > 0 AndAlso _Illuminated, "_" & SetID.ToString(), "") & "_" & (intermediates - intermediates2go + 1).ToString() - If intimages.ContainsKey(name) Then e.Graphics.DrawImage(intimages(name), e.ClipRectangle) - Else - name = _ReelType & "_" & reelindex & If(SetID > 0 AndAlso _Illuminated, "_" & SetID.ToString(), "") - If images.ContainsKey(name) Then e.Graphics.DrawImage(images(name), e.ClipRectangle) - End If - End If - - End Sub - 'Protected Overrides Sub OnPaintBackground(pevent As System.Windows.Forms.PaintEventArgs) - - ' ' nothing to do but important - - 'End Sub - - Public Sub New() - - ' set some styles - Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True) - 'Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True) - Me.DoubleBuffered = True - Me.BringToFront() - - ' back color - 'Me.BackColor = Color.Transparent - - ' show control - 'Me.Visible = True - - ' create timer - timer = New Timer() - timer.Interval = CInt(_RollingInterval / (If((intermediates = -1), 3, intermediates) + 2)) - AddHandler timer.Tick, AddressOf ReelAnimationTimer_Tick - - End Sub - - Private Sub B2SReelBox_Disposed(sender As Object, e As System.EventArgs) Handles Me.Disposed - On Error Resume Next - If timer IsNot Nothing Then - timer.Stop() - RemoveHandler timer.Tick, AddressOf ReelAnimationTimer_Tick - timer.Dispose() - timer = Nothing - End If - End Sub - - Private Sub ReelAnimationTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) - - If intermediates2go > 0 OrElse intermediates = -1 Then - - Me.Refresh() - intermediates2go -= 1 - - Else - - If intermediates2go = 0 Then - ' add one reel step - _CurrentText += 1 - If _CurrentText > 9 Then - _CurrentText = 0 - RaiseEvent ReelRollOver(Me, New ReelRollOverEventArgs(ID)) - End If - - reelindex = ConvertText(_CurrentText) - - ' play sound and redraw reel - Try - If Sound() IsNot Nothing Then - My.Computer.Audio.Play(Sound(), AudioPlayMode.Background) - ElseIf SoundName() = "stille" Then - ' no sound - Else - My.Computer.Audio.Play(My.Resources.EMReel, AudioPlayMode.Background) - End If - Catch - End Try - Me.Refresh() - - intermediates2go -= 1 - ElseIf intermediates2go = -1 Then - intermediates2go -= 1 - Else - ' maybe stop timer - intermediates2go = intermediates - If _CurrentText = _Text OrElse _Text >= 10 Then - timer.Stop() - timer.Interval = CInt(_RollingInterval / (If((intermediates = -1), 3, intermediates) + 2)) - End If - End If - - End If - - End Sub - - Public Property SetID() As Integer - - Private _ReelType As String - Public Property ReelType() As String - Get - Return _ReelType - End Get - Set(ByVal value As String) - reelindex = "0" - If value.Substring(value.Length - 1, 1) = "_" Then - length = 2 - reelindex = "00" - value = value.Substring(0, value.Length - 1) - End If - If value.StartsWith("LED", StringComparison.CurrentCultureIgnoreCase) OrElse value.StartsWith("ImportedLED", StringComparison.CurrentCultureIgnoreCase) Then - isLED = True - reelindex = "Empty" - initValue = "Empty" - _Text = -1 - End If - _ReelType = value - End Set - End Property - - Public Property SoundName() As String = String.Empty - Public Property Sound() As Byte() = Nothing - - Public Property ScoreType() As eScoreType = eScoreType.NotUsed - - Public Property GroupName() As String = String.Empty - - Private _Illuminated As Boolean - Public Property Illuminated() As Boolean - Get - Return _Illuminated - End Get - Set(ByVal value As Boolean) - If _Illuminated <> value Then - _Illuminated = value - intermediates2go = 0 - Me.Refresh() - End If - End Set - End Property - - Private _Value As Integer = 0 - Public Property Value(Optional ByVal refresh As Boolean = False) As Integer - Get - Return _Value - End Get - Set(ByVal value As Integer) - If _Value <> value OrElse refresh Then - _Value = value - reelindex = ConvertValue(_Value) - Me.Refresh() - End If - End Set - End Property - - Private _CurrentText As Integer = 0 - Private _Text As Integer = 0 - Public Shadows Property Text(Optional ByVal AnimateReelChange As Boolean = True) As Integer - Get - Return _Text - End Get - Set(ByVal value As Integer) - If value >= 0 Then - If _Text <> value Then - _Text = value - If AnimateReelChange AndAlso Not isLED Then - timer.Stop() - intermediates2go = intermediates - timer.Start() - Else - reelindex = ConvertText(_Text) - Me.Refresh() - End If - End If - End If - End Set - End Property - Public ReadOnly Property CurrentText() As Integer - Get - Return _CurrentText - End Get - End Property - - Private _RollingInterval As Integer = cTimerInterval - Public Property RollingInterval() As Integer - Get - Return _RollingInterval - End Get - Set(ByVal value As Integer) - If _RollingInterval <> value Then - _RollingInterval = value - If _RollingInterval < 10 Then _RollingInterval = cTimerInterval - End If - End Set - End Property - - Public ReadOnly Property IsInReelRolling() As Boolean - Get - Return (intermediates2go <= 0) - End Get - End Property - Public ReadOnly Property IsInAction() As Boolean - Get - Return timer.Enabled - End Get - End Property - - Private Function ConvertValue(ByVal value As Integer) As String - Dim ret As String = initValue - ' remove the "," from the 7-segmenter - If value >= 128 AndAlso value <= 255 Then - value -= 128 - End If - ' map value - If value > 0 Then - Select Case value - ' 7-segment stuff - Case 63 - ret = "0" - Case 6 - ret = "1" - Case 91 - ret = "2" - Case 79 - ret = "3" - Case 102 - ret = "4" - Case 109 - ret = "5" - Case 125 - ret = "6" - Case 7 - ret = "7" - Case 127 - ret = "8" - Case 111 - ret = "9" - Case Else - 'additional 10-segment stuff - Select Case value - Case 768 - ret = "1" - Case 124 - ret = "6" - Case 103 - ret = "9" - 'Case Else - ' Debug.WriteLine(_Value) - End Select - End Select - End If - Return If(length = 2, "0", "") & ret - End Function - Private Function ConvertText(ByVal text As Integer) As String - Dim ret As String = String.Empty - ret = "00" & text.ToString() - ret = ret.Substring(ret.Length - length, length) - Return ret - End Function - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Dream7Display.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Dream7Display.vb deleted file mode 100644 index 3707467..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Dream7Display.vb +++ /dev/null @@ -1,482 +0,0 @@ -Imports System.Drawing.Drawing2D -Imports System.ComponentModel -Imports System.Drawing -Imports System.Windows.Forms - -Public Class Dream7Display - Inherits Control - Private SegmentNumbers As New Generic.List(Of SegmentNumber) - Private ExtraSpacings As New Generic.Dictionary(Of Integer, Single) - - Public Shared SegmentPaintCounter As Long - -#Region "constructor" - - Public Sub New() - Me.DoubleBuffered = True - Me.SetStyle(ControlStyles.Opaque, False) - Me.SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint, True) - End Sub - - Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams - Get - Dim cp As CreateParams = MyBase.CreateParams - If TransparentBackground Then cp.ExStyle = cp.ExStyle Or &H20 ' WS_EX_TRANSPARENT - Return cp - End Get - End Property - -#End Region - -#Region "public properties" - - Public Property Hidden() As Boolean = False - - Private bMirrored As Boolean - _ - Public Property Mirrored As Boolean - Get - Return bMirrored - End Get - Set(ByVal value As Boolean) - If bMirrored <> value Then - bMirrored = value - InitSegmentsStyle() - End If - End Set - End Property - - Private sText As String = Nothing - Public Overrides Property Text As String - Get - Return sText - End Get - Set(ByVal value As String) - sText = value - Dim nLen As Integer = 0 - If Not String.IsNullOrEmpty(value) Then nLen = value.Length - 1 - Dim nIndex As Integer = 0 - For nSegment As Integer = 0 To nLen - If nIndex >= SegmentNumbers.Count Then Exit For - Dim sChar As Char = " " - If Not String.IsNullOrEmpty(sText) AndAlso sText.Length > nSegment Then - sChar = sText.Substring(nSegment, 1) - End If - If sChar = "." AndAlso nIndex > 0 AndAlso Not SegmentNumbers(nIndex - 1).Character.EndsWith(".") Then - SegmentNumbers(nIndex - 1).Character &= "." - Else - SegmentNumbers(nIndex).Character = sChar - nIndex += 1 - End If - Next - End Set - End Property - - Private nDigits As Integer - _ - Public Property Digits As Integer - Get - Return nDigits - End Get - Set(ByVal value As Integer) - If value <> nDigits Then - nDigits = value - InitSegements() - End If - End Set - End Property - - Private nScaleMode As ScaleMode = ScaleMode.Stretch - Public Property ScaleMode As ScaleMode - Get - Return nScaleMode - End Get - Set(ByVal value As ScaleMode) - If nScaleMode <> value Then - nScaleMode = value - InitSegmentsStyle() - End If - End Set - End Property - - Private nSpacing As Single = 20.0 - _ - Public Property Spacing As Single - Get - Return nSpacing - End Get - Set(ByVal value As Single) - If nSpacing <> value Then - nSpacing = value - InitSegmentsStyle() - End If - End Set - End Property - - Private bTransparentBackground As Boolean = False - _ - Public Property TransparentBackground As Boolean - Get - Return bTransparentBackground - End Get - Set(ByVal value As Boolean) - bTransparentBackground = value - If Not value Then - Me.DoubleBuffered = True - Me.SetStyle(ControlStyles.Opaque, False) - Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True) - Else - Me.DoubleBuffered = False - Me.SetStyle(ControlStyles.Opaque, True) - Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, False) - End If - End Set - End Property - - Private nType As SegmentNumberType = SegmentNumberType.SevenSegment - _ - Public Property Type As SegmentNumberType - Get - Return nType - End Get - Set(ByVal value As SegmentNumberType) - If value <> nType Then - nType = value - InitSegmentsStyle() - End If - End Set - End Property - - _ - Public WriteOnly Property OffColor As Color - Set(ByVal value As Color) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.OffColor = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property LightColor As Color - Set(ByVal value As Color) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.LightColor = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property GlassColor As Color - Set(ByVal value As Color) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.GlassColor = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property GlassColorCenter As Color - Set(ByVal value As Color) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.GlassColorCenter = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property GlassAlpha As Integer - Set(ByVal value As Integer) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.GlassAlpha = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property GlassAlphaCenter As Integer - Set(ByVal value As Integer) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.GlassAlphaCenter = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property Glow As Single - Set(ByVal value As Single) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.Glow = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property BulbSize As SizeF - Set(ByVal value As SizeF) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.BulbSize = value - oSegment.AssignStyle() - Next - End Set - End Property - - Public WriteOnly Property WireFrame As Boolean - Set(ByVal value As Boolean) - For Each oSegment As SegmentNumber In SegmentNumbers - oSegment.Style.WireFrame = value - oSegment.AssignStyle() - Next - End Set - End Property - - Private nShear As Single = 0.1 - _ - Public Property Shear As Single - Get - Return nShear - End Get - Set(ByVal value As Single) - If nShear <> value Then - nShear = value - InitSegmentsStyle() - End If - End Set - End Property - - Private nThickness As Single = 16.0 - _ - Public Property Thickness As Single - Get - Return nThickness - End Get - Set(ByVal value As Single) - If nThickness <> value Then - nThickness = value - InitSegmentsStyle() - End If - End Set - End Property - - Private nScaleFactor As Single = 0.5 - _ - Public Property ScaleFactor As Single - Get - Return nScaleFactor - End Get - Set(ByVal value As Single) - If nScaleFactor <> value Then - nScaleFactor = value - InitSegmentsStyle() - End If - End Set - End Property - - Private nOffsetWidth As Integer = 0 - _ - Public Property OffsetWidth As Integer - Get - Return nOffsetWidth - End Get - Set(ByVal value As Integer) - If value <> nOffsetWidth Then - nOffsetWidth = value - InitSegmentsStyle() - End If - End Set - End Property - - Private nAngle As Single = 0.0 - _ - Public Property Angle As Single - Get - Return nAngle - End Get - Set(ByVal value As Single) - If nAngle <> value Then - nAngle = value - InitSegmentsStyle() - End If - End Set - End Property - -#End Region - -#Region "public functions" - - Public Sub SetValue(ByVal nSegment As Integer, ByVal sValue As String) - If SegmentNumbers.Count <= nSegment Then Return - SegmentNumbers(nSegment).DisplayCharacter(sValue) - End Sub - - Public Sub SetValue(ByVal nSegment As Integer, ByVal nValue As Long) - If SegmentNumbers.Count <= nSegment Then Return - SegmentNumbers(nSegment).DisplayBitCode(nValue) - End Sub - - Public Sub SetExtraSpacing(ByVal nSegment As Integer, ByVal nValue As Long) - If ExtraSpacings.ContainsKey(nSegment) Then ExtraSpacings.Remove(nSegment) - If nValue > 0 Then - ExtraSpacings.Add(nSegment, nValue) - End If - InitSegmentsStyle() - End Sub - - _ - Public Sub Repaint() - End Sub - -#End Region - -#Region "transformation functions" - - Private oMatrix As Matrix - Private Sub InitMatrix(ByVal nShear As Single, ByVal nScaleFactor As Single, ByVal bMirrored As Boolean) - If oMatrix IsNot Nothing Then oMatrix.Dispose() - oMatrix = New Matrix - If nShear < 0 Then nShear = 0 - If nShear > 2 Then nShear = 2 - If nScaleFactor <= 0.01 Then nScaleFactor = 0.01 - If nScaleFactor > 10 Then nScaleFactor = 10 - ' try the simple matrix - Dim oStyleMatrix As New Matrix - If bMirrored Then oStyleMatrix.Multiply(New Matrix(1, 0, 0, -1, 0, 0)) - oStyleMatrix.Shear(-nShear, 0) - oStyleMatrix.Rotate(nAngle) - oStyleMatrix.Scale(nScaleFactor, nScaleFactor) - oStyleMatrix.Translate(10, 10) - If Me.IsHandleCreated Then - ' correct the location and scale the whole display with a new matrix - Dim nBounds As RectangleF = GetBounds(oStyleMatrix) - Dim oCorrectedMatrix As New Matrix - If nScaleMode <> ScaleMode.Manual Then - Dim nScaleX As Single = (Me.Width + 3 - nOffsetWidth) / nBounds.Width - Dim nScaleY As Single = (Me.Height - 1) / nBounds.Height - If nScaleMode = ScaleMode.Zoom Then - nScaleY = Math.Min(nScaleX, nScaleY) - nScaleX = nScaleY - End If - If nScaleX > 0 AndAlso nScaleY > 0 Then oMatrix.Scale(nScaleX, nScaleY) - End If - oMatrix.Translate(-nBounds.X, -nBounds.Y) - End If - oMatrix.Multiply(oStyleMatrix) - oStyleMatrix.Dispose() - End Sub - - Private nBounds As RectangleF - Private Function GetBounds(ByVal oMatrix As Matrix) As RectangleF - ' determine the bounds of the whole display - Dim nPoints(3) As PointF - Dim nExtraSpacings As Single = 0 - For Each nSpacing As Single In ExtraSpacings.Values - nExtraSpacings += nSpacing - Next - nBounds = New RectangleF(-10.0, -10.0, CSng(SegmentNumbers.Count) * (154.0 + Spacing) + 15.0 - Spacing + nExtraSpacings, 264.0) - nPoints(0) = New PointF(nBounds.Left, nBounds.Top) - nPoints(1) = New PointF(nBounds.Right, nBounds.Top) - nPoints(2) = New PointF(nBounds.Right, nBounds.Bottom) - nPoints(3) = New PointF(nBounds.Left, nBounds.Bottom) - oMatrix.TransformPoints(nPoints) - Dim nMinX As Single = Single.MaxValue, nMinY As Single = Single.MaxValue - Dim nMaxX As Single = Single.MinValue, nMaxY As Single = Single.MinValue - For Each nPoint As PointF In nPoints - If nPoint.X < nMinX Then nMinX = nPoint.X - If nPoint.X > nMaxX Then nMaxX = nPoint.X - If nPoint.Y < nMinY Then nMinY = nPoint.Y - If nPoint.Y > nMaxY Then nMaxY = nPoint.Y - Next - Return New RectangleF(nMinX, nMinY, nMaxX - nMinX, nMaxY - nMinY) - End Function - -#End Region - -#Region "init methods" - - Private Sub InitSegements() - InitSegements(nDigits, nType, nShear) - End Sub - - Private Sub InitSegements(ByVal nNumbers As Integer, ByVal nType As SegmentNumberType, ByVal nShear As Single) - If nNumbers >= 0 AndAlso nNumbers <= 80 Then - For nNumber = SegmentNumbers.Count To nNumbers - 1 - Dim oNumber As New SegmentNumber() - SegmentNumbers.Add(oNumber) - AddHandler oNumber.Invalidated, AddressOf SegmentNumberInvalidated - Next - For nNumber = nNumbers To SegmentNumbers.Count - 1 - SegmentNumbers.RemoveAt(SegmentNumbers.Count - 1) - Next - End If - nDigits = SegmentNumbers.Count - InitSegmentsStyle() - End Sub - - Private Sub SegmentNumberInvalidated(ByVal sender As Object, ByVal e As System.EventArgs) - Dim oNumber As SegmentNumber = sender - Me.Invalidate(New Region(oNumber.Bounds)) - End Sub - Private Sub InitSegmentsStyle() - InitMatrix(nShear, nScaleFactor, Mirrored) - Dim nNumber As Integer = 0 - Dim nDistance As Single = 154 + Spacing - Dim nXPos As Single = 0 - For Each oNumber As SegmentNumber In SegmentNumbers - oNumber.Init(New PointF(nXPos, 0), nType, oMatrix, nThickness) - nXPos += nDistance - If ExtraSpacings.ContainsKey(nNumber) Then - nXPos += ExtraSpacings(nNumber) - End If - nNumber += 1 - Next - Me.Invalidate() - End Sub - - Private Sub SegmentDisplay_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated - InitSegmentsStyle() - End Sub - - Private Sub SegmentDisplay_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged - InitSegmentsStyle() - End Sub - -#End Region - -#Region "painting" - - Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) - e.Graphics.SmoothingMode = SmoothingMode.AntiAlias - e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality - e.Graphics.CompositingMode = CompositingMode.SourceCopy - e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear - ' draw background - If Me.DoubleBuffered Then - e.Graphics.Clear(Color.Black) - Else - e.Graphics.Transform = oMatrix - e.Graphics.FillRectangle(Brushes.Black, nBounds) - e.Graphics.ResetTransform() - End If - For Each oNumber As SegmentNumber In SegmentNumbers - Dim oRegion As New Region(e.ClipRectangle) - oRegion.Intersect(oNumber.Bounds) - If Not oRegion.IsEmpty(e.Graphics) Then - oNumber.Draw(e.Graphics) - End If - 'e.Graphics.DrawPath(Pens.Blue, oNumber.Bounds) - Next - e.Graphics.ResetTransform() - End Sub - - Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) - ' no background - End Sub - -#End Region - -End Class - -Public Enum ScaleMode - Manual = 0 - Stretch = 1 - Zoom = 2 -End Enum \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Segment.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Segment.vb deleted file mode 100644 index 0a55db1..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/Segment.vb +++ /dev/null @@ -1,284 +0,0 @@ -Imports System.Drawing.Drawing2D -Imports System.Drawing -Imports System.ComponentModel - -Friend Class Segment - Private FocusScales As PointF - Private Lights(5) As PointF - Private LightDot As RectangleF - Private Points(5) As PointF - - Public Property Style As SegmentStyle - Public Property IsOn As Boolean - Public Property Name As String - -#Region "constructors" - - Public Sub New(ByVal sName As String, ByVal x As Single, ByVal y As Single, ByVal width As Single, ByVal height As Single, _ - ByVal angle As Single) - InitSegment(sName, x, y, width, height, angle, SegmentCap.Standard, SegmentCap.Standard, 45) - End Sub - - Public Sub New(ByVal sName As String, ByVal x As Single, ByVal y As Single, ByVal width As Single, ByVal height As Single, _ - ByVal angle As Single, ByVal topcap As SegmentCap, ByVal bottomcap As SegmentCap) - InitSegment(sName, x, y, width, height, angle, topcap, bottomcap, 45) - End Sub - - Public Sub New(ByVal sName As String, ByVal x As Single, ByVal y As Single, ByVal width As Single, ByVal height As Single, _ - ByVal angle As Single, ByVal topcap As SegmentCap, ByVal bottomcap As SegmentCap, ByVal capangle As Single) - InitSegment(sName, x, y, width, height, angle, topcap, bottomcap, capangle) - End Sub - - Public Sub New(ByVal x As Single, ByVal y As Single, ByVal radius As Single) - InitSegmentDot(x, y, radius) - End Sub - -#End Region - -#Region "public properties" - - Private oGlassPath As GraphicsPath - Public ReadOnly Property GlassPath As GraphicsPath - Get - GetGlassData() - Return oGlassPath - End Get - End Property - Public ReadOnly Property GlassPathTransformed As GraphicsPath - Get - Dim oPath As GraphicsPath = GlassPath.Clone - oPath.Transform(oOwnMatrix) - Return oPath - End Get - End Property - -#End Region - -#Region "public functions" - - Public Sub AssignStyle() - ResetCacheData() - End Sub - - Public Sub Draw(ByVal oGraphics As Graphics) - SetTransform(oGraphics) - GetGlassData() - Dim oBrush As Brush - If IsOn Then - oBrush = New PathGradientBrush(oGlassPath) - With DirectCast(oBrush, PathGradientBrush) - .CenterColor = (Color.FromArgb(Style.GlassAlphaCenter, Style.GlassColorCenter)) - .SurroundColors = New Color() {Color.FromArgb(Style.GlassAlpha, Style.GlassColor)} - .FocusScales = FocusScales - End With - PaintSegment(oGraphics, oBrush, Pens.Red, oGlassPath) - Else - oBrush = New SolidBrush(Style.OffColor) - PaintSegment(oGraphics, oBrush, Pens.DarkGray, oGlassPath) - End If - oGraphics.ResetTransform() - oBrush.Dispose() - End Sub - - Public Sub DrawLight(ByVal oGraphics As Graphics) - If Not IsOn Then Return - SetTransform(oGraphics) - GetLightData() - PaintSegment(oGraphics, oLightBrush, Pens.Yellow, oLightPath) - oGraphics.ResetTransform() - End Sub - -#End Region - -#Region "private functions" - - Private Sub InitSegmentDot(ByVal x As Single, ByVal y As Single, ByVal radius As Single) - Name = "." - Points(0) = New PointF(radius, radius) - nRadius = radius - - CreateLightData() - - oOwnMatrix = New Matrix - oOwnMatrix.Translate(x, y) - End Sub - - Private Sub InitSegment(ByVal sName As String, ByVal x As Single, ByVal y As Single, ByVal width As Single, ByVal height As Single, _ - ByVal angle As Single, ByVal topcap As SegmentCap, ByVal bottomcap As SegmentCap, ByVal capangle As Single) - Name = sName - Dim nBounds As New RectangleF(0, 0, width, height) - Dim topleft As Single, topright As Single, topdelta As Single - Dim bottomleft As Single, bottomright As Single, bottomdelta As Single - LeftRightFromCap(topcap, width, capangle, topleft, topright, topdelta) - LeftRightFromCap(bottomcap, width, capangle, bottomleft, bottomright, bottomdelta) - - Points(0) = New PointF(nBounds.Left + topdelta, nBounds.Top) - Points(1) = New PointF(nBounds.Right, nBounds.Top + If(topcap = SegmentCap.Flat, 0, topright)) - Points(2) = New PointF(nBounds.Right, nBounds.Bottom - If(bottomcap = SegmentCap.Flat, 0, bottomright)) - Points(3) = New PointF(nBounds.Left + bottomdelta, nBounds.Bottom) - Points(4) = New PointF(nBounds.Left, nBounds.Bottom - If(bottomcap = SegmentCap.Flat, 0, bottomleft)) - Points(5) = New PointF(nBounds.Left, nBounds.Top + If(topcap = SegmentCap.Flat, 0, topleft)) - - nAngle = angle - CreateLightData() - - oOwnMatrix = New Matrix - oOwnMatrix.Translate(x, y) - oOwnMatrix.Rotate(angle) - End Sub - - Private nGlow As Single = -1 - Private Sub CreateLightData() - If Style Is Nothing OrElse Me.nGlow = Style.Glow Then Return - Me.nGlow = Style.Glow - If nRadius > 0 Then - ' extra light for the dot - LightDot = New RectangleF(Points(0).X - nGlow, Points(0).Y - nGlow, nRadius + nGlow * 2, nRadius + nGlow * 2) - Else - Lights(0) = PointF.Add(Points(0), New SizeF(0, -nGlow)) - Lights(1) = PointF.Add(Points(1), New SizeF(nGlow, 0)) - Lights(2) = PointF.Add(Points(2), New SizeF(nGlow, 0)) - Lights(3) = PointF.Add(Points(3), New SizeF(0, nGlow)) - Lights(4) = PointF.Add(Points(4), New SizeF(-nGlow, 0)) - Lights(5) = PointF.Add(Points(5), New SizeF(-nGlow, 0)) - ' bulb size - End If - End Sub - - Private Sub SetBulbSize() - If Style.BulbSize.IsEmpty Then - FocusScales = PointF.Empty - Else - With Style.BulbSize - If nAngle = -90 Then - FocusScales = New PointF(.Height, .Width) - ElseIf nAngle = 0 Then - FocusScales = New PointF(.Width, .Height) - Else - Dim nDiag As Single = (.Width + .Height) / 2 - FocusScales = New PointF(nDiag, nDiag) - End If - End With - End If - End Sub - - Private nAngle As Single - Private nRadius As Single - - Private Sub LeftRightFromCap(ByVal nCap As SegmentCap, ByVal nWidth As Single, ByVal nCapangle As Single, _ - ByRef nLeft As Single, ByRef nRight As Single, ByRef nDelta As Single) - Select Case nCap - Case SegmentCap.Standard, SegmentCap.Flat - nLeft = nWidth / 2.0 - nRight = nWidth / 2.0 - Case SegmentCap.Left - nLeft = 0 - nRight = nWidth - Case SegmentCap.Right - nLeft = nWidth - nRight = 0 - Case SegmentCap.MoreLeft - nLeft = nWidth / 4.0 - nRight = nWidth * 3.0 / 4.0 - Case SegmentCap.MoreRight - nLeft = nWidth * 3.0 / 4.0 - nRight = nWidth / 4.0 - End Select - nDelta = nLeft - nLeft = Math.Tan(nCapangle / 180 * Math.PI) * nLeft - nRight = Math.Tan(nCapangle / 180 * Math.PI) * nRight - End Sub - - Private Sub PaintSegment(ByVal oGraphics As Graphics, ByVal oBrush As Brush, ByVal oPen As Pen, ByVal oPath As GraphicsPath) - If Style.WireFrame Then - oGraphics.DrawPath(oPen, oPath) - Else - oGraphics.FillPath(oBrush, oPath) - End If - Dream7Display.SegmentPaintCounter += 1 - End Sub - - Private Sub GetGlassData() - If oGlassPath Is Nothing Then - oGlassPath = New GraphicsPath() - If nRadius > 0 Then - oGlassPath.AddEllipse(Points(0).X, Points(0).Y, nRadius, nRadius) - Else - oGlassPath.AddPolygon(Points) - End If - SetBulbSize() - End If - End Sub - - Private oLightPath As GraphicsPath - Private oLightBrush As PathGradientBrush - Private Sub GetLightData() - If oLightPath Is Nothing Then - CreateLightData() - oLightPath = New GraphicsPath() - If nRadius > 0 Then - oLightPath.AddEllipse(LightDot) - Else - oLightPath.AddClosedCurve(Lights, 0.5) - End If - SetBulbSize() - End If - If oLightBrush Is Nothing Then - ' create light brush - oLightBrush = New PathGradientBrush(oLightPath) - oLightBrush.SurroundColors = New Color() {Color.Transparent} - oLightBrush.CenterColor = Color.FromArgb(255, Style.LightColor) - ' huge performance impact - If Not FocusScales.IsEmpty Then oLightBrush.FocusScales = FocusScales - 'oLightBrush.SetSigmaBellShape(1, 0.6) - End If - End Sub - - Private Sub ResetCacheData() - If oGlassPath IsNot Nothing Then oGlassPath.Dispose() - oGlassPath = Nothing - If oLightPath IsNot Nothing Then oLightPath.Dispose() - oLightPath = Nothing - If oLightBrush IsNot Nothing Then oLightBrush.Dispose() - oLightBrush = Nothing - End Sub - - Private Sub SetTransform(ByVal oGraphics As Graphics) - Dim oMatrix As Matrix - If oExternMatrix Is Nothing Then oMatrix = New Matrix Else oMatrix = oExternMatrix.Clone - oMatrix.Multiply(oOwnMatrix) - oGraphics.Transform = oMatrix - End Sub - - Private oOwnMatrix As Matrix - Private oExternMatrix As Matrix - Public Sub Transform(ByVal oMatrix As Matrix) - Me.oExternMatrix = oMatrix - End Sub - -#End Region - -End Class - -#Region "helper classes" - -Friend Class SegmentList - Inherits Generic.List(Of Segment) - - Public Sub Transform(ByVal oMatrix As Matrix) - For Each oSegment As Segment In Me - oSegment.Transform(oMatrix) - Next - End Sub -End Class - -Friend Enum SegmentCap - Standard = 0 - Flat = 1 - MoreLeft = 2 - Left = 3 - MoreRight = 4 - Right = 5 -End Enum - -#End Region diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/SegmentNumber.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/SegmentNumber.vb deleted file mode 100644 index 723909c..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Dream7/SegmentNumber.vb +++ /dev/null @@ -1,327 +0,0 @@ -Imports System.Drawing.Drawing2D -Imports System.Drawing - -Friend Class SegmentNumber - Private oSegments As New SegmentList - Private oSegmentStyle As New SegmentStyle - - Private Property Type As SegmentNumberType - Private Property Thickness As Single = 16.0 - -#Region "invalidate handler for the parent control" - - Public Event Invalidated As EventHandler - - Public Sub OnInvalidated() - RaiseEvent Invalidated(Me, New System.EventArgs) - End Sub - -#End Region - -#Region "public methods" - - Public Sub Init(ByVal nLocation As PointF, ByVal nType As SegmentNumberType, ByVal oMatrix As Matrix, ByVal nThickness As Single) - If Me.Type <> nType OrElse Me.Thickness <> nThickness Then - InitSegments(nType, nThickness) - DisplayCharacter(sCharacter) - End If - InitMatrix(nLocation, oMatrix) - End Sub - - Public Sub AssignStyle() - For Each oSegment As Segment In oSegments - oSegment.AssignStyle() - Next - OnInvalidated() - End Sub - - Public Sub Draw(ByVal oGraphics As Graphics) - oGraphics.ResetTransform() - oGraphics.CompositingMode = CompositingMode.SourceCopy - oGraphics.ExcludeClip(GetSegmentRegions) - oGraphics.FillPath(Brushes.Black, Me.Bounds) - oGraphics.ResetClip() - For Each oSegment As Segment In oSegments - If oSegment.IsOn Then Continue For - oSegment.Draw(oGraphics) - Next - If Style.Glow > 0 Then - oGraphics.CompositingMode = CompositingMode.SourceOver - For Each oSegment As Segment In oSegments - If Not oSegment.IsOn Then Continue For - oSegment.DrawLight(oGraphics) - Next - Else - oGraphics.CompositingMode = CompositingMode.SourceCopy - End If - oGraphics.ResetClip() - For Each oSegment As Segment In oSegments - If Not oSegment.IsOn Then Continue For - oSegment.Draw(oGraphics) - Next - oGraphics.ResetClip() - oGraphics.ResetTransform() - End Sub - -#End Region - -#Region "public properties" - - Public ReadOnly Property Bounds As GraphicsPath - Get - Dim oBounds As New RectangleF(-14, -14, 173, 272) - Dim oRegion As New GraphicsPath() - oRegion.AddRectangle(oBounds) - oRegion.Transform(oNumberMatrix) - Return oRegion - End Get - End Property - - Public ReadOnly Property Style As SegmentStyle - Get - Return oSegmentStyle - End Get - End Property - - Private sCharacter As String - Public Property Character As String - Get - Return sCharacter - End Get - Set(ByVal value As String) - sCharacter = value - DisplayCharacter(sCharacter) - End Set - End Property - -#End Region - -#Region "segment coordinates" - - Private Sub InitSegments(ByVal nType As SegmentNumberType, ByVal nThickness As Single) - oSegments.Clear() - Dim TH As Single = nThickness - Dim T4 As Single = TH / 4.0 - Dim T2 As Single = TH / 2.0 - Me.Type = nType - Me.Thickness = TH - Select Case nType - Case SegmentNumberType.SevenSegment - oSegments.AddRange(New Segment() { _ - New Segment("a", T4 + 2, TH, TH, 120 - T2, -90, SegmentCap.MoreRight, SegmentCap.MoreRight), _ - New Segment("b", 124 - TH, T4 + 2, TH, 110 - T4, 0, SegmentCap.MoreRight, SegmentCap.Standard), _ - New Segment("c", 124 - TH, 116, TH, 110 - T4, 0, SegmentCap.Standard, SegmentCap.MoreRight), _ - New Segment("d", T4 + 2, 228, TH, 120 - T2, -90, SegmentCap.MoreLeft, SegmentCap.MoreLeft), _ - New Segment("e", 0, 116, TH, 110 - T4, 0, SegmentCap.Standard, SegmentCap.MoreLeft), _ - New Segment("f", 0, T4 + 2, TH, 110 - T4, 0, SegmentCap.MoreLeft, SegmentCap.Standard), _ - New Segment("g", T2 + 2, 114 + T2, TH, 120 - TH, -90), _ - New Segment(135 - T4 * 5, 228 - T4 * 5, TH) _ - }) - Case SegmentNumberType.FourteenSegment - Dim nAngleDiag As Single = 26.5 + T4 - Dim MT As Single = TH - T4 - Dim nSinA As Single = Math.Sin(nAngleDiag / 180.0 * Math.PI) - Dim nCosA As Single = Math.Cos(nAngleDiag / 180.0 * Math.PI) - Dim nTanA As Single = Math.Tan(nAngleDiag / 180.0 * Math.PI) - Dim nDiagX As Single = nCosA * MT - Dim nDiagY As Single = nSinA * MT - Dim nDiagHeight As Single = (58 - TH - MT / 2) / nSinA + MT / nTanA - oSegments.AddRange(New Segment() { _ - New Segment("a", T4 + 2, TH, TH, 120 - T2, -90, SegmentCap.MoreRight, SegmentCap.MoreRight), _ - New Segment("b", 124 - TH, T4 + 2, TH, 110 - T4, 0, SegmentCap.MoreRight, SegmentCap.Standard), _ - New Segment("c", 124 - TH, 116, TH, 110 - T4, 0, SegmentCap.Standard, SegmentCap.MoreRight), _ - New Segment("d", T4 + 2, 228, TH, 120 - T2, -90, SegmentCap.MoreLeft, SegmentCap.MoreLeft), _ - New Segment("e", 0, 116, TH, 110 - T4, 0, SegmentCap.Standard, SegmentCap.MoreLeft), _ - New Segment("f", 0, T4 + 2, TH, 110 - T4, 0, SegmentCap.MoreLeft, SegmentCap.Standard), _ - New Segment("g1", T2 + 2, 114 + T2, TH, 59 - T2, -90, SegmentCap.Standard, SegmentCap.Flat), _ - New Segment(135 - T4 * 5, 224 - T4 * 6, TH), _ - New Segment("h", TH - nDiagX + 2, TH + 2 + nDiagY, MT, nDiagHeight, -nAngleDiag, SegmentCap.Right, SegmentCap.Left, 90 - nAngleDiag), - New Segment("i", 62 - MT / 2, TH + 2, MT, 110 - TH - T2, 0, SegmentCap.Flat, SegmentCap.Flat), _ - New Segment("j", 122 - TH, TH + 2, MT, nDiagHeight, nAngleDiag, SegmentCap.Left, SegmentCap.Right, 90 - nAngleDiag), - New Segment("g2", 63, 114 + T2, TH, 59 - T2, -90, SegmentCap.Flat, SegmentCap.Standard), _ - New Segment("m", MT / 2.0 - nDiagX + 64, 116 + T2 + nDiagY, MT, nDiagHeight, -nAngleDiag, SegmentCap.Right, SegmentCap.Left, 90 - nAngleDiag), _ - New Segment("l", 62 - MT / 2, 116 + T2, MT, 110 - TH - T2, 0, SegmentCap.Flat, SegmentCap.Flat), _ - New Segment("k", 60 - MT / 2, 116 + TH / 2, MT, nDiagHeight, nAngleDiag, SegmentCap.Left, SegmentCap.Right, 90 - nAngleDiag), _ - New Segment(131 - T4 * 5, 230 - T4 * 4, TH) _ - }) - Case SegmentNumberType.TenSegment - oSegments.AddRange(New Segment() { _ - New Segment("a", T4 + 2, TH, TH, 120 - T2, -90, SegmentCap.MoreRight, SegmentCap.MoreRight), _ - New Segment("b", 124 - TH, T4 + 2, TH, 110 - T4, 0, SegmentCap.MoreRight, SegmentCap.Standard), _ - New Segment("c", 124 - TH, 116, TH, 110 - T4, 0, SegmentCap.Standard, SegmentCap.MoreRight), _ - New Segment("d", T4 + 2, 228, TH, 120 - T2, -90, SegmentCap.MoreLeft, SegmentCap.MoreLeft), _ - New Segment("e", 0, 116, TH, 110 - T4, 0, SegmentCap.Standard, SegmentCap.MoreLeft), _ - New Segment("f", 0, T4 + 2, TH, 110 - T4, 0, SegmentCap.MoreLeft, SegmentCap.Standard), _ - New Segment("g1", T2 + 2, 114 + T2, TH, 69 - T2, -90, SegmentCap.Standard, SegmentCap.Standard), _ - New Segment("g2", 73, 114 + T2, TH, 49 - T2, -90, SegmentCap.Standard, SegmentCap.Standard), _ - New Segment("i", 72 - T2, T2 + 2, TH, 110 - T2, 0, SegmentCap.Standard, SegmentCap.Standard), _ - New Segment("l", 72 - T2, 116, TH, 110 - T2, 0, SegmentCap.Standard, SegmentCap.Standard) - }) - End Select - For Each oSegment As Segment In oSegments - oSegment.Style = oSegmentStyle - Next - End Sub - -#End Region - -#Region "private methods" - - Private oNumberMatrix As Matrix - Private Sub InitMatrix(ByVal nLocation As PointF, ByVal oMatrix As Matrix) - oMatrix = oMatrix.Clone - oMatrix.Translate(nLocation.X, nLocation.Y) - oNumberMatrix = oMatrix - oSegments.Transform(oMatrix) - End Sub - - Private Function SetSegmentState(ByVal oSegment As Segment, ByVal bIsOn As Boolean) As Boolean - If oSegment.IsOn = bIsOn Then Return False - oSegment.IsOn = bIsOn - Return True - End Function - - Private Function GetSegmentRegions() As Region - Dim oRegion As New Region(RectangleF.Empty) - For Each oSegment As Segment In oSegments - Dim oPath As GraphicsPath = oSegment.GlassPathTransformed - oPath.Transform(oNumberMatrix) - oRegion.Union(oPath) - Next - Return oRegion - End Function - -#End Region - -#Region "character and bitflag display" - - Friend Sub DisplayCharacter(ByVal sCharacter As String) - Dim sSegments As String = String.Empty - If Not String.IsNullOrEmpty(sCharacter) Then - Select Case Type - Case SegmentNumberType.SevenSegment - Select Case sCharacter(0) - Case "0"c : sSegments = "abcdef" - Case "1"c : sSegments = "bc" - Case "2"c : sSegments = "abdeg" - Case "3"c : sSegments = "abcdg" - Case "4"c : sSegments = "bcfg" - Case "5"c : sSegments = "acdfg" - Case "6"c : sSegments = "acdefg" - Case "7"c : sSegments = "abc" - Case "8"c : sSegments = "abcdefg" - Case "9"c : sSegments = "abcdfg" - Case "A"c, "a"c : sSegments = "abcefg" - Case "B"c, "b"c : sSegments = "cdefg" - Case "C"c, "c"c : sSegments = "adef" - Case "D"c, "d"c : sSegments = "bcdeg" - Case "E"c, "e"c : sSegments = "adefg" - Case "F"c, "f"c : sSegments = "aefg" - End Select - Case SegmentNumberType.TenSegment - Select Case sCharacter(0) - Case "0"c : sSegments = "abcdefjk" - Case "1"c : sSegments = "il" - Case "2"c : sSegments = "abdeg1g2" - Case "3"c : sSegments = "abcdg2" - Case "4"c : sSegments = "bcfg1g2" - Case "5"c : sSegments = "acdfg1g2" - Case "6"c : sSegments = "acdefg1g2" - Case "7"c : sSegments = "abc" - Case "8"c : sSegments = "abcdefg1g2" - Case "9"c : sSegments = "abcdfg1g2" - Case "A"c, "a"c : sSegments = "abcefg" - Case "B"c, "b"c : sSegments = "cdefg" - Case "C"c, "c"c : sSegments = "adef" - Case "D"c, "d"c : sSegments = "bcdeg" - Case "E"c, "e"c : sSegments = "adefg" - Case "F"c, "f"c : sSegments = "aefg" - End Select - Case SegmentNumberType.FourteenSegment - Select Case sCharacter(0) - Case "0"c : sSegments = "abcdefjk" - Case "1"c : sSegments = "bcj" - Case "2"c : sSegments = "abdeg1g2" - Case "3"c : sSegments = "abcdg2" - Case "4"c : sSegments = "bcfg1g2" - Case "5"c : sSegments = "acdfg1g2" - Case "6"c : sSegments = "acdefg1g2" - Case "7"c : sSegments = "abc" - Case "8"c : sSegments = "abcdefg1g2" - Case "9"c : sSegments = "abcdfg1g2" - Case "A"c, "a"c : sSegments = "abcefg1g2" - Case "B"c, "b"c : sSegments = "abcdg2il" - Case "C"c, "c"c : sSegments = "adef" - Case "D"c, "d"c : sSegments = "abcdil" - Case "E"c, "e"c : sSegments = "adefg1" - Case "F"c, "f"c : sSegments = "aefg1" - Case "G"c, "g"c : sSegments = "acdefg2" - Case "H"c, "h"c : sSegments = "bcefg1g2" - Case "I"c, "i"c : sSegments = "adil" - Case "J"c, "j"c : sSegments = "bcde" - Case "K"c, "k"c : sSegments = "efg1jm" - Case "L"c, "l"c : sSegments = "def" - Case "M"c, "m"c : sSegments = "bcefhj" - Case "N"c, "n"c : sSegments = "bcefhm" - Case "O"c, "o"c : sSegments = "abcdef" - Case "P"c, "p"c : sSegments = "abefg1g2" - Case "Q"c, "q"c : sSegments = "abcdefm" - Case "R"c, "r"c : sSegments = "abefg1g2m" - Case "S"c, "s"c : sSegments = "acdfg1g2" - Case "T"c, "t"c : sSegments = "ail" - Case "U"c, "u"c : sSegments = "bcdef" - Case "V"c, "v"c : sSegments = "efjk" - Case "W"c, "w"c : sSegments = "bcefkm" - Case "X"c, "x"c : sSegments = "hjkm" - Case "Y"c, "y"c : sSegments = "hjl" '"bfg1g2l" - Case "Z"c, "z"c : sSegments = "adjk" - End Select - End Select - If sCharacter.EndsWith(".") Then sSegments &= "." - End If - Dim bAnyChange As Boolean = False - For Each oSegment As Segment In oSegments - bAnyChange = bAnyChange Or SetSegmentState(oSegment, sSegments.Contains(oSegment.Name)) - Next - If bAnyChange Then OnInvalidated() - End Sub - - Friend Sub DisplayBitCode(ByVal nValue As Long) - Dim nSegment As Long - Dim bAnyChange As Boolean = False - For Each oSegment As Segment In oSegments - If Type = SegmentNumberType.TenSegment AndAlso oSegment.Name = "g2" Then - bAnyChange = bAnyChange Or SetSegmentState(oSegment, (nValue And (2 ^ (nSegment - 1))) > 0) - Else - bAnyChange = bAnyChange Or SetSegmentState(oSegment, (nValue And (2 ^ nSegment)) > 0) - End If - nSegment += 1 - Next - If bAnyChange Then OnInvalidated() - End Sub - -#End Region - -End Class - -#Region "helper classes" - -Public Enum SegmentNumberType - SevenSegment = 7 - TenSegment = 10 - FourteenSegment = 14 -End Enum - -Friend Class SegmentStyle - Public Property OffColor As Color = Color.FromArgb(255, 20, 20, 20) - Public Property LightColor As Color = Color.FromArgb(254, 90, 50) - Public Property GlassColor As Color = Color.FromArgb(254, 50, 25) - Public Property GlassColorCenter As Color = Color.FromArgb(254, 50, 25) - Public Property GlassAlpha As Integer = 140 - Public Property GlassAlphaCenter As Integer = 255 - Public Property Glow As Single = 10 - Public Property BulbSize As SizeF = SizeF.Empty - Public Property WireFrame As Boolean = False -End Class - -#End Region diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.Designer.vb deleted file mode 100644 index 00cb943..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.Designer.vb +++ /dev/null @@ -1,40 +0,0 @@ - _ -Partial Class Background - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ - 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 - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Background)) - Me.SuspendLayout() - ' - 'Background - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(284, 261) - Me.ControlBox = False - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.Name = "Background" - Me.Text = "B2SServer" - Me.ResumeLayout(False) - - End Sub -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.resx deleted file mode 100644 index 6a23e00..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.resx +++ /dev/null @@ -1,1734 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzs5gG9ubgOinaELHVS - bz15XXQ8m5OWGLWzsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC0q645l2mRt4U1f/5+J3v/eyp4/4FLgfKfip5+u7S3GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9r7capHabrqE8mf+gPJn/nkCY/59Hm/+fTpz/oWWk+6ucqnDp6OMCAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAua+zP6NRnPinQ6H/pUKd/6RHnP+lUJ//qFmk/61s - rv+si67Ev7a/GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSZn2elVaP/oUef/55G - m/+cSZj/nk+Z/59VnP+maKb/p4Wr4rOpszIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC6tLY5m2ef95teof+aX57/mV+c/5Vbmf+WXJv/m2ig/6OLp8G+t74aAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAuLG2G56Go7eac6T/m3ek/5h0oP+TbZz/j2mZ/5Z0n/6mnad36+rlAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsp6xTlX+g95N7n/+Pd5r/h3CU/4Zw - lf+WiJ3HvLq8JgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAure5FZWP - n6p5cZL/dG2O/2hihP9ubIv+paSnY+zs5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKmrrQ6gpqceztTRCuzs5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Jf8JKDH/CSw4/wouOv8LKzf/DCg0/wsvQv8FOlX/AVFy/wFWf/8Beq//AYCt/wF0of8BZ5n/CEBb/xI5 - Sv8fLTD/KzQ3/ys9Qv8jQEr/F0JV/wo+VP8ENUv/eX+DiszNyQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC6urYYSkxL4ggQGP8IEh7/CBIe/wgVI/8KHS7/CyIv/wskMf8LIiz/CRIW/wkR - FP8HDA//BwwP/wkVGP8KHyX/CyYu/wsoMv8MKDP/DCYv/wwjK/8MKDf/Ci5E/wYxSv8BRWH/AlFs/wNX - gf8DY5D/BlB7/wkrOP8PIST/EiEj/xYjJv8aJyr/Gyov/yE1RP8jOVH/ECw+/2lubpiVmJURAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLi0GzI0OPoIFyb/BC5A/wYXLf8IGC7/DCI2/wwi - M/8MITD/DB8s/woXH/8JERb/BgsO/wYLDv8IEhX/Chsh/wsdJP8LHSX/DB0l/wwcI/8LGyL/Cxsj/wwd - Kf8KIDD/CSIy/wVDZv8EOVf/CiUz/wwgKv8MHiT/DB0i/w0bHv8PHB7/EB0g/w8dIP8QHyP/ER8n/w4Z - IP9XWVi24uLdBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqamDMaISr+ByEs/wM1 - RP8GFiv/CRgt/w0gMP8MHi7/DB8x/wwgMf8MHCv/CRAW/wYKDv8HCw7/CBAT/woYH/8LGyP/Cxol/wwa - Jf8MGiP/DBkg/wwYIv8LGSX/Choo/wocLP8LHS7/DCEy/wsiMP8MICr/DR8n/wwdI/8MHCD/DRwe/w0c - Hv8KGhz/CBkc/wgbIP8IGiD/UlRTzuzs5gIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB8fnxQCxki/wgjK/8FLjj/BhYq/woXLf8NGyv/DBws/w0eMP8NHS7/DBcj/wkNEv8HCw//BwoO/wgO - Ev8KFBr/CxYe/w0YIP8NGCD/DRcg/wwXHv8MFh7/DBYf/wwXIf8LGCT/DBop/wsbKv8LGyb/Chsj/wsb - Iv8LHCL/Cx0i/wwfJP8MHyL/Chse/wcaHf8GHCD/BCEr/0FHS+zl5d8FAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbW9uZQkXIf8JIyn/CCkv/wgXKP8LFin/DRkp/w0YJv8NGir/DRgo/w0V - H/8LEBX/BwsP/wcLDv8KEBT/ChMX/wsVGv8NFhz/DRce/w0WHf8NFhz/DRQa/w0VGv8MFRz/DBYe/w0Y - If8NGSL/DBok/wsZIv8LGiH/Cxsh/wweJf8MISr/CyUu/wojLf8HGRz/Bhoe/wQgK/8yPkf6rK2qEQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBjYnIIGSH/CiIn/wkjKv8IFiX/CxUm/w0X - Jv8NFiT/Dhkl/w4ZJf8NFB7/CxEW/wgMD/8IDA//DBMW/wsTFv8LExf/CxMY/wwTGf8MExj/DBMX/wwT - Fv8NExf/DBQY/w0VG/8NFx3/DRgf/w0YH/8NGB7/DBkf/w0ZIP8NGyP/DR8o/wwiLv8LISv/CBYZ/wga - Hv8FHyv/MT5K/W9ydBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5e3pVER8l/wof - JP8KHyb/CRUj/yUpMf1RU1XSV1lasFdZWsAzNjv4DBQc/wsRFv8IDA//BwsO/wsRFf8LExb/CxIV/wsR - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vBWBW3RxbUtIqYVjfH3N2kHw/S1f/MkFG/yg1 - OP8jMDL/ICss/xwjKP8TFx3/DRAU/woOD/8KDA3/CQsM/wkLDP8ICgv/CAsM/wgLDv8JDA//CgwP/woM - Dv8KCw//CwsP/w0NEP8MDRH/DQ4R/w0PEv8NEBL/DxIT/w8UFf8PFRf/DxYZ/xAYGv8PGh3/DRgb/w0V - GP8NFRn/Dhkh/xAcLP8VIjf/OD9Q+qSizRhnXu8IZ17vBmdd7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vA1NJvjYpGUqnIQ4szicX - RL1MR2zJTU5y/01ReP9AR3L/Nj1q/y4zW/8oLE3/ISQ//xYZLf8OEBv/CwwQ/wkMDf8JCw3/CQsM/wkL - DP8KDA3/CQwN/wsLDv8MCw7/DAsP/wsLEP8NDBD/DQ0Q/w0OEf8ODxP/DhAT/w4RFP8PExT/EBQW/w8V - GP8PFxr/Dhkd/w4XG/8QFyX/Gx9B/ycpX/8sLmn/LC1m/z48avdFPYSGOzCBfkI4lGVVSsE8ZVroF2dc - 7wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1zvAWdd - 7ws+M4htHAUL6xwFC/0cBQv9HwwQ/SMVF/8oHh3/KSEk/ysmNP8pJEf/LCVU/y4pX/8uKmX/LCll/yUk - WP8XFzb/DhAb/wwMD/8LCw3/CwwN/wwMEv8QDx7/EBAh/xEQIv8RECL/EhEk/xUULP8WFjD/FhYx/xgZ - N/8bHED/HB1B/x8gSP8fIkr/Fxwz/xEbJ/8eIUj/LCpm/yomXf8hGDn/GwsU/xwID/8fDBH+HAYM+BwF - C/YcBQvwHggY2TAiYaFRRrlIZlzvDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZVrqDFRJwDBQRbZBVErAbCgZSdgcBQv8HAUL/xwFC/8cBQv/HAYM/x0GDP8cBwz/HAcM/xwG - DP8cBgz/HAcN/x0MHf8kGUL/LCZf/ysoY/8aGTv/Dw4X/w8PG/8hIE3/Kidh/ywpZv8sKGP/Kydf/yol - XP8sJ2D/LShj/yslXf8qI1f/KyNa/yghVP8mHUr/Jh5K/y0rZv8uL23/KyZd/x0OI/8cBg3/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/4cBQv3IQ8vzko/qFxmW+4LAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZlvvB0c8oVQiGjPHIzBF3yMcOtslFTvrHAUL/RwFC/8cBQv/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwGDP8gEzH/Lill/yMhUv8gH0v/KCJV/xsH - E/8bBQv/GwUL/xsFC/8bBQv/GwUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8eDyT/KiFU/xsH - Dv8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/okEjrDWEzKOGZb - 7wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZb7gw5LHp7Llh371Cv6/5NquP+RZbJ/jt8 - p/8wX4D/KERd/yAkNP8dDxn/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xsH - D/8rJVz/NDJ5/yEVN/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwF - C/8cBQv/HAUL/xwGDP8gIjH/LVVz/zh0nf8+hLH/QIq5/z2Cr/81bZP/JTlQ/xwGDP8cBQv/HAUL/xwF - C/8cBQv+HAUL8TsugYBmW+8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8DU0i+Oikc - TbMrT2zxSqTb/1O59/9Tuff/U7j2/1K28/9Qse3/TKjh/0eb0P9Aibj/NWyR/yhEXf8dDxn/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAgW/zIrav8oHEj/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwG - DP8cCBD/HAcP/xwFC/8cBQv/HAUL/yhDXf9Aibj/T67o/1K29P9QsOv/Tarj/1G18v9Tuff/U7n3/1Cy - 7v89ga7/Hhkm/xwFC/8cBQv/HAUL/xwFC/spGUq0YlfkIGZb7wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - /+AH////////4Af////////gB////////+AH////////4Af////////wD/////////AP//////h/8B/+ - P///+AHwD4Af///4AAAAAB////gAAAAAH///8AAAAAAf///wAAAAAB////AAAAAAD///8AAAAAAP///w - AAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAA - D///8DgAADwf///8/AAAfz/////+AAB///////4AAH/////8/AAAfz////A4AAA8H///8AAAAAAP///w - AAAAAA///9AAAAAAD///AAAAAAAB//4AAAAAAAB//AAAAAAAAD/4AAAAAAAAH/AAAAAAAAAP8AAAAAAA - AA/wAAAAAAAAB/gAAAAAAAAH+AAAAAAAAAf4AAAAAAAAB/gAAAAAAAAP+AAAAAAAAA/4AAAAAAAAD/gA - AAAAAAAH8AAAAAAAAAPwAAAgAAAAA/AAAAAAAAAD8AAAAAAAAAHwAAAAAAAAAeAAAAAAAAADgAAAAAAA - AAOAAAAAAAAABwAAAAAAAAAfgAAAgAAAAB+AAAHAAOAAP+AAA+AA+AD//4AP+AP/D///////D////ygA - AAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsnKY+j1eIvn41eux7PHnpkG6Qm7exsx0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC0uhijYZvPoz2c/6BAmf+hSpz/olqi/6iK - qp/Ryc8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKugpUOlT6D+o0Se/6FG - mv+jUJz/p2Cl/6uBruG2rLUfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOs - rzGdYaH6m1qf/5lbm/+XWJn/mmCe/6OCp9a7s7wXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALmxtw+dhKS+mnek/5d2oP+QbZr/kXCb/6OTpojr6uUBAAAAAAAAAAAAAAAAAAAAAAAA - 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 - QP8vep3/CkZf/wsPE/8KDA//Cw0Q/wwPEf8NERP/DhMV/w8VF/8iJif7ZWZkoo2OilGNjotUaGlnmjI1 - NvINGiT/NDk+7peYlSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSWVmWJjU2/yEuL/8gLzD/GiIp/xkcIP8QExb/CQ0P/wkM - Df8ICwz/CAsN/y5GXv8kSWP/Cw8T/woMEP8KDA//CwwQ/wwOEf8NEBL/DhIT/w8VFv8PFhj/EBca/xce - If8WHiH/DRMX/w0XHP8NGiP/Dh4o/2VoaE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdUtURRz2gQUtBqj1iZoalQEtd/y07Rf8kMDb/ICgt/xcb - I/8NEBX/Cg0O/wkLDP8JCwz/CAoM/wgLDv8JDA7/CgwO/woLD/8LCw//DA0Q/w0OEf8NDxL/DhET/w8T - FP8PFRf/DxcZ/w8aHP8NFxr/DRUa/xAaJ/8XIT3/ICpP/25um1ZiWeMVZVzrC2dd7wIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdd7wU5LXtxHAUO6RwGEOszKzrwPjxV/zw9 - Xv80Nl//Ly9f/y0sX/8mJVb/Gho+/w8QH/8LDRD/CgsN/wsMDf8LDA//DQwT/w0ME/8NDRT/Dg4W/w8P - Gv8QEBv/ERMg/xIVIv8TFyj/Ehgl/w8ZH/8VGzL/JSZY/yknW/8nI1H/JR5D/y8kRNYmFkLGLiFdpEA1 - j15gVd4WZ1zvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8BXFHUFlFGuDJFO5yDHgkc8hwF - C/8cBQv/HQcN/x0JDv8eCw//HQkP/x0KFP8gESz/Jh1J/ykkWv8kIlP/EhEj/w4NF/8fHkn/JyRa/ygl - W/8mI1b/JyNW/yklXP8nI1f/KSNY/ygjV/8nIVL/KCVY/yorY/8pJVn/HxIt/xwHDv8cBQz/HAUL/xwF - C/8cBQv/HAUL/RwGD/EuIF2mWU7OIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhVuESLSZboDJi - huUtSm3lIR4z+BwGDP8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFDP8hFDb/KiZf/yMh - Uv8kG0X/GwYM/xsFC/8bBQv/GwUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAcO/yYbRf8cBg3/HAYN/x0Q - G/8eGCX/HQwU/xwFC/8cBQv/HAUL/xwFC/8cBQz3NShxjGRZ6wsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABiVuISLSdcpT+GtPdRs+//T67o/0id0v9BjLz/O3um/zNnjP8pSWT/HyEv/xwGDP8cBQv/HAUL/xwF - C/8cBQv/HQsf/zUwdv8lGED/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAkR/ylI - Y/89g6//SJ3T/02p4v9Prej/TKff/0GNvf8nQVr/HAUL/xwFC/8cBQv+IQ0s1ldLyCoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmXO8BWE3KJTImaaxCj7/9U7n3/1O59/9Tuff/U7n2/1G18f9StvP/T67o/0OS - w/8sU3H/HAcP/xwFC/8cBQv/ISg6/zFgg/8zZ4v/NGuR/zVtk/84dJz/O32p/z2Cr/9Ai7v/QYy8/yMy - Rv8fHy7/QIm4/1G18f9NqeH/Nm+W/yxPbf89f6v/Urb0/1O59/9Oruj/KEZh/xwFC/8cBQv/HAUO70Y6 - nk9mW+8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlzuCTQnbZVFlcj8U7n3/1O59/9Tuff/P4a0/x4b - KP8yZIj/ULLu/1O59/9St/T/P4a0/x4WIf8cBQv/K1Bu/1Cx7f9Tuff/U7n3/1O59/9Tuff/U7n3/1O5 - 9/9Tuff/U7n3/zdymv83cZn/U7n3/06s5v8lOVD/HQkP/1RPgf9kXHX/SJfK/1O59/9Tuff/RJXH/xwG - Df8cBQv/HAUL8kE1k1hmW+8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZFjnFCsjU7lNqeL+U7n3/1O5 - 9/9St/T/Kk1p/xwFC/8cBQz/P4e1/1O59/9Tuff/U7j2/zl2oP8cBQv/HAUL/yxUcv9Pruj/U7n3/1Cy - 7v9OrOb/TKjg/0um3v9OrOX/Urf0/0mf1f86eaT/U7n3/zh1nf8dBw3/Myow/5aQp/+Ohpv/R5DA/1O5 - 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 - - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.vb deleted file mode 100644 index dfcc418..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/Background.vb +++ /dev/null @@ -1,51 +0,0 @@ -Imports System -Imports System.Windows.Forms - -Public Class Background - Private Const MA_NOACTIVATE As System.Int32 = 3 - Private Const WM_MOUSEACTIVATE As Integer = &H21 -#Region " Properties " - - Protected Overrides Sub WndProc(ByRef m As Message) - 'Don't allow the window to be activated by swallowing the mouse event. - If B2SSettings.FormNoFocus And m.Msg = WM_MOUSEACTIVATE Then - m.Result = New IntPtr(MA_NOACTIVATE) - Return - End If - MyBase.WndProc(m) - End Sub - - Private Sub Background_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown - - 'If B2SSettings.FormToFront And Me.TopMost = True Then - ' ' We have TopMost set, so it is safe to send back! - ' Me.SendToBack() - ' Me.TopMost = True - 'ElseIf Me.TopMost = False Then - ' Me.BringToFront() - 'End If - - End Sub -#End Region 'Properties -#Region "constructor" - - Public Sub New() - - InitializeComponent() - - ' set some styles - 'Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True) - Me.DoubleBuffered = True - - End Sub - - Private Sub Background_MouseClick(sender As Object, e As MouseEventArgs) Handles MyBase.MouseClick - - If e.Button = Windows.Forms.MouseButtons.Right Then - formBackglass.formBackglass_MouseClick(sender, e) - End If - End Sub - -#End Region - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.Designer.vb deleted file mode 100644 index bccf1f2..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.Designer.vb +++ /dev/null @@ -1,47 +0,0 @@ - _ -Partial Class formBackglass - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ - 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 - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(formBackglass)) - Me.SuspendLayout() - ' - 'formBackglass - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None - Me.ClientSize = New System.Drawing.Size(564, 594) - Me.ControlBox = False - Me.DoubleBuffered = True - Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "formBackglass" - Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual - Me.Text = "Backglass" - Me.ResumeLayout(False) - - End Sub -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.resx deleted file mode 100644 index 6a23e00..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.resx +++ /dev/null @@ -1,1734 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzs5gG9ubgOinaELHVS - bz15XXQ8m5OWGLWzsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC0q645l2mRt4U1f/5+J3v/eyp4/4FLgfKfip5+u7S3GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9r7capHabrqE8mf+gPJn/nkCY/59Hm/+fTpz/oWWk+6ucqnDp6OMCAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAua+zP6NRnPinQ6H/pUKd/6RHnP+lUJ//qFmk/61s - rv+si67Ev7a/GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSZn2elVaP/oUef/55G - m/+cSZj/nk+Z/59VnP+maKb/p4Wr4rOpszIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC6tLY5m2ef95teof+aX57/mV+c/5Vbmf+WXJv/m2ig/6OLp8G+t74aAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAuLG2G56Go7eac6T/m3ek/5h0oP+TbZz/j2mZ/5Z0n/6mnad36+rlAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsp6xTlX+g95N7n/+Pd5r/h3CU/4Zw - lf+WiJ3HvLq8JgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAure5FZWP - n6p5cZL/dG2O/2hihP9ubIv+paSnY+zs5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKmrrQ6gpqceztTRCuzs5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Jf8JKDH/CSw4/wouOv8LKzf/DCg0/wsvQv8FOlX/AVFy/wFWf/8Beq//AYCt/wF0of8BZ5n/CEBb/xI5 - Sv8fLTD/KzQ3/ys9Qv8jQEr/F0JV/wo+VP8ENUv/eX+DiszNyQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC6urYYSkxL4ggQGP8IEh7/CBIe/wgVI/8KHS7/CyIv/wskMf8LIiz/CRIW/wkR - FP8HDA//BwwP/wkVGP8KHyX/CyYu/wsoMv8MKDP/DCYv/wwjK/8MKDf/Ci5E/wYxSv8BRWH/AlFs/wNX - gf8DY5D/BlB7/wkrOP8PIST/EiEj/xYjJv8aJyr/Gyov/yE1RP8jOVH/ECw+/2lubpiVmJURAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLi0GzI0OPoIFyb/BC5A/wYXLf8IGC7/DCI2/wwi - M/8MITD/DB8s/woXH/8JERb/BgsO/wYLDv8IEhX/Chsh/wsdJP8LHSX/DB0l/wwcI/8LGyL/Cxsj/wwd - Kf8KIDD/CSIy/wVDZv8EOVf/CiUz/wwgKv8MHiT/DB0i/w0bHv8PHB7/EB0g/w8dIP8QHyP/ER8n/w4Z - IP9XWVi24uLdBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqamDMaISr+ByEs/wM1 - RP8GFiv/CRgt/w0gMP8MHi7/DB8x/wwgMf8MHCv/CRAW/wYKDv8HCw7/CBAT/woYH/8LGyP/Cxol/wwa - Jf8MGiP/DBkg/wwYIv8LGSX/Choo/wocLP8LHS7/DCEy/wsiMP8MICr/DR8n/wwdI/8MHCD/DRwe/w0c - Hv8KGhz/CBkc/wgbIP8IGiD/UlRTzuzs5gIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB8fnxQCxki/wgjK/8FLjj/BhYq/woXLf8NGyv/DBws/w0eMP8NHS7/DBcj/wkNEv8HCw//BwoO/wgO - Ev8KFBr/CxYe/w0YIP8NGCD/DRcg/wwXHv8MFh7/DBYf/wwXIf8LGCT/DBop/wsbKv8LGyb/Chsj/wsb - Iv8LHCL/Cx0i/wwfJP8MHyL/Chse/wcaHf8GHCD/BCEr/0FHS+zl5d8FAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbW9uZQkXIf8JIyn/CCkv/wgXKP8LFin/DRkp/w0YJv8NGir/DRgo/w0V - H/8LEBX/BwsP/wcLDv8KEBT/ChMX/wsVGv8NFhz/DRce/w0WHf8NFhz/DRQa/w0VGv8MFRz/DBYe/w0Y - If8NGSL/DBok/wsZIv8LGiH/Cxsh/wweJf8MISr/CyUu/wojLf8HGRz/Bhoe/wQgK/8yPkf6rK2qEQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBjYnIIGSH/CiIn/wkjKv8IFiX/CxUm/w0X - Jv8NFiT/Dhkl/w4ZJf8NFB7/CxEW/wgMD/8IDA//DBMW/wsTFv8LExf/CxMY/wwTGf8MExj/DBMX/wwT - Fv8NExf/DBQY/w0VG/8NFx3/DRgf/w0YH/8NGB7/DBkf/w0ZIP8NGyP/DR8o/wwiLv8LISv/CBYZ/wga - Hv8FHyv/MT5K/W9ydBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5e3pVER8l/wof - JP8KHyb/CRUj/yUpMf1RU1XSV1lasFdZWsAzNjv4DBQc/wsRFv8IDA//BwsO/wsRFf8LExb/CxIV/wsR - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vBWBW3RxbUtIqYVjfH3N2kHw/S1f/MkFG/yg1 - OP8jMDL/ICss/xwjKP8TFx3/DRAU/woOD/8KDA3/CQsM/wkLDP8ICgv/CAsM/wgLDv8JDA//CgwP/woM - Dv8KCw//CwsP/w0NEP8MDRH/DQ4R/w0PEv8NEBL/DxIT/w8UFf8PFRf/DxYZ/xAYGv8PGh3/DRgb/w0V - GP8NFRn/Dhkh/xAcLP8VIjf/OD9Q+qSizRhnXu8IZ17vBmdd7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vA1NJvjYpGUqnIQ4szicX - RL1MR2zJTU5y/01ReP9AR3L/Nj1q/y4zW/8oLE3/ISQ//xYZLf8OEBv/CwwQ/wkMDf8JCw3/CQsM/wkL - DP8KDA3/CQwN/wsLDv8MCw7/DAsP/wsLEP8NDBD/DQ0Q/w0OEf8ODxP/DhAT/w4RFP8PExT/EBQW/w8V - GP8PFxr/Dhkd/w4XG/8QFyX/Gx9B/ycpX/8sLmn/LC1m/z48avdFPYSGOzCBfkI4lGVVSsE8ZVroF2dc - 7wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1zvAWdd - 7ws+M4htHAUL6xwFC/0cBQv9HwwQ/SMVF/8oHh3/KSEk/ysmNP8pJEf/LCVU/y4pX/8uKmX/LCll/yUk - WP8XFzb/DhAb/wwMD/8LCw3/CwwN/wwMEv8QDx7/EBAh/xEQIv8RECL/EhEk/xUULP8WFjD/FhYx/xgZ - N/8bHED/HB1B/x8gSP8fIkr/Fxwz/xEbJ/8eIUj/LCpm/yomXf8hGDn/GwsU/xwID/8fDBH+HAYM+BwF - C/YcBQvwHggY2TAiYaFRRrlIZlzvDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZVrqDFRJwDBQRbZBVErAbCgZSdgcBQv8HAUL/xwFC/8cBQv/HAYM/x0GDP8cBwz/HAcM/xwG - DP8cBgz/HAcN/x0MHf8kGUL/LCZf/ysoY/8aGTv/Dw4X/w8PG/8hIE3/Kidh/ywpZv8sKGP/Kydf/yol - XP8sJ2D/LShj/yslXf8qI1f/KyNa/yghVP8mHUr/Jh5K/y0rZv8uL23/KyZd/x0OI/8cBg3/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/4cBQv3IQ8vzko/qFxmW+4LAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZlvvB0c8oVQiGjPHIzBF3yMcOtslFTvrHAUL/RwFC/8cBQv/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwGDP8gEzH/Lill/yMhUv8gH0v/KCJV/xsH - E/8bBQv/GwUL/xsFC/8bBQv/GwUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8eDyT/KiFU/xsH - Dv8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/okEjrDWEzKOGZb - 7wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZb7gw5LHp7Llh371Cv6/5NquP+RZbJ/jt8 - p/8wX4D/KERd/yAkNP8dDxn/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xsH - D/8rJVz/NDJ5/yEVN/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwF - C/8cBQv/HAUL/xwGDP8gIjH/LVVz/zh0nf8+hLH/QIq5/z2Cr/81bZP/JTlQ/xwGDP8cBQv/HAUL/xwF - C/8cBQv+HAUL8TsugYBmW+8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8DU0i+Oikc - TbMrT2zxSqTb/1O59/9Tuff/U7j2/1K28/9Qse3/TKjh/0eb0P9Aibj/NWyR/yhEXf8dDxn/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAgW/zIrav8oHEj/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwG - DP8cCBD/HAcP/xwFC/8cBQv/HAUL/yhDXf9Aibj/T67o/1K29P9QsOv/Tarj/1G18v9Tuff/U7n3/1Cy - 7v89ga7/Hhkm/xwFC/8cBQv/HAUL/xwFC/spGUq0YlfkIGZb7wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGdc7wZeU9k0MSRmuDh2n/tTuff/U7n3/1O59/9Tuff/U7n3/1K29P9Qs+//U7j2/1O5 - 9/9RtfL/SZ/V/zVrkf8eFyP/HAUL/xwFC/8cBQv/HAUL/y1ScP82b5b/OHSc/zp6pf86e6b/O32o/z6D - sP9BjLz/Q5DC/0WWyf9IntP/SqLZ/0KOv/8dEx7/HAoT/zdymv9Qsez/U7n3/06s5v81a5H/Ii1A/yId - MP8uUm//Tani/1O59/9Tuff/U7j2/z+GtP8cCRH/HAUL/xwFC/8cBQv+IAwn0VlNzTZmW+8CAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8BZlvtHC0eWK89ga77U7n3/1O59/9Tuff/U7n3/1Cy - 7f8uVXT/Hhso/zFggv9OrOb/U7n3/1O59/9Tufb/SJ3S/yU8U/8cBQv/HAUL/xwGDf9DkcP/U7n3/1O5 - 9/9Tuff/U7n3/1O59/9Tuff/U7n3/1O59/9Tuff/U7n3/1O59/9StvP/J0Jb/ypKZf9StfL/U7n3/0+v - 6v8qTGj/HAUL/yASIP9UUI//Xld0/zxlhv9TuPb/U7n3/1O59/9RtfH/Kkxo/xwFC/8cBQv/HAUL/h4J - HtdUSMA7ZlvvAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1zvAl5T2S4jFTXJR5rO/VO5 - 9/9Tuff/U7n3/1O59/9Ek8X/HAYN/xwFC/8cBQv/MF5//1K39f9Tuff/U7n3/1O59/9LpNz/Ii5B/xwF - C/8cBQv/ICQ0/0ORw/9TuPb/U7n3/1O59/9Tuff/U7n3/1O59/9Tuff/U7n3/1O59/9Tuff/U7n3/zt9 - qP8vWnr/U7j2/1O49v86eKH/HAUL/xwGDP83Lz7/h4Gb/5qQrP9GUGD/UbPv/1O59/9Tuff/U7n3/zyA - rP8cBQv/HAUL/xwFC/0hDzDLXFDVMWZb7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdc - 7wNQRbZJISQ33k2r5P5Tuff/U7n3/1O59/9Tuff/O3ym/xwFC/8cBQv/HAUL/x8eLP9NqeL/U7n3/1O5 - 9/9Tuff/U7n3/zt7pv8cBQv/HAUL/xwFC/8fHCn9QIm5/lO49v9Pr+r/Q5HC/z+Htf88gKv/Onmj/zp4 - ov89ga7/RpjM/1K28/9MqOD/Llh3/1O49v9QsOv/JC9B/SMVGPwvJib/c2+F/7SuyP+Oh5j/QGaF/1O4 - 9f9Tuff/U7n3/1O59/9Gl8v/HAoS/xwFC/8cBQv3MCJjnWVa7RcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmXO8IQzeVaCxPXu1cyPX/Vb33/1O59/9Tuff/U7n2/y9be/8cBQv/HAUL/xwF - C/8dERv/S6Xd/1O59/9Tuff/U7n3/1O59/9Gl8v/HAUL/xwFC/8cBQv5LB9S0ykhOt9AhrT8UbPv/zhz - nP8dERv/Kx1O/yYXPv8cBQv/HAUL/xwGDf8zZor/UbTw/zdxmf9Qs+//R5zQ/SgbNN1dWJ+KenemhpCO - u792c4fxQU5g/0ym3v9Tuff/U7n3/1O59/9Uu/f/TaXR/x0NFf8cBQv8Hwoh1E9DtExmW+8FAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlvvDzcqdYw+e471Z9z7/2bZ+/9fzvn/V8H4/1G0 - 8P8lOlD/HAUL/xwFC/8cBQv/JDRI/1Cw7P9Tuff/U7n3/1O59/9Tuff/RpjM/xwFC/8cBQv8Hgoe1lFK - t1xSS65eOjZH2Tp7pv9RtfH/Qo6//yQsRP8vIVf/HAYO/xwFC/8cBQv/HAcO/zZwlv81ao//SqHX/z6C - r/oqHU+wZV3pKVhPyD8vI12nLExo8Uyn4P9Tuff/U7n3/1a/+P9dy/n/ZNf6/02huP8cBgz9HQcW4EE1 - knJlWuwUZlrvAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRZ6RssHVatSpqz+mXa - +/9l2fv/Zdr7/2XZ+/9awOP/Hxwm/xwFC/8cBQv/HAYM/zl2n/9Tuff/U7n3/1O59/9Tuff/U7n3/z2C - rv8cBQv2IA0o0EI6kW1nYewToZ/bF3BtnZchFzX/O3yn/1K39P9Kotn/KERe/xwFDP8cBQv/HAUL/xwF - C/8cBQv/HAUL/yIwRPwhIDXZRz6ecFRLvlcnGUO+M2iM9U+w6v5VvPf/W8b4/2HR+v9l2Pv/Zdr7/2LS - 8v8xXGv8HggY4EAzjH9eU9o9TECsSlVJxTNmWu0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZb - 7wFcUNUuIxE2ylSy0P1k1/r/ZNf6/2TX+v9k1/r/W8Pj/yU2Qf8cBQv/HhMa/zx4j/9Vu+7/VLr3/1O5 - 9/9Tuff/U7n3/1G08f8rT2v1NSpvp1VNv0JoYu8OgHzvAcXFwShPTlveMCts/yEVM/8/hbP/U7n3/0+u - 6f8vXH3/HAYN/xwFC/8cBQv/HAUL/xwFC/8cBQzySD+gjldPx10kFznHPoGi+VrF9f9g0Pn/Y9b6/2TX - +v9k1/r/ZNf6/2PV+P9EjKT7Hwwi2EI2knVaT9FKJxdGsRwFDOMhDSzDT0K1Q2ZZ7wQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmWu8EUES3SSAbKd5bxOf+YtX6/2LV+v9i1fr/YtX6/2LV+v9dyOz/Vrvc/1rC - 5P9h0/f/YtX6/2HT+v9fzvn/XMn5/1W67v83cZj+HQoX7UpBpXJoYe8NAAAAAMTEvxJ+fnuDGBMk/yMf - Tf8zLXH/ISM4/0mg1v9Tuff/UbPw/zNnjP8cBgz/HAUL/xwFC/8cBQv/HAUL+i8hW8ouIVrFQIOb92HS - 9/9i1fr/YtX6/2LV+v9i1fr/YtX6/2HT9/9ImLP7Ihkz0Eo+pmBlW+wfQjeVbxwFC+wcBQv9HAUL8jwv - hH9mWe8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlrvCEQ4mmkqSVntX871/2HT+v9h0/r/YdP6/2HT - +v9Us9X/SZq2/1a52/9g0vn/YdP6/17M8f9Vtdb/T6nI/0GGoP8qSVn/HAYN/xwFC/kqHU+xYVreImhh - 7wHJyMMcU1JY1ywnXv8rI1n/NC1z/zUscv8xXXr/WsX2/1vI+f9aw/D/MmB0/xwFC/8cBQv/HAUL/xwF - C/8cBQv7KENS+1zI7f9h0/r/YdP6/2HT+v9h0/r/YdP6/1/P9v9CiqT9IRcv3E5DsmxTSL9OQTWSbTQm - bbYcBQv4HAUL/xwFC/kwIWKiZFfqFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVZ7g44K3mJOnSN9V/Q - +f9g0fr/YNH6/2DR+v9dyvL/KUVU/xwFC/8eFx//RZGu/1/Q+f9dyvL/RpKw/yAlMP8cBQv/HAUL/xwF - C/8cBQv9Hgkc2VNLvT9oYe8Du7u6LkpGZvQvI0r/HAYM/xwGDP8mF0D/Hx8o/1a53v9g0fr/YNH6/1a6 - 3/8iKzb/HAUL/xwFC/8cBQv/HAUL/0CFof9g0fr/YNH6/2DR+v9g0fr/YNH6/13L8v86dIz/HAgP+zUo - cbdUSL9tIRwwzjNiePEeFh75HAUL/xwFC/8cBQv7KRhKsmBT4R1lWO8BAAAAAAAAAAAAAAAAAAAAAAAA - AABjVuYbLR5Yq0aTs/pez/n/Xs/5/17P+f9ez/n/Vrzi/x4XIP8cBQv/HAUL/yMvO/9aw+z/Xs/5/17O - +f9Pqs7/ICcy/xwFC/8cBQv/HAUL/h0GEt9RSbpJaGDvCquqyzNZU3zrMiRJ/xwGDP8cBQv/HAUL/xwF - C/9Jm7z/Xs/5/17P+f9ezvj/PX2Z/xwFC/8cBQv/HAUL/xwFC/9Jnb3/Xs/5/17P+f9ez/n/Xs/5/1zJ - 8v83bof/HAcN/xwFC/4jEjfiMyVqzDlyi/hcyvP/LlVp/xwFC/8cBQv/HAUL+ycVQrZfUt4gZljvAQAA - AAAAAAAAAAAAAAAAAABmWe8DXE/WLyMTNslPq9D9Xsz5/17M+f9ezPn/Xsz5/02lyf8cBgz/HAUL/xwF - C/8eEhr/V73m/17M+f9ezPn/Xsz5/0GJp/8cBQv/HAUL/xwFC/wjETPKXVXWPUY8mlpEPmWgUk171D00 - f/8dCBL/HAUL/xwFC/8cBQv/QIel/17M+f9ezPn/Xsz5/0+q0P8dDRX/HAUL/xwFC/8cBQv+RZGx/17M - +f9ezPn/Xsz5/17M+f9FkbL/HAcO/xwFC/8cBQv/HAUL/hwFC/xEjq7/Xcz4/zp3k/8cBQv/HAUL/RwF - DO40Jm+LY1bqEgAAAAAAAAAAAAAAAGVY7wFkVusQWkzQL0o9qHAhJTLlVrzn/lzK+f9cyvn/XMr5/1zK - +f9Ci6z/HAUL/xwFC/8cBQv/JTlJ/1nC7/9cyvn/XMr5/1zK+f9RsNn/HAkQ/xwFC/8cBQzwNyx1jWJa - 4jkkFzu6PoGg9zdmf/YwJ035KBlF/xwFC/8cBQv/HAUL/0GIqf9cyvn/XMr5/1zK+f9Ts9z/HhUe/xwF - C/4cBQ7vKhtN2zVpgvlbyff/XMr5/1zK+f9cyvn/OHCM/xwFC/8cBQv/HAUL/xwFC/8gIy//U7Te/1zK - +f9Dj7D/HAUL+B8KItg2KHONWk3TKmVY7wMAAAAAAAAAAAAAAABiVOUTNyl3eyMjO80oQFXpQIWo/FrG - 9/9ayPn/Wsj5/1rI+f9ax/j/NGiD/xwFC/8cBQv/HAUL/zp2lf9ax/j/Wsj5/1rI+f9ayPn/UK/a/xwJ - Ef0cBQvtKx1SqFpRzjJiWeIoJhhBuUeZwPtZxPT/RZO4/iU3R/8cBgz/HAUL/yMxQP9Sst7/Wsj5/1rI - +f9ayPn/TKbO/x0NFPwdBhLnNyt1lVNJvmohIjTYTqnS/VrI+f9ayPn/Wsj5/0uhyf8eFyD/HAUL/xwF - C/8hJzT/RpW7/1rH+P9ayPn/QYqt+isbUcFTRr9MZFfrE2ZY7wIAAAAAAAAAAAAAAABlV+8BWEnMJyEP - LL9HmMD6Vr7v/lnF+P9Zxvj/Wcb5/1rG+f9Zxvn/WcX4/z1/of8eGSP/HRAY/yxRaP9Tt+b/Wcb5/1rG - +f9Zxvn/Wcb5/0ONsvwjETbUQDWMelxT1ChnXu8FZ17vDEA1jXEmPlHlUK/d/VnG+P9Vu+z/SqDJ/0aW - vv9RsuD/Wcb4/1nG+f9Zxvn/WcX3/zh0k/kkEzrMQDWNcWFY4R9lW+oWPDGDeiY8T+RNp9L9WcX3/1nG - +f9Zxff/TKXQ/0GKr/9FlLr/UrPi/1nF+P9Xv/D/Rpa9+yU0Rt9CNJNrZVjuDAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGBS4hc0JW6KIik52StNY+wzZ4TzOXSU9kCHq/lIm8X8UbLh/lfA8/9Ywvb/UrTk/1Cv - 3v9XwPP/WcT4/1nE+P9ZxPj/WMT4/1Ct3P0lNUfjRDqZbWdd7xFnXu8CAAAAAGde8AFjWeQcOS57hCQ0 - R+NJncf8WML1/1nE+P9ZxPj/WMT4/1nE+P9ZxPj/WMP3/0ibxPwhHjPUUEa3U2de7w1nXu8BZ13wAmNZ - 5Rk+Mol2IRkx0TdvjvVKoMv9U7fo/la87v5Wve/+U7bn/kyk0P09f6H5J0BT6ScXRrtEN5plYlXnFmZZ - 7wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlV+8CYVPkF1JEvTxHOaFWQDKPbDstgXo1KHORLB5YryMf - OtAnQVboNWyM9EGMtPlInMn8TajY/U+t3v1OrNz9SJ3J/Dx9ovckMETcOSx6gmNY5BtnXe8BAAAAAAAA - AAAAAAAAZ17vAmNa5RlDOZZrJRs/xTFgffBHmcT8UrTn/lS67v5Uue3+Tqra/Tp5nPciHzfTRDqZamVb - 7BAAAAAAAAAAAAAAAABnXe8BZlvtD1JGukA2KnWIKBpIuyIlO9UkL0LeJDBE3iMjOtYmGUS/MyVrlkc6 - oVxeUdsmZlnvCWZZ7wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlV+8CZVfvA2VY - 7wZlWO8IZlnvDGRX6xhZTM4wSTylUzwvhXkyJGeZKxxUsiUUO8QjEjTMJBM3yCkZSrM1KHGOTEGtT2RZ - 6BVnXO8CAAAAAAAAAAAAAAAAAAAAAAAAAABnXe8BZ13vC1lPzTM8MYR6KRlKtiIkOtYkMkbgJC9D3iIY - M80xJGWcT0SySmZc7A9nXe8BAAAAAAAAAAAAAAAAAAAAAAAAAABmXO8DZlvvDWFW4R5XS8gyUES3OlFF - ujtWSsgyYFPfIGZZ7xBmWe8FZlnvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlnvAWZZ7wNmWu8HZlrvDmVZ7hdjV+ghY1jnJmNY - 5yNlWusYZlvvDGZc7wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXe8CZ13vCmRa - 6RxaT80xVUvEPVZLxTteVNgrZlztE2dd7wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZlvvAWZa7wFmWu8BZlrvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZ1zvAWdc7wJnXO8CZ1zvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////8B/////////wD/////// - /+AH////////4Af////////gB////////+AH////////4Af////////wD/////////AP//////h/8B/+ - P///+AHwD4Af///4AAAAAB////gAAAAAH///8AAAAAAf///wAAAAAB////AAAAAAD///8AAAAAAP///w - AAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAA - D///8DgAADwf///8/AAAfz/////+AAB///////4AAH/////8/AAAfz////A4AAA8H///8AAAAAAP///w - AAAAAA///9AAAAAAD///AAAAAAAB//4AAAAAAAB//AAAAAAAAD/4AAAAAAAAH/AAAAAAAAAP8AAAAAAA - AA/wAAAAAAAAB/gAAAAAAAAH+AAAAAAAAAf4AAAAAAAAB/gAAAAAAAAP+AAAAAAAAA/4AAAAAAAAD/gA - AAAAAAAH8AAAAAAAAAPwAAAgAAAAA/AAAAAAAAAD8AAAAAAAAAHwAAAAAAAAAeAAAAAAAAADgAAAAAAA - AAOAAAAAAAAABwAAAAAAAAAfgAAAgAAAAB+AAAHAAOAAP+AAA+AA+AD//4AP+AP/D///////D////ygA - AAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsnKY+j1eIvn41eux7PHnpkG6Qm7exsx0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC0uhijYZvPoz2c/6BAmf+hSpz/olqi/6iK - qp/Ryc8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKugpUOlT6D+o0Se/6FG - mv+jUJz/p2Cl/6uBruG2rLUfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOs - rzGdYaH6m1qf/5lbm/+XWJn/mmCe/6OCp9a7s7wXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALmxtw+dhKS+mnek/5d2oP+QbZr/kXCb/6OTpojr6uUBAAAAAAAAAAAAAAAAAAAAAAAA - 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 - QP8vep3/CkZf/wsPE/8KDA//Cw0Q/wwPEf8NERP/DhMV/w8VF/8iJif7ZWZkoo2OilGNjotUaGlnmjI1 - NvINGiT/NDk+7peYlSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSWVmWJjU2/yEuL/8gLzD/GiIp/xkcIP8QExb/CQ0P/wkM - Df8ICwz/CAsN/y5GXv8kSWP/Cw8T/woMEP8KDA//CwwQ/wwOEf8NEBL/DhIT/w8VFv8PFhj/EBca/xce - If8WHiH/DRMX/w0XHP8NGiP/Dh4o/2VoaE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdUtURRz2gQUtBqj1iZoalQEtd/y07Rf8kMDb/ICgt/xcb - I/8NEBX/Cg0O/wkLDP8JCwz/CAoM/wgLDv8JDA7/CgwO/woLD/8LCw//DA0Q/w0OEf8NDxL/DhET/w8T - FP8PFRf/DxcZ/w8aHP8NFxr/DRUa/xAaJ/8XIT3/ICpP/25um1ZiWeMVZVzrC2dd7wIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdd7wU5LXtxHAUO6RwGEOszKzrwPjxV/zw9 - Xv80Nl//Ly9f/y0sX/8mJVb/Gho+/w8QH/8LDRD/CgsN/wsMDf8LDA//DQwT/w0ME/8NDRT/Dg4W/w8P - Gv8QEBv/ERMg/xIVIv8TFyj/Ehgl/w8ZH/8VGzL/JSZY/yknW/8nI1H/JR5D/y8kRNYmFkLGLiFdpEA1 - j15gVd4WZ1zvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8BXFHUFlFGuDJFO5yDHgkc8hwF - C/8cBQv/HQcN/x0JDv8eCw//HQkP/x0KFP8gESz/Jh1J/ykkWv8kIlP/EhEj/w4NF/8fHkn/JyRa/ygl - W/8mI1b/JyNW/yklXP8nI1f/KSNY/ygjV/8nIVL/KCVY/yorY/8pJVn/HxIt/xwHDv8cBQz/HAUL/xwF - C/8cBQv/HAUL/RwGD/EuIF2mWU7OIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhVuESLSZboDJi - huUtSm3lIR4z+BwGDP8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFDP8hFDb/KiZf/yMh - Uv8kG0X/GwYM/xsFC/8bBQv/GwUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAcO/yYbRf8cBg3/HAYN/x0Q - G/8eGCX/HQwU/xwFC/8cBQv/HAUL/xwFC/8cBQz3NShxjGRZ6wsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABiVuISLSdcpT+GtPdRs+//T67o/0id0v9BjLz/O3um/zNnjP8pSWT/HyEv/xwGDP8cBQv/HAUL/xwF - C/8cBQv/HQsf/zUwdv8lGED/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAkR/ylI - Y/89g6//SJ3T/02p4v9Prej/TKff/0GNvf8nQVr/HAUL/xwFC/8cBQv+IQ0s1ldLyCoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmXO8BWE3KJTImaaxCj7/9U7n3/1O59/9Tuff/U7n2/1G18f9StvP/T67o/0OS - w/8sU3H/HAcP/xwFC/8cBQv/ISg6/zFgg/8zZ4v/NGuR/zVtk/84dJz/O32p/z2Cr/9Ai7v/QYy8/yMy - Rv8fHy7/QIm4/1G18f9NqeH/Nm+W/yxPbf89f6v/Urb0/1O59/9Oruj/KEZh/xwFC/8cBQv/HAUO70Y6 - nk9mW+8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlzuCTQnbZVFlcj8U7n3/1O59/9Tuff/P4a0/x4b - KP8yZIj/ULLu/1O59/9St/T/P4a0/x4WIf8cBQv/K1Bu/1Cx7f9Tuff/U7n3/1O59/9Tuff/U7n3/1O5 - 9/9Tuff/U7n3/zdymv83cZn/U7n3/06s5v8lOVD/HQkP/1RPgf9kXHX/SJfK/1O59/9Tuff/RJXH/xwG - Df8cBQv/HAUL8kE1k1hmW+8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZFjnFCsjU7lNqeL+U7n3/1O5 - 9/9St/T/Kk1p/xwFC/8cBQz/P4e1/1O59/9Tuff/U7j2/zl2oP8cBQv/HAUL/yxUcv9Pruj/U7n3/1Cy - 7v9OrOb/TKjg/0um3v9OrOX/Urf0/0mf1f86eaT/U7n3/zh1nf8dBw3/Myow/5aQp/+Ohpv/R5DA/1O5 - 9/9Tuff/T6/q/yAiMv8cBQv/Hgga5E5Csj5mW+8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWU7NJytD - WNdZwfT/U7r3/1O59/9PsOv/ISc4/xwFC/8cBQv/N3KZ/1O59/9Tuff/U7n3/0ie1P8cBQv/HAUL/iUW - POMwUXDrTarj/zt7pv8fGif/KiBN/x0NFv8eFyL/Llh4/06s5/88f6r/UbXx/yxCXetTTYGjfnqgt4+M - p+9OY3v/ULHs/1O59/9Tuff/VLny/yQ3Sf8cBQv6LiBdoGFW4hEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABmW+8BSj6mRjt0hutn2/v/Y9b6/1zJ+f9Mpdj/HAsU/xwFC/8cBQz/QIq5/1O59/9Tuff/U7n3/0mf - 1f8cBQv+HQgY50Y+nGRWUZ1lNU1q7Eym3/9Cj8D/KzJY/x8KHf8cBQv/HAUL/y1VdP8xYoT/RZXI/Csn - VLliWt8wOC55hzJgg+xPr+r/VLv3/1nE+P9g0Pr/Xsfl/x8eJvsmFkS/VkvHNWVa7gcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmW+8DPTGHbEeUrfZk2Pv/ZNj7/2TY+/9QqcX/HAUL/xwFC/8sUGn/ULHs/1O5 - 9/9Tuff/U7n3/z6Fs/wmF0LKQjmRYGVf5wysq7stQ0Bu7ClDYf9Nq+X/SqPa/ydDXf8cBQv/HAUL/xwF - C/8cBQv+JxhD2VBHtGYzKmmhO3yi9Fe+8v9dy/n/YtT7/2TY+/9k1vn/QYOZ+igYR75SRrtaNCZtizMm - bYVZTc4bAAAAAAAAAAAAAAAAAAAAAAAAAABmWu8IMydtlFCsyvxi1fr/YtX6/2LV+v9fzvL/T6nI/0+p - yP9ezPD/YND6/1zK+f9ZxPj/TKXa/yQ1S/JMRKtgaGLvBsPDwApubmuTHRk7/y8paP8uWHr/UbXy/06t - 5/8rT2z/HAUL/xwFC/8cBQv/IxE04DkveqxEjab1YdL3/2LW+v9i1fr/YtX6/2LU+f9ImbT4LSNZrFhN - zDQ5LXyCHAUL9hwFC/FBNZNeZlnvAgAAAAAAAAAAAAAAAAAAAABjV+cUKyVVuVi/4/5h0/r/YdP6/2DS - +f9Jm7j/RpOv/1vF6v9h0/r/VLTW/0eWsv83boT/ICQt/xwFC/swJGGeZ2DtDMPDvxhIRlzmKiJU/y4l - YP8wJmL/SZ3E/1zK+f9Yvuf/J0BO/xwFC/8cBQv/HAUL/ipKW/xezfP/YdP6/2HT+v9h0/r/X8/2/0OM - p/0tI1u/UUa7XTYqdYUpGk7RHAUL/hwFC/s2KHOHZlnvBgAAAAAAAAAAAAAAAAAAAABYTc0nLEVd1l3L - 9P9f0Pr/X9D6/1vH7/8hKDP/HAUL/y1TZf9dzPX/Xcrz/0CGo/8cChH/HAUL/xwFC/4lFj/FY1zkGbi4 - wSRMRW32IhAd/xwFC/8dBxL/NmyD/1/P+f9f0Pr/S6DB/xwHDv8cBQv/HAUL/z6Bnf9f0Pr/X9D6/1/Q - +v9dy/T/PHuV/xwHDv04LHq4LStbxEqdvvojMkD+HAUL/xwFC/wvIGCYZVjuCQAAAAAAAAAAAAAAAGZZ - 7wJLPqlGNm2F617M+P9ezfn/Xs35/1Oz2v8cBw7/HAUL/x0RGf9Zwev/Xs35/13L9/82bIX/HAUL/xwF - C/0rHVG0WlLPNE9Jen5RS4PgKx9M/xwFC/8cBQv/KUZX/1zJ9f9ezfn/WsXv/yMyQP8cBQv/HAUL/j6C - n/9ezfn/Xs35/17N+f9DjKv/HAgO/xwFC/8dBhH6KUZZ+1zJ9P8zZHz/HAUL/xwFC/Q3KXd6ZVjvBgAA - AAAAAAAAXlHbD0Y5oEU1J3GcQ42w+VzK+f9cyvn/XMr5/0iav/8cBQv/HAUL/yY7TP9axfP/XMr5/1zK - +f9JnMH/HAUL/hwGEO1COJNpPTKFczx9m/Q+eZf4LCRO/RwGD/8cBQv/LFBk/1vH9v9cyvn/W8j2/ylF - V/8cBQv5LR9Xzy9Vbe1ax/X/XMr5/1zK+f81aoT/HAUL/xwFC/8cBw7/QYqr/1zK+f88fpz9IQ4w2zcp - d4FbTtUaAAAAAAAAAABlV+8DOy2DXzRnhOZHmMD6V7/v/1rH+f9ax/n/Wsf5/0CGqf8cBQv/HAsS/0GK - rv9ax/n/Wsf5/1rH+f9DjrP9IQ8v2TovfnZiWeMTRTubUjVphelYwfL/S6PN/zVqh/8wXXf/TKbQ/1rH - +f9ax/n/VLjn/iElM/AtIFqkWVDNOjInaJdDkLT3WcX3/1rH+f9PrNj/LVVt/yxRaf9Biq//WMPz/1a9 - 7f4yYHvmSj2nVmVY7QgAAAAAAAAAAAAAAABlV+8CQDKQVC1Ra9k7fJ7xQYuw90aYwPpOqtf9Vr3v/lW8 - 7v9Jnsn/S6TQ/1jB9f9ZxPj/WcT4/1S46P4sSGLaUEa2R2Zd7ggAAAAAYljiEDcsdoM2bo3uVLnq/lnE - +P9Yw/f/WcT4/1nE+P9YwfT/O3ma8jsvgH9hWOEUZ17vAlpQzyAxKWWcN26N7U2m0v1VvO3+Vr3v/lW5 - 6v5Oqdb9P4So9StBXtE9MIduYVTkDQAAAAAAAAAAAAAAAAAAAAAAAAAAZFbsCFRGxClGOaBGPzOPWjot - gHAyJWqWKjFXwzFceuI8gKXxQ4+4+EaZxfpFlsH5PYCl8ixBYM1DN5RaZlzvBwAAAAAAAAAAAAAAAGNa - 5g9ANY5lKztdyT6Cp/NKo9D8TajY/UeaxvsyYn/nNSpwjF9V3BcAAAAAAAAAAGdd7wFiV+MRRDmaTzEl - aJQqK1a6KjJWwispVbowJGaaPzKMYFlMzyRmWe8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABlWO8BZljvAWZZ7wJmWe8HYFTgFVJFvC5EN5lMPTCGZTougHY7LoFwQjaUUFdMySRnXO4FAAAAAAAA - AAAAAAAAAAAAAAAAAABnXe8EWU/NIkE1j1s1KHCIMydtkzcrdoBJPqRFY1nlDmdd7wEAAAAAAAAAAAAA - AAAAAAAAZ1zvAWZb7wdkWeoPYVXiEWRY6g9mWu8IZlnvAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmWu8BZlrvAmZa7wNmW+8CZlvvAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdd7wFnXe8FZ13vBmdd7wRnXO8BAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA///4H///AAD///AP//8AAP//8A///wAA///wD/// - AAD///AP//8AAP//+B///wAA/8/4H+P/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAH/AAD/gAAAAf8AAP+A - AAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4IAAMH/ - AAD/z4AB9/8AAP//gAH//wAA/8+AAff/AAD/ggAAwf8AAP+AAAAB/wAA/4AAAAH/AAD8AAAAAD8AAPgA - AAAADwAA4AAAAAAPAADgAAAAAAcAAOAAAAAABwAA4AAAAAADAADwAAAAAAMAAPAAAAAAAwAA8AAAAAAH - AADgAAAAAAcAAOAAAAAAAwAA4AAAAAABAADgAAAAAAEAAOAAAAAAAQAAwAAAAAABAACAAAAAAAMAAAAA - AAAABwAAAAAgAAAPAACAAHADAB8AAOAA+APAfwAA/4P+D///AAAoAAAAIAAAAEAAAAABACAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGCmkCBPHyZf0d9kaaVoygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6r7QWpFKd6aJBmv+jUJ7/qXqqy8K6wQcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyjqCifWaH9m1Sb/5pXm/+jeKbot663EwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAubG2B5yCo8CVd5//jG6X/5yJ - opkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKiqrAOttLMKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlJagVV1t - iP9WZX79q62uKgAAAAAAAAAAAAAAAAAAAAAAAAAA6urlAaSqug4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLu4F1R2kdFYd6y8Zn2HhnyQl16doqEqvr66Eayw - rhxlip2vPHWa/x9rjP9plbaTqLS3J6WsrCmMqLZJd4uUcGaDi5pXc4TAX3+tw6uvtQoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTmKI1FUV9/wFcof8JW37/BVx8/xcx - PP4sOT33MUBI9zJed/8yVHf/I1SD/xqJxv8tmcT9JY2u/hCFpf8LX3T/DD5J/wE7RP8wYor0srW3GAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHWAmGQHSY3/CEt9/wwp - O/8KGB3/CA8S/wgNEv8KDxT/DRMZ/xIYHP8RGyX/BlJ9/wF6rv8EisD/FoCx/xxQZ/8cRE7/BzhA/xdK - ZP+UmZ80AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYmVpewoW - I/8IEhv/Chok/wodJv8IERT/BwwP/wkbH/8KKTL/Cyo1/wwpN/8GPFj/AVyD/wJtmf8GTHH/FSsz/yMw - NP8eOUb/EzdM/3d8fU8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABKTE6SBSg3/wcXLf8MITL/DCAw/woWH/8GCw7/CRUb/wscJP8MGyT/DBoi/wscKv8JK0L/Cio+/wwf - KP8MHSH/Dhwf/wwcH/8MGyL/WlxbYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAD5CRK0HJy//CRcq/w0aKf8NHCz/CxMb/wcLDv8KERb/DBYd/w0XH/8MFhz/DBYd/wwY - I/8MGib/Cxoi/wwdI/8MISj/CBwi/wUeJv9HTVJ/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAPEFCsQohJ/8UGyj+ODtA4DE1Ou0MExr/CAsP/wsTFv8LEhb/DBIX/wwS - Ff8MExf/DRYc/w0YHv8OGR//Njs85jU8QecMHCL/Bxwk/0JLUoUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+gH1FUFVVtoOEgkzCwr4KtLWxF1NUU6kOEhf/ChAT/woQ - E/8KDhH/Cg4Q/wsRFP8OFhr/Dxke/2ZoZojBwbwPv7+7EHZ3dGNRVFSzjo+OKQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo6OICAAAAAAAAAAAAAAAApqeiJR8l - J/0JDQ//CQ0P/wkLDf8KDA3/DBIV/w4WGf82OjrmvLy3EgAAAAAAAAAAAAAAAOfn4QIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzs5gEAAAAAAAAAAAAA - AACpqaUjHB4e/QgMDv8JDA//CQoN/wsLDv8MERP/DRUY/zg6OuTAwLsQAAAAAAAAAAAAAAAA7OzmAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACChIFCWF1bsoWI - hUfHx8ILvb24E1BQT6EHCw3/Dio7/zd7nv8LDxL/CwsP/wwQEv8NExX/ERcZ/2VmZH/Dw74Ow8O/Dnt7 - eVtWWFmtkpOQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEVN - TbIhLzD/JjE0/jw+P9c0NTXmCQ0O/wgLDP8lNUX/IUdg/wsOEf8LDA//DA4R/w0REv8PFRb/Ehga/zo8 - PN86PT3fEhkd/w0bJP9FSkyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vAT4z - iT8yJml1UFNv0TtFX/8rM07/HyM4/w8SHf8KDA7/CQsM/wkLDf8KDA7/CwsO/wwMEP8NDRH/DQ8S/w4S - FP8PFRf/Dxkc/w4WHf8ZHj7/IidS/0VEbqRBN5M8Wk/OFWdc7wEAAAAAAAAAAAAAAAAAAAAAAAAAAGVa - 6gNUScAfMydrpxwFC/4fDBD+IxYY/yQaLf8lG0H/Jh5K/yQfTv8aGT3/DQ0U/x0bQf8hH0z/IB1I/yMf - Tf8iH0r/Ix9N/yMfSv8jJVL/JSFQ/yIWN/8cBw//HQcN/RwFC/khDi3cPDCDYGZb7gMAAAAAAAAAAAAA - AAAAAAAAQziXODZtlOU7eaXxK1Bt/yAmN/8cCA//HAUL/xwFC/8cBQv/HAUL/yIWOv8pJl7/IRQ0/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/yARL/8iLkH/Llp6/zFhhP8mP1f/HAUL/xwFC/8eCBzrSD2lMgAA - AAAAAAAAAAAAAAAAAABWS8YRMjtxpEum3v5Tuff/Urbz/06r5f9IntP/PIGt/yQ4Tv8cBQv/HAUL/y1K - bv8vV3r/Llp6/zFihf80a5H/OHWd/ylLZ/8lO1L/RZfK/0qj2f89ga3/SqHY/1K39f8/hrT/HAYN/xwF - C/40J253ZlvvAQAAAAAAAAAAAAAAAAAAAAA3K3VxS6Xd/lO59/9Pr+n/Ii1A/zZvlv9Tufb/ULLu/zBe - gP8cBQv/QY2+/1O59/9Tuff/U7n3/1O59/9Tuff/RZXI/0OQwf9NqeH/ICY2/1dRcf9na4X/Urf1/1O4 - 9v8qTGj/HAUL/jEkaIRmW+8BAAAAAAAAAAAAAAAAZlzvAzM+b59Vu/L/U7n3/0aZzf8cBQv/HRAa/1Cx - 7P9Tuff/SqTb/xwFC/8hEy3yQYq69kic0f8zYYb/L1h6/zNni/9Kotn/RJTH/z1+qvZKRGfDj4um7F5+ - oP9Tuff/U7n3/zh0mP8dBhLxQjaVQQAAAAAAAAAAAAAAAAAAAABlWusLPnKOymba+/9g0Pr/Qoyw/xwF - C/8nQlv/Urf0/1O59/9Lpd3/HQcV8Dsyf21aV4l5PYCu/0ORw/8kJkH/HAUL/yQ5UP8zZor+NFSBvUY9 - m187dqHjVLny/1zJ+f9i0/j/M2Fx9joufoRTSMAlZVntAgAAAAAAAAAAAAAAAFZKxh9Fj6rpY9b6/2PW - +v9UtNP/Qoyl/1e74f9axvj/Vr31/zh2n/hFPJlao6HXCFxbYKIqJFz/Qo6//0qj2/8jNUr/HAUL/xwF - C/s9MoOeRpOx7mDQ+f9j1vr/Y9X6/0qbtvE7L4BzMydtlR0HFuVHOqA0AAAAAAAAAAAAAAAAQjaVQk2m - xvhg0vr/YND4/z1+l/9Lob//X872/0aTr/8sT1//HAUL/TMobHu9vMEUQDta8iccSv8sOF3/W8by/1Oy - 2P8dFB3/HAUL/ytNXv1fz/f/YNL6/2DQ+P9Djaj+PDGDmzdIep8iFDTqHAUL/Dcpd2IAAAAAAAAAAGZZ - 7wE1KXNvVbng/V7O+f9YwOn/HQsS/x4YIf9bx/H/W8Xv/ypKXP8cBQv+MyhsjGFckk5HQHLvHAYO/xwF - C/9Ts9n/Xs75/zZuhv8cBQv/Nm6G/17O+f9ezvn/Qoup/xwFDP8kEzrqUKvR/SpLXf8cBQv5OCp5XQAA - AABiVOYFNy95YjRYfc9ZxfT/W8n5/02o0P8cBQv/KENW/1rH9v9byfn/PYGg/iAMJeFPRrNIOG+P2UOK - rvsiHjL/Hhch/1O24f9byfn/PH6e/iIRNNozRnLFWMLw/lvJ+f8zZoD/HAUL/yxSaf9ZxPL/NmqI7Tcp - d3FcT9cMAAAAAFtN1RAzXX7HSJvE902o0/tTuOf+UrXk/z2Cpv9Oq9n/WcX4/1fA8v81Wn/ITEKsLWde - 7wU3Onp9SZ/K91S56v9SteX/WcX4/1W77P4xS3O7TEKsJ0pAqSs4aY3KT6zZ/FS46P9MptL/TqrW/UGH - rOc5N39yZVjuBAAAAAAAAAAAAAAAAFdJyhVFN50zPC+GSDQrcXI1UYCqPXeh0D+ErOM+gKndNlaDrEg9 - oi0AAAAAAAAAAGRb5gc7MoNcOWqSx0KNtu1BibHqNVF+rE5EsiMAAAAAAAAAAFZMxxQ4LHlbMTJqiDIy - a4g2KnZiUEO4ImZZ7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZZ7wNmWu4JY1fnEmRZ - 6Q9mW+8EAAAAAAAAAAAAAAAAAAAAAAAAAABlW+sJWE3JHFpPzhpmXO4GAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZlrvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////D////gf///4H///+D///Pw+f/wA - AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//uAHf/7gB3/8AAA//AAAP+AAAAfAAAADwAAAA8AA - AAHgAAABwAAAA8AAAAHAAAABwAAAAYAAAAEAAAABAAAAA4AYDAf4Ph+/KAAAABAAAAAgAAAAAQAgAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLWIY2iF+HLgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqKwQoFGd+aJn - ouy6sboHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq7GxAwAAAAAAAAAAubG3Aoh7 - mcWCdpOwAAAAAAAAAAAAAAAApKq6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRsjIc7aJbQQ2FxoUdQ - VIdCbInrNHek5EyXuJNGfpWuPVxn1lZ3nHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9T3G3CS5L/wkW - G/8JEhb/DSEp/wo5VP8CdaX/FFh6/xs6Q/9BVmagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKjY8zwoa - Lf8MGSb/CA8U/wwZIf8MGCL/CyM0/wwdI/8MHSL/LTU5uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJI - SatFR0qNPkBCqwsQFP8LERT/CxEU/w4XHf9DRkafRElKlkNIS5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADp6eMBAAAAAKeooxIVGRr+CQsO/wsPEf8nKyzyvb65CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAASlBQqUpOToo9Pj2mEyIv/yFJYP8LDRD/DxQW/0NFRJtGSUiSRUlLlQAAAAAAAAAAAAAAAAAA - AABWS8UJLB9YljY2SfMlJD7/Gxg5/xAQIf8XFjT/GRc2/xoZN/8bHTv/HRw8/ygjQegoGUqKPjKJGQAA - AAAAAAAAOFiMdEORw/s9g7D/M2mO/x4bKP8mK0//J0Bc/ylKZf8oR2H/LVV0/zh1nv9Aibj/KEZg/ycX - R6UAAAAAAAAAADY4dEVStfD/OXqk/0GOv/9JoNf/Kkto/Eyo4P1ElMf/RprO/0SUxv1eW3XrW5vM/0SV - yP8mFkStAAAAAAAAAABEf6N3Y9X6/0GHo/9Oqdf/TKje/TUrZnBFXoTGP4W0/yAnN/8wSHLVTZ3FzF3M - +P9LmrrWMSNliUg8pA4AAAAATJvCql7M9f81an//V73k/yQ2RP5PSXtaNS1S+EOMrv9Glrb/KERV/l/P - +f9FkrD/PWyUyCInN/g3KngwOFGFT0uhy/BUuOb/OHOT/1rF9v81XYC1PVyRaUSPtfxMpM//TKLM7jI1 - bHxRsNzxQIit/0eZwfg3VIN0W07VA1dJywVAM5AfNkV8SEF8rHQ+b59nSD2iC2Na5gI8XJJLRIa2gzxQ - jDUAAAAAPjOMHDEya0Q+MoshAAAAAAAAAAD+fwAA/D8AAOx3AADgBwAA4AcAAOAHAADgBwAA6B8AAOAH - AACAAQAAgAEAAIABAACAAAAAgAAAAAAAAAAAIwAA - - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.vb deleted file mode 100644 index 9cc2057..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formBackglass.vb +++ /dev/null @@ -1,3335 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.IO -Imports System.Windows.Forms -Imports Microsoft.Win32 - -Public Class formBackglass - Inherits System.Windows.Forms.Form - Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As IntPtr) As Integer - Private Declare Function IsWindow Lib "user32.dll" (ByVal hwnd As IntPtr) As Boolean - - Private Const minSize4Image As Integer = 300000 - - Private B2SScreen As B2SScreen = Nothing ' was New B2SScreen(), delayed to do later - Westworld, 2016-11-18 - Private B2SLED As B2SLED = New B2SLED() - Private B2SAnimation As B2SAnimation = New B2SAnimation() - - Private formDMD As formDMD = Nothing - Private formSettings As formSettings = Nothing - Private formMode As formMode = Nothing - - Private timer As Timer = Nothing - Private tabletimer As Timer = Nothing - Private B2STimer As Timer = Nothing - Private tableHandle As Integer = 0 - - Private rotateTimer As Timer = Nothing - Private rotateSlowDownSteps As Integer = 0 - Private rotateRunTillEnd As Boolean = False - Private rotateRunToFirstStep As Boolean = False - Private rotateSteps As Integer = 0 - Private rotateAngle As Single = 0 - Private rotateTimerInterval As Integer = 0 - Private Const MA_NOACTIVATE As System.Int32 = 3 - Private Const WM_MOUSEACTIVATE As Integer = &H21 - -#Region " Properties " - - Protected Overrides Sub WndProc(ByRef m As Message) - 'Don't allow the window to be activated by swallowing the mouse event. - If B2SSettings.FormNoFocus And m.Msg = WM_MOUSEACTIVATE Then - m.Result = New IntPtr(MA_NOACTIVATE) - Return - End If - MyBase.WndProc(m) - End Sub -#End Region 'Properties -#Region "constructor and closing" - - Public Sub New() - - - InitializeComponent() - - ' set some styles - Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True) - Me.DoubleBuffered = True - - ' set key peview to allow some key action - Me.KeyPreview = True - - ' mabye create the base registry key - If Registry.CurrentUser.OpenSubKey("Software\B2S") Is Nothing Then Registry.CurrentUser.CreateSubKey("Software\B2S") - If Registry.CurrentUser.OpenSubKey("Software\B2S\VPinMAME") Is Nothing Then Registry.CurrentUser.CreateSubKey("Software\B2S\VPinMAME") - - ' get the table - 'IO.Directory.SetCurrentDirectory("C:\Visual Pinball\Tables") - 'B2SData.TableFileName = "Big Guns (Williams 1987)_1.0" - 'B2SData.TableFileName = "ScaredStiff_FS_B2S_GI8" - 'B2SData.TableFileName = "ACDC_B2S" '"Baseball 1.0 FS" '"Elvira_and_the_Party_Monsters_VP91x_v1.2FS" '"Close_Encounters_FS" - 'B2SData.TableFileName = "Close_Encounters_FS" - 'B2SData.TableFileName = "Pinbot.uw.V1.02.1_JF_91x_BMPR_MOD_FS" - 'B2SData.TableFileName = "ScaredStiff_FS_B2S" - If My.Application.CommandLineArgs.Count > 0 Then - B2SData.TableFileName = My.Application.CommandLineArgs(0).ToString - - If B2SData.TableFileName.EndsWith(".directb2s") Then - B2SData.TableFileName = System.IO.Path.GetFileNameWithoutExtension(B2SData.TableFileName) - B2SSettings.PureEXE = True - End If - - If My.Application.CommandLineArgs.Count > 1 Then - If My.Application.CommandLineArgs(1).ToString = "1" Then - Me.TopMost = True - End If - End If - Else - MessageBox.Show("Please do not start the EXE this way.", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error) - End - End If - - - ' get the game name - 'B2SSettings.GameName = "bguns_l8" - 'B2SSettings.GameName = "closeenc" - 'B2SSettings.B2SName = "Baseball" - 'B2SSettings.B2SName = "Spider-Man(Stern 2007) alt full dmdON127" - 'B2SSettings.GameName = "smanve_101" - 'B2SData.TableFileName = "Spider-Man(Stern 2007) alt full dmdON127" - - - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S") - B2SSettings.GameName = regkey.GetValue("B2SGameName", String.Empty) - B2SSettings.B2SName = regkey.GetValue("B2SB2SName", String.Empty) - End Using - - ' Westworld 2016-18-11 - TableFileName is empty in some cases when launched via PinballX, we use GameName as alternativ - If String.IsNullOrEmpty(B2SData.TableFileName) Then - B2SData.TableFileName = B2SSettings.GameName - End If - B2SScreen = New B2SScreen() ' was started before Tablename was identified, so alternativ ScreenRes was failing - - - ' load settings - B2SSettings.Load() - - If B2SSettings.CPUAffinityMask > 0 Then - Dim Proc = Process.GetCurrentProcess - Proc.ProcessorAffinity = B2SSettings.CPUAffinityMask - End If - - ' get B2S xml and start - Try - LoadB2SData() - Catch ex As Exception - If B2SSettings.ShowStartupError Then - MessageBox.Show(ex.Message, My.Resources.AppTitle, Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Error) - End If - End - End Try - - ' initialize screen settings - InitB2SScreen() - - ' resize images - ResizeSomeImages() - - ' show snippits - ShowStartupSnippits() - - ' create 'image on' timer and start it - timer = New Timer() - timer.Interval = 2000 - AddHandler timer.Tick, AddressOf Timer_Tick - timer.Start() - - ' create 'table is still running' timer - tabletimer = New Timer - tabletimer.Interval = 207 - AddHandler tabletimer.Tick, AddressOf TableTimer_Tick - - ' create B2S data timer - B2STimer = New Timer - B2STimer.Interval = 13 - AddHandler B2STimer.Tick, AddressOf B2STimer_Tick - - ' create rotation timer - rotateTimer = New Timer - If rotateTimerInterval > 0 Then - rotateTimer.Interval = rotateTimerInterval - End If - AddHandler rotateTimer.Tick, AddressOf RotateTimer_Tick - - End Sub - - Private Sub formBackglass_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown - - If Not B2SSettings.FormToFront Then - Me.SendToBack() - End If - - - 'Me.TopMost = False - - SetFocusToVPPlayer() - - End Sub - - Private Sub formBackglass_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing - - On Error Resume Next - - ' stop all timer - timer.Stop() - tabletimer.Stop() - B2STimer.Stop() - rotateTimer.Stop() - - ' unload DMD form stuff - If formDMD IsNot Nothing Then - formDMD.Close() - formDMD.Dispose() - End If - - If B2SScreen.formbackground IsNot Nothing Then - B2SScreen.formbackground.Close() - B2SScreen.formbackground.Dispose() - End If - - ' unload mode form - If formMode IsNot Nothing Then - formMode.Close() - formMode.Dispose() - End If - - ' unload backglass form stuff - For Each picbox As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - If picbox.Value IsNot Nothing Then - If picbox.Value.BackgroundImage IsNot Nothing Then - picbox.Value.BackgroundImage.Dispose() - picbox.Value.BackgroundImage = Nothing - End If - If picbox.Value.OffImage IsNot Nothing Then - picbox.Value.OffImage.Dispose() - picbox.Value.OffImage = Nothing - End If - picbox.Value.Dispose() - End If - Next - For Each led As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - led.Value.Dispose() - Next - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - led.Value.Dispose() - Next - For Each reel As KeyValuePair(Of String, B2SReelBox) In B2SData.Reels - reel.Value.Dispose() - Next - If TopLightImage4Authentic IsNot Nothing Then - TopLightImage4Authentic.Dispose() - TopLightImage4Authentic = Nothing - End If - If TopLightImage4Fantasy IsNot Nothing Then - TopLightImage4Fantasy.Dispose() - TopLightImage4Fantasy = Nothing - End If - If SecondLightImage4Authentic IsNot Nothing Then - SecondLightImage4Authentic.Dispose() - SecondLightImage4Authentic = Nothing - End If - If SecondLightImage4Fantasy IsNot Nothing Then - SecondLightImage4Fantasy.Dispose() - SecondLightImage4Fantasy = Nothing - End If - If TopAndSecondLightImage4Authentic IsNot Nothing Then - TopAndSecondLightImage4Authentic.Dispose() - TopAndSecondLightImage4Authentic = Nothing - End If - If TopAndSecondLightImage4Fantasy IsNot Nothing Then - TopAndSecondLightImage4Fantasy.Dispose() - TopAndSecondLightImage4Fantasy = Nothing - End If - If DarkImage4Authentic IsNot Nothing Then - DarkImage4Authentic.Dispose() - DarkImage4Authentic = Nothing - End If - If DarkImage4Fantasy IsNot Nothing Then - DarkImage4Fantasy.Dispose() - DarkImage4Fantasy = Nothing - End If - If BackgroundImage IsNot Nothing Then - BackgroundImage.Dispose() - BackgroundImage = Nothing - End If - - ' stop all animations - StopAllAnimations() - - ' clean up some classes - B2SData.ClearAll() - B2SSettings.ClearAll() - - End Sub - -#End Region - - -#Region "painting" - - Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs) - 'If B2sSettings.HideBackglass Then hide this form - If B2SSettings.HideB2SBackglass Then - Me.Hide() - Return - End If - - ' some rendering hints - e.Graphics.PageUnit = GraphicsUnit.Pixel - e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias - - ' draw background and illumination images - If Me.BackgroundImage IsNot Nothing Then - - On Error Resume Next - - ' generate new clipping region - Dim clip As Region = New Region(e.ClipRectangle) - For Each ledarea As KeyValuePair(Of String, B2SData.LEDAreaInfo) In B2SData.LEDAreas - If Not ledarea.Value.IsOnDMD Then - clip.Exclude(ledarea.Value.Rect) - End If - Next - e.Graphics.SetClip(clip, Drawing2D.CombineMode.Replace) - - ' draw background image - e.Graphics.DrawImage(Me.BackgroundImage, 0, 0) - - ' draw all visible and necessary images - If B2SData.Illuminations.Count > 0 Then - - If Not B2SData.UseZOrder Then - - ' draw all standard images - For Each illu As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - DrawImage(e, illu.Value) - Next - - Else - - ' first of all draw all standard images - For Each illu As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - If illu.Value.ZOrder = 0 Then DrawImage(e, illu.Value) - Next - ' now draw zorderd images - For Each illus As KeyValuePair(Of Integer, B2SPictureBox()) In B2SData.ZOrderImages - 'For Each illu As B2SPictureBox In illus.Value - ' DrawImage(e, illu) - 'Next - For i As Integer = 0 To illus.Value.Length - 1 - DrawImage(e, illus.Value(i)) - Next - Next - - End If - - End If - - End If - - End Sub - Protected Overrides Sub OnPaintBackground(e As System.Windows.Forms.PaintEventArgs) - - ' no background painting here - - End Sub - - Private Sub DrawImage(e As System.Windows.Forms.PaintEventArgs, picbox As B2SPictureBox) - - If picbox IsNot Nothing Then - - Dim drawme As Boolean = (Not B2SSettings.AllOut AndAlso picbox IsNot Nothing AndAlso Not picbox.IsDisposed AndAlso picbox.Visible AndAlso e.ClipRectangle.IntersectsWith(Rectangle.Round(picbox.RectangleF))) - If drawme AndAlso B2SScreen.BackglassCutOff <> Nothing Then - drawme = Not B2SScreen.BackglassCutOff.IntersectsWith(Rectangle.Round(picbox.RectangleF)) - End If - If drawme AndAlso picbox.RomID <> 0 AndAlso Not picbox.SetThruAnimation Then - drawme = (picbox.RomID <> TopRomID OrElse picbox.RomIDType <> TopRomIDType OrElse picbox.RomInverted <> TopRomInverted) AndAlso (picbox.RomID <> SecondRomID OrElse picbox.RomIDType <> SecondRomIDType OrElse picbox.RomInverted <> SecondRomInverted) - End If - If drawme AndAlso B2SData.DualBackglass Then - drawme = (picbox.DualMode = B2SData.eDualMode.Both OrElse picbox.DualMode = B2SSettings.CurrentDualMode) - End If - - ' maybe write a drawing log - If B2SSettings.IsPaintingLogOn AndAlso Not String.IsNullOrEmpty(B2SSettings.LogPath) Then - ' write to log file - On Error Resume Next - Dim log As IO.StreamWriter = New IO.StreamWriter(IO.Path.Combine(B2SSettings.LogPath, "Drawing.txt"), True) - log.WriteLine(DateTime.Now & ": " & picbox.Name & ", Visible=" & picbox.Visible.ToString() & ", DrawMe=" & drawme.ToString() & ", Rect=" & Rectangle.Round(picbox.RectangleF).ToString()) - log.Flush() - log.Close() - End If - - If drawme Then - If B2SData.OnAndOffImage Then - If B2SData.IsOffImageVisible AndAlso picbox.OffImage IsNot Nothing Then - 'e.Graphics.DrawImage(picbox.OffImage, picbox.RectangleF) - e.Graphics.DrawImage(picbox.OffImage, picbox.RectangleF.Location) - Else - 'e.Graphics.DrawImage(picbox.BackgroundImage, picbox.RectangleF) - e.Graphics.DrawImage(picbox.BackgroundImage, picbox.RectangleF.Location) - End If - Else - 'e.Graphics.DrawImage(picbox.BackgroundImage, picbox.RectangleF) - e.Graphics.DrawImage(picbox.BackgroundImage, picbox.RectangleF.Location) - End If - End If - - End If - - End Sub - -#End Region - - -#Region "some timer events" - - Private Sub Timer_Tick() - - timer.Stop() - - ' set focus to the VP player - SetFocusToVPPlayer() - - ' start autostarted animations - B2SAnimation.AutoStart() - - ' start B2S data timer - B2STimer.Start() - - ' set focus to the VP player - SetFocusToVPPlayer() - - ' start table check timer - tabletimer.Start() - - End Sub - - Private Sub TableTimer_Tick() - - If tableHandle <> 0 AndAlso Not IsWindow(tableHandle) Then - ' get out here - tabletimer.Stop() - Me.Close() - Me.Dispose() - End If - - End Sub - - Private Sub B2STimer_Tick() - - ' poll registry data - PollingData() - - ' show some 'startup on' images (one time) - ShowStartupImages() - - End Sub - - Private Sub RotateTimer_Tick() - - Static currentAngleS As Single = 0 - Static currentAngle As Integer = 0 - - ' move on with rotation - If B2SData.RotatingImages(0).ContainsKey(currentAngle) Then - - B2SData.RotatingPictureBox(0).BackgroundImage = B2SData.RotatingImages(0)(currentAngle) - B2SData.RotatingPictureBox(0).Visible = True - - currentAngleS += rotateAngle - If currentAngleS >= 360 Then currentAngleS = 0 - currentAngle = CInt(currentAngleS) - - Else - - rotateTimer.Stop() - - End If - - ' mabye slow down the rotation or stop it at a certain step - If rotateSlowDownSteps > 0 Then - - Const lastStep As Integer = 25 - Const add2IntervalPerStep As Integer = 3 - - If rotateSlowDownSteps >= lastStep Then - rotateTimer.Stop() - rotateSlowDownSteps = 0 - rotateTimer.Interval = rotateTimerInterval - Else - rotateSlowDownSteps += 1 - rotateTimer.Interval += add2IntervalPerStep - End If - - ElseIf rotateRunTillEnd Then - - If currentAngleS + rotateAngle >= 360 Then - rotateTimer.Stop() - End If - - ElseIf rotateRunToFirstStep Then - - If currentAngleS = 0 Then - rotateTimer.Stop() - End If - - End If - - End Sub - -#End Region - - -#Region "polling action" - - Private isVisibleStateSet As Boolean = False - Private lastTopVisible As Boolean = False - Private lastSecondVisible As Boolean = False - - Private pollingInit As Boolean = False - Private lamps(400) As Integer - Private solenoids(400) As Integer - Private gistrings(400) As Integer - Private b2sSets(400) As Integer - Private mechs(5) As Integer - Private leds(100) As Integer - - Private animations As Generic.Dictionary(Of String, Integer) = Nothing - Private lastRandomStartedAnimation As String = String.Empty - - Private rotation As Integer = 0 - - Private sounds As Generic.Dictionary(Of String, Integer) = Nothing - - Private Sub PollingData() - - ' initialize the value storage - this storage is to avoid too much update traffic - InitializePollArrays() - - ' open registry sub key - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - - ' get current data - Dim lampsData As String = GetLampsPollingData(regkey) - Dim solenoidsData As String = GetSolenoidsPollingData(regkey) - Dim gistringsData As String = GetGIStringsPollingData(regkey) - Dim b2sSetsData As String = GetB2SSetsPollingData(regkey) - Dim mechsData As Integer() = GetMechPollingData(regkey) - Dim animationsdata As String = GetAnimationsPollingData(regkey) - Dim rotationsdata As String = GetRotationsPollingData(regkey) - Dim soundsdata As String = GetSoundsPollingData(regkey) - - ' first of all have a look at the both top images - Dim topVisible As Boolean = lastTopVisible - topVisible = GetLampsTopVisible(lampsData, topVisible) - topVisible = GetSolenoidsTopVisible(solenoidsData, topVisible) - topVisible = GetGIStringsTopVisible(gistringsData, topVisible) - topVisible = GetB2SSetsTopVisible(b2sSetsData, topVisible) - Dim secondVisible As Boolean = lastSecondVisible - secondVisible = GetLampsSecondVisible(lampsData, secondVisible) - secondVisible = GetSolenoidsSecondVisible(solenoidsData, secondVisible) - secondVisible = GetGIStringsSecondVisible(gistringsData, secondVisible) - secondVisible = GetB2SSetsSecondVisible(b2sSetsData, secondVisible) - ' maybe show or hide top images - If lastTopVisible <> topVisible OrElse lastSecondVisible <> secondVisible OrElse Not isVisibleStateSet Then - B2SData.IsOffImageVisible = False - isVisibleStateSet = True - lastTopVisible = topVisible - lastSecondVisible = secondVisible - If topVisible AndAlso secondVisible Then - BackgroundImage = TopAndSecondLightImage - ElseIf topVisible Then - BackgroundImage = TopLightImage - ElseIf secondVisible Then - BackgroundImage = SecondLightImage - Else - BackgroundImage = DarkImage - B2SData.IsOffImageVisible = True - End If - End If - - ' get thru all lamps - GetThruAllLamps(lampsData) - - ' get thru all solenoids - GetThruAllSolenoids(solenoidsData) - - ' get thru all gistrings - GetThruAllGIStrings(gistringsData) - - ' get thru all B2SSetData - GetThruAllB2SData(b2sSetsData) - - ' get thru all mechs - GetThruAllMechs(mechsData) - - ' get thru all LEDs - GetThruAllLEDs(regkey) - - ' get thru all animations - GetThruAllAnimations(regkey, animationsdata) - - ' get thru all rotations - GetThruAllRotations(regkey, rotationsdata) - - ' get thru all sounds - GetThruAllSounds(regkey, soundsdata) - - ' maybe hide score display - GetThruAllScoreDisplays(regkey) - - ' maybe show or hide some illus by groupname - GetThruAllIlluGroups(regkey) - - End Using - - End Sub - - Private Sub InitializePollArrays() - - If Not pollingInit Then - - pollingInit = True - - For I As Integer = 0 To 250 - lamps(I) = 0 - Next - For I As Integer = 0 To 250 - solenoids(I) = 0 - Next - For I As Integer = 0 To 250 - gistrings(I) = 0 - Next - For I As Integer = 0 To 250 - b2sSets(I) = 0 - Next - For I As Integer = 0 To 5 - mechs(I) = -1 - Next - For I As Integer = 0 To 100 - leds(I) = 0 - Next - animations = New Generic.Dictionary(Of String, Integer) - sounds = New Generic.Dictionary(Of String, Integer) - - End If - - End Sub - - Private Function GetLampsPollingData(ByVal regkey As RegistryKey) As String - - Dim lampsData As String = String.Empty - - If B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps Then - lampsData = regkey.GetValue("B2SLamps", New String("0", 401)) - 'If B2SSettings.IsROMControlled AndAlso lampsData.Contains("2") Then - ' regkey.SetValue("B2SLamps", lampsData.Replace("2", "0")) - 'End If - End If - - Return lampsData - - End Function - Private Function GetSolenoidsPollingData(ByVal regkey As RegistryKey) As String - - Dim solenoidsData As String = String.Empty - - If B2SData.UseRomSolenoids OrElse B2SData.UseAnimationSolenoids Then - solenoidsData = regkey.GetValue("B2SSolenoids", New String("0", 251)) - If B2SSettings.IsROMControlled AndAlso solenoidsData.Contains("2") Then - regkey.SetValue("B2SSolenoids", solenoidsData.Replace("2", "0")) - End If - End If - - Return solenoidsData - - End Function - Private Function GetGIStringsPollingData(ByVal regkey As RegistryKey) As String - - Dim gistringsData As String = String.Empty - - If B2SData.UseRomGIStrings OrElse B2SData.UseAnimationGIStrings Then - gistringsData = regkey.GetValue("B2SGIStrings", New String("0", 251)) - End If - - Return gistringsData - - End Function - Private Function GetB2SSetsPollingData(ByVal regkey As RegistryKey) As String - - Dim b2sSetsData As String = String.Empty - - If B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps Then - b2sSetsData = regkey.GetValue("B2SSetData", New String(Chr(0), 251)) - 'If B2SSettings.IsROMControlled AndAlso b2sSetsData.Contains("2") Then - ' regkey.SetValue("B2SSetData", b2sSetsData.Replace("2", "0")) - 'End If - End If - - Return b2sSetsData - - End Function - Private Function GetMechPollingData(ByVal regkey As RegistryKey) As Integer() - - Dim mechsData As Integer() = New Integer() {-1, -1, -1, -1, -1, -1} - - If B2SData.UseRomMechs Then - For i As Integer = 1 To Math.Min(B2SData.UsedRomMechIDs.Count, 5) - mechsData(i) = regkey.GetValue("B2SMechs" & i.ToString(), -1) - Next - End If - - Return mechsData - - End Function - Private Function GetAnimationsPollingData(ByVal regkey As RegistryKey) As String - - Dim animationsdata As String = String.Empty - - If B2SAnimation.AreThereAnimations Then - animationsdata = regkey.GetValue("B2SAnimations", String.Empty) - End If - - Return animationsdata - - End Function - Private Function GetRotationsPollingData(ByVal regkey As RegistryKey) As String - - Dim rotationsdata As String = String.Empty - - rotationsdata = regkey.GetValue("B2SRotations", String.Empty) - - Return rotationsdata - - End Function - Private Function GetSoundsPollingData(ByVal regkey As RegistryKey) As String - - Dim soundsdata As String = String.Empty - - soundsdata = regkey.GetValue("B2SSounds", String.Empty) - - Return soundsdata - - End Function - - Private Function GetLampsTopVisible(ByVal lampsData As String, ByVal currentTopVisible As Boolean) As Boolean - - Dim topVisible As Boolean = currentTopVisible - - If B2SData.UseRomLamps AndAlso TopRomIDType = B2SBaseBox.eRomIDType.Lamp Then - Dim lampid As Integer = TopRomID - Dim currentvalue As Integer = CInt(lampsData.Substring(lampid, 1)) - If lamps(lampid) <> currentvalue Then - If Not B2SData.UsedRomLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedAnimationLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(lampid) Then lamps(lampid) = currentvalue - topVisible = (currentvalue <> 0) - If TopRomInverted Then topVisible = Not topVisible - End If - End If - - Return topVisible - - End Function - Private Function GetSolenoidsTopVisible(ByVal solenoidsData As String, ByVal currentTopVisible As Boolean) As Boolean - - Dim topVisible As Boolean = currentTopVisible - - If B2SData.UseRomSolenoids AndAlso TopRomIDType = B2SBaseBox.eRomIDType.Solenoid Then - Dim solenoidid As Integer = TopRomID - Dim currentvalue As Integer = CInt(solenoidsData.Substring(solenoidid, 1)) - If solenoids(solenoidid) <> currentvalue Then - If Not B2SData.UsedRomSolenoidIDs.ContainsKey(solenoidid) AndAlso Not B2SData.UsedAnimationSolenoidIDs.ContainsKey(solenoidid) AndAlso Not B2SData.UsedRandomAnimationSolenoidIDs.ContainsKey(solenoidid) Then solenoids(solenoidid) = currentvalue - topVisible = (currentvalue <> 0) - If TopRomInverted Then topVisible = Not topVisible - End If - End If - - Return topVisible - - End Function - Private Function GetGIStringsTopVisible(ByVal gistringsData As String, ByVal currentTopVisible As Boolean) As Boolean - - Dim topVisible As Boolean = currentTopVisible - - If B2SData.UseRomGIStrings AndAlso TopRomIDType = B2SBaseBox.eRomIDType.GIString Then - Dim gistringid As Integer = TopRomID - Dim currentvalue As Integer = CInt(gistringsData.Substring(gistringid, 1)) - If gistrings(gistringid) <> currentvalue Then - If Not B2SData.UsedRomGIStringIDs.ContainsKey(gistringid) AndAlso Not B2SData.UsedAnimationGIStringIDs.ContainsKey(gistringid) AndAlso Not B2SData.UsedRandomAnimationGIStringIDs.ContainsKey(gistringid) Then gistrings(gistringid) = currentvalue - topVisible = (currentvalue > 4) - If TopRomInverted Then topVisible = Not topVisible - End If - End If - - Return topVisible - - End Function - Private Function GetB2SSetsTopVisible(ByVal b2sSetsData As String, ByVal currentTopVisible As Boolean) As Boolean - - Dim topVisible As Boolean = currentTopVisible - - If B2SData.UseRomLamps AndAlso TopRomIDType = B2SBaseBox.eRomIDType.Lamp Then - Dim b2ssetid As Integer = TopRomID - Dim currentvalue As Integer = Asc(b2sSetsData.Substring(b2ssetid, 1)) - If b2sSets(b2ssetid) <> currentvalue Then - If Not B2SData.UsedRomLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedAnimationLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(b2ssetid) Then b2sSets(b2ssetid) = currentvalue - topVisible = (currentvalue <> 0) - If TopRomInverted Then topVisible = Not topVisible - End If - End If - - Return topVisible - - End Function - Private Function GetLampsSecondVisible(ByVal lampsData As String, ByVal currentSecondVisible As Boolean) As Boolean - - Dim secondVisible As Boolean = currentSecondVisible - - If B2SData.UseRomLamps AndAlso SecondRomIDType = B2SBaseBox.eRomIDType.Lamp Then - Dim lampid As Integer = SecondRomID - Dim currentvalue As Integer = CInt(lampsData.Substring(lampid, 1)) - If lamps(lampid) <> currentvalue Then - If Not B2SData.UsedRomLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedAnimationLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(lampid) Then lamps(lampid) = currentvalue - secondVisible = (currentvalue <> 0) - If SecondRomInverted Then secondVisible = Not secondVisible - End If - End If - - Return secondVisible - - End Function - Private Function GetSolenoidsSecondVisible(ByVal solenoidsData As String, ByVal currentSecondVisible As Boolean) As Boolean - - Dim secondVisible As Boolean = currentSecondVisible - - If B2SData.UseRomSolenoids AndAlso SecondRomIDType = B2SBaseBox.eRomIDType.Solenoid Then - Dim solenoidid As Integer = SecondRomID - Dim currentvalue As Integer = CInt(solenoidsData.Substring(solenoidid, 1)) - If solenoids(solenoidid) <> currentvalue Then - If Not B2SData.UsedRomSolenoidIDs.ContainsKey(solenoidid) AndAlso Not B2SData.UsedAnimationSolenoidIDs.ContainsKey(solenoidid) AndAlso Not B2SData.UsedRandomAnimationSolenoidIDs.ContainsKey(solenoidid) Then solenoids(solenoidid) = currentvalue - secondVisible = (currentvalue <> 0) - If SecondRomInverted Then secondVisible = Not secondVisible - End If - End If - - Return secondVisible - - End Function - Private Function GetGIStringsSecondVisible(ByVal gistringsData As String, ByVal currentSecondVisible As Boolean) As Boolean - - Dim secondVisible As Boolean = currentSecondVisible - - If B2SData.UseRomGIStrings AndAlso SecondRomIDType = B2SBaseBox.eRomIDType.GIString Then - Dim gistringid As Integer = SecondRomID - Dim currentvalue As Integer = CInt(gistringsData.Substring(gistringid, 1)) - If gistrings(gistringid) <> currentvalue Then - If Not B2SData.UsedRomGIStringIDs.ContainsKey(gistringid) AndAlso Not B2SData.UsedAnimationGIStringIDs.ContainsKey(gistringid) AndAlso Not B2SData.UsedRandomAnimationGIStringIDs.ContainsKey(gistringid) Then gistrings(gistringid) = currentvalue - secondVisible = (currentvalue > 4) - If SecondRomInverted Then secondVisible = Not secondVisible - End If - End If - - Return secondVisible - - End Function - Private Function GetB2SSetsSecondVisible(ByVal b2sSetsData As String, ByVal currentSecondVisible As Boolean) As Boolean - - Dim secondVisible As Boolean = currentSecondVisible - - If B2SData.UseRomLamps AndAlso SecondRomIDType = B2SBaseBox.eRomIDType.Lamp Then - Dim b2ssetid As Integer = SecondRomID - Dim currentvalue As Integer = Asc(b2sSetsData.Substring(b2ssetid, 1)) - If b2sSets(b2ssetid) <> currentvalue Then - If Not B2SData.UsedRomLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedAnimationLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(b2ssetid) Then b2sSets(b2ssetid) = currentvalue - secondVisible = (currentvalue <> 0) - If SecondRomInverted Then secondVisible = Not secondVisible - End If - End If - - Return secondVisible - - End Function - - Private Sub GetThruAllLamps(ByVal lampsData As String) - - If B2SData.UseRomLamps Then - For Each lampid As Integer In B2SData.UsedRomLampIDs.Keys - If lampid < lampsData.Length And lampid < lamps.Length Then - Dim currentvalue As Integer = CInt(lampsData.Substring(lampid, 1)) - If lamps(lampid) <> currentvalue Then - If Not B2SData.UsedRomReelLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedAnimationLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(lampid) Then lamps(lampid) = currentvalue - If B2SData.UsedRomLampIDs.ContainsKey(lampid) Then - For Each picbox As B2SPictureBox In B2SData.UsedRomLampIDs(lampid) - If picbox IsNot Nothing AndAlso (Not B2SData.UseIlluminationLocks OrElse String.IsNullOrEmpty(picbox.GroupName) OrElse Not B2SData.IlluminationLocks.ContainsKey(picbox.GroupName)) Then - If picbox.RomIDValue > 0 Then - picbox.Visible = (picbox.RomIDValue = currentvalue) - Else - Dim visible As Boolean = (currentvalue <> 0) - If picbox.RomInverted Then visible = Not visible - If B2SData.UseRotatingImage AndAlso B2SData.RotatingPictureBox(0) IsNot Nothing AndAlso picbox.Equals(B2SData.RotatingPictureBox(0)) Then - If visible Then - StartRotation() - Else - StopRotation() - End If - Else - picbox.Visible = visible - End If - End If - End If - Next - End If - End If - End If - Next - End If - If B2SData.UseRomReelLamps Then - For Each lampid As Integer In B2SData.UsedRomReelLampIDs.Keys - If lampid < lampsData.Length And lampid < lamps.Length Then - Dim currentvalue As Integer = CInt(lampsData.Substring(lampid, 1)) - If lamps(lampid) <> currentvalue Then - If Not B2SData.UsedAnimationLampIDs.ContainsKey(lampid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(lampid) Then lamps(lampid) = currentvalue - If B2SData.UsedRomReelLampIDs.ContainsKey(lampid) Then - For Each reelbox As B2SReelBox In B2SData.UsedRomReelLampIDs(lampid) - If reelbox IsNot Nothing AndAlso (Not B2SData.UseIlluminationLocks OrElse String.IsNullOrEmpty(reelbox.GroupName) OrElse Not B2SData.IlluminationLocks.ContainsKey(reelbox.GroupName)) Then - If reelbox.RomIDValue > 0 Then - reelbox.Illuminated = (reelbox.RomIDValue = currentvalue) - Else - Dim illuminated As Boolean = (currentvalue <> 0) - If reelbox.RomInverted Then illuminated = Not illuminated - reelbox.Illuminated = illuminated - End If - End If - Next - End If - End If - End If - Next - End If - If B2SData.UseAnimationLamps Then - For Each lampid As Integer In B2SData.UsedAnimationLampIDs.Keys - If lampid < lampsData.Length And lampid < lamps.Length Then - Dim currentvalue As Integer = CInt(lampsData.Substring(lampid, 1)) - If lamps(lampid) <> currentvalue Then - If Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(lampid) Then lamps(lampid) = currentvalue - If B2SData.UsedAnimationLampIDs.ContainsKey(lampid) Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationLampIDs(lampid) - Dim start As Boolean = (currentvalue <> 0) - If animation.Inverted Then start = Not start - If start Then - StartAnimation(animation.AnimationName) - Else - StopAnimation(animation.AnimationName) - End If - Next - End If - End If - End If - Next - ' random animation start - For Each lampid As Integer In B2SData.UsedRandomAnimationLampIDs.Keys - If lampid < lampsData.Length And lampid < lamps.Length Then - Dim currentvalue As Integer = CInt(lampsData.Substring(lampid, 1)) - If lamps(lampid) <> currentvalue Then - lamps(lampid) = currentvalue - If B2SData.UsedRandomAnimationLampIDs.ContainsKey(lampid) Then - Dim start As Boolean = (currentvalue <> 0) - Dim isrunning As Boolean = False - If start Then - For Each matchinganimation As B2SData.AnimationInfo In B2SData.UsedRandomAnimationLampIDs(lampid) - If IsAnimationRunning(matchinganimation.AnimationName) Then - isrunning = True - Exit For - End If - Next - End If - If start Then - If Not isrunning Then - Dim random As Integer = RandomStarter(B2SData.UsedRandomAnimationLampIDs(lampid).Length) - Dim animation As B2SData.AnimationInfo = B2SData.UsedRandomAnimationLampIDs(lampid)(random) - lastRandomStartedAnimation = animation.AnimationName - StartAnimation(lastRandomStartedAnimation) - End If - Else - If Not String.IsNullOrEmpty(lastRandomStartedAnimation) Then - StopAnimation(lastRandomStartedAnimation) - lastRandomStartedAnimation = String.Empty - End If - End If - End If - End If - End If - Next - End If - - End Sub - - Private Sub GetThruAllSolenoids(ByVal solenoidsData As String) - - If B2SData.UseRomSolenoids Then - For Each solenoidid As Integer In B2SData.UsedRomSolenoidIDs.Keys - If solenoidid < solenoidsData.Length Then - Dim currentvalue As Integer = CInt(solenoidsData.Substring(solenoidid, 1)) - If solenoids(solenoidid) <> currentvalue Then - If Not B2SData.UsedAnimationSolenoidIDs.ContainsKey(solenoidid) AndAlso Not B2SData.UsedRandomAnimationSolenoidIDs.ContainsKey(solenoidid) Then solenoids(solenoidid) = currentvalue - If B2SData.UsedRomSolenoidIDs.ContainsKey(solenoidid) Then - For Each picbox As B2SPictureBox In B2SData.UsedRomSolenoidIDs(solenoidid) - 'If picbox IsNot Nothing Then - If picbox IsNot Nothing AndAlso (Not B2SData.UseIlluminationLocks OrElse String.IsNullOrEmpty(picbox.GroupName) OrElse Not B2SData.IlluminationLocks.ContainsKey(picbox.GroupName)) Then - Dim visible As Boolean = (currentvalue <> 0) - If picbox.RomInverted Then visible = Not visible - If B2SData.UseRotatingImage AndAlso B2SData.RotatingPictureBox(0) IsNot Nothing AndAlso picbox.Equals(B2SData.RotatingPictureBox(0)) Then - If visible Then - StartRotation() - Else - StopRotation() - End If - Else - picbox.Visible = visible - End If - End If - Next - End If - End If - End If - Next - End If - If B2SData.UseAnimationSolenoids Then - For Each solenoidid As Integer In B2SData.UsedAnimationSolenoidIDs.Keys - If solenoidid < solenoidsData.Length Then - Dim currentvalue As Integer = CInt(solenoidsData.Substring(solenoidid, 1)) - If solenoids(solenoidid) <> currentvalue Then - If Not B2SData.UsedRandomAnimationSolenoidIDs.ContainsKey(solenoidid) Then solenoids(solenoidid) = currentvalue - If B2SData.UsedAnimationSolenoidIDs.ContainsKey(solenoidid) Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationSolenoidIDs(solenoidid) - Dim start As Boolean = (currentvalue <> 0) - If animation.Inverted Then start = Not start - If start Then - StartAnimation(animation.AnimationName) - Else - StopAnimation(animation.AnimationName) - End If - Next - End If - End If - End If - Next - ' random animation start - For Each solenoidid As Integer In B2SData.UsedRandomAnimationSolenoidIDs.Keys - If solenoidid < solenoidsData.Length Then - Dim currentvalue As Integer = CInt(solenoidsData.Substring(solenoidid, 1)) - If solenoids(solenoidid) <> currentvalue Then - solenoids(solenoidid) = currentvalue - If B2SData.UsedRandomAnimationSolenoidIDs.ContainsKey(solenoidid) Then - Dim start As Boolean = (currentvalue <> 0) - Dim isrunning As Boolean = False - If start Then - For Each matchinganimation As B2SData.AnimationInfo In B2SData.UsedRandomAnimationSolenoidIDs(solenoidid) - If IsAnimationRunning(matchinganimation.AnimationName) Then - isrunning = True - Exit For - End If - Next - End If - If start Then - If Not isrunning Then - Dim random As Integer = RandomStarter(B2SData.UsedRandomAnimationSolenoidIDs(solenoidid).Length) - Dim animation As B2SData.AnimationInfo = B2SData.UsedRandomAnimationSolenoidIDs(solenoidid)(random) - lastRandomStartedAnimation = animation.AnimationName - StartAnimation(lastRandomStartedAnimation) - End If - Else - If Not String.IsNullOrEmpty(lastRandomStartedAnimation) Then - StopAnimation(lastRandomStartedAnimation) - lastRandomStartedAnimation = String.Empty - End If - End If - End If - End If - End If - Next - End If - - End Sub - - Private Sub GetThruAllGIStrings(ByVal gistringsData As String) - - If B2SData.UseRomGIStrings Then - For Each gistringid As Integer In B2SData.UsedRomGIStringIDs.Keys - If gistringid < gistringsData.Length Then - Dim currentvalue As Integer = CInt(gistringsData.Substring(gistringid, 1)) - If gistrings(gistringid) <> currentvalue Then - If Not B2SData.UsedAnimationGIStringIDs.ContainsKey(gistringid) AndAlso Not B2SData.UsedRandomAnimationGIStringIDs.ContainsKey(gistringid) Then gistrings(gistringid) = currentvalue - If B2SData.UsedRomGIStringIDs.ContainsKey(gistringid) Then - For Each picbox As B2SPictureBox In B2SData.UsedRomGIStringIDs(gistringid) - 'If picbox IsNot Nothing Then - If picbox IsNot Nothing AndAlso (Not B2SData.UseIlluminationLocks OrElse String.IsNullOrEmpty(picbox.GroupName) OrElse Not B2SData.IlluminationLocks.ContainsKey(picbox.GroupName)) Then - Dim visible As Boolean = (currentvalue > 4) - If picbox.RomInverted Then visible = Not visible - If B2SData.UseRotatingImage AndAlso B2SData.RotatingPictureBox(0) IsNot Nothing AndAlso picbox.Equals(B2SData.RotatingPictureBox(0)) Then - If visible Then - StartRotation() - Else - StopRotation() - End If - Else - picbox.Visible = visible - End If - End If - Next - End If - End If - End If - Next - End If - If B2SData.UseAnimationGIStrings Then - For Each gistringid As Integer In B2SData.UsedAnimationGIStringIDs.Keys - If gistringid < gistringsData.Length Then - Dim currentvalue As Integer = CInt(gistringsData.Substring(gistringid, 1)) - If gistrings(gistringid) <> currentvalue Then - If Not B2SData.UsedRandomAnimationGIStringIDs.ContainsKey(gistringid) Then gistrings(gistringid) = currentvalue - If B2SData.UsedAnimationGIStringIDs.ContainsKey(gistringid) Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationGIStringIDs(gistringid) - Dim start As Boolean = (currentvalue > 4) - If animation.Inverted Then start = Not start - If start Then - StartAnimation(animation.AnimationName) - Else - StopAnimation(animation.AnimationName) - End If - Next - End If - End If - End If - Next - ' random animation start - For Each gistringid As Integer In B2SData.UsedRandomAnimationGIStringIDs.Keys - If gistringid < gistringsData.Length Then - Dim currentvalue As Integer = CInt(gistringsData.Substring(gistringid, 1)) - If gistrings(gistringid) <> currentvalue Then - gistrings(gistringid) = currentvalue - If B2SData.UsedRandomAnimationGIStringIDs.ContainsKey(gistringid) Then - Dim start As Boolean = (currentvalue > 4) - Dim isrunning As Boolean = False - If start Then - For Each matchinganimation As B2SData.AnimationInfo In B2SData.UsedRandomAnimationGIStringIDs(gistringid) - If IsAnimationRunning(matchinganimation.AnimationName) Then - isrunning = True - Exit For - End If - Next - End If - If start Then - If Not isrunning Then - Dim random As Integer = RandomStarter(B2SData.UsedRandomAnimationGIStringIDs(gistringid).Length) - Dim animation As B2SData.AnimationInfo = B2SData.UsedRandomAnimationGIStringIDs(gistringid)(random) - lastRandomStartedAnimation = animation.AnimationName - StartAnimation(lastRandomStartedAnimation) - End If - Else - If Not String.IsNullOrEmpty(lastRandomStartedAnimation) Then - StopAnimation(lastRandomStartedAnimation) - lastRandomStartedAnimation = String.Empty - End If - End If - End If - End If - End If - Next - End If - - End Sub - - Private Sub GetThruAllB2SData(ByVal b2sSetData As String) - - If B2SData.UseRomLamps Then - For Each b2ssetid As Integer In B2SData.UsedRomLampIDs.Keys - If b2ssetid < b2sSetData.Length Then - Dim currentvalue As Integer = Asc(b2sSetData.Substring(b2ssetid, 1)) - If b2sSets(b2ssetid) <> currentvalue Then - If Not B2SData.UsedRomReelLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedAnimationLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(b2ssetid) Then b2sSets(b2ssetid) = currentvalue - If B2SData.UsedRomLampIDs.ContainsKey(b2ssetid) Then - For Each picbox As B2SPictureBox In B2SData.UsedRomLampIDs(b2ssetid) - If picbox IsNot Nothing AndAlso (Not B2SData.UseIlluminationLocks OrElse String.IsNullOrEmpty(picbox.GroupName) OrElse Not B2SData.IlluminationLocks.ContainsKey(picbox.GroupName)) Then - If picbox.RomIDValue > 0 Then - picbox.Visible = (picbox.RomIDValue = currentvalue) - Else - Dim visible As Boolean = (currentvalue <> 0) - If picbox.RomInverted Then visible = Not visible - If B2SData.UseRotatingImage AndAlso B2SData.RotatingPictureBox(0) IsNot Nothing AndAlso picbox.Equals(B2SData.RotatingPictureBox(0)) Then - If visible Then - StartRotation() - Else - StopRotation() - End If - Else - picbox.Visible = visible - End If - End If - End If - Next - End If - End If - End If - Next - End If - If B2SData.UseRomReelLamps Then - For Each b2ssetid As Integer In B2SData.UsedRomReelLampIDs.Keys - If b2ssetid < b2sSetData.Length Then - Dim currentvalue As Integer = Asc(b2sSetData.Substring(b2ssetid, 1)) - If b2sSets(b2ssetid) <> currentvalue Then - If Not B2SData.UsedAnimationLampIDs.ContainsKey(b2ssetid) AndAlso Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(b2ssetid) Then b2sSets(b2ssetid) = currentvalue - If B2SData.UsedRomReelLampIDs.ContainsKey(b2ssetid) Then - For Each reelbox As B2SReelBox In B2SData.UsedRomReelLampIDs(b2ssetid) - If reelbox IsNot Nothing AndAlso (Not B2SData.UseIlluminationLocks OrElse String.IsNullOrEmpty(reelbox.GroupName) OrElse Not B2SData.IlluminationLocks.ContainsKey(reelbox.GroupName)) Then - If reelbox.RomIDValue > 0 Then - reelbox.Illuminated = (reelbox.RomIDValue = currentvalue) - Else - Dim illuminated As Boolean = (currentvalue <> 0) - If reelbox.RomInverted Then illuminated = Not illuminated - reelbox.Illuminated = illuminated - End If - End If - Next - End If - End If - End If - Next - End If - If B2SData.UseAnimationLamps Then - For Each b2ssetid As Integer In B2SData.UsedAnimationLampIDs.Keys - If b2ssetid < b2sSetData.Length Then - Dim currentvalue As Integer = Asc(b2sSetData.Substring(b2ssetid, 1)) - If b2sSets(b2ssetid) <> currentvalue Then - If Not B2SData.UsedRandomAnimationLampIDs.ContainsKey(b2ssetid) Then b2sSets(b2ssetid) = currentvalue - If B2SData.UsedAnimationLampIDs.ContainsKey(b2ssetid) Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationLampIDs(b2ssetid) - Dim start As Boolean = (currentvalue <> 0) - If animation.Inverted Then start = Not start - If start Then - StartAnimation(animation.AnimationName) - Else - StopAnimation(animation.AnimationName) - End If - Next - End If - End If - End If - Next - ' random animation start - For Each b2ssetid As Integer In B2SData.UsedRandomAnimationLampIDs.Keys - If b2ssetid < b2sSetData.Length Then - Dim currentvalue As Integer = Asc(b2sSetData.Substring(b2ssetid, 1)) - If b2sSets(b2ssetid) <> currentvalue Then - b2sSets(b2ssetid) = currentvalue - If B2SData.UsedRandomAnimationLampIDs.ContainsKey(b2ssetid) Then - Dim start As Boolean = (currentvalue <> 0) - Dim isrunning As Boolean = False - If start Then - For Each matchinganimation As B2SData.AnimationInfo In B2SData.UsedRandomAnimationLampIDs(b2ssetid) - If IsAnimationRunning(matchinganimation.AnimationName) Then - isrunning = True - Exit For - End If - Next - End If - If start Then - If Not isrunning Then - Dim random As Integer = RandomStarter(B2SData.UsedRandomAnimationLampIDs(b2ssetid).Length) - Dim animation As B2SData.AnimationInfo = B2SData.UsedRandomAnimationLampIDs(b2ssetid)(random) - lastRandomStartedAnimation = animation.AnimationName - StartAnimation(lastRandomStartedAnimation) - End If - Else - If Not String.IsNullOrEmpty(lastRandomStartedAnimation) Then - StopAnimation(lastRandomStartedAnimation) - lastRandomStartedAnimation = String.Empty - End If - End If - End If - End If - End If - Next - End If - - End Sub - - Private Sub GetThruAllMechs(ByVal mechsData As Integer()) - - If B2SData.UseRomMechs Then - For Each mechid As Integer In B2SData.UsedRomMechIDs.Keys - If mechid >= 1 AndAlso mechid <= 5 Then - Dim currentvalue As Integer = mechsData(mechid) - If mechs(mechid) <> currentvalue Then - mechs(mechid) = currentvalue - If B2SData.UsedRomMechIDs.ContainsKey(mechid) Then - If B2SData.RotatingPictureBox(mechid) IsNot Nothing AndAlso B2SData.RotatingImages(mechid) IsNot Nothing AndAlso B2SData.RotatingImages(mechid).Count > 0 AndAlso B2SData.RotatingImages(mechid).ContainsKey(currentvalue) Then - B2SData.RotatingPictureBox(mechid).BackgroundImage = B2SData.RotatingImages(mechid)(currentvalue) - B2SData.RotatingPictureBox(mechid).Visible = True - End If - End If - End If - End If - Next - End If - - End Sub - - Private Sub GetThruAllLEDs(ByVal regkey As RegistryKey) - - If B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels Then - For digit As Integer = 1 To B2SData.ScoreMaxDigit - Dim currentvalue As Integer = regkey.GetValue("B2SLED" & digit.ToString(), 0) - If leds(digit) <> currentvalue Then - leds(digit) = currentvalue - If B2SData.LEDs.ContainsKey("LEDBox" & digit.ToString()) AndAlso B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered Then - ' rendered LEDs are used - Dim ledname As String = "LEDBox" & digit.ToString() - B2SData.LEDs(ledname).Value = currentvalue - ElseIf B2SData.LEDDisplayDigits.ContainsKey(digit - 1) AndAlso B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7 Then - ' Dream 7 displays are used - With B2SData.LEDDisplayDigits(digit - 1) - .LEDDisplay.SetValue(.Digit, currentvalue) - End With - ElseIf B2SData.Reels.ContainsKey("ReelBox" & digit.ToString()) Then - ' reels are used - Dim reelname As String = "ReelBox" & digit.ToString() - Dim reelbox As B2SReelBox = B2SData.Reels(reelname) - If B2SSettings.IsROMControlled Then - reelbox.Value = currentvalue 'ConvertLEDValue4Reels(currentvalue) - Else - If reelbox.ScoreType = B2SReelBox.eScoreType.Scores Then - reelbox.Text(True) = ConvertLEDValue4Reels(currentvalue) - Else - reelbox.Text(False) = currentvalue - End If - End If - End If - End If - Next - End If - - End Sub - - Private Sub GetThruAllAnimations(ByVal regkey As RegistryKey, ByVal animationsdata As String) - - If B2SAnimation.AreThereAnimations Then - If Not String.IsNullOrEmpty(animationsdata) Then - Dim writeAnimationsData As Boolean = False - For Each animationinfo As String In animationsdata.Split(Chr(1)) - If Not String.IsNullOrEmpty(animationinfo) Then - Dim animationname As String = animationinfo.Substring(0, animationinfo.Length - 2) - Dim animationstate As Integer = CInt(animationinfo.Substring(animationinfo.Length - 1)) - If animations.ContainsKey(animationname) Then - If animations(animationname) <> animationstate Then - animations(animationname) = animationstate - If animationstate = 1 OrElse animationstate = 2 Then - B2SAnimation.StartAnimation(animationname, (animationstate = 2)) - ElseIf animationstate = 0 Then - B2SAnimation.StopAnimation(animationname) - End If - writeAnimationsData = True - animationsdata = animationsdata.Replace(animationinfo, animationname & "=9") - End If - Else - animations.Add(animationname, animationstate) - If animationstate = 1 OrElse animationstate = 2 Then - B2SAnimation.StartAnimation(animationname, (animationstate = 2)) - ElseIf animationstate = 0 Then - B2SAnimation.StopAnimation(animationname) - End If - writeAnimationsData = True - animationsdata = animationsdata.Replace(animationinfo, animationname & "=9") - End If - End If - Next - If writeAnimationsData Then - regkey.SetValue("B2SAnimations", animationsdata) - End If - End If - End If - - End Sub - - Private Sub GetThruAllRotations(ByVal regkey As RegistryKey, ByVal rotationsdata As String) - - If Not String.IsNullOrEmpty(rotationsdata) Then - Dim rotationstate As Integer = CInt(rotationsdata) - If rotation <> rotationstate Then - rotation = rotationstate - If rotationstate = 1 Then - StartRotation() - ElseIf rotationstate = 0 Then - StopRotation() - End If - End If - End If - - End Sub - - Private Sub GetThruAllSounds(ByVal regkey As RegistryKey, ByVal soundsdata As String) - - If Not String.IsNullOrEmpty(soundsdata) Then - Dim writeSoundsData As Boolean = False - For Each soundinfo As String In soundsdata.Split(Chr(1)) - If Not String.IsNullOrEmpty(soundinfo) Then - Dim soundname As String = soundinfo.Substring(0, soundinfo.Length - 2) - Dim soundstate As Integer = CInt(soundinfo.Substring(soundinfo.Length - 1)) - If sounds.ContainsKey(soundname) Then - If sounds(soundname) <> soundstate Then - sounds(soundname) = soundstate - If soundstate = 1 Then - PlaySound(soundname) - ElseIf soundstate = 0 Then - StopSound(soundname) - End If - writeSoundsData = True - soundsdata = soundsdata.Replace(soundinfo, soundname & "=9") - End If - Else - sounds.Add(soundname, soundstate) - If soundstate = 1 Then - PlaySound(soundname) - ElseIf soundstate = 0 Then - StopSound(soundname) - End If - writeSoundsData = True - soundsdata = soundsdata.Replace(soundinfo, soundname & "=9") - End If - End If - Next - If writeSoundsData Then - regkey.SetValue("B2SSounds", soundsdata) - End If - End If - - End Sub - - Private Sub GetThruAllScoreDisplays(ByVal regkey As RegistryKey) - - Dim hide As Integer = regkey.GetValue("B2SHideScoreDisplays", -1) - If hide <> -1 Then - regkey.DeleteValue("B2SHideScoreDisplays", False) - If hide = 0 Then - ' show all score displays - ShowScoreDisplays() - ElseIf hide = 1 Then - ' hide all score display - HideScoreDisplays() - End If - End If - - End Sub - - Private Sub GetThruAllIlluGroups(ByVal regkey As RegistryKey) - - Dim illugroups As String = regkey.GetValue("B2SIlluGroupsByName", String.Empty) - If Not String.IsNullOrEmpty(illugroups) Then - regkey.DeleteValue("B2SIlluGroupsByName", False) - ' get thru all illu groups - For Each illugroupinfo As String In illugroups.Split(Chr(1)) - ' only do the lightning stuff if the group has a name - If Not String.IsNullOrEmpty(illugroupinfo) And illugroupinfo.Contains("=") Then - Dim pos As Integer = illugroupinfo.IndexOf("=") - Dim groupname As String = illugroupinfo.Substring(0, pos) - Dim value As Integer = CInt(illugroupinfo.Substring(pos + 1)) - If B2SData.IlluminationGroups.ContainsKey(groupname) Then - ' get all matching picture boxes - For Each picbox As B2SPictureBox In B2SData.IlluminationGroups(groupname) - If picbox.RomIDValue > 0 Then - picbox.Visible = (picbox.RomIDValue = value) - Else - picbox.Visible = (value <> 0) - End If - Next - End If - End If - Next - End If - - End Sub - - Private Function ConvertLEDValue4Reels(ByVal ledvalue As Integer) As Integer - - Dim ret As Integer = 0 - Select Case ledvalue - Case 0, 63 : ret = 0 - Case 6 : ret = 1 - Case 91 : ret = 2 - Case 79 : ret = 3 - Case 102 : ret = 4 - Case 109 : ret = 5 - Case 125 : ret = 6 - Case 7 : ret = 7 - Case 127 : ret = 8 - Case 111 : ret = 9 - End Select - Return ret - - End Function - -#End Region - - -#Region "settings action" - - Public Sub formBackglass_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick - - If e.Button = Windows.Forms.MouseButtons.Right Then - formBackglass_KeyUp(Me, New KeyEventArgs(Keys.S)) - End If - - End Sub - - Private Sub formBackglass_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp - - If e.KeyCode = Keys.S Then - - If formSettings IsNot Nothing Then - Try - formSettings.Dispose() - formSettings = Nothing - Catch - End Try - End If - formSettings = New formSettings() - formSettings.B2SScreen = B2SScreen - formSettings.B2SAnimation = B2SAnimation - formSettings.formBackglass = Me - formSettings.Show(Me) - - ElseIf e.KeyCode = Keys.M OrElse e.KeyCode = Keys.A OrElse e.KeyCode = Keys.F Then - - If B2SData.DualBackglass Then - If e.KeyCode = Keys.M Then - B2SSettings.CurrentDualMode = If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, B2SSettings.eDualMode.Authentic, B2SSettings.eDualMode.Fantasy) - ElseIf e.KeyCode = Keys.A Then - B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Authentic - ElseIf e.KeyCode = Keys.F Then - B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy - End If - B2SSettings.Save(, True) - Me.BackgroundImage = DarkImage - Me.Refresh() - ShowStartupImages() - B2SAnimation.RestartAnimations() - If formMode IsNot Nothing Then - Try - formMode.Dispose() - formMode = Nothing - Catch - End Try - End If - formMode = New formMode() - formMode.Show(Me) - Me.Focus() - End If - - ElseIf e.KeyCode = Keys.I OrElse e.KeyCode = Keys.Print OrElse e.KeyCode = Keys.PrintScreen Then - - ' do a screenshot and save it - If String.IsNullOrEmpty(B2SSettings.ScreenshotPath) Then - MessageBox.Show("Please enter a valid screenshot path here at the settings.", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - Else - Dim imageformat As Imaging.ImageFormat = Imaging.ImageFormat.Png - Dim extension As String = ".png" - Select Case B2SSettings.ScreenshotFileType - Case B2SSettings.eImageFileType.JPG : imageformat = Imaging.ImageFormat.Jpeg : extension = ".jpg" - Case B2SSettings.eImageFileType.GIF : imageformat = Imaging.ImageFormat.Gif : extension = ".gif" - Case B2SSettings.eImageFileType.BMP : imageformat = Imaging.ImageFormat.Bmp : extension = ".bmp" - End Select - Dim filename As String = IO.Path.Combine(B2SSettings.ScreenshotPath, IO.Path.GetFileNameWithoutExtension(B2SData.BackglassFileName) & extension) - B2SScreen.MakeScreenShot(filename, imageformat) - My.Computer.Audio.Play(My.Resources.camera1, AudioPlayMode.Background) - End If - - ElseIf e.KeyCode = Keys.Escape Then - - ' stop the app - End - - End If - - End Sub - -#End Region - - -#Region "public methods" - - Private _backgroundimage As Image - Public Overrides Property BackgroundImage() As Image - Get - Return _backgroundimage - End Get - Set(ByVal value As Image) - If value Is Nothing Then - _backgroundimage = Nothing - ElseIf Not value.Equals(_backgroundimage) Then - _backgroundimage = value - Me.Invalidate() - End If - End Set - End Property - - Public Sub StartAnimation(ByVal name As String, Optional ByVal playreverse As Boolean = False) - - B2SAnimation.StartAnimation(name, playreverse) - - End Sub - Public Sub StopAnimation(ByVal name As String) - - B2SAnimation.StopAnimation(name) - - End Sub - Public Sub StopAllAnimations() - - B2SAnimation.StopAllAnimations() - - End Sub - - Public Function IsAnimationRunning(ByVal name As String) As Boolean - - Return B2SAnimation.IsAnimationRunning(name) - - End Function - - Public Sub StartRotation() - - If B2SData.RotatingPictureBox IsNot Nothing AndAlso B2SData.RotatingPictureBox(0) IsNot Nothing AndAlso B2SData.RotatingImages(0) IsNot Nothing AndAlso B2SData.RotatingImages(0).Count > 0 Then - If rotateAngle > 0 AndAlso rotateTimerInterval > 0 Then - If rotateTimer.Enabled Then rotateTimer.Stop() - rotateSlowDownSteps = 0 - rotateTimer.Interval = rotateTimerInterval - rotateTimer.Start() - End If - End If - - End Sub - Public Sub StopRotation() - - If B2SData.RotatingPictureBox IsNot Nothing AndAlso B2SData.RotatingPictureBox(0) IsNot Nothing AndAlso B2SData.RotatingImages(0) IsNot Nothing AndAlso B2SData.RotatingImages(0).Count > 0 Then - If rotateTimer.Enabled Then - If B2SData.RotatingPictureBox(0).SnippitRotationStopBehaviour = B2SPictureBox.eSnippitRotationStopBehaviour.SpinOff Then - rotateSlowDownSteps = 1 - ElseIf B2SData.RotatingPictureBox(0).SnippitRotationStopBehaviour = B2SPictureBox.eSnippitRotationStopBehaviour.RunAnimationTillEnd Then - rotateRunTillEnd = True - ElseIf B2SData.RotatingPictureBox(0).SnippitRotationStopBehaviour = B2SPictureBox.eSnippitRotationStopBehaviour.RunAnimationToFirstStep Then - rotateRunToFirstStep = True - Else - rotateTimer.Stop() - End If - End If - End If - - End Sub - - Private SelectedLEDType As B2SSettings.eLEDTypes = B2SSettings.eLEDTypes.Undefined - Public Sub ShowScoreDisplays() - - If SelectedLEDType = B2SSettings.eLEDTypes.Undefined Then SelectedLEDType = GetLEDType() - If SelectedLEDType = B2SSettings.eLEDTypes.Dream7 Then - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Visible = True - Next - ElseIf SelectedLEDType = B2SSettings.eLEDTypes.Rendered Then - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - led.Value.Visible = True - Next - End If - - End Sub - Public Sub HideScoreDisplays() - - If SelectedLEDType = B2SSettings.eLEDTypes.Undefined Then SelectedLEDType = GetLEDType() - If SelectedLEDType = B2SSettings.eLEDTypes.Dream7 Then - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Visible = False - Next - ElseIf SelectedLEDType = B2SSettings.eLEDTypes.Rendered Then - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - led.Value.Visible = False - Next - End If - - End Sub - Private Function GetLEDType() As B2SSettings.eLEDTypes - Dim ret As B2SSettings.eLEDTypes = B2SSettings.eLEDTypes.Undefined - If B2SData.LEDDisplays.Count > 0 Then - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - If leddisplay.Value.Visible Then ret = B2SSettings.eLEDTypes.Dream7 - Exit For - Next - ElseIf B2SData.LEDs.Count > 0 Then - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - If led.Value.Visible Then ret = B2SSettings.eLEDTypes.Rendered - Exit For - Next - End If - Return ret - End Function - - Public Sub PlaySound(ByVal soundname As String) - - If B2SData.Sounds.ContainsKey(soundname) Then - My.Computer.Audio.Play(B2SData.Sounds(soundname), AudioPlayMode.Background) - End If - - End Sub - Public Sub StopSound(ByVal soundname As String) - - If B2SData.Sounds.ContainsKey(soundname) Then - My.Computer.Audio.Stop() - End If - - End Sub - -#End Region - - -#Region "load B2S data and more B2S stuff" - - Private Sub LoadB2SData() - - Dim filename As String = B2SData.TableFileName & ".directb2s" - Dim shortfilename As String = B2SData.ShortFileName(filename) - Dim hyperpinfilename As String = String.Empty - Dim shorthyperpinfilename As String = String.Empty - - ' check whether the table name can be found - If Not String.IsNullOrEmpty(B2SSettings.GameName) And Not IO.File.Exists(filename) AndAlso Not IO.File.Exists(shortfilename) Then - 'Westworld, check for gamename - If IO.File.Exists(B2SSettings.GameName & ".directb2s") Then - filename = B2SSettings.GameName & ".directb2s" - End If - End If - - If Not B2SSettings.DisableFuzzyMatching Then - If Not IO.File.Exists(filename) AndAlso Not IO.File.Exists(shortfilename) Then - If B2SSettings.LocateHyperpinXMLFile() Then - hyperpinfilename = B2SSettings.HyperpinName & ".directb2s" - shorthyperpinfilename = B2SData.ShortFileName(hyperpinfilename) - End If - ' check whether the hyperpin description can be found - If Not IO.File.Exists(hyperpinfilename) AndAlso Not IO.File.Exists(shorthyperpinfilename) Then - If filename.Length >= 8 Then - ' look for short name - B2SSettings.MatchingFileNames = IO.Directory.GetFiles(IO.Directory.GetCurrentDirectory(), filename.Substring(0, 6) & "*.directb2s") - If B2SSettings.MatchingFileNames Is Nothing OrElse Not IsArray(B2SSettings.MatchingFileNames) OrElse B2SSettings.MatchingFileNames.Length <= 0 Then - B2SSettings.MatchingFileNames = IO.Directory.GetFiles(IO.Directory.GetCurrentDirectory(), filename.Substring(0, 6).Replace(" ", "") & "*.directb2s") - End If - If B2SSettings.MatchingFileNames IsNot Nothing Then - For i As Integer = 0 To B2SSettings.MatchingFileNames.Length - 1 - Dim fileinfo As IO.FileInfo = New IO.FileInfo(B2SSettings.MatchingFileNames(i)) - B2SSettings.MatchingFileNames(i) = fileinfo.Name - Next - End If - shortfilename = String.Empty - For Each file As String In B2SSettings.MatchingFileNames - If String.IsNullOrEmpty(shortfilename) Then - shortfilename = file - End If - If Not String.IsNullOrEmpty(B2SSettings.MatchingFileName) AndAlso file.Equals(B2SSettings.MatchingFileName, StringComparison.CurrentCultureIgnoreCase) Then - shortfilename = file - Exit For - End If - Next - End If - End If - End If - End If - - If Not IO.File.Exists(filename) AndAlso Not IO.File.Exists(shortfilename) AndAlso Not IO.File.Exists(hyperpinfilename) AndAlso Not IO.File.Exists(shorthyperpinfilename) Then - Dim text As String = "File '" & IO.Path.Combine(IO.Directory.GetCurrentDirectory(), filename) - If Not String.IsNullOrEmpty(hyperpinfilename) AndAlso Not filename.Equals(hyperpinfilename, StringComparison.CurrentCultureIgnoreCase) Then - text &= " and file '" & IO.Path.Combine(IO.Directory.GetCurrentDirectory(), hyperpinfilename) & "'" - End If - text &= " not found. Please rename or download the matching directb2s backglass file." - Throw New Exception(text) - End If - - Dim XML As Xml.XmlDocument = New Xml.XmlDocument - If IO.File.Exists(filename) Then - B2SData.BackglassFileName = filename - ElseIf IO.File.Exists(shortfilename) Then - B2SData.BackglassFileName = shortfilename - ElseIf IO.File.Exists(hyperpinfilename) Then - B2SData.BackglassFileName = hyperpinfilename - ElseIf IO.File.Exists(shorthyperpinfilename) Then - B2SData.BackglassFileName = shorthyperpinfilename - End If - ' maybe load XML file - If Not String.IsNullOrEmpty(B2SData.BackglassFileName) Then - Try - XML.Load(B2SData.BackglassFileName) - Catch ex As Exception - MessageBox.Show("The following error occurred opening the file '" & Path.GetFileName(B2SData.BackglassFileName) & "':" & vbCrLf & vbCrLf & ex.Message, My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - End Try - End If - - ' try to get into the file and read some XML - If XML Is Nothing OrElse XML.SelectSingleNode("DirectB2SData") Is Nothing Then - - Throw New Exception("File '" & filename & "' is not a valid directb2s backglass file.") - - Else - - B2SSettings.BackglassFileVersion = XML.SelectSingleNode("DirectB2SData").Attributes("Version").InnerText - ' write backglass file version to registry - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SBackglassFileVersion", B2SSettings.BackglassFileVersion, RegistryValueKind.String) - End Using - - ' current backglass version is not allowed to be larger than server version and to be smaller minimum B2S version - If B2SSettings.BackglassFileVersion > B2SSettings.DirectB2SVersion Then - - Throw New Exception("B2S.Server version (" & B2SSettings.DirectB2SVersion & ") doesn't match 'directb2s' file version (" & B2SSettings.BackglassFileVersion & "). " & vbCrLf & vbCrLf & - "Please update the B2S.Server.") - - ElseIf B2SSettings.BackglassFileVersion < B2SSettings.MinimumDirectB2SVersion Then - - Throw New Exception("'directB2S' file version (" & B2SSettings.BackglassFileVersion & ") doesn't match minimum 'directb2s' version. " & vbCrLf & vbCrLf & - "Please update the 'directB2S' backglass file.") - - Else - - ' get top node - Dim topnode As Xml.XmlElement = XML.SelectSingleNode("DirectB2SData") - Dim mergeBulbs As Boolean = False - - 'If topnode.SelectSingleNode("MergeBulbs") IsNot Nothing Then - ' mergeBulbs = topnode.SelectSingleNode("MergeBulbs").Attributes("Value").InnerText <> "0" - 'End If - - - ' clear all data - B2SData.ClearAll(True) - - ' get some basic info - B2SData.TableName = topnode.SelectSingleNode("Name").Attributes("Value").InnerText - B2SData.TableType = topnode.SelectSingleNode("TableType").Attributes("Value").InnerText - B2SData.DMDType = topnode.SelectSingleNode("DMDType").Attributes("Value").InnerText - If topnode.SelectSingleNode("DMDDefaultLocation") IsNot Nothing Then - B2SData.DMDDefaultLocation = New Point(CInt(topnode.SelectSingleNode("DMDDefaultLocation").Attributes("LocX").InnerText), CInt(topnode.SelectSingleNode("DMDDefaultLocation").Attributes("LocY").InnerText)) - End If - B2SData.GrillHeight = Math.Max(CInt(topnode.SelectSingleNode("GrillHeight").Attributes("Value").InnerText), 0) - If topnode.SelectSingleNode("GrillHeight").Attributes("Small") IsNot Nothing AndAlso B2SData.GrillHeight > 0 Then - B2SData.SmallGrillHeight = Math.Max(CInt(topnode.SelectSingleNode("GrillHeight").Attributes("Small").InnerText), 0) - End If - If topnode.SelectSingleNode("DualBackglass") IsNot Nothing Then - B2SData.DualBackglass = (topnode.SelectSingleNode("DualBackglass").Attributes("Value").InnerText = "1") - End If - - ' maybe set current dual mode to get for sure - If Not B2SData.DualBackglass Then - B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Authentic - End If - - ' get skip defaults - If topnode.SelectSingleNode("LampsDefaultSkipFrames") IsNot Nothing AndAlso Not B2SSettings.IsGameNameFound Then - B2SSettings.LampsSkipFrames = CInt(topnode.SelectSingleNode("LampsDefaultSkipFrames").Attributes("Value").InnerText) - End If - If topnode.SelectSingleNode("SolenoidsDefaultSkipFrames") IsNot Nothing AndAlso Not B2SSettings.IsGameNameFound Then - B2SSettings.SolenoidsSkipFrames = CInt(topnode.SelectSingleNode("SolenoidsDefaultSkipFrames").Attributes("Value").InnerText) - End If - If topnode.SelectSingleNode("GIStringsDefaultSkipFrames") IsNot Nothing AndAlso Not B2SSettings.IsGameNameFound Then - B2SSettings.GIStringsSkipFrames = CInt(topnode.SelectSingleNode("GIStringsDefaultSkipFrames").Attributes("Value").InnerText) - End If - If topnode.SelectSingleNode("LEDsDefaultSkipFrames") IsNot Nothing AndAlso Not B2SSettings.IsGameNameFound Then - B2SSettings.LEDsSkipFrames = CInt(topnode.SelectSingleNode("LEDsDefaultSkipFrames").Attributes("Value").InnerText) - End If - If Not B2SSettings.IsGameNameFound Then - If B2SSettings.LampsSkipFrames = 0 Then B2SSettings.LampsSkipFrames = 1 - If B2SSettings.SolenoidsSkipFrames = 0 Then B2SSettings.SolenoidsSkipFrames = 3 - If B2SSettings.GIStringsSkipFrames = 0 Then B2SSettings.GIStringsSkipFrames = 3 - End If - - ' get all illumination infos - Dim roms4Authentic As Generic.Dictionary(Of String, Integer) = New Generic.Dictionary(Of String, Integer) - Dim roms4Fantasy As Generic.Dictionary(Of String, Integer) = New Generic.Dictionary(Of String, Integer) - If topnode.SelectSingleNode("Illumination") IsNot Nothing AndAlso topnode.SelectNodes("Illumination/Bulb") IsNot Nothing Then - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Illumination/Bulb") - Dim parent As String = innerNode.Attributes("Parent").InnerText - Dim id As Integer = CInt(innerNode.Attributes("ID").InnerText) - Dim romid As Integer = 0 - Dim romidtype As Integer = 0 - Dim romidvalue As Integer = 0 - Dim rominverted As Boolean = False - If innerNode.Attributes("B2SID") IsNot Nothing Then - romid = CInt(innerNode.Attributes("B2SID").InnerText) - If innerNode.Attributes("B2SValue") IsNot Nothing Then - romidvalue = CInt(innerNode.Attributes("B2SValue").InnerText) - End If - romidtype = 1 - Else - romid = CInt(innerNode.Attributes("RomID").InnerText) - romidtype = CInt(innerNode.Attributes("RomIDType").InnerText) - If innerNode.Attributes("RomInverted") IsNot Nothing Then - rominverted = (innerNode.Attributes("RomInverted").InnerText = "1") - End If - End If - Dim intensity As Integer = CInt(innerNode.Attributes("Intensity").InnerText) - Dim initialstate As Integer = CInt(innerNode.Attributes("InitialState").InnerText) - Dim dualmode As Integer = 0 - If innerNode.Attributes("DualMode") IsNot Nothing Then - dualmode = CInt(innerNode.Attributes("DualMode").InnerText) - End If - Dim name As String = innerNode.Attributes("Name").InnerText - Dim isimagesnippit As Boolean = False - If innerNode.Attributes("IsImageSnippit") IsNot Nothing Then - isimagesnippit = (innerNode.Attributes("IsImageSnippit").InnerText = "1") - End If - Dim zorder As Integer = 0 - If innerNode.Attributes("ZOrder") IsNot Nothing Then - zorder = CInt(innerNode.Attributes("ZOrder").InnerText) - End If - Dim picboxtype As B2SPictureBox.ePictureBoxType = B2SPictureBox.ePictureBoxType.StandardImage - Dim picboxrotatesteps As Integer = 0 - Dim picboxrotateinterval As Integer = 0 - Dim picboxrotationdirection As B2SPictureBox.eSnippitRotationDirection = B2SPictureBox.eSnippitRotationDirection.Clockwise - Dim picboxrotationstopbehaviour As B2SPictureBox.eSnippitRotationStopBehaviour = B2SPictureBox.eSnippitRotationStopBehaviour.SpinOff - If innerNode.Attributes("SnippitType") IsNot Nothing Then - picboxtype = CInt(innerNode.Attributes("SnippitType").InnerText) - If innerNode.Attributes("SnippitRotatingSteps") IsNot Nothing Then - picboxrotatesteps = CInt(innerNode.Attributes("SnippitRotatingSteps").InnerText) - ElseIf innerNode.Attributes("SnippitRotatingAngle") IsNot Nothing Then - Try - picboxrotatesteps = CInt(360 / CInt(innerNode.Attributes("SnippitRotatingAngle").InnerText)) - Catch - End Try - End If - If innerNode.Attributes("SnippitRotatingInterval") IsNot Nothing Then - picboxrotateinterval = CInt(innerNode.Attributes("SnippitRotatingInterval").InnerText) - End If - If innerNode.Attributes("SnippitRotatingDirection") IsNot Nothing Then - picboxrotationdirection = CInt(innerNode.Attributes("SnippitRotatingDirection").InnerText) - End If - If innerNode.Attributes("SnippitRotatingStopBehaviour") IsNot Nothing Then - picboxrotationstopbehaviour = CInt(innerNode.Attributes("SnippitRotatingStopBehaviour").InnerText) - End If - End If - Dim visible As Boolean = (CInt(innerNode.Attributes("Visible").InnerText) = 1) - Dim loc As Point = New Point(CInt(innerNode.Attributes("LocX").InnerText), CInt(innerNode.Attributes("LocY").InnerText)) - Dim size As Size = New Size(CInt(innerNode.Attributes("Width").InnerText), CInt(innerNode.Attributes("Height").InnerText)) - Dim image As Image = Base64ToImage(innerNode.Attributes("Image").InnerText) - - Dim offimage As Image = Nothing - If innerNode.Attributes("OffImage") IsNot Nothing Then - offimage = Base64ToImage(innerNode.Attributes("OffImage").InnerText) - End If - image = CropImageToTransparency(image, offimage, loc, size) - ' create new picturebox control - Dim picbox As B2SPictureBox = New B2SPictureBox() - Dim IsOnBackglass As Boolean = (parent = "Backglass") - picbox.Name = "PictureBox" & id.ToString() - picbox.GroupName = name - picbox.Location = loc - picbox.Size = size - picbox.RomID = romid - picbox.RomIDType = romidtype - picbox.RomIDValue = romidvalue - picbox.RomInverted = rominverted - picbox.Intensity = intensity - picbox.InitialState = initialstate - picbox.DualMode = dualmode - picbox.BackgroundImage = image - picbox.OffImage = offimage - picbox.IsImageSnippit = isimagesnippit - picbox.SnippitRotationStopBehaviour = picboxrotationstopbehaviour - picbox.ZOrder = zorder - picbox.PictureBoxType = picboxtype - If IsOnBackglass Then - picbox.Type = B2SBaseBox.eType.OnBackglass - Me.Controls.Add(picbox) - ' add to general collection - B2SData.Illuminations.Add(picbox) - ' maybe add ZOrder info - If zorder > 0 Then - B2SData.UseZOrder = True - B2SData.ZOrderImages.Add(picbox) - End If - ' add info to rom collection - If romid > 0 AndAlso picboxtype = B2SPictureBox.ePictureBoxType.StandardImage AndAlso romidtype <> B2SBaseBox.eRomIDType.Mech Then - Dim key As String = If(rominverted, "I", "") & Choose(romidtype, "L", "S", "GI") & romid.ToString() & "|" & romidvalue.ToString() - - If picbox.DualMode = B2SData.eDualMode.Both OrElse picbox.DualMode = B2SData.eDualMode.Authentic Then - If roms4Authentic.ContainsKey(key) Then roms4Authentic(key) += size.Width * size.Height Else roms4Authentic.Add(key, size.Width * size.Height) - End If - If picbox.DualMode = B2SData.eDualMode.Both OrElse picbox.DualMode = B2SData.eDualMode.Fantasy Then - If roms4Fantasy.ContainsKey(key) Then roms4Fantasy(key) += size.Width * size.Height Else roms4Fantasy.Add(key, size.Width * size.Height) - End If - End If - Else - If Not B2SSettings.HideB2SDMD Then - CheckDMDForm() - picbox.Type = B2SBaseBox.eType.OnDMD - formDMD.Controls.Add(picbox) - ' add to general collection - B2SData.DMDIlluminations.Add(picbox) - ' maybe add ZOrder info - If zorder > 0 Then - B2SData.UseDMDZOrder = True - B2SData.ZOrderDMDImages.Add(picbox) - End If - End If - End If - picbox.BringToFront() - picbox.Visible = False - - ' add illumination into group - B2SData.IlluminationGroups.Add(picbox) - - ' maybe do picture rotating - If picboxrotatesteps > 0 Then - If picboxtype = B2SPictureBox.ePictureBoxType.SelfRotatingImage AndAlso B2SData.RotatingImages.Count = 0 Then - Me.rotateSteps = picboxrotatesteps - Me.rotateTimerInterval = picboxrotateinterval - RotateImage(picbox, picboxrotatesteps, picboxrotationdirection, B2SPictureBox.ePictureBoxType.SelfRotatingImage) - ElseIf picboxtype = B2SPictureBox.ePictureBoxType.MechRotatingImage AndAlso B2SData.RotatingImages.Count = 0 Then - Me.rotateSteps = picboxrotatesteps - RotateImage(picbox, picboxrotatesteps, picboxrotationdirection, B2SPictureBox.ePictureBoxType.MechRotatingImage, romidtype, romid) - End If - End If - Next - End If - - ' get all score infos - Dim dream7index As Integer = 1 - Dim renderedandreelindex As Integer = 1 - If topnode.SelectSingleNode("Scores") IsNot Nothing AndAlso topnode.SelectNodes("Scores/Score") IsNot Nothing Then - - Dim rollinginterval As Integer = 0 - If topnode.SelectSingleNode("Scores").Attributes("ReelRollingInterval") IsNot Nothing Then - rollinginterval = CInt(topnode.SelectSingleNode("Scores").Attributes("ReelRollingInterval").InnerText) - End If - - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Scores/Score") - - Dim parent As String = innerNode.Attributes("Parent").InnerText - Dim id As Integer = CInt(innerNode.Attributes("ID").InnerText) - Dim setid As Integer = 0 - If innerNode.Attributes("ReelIlluImageSet") IsNot Nothing Then - setid = CInt(innerNode.Attributes("ReelIlluImageSet").InnerText) - End If - Dim reeltype As String = innerNode.Attributes("ReelType").InnerText - Dim reellitcolor As Color = String2Color(innerNode.Attributes("ReelLitColor").InnerText) - Dim reeldarkcolor As Color = String2Color(innerNode.Attributes("ReelDarkColor").InnerText) - Dim d7glow As Single = CSng(innerNode.Attributes("Glow").InnerText) / 100 - Dim d7thickness As Single = CSng(innerNode.Attributes("Thickness").InnerText) / 100 - Dim d7shear As Single = CSng(innerNode.Attributes("Shear").InnerText) / 100 - Dim digits As Integer = CInt(innerNode.Attributes("Digits").InnerText) - Dim spacing As Integer = CInt(innerNode.Attributes("Spacing").InnerText) - Dim hidden As Boolean = False - If innerNode.Attributes("DisplayState") IsNot Nothing Then - hidden = (CInt(innerNode.Attributes("DisplayState").InnerText) = 1) - End If - Dim loc As Point = New Point(CInt(innerNode.Attributes("LocX").InnerText) - 1, CInt(innerNode.Attributes("LocY").InnerText)) - Dim size As Size = New Size(CInt(innerNode.Attributes("Width").InnerText), CInt(innerNode.Attributes("Height").InnerText)) - Dim b2sstartdigit As Integer = 0 - Dim b2sscoretype As Integer = 0 - Dim b2splayerno As Integer = 0 - If innerNode.Attributes("B2SStartDigit") IsNot Nothing Then b2sstartdigit = CInt(innerNode.Attributes("B2SStartDigit").InnerText) - If innerNode.Attributes("B2SScoreType") IsNot Nothing Then b2sscoretype = CInt(innerNode.Attributes("B2SScoreType").InnerText) - If innerNode.Attributes("B2SPlayerNo") IsNot Nothing Then b2splayerno = CInt(innerNode.Attributes("B2SPlayerNo").InnerText) - Dim dream7b2sstartdigit As Integer = b2sstartdigit - Dim startdigit As Integer = If(b2sstartdigit > 0, b2sstartdigit, renderedandreelindex) - Dim romid As Integer = 0 - Dim romidtype As Integer = 0 - Dim romidvalue As Integer = 0 - If innerNode.Attributes("ReelIlluB2SID") IsNot Nothing Then - romid = CInt(innerNode.Attributes("ReelIlluB2SID").InnerText) - If innerNode.Attributes("ReelIlluB2SValue") IsNot Nothing Then - romidvalue = CInt(innerNode.Attributes("ReelIlluB2SValue").InnerText) - End If - romidtype = 1 - End If - Dim soundName As String = String.Empty - - ' set some tmp vars - Dim isOnBackglass As Boolean = (parent = "Backglass") - Dim isDream7LEDs As Boolean = (reeltype.StartsWith("dream7", StringComparison.CurrentCultureIgnoreCase)) - Dim isRenderedLEDs As Boolean = (reeltype.StartsWith("rendered", StringComparison.CurrentCultureIgnoreCase)) - Dim isReels As Boolean = Not (isDream7LEDs OrElse isRenderedLEDs) - Dim glowbulb As SizeF = Nothing - Dim glow As Integer = d7glow - Dim ledtype As String = String.Empty - - ' set led type - If isDream7LEDs Then - ledtype = reeltype.Substring(9) - ElseIf isRenderedLEDs Then - ledtype = reeltype.Substring(11) - End If - - ' maybe get default glow value - If B2SSettings.DefaultGlow = -1 Then - B2SSettings.DefaultGlow = d7glow - End If - - ' set preferred LED settings - If isRenderedLEDs OrElse isDream7LEDs Then - If B2SSettings.IsGameNameFound AndAlso B2SSettings.UsedLEDType <> B2SSettings.eLEDTypes.Undefined Then - isDream7LEDs = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7) - isRenderedLEDs = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered) - ElseIf B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Undefined Then - B2SSettings.UsedLEDType = If(isDream7LEDs, B2SSettings.eLEDTypes.Dream7, B2SSettings.eLEDTypes.Rendered) - End If - If B2SSettings.IsGameNameFound AndAlso B2SSettings.GlowIndex > -1 Then - glow = B2SSettings.GlowIndex * 8 - End If - If B2SSettings.IsGameNameFound AndAlso B2SSettings.IsGlowBulbOn Then - glowbulb = New SizeF(0.1, 0.4) - End If - End If - - ' maybe create Dream 7 LED display controls - If isDream7LEDs OrElse isRenderedLEDs Then - ' add some self rendered Dream7 LED segments - Dim led As Dream7Display = New Dream7Display() - led.Name = "LEDDisplay" & id.ToString() - led.Location = loc - led.Size = size - Select Case ledtype - Case "7", "8" - led.Type = SegmentNumberType.SevenSegment - Case "9", "10" - led.Type = SegmentNumberType.TenSegment - Case "14" - led.Type = SegmentNumberType.FourteenSegment - 'Case "16" - 'led.Type = SegmentNumberType.SixteenSegment - End Select - led.ScaleMode = ScaleMode.Stretch - led.Digits = digits - led.Spacing = spacing * 5 - led.Hidden = hidden - ' color settings - 'led.GlassColor = reellitcolor - 'led.LightColor = Color.FromArgb(Math.Min(reellitcolor.R + 35, 255), Math.Min(reellitcolor.G + 35, 255), Math.Min(reellitcolor.B + 25, 255)) - 'led.GlassColorCenter = Color.FromArgb(Math.Min(reellitcolor.R + 50, 255), Math.Min(reellitcolor.G + 50, 255), Math.Min(reellitcolor.B + 50, 255)) - led.LightColor = reellitcolor - led.GlassColor = Color.FromArgb(Math.Min(reellitcolor.R + 50, 255), Math.Min(reellitcolor.G + 50, 255), Math.Min(reellitcolor.B + 50, 255)) - led.GlassColorCenter = Color.FromArgb(Math.Min(reellitcolor.R + 70, 255), Math.Min(reellitcolor.G + 70, 255), Math.Min(reellitcolor.B + 70, 255)) - led.OffColor = reeldarkcolor - 'led.BackColor = Color.FromArgb(5, 5, 5) - led.BackColor = Color.FromArgb(15, 15, 15) - led.GlassAlpha = 140 - led.GlassAlphaCenter = 255 - led.Thickness = d7thickness * 1.2 - led.Shear = d7shear - led.Glow = glow - If glowbulb <> Nothing Then - led.BulbSize = glowbulb - End If - ' 'TAXI' patch to shear the third LED display - If id = 3 AndAlso B2SData.TableName = "Taxi" Then - led.Angle = 4 - led.Shear = led.Shear / 2 - End If - - 'led.OffsetWidth = -1 * CInt(d7shear * 30) - - 'led.BulbSize = New SizeF(0.1, 0.4) - - - 'led.GlassColor = Color.FromArgb(254, 50, 25) - 'led.LightColor = Color.FromArgb(254, 90, 50) - 'led.GlassColorCenter = Color.FromArgb(254, 50, 25) - 'led.GlassAlpha = 140 - 'led.GlassAlphaCenter = 255 - 'led.Glow = 9 - - - 'led.GlassColor = Color.FromArgb(255, 210, 50) - 'led.LightColor = Color.FromArgb(255, 0, 0) - 'led.GlassColorCenter = Color.FromArgb(255, 230, 65) - 'led.OffColor = Color.FromArgb(20, 20, 20) - 'led.GlassAlpha = 120 - 'led.GlassAlphaCenter = 255 - 'led.Glow = 15 - 'led.BulbSize = New SizeF(0.1, 0.4) - 'led.Thickness = 30 - - - - ' add control to parent - If isOnBackglass Then - 'led.Type = B2SBaseBox.eType.OnBackglass - Me.Controls.Add(led) - ' add to general collection - B2SData.LEDDisplays.Add(led.Name, led) - Else - If Not B2SSettings.HideB2SDMD Then - CheckDMDForm() - formDMD.Controls.Add(led) - ' add to general collection - B2SData.LEDDisplays.Add(led.Name, led) - End If - End If - led.BringToFront() - led.Visible = isDream7LEDs AndAlso Not hidden - ' add digit location info - For i = 0 To digits - 1 - If isOnBackglass OrElse Not B2SSettings.HideB2SDMD Then - Dim leddisplayid As Integer = If(dream7b2sstartdigit > 0, dream7b2sstartdigit, dream7index) - B2SData.LEDDisplayDigits.Add(leddisplayid - 1, New B2SData.LEDDisplayDigitLocation(led, i, id)) - B2SData.ScoreMaxDigit = leddisplayid - End If - dream7index += 1 - If dream7b2sstartdigit > 0 Then dream7b2sstartdigit += 1 - Next - ' add LED area - B2SData.LEDAreas.Add("LEDArea" & id.ToString(), New B2SData.LEDAreaInfo(New Rectangle(loc, size), Not isOnBackglass)) - ' add or update player info collection - If b2splayerno > 0 Then - B2SData.IsAPlayerAdded = True - If Not B2SData.Players.ContainsKey(b2splayerno) Then - B2SData.Players.Add(b2splayerno) - End If - B2SData.Players(b2splayerno).Add(New B2SPlayer.ControlInfo(startdigit, digits, B2SPlayer.eControlType.Dream7LEDDisplay, led)) - End If - End If - - ' create reel or led boxes - Dim width As Integer = CInt((size.Width - (digits - 1) * spacing / 2) / digits) - For i As Integer = 1 To digits - Dim x As Integer = loc.X + ((i - 1) * (width + spacing / 2)) - If isRenderedLEDs OrElse isDream7LEDs Then - ' add some self rendered LEDs - Dim led As B2SLEDBox = New B2SLEDBox() - led.ID = If(b2sstartdigit > 0, b2sstartdigit, renderedandreelindex) - led.DisplayID = id - led.Name = "LEDBox" & led.ID.ToString() - led.StartDigit = startdigit - led.Digits = digits - led.Hidden = hidden - led.Location = New Point(x, loc.Y) - led.Size = New Size(width, size.Height) - Select Case ledtype - Case "7", "8" - led.LEDType = B2SLED.eLEDType.LED8 - Case "9", "10" - led.LEDType = B2SLED.eLEDType.LED10 - Case "14" - led.LEDType = B2SLED.eLEDType.LED14 - 'Case "16" - ' led.LEDType = B2SLED.eLEDType.LED16 - End Select - led.LitLEDSegmentColor = reellitcolor - led.DarkLEDSegmentColor = reeldarkcolor - led.BackColor = Color.FromArgb(5, 5, 5) ' Color.Transparent - If isOnBackglass Then - led.Type = B2SBaseBox.eType.OnBackglass - Me.Controls.Add(led) - ' add to general collection - B2SData.LEDs.Add(led.Name, led) - Else - If Not B2SSettings.HideB2SDMD Then - CheckDMDForm() - led.Type = B2SBaseBox.eType.OnDMD - formDMD.Controls.Add(led) - ' add to general collection - B2SData.LEDs.Add(led.Name, led) - End If - End If - B2SData.ScoreMaxDigit = led.ID - led.BringToFront() - led.Visible = isRenderedLEDs AndAlso Not hidden - ' add LED area - 'B2SData.LEDAreas.Add("LEDArea" & id.ToString(), New B2SData.LEDAreaInfo(New Rectangle(loc, size), Not isOnBackglass)) - ' add or update player info collection - ' no need to do this here since it's done at the dream7 LEDs - ' write reel info into registry - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SScoreDigit" & led.ID.ToString(), If(isDream7LEDs, "2", "1") & "," & CInt(led.LEDType).ToString() & "," & led.StartDigit.ToString() & "," & led.Digits, RegistryValueKind.String) - regkey.SetValue("B2SScoreDisplay" & id.ToString(), startdigit.ToString(), RegistryValueKind.String) - End Using - ElseIf isReels Then - ' look for matching reel sound - soundName = String.Empty - If innerNode.Attributes("Sound" & i.ToString()) IsNot Nothing Then - soundName = innerNode.Attributes("Sound" & i.ToString()).InnerText - If String.IsNullOrEmpty(soundName) Then - soundName = "stille" - End If - End If - ' add reel or LED pictures - Dim reel As B2SReelBox = New B2SReelBox() - reel.ID = If(b2sstartdigit > 0, b2sstartdigit, renderedandreelindex) - reel.DisplayID = id - reel.SetID = setid - reel.Name = "ReelBox" & reel.ID.ToString() - reel.StartDigit = startdigit - reel.Digits = digits - reel.RomID = romid - reel.RomIDType = romidtype - reel.RomIDValue = romidvalue - reel.Location = New Point(x, loc.Y) - reel.Size = New Size(width, size.Height) - reel.ReelType = reeltype.Substring(0, reeltype.Length - 2) - reel.ScoreType = b2sscoretype - reel.SoundName = soundName - If rollinginterval >= 10 Then reel.RollingInterval = rollinginterval - If isOnBackglass Then - reel.Type = B2SBaseBox.eType.OnBackglass - Me.Controls.Add(reel) - ' add to general collection - B2SData.Reels.Add(reel) - Else - If Not B2SSettings.HideB2SDMD Then - CheckDMDForm() - reel.Type = B2SBaseBox.eType.OnDMD - formDMD.Controls.Add(reel) - ' add to general collection - B2SData.Reels.Add(reel) - End If - End If - B2SData.ScoreMaxDigit = reel.ID - reel.BringToFront() - reel.Visible = Not hidden - ' add or update reel display - If Not B2SData.ReelDisplays.ContainsKey(id) Then - Dim reeldisplay As B2SReelDisplay = New B2SReelDisplay - reeldisplay.StartDigit = startdigit - reeldisplay.Digits = digits - reeldisplay.Reels.Add(reel.ID, reel) - B2SData.ReelDisplays.Add(id, reeldisplay) - Else - B2SData.ReelDisplays(id).Reels.Add(reel.ID, reel) - End If - ' add or update player info collection - If b2splayerno > 0 Then - B2SData.IsAPlayerAdded = True - If Not B2SData.Players.ContainsKey(b2splayerno) Then - B2SData.Players.Add(b2splayerno) - End If - B2SData.Players(b2splayerno).Add(New B2SPlayer.ControlInfo(startdigit, digits, B2SPlayer.eControlType.ReelDisplay, B2SData.ReelDisplays(id))) - End If - ' write reel info into registry - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SScoreDigit" & reel.ID.ToString(), "3,0," & reel.StartDigit.ToString() & "," & reel.Digits, RegistryValueKind.String) - regkey.SetValue("B2SScoreDisplay" & id.ToString(), startdigit.ToString(), RegistryValueKind.String) - End Using - End If - - renderedandreelindex += 1 - If b2sstartdigit > 0 Then b2sstartdigit += 1 - - Next - - dream7index = renderedandreelindex - - Next - - ' write player info into registry - For Each controls As KeyValuePair(Of Integer, B2SPlayer.ControlCollection) In B2SData.Players - Dim player As String = String.Empty - For Each controlinfo As B2SPlayer.ControlInfo In controls.Value - With controlinfo - Dim type As String = "0" - If .LEDBox IsNot Nothing Then - type = CInt(.LEDBox.LEDType).ToString() - ElseIf .LEDDisplay IsNot Nothing Then - type = If(.LEDDisplay.Type = SegmentNumberType.TenSegment, "2", If(.LEDDisplay.Type = SegmentNumberType.FourteenSegment, "3", "1")) - End If - player &= ";" & If(.Type = B2SPlayer.eControlType.ReelDisplay OrElse .Type = B2SPlayer.eControlType.ReelBox, "3", "1") & "," & - type & "," & - controlinfo.StartDigit & "," & - controlinfo.Digits - End With - Next - If Not String.IsNullOrEmpty(player) Then player = player.Substring(1) - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SScorePlayer" & controls.Key.ToString(), player, RegistryValueKind.String) - End Using - Next - - End If - - ' maybe get all reel images - If topnode.SelectSingleNode("Reels") IsNot Nothing Then - - If topnode.SelectNodes("Reels/Image") IsNot Nothing AndAlso topnode.SelectNodes("Reels/Image").Count > 0 Then - - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Reels/Image") - Dim name As String = innerNode.Attributes("Name").InnerText - Dim image As Image = Base64ToImage(innerNode.Attributes("Image").InnerText) - If Not B2SData.ReelImages.ContainsKey(name) Then - B2SData.ReelImages.Add(name, image) - End If - Next - - ElseIf topnode.SelectNodes("Reels/Images") IsNot Nothing AndAlso topnode.SelectNodes("Reels/Images/Image") IsNot Nothing AndAlso topnode.SelectNodes("Reels/Images/Image").Count > 0 Then - - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Reels/Images/Image") - Dim name As String = innerNode.Attributes("Name").InnerText - Dim image As Image = Base64ToImage(innerNode.Attributes("Image").InnerText) - If Not B2SData.ReelImages.ContainsKey(name) Then - B2SData.ReelImages.Add(name, image) - End If - ' maybe get the intermediate reel images - If innerNode.Attributes("CountOfIntermediates") IsNot Nothing Then - Dim countOfIntermediates As Integer = CInt(innerNode.Attributes("CountOfIntermediates").InnerText) - For i As Integer = 1 To countOfIntermediates - Dim intname As String = name & "_" & i.ToString() - Dim intimage As Image = Base64ToImage(innerNode.Attributes("IntermediateImage" & i.ToString()).InnerText) - If Not B2SData.ReelIntermediateImages.ContainsKey(intname) Then - B2SData.ReelIntermediateImages.Add(intname, intimage) - End If - Next - End If - Next - - If topnode.SelectNodes("Reels/IlluminatedImages") IsNot Nothing Then - If topnode.SelectNodes("Reels/IlluminatedImages/IlluminatedImage") IsNot Nothing AndAlso topnode.SelectNodes("Reels/IlluminatedImages/IlluminatedImage").Count > 0 Then - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Reels/IlluminatedImages/IlluminatedImage") - Dim name As String = innerNode.Attributes("Name").InnerText - Dim image As Image = Base64ToImage(innerNode.Attributes("Image").InnerText) - If Not B2SData.ReelIlluImages.ContainsKey(name) Then - B2SData.ReelIlluImages.Add(name, image) - End If - ' maybe get the intermediate reel images - If innerNode.Attributes("CountOfIntermediates") IsNot Nothing Then - Dim countOfIntermediates As Integer = CInt(innerNode.Attributes("CountOfIntermediates").InnerText) - For i As Integer = 1 To countOfIntermediates - Dim intname As String = name & "_" & i.ToString() - Dim intimage As Image = Base64ToImage(innerNode.Attributes("IntermediateImage" & i.ToString()).InnerText) - If Not B2SData.ReelIntermediateIlluImages.ContainsKey(intname) Then - B2SData.ReelIntermediateIlluImages.Add(intname, intimage) - End If - Next - End If - Next - ElseIf topnode.SelectNodes("Reels/IlluminatedImages/Set") IsNot Nothing AndAlso topnode.SelectNodes("Reels/IlluminatedImages/Set/IlluminatedImage") IsNot Nothing AndAlso topnode.SelectNodes("Reels/IlluminatedImages/Set/IlluminatedImage").Count > 0 Then - For Each setnode As Xml.XmlElement In topnode.SelectNodes("Reels/IlluminatedImages/Set") - Dim setid As Integer = CInt(setnode.Attributes("ID").InnerText) - For Each innerNode As Xml.XmlElement In setnode.SelectNodes("IlluminatedImage") - Dim name As String = innerNode.Attributes("Name").InnerText & "_" & setid.ToString() - Dim image As Image = Base64ToImage(innerNode.Attributes("Image").InnerText) - If Not B2SData.ReelIlluImages.ContainsKey(name) Then - B2SData.ReelIlluImages.Add(name, image) - End If - ' maybe get the intermediate reel images - If innerNode.Attributes("CountOfIntermediates") IsNot Nothing Then - Dim countOfIntermediates As Integer = CInt(innerNode.Attributes("CountOfIntermediates").InnerText) - For i As Integer = 1 To countOfIntermediates - Dim intname As String = name & "_" & i.ToString() - Dim intimage As Image = Base64ToImage(innerNode.Attributes("IntermediateImage" & i.ToString()).InnerText) - If Not B2SData.ReelIntermediateIlluImages.ContainsKey(intname) Then - B2SData.ReelIntermediateIlluImages.Add(intname, intimage) - End If - Next - End If - Next - Next - End If - End If - - End If - - End If - - ' maybe get all sounds - If topnode.SelectSingleNode("Sounds") IsNot Nothing Then - - If topnode.SelectNodes("Sounds/Sound") IsNot Nothing AndAlso topnode.SelectNodes("Sounds/Sound").Count > 0 Then - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Sounds/Sound") - Dim name As String = innerNode.Attributes("Name").InnerText - Dim stream As IO.MemoryStream = Base64ToWav(innerNode.Attributes("Stream").InnerText) - If Not B2SData.Sounds.ContainsKey(name) Then - B2SData.Sounds.Add(name, stream.ToArray) - End If - Next - End If - For Each reel As KeyValuePair(Of String, B2SReelBox) In B2SData.Reels - If B2SData.Sounds.ContainsKey(reel.Value.SoundName) Then - reel.Value.Sound = B2SData.Sounds(reel.Value.SoundName) - End If - Next - - End If - - ' get background and maybe DMD image(s) - If topnode.SelectSingleNode("Images") IsNot Nothing Then - - ' backglass image - Dim offimagenode As Xml.XmlElement = topnode.SelectSingleNode("Images/BackglassOffImage") - If offimagenode IsNot Nothing Then - B2SData.OnAndOffImage = True - ' get on and off image - Dim offimage As Image = Base64ToImage(offimagenode.Attributes("Value").InnerText) - DarkImage4Authentic = offimage - If B2SData.DualBackglass Then - DarkImage4Fantasy = offimage - End If - Dim onimagenode As Xml.XmlElement = topnode.SelectSingleNode("Images/BackglassOnImage") - If onimagenode IsNot Nothing Then - Dim onimage As Image = Base64ToImage(onimagenode.Attributes("Value").InnerText) - TopLightImage4Authentic = onimage - If B2SData.DualBackglass Then - TopLightImage4Fantasy = onimage - End If - If onimagenode.Attributes("RomID") IsNot Nothing Then - TopRomID4Authentic = CInt(onimagenode.Attributes("RomID").InnerText) - TopRomIDType4Authentic = CInt(onimagenode.Attributes("RomIDType").InnerText) - TopRomInverted4Authentic = False - Select Case TopRomIDType4Authentic - Case B2SBaseBox.eRomIDType.Lamp - B2SData.UsedRomLampIDs4Authentic.Add(TopRomID4Authentic, Nothing) - Case B2SBaseBox.eRomIDType.Solenoid - B2SData.UsedRomSolenoidIDs4Authentic.Add(TopRomID4Authentic, Nothing) - Case B2SBaseBox.eRomIDType.GIString - B2SData.UsedRomGIStringIDs4Authentic.Add(TopRomID4Authentic, Nothing) - End Select - If B2SData.DualBackglass Then - TopRomID4Fantasy = CInt(onimagenode.Attributes("RomID").InnerText) - TopRomIDType4Fantasy = CInt(onimagenode.Attributes("RomIDType").InnerText) - TopRomInverted4Fantasy = False - Select Case TopRomIDType4Authentic - Case B2SBaseBox.eRomIDType.Lamp - B2SData.UsedRomLampIDs4Fantasy.Add(TopRomID4Fantasy, Nothing) - Case B2SBaseBox.eRomIDType.Solenoid - B2SData.UsedRomSolenoidIDs4Fantasy.Add(TopRomID4Fantasy, Nothing) - Case B2SBaseBox.eRomIDType.GIString - B2SData.UsedRomGIStringIDs4Fantasy.Add(TopRomID4Fantasy, Nothing) - End Select - End If - End If - End If - Else - Dim imagenode As Xml.XmlElement = topnode.SelectSingleNode("Images/BackglassImage") - If imagenode IsNot Nothing Then - Dim image As Image = Base64ToImage(imagenode.Attributes("Value").InnerText) - DarkImage4Authentic = image - If B2SData.DualBackglass Then - DarkImage4Fantasy = image - End If - End If - End If - ' starting image is the dark image - Me.BackgroundImage = DarkImage - - ' DMD image - Dim dmdimagenode As Xml.XmlElement = topnode.SelectSingleNode("Images/DMDImage") - If dmdimagenode IsNot Nothing Then - Dim image As Image = Base64ToImage(dmdimagenode.Attributes("Value").InnerText) - If image IsNot Nothing Then - If Not B2SSettings.HideB2SDMD Then - CheckDMDForm() - formDMD.BackgroundImage = image - End If - End If - End If - - If mergeBulbs Then - ' look for the largest bulb amount - Dim topSize4Authentic As Integer = 0 - Dim topkey4Authentic As String = String.Empty - Dim secondSize4Authentic As Integer = 0 - Dim secondkey4Authentic As String = String.Empty - For Each romsize As KeyValuePair(Of String, Integer) In roms4Authentic - If romsize.Value > secondSize4Authentic Then - secondSize4Authentic = romsize.Value - secondkey4Authentic = romsize.Key - End If - If romsize.Value > topSize4Authentic Then - secondSize4Authentic = topSize4Authentic - secondkey4Authentic = topkey4Authentic - topSize4Authentic = romsize.Value - topkey4Authentic = romsize.Key - End If - Next - Dim top4Fantasy As Integer = 0 - Dim topkey4Fantasy As String = String.Empty - Dim secondSize4Fantasy As Integer = 0 - Dim secondkey4Fantasy As String = String.Empty - If B2SData.DualBackglass Then - For Each romsize As KeyValuePair(Of String, Integer) In roms4Fantasy - If romsize.Value > secondSize4Fantasy Then - secondSize4Fantasy = romsize.Value - secondkey4Fantasy = romsize.Key - End If - If romsize.Value > top4Fantasy Then - secondSize4Fantasy = top4Fantasy - secondkey4Fantasy = topkey4Fantasy - top4Fantasy = romsize.Value - topkey4Fantasy = romsize.Key - End If - Next - End If - ' maybe draw some light images for pretty fast image changing - If topSize4Authentic >= minSize4Image Then - ' create some light images - If TopLightImage4Authentic Is Nothing Then - TopLightImage4Authentic = CreateLightImage(DarkImage4Authentic, B2SData.eDualMode.Authentic, topkey4Authentic, , TopRomID4Authentic, TopRomIDType4Authentic, TopRomInverted4Authentic) - If secondSize4Authentic > minSize4Image Then - SecondLightImage4Authentic = CreateLightImage(DarkImage4Authentic, B2SData.eDualMode.Authentic, secondkey4Authentic, , SecondRomID4Authentic, SecondRomIDType4Authentic, SecondRomInverted4Authentic) - TopAndSecondLightImage4Authentic = CreateLightImage(DarkImage4Authentic, B2SData.eDualMode.Authentic, topkey4Authentic, secondkey4Authentic) - End If - Else - SecondLightImage4Authentic = CreateLightImage(DarkImage4Authentic, B2SData.eDualMode.Authentic, topkey4Authentic, , SecondRomID4Authentic, SecondRomIDType4Authentic, SecondRomInverted4Authentic) - TopAndSecondLightImage4Authentic = CreateLightImage(TopLightImage4Authentic, B2SData.eDualMode.Authentic, topkey4Authentic) - End If - End If - If B2SData.DualBackglass AndAlso top4Fantasy >= minSize4Image Then - ' create some light images - If TopLightImage4Fantasy Is Nothing Then - TopLightImage4Fantasy = CreateLightImage(DarkImage4Fantasy, B2SData.eDualMode.Fantasy, topkey4Fantasy, , TopRomID4Fantasy, TopRomIDType4Fantasy, TopRomInverted4Fantasy) - If secondSize4Fantasy > minSize4Image Then - SecondLightImage4Fantasy = CreateLightImage(DarkImage4Fantasy, B2SData.eDualMode.Fantasy, secondkey4Fantasy, , SecondRomID4Fantasy, SecondRomIDType4Fantasy, SecondRomInverted4Fantasy) - TopAndSecondLightImage4Fantasy = CreateLightImage(DarkImage4Fantasy, B2SData.eDualMode.Fantasy, topkey4Fantasy, secondkey4Fantasy) - End If - Else - SecondLightImage4Fantasy = CreateLightImage(DarkImage4Fantasy, B2SData.eDualMode.Fantasy, topkey4Fantasy, , SecondRomID4Fantasy, SecondRomIDType4Fantasy, SecondRomInverted4Fantasy) - TopAndSecondLightImage4Fantasy = CreateLightImage(TopLightImage4Fantasy, B2SData.eDualMode.Fantasy, topkey4Fantasy) - End If - End If - B2SData.UsedTopRomIDType4Authentic = TopRomIDType4Authentic - B2SData.UsedSecondRomIDType4Authentic = SecondRomIDType4Authentic - If B2SData.DualBackglass Then - B2SData.UsedTopRomIDType4Fantasy = TopRomIDType4Fantasy - B2SData.UsedSecondRomIDType4Fantasy = SecondRomIDType4Fantasy - End If - - ' remove top and second rom bulbs - CheckBulbs(TopRomID4Authentic, TopRomIDType4Authentic, TopRomInverted4Authentic, B2SData.eDualMode.Authentic) - CheckBulbs(SecondRomID4Authentic, SecondRomIDType4Authentic, SecondRomInverted4Authentic, B2SData.eDualMode.Authentic) - If B2SData.DualBackglass Then - CheckBulbs(TopRomID4Fantasy, TopRomIDType4Fantasy, TopRomInverted4Fantasy, B2SData.eDualMode.Fantasy) - CheckBulbs(SecondRomID4Fantasy, SecondRomIDType4Fantasy, SecondRomInverted4Fantasy, B2SData.eDualMode.Fantasy) - End If - End If - End If - - ' get all animation info - Dim animationpulseswitch As Boolean = False - If topnode.SelectSingleNode("Animations") IsNot Nothing AndAlso topnode.SelectNodes("Animations/Animation") IsNot Nothing Then - For Each innerNode As Xml.XmlElement In topnode.SelectNodes("Animations/Animation") - Dim name As String = innerNode.Attributes("Name").InnerText - Dim dualmode As B2SData.eDualMode = B2SData.eDualMode.Both - If innerNode.Attributes("DualMode") IsNot Nothing Then - dualmode = CInt(innerNode.Attributes("DualMode").InnerText) - End If - Dim interval As Integer = CInt(innerNode.Attributes("Interval").InnerText) - Dim loops As Integer = CInt(innerNode.Attributes("Loops").InnerText) - Dim idJoins As String = innerNode.Attributes("IDJoin").InnerText - Dim startAnimationAtBackglassStartup As Boolean = (innerNode.Attributes("StartAnimationAtBackglassStartup").InnerText = "1") - Dim lightsStateAtAnimationStart As B2SAnimation.eLightsStateAtAnimationStart = B2SAnimation.eLightsStateAtAnimationStart.NoChange - Dim lightsStateAtAnimationEnd As B2SAnimation.eLightsStateAtAnimationEnd = B2SAnimation.eLightsStateAtAnimationEnd.InvolvedLightsOff - Dim animationstopbehaviour As B2SAnimation.eAnimationStopBehaviour = B2S.B2SAnimation.eAnimationStopBehaviour.StopImmediatelly - Dim lockInvolvedLamps As Boolean = False - Dim hidescoredisplays As Boolean = False - Dim bringtofront As Boolean = False - Dim randomstart As Boolean = False - Dim randomquality As Integer = 1 - If innerNode.Attributes("LightsStateAtAnimationStart") IsNot Nothing Then - lightsStateAtAnimationStart = CInt(innerNode.Attributes("LightsStateAtAnimationStart").InnerText) - ElseIf innerNode.Attributes("AllLightsOffAtAnimationStart") IsNot Nothing Then - lightsStateAtAnimationStart = If((innerNode.Attributes("AllLightsOffAtAnimationStart").InnerText = "1"), B2SAnimation.eLightsStateAtAnimationStart.LightsOff, B2SAnimation.eLightsStateAtAnimationStart.NoChange) - End If - If innerNode.Attributes("LightsStateAtAnimationEnd") IsNot Nothing Then - lightsStateAtAnimationEnd = CInt(innerNode.Attributes("LightsStateAtAnimationEnd").InnerText) - ElseIf innerNode.Attributes("ResetLightsAtAnimationEnd") IsNot Nothing Then - lightsStateAtAnimationEnd = If((innerNode.Attributes("ResetLightsAtAnimationEnd").InnerText = "1"), B2SAnimation.eLightsStateAtAnimationEnd.LightsReseted, B2SAnimation.eLightsStateAtAnimationEnd.Undefined) - End If - If innerNode.Attributes("AnimationStopBehaviour") IsNot Nothing Then - animationstopbehaviour = CInt(innerNode.Attributes("AnimationStopBehaviour").InnerText) - ElseIf innerNode.Attributes("RunAnimationTilEnd") IsNot Nothing Then - animationstopbehaviour = If((innerNode.Attributes("RunAnimationTilEnd").InnerText = "1"), B2SAnimation.eAnimationStopBehaviour.RunAnimationTillEnd, B2SAnimation.eAnimationStopBehaviour.StopImmediatelly) - End If - lockInvolvedLamps = (innerNode.Attributes("LockInvolvedLamps").InnerText = "1") - If innerNode.Attributes("HideScoreDisplays") IsNot Nothing Then - hidescoredisplays = (innerNode.Attributes("HideScoreDisplays").InnerText = "1") - End If - If innerNode.Attributes("BringToFront") IsNot Nothing Then - bringtofront = (innerNode.Attributes("BringToFront").InnerText = "1") - End If - If innerNode.Attributes("RandomStart") IsNot Nothing Then - randomstart = (innerNode.Attributes("RandomStart").InnerText = "1") - End If - If randomstart AndAlso innerNode.Attributes("RandomQuality") IsNot Nothing Then - randomquality = CInt(innerNode.Attributes("RandomQuality").InnerText) - End If - If lightsStateAtAnimationStart = B2SAnimation.eLightsStateAtAnimationStart.Undefined Then lightsStateAtAnimationStart = B2SAnimation.eLightsStateAtAnimationStart.NoChange - If lightsStateAtAnimationEnd = B2SAnimation.eLightsStateAtAnimationEnd.Undefined Then lightsStateAtAnimationEnd = B2SAnimation.eLightsStateAtAnimationEnd.InvolvedLightsOff - If animationstopbehaviour = B2SAnimation.eAnimationStopBehaviour.Undefined Then animationstopbehaviour = B2SAnimation.eAnimationStopBehaviour.StopImmediatelly - Dim entries As B2SAnimation.PictureBoxAnimationEntry() = Nothing - For Each stepnode As Xml.XmlElement In innerNode.SelectNodes("AnimationStep") - Dim [step] As Integer = CInt(stepnode.Attributes("Step").InnerText) - Dim [on] As String = stepnode.Attributes("On").InnerText - Dim waitLoopsAfterOn As Integer = CInt(stepnode.Attributes("WaitLoopsAfterOn").InnerText) - Dim off As String = stepnode.Attributes("Off").InnerText - Dim waitLoopsAfterOff As Integer = CInt(stepnode.Attributes("WaitLoopsAfterOff").InnerText) - Dim pulseswitch As Integer = 0 - If stepnode.Attributes("PulseSwitch") IsNot Nothing Then - pulseswitch = CInt(stepnode.Attributes("PulseSwitch").InnerText) - If pulseswitch > 0 Then animationpulseswitch = True - End If - Dim entry As B2SAnimation.PictureBoxAnimationEntry = New B2SAnimation.PictureBoxAnimationEntry([on], waitLoopsAfterOn, off, waitLoopsAfterOff, , , , , pulseswitch) - If entries Is Nothing Then - ReDim entries(0) - entries(0) = entry - Else - ReDim Preserve entries(entries.Length) - entries(entries.Length - 1) = entry - End If - Next - ' maybe add animation - If interval > 0 AndAlso entries.Length > 0 Then - B2SAnimation.AddAnimation(name, Me, formDMD, dualmode, interval, loops, startAnimationAtBackglassStartup, lightsStateAtAnimationStart, lightsStateAtAnimationEnd, - animationstopbehaviour, lockInvolvedLamps, hidescoredisplays, bringtofront, randomstart, randomquality, - entries) - ' maybe set slowdown - If B2SSettings.AnimationSlowDowns.ContainsKey(name) Then - B2SAnimation.AnimationSlowDown(name) = B2SSettings.AnimationSlowDowns(name) - End If - ' add join to ID - If Not String.IsNullOrEmpty(idJoins) Then - For Each idJoin As String In idJoins.Split(",") - If Not String.IsNullOrEmpty(idJoin) Then - Dim id0 As Integer = 0 - Dim id1 As Integer = 0 - Dim id2 As Integer = 0 - Dim id3 As Integer = 0 - If idJoin.Length >= 1 AndAlso IsNumeric(idJoin) Then id0 = CInt(idJoin) - If idJoin.Length >= 2 AndAlso IsNumeric(idJoin.Substring(1)) Then id1 = CInt(idJoin.Substring(1)) - If idJoin.Length >= 3 AndAlso IsNumeric(idJoin.Substring(2)) Then id2 = CInt(idJoin.Substring(2)) - If idJoin.Length >= 4 AndAlso IsNumeric(idJoin.Substring(3)) Then id3 = CInt(idJoin.Substring(3)) - Select Case idJoin.Substring(0, 1).ToUpper - Case "L" - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationLampIDs, B2SData.UsedAnimationLampIDs) - If id1 > 0 Then animations.Add(id1, New B2SData.AnimationInfo(name, False)) - Case "S" - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationSolenoidIDs, B2SData.UsedAnimationSolenoidIDs) - If id1 > 0 Then animations.Add(id1, New B2SData.AnimationInfo(name, False)) - Case "G" - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationGIStringIDs, B2SData.UsedAnimationGIStringIDs) - If idJoin.Substring(1, 1).ToUpper = "I" Then - If id2 > 0 Then animations.Add(id2, New B2SData.AnimationInfo(name, False)) - Else - If id1 > 0 Then animations.Add(id1, New B2SData.AnimationInfo(name, False)) - End If - Case "I" - If idJoin.Length >= 2 Then - Select Case idJoin.Substring(0, 2).ToUpper - Case "IL" - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationLampIDs, B2SData.UsedAnimationLampIDs) - If id2 > 0 Then animations.Add(id2, New B2SData.AnimationInfo(name, True)) - Case "IS" - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationSolenoidIDs, B2SData.UsedAnimationSolenoidIDs) - If id2 > 0 Then animations.Add(id2, New B2SData.AnimationInfo(name, True)) - Case "IG" - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationGIStringIDs, B2SData.UsedAnimationGIStringIDs) - If idJoin.Substring(2, 1).ToUpper = "I" Then - If id3 > 0 Then animations.Add(id3, New B2SData.AnimationInfo(name, True)) - Else - If id2 > 0 Then animations.Add(id2, New B2SData.AnimationInfo(name, True)) - End If - Case Else - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationLampIDs, B2SData.UsedAnimationLampIDs) - If id1 > 0 Then animations.Add(id1, New B2SData.AnimationInfo(name, True)) - End Select - End If - Case Else - Dim animations As B2SData.AnimationCollection = If(randomstart, B2SData.UsedRandomAnimationLampIDs, B2SData.UsedAnimationLampIDs) - If id0 > 0 Then animations.Add(id0, New B2SData.AnimationInfo(name, False)) - End Select - End If - Next - End If - End If - Next - End If - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SSetSwitch", If(animationpulseswitch, 1, 0), RegistryValueKind.DWord) - End Using - - ' set backglass to topmost window - 'Me.TopMost = True - 'Me.BringToFront() - 'Me.TopMost = False - - End If - - End If - - End Sub - - Private Sub InitB2SScreen() - - ' initialize screen settings - If formDMD IsNot Nothing Then - If B2SData.DMDType = B2SData.eDMDType.B2SAlwaysOnSecondMonitor Then - B2SScreen.Start(Me, formDMD, B2SData.DMDDefaultLocation, B2SScreen.eDMDViewMode.ShowDMDOnlyAtDefaultLocation, B2SData.GrillHeight, B2SData.SmallGrillHeight) - ElseIf B2SData.DMDType = B2SData.eDMDType.B2SAlwaysOnThirdMonitor Then - B2SScreen.Start(Me, formDMD, B2SData.DMDDefaultLocation, B2SScreen.eDMDViewMode.DoNotShowDMDAtDefaultLocation, B2SData.GrillHeight, B2SData.SmallGrillHeight) - ElseIf B2SData.DMDType = B2SData.eDMDType.B2SOnSecondOrThirdMonitor Then - B2SScreen.Start(Me, formDMD, B2SData.DMDDefaultLocation, B2SScreen.eDMDViewMode.ShowDMD, B2SData.GrillHeight, B2SData.SmallGrillHeight) - Else - B2SScreen.Start(Me, B2SData.GrillHeight, B2SData.SmallGrillHeight) - End If - Else - B2SScreen.Start(Me, B2SData.GrillHeight, B2SData.SmallGrillHeight) - End If - - End Sub - - Private Sub ResizeSomeImages() - - ' resize images - Dim xResizeFactor As Single = 1 - Dim yResizeFactor As Single = 1 - If DarkImage4Authentic IsNot Nothing Then - Dim width As Integer = DarkImage4Authentic.Width - Dim height As Integer = DarkImage4Authentic.Height - Dim image As Image = DarkImage4Authentic.Resized(B2SScreen.BackglassSize) - DarkImage4Authentic.Dispose() - DarkImage4Authentic = Nothing - DarkImage4Authentic = image - xResizeFactor = width / DarkImage4Authentic.Width - yResizeFactor = height / DarkImage4Authentic.Height - End If - If DarkImage4Fantasy IsNot Nothing Then - DarkImage4Fantasy = DarkImage4Authentic - End If - If TopLightImage4Authentic IsNot Nothing Then - Dim image As Image = TopLightImage4Authentic.Resized(B2SScreen.BackglassSize) - TopLightImage4Authentic.Dispose() - TopLightImage4Authentic = Nothing - TopLightImage4Authentic = image - End If - If TopLightImage4Fantasy IsNot Nothing Then - Dim image As Image = TopLightImage4Fantasy.Resized(B2SScreen.BackglassSize) - TopLightImage4Fantasy.Dispose() - TopLightImage4Fantasy = Nothing - TopLightImage4Fantasy = image - End If - If SecondLightImage4Authentic IsNot Nothing Then - Dim image As Image = SecondLightImage4Authentic.Resized(B2SScreen.BackglassSize) - SecondLightImage4Authentic.Dispose() - SecondLightImage4Authentic = Nothing - SecondLightImage4Authentic = image - End If - If SecondLightImage4Fantasy IsNot Nothing Then - Dim image As Image = SecondLightImage4Fantasy.Resized(B2SScreen.BackglassSize) - SecondLightImage4Fantasy.Dispose() - SecondLightImage4Fantasy = Nothing - SecondLightImage4Fantasy = image - End If - If TopAndSecondLightImage4Authentic IsNot Nothing Then - Dim image As Image = TopAndSecondLightImage4Authentic.Resized(B2SScreen.BackglassSize) - TopAndSecondLightImage4Authentic.Dispose() - TopAndSecondLightImage4Authentic = Nothing - TopAndSecondLightImage4Authentic = image - End If - If TopAndSecondLightImage4Fantasy IsNot Nothing Then - Dim image As Image = TopAndSecondLightImage4Fantasy.Resized(B2SScreen.BackglassSize) - TopAndSecondLightImage4Fantasy.Dispose() - TopAndSecondLightImage4Fantasy = Nothing - TopAndSecondLightImage4Fantasy = image - End If - Me.BackgroundImage = DarkImage - - ' now resize the detail images - If xResizeFactor <> 1 OrElse yResizeFactor <> 1 Then - For Each illu As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - If illu.Value.PictureBoxType = B2SPictureBox.ePictureBoxType.StandardImage Then - If illu.Value.BackgroundImage IsNot Nothing Then - Dim newsize As SizeF = New SizeF(illu.Value.BackgroundImage.Size.Width / xResizeFactor, illu.Value.BackgroundImage.Size.Height / yResizeFactor) - 'Dim image As Image = illu.Value.BackgroundImage.ResizedF(newsize, True) - 'Dim offimage As Image = illu.Value.OffImage.ResizedF(newsize, True) - Dim image As Image = illu.Value.BackgroundImage.Resized(Size.Round(newsize), True) - Dim offimage As Image = illu.Value.OffImage.Resized(Size.Round(newsize), True) - illu.Value.BackgroundImage = image - illu.Value.OffImage = offimage - End If - End If - Next - End If - - ' and now rotate and resize the rotation images - For Each rotatingImageColl As KeyValuePair(Of Integer, Generic.Dictionary(Of Integer, Image)) In B2SData.RotatingImages - For I As Integer = 0 To 359 - If rotatingImageColl.Value.ContainsKey(I) Then - If xResizeFactor <> 1 OrElse yResizeFactor <> 1 Then - Dim image As Image = rotatingImageColl.Value(I) - image = image.Resized(New Size(image.Width / xResizeFactor, image.Height / yResizeFactor), True) - rotatingImageColl.Value.Remove(I) - rotatingImageColl.Value.Add(I, image) - End If - End If - Next - ' maybe draw the starting rotate image - If B2SData.UseRotatingImage OrElse B2SData.UseMechRotatingImage Then - B2SData.RotatingPictureBox(rotatingImageColl.Key).BackgroundImage = rotatingImageColl.Value(0) - B2SData.RotatingPictureBox(rotatingImageColl.Key).Visible = True - End If - Next - - End Sub - - Private Sub ShowStartupSnippits() - - ' maybe show some 'startup on' snippits - Dim topIsOn As Boolean = False - For Each picbox As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - If picbox.Value.InitialState = 1 AndAlso picbox.Value.IsImageSnippit Then - picbox.Value.Visible = True - End If - Next - - End Sub - Private Sub ShowStartupImages() - - Static isdone As Boolean = False - If Not isdone Then - isdone = True - ' maybe show some 'startup on' images - Dim topIsOn As Boolean = False - For Each picbox As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - If picbox.Value.InitialState = 1 AndAlso Not picbox.Value.IsImageSnippit Then - If TopRomID > 0 AndAlso picbox.Value.RomID = TopRomID AndAlso picbox.Value.RomIDType = TopRomIDType AndAlso picbox.Value.RomInverted = TopRomInverted Then - topIsOn = True - If TopLightImage IsNot Nothing AndAlso Not TopLightImage.Equals(Me.BackgroundImage) Then - Me.BackgroundImage = TopLightImage - End If - ElseIf Not topIsOn AndAlso SecondRomID > 0 AndAlso picbox.Value.RomID = SecondRomID AndAlso picbox.Value.RomIDType = SecondRomIDType AndAlso picbox.Value.RomInverted = SecondRomInverted Then - If SecondLightImage IsNot Nothing AndAlso Not SecondLightImage.Equals(Me.BackgroundImage) Then - Me.BackgroundImage = SecondLightImage - End If - Else - picbox.Value.Visible = True - End If - End If - Next - End If - - End Sub - - Private Sub RotateImage(ByVal picbox As B2SPictureBox, - ByVal rotationsteps As Integer, - ByVal rotationdirection As B2SPictureBox.eSnippitRotationDirection, - ByVal type As B2SPictureBox.ePictureBoxType, - Optional ByVal romidtype As Integer = 0, - Optional ByVal romid As Integer = 0) - - If picbox IsNot Nothing AndAlso rotationsteps > 0 Then - - ' store some data - If romid = 0 Then - B2SData.UseRotatingImage = True - Else - B2SData.UseMechRotatingImage = True - End If - If Not B2SData.RotatingPictureBox.ContainsKey(romid) Then - B2SData.RotatingPictureBox.Add(romid, picbox) - Else - B2SData.RotatingPictureBox(romid) = picbox - End If - - ' calc rotation angle - Me.rotateAngle = 360 / rotationsteps - - ' rotate the image the whole circle - Dim rotatingangleS As Single = 0 - Dim index As Integer = 0 - Do While rotatingangleS < 360 - Dim rotatingAngle As Integer = CInt(rotatingangleS) - Dim image As Image = B2SData.RotatingPictureBox(romid).BackgroundImage.Rotated(If(rotationdirection = B2SPictureBox.eSnippitRotationDirection.AntiClockwise, rotatingAngle, 360 - rotatingAngle)) - If Not B2SData.RotatingImages.ContainsKey(romid) Then B2SData.RotatingImages.Add(romid, New Generic.Dictionary(Of Integer, Image)) - B2SData.RotatingImages(romid).Add(If(picbox.PictureBoxType = B2SPictureBox.ePictureBoxType.MechRotatingImage, index, rotatingAngle), image) - rotatingangleS += Me.rotateAngle - index += 1 - Loop - - ' set start image - 'B2SData.RotatingPictureBox(romid).BackgroundImage = B2SData.RotatingImages(romid)(0) - 'B2SData.RotatingPictureBox(romid).Visible = True - - End If - - End Sub - -#End Region - - -#Region "image cache stuff" - - Public ReadOnly Property DarkImage() As Image - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return DarkImage4Fantasy - Else - Return DarkImage4Authentic - End If - End Get - End Property - Public ReadOnly Property TopLightImage() As Image - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return TopLightImage4Fantasy - Else - Return TopLightImage4Authentic - End If - End Get - End Property - Public ReadOnly Property SecondLightImage() As Image - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return SecondLightImage4Fantasy - Else - Return SecondLightImage4Authentic - End If - End Get - End Property - Public ReadOnly Property TopAndSecondLightImage() As Image - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return TopAndSecondLightImage4Fantasy - Else - Return TopAndSecondLightImage4Authentic - End If - End Get - End Property - Public Property DarkImage4Authentic() As Image = Nothing - Public Property TopLightImage4Authentic() As Image = Nothing - Public Property SecondLightImage4Authentic() As Image = Nothing - Public Property TopAndSecondLightImage4Authentic() As Image = Nothing - Public Property DarkImage4Fantasy() As Image = Nothing - Public Property TopLightImage4Fantasy() As Image = Nothing - Public Property SecondLightImage4Fantasy() As Image = Nothing - Public Property TopAndSecondLightImage4Fantasy() As Image = Nothing - - Public ReadOnly Property TopRomID() As Integer - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return TopRomID4Fantasy - Else - Return TopRomID4Authentic - End If - End Get - End Property - Public ReadOnly Property TopRomIDType() As B2SBaseBox.eRomIDType - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return TopRomIDType4Fantasy - Else - Return TopRomIDType4Authentic - End If - End Get - End Property - Public ReadOnly Property TopRomInverted() As Boolean - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return TopRomInverted4Fantasy - Else - Return TopRomInverted4Authentic - End If - End Get - End Property - Public ReadOnly Property SecondRomID() As Integer - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return SecondRomID4Fantasy - Else - Return SecondRomID4Authentic - End If - End Get - End Property - Public ReadOnly Property SecondRomIDType() As B2SBaseBox.eRomIDType - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return SecondRomIDType4Fantasy - Else - Return SecondRomIDType4Authentic - End If - End Get - End Property - Public ReadOnly Property SecondRomInverted() As Boolean - Get - If B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy Then - Return SecondRomInverted4Fantasy - Else - Return SecondRomInverted4Authentic - End If - End Get - End Property - Public Property TopRomID4Authentic() As Integer = 0 - Public Property TopRomIDType4Authentic() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Property TopRomInverted4Authentic() As Boolean = False - Public Property SecondRomID4Authentic() As Integer = 0 - Public Property SecondRomIDType4Authentic() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Property SecondRomInverted4Authentic() As Boolean = False - Public Property TopRomID4Fantasy() As Integer = 0 - Public Property TopRomIDType4Fantasy() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Property TopRomInverted4Fantasy() As Boolean = False - Public Property SecondRomID4Fantasy() As Integer = 0 - Public Property SecondRomIDType4Fantasy() As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Public Property SecondRomInverted4Fantasy() As Boolean = False - -#End Region - - -#Region "more private methods" - - Private Sub CheckDMDForm() - If formDMD Is Nothing AndAlso Not B2SSettings.HideB2SDMD Then - formDMD = New formDMD() - End If - End Sub - - Private Function CreateLightImage(ByRef image As Image, - ByVal dualmode As B2SData.eDualMode, - Optional ByVal firstromkey As String = "", - Optional ByVal secondromkey As String = "", - Optional ByRef romid As Integer = 0, - Optional ByRef romidtype As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined, - Optional ByRef rominverted As Boolean = False) As Image - Dim firstromValue As Integer = 0 - - Dim secondromid As Integer = 0 - Dim secondromValue As Integer = 0 - Dim secondromidtype As B2SBaseBox.eRomIDType = B2SBaseBox.eRomIDType.NotDefined - Dim secondrominverted As Boolean = False - If firstromkey.Substring(0, 1) = "I" Then - rominverted = True - firstromkey = firstromkey.Substring(1) - End If - firstromValue = CInt(secondromkey.Split("|")(1)) - firstromkey = firstromkey.Split("|")(0) - - romidtype = If((firstromkey.Substring(0, 1) = "S"), B2SBaseBox.eRomIDType.Solenoid, If((firstromkey.Substring(0, 2) = "GI"), B2SBaseBox.eRomIDType.GIString, B2SBaseBox.eRomIDType.Lamp)) - romid = CInt(If((romidtype = B2SBaseBox.eRomIDType.GIString), firstromkey.Substring(2), firstromkey.Substring(1))) - - If Not String.IsNullOrEmpty(secondromkey) Then - secondromValue = CInt(secondromkey.Split("|")(1)) - secondromkey = secondromkey.Split("|")(0) - If secondromkey.Substring(0, 1) = "I" Then - secondrominverted = True - secondromkey = secondromkey.Substring(1) - End If - secondromidtype = If((secondromkey.Substring(0, 1) = "S"), B2SBaseBox.eRomIDType.Solenoid, If((secondromkey.Substring(0, 2) = "GI"), B2SBaseBox.eRomIDType.GIString, B2SBaseBox.eRomIDType.Lamp)) - secondromid = CInt(If((secondromidtype = B2SBaseBox.eRomIDType.GIString), secondromkey.Substring(2), secondromkey.Substring(1))) - End If - ' create image copy - Dim ret As Image = New Bitmap(image.Width, image.Height) - Using gr As Graphics = Graphics.FromImage(ret) - gr.InterpolationMode = Drawing2D.InterpolationMode.High - gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality - gr.DrawImage(image, New Rectangle(0, 0, ret.Width, ret.Height)) - End Using - ' draw matching bulbs into image - For Each picbox As B2SPictureBox In Me.Controls.OfType(Of B2SPictureBox)() - If picbox.RomID = romid AndAlso picbox.RomIDValue = firstromValue AndAlso picbox.RomIDType = romidtype AndAlso picbox.RomInverted = rominverted AndAlso (picbox.DualMode = B2SData.eDualMode.Both OrElse picbox.DualMode = dualmode) Then - Using gr As Graphics = Graphics.FromImage(ret) - gr.InterpolationMode = Drawing2D.InterpolationMode.High - gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality - gr.DrawImage(picbox.BackgroundImage, New Rectangle(picbox.Location.X, picbox.Location.Y, picbox.Size.Width, picbox.Size.Height)) - End Using - End If - Next - ' maybe draw second matching bulbs into image - If Not String.IsNullOrEmpty(secondromkey) Then - For Each picbox As B2SPictureBox In Me.Controls.OfType(Of B2SPictureBox)() - If picbox.RomID = secondromid AndAlso picbox.RomIDValue = secondromValue AndAlso picbox.RomIDType = secondromidtype AndAlso picbox.RomInverted = secondrominverted AndAlso (picbox.DualMode = B2SData.eDualMode.Both OrElse picbox.DualMode = dualmode) Then - Using gr As Graphics = Graphics.FromImage(ret) - gr.InterpolationMode = Drawing2D.InterpolationMode.High - gr.DrawImage(picbox.BackgroundImage, New Rectangle(picbox.Location.X, picbox.Location.Y, picbox.Size.Width, picbox.Size.Height)) - End Using - End If - Next - End If - ' that's it - Return ret - End Function - Private Sub CheckBulbs(ByVal romid As Integer, - ByVal romidtype As B2SBaseBox.eRomIDType, - ByVal rominverted As Boolean, - ByVal dualmode As B2SData.eDualMode) - If romid > 0 AndAlso romidtype <> B2SBaseBox.eRomIDType.NotDefined Then - Dim UsedRomIDs As Generic.SortedList(Of Integer, B2SBaseBox()) = Nothing - If romidtype = B2SBaseBox.eRomIDType.Lamp Then - UsedRomIDs = If(dualmode = B2SData.eDualMode.Fantasy, B2SData.UsedRomLampIDs4Fantasy, B2SData.UsedRomLampIDs4Authentic) - ElseIf romidtype = B2SBaseBox.eRomIDType.Solenoid Then - UsedRomIDs = If(dualmode = B2SData.eDualMode.Fantasy, B2SData.UsedRomSolenoidIDs4Fantasy, B2SData.UsedRomSolenoidIDs4Authentic) - ElseIf romidtype = B2SBaseBox.eRomIDType.GIString Then - UsedRomIDs = If(dualmode = B2SData.eDualMode.Fantasy, B2SData.UsedRomGIStringIDs4Fantasy, B2SData.UsedRomGIStringIDs4Authentic) - End If - If UsedRomIDs.ContainsKey(romid) Then - UsedRomIDs.Remove(romid) - For Each picbox As KeyValuePair(Of String, B2SPictureBox) In B2SData.Illuminations - With picbox.Value - If .RomID = romid AndAlso .RomIDType = romidtype AndAlso .RomInverted <> rominverted AndAlso (.DualMode = B2SData.eDualMode.Both OrElse .DualMode = dualmode) Then - B2SData.Illuminations.Add(picbox.Value, dualmode) - End If - End With - Next - End If - End If - End Sub - Public Function GetBoundingRectangle(image As Bitmap) As Rectangle - Dim rect As New Rectangle(0, 0, image.Width, image.Height) - Dim bmpData As Imaging.BitmapData = image.LockBits(rect, Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb) - - Dim stride As Integer = bmpData.Stride - Dim scan0 As IntPtr = bmpData.Scan0 - - Dim minX As Integer = image.Width - Dim minY As Integer = image.Height - Dim maxX As Integer = 0 - Dim maxY As Integer = 0 - - Dim foundNonTransparent As Boolean = False - - Dim pixels(image.Height * stride - 1) As Byte - System.Runtime.InteropServices.Marshal.Copy(scan0, pixels, 0, pixels.Length) - - For y As Integer = 0 To image.Height - 1 - For x As Integer = 0 To image.Width - 1 - Dim index As Integer = (y * stride) + (x * 4) ' 4 bytes per pixel (32bpp) - Dim alpha As Byte = pixels(index + 3) - - If alpha <> 0 Then - foundNonTransparent = True - If x < minX Then minX = x - If y < minY Then minY = y - If x > maxX Then maxX = x - If y > maxY Then maxY = y - End If - Next - Next - - image.UnlockBits(bmpData) - - If Not foundNonTransparent Then - ' No non-transparent pixels found - Return Rectangle.Empty - End If - - Return New Rectangle(minX, minY, maxX - minX + 1, maxY - minY + 1) - End Function - - Public Function CropImageToTransparency(image As Image, offimage As Image, ByRef loc As Point, ByRef size As Size) As Image - Dim bitmap As Bitmap = CType(image, Bitmap) - Dim boundingRect As Rectangle = GetBoundingRectangle(bitmap) - - If boundingRect = Rectangle.Empty Then - ' Return an empty image or the original image as needed - Return image - End If - - Dim croppedImage As New Bitmap(boundingRect.Width, boundingRect.Height) - - If offimage IsNot Nothing Then - Dim offbitmap As Bitmap = CType(offimage, Bitmap) - Dim offboundingRect As Rectangle = GetBoundingRectangle(offbitmap) - If offboundingRect = Rectangle.Empty Then - ' Return an empty image or the original image as needed - Return image - End If - ' Crop the image - boundingRect = Rectangle.Union(boundingRect, offboundingRect) - Using g As Graphics = Graphics.FromImage(croppedImage) - g.DrawImage(offbitmap, New Rectangle(0, 0, boundingRect.Width, boundingRect.Height), boundingRect, GraphicsUnit.Pixel) - End Using - offimage = offbitmap - End If - - Using g As Graphics = Graphics.FromImage(croppedImage) - g.DrawImage(bitmap, New Rectangle(0, 0, boundingRect.Width, boundingRect.Height), boundingRect, GraphicsUnit.Pixel) - End Using - - ' Update loc and size based on the new dimensions - Dim sizeOrg As Size = size - size = New Size(CInt(size.Width * (boundingRect.Width / image.Width)), CInt(size.Height * (boundingRect.Height / image.Height))) - loc = New Point(loc.X + boundingRect.X, loc.Y + boundingRect.Y) - - Return croppedImage - End Function - Private Function ImageToBase64(image As Image) As String - If image IsNot Nothing Then - With New System.Drawing.ImageConverter - Dim bytes() As Byte = CType(.ConvertTo(image, GetType(Byte())), Byte()) - Return Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks) - End With - Else - Return String.Empty - End If - End Function - Private Function Base64ToImage(data As String) As Image - Dim image As Image = Nothing - If data.Length > 0 Then - Dim bytes() As Byte = Convert.FromBase64String(data) - If bytes IsNot Nothing AndAlso bytes.Length > 0 Then - With New System.Drawing.ImageConverter - image = CType(.ConvertFrom(bytes), Image) - End With - End If - End If - Return image - End Function - - Public Function WavToBase64(stream As IO.Stream) As String - If stream IsNot Nothing Then - Dim bytes() As Byte - ReDim bytes(stream.Length - 1) - Using reader As IO.BinaryReader = New IO.BinaryReader(stream) - Dim length As Integer = reader.Read(bytes, 0, stream.Length) - End Using - Return Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks) - Else - Return String.Empty - End If - End Function - Public Function Base64ToWav(data As String) As IO.Stream - If data.Length > 0 Then - Dim bytes() As Byte = Convert.FromBase64String(data) - Return New IO.MemoryStream(bytes) - Else - Return Nothing - End If - End Function - - Private Function Color2String(ByVal color As Color) As String - Return color.R.ToString() & "." & color.G.ToString() & "." & color.B.ToString() - End Function - Private Function String2Color(ByVal color As String) As Color - Dim colorvalues As String() = color.Split(".") - Return Drawing.Color.FromArgb(CInt(colorvalues(0)), CInt(colorvalues(1)), CInt(colorvalues(2))) - End Function - - Private Sub SetFocusToVPPlayer() - - ' set focus to the VP player - Dim proc As Processes = New Processes() - SetForegroundWindow(proc.TableHandle) - tableHandle = proc.TableHandle - - End Sub - - Private Function RandomStarter(ByVal top As Integer) As Integer - - Static lastone As Integer = -1 - Dim ret As Integer = -1 - Do Until ret >= 0 AndAlso ret < top AndAlso ret <> lastone - Dim random As Random = New Random(Date.Now.Millisecond) - ret = CInt(Math.Truncate(random.NextDouble() * top)) - Loop - lastone = ret - Return ret - - End Function - -#End Region - - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.Designer.vb deleted file mode 100644 index e3b596a..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.Designer.vb +++ /dev/null @@ -1,42 +0,0 @@ - _ -Partial Class formDMD - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ - 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 - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(formDMD)) - Me.SuspendLayout() - ' - 'formDMD - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(435, 251) - Me.ControlBox = False - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "formDMD" - Me.Text = "formDMD" - Me.ResumeLayout(False) - - End Sub -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.resx deleted file mode 100644 index 6a23e00..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.resx +++ /dev/null @@ -1,1734 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzs5gG9ubgOinaELHVS - bz15XXQ8m5OWGLWzsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC0q645l2mRt4U1f/5+J3v/eyp4/4FLgfKfip5+u7S3GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9r7capHabrqE8mf+gPJn/nkCY/59Hm/+fTpz/oWWk+6ucqnDp6OMCAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAua+zP6NRnPinQ6H/pUKd/6RHnP+lUJ//qFmk/61s - rv+si67Ev7a/GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSZn2elVaP/oUef/55G - m/+cSZj/nk+Z/59VnP+maKb/p4Wr4rOpszIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC6tLY5m2ef95teof+aX57/mV+c/5Vbmf+WXJv/m2ig/6OLp8G+t74aAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAuLG2G56Go7eac6T/m3ek/5h0oP+TbZz/j2mZ/5Z0n/6mnad36+rlAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsp6xTlX+g95N7n/+Pd5r/h3CU/4Zw - lf+WiJ3HvLq8JgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAure5FZWP - n6p5cZL/dG2O/2hihP9ubIv+paSnY+zs5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKmrrQ6gpqceztTRCuzs5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Jf8JKDH/CSw4/wouOv8LKzf/DCg0/wsvQv8FOlX/AVFy/wFWf/8Beq//AYCt/wF0of8BZ5n/CEBb/xI5 - Sv8fLTD/KzQ3/ys9Qv8jQEr/F0JV/wo+VP8ENUv/eX+DiszNyQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC6urYYSkxL4ggQGP8IEh7/CBIe/wgVI/8KHS7/CyIv/wskMf8LIiz/CRIW/wkR - FP8HDA//BwwP/wkVGP8KHyX/CyYu/wsoMv8MKDP/DCYv/wwjK/8MKDf/Ci5E/wYxSv8BRWH/AlFs/wNX - gf8DY5D/BlB7/wkrOP8PIST/EiEj/xYjJv8aJyr/Gyov/yE1RP8jOVH/ECw+/2lubpiVmJURAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuLi0GzI0OPoIFyb/BC5A/wYXLf8IGC7/DCI2/wwi - M/8MITD/DB8s/woXH/8JERb/BgsO/wYLDv8IEhX/Chsh/wsdJP8LHSX/DB0l/wwcI/8LGyL/Cxsj/wwd - Kf8KIDD/CSIy/wVDZv8EOVf/CiUz/wwgKv8MHiT/DB0i/w0bHv8PHB7/EB0g/w8dIP8QHyP/ER8n/w4Z - IP9XWVi24uLdBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqamDMaISr+ByEs/wM1 - RP8GFiv/CRgt/w0gMP8MHi7/DB8x/wwgMf8MHCv/CRAW/wYKDv8HCw7/CBAT/woYH/8LGyP/Cxol/wwa - Jf8MGiP/DBkg/wwYIv8LGSX/Choo/wocLP8LHS7/DCEy/wsiMP8MICr/DR8n/wwdI/8MHCD/DRwe/w0c - Hv8KGhz/CBkc/wgbIP8IGiD/UlRTzuzs5gIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB8fnxQCxki/wgjK/8FLjj/BhYq/woXLf8NGyv/DBws/w0eMP8NHS7/DBcj/wkNEv8HCw//BwoO/wgO - Ev8KFBr/CxYe/w0YIP8NGCD/DRcg/wwXHv8MFh7/DBYf/wwXIf8LGCT/DBop/wsbKv8LGyb/Chsj/wsb - Iv8LHCL/Cx0i/wwfJP8MHyL/Chse/wcaHf8GHCD/BCEr/0FHS+zl5d8FAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAbW9uZQkXIf8JIyn/CCkv/wgXKP8LFin/DRkp/w0YJv8NGir/DRgo/w0V - H/8LEBX/BwsP/wcLDv8KEBT/ChMX/wsVGv8NFhz/DRce/w0WHf8NFhz/DRQa/w0VGv8MFRz/DBYe/w0Y - If8NGSL/DBok/wsZIv8LGiH/Cxsh/wweJf8MISr/CyUu/wojLf8HGRz/Bhoe/wQgK/8yPkf6rK2qEQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBjYnIIGSH/CiIn/wkjKv8IFiX/CxUm/w0X - Jv8NFiT/Dhkl/w4ZJf8NFB7/CxEW/wgMD/8IDA//DBMW/wsTFv8LExf/CxMY/wwTGf8MExj/DBMX/wwT - Fv8NExf/DBQY/w0VG/8NFx3/DRgf/w0YH/8NGB7/DBkf/w0ZIP8NGyP/DR8o/wwiLv8LISv/CBYZ/wga - Hv8FHyv/MT5K/W9ydBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5e3pVER8l/wof - JP8KHyb/CRUj/yUpMf1RU1XSV1lasFdZWsAzNjv4DBQc/wsRFv8IDA//BwsO/wsRFf8LExb/CxIV/wsR - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vBWBW3RxbUtIqYVjfH3N2kHw/S1f/MkFG/yg1 - OP8jMDL/ICss/xwjKP8TFx3/DRAU/woOD/8KDA3/CQsM/wkLDP8ICgv/CAsM/wgLDv8JDA//CgwP/woM - Dv8KCw//CwsP/w0NEP8MDRH/DQ4R/w0PEv8NEBL/DxIT/w8UFf8PFRf/DxYZ/xAYGv8PGh3/DRgb/w0V - GP8NFRn/Dhkh/xAcLP8VIjf/OD9Q+qSizRhnXu8IZ17vBmdd7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ13vA1NJvjYpGUqnIQ4szicX - RL1MR2zJTU5y/01ReP9AR3L/Nj1q/y4zW/8oLE3/ISQ//xYZLf8OEBv/CwwQ/wkMDf8JCw3/CQsM/wkL - DP8KDA3/CQwN/wsLDv8MCw7/DAsP/wsLEP8NDBD/DQ0Q/w0OEf8ODxP/DhAT/w4RFP8PExT/EBQW/w8V - GP8PFxr/Dhkd/w4XG/8QFyX/Gx9B/ycpX/8sLmn/LC1m/z48avdFPYSGOzCBfkI4lGVVSsE8ZVroF2dc - 7wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1zvAWdd - 7ws+M4htHAUL6xwFC/0cBQv9HwwQ/SMVF/8oHh3/KSEk/ysmNP8pJEf/LCVU/y4pX/8uKmX/LCll/yUk - WP8XFzb/DhAb/wwMD/8LCw3/CwwN/wwMEv8QDx7/EBAh/xEQIv8RECL/EhEk/xUULP8WFjD/FhYx/xgZ - N/8bHED/HB1B/x8gSP8fIkr/Fxwz/xEbJ/8eIUj/LCpm/yomXf8hGDn/GwsU/xwID/8fDBH+HAYM+BwF - C/YcBQvwHggY2TAiYaFRRrlIZlzvDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZVrqDFRJwDBQRbZBVErAbCgZSdgcBQv8HAUL/xwFC/8cBQv/HAYM/x0GDP8cBwz/HAcM/xwG - DP8cBgz/HAcN/x0MHf8kGUL/LCZf/ysoY/8aGTv/Dw4X/w8PG/8hIE3/Kidh/ywpZv8sKGP/Kydf/yol - XP8sJ2D/LShj/yslXf8qI1f/KyNa/yghVP8mHUr/Jh5K/y0rZv8uL23/KyZd/x0OI/8cBg3/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/4cBQv3IQ8vzko/qFxmW+4LAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZlvvB0c8oVQiGjPHIzBF3yMcOtslFTvrHAUL/RwFC/8cBQv/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwGDP8gEzH/Lill/yMhUv8gH0v/KCJV/xsH - E/8bBQv/GwUL/xsFC/8bBQv/GwUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8eDyT/KiFU/xsH - Dv8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/okEjrDWEzKOGZb - 7wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZb7gw5LHp7Llh371Cv6/5NquP+RZbJ/jt8 - p/8wX4D/KERd/yAkNP8dDxn/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xsH - D/8rJVz/NDJ5/yEVN/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwF - C/8cBQv/HAUL/xwGDP8gIjH/LVVz/zh0nf8+hLH/QIq5/z2Cr/81bZP/JTlQ/xwGDP8cBQv/HAUL/xwF - C/8cBQv+HAUL8TsugYBmW+8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8DU0i+Oikc - TbMrT2zxSqTb/1O59/9Tuff/U7j2/1K28/9Qse3/TKjh/0eb0P9Aibj/NWyR/yhEXf8dDxn/HAUL/xwF - C/8cBQv/HAUL/xwFC/8cBQv/HAgW/zIrav8oHEj/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwG - DP8cCBD/HAcP/xwFC/8cBQv/HAUL/yhDXf9Aibj/T67o/1K29P9QsOv/Tarj/1G18v9Tuff/U7n3/1Cy - 7v89ga7/Hhkm/xwFC/8cBQv/HAUL/xwFC/spGUq0YlfkIGZb7wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - /+AH////////4Af////////gB////////+AH////////4Af////////wD/////////AP//////h/8B/+ - P///+AHwD4Af///4AAAAAB////gAAAAAH///8AAAAAAf///wAAAAAB////AAAAAAD///8AAAAAAP///w - AAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////AAAAAA - D///8DgAADwf///8/AAAfz/////+AAB///////4AAH/////8/AAAfz////A4AAA8H///8AAAAAAP///w - AAAAAA///9AAAAAAD///AAAAAAAB//4AAAAAAAB//AAAAAAAAD/4AAAAAAAAH/AAAAAAAAAP8AAAAAAA - AA/wAAAAAAAAB/gAAAAAAAAH+AAAAAAAAAf4AAAAAAAAB/gAAAAAAAAP+AAAAAAAAA/4AAAAAAAAD/gA - AAAAAAAH8AAAAAAAAAPwAAAgAAAAA/AAAAAAAAAD8AAAAAAAAAHwAAAAAAAAAeAAAAAAAAADgAAAAAAA - AAOAAAAAAAAABwAAAAAAAAAfgAAAgAAAAB+AAAHAAOAAP+AAA+AA+AD//4AP+AP/D///////D////ygA - AAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsnKY+j1eIvn41eux7PHnpkG6Qm7exsx0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC0uhijYZvPoz2c/6BAmf+hSpz/olqi/6iK - qp/Ryc8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKugpUOlT6D+o0Se/6FG - mv+jUJz/p2Cl/6uBruG2rLUfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOs - rzGdYaH6m1qf/5lbm/+XWJn/mmCe/6OCp9a7s7wXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALmxtw+dhKS+mnek/5d2oP+QbZr/kXCb/6OTpojr6uUBAAAAAAAAAAAAAAAAAAAAAAAA - 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 - QP8vep3/CkZf/wsPE/8KDA//Cw0Q/wwPEf8NERP/DhMV/w8VF/8iJif7ZWZkoo2OilGNjotUaGlnmjI1 - NvINGiT/NDk+7peYlSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSWVmWJjU2/yEuL/8gLzD/GiIp/xkcIP8QExb/CQ0P/wkM - Df8ICwz/CAsN/y5GXv8kSWP/Cw8T/woMEP8KDA//CwwQ/wwOEf8NEBL/DhIT/w8VFv8PFhj/EBca/xce - If8WHiH/DRMX/w0XHP8NGiP/Dh4o/2VoaE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdUtURRz2gQUtBqj1iZoalQEtd/y07Rf8kMDb/ICgt/xcb - I/8NEBX/Cg0O/wkLDP8JCwz/CAoM/wgLDv8JDA7/CgwO/woLD/8LCw//DA0Q/w0OEf8NDxL/DhET/w8T - FP8PFRf/DxcZ/w8aHP8NFxr/DRUa/xAaJ/8XIT3/ICpP/25um1ZiWeMVZVzrC2dd7wIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdd7wU5LXtxHAUO6RwGEOszKzrwPjxV/zw9 - Xv80Nl//Ly9f/y0sX/8mJVb/Gho+/w8QH/8LDRD/CgsN/wsMDf8LDA//DQwT/w0ME/8NDRT/Dg4W/w8P - Gv8QEBv/ERMg/xIVIv8TFyj/Ehgl/w8ZH/8VGzL/JSZY/yknW/8nI1H/JR5D/y8kRNYmFkLGLiFdpEA1 - j15gVd4WZ1zvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnXO8BXFHUFlFGuDJFO5yDHgkc8hwF - C/8cBQv/HQcN/x0JDv8eCw//HQkP/x0KFP8gESz/Jh1J/ykkWv8kIlP/EhEj/w4NF/8fHkn/JyRa/ygl - W/8mI1b/JyNW/yklXP8nI1f/KSNY/ygjV/8nIVL/KCVY/yorY/8pJVn/HxIt/xwHDv8cBQz/HAUL/xwF - C/8cBQv/HAUL/RwGD/EuIF2mWU7OIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhVuESLSZboDJi - huUtSm3lIR4z+BwGDP8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFDP8hFDb/KiZf/yMh - Uv8kG0X/GwYM/xsFC/8bBQv/GwUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAcO/yYbRf8cBg3/HAYN/x0Q - G/8eGCX/HQwU/xwFC/8cBQv/HAUL/xwFC/8cBQz3NShxjGRZ6wsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABiVuISLSdcpT+GtPdRs+//T67o/0id0v9BjLz/O3um/zNnjP8pSWT/HyEv/xwGDP8cBQv/HAUL/xwF - C/8cBQv/HQsf/zUwdv8lGED/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAUL/xwFC/8cBQv/HAkR/ylI - Y/89g6//SJ3T/02p4v9Prej/TKff/0GNvf8nQVr/HAUL/xwFC/8cBQv+IQ0s1ldLyCoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmXO8BWE3KJTImaaxCj7/9U7n3/1O59/9Tuff/U7n2/1G18f9StvP/T67o/0OS - w/8sU3H/HAcP/xwFC/8cBQv/ISg6/zFgg/8zZ4v/NGuR/zVtk/84dJz/O32p/z2Cr/9Ai7v/QYy8/yMy - Rv8fHy7/QIm4/1G18f9NqeH/Nm+W/yxPbf89f6v/Urb0/1O59/9Oruj/KEZh/xwFC/8cBQv/HAUO70Y6 - nk9mW+8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlzuCTQnbZVFlcj8U7n3/1O59/9Tuff/P4a0/x4b - KP8yZIj/ULLu/1O59/9St/T/P4a0/x4WIf8cBQv/K1Bu/1Cx7f9Tuff/U7n3/1O59/9Tuff/U7n3/1O5 - 9/9Tuff/U7n3/zdymv83cZn/U7n3/06s5v8lOVD/HQkP/1RPgf9kXHX/SJfK/1O59/9Tuff/RJXH/xwG - Df8cBQv/HAUL8kE1k1hmW+8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZFjnFCsjU7lNqeL+U7n3/1O5 - 9/9St/T/Kk1p/xwFC/8cBQz/P4e1/1O59/9Tuff/U7j2/zl2oP8cBQv/HAUL/yxUcv9Pruj/U7n3/1Cy - 7v9OrOb/TKjg/0um3v9OrOX/Urf0/0mf1f86eaT/U7n3/zh1nf8dBw3/Myow/5aQp/+Ohpv/R5DA/1O5 - 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 - - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.vb deleted file mode 100644 index 32750d4..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formDMD.vb +++ /dev/null @@ -1,80 +0,0 @@ -Imports System -Imports System.Windows.Forms - -Public Class formDMD - Private Const MA_NOACTIVATE As System.Int32 = 3 - Private Const WM_MOUSEACTIVATE As Integer = &H21 -#Region " Properties " - - - Protected Overrides Sub WndProc(ByRef m As Message) - 'Don't allow the window to be activated by swallowing the mouse event. - If B2SSettings.FormNoFocus And m.Msg = WM_MOUSEACTIVATE Then - m.Result = New IntPtr(MA_NOACTIVATE) - Return - End If - MyBase.WndProc(m) - End Sub -#End Region 'Properties - -#Region "constructor" - - Public Sub New() - - InitializeComponent() - - ' set some styles - 'Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True) - Me.DoubleBuffered = True - - End Sub - -#End Region - -#Region "painting" - - Private Sub formDMD_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint - - If B2SData.DMDIlluminations.Count > 0 Then - - If Not B2SData.UseDMDZOrder Then - - ' draw all standard images - For Each illu As KeyValuePair(Of String, B2SPictureBox) In B2SData.DMDIlluminations - If illu.Value.Visible Then - e.Graphics.DrawImage(illu.Value.BackgroundImage, illu.Value.RectangleF) - End If - Next - - Else - - ' first of all draw zorderd images - For Each illus As KeyValuePair(Of Integer, B2SPictureBox()) In B2SData.ZOrderDMDImages - For Each illu As B2SPictureBox In illus.Value - If illu.Visible Then - e.Graphics.DrawImage(illu.BackgroundImage, illu.RectangleF) - End If - Next - Next - ' now draw all standard images - For Each illu As KeyValuePair(Of String, B2SPictureBox) In B2SData.DMDIlluminations - If illu.Value.Visible AndAlso illu.Value.ZOrder = 0 Then - e.Graphics.DrawImage(illu.Value.BackgroundImage, illu.Value.RectangleF) - End If - Next - - End If - - End If - - End Sub - - Private Sub formDMD_MouseClick(sender As Object, e As MouseEventArgs) Handles MyBase.MouseClick - If e.Button = Windows.Forms.MouseButtons.Right Then - formBackglass.formBackglass_MouseClick(sender, e) - End If - End Sub - -#End Region - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.Designer.vb deleted file mode 100644 index b5877e8..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.Designer.vb +++ /dev/null @@ -1,67 +0,0 @@ - _ -Partial Class formMode - 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.components = New System.ComponentModel.Container() - Me.lblInfo = New System.Windows.Forms.Label() - Me.TimerOpacity = New System.Windows.Forms.Timer(Me.components) - Me.TimerShutDown = New System.Windows.Forms.Timer(Me.components) - Me.SuspendLayout() - ' - 'lblInfo - ' - Me.lblInfo.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblInfo.Location = New System.Drawing.Point(12, 20) - Me.lblInfo.Name = "lblInfo" - Me.lblInfo.Size = New System.Drawing.Size(338, 20) - Me.lblInfo.TabIndex = 0 - Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'TimerOpacity - ' - ' - 'TimerShutDown - ' - ' - 'formMode - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(362, 62) - Me.Controls.Add(Me.lblInfo) - Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "formMode" - Me.Opacity = 0R - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen - Me.Text = "Backglass dual mode ..." - Me.TopMost = True - Me.ResumeLayout(False) - - End Sub - Friend WithEvents lblInfo As System.Windows.Forms.Label - Friend WithEvents TimerOpacity As System.Windows.Forms.Timer - Friend WithEvents TimerShutDown As System.Windows.Forms.Timer -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.resx deleted file mode 100644 index fd60bcb..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 141, 17 - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.vb deleted file mode 100644 index 9a6a911..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formMode.vb +++ /dev/null @@ -1,56 +0,0 @@ -Imports System - -Public Class formMode - - Private Const stayInSeconds As Integer = 3 - - Private fadeIn As Boolean = True - Private Const fadeStep As Single = 0.02 - Private shutDownCounter As Integer = 0 - - Private Sub formMode_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load - - ' set info label - lblInfo.Text = "Backglass mode is set to '" & If(B2SSettings.CurrentDualMode = B2SSettings.eDualMode.Fantasy, "FANTASY", "AUTHENTIC") & "'." - - ' set and start timers - TimerShutDown.Interval = 1000 - TimerOpacity.Interval = 10 - TimerOpacity.Start() - - End Sub - - Private Sub TimerOpacity_Tick(sender As System.Object, e As System.EventArgs) Handles TimerOpacity.Tick - - If fadeIn Then - Me.Opacity += fadeStep - If Me.Opacity >= 1 Then - TimerOpacity.Stop() - TimerShutDown.Start() - fadeIn = False - End If - Else - Me.Opacity -= fadeStep - If Me.Opacity <= 0 Then - TimerOpacity.Stop() - Try - Me.Close() - Me.Dispose() - Catch - End Try - End If - End If - - End Sub - - Private Sub TimerShutDown_Tick(sender As System.Object, e As System.EventArgs) Handles TimerShutDown.Tick - - shutDownCounter += 1 - If shutDownCounter >= stayInSeconds Then - TimerShutDown.Stop() - TimerOpacity.Start() - End If - - End Sub - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.Designer.vb deleted file mode 100644 index d00fe4b..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.Designer.vb +++ /dev/null @@ -1,901 +0,0 @@ - _ -Partial Class formSettings - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ - 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 - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ - Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(formSettings)) - Me.TimerOpacity = New System.Windows.Forms.Timer(Me.components) - Me.PanelSettings = New System.Windows.Forms.Panel() - Me.lowerPanel = New System.Windows.Forms.Panel() - Me.btnCloseSettings = New System.Windows.Forms.Button() - Me.btnSaveSettings = New System.Windows.Forms.Button() - Me.lblNonAvailableSettings = New System.Windows.Forms.Label() - Me.btnEditScreenRes = New System.Windows.Forms.Button() - Me.btnMore = New System.Windows.Forms.Button() - Me.headerPanel = New System.Windows.Forms.Panel() - Me.lblVersion = New System.Windows.Forms.Label() - Me.B2SLogo = New System.Windows.Forms.PictureBox() - Me.lblCopyright = New System.Windows.Forms.Label() - Me.grpPlugins = New System.Windows.Forms.GroupBox() - Me.chkShowStartupError = New System.Windows.Forms.CheckBox() - Me.chkActivatePlugins = New System.Windows.Forms.CheckBox() - Me.btnPluginSettings = New System.Windows.Forms.Button() - Me.grpStartMode = New System.Windows.Forms.GroupBox() - Me.chkDisableFuzzyMatching = New System.Windows.Forms.CheckBox() - Me.lblDefaultStartMode = New System.Windows.Forms.Label() - Me.chkStartAsEXE = New System.Windows.Forms.CheckBox() - Me.cmbDefaultStartMode = New System.Windows.Forms.ComboBox() - Me.grpGeneral = New System.Windows.Forms.GroupBox() - Me.btnHyperpin = New System.Windows.Forms.Button() - Me.lblFile = New System.Windows.Forms.Label() - Me.cmbMode = New System.Windows.Forms.ComboBox() - Me.lblMode = New System.Windows.Forms.Label() - Me.cmbMatchingFileNames = New System.Windows.Forms.ComboBox() - Me.btnCheck = New System.Windows.Forms.Button() - Me.grpAnimationSettings = New System.Windows.Forms.GroupBox() - Me.cmbAnimationSetting = New System.Windows.Forms.ComboBox() - Me.cmbAnimations = New System.Windows.Forms.ComboBox() - Me.grpScreenshot = New System.Windows.Forms.GroupBox() - Me.lblFileType = New System.Windows.Forms.Label() - Me.cmbScreenshotType = New System.Windows.Forms.ComboBox() - Me.btnScreenshotPath = New System.Windows.Forms.Button() - Me.grpVisibility = New System.Windows.Forms.GroupBox() - Me.cmbB2SBackglass = New System.Windows.Forms.ComboBox() - Me.lblB2SBackglass = New System.Windows.Forms.Label() - Me.chkFormNoFocus = New System.Windows.Forms.CheckBox() - Me.lblBackground = New System.Windows.Forms.Label() - Me.lblFormFront = New System.Windows.Forms.Label() - Me.cmbFormFront = New System.Windows.Forms.ComboBox() - Me.cmbBackground = New System.Windows.Forms.ComboBox() - Me.cmbB2SDMD = New System.Windows.Forms.ComboBox() - Me.lblB2SDMD = New System.Windows.Forms.Label() - Me.cmbDMD = New System.Windows.Forms.ComboBox() - Me.lblDMD = New System.Windows.Forms.Label() - Me.cmbGrill = New System.Windows.Forms.ComboBox() - Me.lblGrill = New System.Windows.Forms.Label() - Me.grpLEDs = New System.Windows.Forms.GroupBox() - Me.lblGlowing = New System.Windows.Forms.Label() - Me.radioStandardLED = New System.Windows.Forms.RadioButton() - Me.cmbGlowing = New System.Windows.Forms.ComboBox() - Me.radioDream7LED = New System.Windows.Forms.RadioButton() - Me.chkWireframe = New System.Windows.Forms.CheckBox() - Me.chkBulbs = New System.Windows.Forms.CheckBox() - Me.grpPerfTuning = New System.Windows.Forms.GroupBox() - Me.numLampsSkipFrames = New System.Windows.Forms.NumericUpDown() - Me.lblLampsBlackTurns = New System.Windows.Forms.Label() - Me.lblLEDBlackTurns = New System.Windows.Forms.Label() - Me.numSolenoidsSkipFrames = New System.Windows.Forms.NumericUpDown() - Me.numLEDSkipFrames = New System.Windows.Forms.NumericUpDown() - Me.lblSolenoidBlackTurns = New System.Windows.Forms.Label() - Me.numGISkipFrames = New System.Windows.Forms.NumericUpDown() - Me.lblGIBlackTurns = New System.Windows.Forms.Label() - Me.B2SLogoToolTip = New System.Windows.Forms.ToolTip(Me.components) - Me.PanelSettings.SuspendLayout() - Me.lowerPanel.SuspendLayout() - Me.headerPanel.SuspendLayout() - CType(Me.B2SLogo, System.ComponentModel.ISupportInitialize).BeginInit() - Me.grpPlugins.SuspendLayout() - Me.grpStartMode.SuspendLayout() - Me.grpGeneral.SuspendLayout() - Me.grpAnimationSettings.SuspendLayout() - Me.grpScreenshot.SuspendLayout() - Me.grpVisibility.SuspendLayout() - Me.grpLEDs.SuspendLayout() - Me.grpPerfTuning.SuspendLayout() - CType(Me.numLampsSkipFrames, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.numSolenoidsSkipFrames, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.numLEDSkipFrames, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.numGISkipFrames, System.ComponentModel.ISupportInitialize).BeginInit() - Me.SuspendLayout() - ' - 'TimerOpacity - ' - ' - 'PanelSettings - ' - Me.PanelSettings.Controls.Add(Me.lowerPanel) - Me.PanelSettings.Controls.Add(Me.headerPanel) - Me.PanelSettings.Controls.Add(Me.grpPlugins) - Me.PanelSettings.Controls.Add(Me.grpStartMode) - Me.PanelSettings.Controls.Add(Me.grpGeneral) - Me.PanelSettings.Controls.Add(Me.grpAnimationSettings) - Me.PanelSettings.Controls.Add(Me.grpScreenshot) - Me.PanelSettings.Controls.Add(Me.grpVisibility) - Me.PanelSettings.Controls.Add(Me.grpLEDs) - Me.PanelSettings.Controls.Add(Me.grpPerfTuning) - Me.PanelSettings.Dock = System.Windows.Forms.DockStyle.Fill - Me.PanelSettings.Location = New System.Drawing.Point(0, 0) - Me.PanelSettings.Margin = New System.Windows.Forms.Padding(6) - Me.PanelSettings.Name = "PanelSettings" - Me.PanelSettings.Size = New System.Drawing.Size(536, 693) - Me.PanelSettings.TabIndex = 2 - ' - 'lowerPanel - ' - Me.lowerPanel.Controls.Add(Me.btnCloseSettings) - Me.lowerPanel.Controls.Add(Me.btnSaveSettings) - Me.lowerPanel.Controls.Add(Me.lblNonAvailableSettings) - Me.lowerPanel.Controls.Add(Me.btnEditScreenRes) - Me.lowerPanel.Controls.Add(Me.btnMore) - Me.lowerPanel.Dock = System.Windows.Forms.DockStyle.Bottom - Me.lowerPanel.Location = New System.Drawing.Point(0, 620) - Me.lowerPanel.Name = "lowerPanel" - Me.lowerPanel.Size = New System.Drawing.Size(536, 73) - Me.lowerPanel.TabIndex = 42 - ' - 'btnCloseSettings - ' - Me.btnCloseSettings.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnCloseSettings.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.btnCloseSettings.Location = New System.Drawing.Point(446, 37) - Me.btnCloseSettings.Name = "btnCloseSettings" - Me.btnCloseSettings.Size = New System.Drawing.Size(78, 24) - Me.btnCloseSettings.TabIndex = 35 - Me.btnCloseSettings.Text = "Close" - Me.btnCloseSettings.UseVisualStyleBackColor = True - ' - 'btnSaveSettings - ' - Me.btnSaveSettings.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnSaveSettings.Location = New System.Drawing.Point(312, 37) - Me.btnSaveSettings.Name = "btnSaveSettings" - Me.btnSaveSettings.Size = New System.Drawing.Size(128, 24) - Me.btnSaveSettings.TabIndex = 34 - Me.btnSaveSettings.Text = "Save settings" - Me.btnSaveSettings.UseVisualStyleBackColor = True - ' - 'lblNonAvailableSettings - ' - Me.lblNonAvailableSettings.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblNonAvailableSettings.Location = New System.Drawing.Point(229, 16) - Me.lblNonAvailableSettings.Name = "lblNonAvailableSettings" - Me.lblNonAvailableSettings.Size = New System.Drawing.Size(295, 13) - Me.lblNonAvailableSettings.TabIndex = 40 - Me.lblNonAvailableSettings.Text = "* all settings in Italic is only available when run in EXE mode!" - ' - 'btnEditScreenRes - ' - Me.btnEditScreenRes.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnEditScreenRes.Location = New System.Drawing.Point(91, 37) - Me.btnEditScreenRes.Name = "btnEditScreenRes" - Me.btnEditScreenRes.Size = New System.Drawing.Size(99, 24) - Me.btnEditScreenRes.TabIndex = 39 - Me.btnEditScreenRes.Text = "Edit ScreenRes..." - Me.btnEditScreenRes.UseVisualStyleBackColor = True - ' - 'btnMore - ' - Me.btnMore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnMore.Location = New System.Drawing.Point(12, 37) - Me.btnMore.Name = "btnMore" - Me.btnMore.Size = New System.Drawing.Size(73, 24) - Me.btnMore.TabIndex = 32 - Me.btnMore.Text = "More ..." - Me.btnMore.UseVisualStyleBackColor = True - ' - 'headerPanel - ' - Me.headerPanel.Controls.Add(Me.lblVersion) - Me.headerPanel.Controls.Add(Me.B2SLogo) - Me.headerPanel.Controls.Add(Me.lblCopyright) - Me.headerPanel.Dock = System.Windows.Forms.DockStyle.Top - Me.headerPanel.Location = New System.Drawing.Point(0, 0) - Me.headerPanel.Name = "headerPanel" - Me.headerPanel.Size = New System.Drawing.Size(536, 58) - Me.headerPanel.TabIndex = 41 - ' - 'lblVersion - ' - Me.lblVersion.AutoSize = True - Me.lblVersion.Location = New System.Drawing.Point(70, 35) - Me.lblVersion.Name = "lblVersion" - Me.lblVersion.Size = New System.Drawing.Size(217, 13) - Me.lblVersion.TabIndex = 38 - Me.lblVersion.Text = "Server version {0}, Backglass file version {1}" - ' - 'B2SLogo - ' - Me.B2SLogo.Image = CType(resources.GetObject("B2SLogo.Image"), System.Drawing.Image) - Me.B2SLogo.Location = New System.Drawing.Point(6, 0) - Me.B2SLogo.Name = "B2SLogo" - Me.B2SLogo.Size = New System.Drawing.Size(58, 48) - Me.B2SLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.B2SLogo.TabIndex = 2 - Me.B2SLogo.TabStop = False - ' - 'lblCopyright - ' - Me.lblCopyright.AutoSize = True - Me.lblCopyright.Location = New System.Drawing.Point(70, 2) - Me.lblCopyright.Name = "lblCopyright" - Me.lblCopyright.Size = New System.Drawing.Size(229, 26) - Me.lblCopyright.TabIndex = 23 - Me.lblCopyright.Text = "{0}" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "{1} by Herweh && B2S Team. All rights reserved." - ' - 'grpPlugins - ' - Me.grpPlugins.Anchor = System.Windows.Forms.AnchorStyles.None - Me.grpPlugins.AutoSize = True - Me.grpPlugins.Controls.Add(Me.chkShowStartupError) - Me.grpPlugins.Controls.Add(Me.chkActivatePlugins) - Me.grpPlugins.Controls.Add(Me.btnPluginSettings) - Me.grpPlugins.Location = New System.Drawing.Point(12, 533) - Me.grpPlugins.Name = "grpPlugins" - Me.grpPlugins.Size = New System.Drawing.Size(515, 75) - Me.grpPlugins.TabIndex = 37 - Me.grpPlugins.TabStop = False - Me.grpPlugins.Text = "Plugins" - ' - 'chkShowStartupError - ' - Me.chkShowStartupError.AutoSize = True - Me.chkShowStartupError.Location = New System.Drawing.Point(148, 30) - Me.chkShowStartupError.Name = "chkShowStartupError" - Me.chkShowStartupError.Size = New System.Drawing.Size(181, 17) - Me.chkShowStartupError.TabIndex = 21 - Me.chkShowStartupError.Text = "Error message without backglass" - Me.chkShowStartupError.UseVisualStyleBackColor = True - ' - 'chkActivatePlugins - ' - Me.chkActivatePlugins.AutoSize = True - Me.chkActivatePlugins.Location = New System.Drawing.Point(6, 30) - Me.chkActivatePlugins.Name = "chkActivatePlugins" - Me.chkActivatePlugins.Size = New System.Drawing.Size(101, 17) - Me.chkActivatePlugins.TabIndex = 20 - Me.chkActivatePlugins.Text = "Activate plugins" - Me.chkActivatePlugins.UseVisualStyleBackColor = True - ' - 'btnPluginSettings - ' - Me.btnPluginSettings.Enabled = False - Me.btnPluginSettings.Location = New System.Drawing.Point(361, 25) - Me.btnPluginSettings.Name = "btnPluginSettings" - Me.btnPluginSettings.Size = New System.Drawing.Size(120, 24) - Me.btnPluginSettings.TabIndex = 22 - Me.btnPluginSettings.Text = "Plugin settings" - Me.btnPluginSettings.UseVisualStyleBackColor = True - ' - 'grpStartMode - ' - Me.grpStartMode.Controls.Add(Me.chkDisableFuzzyMatching) - Me.grpStartMode.Controls.Add(Me.lblDefaultStartMode) - Me.grpStartMode.Controls.Add(Me.chkStartAsEXE) - Me.grpStartMode.Controls.Add(Me.cmbDefaultStartMode) - Me.grpStartMode.Location = New System.Drawing.Point(12, 205) - Me.grpStartMode.Name = "grpStartMode" - Me.grpStartMode.Size = New System.Drawing.Size(515, 49) - Me.grpStartMode.TabIndex = 2 - Me.grpStartMode.TabStop = False - Me.grpStartMode.Text = "Backglass start mode" - ' - 'chkDisableFuzzyMatching - ' - Me.chkDisableFuzzyMatching.AutoSize = True - Me.chkDisableFuzzyMatching.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDisableFuzzyMatching.Location = New System.Drawing.Point(327, 23) - Me.chkDisableFuzzyMatching.Name = "chkDisableFuzzyMatching" - Me.chkDisableFuzzyMatching.Size = New System.Drawing.Size(134, 17) - Me.chkDisableFuzzyMatching.TabIndex = 40 - Me.chkDisableFuzzyMatching.Text = "Exact .directb2s match" - Me.chkDisableFuzzyMatching.UseVisualStyleBackColor = True - ' - 'lblDefaultStartMode - ' - Me.lblDefaultStartMode.AutoSize = True - Me.lblDefaultStartMode.Location = New System.Drawing.Point(162, 23) - Me.lblDefaultStartMode.Name = "lblDefaultStartMode" - Me.lblDefaultStartMode.Size = New System.Drawing.Size(73, 13) - Me.lblDefaultStartMode.TabIndex = 26 - Me.lblDefaultStartMode.Text = "Default mode:" - ' - 'chkStartAsEXE - ' - Me.chkStartAsEXE.Appearance = System.Windows.Forms.Appearance.Button - Me.chkStartAsEXE.Location = New System.Drawing.Point(6, 20) - Me.chkStartAsEXE.Name = "chkStartAsEXE" - Me.chkStartAsEXE.Size = New System.Drawing.Size(151, 21) - Me.chkStartAsEXE.TabIndex = 6 - Me.chkStartAsEXE.Text = "Start this backglass as EXE" - Me.chkStartAsEXE.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkStartAsEXE.UseVisualStyleBackColor = True - ' - 'cmbDefaultStartMode - ' - Me.cmbDefaultStartMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbDefaultStartMode.FormattingEnabled = True - Me.cmbDefaultStartMode.Items.AddRange(New Object() {"Standard", "In EXE"}) - Me.cmbDefaultStartMode.Location = New System.Drawing.Point(242, 20) - Me.cmbDefaultStartMode.Name = "cmbDefaultStartMode" - Me.cmbDefaultStartMode.Size = New System.Drawing.Size(76, 21) - Me.cmbDefaultStartMode.TabIndex = 7 - ' - 'grpGeneral - ' - Me.grpGeneral.Controls.Add(Me.btnHyperpin) - Me.grpGeneral.Controls.Add(Me.lblFile) - Me.grpGeneral.Controls.Add(Me.cmbMode) - Me.grpGeneral.Controls.Add(Me.lblMode) - Me.grpGeneral.Controls.Add(Me.cmbMatchingFileNames) - Me.grpGeneral.Controls.Add(Me.btnCheck) - Me.grpGeneral.Location = New System.Drawing.Point(12, 64) - Me.grpGeneral.Name = "grpGeneral" - Me.grpGeneral.Size = New System.Drawing.Size(515, 51) - Me.grpGeneral.TabIndex = 0 - Me.grpGeneral.TabStop = False - Me.grpGeneral.Text = "General" - ' - 'btnHyperpin - ' - Me.btnHyperpin.Location = New System.Drawing.Point(370, 18) - Me.btnHyperpin.Name = "btnHyperpin" - Me.btnHyperpin.Size = New System.Drawing.Size(98, 24) - Me.btnHyperpin.TabIndex = 2 - Me.btnHyperpin.Text = "Locate VP.xml" - Me.btnHyperpin.UseVisualStyleBackColor = True - ' - 'lblFile - ' - Me.lblFile.AutoSize = True - Me.lblFile.Location = New System.Drawing.Point(162, 24) - Me.lblFile.Name = "lblFile" - Me.lblFile.Size = New System.Drawing.Size(26, 13) - Me.lblFile.TabIndex = 15 - Me.lblFile.Text = "File:" - Me.lblFile.Visible = False - ' - 'cmbMode - ' - Me.cmbMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbMode.FormattingEnabled = True - Me.cmbMode.Items.AddRange(New Object() {"Authentic", "Fantasy"}) - Me.cmbMode.Location = New System.Drawing.Point(47, 20) - Me.cmbMode.Name = "cmbMode" - Me.cmbMode.Size = New System.Drawing.Size(246, 21) - Me.cmbMode.TabIndex = 0 - ' - 'lblMode - ' - Me.lblMode.AutoSize = True - Me.lblMode.Location = New System.Drawing.Point(4, 23) - Me.lblMode.Name = "lblMode" - Me.lblMode.Size = New System.Drawing.Size(37, 13) - Me.lblMode.TabIndex = 13 - Me.lblMode.Text = "Mode:" - Me.lblMode.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cmbMatchingFileNames - ' - Me.cmbMatchingFileNames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbMatchingFileNames.FormattingEnabled = True - Me.cmbMatchingFileNames.Location = New System.Drawing.Point(207, 20) - Me.cmbMatchingFileNames.Name = "cmbMatchingFileNames" - Me.cmbMatchingFileNames.Size = New System.Drawing.Size(156, 21) - Me.cmbMatchingFileNames.Sorted = True - Me.cmbMatchingFileNames.TabIndex = 1 - Me.cmbMatchingFileNames.Visible = False - ' - 'btnCheck - ' - Me.btnCheck.Location = New System.Drawing.Point(370, 18) - Me.btnCheck.Name = "btnCheck" - Me.btnCheck.Size = New System.Drawing.Size(98, 24) - Me.btnCheck.TabIndex = 2 - Me.btnCheck.Text = "Check monitors" - Me.btnCheck.UseVisualStyleBackColor = True - Me.btnCheck.Visible = False - ' - 'grpAnimationSettings - ' - Me.grpAnimationSettings.Controls.Add(Me.cmbAnimationSetting) - Me.grpAnimationSettings.Controls.Add(Me.cmbAnimations) - Me.grpAnimationSettings.Location = New System.Drawing.Point(12, 425) - Me.grpAnimationSettings.Name = "grpAnimationSettings" - Me.grpAnimationSettings.Size = New System.Drawing.Size(515, 51) - Me.grpAnimationSettings.TabIndex = 5 - Me.grpAnimationSettings.TabStop = False - Me.grpAnimationSettings.Text = "Animation settings and tuning" - ' - 'cmbAnimationSetting - ' - Me.cmbAnimationSetting.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbAnimationSetting.FormattingEnabled = True - Me.cmbAnimationSetting.Items.AddRange(New Object() {"1 x", "2 x", "3 x", "4 x", "5 x", "10 x", "Off"}) - Me.cmbAnimationSetting.Location = New System.Drawing.Point(239, 20) - Me.cmbAnimationSetting.Name = "cmbAnimationSetting" - Me.cmbAnimationSetting.Size = New System.Drawing.Size(111, 21) - Me.cmbAnimationSetting.TabIndex = 17 - ' - 'cmbAnimations - ' - Me.cmbAnimations.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbAnimations.FormattingEnabled = True - Me.cmbAnimations.Location = New System.Drawing.Point(7, 20) - Me.cmbAnimations.Name = "cmbAnimations" - Me.cmbAnimations.Size = New System.Drawing.Size(226, 21) - Me.cmbAnimations.TabIndex = 16 - ' - 'grpScreenshot - ' - Me.grpScreenshot.Controls.Add(Me.lblFileType) - Me.grpScreenshot.Controls.Add(Me.cmbScreenshotType) - Me.grpScreenshot.Controls.Add(Me.btnScreenshotPath) - Me.grpScreenshot.Location = New System.Drawing.Point(12, 482) - Me.grpScreenshot.Name = "grpScreenshot" - Me.grpScreenshot.Size = New System.Drawing.Size(515, 50) - Me.grpScreenshot.TabIndex = 6 - Me.grpScreenshot.TabStop = False - Me.grpScreenshot.Text = "Screenshot" - ' - 'lblFileType - ' - Me.lblFileType.AutoSize = True - Me.lblFileType.Location = New System.Drawing.Point(268, 19) - Me.lblFileType.Name = "lblFileType" - Me.lblFileType.Size = New System.Drawing.Size(78, 13) - Me.lblFileType.TabIndex = 0 - Me.lblFileType.Text = "Image file type:" - Me.lblFileType.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cmbScreenshotType - ' - Me.cmbScreenshotType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbScreenshotType.FormattingEnabled = True - Me.cmbScreenshotType.Items.AddRange(New Object() {"PNG", "JPG", "GIF", "BMP"}) - Me.cmbScreenshotType.Location = New System.Drawing.Point(357, 16) - Me.cmbScreenshotType.Name = "cmbScreenshotType" - Me.cmbScreenshotType.Size = New System.Drawing.Size(111, 21) - Me.cmbScreenshotType.TabIndex = 19 - ' - 'btnScreenshotPath - ' - Me.btnScreenshotPath.Location = New System.Drawing.Point(8, 16) - Me.btnScreenshotPath.Name = "btnScreenshotPath" - Me.btnScreenshotPath.Size = New System.Drawing.Size(226, 24) - Me.btnScreenshotPath.TabIndex = 18 - Me.btnScreenshotPath.Text = "Screenshot path" - Me.btnScreenshotPath.UseVisualStyleBackColor = True - ' - 'grpVisibility - ' - Me.grpVisibility.Controls.Add(Me.cmbB2SBackglass) - Me.grpVisibility.Controls.Add(Me.lblB2SBackglass) - Me.grpVisibility.Controls.Add(Me.chkFormNoFocus) - Me.grpVisibility.Controls.Add(Me.lblBackground) - Me.grpVisibility.Controls.Add(Me.lblFormFront) - Me.grpVisibility.Controls.Add(Me.cmbFormFront) - Me.grpVisibility.Controls.Add(Me.cmbBackground) - Me.grpVisibility.Controls.Add(Me.cmbB2SDMD) - Me.grpVisibility.Controls.Add(Me.lblB2SDMD) - Me.grpVisibility.Controls.Add(Me.cmbDMD) - Me.grpVisibility.Controls.Add(Me.lblDMD) - Me.grpVisibility.Controls.Add(Me.cmbGrill) - Me.grpVisibility.Controls.Add(Me.lblGrill) - Me.grpVisibility.Location = New System.Drawing.Point(12, 120) - Me.grpVisibility.Name = "grpVisibility" - Me.grpVisibility.Size = New System.Drawing.Size(515, 79) - Me.grpVisibility.TabIndex = 1 - Me.grpVisibility.TabStop = False - Me.grpVisibility.Text = "Visibility" - ' - 'cmbB2SBackglass - ' - Me.cmbB2SBackglass.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbB2SBackglass.FormattingEnabled = True - Me.cmbB2SBackglass.Items.AddRange(New Object() {"Visible", "Hidden"}) - Me.cmbB2SBackglass.Location = New System.Drawing.Point(75, 14) - Me.cmbB2SBackglass.Margin = New System.Windows.Forms.Padding(6) - Me.cmbB2SBackglass.Name = "cmbB2SBackglass" - Me.cmbB2SBackglass.Size = New System.Drawing.Size(93, 21) - Me.cmbB2SBackglass.TabIndex = 43 - ' - 'lblB2SBackglass - ' - Me.lblB2SBackglass.AutoSize = True - Me.lblB2SBackglass.Location = New System.Drawing.Point(4, 19) - Me.lblB2SBackglass.Margin = New System.Windows.Forms.Padding(6, 0, 6, 0) - Me.lblB2SBackglass.Name = "lblB2SBackglass" - Me.lblB2SBackglass.Size = New System.Drawing.Size(59, 13) - Me.lblB2SBackglass.TabIndex = 44 - Me.lblB2SBackglass.Text = "Backglass:" - ' - 'chkFormNoFocus - ' - Me.chkFormNoFocus.AutoSize = True - Me.chkFormNoFocus.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFormNoFocus.Location = New System.Drawing.Point(441, 50) - Me.chkFormNoFocus.Name = "chkFormNoFocus" - Me.chkFormNoFocus.Size = New System.Drawing.Size(72, 17) - Me.chkFormNoFocus.TabIndex = 42 - Me.chkFormNoFocus.Text = "No Focus" - Me.chkFormNoFocus.UseVisualStyleBackColor = True - ' - 'lblBackground - ' - Me.lblBackground.AutoSize = True - Me.lblBackground.Location = New System.Drawing.Point(296, 17) - Me.lblBackground.Name = "lblBackground" - Me.lblBackground.Size = New System.Drawing.Size(68, 13) - Me.lblBackground.TabIndex = 17 - Me.lblBackground.Text = "Background:" - ' - 'lblFormFront - ' - Me.lblFormFront.AutoSize = True - Me.lblFormFront.Location = New System.Drawing.Point(281, 51) - Me.lblFormFront.Name = "lblFormFront" - Me.lblFormFront.Size = New System.Drawing.Size(62, 13) - Me.lblFormFront.TabIndex = 41 - Me.lblFormFront.Text = "Bring Forms" - ' - 'cmbFormFront - ' - Me.cmbFormFront.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbFormFront.FormattingEnabled = True - Me.cmbFormFront.Items.AddRange(New Object() {"Form to Back", "Standard", "Form to Top"}) - Me.cmbFormFront.Location = New System.Drawing.Point(345, 48) - Me.cmbFormFront.Name = "cmbFormFront" - Me.cmbFormFront.Size = New System.Drawing.Size(90, 21) - Me.cmbFormFront.TabIndex = 27 - ' - 'cmbBackground - ' - Me.cmbBackground.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbBackground.FormattingEnabled = True - Me.cmbBackground.Items.AddRange(New Object() {"Visible", "Hidden", "Standard"}) - Me.cmbBackground.Location = New System.Drawing.Point(370, 14) - Me.cmbBackground.Name = "cmbBackground" - Me.cmbBackground.Size = New System.Drawing.Size(80, 21) - Me.cmbBackground.TabIndex = 16 - ' - 'cmbB2SDMD - ' - Me.cmbB2SDMD.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbB2SDMD.FormattingEnabled = True - Me.cmbB2SDMD.Items.AddRange(New Object() {"Visible", "Hidden"}) - Me.cmbB2SDMD.Location = New System.Drawing.Point(188, 48) - Me.cmbB2SDMD.Name = "cmbB2SDMD" - Me.cmbB2SDMD.Size = New System.Drawing.Size(80, 21) - Me.cmbB2SDMD.TabIndex = 5 - ' - 'lblB2SDMD - ' - Me.lblB2SDMD.AutoSize = True - Me.lblB2SDMD.Location = New System.Drawing.Point(127, 51) - Me.lblB2SDMD.Name = "lblB2SDMD" - Me.lblB2SDMD.Size = New System.Drawing.Size(58, 13) - Me.lblB2SDMD.TabIndex = 15 - Me.lblB2SDMD.Text = "B2S DMD:" - ' - 'cmbDMD - ' - Me.cmbDMD.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbDMD.FormattingEnabled = True - Me.cmbDMD.Items.AddRange(New Object() {"Visible", "Hidden", "Standard"}) - Me.cmbDMD.Location = New System.Drawing.Point(40, 48) - Me.cmbDMD.Name = "cmbDMD" - Me.cmbDMD.Size = New System.Drawing.Size(80, 21) - Me.cmbDMD.TabIndex = 4 - ' - 'lblDMD - ' - Me.lblDMD.AutoSize = True - Me.lblDMD.Location = New System.Drawing.Point(5, 51) - Me.lblDMD.Name = "lblDMD" - Me.lblDMD.Size = New System.Drawing.Size(35, 13) - Me.lblDMD.TabIndex = 13 - Me.lblDMD.Text = "DMD:" - ' - 'cmbGrill - ' - Me.cmbGrill.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbGrill.FormattingEnabled = True - Me.cmbGrill.Items.AddRange(New Object() {"Visible", "Hidden", "Standard"}) - Me.cmbGrill.Location = New System.Drawing.Point(210, 14) - Me.cmbGrill.Name = "cmbGrill" - Me.cmbGrill.Size = New System.Drawing.Size(80, 21) - Me.cmbGrill.TabIndex = 3 - ' - 'lblGrill - ' - Me.lblGrill.AutoSize = True - Me.lblGrill.Location = New System.Drawing.Point(177, 17) - Me.lblGrill.Name = "lblGrill" - Me.lblGrill.Size = New System.Drawing.Size(27, 13) - Me.lblGrill.TabIndex = 11 - Me.lblGrill.Text = "Grill:" - ' - 'grpLEDs - ' - Me.grpLEDs.Controls.Add(Me.lblGlowing) - Me.grpLEDs.Controls.Add(Me.radioStandardLED) - Me.grpLEDs.Controls.Add(Me.cmbGlowing) - Me.grpLEDs.Controls.Add(Me.radioDream7LED) - Me.grpLEDs.Controls.Add(Me.chkWireframe) - Me.grpLEDs.Controls.Add(Me.chkBulbs) - Me.grpLEDs.Location = New System.Drawing.Point(12, 339) - Me.grpLEDs.Name = "grpLEDs" - Me.grpLEDs.Size = New System.Drawing.Size(515, 80) - Me.grpLEDs.TabIndex = 4 - Me.grpLEDs.TabStop = False - Me.grpLEDs.Text = "LED settings and tuning" - ' - 'lblGlowing - ' - Me.lblGlowing.Location = New System.Drawing.Point(303, 53) - Me.lblGlowing.Name = "lblGlowing" - Me.lblGlowing.Size = New System.Drawing.Size(48, 13) - Me.lblGlowing.TabIndex = 25 - Me.lblGlowing.Text = "Glowing:" - Me.lblGlowing.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'radioStandardLED - ' - Me.radioStandardLED.Appearance = System.Windows.Forms.Appearance.Button - Me.radioStandardLED.Location = New System.Drawing.Point(6, 20) - Me.radioStandardLED.Name = "radioStandardLED" - Me.radioStandardLED.Size = New System.Drawing.Size(111, 24) - Me.radioStandardLED.TabIndex = 11 - Me.radioStandardLED.TabStop = True - Me.radioStandardLED.Text = "Use simple LEDs" - Me.radioStandardLED.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.radioStandardLED.UseVisualStyleBackColor = True - ' - 'cmbGlowing - ' - Me.cmbGlowing.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cmbGlowing.FormattingEnabled = True - Me.cmbGlowing.Items.AddRange(New Object() {"Off", "Low", "Medium", "High", "Default"}) - Me.cmbGlowing.Location = New System.Drawing.Point(357, 50) - Me.cmbGlowing.Name = "cmbGlowing" - Me.cmbGlowing.Size = New System.Drawing.Size(111, 21) - Me.cmbGlowing.TabIndex = 15 - ' - 'radioDream7LED - ' - Me.radioDream7LED.Appearance = System.Windows.Forms.Appearance.Button - Me.radioDream7LED.Location = New System.Drawing.Point(124, 20) - Me.radioDream7LED.Name = "radioDream7LED" - Me.radioDream7LED.Size = New System.Drawing.Size(110, 24) - Me.radioDream7LED.TabIndex = 12 - Me.radioDream7LED.TabStop = True - Me.radioDream7LED.Text = "Use 'Dream7' LEDs" - Me.radioDream7LED.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.radioDream7LED.UseVisualStyleBackColor = True - ' - 'chkWireframe - ' - Me.chkWireframe.Appearance = System.Windows.Forms.Appearance.Button - Me.chkWireframe.Location = New System.Drawing.Point(240, 20) - Me.chkWireframe.Name = "chkWireframe" - Me.chkWireframe.Size = New System.Drawing.Size(111, 24) - Me.chkWireframe.TabIndex = 13 - Me.chkWireframe.Text = "LED &wireframe on" - Me.chkWireframe.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkWireframe.UseVisualStyleBackColor = True - ' - 'chkBulbs - ' - Me.chkBulbs.Appearance = System.Windows.Forms.Appearance.Button - Me.chkBulbs.Location = New System.Drawing.Point(357, 20) - Me.chkBulbs.Name = "chkBulbs" - Me.chkBulbs.Size = New System.Drawing.Size(111, 24) - Me.chkBulbs.TabIndex = 14 - Me.chkBulbs.Text = "LED &bulb light on" - Me.chkBulbs.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkBulbs.UseVisualStyleBackColor = True - ' - 'grpPerfTuning - ' - Me.grpPerfTuning.Controls.Add(Me.numLampsSkipFrames) - Me.grpPerfTuning.Controls.Add(Me.lblLampsBlackTurns) - Me.grpPerfTuning.Controls.Add(Me.lblLEDBlackTurns) - Me.grpPerfTuning.Controls.Add(Me.numSolenoidsSkipFrames) - Me.grpPerfTuning.Controls.Add(Me.numLEDSkipFrames) - Me.grpPerfTuning.Controls.Add(Me.lblSolenoidBlackTurns) - Me.grpPerfTuning.Controls.Add(Me.numGISkipFrames) - Me.grpPerfTuning.Controls.Add(Me.lblGIBlackTurns) - Me.grpPerfTuning.Location = New System.Drawing.Point(12, 260) - Me.grpPerfTuning.Name = "grpPerfTuning" - Me.grpPerfTuning.Size = New System.Drawing.Size(515, 73) - Me.grpPerfTuning.TabIndex = 3 - Me.grpPerfTuning.TabStop = False - Me.grpPerfTuning.Text = "Performance tuning" - ' - 'numLampsSkipFrames - ' - Me.numLampsSkipFrames.Location = New System.Drawing.Point(117, 18) - Me.numLampsSkipFrames.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) - Me.numLampsSkipFrames.Name = "numLampsSkipFrames" - Me.numLampsSkipFrames.Size = New System.Drawing.Size(51, 20) - Me.numLampsSkipFrames.TabIndex = 8 - ' - 'lblLampsBlackTurns - ' - Me.lblLampsBlackTurns.AutoSize = True - Me.lblLampsBlackTurns.Location = New System.Drawing.Point(14, 22) - Me.lblLampsBlackTurns.Name = "lblLampsBlackTurns" - Me.lblLampsBlackTurns.Size = New System.Drawing.Size(90, 13) - Me.lblLampsBlackTurns.TabIndex = 10 - Me.lblLampsBlackTurns.Text = "Skip lamp frames:" - ' - 'lblLEDBlackTurns - ' - Me.lblLEDBlackTurns.AutoSize = True - Me.lblLEDBlackTurns.Location = New System.Drawing.Point(251, 46) - Me.lblLEDBlackTurns.Name = "lblLEDBlackTurns" - Me.lblLEDBlackTurns.Size = New System.Drawing.Size(89, 13) - Me.lblLEDBlackTurns.TabIndex = 22 - Me.lblLEDBlackTurns.Text = "Skip LED frames:" - ' - 'numSolenoidsSkipFrames - ' - Me.numSolenoidsSkipFrames.Location = New System.Drawing.Point(345, 18) - Me.numSolenoidsSkipFrames.Maximum = New Decimal(New Integer() {30, 0, 0, 0}) - Me.numSolenoidsSkipFrames.Name = "numSolenoidsSkipFrames" - Me.numSolenoidsSkipFrames.Size = New System.Drawing.Size(51, 20) - Me.numSolenoidsSkipFrames.TabIndex = 9 - ' - 'numLEDSkipFrames - ' - Me.numLEDSkipFrames.Location = New System.Drawing.Point(345, 44) - Me.numLEDSkipFrames.Maximum = New Decimal(New Integer() {5, 0, 0, 0}) - Me.numLEDSkipFrames.Name = "numLEDSkipFrames" - Me.numLEDSkipFrames.Size = New System.Drawing.Size(51, 20) - Me.numLEDSkipFrames.TabIndex = 11 - ' - 'lblSolenoidBlackTurns - ' - Me.lblSolenoidBlackTurns.AutoSize = True - Me.lblSolenoidBlackTurns.Location = New System.Drawing.Point(230, 20) - Me.lblSolenoidBlackTurns.Name = "lblSolenoidBlackTurns" - Me.lblSolenoidBlackTurns.Size = New System.Drawing.Size(107, 13) - Me.lblSolenoidBlackTurns.TabIndex = 12 - Me.lblSolenoidBlackTurns.Text = "Skip solenoid frames:" - ' - 'numGISkipFrames - ' - Me.numGISkipFrames.Location = New System.Drawing.Point(117, 44) - Me.numGISkipFrames.Maximum = New Decimal(New Integer() {30, 0, 0, 0}) - Me.numGISkipFrames.Name = "numGISkipFrames" - Me.numGISkipFrames.Size = New System.Drawing.Size(51, 20) - Me.numGISkipFrames.TabIndex = 10 - ' - 'lblGIBlackTurns - ' - Me.lblGIBlackTurns.AutoSize = True - Me.lblGIBlackTurns.Location = New System.Drawing.Point(25, 47) - Me.lblGIBlackTurns.Name = "lblGIBlackTurns" - Me.lblGIBlackTurns.Size = New System.Drawing.Size(79, 13) - Me.lblGIBlackTurns.TabIndex = 19 - Me.lblGIBlackTurns.Text = "Skip GI frames:" - ' - 'formSettings - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.ClientSize = New System.Drawing.Size(536, 693) - Me.Controls.Add(Me.PanelSettings) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow - Me.KeyPreview = True - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "formSettings" - Me.Opacity = 0R - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen - Me.Text = "Settings..." - Me.TopMost = True - Me.PanelSettings.ResumeLayout(False) - Me.PanelSettings.PerformLayout() - Me.lowerPanel.ResumeLayout(False) - Me.headerPanel.ResumeLayout(False) - Me.headerPanel.PerformLayout() - CType(Me.B2SLogo, System.ComponentModel.ISupportInitialize).EndInit() - Me.grpPlugins.ResumeLayout(False) - Me.grpPlugins.PerformLayout() - Me.grpStartMode.ResumeLayout(False) - Me.grpStartMode.PerformLayout() - Me.grpGeneral.ResumeLayout(False) - Me.grpGeneral.PerformLayout() - Me.grpAnimationSettings.ResumeLayout(False) - Me.grpScreenshot.ResumeLayout(False) - Me.grpScreenshot.PerformLayout() - Me.grpVisibility.ResumeLayout(False) - Me.grpVisibility.PerformLayout() - Me.grpLEDs.ResumeLayout(False) - Me.grpPerfTuning.ResumeLayout(False) - Me.grpPerfTuning.PerformLayout() - CType(Me.numLampsSkipFrames, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.numSolenoidsSkipFrames, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.numLEDSkipFrames, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.numGISkipFrames, System.ComponentModel.ISupportInitialize).EndInit() - Me.ResumeLayout(False) - - End Sub - Friend WithEvents TimerOpacity As System.Windows.Forms.Timer - Friend WithEvents PanelSettings As System.Windows.Forms.Panel - Friend WithEvents grpAnimationSettings As System.Windows.Forms.GroupBox - Friend WithEvents cmbAnimationSetting As System.Windows.Forms.ComboBox - Friend WithEvents cmbAnimations As System.Windows.Forms.ComboBox - Friend WithEvents lblVersion As System.Windows.Forms.Label - Friend WithEvents grpScreenshot As System.Windows.Forms.GroupBox - Friend WithEvents lblFileType As System.Windows.Forms.Label - Friend WithEvents cmbScreenshotType As System.Windows.Forms.ComboBox - Friend WithEvents btnScreenshotPath As System.Windows.Forms.Button - Friend WithEvents btnCloseSettings As System.Windows.Forms.Button - Friend WithEvents B2SLogo As System.Windows.Forms.PictureBox - Friend WithEvents lblCopyright As System.Windows.Forms.Label - Friend WithEvents grpVisibility As System.Windows.Forms.GroupBox - Friend WithEvents cmbB2SDMD As System.Windows.Forms.ComboBox - Friend WithEvents lblB2SDMD As System.Windows.Forms.Label - Friend WithEvents cmbDMD As System.Windows.Forms.ComboBox - Friend WithEvents lblDMD As System.Windows.Forms.Label - Friend WithEvents cmbGrill As System.Windows.Forms.ComboBox - Friend WithEvents lblGrill As System.Windows.Forms.Label - Friend WithEvents cmbMatchingFileNames As System.Windows.Forms.ComboBox - Friend WithEvents btnCheck As System.Windows.Forms.Button - Friend WithEvents btnSaveSettings As System.Windows.Forms.Button - Friend WithEvents grpLEDs As System.Windows.Forms.GroupBox - Friend WithEvents lblGlowing As System.Windows.Forms.Label - Friend WithEvents radioStandardLED As System.Windows.Forms.RadioButton - Friend WithEvents cmbGlowing As System.Windows.Forms.ComboBox - Friend WithEvents radioDream7LED As System.Windows.Forms.RadioButton - Friend WithEvents chkWireframe As System.Windows.Forms.CheckBox - Friend WithEvents chkBulbs As System.Windows.Forms.CheckBox - Friend WithEvents grpPerfTuning As System.Windows.Forms.GroupBox - Friend WithEvents chkStartAsEXE As System.Windows.Forms.CheckBox - Friend WithEvents numLampsSkipFrames As System.Windows.Forms.NumericUpDown - Friend WithEvents lblLampsBlackTurns As System.Windows.Forms.Label - Friend WithEvents lblLEDBlackTurns As System.Windows.Forms.Label - Friend WithEvents numSolenoidsSkipFrames As System.Windows.Forms.NumericUpDown - Friend WithEvents numLEDSkipFrames As System.Windows.Forms.NumericUpDown - Friend WithEvents lblSolenoidBlackTurns As System.Windows.Forms.Label - Friend WithEvents numGISkipFrames As System.Windows.Forms.NumericUpDown - Friend WithEvents lblGIBlackTurns As System.Windows.Forms.Label - Friend WithEvents grpGeneral As System.Windows.Forms.GroupBox - Friend WithEvents btnMore As System.Windows.Forms.Button - Friend WithEvents cmbMode As System.Windows.Forms.ComboBox - Friend WithEvents lblMode As System.Windows.Forms.Label - Friend WithEvents lblFile As System.Windows.Forms.Label - Friend WithEvents btnHyperpin As System.Windows.Forms.Button - Friend WithEvents lblDefaultStartMode As System.Windows.Forms.Label - Friend WithEvents cmbDefaultStartMode As System.Windows.Forms.ComboBox - Friend WithEvents grpStartMode As System.Windows.Forms.GroupBox - Friend WithEvents grpPlugins As System.Windows.Forms.GroupBox - Friend WithEvents chkShowStartupError As System.Windows.Forms.CheckBox - Friend WithEvents chkActivatePlugins As System.Windows.Forms.CheckBox - Friend WithEvents btnPluginSettings As System.Windows.Forms.Button - Friend WithEvents lblFormFront As Windows.Forms.Label - Friend WithEvents cmbFormFront As Windows.Forms.ComboBox - Friend WithEvents chkDisableFuzzyMatching As Windows.Forms.CheckBox - Friend WithEvents chkFormNoFocus As Windows.Forms.CheckBox - Friend WithEvents btnEditScreenRes As Windows.Forms.Button - Friend WithEvents lblBackground As Windows.Forms.Label - Friend WithEvents cmbBackground As Windows.Forms.ComboBox - Friend WithEvents lblNonAvailableSettings As Windows.Forms.Label - Friend WithEvents B2SLogoToolTip As Windows.Forms.ToolTip - Friend WithEvents lowerPanel As Windows.Forms.Panel - Friend WithEvents headerPanel As Windows.Forms.Panel - Friend WithEvents cmbB2SBackglass As Windows.Forms.ComboBox - Friend WithEvents lblB2SBackglass As Windows.Forms.Label -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.resx deleted file mode 100644 index 865f20d..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.resx +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 155, 17 - - - - - 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 - NRABIwAAAABJRU5ErkJggg== - - - - 17, 17 - - - 29 - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.vb deleted file mode 100644 index e769573..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettings.vb +++ /dev/null @@ -1,505 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.Windows.Forms -Imports Microsoft.Win32 -Imports System.IO -Imports System.Windows.Forms.VisualStyles.VisualStyleElement - -Public Class formSettings - - Public B2SScreen As B2SScreen = Nothing - Public B2SAnimation As B2SAnimation = Nothing - Public formBackglass As formBackglass = Nothing - - Public activateMsgBoxAtSaving As Boolean = False - Public isSettingsScreenDirty As Boolean = False - - Private formSettingsMore As formSettingsMore = Nothing - - Private fadeIn As Boolean = True - Private Const fadeStep As Single = 0.2 - - Private Class Animations4Settings - Public Name As String = String.Empty - Public SlowDown As Integer = 1 - - Public Sub New(ByVal _name As String, ByVal _slowdown As Integer) - Name = _name - SlowDown = _slowdown - End Sub - - Public Overrides Function ToString() As String - Return Name + If(SlowDown = 1, "", " (" & If(SlowDown = 0, "Off", SlowDown.ToString & "x") & ")") - End Function - End Class - - Private Sub formSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load - - formSettingsMore = New formSettingsMore(Me, formBackglass) - - ' Set labels Bold/Italic - 'Me.lblVersion.Font = New Font(Me.lblVersion.Font, FontStyle.Bold) - 'Me.lblCopyright.Font = New Font(Me.lblCopyright.Font, FontStyle.Bold) - - 'Me.lblNonAvailableSettings.Font = New Font(Me.lblNonAvailableSettings.Font, FontStyle.Italic) - 'Me.lblBackgound.Font = New Font(Me.lblBackgound.Font, FontStyle.Italic) - 'Me.chkDisableFuzzyMatching.Font = New Font(Me.chkDisableFuzzyMatching.Font, FontStyle.Italic) - 'Me.chkFormNoFocus.Font = New Font(Me.chkFormNoFocus.Font, FontStyle.Italic) - - ' load data - Dim _isdirty As Boolean = isSettingsScreenDirty - Me.Text = "Settings... [" & B2SData.TableFileName & "] " & " (" & If(Not String.IsNullOrEmpty(B2SSettings.GameName), B2SSettings.GameName, B2SSettings.B2SName) & ")" - - If B2SSettings.PureEXE Then btnSaveSettings.Enabled = False - - ' set version info - lblCopyright.Text = String.Format(lblCopyright.Text, My.Application.Info.ProductName.ToString, My.Application.Info.Copyright.ToString) - lblVersion.Text = String.Format("Server version {0} {1}, backglass file version {2}", Application.ProductVersion, If(Environment.Is64BitProcess, "x64", "x86"), B2SSettings.BackglassFileVersion) - - ' get more data - formSettingsMore.btnLogPath.Text = "Log path: " & B2SSettings.LogPath - formSettingsMore.chkLogLamps.Checked = B2SSettings.IsLampsStateLogOn - formSettingsMore.chkLogSolenoids.Checked = B2SSettings.IsSolenoidsStateLogOn - formSettingsMore.chkLogGIStrings.Checked = B2SSettings.IsGIStringsStateLogOn - formSettingsMore.chkLogLEDs.Checked = B2SSettings.IsLEDsStateLogOn - formSettingsMore.chkAllOut.Enabled = B2SSettings.IsROMControlled - formSettingsMore.chkAllOff.Enabled = B2SSettings.IsROMControlled - formSettingsMore.chkLampsOff.Enabled = (B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps) AndAlso B2SSettings.IsROMControlled - formSettingsMore.chkSolenoidsOff.Enabled = (B2SData.UseRomSolenoids OrElse B2SData.UseAnimationSolenoids) AndAlso B2SSettings.IsROMControlled - formSettingsMore.chkGIStringsOff.Enabled = (B2SData.UseRomGIStrings OrElse B2SData.UseAnimationGIStrings) AndAlso B2SSettings.IsROMControlled - formSettingsMore.chkLEDsOff.Enabled = (B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels) - ' get panel data - If B2SData.DualBackglass Then - cmbMode.SelectedIndex = CInt(B2SSettings.CurrentDualMode) - 1 - Else - cmbMode.Text = String.Empty - cmbMode.Enabled = False - cmbGrill.Focus() - End If - cmbDMD.SelectedIndex = B2SSettings.HideDMD - cmbGrill.SelectedIndex = B2SSettings.HideGrill - cmbB2SDMD.SelectedIndex = If(B2SSettings.HideB2SDMD, 1, 0) - cmbB2SBackglass.SelectedIndex = If(B2SSettings.HideB2SBackglass, 1, 0) - btnScreenshotPath.Text = "Screenshot path: " & B2SSettings.ScreenshotPath - cmbScreenshotType.SelectedIndex = B2SSettings.ScreenshotFileType - numLampsSkipFrames.Enabled = (B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps) AndAlso B2SSettings.IsROMControlled - numLampsSkipFrames.Value = B2SSettings.LampsSkipFrames - numSolenoidsSkipFrames.Enabled = (B2SData.UseRomSolenoids OrElse B2SData.UseAnimationSolenoids) AndAlso B2SSettings.IsROMControlled - numSolenoidsSkipFrames.Value = B2SSettings.SolenoidsSkipFrames - numGISkipFrames.Enabled = (B2SData.UseRomGIStrings OrElse B2SData.UseAnimationGIStrings) AndAlso B2SSettings.IsROMControlled - numGISkipFrames.Value = B2SSettings.GIStringsSkipFrames - chkStartAsEXE.Checked = B2SSettings.StartAsEXE - cmbDefaultStartMode.SelectedIndex = B2SSettings.DefaultStartMode - 1 - numLEDSkipFrames.Enabled = (B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels) AndAlso B2SSettings.IsROMControlled - numLEDSkipFrames.Value = B2SSettings.LEDsSkipFrames - If Not B2SData.UseReels Then - radioStandardLED.Checked = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered) - radioDream7LED.Checked = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7) - Else - radioStandardLED.Enabled = False - radioDream7LED.Enabled = False - End If - chkBulbs.Checked = B2SSettings.IsGlowBulbOn - cmbFormFront.SelectedIndex = If(B2SSettings.FormToBack, 0, If(B2SSettings.FormToFront, 2, 1)) - chkDisableFuzzyMatching.Checked = B2SSettings.DisableFuzzyMatching - - cmbGlowing.SelectedIndex = If(B2SSettings.GlowIndex <> -1, B2SSettings.GlowIndex, cmbGlowing.Items.Count - 1) - activateMsgBoxAtSaving = False - ' get animation info - cmbAnimations.Items.Clear() - For Each animation As String In B2SAnimation.Animations - cmbAnimations.Items.Add(New Animations4Settings(animation, B2SAnimation.AnimationSlowDown(animation))) - Next - If cmbAnimations.Items.Count > 0 Then - cmbAnimations.SelectedIndex = 0 - cmbAnimations.Items.Add(New Animations4Settings("(All animations)", B2SSettings.AllAnimationSlowDown)) - End If - ' maybe show matching file names combo box - If B2SSettings.MatchingFileNames IsNot Nothing AndAlso B2SSettings.MatchingFileNames.Length >= 2 Then - cmbMatchingFileNames.Items.Clear() - For Each filename As String In B2SSettings.MatchingFileNames - cmbMatchingFileNames.Items.Add(filename) - Next - If Not String.IsNullOrEmpty(B2SSettings.MatchingFileName) Then - cmbMatchingFileNames.Text = B2SSettings.MatchingFileName - Else - cmbMatchingFileNames.SelectedIndex = 0 - End If - btnCheck.Visible = False - cmbMode.Width = cmbDMD.Width - lblFile.Visible = True - cmbMatchingFileNames.Visible = True - End If - cmbBackground.SelectedIndex = If(B2SSettings.StartBackground.HasValue, If(B2SSettings.StartBackground, 0, 1), 2) - chkFormNoFocus.Checked = B2SSettings.FormNoFocus - ' plugin stuff - chkActivatePlugins.Checked = B2SSettings.ArePluginsOn - chkShowStartupError.Checked = B2SSettings.ShowStartupError - If B2SSettings.ArePluginsOn AndAlso Registry.CurrentUser.OpenSubKey("Software\B2S").GetValue("Plugins", 0) > 0 Then - btnPluginSettings.Enabled = True - End If - ' size panel - PanelSettings.Location = New Point((Me.Size.Width - PanelSettings.Width) / 2, (Me.Size.Height - PanelSettings.Height) / 2) - ' reset dirty flag to previous state - isSettingsScreenDirty = _isdirty - - ' set and start timers - TimerOpacity.Interval = 10 - TimerOpacity.Start() - - End Sub - - Private Sub formSettings_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp - If e.KeyCode = Keys.Escape OrElse e.KeyCode = Keys.S Then - btnCloseSettings.PerformClick() - End If - End Sub - - Private Sub TimerOpacity_Tick(sender As System.Object, e As System.EventArgs) Handles TimerOpacity.Tick - - If fadeIn Then - Me.Opacity += fadeStep - If Me.Opacity >= 1 Then - TimerOpacity.Stop() - fadeIn = False - End If - Else - Me.Opacity -= fadeStep - If Me.Opacity <= 0 Then - TimerOpacity.Stop() - Try - Me.Close() - Me.Dispose() - Catch - End Try - End If - End If - - End Sub - - Private Sub btnMore_Click(sender As System.Object, e As System.EventArgs) Handles btnMore.Click - - formSettingsMore.ShowDialog(Me, formBackglass) - - End Sub - Private Sub btnSaveSettings_Click(sender As System.Object, e As System.EventArgs) Handles btnSaveSettings.Click - If B2SSettings.HideB2SBackglass Then - Dim result As DialogResult = MessageBox.Show("If you save the settings with the backglass hidden, it will become hard to open the settings for this table!" & vbCrLf & vbCrLf & - "To edit the B2SBackglassSettings.xml file manually search for " & vbCrLf & vbCrLf & "1" & vbCrLf & vbCrLf & "in the B2SBackglassSettings.xml file" & vbCrLf & vbCrLf & "Do you want to continue?", - My.Resources.AppTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) - If result = Windows.Forms.DialogResult.No Then - Return - End If - End If - B2SSettings.Save(B2SAnimation) - B2SSettings.Save(, True) - isSettingsScreenDirty = False - If activateMsgBoxAtSaving Then - MessageBox.Show(My.Resources.MSG_ChangesNeedARestart, My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - End If - - End Sub - Private Sub btnCloseSettings_Click(sender As System.Object, e As System.EventArgs) Handles btnCloseSettings.Click - - If IsDirty() Then Return - fadeIn = False - TimerOpacity.Start() - - End Sub - - Private Sub cmbMode_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbMode.SelectedIndexChanged - isSettingsScreenDirty = True - B2SSettings.CurrentDualMode = cmbMode.SelectedIndex + 1 - If formBackglass IsNot Nothing Then - formBackglass.BackgroundImage = formBackglass.DarkImage - formBackglass.Refresh() - End If - B2SAnimation.RestartAnimations() - End Sub - Private Sub btnCheck_Click(sender As System.Object, e As System.EventArgs) Handles btnCheck.Click - Dim text As String = "Your backglass monitor is " & B2SScreen.BackglassMonitor & vbCrLf & vbCrLf - For Each scr As Screen In Screen.AllScreens - text &= scr.DeviceName & ": Running on " & scr.BitsPerPixel.ToString() & " bit" & vbCrLf - Next - MessageBox.Show(text, "Check monitors", MessageBoxButtons.OK, MessageBoxIcon.Information) - End Sub - Private Sub btnHyperpin_Click(sender As System.Object, e As System.EventArgs) Handles btnHyperpin.Click - B2SSettings.HyperpinXMLFile = String.Empty - 'If Not B2SSettings.LocateHyperpinXMLFile() Then - If MessageBox.Show("Please locate and select your 'Visual Pinball.xml' file.", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) = Windows.Forms.DialogResult.OK Then - Using ofd As OpenFileDialog = New OpenFileDialog - ofd.Filter = "XML file (*.xml)|*.xml|ALL (*.*)|*.*" - ofd.FileName = "Visual Pinball.xml" - If ofd.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then - Dim name As String = ofd.FileName - Dim fi As FileInfo = New FileInfo(name) - If Not fi.Name.Equals("Visual Pinball.xml") Then - MessageBox.Show("Sorry, this file isn't a 'Visual Pinball.xml' file.", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - ElseIf File.Exists(name) Then - Try - Dim xml As Xml.XmlDocument = New Xml.XmlDocument() - xml.Load(name) - Catch ex As Exception - MessageBox.Show("The following error occurred opening the file '" & name & "':" & vbCrLf & vbCrLf & ex.Message, My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - End Try - B2SSettings.HyperpinXMLFile = name - B2SSettings.Save(, , True) - MessageBox.Show("Your 'Visual Pinball.xml' file could be located correctly.", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Information) - Else - MessageBox.Show("'Visual Pinball.xml' could not be found.", My.Resources.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - End If - End If - End Using - End If - End Sub - Private Sub cmbMatchingFileNames_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cmbMatchingFileNames.SelectedIndexChanged - isSettingsScreenDirty = True - B2SSettings.MatchingFileName = cmbMatchingFileNames.Text - End Sub - - Private Sub cmbGrill_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbGrill.SelectedIndexChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - B2SSettings.HideGrill = cmbGrill.SelectedIndex - End Sub - Private Sub cmbDMD_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbDMD.SelectedIndexChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - B2SSettings.HideDMD = cmbDMD.SelectedIndex - End Sub - Private Sub cmbB2SDMD_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbB2SDMD.SelectedIndexChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - B2SSettings.HideB2SDMD = (cmbB2SDMD.SelectedIndex = 1) - End Sub - Private Sub cmbB2SBackglass_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbB2SBackglass.SelectedIndexChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - B2SSettings.HideB2SBackglass = (cmbB2SBackglass.SelectedIndex = 1) - End Sub - Private Sub chkStartAsEXE_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkStartAsEXE.CheckedChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - B2SSettings.StartAsEXE = chkStartAsEXE.Checked - End Sub - Private Sub cmbDefaultStartMode_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbDefaultStartMode.SelectedIndexChanged - isSettingsScreenDirty = True - B2SSettings.DefaultStartMode = cmbDefaultStartMode.SelectedIndex + 1 - End Sub - - Private Sub radioDream7LED_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles radioDream7LED.CheckedChanged - isSettingsScreenDirty = True - If radioDream7LED.Checked Then - B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7 - ElseIf radioStandardLED.Checked Then - B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered - End If - For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - led.Value.Visible = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered) AndAlso Not led.Value.Hidden - Next - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Visible = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7) AndAlso Not leddisplay.Value.Hidden - Next - chkWireframe.Enabled = radioDream7LED.Checked - chkBulbs.Enabled = radioDream7LED.Checked - cmbGlowing.Enabled = radioDream7LED.Checked - End Sub - Private Sub radioStandardLED_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles radioStandardLED.CheckedChanged - ' nothing to do, all handled at radioDream7LED - End Sub - 'Private Sub chkUseDream7_CheckedChanged(sender As System.Object, e As System.EventArgs) - 'B2SSettings.UsedLEDType = If(chkUseDream7.Checked, B2SSettings.eLEDTypes.Dream7, B2SSettings.eLEDTypes.Rendered) - 'For Each led As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - ' led.Value.Visible = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered) - 'Next - 'For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - ' leddisplay.Value.Visible = (B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7) - 'Next - 'chkWireframe.Enabled = chkUseDream7.Checked - 'chkBulbs.Enabled = chkUseDream7.Checked - 'btnGlow.Enabled = chkUseDream7.Checked - 'End Sub - Private Sub chkWireframe_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkWireframe.CheckedChanged - Static wireframe As Boolean = False - wireframe = Not wireframe - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.WireFrame = wireframe - Next - End Sub - Private Sub chkBulbs_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkBulbs.CheckedChanged - isSettingsScreenDirty = True - B2SSettings.IsGlowBulbOn = chkBulbs.Checked - Static bulbsizeF As SizeF = SizeF.Empty - bulbsizeF = If(bulbsizeF.Equals(SizeF.Empty), New SizeF(0.1, 0.4), SizeF.Empty) - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.BulbSize = bulbsizeF - Next - End Sub - Private Sub cmbGlowing_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbGlowing.SelectedIndexChanged - isSettingsScreenDirty = True - B2SSettings.GlowIndex = cmbGlowing.SelectedIndex - Dim glow As Integer = B2SSettings.GlowIndex * 8 - If glow = 32 Then glow = B2SSettings.DefaultGlow - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Glow = glow - Next - If B2SSettings.GlowIndex = cmbGlowing.Items.Count - 1 Then B2SSettings.GlowIndex = -1 - End Sub - - Private Sub numLampsSkipFrames_ValueChanged(sender As System.Object, e As System.EventArgs) Handles numLampsSkipFrames.ValueChanged - isSettingsScreenDirty = True - B2SSettings.LampsSkipFrames = numLampsSkipFrames.Value - End Sub - Private Sub numSolenoidSkipFrames_ValueChanged(sender As System.Object, e As System.EventArgs) Handles numSolenoidsSkipFrames.ValueChanged - isSettingsScreenDirty = True - B2SSettings.SolenoidsSkipFrames = numSolenoidsSkipFrames.Value - End Sub - Private Sub numGISkipFrames_ValueChanged(sender As System.Object, e As System.EventArgs) Handles numGISkipFrames.ValueChanged - isSettingsScreenDirty = True - B2SSettings.GIStringsSkipFrames = numGISkipFrames.Value - End Sub - Private Sub numLEDSkipFrames_ValueChanged(sender As System.Object, e As System.EventArgs) Handles numLEDSkipFrames.ValueChanged - isSettingsScreenDirty = True - B2SSettings.LEDsSkipFrames = numLEDSkipFrames.Value - End Sub - - Private ignoreChanges As Boolean = False - Private Sub cmbAnimations_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbAnimations.SelectedIndexChanged - If ignoreChanges Then Return - If cmbAnimations.SelectedItem IsNot Nothing Then - ignoreChanges = True - Dim slowdown As Integer = DirectCast(cmbAnimations.SelectedItem, Animations4Settings).SlowDown - If slowdown = 0 Then - cmbAnimationSetting.SelectedIndex = cmbAnimationSetting.Items.Count - 1 - ElseIf slowdown >= 1 AndAlso slowdown <= 5 Then - cmbAnimationSetting.SelectedIndex = slowdown - 1 - ElseIf slowdown = 10 Then - cmbAnimationSetting.SelectedIndex = 5 - End If - cmbAnimationSetting.Enabled = Not (B2SSettings.AllAnimationSlowDown <> 1 AndAlso cmbAnimations.SelectedIndex < cmbAnimations.Items.Count - 1) - ignoreChanges = False - End If - End Sub - Private Sub cmbAnimationSetting_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbAnimationSetting.SelectedIndexChanged - If ignoreChanges Then Return - If cmbAnimations.SelectedItem IsNot Nothing Then - Dim name As String = DirectCast(cmbAnimations.SelectedItem, Animations4Settings).Name - Dim slowdown As Integer = DirectCast(cmbAnimations.SelectedItem, Animations4Settings).SlowDown - If cmbAnimationSetting.Text = "Off" Then - slowdown = 0 - Else - slowdown = CInt(cmbAnimationSetting.Text.Replace(" x", "")) - End If - Dim index As Integer = cmbAnimations.SelectedIndex - ignoreChanges = True - cmbAnimations.Items.RemoveAt(index) - cmbAnimations.Items.Insert(index, New Animations4Settings(name, slowdown)) - cmbAnimations.SelectedIndex = index - If cmbAnimations.SelectedIndex < cmbAnimations.Items.Count - 1 Then - B2SAnimation.AnimationSlowDown(name) = slowdown - Else - B2SSettings.AllAnimationSlowDown = slowdown - End If - ignoreChanges = False - End If - End Sub - - Private Sub btnScreenshotPath_Click(sender As System.Object, e As System.EventArgs) Handles btnScreenshotPath.Click - Using fbd As FolderBrowserDialog = New FolderBrowserDialog() - fbd.SelectedPath = B2SSettings.ScreenshotPath - If fbd.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then - isSettingsScreenDirty = True - B2SSettings.ScreenshotPath = fbd.SelectedPath - btnScreenshotPath.Text = "Screenshot path: " & B2SSettings.ScreenshotPath - End If - End Using - End Sub - Private Sub cmbScreenshotType_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbScreenshotType.SelectedIndexChanged - isSettingsScreenDirty = True - B2SSettings.ScreenshotFileType = cmbScreenshotType.SelectedIndex - End Sub - - Private Sub chkActivatePlugins_CheckedChanged(sender As Object, e As EventArgs) Handles chkActivatePlugins.CheckedChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - B2SSettings.ArePluginsOn = chkActivatePlugins.Checked - End Sub - Private Sub chkShowStartupError_CheckedChanged(sender As Object, e As EventArgs) Handles chkShowStartupError.CheckedChanged - isSettingsScreenDirty = True - B2SSettings.ShowStartupError = chkShowStartupError.Checked - End Sub - Private Sub btnPluginSettings_Click(sender As Object, e As EventArgs) Handles btnPluginSettings.Click - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - With Me 'B2SScreen.BackglassScreen.Bounds - regkey.SetValue("PluginsScreen", .Location.X & "," & .Location.Y & "," & .Size.Width & "," & .Size.Height) - End With - regkey.SetValue("PluginsOpenDialog", 1) - End Using - End Sub - - Private Function IsDirty() As Boolean - Dim ret As Boolean = False - If isSettingsScreenDirty Then - Dim result As DialogResult = MessageBox.Show(My.Resources.MSG_IsDirty, My.Resources.AppTitle, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) - If result = Windows.Forms.DialogResult.Yes Then - btnSaveSettings.PerformClick() - ElseIf result = Windows.Forms.DialogResult.Cancel Then - ret = True - End If - End If - Return ret - End Function - - Private Sub cmbFormFront_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFormFront.SelectedIndexChanged - B2SSettings.FormToBack = False - B2SSettings.FormToFront = False - - If cmbFormFront.SelectedIndex = 0 Then - B2SSettings.FormToBack = True - ElseIf cmbFormFront.SelectedIndex = 2 Then - B2SSettings.FormToFront = True - End If - End Sub - - Private Sub chkDisableFuzzyMatching_CheckedChanged(sender As Object, e As EventArgs) Handles chkDisableFuzzyMatching.CheckedChanged - B2SSettings.DisableFuzzyMatching = chkDisableFuzzyMatching.Checked - End Sub - - Private Sub chkFormNoFocus_CheckedChanged(sender As Object, e As EventArgs) Handles chkFormNoFocus.CheckedChanged - B2SSettings.FormNoFocus = chkFormNoFocus.Checked - End Sub - - Private Sub btnEditScreenRes_Click(sender As Object, e As EventArgs) Handles btnEditScreenRes.Click - Dim p As Process = New Process() - Dim pi As ProcessStartInfo = New ProcessStartInfo() - Dim B2S_Identifier As String = IO.Path.Combine(Application.StartupPath, "B2S_ScreenResIdentifier.exe") - - If IO.File.Exists(B2S_Identifier) Then - pi.Arguments = """" & B2SData.TableFileName & ".res" & """" - pi.FileName = B2S_Identifier - - p.StartInfo = pi - - Me.Visible = False - p.Start() - p.WaitForExit() - Me.Visible = True - - End If - End Sub - - Private Sub cmbSmall_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbBackground.SelectedIndexChanged - activateMsgBoxAtSaving = True - isSettingsScreenDirty = True - If cmbBackground.SelectedIndex = 2 Then - B2SSettings.StartBackground = Nothing - Else - B2SSettings.StartBackground = (cmbBackground.SelectedIndex = 0) - End If - End Sub - - Private Sub B2SLogo_Click(sender As Object, e As EventArgs) Handles B2SLogo.Click - B2SLogoToolTip.SetToolTip(B2SLogo, "Settings: " & B2SSettings.SettingFilePath & vbCrLf & "ScreenRes: " & B2SSettings.LoadedResFilePath & vbCrLf & "PluginPath: " & B2SSettings.PluginsFilePath) - End Sub - -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.Designer.vb deleted file mode 100644 index 03e48fc..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.Designer.vb +++ /dev/null @@ -1,325 +0,0 @@ - _ -Partial Class formSettingsMore - 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.grpLogging = New System.Windows.Forms.GroupBox() - Me.chkStatisticBackglass = New System.Windows.Forms.CheckBox() - Me.chkLogLEDs = New System.Windows.Forms.CheckBox() - Me.btnLogPath = New System.Windows.Forms.Button() - Me.chkLogSolenoids = New System.Windows.Forms.CheckBox() - Me.chkLogGIStrings = New System.Windows.Forms.CheckBox() - Me.chkLogLamps = New System.Windows.Forms.CheckBox() - Me.grpPerfTests = New System.Windows.Forms.GroupBox() - Me.chkAllOut = New System.Windows.Forms.CheckBox() - Me.chkAllOff = New System.Windows.Forms.CheckBox() - Me.chkLampsOff = New System.Windows.Forms.CheckBox() - Me.chkSolenoidsOff = New System.Windows.Forms.CheckBox() - Me.chkGIStringsOff = New System.Windows.Forms.CheckBox() - Me.chkLEDsOff = New System.Windows.Forms.CheckBox() - Me.btnCloseSettings = New System.Windows.Forms.Button() - Me.GroupRegistrySettings = New System.Windows.Forms.GroupBox() - Me.ChkB2SDebugLog = New System.Windows.Forms.CheckBox() - Me.ChkB2STableSettingsExtendedPath = New System.Windows.Forms.CheckBox() - Me.lblB2SScreenResFileNameOverride = New System.Windows.Forms.Label() - Me.TxtB2SScreenResFileNameOverride = New System.Windows.Forms.TextBox() - Me.ChkB2SWindowPunchActive = New System.Windows.Forms.CheckBox() - Me.grpLogging.SuspendLayout() - Me.grpPerfTests.SuspendLayout() - Me.GroupRegistrySettings.SuspendLayout() - Me.SuspendLayout() - ' - 'grpLogging - ' - Me.grpLogging.Controls.Add(Me.chkStatisticBackglass) - Me.grpLogging.Controls.Add(Me.chkLogLEDs) - Me.grpLogging.Controls.Add(Me.btnLogPath) - Me.grpLogging.Controls.Add(Me.chkLogSolenoids) - Me.grpLogging.Controls.Add(Me.chkLogGIStrings) - Me.grpLogging.Controls.Add(Me.chkLogLamps) - Me.grpLogging.Location = New System.Drawing.Point(8, 95) - Me.grpLogging.Name = "grpLogging" - Me.grpLogging.Size = New System.Drawing.Size(524, 84) - Me.grpLogging.TabIndex = 10 - Me.grpLogging.TabStop = False - Me.grpLogging.Text = "Logging" - ' - 'chkStatisticBackglass - ' - Me.chkStatisticBackglass.AutoSize = True - Me.chkStatisticBackglass.Location = New System.Drawing.Point(217, 25) - Me.chkStatisticBackglass.Name = "chkStatisticBackglass" - Me.chkStatisticBackglass.Size = New System.Drawing.Size(203, 17) - Me.chkStatisticBackglass.TabIndex = 27 - Me.chkStatisticBackglass.Text = "Show statistics backglass after restart" - Me.chkStatisticBackglass.UseVisualStyleBackColor = True - ' - 'chkLogLEDs - ' - Me.chkLogLEDs.AutoSize = True - Me.chkLogLEDs.Location = New System.Drawing.Point(411, 54) - Me.chkLogLEDs.Name = "chkLogLEDs" - Me.chkLogLEDs.Size = New System.Drawing.Size(73, 17) - Me.chkLogLEDs.TabIndex = 31 - Me.chkLogLEDs.Text = "Log LEDs" - Me.chkLogLEDs.UseVisualStyleBackColor = True - ' - 'btnLogPath - ' - Me.btnLogPath.Location = New System.Drawing.Point(8, 20) - Me.btnLogPath.Name = "btnLogPath" - Me.btnLogPath.Size = New System.Drawing.Size(150, 24) - Me.btnLogPath.TabIndex = 26 - Me.btnLogPath.Text = "Log path" - Me.btnLogPath.UseVisualStyleBackColor = True - ' - 'chkLogSolenoids - ' - Me.chkLogSolenoids.AutoSize = True - Me.chkLogSolenoids.Location = New System.Drawing.Point(131, 54) - Me.chkLogSolenoids.Name = "chkLogSolenoids" - Me.chkLogSolenoids.Size = New System.Drawing.Size(91, 17) - Me.chkLogSolenoids.TabIndex = 29 - Me.chkLogSolenoids.Text = "Log solenoids" - Me.chkLogSolenoids.UseVisualStyleBackColor = True - ' - 'chkLogGIStrings - ' - Me.chkLogGIStrings.AutoSize = True - Me.chkLogGIStrings.Location = New System.Drawing.Point(271, 54) - Me.chkLogGIStrings.Name = "chkLogGIStrings" - Me.chkLogGIStrings.Size = New System.Drawing.Size(91, 17) - Me.chkLogGIStrings.TabIndex = 30 - Me.chkLogGIStrings.Text = "Log GI strings" - Me.chkLogGIStrings.UseVisualStyleBackColor = True - ' - 'chkLogLamps - ' - Me.chkLogLamps.AutoSize = True - Me.chkLogLamps.Location = New System.Drawing.Point(8, 54) - Me.chkLogLamps.Name = "chkLogLamps" - Me.chkLogLamps.Size = New System.Drawing.Size(74, 17) - Me.chkLogLamps.TabIndex = 28 - Me.chkLogLamps.Text = "Log lamps" - Me.chkLogLamps.UseVisualStyleBackColor = True - ' - 'grpPerfTests - ' - Me.grpPerfTests.Controls.Add(Me.chkAllOut) - Me.grpPerfTests.Controls.Add(Me.chkAllOff) - Me.grpPerfTests.Controls.Add(Me.chkLampsOff) - Me.grpPerfTests.Controls.Add(Me.chkSolenoidsOff) - Me.grpPerfTests.Controls.Add(Me.chkGIStringsOff) - Me.grpPerfTests.Controls.Add(Me.chkLEDsOff) - Me.grpPerfTests.Location = New System.Drawing.Point(8, 7) - Me.grpPerfTests.Name = "grpPerfTests" - Me.grpPerfTests.Size = New System.Drawing.Size(524, 85) - Me.grpPerfTests.TabIndex = 9 - Me.grpPerfTests.TabStop = False - Me.grpPerfTests.Text = "Performance tests" - ' - 'chkAllOut - ' - Me.chkAllOut.Appearance = System.Windows.Forms.Appearance.Button - Me.chkAllOut.Location = New System.Drawing.Point(6, 20) - Me.chkAllOut.Name = "chkAllOut" - Me.chkAllOut.Size = New System.Drawing.Size(163, 24) - Me.chkAllOut.TabIndex = 20 - Me.chkAllOut.Text = "All off and &out" - Me.chkAllOut.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkAllOut.UseVisualStyleBackColor = True - ' - 'chkAllOff - ' - Me.chkAllOff.Appearance = System.Windows.Forms.Appearance.Button - Me.chkAllOff.Location = New System.Drawing.Point(353, 19) - Me.chkAllOff.Name = "chkAllOff" - Me.chkAllOff.Size = New System.Drawing.Size(163, 24) - Me.chkAllOff.TabIndex = 21 - Me.chkAllOff.Text = "&All off" - Me.chkAllOff.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkAllOff.UseVisualStyleBackColor = True - ' - 'chkLampsOff - ' - Me.chkLampsOff.Appearance = System.Windows.Forms.Appearance.Button - Me.chkLampsOff.Location = New System.Drawing.Point(6, 50) - Me.chkLampsOff.Name = "chkLampsOff" - Me.chkLampsOff.Size = New System.Drawing.Size(111, 24) - Me.chkLampsOff.TabIndex = 22 - Me.chkLampsOff.Text = "&Lamps off" - Me.chkLampsOff.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkLampsOff.UseVisualStyleBackColor = True - ' - 'chkSolenoidsOff - ' - Me.chkSolenoidsOff.Appearance = System.Windows.Forms.Appearance.Button - Me.chkSolenoidsOff.Location = New System.Drawing.Point(139, 50) - Me.chkSolenoidsOff.Name = "chkSolenoidsOff" - Me.chkSolenoidsOff.Size = New System.Drawing.Size(111, 24) - Me.chkSolenoidsOff.TabIndex = 23 - Me.chkSolenoidsOff.Text = "&Solenoids off" - Me.chkSolenoidsOff.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkSolenoidsOff.UseVisualStyleBackColor = True - ' - 'chkGIStringsOff - ' - Me.chkGIStringsOff.Appearance = System.Windows.Forms.Appearance.Button - Me.chkGIStringsOff.Location = New System.Drawing.Point(272, 50) - Me.chkGIStringsOff.Name = "chkGIStringsOff" - Me.chkGIStringsOff.Size = New System.Drawing.Size(111, 24) - Me.chkGIStringsOff.TabIndex = 24 - Me.chkGIStringsOff.Text = "&GI strings off" - Me.chkGIStringsOff.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkGIStringsOff.UseVisualStyleBackColor = True - ' - 'chkLEDsOff - ' - Me.chkLEDsOff.Appearance = System.Windows.Forms.Appearance.Button - Me.chkLEDsOff.Location = New System.Drawing.Point(405, 50) - Me.chkLEDsOff.Name = "chkLEDsOff" - Me.chkLEDsOff.Size = New System.Drawing.Size(111, 24) - Me.chkLEDsOff.TabIndex = 25 - Me.chkLEDsOff.Text = "L&EDs off" - Me.chkLEDsOff.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.chkLEDsOff.UseVisualStyleBackColor = True - ' - 'btnCloseSettings - ' - Me.btnCloseSettings.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnCloseSettings.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.btnCloseSettings.Location = New System.Drawing.Point(440, 299) - Me.btnCloseSettings.Name = "btnCloseSettings" - Me.btnCloseSettings.Size = New System.Drawing.Size(92, 24) - Me.btnCloseSettings.TabIndex = 35 - Me.btnCloseSettings.Text = "Close" - Me.btnCloseSettings.UseVisualStyleBackColor = True - ' - 'GroupRegistrySettings - ' - Me.GroupRegistrySettings.Controls.Add(Me.ChkB2SDebugLog) - Me.GroupRegistrySettings.Controls.Add(Me.ChkB2STableSettingsExtendedPath) - Me.GroupRegistrySettings.Controls.Add(Me.lblB2SScreenResFileNameOverride) - Me.GroupRegistrySettings.Controls.Add(Me.TxtB2SScreenResFileNameOverride) - Me.GroupRegistrySettings.Controls.Add(Me.ChkB2SWindowPunchActive) - Me.GroupRegistrySettings.Location = New System.Drawing.Point(8, 185) - Me.GroupRegistrySettings.Name = "GroupRegistrySettings" - Me.GroupRegistrySettings.Size = New System.Drawing.Size(524, 110) - Me.GroupRegistrySettings.TabIndex = 32 - Me.GroupRegistrySettings.TabStop = False - Me.GroupRegistrySettings.Text = "Registry settings (HKCU\Software\B2S)" - ' - 'ChkB2SDebugLog - ' - Me.ChkB2SDebugLog.AutoSize = True - Me.ChkB2SDebugLog.Location = New System.Drawing.Point(392, 31) - Me.ChkB2SDebugLog.Name = "ChkB2SDebugLog" - Me.ChkB2SDebugLog.Size = New System.Drawing.Size(96, 17) - Me.ChkB2SDebugLog.TabIndex = 36 - Me.ChkB2SDebugLog.Text = "B2SDebugLog" - Me.ChkB2SDebugLog.UseVisualStyleBackColor = True - ' - 'ChkB2STableSettingsExtendedPath - ' - Me.ChkB2STableSettingsExtendedPath.AutoSize = True - Me.ChkB2STableSettingsExtendedPath.Location = New System.Drawing.Point(186, 31) - Me.ChkB2STableSettingsExtendedPath.Name = "ChkB2STableSettingsExtendedPath" - Me.ChkB2STableSettingsExtendedPath.Size = New System.Drawing.Size(178, 17) - Me.ChkB2STableSettingsExtendedPath.TabIndex = 35 - Me.ChkB2STableSettingsExtendedPath.Text = "B2STableSettingsExtendedPath" - Me.ChkB2STableSettingsExtendedPath.UseVisualStyleBackColor = True - ' - 'lblB2SScreenResFileNameOverride - ' - Me.lblB2SScreenResFileNameOverride.AutoSize = True - Me.lblB2SScreenResFileNameOverride.Location = New System.Drawing.Point(8, 63) - Me.lblB2SScreenResFileNameOverride.Name = "lblB2SScreenResFileNameOverride" - Me.lblB2SScreenResFileNameOverride.Size = New System.Drawing.Size(164, 13) - Me.lblB2SScreenResFileNameOverride.TabIndex = 34 - Me.lblB2SScreenResFileNameOverride.Text = "B2SScreenResFileNameOverride" - ' - 'TxtB2SScreenResFileNameOverride - ' - Me.TxtB2SScreenResFileNameOverride.Location = New System.Drawing.Point(187, 60) - Me.TxtB2SScreenResFileNameOverride.Name = "TxtB2SScreenResFileNameOverride" - Me.TxtB2SScreenResFileNameOverride.Size = New System.Drawing.Size(93, 20) - Me.TxtB2SScreenResFileNameOverride.TabIndex = 33 - Me.TxtB2SScreenResFileNameOverride.TabStop = False - Me.TxtB2SScreenResFileNameOverride.WordWrap = False - ' - 'ChkB2SWindowPunchActive - ' - Me.ChkB2SWindowPunchActive.AutoSize = True - Me.ChkB2SWindowPunchActive.Location = New System.Drawing.Point(12, 31) - Me.ChkB2SWindowPunchActive.Name = "ChkB2SWindowPunchActive" - Me.ChkB2SWindowPunchActive.Size = New System.Drawing.Size(146, 17) - Me.ChkB2SWindowPunchActive.TabIndex = 32 - Me.ChkB2SWindowPunchActive.Text = "B2SWindowPunchActive" - Me.ChkB2SWindowPunchActive.UseVisualStyleBackColor = True - ' - 'formSettingsMore - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.ClientSize = New System.Drawing.Size(539, 331) - Me.Controls.Add(Me.GroupRegistrySettings) - Me.Controls.Add(Me.btnCloseSettings) - Me.Controls.Add(Me.grpLogging) - Me.Controls.Add(Me.grpPerfTests) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow - Me.KeyPreview = True - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "formSettingsMore" - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen - Me.Text = "More backglass settings ..." - Me.TopMost = True - Me.grpLogging.ResumeLayout(False) - Me.grpLogging.PerformLayout() - Me.grpPerfTests.ResumeLayout(False) - Me.GroupRegistrySettings.ResumeLayout(False) - Me.GroupRegistrySettings.PerformLayout() - Me.ResumeLayout(False) - - End Sub - Friend WithEvents grpLogging As System.Windows.Forms.GroupBox - Friend WithEvents chkStatisticBackglass As System.Windows.Forms.CheckBox - Friend WithEvents chkLogLEDs As System.Windows.Forms.CheckBox - Friend WithEvents btnLogPath As System.Windows.Forms.Button - Friend WithEvents chkLogSolenoids As System.Windows.Forms.CheckBox - Friend WithEvents chkLogGIStrings As System.Windows.Forms.CheckBox - Friend WithEvents chkLogLamps As System.Windows.Forms.CheckBox - Friend WithEvents grpPerfTests As System.Windows.Forms.GroupBox - Friend WithEvents chkAllOut As System.Windows.Forms.CheckBox - Friend WithEvents chkAllOff As System.Windows.Forms.CheckBox - Friend WithEvents chkLampsOff As System.Windows.Forms.CheckBox - Friend WithEvents chkSolenoidsOff As System.Windows.Forms.CheckBox - Friend WithEvents chkGIStringsOff As System.Windows.Forms.CheckBox - Friend WithEvents chkLEDsOff As System.Windows.Forms.CheckBox - Friend WithEvents btnCloseSettings As System.Windows.Forms.Button - Friend WithEvents GroupRegistrySettings As Windows.Forms.GroupBox - Friend WithEvents ChkB2SWindowPunchActive As Windows.Forms.CheckBox - Friend WithEvents TxtB2SScreenResFileNameOverride As Windows.Forms.TextBox - Friend WithEvents lblB2SScreenResFileNameOverride As Windows.Forms.Label - Friend WithEvents ChkB2STableSettingsExtendedPath As Windows.Forms.CheckBox - Friend WithEvents ChkB2SDebugLog As Windows.Forms.CheckBox -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.vb deleted file mode 100644 index f4b30ce..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Forms/formSettingsMore.vb +++ /dev/null @@ -1,134 +0,0 @@ -Imports System -Imports System.Windows.Forms -Imports Microsoft.Win32 - -Public Class formSettingsMore - - Private formSettings As formSettings = Nothing - Private formBackglass As formBackglass = Nothing - - Public Sub New(ByVal _formSettings As formSettings, ByVal _formbackglass As formBackglass) - - ' This call is required by the designer. - InitializeComponent() - - ' Add any initialization after the InitializeComponent() call. - Me.formSettings = _formSettings - Me.formBackglass = _formbackglass - TxtB2SScreenResFileNameOverride.Text = B2SSettings.SafeReadRegistry("Software\B2S", "B2SScreenResFileNameOverride", B2SSettings.B2SScreenResFileName) - ChkB2STableSettingsExtendedPath.Checked = B2SSettings.B2STableSettingsExtendedPath - ChkB2SWindowPunchActive.Checked = B2SSettings.B2SWindowPunchActive - End Sub - - Public Shadows Function ShowDialog(ByVal owner As IWin32Window, - ByVal _formbackglass As formBackglass) As DialogResult - - Me.formSettings = owner - Me.formBackglass = _formbackglass - - Dim ret As DialogResult = MyBase.ShowDialog(owner) - Return Windows.Forms.DialogResult.OK - - End Function - - Private Sub formSettings_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp - If e.KeyCode = Keys.Escape Then - btnCloseSettings.PerformClick() - End If - End Sub - - Private Sub btnCloseSettings_Click(sender As System.Object, e As System.EventArgs) Handles btnCloseSettings.Click - Me.Close() - End Sub - - Private Sub chkAllOut_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkAllOut.CheckedChanged - B2SSettings.AllOut = chkAllOut.Checked - chkAllOff.Checked = chkAllOut.Checked - formBackglass.BackgroundImage = formBackglass.DarkImage - Me.Invalidate() - End Sub - Private Sub chkAllOff_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkAllOff.CheckedChanged - B2SSettings.AllOff = chkAllOff.Checked - chkLampsOff.Checked = chkAllOff.Checked - chkSolenoidsOff.Checked = chkAllOff.Checked - chkGIStringsOff.Checked = chkAllOff.Checked - chkLEDsOff.Checked = chkAllOff.Checked - End Sub - Private Sub chkLampsOff_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkLampsOff.CheckedChanged - B2SSettings.LampsOff = chkLampsOff.Checked - End Sub - Private Sub chkSolenoidsOff_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkSolenoidsOff.CheckedChanged - B2SSettings.SolenoidsOff = chkSolenoidsOff.Checked - End Sub - Private Sub chkGIStringsOff_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkGIStringsOff.CheckedChanged - B2SSettings.GIStringsOff = chkGIStringsOff.Checked - End Sub - Private Sub chkLEDsOff_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkLEDsOff.CheckedChanged - B2SSettings.LEDsOff = chkLEDsOff.Checked - For Each leddisplay As KeyValuePair(Of String, Dream7Display) In B2SData.LEDDisplays - leddisplay.Value.Visible = Not B2SSettings.LEDsOff AndAlso B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7 - Next - For Each leds As KeyValuePair(Of String, B2SLEDBox) In B2SData.LEDs - leds.Value.Visible = Not B2SSettings.LEDsOff AndAlso B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered - Next - End Sub - - Private Sub btnLogPath_Click(sender As System.Object, e As System.EventArgs) Handles btnLogPath.Click - Using fbd As FolderBrowserDialog = New FolderBrowserDialog() - fbd.SelectedPath = B2SSettings.LogPath - If fbd.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then - formSettings.isSettingsScreenDirty = True - B2SSettings.LogPath = fbd.SelectedPath - btnLogPath.Text = "Log path: " & B2SSettings.LogPath - End If - End Using - End Sub - Private Sub chkLogLamps_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkLogLamps.CheckedChanged - formSettings.isSettingsScreenDirty = True - B2SSettings.IsLampsStateLogOn = chkLogLamps.Checked - End Sub - Private Sub chlLogSolenoids_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkLogSolenoids.CheckedChanged - formSettings.isSettingsScreenDirty = True - B2SSettings.IsSolenoidsStateLogOn = chkLogSolenoids.Checked - End Sub - Private Sub chkLogGIStrings_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkLogGIStrings.CheckedChanged - formSettings.isSettingsScreenDirty = True - B2SSettings.IsGIStringsStateLogOn = chkLogGIStrings.Checked - End Sub - Private Sub chkLogLEDs_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkLogLEDs.CheckedChanged - formSettings.isSettingsScreenDirty = True - B2SSettings.IsLEDsStateLogOn = chkLogLEDs.Checked - End Sub - Private Sub chkStatisticBackglass_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkStatisticBackglass.CheckedChanged - formSettings.activateMsgBoxAtSaving = True - formSettings.isSettingsScreenDirty = True - B2SSettings.IsStatisticsBackglassOn = chkStatisticBackglass.Checked - End Sub - - Private Sub TxtB2SScreenResFileNameOverride_TextChanged(sender As Object, e As EventArgs) Handles TxtB2SScreenResFileNameOverride.TextChanged - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SScreenResFileNameOverride", TxtB2SScreenResFileNameOverride.Text) - End Using - End Sub - - Private Sub ChkB2STableSettingsExtendedPath_CheckedChanged(sender As Object, e As EventArgs) Handles ChkB2STableSettingsExtendedPath.CheckedChanged - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2STableSettingsExtendedPath", If(ChkB2STableSettingsExtendedPath.Checked, "1", "0")) - B2SSettings.B2STableSettingsExtendedPath = ChkB2STableSettingsExtendedPath.Checked - End Using - End Sub - - Private Sub chkB2SWindowPunchActive_CheckedChanged(sender As Object, e As EventArgs) Handles ChkB2SWindowPunchActive.CheckedChanged - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SWindowPunchActive", If(ChkB2SWindowPunchActive.Checked, "1", "0")) - B2SSettings.B2SWindowPunchActive = ChkB2SWindowPunchActive.Checked - End Using - End Sub - - Private Sub ChkB2SDebugLog_CheckedChanged(sender As Object, e As EventArgs) Handles ChkB2SDebugLog.CheckedChanged - Using regkey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\B2S", True) - regkey.SetValue("B2SDebugLog", If(ChkB2SDebugLog.Checked, "1", "0")) - B2SSettings.B2SDebugLog = ChkB2SDebugLog.Checked - End Using - End Sub -End Class \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Log.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Log.vb deleted file mode 100644 index 5d256a6..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Log.vb +++ /dev/null @@ -1,35 +0,0 @@ -Imports System - -Public Class Log - - Private writeLog As Boolean = False - - Private filename As String = String.Empty - - Public Sub New(ByVal _filename As String) - filename = _filename & ".txt" - End Sub - - Public Property IsLogOn() As Boolean - Get - Return writeLog - End Get - Set(value As Boolean) - writeLog = value - End Set - End Property - - Public Property LogPath() As String = B2SSettings.LogPath - - Public Sub WriteLogEntry(ByVal text As String) - If writeLog AndAlso Not String.IsNullOrEmpty(LogPath) Then - ' write to log file - On Error Resume Next - Dim log As IO.StreamWriter = New IO.StreamWriter(IO.Path.Combine(LogPath, filename), True) - log.WriteLine(text) - log.Flush() - log.Close() - End If - End Sub - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Statistics.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Statistics.vb deleted file mode 100644 index 9f134e0..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Logging/Statistics.vb +++ /dev/null @@ -1,144 +0,0 @@ -Imports System -Imports System.Text - -Public Class Statistics - - Private Const cMinTicks4CoolDown As Integer = 150 - Private Const cMinTicks4GoodCalculation As Integer = 500 - Private Const cMinTicks4Chillout As Integer = 18 - Private Const cMaxTicks4BadChillout1 As Integer = 12 - Private Const cMaxTicks4BadChillout2 As Integer = 8 - Private Const cMaxTicks4BadChillout3 As Integer = 4 - Private Const cMaxTicks4BadChillout4 As Integer = 2 - - Private log As Log = Nothing - - Private lastTick As Date = Nothing - Private counter As Integer = 0 - Private sum As Integer = 0 - Private average As Single = 0 - Private chiller As Integer = 0 - Private waitonechill As Integer = 0 - - Private sb As StringBuilder = New StringBuilder() - - Public Sub New(ByRef _log As Log) - log = _log - End Sub - - Public Function AddTick(ByVal currentCoolDownCounter As Integer, ByVal info As String) As Integer - - Dim ret As Integer = 0 - - Dim nowTick As Date = DateTime.Now - Dim diff As Integer = (nowTick - lastTick).Milliseconds - lastTick = nowTick - - ' calc average tick duration - If counter < cMinTicks4GoodCalculation Then - counter += 1 - sum += diff - average = sum / counter - End If - - ' calc cool down level - Dim chiller4logfile As Integer = chiller - If counter > cMinTicks4CoolDown Then - If currentCoolDownCounter <= 0 Then chiller += 1 - Dim cooldownfactor As Single = diff / average - If cooldownfactor > 3 Then - ret = 8 - chiller = 0 - ElseIf cooldownfactor >= 2 Then - ret = 6 - chiller = 0 - ElseIf cooldownfactor >= 1.5 Then - ' mode 5 - If chiller <= 12 Then - waitonechill += 1 - If waitonechill > 1 Then - ret = Math.Round((12 - chiller) / 2) + 2 - If ret >= 5 Then ret += 1 - Else - ret = 1 - End If - - ' mode 4 - 'If chiller <= 14 Then - ' waitonechill += 1 - ' If waitonechill > 1 Then - ' ret = Math.Round((14 - chiller) / 2) + 2 - ' If ret >= 6 Then ret += 1 - ' If ret >= 9 Then ret += 1 - ' Else - ' ret = 1 - ' End If - - ' mode 3 - 'If chiller <= 16 Then - 'If currentCoolDownCounter > 0 Then - ' If currentCoolDownCounter < 3 Then - ' ret = currentCoolDownCounter + 6 - ' Else - ' ret = currentCoolDownCounter + 3 - ' End If - 'Else - ' ret = Math.Round((16 - chiller) / 2) + 2 - 'End If - - ' mode 2 - 'If chiller <= 16 Then - 'ret = Math.Round((16 - chiller) / 2) + 1 - - ' mode 1 - 'If chiller < cMaxTicks4BadChillout4 Then - ' ret = 6 - 'ElseIf chiller < cMaxTicks4BadChillout3 Then - ' ret = 5 - 'ElseIf chiller < cMaxTicks4BadChillout2 Then - ' ret = 4 - 'ElseIf chiller < cMaxTicks4BadChillout1 Then - ' ret = 3 - 'ElseIf chiller < cMinTicks4Chillout Then - ' ret = 1 - Else - waitonechill = 0 - ret = 0 - End If - chiller = 0 - End If - If currentCoolDownCounter > ret Then - ret = currentCoolDownCounter - End If - End If - - ' maybe write log entry - If log IsNot Nothing AndAlso log.IsLogOn Then - sb.Length = 0 - sb.Append(nowTick) - sb.Append(": ") - sb.Append(diff) - sb.Append(" , ") - sb.Append(average) - sb.Append(" , ") - If Not String.IsNullOrEmpty(info) Then - sb.Append(info) - End If - If counter > cMinTicks4CoolDown Then - If ret > 0 Then - sb.Append(" , ") - sb.Append("CoolDown: " & ret) - End If - If chiller4logfile > 0 Then - sb.Append(" , ") - sb.Append("Chiller: " & chiller4logfile) - End If - End If - log.WriteLogEntry(sb.ToString()) - End If - - Return ret - - End Function - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.Designer.vb deleted file mode 100644 index db8b8b3..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.Designer.vb +++ /dev/null @@ -1,13 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.myapp b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.myapp deleted file mode 100644 index 0167050..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Application.myapp +++ /dev/null @@ -1,10 +0,0 @@ - - - false - false - 0 - true - 0 - 1 - true - diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/AssemblyInfo.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/AssemblyInfo.vb deleted file mode 100644 index 5c728d1..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,36 +0,0 @@ -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/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.Designer.vb deleted file mode 100644 index 423db2d..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.Designer.vb +++ /dev/null @@ -1,108 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - -Imports System - -Namespace My.Resources - - 'This class was auto-generated by the StronglyTypedResourceBuilder - 'class via a tool like ResGen or Visual Studio. - 'To add or remove a member, edit your .ResX file then rerun ResGen - 'with the /str option, or rebuild your VS project. - ''' - ''' A strongly-typed resource class, for looking up localized strings, etc. - ''' - _ - Friend Module Resources - - Private resourceMan As Global.System.Resources.ResourceManager - - Private resourceCulture As Global.System.Globalization.CultureInfo - - ''' - ''' Returns the cached ResourceManager instance used by this class. - ''' - _ - Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager - Get - If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("B2S.Resources", GetType(Resources).Assembly) - resourceMan = temp - End If - Return resourceMan - End Get - End Property - - ''' - ''' Overrides the current thread's CurrentUICulture property for all - ''' resource lookups using this strongly typed resource class. - ''' - _ - Friend Property Culture() As Global.System.Globalization.CultureInfo - Get - Return resourceCulture - End Get - Set - resourceCulture = value - End Set - End Property - - ''' - ''' Looks up a localized string similar to B2S Backglass Server. - ''' - Friend ReadOnly Property AppTitle() As String - Get - Return ResourceManager.GetString("AppTitle", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream. - ''' - Friend ReadOnly Property camera1() As System.IO.UnmanagedMemoryStream - Get - Return ResourceManager.GetStream("camera1", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream. - ''' - Friend ReadOnly Property EMReel() As System.IO.UnmanagedMemoryStream - Get - Return ResourceManager.GetStream("EMReel", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized string similar to The changes you made need a restart of the backglass.. - ''' - Friend ReadOnly Property MSG_ChangesNeedARestart() As String - Get - Return ResourceManager.GetString("MSG_ChangesNeedARestart", resourceCulture) - End Get - End Property - - ''' - ''' Looks up a localized string similar to You haven't saved your changes. Do you want to save them now?. - ''' - Friend ReadOnly Property MSG_IsDirty() As String - Get - Return ResourceManager.GetString("MSG_IsDirty", resourceCulture) - End Get - End Property - End Module -End Namespace diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.resx b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.resx deleted file mode 100644 index 03d1af6..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Resources.resx +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - B2S Backglass Server - - - - ..\Resources\camera1.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\EMReel.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - The changes you made need a restart of the backglass. - - - You haven't saved your changes. Do you want to save them now? - - \ No newline at end of file diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.Designer.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.Designer.vb deleted file mode 100644 index f8d16aa..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.Designer.vb +++ /dev/null @@ -1,73 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - -Namespace My - - _ - Partial Friend NotInheritable Class MySettings - Inherits Global.System.Configuration.ApplicationSettingsBase - - Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) - -#Region "My.Settings Auto-Save Functionality" -#If _MyType = "WindowsForms" Then - Private Shared addedHandler As Boolean - - Private Shared addedHandlerLockObject As New Object - - _ - Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) - If My.Application.SaveMySettingsOnExit Then - My.Settings.Save() - End If - End Sub -#End If -#End Region - - Public Shared ReadOnly Property [Default]() As MySettings - Get - -#If _MyType = "WindowsForms" Then - If Not addedHandler Then - SyncLock addedHandlerLockObject - If Not addedHandler Then - AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings - addedHandler = True - End If - End SyncLock - End If -#End If - Return defaultInstance - End Get - End Property - End Class -End Namespace - -Namespace My - - _ - Friend Module MySettingsProperty - - _ - Friend ReadOnly Property Settings() As Global.B2S.My.MySettings - Get - Return Global.B2S.My.MySettings.Default - End Get - End Property - End Module -End Namespace diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.settings b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.settings deleted file mode 100644 index 377f56d..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/app.manifest b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/app.manifest deleted file mode 100644 index 7f6841b..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/My Project/app.manifest +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Resources/EMReel.wav b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Resources/EMReel.wav deleted file mode 100644 index 5b92951a20d318ea334950b9325b3aaf5a8125ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15574 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

3ux)Vmd#>5bl?J(L6El882GnB9bgWnS z(huA8Gv~z8KI440{u(uK3eV5r%bpi+jqo~#$D8qKImld(&${s85Lw717=|dG+_W%F;|B40vUszN8 Ai~s-t diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Resources/camera1.wav b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Resources/camera1.wav deleted file mode 100644 index 8d1c2bb2e3e00ea063593019ddf781dc1f7873dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17158 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 NpMAm0Ui^|<{tqQAW1j#3 diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Server.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Server.vb deleted file mode 100644 index 1dda31b..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/Server.vb +++ /dev/null @@ -1,1063 +0,0 @@ -Imports System -Imports System.Text -Imports System.Runtime.InteropServices -Imports Microsoft.Win32 - - _ -Public Class Server - - Private Declare Function IsWindow Lib "user32" (ByVal hwnd As IntPtr) As Boolean - - Private formBackglass As formBackglass = Nothing - - Private timer As Windows.Forms.Timer = Nothing - - Private tableHandle As Integer = 0 - Private tableCount As Integer = 0 - - Private isChangedLampsCalled As Boolean = False - Private isChangedSolenoidsCalled As Boolean = False - Private isChangedGIStringsCalled As Boolean = False - Private isChangedLEDsCalled As Boolean = False - - -#Region "COM GUIDs" - ' GUIDs provide the COM identity for this class - Public Const ClassID As String = "09e233a3-cc79-457a-b49e-f637588891e5" - Public Const InterfaceID As String = "5693c68c-5834-466d-aaac-a86922076efd" - Public Const EventsID As String = "a48a5c0a-656c-4253-9f33-2426cc9c87b7" -#End Region - -#Region "constructor and end timer" - - Public Sub New() - - ' config main timer - timer = New Windows.Forms.Timer - AddHandler timer.Tick, AddressOf Timer_Tick - timer.Interval = 37 - - End Sub - - Private Sub Timer_Tick() - - 'timer.Stop() - - ' check whether the table is left - If tableHandle <> 0 AndAlso Not IsWindow(tableHandle) Then - Me.Stop() - End If - - ' have a look for important pollings - Static counter As Integer = 0 - Static callLamps As Boolean = False - Static callSolenoids As Boolean = False - Static callGIStrings As Boolean = False - Static callLEDs As Boolean = False - If counter <= 25 Then - counter += 1 - callLamps = Not isChangedLampsCalled AndAlso B2SData.UseRomLamps - callSolenoids = Not isChangedSolenoidsCalled AndAlso B2SData.UseRomSolenoids - callGIStrings = Not isChangedGIStringsCalled AndAlso B2SData.UseRomGIStrings - callLEDs = Not isChangedLEDsCalled AndAlso (B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels) - CheckTableHandle() - Else - If B2SSettings.IsGameNameSet Then - If callLamps Then Dim chg As Object = ChangedLamps() - If callSolenoids Then Dim chg As Object = ChangedSolenoids() - If callGIStrings Then Dim chg As Object = ChangedGIStrings() - If callLEDs Then Dim chg As Object = ChangedLEDs(&HFFFFFFFF, &HFFFFFFFF) - End If - End If - - 'timer.Start() - - End Sub - -#End Region - -#Region "Visual PinMAME COM object" - - Private _vpinmame As Object = Nothing - Private ReadOnly Property VPinMAME() As Object - Get - If _vpinmame Is Nothing Then - _vpinmame = CreateObject("VPinMAME.Controller") - End If - Return _vpinmame - End Get - End Property - -#End Region - -#Region "Visual PinMAME control" - - Public Property GameName() As String - Get - Return VPinMAME.GameName - End Get - Set(ByVal value As String) - VPinMAME.GameName = value - B2SSettings.GameName = value - End Set - End Property - Public ReadOnly Property ROMName() As String - Get - Return VPinMAME.ROMName - End Get - End Property - - Public ReadOnly Property Games(ByVal gamename As Object) As Object - Get - Return VPinMAME.Games(gamename) - End Get - End Property - - Public ReadOnly Property Running() As Boolean - Get - Return VPinMAME.Running - End Get - End Property - - Public Property Pause() As Boolean - Get - Return VPinMAME.Pause - End Get - Set(ByVal value As Boolean) - VPinMAME.Pause = value - End Set - End Property - - Public ReadOnly Property Version() As String - Get - Return VPinMAME.Version - End Get - End Property - - Public Sub Run(Optional ByVal handle As Object = 0) - tableHandle = handle - Startup() - ShowBackglassForm() - If B2SSettings.IsGameNameSet Then - VPinMAME.Run(handle) - End If - End Sub - - Public Sub [Stop]() - HideBackglassForm() - timer.Stop() - VPinMAME.Stop() - KillBackglassForm() - End Sub - -#End Region - -#Region "customization" - - Private _startBackglassEXE As Boolean = True - Public Property StartBackglassEXE() As Boolean - Get - Return _startBackglassEXE - End Get - Set(ByVal value As Boolean) - _startBackglassEXE = value - End Set - End Property - - Public Property SplashInfoLine() As String - Get - Return VPinMAME.SplashInfoLine - End Get - Set(ByVal value As String) - VPinMAME.SplashInfoLine = value - End Set - End Property - - Public Property ShowFrame() As Boolean - Get - Return VPinMAME.ShowFrame - End Get - Set(ByVal value As Boolean) - VPinMAME.ShowFrame = value - End Set - End Property - Public Property ShowTitle() As Boolean - Get - Return VPinMAME.ShowTitle - End Get - Set(ByVal value As Boolean) - VPinMAME.ShowTitle = value - End Set - End Property - Public Property ShowDMDOnly() As Boolean - Get - Return VPinMAME.ShowDMDOnly - End Get - Set(ByVal value As Boolean) - VPinMAME.ShowDMDOnly = value - End Set - End Property - Public Property ShowPinDMD() As Boolean - Get - Return VPinMAME.ShowPinDMD - End Get - Set(ByVal value As Boolean) - VPinMAME.ShowPinDMD = value - End Set - End Property - - Public Property LockDisplay() As Boolean - Get - Return VPinMAME.LockDisplay - End Get - Set(ByVal value As Boolean) - VPinMAME.LockDisplay = value - End Set - End Property - - Public Property DoubleSize() As Boolean - Get - Return VPinMAME.DoubleSize - End Get - Set(ByVal value As Boolean) - VPinMAME.DoubleSize = value - End Set - End Property - - Private _hidden As Boolean - Public Property Hidden() As Boolean - Get - Return _hidden - End Get - Set(ByVal value As Boolean) - _hidden = value - VPinMAME.hidden = True - End Set - End Property - -#End Region - -#Region "game settings" - - Public Property HandleKeyboard() As Boolean - Get - Return VPinMAME.HandleKeyboard - End Get - Set(ByVal value As Boolean) - VPinMAME.HandleKeyboard = value - End Set - End Property - - Public Property HandleMechanics() As Int16 - Get - Return VPinMAME.HandleMechanics - End Get - Set(ByVal value As Int16) - VPinMAME.HandleMechanics = value - End Set - End Property - -#End Region - -#Region "polling functions" - - Private statelogChangedLamps As Log = New Log("LampsState") - Private statelogChangedSolenoids As Log = New Log("SolenoidsState") - Private statelogChangedGIStrings As Log = New Log("GIStringsState") - Private statelogChangedLEDs As Log = New Log("LEDState") - - 'Private timelogChangedLamps As Log = New Log("Lamps") - 'Private timelogChangedSolenoids As Log = New Log("Solenoids") - - 'Private statChangedLamps As Statistics = New Statistics(timelogChangedLamps) - 'Private statChangedSolenoids As Statistics = New Statistics(timelogChangedSolenoids) - - Public ReadOnly Property ChangedLamps() As Object - Get - isChangedLampsCalled = True - Dim chg As Object = VPinMAME.ChangedLamps() - If (B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps OrElse B2SSettings.IsLampsStateLogOn) AndAlso Not B2SSettings.AllOff AndAlso Not B2SSettings.LampsOff AndAlso B2SData.IsBackglassVisible Then - CheckLamps(DirectCast(chg, Object(,))) - End If - Return chg - End Get - End Property - - Public ReadOnly Property ChangedSolenoids() As Object - Get - isChangedSolenoidsCalled = True - Dim chg As Object = VPinMAME.ChangedSolenoids() - If (B2SData.UseRomSolenoids OrElse B2SData.UseAnimationSolenoids OrElse B2SSettings.IsSolenoidsStateLogOn) AndAlso Not B2SSettings.AllOff AndAlso Not B2SSettings.SolenoidsOff AndAlso B2SData.IsBackglassVisible Then - CheckSolenoids(DirectCast(chg, Object(,))) - End If - Return chg - End Get - End Property - - Public ReadOnly Property ChangedGIStrings() As Object - Get - isChangedGIStringsCalled = True - Dim chg As Object = VPinMAME.ChangedGIStrings() - If (B2SData.UseRomGIStrings OrElse B2SData.UseAnimationGIStrings OrElse B2SSettings.IsGIStringsStateLogOn) AndAlso Not B2SSettings.AllOff AndAlso Not B2SSettings.GIStringsOff AndAlso B2SData.IsBackglassVisible Then - CheckGIStrings(DirectCast(chg, Object(,))) - End If - Return chg - End Get - End Property - - Public ReadOnly Property ChangedLEDs(ByVal mask2 As Object, ByVal mask1 As Object, Optional ByVal mask3 As Object = 0, Optional ByVal mask4 As Object = 0) As Object - Get - isChangedLEDsCalled = True - Dim chg As Object = VPinMAME.ChangedLEDs(mask2, mask1, mask3, mask4) ' (&HFFFFFFFF, &HFFFFFFFF) - If (B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels OrElse B2SSettings.IsLEDsStateLogOn) AndAlso Not B2SSettings.AllOff AndAlso Not B2SSettings.LEDsOff AndAlso B2SData.IsBackglassVisible Then - CheckLEDs(DirectCast(chg, Object(,))) - End If - Return chg - End Get - End Property - - Public ReadOnly Property NewSoundCommands() As Object - Get - Dim chg As Object = VPinMAME.NewSoundCommands() - Return chg - End Get - End Property - -#Region "private polling functions" - - Private isVisibleStateSet As Boolean = False - Private lastTopVisible As Boolean = False - Private lastSecondVisible As Boolean = False - - Private collectLampsData As B2SCollectData = New B2SCollectData(B2SSettings.LampsSkipFrames) - Private collectSolenoidsData As B2SCollectData = New B2SCollectData(B2SSettings.SolenoidsSkipFrames) - Private collectGIStringsData As B2SCollectData = New B2SCollectData(B2SSettings.GIStringsSkipFrames) - Private collectLEDsData As B2SCollectData = New B2SCollectData(B2SSettings.LEDsSkipFrames) - - Private Sub CheckLamps(ByVal lamps As Object(,)) - - statelogChangedLamps.IsLogOn = B2SSettings.IsLampsStateLogOn - - If StartBackglassEXE Then - - If lamps IsNot Nothing AndAlso IsArray(lamps) Then - - Dim sb As StringBuilder = New StringBuilder - sb.Append(Registry.CurrentUser.OpenSubKey("B2S").GetValue("B2SLamps", New String("0", 250)).ToString()) - - ' get thru all lamp info - For i As Integer = 0 To lamps.GetUpperBound(0) - - ' get lamp data - Dim lampid As Integer = CInt(lamps(i, 0)) - Dim lampstate As Integer = CInt(lamps(i, 1)) - - ' maybe write log - If statelogChangedLamps.IsLogOn Then - statelogChangedLamps.WriteLogEntry(DateTime.Now & ": Collecting data (" & (lamps.GetUpperBound(0) + 1) & "): " & lampid & " - " & lampstate) - End If - - ' check whether there is need to do something - If B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps Then - - sb.Remove(lampid, 1) - sb.Insert(lampid, lampstate.ToString()) - - End If - - Next - - Registry.CurrentUser.OpenSubKey("B2S", True).SetValue("B2SLamps", sb.ToString()) - - End If - - Else - - If lamps IsNot Nothing AndAlso IsArray(lamps) Then - - ' get thru all lamp info - For i As Integer = 0 To lamps.GetUpperBound(0) - - ' get lamp data - Dim lampid As Integer = CInt(lamps(i, 0)) - Dim lampstate As Integer = CInt(lamps(i, 1)) - - ' maybe write log - If statelogChangedLamps.IsLogOn Then - statelogChangedLamps.WriteLogEntry(DateTime.Now & ": Collecting data (" & (lamps.GetUpperBound(0) + 1) & "): " & lampid & " - " & lampstate) - End If - - ' check whether there is need to do something - If B2SData.UseRomLamps OrElse B2SData.UseAnimationLamps Then - - ' collect illumination data - If formBackglass.TopRomIDType = B2SBaseBox.eRomIDType.Lamp AndAlso formBackglass.TopRomID = lampid Then - collectLampsData.Add(lampid, New B2SCollectData.CollectData(lampstate, B2SCollectData.eCollectedDataType.TopImage)) - ElseIf formBackglass.SecondRomIDType = B2SBaseBox.eRomIDType.Lamp AndAlso formBackglass.SecondRomID = lampid Then - collectLampsData.Add(lampid, New B2SCollectData.CollectData(lampstate, B2SCollectData.eCollectedDataType.SecondImage)) - End If - If B2SData.UsedRomLampIDs.ContainsKey(lampid) Then - collectLampsData.Add(lampid, New B2SCollectData.CollectData(lampstate, B2SCollectData.eCollectedDataType.Standard)) - End If - - ' collect animation data - If B2SData.UsedAnimationLampIDs.ContainsKey(lampid) Then - collectLampsData.Add(lampid, New B2SCollectData.CollectData(lampstate, B2SCollectData.eCollectedDataType.Animation)) - End If - - End If - - Next - - End If - - ' one collection loop is done - collectLampsData.DataAdded() - - ' maybe show the collected data - If collectLampsData.ShowData() Then - - For Each lampdata As KeyValuePair(Of Integer, B2SCollectData.CollectData) In collectLampsData - - ' get lamp data - Dim lampid As Integer = lampdata.Key - Dim lampstate As Integer = lampdata.Value.State - Dim datatypes As Integer = lampdata.Value.Types - - ' maybe write log - If statelogChangedLamps.IsLogOn Then - statelogChangedLamps.WriteLogEntry(DateTime.Now & ": Applying data (" & collectLampsData.Count & ") : " & lampid & " - " & lampstate & " - (" & datatypes & ")") - End If - - ' illumination stuff - If (datatypes And B2SCollectData.eCollectedDataType.TopImage) <> 0 OrElse (datatypes And B2SCollectData.eCollectedDataType.SecondImage) <> 0 Then - Dim topvisible As Boolean = lastTopVisible - Dim secondvisible As Boolean = lastSecondVisible - If (datatypes And B2SCollectData.eCollectedDataType.TopImage) <> 0 Then - topvisible = (lampstate <> 0) - If formBackglass.TopRomInverted Then topvisible = Not topvisible - ElseIf (datatypes And B2SCollectData.eCollectedDataType.SecondImage) <> 0 Then - secondvisible = (lampstate <> 0) - If formBackglass.SecondRomInverted Then topvisible = Not topvisible - End If - If lastTopVisible <> topvisible OrElse lastSecondVisible <> secondvisible OrElse Not isVisibleStateSet Then - B2SData.IsOffImageVisible = False - isVisibleStateSet = True - lastTopVisible = topvisible - lastSecondVisible = secondvisible - If topvisible AndAlso secondvisible Then - formBackglass.BackgroundImage = formBackglass.TopAndSecondLightImage - ElseIf topvisible Then - formBackglass.BackgroundImage = formBackglass.TopLightImage - ElseIf secondvisible Then - formBackglass.BackgroundImage = formBackglass.SecondLightImage - Else - formBackglass.BackgroundImage = formBackglass.DarkImage - B2SData.IsOffImageVisible = True - End If - End If - End If - If (datatypes And B2SCollectData.eCollectedDataType.Standard) <> 0 Then - For Each picbox As B2SPictureBox In B2SData.UsedRomLampIDs(lampid) - If picbox IsNot Nothing Then - Dim visible As Boolean = (lampstate <> 0) - If picbox.RomInverted Then visible = Not visible - picbox.Visible = visible - End If - Next - End If - - ' animation stuff - If (datatypes And B2SCollectData.eCollectedDataType.Animation) <> 0 Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationLampIDs(lampid) - Dim start As Boolean = (lampstate <> 0) - If animation.Inverted Then start = Not start - If start Then - formBackglass.StartAnimation(animation.AnimationName) - Else - formBackglass.StopAnimation(animation.AnimationName) - End If - Next - End If - - Next - - ' reset all current data - collectLampsData.ClearData(B2SSettings.LampsSkipFrames) - - End If - - End If - - End Sub - Private Sub CheckSolenoids(ByVal solenoids As Object(,)) - - statelogChangedSolenoids.IsLogOn = B2SSettings.IsSolenoidsStateLogOn - - 'If statelogChangedSolenoids.IsLogOn Then - ' Static stopwatch As Stopwatch = New Stopwatch() - ' If Not stopwatch.IsRunning Then stopwatch.Start() - ' statelogChangedSolenoids.WriteLogEntry(DateTime.Now & " (" & stopwatch.ElapsedMilliseconds & ")") - ' stopwatch.Restart() - 'End If - - If StartBackglassEXE Then - - If solenoids IsNot Nothing AndAlso IsArray(solenoids) Then - - Dim sb As StringBuilder = New StringBuilder - sb.Append(Registry.CurrentUser.OpenSubKey("B2S").GetValue("B2SSolenoids", New String("0", 250)).ToString()) - - ' get thru all lamp info - For i As Integer = 0 To solenoids.GetUpperBound(0) - - ' get lamp data - Dim solenoidid As Integer = CInt(solenoids(i, 0)) - Dim solenoidstate As Integer = CInt(solenoids(i, 1)) - - ' maybe write log - If statelogChangedSolenoids.IsLogOn Then - statelogChangedSolenoids.WriteLogEntry(DateTime.Now & ": Collecting data (" & (solenoids.GetUpperBound(0) + 1) & "): " & solenoidid & " - " & solenoidstate) - End If - - ' check whether there is need to do something - If B2SData.UseRomSolenoids OrElse B2SData.UseAnimationSolenoids Then - - sb.Remove(solenoidid, 1) - sb.Insert(solenoidid, solenoidstate.ToString()) - - End If - - Next - - Registry.CurrentUser.OpenSubKey("B2S", True).SetValue("B2SSolenoids", sb.ToString()) - - End If - - Else - - If solenoids IsNot Nothing AndAlso IsArray(solenoids) Then - - ' get thru all solenoid info - For i As Integer = 0 To solenoids.GetUpperBound(0) - - ' get solenoid data - Dim solenoidid As Integer = CInt(solenoids(i, 0)) - Dim solenoidstate As Integer = CInt(solenoids(i, 1)) - - ' maybe write log - If statelogChangedSolenoids.IsLogOn Then - statelogChangedSolenoids.WriteLogEntry(DateTime.Now & ": Collecting data (" & (solenoids.GetUpperBound(0) + 1) & "): " & solenoidid & " - " & solenoidstate) - End If - - ' check whether there is need to do something - If B2SData.UseRomSolenoids OrElse B2SData.UseAnimationSolenoids Then - - ' collect illumination data - If formBackglass.TopRomIDType = B2SBaseBox.eRomIDType.Solenoid AndAlso formBackglass.TopRomID = solenoidid Then - collectSolenoidsData.Add(solenoidid, New B2SCollectData.CollectData(solenoidstate, B2SCollectData.eCollectedDataType.TopImage)) - ElseIf formBackglass.SecondRomIDType = B2SBaseBox.eRomIDType.Solenoid AndAlso formBackglass.SecondRomID = solenoidid Then - collectSolenoidsData.Add(solenoidid, New B2SCollectData.CollectData(solenoidstate, B2SCollectData.eCollectedDataType.SecondImage)) - End If - If B2SData.UsedRomSolenoidIDs.ContainsKey(solenoidid) Then - collectSolenoidsData.Add(solenoidid, New B2SCollectData.CollectData(solenoidstate, B2SCollectData.eCollectedDataType.Standard)) - End If - - ' collect animation data - If B2SData.UsedAnimationSolenoidIDs.ContainsKey(solenoidid) Then - collectSolenoidsData.Add(solenoidid, New B2SCollectData.CollectData(solenoidstate, B2SCollectData.eCollectedDataType.Animation)) - End If - - End If - - Next - - End If - - ' one collection loop is done - collectSolenoidsData.DataAdded() - - ' maybe show the collected data - If collectSolenoidsData.ShowData() Then - - For Each solenoiddata As KeyValuePair(Of Integer, B2SCollectData.CollectData) In collectSolenoidsData - - ' get solenoid data - Dim solenoidid As Integer = solenoiddata.Key - Dim solenoidstate As Integer = solenoiddata.Value.State - Dim datatypes As Integer = solenoiddata.Value.Types - - ' maybe write log - If statelogChangedSolenoids.IsLogOn Then - statelogChangedSolenoids.WriteLogEntry(DateTime.Now & ": Applying data (" & collectSolenoidsData.Count & ") : " & solenoidid & " - " & solenoidstate & " (" & datatypes & ")") - End If - - ' illumination stuff - If (datatypes And B2SCollectData.eCollectedDataType.TopImage) <> 0 OrElse (datatypes And B2SCollectData.eCollectedDataType.SecondImage) <> 0 Then - Dim topvisible As Boolean = lastTopVisible - Dim secondvisible As Boolean = lastSecondVisible - If (datatypes And B2SCollectData.eCollectedDataType.TopImage) <> 0 Then - topvisible = (solenoidstate <> 0) - If formBackglass.TopRomInverted Then topvisible = Not topvisible - ElseIf (datatypes And B2SCollectData.eCollectedDataType.SecondImage) <> 0 Then - secondvisible = (solenoidstate <> 0) - If formBackglass.SecondRomInverted Then topvisible = Not topvisible - End If - If lastTopVisible <> topvisible OrElse lastSecondVisible <> secondvisible OrElse Not isVisibleStateSet Then - B2SData.IsOffImageVisible = False - isVisibleStateSet = True - lastTopVisible = topvisible - lastSecondVisible = secondvisible - If topvisible AndAlso secondvisible Then - formBackglass.BackgroundImage = formBackglass.TopAndSecondLightImage - ElseIf topvisible Then - formBackglass.BackgroundImage = formBackglass.TopLightImage - ElseIf secondvisible Then - formBackglass.BackgroundImage = formBackglass.SecondLightImage - Else - formBackglass.BackgroundImage = formBackglass.DarkImage - B2SData.IsOffImageVisible = True - End If - End If - End If - If (datatypes And B2SCollectData.eCollectedDataType.Standard) <> 0 Then - For Each picbox As B2SPictureBox In B2SData.UsedRomSolenoidIDs(solenoidid) - If picbox IsNot Nothing Then - Dim visible As Boolean = (solenoidstate <> 0) - If picbox.RomInverted Then visible = Not visible - picbox.Visible = visible - End If - Next - End If - - ' animation stuff - If (datatypes And B2SCollectData.eCollectedDataType.Animation) <> 0 Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationSolenoidIDs(solenoidid) - Dim start As Boolean = (solenoidstate <> 0) - If animation.Inverted Then start = Not start - If start Then - formBackglass.StartAnimation(animation.AnimationName) - Else - formBackglass.StopAnimation(animation.AnimationName) - End If - Next - End If - - Next - - ' reset all current data - collectSolenoidsData.ClearData(B2SSettings.SolenoidsSkipFrames) - - End If - - End If - - End Sub - Private Sub CheckGIStrings(ByVal gistrings As Object(,)) - - statelogChangedGIStrings.IsLogOn = B2SSettings.IsGIStringsStateLogOn - - If gistrings IsNot Nothing AndAlso IsArray(gistrings) Then - - ' get thru all gistring info - For i As Integer = 0 To gistrings.GetUpperBound(0) - - ' get gistring data - Dim gistringid As Integer = CInt(gistrings(i, 0)) - Dim gistringstate As Integer = CInt(gistrings(i, 1)) - - ' maybe write log(s) - If statelogChangedGIStrings.IsLogOn Then - statelogChangedGIStrings.WriteLogEntry(DateTime.Now & ": Collecting data (" & (gistrings.GetUpperBound(0) + 1) & "): " & gistringid & " - " & gistringstate) - End If - - ' check whether there is need to do something - If B2SData.UseRomGIStrings OrElse B2SData.UseAnimationGIStrings Then - - ' collect illumination data - If formBackglass.TopRomIDType = B2SBaseBox.eRomIDType.GIString AndAlso formBackglass.TopRomID = gistringid Then - collectGIStringsData.Add(gistringid, New B2SCollectData.CollectData(gistringstate, B2SCollectData.eCollectedDataType.TopImage)) - ElseIf formBackglass.SecondRomIDType = B2SBaseBox.eRomIDType.GIString AndAlso formBackglass.SecondRomID = gistringid Then - collectGIStringsData.Add(gistringid, New B2SCollectData.CollectData(gistringstate, B2SCollectData.eCollectedDataType.SecondImage)) - End If - If B2SData.UsedRomGIStringIDs.ContainsKey(gistringid) Then - collectGIStringsData.Add(gistringid, New B2SCollectData.CollectData(gistringstate, B2SCollectData.eCollectedDataType.Standard)) - End If - - ' collect animation data - If B2SData.UsedAnimationGIStringIDs.ContainsKey(gistringid) Then - collectGIStringsData.Add(gistringid, New B2SCollectData.CollectData(gistringstate, B2SCollectData.eCollectedDataType.Animation)) - End If - - End If - - Next - - End If - - ' one collection loop is done - collectGIStringsData.DataAdded() - - ' maybe show the collected data - If collectGIStringsData.ShowData() Then - - For Each gistringdata As KeyValuePair(Of Integer, B2SCollectData.CollectData) In collectGIStringsData - - ' get gistring data - Dim gistringid As Integer = gistringdata.Key - Dim gistringstate As Integer = gistringdata.Value.State - Dim datatypes As Integer = gistringdata.Value.Types - - ' maybe write log - If statelogChangedGIStrings.IsLogOn Then - statelogChangedGIStrings.WriteLogEntry(DateTime.Now & ": Applying data (" & collectGIStringsData.Count & ") : " & gistringid & " - " & gistringstate & " (" & datatypes & ")") - End If - - ' illumination stuff - If (datatypes And B2SCollectData.eCollectedDataType.TopImage) <> 0 OrElse (datatypes And B2SCollectData.eCollectedDataType.SecondImage) <> 0 Then - Dim topvisible As Boolean = lastTopVisible - Dim secondvisible As Boolean = lastSecondVisible - If (datatypes And B2SCollectData.eCollectedDataType.TopImage) <> 0 Then - topvisible = (gistringstate > 4) - If formBackglass.TopRomInverted Then topvisible = Not topvisible - ElseIf (datatypes And B2SCollectData.eCollectedDataType.SecondImage) <> 0 Then - secondvisible = (gistringstate > 4) - If formBackglass.SecondRomInverted Then topvisible = Not topvisible - End If - If lastTopVisible <> topvisible OrElse lastSecondVisible <> secondvisible OrElse Not isVisibleStateSet Then - B2SData.IsOffImageVisible = False - isVisibleStateSet = True - lastTopVisible = topvisible - lastSecondVisible = secondvisible - If topvisible AndAlso secondvisible Then - formBackglass.BackgroundImage = formBackglass.TopAndSecondLightImage - ElseIf topvisible Then - formBackglass.BackgroundImage = formBackglass.TopLightImage - ElseIf secondvisible Then - formBackglass.BackgroundImage = formBackglass.SecondLightImage - Else - formBackglass.BackgroundImage = formBackglass.LightImage - B2SData.IsOffImageVisible = True - End If - End If - End If - If (datatypes And B2SCollectData.eCollectedDataType.Standard) <> 0 Then - For Each picbox As B2SPictureBox In B2SData.UsedRomGIStringIDs(gistringid) - If picbox IsNot Nothing Then - Dim visible As Boolean = (gistringstate > 4) - If picbox.RomInverted Then visible = Not visible - picbox.Visible = visible - End If - Next - End If - - ' animation stuff - If (datatypes And B2SCollectData.eCollectedDataType.Animation) <> 0 Then - For Each animation As B2SData.AnimationInfo In B2SData.UsedAnimationGIStringIDs(gistringid) - Dim start As Boolean = (gistringstate > 4) - If animation.Inverted Then start = Not start - If start Then - formBackglass.StartAnimation(animation.AnimationName) - Else - formBackglass.StopAnimation(animation.AnimationName) - End If - Next - End If - - Next - - ' reset all current data - collectGIStringsData.ClearData(B2SSettings.GIStringsSkipFrames) - - End If - - End Sub - Private Sub CheckLEDs(ByVal leds As Object(,)) - - statelogChangedLEDs.IsLogOn = B2SSettings.IsLEDsStateLogOn - - If leds IsNot Nothing AndAlso IsArray(leds) Then - - ' get thru all changed LEDs - For i As Integer = 0 To leds.GetUpperBound(0) - - Dim digit As Integer = CInt(leds(i, 0)) - Dim value As Integer = CInt(leds(i, 2)) - - ' maybe write log - If statelogChangedLEDs.IsLogOn Then - statelogChangedLEDs.WriteLogEntry(DateTime.Now & ": Collecting data (" & (leds.GetUpperBound(0) + 1) & ") : " & digit & " - " & value) - End If - - ' check whether leds are used - If B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels Then - collectLEDsData.Add(digit, New B2SCollectData.CollectData(value, 0)) - End If - - Next - - End If - - ' one collection loop is done - collectLEDsData.DataAdded() - - ' maybe show the collected data - If collectLEDsData.ShowData() Then - - Dim useLEDs As Boolean = (B2SData.UseLEDs AndAlso B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Rendered) - Dim useLEDDisplays As Boolean = (B2SData.UseLEDDisplays AndAlso B2SSettings.UsedLEDType = B2SSettings.eLEDTypes.Dream7) - Dim useReels As Boolean = (B2SData.UseReels) - - For Each leddata As KeyValuePair(Of Integer, B2SCollectData.CollectData) In collectLEDsData - - Dim digit As Integer = leddata.Key - Dim value As Integer = leddata.Value.State - - ' maybe write log - If statelogChangedLEDs.IsLogOn Then - statelogChangedLEDs.WriteLogEntry(DateTime.Now & ": Applying data (" & (leds.GetUpperBound(0) + 1) & ") : " & digit & " - " & value) - End If - - ' check whether leds or reels are used - If useLEDs Then - - ' rendered LEDs are used - Dim ledname As String = "LEDBox" & (digit + 1).ToString() - If B2SData.LEDs.ContainsKey(ledname) Then - B2SData.LEDs(ledname).Value = value - End If - - ElseIf useLEDDisplays Then - - ' Dream 7 displays are used - If B2SData.LEDDisplayDigits.ContainsKey(digit) Then - With B2SData.LEDDisplayDigits(digit) - .LEDDisplay.SetValue(.Digit, value) - End With - End If - - ElseIf useReels Then - - ' reels are used - Dim reelname As String = "ReelBox" & (digit + 1).ToString() - If B2SData.Reels.ContainsKey(reelname) Then - B2SData.Reels(reelname).Value = value - End If - - End If - - Next - - ' reset all current data - collectLEDsData.ClearData(B2SSettings.LEDsSkipFrames) - - End If - - End Sub - -#End Region - -#End Region - -#Region "game input/output" - - Public ReadOnly Property Lamp(ByVal number As Object) As Boolean - Get - Return VPinMAME.Lamp(number) - End Get - End Property - - Public ReadOnly Property Solenoid(ByVal number As Object) As Boolean - Get - Return VPinMAME.Solenoid(number) - End Get - End Property - - Public ReadOnly Property GIString(ByVal number As Object) As Boolean - Get - Return VPinMAME.GIString(number) - End Get - End Property - - Public Property Switch(ByVal number As Object) As Boolean - Get - Return VPinMAME.Switch(number) - End Get - Set(ByVal value As Boolean) - VPinMAME.Switch(number) = value - End Set - End Property - - Public Property Mech(ByVal number As Object) As Integer - Get - Return VPinMAME.Mech(number) - End Get - Set(ByVal value As Integer) - VPinMAME.Mech(number) = value - End Set - End Property - Public ReadOnly Property GetMech(ByVal number As Object) As Object - Get - Return VPinMAME.GetMech(number) - End Get - End Property - - Public Property Dip(ByVal number As Object) As Integer - Get - Return VPinMAME.Dip(number) - End Get - Set(ByVal value As Integer) - VPinMAME.Dip(number) = value - End Set - End Property - - Public Property SolMask(ByVal number As Object) As Integer - Get - Return VPinMAME.SolMask(number) - End Get - Set(ByVal value As Integer) - VPinMAME.SolMask(number) = value - End Set - End Property - - Public ReadOnly Property RawDmdWidth As Integer - Get - Return VPinMAME.RawDmdWidth - End Get - End Property - - Public ReadOnly Property RawDmdHeight As Integer - Get - Return VPinMAME.RawDmdHeight - End Get - End Property - - Public ReadOnly Property RawDmdPixels As Object - Get - Return VPinMAME.RawDmdPixels - End Get - End Property - - Public ReadOnly Property RawDmdColoredPixels As Object - Get - Return VPinMAME.RawDmdColoredPixels - End Get - End Property - - Public ReadOnly Property ChangedNVRAM As Object - Get - Return VPinMAME.ChangedNVRAM - End Get - End Property - - Public ReadOnly Property NVRAM As Object - Get - Return VPinMAME.NVRAM - End Get - End Property - - Public Property SoundMode As Integer - Get - Return VPinMAME.SoundMode - End Get - Set(ByVal value As Integer) - VPinMAME.SoundMode = value - End Set - End Property -#End Region - -#Region "non VPinMAME support" - - Public Sub SetScore(ByVal digit As Integer, ByVal value As Integer) - - End Sub - - Public Sub SetPlayer(ByVal player As Integer) - - End Sub - -#End Region - -#Region "private stuff" - - Private Sub Startup() - - ' get thru all processes - Dim processes As Processes = New Processes() - B2SData.TableFileName = processes.TableName - If processes.TableCount > 1 Then - ' maybe do here something anytime - End If - - ' start end timer - timer.Start() - - End Sub - - Private Sub CheckTableHandle() - - If tableHandle = 0 Then - Dim processes As Processes = New Processes() - tableHandle = processes.TableHandle - End If - - End Sub - - Private Sub ShowBackglassForm() - - Try - If formBackglass Is Nothing Then - formBackglass = New formBackglass() - End If - VPinMAME.hidden = B2SData.UseLEDs OrElse B2SData.UseLEDDisplays OrElse B2SData.UseReels OrElse B2SSettings.HideDMD - formBackglass.Show() - formBackglass.TopMost = True - formBackglass.BringToFront() - formBackglass.TopMost = False - B2SData.IsBackglassVisible = True - Catch ex As Exception - Windows.Forms.MessageBox.Show(ex.Message, My.Resources.AppTitle, Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Error) - End Try - - End Sub - Private Sub HideBackglassForm() - If formBackglass IsNot Nothing Then - formBackglass.Hide() - End If - End Sub - Private Sub KillBackglassForm() - - If formBackglass IsNot Nothing Then - On Error Resume Next - For I As Integer = formBackglass.Controls.Count - 1 To 0 Step -1 - formBackglass.Controls(I).BackgroundImage.Dispose() - formBackglass.Controls(I).BackgroundImage = Nothing - formBackglass.Controls(I).Dispose() - Next - formBackglass.TopLightImage.Dispose() - formBackglass.TopLightImage = Nothing - If formBackglass.SecondLightImage IsNot Nothing Then - formBackglass.SecondLightImage.Dispose() - formBackglass.SecondLightImage = Nothing - formBackglass.TopAndSecondLightImage.Dispose() - formBackglass.TopAndSecondLightImage = Nothing - End If - formBackglass.BackgroundImage.Dispose() - formBackglass.BackgroundImage = Nothing - B2SData.ClearAll() - B2SSettings.ClearAll() - formBackglass.Close() - formBackglass.Dispose() - GC.Collect() - GC.SuppressFinalize(formBackglass) - GC.SuppressFinalize(Me) - GC.Collect() - B2SData.IsBackglassVisible = False - End If - - End Sub - -#End Region - - -End Class diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/app.config b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/app.config deleted file mode 100644 index 8e9dd2a..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/app.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/moduleImageExtensions.vb b/b2sbackglassserverexe_tmp/b2sbackglassserverexe/moduleImageExtensions.vb deleted file mode 100644 index 86925e8..0000000 --- a/b2sbackglassserverexe_tmp/b2sbackglassserverexe/moduleImageExtensions.vb +++ /dev/null @@ -1,59 +0,0 @@ -Imports System -Imports System.Drawing - -Module moduleImageExtensions - - _ - Public Function Resized(image As Image, size As Size, Optional ByVal disposeOriginal As Boolean = False) As Image - If image Is Nothing Then Return Nothing - If size.Width <= 0 OrElse size.Height <= 0 Then Return Nothing - Dim ret As Bitmap = New Bitmap(size.Width, size.Height) - Using gr As Graphics = Graphics.FromImage(ret) - gr.PageUnit = GraphicsUnit.Pixel - 'gr.InterpolationMode = Drawing2D.InterpolationMode.High - gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality - gr.DrawImage(image, New Rectangle(0, 0, ret.Width, ret.Height)) - End Using - If disposeOriginal Then - image.Dispose() - image = Nothing - End If - Return ret - End Function - - _ - Public Function Rotated(image As Image, angle As Integer) As Image - If image Is Nothing Then Return Nothing - Dim ret As Bitmap = New Bitmap(image.Width, image.Height) - Dim matrix As New System.Drawing.Drawing2D.Matrix - Using gr As Graphics = Graphics.FromImage(ret) - gr.PageUnit = GraphicsUnit.Pixel - 'gr.InterpolationMode = Drawing2D.InterpolationMode.High - gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality - matrix.RotateAt(angle * -1, New Point(CInt(image.Width / 2), CInt(image.Height / 2))) - gr.Transform = matrix - gr.DrawImage(image, New Rectangle(0, 0, image.Width, image.Height)) - End Using - Return ret - End Function - - _ - Public Function ResizedF(image As Image, sizeF As SizeF, Optional ByVal disposeOriginal As Boolean = False) As Image - If image Is Nothing Then Return Nothing - If sizeF.Width <= 0 OrElse sizeF.Height <= 0 Then Return Nothing - Dim largesize As Size = New Size(CInt(sizeF.Width) + 1, CInt(sizeF.Height) + 1) - Dim ret As Bitmap = New Bitmap(largesize.Width, largesize.Height) - Using gr As Graphics = Graphics.FromImage(ret) - gr.PageUnit = GraphicsUnit.Pixel - 'gr.InterpolationMode = Drawing2D.InterpolationMode.High - gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality - gr.DrawImage(image, New Rectangle(0, 0, sizeF.Width, sizeF.Height)) - End Using - If disposeOriginal Then - image.Dispose() - image = Nothing - End If - Return ret - End Function - -End Module diff --git a/b2sbackglassserverregisterapp/b2sbackglassserverregisterapp/My Project/AssemblyInfo.vb b/b2sbackglassserverregisterapp/b2sbackglassserverregisterapp/My Project/AssemblyInfo.vb index abcb5d5..67acd5d 100644 --- a/b2sbackglassserverregisterapp/b2sbackglassserverregisterapp/My Project/AssemblyInfo.vb +++ b/b2sbackglassserverregisterapp/b2sbackglassserverregisterapp/My Project/AssemblyInfo.vb @@ -31,6 +31,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - - + + +