diff --git a/README.md b/README.md index 0d1d6ebd2..d52dce9a0 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,141 @@ -µBMSC +pBMSC ===== -µBMSC is a modified version of iBMSC to add features and clean up the iBMSC code, fix bugs and so on. -See README.md.old for original iBMSC README file. +pBMSC is a modified version of uBMSC (which is a modified version of iBMSC) with a primary focus on quality of life functionalities such as keyboard shortcuts. +See README.md.iBMSC for the original iBMSC README file and REAME.md.uBMSC for the last uBMSC README file. -Changes -===== -* Out of the box OGG previews - * Seeks for WAV if OGG doesn't exist, and viceversa -* Bugfixes - * BMSE clipboard input fixed -* Additions - * Landmine support (Shift + Ctrl + Click) - * Several new encodings (EUC-KR, Shift-JIS) - * Go To Measure (Ctrl+G) - * Mouse Row/Column Highlight - * Ctrl+Scroll wheel changes zoom level - * Huge BPM support (10e12) - * UI improvements - * **Time select mode** Convert Area to Stop - * **Select Mode** Select notes with labels on screen, all notes with labels (Shift+Ctrl+Click, Shift+Ctrl+A) - * Non-locale dependant number output (No more commas instead of periods) - * **Write mode** Autowav Increase functionality - * **dtinth** Move and Deselect (Shift+Number) - * **NS-Kazuki** #SCROLL Support -* Development - * Codebase reorganized for developers - - -Check appveyor for automated builds. -[![Build status](https://ci.appveyor.com/api/projects/status/m7iygj9sje2yqf43?svg=true)](https://ci.appveyor.com/project/zardoru/ibmsc) +* Special thanks to Shimi9999#7602 for the Japanese translation with the new features. + +### Discretion +* Themes from Bluvel's uBMSC fork may not be compatible, please use themes from Zadoru's uBMSC fork. +* Having .NET Framework 4.8 installed is recommended. +* Most of the new features are available in English only (with limited support for Chinese and Japanese). + +# Changes +Listed in the order added. + +## Bugfixes +* Added keybindings for DP and PMS by default. Now also added support for rebinding keys. See **Keyboard Shortcuts** for more information. +* Fixed the search function such that notes on lane A8 and D8 are now searchable. +* Fixed the mirror function such that notes between A1 and D8 are reflected locally. Supports PMS as well. +* Fixed the Statistic Label not including notes between D1-D8. Statistic window still not fixed. +* Fixed the total note count on the toolbar. +* Reorganized the sidebar so you can tab between textboxes properly. +* Prevented notes in Expansion Code from being loaded. +* Rare bug that occurs when the mouse is highlighting a long note while toggling between NT and BMSE simultaneously. +* Smoothened Selection Box animation. + +## Functionalities +* Added Random, R-Random, S-Random and H-Random. Supports PMS as well. +* The application now saves the option "Disable Vertical Moves". +* Changed the temporary bms file extension from .bms to .bmsc. +* Added advanced statistics (Ctrl+Shift+T). +* Removed restriction for drag and dropping files, as well as opening files. Mainly for opening bms template files, not tested thoroughly. +* Added note search function (goto measure except it's goto note). One note per VPosition only. +* Added sort function. Selected notes are sorted based on their VPosition and Value. +* Added mBMplay as a default player. +* Added basic support for #RANDOM. Supports expansion field and main data field (and header field somewhat). Not tested thoroughly, nested #RANDOM in "Modify Section" only. Accessible via the "Select Section" button in Expansion Code or via Ctrl+Alt+R. +* Added color overriding options where you can specify a range of notes to appear a specific color (or a color gradient), such as red notes for drums and green notes for the piano. Accessible via the Options tab or via Shift+F12. +* Added comment notes. Comment notes will be saved as #ECMD and #ECOM within the same bms/pms file. Not tested thoroughly. +* The window will now follow notes being moved by arrow keys. +* When creating LNs in NT mode, the VPosition will snap to the highlighted note if any. +* Added "Show Waveform on Notes". +* Added "Define Measure" in Time Selection Tool. Allows defining a custom measure, add a measure line or remove measure lines. Also accessible via the Insert key while Time Selection Tool is selected. +* Added "Insert/Remove Space" in Time Selection Tool. Allows inserting space into the measure, either measure only, notes only or both. Also accessible via Ctrl+Insert, Shift+Insert and Ctrl+Shift+Insert respectively. +* Added ability to copy and paste measure lengths over multiple measures. +* Added ability to duplicate #WAV's. +* Added technical error check (Jack notes, impossible chords for PMS, and impossible scratches for DP). Not a toggle because running it live will severely reduce performance. Accessible via the Options tab or via Ctrl+Alt+E. +* Added better support for all audio files (supported by CSCore + ogg). +* Added support for rebinding keys. +* Added #TOTAL Options window to set a recommended #TOTAL value based on the selected calculation formula. +* Added lines to scroll along the panel while previewing a keysound and to indicate the keysound's end point. +* Added support to move notes to their template position. +* Added ability to convert notes to Long notes in a series by VPosition or by column. +* Added ability to convert between LNObj's and NT LN's. +* Added ability to copy and paste patterns to highlighted notes. Accessible via Ctrl+Shift+V. +* Added BMS file tabs. See below for details. +* Added #BMP list. +* Added "brush" tool to BMP notes. Select a range of BMP files in the #BMP list then create a long note in NTInput mode, and the BMP notes will be added correspondingly. + +## Keyboard shortcuts +* While rebinding keys is now supported, the default keybinding has also been changed to allow note placement between D1 and D8 or only on PMS lanes in PMS mode: + * Numpad keys are assigned to 2P lanes when making DP charts. + * QWERTYUI keys are also assigned to 2P lanes when making DP charts. + * 1 to 7 are now assigned to A2 to A8, and 8 is now assigned to A1. + * Ctrl+1 to Ctrl+8 are now assigned to D1-D8. + * For PMS: Number keys 1-9 assign the notes to PMS lanes when a PMS theme is used. +* Added Save As keyboard shortcut (Ctrl+Alt+S) +* Added recent bms keyboard shortcuts (Alt+1 to Alt+5) +* Added shortcuts for toggling lanes: + * Alt+B - BPM lane + * Alt+S - Stop lane + * Alt+R - Scroll lane + * Alt+G - BGA/Layer/Poor +* Added shortcuts for the panel splitter (Alt+Left and Alt+Right). +* Added Options shortcut: + * F9 - Player Options + * F10 - General Options + * F12 - Visual Options +* Added advanced statistics (Ctrl+Shift+T). +* Added keyboard shortcuts for previewing and replacing keysounds in the Sounds List (Spacebar to preview, enter to replace). +* Added "Select Section" (Ctrl+Alt+R by default). +* Added color overriding options (Shift+F12). +* Revised shortcuts for grid division values: + * Period now increases the division value, and comma now decreases the division value. + * Hold Ctrl for incremental value change + * Hold Shift for x3 multiplier or divisor + * Hold Alt to change the sub value + * For example, Shift+Alt+Comma = divide the sub value by 3 (rounded) +* Added shortcut for scrolling through #WAV selection (Shift+Scroll). +* Added shortcut for defining measures with Time Selection Tool (Insert). +* Added shortcut for inserting/removing space with Time Selection Tool (Ctrl+Insert for measure only, Shift+Insert for notes only, and Ctrl+Shift+Insert for both) +* Added shortcut for techincal error check (Ctrl+Alt+E by default) +* Added shortcut for keybinding options (Shift+F10) +* Added shortcut for an experimental feature (Preview highlighted notes - Shift+F4) + +## New dialog/option boxes + +### Advanced Statistics (Ctrl+Shift+T) +* Displays note statistics over individual lanes from A1 to D8. +* Displays note usages, including #WAV assigned notes with 0 note count and #WAV unassigned notes with non-zero note count. + +### #RANDOM Editor (Ctrl+Alt+R) +* Display ghost notes: Select an #if section to display its notes in ghost form. +* Display ghost notes (All): Display all notes in ghost form. +* Modify notes: Select an #if section and jump straight to modifying them. +* Modify section: Open an instance of pBMSC, allowing you to modify the #if section individually. +* Remove ghost notes: Remove all ghost notes. + +### Visual Override Options (Shift+F12) +* Creates a list of note ranges with a specified color and replaces specified notes' display color. +* Allows a range of notes to have a gradient of colors, or a single color. +* Settings can be saved to either Editor, Chart, or Song. + +### Keybinding Options (Shift+F10) +* Allows for rebinding keys for a lot of functions, such as note lane assignment. +* Some other functions are also rebindable, such as Snap to Grid, Undo, and Redo. + +### #TOTAL Options +* Allows you to set a recommended #TOTAL value based on either IIDX supposition 1, IIDX supposition 2, or a multiplier. +* Allows you to auto-set the #TOTAL value for the chart. + +### BMS File Tabs +* Allows multiple files to be opened simultaneously. +* Middle-clicking on the file tab will close it. +* Right-clicking on the file tab will allow you to change its color. +* Saves a list of the opened files on exiting application and reopens them on relaunching application. + +###### Unavailable features +* Autosaving all files. Currently it behaves the same as previously, which is autosaving the active BMS file. +* Moving file tabs. Not sure if this will be doable with the current arrangement. +* Saving all files on exiting application. Unsaved changes will be gone upon closing. + +# Planned To-Do List + +### #RANDOM Editor +* Multiple #IF sections in one file (notes only). +* Allow ghost notes to be editable. + +### Misc +* Add support for saving new functions to iBMSC. +* Optimization? +* Unavailable BMS File Tab features listed above. \ No newline at end of file diff --git a/README.md.old b/README.md.iBMSC similarity index 100% rename from README.md.old rename to README.md.iBMSC diff --git a/README.md.uBMSC b/README.md.uBMSC new file mode 100644 index 000000000..0d1d6ebd2 --- /dev/null +++ b/README.md.uBMSC @@ -0,0 +1,31 @@ +µBMSC +===== +µBMSC is a modified version of iBMSC to add features and clean up the iBMSC code, fix bugs and so on. +See README.md.old for original iBMSC README file. + +Changes +===== +* Out of the box OGG previews + * Seeks for WAV if OGG doesn't exist, and viceversa +* Bugfixes + * BMSE clipboard input fixed +* Additions + * Landmine support (Shift + Ctrl + Click) + * Several new encodings (EUC-KR, Shift-JIS) + * Go To Measure (Ctrl+G) + * Mouse Row/Column Highlight + * Ctrl+Scroll wheel changes zoom level + * Huge BPM support (10e12) + * UI improvements + * **Time select mode** Convert Area to Stop + * **Select Mode** Select notes with labels on screen, all notes with labels (Shift+Ctrl+Click, Shift+Ctrl+A) + * Non-locale dependant number output (No more commas instead of periods) + * **Write mode** Autowav Increase functionality + * **dtinth** Move and Deselect (Shift+Number) + * **NS-Kazuki** #SCROLL Support +* Development + * Codebase reorganized for developers + + +Check appveyor for automated builds. +[![Build status](https://ci.appveyor.com/api/projects/status/m7iygj9sje2yqf43?svg=true)](https://ci.appveyor.com/project/zardoru/ibmsc) diff --git a/iBMSC.sln b/iBMSC.sln index ffc713fd2..b782e4dcc 100644 --- a/iBMSC.sln +++ b/iBMSC.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32328.378 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "iBMSC", "iBMSC\iBMSC.vbproj", "{35281D99-2A97-4AA0-AC1E-6CDC78999A3D}" EndProject @@ -19,4 +19,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A780C3E3-D300-46D2-877C-60CC440A49D4} + EndGlobalSection EndGlobal diff --git a/iBMSC/ApplicationEvents.vb b/iBMSC/ApplicationEvents.vb index 6645d6eb0..7b0a3377f 100644 --- a/iBMSC/ApplicationEvents.vb +++ b/iBMSC/ApplicationEvents.vb @@ -11,11 +11,11 @@ Namespace My End Sub Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException - Dim xRes As MsgBoxResult = MsgBox("An unhandled exception has occurred in the application: " & vbCrLf & _ - e.Exception.Message & vbCrLf & _ - vbCrLf & _ - "Click Yes to save a back-up, click No otherwise, or click Cancel to ignore this exception and continue.", _ - MsgBoxStyle.YesNoCancel + MsgBoxStyle.Critical, _ + Dim xRes As MsgBoxResult = MsgBox("An unhandled exception has occurred in the application: " & vbCrLf & + e.Exception.Message & vbCrLf & + vbCrLf & + "Click Yes to save a back-up, click No otherwise, or click Cancel to ignore this exception and continue.", + CType(MsgBoxStyle.YesNoCancel + MsgBoxStyle.Critical, MsgBoxStyle), "Unhandled Exception") If xRes = MsgBoxResult.Cancel Then e.ExitApplication = False If xRes = MsgBoxResult.Yes Then diff --git a/iBMSC/Audio.vb b/iBMSC/Audio.vb index be10122fe..f94651bad 100644 --- a/iBMSC/Audio.vb +++ b/iBMSC/Audio.vb @@ -1,130 +1,204 @@ -Imports NVorbis -Imports CSCore -Imports CSCore.Codecs -Imports CSCore.SoundOut - -Module Audio - Dim Output As WasapiOut - Dim Source As IWaveSource - - Public Sub Initialize() - Output = New WasapiOut() - CodecFactory.Instance.Register("ogg", New CodecFactoryEntry(Function(s) - Return New NVorbisSource(s).ToWaveSource() - End Function, ".ogg")) - End Sub - - Public Sub Finalize() - Output.Stop() - Output.Dispose() - Output = Nothing - End Sub - - Public Function CheckFilename(ByVal filename As String) As String - If File.Exists(filename) Then - Return filename - End If - Dim ext = Path.GetExtension(filename) - If String.Compare(ext, ".ogg") = 0 Then - Dim wpath = Path.ChangeExtension(filename, ".wav") - Return IIf(File.Exists(wpath), wpath, filename) - End If - If String.Compare(ext, ".wav") = 0 Then - Dim opath = Path.ChangeExtension(filename, ".ogg") - Return IIf(File.Exists(opath), opath, filename) - End If - Return filename - End Function - - Public Sub Play(ByVal filename As String) - - If Source IsNot Nothing Then - Output.Stop() - Source.Dispose() - Source = Nothing - End If - - If filename Is "" Then - Return - End If - - Dim fn = CheckFilename(filename) - - If Not File.Exists(fn) Then - Return - End If - - Source = CodecFactory.Instance.GetCodec(fn) - Output.Initialize(Source) - Output.Play() - End Sub - - Public Sub StopPlaying() - Output.Stop() - End Sub -End Module - -Class NVorbisSource - Implements CSCore.ISampleSource - Dim _stream As Stream - Dim _vorbisReader As VorbisReader - Dim _waveFormat As WaveFormat - Dim _disposed As Boolean - - Public Sub New(stream As Stream) - If stream Is Nothing Or Not stream.CanRead Then - Throw New ArgumentException("stream") - End If - _stream = stream - _vorbisReader = New VorbisReader(stream, Nothing) - _waveFormat = New WaveFormat(_vorbisReader.SampleRate, 32, _vorbisReader.Channels, AudioEncoding.IeeeFloat) - End Sub - - Public ReadOnly Property CanSeek As Boolean Implements IAudioSource.CanSeek - Get - Return _stream.CanSeek - End Get - End Property - - Public ReadOnly Property WaveFormat As WaveFormat Implements IAudioSource.WaveFormat - Get - Return _waveFormat - End Get - End Property - - Public ReadOnly Property Length As Long Implements IAudioSource.Length - Get - Return IIf(CanSeek, _vorbisReader.TotalTime.TotalSeconds * _waveFormat.SampleRate * _waveFormat.Channels, 0) - End Get - End Property - - Public Property Position As Long Implements IAudioSource.Position - Get - Return IIf(CanSeek, _vorbisReader.DecodedTime.TotalSeconds * _vorbisReader.SampleRate * _vorbisReader.Channels, 0) - End Get - Set(value As Long) - If Not CanSeek Then - Throw New InvalidOperationException("Can't seek this stream.") - End If - If value < 0 Or value >= Length Then - Throw New ArgumentOutOfRangeException("value") - End If - _vorbisReader.DecodedTime = TimeSpan.FromSeconds(value / _vorbisReader.SampleRate / _vorbisReader.Channels) - End Set - End Property - - - Public Function Read(buffer As Single(), offset As Integer, count As Integer) As Integer Implements ISampleSource.Read - Return _vorbisReader.ReadSamples(buffer, offset, count) - End Function - - Public Sub Dispose() Implements IDisposable.Dispose - If Not _disposed Then - '_vorbisReader.Dispose() - Else - 'Throw New ObjectDisposedException("NVorbisSource") - End If - _disposed = True - End Sub - -End Class +Imports CSCore +Imports CSCore.Codecs +Imports CSCore.SoundOut +Imports NVorbis + +Module Audio + Dim Output As WasapiOut + Dim Source As IWaveSource + Dim SupportedExt() As String = CodecFactory.Instance.GetSupportedFileExtensions() + + Public Sub Initialize() + Output = New WasapiOut() + CodecFactory.Instance.Register("ogg", New CodecFactoryEntry(Function(s) + Return New NVorbisSource(s).ToWaveSource() + End Function, ".ogg")) + SupportedExt = CodecFactory.Instance.GetSupportedFileExtensions() + End Sub + + Public Sub Finalize() + Output.Stop() + Output.Dispose() + Output = Nothing + End Sub + + Public Function CheckFilename(ByVal filename As String) As String + If File.Exists(filename) Then + Return filename + End If + + For Each ext In SupportedExt + If File.Exists(Path.ChangeExtension(filename, "." & ext)) Then Return Path.ChangeExtension(filename, "." & ext) + Next + Return filename + End Function + + Public Function GetSupportedExtensions(Optional appendStr As String = ".") As String() + Dim Ext(UBound(SupportedExt)) As String + For i = 0 To UBound(SupportedExt) + Ext(i) = appendStr & SupportedExt(i) + Next + Return Ext + End Function + + Public Sub Play(ByVal filename As String) + If Source IsNot Nothing Then + Output.Stop() + Source.Dispose() + Source = Nothing + End If + + If filename Is "" Then + Return + End If + + Dim fn = CheckFilename(filename) + + ' P: How to catch without crashing + Try + Source = CodecFactory.Instance.GetCodec(fn) + Output.Initialize(Source) + Output.Play() + Catch ex As Exception + MsgBox("Error: " + ex.Message) + Exit Sub + End Try + End Sub + + Public Sub StopPlaying() + Output.Stop() + End Sub +End Module + +' P: Probably not the best way to duplicate it into a class +Public Class AudioC + Dim Output As WasapiOut + Dim Source As IWaveSource + Dim SupportedExt() As String = CodecFactory.Instance.GetSupportedFileExtensions() + + Public Sub Initialize() + Output = New WasapiOut() + CodecFactory.Instance.Register("ogg", New CodecFactoryEntry(Function(s) + Return New NVorbisSource(s).ToWaveSource() + End Function, ".ogg")) + SupportedExt = CodecFactory.Instance.GetSupportedFileExtensions() + End Sub + + Public Sub Finalized() + Output.Stop() + Output.Dispose() + Output = Nothing + End Sub + + Public Function CheckFilename(ByVal filename As String) As String + If File.Exists(filename) Then + Return filename + End If + + For Each ext In SupportedExt + If File.Exists(Path.ChangeExtension(filename, "." & ext)) Then Return Path.ChangeExtension(filename, "." & ext) + Next + Return filename + End Function + + Public Function GetSupportedExtensions(Optional appendStr As String = ".") As String() + Dim Ext(UBound(SupportedExt)) As String + For i = 0 To UBound(SupportedExt) + Ext(i) = appendStr & SupportedExt(i) + Next + Return Ext + End Function + + Public Sub Play(ByVal filename As String) + If Source IsNot Nothing Then + Output.Stop() + Source.Dispose() + Source = Nothing + End If + + If filename Is "" Then + Return + End If + + Dim fn = CheckFilename(filename) + + ' P: How to catch without crashing + Try + Source = CodecFactory.Instance.GetCodec(fn) + Output.Initialize(Source) + Output.Play() + Catch ex As Exception + MsgBox("Error: " + ex.Message) + Exit Sub + End Try + End Sub + + Public Sub StopPlaying() + Output.Stop() + End Sub +End Class + +Class NVorbisSource + Implements CSCore.ISampleSource + Dim _stream As Stream + Dim _vorbisReader As VorbisReader + Dim _waveFormat As WaveFormat + Dim _disposed As Boolean + + Public Sub New(stream As Stream) + If stream Is Nothing Or Not stream.CanRead Then + Throw New ArgumentException("stream") + End If + _stream = stream + _vorbisReader = New VorbisReader(stream, Nothing) + _waveFormat = New WaveFormat(_vorbisReader.SampleRate, 32, _vorbisReader.Channels, AudioEncoding.IeeeFloat) + End Sub + + Public ReadOnly Property CanSeek As Boolean Implements IAudioSource.CanSeek + Get + Return _stream.CanSeek + End Get + End Property + + Public ReadOnly Property WaveFormat As WaveFormat Implements IAudioSource.WaveFormat + Get + Return _waveFormat + End Get + End Property + + Public ReadOnly Property Length As Long Implements IAudioSource.Length + Get + Return CInt(IIf(CanSeek, _vorbisReader.TotalTime.TotalSeconds * _waveFormat.SampleRate * _waveFormat.Channels, 0)) + End Get + End Property + + Public Property Position As Long Implements IAudioSource.Position + Get + Return CInt(IIf(CanSeek, _vorbisReader.TimePosition.TotalSeconds * _vorbisReader.SampleRate * _vorbisReader.Channels, 0)) + End Get + Set(value As Long) + If Not CanSeek Then + Throw New InvalidOperationException("Can't seek this stream.") + End If + If value < 0 Or value >= Length Then + Throw New ArgumentOutOfRangeException("value") + End If + _vorbisReader.TimePosition = TimeSpan.FromSeconds(value / _vorbisReader.SampleRate / _vorbisReader.Channels) + End Set + End Property + + + Public Function Read(buffer As Single(), offset As Integer, count As Integer) As Integer Implements ISampleSource.Read + Return _vorbisReader.ReadSamples(buffer, offset, count) + End Function + + Public Sub Dispose() Implements IDisposable.Dispose + If Not _disposed Then + '_vorbisReader.Dispose() + Else + 'Throw New ObjectDisposedException("NVorbisSource") + End If + _disposed = True + End Sub + +End Class diff --git a/iBMSC/BMS.vb b/iBMSC/BMS.vb index 70e66ee1c..5561d1047 100644 --- a/iBMSC/BMS.vb +++ b/iBMSC/BMS.vb @@ -2,12 +2,14 @@ Module BMS Public Function IsChannelLongNote(ByVal I As String) As Boolean - Dim xI As Integer = CInt(Val(I)) + Dim xI As Integer + If Not Integer.TryParse(I, xI) Then Return False Return xI >= 50 And xI < 90 End Function Public Function IsChannelHidden(ByVal I As String) As Boolean - Dim xI As Integer = CInt(Val(I)) + Dim xI As Integer + If Not Integer.TryParse(I, xI) Then Return False Return (xI >= 30 And xI < 50) Or (xI >= 70 And xI < 90) End Function diff --git a/iBMSC/ChartIO.vb b/iBMSC/ChartIO.vb index 544660c98..66f17738c 100644 --- a/iBMSC/ChartIO.vb +++ b/iBMSC/ChartIO.vb @@ -1,1211 +1,1507 @@ -Imports iBMSC.Editor - -Partial Public Class MainWindow - Private Sub OpenBMS(ByVal xStrAll As String) - KMouseOver = -1 - - 'Line feed validation: will remove some empty lines - xStrAll = Replace(Replace(Replace(xStrAll, vbLf, vbCr), vbCr & vbCr, vbCr), vbCr, vbCrLf) - - Dim xStrLine() As String = Split(xStrAll, vbCrLf, , CompareMethod.Text) - Dim xI1 As Integer - Dim sLine As String - Dim xExpansion As String = "" - ReDim Notes(0) - ReDim mColumn(999) - ReDim hWAV(1295) - ReDim hBPM(1295) 'x10000 - ReDim hSTOP(1295) - ReDim hSCROLL(1295) - Me.InitializeNewBMS() - Me.InitializeOpenBMS() - - With Notes(0) - .ColumnIndex = niBPM - .VPosition = -1 - '.LongNote = False - '.Selected = False - .Value = 1200000 - End With - - 'random, setRandom 0 - 'endRandom 0 - 'if +1 - 'else 0 - 'endif -1 - 'switch, setSwitch +1 - 'case, skip, def 0 - 'endSw -1 - Dim xStack As Integer = 0 - - For Each sLine In xStrLine - Dim sLineTrim As String = sLine.Trim - If xStack > 0 Then GoTo Expansion - - If sLineTrim.StartsWith("#") And Mid(sLineTrim, 5, 3) = "02:" Then - Dim xIndex As Integer = Val(Mid(sLineTrim, 2, 3)) - Dim xRatio As Double = Val(Mid(sLineTrim, 8)) - Dim xxD As Long = GetDenominator(xRatio) - MeasureLength(xIndex) = xRatio * 192.0R - LBeat.Items(xIndex) = Add3Zeros(xIndex) & ": " & xRatio & IIf(xxD > 10000, "", " ( " & CLng(xRatio * xxD) & " / " & xxD & " ) ") - - ElseIf sLineTrim.StartsWith("#WAV", StringComparison.CurrentCultureIgnoreCase) Then - hWAV(C36to10(Mid(sLineTrim, Len("#WAV") + 1, 2))) = Mid(sLineTrim, Len("#WAV") + 4) - - ElseIf sLineTrim.StartsWith("#BMP", StringComparison.CurrentCultureIgnoreCase) Then - hBMP(C36to10(Mid(sLineTrim, Len("#BMP") + 1, 2))) = Mid(sLineTrim, Len("#BMP") + 4) - - ElseIf sLineTrim.StartsWith("#BPM", StringComparison.CurrentCultureIgnoreCase) And Not Mid(sLineTrim, Len("#BPM") + 1, 1).Trim = "" Then 'If BPM## - ' zdr: No limits on BPM editing.. they don't make much sense. - hBPM(C36to10(Mid(sLineTrim, Len("#BPM") + 1, 2))) = Val(Mid(sLineTrim, Len("#BPM") + 4)) * 10000 - - 'No limits on STOPs either. - ElseIf sLineTrim.StartsWith("#STOP", StringComparison.CurrentCultureIgnoreCase) Then - hSTOP(C36to10(Mid(sLineTrim, Len("#STOP") + 1, 2))) = Val(Mid(sLineTrim, Len("#STOP") + 4)) * 10000 - - ElseIf sLineTrim.StartsWith("#SCROLL", StringComparison.CurrentCultureIgnoreCase) Then - hSCROLL(C36to10(Mid(sLineTrim, Len("#SCROLL") + 1, 2))) = Val(Mid(sLineTrim, Len("#SCROLL") + 4)) * 10000 - - - ElseIf sLineTrim.StartsWith("#TITLE", StringComparison.CurrentCultureIgnoreCase) Then - THTitle.Text = Mid(sLineTrim, Len("#TITLE") + 1).Trim - - ElseIf sLineTrim.StartsWith("#ARTIST", StringComparison.CurrentCultureIgnoreCase) Then - THArtist.Text = Mid(sLineTrim, Len("#ARTIST") + 1).Trim - - ElseIf sLineTrim.StartsWith("#GENRE", StringComparison.CurrentCultureIgnoreCase) Then - THGenre.Text = Mid(sLineTrim, Len("#GENRE") + 1).Trim - - ElseIf sLineTrim.StartsWith("#BPM", StringComparison.CurrentCultureIgnoreCase) Then 'If BPM #### - Notes(0).Value = Val(Mid(sLineTrim, Len("#BPM") + 1).Trim) * 10000 - THBPM.Value = Notes(0).Value / 10000 - - ElseIf sLineTrim.StartsWith("#PLAYER", StringComparison.CurrentCultureIgnoreCase) Then - Dim xInt As Integer = Val(Mid(sLineTrim, Len("#PLAYER") + 1).Trim) - If xInt >= 1 And xInt <= 4 Then _ - CHPlayer.SelectedIndex = xInt - 1 - - ElseIf sLineTrim.StartsWith("#RANK", StringComparison.CurrentCultureIgnoreCase) Then - Dim xInt As Integer = Val(Mid(sLineTrim, Len("#RANK") + 1).Trim) - If xInt >= 0 And xInt <= 4 Then _ - CHRank.SelectedIndex = xInt - - ElseIf sLineTrim.StartsWith("#PLAYLEVEL", StringComparison.CurrentCultureIgnoreCase) Then - THPlayLevel.Text = Mid(sLineTrim, Len("#PLAYLEVEL") + 1).Trim - - - ElseIf sLineTrim.StartsWith("#SUBTITLE", StringComparison.CurrentCultureIgnoreCase) Then - THSubTitle.Text = Mid(sLineTrim, Len("#SUBTITLE") + 1).Trim - - ElseIf sLineTrim.StartsWith("#SUBARTIST", StringComparison.CurrentCultureIgnoreCase) Then - THSubArtist.Text = Mid(sLineTrim, Len("#SUBARTIST") + 1).Trim - - ElseIf sLineTrim.StartsWith("#STAGEFILE", StringComparison.CurrentCultureIgnoreCase) Then - THStageFile.Text = Mid(sLineTrim, Len("#STAGEFILE") + 1).Trim - - ElseIf sLineTrim.StartsWith("#BANNER", StringComparison.CurrentCultureIgnoreCase) Then - THBanner.Text = Mid(sLineTrim, Len("#BANNER") + 1).Trim - - ElseIf sLineTrim.StartsWith("#BACKBMP", StringComparison.CurrentCultureIgnoreCase) Then - THBackBMP.Text = Mid(sLineTrim, Len("#BACKBMP") + 1).Trim - - ElseIf sLineTrim.StartsWith("#DIFFICULTY", StringComparison.CurrentCultureIgnoreCase) Then - Try - CHDifficulty.SelectedIndex = Integer.Parse(Mid(sLineTrim, Len("#DIFFICULTY") + 1).Trim) - Catch ex As Exception - End Try - - ElseIf sLineTrim.StartsWith("#DEFEXRANK", StringComparison.CurrentCultureIgnoreCase) Then - THExRank.Text = Mid(sLineTrim, Len("#DEFEXRANK") + 1).Trim - - ElseIf sLineTrim.StartsWith("#TOTAL", StringComparison.CurrentCultureIgnoreCase) Then - Dim xStr As String = Mid(sLineTrim, Len("#TOTAL") + 1).Trim - 'If xStr.EndsWith("%") Then xStr = Mid(xStr, 1, Len(xStr) - 1) - THTotal.Text = xStr - - ElseIf sLineTrim.StartsWith("#COMMENT", StringComparison.CurrentCultureIgnoreCase) Then - Dim xStr As String = Mid(sLineTrim, Len("#COMMENT") + 1).Trim - If xStr.StartsWith("""") Then xStr = Mid(xStr, 2) - If xStr.EndsWith("""") Then xStr = Mid(xStr, 1, Len(xStr) - 1) - THComment.Text = xStr - - ElseIf sLineTrim.StartsWith("#LNTYPE", StringComparison.CurrentCultureIgnoreCase) Then - 'THLnType.Text = Mid(sLineTrim, Len("#LNTYPE") + 1).Trim - If Val(Mid(sLineTrim, Len("#LNTYPE") + 1).Trim) = 1 Then CHLnObj.SelectedIndex = 0 - - ElseIf sLineTrim.StartsWith("#LNOBJ", StringComparison.CurrentCultureIgnoreCase) Then - Dim xValue As Integer = C36to10(Mid(sLineTrim, Len("#LNOBJ") + 1).Trim) - CHLnObj.SelectedIndex = xValue - - 'TODO: LNOBJ value validation - - 'ElseIf sLineTrim.StartsWith("#LNTYPE", StringComparison.CurrentCultureIgnoreCase) Then - ' CAdLNTYPE.Checked = True - ' If Mid(sLineTrim, 9) = "" Or Mid(sLineTrim, 9) = "1" Or Mid(sLineTrim, 9) = "01" Then CAdLNTYPEb.Text = "1" - ' CAdLNTYPEb.Text = Mid(sLineTrim, 9) - - ElseIf sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":" Then 'If the line contains Ks - Dim xIdentifier As String = Mid(sLineTrim, 5, 2) - If BMSChannelToColumn(xIdentifier) = 0 Then GoTo AddExpansion - - Else -Expansion: If sLineTrim.StartsWith("#IF", StringComparison.CurrentCultureIgnoreCase) Then - xStack += 1 : GoTo AddExpansion - ElseIf sLineTrim.StartsWith("#ENDIF", StringComparison.CurrentCultureIgnoreCase) Then - xStack -= 1 : GoTo AddExpansion - ElseIf sLineTrim.StartsWith("#SWITCH", StringComparison.CurrentCultureIgnoreCase) Then - xStack += 1 : GoTo AddExpansion - ElseIf sLineTrim.StartsWith("#SETSWITCH", StringComparison.CurrentCultureIgnoreCase) Then - xStack += 1 : GoTo AddExpansion - ElseIf sLineTrim.StartsWith("#ENDSW", StringComparison.CurrentCultureIgnoreCase) Then - xStack -= 1 : GoTo AddExpansion - - ElseIf sLineTrim.StartsWith("#") Then -AddExpansion: xExpansion &= sLine & vbCrLf - End If - - End If - Next - - UpdateMeasureBottom() - - xStack = 0 - For Each sLine In xStrLine - Dim sLineTrim As String = sLine.Trim - If xStack > 0 Then Continue For - - If Not (sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":") Then Continue For 'If the line contains Ks - - ' >> Measure = Mid(sLine, 2, 3) - ' >> Column Identifier = Mid(sLine, 5, 2) - ' >> K = Mid(sLine, xI1, 2) - Dim xMeasure As Integer = Val(Mid(sLineTrim, 2, 3)) - Dim Channel As String = Mid(sLineTrim, 5, 2) - If BMSChannelToColumn(Channel) = 0 Then Continue For - - If Channel = "01" Then mColumn(xMeasure) += 1 'If the identifier is 01 then add a B column in that measure - For xI1 = 8 To Len(sLineTrim) - 1 Step 2 'For all Ks within that line ( - 1 can be ommitted ) - If Mid(sLineTrim, xI1, 2) = "00" Then Continue For 'If the K is not 00 - - ReDim Preserve Notes(Notes.Length) - - With Notes(UBound(Notes)) - .ColumnIndex = BMSChannelToColumn(Channel) + - IIf(Channel = "01", 1, 0) * (mColumn(xMeasure) - 1) - .LongNote = IsChannelLongNote(Channel) - .Hidden = IsChannelHidden(Channel) - .Landmine = IsChannelLandmine(Channel) - .Selected = False - .VPosition = MeasureBottom(xMeasure) + MeasureLength(xMeasure) * (xI1 / 2 - 4) / ((Len(sLineTrim) - 7) / 2) - .Value = C36to10(Mid(sLineTrim, xI1, 2)) * 10000 - - If Channel = "03" Then .Value = Convert.ToInt32(Mid(sLineTrim, xI1, 2), 16) * 10000 - If Channel = "08" Then .Value = hBPM(C36to10(Mid(sLineTrim, xI1, 2))) - If Channel = "09" Then .Value = hSTOP(C36to10(Mid(sLineTrim, xI1, 2))) - If Channel = "SC" Then .Value = hSCROLL(C36to10(Mid(sLineTrim, xI1, 2))) - End With - - Next - Next - - If NTInput Then ConvertBMSE2NT() - - LWAV.Visible = False - LWAV.Items.Clear() - LBMP.Visible = False - LBMP.Items.Clear() - For xI1 = 1 To 1295 - LWAV.Items.Add(C10to36(xI1) & ": " & hWAV(xI1)) - LBMP.Items.Add(C10to36(xI1) & ": " & hBMP(xI1)) - Next - LWAV.SelectedIndex = 0 - LWAV.Visible = True - LBMP.SelectedIndex = 0 - LBMP.Visible = True - - TExpansion.Text = xExpansion - - SortByVPositionQuick(0, UBound(Notes)) - UpdatePairing() - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - POStatusRefresh() - End Sub - - ReadOnly BMSChannelList() As String = {"01", "03", "04", "06", "07", "08", "09", - "11", "12", "13", "14", "15", "16", "18", "19", - "21", "22", "23", "24", "25", "26", "28", "29", - "31", "32", "33", "34", "35", "36", "38", "39", - "41", "42", "43", "44", "45", "46", "48", "49", - "51", "52", "53", "54", "55", "56", "58", "59", - "61", "62", "63", "64", "65", "66", "68", "69", - "D1", "D2", "D3", "D4", "D5", "D6", "D8", "D9", - "E1", "E2", "E3", "E4", "E5", "E6", "E8", "E9", - "SC"} - ' 71 through 89 are reserved - '"71", "72", "73", "74", "75", "76", "78", "79", - '"81", "82", "83", "84", "85", "86", "88", "89", - - - Private Function SaveBMS() As String - CalculateGreatestVPosition() - SortByVPositionInsertion() - UpdatePairing() - Dim MeasureIndex As Integer - Dim hasOverlapping As Boolean = False - 'Dim xStrAll As String = "" 'for all - Dim xStrMeasure(MeasureAtDisplacement(GreatestVPosition) + 1) As String - - ' We regenerate these when traversing the bms event list. - ReDim hBPM(0) - ReDim hSTOP(0) - ReDim hSCROLL(0) - - Dim xNTInput As Boolean = NTInput - Dim xKBackUp() As Note = Notes - If xNTInput Then - NTInput = False - ConvertNT2BMSE() - End If - - Dim tempNote As Note 'Temp K - - Dim xprevNotes(-1) As Note 'Notes too close to the next measure - - For MeasureIndex = 0 To MeasureAtDisplacement(GreatestVPosition) + 1 'For xI1 in each measure - xStrMeasure(MeasureIndex) = vbCrLf - - Dim consistentDecimalStr = WriteDecimalWithDot(MeasureLength(MeasureIndex) / 192.0R) - - ' Handle fractional measure - If MeasureLength(MeasureIndex) <> 192.0R Then xStrMeasure(MeasureIndex) &= "#" & Add3Zeros(MeasureIndex) & "02:" & consistentDecimalStr & vbCrLf - - ' Get note count in current measure - Dim LowerLimit As Integer = Nothing - Dim UpperLimit As Integer = Nothing - GetMeasureLimits(MeasureIndex, LowerLimit, UpperLimit) - - If UpperLimit - LowerLimit = 0 Then Continue For 'If there is no K in the current measure then end this loop - - ' Get notes from this measure - Dim xUPrevText As Integer = UBound(xprevNotes) - Dim NotesInMeasure(UpperLimit - LowerLimit + xUPrevText) As Note - - ' Copy notes from previous array - For i = 0 To xUPrevText - NotesInMeasure(i) = xprevNotes(i) - Next - - ' Copy notes in current measure - For i = LowerLimit To UpperLimit - 1 - NotesInMeasure(i - LowerLimit + xprevNotes.Length) = Notes(i) - Next - - ' Find greatest column. - ' Since background tracks have the highest column values - ' this - niB will yield the number of B columns. - Dim GreatestColumn = 0 - For Each tempNote In NotesInMeasure - GreatestColumn = Math.Max(tempNote.ColumnIndex, GreatestColumn) - Next - - ReDim xprevNotes(-1) - xStrMeasure(MeasureIndex) &= GenerateBackgroundTracks(MeasureIndex, hasOverlapping, NotesInMeasure, GreatestColumn, xprevNotes) - xStrMeasure(MeasureIndex) &= GenerateKeyTracks(MeasureIndex, hasOverlapping, NotesInMeasure, xprevNotes) - Next - - ' Warn about 255 limit if neccesary. - If hasOverlapping Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & - Strings.Messages.NoteOverlapError & vbCrLf & - Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) - If UBound(hBPM) > IIf(BPMx1296, 1295, 255) Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & - Strings.Messages.BPMOverflowError & UBound(hBPM) & " > " & IIf(BPMx1296, 1295, 255) & vbCrLf & - Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) - If UBound(hSTOP) > IIf(STOPx1296, 1295, 255) Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & - Strings.Messages.STOPOverflowError & UBound(hSTOP) & " > " & IIf(STOPx1296, 1295, 255) & vbCrLf & - Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) - If UBound(hSCROLL) > 1295 Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & - Strings.Messages.SCROLLOverflowError & UBound(hSCROLL) & " > " & 1295 & vbCrLf & - Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) - - ' Add expansion text - Dim xStrExp As String = vbCrLf & "*---------------------- EXPANSION FIELD" & vbCrLf & TExpansion.Text & vbCrLf & vbCrLf - If TExpansion.Text = "" Then xStrExp = "" - - ' Output main data field. - Dim xStrMain As String = "*---------------------- MAIN DATA FIELD" & vbCrLf & vbCrLf & Join(xStrMeasure, "") & vbCrLf - - If xNTInput Then - Notes = xKBackUp - NTInput = True - End If - - ' Generate headers now, since we have the unique BPM/STOP/etc declarations. - Dim xStrHeader As String = GenerateHeaderMeta() - xStrHeader &= GenerateHeaderIndexedData() - - Dim xStrAll As String = xStrHeader & vbCrLf & xStrExp & vbCrLf & xStrMain - Return xStrAll - End Function - - Private Function GenerateHeaderMeta() As String - Dim xStrHeader As String = vbCrLf & "*---------------------- HEADER FIELD" & vbCrLf & vbCrLf - xStrHeader &= "#PLAYER " & (CHPlayer.SelectedIndex + 1) & vbCrLf - xStrHeader &= "#GENRE " & THGenre.Text & vbCrLf - xStrHeader &= "#TITLE " & THTitle.Text & vbCrLf - xStrHeader &= "#ARTIST " & THArtist.Text & vbCrLf - xStrHeader &= "#BPM " & WriteDecimalWithDot(Notes(0).Value / 10000) & vbCrLf - xStrHeader &= "#PLAYLEVEL " & THPlayLevel.Text & vbCrLf - xStrHeader &= "#RANK " & CHRank.SelectedIndex & vbCrLf - xStrHeader &= vbCrLf - If THSubTitle.Text <> "" Then xStrHeader &= "#SUBTITLE " & THSubTitle.Text & vbCrLf - If THSubArtist.Text <> "" Then xStrHeader &= "#SUBARTIST " & THSubArtist.Text & vbCrLf - If THStageFile.Text <> "" Then xStrHeader &= "#STAGEFILE " & THStageFile.Text & vbCrLf - If THBanner.Text <> "" Then xStrHeader &= "#BANNER " & THBanner.Text & vbCrLf - If THBackBMP.Text <> "" Then xStrHeader &= "#BACKBMP " & THBackBMP.Text & vbCrLf - xStrHeader &= vbCrLf - If CHDifficulty.SelectedIndex Then xStrHeader &= "#DIFFICULTY " & CHDifficulty.SelectedIndex & vbCrLf - If THExRank.Text <> "" Then xStrHeader &= "#DEFEXRANK " & THExRank.Text & vbCrLf - If THTotal.Text <> "" Then xStrHeader &= "#TOTAL " & THTotal.Text & vbCrLf - If THComment.Text <> "" Then xStrHeader &= "#COMMENT """ & THComment.Text & """" & vbCrLf - 'If THLnType.Text <> "" Then xStrHeader &= "#LNTYPE " & THLnType.Text & vbCrLf - If CHLnObj.SelectedIndex > 0 Then xStrHeader &= "#LNOBJ " & C10to36(CHLnObj.SelectedIndex) & vbCrLf _ - Else xStrHeader &= "#LNTYPE 1" & vbCrLf - xStrHeader &= vbCrLf - Return xStrHeader - End Function - - Private Function GenerateHeaderIndexedData() As String - Dim xStrHeader As String = "" - - For i = 1 To UBound(hWAV) - If Not hWAV(i) = "" Then xStrHeader &= "#WAV" & C10to36(i) & - " " & hWAV(i) & vbCrLf - Next - For i = 1 To UBound(hBMP) - If Not hBMP(i) = "" Then xStrHeader &= "#BMP" & C10to36(i) & - " " & hBMP(i) & vbCrLf - Next - For i = 1 To UBound(hBPM) - xStrHeader &= "#BPM" & - IIf(BPMx1296, C10to36(i), Mid("0" & Hex(i), Len(Hex(i)))) & - " " & WriteDecimalWithDot(hBPM(i) / 10000) & vbCrLf - Next - For i = 1 To UBound(hSTOP) - xStrHeader &= "#STOP" & - IIf(STOPx1296, C10to36(i), Mid("0" & Hex(i), Len(Hex(i)))) & - " " & WriteDecimalWithDot(hSTOP(i) / 10000) & vbCrLf - Next - For i = 1 To UBound(hSCROLL) - xStrHeader &= "#SCROLL" & - C10to36(i) & " " & WriteDecimalWithDot(hSCROLL(i) / 10000) & vbCrLf - Next - - Return xStrHeader - End Function - - Private Sub GetMeasureLimits(MeasureIndex As Integer, ByRef LowerLimit As Integer, ByRef UpperLimit As Integer) - Dim NoteCount = UBound(Notes) - LowerLimit = 0 - - For i = 1 To NoteCount 'Collect Ks in the same measure - If MeasureAtDisplacement(Notes(i).VPosition) >= MeasureIndex Then - LowerLimit = i - Exit For - End If 'Lower limit found - Next - - UpperLimit = 0 - - For i = LowerLimit To NoteCount - If MeasureAtDisplacement(Notes(i).VPosition) > MeasureIndex Then - UpperLimit = i - Exit For 'Upper limit found - End If - Next - - If UpperLimit < LowerLimit Then UpperLimit = NoteCount + 1 - End Sub - - Private Function GenerateKeyTracks(MeasureIndex As Integer, ByRef hasOverlapping As Boolean, NotesInMeasure() As Note, ByRef xprevNotes() As Note) As String - Dim CurrentBMSChannel As String - Dim Ret As String = "" - - For Each CurrentBMSChannel In BMSChannelList 'Start rendering other notes - Dim relativeMeasurePos(-1) 'Ks in the same column - Dim NoteStrings(-1) 'Ks in the same column - - ' Background tracks take care of this. - If CurrentBMSChannel = "01" Then Continue For - - - For NoteIndex = 0 To UBound(NotesInMeasure) 'Find Ks in the same column (xI4 is TK index) - - Dim currentNote As Note = NotesInMeasure(NoteIndex) - If GetBMSChannelBy(currentNote) = CurrentBMSChannel Then - - ReDim Preserve relativeMeasurePos(UBound(relativeMeasurePos) + 1) - ReDim Preserve NoteStrings(UBound(NoteStrings) + 1) - relativeMeasurePos(UBound(relativeMeasurePos)) = currentNote.VPosition - MeasureBottom(MeasureAtDisplacement(currentNote.VPosition)) - If relativeMeasurePos(UBound(relativeMeasurePos)) < 0 Then relativeMeasurePos(UBound(relativeMeasurePos)) = 0 - - If CurrentBMSChannel = "03" Then 'If integer bpm - NoteStrings(UBound(NoteStrings)) = Mid("0" & Hex(currentNote.Value \ 10000), Len(Hex(currentNote.Value \ 10000))) - ElseIf CurrentBMSChannel = "08" Then 'If bpm requires declaration - Dim BpmIndex - For BpmIndex = 1 To UBound(hBPM) ' find BPM value in existing array - If currentNote.Value = hBPM(BpmIndex) Then Exit For - Next - If BpmIndex > UBound(hBPM) Then ' Didn't find it, add it - ReDim Preserve hBPM(UBound(hBPM) + 1) - hBPM(UBound(hBPM)) = currentNote.Value - End If - NoteStrings(UBound(NoteStrings)) = IIf(BPMx1296, C10to36(BpmIndex), Mid("0" & Hex(BpmIndex), Len(Hex(BpmIndex)))) - ElseIf CurrentBMSChannel = "09" Then 'If STOP - Dim StopIndex - For StopIndex = 1 To UBound(hSTOP) ' find STOP value in existing array - If currentNote.Value = hSTOP(StopIndex) Then Exit For - Next - - If StopIndex > UBound(hSTOP) Then ' Didn't find it, add it - ReDim Preserve hSTOP(UBound(hSTOP) + 1) - hSTOP(UBound(hSTOP)) = currentNote.Value - End If - NoteStrings(UBound(NoteStrings)) = IIf(STOPx1296, C10to36(StopIndex), Mid("0" & Hex(StopIndex), Len(Hex(StopIndex)))) - ElseIf CurrentBMSChannel = "SC" Then 'If SCROLL - Dim ScrollIndex - For ScrollIndex = 1 To UBound(hSCROLL) ' find SCROLL value in existing array - If currentNote.Value = hSCROLL(ScrollIndex) Then Exit For - Next - - If ScrollIndex > UBound(hSCROLL) Then ' Didn't find it, add it - ReDim Preserve hSCROLL(UBound(hSCROLL) + 1) - hSCROLL(UBound(hSCROLL)) = currentNote.Value - End If - NoteStrings(UBound(NoteStrings)) = C10to36(ScrollIndex) - Else - NoteStrings(UBound(NoteStrings)) = C10to36(currentNote.Value \ 10000) - End If - End If - Next - - If relativeMeasurePos.Length = 0 Then Continue For - - Dim xGCD As Double = MeasureLength(MeasureIndex) - For i = 0 To UBound(relativeMeasurePos) 'find greatest common divisor - If relativeMeasurePos(i) > 0 Then xGCD = GCD(xGCD, relativeMeasurePos(i)) - Next - - Dim xStrKey() As String - ReDim xStrKey(CInt(MeasureLength(MeasureIndex) / xGCD) - 1) - For i = 0 To UBound(xStrKey) 'assign 00 to all keys - xStrKey(i) = "00" - Next - - For i = 0 To UBound(relativeMeasurePos) 'assign K texts - If CInt(relativeMeasurePos(i) / xGCD) > UBound(xStrKey) Then - ReDim Preserve xprevNotes(UBound(xprevNotes) + 1) - With xprevNotes(UBound(xprevNotes)) - .ColumnIndex = BMSChannelToColumn(BMSChannelList(CurrentBMSChannel)) - .LongNote = IsChannelLongNote(BMSChannelList(CurrentBMSChannel)) - .Hidden = IsChannelHidden(BMSChannelList(CurrentBMSChannel)) - .VPosition = MeasureBottom(MeasureIndex) - .Value = C36to10(NoteStrings(i)) - End With - If BMSChannelList(CurrentBMSChannel) = "08" Then _ - xprevNotes(UBound(xprevNotes)).Value = IIf(BPMx1296, hBPM(C36to10(NoteStrings(i))), hBPM(Convert.ToInt32(NoteStrings(i), 16))) - If BMSChannelList(CurrentBMSChannel) = "09" Then _ - xprevNotes(UBound(xprevNotes)).Value = IIf(STOPx1296, hSTOP(C36to10(NoteStrings(i))), hSTOP(Convert.ToInt32(NoteStrings(i), 16))) - If BMSChannelList(CurrentBMSChannel) = "SC" Then _ - xprevNotes(UBound(xprevNotes)).Value = hSCROLL(C36to10(NoteStrings(i))) - Continue For - End If - If xStrKey(CInt(relativeMeasurePos(i) / xGCD)) <> "00" Then - hasOverlapping = True - End If - - xStrKey(CInt(relativeMeasurePos(i) / xGCD)) = NoteStrings(i) - Next - - Ret &= "#" & Add3Zeros(MeasureIndex) & CurrentBMSChannel & ":" & Join(xStrKey, "") & vbCrLf - Next - - Return Ret - End Function - - Private Function GenerateBackgroundTracks(MeasureIndex As Integer, ByRef hasOverlapping As Boolean, NotesInMeasure() As Note, GreatestColumn As Integer, ByRef xprevNotes() As Note) As String - Dim relativeNotePositions() As Double 'Ks in the same column - Dim noteStrings() As String 'Ks in the same column - Dim Ret As String = "" - - For ColIndex = niB To GreatestColumn 'Start rendering B notes (xI3 is columnindex) - ReDim relativeNotePositions(-1) 'Ks in the same column - ReDim noteStrings(-1) 'Ks in the same column - - For I = 0 To UBound(NotesInMeasure) 'Find Ks in the same column (xI4 is TK index) - If NotesInMeasure(I).ColumnIndex = ColIndex Then - - ReDim Preserve relativeNotePositions(UBound(relativeNotePositions) + 1) - ReDim Preserve noteStrings(UBound(noteStrings) + 1) - - relativeNotePositions(UBound(relativeNotePositions)) = NotesInMeasure(I).VPosition - MeasureBottom(MeasureAtDisplacement(NotesInMeasure(I).VPosition)) - If relativeNotePositions(UBound(relativeNotePositions)) < 0 Then relativeNotePositions(UBound(relativeNotePositions)) = 0 - - noteStrings(UBound(noteStrings)) = C10to36(NotesInMeasure(I).Value \ 10000) - End If - Next - - Dim xGCD As Double = MeasureLength(MeasureIndex) - For i = 0 To UBound(relativeNotePositions) 'find greatest common divisor - If relativeNotePositions(i) > 0 Then xGCD = GCD(xGCD, relativeNotePositions(i)) - Next - - Dim xStrKey(CInt(MeasureLength(MeasureIndex) / xGCD) - 1) As String - For i = 0 To UBound(xStrKey) 'assign 00 to all keys - xStrKey(i) = "00" - Next - - For i = 0 To UBound(relativeNotePositions) 'assign K texts - If CInt(relativeNotePositions(i) / xGCD) > UBound(xStrKey) Then - - ReDim Preserve xprevNotes(UBound(xprevNotes) + 1) - - With xprevNotes(UBound(xprevNotes)) - .ColumnIndex = ColIndex - .VPosition = MeasureBottom(MeasureIndex) - .Value = C36to10(noteStrings(i)) - End With - - Continue For - End If - If xStrKey(CInt(relativeNotePositions(i) / xGCD)) <> "00" Then hasOverlapping = True - xStrKey(CInt(relativeNotePositions(i) / xGCD)) = noteStrings(i) - Next - - Ret &= "#" & Add3Zeros(MeasureIndex) & "01:" & Join(xStrKey, "") & vbCrLf - Next - - Return Ret - End Function - - Private Function OpenSM(ByVal xStrAll As String) As Boolean - KMouseOver = -1 - - Dim xStrLine() As String = Split(xStrAll, vbCrLf) - 'Remove comments starting with "//" - For xI1 As Integer = 0 To UBound(xStrLine) - If xStrLine(xI1).Contains("//") Then xStrLine(xI1) = Mid(xStrLine(xI1), 1, InStr(xStrLine(xI1), "//") - 1) - Next - - xStrAll = Join(xStrLine, "") - xStrLine = Split(xStrAll, ";") - - Dim iDiff As Integer = 0 - Dim iCurrentDiff As Integer = 0 - Dim xTempSplit() As String = Split(xStrAll, "#NOTES:") - Dim xTempStr() As String = {} - If xTempSplit.Length > 2 Then - ReDim Preserve xTempStr(UBound(xTempSplit) - 1) - For xI1 As Integer = 1 To UBound(xTempSplit) - xTempSplit(xI1) = Mid(xTempSplit(xI1), InStr(xTempSplit(xI1), ":") + 1) - xTempSplit(xI1) = Mid(xTempSplit(xI1), InStr(xTempSplit(xI1), ":") + 1).Trim - xTempStr(xI1 - 1) = Mid(xTempSplit(xI1), 1, InStr(xTempSplit(xI1), ":") - 1) - xTempSplit(xI1) = Mid(xTempSplit(xI1), InStr(xTempSplit(xI1), ":") + 1).Trim - xTempStr(xI1 - 1) &= " : " & Mid(xTempSplit(xI1), 1, InStr(xTempSplit(xI1), ":") - 1) - Next - - Dim xDiag As New dgImportSM(xTempStr) - If xDiag.ShowDialog() = Windows.Forms.DialogResult.Cancel Then Return True - iDiff = xDiag.iResult - End If - - Dim sL As String - ReDim Notes(0) - ReDim mColumn(999) - ReDim hWAV(1295) - ReDim hBMP(1295) - ReDim hBPM(1295) 'x10000 - ReDim hSTOP(1295) - ReDim hSCROLL(1295) - Me.InitializeNewBMS() - - With Notes(0) - .ColumnIndex = niBPM - .VPosition = -1 - '.LongNote = False - '.Selected = False - .Value = 1200000 - End With - - For Each sL In xStrLine - If UCase(sL).StartsWith("#TITLE:") Then - THTitle.Text = Mid(sL, Len("#TITLE:") + 1) - - ElseIf UCase(sL).StartsWith("#SUBTITLE:") Then - If Not UCase(sL).EndsWith("#SUBTITLE:") Then THTitle.Text &= " " & Mid(sL, Len("#SUBTITLE:") + 1) - - ElseIf UCase(sL).StartsWith("#ARTIST:") Then - THArtist.Text = Mid(sL, Len("#ARTIST:") + 1) - - ElseIf UCase(sL).StartsWith("#GENRE:") Then - THGenre.Text = Mid(sL, Len("#GENRE:") + 1) - - ElseIf UCase(sL).StartsWith("#BPMS:") Then - Dim xLine As String = Mid(sL, Len("#BPMS:") + 1) - Dim xItem() As String = Split(xLine, ",") - - Dim xVal1 As Double - Dim xVal2 As Double - - For xI1 As Integer = 0 To UBound(xItem) - xVal1 = Mid(xItem(xI1), 1, InStr(xItem(xI1), "=") - 1) - xVal2 = Mid(xItem(xI1), InStr(xItem(xI1), "=") + 1) - - If xVal1 <> 0 Then - ReDim Preserve Notes(Notes.Length) - With Notes(UBound(Notes)) - .ColumnIndex = niBPM - '.LongNote = False - '.Hidden = False - '.Selected = False - .VPosition = xVal1 * 48 - .Value = xVal2 * 10000 - End With - Else - Notes(0).Value = xVal2 * 10000 - End If - Next - - ElseIf UCase(sL).StartsWith("#NOTES:") Then - If iCurrentDiff <> iDiff Then iCurrentDiff += 1 : GoTo Jump1 - - iCurrentDiff += 1 - Dim xLine As String = Mid(sL, Len("#NOTES:") + 1) - Dim xItem() As String = Split(xLine, ":") - For xI1 As Integer = 0 To UBound(xItem) - xItem(xI1) = xItem(xI1).Trim - Next - - If xItem.Length <> 6 Then GoTo Jump1 - - THPlayLevel.Text = xItem(3) - - Dim xM() As String = Split(xItem(5), ",") - For xI1 As Integer = 0 To UBound(xM) - xM(xI1) = xM(xI1).Trim - Next - - For xI1 As Integer = 0 To UBound(xM) - For xI2 As Integer = 0 To Len(xM(xI1)) - 1 Step 4 - If xM(xI1)(xI2) <> "0" Then - ReDim Preserve Notes(Notes.Length) - With Notes(UBound(Notes)) - .ColumnIndex = niA1 - .LongNote = xM(xI1)(xI2) = "2" Or xM(xI1)(xI2) = "3" - '.Hidden = False - '.Selected = False - .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 - .Value = 10000 - End With - End If - If xM(xI1)(xI2 + 1) <> "0" Then - ReDim Preserve Notes(Notes.Length) - With Notes(UBound(Notes)) - .ColumnIndex = niA2 - .LongNote = xM(xI1)(xI2 + 1) = "2" Or xM(xI1)(xI2 + 1) = "3" - '.Hidden = False - '.Selected = False - .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 - .Value = 10000 - End With - End If - If xM(xI1)(xI2 + 2) <> "0" Then - ReDim Preserve Notes(Notes.Length) - With Notes(UBound(Notes)) - .ColumnIndex = niA3 - .LongNote = xM(xI1)(xI2 + 2) = "2" Or xM(xI1)(xI2 + 2) = "3" - '.Hidden = False - '.Selected = False - .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 - .Value = 10000 - End With - End If - If xM(xI1)(xI2 + 3) <> "0" Then - ReDim Preserve Notes(Notes.Length) - With Notes(UBound(Notes)) - .ColumnIndex = niA4 - .LongNote = xM(xI1)(xI2 + 3) = "2" Or xM(xI1)(xI2 + 3) = "3" - '.Hidden = False - '.Selected = False - .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 - .Value = 10000 - End With - End If - Next - Next -Jump1: - End If - Next - - If NTInput Then ConvertBMSE2NT() - - LWAV.Visible = False - LWAV.Items.Clear() - LBMP.Visible = False - LBMP.Items.Clear() - For xI1 As Integer = 1 To 1295 - LWAV.Items.Add(C10to36(xI1) & ": " & hWAV(xI1)) - LBMP.Items.Add(C10to36(xI1) & ": " & hBMP(xI1)) - Next - LWAV.SelectedIndex = 0 - LWAV.Visible = True - LBMP.SelectedIndex = 0 - LBMP.Visible = True - - THBPM.Value = Notes(0).Value / 10000 - SortByVPositionQuick(0, UBound(Notes)) - UpdatePairing() - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - POStatusRefresh() - Return False - End Function - - ''' Do not clear Undo. - Private Sub OpeniBMSC(ByVal Path As String) - KMouseOver = -1 - - Dim br As New BinaryReader(New FileStream(Path, FileMode.Open, FileAccess.Read), System.Text.Encoding.Unicode) - - If br.ReadInt32 <> &H534D4269 Then GoTo EndOfSub - If br.ReadByte <> CByte(&H43) Then GoTo EndOfSub - Dim xMajor As Integer = br.ReadByte - Dim xMinor As Integer = br.ReadByte - Dim xBuild As Integer = br.ReadByte - - ClearUndo() - ReDim Notes(0) - ReDim mColumn(999) - ReDim hWAV(1295) - ReDim hBMP(1295) - Me.InitializeNewBMS() - Me.InitializeOpenBMS() - - With Notes(0) - .ColumnIndex = niBPM - .VPosition = -1 - '.LongNote = False - '.Selected = False - .Value = 1200000 - End With - - Do Until br.BaseStream.Position >= br.BaseStream.Length - Dim BlockID As Integer = br.ReadInt32() - - Select Case BlockID - - Case &H66657250 'Preferences - Dim xPref As Integer = br.ReadInt32 - - NTInput = xPref And &H1 - TBNTInput.Checked = NTInput - mnNTInput.Checked = NTInput - POBLong.Enabled = Not NTInput - POBLongShort.Enabled = Not NTInput - - ErrorCheck = xPref And &H2 - TBErrorCheck.Checked = ErrorCheck - TBErrorCheck_Click(TBErrorCheck, New System.EventArgs) - - PreviewOnClick = xPref And &H4 - TBPreviewOnClick.Checked = PreviewOnClick - TBPreviewOnClick_Click(TBPreviewOnClick, New System.EventArgs) - - ShowFileName = xPref And &H8 - TBShowFileName.Checked = ShowFileName - TBShowFileName_Click(TBShowFileName, New System.EventArgs) - - mnSMenu.Checked = xPref And &H100 - mnSTB.Checked = xPref And &H200 - mnSOP.Checked = xPref And &H400 - mnSStatus.Checked = xPref And &H800 - mnSLSplitter.Checked = xPref And &H1000 - mnSRSplitter.Checked = xPref And &H2000 - - CGShow.Checked = xPref And &H4000 - CGShowS.Checked = xPref And &H8000 - CGShowBG.Checked = xPref And &H10000 - CGShowM.Checked = xPref And &H20000 - CGShowMB.Checked = xPref And &H40000 - CGShowV.Checked = xPref And &H80000 - CGShowC.Checked = xPref And &H100000 - CGBLP.Checked = xPref And &H200000 - CGSTOP.Checked = xPref And &H400000 - CGSCROLL.Checked = xPref And &H20000000 - CGBPM.Checked = xPref And &H800000 - - CGSnap.Checked = xPref And &H1000000 - CGDisableVertical.Checked = xPref And &H2000000 - cVSLockL.Checked = xPref And &H4000000 - cVSLock.Checked = xPref And &H8000000 - cVSLockR.Checked = xPref And &H10000000 - - CGDivide.Value = br.ReadInt32 - CGSub.Value = br.ReadInt32 - gSlash = br.ReadInt32 - CGHeight.Value = br.ReadSingle - CGWidth.Value = br.ReadSingle - CGB.Value = br.ReadInt32 - - Case &H64616548 'Header - THTitle.Text = br.ReadString - THArtist.Text = br.ReadString - THGenre.Text = br.ReadString - Notes(0).Value = br.ReadInt64 - Dim xPlayerRank As Integer = br.ReadByte - THPlayLevel.Text = br.ReadString - - CHPlayer.SelectedIndex = xPlayerRank And &HF - CHRank.SelectedIndex = xPlayerRank >> 4 - - THSubTitle.Text = br.ReadString - THSubArtist.Text = br.ReadString - 'THMaker.Text = br.ReadString - THStageFile.Text = br.ReadString - THBanner.Text = br.ReadString - THBackBMP.Text = br.ReadString - 'THMidiFile.Text = br.ReadString - CHDifficulty.SelectedIndex = br.ReadByte - THExRank.Text = br.ReadString - THTotal.Text = br.ReadString - 'THVolWAV.Text = br.ReadString - THComment.Text = br.ReadString - 'THLnType.Text = br.ReadString - CHLnObj.SelectedIndex = br.ReadInt16 - - Case &H564157 'WAV List - Dim xWAVOptions As Integer = br.ReadByte - WAVMultiSelect = xWAVOptions And &H1 - CWAVMultiSelect.Checked = WAVMultiSelect - CWAVMultiSelect_CheckedChanged(CWAVMultiSelect, New EventArgs) - WAVChangeLabel = xWAVOptions And &H2 - CWAVChangeLabel.Checked = WAVChangeLabel - CWAVChangeLabel_CheckedChanged(CWAVChangeLabel, New EventArgs) - - Dim xWAVCount As Integer = br.ReadInt32 - For xxi As Integer = 1 To xWAVCount - Dim xI As Integer = br.ReadInt16 - hWAV(xI) = br.ReadString - Next - - Case &H504D42 'BMP List - - Dim xBMPCount As Integer = br.ReadInt32 - For xxi As Integer = 1 To xBMPCount - Dim xI As Integer = br.ReadInt16 - hBMP(xI) = br.ReadString - Next - - Case &H74616542 'Beat - nBeatN.Value = br.ReadInt16 - nBeatD.Value = br.ReadInt16 - 'nBeatD.SelectedIndex = br.ReadByte - - Dim xBeatChangeMode As Integer = br.ReadByte - Dim xBeatChangeList As RadioButton() = {CBeatPreserve, CBeatMeasure, CBeatCut, CBeatScale} - xBeatChangeList(xBeatChangeMode).Checked = True - CBeatPreserve_Click(xBeatChangeList(xBeatChangeMode), New System.EventArgs) - - Dim xBeatCount As Integer = br.ReadInt32 - For xxi As Integer = 1 To xBeatCount - Dim xIndex As Integer = br.ReadInt16 - MeasureLength(xIndex) = br.ReadDouble - Dim xRatio As Double = MeasureLength(xIndex) / 192.0R - Dim xxD As Long = GetDenominator(xRatio) - LBeat.Items(xIndex) = Add3Zeros(xIndex) & ": " & xRatio & IIf(xxD > 10000, "", " ( " & CLng(xRatio * xxD) & " / " & xxD & " ) ") - Next - - Case &H6E707845 'Expansion Code - TExpansion.Text = br.ReadString - - Case &H65746F4E 'Note - Dim xNoteUbound As Integer = br.ReadInt32 - ReDim Preserve Notes(xNoteUbound) - For i As Integer = 1 To UBound(Notes) - Notes(i).FromBinReader(br) - Next - - Case &H6F646E55 'Undo / Redo Commands - Dim URCount As Integer = br.ReadInt32 'Should be 100 - sI = br.ReadInt32 - - For xI As Integer = 0 To 99 - Dim xUndoCount As Integer = br.ReadInt32 - Dim xBaseUndo As New UndoRedo.Void - Dim xIteratorUndo As UndoRedo.LinkedURCmd = xBaseUndo - - For xxj As Integer = 1 To xUndoCount - Dim xByteLen As Integer = br.ReadInt32 - Dim xByte() As Byte = br.ReadBytes(xByteLen) - xIteratorUndo.Next = UndoRedo.fromBytes(xByte) - xIteratorUndo = xIteratorUndo.Next - Next - - sUndo(xI) = xBaseUndo.Next - - Dim xRedoCount As Integer = br.ReadInt32 - Dim xBaseRedo As New UndoRedo.Void - Dim xIteratorRedo As UndoRedo.LinkedURCmd = xBaseRedo - For xxj As Integer = 1 To xRedoCount - Dim xByteLen As Integer = br.ReadInt32 - Dim xByte() As Byte = br.ReadBytes(xByteLen) - xIteratorRedo.Next = UndoRedo.fromBytes(xByte) - xIteratorRedo = xIteratorRedo.Next - Next - sRedo(xI) = xBaseRedo.Next - Next - - End Select - Loop - -EndOfSub: - br.Close() - - TBUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation - TBRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation - mnUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation - mnRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation - - LBMP.Visible = False - LBMP.Items.Clear() - LWAV.Visible = False - LWAV.Items.Clear() - For xI1 As Integer = 1 To 1295 - LWAV.Items.Add(C10to36(xI1) & ": " & hWAV(xI1)) - LBMP.Items.Add(C10to36(xI1) & ": " & hBMP(xI1)) - Next - LWAV.SelectedIndex = 0 - LWAV.Visible = True - LBMP.SelectedIndex = 0 - LBMP.Visible = True - - THBPM.Value = Notes(0).Value / 10000 - SortByVPositionQuick(0, UBound(Notes)) - UpdatePairing() - UpdateMeasureBottom() - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub SaveiBMSC(ByVal Path As String) - CalculateGreatestVPosition() - SortByVPositionInsertion() - UpdatePairing() - - Try - - Dim bw As New BinaryWriter(New IO.FileStream(Path, FileMode.Create), System.Text.Encoding.Unicode) - - 'bw.Write("iBMSC".ToCharArray) - bw.Write(&H534D4269) - bw.Write(CByte(&H43)) - bw.Write(CByte(My.Application.Info.Version.Major)) - bw.Write(CByte(My.Application.Info.Version.Minor)) - bw.Write(CByte(My.Application.Info.Version.Build)) - - 'Preferences - 'bw.Write("Pref".ToCharArray) - bw.Write(&H66657250) - Dim xPref As Integer = 0 - If NTInput Then xPref = xPref Or &H1 - If ErrorCheck Then xPref = xPref Or &H2 - If PreviewOnClick Then xPref = xPref Or &H4 - If ShowFileName Then xPref = xPref Or &H8 - If mnSMenu.Checked Then xPref = xPref Or &H100 - If mnSTB.Checked Then xPref = xPref Or &H200 - If mnSOP.Checked Then xPref = xPref Or &H400 - If mnSStatus.Checked Then xPref = xPref Or &H800 - If mnSLSplitter.Checked Then xPref = xPref Or &H1000 - If mnSRSplitter.Checked Then xPref = xPref Or &H2000 - If gShowGrid Then xPref = xPref Or &H4000 - If gShowSubGrid Then xPref = xPref Or &H8000 - If gShowBG Then xPref = xPref Or &H10000 - If gShowMeasureNumber Then xPref = xPref Or &H20000 - If gShowMeasureBar Then xPref = xPref Or &H40000 - If gShowVerticalLine Then xPref = xPref Or &H80000 - If gShowC Then xPref = xPref Or &H100000 - If gDisplayBGAColumn Then xPref = xPref Or &H200000 - If gSTOP Then xPref = xPref Or &H400000 - If gBPM Then xPref = xPref Or &H800000 - If gSCROLL Then xPref = xPref Or &H20000000 - If gSnap Then xPref = xPref Or &H1000000 - If DisableVerticalMove Then xPref = xPref Or &H2000000 - If spLock(0) Then xPref = xPref Or &H4000000 - If spLock(1) Then xPref = xPref Or &H8000000 - If spLock(2) Then xPref = xPref Or &H10000000 - bw.Write(xPref) - bw.Write(BitConverter.GetBytes(gDivide)) - bw.Write(BitConverter.GetBytes(gSub)) - bw.Write(BitConverter.GetBytes(gSlash)) - bw.Write(BitConverter.GetBytes(gxHeight)) - bw.Write(BitConverter.GetBytes(gxWidth)) - bw.Write(BitConverter.GetBytes(gColumns)) - - 'Header - 'bw.Write("Head".ToCharArray) - bw.Write(&H64616548) - bw.Write(THTitle.Text) - bw.Write(THArtist.Text) - bw.Write(THGenre.Text) - bw.Write(Notes(0).Value) - Dim xPlayer As Integer = CHPlayer.SelectedIndex - Dim xRank As Integer = CHRank.SelectedIndex << 4 - bw.Write(CByte(xPlayer Or xRank)) - bw.Write(THPlayLevel.Text) - - bw.Write(THSubTitle.Text) - bw.Write(THSubArtist.Text) - 'bw.Write(THMaker.Text) - bw.Write(THStageFile.Text) - bw.Write(THBanner.Text) - bw.Write(THBackBMP.Text) - 'bw.Write(THMidiFile.Text) - bw.Write(CByte(CHDifficulty.SelectedIndex)) - bw.Write(THExRank.Text) - bw.Write(THTotal.Text) - 'bw.Write(THVolWAV.Text) - bw.Write(THComment.Text) - 'bw.Write(THLnType.Text) - bw.Write(CShort(CHLnObj.SelectedIndex)) - - 'Wav List - 'bw.Write(("WAV" & vbNullChar).ToCharArray) - bw.Write(&H564157) - - Dim xWAVOptions As Integer = 0 - If WAVMultiSelect Then xWAVOptions = xWAVOptions Or &H1 - If WAVChangeLabel Then xWAVOptions = xWAVOptions Or &H2 - bw.Write(CByte(xWAVOptions)) - - Dim xWAVCount As Integer = 0 - For i As Integer = 1 To UBound(hWAV) - If hWAV(i) <> "" Then xWAVCount += 1 - Next - bw.Write(xWAVCount) - - For i As Integer = 1 To UBound(hWAV) - If hWAV(i) = "" Then Continue For - bw.Write(CShort(i)) - bw.Write(hWAV(i)) - Next - - 'Bmp List - 'bw.Write(("BMP" & vbNullChar).ToCharArray) - bw.Write(&H504D42) - - Dim xBMPCount As Integer = 0 - For i As Integer = 1 To UBound(hBMP) - If hBMP(i) <> "" Then xBMPCount += 1 - Next - bw.Write(xBMPCount) - - For i As Integer = 1 To UBound(hBMP) - If hBMP(i) = "" Then Continue For - bw.Write(CShort(i)) - bw.Write(hBMP(i)) - Next - - 'Beat - 'bw.Write("Beat".ToCharArray) - bw.Write(&H74616542) - 'Dim xNumerator As Short = nBeatN.Value - 'Dim xDenominator As Short = nBeatD.Value - 'Dim xBeatChangeMode As Byte = BeatChangeMode - bw.Write(CShort(nBeatN.Value)) - bw.Write(CShort(nBeatD.Value)) - bw.Write(CByte(BeatChangeMode)) - - Dim xBeatCount As Integer = 0 - For i As Integer = 0 To UBound(MeasureLength) - If MeasureLength(i) <> 192.0R Then xBeatCount += 1 - Next - bw.Write(xBeatCount) - - For i As Integer = 0 To UBound(MeasureLength) - If MeasureLength(i) = 192.0R Then Continue For - bw.Write(CShort(i)) - bw.Write(MeasureLength(i)) - Next - - 'Expansion Code - 'bw.Write("Expn".ToCharArray) - bw.Write(&H6E707845) - bw.Write(TExpansion.Text) - - 'Note - 'bw.Write("Note".ToCharArray) - bw.Write(&H65746F4E) - bw.Write(UBound(Notes)) - For i As Integer = 1 To UBound(Notes) - Notes(i).WriteBinWriter(bw) - Next - - 'Undo / Redo Commands - 'bw.Write("Undo".ToCharArray) - bw.Write(&H6F646E55) - bw.Write(100) - bw.Write(sI) - - For i As Integer = 0 To 99 - 'UndoCommandsCount - Dim countUndo As Integer = 0 - Dim pUndo As UndoRedo.LinkedURCmd = sUndo(i) - While pUndo IsNot Nothing - countUndo += 1 - pUndo = pUndo.Next - End While - bw.Write(countUndo) - - 'UndoCommands - pUndo = sUndo(i) - For xxi As Integer = 1 To countUndo - Dim bUndo() As Byte = pUndo.toBytes - bw.Write(bUndo.Length) 'Length - bw.Write(bUndo) 'Command - pUndo = pUndo.Next - Next - - 'RedoCommandsCount - Dim countRedo As Integer = 0 - Dim pRedo As UndoRedo.LinkedURCmd = sRedo(i) - While pRedo IsNot Nothing - countRedo += 1 - pRedo = pRedo.Next - End While - bw.Write(countRedo) - - 'RedoCommands - pRedo = sRedo(i) - For xxi As Integer = 1 To countRedo - Dim bRedo() As Byte = pRedo.toBytes - bw.Write(bRedo.Length) - bw.Write(bRedo) - pRedo = pRedo.Next - Next - Next - - bw.Close() - - Catch ex As Exception - - MsgBox(ex.Message) - - End Try - - End Sub - -End Class +Imports System.Linq +Imports iBMSC.Editor + +Partial Public Class MainWindow + Private Sub OpenBMS(ByVal xStrAll As String, Optional xGhost As Boolean = False, Optional xComment As Boolean = False) + KMouseOver = -1 + + 'Line feed validation: will remove some empty lines + xStrAll = Replace(Replace(Replace(xStrAll, vbLf, vbCr), vbCr & vbCr, vbCr), vbCr, vbCrLf) + + Dim xStrLine() As String = Split(xStrAll, vbCrLf, , CompareMethod.Text) + Dim xStrLine2(xStrLine.Length) As String ' Create a second array which removes expansion codes from the second for loop + Dim xI1 As Integer + Dim sLine As String + Dim xExpansion As String = "" + Dim xEditorExpansion As String = "" + Dim nNotes As Integer = 1 + + ' Assume ghost note strings contain only notes in the section. Expansion field to be saved separately + If xGhost Then + nNotes = Notes.Length + ElseIf xComment Then + nNotes = Notes.Length + ReDim mColumn(999) + Else ' Initialization + ReDim Notes(0) + ReDim NotesTemplate(0) + ReDim mColumn(999) + ReDim hWAV(1295) + ReDim hBMP(1295) + ReDim hBPM(1295) 'x10000 + ReDim hSTOP(1295) + ReDim hBMSCROLL(1295) + Me.InitializeNewBMS() + Me.InitializeOpenBMS() + + With Notes(0) + .ColumnIndex = niBPM + .VPosition = -1 + '.LongNote = False + '.Selected = False + .Value = 1200000 + End With + End If + + 'old list below, not sure what this means + 'random, setRandom 0 + 'endRandom 0 + 'if +1 + 'else 0 + 'endif -1 + 'switch, setSwitch +1 + 'case, skip, def 0 + 'endSw -1 + 'P: I'm gonna do what's called a pro gamer move + + Dim xStack As Integer = 0 + Dim nLine As Integer = -1 + + For Each sLine In xStrLine + If xComment Then xStrLine2 = xStrLine : nLine = UBound(xStrLine) : Exit For + + Dim sLineTrim As String = sLine.Trim + If sLineTrim = "" Then Continue For + + If xStack > 0 Then AddToExpansion(xExpansion, xStack, sLine) : Continue For + If Not xGhost AndAlso Not xComment Then ' Load header if not ghost notes and not comment notes + + If sLineTrim.StartsWith("#") And Mid(sLineTrim, 5, 3) = "02:" Then + Dim xIndex As Integer = Integer.Parse(Mid(sLineTrim, 2, 3)) + Dim xRatio As Double = Double.Parse(Mid(sLineTrim, 8)) + MeasureLength(xIndex) = xRatio * 192.0R + Continue For + + ElseIf SWIC(sLineTrim, "#WAV") Then + Dim i = C36to10(Mid(sLineTrim, Len("#WAV") + 1, 2)) + If i = 0 Then + AddToExpansion(xExpansion, xStack, sLine) + Else + hWAV(i) = Mid(sLineTrim, Len("#WAV") + 4) + End If + Continue For + + ElseIf SWIC(sLineTrim, "#BMP") Then + Dim i = C36to10(Mid(sLineTrim, Len("#BMP") + 1, 2)) + If i = 0 Then + AddToExpansion(xExpansion, xStack, sLine) + Else + hBMP(i) = Mid(sLineTrim, Len("#BMP") + 4) + End If + Continue For + + ElseIf SWIC(sLineTrim, "#BPM") And Not Mid(sLineTrim, Len("#BPM") + 1, 1).Trim = "" Then 'If BPM## + ' zdr: No limits on BPM editing.. they don't make much sense. + hBPM(C36to10(Mid(sLineTrim, Len("#BPM") + 1, 2))) = CLng(CDbl(Mid(sLineTrim, Len("#BPM") + 4)) * 10000) + Continue For + + 'No limits on STOPs either. + ElseIf SWIC(sLineTrim, "#STOP") Then + hSTOP(C36to10(Mid(sLineTrim, Len("#STOP") + 1, 2))) = CLng(CDbl(Mid(sLineTrim, Len("#STOP") + 4)) * 10000) + Continue For + + ElseIf SWIC(sLineTrim, "#SCROLL") Then + hBMSCROLL(C36to10(Mid(sLineTrim, Len("#SCROLL") + 1, 2))) = CLng(CDbl(Mid(sLineTrim, Len("#SCROLL") + 4)) * 10000) + Continue For + + ElseIf SWIC(sLineTrim, "#TITLE") Then + THTitle.Text = Mid(sLineTrim, Len("#TITLE") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#ARTIST") Then + THArtist.Text = Mid(sLineTrim, Len("#ARTIST") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#GENRE") Then + THGenre.Text = Mid(sLineTrim, Len("#GENRE") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#BPM") Then 'If BPM #### + Notes(0).Value = CLng(CDbl(Mid(sLineTrim, Len("#BPM") + 1).Trim) * 10000) + THBPM.Value = CDec(Notes(0).Value / 10000) + Continue For + + ElseIf SWIC(sLineTrim, "#PLAYER") Then + Dim xInt As Integer = CInt(Mid(sLineTrim, Len("#PLAYER") + 1).Trim) + If xInt >= 1 And xInt <= 4 Then _ + CHPlayer.SelectedIndex = xInt - 1 + Continue For + + ElseIf SWIC(sLineTrim, "#RANK") Then + Dim xInt As Integer = CInt(Mid(sLineTrim, Len("#RANK") + 1).Trim) + If xInt >= 0 And xInt <= 4 Then _ + CHRank.SelectedIndex = xInt + Continue For + + ElseIf SWIC(sLineTrim, "#PLAYLEVEL") Then + THPlayLevel.Text = Mid(sLineTrim, Len("#PLAYLEVEL") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#SUBTITLE") Then + THSubTitle.Text = Mid(sLineTrim, Len("#SUBTITLE") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#SUBARTIST") Then + THSubArtist.Text = Mid(sLineTrim, Len("#SUBARTIST") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#STAGEFILE") Then + THStageFile.Text = Mid(sLineTrim, Len("#STAGEFILE") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#BANNER") Then + THBanner.Text = Mid(sLineTrim, Len("#BANNER") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#BACKBMP") Then + THBackBMP.Text = Mid(sLineTrim, Len("#BACKBMP") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#DIFFICULTY") Then + Try + CHDifficulty.SelectedIndex = Integer.Parse(Mid(sLineTrim, Len("#DIFFICULTY") + 1).Trim) + Catch ex As Exception + End Try + Continue For + + ElseIf SWIC(sLineTrim, "#DEFEXRANK") Then + THExRank.Text = Mid(sLineTrim, Len("#DEFEXRANK") + 1).Trim + Continue For + + ElseIf SWIC(sLineTrim, "#TOTAL") Then + Dim xStr As String = Mid(sLineTrim, Len("#TOTAL") + 1).Trim + 'If xStr.EndsWith("%") Then xStr = Mid(xStr, 1, Len(xStr) - 1) + THTotal.Text = xStr + Continue For + + ElseIf SWIC(sLineTrim, "#COMMENT") Then + Dim xStr As String = Mid(sLineTrim, Len("#COMMENT") + 1).Trim + If xStr.StartsWith("""") Then xStr = Mid(xStr, 2) + If xStr.EndsWith("""") Then xStr = Mid(xStr, 1, Len(xStr) - 1) + THComment.Text = xStr + Continue For + + ElseIf SWIC(sLineTrim, "#LNTYPE") Then + 'THLnType.Text = Mid(sLineTrim, Len("#LNTYPE") + 1).Trim + If Integer.Parse(Mid(sLineTrim, Len("#LNTYPE") + 1).Trim) = 1 Then CHLnObj.SelectedIndex = 0 + Continue For + + ElseIf SWIC(sLineTrim, "#LNOBJ") Then + Dim xValue As Integer = C36to10(Mid(sLineTrim, Len("#LNOBJ") + 1).Trim) + CHLnObj.SelectedIndex = xValue + Continue For + + ElseIf SWIC(sLineTrim, "#ECMD") Then + xEditorExpansion &= sLineTrim.Replace("#ECMD", "#") & vbCrLf + Continue For + + ElseIf SWIC(sLineTrim, "#ECOM") Then ' Comment notes + Dim xComVal As Integer = C36to10(Mid(sLineTrim, Len("#ECOM") + 1, 2).ToString()) + hCOM(C36to10(xComVal)) = Mid(sLineTrim, Len("#ECOM") + 4) + If xComVal > hCOMNum Then hCOMNum = xComVal + Continue For + + ElseIf SWIC(sLineTrim, "#TEMPLATE") Then + FileNameTemplate = Mid(sLineTrim, Len("#TEMPLATE") + 2) + NotesTemplate = OpenBMSFunc(My.Computer.FileSystem.ReadAllText(ExcludeFileName(FileName) & "\" & FileNameTemplate, TextEncoding)) + Continue For + + End If + 'TODO: LNOBJ value validation + + 'ElseIf SWIC(sLineTrim,"#LNTYPE") Then + ' CAdLNTYPE.Checked = True + ' If Mid(sLineTrim, 9) = "" Or Mid(sLineTrim, 9) = "1" Or Mid(sLineTrim, 9) = "01" Then CAdLNTYPEb.Text = "1" + ' CAdLNTYPEb.Text = Mid(sLineTrim, 9) + End If + + If sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":" Then 'If the line contains Ks + Dim xIdentifier As String = Mid(sLineTrim, 5, 2) + If BMSChannelToColumn(xIdentifier) = 0 Then xExpansion &= sLine & vbCrLf : Continue For + + nLine += 1 + xStrLine2(nLine) = sLineTrim + + Else + AddToExpansion(xExpansion, xStack, sLine) + End If + Next + + UpdateMeasureBottom() + If Not IsApplicationInitializing Then LBeatRefresh() + + ' BPM must be updated before loading notes, do not combine loops + ' xStrLine2 should contain only # lines for notes + ReDim Preserve xStrLine2(nLine) + For Each sLineTrim In xStrLine2 + + If Not (sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":") Then Continue For 'If the line contains Ks ' P: The hell is a K + + ' >> Measure = Mid(sLine, 2, 3) + ' >> Column Identifier = Mid(sLine, 5, 2) + ' >> K = Mid(sLine, xI1, 2) + Dim xMeasure As Integer = CInt(Mid(sLineTrim, 2, 3)) + Dim Channel As String = Mid(sLineTrim, 5, 2) + ' If BMSChannelToColumn(Channel) = 0 Then Continue For + + If Channel = "01" Then mColumn(xMeasure) += 1 'If the identifier is 01 then add a B column in that measure + For xI1 = 8 To Len(sLineTrim) - 1 Step 2 'For all Ks within that line ( - 1 can be ommitted ) + If Mid(sLineTrim, xI1, 2) = "00" Then Continue For 'If the K is not 00 + + ReDim Preserve Notes(Notes.Length) + + With Notes(UBound(Notes)) + .ColumnIndex = BMSChannelToColumn(Channel) + + CInt(IIf(Channel = "01", 1, 0)) * (mColumn(xMeasure) - 1) + .LongNote = IsChannelLongNote(Channel) + .Hidden = IsChannelHidden(Channel) + .Landmine = IsChannelLandmine(Channel) + .Selected = False + .VPosition = MeasureBottom(xMeasure) + MeasureLength(xMeasure) * (xI1 / 2 - 4) / ((Len(sLineTrim) - 7) / 2) + .Value = C36to10(Mid(sLineTrim, xI1, 2)) * 10000 + .Ghost = xGhost + .Comment = xComment + + If Channel = "03" Then .Value = Convert.ToInt32(Mid(sLineTrim, xI1, 2), 16) * 10000 + If Channel = "08" Then .Value = hBPM(C36to10(Mid(sLineTrim, xI1, 2))) + If Channel = "09" Then .Value = hSTOP(C36to10(Mid(sLineTrim, xI1, 2))) + If Channel = "SC" Then .Value = hBMSCROLL(C36to10(Mid(sLineTrim, xI1, 2))) + End With + + Next + Next + + If xEditorExpansion <> "" Then OpenBMS(xEditorExpansion,, True) + + If xGhost Or xComment Then + If xGhost AndAlso NTInput Then ConvertBMSE2NT(nNotes) + Else + If NTInput Then ConvertBMSE2NT() + + If Not IsApplicationInitializing Then + ' Add waveforms to wLWAV + If ShowWaveform Then WaveformLoadId = 1 : TimerLoadWaveform.Enabled = True + LWAVRefresh() + LWAV.SelectedIndex = 0 + LBMPRefresh() + LBMP.SelectedIndex = 0 + + TExpansion.Text = xExpansion + + LoadColorOverride(FileName) + SortByVPositionQuick(0, UBound(Notes)) + UpdatePairing() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + RefreshPanelAll() + POStatusRefresh() + + End If + End If + End Sub + + Private Sub AddToExpansion(ByRef xExpansion As String, ByRef xStack As Integer, ByVal sLine As String) + Dim sLineTrim As String = sLine.Trim + If SWIC(sLineTrim, "#IF") Or SWIC(sLineTrim, "#SWITCH") Or SWIC(sLineTrim, "#SETSWITCH") Then + xStack += 1 + xExpansion &= sLine & vbCrLf + ElseIf SWIC(sLineTrim, "#ENDIF") Or SWIC(sLineTrim, "#ENDSW") Then + xStack -= 1 + xExpansion &= sLine & vbCrLf + ElseIf sLineTrim.StartsWith("#") Then + xExpansion &= sLine & vbCrLf + End If + End Sub + + Private Function OpenBMSFunc(ByVal xStrAll As String) As Note() + 'Line feed validation: will remove some empty lines + xStrAll = Replace(Replace(Replace(xStrAll, vbLf, vbCr), vbCr & vbCr, vbCr), vbCr, vbCrLf) + + Dim xStrLine() As String = Split(xStrAll, vbCrLf, , CompareMethod.Text) + Dim xStrLine2(xStrLine.Length) As String ' Create a second array which removes expansion codes from the second for loop + Dim xI1 As Integer + Dim sLine As String + Dim xExpansion As String = "" + + Dim Notes(0) As Note + Dim mColumn(999) As Integer + Dim hWAV(1295) As String + Dim hBMP(1295) As String + Dim hBPM(1295) As Long 'x10000 + Dim hSTOP(1295) As Long + Dim hBMSCROLL(1295) As Long + Dim MeasureLength(999) As Double + For i = 0 To UBound(MeasureLength) + MeasureLength(i) = 192.0R + Next + + With Notes(0) + .ColumnIndex = niBPM + .VPosition = -1 + .Value = 1200000 + End With + + Dim xStack As Integer = 0 + Dim nLine As Integer = -1 + + For Each sLine In xStrLine + Dim sLineTrim As String = sLine.Trim + If sLineTrim = "" Then Continue For + + If xStack > 0 Then AddToExpansion(xExpansion, xStack, sLine) : Continue For + + If sLineTrim.StartsWith("#") And Mid(sLineTrim, 5, 3) = "02:" Then + Dim xIndex As Integer = CInt(Mid(sLineTrim, 2, 3)) + Dim xRatio As Double = CDbl(Mid(sLineTrim, 8)) + MeasureLength(xIndex) = xRatio * 192.0R + Continue For + + ElseIf SWIC(sLineTrim, "#BPM") And Not Mid(sLineTrim, Len("#BPM") + 1, 1).Trim = "" Then 'If BPM## + ' zdr: No limits on BPM editing.. they don't make much sense. + hBPM(C36to10(Mid(sLineTrim, Len("#BPM") + 1, 2))) = CLng(CDbl(Mid(sLineTrim, Len("#BPM") + 4)) * 10000) + Continue For + + ElseIf SWIC(sLineTrim, "#BPM") Then 'If BPM #### + Notes(0).Value = CLng(CDbl(Mid(sLineTrim, Len("#BPM") + 1).Trim)) * 10000 + Continue For + + 'No limits on STOPs either. + ElseIf SWIC(sLineTrim, "#STOP") Then + hSTOP(C36to10(Mid(sLineTrim, Len("#STOP") + 1, 2))) = CLng(CDbl(Mid(sLineTrim, Len("#STOP") + 4)) * 10000) + Continue For + + ElseIf SWIC(sLineTrim, "#SCROLL") Then + hBMSCROLL(C36to10(Mid(sLineTrim, Len("#SCROLL") + 1, 2))) = CLng(CDbl(Mid(sLineTrim, Len("#SCROLL") + 4)) * 10000) + Continue For + + End If + + If sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":" Then 'If the line contains Ks + Dim xIdentifier As String = Mid(sLineTrim, 5, 2) + If BMSChannelToColumn(xIdentifier) = 0 Then xExpansion &= sLine & vbCrLf : Continue For + + nLine += 1 + xStrLine2(nLine) = sLineTrim + + Else + AddToExpansion(xExpansion, xStack, sLine) + End If + Next + Dim MeasureBottom(999) As Double + MeasureBottom(0) = 0.0# + For xIM As Integer = 0 To 998 + MeasureBottom(xIM + 1) = MeasureBottom(xIM) + MeasureLength(xIM) + Next + + ' BPM must be updated before loading notes, do not combine loops + ' xStrLine2 should contain only # lines for notes + ReDim Preserve xStrLine2(nLine) + For Each sLineTrim In xStrLine2 + + If Not (sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":") Then Continue For 'If the line contains Ks ' P: The hell is a K + + ' >> Measure = Mid(sLine, 2, 3) + ' >> Column Identifier = Mid(sLine, 5, 2) + ' >> K = Mid(sLine, xI1, 2) + Dim xMeasure As Integer = CInt(Mid(sLineTrim, 2, 3)) + Dim Channel As String = Mid(sLineTrim, 5, 2) + If BMSChannelToColumn(Channel) = 0 Then Continue For + + If Channel = "01" Then mColumn(xMeasure) += 1 'If the identifier is 01 then add a B column in that measure + For xI1 = 8 To Len(sLineTrim) - 1 Step 2 'For all Ks within that line ( - 1 can be ommitted ) + If Mid(sLineTrim, xI1, 2) = "00" Then Continue For 'If the K is not 00 + + ReDim Preserve Notes(Notes.Length) + + With Notes(UBound(Notes)) + .ColumnIndex = BMSChannelToColumn(Channel) + + CInt(IIf(Channel = "01", 1, 0)) * (mColumn(xMeasure) - 1) + .LongNote = IsChannelLongNote(Channel) + .Hidden = IsChannelHidden(Channel) + .Landmine = IsChannelLandmine(Channel) + .Selected = False + .VPosition = MeasureBottom(xMeasure) + MeasureLength(xMeasure) * (xI1 / 2 - 4) / ((Len(sLineTrim) - 7) / 2) + .Value = C36to10(Mid(sLineTrim, xI1, 2)) * 10000 + + If Channel = "03" Then .Value = Convert.ToInt32(Mid(sLineTrim, xI1, 2), 16) * 10000 + If Channel = "08" Then .Value = hBPM(C36to10(Mid(sLineTrim, xI1, 2))) + If Channel = "09" Then .Value = hSTOP(C36to10(Mid(sLineTrim, xI1, 2))) + If Channel = "SC" Then .Value = hBMSCROLL(C36to10(Mid(sLineTrim, xI1, 2))) + End With + + Next + Next + + ' If NTInput Then ConvertBMSE2NT() + + Return Notes + End Function + + ReadOnly BMSChannelList() As String = {"01", "03", "04", "06", "07", "08", "09", + "11", "12", "13", "14", "15", "16", "18", "19", + "21", "22", "23", "24", "25", "26", "28", "29", + "31", "32", "33", "34", "35", "36", "38", "39", + "41", "42", "43", "44", "45", "46", "48", "49", + "51", "52", "53", "54", "55", "56", "58", "59", + "61", "62", "63", "64", "65", "66", "68", "69", + "D1", "D2", "D3", "D4", "D5", "D6", "D8", "D9", + "E1", "E2", "E3", "E4", "E5", "E6", "E8", "E9", + "SC"} + ' 71 through 89 are reserved + '"71", "72", "73", "74", "75", "76", "78", "79", + '"81", "82", "83", "84", "85", "86", "88", "89", + + Private Function SWIC(str As String, strHash As String) As Boolean ' StartsWith, IgnoreCase + Return str.StartsWith(strHash, StringComparison.CurrentCultureIgnoreCase) + End Function + + Private Function SaveBMS(Optional xRandom As Boolean = False) As String + CalculateGreatestVPosition() + SortByVPositionInsertion() + UpdatePairing() + Dim MeasureIndex As Integer + Dim hasOverlapping As Boolean = False + 'Dim xStrAll As String = "" 'for all + Dim xStrMeasure(MeasureAtDisplacement(GreatestVPosition) + 1) As String + + ' We regenerate these when traversing the bms event list. + + Dim xNTInput As Boolean = NTInput + If GhostMode = 2 Then SwapGhostNotes() ' Revert main notes back to non-ghost notes + Dim xNotesBackup() As Note = CType(Notes.Clone(), Note()) 'All notes + + If xNTInput Then + NTInput = False + ConvertNT2BMSE() + End If + + If Not xRandom Then + ReDim hBPM(0) + ReDim hSTOP(0) + ReDim hBMSCROLL(0) + End If + + Dim tempNote As Note 'Temp K + Dim xprevNotes(-1) As Note 'Notes too close to the next measure + + RemoveGhostNotes() ' Remove Ghost Notes from Notes() + RemoveCommentNotes() ' Remove Comment Notes from Notes() + + For MeasureIndex = 0 To MeasureAtDisplacement(GreatestVPosition) + 1 'For xI1 in each measure + xStrMeasure(MeasureIndex) = vbCrLf + + Dim consistentDecimalStr = WriteDecimalWithDot(MeasureLength(MeasureIndex) / 192.0R) + + ' Handle fractional measure + If MeasureLength(MeasureIndex) <> 192.0R Then xStrMeasure(MeasureIndex) &= "#" & Add3Zeros(MeasureIndex) & "02:" & consistentDecimalStr & vbCrLf + + ' Get note count in current measure + Dim LowerLimit As Integer = Nothing + Dim UpperLimit As Integer = Nothing + GetMeasureLimits(MeasureIndex, LowerLimit, UpperLimit) + + If UpperLimit - LowerLimit = 0 Then Continue For 'If there is no K in the current measure then end this loop + + ' Get notes from this measure + Dim xUPrevText As Integer = UBound(xprevNotes) + Dim NotesInMeasure(UpperLimit - LowerLimit + xUPrevText) As Note + + ' Copy notes from previous array + For i = 0 To xUPrevText + NotesInMeasure(i) = xprevNotes(i) + Next + + ' Copy notes in current measure + For i = LowerLimit To UpperLimit - 1 + NotesInMeasure(i - LowerLimit + xprevNotes.Length) = Notes(i) + Next + + ' Find greatest column. + ' Since background tracks have the highest column values + ' this - niB will yield the number of B columns. + Dim GreatestColumn = 0 + For Each tempNote In NotesInMeasure + GreatestColumn = Math.Max(tempNote.ColumnIndex, GreatestColumn) + Next + + ReDim xprevNotes(-1) + xStrMeasure(MeasureIndex) &= GenerateBackgroundTracks(MeasureIndex, hasOverlapping, NotesInMeasure, GreatestColumn, xprevNotes) + xStrMeasure(MeasureIndex) &= GenerateKeyTracks(MeasureIndex, hasOverlapping, NotesInMeasure, xprevNotes) + Next + + ' Warn about 255 limit if neccesary. + If hasOverlapping Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & + Strings.Messages.NoteOverlapError & vbCrLf & + Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) + If UBound(hBPM) > CInt(IIf(BPMx1296, 1295, 255)) Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & + Strings.Messages.BPMOverflowError & UBound(hBPM) & " > " & IIf(BPMx1296, 1295, 255).ToString() & vbCrLf & + Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) + If UBound(hSTOP) > CInt(IIf(STOPx1296, 1295, 255)) Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & + Strings.Messages.STOPOverflowError & UBound(hSTOP) & " > " & IIf(STOPx1296, 1295, 255).ToString() & vbCrLf & + Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) + If UBound(hBMSCROLL) > 1295 Then MsgBox(Strings.Messages.SaveWarning & vbCrLf & + Strings.Messages.SCROLLOverflowError & UBound(hBMSCROLL) & " > " & 1295 & vbCrLf & + Strings.Messages.SavedFileWillContainErrors, MsgBoxStyle.Exclamation) + + ' If xRandom then return bms style random data field, combining expansion text and main data field. + If xRandom Then + Return TExpansion.Text & vbCrLf & Join(xStrMeasure, "") & vbCrLf & "*---------------------- RANDOM DATA FIELD" + End If + + ' Add expansion text + ' Add and combine ghost notes with existing expansion text + Dim GhostModeTemp As Integer = -1 + If GhostMode <> 0 Then + ' Generate String array for duplicate comparison + GhostModeTemp = GhostMode + GhostMode = 0 + TExpansion.Text = "" + Dim xKBackUpG() As Note = CType(xNotesBackup.Clone(), Note()) + Dim xStrCompare() As String = Split(Replace(Replace(Replace(SaveBMS(), vbLf, vbCr), vbCr & vbCr, vbCr), vbCr, vbCrLf), vbCrLf,, CompareMethod.Text) + + ' Save ghost notes + Notes = CType(xKBackUpG.Clone(), Note()) + If xNTInput Then ConvertNT2BMSE() + SwapGhostNotes() + RemoveGhostNotes() ' Remove Main Notes from Notes() + RemoveCommentNotes() ' Remove Comment Notes from Notes() + TExpansion.Text = ExtractExpansion(ExpansionSplit(1)) + Dim xStrExpGhostNotes As String = SaveBMS(True) + GhostMode = GhostModeTemp + + ExpansionSplit(1) = "" + For Each xStrLine In Split(xStrExpGhostNotes, vbCrLf) + If (Not xStrCompare.Contains(xStrLine) AndAlso xStrLine <> "*---------------------- RANDOM DATA FIELD") Or + SWIC(xStrLine, "#RANDOM") Or SWIC(xStrLine, "#IF") Or SWIC(xStrLine, "#ENDIF") Then + ExpansionSplit(1) &= xStrLine & vbCrLf + End If + Next + TExpansion.Text = Join(ExpansionSplit, vbCrLf) + xNotesBackup = CType(xKBackUpG.Clone(), Note()) + End If + ' Combine all expansion texts + Dim xStrExp As String = vbCrLf & "*---------------------- EXPANSION FIELD" & vbCrLf & TExpansion.Text & vbCrLf & vbCrLf + If TExpansion.Text = "" Then xStrExp = "" + + ' Add comment notes + Dim xStrEditorCommentNotes As String = "" + Notes = CType(xNotesBackup.Clone(), Note()) + If xNTInput Then ConvertNT2BMSE() + ' Swap comment notes. Not a sub/function since expected to use only once. + For xI1 = 1 To UBound(Notes) + Notes(xI1).Comment = Not Notes(xI1).Comment + Next + RemoveCommentNotes() ' Remove non-comment notes + If UBound(Notes) > 0 Then + Dim ExpansionTextTemp = TExpansion.Text + TExpansion.Text = "" + If GhostModeTemp <> -1 Then GhostMode = 0 + xStrEditorCommentNotes = SaveBMS(True).Replace("*---------------------- RANDOM DATA FIELD", "").Replace(vbCrLf & vbCrLf, vbCrLf).Replace("#", "#ECMD") + If GhostModeTemp <> -1 Then GhostMode = GhostModeTemp + For i = 1 To UBound(hCOM) + If Not IsNothing(hCOM(i)) Then xStrEditorCommentNotes &= vbCrLf & "#ECOM" & C10to36(i) & " " & hCOM(i) + Next + TExpansion.Text = ExpansionTextTemp + End If + ' Add template filename + Dim xStrEditorTemplate As String = "" + If FileNameTemplate <> "" Then xStrEditorTemplate = "#TEMPLATE " & FileNameTemplate + Dim xStrEditor As String = vbCrLf & "*---------------------- EDITOR EXPANSION FIELD" & vbCrLf & xStrEditorCommentNotes & vbCrLf & xStrEditorTemplate & vbCrLf & vbCrLf + If xStrEditorCommentNotes = "" AndAlso xStrEditorTemplate = "" Then xStrEditor = "" + + ' Output main data field. + Dim xStrMain As String = "*---------------------- MAIN DATA FIELD" & vbCrLf & vbCrLf & Join(xStrMeasure, "") & vbCrLf + + ' Restore notes + Notes = CType(xNotesBackup.Clone(), Note()) + If xNTInput Then + NTInput = True + End If + + ' Return ghost notes back to Notes + If GhostMode = 2 Then SwapGhostNotes() + + ' Generate headers now, since we have the unique BPM/STOP/etc declarations. + Dim xStrHeader As String = GenerateHeaderMeta() + xStrHeader &= GenerateHeaderIndexedData() + + Return xStrHeader & vbCrLf & xStrExp & vbCrLf & xStrEditor & vbCrLf & xStrMain + End Function + + Private Function ExtractExpansion(ByVal xString As String) As String + xString = Replace(Replace(Replace(xString, vbLf, vbCr), vbCr & vbCr, vbCr), vbCr, vbCrLf) + Dim xStrLine() As String = Split(xString, vbCrLf, , CompareMethod.Text) + Dim xExpansion As String = "" + Dim sLine As String + Dim xStack As Integer = 0 + For Each sLine In xStrLine + Dim sLineTrim As String = sLine.Trim + If xStack > 0 Then + AddToExpansion(xExpansion, xStack, sLine) + Continue For + + ElseIf sLineTrim.StartsWith("#") And Mid(sLineTrim, 7, 1) = ":" Then 'If the line contains Ks + Dim xIdentifier As String = Mid(sLineTrim, 5, 2) + If BMSChannelToColumn(xIdentifier) = 0 Then xExpansion &= sLine & vbCrLf + + Else + AddToExpansion(xExpansion, xStack, sLine) + + End If + Next + + Return xExpansion + End Function + + Private Function GenerateHeaderMeta() As String + Dim xStrHeader As String = vbCrLf & "*---------------------- HEADER FIELD" & vbCrLf & vbCrLf + xStrHeader &= "#PLAYER " & (CHPlayer.SelectedIndex + 1) & vbCrLf + xStrHeader &= "#GENRE " & THGenre.Text & vbCrLf + xStrHeader &= "#TITLE " & THTitle.Text & vbCrLf + xStrHeader &= "#ARTIST " & THArtist.Text & vbCrLf + xStrHeader &= "#BPM " & WriteDecimalWithDot(Notes(0).Value / 10000) & vbCrLf + xStrHeader &= "#PLAYLEVEL " & THPlayLevel.Text & vbCrLf + xStrHeader &= "#RANK " & CHRank.SelectedIndex & vbCrLf + xStrHeader &= vbCrLf + If THSubTitle.Text <> "" Then xStrHeader &= "#SUBTITLE " & THSubTitle.Text & vbCrLf + If THSubArtist.Text <> "" Then xStrHeader &= "#SUBARTIST " & THSubArtist.Text & vbCrLf + If THStageFile.Text <> "" Then xStrHeader &= "#STAGEFILE " & THStageFile.Text & vbCrLf + If THBanner.Text <> "" Then xStrHeader &= "#BANNER " & THBanner.Text & vbCrLf + If THBackBMP.Text <> "" Then xStrHeader &= "#BACKBMP " & THBackBMP.Text & vbCrLf + xStrHeader &= vbCrLf + If CHDifficulty.SelectedIndex > 0 Then xStrHeader &= "#DIFFICULTY " & CHDifficulty.SelectedIndex & vbCrLf + If THExRank.Text <> "" Then xStrHeader &= "#DEFEXRANK " & THExRank.Text & vbCrLf + If THTotal.Text <> "" Then xStrHeader &= "#TOTAL " & THTotal.Text & vbCrLf + If THComment.Text <> "" Then xStrHeader &= "#COMMENT """ & THComment.Text & """" & vbCrLf + 'If THLnType.Text <> "" Then xStrHeader &= "#LNTYPE " & THLnType.Text & vbCrLf + If CHLnObj.SelectedIndex > 0 Then xStrHeader &= "#LNOBJ " & C10to36(CHLnObj.SelectedIndex) & vbCrLf _ + Else xStrHeader &= "#LNTYPE 1" & vbCrLf + xStrHeader &= vbCrLf + Return xStrHeader + End Function + + Private Function GenerateHeaderIndexedData() As String + Dim xStrHeader As String = "" + + For i = 1 To UBound(hWAV) + If Not hWAV(i) = "" Then xStrHeader &= "#WAV" & C10to36(i) & + " " & hWAV(i) & vbCrLf + Next + For i = 1 To UBound(hBMP) + If Not hBMP(i) = "" Then xStrHeader &= "#BMP" & C10to36(i) & + " " & hBMP(i) & vbCrLf + Next + For i = 1 To UBound(hBPM) + xStrHeader &= "#BPM" & + IIf(BPMx1296, C10to36(i), Mid("0" & Hex(i), Len(Hex(i)))).ToString() & + " " & WriteDecimalWithDot(hBPM(i) / 10000) & vbCrLf + Next + For i = 1 To UBound(hSTOP) + xStrHeader &= "#STOP" & + IIf(STOPx1296, C10to36(i), Mid("0" & Hex(i), Len(Hex(i)))).ToString() & + " " & WriteDecimalWithDot(hSTOP(i) / 10000) & vbCrLf + Next + For i = 1 To UBound(hBMSCROLL) + xStrHeader &= "#SCROLL" & + C10to36(i) & " " & WriteDecimalWithDot(hBMSCROLL(i) / 10000) & vbCrLf + Next + + Return xStrHeader + End Function + + Private Sub GetMeasureLimits(MeasureIndex As Integer, ByRef LowerLimit As Integer, ByRef UpperLimit As Integer) + Dim NoteCount = UBound(Notes) + LowerLimit = 0 + + For i = 1 To NoteCount 'Collect Ks in the same measure + If MeasureAtDisplacement(Notes(i).VPosition) >= MeasureIndex Then + LowerLimit = i + Exit For + End If 'Lower limit found + Next + + UpperLimit = 0 + + For i = LowerLimit To NoteCount + If MeasureAtDisplacement(Notes(i).VPosition) > MeasureIndex Then + UpperLimit = i + Exit For 'Upper limit found + End If + Next + + If UpperLimit < LowerLimit Then UpperLimit = NoteCount + 1 + End Sub + + Private Function GenerateKeyTracks(MeasureIndex As Integer, ByRef hasOverlapping As Boolean, NotesInMeasure() As Note, ByRef xprevNotes() As Note) As String + Dim CurrentBMSChannel As String + Dim Ret As String = "" + + For Each CurrentBMSChannel In BMSChannelList 'Start rendering other notes + Dim relativeMeasurePos(-1) As Double 'Ks in the same column + Dim NoteStrings(-1) As String 'Ks in the same column + + ' Background tracks take care of this. + If CurrentBMSChannel = "01" Then Continue For + + + For NoteIndex = 0 To UBound(NotesInMeasure) 'Find Ks in the same column (xI4 is TK index) + + Dim currentNote As Note = NotesInMeasure(NoteIndex) + If GetBMSChannelBy(currentNote) = CurrentBMSChannel Then + + ReDim Preserve relativeMeasurePos(UBound(relativeMeasurePos) + 1) + ReDim Preserve NoteStrings(UBound(NoteStrings) + 1) + relativeMeasurePos(UBound(relativeMeasurePos)) = currentNote.VPosition - MeasureBottom(MeasureAtDisplacement(currentNote.VPosition)) + If relativeMeasurePos(UBound(relativeMeasurePos)) < 0 Then relativeMeasurePos(UBound(relativeMeasurePos)) = 0 + + If CurrentBMSChannel = "03" Then 'If integer bpm + NoteStrings(UBound(NoteStrings)) = Mid("0" & Hex(currentNote.Value \ 10000), Len(Hex(currentNote.Value \ 10000))) + ElseIf CurrentBMSChannel = "08" Then 'If bpm requires declaration + Dim BpmIndex As Integer + For BpmIndex = 1 To UBound(hBPM) ' find BPM value in existing array + If currentNote.Value = hBPM(BpmIndex) Then Exit For + Next + If BpmIndex > UBound(hBPM) Then ' Didn't find it, add it + ReDim Preserve hBPM(UBound(hBPM) + 1) + hBPM(UBound(hBPM)) = currentNote.Value + End If + NoteStrings(UBound(NoteStrings)) = IIf(BPMx1296, C10to36(BpmIndex), Mid("0" & Hex(BpmIndex), Len(Hex(BpmIndex)))).ToString() + ElseIf CurrentBMSChannel = "09" Then 'If STOP + Dim StopIndex As Integer + For StopIndex = 1 To UBound(hSTOP) ' find STOP value in existing array + If currentNote.Value = hSTOP(StopIndex) Then Exit For + Next + + If StopIndex > UBound(hSTOP) Then ' Didn't find it, add it + ReDim Preserve hSTOP(UBound(hSTOP) + 1) + hSTOP(UBound(hSTOP)) = currentNote.Value + End If + NoteStrings(UBound(NoteStrings)) = IIf(STOPx1296, C10to36(StopIndex), Mid("0" & Hex(StopIndex), Len(Hex(StopIndex)))).ToString() + ElseIf CurrentBMSChannel = "SC" Then 'If SCROLL + Dim ScrollIndex As Integer + For ScrollIndex = 1 To UBound(hBMSCROLL) ' find SCROLL value in existing array + If currentNote.Value = hBMSCROLL(ScrollIndex) Then Exit For + Next + + If ScrollIndex > UBound(hBMSCROLL) Then ' Didn't find it, add it + ReDim Preserve hBMSCROLL(UBound(hBMSCROLL) + 1) + hBMSCROLL(UBound(hBMSCROLL)) = currentNote.Value + End If + NoteStrings(UBound(NoteStrings)) = C10to36(ScrollIndex) + Else + NoteStrings(UBound(NoteStrings)) = C10to36(currentNote.Value \ 10000) + End If + End If + Next + + If relativeMeasurePos.Length = 0 Then Continue For + + Dim xGCD As Double = MeasureLength(MeasureIndex) + For i = 0 To UBound(relativeMeasurePos) 'find greatest common divisor + If relativeMeasurePos(i) > 0 Then xGCD = GCD(xGCD, relativeMeasurePos(i)) + Next + + Dim xStrKey() As String + ReDim xStrKey(CInt(MeasureLength(MeasureIndex) / xGCD) - 1) + For i = 0 To UBound(xStrKey) 'assign 00 to all keys + xStrKey(i) = "00" + Next + + For i = 0 To UBound(relativeMeasurePos) 'assign K texts + If CInt(relativeMeasurePos(i) / xGCD) > UBound(xStrKey) Then + Dim CBMSCI As Integer = CInt(CurrentBMSChannel) + ReDim Preserve xprevNotes(UBound(xprevNotes) + 1) + With xprevNotes(UBound(xprevNotes)) + .ColumnIndex = BMSChannelToColumn(BMSChannelList(CBMSCI)) + .LongNote = IsChannelLongNote(BMSChannelList(CBMSCI)) + .Hidden = IsChannelHidden(BMSChannelList(CBMSCI)) + .VPosition = MeasureBottom(MeasureIndex) + .Value = C36to10(NoteStrings(i)) + End With + If BMSChannelList(CBMSCI) = "08" Then _ + xprevNotes(UBound(xprevNotes)).Value = CLng(IIf(BPMx1296, hBPM(C36to10(NoteStrings(i))), hBPM(Convert.ToInt32(NoteStrings(i), 16)))) + If BMSChannelList(CBMSCI) = "09" Then _ + xprevNotes(UBound(xprevNotes)).Value = CLng(IIf(STOPx1296, hSTOP(C36to10(NoteStrings(i))), hSTOP(Convert.ToInt32(NoteStrings(i), 16)))) + If BMSChannelList(CBMSCI) = "SC" Then _ + xprevNotes(UBound(xprevNotes)).Value = hBMSCROLL(C36to10(NoteStrings(i))) + Continue For + End If + If xStrKey(CInt(relativeMeasurePos(i) / xGCD)) <> "00" Then + hasOverlapping = True + End If + + xStrKey(CInt(relativeMeasurePos(i) / xGCD)) = NoteStrings(i) + Next + + Ret &= "#" & Add3Zeros(MeasureIndex) & CurrentBMSChannel & ":" & Join(xStrKey, "") & vbCrLf + Next + + Return Ret + End Function + + Private Function GenerateBackgroundTracks(MeasureIndex As Integer, ByRef hasOverlapping As Boolean, NotesInMeasure() As Note, GreatestColumn As Integer, ByRef xprevNotes() As Note) As String + Dim relativeNotePositions() As Double 'Ks in the same column + Dim noteStrings() As String 'Ks in the same column + Dim Ret As String = "" + + For ColIndex = niB To GreatestColumn 'Start rendering B notes (xI3 is columnindex) + ReDim relativeNotePositions(-1) 'Ks in the same column + ReDim noteStrings(-1) 'Ks in the same column + + For I = 0 To UBound(NotesInMeasure) 'Find Ks in the same column (xI4 is TK index) + If NotesInMeasure(I).ColumnIndex = ColIndex Then + + ReDim Preserve relativeNotePositions(UBound(relativeNotePositions) + 1) + ReDim Preserve noteStrings(UBound(noteStrings) + 1) + + relativeNotePositions(UBound(relativeNotePositions)) = NotesInMeasure(I).VPosition - MeasureBottom(MeasureAtDisplacement(NotesInMeasure(I).VPosition)) + If relativeNotePositions(UBound(relativeNotePositions)) < 0 Then relativeNotePositions(UBound(relativeNotePositions)) = 0 + + noteStrings(UBound(noteStrings)) = C10to36(NotesInMeasure(I).Value \ 10000) + End If + Next + + Dim xGCD As Double = MeasureLength(MeasureIndex) + For i = 0 To UBound(relativeNotePositions) 'find greatest common divisor + If relativeNotePositions(i) > 0 Then xGCD = GCD(xGCD, relativeNotePositions(i)) + Next + + Dim xStrKey(CInt(MeasureLength(MeasureIndex) / xGCD) - 1) As String + For i = 0 To UBound(xStrKey) 'assign 00 to all keys + xStrKey(i) = "00" + Next + + For i = 0 To UBound(relativeNotePositions) 'assign K texts + If CInt(relativeNotePositions(i) / xGCD) > UBound(xStrKey) Then + + ReDim Preserve xprevNotes(UBound(xprevNotes) + 1) + + With xprevNotes(UBound(xprevNotes)) + .ColumnIndex = ColIndex + .VPosition = MeasureBottom(MeasureIndex) + .Value = C36to10(noteStrings(i)) + End With + + Continue For + End If + If xStrKey(CInt(relativeNotePositions(i) / xGCD)) <> "00" Then hasOverlapping = True + xStrKey(CInt(relativeNotePositions(i) / xGCD)) = noteStrings(i) + Next + + Ret &= "#" & Add3Zeros(MeasureIndex) & "01:" & Join(xStrKey, "") & vbCrLf + Next + + Return Ret + End Function + + Private Function OpenSM(ByVal xStrAll As String) As Boolean + KMouseOver = -1 + + Dim xStrLine() As String = Split(xStrAll, vbCrLf) + 'Remove comments starting with "//" + For xI1 As Integer = 0 To UBound(xStrLine) + If xStrLine(xI1).Contains("//") Then xStrLine(xI1) = Mid(xStrLine(xI1), 1, InStr(xStrLine(xI1), "//") - 1) + Next + + xStrAll = Join(xStrLine, "") + xStrLine = Split(xStrAll, ";") + + Dim iDiff As Integer = 0 + Dim iCurrentDiff As Integer = 0 + Dim xTempSplit() As String = Split(xStrAll, "#NOTES:") + Dim xTempStr() As String = {} + If xTempSplit.Length > 2 Then + ReDim Preserve xTempStr(UBound(xTempSplit) - 1) + For xI1 As Integer = 1 To UBound(xTempSplit) + xTempSplit(xI1) = Mid(xTempSplit(xI1), InStr(xTempSplit(xI1), ":") + 1) + xTempSplit(xI1) = Mid(xTempSplit(xI1), InStr(xTempSplit(xI1), ":") + 1).Trim + xTempStr(xI1 - 1) = Mid(xTempSplit(xI1), 1, InStr(xTempSplit(xI1), ":") - 1) + xTempSplit(xI1) = Mid(xTempSplit(xI1), InStr(xTempSplit(xI1), ":") + 1).Trim + xTempStr(xI1 - 1) &= " : " & Mid(xTempSplit(xI1), 1, InStr(xTempSplit(xI1), ":") - 1) + Next + + Dim xDiag As New dgImportSM(xTempStr) + If xDiag.ShowDialog() = Windows.Forms.DialogResult.Cancel Then Return True + iDiff = xDiag.iResult + End If + + Dim sL As String + ReDim Notes(0) + ReDim mColumn(999) + ReDim hWAV(1295) + ReDim hBPM(1295) 'x10000 + ReDim hSTOP(1295) + ReDim hBMSCROLL(1295) + Me.InitializeNewBMS() + + With Notes(0) + .ColumnIndex = niBPM + .VPosition = -1 + '.LongNote = False + '.Selected = False + .Value = 1200000 + End With + + For Each sL In xStrLine + If UCase(sL).StartsWith("#TITLE:") Then + THTitle.Text = Mid(sL, Len("#TITLE:") + 1) + + ElseIf UCase(sL).StartsWith("#SUBTITLE:") Then + If Not UCase(sL).EndsWith("#SUBTITLE:") Then THTitle.Text &= " " & Mid(sL, Len("#SUBTITLE:") + 1) + + ElseIf UCase(sL).StartsWith("#ARTIST:") Then + THArtist.Text = Mid(sL, Len("#ARTIST:") + 1) + + ElseIf UCase(sL).StartsWith("#GENRE:") Then + THGenre.Text = Mid(sL, Len("#GENRE:") + 1) + + ElseIf UCase(sL).StartsWith("#BPMS:") Then + Dim xLine As String = Mid(sL, Len("#BPMS:") + 1) + Dim xItem() As String = Split(xLine, ",") + + Dim xVal1 As Double + Dim xVal2 As Long + + For xI1 As Integer = 0 To UBound(xItem) + xVal1 = CDbl(Mid(xItem(xI1), 1, InStr(xItem(xI1), "=") - 1)) + xVal2 = CLng(Mid(xItem(xI1), InStr(xItem(xI1), "=") + 1)) + + If xVal1 <> 0 Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = niBPM + '.LongNote = False + '.Hidden = False + '.Selected = False + .VPosition = xVal1 * 48 + .Value = xVal2 * 10000 + End With + Else + Notes(0).Value = xVal2 * 10000 + End If + Next + + ElseIf UCase(sL).StartsWith("#NOTES:") Then + If iCurrentDiff <> iDiff Then iCurrentDiff += 1 : Continue For + + iCurrentDiff += 1 + Dim xLine As String = Mid(sL, Len("#NOTES:") + 1) + Dim xItem() As String = Split(xLine, ":") + For xI1 As Integer = 0 To UBound(xItem) + xItem(xI1) = xItem(xI1).Trim + Next + + If xItem.Length <> 6 Then Continue For + + THPlayLevel.Text = xItem(3) + + Dim xM() As String = Split(xItem(5), ",") + For xI1 As Integer = 0 To UBound(xM) + xM(xI1) = xM(xI1).Trim + Next + + For xI1 As Integer = 0 To UBound(xM) + For xI2 As Integer = 0 To Len(xM(xI1)) - 1 Step 4 + If xM(xI1)(xI2) <> "0" Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = niA1 + .LongNote = xM(xI1)(xI2) = "2" Or xM(xI1)(xI2) = "3" + '.Hidden = False + '.Selected = False + .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 + .Value = 10000 + End With + End If + If xM(xI1)(xI2 + 1) <> "0" Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = niA2 + .LongNote = xM(xI1)(xI2 + 1) = "2" Or xM(xI1)(xI2 + 1) = "3" + '.Hidden = False + '.Selected = False + .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 + .Value = 10000 + End With + End If + If xM(xI1)(xI2 + 2) <> "0" Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = niA3 + .LongNote = xM(xI1)(xI2 + 2) = "2" Or xM(xI1)(xI2 + 2) = "3" + '.Hidden = False + '.Selected = False + .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 + .Value = 10000 + End With + End If + If xM(xI1)(xI2 + 3) <> "0" Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = niA4 + .LongNote = xM(xI1)(xI2 + 3) = "2" Or xM(xI1)(xI2 + 3) = "3" + '.Hidden = False + '.Selected = False + .VPosition = (192 \ (Len(xM(xI1)) \ 4)) * xI2 \ 4 + xI1 * 192 + .Value = 10000 + End With + End If + Next + Next + End If + Next + + If NTInput Then ConvertBMSE2NT() + + LWAVRefresh() + LWAV.SelectedIndex = 0 + LBMPRefresh() + LBMP.SelectedIndex = 0 + + THBPM.Value = CDec(Notes(0).Value / 10000) + SortByVPositionQuick(0, UBound(Notes)) + UpdatePairing() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + RefreshPanelAll() + POStatusRefresh() + Return False + End Function + + ''' Do not clear Undo. + Private Sub OpeniBMSC(ByVal Path As String) + KMouseOver = -1 + + Dim br As New BinaryReader(New FileStream(Path, FileMode.Open, FileAccess.Read), System.Text.Encoding.Unicode) + + If br.ReadInt32 = &H534D4269 Then + If br.ReadByte = CByte(&H43) Then + Dim xMajor As Integer = br.ReadByte + Dim xMinor As Integer = br.ReadByte + Dim xBuild As Integer = br.ReadByte + + ClearUndo() + ReDim Notes(0) + ReDim mColumn(999) + ReDim hWAV(1295) + ReDim hBMP(1295) + Me.InitializeNewBMS() + Me.InitializeOpenBMS() + + With Notes(0) + .ColumnIndex = niBPM + .VPosition = -1 + '.LongNote = False + '.Selected = False + .Value = 1200000 + End With + + Do Until br.BaseStream.Position >= br.BaseStream.Length + Dim BlockID As Integer = br.ReadInt32() + + Select Case BlockID + + Case &H66657250 'Preferences + Dim xPref As Integer = br.ReadInt32 + + NTInput = CBool(xPref And &H1) + RefreshItemsByNTInput() + + ErrorCheck = CBool(xPref And &H2) + TBErrorCheck.Checked = ErrorCheck + TBErrorCheck_Click(TBErrorCheck, New System.EventArgs) + + PreviewOnClick = CBool(xPref And &H4) + TBPreviewOnClick.Checked = PreviewOnClick + TBPreviewOnClick_Click(TBPreviewOnClick, New System.EventArgs) + + ShowFileName = CBool(xPref And &H8) + TBShowFileName.Checked = ShowFileName + TBShowFileName_Click(TBShowFileName, New System.EventArgs) + + mnSMenu.Checked = CBool(xPref And &H100) + mnSTB.Checked = CBool(xPref And &H200) + mnSOP.Checked = CBool(xPref And &H400) + mnSStatus.Checked = CBool(xPref And &H800) + mnSLSplitter.Checked = CBool(xPref And &H1000) + mnSRSplitter.Checked = CBool(xPref And &H2000) + + CGShow.Checked = CBool(xPref And &H4000) + CGShowS.Checked = CBool(xPref And &H8000) + CGShowBG.Checked = CBool(xPref And &H10000) + CGShowM.Checked = CBool(xPref And &H20000) + CGShowMB.Checked = CBool(xPref And &H40000) + CGShowV.Checked = CBool(xPref And &H80000) + CGShowC.Checked = CBool(xPref And &H100000) + CGBLP.Checked = CBool(xPref And &H200000) + CGSTOP.Checked = CBool(xPref And &H400000) + CGSCROLL.Checked = CBool(xPref And &H20000000) + CGBPM.Checked = CBool(xPref And &H800000) + + CGSnap.Checked = CBool(xPref And &H1000000) + CGDisableVertical.Checked = CBool(xPref And &H2000000) + cVSLockL.Checked = CBool(xPref And &H4000000) + cVSLock.Checked = CBool(xPref And &H8000000) + cVSLockR.Checked = CBool(xPref And &H10000000) + + CGDivide.Value = br.ReadInt32 + CGSub.Value = br.ReadInt32 + gSlash = br.ReadInt32 + CGHeight.Value = CDec(br.ReadSingle) + CGWidth.Value = CDec(br.ReadSingle) + CGB.Value = br.ReadInt32 + + Case &H64616548 'Header + THTitle.Text = br.ReadString + THArtist.Text = br.ReadString + THGenre.Text = br.ReadString + Notes(0).Value = br.ReadInt64 + Dim xPlayerRank As Integer = br.ReadByte + THPlayLevel.Text = br.ReadString + + CHPlayer.SelectedIndex = xPlayerRank And &HF + CHRank.SelectedIndex = xPlayerRank >> 4 + + THSubTitle.Text = br.ReadString + THSubArtist.Text = br.ReadString + 'THMaker.Text = br.ReadString + THStageFile.Text = br.ReadString + THBanner.Text = br.ReadString + THBackBMP.Text = br.ReadString + 'THMidiFile.Text = br.ReadString + CHDifficulty.SelectedIndex = br.ReadByte + THExRank.Text = br.ReadString + THTotal.Text = br.ReadString + 'THVolWAV.Text = br.ReadString + THComment.Text = br.ReadString + 'THLnType.Text = br.ReadString + CHLnObj.SelectedIndex = br.ReadInt16 + + Case &H564157 'WAV List + Dim xWAVOptions As Integer = br.ReadByte + WAVMultiSelect = CBool(xWAVOptions And &H1) + CWAVMultiSelect.Checked = WAVMultiSelect + CWAVMultiSelect_CheckedChanged(CWAVMultiSelect, New EventArgs) + WAVChangeLabel = CBool(xWAVOptions And &H2) + CWAVChangeLabel.Checked = WAVChangeLabel + CWAVChangeLabel_CheckedChanged(CWAVChangeLabel, New EventArgs) + + Dim xWAVCount As Integer = br.ReadInt32 + For xxi As Integer = 1 To xWAVCount + Dim xI As Integer = br.ReadInt16 + hWAV(xI) = br.ReadString + Next + + Case &H504D42 'BMP List + Dim xBMPOptions As Integer = br.ReadByte + BMPMultiSelect = CBool(xBMPOptions And &H1) + CBMPMultiSelect.Checked = BMPMultiSelect + CBMPMultiSelect_CheckedChanged(CBMPMultiSelect, New EventArgs) + BMPChangeLabel = CBool(xBMPOptions And &H2) + CBMPChangeLabel.Checked = BMPChangeLabel + CBMPChangeLabel_CheckedChanged(CBMPChangeLabel, New EventArgs) + + Dim xBMPCount As Integer = br.ReadInt32 + For xxi As Integer = 1 To xBMPCount + Dim xI As Integer = br.ReadInt16 + hBMP(xI) = br.ReadString + Next + + Case &H74616542 'Beat + nBeatN.Value = br.ReadInt16 + nBeatD.Value = br.ReadInt16 + 'nBeatD.SelectedIndex = br.ReadByte + + Dim xBeatChangeMode As Integer = br.ReadByte + Dim xBeatChangeList As RadioButton() = {CBeatPreserve, CBeatMeasure, CBeatCut, CBeatScale} + xBeatChangeList(xBeatChangeMode).Checked = True + CBeatPreserve_Click(xBeatChangeList(xBeatChangeMode), New System.EventArgs) + + Dim xBeatCount As Integer = br.ReadInt32 + For xxi As Integer = 1 To xBeatCount + Dim xIndex As Integer = br.ReadInt16 + MeasureLength(xIndex) = br.ReadDouble + Next + + Case &H6E707845 'Expansion Code + TExpansion.Text = br.ReadString + + Case &H65746F4E 'Note + Dim xNoteUbound As Integer = br.ReadInt32 + ReDim Preserve Notes(xNoteUbound) + For i As Integer = 1 To UBound(Notes) + Notes(i).FromBinReader(br) + Next + + Case &H6F646E55 'Undo / Redo Commands + Dim URCount As Integer = br.ReadInt32 'Should be 100 + sI = br.ReadInt32 + + For xI As Integer = 0 To UndoRedoCount + Dim xUndoCount As Integer = br.ReadInt32 + Dim xBaseUndo As New UndoRedo.Void + Dim xIteratorUndo As UndoRedo.LinkedURCmd = xBaseUndo + + For xxj As Integer = 1 To xUndoCount + Dim xByteLen As Integer = br.ReadInt32 + Dim xByte() As Byte = br.ReadBytes(xByteLen) + xIteratorUndo.Next = UndoRedo.fromBytes(xByte) + xIteratorUndo = xIteratorUndo.Next + Next + + sUndo(xI) = xBaseUndo.Next + + Dim xRedoCount As Integer = br.ReadInt32 + Dim xBaseRedo As New UndoRedo.Void + Dim xIteratorRedo As UndoRedo.LinkedURCmd = xBaseRedo + For xxj As Integer = 1 To xRedoCount + Dim xByteLen As Integer = br.ReadInt32 + Dim xByte() As Byte = br.ReadBytes(xByteLen) + xIteratorRedo.Next = UndoRedo.fromBytes(xByte) + xIteratorRedo = xIteratorRedo.Next + Next + sRedo(xI) = xBaseRedo.Next + Next + + End Select + Loop + + End If + End If + br.Close() + + TBUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation + TBRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation + mnUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation + mnRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation + + LWAVRefresh() + LWAV.SelectedIndex = 0 + LBMPRefresh() + LBMP.SelectedIndex = 0 + LBeatRefresh() + + THBPM.Value = CDec(Notes(0).Value / 10000) + SortByVPositionQuick(0, UBound(Notes)) + UpdatePairing() + UpdateMeasureBottom() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub SaveiBMSC(ByVal Path As String) + ' TODO: Save unsaved BMSes instead of just the active one. + ' TODO: Save all the added features: ShowWaveform, Keybinding options, #TOTAL Tool + CalculateGreatestVPosition() + SortByVPositionInsertion() + UpdatePairing() + + Try + + Dim bw As New BinaryWriter(New IO.FileStream(Path, FileMode.Create), System.Text.Encoding.Unicode) + + 'bw.Write("iBMSC".ToCharArray) + bw.Write(&H534D4269) + bw.Write(CByte(&H43)) + bw.Write(CByte(My.Application.Info.Version.Major)) + bw.Write(CByte(My.Application.Info.Version.Minor)) + bw.Write(CByte(My.Application.Info.Version.Build)) + + 'Preferences + 'bw.Write("Pref".ToCharArray) + bw.Write(&H66657250) + Dim xPref As Integer = 0 + If NTInput Then xPref = xPref Or &H1 + If ErrorCheck Then xPref = xPref Or &H2 + If PreviewOnClick Then xPref = xPref Or &H4 + If ShowFileName Then xPref = xPref Or &H8 + If mnSMenu.Checked Then xPref = xPref Or &H100 + If mnSTB.Checked Then xPref = xPref Or &H200 + If mnSOP.Checked Then xPref = xPref Or &H400 + If mnSStatus.Checked Then xPref = xPref Or &H800 + If mnSLSplitter.Checked Then xPref = xPref Or &H1000 + If mnSRSplitter.Checked Then xPref = xPref Or &H2000 + If gShowGrid Then xPref = xPref Or &H4000 + If gShowSubGrid Then xPref = xPref Or &H8000 + If gShowBG Then xPref = xPref Or &H10000 + If gShowMeasureNumber Then xPref = xPref Or &H20000 + If gShowMeasureBar Then xPref = xPref Or &H40000 + If gShowVerticalLine Then xPref = xPref Or &H80000 + If gShowC Then xPref = xPref Or &H100000 + If gDisplayBGAColumn Then xPref = xPref Or &H200000 + If gSTOP Then xPref = xPref Or &H400000 + If gBPM Then xPref = xPref Or &H800000 + If gSCROLL Then xPref = xPref Or &H20000000 + If gSnap Then xPref = xPref Or &H1000000 + If DisableVerticalMove Then xPref = xPref Or &H2000000 + If spLock(0) Then xPref = xPref Or &H4000000 + If spLock(1) Then xPref = xPref Or &H8000000 + If spLock(2) Then xPref = xPref Or &H10000000 + bw.Write(xPref) + bw.Write(BitConverter.GetBytes(gDivide)) + bw.Write(BitConverter.GetBytes(gSub)) + bw.Write(BitConverter.GetBytes(gSlash)) + bw.Write(BitConverter.GetBytes(gxHeight)) + bw.Write(BitConverter.GetBytes(gxWidth)) + bw.Write(BitConverter.GetBytes(gColumns)) + + 'Header + 'bw.Write("Head".ToCharArray) + bw.Write(&H64616548) + bw.Write(THTitle.Text) + bw.Write(THArtist.Text) + bw.Write(THGenre.Text) + bw.Write(Notes(0).Value) + Dim xPlayer As Integer = CHPlayer.SelectedIndex + Dim xRank As Integer = CHRank.SelectedIndex << 4 + bw.Write(CByte(xPlayer Or xRank)) + bw.Write(THPlayLevel.Text) + + bw.Write(THSubTitle.Text) + bw.Write(THSubArtist.Text) + 'bw.Write(THMaker.Text) + bw.Write(THStageFile.Text) + bw.Write(THBanner.Text) + bw.Write(THBackBMP.Text) + 'bw.Write(THMidiFile.Text) + bw.Write(CByte(CHDifficulty.SelectedIndex)) + bw.Write(THExRank.Text) + bw.Write(THTotal.Text) + 'bw.Write(THVolWAV.Text) + bw.Write(THComment.Text) + 'bw.Write(THLnType.Text) + bw.Write(CShort(CHLnObj.SelectedIndex)) + + 'Wav List + 'bw.Write(("WAV" & vbNullChar).ToCharArray) + bw.Write(&H564157) + + Dim xWAVOptions As Integer = 0 + If WAVMultiSelect Then xWAVOptions = xWAVOptions Or &H1 + If WAVChangeLabel Then xWAVOptions = xWAVOptions Or &H2 + bw.Write(CByte(xWAVOptions)) + + Dim xWAVCount As Integer = 0 + For i As Integer = 1 To UBound(hWAV) + If hWAV(i) <> "" Then xWAVCount += 1 + Next + bw.Write(xWAVCount) + + For i As Integer = 1 To UBound(hWAV) + If hWAV(i) = "" Then Continue For + bw.Write(CShort(i)) + bw.Write(hWAV(i)) + Next + + 'BMP List + bw.Write(&H504D42) + + Dim xBMPOptions As Integer = 0 + If BMPMultiSelect Then xBMPOptions = xBMPOptions Or &H1 + If BMPChangeLabel Then xBMPOptions = xBMPOptions Or &H2 + bw.Write(CByte(xBMPOptions)) + + Dim xBMPCount As Integer = 0 + For i As Integer = 1 To UBound(hBMP) + If hBMP(i) <> "" Then xBMPCount += 1 + Next + bw.Write(xBMPCount) + + For i As Integer = 1 To UBound(hBMP) + If hBMP(i) = "" Then Continue For + bw.Write(CShort(i)) + bw.Write(hBMP(i)) + Next + + 'Beat + 'bw.Write("Beat".ToCharArray) + bw.Write(&H74616542) + 'Dim xNumerator As Short = nBeatN.Value + 'Dim xDenominator As Short = nBeatD.Value + 'Dim xBeatChangeMode As Byte = BeatChangeMode + bw.Write(CShort(nBeatN.Value)) + bw.Write(CShort(nBeatD.Value)) + bw.Write(CByte(BeatChangeMode)) + + Dim xBeatCount As Integer = 0 + For i As Integer = 0 To UBound(MeasureLength) + If MeasureLength(i) <> 192.0R Then xBeatCount += 1 + Next + bw.Write(xBeatCount) + + For i As Integer = 0 To UBound(MeasureLength) + If MeasureLength(i) = 192.0R Then Continue For + bw.Write(CShort(i)) + bw.Write(MeasureLength(i)) + Next + + 'Expansion Code + 'bw.Write("Expn".ToCharArray) + bw.Write(&H6E707845) + bw.Write(TExpansion.Text) + + 'Note + 'bw.Write("Note".ToCharArray) + bw.Write(&H65746F4E) + bw.Write(UBound(Notes)) + For i As Integer = 1 To UBound(Notes) + Notes(i).WriteBinWriter(bw) + Next + + 'Undo / Redo Commands + 'bw.Write("Undo".ToCharArray) + bw.Write(&H6F646E55) + bw.Write(100) + bw.Write(sI) + + For i As Integer = 0 To UndoRedoCount + 'UndoCommandsCount + Dim countUndo As Integer = 0 + Dim pUndo As UndoRedo.LinkedURCmd = sUndo(i) + While pUndo IsNot Nothing + countUndo += 1 + pUndo = pUndo.Next + End While + bw.Write(countUndo) + + 'UndoCommands + pUndo = sUndo(i) + For xxi As Integer = 1 To countUndo + Dim bUndo() As Byte = pUndo.toBytes + bw.Write(bUndo.Length) 'Length + bw.Write(bUndo) 'Command + pUndo = pUndo.Next + Next + + 'RedoCommandsCount + Dim countRedo As Integer = 0 + Dim pRedo As UndoRedo.LinkedURCmd = sRedo(i) + While pRedo IsNot Nothing + countRedo += 1 + pRedo = pRedo.Next + End While + bw.Write(countRedo) + + 'RedoCommands + pRedo = sRedo(i) + For xxi As Integer = 1 To countRedo + Dim bRedo() As Byte = pRedo.toBytes + bw.Write(bRedo.Length) + bw.Write(bRedo) + pRedo = pRedo.Next + Next + Next + + bw.Close() + + Catch ex As Exception + + MsgBox(ex.Message) + + End Try + + End Sub + +End Class diff --git a/iBMSC/Column.vb b/iBMSC/Column.vb index c6128ad4a..cf7d89fd4 100644 --- a/iBMSC/Column.vb +++ b/iBMSC/Column.vb @@ -59,6 +59,7 @@ Public Title As String Public isNumeric As Boolean Public isSound As Boolean + Public isImage As Boolean Public Identifier As Integer Public cNote As Integer @@ -89,24 +90,25 @@ cNote = c 'cCacheB = (c And &HFF000000) Or &H808080 Or ((c And &HFFFFFF) >> 1) 'cCacheD = (c And &HFF000000) Or ((c And &HFEFEFE) >> 1) - cCacheB = AdjustBrightness(Color.FromArgb(c), 50, ((c >> 24) And &HFF) / 255).ToArgb - cCacheD = AdjustBrightness(Color.FromArgb(c), -25, ((c >> 24) And &HFF) / 255).ToArgb + cCacheB = AdjustBrightness(Color.FromArgb(c), 50, CSng(((c >> 24) And &HFF) / 255)).ToArgb + cCacheD = AdjustBrightness(Color.FromArgb(c), -25, CSng(((c >> 24) And &HFF) / 255)).ToArgb End Sub Public Sub setLNoteColor(ByVal c As Integer) cLNote = c 'cCacheLB = (c And &HFF000000) Or &H808080 Or ((c And &HFFFFFF) >> 1) 'cCacheLD = (c And &HFF000000) Or ((c And &HFEFEFE) >> 1) - cCacheLB = AdjustBrightness(Color.FromArgb(c), 50, ((c >> 24) And &HFF) / 255).ToArgb - cCacheLD = AdjustBrightness(Color.FromArgb(c), -25, ((c >> 24) And &HFF) / 255).ToArgb + cCacheLB = AdjustBrightness(Color.FromArgb(c), 50, CSng(((c >> 24) And &HFF) / 255)).ToArgb + cCacheLD = AdjustBrightness(Color.FromArgb(c), -25, CSng(((c >> 24) And &HFF) / 255)).ToArgb End Sub Public Sub New(ByVal xLeft As Integer, ByVal xWidth As Integer, ByVal xTitle As String, - ByVal xNoteCol As Boolean, ByVal xisNumeric As Boolean, ByVal xisSound As Boolean, ByVal xVisible As Boolean, ByVal xIdentifier As Integer, + ByVal xNoteCol As Boolean, ByVal xisNumeric As Boolean, ByVal xisSound As Boolean, ByVal xisImage As Boolean, ByVal xVisible As Boolean, ByVal xIdentifier As Integer, ByVal xcNote As Integer, ByVal xcText As Integer, ByVal xcLNote As Integer, ByVal xcLText As Integer, ByVal xcBG As Integer) Left = xLeft Title = xTitle isNumeric = xisNumeric isSound = xisSound + isImage = xisImage Identifier = xIdentifier _Width = xWidth diff --git a/iBMSC/Component1.Designer.vb b/iBMSC/Component1.Designer.vb new file mode 100644 index 000000000..6de1497b6 --- /dev/null +++ b/iBMSC/Component1.Designer.vb @@ -0,0 +1,47 @@ +Partial Class Component1 + Inherits System.ComponentModel.Component + + _ + Public Sub New(ByVal container As System.ComponentModel.IContainer) + MyClass.New() + + 'Required for Windows.Forms Class Composition Designer support + If (container IsNot Nothing) Then + container.Add(Me) + End If + + End Sub + + _ + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + End Sub + + 'Component 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 Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + End Sub + +End Class diff --git a/iBMSC/Component1.vb b/iBMSC/Component1.vb new file mode 100644 index 000000000..ddfadd83d --- /dev/null +++ b/iBMSC/Component1.vb @@ -0,0 +1,3 @@ +Public Class Component1 + +End Class diff --git a/iBMSC/Dialogs/ColorPicker.vb b/iBMSC/Dialogs/ColorPicker.vb index f6756f1ae..084fc4a5a 100644 --- a/iBMSC/Dialogs/ColorPicker.vb +++ b/iBMSC/Dialogs/ColorPicker.vb @@ -1,5 +1,3 @@ -Imports System.Windows.Forms - Public Class ColorPicker Public OrigColor As Color = Color.Black Public NewColor As Color = Color.Black @@ -34,25 +32,25 @@ Public Class ColorPicker Private Sub SetCursor() Select Case DrawingIndex Case 0 - mMain = New Point(inS.Value / 1000 * 255, (1000 - inL.Value) / 1000 * 255) - m1 = (360 - inH.Value) * 255 / 360 + mMain = New Point(CInt(inS.Value / 1000 * 255), CInt((1000 - inL.Value) / 1000 * 255)) + m1 = CInt((360 - inH.Value) * 255 / 360) Case 1 - mMain = New Point(inH.Value * 255 / 360, (1000 - inL.Value) / 1000 * 255) - m1 = (1000 - inS.Value) * 255 / 1000 + mMain = New Point(CInt(inH.Value * 255 / 360), CInt((1000 - inL.Value) / 1000 * 255)) + m1 = CInt((1000 - inS.Value) * 255 / 1000) Case 2 - mMain = New Point(inH.Value * 255 / 360, (1000 - inS.Value) * 255 / 1000) - m1 = (1000 - inL.Value) * 255 / 1000 + mMain = New Point(CInt(inH.Value * 255 / 360), CInt((1000 - inS.Value) * 255 / 1000)) + m1 = CInt((1000 - inL.Value) * 255 / 1000) Case 3 - mMain = New Point(inB.Value, 255 - inG.Value) - m1 = 255 - inR.Value + mMain = New Point(CInt(inB.Value), CInt(255 - inG.Value)) + m1 = CInt(255 - inR.Value) Case 4 - mMain = New Point(inB.Value, 255 - inR.Value) - m1 = 255 - inG.Value + mMain = New Point(CInt(inB.Value), CInt(255 - inR.Value)) + m1 = CInt(255 - inG.Value) Case 5 - mMain = New Point(inG.Value, 255 - inR.Value) - m1 = 255 - inB.Value + mMain = New Point(CInt(inG.Value), CInt(255 - inR.Value)) + m1 = CInt(255 - inB.Value) End Select - mAlpha = inA.Value + mAlpha = CInt(inA.Value) End Sub @@ -88,7 +86,7 @@ Public Class ColorPicker xG = (xG * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 xB = (xB * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 - Return Color.FromArgb(xA, xR, xG, xB) + Return Color.FromArgb(xA, CInt(xR), CInt(xG), CInt(xB)) End Function Private Sub PCMain_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PCMain.MouseDown @@ -105,14 +103,14 @@ Public Class ColorPicker Select Case DrawingIndex Case 0 - inL.Value = 1000 - mMain.Y / 255 * 1000 - inS.Value = mMain.X / 255 * 1000 + inL.Value = CDec(1000 - mMain.Y / 255 * 1000) + inS.Value = CDec(mMain.X / 255 * 1000) Case 1 - inL.Value = 1000 - mMain.Y / 255 * 1000 - inH.Value = mMain.X / 255 * 360 + inL.Value = CDec(1000 - mMain.Y / 255 * 1000) + inH.Value = CDec(mMain.X / 255 * 360) Case 2 - inS.Value = 1000 - mMain.Y / 255 * 1000 - inH.Value = mMain.X / 255 * 360 + inS.Value = CDec(1000 - mMain.Y / 255 * 1000) + inH.Value = CDec(mMain.X / 255 * 360) Case 3 inG.Value = 255 - mMain.Y inB.Value = mMain.X @@ -138,132 +136,132 @@ Public Class ColorPicker Select Case DrawingIndex Case 0 - Dim xHue As Integer = inH.Value + Dim xHue As Integer = CInt(inH.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 128), _ - Color.White, _ - HSL2RGB(xHue, xI1 / 255 * 1000, 500)), _ - xI1, _ - 0, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 128), + Color.White, + HSL2RGB(xHue, CInt(xI1 / 255 * 1000), 500)), + xI1, + 0, + xPrecision, 128) - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 128), _ - New Point(0, 256), _ - HSL2RGB(xHue, xI1 / 255 * 1000, 500), _ - Color.Black), _ - xI1, _ - 128, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 128), + New Point(0, 256), + HSL2RGB(xHue, CInt(xI1 / 255 * 1000), 500), + Color.Black), + xI1, + 128, + xPrecision, 128) Next Case 1 - Dim xSaturation As Integer = inS.Value + Dim xSaturation As Integer = CInt(inS.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 128), _ - Color.White, _ - HSL2RGB(xI1 / 255 * 360, xSaturation, 500)), _ - xI1, _ - 0, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 128), + Color.White, + HSL2RGB(CInt(xI1 / 255 * 360), xSaturation, 500)), + xI1, + 0, + xPrecision, 128) - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 128), _ - New Point(0, 256), _ - HSL2RGB(xI1 / 255 * 360, xSaturation, 500), _ - Color.Black), _ - xI1, _ - 128, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 128), + New Point(0, 256), + HSL2RGB(CInt(xI1 / 255 * 360), xSaturation, 500), + Color.Black), + xI1, + 128, + xPrecision, 128) Next Case 2 - Dim xLightness As Integer = inL.Value + Dim xLightness As Integer = CInt(inL.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - HSL2RGB(xI1 / 255 * 360, 1000, xLightness), _ - HSL2RGB(xI1 / 255 * 360, 0, xLightness)), _ - xI1, _ - 0, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + HSL2RGB(CInt(xI1 / 255 * 360), 1000, xLightness), + HSL2RGB(CInt(xI1 / 255 * 360), 0, xLightness)), + xI1, + 0, + xPrecision, 256) Next Case 3 - Dim xRed As Integer = inR.Value + Dim xRed As Integer = CInt(inR.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - Color.FromArgb(xRed, 255, xI1), _ - Color.FromArgb(xRed, 0, xI1)), _ - xI1, _ - 0, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + Color.FromArgb(xRed, 255, xI1), + Color.FromArgb(xRed, 0, xI1)), + xI1, + 0, + xPrecision, 256) Next Case 4 - Dim xGreen As Integer = inG.Value + Dim xGreen As Integer = CInt(inG.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - Color.FromArgb(255, xGreen, xI1), _ - Color.FromArgb(0, xGreen, xI1)), _ - xI1, _ - 0, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + Color.FromArgb(255, xGreen, xI1), + Color.FromArgb(0, xGreen, xI1)), + xI1, + 0, + xPrecision, 256) Next Case 5 - Dim xBlue As Integer = inB.Value + Dim xBlue As Integer = CInt(inB.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - Color.FromArgb(255, xI1, xBlue), _ - Color.FromArgb(0, xI1, xBlue)), _ - xI1, _ - 0, _ - xPrecision, _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + Color.FromArgb(255, xI1, xBlue), + Color.FromArgb(0, xI1, xBlue)), + xI1, + 0, + xPrecision, 256) Next End Select e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias - e1.Graphics.DrawEllipse(IIf(inL.Value > 500, Pens.Black, Pens.White), mMain.X - 4, mMain.Y - 4, 8, 8) + e1.Graphics.DrawEllipse(CType(IIf(inL.Value > 500, Pens.Black, Pens.White), Pen), mMain.X - 4, mMain.Y - 4, 8, 8) e1.Render(PCMain.CreateGraphics) e1.Dispose() End Sub Private Sub rbH_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbH.CheckedChanged - If sender.Checked Then DrawingIndex = 0 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) + If rbH.Checked Then DrawingIndex = 0 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) End Sub Private Sub rbS_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbS.CheckedChanged - If sender.Checked Then DrawingIndex = 1 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) + If rbS.Checked Then DrawingIndex = 1 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) End Sub Private Sub rbL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbL.CheckedChanged - If sender.Checked Then DrawingIndex = 2 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) + If rbL.Checked Then DrawingIndex = 2 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) End Sub Private Sub rbR_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbR.CheckedChanged - If sender.Checked Then DrawingIndex = 3 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) + If rbR.Checked Then DrawingIndex = 3 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) End Sub Private Sub rbG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbG.CheckedChanged - If sender.Checked Then DrawingIndex = 4 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) + If rbG.Checked Then DrawingIndex = 4 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) End Sub Private Sub rbB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbB.CheckedChanged - If sender.Checked Then DrawingIndex = 5 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) + If rbB.Checked Then DrawingIndex = 5 : SetCursor() : RefreshMain(PCMain.DisplayRectangle) : Refresh1(PC1.DisplayRectangle) : RefreshA(PCA.DisplayRectangle) End Sub Private Sub inH_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inH.ValueChanged @@ -271,7 +269,7 @@ Public Class ColorPicker If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(HSL2RGB(inH.Value, inS.Value, inL.Value, inA.Value)) + SetNewColor(HSL2RGB(CInt(inH.Value), CInt(inS.Value), CInt(inL.Value), CInt(inA.Value))) inR.Value = NewColor.R inG.Value = NewColor.G inB.Value = NewColor.B @@ -285,7 +283,7 @@ Public Class ColorPicker Private Sub inS_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inS.ValueChanged If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(HSL2RGB(inH.Value, inS.Value, inL.Value, inA.Value)) + SetNewColor(HSL2RGB(CInt(inH.Value), CInt(inS.Value), CInt(inL.Value), CInt(inA.Value))) inR.Value = NewColor.R inG.Value = NewColor.G inB.Value = NewColor.B @@ -299,7 +297,7 @@ Public Class ColorPicker Private Sub inL_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inL.ValueChanged If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(HSL2RGB(inH.Value, inS.Value, inL.Value, inA.Value)) + SetNewColor(HSL2RGB(CInt(inH.Value), CInt(inS.Value), CInt(inL.Value), CInt(inA.Value))) inR.Value = NewColor.R inG.Value = NewColor.G inB.Value = NewColor.B @@ -313,10 +311,10 @@ Public Class ColorPicker Private Sub inR_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inR.ValueChanged If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(Color.FromArgb(inA.Value, inR.Value, inG.Value, inB.Value)) - inH.Value = NewColor.GetHue - inS.Value = NewColor.GetSaturation * 1000 - inL.Value = NewColor.GetBrightness * 1000 + SetNewColor(Color.FromArgb(CInt(inA.Value), CInt(inR.Value), CInt(inG.Value), CInt(inB.Value))) + inH.Value = CDec(NewColor.GetHue) + inS.Value = CDec(NewColor.GetSaturation * 1000) + inL.Value = CDec(NewColor.GetBrightness * 1000) RefreshMain(PCMain.DisplayRectangle) Refresh1(PC1.DisplayRectangle) @@ -327,10 +325,10 @@ Public Class ColorPicker Private Sub inG_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inG.ValueChanged If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(Color.FromArgb(inA.Value, inR.Value, inG.Value, inB.Value)) - inH.Value = NewColor.GetHue - inS.Value = NewColor.GetSaturation * 1000 - inL.Value = NewColor.GetBrightness * 1000 + SetNewColor(Color.FromArgb(CInt(inA.Value), CInt(inR.Value), CInt(inG.Value), CInt(inB.Value))) + inH.Value = CDec(NewColor.GetHue) + inS.Value = CDec(NewColor.GetSaturation * 1000) + inL.Value = CDec(NewColor.GetBrightness * 1000) RefreshMain(PCMain.DisplayRectangle) Refresh1(PC1.DisplayRectangle) @@ -341,10 +339,10 @@ Public Class ColorPicker Private Sub inB_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inB.ValueChanged If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(Color.FromArgb(inA.Value, inR.Value, inG.Value, inB.Value)) - inH.Value = NewColor.GetHue - inS.Value = NewColor.GetSaturation * 1000 - inL.Value = NewColor.GetBrightness * 1000 + SetNewColor(Color.FromArgb(CInt(inA.Value), CInt(inR.Value), CInt(inG.Value), CInt(inB.Value))) + inH.Value = CDec(NewColor.GetHue) + inS.Value = CDec(NewColor.GetSaturation * 1000) + inL.Value = CDec(NewColor.GetBrightness * 1000) RefreshMain(PCMain.DisplayRectangle) Refresh1(PC1.DisplayRectangle) @@ -355,7 +353,7 @@ Public Class ColorPicker Private Sub inA_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inA.ValueChanged If PassiveValueChange Then Exit Sub PassiveValueChange = True - SetNewColor(Color.FromArgb(inA.Value, inR.Value, inG.Value, inB.Value)) + SetNewColor(Color.FromArgb(CInt(inA.Value), CInt(inR.Value), CInt(inG.Value), CInt(inB.Value))) 'RefreshMain(PCMain.DisplayRectangle) 'Refresh1(PC1.DisplayRectangle) @@ -375,11 +373,11 @@ Public Class ColorPicker Select Case DrawingIndex Case 0 - inH.Value = 360 - m1 / 255 * 360 + inH.Value = CDec(360 - m1 / 255 * 360) Case 1 - inS.Value = 1000 - m1 / 255 * 1000 + inS.Value = CDec(1000 - m1 / 255 * 1000) Case 2 - inL.Value = 1000 - m1 / 255 * 1000 + inL.Value = CDec(1000 - m1 / 255 * 1000) Case 3 inR.Value = 255 - m1 Case 4 @@ -401,61 +399,61 @@ Public Class ColorPicker Select Case DrawingIndex Case 0 - Dim xxS As Integer = inS.Value - Dim xxL As Integer = inL.Value + Dim xxS As Integer = CInt(inS.Value) + Dim xxL As Integer = CInt(inL.Value) For xI1 = 0 To 255 Step xPrecision - e1.Graphics.FillRectangle(New Drawing.SolidBrush(HSL2RGB((255 - xI1) / 255 * 360, xxS, xxL)), 0, xI1, xWidth, xPrecision) + e1.Graphics.FillRectangle(New Drawing.SolidBrush(HSL2RGB(CInt((255 - xI1) / 255 * 360), xxS, xxL)), 0, xI1, xWidth, xPrecision) Next Case 1 - Dim xxH As Integer = inH.Value - Dim xxL As Integer = inL.Value - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - HSL2RGB(xxH, 1000, xxL), _ - HSL2RGB(xxH, 0, xxL)), _ + Dim xxH As Integer = CInt(inH.Value) + Dim xxL As Integer = CInt(inL.Value) + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + HSL2RGB(xxH, 1000, xxL), + HSL2RGB(xxH, 0, xxL)), 0, 0, xWidth, 256) Case 2 - Dim xxH As Integer = inH.Value - Dim xxS As Integer = inS.Value - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 128), _ - HSL2RGB(xxH, xxS, 1000), _ - HSL2RGB(xxH, xxS, 500)), _ + Dim xxH As Integer = CInt(inH.Value) + Dim xxS As Integer = CInt(inS.Value) + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 128), + HSL2RGB(xxH, xxS, 1000), + HSL2RGB(xxH, xxS, 500)), 0, 0, xWidth, 128) - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 128), _ - New Point(0, 256), _ - HSL2RGB(xxH, xxS, 500), _ - HSL2RGB(xxH, xxS, 0)), _ + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 128), + New Point(0, 256), + HSL2RGB(xxH, xxS, 500), + HSL2RGB(xxH, xxS, 0)), 0, 128, xWidth, 128) Case 3 - Dim xxG As Integer = inG.Value - Dim xxB As Integer = inB.Value - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - Color.FromArgb(255, xxG, xxB), _ - Color.FromArgb(0, xxG, xxB)), _ + Dim xxG As Integer = CInt(inG.Value) + Dim xxB As Integer = CInt(inB.Value) + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + Color.FromArgb(255, xxG, xxB), + Color.FromArgb(0, xxG, xxB)), 0, 0, xWidth, 256) Case 4 - Dim xxR As Integer = inR.Value - Dim xxB As Integer = inB.Value - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - Color.FromArgb(xxR, 255, xxB), _ - Color.FromArgb(xxR, 0, xxB)), _ + Dim xxR As Integer = CInt(inR.Value) + Dim xxB As Integer = CInt(inB.Value) + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + Color.FromArgb(xxR, 255, xxB), + Color.FromArgb(xxR, 0, xxB)), 0, 0, xWidth, 256) Case 5 - Dim xxR As Integer = inR.Value - Dim xxG As Integer = inG.Value - e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( _ - New Point(0, 0), _ - New Point(0, 256), _ - Color.FromArgb(xxR, xxG, 255), _ - Color.FromArgb(xxR, xxG, 0)), _ + Dim xxR As Integer = CInt(inR.Value) + Dim xxG As Integer = CInt(inG.Value) + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush( + New Point(0, 0), + New Point(0, 256), + Color.FromArgb(xxR, xxG, 255), + Color.FromArgb(xxR, xxG, 0)), 0, 0, xWidth, 256) End Select @@ -463,8 +461,8 @@ Public Class ColorPicker Dim xTri2() As Point = {New Point(xWidth - 5, m1), New Point(xWidth, m1 - 2), New Point(xWidth, m1 + 2)} e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias - e1.Graphics.FillPolygon(IIf(inL.Value > 500, Brushes.Black, Brushes.White), xTri1) - e1.Graphics.FillPolygon(IIf(inL.Value > 500, Brushes.Black, Brushes.White), xTri2) + e1.Graphics.FillPolygon(CType(IIf(inL.Value > 500, Brushes.Black, Brushes.White), Brush), xTri1) + e1.Graphics.FillPolygon(CType(IIf(inL.Value > 500, Brushes.Black, Brushes.White), Brush), xTri2) e1.Render(PC1.CreateGraphics) e1.Dispose() @@ -492,7 +490,7 @@ Public Class ColorPicker Dim xI1 As Integer Dim xHeight As Integer = PCA.DisplayRectangle.Height Dim xPrecision As Integer = tbPrecision.Value - Dim xColor As Color = Color.FromArgb(inR.Value, inG.Value, inB.Value) + Dim xColor As Color = Color.FromArgb(CInt(inR.Value), CInt(inG.Value), CInt(inB.Value)) 'Dim xAlphaRect(314) As Rectangle 'e1.Graphics.FillRectangle(Brushes.White, PCA.DisplayRectangle) @@ -512,11 +510,11 @@ Public Class ColorPicker Dim xTri1() As Point = {New Point(mAlpha, 4), New Point(mAlpha - 2, -1), New Point(mAlpha + 2, -1)} Dim xTri2() As Point = {New Point(mAlpha, xHeight - 5), New Point(mAlpha - 2, xHeight), New Point(mAlpha + 2, xHeight)} - xI1 = inL.Value + (255 - inA.Value) * 1000 / 255 + xI1 = CInt(inL.Value + (255 - inA.Value) * 1000 / 255) e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias - e1.Graphics.FillPolygon(IIf(xI1 > 500, Brushes.Black, Brushes.White), xTri1) - e1.Graphics.FillPolygon(IIf(xI1 > 500, Brushes.Black, Brushes.White), xTri2) + e1.Graphics.FillPolygon(CType(IIf(xI1 > 500, Brushes.Black, Brushes.White), Brush), xTri1) + e1.Graphics.FillPolygon(CType(IIf(xI1 > 500, Brushes.Black, Brushes.White), Brush), xTri2) e1.Render(PCA.CreateGraphics) e1.Dispose() @@ -540,14 +538,14 @@ Public Class ColorPicker If xRegion.X < 62 Then e1.Graphics.FillRectangle(New Drawing.SolidBrush(OrigColor), 0, 0, 61, 28) e1.Graphics.DrawLine(New Pen(Color.FromKnownColor(KnownColor.WindowFrame)), 61, 0, 61, 28) - e1.Graphics.DrawString("Orig", xFont, IIf(OrigColor.GetBrightness + (255 - OrigColor.A) / 255 > 0.5, Brushes.Black, Brushes.White), _ - 31 - e1.Graphics.MeasureString("Orig", xFont).Width / 2, _ + e1.Graphics.DrawString("Orig", xFont, CType(IIf(OrigColor.GetBrightness + (255 - OrigColor.A) / 255 > 0.5, Brushes.Black, Brushes.White), Brush), + 31 - e1.Graphics.MeasureString("Orig", xFont).Width / 2, 14 - e1.Graphics.MeasureString("Orig", xFont).Height / 2) End If e1.Graphics.FillRectangle(New Drawing.SolidBrush(NewColor), 62, 0, 61, 28) - e1.Graphics.DrawString("New", xFont, IIf(NewColor.GetBrightness + (255 - NewColor.A) / 255 > 0.5, Brushes.Black, Brushes.White), _ - 93 - e1.Graphics.MeasureString("New", xFont).Width / 2, _ + e1.Graphics.DrawString("New", xFont, CType(IIf(NewColor.GetBrightness + (255 - NewColor.A) / 255 > 0.5, Brushes.Black, Brushes.White), Brush), + 93 - e1.Graphics.MeasureString("New", xFont).Width / 2, 14 - e1.Graphics.MeasureString("New", xFont).Height / 2) e1.Render(pPrev.CreateGraphics) @@ -569,9 +567,9 @@ Public Class ColorPicker inR.Value = NewColor.R inG.Value = NewColor.G inB.Value = NewColor.B - inH.Value = NewColor.GetHue - inS.Value = NewColor.GetSaturation * 1000 - inL.Value = NewColor.GetBrightness * 1000 + inH.Value = CDec(NewColor.GetHue) + inS.Value = CDec(NewColor.GetSaturation * 1000) + inL.Value = CDec(NewColor.GetBrightness * 1000) inA.Value = NewColor.A SetCursor() @@ -600,9 +598,9 @@ Public Class ColorPicker inR.Value = NewColor.R inG.Value = NewColor.G inB.Value = NewColor.B - inH.Value = NewColor.GetHue - inS.Value = NewColor.GetSaturation * 1000 - inL.Value = NewColor.GetBrightness * 1000 + inH.Value = CDec(NewColor.GetHue) + inS.Value = CDec(NewColor.GetSaturation * 1000) + inL.Value = CDec(NewColor.GetBrightness * 1000) inA.Value = NewColor.A SetCursor() diff --git a/iBMSC/Dialogs/diagFind.Designer.vb b/iBMSC/Dialogs/dgFind.designer.vb similarity index 63% rename from iBMSC/Dialogs/diagFind.Designer.vb rename to iBMSC/Dialogs/dgFind.designer.vb index 05f3db552..bf6ab1006 100644 --- a/iBMSC/Dialogs/diagFind.Designer.vb +++ b/iBMSC/Dialogs/dgFind.designer.vb @@ -1,5 +1,5 @@  _ -Partial Class diagFind +Partial Class dgFind Inherits System.Windows.Forms.Form 'Form 重写 Dispose,以清理组件列表。 @@ -22,65 +22,72 @@ Partial Class diagFind '不要使用代码编辑器修改它。 _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(diagFind)) - Me.Label1 = New System.Windows.Forms.Label - Me.Label2 = New System.Windows.Forms.Label - Me.mr1 = New System.Windows.Forms.NumericUpDown - Me.mr2 = New System.Windows.Forms.NumericUpDown - Me.lr1 = New System.Windows.Forms.TextBox - Me.lr2 = New System.Windows.Forms.TextBox - Me.vr2 = New System.Windows.Forms.NumericUpDown - Me.vr1 = New System.Windows.Forms.NumericUpDown - Me.cb1 = New System.Windows.Forms.CheckBox - Me.cb2 = New System.Windows.Forms.CheckBox - Me.cba1 = New System.Windows.Forms.CheckBox - Me.cba2 = New System.Windows.Forms.CheckBox - Me.cba3 = New System.Windows.Forms.CheckBox - Me.cba4 = New System.Windows.Forms.CheckBox - Me.cba5 = New System.Windows.Forms.CheckBox - Me.cba6 = New System.Windows.Forms.CheckBox - Me.cba7 = New System.Windows.Forms.CheckBox - Me.cba8 = New System.Windows.Forms.CheckBox - Me.cbd1 = New System.Windows.Forms.CheckBox - Me.cbd2 = New System.Windows.Forms.CheckBox - Me.cbd3 = New System.Windows.Forms.CheckBox - Me.cbd4 = New System.Windows.Forms.CheckBox - Me.cbd5 = New System.Windows.Forms.CheckBox - Me.cbd6 = New System.Windows.Forms.CheckBox - Me.cbd7 = New System.Windows.Forms.CheckBox - Me.cbd8 = New System.Windows.Forms.CheckBox - Me.cb3 = New System.Windows.Forms.CheckBox - Me.cb4 = New System.Windows.Forms.CheckBox - Me.cb5 = New System.Windows.Forms.CheckBox - Me.cbb1 = New System.Windows.Forms.CheckBox - Me.Panel1 = New System.Windows.Forms.Panel - Me.BSAll = New System.Windows.Forms.Button - Me.BSInv = New System.Windows.Forms.Button - Me.BSNone = New System.Windows.Forms.Button - Me.Label3 = New System.Windows.Forms.Label - Me.Label4 = New System.Windows.Forms.Label - Me.TBSelect = New System.Windows.Forms.Button - Me.TBClose = New System.Windows.Forms.Button - Me.TBDelete = New System.Windows.Forms.Button - Me.TBrl = New System.Windows.Forms.Button - Me.TBrv = New System.Windows.Forms.Button - Me.Label5 = New System.Windows.Forms.Label - Me.Label6 = New System.Windows.Forms.Label - Me.Label7 = New System.Windows.Forms.Label - Me.Ttv = New System.Windows.Forms.NumericUpDown - Me.Ttl = New System.Windows.Forms.TextBox - Me.Label8 = New System.Windows.Forms.Label - Me.Label9 = New System.Windows.Forms.Label - Me.PictureBox3 = New System.Windows.Forms.PictureBox - Me.PictureBox2 = New System.Windows.Forms.PictureBox - Me.PictureBox1 = New System.Windows.Forms.PictureBox - Me.cbx1 = New System.Windows.Forms.CheckBox - Me.cbx2 = New System.Windows.Forms.CheckBox - Me.cbx3 = New System.Windows.Forms.CheckBox - Me.TBUnselect = New System.Windows.Forms.Button - Me.cbx4 = New System.Windows.Forms.CheckBox - Me.cbx5 = New System.Windows.Forms.CheckBox - Me.cbx6 = New System.Windows.Forms.CheckBox + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dgFind)) + Me.Label1 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.mr1 = New System.Windows.Forms.NumericUpDown() + Me.mr2 = New System.Windows.Forms.NumericUpDown() + Me.lr1 = New System.Windows.Forms.TextBox() + Me.lr2 = New System.Windows.Forms.TextBox() + Me.vr2 = New System.Windows.Forms.NumericUpDown() + Me.vr1 = New System.Windows.Forms.NumericUpDown() + Me.cb1 = New System.Windows.Forms.CheckBox() + Me.cb2 = New System.Windows.Forms.CheckBox() + Me.cba1 = New System.Windows.Forms.CheckBox() + Me.cba2 = New System.Windows.Forms.CheckBox() + Me.cba3 = New System.Windows.Forms.CheckBox() + Me.cba4 = New System.Windows.Forms.CheckBox() + Me.cba5 = New System.Windows.Forms.CheckBox() + Me.cba6 = New System.Windows.Forms.CheckBox() + Me.cba7 = New System.Windows.Forms.CheckBox() + Me.cba8 = New System.Windows.Forms.CheckBox() + Me.cbd1 = New System.Windows.Forms.CheckBox() + Me.cbd2 = New System.Windows.Forms.CheckBox() + Me.cbd3 = New System.Windows.Forms.CheckBox() + Me.cbd4 = New System.Windows.Forms.CheckBox() + Me.cbd5 = New System.Windows.Forms.CheckBox() + Me.cbd6 = New System.Windows.Forms.CheckBox() + Me.cbd7 = New System.Windows.Forms.CheckBox() + Me.cbd8 = New System.Windows.Forms.CheckBox() + Me.cb3 = New System.Windows.Forms.CheckBox() + Me.cb4 = New System.Windows.Forms.CheckBox() + Me.cb5 = New System.Windows.Forms.CheckBox() + Me.cbb1 = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.BSAll = New System.Windows.Forms.Button() + Me.BSInv = New System.Windows.Forms.Button() + Me.BSNone = New System.Windows.Forms.Button() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.TBSelect = New System.Windows.Forms.Button() + Me.TBClose = New System.Windows.Forms.Button() + Me.TBDelete = New System.Windows.Forms.Button() + Me.TBrl = New System.Windows.Forms.Button() + Me.TBrv = New System.Windows.Forms.Button() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.Ttv = New System.Windows.Forms.NumericUpDown() + Me.Ttl = New System.Windows.Forms.TextBox() + Me.Label8 = New System.Windows.Forms.Label() + Me.Label9 = New System.Windows.Forms.Label() + Me.PictureBox3 = New System.Windows.Forms.PictureBox() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.CBSelected = New System.Windows.Forms.CheckBox() + Me.CBUnselected = New System.Windows.Forms.CheckBox() + Me.CBShort = New System.Windows.Forms.CheckBox() + Me.TBUnselect = New System.Windows.Forms.Button() + Me.CBLong = New System.Windows.Forms.CheckBox() + Me.CBHidden = New System.Windows.Forms.CheckBox() + Me.CBVisible = New System.Windows.Forms.CheckBox() + Me.FNotePrevious = New System.Windows.Forms.Button() + Me.FNoteNext = New System.Windows.Forms.Button() + Me.TLNoteRange = New System.Windows.Forms.TableLayoutPanel() + Me.CBError = New System.Windows.Forms.CheckBox() + Me.CBNoError = New System.Windows.Forms.CheckBox() + Me.CBComment = New System.Windows.Forms.CheckBox() + Me.CBNotComment = New System.Windows.Forms.CheckBox() CType(Me.mr1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.mr2, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.vr2, System.ComponentModel.ISupportInitialize).BeginInit() @@ -90,46 +97,47 @@ Partial Class diagFind CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TLNoteRange.SuspendLayout() Me.SuspendLayout() ' 'Label1 ' - Me.Label1.Location = New System.Drawing.Point(26, 20) + Me.Label1.Location = New System.Drawing.Point(8, 31) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(120, 17) - Me.Label1.TabIndex = 2 - Me.Label1.Text = "Note Range" + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Note Type" Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' 'Label2 ' - Me.Label2.Location = New System.Drawing.Point(26, 73) + Me.Label2.Location = New System.Drawing.Point(8, 73) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(120, 17) - Me.Label2.TabIndex = 4 + Me.Label2.TabIndex = 2 Me.Label2.Text = "Measure Range" Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' 'mr1 ' - Me.mr1.Location = New System.Drawing.Point(152, 72) + Me.mr1.Location = New System.Drawing.Point(134, 72) Me.mr1.Maximum = New Decimal(New Integer() {999, 0, 0, 0}) Me.mr1.Name = "mr1" Me.mr1.Size = New System.Drawing.Size(70, 23) - Me.mr1.TabIndex = 5 + Me.mr1.TabIndex = 3 ' 'mr2 ' - Me.mr2.Location = New System.Drawing.Point(258, 72) + Me.mr2.Location = New System.Drawing.Point(240, 72) Me.mr2.Maximum = New Decimal(New Integer() {999, 0, 0, 0}) Me.mr2.Name = "mr2" Me.mr2.Size = New System.Drawing.Size(70, 23) - Me.mr2.TabIndex = 6 + Me.mr2.TabIndex = 5 Me.mr2.Value = New Decimal(New Integer() {999, 0, 0, 0}) ' 'lr1 ' - Me.lr1.Location = New System.Drawing.Point(152, 101) + Me.lr1.Location = New System.Drawing.Point(134, 101) Me.lr1.MaxLength = 2 Me.lr1.Name = "lr1" Me.lr1.Size = New System.Drawing.Size(70, 23) @@ -138,33 +146,33 @@ Partial Class diagFind ' 'lr2 ' - Me.lr2.Location = New System.Drawing.Point(258, 101) + Me.lr2.Location = New System.Drawing.Point(240, 101) Me.lr2.MaxLength = 2 Me.lr2.Name = "lr2" Me.lr2.Size = New System.Drawing.Size(70, 23) - Me.lr2.TabIndex = 8 + Me.lr2.TabIndex = 9 Me.lr2.Text = "ZZ" ' 'vr2 ' Me.vr2.DecimalPlaces = 4 - Me.vr2.Location = New System.Drawing.Point(258, 130) + Me.vr2.Location = New System.Drawing.Point(240, 130) Me.vr2.Maximum = New Decimal(New Integer() {655359999, 0, 0, 262144}) Me.vr2.Minimum = New Decimal(New Integer() {1, 0, 0, 262144}) Me.vr2.Name = "vr2" Me.vr2.Size = New System.Drawing.Size(100, 23) - Me.vr2.TabIndex = 10 + Me.vr2.TabIndex = 13 Me.vr2.Value = New Decimal(New Integer() {655359999, 0, 0, 262144}) ' 'vr1 ' Me.vr1.DecimalPlaces = 4 - Me.vr1.Location = New System.Drawing.Point(152, 130) + Me.vr1.Location = New System.Drawing.Point(134, 130) Me.vr1.Maximum = New Decimal(New Integer() {655359999, 0, 0, 262144}) Me.vr1.Minimum = New Decimal(New Integer() {1, 0, 0, 262144}) Me.vr1.Name = "vr1" Me.vr1.Size = New System.Drawing.Size(70, 23) - Me.vr1.TabIndex = 9 + Me.vr1.TabIndex = 11 Me.vr1.Value = New Decimal(New Integer() {1, 0, 0, 262144}) ' 'cb1 @@ -525,7 +533,7 @@ Partial Class diagFind Me.Panel1.Location = New System.Drawing.Point(26, 186) Me.Panel1.Name = "Panel1" Me.Panel1.Size = New System.Drawing.Size(302, 131) - Me.Panel1.TabIndex = 22 + Me.Panel1.TabIndex = 14 ' 'BSAll ' @@ -533,7 +541,7 @@ Partial Class diagFind Me.BSAll.Location = New System.Drawing.Point(334, 189) Me.BSAll.Name = "BSAll" Me.BSAll.Size = New System.Drawing.Size(120, 23) - Me.BSAll.TabIndex = 23 + Me.BSAll.TabIndex = 15 Me.BSAll.Text = "Select All" Me.BSAll.UseVisualStyleBackColor = True ' @@ -543,7 +551,7 @@ Partial Class diagFind Me.BSInv.Location = New System.Drawing.Point(334, 218) Me.BSInv.Name = "BSInv" Me.BSInv.Size = New System.Drawing.Size(120, 23) - Me.BSInv.TabIndex = 24 + Me.BSInv.TabIndex = 16 Me.BSInv.Text = "Select Inverse" Me.BSInv.UseVisualStyleBackColor = True ' @@ -553,25 +561,25 @@ Partial Class diagFind Me.BSNone.Location = New System.Drawing.Point(334, 247) Me.BSNone.Name = "BSNone" Me.BSNone.Size = New System.Drawing.Size(120, 23) - Me.BSNone.TabIndex = 25 + Me.BSNone.TabIndex = 17 Me.BSNone.Text = "Unselect All" Me.BSNone.UseVisualStyleBackColor = True ' 'Label3 ' - Me.Label3.Location = New System.Drawing.Point(26, 103) + Me.Label3.Location = New System.Drawing.Point(8, 103) Me.Label3.Name = "Label3" Me.Label3.Size = New System.Drawing.Size(120, 17) - Me.Label3.TabIndex = 26 + Me.Label3.TabIndex = 6 Me.Label3.Text = "Label Range" Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' 'Label4 ' - Me.Label4.Location = New System.Drawing.Point(26, 131) + Me.Label4.Location = New System.Drawing.Point(8, 131) Me.Label4.Name = "Label4" Me.Label4.Size = New System.Drawing.Size(120, 17) - Me.Label4.TabIndex = 27 + Me.Label4.TabIndex = 10 Me.Label4.Text = "Value Range" Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' @@ -579,27 +587,27 @@ Partial Class diagFind ' Me.TBSelect.Location = New System.Drawing.Point(298, 354) Me.TBSelect.Name = "TBSelect" - Me.TBSelect.Size = New System.Drawing.Size(85, 23) - Me.TBSelect.TabIndex = 28 + Me.TBSelect.Size = New System.Drawing.Size(75, 23) + Me.TBSelect.TabIndex = 40 Me.TBSelect.Text = "Select" Me.TBSelect.UseVisualStyleBackColor = True ' 'TBClose ' Me.TBClose.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.TBClose.Location = New System.Drawing.Point(389, 383) + Me.TBClose.Location = New System.Drawing.Point(379, 412) Me.TBClose.Name = "TBClose" - Me.TBClose.Size = New System.Drawing.Size(65, 23) - Me.TBClose.TabIndex = 29 + Me.TBClose.Size = New System.Drawing.Size(75, 23) + Me.TBClose.TabIndex = 45 Me.TBClose.Text = "Close" Me.TBClose.UseVisualStyleBackColor = True ' 'TBDelete ' - Me.TBDelete.Location = New System.Drawing.Point(389, 354) + Me.TBDelete.Location = New System.Drawing.Point(298, 412) Me.TBDelete.Name = "TBDelete" - Me.TBDelete.Size = New System.Drawing.Size(65, 23) - Me.TBDelete.TabIndex = 30 + Me.TBDelete.Size = New System.Drawing.Size(75, 23) + Me.TBDelete.TabIndex = 44 Me.TBDelete.Text = "Delete" Me.TBDelete.UseVisualStyleBackColor = True ' @@ -608,7 +616,7 @@ Partial Class diagFind Me.TBrl.Location = New System.Drawing.Point(26, 354) Me.TBrl.Name = "TBrl" Me.TBrl.Size = New System.Drawing.Size(178, 23) - Me.TBrl.TabIndex = 33 + Me.TBrl.TabIndex = 30 Me.TBrl.Text = "Replace with Label:" Me.TBrl.UseVisualStyleBackColor = True ' @@ -617,34 +625,34 @@ Partial Class diagFind Me.TBrv.Location = New System.Drawing.Point(26, 383) Me.TBrv.Name = "TBrv" Me.TBrv.Size = New System.Drawing.Size(178, 23) - Me.TBrv.TabIndex = 35 + Me.TBrv.TabIndex = 32 Me.TBrv.Text = "Replace with Value:" Me.TBrv.UseVisualStyleBackColor = True ' 'Label5 ' - Me.Label5.Location = New System.Drawing.Point(221, 103) + Me.Label5.Location = New System.Drawing.Point(203, 103) Me.Label5.Name = "Label5" Me.Label5.Size = New System.Drawing.Size(39, 16) - Me.Label5.TabIndex = 50 + Me.Label5.TabIndex = 8 Me.Label5.Text = "to" Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ' 'Label6 ' - Me.Label6.Location = New System.Drawing.Point(221, 74) + Me.Label6.Location = New System.Drawing.Point(203, 74) Me.Label6.Name = "Label6" Me.Label6.Size = New System.Drawing.Size(39, 16) - Me.Label6.TabIndex = 51 + Me.Label6.TabIndex = 4 Me.Label6.Text = "to" Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ' 'Label7 ' - Me.Label7.Location = New System.Drawing.Point(221, 132) + Me.Label7.Location = New System.Drawing.Point(203, 132) Me.Label7.Name = "Label7" Me.Label7.Size = New System.Drawing.Size(39, 16) - Me.Label7.TabIndex = 52 + Me.Label7.TabIndex = 12 Me.Label7.Text = "to" Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ' @@ -656,7 +664,7 @@ Partial Class diagFind Me.Ttv.Minimum = New Decimal(New Integer() {1, 0, 0, 262144}) Me.Ttv.Name = "Ttv" Me.Ttv.Size = New System.Drawing.Size(70, 23) - Me.Ttv.TabIndex = 34 + Me.Ttv.TabIndex = 33 Me.Ttv.Value = New Decimal(New Integer() {120, 0, 0, 0}) ' 'Ttl @@ -665,7 +673,7 @@ Partial Class diagFind Me.Ttl.MaxLength = 2 Me.Ttl.Name = "Ttl" Me.Ttl.Size = New System.Drawing.Size(70, 23) - Me.Ttl.TabIndex = 32 + Me.Ttl.TabIndex = 31 Me.Ttl.Text = "01" ' 'Label8 @@ -691,7 +699,7 @@ Partial Class diagFind Me.PictureBox3.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer)) Me.PictureBox3.Location = New System.Drawing.Point(289, 354) Me.PictureBox3.Name = "PictureBox3" - Me.PictureBox3.Size = New System.Drawing.Size(1, 52) + Me.PictureBox3.Size = New System.Drawing.Size(1, 81) Me.PictureBox3.TabIndex = 55 Me.PictureBox3.TabStop = False ' @@ -713,117 +721,237 @@ Partial Class diagFind Me.PictureBox1.TabIndex = 48 Me.PictureBox1.TabStop = False ' - 'cbx1 - ' - Me.cbx1.Appearance = System.Windows.Forms.Appearance.Button - Me.cbx1.Checked = True - Me.cbx1.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx1.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.cbx1.Location = New System.Drawing.Point(152, 16) - Me.cbx1.Name = "cbx1" - Me.cbx1.Size = New System.Drawing.Size(100, 25) - Me.cbx1.TabIndex = 58 - Me.cbx1.Tag = "1" - Me.cbx1.Text = "Selected" - Me.cbx1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.cbx1.UseVisualStyleBackColor = False - ' - 'cbx2 - ' - Me.cbx2.Appearance = System.Windows.Forms.Appearance.Button - Me.cbx2.Checked = True - Me.cbx2.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx2.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.cbx2.Location = New System.Drawing.Point(152, 41) - Me.cbx2.Name = "cbx2" - Me.cbx2.Size = New System.Drawing.Size(100, 25) - Me.cbx2.TabIndex = 59 - Me.cbx2.Tag = "1" - Me.cbx2.Text = "Unselected" - Me.cbx2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.cbx2.UseVisualStyleBackColor = False - ' - 'cbx3 - ' - Me.cbx3.Appearance = System.Windows.Forms.Appearance.Button - Me.cbx3.Checked = True - Me.cbx3.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx3.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.cbx3.Location = New System.Drawing.Point(258, 16) - Me.cbx3.Name = "cbx3" - Me.cbx3.Size = New System.Drawing.Size(70, 25) - Me.cbx3.TabIndex = 60 - Me.cbx3.Tag = "1" - Me.cbx3.Text = "Short" - Me.cbx3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.cbx3.UseVisualStyleBackColor = False + 'CBSelected + ' + Me.CBSelected.Appearance = System.Windows.Forms.Appearance.Button + Me.CBSelected.Checked = True + Me.CBSelected.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBSelected.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBSelected.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBSelected.Location = New System.Drawing.Point(3, 3) + Me.CBSelected.Name = "CBSelected" + Me.CBSelected.Size = New System.Drawing.Size(64, 21) + Me.CBSelected.TabIndex = 0 + Me.CBSelected.Tag = "1" + Me.CBSelected.Text = "Selected" + Me.CBSelected.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBSelected.UseVisualStyleBackColor = False + ' + 'CBUnselected + ' + Me.CBUnselected.Appearance = System.Windows.Forms.Appearance.Button + Me.CBUnselected.Checked = True + Me.CBUnselected.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBUnselected.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBUnselected.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBUnselected.Location = New System.Drawing.Point(3, 30) + Me.CBUnselected.Name = "CBUnselected" + Me.CBUnselected.Size = New System.Drawing.Size(64, 21) + Me.CBUnselected.TabIndex = 1 + Me.CBUnselected.Tag = "1" + Me.CBUnselected.Text = "Unselected" + Me.CBUnselected.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBUnselected.UseVisualStyleBackColor = False + ' + 'CBShort + ' + Me.CBShort.Appearance = System.Windows.Forms.Appearance.Button + Me.CBShort.Checked = True + Me.CBShort.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBShort.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBShort.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBShort.Location = New System.Drawing.Point(73, 3) + Me.CBShort.Name = "CBShort" + Me.CBShort.Size = New System.Drawing.Size(38, 21) + Me.CBShort.TabIndex = 2 + Me.CBShort.Tag = "1" + Me.CBShort.Text = "Short" + Me.CBShort.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBShort.UseVisualStyleBackColor = False ' 'TBUnselect ' - Me.TBUnselect.Location = New System.Drawing.Point(298, 383) + Me.TBUnselect.Location = New System.Drawing.Point(379, 354) Me.TBUnselect.Name = "TBUnselect" - Me.TBUnselect.Size = New System.Drawing.Size(85, 23) - Me.TBUnselect.TabIndex = 31 + Me.TBUnselect.Size = New System.Drawing.Size(75, 23) + Me.TBUnselect.TabIndex = 41 Me.TBUnselect.Text = "Unselect" Me.TBUnselect.UseVisualStyleBackColor = True ' - 'cbx4 - ' - Me.cbx4.Appearance = System.Windows.Forms.Appearance.Button - Me.cbx4.Checked = True - Me.cbx4.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx4.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.cbx4.Location = New System.Drawing.Point(258, 41) - Me.cbx4.Name = "cbx4" - Me.cbx4.Size = New System.Drawing.Size(70, 25) - Me.cbx4.TabIndex = 61 - Me.cbx4.Tag = "1" - Me.cbx4.Text = "Long" - Me.cbx4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.cbx4.UseVisualStyleBackColor = False - ' - 'cbx5 - ' - Me.cbx5.Appearance = System.Windows.Forms.Appearance.Button - Me.cbx5.Checked = True - Me.cbx5.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx5.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.cbx5.Location = New System.Drawing.Point(334, 16) - Me.cbx5.Name = "cbx5" - Me.cbx5.Size = New System.Drawing.Size(80, 25) - Me.cbx5.TabIndex = 62 - Me.cbx5.Tag = "1" - Me.cbx5.Text = "Hidden" - Me.cbx5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.cbx5.UseVisualStyleBackColor = False - ' - 'cbx6 - ' - Me.cbx6.Appearance = System.Windows.Forms.Appearance.Button - Me.cbx6.Checked = True - Me.cbx6.CheckState = System.Windows.Forms.CheckState.Checked - Me.cbx6.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.cbx6.Location = New System.Drawing.Point(334, 41) - Me.cbx6.Name = "cbx6" - Me.cbx6.Size = New System.Drawing.Size(80, 25) - Me.cbx6.TabIndex = 63 - Me.cbx6.Tag = "1" - Me.cbx6.Text = "Visible" - Me.cbx6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.cbx6.UseVisualStyleBackColor = False - ' - 'diagFind + 'CBLong + ' + Me.CBLong.Appearance = System.Windows.Forms.Appearance.Button + Me.CBLong.Checked = True + Me.CBLong.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBLong.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBLong.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBLong.Location = New System.Drawing.Point(73, 30) + Me.CBLong.Name = "CBLong" + Me.CBLong.Size = New System.Drawing.Size(38, 21) + Me.CBLong.TabIndex = 3 + Me.CBLong.Tag = "1" + Me.CBLong.Text = "Long" + Me.CBLong.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBLong.UseVisualStyleBackColor = False + ' + 'CBHidden + ' + Me.CBHidden.Appearance = System.Windows.Forms.Appearance.Button + Me.CBHidden.Checked = True + Me.CBHidden.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBHidden.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBHidden.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBHidden.Location = New System.Drawing.Point(117, 3) + Me.CBHidden.Name = "CBHidden" + Me.CBHidden.Size = New System.Drawing.Size(49, 21) + Me.CBHidden.TabIndex = 4 + Me.CBHidden.Tag = "1" + Me.CBHidden.Text = "Hidden" + Me.CBHidden.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBHidden.UseVisualStyleBackColor = False + ' + 'CBVisible + ' + Me.CBVisible.Appearance = System.Windows.Forms.Appearance.Button + Me.CBVisible.Checked = True + Me.CBVisible.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBVisible.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBVisible.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBVisible.Location = New System.Drawing.Point(117, 30) + Me.CBVisible.Name = "CBVisible" + Me.CBVisible.Size = New System.Drawing.Size(49, 21) + Me.CBVisible.TabIndex = 5 + Me.CBVisible.Tag = "1" + Me.CBVisible.Text = "Visible" + Me.CBVisible.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBVisible.UseVisualStyleBackColor = False + ' + 'FNotePrevious + ' + Me.FNotePrevious.Location = New System.Drawing.Point(298, 383) + Me.FNotePrevious.Name = "FNotePrevious" + Me.FNotePrevious.Size = New System.Drawing.Size(75, 23) + Me.FNotePrevious.TabIndex = 42 + Me.FNotePrevious.Text = "Previous" + Me.FNotePrevious.UseVisualStyleBackColor = True + ' + 'FNoteNext + ' + Me.FNoteNext.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.FNoteNext.Location = New System.Drawing.Point(379, 383) + Me.FNoteNext.Name = "FNoteNext" + Me.FNoteNext.Size = New System.Drawing.Size(75, 23) + Me.FNoteNext.TabIndex = 43 + Me.FNoteNext.Text = "Next" + Me.FNoteNext.UseVisualStyleBackColor = True + ' + 'TLNoteRange + ' + Me.TLNoteRange.ColumnCount = 5 + Me.TLNoteRange.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70.0!)) + Me.TLNoteRange.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 44.0!)) + Me.TLNoteRange.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55.0!)) + Me.TLNoteRange.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70.0!)) + Me.TLNoteRange.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50.0!)) + Me.TLNoteRange.Controls.Add(Me.CBError, 3, 1) + Me.TLNoteRange.Controls.Add(Me.CBSelected, 0, 0) + Me.TLNoteRange.Controls.Add(Me.CBUnselected, 0, 1) + Me.TLNoteRange.Controls.Add(Me.CBShort, 1, 0) + Me.TLNoteRange.Controls.Add(Me.CBVisible, 2, 1) + Me.TLNoteRange.Controls.Add(Me.CBLong, 1, 1) + Me.TLNoteRange.Controls.Add(Me.CBHidden, 2, 0) + Me.TLNoteRange.Controls.Add(Me.CBNoError, 3, 0) + Me.TLNoteRange.Controls.Add(Me.CBComment, 4, 1) + Me.TLNoteRange.Controls.Add(Me.CBNotComment, 4, 0) + Me.TLNoteRange.Location = New System.Drawing.Point(134, 12) + Me.TLNoteRange.Name = "TLNoteRange" + Me.TLNoteRange.RowCount = 2 + Me.TLNoteRange.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TLNoteRange.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TLNoteRange.Size = New System.Drawing.Size(328, 54) + Me.TLNoteRange.TabIndex = 1 + ' + 'CBError + ' + Me.CBError.Appearance = System.Windows.Forms.Appearance.Button + Me.CBError.BackColor = System.Drawing.SystemColors.Control + Me.CBError.Checked = True + Me.CBError.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBError.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBError.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBError.ForeColor = System.Drawing.SystemColors.ButtonShadow + Me.CBError.Location = New System.Drawing.Point(172, 30) + Me.CBError.Name = "CBError" + Me.CBError.Size = New System.Drawing.Size(64, 21) + Me.CBError.TabIndex = 7 + Me.CBError.Tag = "1" + Me.CBError.Text = "Error" + Me.CBError.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBError.UseVisualStyleBackColor = False + ' + 'CBNoError + ' + Me.CBNoError.Appearance = System.Windows.Forms.Appearance.Button + Me.CBNoError.BackColor = System.Drawing.SystemColors.Control + Me.CBNoError.Checked = True + Me.CBNoError.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBNoError.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBNoError.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBNoError.ForeColor = System.Drawing.SystemColors.ButtonShadow + Me.CBNoError.Location = New System.Drawing.Point(172, 3) + Me.CBNoError.Name = "CBNoError" + Me.CBNoError.Size = New System.Drawing.Size(64, 21) + Me.CBNoError.TabIndex = 6 + Me.CBNoError.Tag = "1" + Me.CBNoError.Text = "No Error" + Me.CBNoError.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBNoError.UseVisualStyleBackColor = False + ' + 'CBComment + ' + Me.CBComment.Appearance = System.Windows.Forms.Appearance.Button + Me.CBComment.BackColor = System.Drawing.SystemColors.Control + Me.CBComment.Checked = True + Me.CBComment.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBComment.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBComment.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBComment.ForeColor = System.Drawing.SystemColors.ButtonShadow + Me.CBComment.Location = New System.Drawing.Point(242, 30) + Me.CBComment.Name = "CBComment" + Me.CBComment.Size = New System.Drawing.Size(83, 21) + Me.CBComment.TabIndex = 9 + Me.CBComment.Tag = "1" + Me.CBComment.Text = "Comment" + Me.CBComment.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBComment.UseVisualStyleBackColor = False + ' + 'CBNotComment + ' + Me.CBNotComment.Appearance = System.Windows.Forms.Appearance.Button + Me.CBNotComment.BackColor = System.Drawing.SystemColors.Control + Me.CBNotComment.Checked = True + Me.CBNotComment.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBNotComment.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBNotComment.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CBNotComment.ForeColor = System.Drawing.SystemColors.ButtonShadow + Me.CBNotComment.Location = New System.Drawing.Point(242, 3) + Me.CBNotComment.Name = "CBNotComment" + Me.CBNotComment.Size = New System.Drawing.Size(83, 21) + Me.CBNotComment.TabIndex = 8 + Me.CBNotComment.Tag = "1" + Me.CBNotComment.Text = "Not Comment" + Me.CBNotComment.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.CBNotComment.UseVisualStyleBackColor = False + ' + 'dgFind ' Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None Me.CancelButton = Me.TBClose - Me.ClientSize = New System.Drawing.Size(474, 422) - Me.Controls.Add(Me.cbx6) - Me.Controls.Add(Me.cbx5) - Me.Controls.Add(Me.cbx4) + Me.ClientSize = New System.Drawing.Size(474, 451) + Me.Controls.Add(Me.TLNoteRange) + Me.Controls.Add(Me.FNoteNext) + Me.Controls.Add(Me.FNotePrevious) Me.Controls.Add(Me.TBUnselect) - Me.Controls.Add(Me.cbx3) - Me.Controls.Add(Me.cbx2) - Me.Controls.Add(Me.cbx1) Me.Controls.Add(Me.Label9) Me.Controls.Add(Me.Label8) Me.Controls.Add(Me.PictureBox3) @@ -858,7 +986,7 @@ Partial Class diagFind Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.MaximizeBox = False Me.MinimizeBox = False - Me.Name = "diagFind" + Me.Name = "dgFind" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent Me.Text = "Find / Delete / Replace" Me.TopMost = True @@ -871,6 +999,7 @@ Partial Class diagFind CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.TLNoteRange.ResumeLayout(False) Me.ResumeLayout(False) Me.PerformLayout() @@ -926,11 +1055,18 @@ Partial Class diagFind Friend WithEvents PictureBox3 As System.Windows.Forms.PictureBox Friend WithEvents Label8 As System.Windows.Forms.Label Friend WithEvents Label9 As System.Windows.Forms.Label - Friend WithEvents cbx1 As System.Windows.Forms.CheckBox - Friend WithEvents cbx2 As System.Windows.Forms.CheckBox - Friend WithEvents cbx3 As System.Windows.Forms.CheckBox + Friend WithEvents CBSelected As System.Windows.Forms.CheckBox + Friend WithEvents CBUnselected As System.Windows.Forms.CheckBox + Friend WithEvents CBShort As System.Windows.Forms.CheckBox Friend WithEvents TBUnselect As System.Windows.Forms.Button - Friend WithEvents cbx4 As System.Windows.Forms.CheckBox - Friend WithEvents cbx5 As System.Windows.Forms.CheckBox - Friend WithEvents cbx6 As System.Windows.Forms.CheckBox + Friend WithEvents CBLong As System.Windows.Forms.CheckBox + Friend WithEvents CBHidden As System.Windows.Forms.CheckBox + Friend WithEvents CBVisible As System.Windows.Forms.CheckBox + Friend WithEvents FNotePrevious As Button + Friend WithEvents FNoteNext As Button + Friend WithEvents TLNoteRange As TableLayoutPanel + Friend WithEvents CBNoError As CheckBox + Friend WithEvents CBNotComment As CheckBox + Friend WithEvents CBComment As CheckBox + Friend WithEvents CBError As CheckBox End Class diff --git a/iBMSC/Dialogs/diagFind.resx b/iBMSC/Dialogs/dgFind.resx similarity index 98% rename from iBMSC/Dialogs/diagFind.resx rename to iBMSC/Dialogs/dgFind.resx index 466547ffc..ea37a3183 100644 --- a/iBMSC/Dialogs/diagFind.resx +++ b/iBMSC/Dialogs/dgFind.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + AAABAAMAICAAAAEAIACoEAAANgAAABgYAAABACAAiAkAAN4QAAAQEAAAAQAgAGgEAABmGgAAKAAAACAA diff --git a/iBMSC/Dialogs/dgFind.vb b/iBMSC/Dialogs/dgFind.vb new file mode 100644 index 000000000..f3d5f0c56 --- /dev/null +++ b/iBMSC/Dialogs/dgFind.vb @@ -0,0 +1,155 @@ +Public Class dgFind + Dim bCol As Integer = 46 + Dim msg1 As String = "Error" + Dim msg2 As String = "Invalid label." + + Public Sub New(ByVal xbCol As Integer) + InitializeComponent() + bCol = xbCol + End Sub + + Private Sub CloseDialog(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBClose.Click + Me.Close() + End Sub + + Private Sub BSAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSAll.Click + For Each xCB As CheckBox In Panel1.Controls + xCB.Checked = True + Next + End Sub + Private Sub BSInv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSInv.Click + For Each xCB As CheckBox In Panel1.Controls + xCB.Checked = Not xCB.Checked + Next + End Sub + Private Sub BSNone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSNone.Click + For Each xCB As CheckBox In Panel1.Controls + xCB.Checked = False + Next + End Sub + + Private Sub diagFind_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + Me.Font = MainWindow.Font + Dim xBold As New Font(Me.Font, FontStyle.Bold) + + TBSelect.Font = xBold + Label8.Font = xBold + Label9.Font = xBold + + 'Dim xS() As String = Form1.lpfdr + Me.Text = MainWindow.TBFind.Text + + msg1 = Strings.Messages.Err + msg2 = Strings.Messages.InvalidLabel + + Label1.Text = Strings.fFind.NoteRange + Label2.Text = Strings.fFind.MeasureRange + Label3.Text = Strings.fFind.LabelRange + Label4.Text = Strings.fFind.ValueRange + Label5.Text = Strings.fFind.to_ + Label6.Text = Strings.fFind.to_ + Label7.Text = Strings.fFind.to_ + + CBSelected.Text = Strings.fFind.Selected + CBUnselected.Text = Strings.fFind.UnSelected + CBShort.Text = Strings.fFind.ShortNote + CBLong.Text = Strings.fFind.LongNote + CBHidden.Text = Strings.fFind.Hidden + CBVisible.Text = Strings.fFind.Visible + + Label8.Text = Strings.fFind.Column + BSAll.Text = Strings.fFind.SelectAll + BSInv.Text = Strings.fFind.SelectInverse + BSNone.Text = Strings.fFind.UnselectAll + + Label9.Text = Strings.fFind.Operation + TBrl.Text = Strings.fFind.ReplaceWithLabel + TBrv.Text = Strings.fFind.ReplaceWithValue + TBSelect.Text = Strings.fFind.Select_ + TBUnselect.Text = Strings.fFind.Unselect_ + TBDelete.Text = Strings.fFind.Delete_ + TBClose.Text = Strings.fFind.Close_ + + For xI1 As Integer = MainWindow.niB To bCol + Dim xCB As New CheckBox + With xCB + .Appearance = Appearance.Button + .Checked = True + .FlatStyle = FlatStyle.System + .Location = New Point(((xI1 - 26) Mod 8) * 35 + 3, ((xI1 - 26) \ 8) * 25 + 103) + .Size = New Size(35, 25) + .Tag = xI1 + .Text = "B" & (xI1 - 25).ToString + .TextAlign = ContentAlignment.MiddleCenter + .UseVisualStyleBackColor = True + End With + Panel1.Controls.Add(xCB) + Next + + AddHandler lr1.KeyDown, AddressOf lblKeyDown + AddHandler lr2.KeyDown, AddressOf lblKeyDown + AddHandler Ttl.KeyDown, AddressOf lblKeyDown + End Sub + + Private Function ValidLabel(ByVal xStr As String) As Boolean + xStr = UCase(Trim(xStr)) + + If Len(xStr) = 0 Then Return False + If xStr = "00" Or xStr = "0" Then Return False + If Not Len(xStr) = 1 And Not Len(xStr) = 2 Then Return False + + Dim xI3 As Integer = Asc(Mid(xStr, 1, 1)) + If Not ((xI3 >= 48 And xI3 <= 57) Or (xI3 >= 65 And xI3 <= 90)) Then Return False + If Len(xStr) = 2 Then + Dim xI4 As Integer = Asc(Mid(xStr, 2, 1)) + If Not ((xI4 >= 48 And xI4 <= 57) Or (xI4 >= 65 And xI4 <= 90)) Then Return False + End If + Return True + MsgBox(msg2, MsgBoxStyle.Critical, msg1) + End Function + + Private Sub lblKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) + If Not e.KeyCode = Keys.Enter Then Exit Sub + ValidateLabel(sender) + End Sub + + Private Function ValidateLabel(ByVal sender As Object) As Boolean + Dim TextboxS As TextBox = CType(sender, TextBox) + Dim xBool As Boolean = ValidLabel(TextboxS.Text) + If Not xBool Then + MsgBox(msg2, MsgBoxStyle.Critical, msg1) + TextboxS.Focus() + TextboxS.SelectAll() + End If + Return xBool + End Function + + Private Sub NoteFunction(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSelect.Click, TBUnselect.Click, FNotePrevious.Click, FNoteNext.Click, TBrl.Click, TBrv.Click, TBDelete.Click + If Not ValidateLabel(lr1) Or Not ValidateLabel(lr2) Then Exit Sub + + Dim LabelS As String = CType(sender, Button).Name + Dim xCol() As Integer = {} + For Each xCB As CheckBox In Panel1.Controls + If xCB.Checked Then + ReDim Preserve xCol(UBound(xCol) + 1) + xCol(UBound(xCol)) = CInt(xCB.Tag) + End If + Next + + ' Make an array of Note Range checkboxes manually + Dim ArrCB() As CheckBox = {CBSelected, CBUnselected, CBShort, CBLong, CBHidden, CBVisible, CBNoError, CBError, CBNotComment, CBComment} + Dim xRange(UBound(ArrCB)) As Boolean + For i = 0 To UBound(xRange) + xRange(i) = ArrCB(i).Checked + Next + + Dim xReplaceLbl As String = Ttl.Text + Dim xReplaceVal As Integer = CInt(Ttv.Value * 10000) + + MainWindow.fdrFind(xRange, + CInt(mr1.Value), CInt(mr2.Value), + lr1.Text, lr2.Text, + CInt(vr1.Value * 10000), CInt(vr2.Value * 10000), + xCol, LabelS, xReplaceLbl, xReplaceVal) + End Sub +End Class diff --git a/iBMSC/Dialogs/dgImportSM.vb b/iBMSC/Dialogs/dgImportSM.vb index 3a5b1b9b2..57b2aec07 100644 --- a/iBMSC/Dialogs/dgImportSM.vb +++ b/iBMSC/Dialogs/dgImportSM.vb @@ -1,5 +1,3 @@ -Imports System.Windows.Forms - Public Class dgImportSM Public iResult As Integer = -1 diff --git a/iBMSC/Dialogs/dgMyO2.vb b/iBMSC/Dialogs/dgMyO2.vb index 26f754c68..c411337c9 100644 --- a/iBMSC/Dialogs/dgMyO2.vb +++ b/iBMSC/Dialogs/dgMyO2.vb @@ -33,7 +33,7 @@ Public Class dgMyO2 End Sub Private Sub bApply1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bApply1.Click - MainWindow.MyO2ConstBPM(vBPM.Value * 10000) + MainWindow.MyO2ConstBPM(CInt(vBPM.Value * 10000)) End Sub Private Sub bApply2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bApply2.Click @@ -44,15 +44,15 @@ Public Class dgMyO2 For xI1 As Integer = 0 To UBound(Aj) Dim xW() As String = Split(xStrItem(xI1), "_") With Aj(xI1) - .Measure = Val(xW(0)) - .ColumnIndex = Val(xW(1)) + .Measure = CInt(xW(0)) + .ColumnIndex = CInt(xW(1)) .ColumnName = xW(2) .Grid = xW(3) - .LongNote = Val(xW(4)) - .Hidden = Val(xW(5)) - .AdjTo64 = Val(xW(6)) - .D64 = Val(xW(7)) - .D48 = Val(xW(8)) + .LongNote = CBool(xW(4)) + .Hidden = CBool(xW(5)) + .AdjTo64 = CBool(xW(6)) + .D64 = CInt(xW(7)) + .D48 = CInt(xW(8)) End With AddAdjItem(Aj(xI1), xI1) @@ -70,6 +70,6 @@ Public Class dgMyO2 Private Sub lResult_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles lResult.CellEndEdit If e.ColumnIndex <> 6 Then Return If e.RowIndex < 0 Then Return - Aj(Val(lResult.Item(0, e.RowIndex).Value)).AdjTo64 = lResult.Item(6, e.RowIndex).Value + Aj(CInt(lResult.Item(0, e.RowIndex).Value)).AdjTo64 = CBool(lResult.Item(6, e.RowIndex).Value) End Sub End Class diff --git a/iBMSC/Dialogs/dgStatistics.Designer.vb b/iBMSC/Dialogs/dgStatistics.Designer.vb index ddb2cece4..ff5614554 100644 --- a/iBMSC/Dialogs/dgStatistics.Designer.vb +++ b/iBMSC/Dialogs/dgStatistics.Designer.vb @@ -1,308 +1,144 @@ - _ -Partial Class dgStatistics - Inherits System.Windows.Forms.Form - - 'Form 重写 Dispose,以清理组件列表。 - _ - 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 - - 'Windows 窗体设计器所必需的 - Private components As System.ComponentModel.IContainer - - '注意: 以下过程是 Windows 窗体设计器所必需的 - '可以使用 Windows 窗体设计器修改它。 - '不要使用代码编辑器修改它。 - _ - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dgStatistics)) - Me.OK_Button = New System.Windows.Forms.Button - Me.lIcon = New System.Windows.Forms.Label - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel - Me.Label2 = New System.Windows.Forms.Label - Me.Label16 = New System.Windows.Forms.Label - Me.Label1 = New System.Windows.Forms.Label - Me.Label6 = New System.Windows.Forms.Label - Me.Label7 = New System.Windows.Forms.Label - Me.Label8 = New System.Windows.Forms.Label - Me.Label9 = New System.Windows.Forms.Label - Me.Label10 = New System.Windows.Forms.Label - Me.Label11 = New System.Windows.Forms.Label - Me.Label12 = New System.Windows.Forms.Label - Me.Label13 = New System.Windows.Forms.Label - Me.Label14 = New System.Windows.Forms.Label - Me.Label15 = New System.Windows.Forms.Label - Me.TableLayoutPanel1.SuspendLayout() - Me.SuspendLayout() - ' - 'OK_Button - ' - Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.OK_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.OK_Button.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.OK_Button.Location = New System.Drawing.Point(381, 212) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(78, 27) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'lIcon - ' - Me.lIcon.Image = Global.iBMSC.My.Resources.Resources.Statistics3 - Me.lIcon.Location = New System.Drawing.Point(12, 9) - Me.lIcon.Name = "lIcon" - Me.lIcon.Size = New System.Drawing.Size(42, 42) - Me.lIcon.TabIndex = 1 - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.ColumnCount = 8 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.Controls.Add(Me.Label2, 5, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Label16, 4, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Label1, 0, 7) - Me.TableLayoutPanel1.Controls.Add(Me.Label6, 0, 1) - Me.TableLayoutPanel1.Controls.Add(Me.Label7, 0, 2) - Me.TableLayoutPanel1.Controls.Add(Me.Label8, 0, 3) - Me.TableLayoutPanel1.Controls.Add(Me.Label9, 0, 4) - Me.TableLayoutPanel1.Controls.Add(Me.Label10, 0, 5) - Me.TableLayoutPanel1.Controls.Add(Me.Label11, 0, 6) - Me.TableLayoutPanel1.Controls.Add(Me.Label12, 1, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Label13, 2, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Label14, 3, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Label15, 4, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(64, 12) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 7 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(387, 188) - Me.TableLayoutPanel1.TabIndex = 12 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label2.Location = New System.Drawing.Point(330, 0) - Me.Label2.Margin = New System.Windows.Forms.Padding(0) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(57, 25) - Me.Label2.TabIndex = 16 - Me.Label2.Text = "Total" - Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label16 - ' - Me.Label16.AutoSize = True - Me.Label16.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label16.Location = New System.Drawing.Point(274, 0) - Me.Label16.Margin = New System.Windows.Forms.Padding(0) - Me.Label16.Name = "Label16" - Me.Label16.Size = New System.Drawing.Size(56, 25) - Me.Label16.TabIndex = 15 - Me.Label16.Text = "Errors" - Me.Label16.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) - Me.Label1.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label1.Location = New System.Drawing.Point(0, 163) - Me.Label1.Margin = New System.Windows.Forms.Padding(0) - Me.Label1.Name = "Label1" - Me.Label1.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label1.Size = New System.Drawing.Size(50, 24) - Me.Label1.TabIndex = 14 - Me.Label1.Text = "Total" - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label6 - ' - Me.Label6.AutoSize = True - Me.Label6.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) - Me.Label6.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label6.Location = New System.Drawing.Point(0, 25) - Me.Label6.Margin = New System.Windows.Forms.Padding(0) - Me.Label6.Name = "Label6" - Me.Label6.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label6.Size = New System.Drawing.Size(50, 23) - Me.Label6.TabIndex = 13 - Me.Label6.Text = "BPM" - Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label7 - ' - Me.Label7.AutoSize = True - Me.Label7.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label7.Location = New System.Drawing.Point(0, 48) - Me.Label7.Margin = New System.Windows.Forms.Padding(0) - Me.Label7.Name = "Label7" - Me.Label7.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label7.Size = New System.Drawing.Size(50, 23) - Me.Label7.TabIndex = 13 - Me.Label7.Text = "STOP" - Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label8 - ' - Me.Label8.AutoSize = True - Me.Label8.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) - Me.Label8.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label8.Location = New System.Drawing.Point(0, 71) - Me.Label8.Margin = New System.Windows.Forms.Padding(0) - Me.Label8.Name = "Label8" - Me.Label8.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label8.Size = New System.Drawing.Size(50, 23) - Me.Label8.TabIndex = 13 - Me.Label8.Text = "SCROLL" - Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label9 - ' - Me.Label9.AutoSize = True - Me.Label9.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label9.Location = New System.Drawing.Point(0, 94) - Me.Label9.Margin = New System.Windows.Forms.Padding(0) - Me.Label9.Name = "Label9" - Me.Label9.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label9.Size = New System.Drawing.Size(50, 23) - Me.Label9.TabIndex = 13 - Me.Label9.Text = "A1-A8" - Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label10 - ' - Me.Label10.AutoSize = True - Me.Label10.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) - Me.Label10.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label10.Location = New System.Drawing.Point(0, 117) - Me.Label10.Margin = New System.Windows.Forms.Padding(0) - Me.Label10.Name = "Label10" - Me.Label10.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label10.Size = New System.Drawing.Size(50, 23) - Me.Label10.TabIndex = 13 - Me.Label10.Text = "D1-D8" - Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label11 - ' - Me.Label11.AutoSize = True - Me.Label11.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label11.Location = New System.Drawing.Point(0, 140) - Me.Label11.Margin = New System.Windows.Forms.Padding(0) - Me.Label11.Name = "Label11" - Me.Label11.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) - Me.Label11.Size = New System.Drawing.Size(50, 23) - Me.Label11.TabIndex = 13 - Me.Label11.Text = "BGM" - Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label12 - ' - Me.Label12.AutoSize = True - Me.Label12.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label12.Location = New System.Drawing.Point(50, 0) - Me.Label12.Margin = New System.Windows.Forms.Padding(0) - Me.Label12.Name = "Label12" - Me.Label12.Size = New System.Drawing.Size(56, 25) - Me.Label12.TabIndex = 13 - Me.Label12.Text = "Short" - Me.Label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label13 - ' - Me.Label13.AutoSize = True - Me.Label13.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label13.Location = New System.Drawing.Point(106, 0) - Me.Label13.Margin = New System.Windows.Forms.Padding(0) - Me.Label13.Name = "Label13" - Me.Label13.Size = New System.Drawing.Size(56, 25) - Me.Label13.TabIndex = 13 - Me.Label13.Text = "Long" - Me.Label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label14 - ' - Me.Label14.AutoSize = True - Me.Label14.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label14.Location = New System.Drawing.Point(162, 0) - Me.Label14.Margin = New System.Windows.Forms.Padding(0) - Me.Label14.Name = "Label14" - Me.Label14.Size = New System.Drawing.Size(56, 25) - Me.Label14.TabIndex = 13 - Me.Label14.Text = "LnObj" - Me.Label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label15 - ' - Me.Label15.AutoSize = True - Me.Label15.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label15.Location = New System.Drawing.Point(218, 0) - Me.Label15.Margin = New System.Windows.Forms.Padding(0) - Me.Label15.Name = "Label15" - Me.Label15.Size = New System.Drawing.Size(56, 25) - Me.Label15.TabIndex = 13 - Me.Label15.Text = "Hidden" - Me.Label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'dgStatistics - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None - Me.CancelButton = Me.OK_Button - Me.ClientSize = New System.Drawing.Size(482, 254) - Me.Controls.Add(Me.TableLayoutPanel1) - Me.Controls.Add(Me.lIcon) - Me.Controls.Add(Me.OK_Button) - Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dgStatistics" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Statistics" - Me.TableLayoutPanel1.ResumeLayout(False) - Me.TableLayoutPanel1.PerformLayout() - Me.ResumeLayout(False) - - End Sub - Friend WithEvents OK_Button As System.Windows.Forms.Button - Friend WithEvents lIcon As System.Windows.Forms.Label - Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents Label6 As System.Windows.Forms.Label - Friend WithEvents Label16 As System.Windows.Forms.Label - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Label7 As System.Windows.Forms.Label - Friend WithEvents Label8 As System.Windows.Forms.Label - Friend WithEvents Label9 As System.Windows.Forms.Label - Friend WithEvents Label10 As System.Windows.Forms.Label - Friend WithEvents Label11 As System.Windows.Forms.Label - Friend WithEvents Label12 As System.Windows.Forms.Label - Friend WithEvents Label13 As System.Windows.Forms.Label - Friend WithEvents Label14 As System.Windows.Forms.Label - Friend WithEvents Label15 As System.Windows.Forms.Label - Friend WithEvents Label2 As System.Windows.Forms.Label - -End Class + +Partial Class dgStatistics + Inherits System.Windows.Forms.Form + + 'Form 重写 Dispose,以清理组件列表。 + + 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 + + 'Windows 窗体设计器所必需的 + Private components As System.ComponentModel.IContainer + + '注意: 以下过程是 Windows 窗体设计器所必需的 + '可以使用 Windows 窗体设计器修改它。 + '不要使用代码编辑器修改它。 + + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dgStatistics)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.lIcon = New System.Windows.Forms.Label() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.ListWAVUsage = New System.Windows.Forms.ListBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.OK_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.OK_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.OK_Button.Location = New System.Drawing.Point(718, 569) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(78, 27) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'lIcon + ' + Me.lIcon.Image = Global.iBMSC.My.Resources.Resources.Statistics3 + Me.lIcon.Location = New System.Drawing.Point(12, 9) + Me.lIcon.Name = "lIcon" + Me.lIcon.Size = New System.Drawing.Size(42, 42) + Me.lIcon.TabIndex = 1 + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.ColumnCount = 8 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 14.28571!)) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(64, 12) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 26 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.215852!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 3.035414!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(480, 540) + Me.TableLayoutPanel1.TabIndex = 12 + ' + 'ListWAVUsage + ' + Me.ListWAVUsage.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ListWAVUsage.FormattingEnabled = True + Me.ListWAVUsage.ItemHeight = 15 + Me.ListWAVUsage.Location = New System.Drawing.Point(570, 42) + Me.ListWAVUsage.Name = "ListWAVUsage" + Me.ListWAVUsage.Size = New System.Drawing.Size(226, 514) + Me.ListWAVUsage.TabIndex = 13 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(567, 12) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(68, 15) + Me.Label1.TabIndex = 14 + Me.Label1.Text = "Note Usage" + ' + 'dgStatistics + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.CancelButton = Me.OK_Button + Me.ClientSize = New System.Drawing.Size(819, 611) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.ListWAVUsage) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Controls.Add(Me.lIcon) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dgStatistics" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Statistics (Advanced)" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents lIcon As System.Windows.Forms.Label + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents ListWAVUsage As ListBox + Friend WithEvents Label1 As Label +End Class diff --git a/iBMSC/Dialogs/dgStatistics.resx b/iBMSC/Dialogs/dgStatistics.resx index a8549fa44..beb349dbf 100644 --- a/iBMSC/Dialogs/dgStatistics.resx +++ b/iBMSC/Dialogs/dgStatistics.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQ diff --git a/iBMSC/Dialogs/dgStatistics.vb b/iBMSC/Dialogs/dgStatistics.vb index 98e3b4704..6cec7ab6f 100644 --- a/iBMSC/Dialogs/dgStatistics.vb +++ b/iBMSC/Dialogs/dgStatistics.vb @@ -1,51 +1,107 @@ -Imports System.Windows.Forms - -Public Class dgStatistics - - Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Close() - End Sub - - Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) - Me.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close() - End Sub - - Private Sub dgStatistics_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - Me.Font = MainWindow.Font - - Me.Text = Strings.fStatistics.Title - Label6.Text = Strings.fStatistics.lBPM - Label7.Text = Strings.fStatistics.lSTOP - Label8.Text = Strings.fStatistics.lSCROLL - Label9.Text = Strings.fStatistics.lA - Label10.Text = Strings.fStatistics.lD - Label11.Text = Strings.fStatistics.lBGM - Label1.Text = Strings.fStatistics.lTotal - Label12.Text = Strings.fStatistics.lShort - Label13.Text = Strings.fStatistics.lLong - Label14.Text = Strings.fStatistics.lLnObj - Label15.Text = Strings.fStatistics.lHidden - Label16.Text = Strings.fStatistics.lErrors - Label2.Text = Strings.fStatistics.lTotal - OK_Button.Text = Strings.OK - End Sub - - Public Sub New(ByVal data(,) As Integer) - InitializeComponent() - - For row As Integer = 0 To 6 - For col As Integer = 0 To 5 - Dim xLabel As New Label - xLabel.Dock = DockStyle.Fill - xLabel.TextAlign = ContentAlignment.MiddleCenter - xLabel.Margin = New Padding(0) - xLabel.Font = New Font(Me.Font, FontStyle.Bold) - If data(row, col) <> 0 Then xLabel.Text = data(row, col) - If row Mod 2 = 0 Then xLabel.BackColor = Color.FromArgb(&H10000000) - TableLayoutPanel1.Controls.Add(xLabel, col + 1, row + 1) - Next - Next - End Sub -End Class +Public Class dgStatistics + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dgStatistics_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + Me.Font = MainWindow.Font + + ' Me.Text = Strings.fStatistics.Title + ' LRow1.Text = Strings.fStatistics.lSCROLL + ' LRow2.Text = Strings.fStatistics.lBPM + ' LRow3.Text = Strings.fStatistics.lSTOP + ' LRow4.Text = Strings.fStatistics.lA1 + ' LRow5.Text = Strings.fStatistics.lA2 + ' LRow6.Text = Strings.fStatistics.lA3 + ' LRow7.Text = Strings.fStatistics.lA4 + ' LRow8.Text = Strings.fStatistics.lA5 + ' LRow9.Text = Strings.fStatistics.lA6 + ' LRow10.Text = Strings.fStatistics.lA7 + ' LRow11.Text = Strings.fStatistics.lA8 + ' LRow12.Text = Strings.fStatistics.lD1 + ' LRow13.Text = Strings.fStatistics.lD2 + ' LRow14.Text = Strings.fStatistics.lD3 + ' LRow15.Text = Strings.fStatistics.lD4 + ' LRow16.Text = Strings.fStatistics.lD5 + ' LRow17.Text = Strings.fStatistics.lD6 + ' LRow18.Text = Strings.fStatistics.lD7 + ' LRow19.Text = Strings.fStatistics.lD8 + ' LRow20.Text = Strings.fStatistics.lA + ' LRow21.Text = Strings.fStatistics.lD + ' LRow22.Text = Strings.fStatistics.lBGM + ' LRow23.Text = Strings.fStatistics.lNotes + ' LRowTotal.Text = Strings.fStatistics.lTotal + ' LColumn1.Text = Strings.fStatistics.lShort + ' LColumn2.Text = Strings.fStatistics.lLong + ' LColumn3.Text = Strings.fStatistics.lLnObj + ' LColumn4.Text = Strings.fStatistics.lHidden + ' LColumn5.Text = Strings.fStatistics.lLandmines + ' LColumn6.Text = Strings.fStatistics.lErrors + ' LColumnTotal.Text = Strings.fStatistics.lTotal + OK_Button.Text = Strings.OK + ' StTotalText.Text = Strings.fStatistics.recTotal + ' StTotalValue.Text = Strings.fStatistics.recTotalValue + End Sub + + Public Sub New(ByVal data(,) As Integer, ByVal LRows() As String, ByVal LCols() As String, ByVal dataWAV(,) As Integer) + InitializeComponent() + + For row As Integer = 1 To TableLayoutPanel1.RowCount - 1 + Dim xLabel As New Label + xLabel.Dock = DockStyle.Fill + xLabel.TextAlign = ContentAlignment.MiddleRight + xLabel.Margin = New Padding(0) + xLabel.Text = LRows(row - 1) + If row Mod 2 = 1 Then xLabel.BackColor = Color.FromArgb(&H10000000) + TableLayoutPanel1.Controls.Add(xLabel, 0, row) + Next + For col As Integer = 1 To TableLayoutPanel1.ColumnCount - 1 + Dim xLabel As New Label + xLabel.Dock = DockStyle.Fill + xLabel.TextAlign = ContentAlignment.MiddleCenter + xLabel.Margin = New Padding(0) + xLabel.Text = LCols(col - 1) + TableLayoutPanel1.Controls.Add(xLabel, col, 0) + Next + + For row As Integer = 1 To TableLayoutPanel1.RowCount - 1 + For col As Integer = 1 To TableLayoutPanel1.ColumnCount - 1 + Dim xLabel As New Label + xLabel.Dock = DockStyle.Fill + xLabel.TextAlign = ContentAlignment.MiddleCenter + xLabel.Margin = New Padding(0) + xLabel.Font = New Font(Me.Font, FontStyle.Bold) + If data(row - 1, col - 1) <> 0 Then xLabel.Text = CStr(data(row - 1, col - 1)) + If row Mod 2 = 1 Then xLabel.BackColor = Color.FromArgb(&H10000000) + TableLayoutPanel1.Controls.Add(xLabel, col, row) + Next + Next + + Dim Text As String + For i = 0 To dataWAV.GetUpperBound(0) + ' 2 rows. First column - Type, assigned or unassigned + ' Second dimension - Usage in play lanes or BGM + If dataWAV(i, 0) = 0 AndAlso dataWAV(i, 1) = 0 Then Continue For + Text = "#WAV" & C10to36(i) & ": " & dataWAV(i, 1) + If dataWAV(i, 0) = 0 AndAlso dataWAV(i, 1) <> 0 Then Text &= " | Unassigned" + ListWAVUsage.Items.Add(Text) + Next + + End Sub + Private Function C10to36(ByVal xStart As Long) As String ' Copied from Utilities + If xStart < 1 Then xStart = 1 + If xStart > 1295 Then xStart = 1295 + Return C10to36S(CInt(xStart \ 36)) & C10to36S(CInt(xStart Mod 36)) + End Function + Private Function C10to36S(ByVal xStart As Integer) As Char ' Copied from Utilities + If xStart < 10 Then Return CChar(CStr(xStart)) Else Return Chr(xStart + 55) + End Function + +End Class diff --git a/iBMSC/Dialogs/dgStatisticsLegacy.Designer.vb b/iBMSC/Dialogs/dgStatisticsLegacy.Designer.vb new file mode 100644 index 000000000..f61584e5a --- /dev/null +++ b/iBMSC/Dialogs/dgStatisticsLegacy.Designer.vb @@ -0,0 +1,290 @@ + +Partial Class dgStatisticsLegacy + Inherits System.Windows.Forms.Form + + 'Form 重写 Dispose,以清理组件列表。 + + 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 + + 'Windows 窗体设计器所必需的 + Private components As System.ComponentModel.IContainer + + '注意: 以下过程是 Windows 窗体设计器所必需的 + '可以使用 Windows 窗体设计器修改它。 + '不要使用代码编辑器修改它。 + + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dgStatistics)) + Me.OK_Button = New System.Windows.Forms.Button + Me.lIcon = New System.Windows.Forms.Label + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel + Me.Label2 = New System.Windows.Forms.Label + Me.Label15 = New System.Windows.Forms.Label + Me.Label1 = New System.Windows.Forms.Label + Me.Label6 = New System.Windows.Forms.Label + Me.Label7 = New System.Windows.Forms.Label + Me.Label8 = New System.Windows.Forms.Label + Me.Label9 = New System.Windows.Forms.Label + Me.Label10 = New System.Windows.Forms.Label + Me.Label11 = New System.Windows.Forms.Label + Me.Label12 = New System.Windows.Forms.Label + Me.Label13 = New System.Windows.Forms.Label + Me.Label14 = New System.Windows.Forms.Label + Me.TableLayoutPanel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.OK_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.OK_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.OK_Button.Location = New System.Drawing.Point(381, 188) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(78, 27) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'lIcon + ' + Me.lIcon.Image = Global.iBMSC.My.Resources.Resources.Statistics3 + Me.lIcon.Location = New System.Drawing.Point(12, 9) + Me.lIcon.Name = "lIcon" + Me.lIcon.Size = New System.Drawing.Size(42, 42) + Me.lIcon.TabIndex = 1 + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.ColumnCount = 7 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.Controls.Add(Me.Label2, 5, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label15, 4, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label1, 0, 6) + Me.TableLayoutPanel1.Controls.Add(Me.Label6, 0, 1) + Me.TableLayoutPanel1.Controls.Add(Me.Label7, 0, 2) + Me.TableLayoutPanel1.Controls.Add(Me.Label8, 0, 3) + Me.TableLayoutPanel1.Controls.Add(Me.Label9, 0, 4) + Me.TableLayoutPanel1.Controls.Add(Me.Label10, 0, 5) + Me.TableLayoutPanel1.Controls.Add(Me.Label11, 1, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label12, 2, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label13, 3, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label14, 4, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(64, 12) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 7 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(387, 164) + Me.TableLayoutPanel1.TabIndex = 12 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label2.Location = New System.Drawing.Point(330, 0) + Me.Label2.Margin = New System.Windows.Forms.Padding(0) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(57, 25) + Me.Label2.TabIndex = 16 + Me.Label2.Text = "Total" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label15 + ' + Me.Label15.AutoSize = True + Me.Label15.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label15.Location = New System.Drawing.Point(274, 0) + Me.Label15.Margin = New System.Windows.Forms.Padding(0) + Me.Label15.Name = "Label15" + Me.Label15.Size = New System.Drawing.Size(56, 25) + Me.Label15.TabIndex = 15 + Me.Label15.Text = "Errors" + Me.Label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label1.Location = New System.Drawing.Point(0, 140) + Me.Label1.Margin = New System.Windows.Forms.Padding(0) + Me.Label1.Name = "Label1" + Me.Label1.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) + Me.Label1.Size = New System.Drawing.Size(50, 24) + Me.Label1.TabIndex = 14 + Me.Label1.Text = "Total" + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) + Me.Label6.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label6.Location = New System.Drawing.Point(0, 25) + Me.Label6.Margin = New System.Windows.Forms.Padding(0) + Me.Label6.Name = "Label6" + Me.Label6.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) + Me.Label6.Size = New System.Drawing.Size(50, 23) + Me.Label6.TabIndex = 13 + Me.Label6.Text = "BPM" + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label7.Location = New System.Drawing.Point(0, 48) + Me.Label7.Margin = New System.Windows.Forms.Padding(0) + Me.Label7.Name = "Label7" + Me.Label7.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) + Me.Label7.Size = New System.Drawing.Size(50, 23) + Me.Label7.TabIndex = 13 + Me.Label7.Text = "STOP" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) + Me.Label8.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label8.Location = New System.Drawing.Point(0, 71) + Me.Label8.Margin = New System.Windows.Forms.Padding(0) + Me.Label8.Name = "Label8" + Me.Label8.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) + Me.Label8.Size = New System.Drawing.Size(50, 23) + Me.Label8.TabIndex = 13 + Me.Label8.Text = "A1-A8" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label9.Location = New System.Drawing.Point(0, 94) + Me.Label9.Margin = New System.Windows.Forms.Padding(0) + Me.Label9.Name = "Label9" + Me.Label9.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) + Me.Label9.Size = New System.Drawing.Size(50, 23) + Me.Label9.TabIndex = 13 + Me.Label9.Text = "D1-D8" + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.BackColor = System.Drawing.Color.FromArgb(CType(CType(16, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer)) + Me.Label10.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label10.Location = New System.Drawing.Point(0, 117) + Me.Label10.Margin = New System.Windows.Forms.Padding(0) + Me.Label10.Name = "Label10" + Me.Label10.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) + Me.Label10.Size = New System.Drawing.Size(50, 23) + Me.Label10.TabIndex = 13 + Me.Label10.Text = "BGM" + Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label11.Location = New System.Drawing.Point(50, 0) + Me.Label11.Margin = New System.Windows.Forms.Padding(0) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(56, 25) + Me.Label11.TabIndex = 13 + Me.Label11.Text = "Short" + Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label12 + ' + Me.Label12.AutoSize = True + Me.Label12.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label12.Location = New System.Drawing.Point(106, 0) + Me.Label12.Margin = New System.Windows.Forms.Padding(0) + Me.Label12.Name = "Label12" + Me.Label12.Size = New System.Drawing.Size(56, 25) + Me.Label12.TabIndex = 13 + Me.Label12.Text = "Long" + Me.Label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label13 + ' + Me.Label13.AutoSize = True + Me.Label13.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label13.Location = New System.Drawing.Point(162, 0) + Me.Label13.Margin = New System.Windows.Forms.Padding(0) + Me.Label13.Name = "Label13" + Me.Label13.Size = New System.Drawing.Size(56, 25) + Me.Label13.TabIndex = 13 + Me.Label13.Text = "LnObj" + Me.Label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label14 + ' + Me.Label14.AutoSize = True + Me.Label14.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label14.Location = New System.Drawing.Point(218, 0) + Me.Label14.Margin = New System.Windows.Forms.Padding(0) + Me.Label14.Name = "Label14" + Me.Label14.Size = New System.Drawing.Size(56, 25) + Me.Label14.TabIndex = 13 + Me.Label14.Text = "Hidden" + Me.Label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dgStatisticsLegacy + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.CancelButton = Me.OK_Button + Me.ClientSize = New System.Drawing.Size(482, 230) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Controls.Add(Me.lIcon) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dgStatisticsLegacy" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Statistics (Legacy)" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.TableLayoutPanel1.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents lIcon As System.Windows.Forms.Label + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents Label15 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Label7 As System.Windows.Forms.Label + Friend WithEvents Label8 As System.Windows.Forms.Label + Friend WithEvents Label9 As System.Windows.Forms.Label + Friend WithEvents Label10 As System.Windows.Forms.Label + Friend WithEvents Label11 As System.Windows.Forms.Label + Friend WithEvents Label12 As System.Windows.Forms.Label + Friend WithEvents Label13 As System.Windows.Forms.Label + Friend WithEvents Label14 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + +End Class diff --git a/iBMSC/Dialogs/dgStatisticsLegacy.vb b/iBMSC/Dialogs/dgStatisticsLegacy.vb new file mode 100644 index 000000000..517bd3953 --- /dev/null +++ b/iBMSC/Dialogs/dgStatisticsLegacy.vb @@ -0,0 +1,48 @@ +Public Class dgStatisticsLegacy + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dgStatistics_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + Me.Font = MainWindow.Font + + Me.Text = Strings.fStatistics.Title + Label6.Text = Strings.fStatistics.lBPM + Label7.Text = Strings.fStatistics.lSTOP + Label8.Text = Strings.fStatistics.lA + Label9.Text = Strings.fStatistics.lD + Label10.Text = Strings.fStatistics.lBGM + Label1.Text = Strings.fStatistics.lTotal + Label11.Text = Strings.fStatistics.lShort + Label12.Text = Strings.fStatistics.lLong + Label13.Text = Strings.fStatistics.lLnObj + Label14.Text = Strings.fStatistics.lHidden + Label15.Text = Strings.fStatistics.lErrors + Label2.Text = Strings.fStatistics.lTotal + OK_Button.Text = Strings.OK + End Sub + + Public Sub New(ByVal data(,) As Integer) + InitializeComponent() + + For row As Integer = 0 To 5 + For col As Integer = 0 To 5 + Dim xLabel As New Label + xLabel.Dock = DockStyle.Fill + xLabel.TextAlign = ContentAlignment.MiddleCenter + xLabel.Margin = New Padding(0) + xLabel.Font = New Font(Me.Font, FontStyle.Bold) + If data(row, col) <> 0 Then xLabel.Text = CStr(data(row, col)) + If row Mod 2 = 0 Then xLabel.BackColor = Color.FromArgb(&H10000000) + TableLayoutPanel1.Controls.Add(xLabel, col + 1, row + 1) + Next + Next + End Sub +End Class diff --git a/iBMSC/Dialogs/diagFind.vb b/iBMSC/Dialogs/diagFind.vb deleted file mode 100644 index 78db6f041..000000000 --- a/iBMSC/Dialogs/diagFind.vb +++ /dev/null @@ -1,262 +0,0 @@ -Imports System.Windows.Forms - -Public Class diagFind - Dim bCol As Integer = 46 - Dim msg1 As String = "Error" - Dim msg2 As String = "Invalid label." - - Public Sub New(ByVal xbCol As Integer, ByVal xmsg1 As String, ByVal xmsg2 As String) - InitializeComponent() - bCol = xbCol - msg1 = xmsg1 - msg2 = xmsg2 - End Sub - - Private Sub CloseDialog(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBClose.Click - Me.Close() - End Sub - - Private Sub BSAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSAll.Click - For Each xCB As CheckBox In Panel1.Controls - xCB.Checked = True - Next - End Sub - Private Sub BSInv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSInv.Click - For Each xCB As CheckBox In Panel1.Controls - xCB.Checked = Not xCB.Checked - Next - End Sub - Private Sub BSNone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSNone.Click - For Each xCB As CheckBox In Panel1.Controls - xCB.Checked = False - Next - End Sub - - Private Sub diagFind_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - Me.Font = MainWindow.Font - Dim xBold As New Font(Me.Font, FontStyle.Bold) - - TBSelect.Font = xBold - Label8.Font = xBold - Label9.Font = xBold - - 'Dim xS() As String = Form1.lpfdr - Me.Text = MainWindow.TBFind.Text - - Label1.Text = Strings.fFind.NoteRange - Label2.Text = Strings.fFind.MeasureRange - Label3.Text = Strings.fFind.LabelRange - Label4.Text = Strings.fFind.ValueRange - Label5.Text = Strings.fFind.to_ - Label6.Text = Strings.fFind.to_ - Label7.Text = Strings.fFind.to_ - - cbx1.Text = Strings.fFind.Selected - cbx2.Text = Strings.fFind.UnSelected - cbx3.Text = Strings.fFind.ShortNote - cbx4.Text = Strings.fFind.LongNote - cbx5.Text = Strings.fFind.Hidden - cbx6.Text = Strings.fFind.Visible - - Label8.Text = Strings.fFind.Column - BSAll.Text = Strings.fFind.SelectAll - BSInv.Text = Strings.fFind.SelectInverse - BSNone.Text = Strings.fFind.UnselectAll - - Label9.Text = Strings.fFind.Operation - TBrl.Text = Strings.fFind.ReplaceWithLabel - TBrv.Text = Strings.fFind.ReplaceWithValue - TBSelect.Text = Strings.fFind.Select_ - TBUnselect.Text = Strings.fFind.Unselect_ - TBDelete.Text = Strings.fFind.Delete_ - TBClose.Text = Strings.fFind.Close_ - - For xI1 As Integer = 27 To bCol - Dim xCB As New CheckBox - With xCB - .Appearance = Appearance.Button - .Checked = True - .FlatStyle = FlatStyle.System - .Location = New Point(((xI1 - 26) Mod 8) * 35 + 3, ((xI1 - 26) \ 8) * 25 + 103) - .Size = New Size(35, 25) - .Tag = xI1 - .Text = "B" & (xI1 - 25).ToString - .TextAlign = ContentAlignment.MiddleCenter - .UseVisualStyleBackColor = True - End With - Panel1.Controls.Add(xCB) - Next - - AddHandler lr1.KeyDown, AddressOf lblKeyDown - AddHandler lr2.KeyDown, AddressOf lblKeyDown - AddHandler Ttl.KeyDown, AddressOf lblKeyDown - End Sub - - Private Function ValidLabel(ByVal xStr As String) As Boolean - xStr = UCase(Trim(xStr)) - - If Len(xStr) = 0 Then Return False - If xStr = "00" Or xStr = "0" Then Return False - If Not Len(xStr) = 1 And Not Len(xStr) = 2 Then Return False - - Dim xI3 As Integer = Asc(Mid(xStr, 1, 1)) - If Not ((xI3 >= 48 And xI3 <= 57) Or (xI3 >= 65 And xI3 <= 90)) Then Return False - If Len(xStr) = 2 Then - Dim xI4 As Integer = Asc(Mid(xStr, 2, 1)) - If Not ((xI4 >= 48 And xI4 <= 57) Or (xI4 >= 65 And xI4 <= 90)) Then Return False - End If - Return True - MsgBox(msg2, MsgBoxStyle.Critical, msg1) - End Function - - Private Sub lblKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) - If Not e.KeyCode = Keys.Enter Then Exit Sub - ValidateLabel(sender) - End Sub - - Private Function ValidateLabel(ByVal sender As Object) As Boolean - Dim xBool As Boolean = ValidLabel(sender.Text) - If Not xBool Then - MsgBox(msg2, MsgBoxStyle.Critical, msg1) - sender.Focus() - sender.SelectAll() - End If - ValidateLabel = xBool - End Function - - Private Sub TBSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSelect.Click - If Not ValidateLabel(lr1) Then Exit Sub - If Not ValidateLabel(lr2) Then Exit Sub - - Dim xCol() As Integer = {} - For Each xCB As CheckBox In Panel1.Controls - If xCB.Checked Then - ReDim Preserve xCol(UBound(xCol) + 1) - xCol(UBound(xCol)) = xCB.Tag - End If - Next - - Dim xRange As Integer = 1 - If cbx1.Checked Then xRange *= 2 - If cbx2.Checked Then xRange *= 3 - If cbx3.Checked Then xRange *= 5 - If cbx4.Checked Then xRange *= 7 - If cbx5.Checked Then xRange *= 11 - If cbx6.Checked Then xRange *= 13 - - MainWindow.fdrSelect(xRange, _ - mr1.Value, mr2.Value, _ - lr1.Text, lr2.Text, _ - vr1.Value * 10000, vr2.Value * 10000, _ - xCol) - End Sub - - Private Sub TBUnselect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBUnselect.Click - If Not ValidateLabel(lr1) Then Exit Sub - If Not ValidateLabel(lr2) Then Exit Sub - - Dim xCol() As Integer = {} - For Each xCB As CheckBox In Panel1.Controls - If xCB.Checked Then - ReDim Preserve xCol(UBound(xCol) + 1) - xCol(UBound(xCol)) = xCB.Tag - End If - Next - - Dim xRange As Integer = 1 - If cbx1.Checked Then xRange *= 2 - If cbx2.Checked Then xRange *= 3 - If cbx3.Checked Then xRange *= 5 - If cbx4.Checked Then xRange *= 7 - If cbx5.Checked Then xRange *= 11 - If cbx6.Checked Then xRange *= 13 - - MainWindow.fdrUnselect(xRange, _ - mr1.Value, mr2.Value, _ - lr1.Text, lr2.Text, _ - vr1.Value * 10000, vr2.Value * 10000, _ - xCol) - End Sub - - Private Sub TBDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBDelete.Click - If Not ValidateLabel(lr1) Then Exit Sub - If Not ValidateLabel(lr2) Then Exit Sub - - Dim xCol() As Integer = {} - For Each xCB As CheckBox In Panel1.Controls - If xCB.Checked Then - ReDim Preserve xCol(UBound(xCol) + 1) - xCol(UBound(xCol)) = xCB.Tag - End If - Next - - Dim xRange As Integer = 1 - If cbx1.Checked Then xRange *= 2 - If cbx2.Checked Then xRange *= 3 - If cbx3.Checked Then xRange *= 5 - If cbx4.Checked Then xRange *= 7 - If cbx5.Checked Then xRange *= 11 - If cbx6.Checked Then xRange *= 13 - - MainWindow.fdrDelete(xRange, _ - mr1.Value, mr2.Value, _ - lr1.Text, lr2.Text, _ - vr1.Value * 10000, vr2.Value * 10000, _ - xCol) - End Sub - - Private Sub TBrl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBrl.Click - If Not ValidateLabel(lr1) Then Exit Sub - If Not ValidateLabel(lr2) Then Exit Sub - If Not ValidateLabel(Ttl) Then Exit Sub - - Dim xCol() As Integer = {} - For Each xCB As CheckBox In Panel1.Controls - If xCB.Checked Then - ReDim Preserve xCol(UBound(xCol) + 1) - xCol(UBound(xCol)) = xCB.Tag - End If - Next - - Dim xRange As Integer = 1 - If cbx1.Checked Then xRange *= 2 - If cbx2.Checked Then xRange *= 3 - If cbx3.Checked Then xRange *= 5 - If cbx4.Checked Then xRange *= 7 - If cbx5.Checked Then xRange *= 11 - If cbx6.Checked Then xRange *= 13 - - MainWindow.fdrReplaceL(xRange, _ - mr1.Value, mr2.Value, _ - lr1.Text, lr2.Text, _ - vr1.Value * 10000, vr2.Value * 10000, _ - xCol, Ttl.Text) - End Sub - - Private Sub TBrv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBrv.Click - If Not ValidateLabel(lr1) Then Exit Sub - If Not ValidateLabel(lr2) Then Exit Sub - - Dim xCol() As Integer = {} - For Each xCB As CheckBox In Panel1.Controls - If xCB.Checked Then - ReDim Preserve xCol(UBound(xCol) + 1) - xCol(UBound(xCol)) = xCB.Tag - End If - Next - - Dim xRange As Integer = 1 - If cbx1.Checked Then xRange *= 2 - If cbx2.Checked Then xRange *= 3 - If cbx3.Checked Then xRange *= 5 - If cbx4.Checked Then xRange *= 7 - If cbx5.Checked Then xRange *= 11 - If cbx6.Checked Then xRange *= 13 - - MainWindow.fdrReplaceV(xRange, _ - mr1.Value, mr2.Value, _ - lr1.Text, lr2.Text, _ - vr1.Value * 10000, vr2.Value * 10000, _ - xCol, Ttv.Value * 10000) - End Sub -End Class diff --git a/iBMSC/Dialogs/fLoadFileProgress.vb b/iBMSC/Dialogs/fLoadFileProgress.vb index cf6056de0..100ebfc8f 100644 --- a/iBMSC/Dialogs/fLoadFileProgress.vb +++ b/iBMSC/Dialogs/fLoadFileProgress.vb @@ -1,15 +1,18 @@ -Imports System.Windows.Forms - Public Class fLoadFileProgress - Dim xPath(-1) As String + Dim xPaths(-1) As String Dim CancelPressed As Boolean = False - Dim IsSaved As Boolean = False - Public Sub New(ByVal xxPath() As String, ByVal xIsSaved As Boolean, Optional ByVal TopMost As Boolean = True) + Public Sub New(ByVal xxPath() As String, Optional ByVal TopMost As Boolean = True) InitializeComponent() prog.Maximum = UBound(xxPath) + 1 - xPath = xxPath - IsSaved = xIsSaved + xPaths = xxPath + Me.TopMost = TopMost + End Sub + + Public Sub New(ByVal xxPath As String, Optional ByVal TopMost As Boolean = True) + InitializeComponent() + prog.Maximum = 1 + xPaths = {xxPath} Me.TopMost = TopMost End Sub @@ -21,17 +24,22 @@ Public Class fLoadFileProgress Private Sub fLoadFileProgress_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown On Error GoTo 0 - For xI1 As Integer = 0 To UBound(xPath) - Label1.Text = "Currently loading ( " & (xI1 + 1) & " / " & (UBound(xPath) + 1) & " ): " & xPath(xI1) + For xI1 As Integer = 0 To UBound(xPaths) + Label1.Text = "Currently loading ( " & (xI1 + 1) & " / " & (UBound(xPaths) + 1) & " ): " & xPaths(xI1) Dim aa As Integer = prog.Maximum Dim bb As Integer = prog.Value prog.Value = xI1 Application.DoEvents() If CancelPressed Then Exit For - If xI1 = 0 AndAlso IsSaved Then MainWindow.ReadFile(xPath(xI1)) _ - Else System.Diagnostics.Process.Start(Application.ExecutablePath, """" & xPath(xI1) & """") 'Shell("""" & Application.ExecutablePath & """ """ & xPaths(xI1) & """") ' + MainWindow.AddBMSFiles(xPaths(xI1)) + ' If xI1 = 0 AndAlso IsSaved Then + ' MainWindow.ReadFile(xPath(xI1)) + ' Else + ' System.Diagnostics.Process.Start(Application.ExecutablePath, """" & xPath(xI1) & """") + ' End If Next + MainWindow.ReadFile(xPaths(UBound(xPaths))) Me.Close() End Sub diff --git a/iBMSC/EditorColumns.vb b/iBMSC/EditorColumns.vb index 161d1731f..5bb80d328 100644 --- a/iBMSC/EditorColumns.vb +++ b/iBMSC/EditorColumns.vb @@ -34,34 +34,35 @@ Partial Public Class MainWindow Public Const niS4 As Integer = 26 Public Const niB As Integer = 27 - Public column() As Column = {New Column(0, 50, "Measure", False, True, False, True, 0, 0, &HFF00FFFF, 0, &HFF00FFFF, 0), - New Column(50, 60, "SCROLL", True, True, False, True, 99, 0, &HFFFF0000, 0, &HFFFF0000, 0), - New Column(110, 60, "BPM", True, True, False, True, 3, 0, &HFFFF0000, 0, &HFFFF0000, 0), - New Column(170, 50, "STOP", True, True, False, True, 9, 0, &HFFFF0000, 0, &HFFFF0000, 0), - New Column(220, 5, "", False, False, False, True, 0, 0, 0, 0, 0, 0), - New Column(225, 42, "A1", True, False, True, True, 16, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(267, 30, "A2", True, False, True, True, 11, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), - New Column(297, 42, "A3", True, False, True, True, 12, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(339, 45, "A4", True, False, True, True, 13, &HFFFFC862, &HFF000000, &HFFF7C66A, &HFF000000, &H16F38B0C), - New Column(384, 42, "A5", True, False, True, True, 14, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(426, 30, "A6", True, False, True, True, 15, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), - New Column(456, 42, "A7", True, False, True, True, 18, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(498, 40, "A8", True, False, True, True, 19, &HFF808080, &HFF000000, &HFF909090, &HFF000000, 0), - New Column(498, 5, "", False, False, False, True, 0, 0, 0, 0, 0, 0), - New Column(503, 42, "D1", True, False, True, False, 21, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(503, 30, "D2", True, False, True, False, 22, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), - New Column(503, 42, "D3", True, False, True, False, 23, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(503, 45, "D4", True, False, True, False, 24, &HFFFFC862, &HFF000000, &HFFF7C66A, &HFF000000, &H16F38B0C), - New Column(503, 42, "D5", True, False, True, False, 25, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(503, 30, "D6", True, False, True, False, 28, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), - New Column(503, 42, "D7", True, False, True, False, 29, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), - New Column(503, 40, "D8", True, False, True, False, 26, &HFF808080, &HFF000000, &HFF909090, &HFF000000, 0), - New Column(503, 5, "", False, False, False, False, 0, 0, 0, 0, 0, 0), - New Column(503, 40, "BGA", True, False, False, False, 4, &HFF8CD78A, &HFF000000, &HFF90D38E, &HFF000000, 0), - New Column(503, 40, "LAYER", True, False, False, False, 7, &HFF8CD78A, &HFF000000, &HFF90D38E, &HFF000000, 0), - New Column(503, 40, "POOR", True, False, False, False, 6, &HFF8CD78A, &HFF000000, &HFF90D38E, &HFF000000, 0), - New Column(503, 5, "", False, False, False, False, 0, 0, 0, 0, 0, 0), - New Column(503, 40, "B", True, False, True, True, 1, &HFFE18080, &HFF000000, &HFFDC8585, &HFF000000, 0)} + ' xNoteCol, xisNumeric, xisSound, xisImage, xVisible + Public column() As Column = {New Column(0, 50, "Measure", False, True, False, False, False, 0, 0, &HFF00FFFF, 0, &HFF00FFFF, 0), + New Column(50, 60, "SCROLL", True, True, False, False, False, 99, 0, &HFFFF0000, 0, &HFFFF0000, 0), + New Column(110, 60, "BPM", True, True, False, False, False, 3, 0, &HFFFF0000, 0, &HFFFF0000, 0), + New Column(170, 50, "STOP", True, True, False, False, False, 9, 0, &HFFFF0000, 0, &HFFFF0000, 0), + New Column(220, 5, "", False, False, False, False, False, 0, 0, 0, 0, 0, 0), + New Column(225, 42, "A1", True, False, True, False, True, 16, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(267, 30, "A2", True, False, True, False, True, 11, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), + New Column(297, 42, "A3", True, False, True, False, True, 12, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(339, 45, "A4", True, False, True, False, True, 13, &HFFFFC862, &HFF000000, &HFFF7C66A, &HFF000000, &H16F38B0C), + New Column(384, 42, "A5", True, False, True, False, True, 14, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(426, 30, "A6", True, False, True, False, True, 15, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), + New Column(456, 42, "A7", True, False, True, False, True, 18, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(498, 40, "A8", True, False, True, False, True, 19, &HFF808080, &HFF000000, &HFF909090, &HFF000000, 0), + New Column(498, 5, "", False, False, False, False, False, 0, 0, 0, 0, 0, 0), + New Column(503, 42, "D1", True, False, True, False, True, 21, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(503, 30, "D2", True, False, True, False, True, 22, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), + New Column(503, 42, "D3", True, False, True, False, True, 23, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(503, 45, "D4", True, False, True, False, True, 24, &HFFFFC862, &HFF000000, &HFFF7C66A, &HFF000000, &H16F38B0C), + New Column(503, 42, "D5", True, False, True, False, True, 25, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(503, 30, "D6", True, False, True, False, True, 28, &HFF62B0FF, &HFF000000, &HFF6AB0F7, &HFF000000, &H140033FF), + New Column(503, 42, "D7", True, False, True, False, True, 29, &HFFB0B0B0, &HFF000000, &HFFC0C0C0, &HFF000000, &H14FFFFFF), + New Column(503, 40, "D8", True, False, True, False, True, 26, &HFF808080, &HFF000000, &HFF909090, &HFF000000, 0), + New Column(503, 5, "", False, False, False, False, False, 0, 0, 0, 0, 0, 0), + New Column(503, 40, "BGA", True, False, False, True, False, 4, &HFF8CD78A, &HFF000000, &HFF90D38E, &HFF000000, 0), + New Column(503, 40, "LAYER", True, False, False, True, False, 7, &HFF8CD78A, &HFF000000, &HFF90D38E, &HFF000000, 0), + New Column(503, 40, "POOR", True, False, False, True, False, 6, &HFF8CD78A, &HFF000000, &HFF90D38E, &HFF000000, 0), + New Column(503, 5, "", False, False, False, False, False, 0, 0, 0, 0, 0, 0), + New Column(503, 40, "B", True, False, True, False, True, 1, &HFFE18080, &HFF000000, &HFFDC8585, &HFF000000, 0)} Public Const idflBPM As Integer = 5 @@ -127,6 +128,10 @@ Partial Public Class MainWindow Private Function IsColumnSound(ByVal iCol As Integer) As Boolean If iCol < niB Then Return column(iCol).isSound Else Return column(niB).isSound End Function + Private Function IsColumnImage(ByVal iCol As Integer) As Boolean + If iCol < niB Then Return column(iCol).isImage Else Return column(niB).isImage + End Function + @@ -134,10 +139,10 @@ Partial Public Class MainWindow If iCol < niB Then Return column(iCol) Else Return column(niB) End Function - Private Function BMSEChannelToColumnIndex(ByVal I As String) - Dim Ivalue = Val(I) + Private Function BMSEChannelToColumnIndex(ByVal I As String) As Integer + Dim Ivalue = CInt(I) If Ivalue > 100 Then - Return niB + Ivalue - 101 + Return CInt(niB + Ivalue - 101) ElseIf Ivalue < 100 And Ivalue > 0 Then Return BMSChannelToColumn(Mid(I, 2, 2)) End If diff --git a/iBMSC/EditorPersistent.vb b/iBMSC/EditorPersistent.vb index 4c18501b4..b42572680 100644 --- a/iBMSC/EditorPersistent.vb +++ b/iBMSC/EditorPersistent.vb @@ -4,21 +4,21 @@ Partial Public Class MainWindow Private Sub XMLWriteColumn(ByVal w As XmlTextWriter, ByVal I As Integer) w.WriteStartElement("Column") - w.WriteAttributeString("Index", I) + w.WriteAttributeString("Index", I.ToString()) With column(I) 'w.WriteAttributeString("Left", .Left) - w.WriteAttributeString("Width", .Width) + w.WriteAttributeString("Width", .Width.ToString()) w.WriteAttributeString("Title", .Title) 'w.WriteAttributeString("Text", .Text) 'w.WriteAttributeString("Enabled", .Enabled) 'w.WriteAttributeString("isNumeric", .isNumeric) 'w.WriteAttributeString("Visible", .Visible) 'w.WriteAttributeString("Identifier", .Identifier) - w.WriteAttributeString("NoteColor", .cNote) - w.WriteAttributeString("TextColor", .cText.ToArgb) - w.WriteAttributeString("LongNoteColor", .cLNote) - w.WriteAttributeString("LongTextColor", .cLText.ToArgb) - w.WriteAttributeString("BG", .cBG.ToArgb) + w.WriteAttributeString("NoteColor", .cNote.ToString()) + w.WriteAttributeString("TextColor", .cText.ToArgb.ToString()) + w.WriteAttributeString("LongNoteColor", .cLNote.ToString()) + w.WriteAttributeString("LongTextColor", .cLText.ToArgb.ToString()) + w.WriteAttributeString("BG", .cBG.ToArgb.ToString()) End With w.WriteEndElement() End Sub @@ -26,14 +26,32 @@ Partial Public Class MainWindow Private Sub XMLWriteFont(ByVal w As XmlTextWriter, ByVal local As String, ByVal f As Font) w.WriteStartElement(local) w.WriteAttributeString("Name", f.FontFamily.Name) - w.WriteAttributeString("Size", f.SizeInPoints) - w.WriteAttributeString("Style", f.Style) + w.WriteAttributeString("Size", f.SizeInPoints.ToString()) + w.WriteAttributeString("Style", CInt(f.Style).ToString()) + w.WriteEndElement() + End Sub + + Private Sub XMLWriteKeybindings(ByVal w As XmlTextWriter, ByVal I As Integer) + w.WriteStartElement("Option") + w.WriteAttributeString("OpVar", Keybindings(I).OpVar.ToString()) + w.WriteAttributeString("Name", Keybindings(I).OpName) + ' w.WriteAttributeString("Description", Keybindings(I).Description) + w.WriteAttributeString("Combos", Join(Keybindings(I).Combo, ", ")) + ' w.WriteAttributeString("Category", Keybindings(I).Category.ToString()) + w.WriteEndElement() + End Sub + + Private Sub XMLWriteOpenedFiles(ByVal w As XmlTextWriter, ByVal I As Integer) + w.WriteStartElement("File") + w.WriteAttributeString("Index", I.ToString()) + w.WriteAttributeString("File", BMSFiles(I).Filename) + w.WriteAttributeString("Color", BMSFiles(I).TabColor.ToArgb.ToString()) w.WriteEndElement() End Sub Private Sub XMLWritePlayerArguments(ByVal w As XmlTextWriter, ByVal I As Integer) w.WriteStartElement("Player") - w.WriteAttributeString("Index", I) + w.WriteAttributeString("Index", I.ToString()) w.WriteAttributeString("Path", pArgs(I).Path) w.WriteAttributeString("FromBeginning", pArgs(I).aBegin) w.WriteAttributeString("FromHere", pArgs(I).aHere) @@ -41,6 +59,22 @@ Partial Public Class MainWindow w.WriteEndElement() End Sub + Private Sub XMLWriteToolbarLocation(ByVal w As XmlTextWriter, ByVal TB As ToolStrip) + w.WriteStartElement(TB.Name) + If ToolStripContainer1.TopToolStripPanel.Controls.Contains(TB) Then + w.WriteAttributeString("Location", "Top") + ElseIf ToolStripContainer1.LeftToolStripPanel.Controls.Contains(TB) Then + w.WriteAttributeString("Location", "Left") + ElseIf ToolStripContainer1.BottomToolStripPanel.Controls.Contains(TB) Then + w.WriteAttributeString("Location", "Bottom") + Else + w.WriteAttributeString("Location", "Right") + End If + w.WriteAttributeString("X", TB.Location.X.ToString()) + w.WriteAttributeString("Y", TB.Location.Y.ToString()) + w.WriteEndElement() + End Sub + Private Sub SaveSettings(ByVal Path As String, ByVal ThemeOnly As Boolean) Dim w As New XmlTextWriter(Path, System.Text.Encoding.Unicode) With w @@ -49,139 +83,191 @@ Partial Public Class MainWindow .Indentation = 4 .WriteStartElement("iBMSC") - .WriteAttributeString("Major", My.Application.Info.Version.Major) - .WriteAttributeString("Minor", My.Application.Info.Version.Minor) - .WriteAttributeString("Build", My.Application.Info.Version.Build) - - If ThemeOnly Then GoTo 5000 - - .WriteStartElement("Form") - .WriteAttributeString("WindowState", IIf(isFullScreen, previousWindowState, Me.WindowState)) - .WriteAttributeString("Width", IIf(isFullScreen, previousWindowPosition.Width, Me.Width)) - .WriteAttributeString("Height", IIf(isFullScreen, previousWindowPosition.Height, Me.Height)) - .WriteAttributeString("Top", IIf(isFullScreen, previousWindowPosition.Top, Me.Top)) - .WriteAttributeString("Left", IIf(isFullScreen, previousWindowPosition.Left, Me.Left)) - .WriteEndElement() - - .WriteStartElement("Recent") - .WriteAttributeString("Recent0", Recent(0)) - .WriteAttributeString("Recent1", Recent(1)) - .WriteAttributeString("Recent2", Recent(2)) - .WriteAttributeString("Recent3", Recent(3)) - .WriteAttributeString("Recent4", Recent(4)) - .WriteEndElement() - - .WriteStartElement("Edit") - .WriteAttributeString("NTInput", NTInput) - .WriteAttributeString("Language", DispLang) - '.WriteAttributeString("SortingMethod", SortingMethod) - .WriteAttributeString("ErrorCheck", ErrorCheck) - .WriteAttributeString("AutoFocusMouseEnter", AutoFocusMouseEnter) - .WriteAttributeString("FirstClickDisabled", FirstClickDisabled) - .WriteAttributeString("ShowFileName", ShowFileName) - .WriteAttributeString("MiddleButtonMoveMethod", MiddleButtonMoveMethod) - .WriteAttributeString("AutoSaveInterval", AutoSaveInterval) - .WriteAttributeString("PreviewOnClick", PreviewOnClick) - '.WriteAttributeString("PreviewErrorCheck", PreviewErrorCheck) - .WriteAttributeString("ClickStopPreview", ClickStopPreview) - .WriteEndElement() - - .WriteStartElement("Save") - .WriteAttributeString("TextEncoding", EncodingToString(TextEncoding)) - .WriteAttributeString("BMSGridLimit", BMSGridLimit) - .WriteAttributeString("BeepWhileSaved", BeepWhileSaved) - .WriteAttributeString("BPMx1296", BPMx1296) - .WriteAttributeString("STOPx1296", STOPx1296) - .WriteEndElement() - - .WriteStartElement("WAV") - .WriteAttributeString("WAVMultiSelect", WAVMultiSelect) - .WriteAttributeString("WAVChangeLabel", WAVChangeLabel) - .WriteAttributeString("BeatChangeMode", BeatChangeMode) - .WriteEndElement() - - .WriteStartElement("ShowHide") - .WriteAttributeString("showMenu", mnSMenu.Checked) - .WriteAttributeString("showTB", mnSTB.Checked) - .WriteAttributeString("showOpPanel", mnSOP.Checked) - .WriteAttributeString("showStatus", mnSStatus.Checked) - .WriteAttributeString("showLSplit", mnSLSplitter.Checked) - .WriteAttributeString("showRSplit", mnSRSplitter.Checked) - .WriteEndElement() - - .WriteStartElement("Grid") - .WriteAttributeString("gSnap", gSnap) - .WriteAttributeString("gWheel", gWheel) - .WriteAttributeString("gPgUpDn", gPgUpDn) - .WriteAttributeString("gShow", gShowGrid) - .WriteAttributeString("gShowS", gShowSubGrid) - .WriteAttributeString("gShowBG", gShowBG) - .WriteAttributeString("gShowM", gShowMeasureNumber) - .WriteAttributeString("gShowV", gShowVerticalLine) - .WriteAttributeString("gShowMB", gShowMeasureBar) - .WriteAttributeString("gShowC", gShowC) - .WriteAttributeString("gBPM", gBPM) - .WriteAttributeString("gSTOP", gSTOP) - .WriteAttributeString("gSCROLL", gSCROLL) - .WriteAttributeString("gBLP", gDisplayBGAColumn) - .WriteAttributeString("gP2", CHPlayer.SelectedIndex) - .WriteAttributeString("gCol", CGB.Value) - .WriteAttributeString("gDivide", gDivide) - .WriteAttributeString("gSub", gSub) - .WriteAttributeString("gSlash", gSlash) - .WriteAttributeString("gxHeight", gxHeight) - .WriteAttributeString("gxWidth", gxWidth) - .WriteEndElement() - - .WriteStartElement("WaveForm") - .WriteAttributeString("wLock", wLock) - .WriteAttributeString("wPosition", wPosition) - .WriteAttributeString("wLeft", wLeft) - .WriteAttributeString("wWidth", wWidth) - .WriteAttributeString("wPrecision", wPrecision) - .WriteEndElement() + .WriteAttributeString("Major", My.Application.Info.Version.Major.ToString()) + .WriteAttributeString("Minor", My.Application.Info.Version.Minor.ToString()) + .WriteAttributeString("Build", My.Application.Info.Version.Build.ToString()) + + If Not ThemeOnly Then + + .WriteStartElement("Form") + .WriteAttributeString("WindowState", IIf(isFullScreen, previousWindowState, Me.WindowState).ToString()) + .WriteAttributeString("Width", IIf(isFullScreen, previousWindowPosition.Width, Me.Width).ToString()) + .WriteAttributeString("Height", IIf(isFullScreen, previousWindowPosition.Height, Me.Height).ToString()) + .WriteAttributeString("Top", IIf(isFullScreen, previousWindowPosition.Top, Me.Top).ToString()) + .WriteAttributeString("Left", IIf(isFullScreen, previousWindowPosition.Left, Me.Left).ToString()) + .WriteAttributeString(POptionsScroll.Name, POptionsScroll.Width.ToString()) + For Each CB In {POHeaderSwitch, POGridSwitch, POWaveFormSwitch, POWAVSwitch, POBMPSwitch, POBeatSwitch, POExpansionSwitch, POHeaderExpander, POGridExpander, POWaveFormExpander, POWAVExpander, POBMPExpander, POBeatExpander} + .WriteAttributeString(CB.Name, CB.Checked.ToString()) + Next + For Each P In {POHeaderInner, POGridInner, POWaveFormInner, POWAVInner, POBMPInner, POBeatInner, POExpansionInner} + .WriteAttributeString(P.Name, P.Height.ToString()) + Next - .WriteStartElement("Player") - .WriteAttributeString("Count", pArgs.Length) - .WriteAttributeString("CurrentPlayer", CurrentPlayer) - For i As Integer = 0 To UBound(pArgs) - XMLWritePlayerArguments(w, i) : Next - .WriteEndElement() + For Each TB As ToolStrip In {TBMain, TBTab} + XMLWriteToolbarLocation(w, TB) + Next + .WriteEndElement() + + .WriteStartElement("Recent") + .WriteAttributeString("Recent0", Recent(0)) + .WriteAttributeString("Recent1", Recent(1)) + .WriteAttributeString("Recent2", Recent(2)) + .WriteAttributeString("Recent3", Recent(3)) + .WriteAttributeString("Recent4", Recent(4)) + .WriteEndElement() + + .WriteStartElement("OpenedFiles") + .WriteAttributeString("Count", UBound(BMSFiles).ToString()) + .WriteAttributeString("BMSFileIndex", BMSFileIndex.ToString()) + For i = 0 To UBound(BMSFiles) + XMLWriteOpenedFiles(w, i) : Next + .WriteEndElement() + + + .WriteStartElement("Edit") + .WriteAttributeString("NTInput", NTInput.ToString()) + .WriteAttributeString("Language", DispLang) + '.WriteAttributeString("SortingMethod", SortingMethod) + .WriteAttributeString("ErrorCheck", ErrorCheck.ToString()) + .WriteAttributeString("AutoFocusMouseEnter", AutoFocusMouseEnter.ToString()) + .WriteAttributeString("FirstClickDisabled", FirstClickDisabled.ToString()) + .WriteAttributeString("ShowFileName", ShowFileName.ToString()) + .WriteAttributeString("ShowWaveform", ShowWaveform.ToString()) + .WriteAttributeString("MiddleButtonMoveMethod", MiddleButtonMoveMethod.ToString()) + .WriteAttributeString("AutoSaveInterval", AutoSaveInterval.ToString()) + .WriteAttributeString("PreviewOnClick", PreviewOnClick.ToString()) + '.WriteAttributeString("PreviewErrorCheck", PreviewErrorCheck) + .WriteAttributeString("ClickStopPreview", ClickStopPreview.ToString()) + .WriteAttributeString("JackBPM", ErrorJackBPM.ToString()) + .WriteAttributeString("JackTH", ErrorJackTH.ToString()) + .WriteAttributeString("gLNGap", gLNGap.ToString()) + .WriteAttributeString("TempFileName", TempFileName.ToString()) + .WriteAttributeString("COverridesSaveOption", COverridesSaveOption.ToString()) + .WriteAttributeString("TemplateSnapToVPosition", TemplateSnapToVPosition.ToString()) + .WriteAttributeString("PastePatternToVPosition", PastePatternToVPosition.ToString()) + .WriteEndElement() + + .WriteStartElement("Save") + .WriteAttributeString("TextEncoding", EncodingToString(TextEncoding)) + .WriteAttributeString("BMSGridLimit", BMSGridLimit.ToString()) + .WriteAttributeString("BeepWhileSaved", BeepWhileSaved.ToString()) + .WriteAttributeString("PreloadBMSStruct", PreloadBMSStruct.ToString()) + .WriteAttributeString("BPMx1296", BPMx1296.ToString()) + .WriteAttributeString("STOPx1296", STOPx1296.ToString()) + .WriteAttributeString("AudioLine", AudioLine.ToString()) + .WriteEndElement() + + .WriteStartElement("WAV") + .WriteAttributeString("WAVMultiSelect", WAVMultiSelect.ToString()) + .WriteAttributeString("WAVChangeLabel", WAVChangeLabel.ToString()) + .WriteAttributeString("BeatChangeMode", BeatChangeMode.ToString()) + .WriteEndElement() + + .WriteStartElement("BMP") + .WriteAttributeString("BMPMultiSelect", BMPMultiSelect.ToString()) + .WriteAttributeString("BMPChangeLabel", BMPChangeLabel.ToString()) + .WriteEndElement() + + .WriteStartElement("ShowHide") + .WriteAttributeString("showMenu", mnSMenu.Checked.ToString()) + .WriteAttributeString("showTB", mnSTB.Checked.ToString()) + .WriteAttributeString("showOpPanel", mnSOP.Checked.ToString()) + .WriteAttributeString("showStatus", mnSStatus.Checked.ToString()) + .WriteAttributeString("showLSplit", mnSLSplitter.Checked.ToString()) + .WriteAttributeString("showRSplit", mnSRSplitter.Checked.ToString()) + .WriteEndElement() + + .WriteStartElement("Grid") + .WriteAttributeString("gSnap", gSnap.ToString()) + .WriteAttributeString("xmlDisableVertical", DisableVerticalMove.ToString()) + .WriteAttributeString("gWheel", gWheel.ToString()) + .WriteAttributeString("gPgUpDn", gPgUpDn.ToString()) + .WriteAttributeString("gShow", gShowGrid.ToString()) + .WriteAttributeString("gShowS", gShowSubGrid.ToString()) + .WriteAttributeString("gShowBG", gShowBG.ToString()) + .WriteAttributeString("gShowM", gShowMeasureNumber.ToString()) + .WriteAttributeString("gShowV", gShowVerticalLine.ToString()) + .WriteAttributeString("gShowMB", gShowMeasureBar.ToString()) + .WriteAttributeString("gShowC", gShowC.ToString()) + .WriteAttributeString("gBPM", gBPM.ToString()) + .WriteAttributeString("gSTOP", gSTOP.ToString()) + .WriteAttributeString("gSCROLL", gSCROLL.ToString()) + .WriteAttributeString("gBLP", gDisplayBGAColumn.ToString()) + .WriteAttributeString("gP2", CHPlayer.SelectedIndex.ToString()) + .WriteAttributeString("gCol", CGB.Value.ToString()) + .WriteAttributeString("gDivide", gDivide.ToString()) + .WriteAttributeString("gSub", gSub.ToString()) + .WriteAttributeString("gSlash", gSlash.ToString()) + .WriteAttributeString("gxHeight", gxHeight.ToString()) + .WriteAttributeString("gxWidth", gxWidth.ToString()) + .WriteEndElement() + + .WriteStartElement("WaveForm") + .WriteAttributeString("wLock", wLock.ToString()) + .WriteAttributeString("wPosition", wPosition.ToString()) + .WriteAttributeString("wLeft", wLeft.ToString()) + .WriteAttributeString("wWidth", wWidth.ToString()) + .WriteAttributeString("wPrecision", wPrecision.ToString()) + .WriteEndElement() + + .WriteStartElement("Player") + .WriteAttributeString("Count", pArgs.Length.ToString()) + .WriteAttributeString("CurrentPlayer", CurrentPlayer.ToString()) + For i As Integer = 0 To UBound(pArgs) + XMLWritePlayerArguments(w, i) : Next + .WriteEndElement() + + .WriteStartElement("Total") + .WriteAttributeString("Option", TotalOption.ToString()) + .WriteAttributeString("Multiplier", TotalMultiplier.ToString()) + .WriteAttributeString("GlobalMultiplier", TotalGlobalMultiplier.ToString()) + .WriteAttributeString("Decimal", TotalDecimal.ToString()) + .WriteAttributeString("DisplayValue", TotalDisplayValue.ToString()) + .WriteAttributeString("DisplayText", TotalDisplayText.ToString()) + .WriteAttributeString("Autofill", TotalAutofill.ToString()) + .WriteEndElement() + + .WriteStartElement("KeyBindings") + .WriteAttributeString("Count", UBound(Keybindings).ToString()) + For i As Integer = 0 To UBound(Keybindings) + XMLWriteKeybindings(w, i) : Next + .WriteEndElement() -5000: .WriteStartElement("Columns") + End If + .WriteStartElement("Columns") '.WriteAttributeString("Count", col.Length) For i As Integer = 0 To UBound(column) XMLWriteColumn(w, i) : Next .WriteEndElement() .WriteStartElement("VisualSettings") - XMLWriteValue(w, "ColumnTitle", vo.ColumnTitle.Color.ToArgb) + XMLWriteValue(w, "ColumnTitle", vo.ColumnTitle.Color.ToArgb.ToString()) XMLWriteFont(w, "ColumnTitleFont", vo.ColumnTitleFont) - XMLWriteValue(w, "Bg", vo.Bg.Color.ToArgb) - XMLWriteValue(w, "Grid", vo.pGrid.Color.ToArgb) - XMLWriteValue(w, "Sub", vo.pSub.Color.ToArgb) - XMLWriteValue(w, "VLine", vo.pVLine.Color.ToArgb) - XMLWriteValue(w, "MLine", vo.pMLine.Color.ToArgb) - XMLWriteValue(w, "BGMWav", vo.pBGMWav.Color.ToArgb) - XMLWriteValue(w, "SelBox", vo.SelBox.Color.ToArgb) - XMLWriteValue(w, "TSCursor", vo.PECursor.Color.ToArgb) - XMLWriteValue(w, "TSHalf", vo.PEHalf.Color.ToArgb) - XMLWriteValue(w, "TSDeltaMouseOver", vo.PEDeltaMouseOver) - XMLWriteValue(w, "TSMouseOver", vo.PEMouseOver.Color.ToArgb) - XMLWriteValue(w, "TSSel", vo.PESel.Color.ToArgb) - XMLWriteValue(w, "TSBPM", vo.PEBPM.Color.ToArgb) + XMLWriteValue(w, "Bg", vo.Bg.Color.ToArgb.ToString()) + XMLWriteValue(w, "Grid", vo.pGrid.Color.ToArgb.ToString()) + XMLWriteValue(w, "Sub", vo.pSub.Color.ToArgb.ToString()) + XMLWriteValue(w, "VLine", vo.pVLine.Color.ToArgb.ToString()) + XMLWriteValue(w, "MLine", vo.pMLine.Color.ToArgb.ToString()) + XMLWriteValue(w, "BGMWav", vo.pBGMWav.Color.ToArgb.ToString()) + XMLWriteValue(w, "SelBox", vo.SelBox.Color.ToArgb.ToString()) + XMLWriteValue(w, "TSCursor", vo.PECursor.Color.ToArgb.ToString()) + XMLWriteValue(w, "TSHalf", vo.PEHalf.Color.ToArgb.ToString()) + XMLWriteValue(w, "TSDeltaMouseOver", vo.PEDeltaMouseOver.ToString()) + XMLWriteValue(w, "TSMouseOver", vo.PEMouseOver.Color.ToArgb.ToString()) + XMLWriteValue(w, "TSSel", vo.PESel.Color.ToArgb.ToString()) + XMLWriteValue(w, "TSBPM", vo.PEBPM.Color.ToArgb.ToString()) XMLWriteFont(w, "TSBPMFont", vo.PEBPMFont) - XMLWriteValue(w, "MiddleDeltaRelease", vo.MiddleDeltaRelease) - XMLWriteValue(w, "kHeight", vo.kHeight) + XMLWriteValue(w, "MiddleDeltaRelease", vo.MiddleDeltaRelease.ToString()) + XMLWriteValue(w, "kHeight", vo.kHeight.ToString()) XMLWriteFont(w, "kFont", vo.kFont) XMLWriteFont(w, "kMFont", vo.kMFont) - XMLWriteValue(w, "kLabelVShift", vo.kLabelVShift) - XMLWriteValue(w, "kLabelHShift", vo.kLabelHShift) - XMLWriteValue(w, "kLabelHShiftL", vo.kLabelHShiftL) - XMLWriteValue(w, "kMouseOver", vo.kMouseOver.Color.ToArgb) - XMLWriteValue(w, "kMouseOverE", vo.kMouseOverE.Color.ToArgb) - XMLWriteValue(w, "kSelected", vo.kSelected.Color.ToArgb) - XMLWriteValue(w, "kOpacity", vo.kOpacity) + XMLWriteValue(w, "kLabelVShift", vo.kLabelVShift.ToString()) + XMLWriteValue(w, "kLabelHShift", vo.kLabelHShift.ToString()) + XMLWriteValue(w, "kLabelHShiftL", vo.kLabelHShiftL.ToString()) + XMLWriteValue(w, "kMouseOver", vo.kMouseOver.Color.ToArgb.ToString()) + XMLWriteValue(w, "kMouseOverE", vo.kMouseOverE.Color.ToArgb.ToString()) + XMLWriteValue(w, "kSelected", vo.kSelected.Color.ToArgb.ToString()) + XMLWriteValue(w, "kOpacity", vo.kOpacity.ToString()) .WriteEndElement() .WriteEndElement() @@ -190,6 +276,88 @@ Partial Public Class MainWindow End With End Sub + Private Sub WriteColorOverride(ByVal Path As String, ByVal Warning As Boolean) + Dim F As String = ColorOverridePath(Path) + If My.Computer.FileSystem.FileExists(F) AndAlso Warning Then + Dim xDiag = MsgBox(Strings.fopVisualOverride.OverwriteExistingSettings & vbCrLf & F, MsgBoxStyle.YesNo) + If xDiag = DialogResult.No Then Exit Sub + End If + + Try + Dim w As New XmlTextWriter(F, System.Text.Encoding.Unicode) + With w + .WriteStartDocument() + .Formatting = Formatting.Indented + .Indentation = 4 + + .WriteStartElement("ColorOverride") + .WriteAttributeString("Count", UBound(COverrides).ToString()) + + For i = 0 To UBound(COverrides) + .WriteStartElement("Color") + .WriteAttributeString("Index", i.ToString()) + .WriteAttributeString("Name", COverrides(i).Name.ToString()) + .WriteAttributeString("Enabled", COverrides(i).Enabled.ToString()) + .WriteAttributeString("ColorOption", COverrides(i).ColorOption.ToString()) + .WriteAttributeString("RangeL", COverrides(i).RangeL.ToString()) + .WriteAttributeString("RangeU", COverrides(i).RangeU.ToString()) + .WriteAttributeString("NoteColor", COverrides(i).NoteColor.ToString()) + .WriteAttributeString("NoteColorU", COverrides(i).NoteColorU.ToString()) + .WriteEndElement() + Next + + .WriteEndElement() + .WriteEndDocument() + .Close() + End With + Catch ex As Exception + MsgBox(Strings.Messages.SaveWarning & ex.ToString()) + End Try + End Sub + + Private Function ColorOverridePath(ByVal Path As String) As String + Select Case COverridesSaveOption + Case 0 ' Editor + If Not System.IO.Directory.Exists(My.Application.Info.DirectoryPath & "\Colors") Then My.Computer.FileSystem.CreateDirectory("Colors") + Return "Colors\Untitled.bmsc.xml" + Case 1 ' Chart + If Not System.IO.Directory.Exists(My.Application.Info.DirectoryPath & "\Colors") Then My.Computer.FileSystem.CreateDirectory("Colors") + Return "Colors\" + GetFileName(Path) + ".xml" + Case 2 ' Song + Return ExcludeFileName(Path) & "\_Colors.xml" + Case Else + Return "" + End Select + End Function + + Private Sub XMLLoadColumn(ByVal n As XmlElement) + Dim i As Integer = -1 + XMLLoadAttribute(n.GetAttribute("Index"), i) + If i < 0 Or i > UBound(column) Then Exit Sub + + With column(i) + 'XMLLoadAttribute(n.GetAttribute("Left"), .Left) + XMLLoadAttribute(n.GetAttribute("Width"), .Width) + XMLLoadAttribute(n.GetAttribute("Title"), .Title) + 'XMLLoadAttribute(n.GetAttribute("Text"), .Text) + Dim Display As Boolean + Dim attr = n.GetAttribute("Display") + XMLLoadAttribute(attr, Display) + .isVisible = CBool(IIf(String.IsNullOrEmpty(attr), .isVisible, Display)) + + 'XMLLoadAttribute(n.GetAttribute("isNumeric"), .isNumeric) + 'XMLLoadAttribute(n.GetAttribute("Visible"), .Visible) + 'XMLLoadAttribute(n.GetAttribute("Identifier"), .Identifier) + XMLLoadAttribute(n.GetAttribute("NoteColor"), .cNote) + .setNoteColor(.cNote) + XMLLoadAttribute(n.GetAttribute("TextColor"), .cText) + XMLLoadAttribute(n.GetAttribute("LongNoteColor"), .cLNote) + .setLNoteColor(.cLNote) + XMLLoadAttribute(n.GetAttribute("LongTextColor"), .cLText) + XMLLoadAttribute(n.GetAttribute("BG"), .cBG) + End With + End Sub + Private Sub XMLLoadElementValue(ByVal n As XmlElement, ByRef v As Integer) If n Is Nothing Then Exit Sub XMLLoadAttribute(n.GetAttribute("Value"), v) @@ -207,7 +375,7 @@ Partial Public Class MainWindow If n Is Nothing Then Exit Sub Dim xName As String = Me.Font.FontFamily.Name - Dim xSize As Integer = Me.Font.Size + Dim xSize As Integer = CInt(Me.Font.Size) Dim xStyle As Integer = Me.Font.Style XMLLoadAttribute(n.GetAttribute("Name"), xName) XMLLoadAttribute(n.GetAttribute("Size"), xSize) @@ -215,6 +383,101 @@ Partial Public Class MainWindow v = New Font(xName, xSize, CType(xStyle, System.Drawing.FontStyle)) End Sub + Private Sub XMLLoadKeybinding(ByVal n As XmlElement) + For xI = 0 To UBound(Keybindings) + If n.GetAttribute("OpVar") <> "" Then + If Keybindings(xI).OpVar = CInt(n.GetAttribute("OpVar")) Then + ' XMLLoadAttribute(n.GetAttribute("Name"), Keybindings(xI).OpName) + ' XMLLoadAttribute(n.GetAttribute("Description"), Keybindings(xI).Description) + Keybindings(xI).Combo = Split(n.GetAttribute("Combos"), ", ") + ' XMLLoadAttribute(n.GetAttribute("Category"), Keybindings(xI).Category) + + RenameShortcut(Keybindings(xI)) + Exit Sub + End If + Else ' Keybinding migration from 3.5.5.10 + Dim OpVar As Integer + Select Case n.GetAttribute("Name") + Case "Move to A2" : OpVar = 0 + Case "Move to A3" : OpVar = 1 + Case "Move to A4" : OpVar = 2 + Case "Move to A5" : OpVar = 3 + Case "Move to A6" : OpVar = 4 + Case "Move to A7" : OpVar = 5 + Case "Move to A8" : OpVar = 6 + Case "Move to A1" : OpVar = 7 + Case "Move to D1" : OpVar = 10 + Case "Move to D2" : OpVar = 11 + Case "Move to D3" : OpVar = 12 + Case "Move to D4" : OpVar = 13 + Case "Move to D5" : OpVar = 14 + Case "Move to D6" : OpVar = 15 + Case "Move to D7" : OpVar = 16 + Case "Move to D8" : OpVar = 17 + Case "Move to P1" : OpVar = 20 + Case "Move to P2" : OpVar = 21 + Case "Move to P3" : OpVar = 22 + Case "Move to P4" : OpVar = 23 + Case "Move to P5" : OpVar = 24 + Case "Move to P6" : OpVar = 25 + Case "Move to P7" : OpVar = 26 + Case "Move to P8" : OpVar = 27 + Case "Move to P9" : OpVar = 28 + Case "Move to BGM" : OpVar = 100 + Case "Move to Template Position" : OpVar = 101 + Case "Disable vertical moves" : OpVar = 102 + Case "Snap to grid" : OpVar = 103 + Case "→ Long Note" : OpVar = 104 + Case "→ Short Note" : OpVar = 105 + Case "Long Note ↔ Short Note" : OpVar = 106 + Case "Auto Long Note" : OpVar = 107 + Case "Auto Long Note" : OpVar = 108 + Case "Check Technical Error" : OpVar = 109 + Case "#RANDOM Editor" : OpVar = 110 + Case "Undo" : OpVar = 111 + Case "Redo" : OpVar = 112 + Case "Cut" : OpVar = 113 + Case "Copy" : OpVar = 114 + Case "Paste" : OpVar = 115 + Case "Paste Pattern" : OpVar = 116 + Case "Select All" : OpVar = 117 + Case "Select all with hovered note label" : OpVar = 118 + Case "Move Note Up" : OpVar = 200 + Case "Move Note Down" : OpVar = 201 + Case "Move Note Left" : OpVar = 202 + Case "Move Note Right" : OpVar = 203 + Case "Insert Space/Define Measure" : OpVar = 204 + Case "Delete" : OpVar = 205 + Case "Home" : OpVar = 206 + Case "End" : OpVar = 207 + Case "PageUp" : OpVar = 208 + Case "PageDown" : OpVar = 209 + Case "Next" : OpVar = 210 + Case "TabBetweenFiles" : OpVar = 211 + Case "TabBetweenNotes" : OpVar = 212 + Case "Decrease Division" : OpVar = 213 + Case "Increase Division" : OpVar = 214 + Case "Set CGDivision" : OpVar = 215 + Case "Decrease CGHeight" : OpVar = 216 + Case "Increase CGHeight" : OpVar = 217 + Case "DecreaseCurrentWav" : OpVar = 218 + Case "IncreaseCurrentWav" : OpVar = 219 + Case "TBPreviewHighlighted_Click" : OpVar = 220 + End Select + If Keybindings(xI).OpVar = OpVar Then Keybindings(xI).Combo = Split(n.GetAttribute("Combos"), ", ") + End If + Next + End Sub + + Private Sub XMLLoadOpenedFiles(ByVal n As XmlElement) + Dim i As Integer + XMLLoadAttribute(n.GetAttribute("Index"), i) + XMLLoadAttribute(n.GetAttribute("File"), BMSFiles(i).Filename) + XMLLoadAttribute(n.GetAttribute("Color"), BMSFiles(i).TabColor) + BMSFiles(i).TSB = NewBMSTab(BMSFiles(i).Filename) + ColorTSBChange(BMSFiles(i).TSB, BMSFiles(i).TabColor) + End Sub + Private Sub XMLLoadPlayer(ByVal n As XmlElement) Dim i As Integer = -1 XMLLoadAttribute(n.GetAttribute("Index"), i) @@ -226,32 +489,21 @@ Partial Public Class MainWindow XMLLoadAttribute(n.GetAttribute("Stop"), pArgs(i).aStop) End Sub - Private Sub XMLLoadColumn(ByVal n As XmlElement) - Dim i As Integer = -1 - XMLLoadAttribute(n.GetAttribute("Index"), i) - If i < 0 Or i > UBound(column) Then Exit Sub - - With column(i) - 'XMLLoadAttribute(n.GetAttribute("Left"), .Left) - XMLLoadAttribute(n.GetAttribute("Width"), .Width) - XMLLoadAttribute(n.GetAttribute("Title"), .Title) - 'XMLLoadAttribute(n.GetAttribute("Text"), .Text) - Dim Display As Boolean - Dim attr = n.GetAttribute("Display") - XMLLoadAttribute(attr, Display) - .isVisible = IIf(String.IsNullOrEmpty(attr), .isVisible, Display) + Private Sub XMLLoadToolbarLocation(ByVal n As XmlElement, ByVal TB As ToolStrip) + If n Is Nothing Then Exit Sub - 'XMLLoadAttribute(n.GetAttribute("isNumeric"), .isNumeric) - 'XMLLoadAttribute(n.GetAttribute("Visible"), .Visible) - 'XMLLoadAttribute(n.GetAttribute("Identifier"), .Identifier) - XMLLoadAttribute(n.GetAttribute("NoteColor"), .cNote) - .setNoteColor(.cNote) - XMLLoadAttribute(n.GetAttribute("TextColor"), .cText) - XMLLoadAttribute(n.GetAttribute("LongNoteColor"), .cLNote) - .setLNoteColor(.cLNote) - XMLLoadAttribute(n.GetAttribute("LongTextColor"), .cLText) - XMLLoadAttribute(n.GetAttribute("BG"), .cBG) - End With + XMLLoadAttribute(n.GetAttribute("X"), TB.Location.X) + XMLLoadAttribute(n.GetAttribute("Y"), TB.Location.Y) + Select Case n.GetAttribute("Location") + Case "Top" + ToolStripContainer1.TopToolStripPanel.Controls.Add(TB) + Case "Left" + ToolStripContainer1.LeftToolStripPanel.Controls.Add(TB) + Case "Bottom" + ToolStripContainer1.BottomToolStripPanel.Controls.Add(TB) + Case "Right" + ToolStripContainer1.RightToolStripPanel.Controls.Add(TB) + End Select End Sub Private Sub LoadSettings(ByVal Path As String) @@ -272,255 +524,333 @@ Partial Public Class MainWindow Doc.Load(FileStream) Dim Root As XmlElement = Doc.Item("iBMSC") - If Root Is Nothing Then GoTo EndOfSub + If Root IsNot Nothing Then + + 'version + Dim Major As Integer = My.Application.Info.Version.Major + Dim Minor As Integer = My.Application.Info.Version.Minor + Dim Build As Integer = My.Application.Info.Version.Build + Try + Dim xMajor As Integer = CInt(Root.Attributes("Major").Value) + Dim xMinor As Integer = CInt(Root.Attributes("Minor").Value) + Dim xBuild As Integer = CInt(Root.Attributes("Build").Value) + Major = xMajor + Minor = xMinor + Build = xBuild + Catch ex As Exception + End Try + + 'form + Dim eForm As XmlElement = Root.Item("Form") + If eForm IsNot Nothing Then + With eForm + Select Case .GetAttribute("WindowState") + Case FormWindowState.Normal.ToString() + Me.WindowState = FormWindowState.Normal + XMLLoadAttribute(.GetAttribute("Width"), Me.Width) + XMLLoadAttribute(.GetAttribute("Height"), Me.Height) + XMLLoadAttribute(.GetAttribute("Top"), Me.Top) + XMLLoadAttribute(.GetAttribute("Left"), Me.Left) + Case FormWindowState.Maximized.ToString() + Me.WindowState = FormWindowState.Maximized + End Select + + XMLLoadAttribute(.GetAttribute(POptionsScroll.Name), POptionsScroll.Width) + For Each CB In {POHeaderSwitch, POGridSwitch, POWaveFormSwitch, POWAVSwitch, POBMPSwitch, POBeatSwitch, POExpansionSwitch, POHeaderExpander, POGridExpander, POWaveFormExpander, POWAVExpander, POBMPExpander, POBeatExpander} + XMLLoadAttribute(.GetAttribute(CB.Name), CB.Checked) + Next + For Each P In {POHeaderInner, POGridInner, POWaveFormInner, POWAVInner, POBMPInner, POBeatInner, POExpansionInner} + XMLLoadAttribute(.GetAttribute(P.Name), P.Height) + Next + + For Each TB In {TBTab, TBMain} + XMLLoadToolbarLocation(.Item(TB.Name), TB) + Next + End With + End If - 'version - Dim Major As Integer = My.Application.Info.Version.Major - Dim Minor As Integer = My.Application.Info.Version.Minor - Dim Build As Integer = My.Application.Info.Version.Build - Try - Dim xMajor As Integer = Val(Root.Attributes("Major").Value) - Dim xMinor As Integer = Val(Root.Attributes("Minor").Value) - Dim xBuild As Integer = Val(Root.Attributes("Build").Value) - Major = xMajor - Minor = xMinor - Build = xBuild - Catch ex As Exception - End Try + 'recent + Dim eRecent As XmlElement = Root.Item("Recent") + If eRecent IsNot Nothing Then + With eRecent + XMLLoadAttribute(.GetAttribute("Recent0"), Recent(0)) : SetRecent(0, Recent(0)) + XMLLoadAttribute(.GetAttribute("Recent1"), Recent(1)) : SetRecent(1, Recent(1)) + XMLLoadAttribute(.GetAttribute("Recent2"), Recent(2)) : SetRecent(2, Recent(2)) + XMLLoadAttribute(.GetAttribute("Recent3"), Recent(3)) : SetRecent(3, Recent(3)) + XMLLoadAttribute(.GetAttribute("Recent4"), Recent(4)) : SetRecent(4, Recent(4)) + End With + End If - 'form - Dim eForm As XmlElement = Root.Item("Form") - If eForm IsNot Nothing Then - With eForm - Select Case Val(.GetAttribute("WindowState")) - Case FormWindowState.Normal - Me.WindowState = FormWindowState.Normal - XMLLoadAttribute(.GetAttribute("Width"), Me.Width) - XMLLoadAttribute(.GetAttribute("Height"), Me.Height) - XMLLoadAttribute(.GetAttribute("Top"), Me.Top) - XMLLoadAttribute(.GetAttribute("Left"), Me.Left) - Case FormWindowState.Maximized - Me.WindowState = FormWindowState.Maximized - End Select - End With - End If + Dim eOpenedFiles As XmlElement = Root.Item("OpenedFiles") + If eOpenedFiles IsNot Nothing Then + With eOpenedFiles + Dim iL As Integer + XMLLoadAttribute(.GetAttribute("Count"), iL) + XMLLoadAttribute(.GetAttribute("BMSFileIndex"), BMSFileIndex) + ReDim Preserve BMSFiles(iL) + + For Each eeFile As XmlElement In .ChildNodes + XMLLoadOpenedFiles(eeFile) + Next + End With + End If - 'recent - Dim eRecent As XmlElement = Root.Item("Recent") - If eRecent IsNot Nothing Then - With eRecent - XMLLoadAttribute(.GetAttribute("Recent0"), Recent(0)) : SetRecent(0, Recent(0)) - XMLLoadAttribute(.GetAttribute("Recent1"), Recent(1)) : SetRecent(1, Recent(1)) - XMLLoadAttribute(.GetAttribute("Recent2"), Recent(2)) : SetRecent(2, Recent(2)) - XMLLoadAttribute(.GetAttribute("Recent3"), Recent(3)) : SetRecent(3, Recent(3)) - XMLLoadAttribute(.GetAttribute("Recent4"), Recent(4)) : SetRecent(4, Recent(4)) - End With - End If + 'edit + Dim eEdit As XmlElement = Root.Item("Edit") + If eEdit IsNot Nothing Then + With eEdit + XMLLoadAttribute(.GetAttribute("NTInput"), NTInput) + TBNTInput.Checked = NTInput + TBNTInput_Click(TBNTInput, New EventArgs) - 'edit - Dim eEdit As XmlElement = Root.Item("Edit") - If eEdit IsNot Nothing Then - With eEdit - XMLLoadAttribute(.GetAttribute("NTInput"), NTInput) - TBNTInput.Checked = NTInput - mnNTInput.Checked = NTInput - POBLong.Enabled = Not NTInput - POBLongShort.Enabled = Not NTInput + LoadLocale(My.Application.Info.DirectoryPath & "\" & .GetAttribute("Language")) - LoadLocale(My.Application.Info.DirectoryPath & "\" & .GetAttribute("Language")) + 'XMLLoadAttribute(.GetAttribute("SortingMethod"), SortingMethod) - 'XMLLoadAttribute(.GetAttribute("SortingMethod"), SortingMethod) + XMLLoadAttribute(.GetAttribute("ErrorCheck"), ErrorCheck) + TBErrorCheck.Checked = ErrorCheck + TBErrorCheck_Click(TBErrorCheck, New System.EventArgs) - XMLLoadAttribute(.GetAttribute("ErrorCheck"), ErrorCheck) - TBErrorCheck.Checked = ErrorCheck - TBErrorCheck_Click(TBErrorCheck, New System.EventArgs) + XMLLoadAttribute(.GetAttribute("ShowFileName"), ShowFileName) + TBShowFileName.Checked = ShowFileName + TBShowFileName_Click(TBShowFileName, New System.EventArgs) - XMLLoadAttribute(.GetAttribute("ShowFileName"), ShowFileName) - TBShowFileName.Checked = ShowFileName - TBShowFileName_Click(TBShowFileName, New System.EventArgs) + XMLLoadAttribute(.GetAttribute("ShowWaveform"), ShowWaveform) + TBShowWaveform.Checked = ShowWaveform + TBShowWaveform_Click(TBShowWaveform, New System.EventArgs) - XMLLoadAttribute(.GetAttribute("MiddleButtonMoveMethod"), MiddleButtonMoveMethod) - XMLLoadAttribute(.GetAttribute("AutoFocusMouseEnter"), AutoFocusMouseEnter) - XMLLoadAttribute(.GetAttribute("FirstClickDisabled"), FirstClickDisabled) + XMLLoadAttribute(.GetAttribute("MiddleButtonMoveMethod"), MiddleButtonMoveMethod) + XMLLoadAttribute(.GetAttribute("AutoFocusMouseEnter"), AutoFocusMouseEnter) + XMLLoadAttribute(.GetAttribute("FirstClickDisabled"), FirstClickDisabled) - XMLLoadAttribute(.GetAttribute("AutoSaveInterval"), AutoSaveInterval) - If AutoSaveInterval Then AutoSaveTimer.Interval = AutoSaveInterval Else AutoSaveTimer.Enabled = False + XMLLoadAttribute(.GetAttribute("AutoSaveInterval"), AutoSaveInterval) + If AutoSaveInterval > 0 Then AutoSaveTimer.Interval = AutoSaveInterval Else AutoSaveTimer.Enabled = False - XMLLoadAttribute(.GetAttribute("PreviewOnClick"), PreviewOnClick) - TBPreviewOnClick.Checked = PreviewOnClick - TBPreviewOnClick_Click(TBPreviewOnClick, New System.EventArgs) + XMLLoadAttribute(.GetAttribute("PreviewOnClick"), PreviewOnClick) + TBPreviewOnClick.Checked = PreviewOnClick + TBPreviewOnClick_Click(TBPreviewOnClick, New System.EventArgs) - XMLLoadAttribute(.GetAttribute("ClickStopPreview"), ClickStopPreview) - End With - End If + XMLLoadAttribute(.GetAttribute("ClickStopPreview"), ClickStopPreview) - 'save - Dim eSave As XmlElement = Root.Item("Save") - If eSave IsNot Nothing Then - With eSave - Select Case UCase(.GetAttribute("TextEncoding")) - Case "SYSTEM ANSI" : TextEncoding = System.Text.Encoding.Default - Case "LITTLE ENDIAN UTF16" : TextEncoding = System.Text.Encoding.Unicode - Case "ASCII" : TextEncoding = System.Text.Encoding.ASCII - Case "BIG ENDIAN UTF16" : TextEncoding = System.Text.Encoding.BigEndianUnicode - Case "LITTLE ENDIAN UTF32" : TextEncoding = System.Text.Encoding.UTF32 - Case "UTF7" : TextEncoding = System.Text.Encoding.UTF7 - Case "UTF8" : TextEncoding = System.Text.Encoding.UTF8 - Case "SJIS" : TextEncoding = System.Text.Encoding.GetEncoding(932) - Case "EUC-KR" : TextEncoding = System.Text.Encoding.GetEncoding(51949) - ' leave current encoding - ' Case Else - End Select + XMLLoadAttribute(.GetAttribute("JackBPM"), ErrorJackBPM) + XMLLoadAttribute(.GetAttribute("JackTH"), ErrorJackTH) + XMLLoadAttribute(.GetAttribute("gLNGap"), gLNGap) + XMLLoadAttribute(.GetAttribute("TempFileName"), TempFileName) + XMLLoadAttribute(.GetAttribute("COverridesSaveOption"), COverridesSaveOption) + XMLLoadAttribute(.GetAttribute("TemplateSnapToVPosition"), TemplateSnapToVPosition) + XMLLoadAttribute(.GetAttribute("PastePatternToVPosition"), PastePatternToVPosition) + End With + End If - XMLLoadAttribute(.GetAttribute("BMSGridLimit"), BMSGridLimit) - XMLLoadAttribute(.GetAttribute("BeepWhileSaved"), BeepWhileSaved) - XMLLoadAttribute(.GetAttribute("BPMx1296"), BPMx1296) - XMLLoadAttribute(.GetAttribute("STOPx1296"), STOPx1296) - End With - End If + 'save + Dim eSave As XmlElement = Root.Item("Save") + If eSave IsNot Nothing Then + With eSave + Select Case UCase(.GetAttribute("TextEncoding")) + Case "SYSTEM ANSI" : TextEncoding = System.Text.Encoding.Default + Case "LITTLE ENDIAN UTF16" : TextEncoding = System.Text.Encoding.Unicode + Case "ASCII" : TextEncoding = System.Text.Encoding.ASCII + Case "BIG ENDIAN UTF16" : TextEncoding = System.Text.Encoding.BigEndianUnicode + Case "LITTLE ENDIAN UTF32" : TextEncoding = System.Text.Encoding.UTF32 + Case "UTF7" : TextEncoding = System.Text.Encoding.UTF7 + Case "UTF8" : TextEncoding = System.Text.Encoding.UTF8 + Case "SJIS" : TextEncoding = System.Text.Encoding.GetEncoding(932) + Case "EUC-KR" : TextEncoding = System.Text.Encoding.GetEncoding(51949) + ' leave current encoding + ' Case Else + End Select + + XMLLoadAttribute(.GetAttribute("BMSGridLimit"), BMSGridLimit) + XMLLoadAttribute(.GetAttribute("BeepWhileSaved"), BeepWhileSaved) + XMLLoadAttribute(.GetAttribute("PreloadBMSStruct"), PreloadBMSStruct) + XMLLoadAttribute(.GetAttribute("BPMx1296"), BPMx1296) + XMLLoadAttribute(.GetAttribute("STOPx1296"), STOPx1296) + XMLLoadAttribute(.GetAttribute("AudioLine"), AudioLine) + End With + End If - 'WAV - Dim eWAV As XmlElement = Root.Item("WAV") - If eWAV IsNot Nothing Then - With eWAV - XMLLoadAttribute(.GetAttribute("WAVMultiSelect"), WAVMultiSelect) - CWAVMultiSelect.Checked = WAVMultiSelect - CWAVMultiSelect_CheckedChanged(CWAVMultiSelect, New EventArgs) - - XMLLoadAttribute(.GetAttribute("WAVChangeLabel"), WAVChangeLabel) - CWAVChangeLabel.Checked = WAVChangeLabel - CWAVChangeLabel_CheckedChanged(CWAVChangeLabel, New EventArgs) - - Dim xInt As Integer = CInt(.GetAttribute("BeatChangeMode")) - Dim xBeatOpList As RadioButton() = {CBeatPreserve, CBeatMeasure, CBeatCut, CBeatScale} - If xInt >= 0 And xInt < xBeatOpList.Length Then - xBeatOpList(xInt).Checked = True - CBeatPreserve_Click(xBeatOpList(xInt), New System.EventArgs) - End If - End With - End If + 'WAV + Dim eWAV As XmlElement = Root.Item("WAV") + If eWAV IsNot Nothing Then + With eWAV + XMLLoadAttribute(.GetAttribute("WAVMultiSelect"), WAVMultiSelect) + CWAVMultiSelect.Checked = WAVMultiSelect + CWAVMultiSelect_CheckedChanged(CWAVMultiSelect, New EventArgs) + + XMLLoadAttribute(.GetAttribute("WAVChangeLabel"), WAVChangeLabel) + CWAVChangeLabel.Checked = WAVChangeLabel + CWAVChangeLabel_CheckedChanged(CWAVChangeLabel, New EventArgs) + + Dim xInt As Integer = CInt(.GetAttribute("BeatChangeMode")) + Dim xBeatOpList As RadioButton() = {CBeatPreserve, CBeatMeasure, CBeatCut, CBeatScale} + If xInt >= 0 And xInt < xBeatOpList.Length Then + xBeatOpList(xInt).Checked = True + CBeatPreserve_Click(xBeatOpList(xInt), New System.EventArgs) + End If + End With + End If - 'ShowHide - Dim eShowHide As XmlElement = Root.Item("ShowHide") - If eShowHide IsNot Nothing Then - With eShowHide - XMLLoadAttribute(.GetAttribute("showMenu"), mnSMenu.Checked) - XMLLoadAttribute(.GetAttribute("showTB"), mnSTB.Checked) - XMLLoadAttribute(.GetAttribute("showOpPanel"), mnSOP.Checked) - XMLLoadAttribute(.GetAttribute("showStatus"), mnSStatus.Checked) - XMLLoadAttribute(.GetAttribute("showLSplit"), mnSLSplitter.Checked) - XMLLoadAttribute(.GetAttribute("showRSplit"), mnSRSplitter.Checked) - End With - End If + 'BMP + Dim eBMP As XmlElement = Root.Item("BMP") + If eBMP IsNot Nothing Then + With eBMP + XMLLoadAttribute(.GetAttribute("BMPMultiSelect"), BMPMultiSelect) + CBMPMultiSelect.Checked = BMPMultiSelect + CBMPMultiSelect_CheckedChanged(CBMPMultiSelect, New EventArgs) + + XMLLoadAttribute(.GetAttribute("BMPChangeLabel"), BMPChangeLabel) + CBMPChangeLabel.Checked = BMPChangeLabel + CBMPChangeLabel_CheckedChanged(CBMPChangeLabel, New EventArgs) + End With + End If - 'Grid - Dim eGrid As XmlElement = Root.Item("Grid") - If eGrid IsNot Nothing Then - With eGrid - XMLLoadAttribute(.GetAttribute("gSnap"), CGSnap.Checked) - XMLLoadAttribute(.GetAttribute("gWheel"), gWheel) - XMLLoadAttribute(.GetAttribute("gPgUpDn"), gPgUpDn) - XMLLoadAttribute(.GetAttribute("gShow"), CGShow.Checked) - XMLLoadAttribute(.GetAttribute("gShowS"), CGShowS.Checked) - XMLLoadAttribute(.GetAttribute("gShowBG"), CGShowBG.Checked) - XMLLoadAttribute(.GetAttribute("gShowM"), CGShowM.Checked) - XMLLoadAttribute(.GetAttribute("gShowV"), CGShowV.Checked) - XMLLoadAttribute(.GetAttribute("gShowMB"), CGShowMB.Checked) - XMLLoadAttribute(.GetAttribute("gShowC"), CGShowC.Checked) - XMLLoadAttribute(.GetAttribute("gBPM"), CGBPM.Checked) - XMLLoadAttribute(.GetAttribute("gSTOP"), CGSTOP.Checked) - XMLLoadAttribute(.GetAttribute("gSCROLL"), CGSCROLL.Checked) - XMLLoadAttribute(.GetAttribute("gBLP"), CGBLP.Checked) - XMLLoadAttribute(.GetAttribute("gP2"), CHPlayer.SelectedIndex) - XMLLoadAttribute(.GetAttribute("gCol"), CGB.Value) - XMLLoadAttribute(.GetAttribute("gxHeight"), CGHeight.Value) - XMLLoadAttribute(.GetAttribute("gxWidth"), CGWidth.Value) - XMLLoadAttribute(.GetAttribute("gSlash"), gSlash) - - Dim xgDivide As Integer = CInt(.GetAttribute("gDivide")) - If xgDivide >= CGDivide.Minimum And xgDivide <= CGDivide.Maximum Then CGDivide.Value = xgDivide - - Dim xgSub As Integer = CInt(.GetAttribute("gSub")) - If xgSub >= CGSub.Minimum And xgSub <= CGSub.Maximum Then CGSub.Value = xgSub - End With - End If + 'ShowHide + Dim eShowHide As XmlElement = Root.Item("ShowHide") + If eShowHide IsNot Nothing Then + With eShowHide + XMLLoadAttribute(.GetAttribute("showMenu"), mnSMenu.Checked) + XMLLoadAttribute(.GetAttribute("showTB"), mnSTB.Checked) + XMLLoadAttribute(.GetAttribute("showOpPanel"), mnSOP.Checked) + XMLLoadAttribute(.GetAttribute("showStatus"), mnSStatus.Checked) + XMLLoadAttribute(.GetAttribute("showLSplit"), mnSLSplitter.Checked) + XMLLoadAttribute(.GetAttribute("showRSplit"), mnSRSplitter.Checked) + End With + End If - 'WaveForm - Dim eWaveForm As XmlElement = Root.Item("WaveForm") - If eWaveForm IsNot Nothing Then - With eWaveForm - XMLLoadAttribute(.GetAttribute("wLock"), BWLock.Checked) - XMLLoadAttribute(.GetAttribute("wPosition"), TWPosition.Value) - XMLLoadAttribute(.GetAttribute("wLeft"), TWLeft.Value) - XMLLoadAttribute(.GetAttribute("wWidth"), TWWidth.Value) - XMLLoadAttribute(.GetAttribute("wPrecision"), TWPrecision.Value) - End With - End If + 'Grid + Dim eGrid As XmlElement = Root.Item("Grid") + If eGrid IsNot Nothing Then + With eGrid + XMLLoadAttribute(.GetAttribute("gSnap"), CGSnap.Checked) + XMLLoadAttribute(.GetAttribute("xmlDisableVertical"), CGDisableVertical.Checked) + XMLLoadAttribute(.GetAttribute("gWheel"), gWheel) + XMLLoadAttribute(.GetAttribute("gPgUpDn"), gPgUpDn) + XMLLoadAttribute(.GetAttribute("gShow"), CGShow.Checked) + XMLLoadAttribute(.GetAttribute("gShowS"), CGShowS.Checked) + XMLLoadAttribute(.GetAttribute("gShowBG"), CGShowBG.Checked) + XMLLoadAttribute(.GetAttribute("gShowM"), CGShowM.Checked) + XMLLoadAttribute(.GetAttribute("gShowV"), CGShowV.Checked) + XMLLoadAttribute(.GetAttribute("gShowMB"), CGShowMB.Checked) + XMLLoadAttribute(.GetAttribute("gShowC"), CGShowC.Checked) + XMLLoadAttribute(.GetAttribute("gBPM"), CGBPM.Checked) + XMLLoadAttribute(.GetAttribute("gSTOP"), CGSTOP.Checked) + XMLLoadAttribute(.GetAttribute("gSCROLL"), CGSCROLL.Checked) + XMLLoadAttribute(.GetAttribute("gBLP"), CGBLP.Checked) + XMLLoadAttribute(.GetAttribute("gP2"), CHPlayer.SelectedIndex) + XMLLoadAttribute(.GetAttribute("gCol"), CGB.Value) + XMLLoadAttribute(.GetAttribute("gxHeight"), CGHeight.Value) + XMLLoadAttribute(.GetAttribute("gxWidth"), CGWidth.Value) + XMLLoadAttribute(.GetAttribute("gSlash"), gSlash) + + Dim xgDivide As Integer = CInt(.GetAttribute("gDivide")) + If xgDivide >= CGDivide.Minimum And xgDivide <= CGDivide.Maximum Then CGDivide.Value = xgDivide + + Dim xgSub As Integer = CInt(.GetAttribute("gSub")) + If xgSub >= CGSub.Minimum And xgSub <= CGSub.Maximum Then CGSub.Value = xgSub + End With + End If - 'Player - Dim ePlayer As XmlElement = Root.Item("Player") - If ePlayer IsNot Nothing Then - With ePlayer - XMLLoadAttribute(.GetAttribute("CurrentPlayer"), CurrentPlayer) + 'WaveForm + Dim eWaveForm As XmlElement = Root.Item("WaveForm") + If eWaveForm IsNot Nothing Then + With eWaveForm + XMLLoadAttribute(.GetAttribute("wLock"), BWLock.Checked) + XMLLoadAttribute(.GetAttribute("wPosition"), TWPosition.Value) + XMLLoadAttribute(.GetAttribute("wLeft"), TWLeft.Value) + XMLLoadAttribute(.GetAttribute("wWidth"), TWWidth.Value) + XMLLoadAttribute(.GetAttribute("wPrecision"), TWPrecision.Value) + End With + End If - Dim xCount As Integer = .GetAttribute("Count") - If xCount > 0 Then ReDim Preserve pArgs(xCount - 1) - End With + 'Player + Dim ePlayer As XmlElement = Root.Item("Player") + If ePlayer IsNot Nothing Then + With ePlayer + XMLLoadAttribute(.GetAttribute("CurrentPlayer"), CurrentPlayer) - For Each eePlayer As XmlElement In ePlayer.ChildNodes - Me.XMLLoadPlayer(eePlayer) - Next - End If + Dim xCount As Integer = CInt(.GetAttribute("Count")) + If xCount > 0 Then ReDim Preserve pArgs(xCount - 1) + End With - 'Columns - Dim eColumns As XmlElement = Root.Item("Columns") - If eColumns IsNot Nothing Then - For Each eeCol As XmlElement In eColumns.ChildNodes - Me.XMLLoadColumn(eeCol) - Next - End If + For Each eePlayer As XmlElement In ePlayer.ChildNodes + Me.XMLLoadPlayer(eePlayer) + Next + End If - 'VisualSettings - Dim eVisualSettings As XmlElement = Root.Item("VisualSettings") - If eVisualSettings IsNot Nothing Then - With eVisualSettings - XMLLoadElementValue(.Item("ColumnTitle"), vo.ColumnTitle.Color) - XMLLoadElementValue(.Item("ColumnTitleFont"), vo.ColumnTitleFont) - XMLLoadElementValue(.Item("Bg"), vo.Bg.Color) - XMLLoadElementValue(.Item("Grid"), vo.pGrid.Color) - XMLLoadElementValue(.Item("Sub"), vo.pSub.Color) - XMLLoadElementValue(.Item("VLine"), vo.pVLine.Color) - XMLLoadElementValue(.Item("MLine"), vo.pMLine.Color) - - XMLLoadElementValue(.Item("BGMWav"), vo.pBGMWav.Color) - TWTransparency.Value = vo.pBGMWav.Color.A - TWTransparency2.Value = vo.pBGMWav.Color.A - TWSaturation.Value = vo.pBGMWav.Color.GetSaturation * 1000 - TWSaturation2.Value = vo.pBGMWav.Color.GetSaturation * 1000 - - XMLLoadElementValue(.Item("SelBox"), vo.SelBox.Color) - XMLLoadElementValue(.Item("TSCursor"), vo.PECursor.Color) - XMLLoadElementValue(.Item("TSHalf"), vo.PEHalf.Color) - XMLLoadElementValue(.Item("TSDeltaMouseOver"), vo.PEDeltaMouseOver) - XMLLoadElementValue(.Item("TSMouseOver"), vo.PEMouseOver.Color) - XMLLoadElementValue(.Item("TSSel"), vo.PESel.Color) - XMLLoadElementValue(.Item("TSBPM"), vo.PEBPM.Color) - XMLLoadElementValue(.Item("TSBPMFont"), vo.PEBPMFont) - XMLLoadElementValue(.Item("MiddleDeltaRelease"), vo.MiddleDeltaRelease) - XMLLoadElementValue(.Item("kHeight"), vo.kHeight) - XMLLoadElementValue(.Item("kFont"), vo.kFont) - XMLLoadElementValue(.Item("kMFont"), vo.kMFont) - XMLLoadElementValue(.Item("kLabelVShift"), vo.kLabelVShift) - XMLLoadElementValue(.Item("kLabelHShift"), vo.kLabelHShift) - XMLLoadElementValue(.Item("kLabelHShiftL"), vo.kLabelHShiftL) - XMLLoadElementValue(.Item("kMouseOver"), vo.kMouseOver.Color) - XMLLoadElementValue(.Item("kMouseOverE"), vo.kMouseOverE.Color) - XMLLoadElementValue(.Item("kSelected"), vo.kSelected.Color) - XMLLoadElementValue(.Item("kOpacity"), vo.kOpacity) - End With + Dim eTotal As XmlElement = Root.Item("Total") + If eTotal IsNot Nothing Then + With eTotal + XMLLoadAttribute(.GetAttribute("Option"), TotalOption) + XMLLoadAttribute(.GetAttribute("Multiplier"), TotalMultiplier) + XMLLoadAttribute(.GetAttribute("GlobalMultiplier"), TotalGlobalMultiplier) + XMLLoadAttribute(.GetAttribute("Decimal"), TotalDecimal) + XMLLoadAttribute(.GetAttribute("DisplayValue"), TotalDisplayValue) + XMLLoadAttribute(.GetAttribute("DisplayText"), TotalDisplayText) + XMLLoadAttribute(.GetAttribute("Autofill"), TotalAutofill) + End With + End If + + Dim eKeybindings As XmlElement = Root.Item("KeyBindings") + If eKeybindings IsNot Nothing Then + With eKeybindings + Dim xBound = CInt(.GetAttribute("Count")) + If xBound > UBound(Keybindings) Then ReDim Preserve Keybindings(xBound) + + For Each eeKeybindings As XmlElement In .ChildNodes + XMLLoadKeybinding(eeKeybindings) + Next + End With + End If + + 'Columns + Dim eColumns As XmlElement = Root.Item("Columns") + If eColumns IsNot Nothing Then + For Each eeCol As XmlElement In eColumns.ChildNodes + Me.XMLLoadColumn(eeCol) + Next + End If + + 'VisualSettings + Dim eVisualSettings As XmlElement = Root.Item("VisualSettings") + If eVisualSettings IsNot Nothing Then + With eVisualSettings + XMLLoadElementValue(.Item("ColumnTitle"), vo.ColumnTitle.Color) + XMLLoadElementValue(.Item("ColumnTitleFont"), vo.ColumnTitleFont) + XMLLoadElementValue(.Item("Bg"), vo.Bg.Color) + XMLLoadElementValue(.Item("Grid"), vo.pGrid.Color) + XMLLoadElementValue(.Item("Sub"), vo.pSub.Color) + XMLLoadElementValue(.Item("VLine"), vo.pVLine.Color) + XMLLoadElementValue(.Item("MLine"), vo.pMLine.Color) + + XMLLoadElementValue(.Item("BGMWav"), vo.pBGMWav.Color) + TWTransparency.Value = vo.pBGMWav.Color.A + TWTransparency2.Value = vo.pBGMWav.Color.A + TWSaturation.Value = CDec(vo.pBGMWav.Color.GetSaturation * 1000) + TWSaturation2.Value = CInt(vo.pBGMWav.Color.GetSaturation * 1000) + + XMLLoadElementValue(.Item("SelBox"), vo.SelBox.Color) + XMLLoadElementValue(.Item("TSCursor"), vo.PECursor.Color) + XMLLoadElementValue(.Item("TSHalf"), vo.PEHalf.Color) + XMLLoadElementValue(.Item("TSDeltaMouseOver"), vo.PEDeltaMouseOver) + XMLLoadElementValue(.Item("TSMouseOver"), vo.PEMouseOver.Color) + XMLLoadElementValue(.Item("TSSel"), vo.PESel.Color) + XMLLoadElementValue(.Item("TSBPM"), vo.PEBPM.Color) + XMLLoadElementValue(.Item("TSBPMFont"), vo.PEBPMFont) + XMLLoadElementValue(.Item("MiddleDeltaRelease"), vo.MiddleDeltaRelease) + XMLLoadElementValue(.Item("kHeight"), vo.kHeight) + XMLLoadElementValue(.Item("kFont"), vo.kFont) + XMLLoadElementValue(.Item("kMFont"), vo.kMFont) + XMLLoadElementValue(.Item("kLabelVShift"), vo.kLabelVShift) + XMLLoadElementValue(.Item("kLabelHShift"), vo.kLabelHShift) + XMLLoadElementValue(.Item("kLabelHShiftL"), vo.kLabelHShiftL) + XMLLoadElementValue(.Item("kMouseOver"), vo.kMouseOver.Color) + XMLLoadElementValue(.Item("kMouseOverE"), vo.kMouseOverE.Color) + XMLLoadElementValue(.Item("kSelected"), vo.kSelected.Color) + XMLLoadElementValue(.Item("kOpacity"), vo.kOpacity) + End With + End If End If -EndOfSub: UpdateColumnsX() FileStream.Close() 'File.Delete(xTempFileName) @@ -568,11 +898,17 @@ EndOfSub: XMLLoadLocale(Root.Item("OK"), Strings.OK) XMLLoadLocale(Root.Item("Cancel"), Strings.Cancel) XMLLoadLocale(Root.Item("None"), Strings.None) + XMLLoadLocale(Root.Item("Beat"), Strings.Beat) + XMLLoadLocale(Root.Item("Beats"), Strings.Beats) + XMLLoadLocale(Root.Item("st"), Strings.st) + XMLLoadLocale(Root.Item("nd"), Strings.nd) + XMLLoadLocale(Root.Item("rd"), Strings.rd) + XMLLoadLocale(Root.Item("th"), Strings.th) Dim eFont As XmlElement = Root.Item("Font") If eFont IsNot Nothing Then Dim xSize As Integer = 9 - If eFont.HasAttribute("Size") Then xSize = Val(eFont.GetAttribute("Size")) + If eFont.HasAttribute("Size") Then xSize = CInt(eFont.GetAttribute("Size")) Dim fRegular As New Font(Me.Font.FontFamily, xSize, FontStyle.Regular) Dim xChildNode As XmlNode = eFont.LastChild @@ -584,8 +920,38 @@ EndOfSub: xChildNode = xChildNode.PreviousSibling Loop - Dim rList() As Object = {Me, mnSys, Menu1, mnMain, cmnLanguage, cmnTheme, cmnConversion, TBMain, FStatus, FStatus2} - For Each c As Object In rList + Font = fRegular + Dim TMIList() As ToolStripMenuItem = {mnSys} + Dim CMSList() As ContextMenuStrip = {Menu1, cmnLanguage, cmnTheme, cmnConversion} + Dim MSList() As MenuStrip = {mnMain} + Dim TSList() As ToolStrip = {TBMain} + Dim SSList() As StatusStrip = {FStatus, FStatus2} + ' Not sure if a function would work using object type as a variable + For Each c In TMIList + Try + c.Font = fRegular + Catch ex As Exception + End Try + Next + For Each c In CMSList + Try + c.Font = fRegular + Catch ex As Exception + End Try + Next + For Each c In MSList + Try + c.Font = fRegular + Catch ex As Exception + End Try + Next + For Each c In TSList + Try + c.Font = fRegular + Catch ex As Exception + End Try + Next + For Each c In SSList Try c.Font = fRegular Catch ex As Exception @@ -594,8 +960,23 @@ EndOfSub: Dim fBold As New Font(fRegular, FontStyle.Bold) - Dim bList() As Object = {TBStatistics, FSSS, FSSL, FSSH, TVCM, TVCD, TVCBPM, FSP1, FSP3, FSP2, PMain, PMainIn, PMainR, PMainInR, PMainL, PMainInL} - For Each c As Object In bList + Dim TSBList() As ToolStripButton = {TBStatistics, FSSS, FSSL, FSSH} + Dim TSTBList() As ToolStripTextBox = {TVCM, TVCD, TVCBPM} + Dim TSSLList() As ToolStripStatusLabel = {FSP1, FSP3, FSP2} + Dim PList() As Panel = {PMain, PMainIn, PMainR, PMainInR, PMainL, PMainInL} + For Each c In TSBList + Try + c.Font = fBold + Catch ex As Exception + End Try + Next + For Each c In TSTBList + Try + c.Font = fBold + Catch ex As Exception + End Try + Next + For Each c In TSSLList Try c.Font = fBold Catch ex As Exception @@ -606,7 +987,7 @@ EndOfSub: Dim eMonoFont As XmlElement = Root.Item("MonoFont") If eMonoFont IsNot Nothing Then Dim xSize As Integer = 9 - If eMonoFont.HasAttribute("Size") Then xSize = Val(eMonoFont.GetAttribute("Size")) + If eMonoFont.HasAttribute("Size") Then xSize = CInt(eMonoFont.GetAttribute("Size")) Dim fMono As New Font(POWAVInner.Font.FontFamily, xSize) Dim xChildNode As XmlNode = eMonoFont.LastChild @@ -618,10 +999,17 @@ EndOfSub: xChildNode = xChildNode.PreviousSibling Loop - Dim mList() As Object = {LWAV, LBMP, LBeat, TExpansion} - For Each c As Object In mList + Dim LBList() As ListBox = {LWAV, LBeat} + Dim TBList() As TextBox = {TExpansion} + For Each c In LBList + Try + c.Font = fMono + Catch ex As Exception + End Try + Next + For Each c In TBList Try - c.font = fMono + c.Font = fMono Catch ex As Exception End Try Next @@ -635,11 +1023,13 @@ EndOfSub: XMLLoadLocaleMenu(eFile.Item("Title"), mnFile.Text) XMLLoadLocaleMenu(eFile.Item("New"), mnNew.Text) XMLLoadLocaleMenu(eFile.Item("Open"), mnOpen.Text) + XMLLoadLocaleMenu(eFile.Item("OpenTemplate"), mnOpenTemplate.Text) XMLLoadLocaleMenu(eFile.Item("ImportSM"), mnImportSM.Text) XMLLoadLocaleMenu(eFile.Item("ImportIBMSC"), mnImportIBMSC.Text) XMLLoadLocaleMenu(eFile.Item("Save"), mnSave.Text) XMLLoadLocaleMenu(eFile.Item("SaveAs"), mnSaveAs.Text) XMLLoadLocaleMenu(eFile.Item("ExportIBMSC"), mnExport.Text) + XMLLoadLocaleMenu(eFile.Item("Close"), mnClose.Text) If Recent(0) = "" Then XMLLoadLocaleMenu(eFile.Item("Recent0"), mnOpenR0.Text) If Recent(1) = "" Then XMLLoadLocaleMenu(eFile.Item("Recent1"), mnOpenR1.Text) If Recent(2) = "" Then XMLLoadLocaleMenu(eFile.Item("Recent2"), mnOpenR2.Text) @@ -656,10 +1046,13 @@ EndOfSub: XMLLoadLocaleMenu(eEdit.Item("Cut"), mnCut.Text) XMLLoadLocaleMenu(eEdit.Item("Copy"), mnCopy.Text) XMLLoadLocaleMenu(eEdit.Item("Paste"), mnPaste.Text) + XMLLoadLocaleMenu(eEdit.Item("PastePattern"), mnPastePattern.Text) XMLLoadLocaleMenu(eEdit.Item("Delete"), mnDelete.Text) XMLLoadLocaleMenu(eEdit.Item("SelectAll"), mnSelectAll.Text) + XMLLoadLocaleMenu(eEdit.Item("GoToMeasure"), mnGotoMeasure.Text) XMLLoadLocaleMenu(eEdit.Item("Find"), mnFind.Text) XMLLoadLocaleMenu(eEdit.Item("Stat"), mnStatistics.Text) + XMLLoadLocaleMenu(eEdit.Item("StatAdv"), mnStatisticsAdvanced.Text) XMLLoadLocaleMenu(eEdit.Item("TimeSelectionTool"), mnTimeSelect.Text) XMLLoadLocaleMenu(eEdit.Item("SelectTool"), mnSelect.Text) XMLLoadLocaleMenu(eEdit.Item("WriteTool"), mnWrite.Text) @@ -678,8 +1071,11 @@ EndOfSub: XMLLoadLocaleMenu(eOptions.Item("ErrorCheck"), mnErrorCheck.Text) XMLLoadLocaleMenu(eOptions.Item("PreviewOnClick"), mnPreviewOnClick.Text) XMLLoadLocaleMenu(eOptions.Item("ShowFileName"), mnShowFileName.Text) + XMLLoadLocaleMenu(eOptions.Item("ShowWaveform"), mnShowWaveform.Text) + XMLLoadLocaleMenu(eOptions.Item("KeybindingOptions"), mnKOptions.Text) XMLLoadLocaleMenu(eOptions.Item("GeneralOptions"), mnGOptions.Text) XMLLoadLocaleMenu(eOptions.Item("VisualOptions"), mnVOptions.Text) + XMLLoadLocaleMenu(eOptions.Item("VisualOverrideOptions"), mnVCOptions.Text) XMLLoadLocaleMenu(eOptions.Item("PlayerOptions"), mnPOptions.Text) XMLLoadLocaleMenu(eOptions.Item("Language"), mnLanguage.Text) XMLLoadLocaleMenu(eOptions.Item("Theme"), mnTheme.Text) @@ -695,13 +1091,21 @@ EndOfSub: XMLLoadLocaleMenu(ePreview.Item("PlayStop"), mnStop.Text) End If - Dim eAbout As XmlElement = eMenu.Item("About") - If eAbout IsNot Nothing Then - 'XMLLoadLocaleMenu(eAbout.Item("Title"), mnAbout.Text) - 'XMLLoadLocaleMenu(eAbout.Item("About"), mnAbout1.Text) - 'XMLLoadLocaleMenu(eAbout.Item("CheckUpdates"), mnUpdate.Text) - 'XMLLoadLocaleMenu(eAbout.Item("CheckUpdatesC"), mnUpdateC.Text) + Dim eTools As XmlElement = eMenu.Item("Tools") + If eTools IsNot Nothing Then + XMLLoadLocaleMenu(eTools.Item("Title"), mnTools.Text) + XMLLoadLocaleMenu(eTools.Item("TechnicalErrorCheck"), mnTechnicalErrorCheck.Text) + XMLLoadLocaleMenu(eTools.Item("TOTAL"), mnTOTAL.Text) + XMLLoadLocaleMenu(eTools.Item("MyO2"), mnMyO2.Text) End If + + ' Dim eAbout As XmlElement = eMenu.Item("About") + ' If eAbout IsNot Nothing Then + ' XMLLoadLocaleMenu(eAbout.Item("Title"), mnAbout.Text) + ' XMLLoadLocaleMenu(eAbout.Item("About"), mnAbout1.Text) + ' XMLLoadLocaleMenu(eAbout.Item("CheckUpdates"), mnUpdate.Text) + ' XMLLoadLocaleMenu(eAbout.Item("CheckUpdatesC"), mnUpdateC.Text) + ' End If End If Dim eToolBar As XmlElement = Root.Item("ToolBar") @@ -712,6 +1116,7 @@ EndOfSub: XMLLoadLocale(eToolBar.Item("Cut"), TBCut.Text) XMLLoadLocale(eToolBar.Item("Copy"), TBCopy.Text) XMLLoadLocale(eToolBar.Item("Paste"), TBPaste.Text) + XMLLoadLocale(eToolBar.Item("PastePattern"), TBPastePattern.Text) XMLLoadLocale(eToolBar.Item("Find"), TBFind.Text) XMLLoadLocale(eToolBar.Item("Stat"), TBStatistics.ToolTipText) XMLLoadLocale(eToolBar.Item("Conversion"), POConvert.Text) @@ -719,6 +1124,7 @@ EndOfSub: XMLLoadLocale(eToolBar.Item("ErrorCheck"), TBErrorCheck.Text) XMLLoadLocale(eToolBar.Item("PreviewOnClick"), TBPreviewOnClick.Text) XMLLoadLocale(eToolBar.Item("ShowFileName"), TBShowFileName.Text) + XMLLoadLocale(eToolBar.Item("ShowWaveform"), TBShowWaveform.Text) XMLLoadLocale(eToolBar.Item("Undo"), TBUndo.Text) XMLLoadLocale(eToolBar.Item("Redo"), TBRedo.Text) XMLLoadLocale(eToolBar.Item("NT"), TBNTInput.Text) @@ -733,6 +1139,7 @@ EndOfSub: XMLLoadLocale(eToolBar.Item("GeneralOptions"), TBGOptions.Text) XMLLoadLocale(eToolBar.Item("Language"), TBLanguage.Text) XMLLoadLocale(eToolBar.Item("Theme"), TBTheme.Text) + XMLLoadLocale(eToolBar.Item("RecommendedTOTAL"), Strings.StatusBar.RecommendedTotal) ' XMLLoadLocale(eToolBar.Item("About"), TBAbout.Text) End If @@ -746,9 +1153,14 @@ EndOfSub: XMLLoadLocale(eStatusBar.Item("MeasureResolution"), FSP2.ToolTipText) XMLLoadLocale(eStatusBar.Item("AbsolutePosition"), FSP4.ToolTipText) XMLLoadLocale(eStatusBar.Item("Length"), Strings.StatusBar.Length) + XMLLoadLocale(eStatusBar.Item("Note"), Strings.StatusBar.Note) XMLLoadLocale(eStatusBar.Item("LongNote"), Strings.StatusBar.LongNote) XMLLoadLocale(eStatusBar.Item("Hidden"), Strings.StatusBar.Hidden) + XMLLoadLocale(eStatusBar.Item("Landmine"), Strings.StatusBar.Landmine) + XMLLoadLocale(eStatusBar.Item("Comment"), Strings.StatusBar.Comment) + XMLLoadLocale(eStatusBar.Item("Approximate"), Strings.StatusBar.Approximate) XMLLoadLocale(eStatusBar.Item("Error"), Strings.StatusBar.Err) + XMLLoadLocale(eStatusBar.Item("ErrorTechnical"), Strings.StatusBar.ErrTechnical) XMLLoadLocale(eStatusBar.Item("SelStart"), FSSS.ToolTipText) XMLLoadLocale(eStatusBar.Item("SelLength"), FSSL.ToolTipText) XMLLoadLocale(eStatusBar.Item("SelSplit"), FSSH.ToolTipText) @@ -810,17 +1222,29 @@ EndOfSub: XMLLoadLocaleMenu(eConvert.Item("Long"), POBLong.Text) XMLLoadLocaleMenu(eConvert.Item("Short"), POBShort.Text) XMLLoadLocaleMenu(eConvert.Item("LongShort"), POBLongShort.Text) + XMLLoadLocaleMenu(eConvert.Item("LongObjNT"), POBLongObjNT.Text) + XMLLoadLocaleMenu(eConvert.Item("LongNTObj"), POBLongNTObj.Text) + XMLLoadLocaleMenu(eConvert.Item("AutoLongV"), POBAutoLongVPosition.Text) + XMLLoadLocaleMenu(eConvert.Item("AutoLongC"), POBAutoLongColumn.Text) XMLLoadLocaleMenu(eConvert.Item("Hidden"), POBHidden.Text) XMLLoadLocaleMenu(eConvert.Item("Visible"), POBVisible.Text) XMLLoadLocaleMenu(eConvert.Item("HiddenVisible"), POBHiddenVisible.Text) XMLLoadLocaleMenu(eConvert.Item("Relabel"), POBModify.Text) XMLLoadLocaleMenu(eConvert.Item("Mirror"), POBMirror.Text) + XMLLoadLocaleMenu(eConvert.Item("Flip"), POBFlip.Text) + XMLLoadLocaleMenu(eConvert.Item("Random"), POBRandom.Text) + XMLLoadLocaleMenu(eConvert.Item("R-Random"), POBRRandom.Text) + XMLLoadLocaleMenu(eConvert.Item("S-Random"), POBSRandom.Text) + XMLLoadLocaleMenu(eConvert.Item("H-Random"), POBHRandom.Text) + XMLLoadLocaleMenu(eConvert.Item("Sort"), POBSort.Text) End If Dim eWAV As XmlElement = eSubMenu.Item("WAV") If eWAV IsNot Nothing Then XMLLoadLocaleMenu(eWAV.Item("MultiSelection"), CWAVMultiSelect.Text) + XMLLoadLocaleMenu(eWAV.Item("MultiSelection"), CBMPMultiSelect.Text) XMLLoadLocaleMenu(eWAV.Item("Synchronize"), CWAVChangeLabel.Text) + XMLLoadLocaleMenu(eWAV.Item("Synchronize"), CBMPChangeLabel.Text) End If Dim eBeat As XmlElement = eSubMenu.Item("Beat") @@ -861,26 +1285,26 @@ EndOfSub: XMLLoadLocale(eHeader.Item("LnObj"), Label24.Text) RemoveHandler CHPlayer.SelectedIndexChanged, AddressOf CHPlayer_SelectedIndexChanged - XMLLoadLocale(eHeader.Item("Player1"), CHPlayer.Items.Item(0)) - XMLLoadLocale(eHeader.Item("Player2"), CHPlayer.Items.Item(1)) - XMLLoadLocale(eHeader.Item("Player3"), CHPlayer.Items.Item(2)) + XMLLoadLocale(eHeader.Item("Player1"), CHPlayer.Items.Item(0).ToString()) + XMLLoadLocale(eHeader.Item("Player2"), CHPlayer.Items.Item(1).ToString()) + XMLLoadLocale(eHeader.Item("Player3"), CHPlayer.Items.Item(2).ToString()) AddHandler CHPlayer.SelectedIndexChanged, AddressOf CHPlayer_SelectedIndexChanged RemoveHandler CHRank.SelectedIndexChanged, AddressOf THGenre_TextChanged - XMLLoadLocale(eHeader.Item("Rank0"), CHRank.Items.Item(0)) - XMLLoadLocale(eHeader.Item("Rank1"), CHRank.Items.Item(1)) - XMLLoadLocale(eHeader.Item("Rank2"), CHRank.Items.Item(2)) - XMLLoadLocale(eHeader.Item("Rank3"), CHRank.Items.Item(3)) - XMLLoadLocale(eHeader.Item("Rank4"), CHRank.Items.Item(4)) + XMLLoadLocale(eHeader.Item("Rank0"), CHRank.Items.Item(0).ToString()) + XMLLoadLocale(eHeader.Item("Rank1"), CHRank.Items.Item(1).ToString()) + XMLLoadLocale(eHeader.Item("Rank2"), CHRank.Items.Item(2).ToString()) + XMLLoadLocale(eHeader.Item("Rank3"), CHRank.Items.Item(3).ToString()) + XMLLoadLocale(eHeader.Item("Rank4"), CHRank.Items.Item(4).ToString()) AddHandler CHRank.SelectedIndexChanged, AddressOf THGenre_TextChanged RemoveHandler CHDifficulty.SelectedIndexChanged, AddressOf THGenre_TextChanged - XMLLoadLocale(eHeader.Item("Difficulty0"), CHDifficulty.Items.Item(0)) - XMLLoadLocale(eHeader.Item("Difficulty1"), CHDifficulty.Items.Item(1)) - XMLLoadLocale(eHeader.Item("Difficulty2"), CHDifficulty.Items.Item(2)) - XMLLoadLocale(eHeader.Item("Difficulty3"), CHDifficulty.Items.Item(3)) - XMLLoadLocale(eHeader.Item("Difficulty4"), CHDifficulty.Items.Item(4)) - XMLLoadLocale(eHeader.Item("Difficulty5"), CHDifficulty.Items.Item(5)) + XMLLoadLocale(eHeader.Item("Difficulty0"), CHDifficulty.Items.Item(0).ToString()) + XMLLoadLocale(eHeader.Item("Difficulty1"), CHDifficulty.Items.Item(1).ToString()) + XMLLoadLocale(eHeader.Item("Difficulty2"), CHDifficulty.Items.Item(2).ToString()) + XMLLoadLocale(eHeader.Item("Difficulty3"), CHDifficulty.Items.Item(3).ToString()) + XMLLoadLocale(eHeader.Item("Difficulty4"), CHDifficulty.Items.Item(4).ToString()) + XMLLoadLocale(eHeader.Item("Difficulty5"), CHDifficulty.Items.Item(5).ToString()) AddHandler CHDifficulty.SelectedIndexChanged, AddressOf THGenre_TextChanged End If @@ -906,26 +1330,31 @@ EndOfSub: Dim eWAV As XmlElement = eOptionsPanel.Item("WAV") If eWAV IsNot Nothing Then - XMLLoadLocale(eWAV.Item("Title"), POWAVSwitch.Text) - XMLLoadLocaleToolTipUniversal(eWAV.Item("MoveUp"), BBMPUp) - XMLLoadLocaleToolTipUniversal(eWAV.Item("MoveDown"), BBMPDown) - XMLLoadLocaleToolTipUniversal(eWAV.Item("Browse"), BBMPBrowse) - XMLLoadLocaleToolTipUniversal(eWAV.Item("Remove"), BBMPRemove) + XMLLoadLocale(eWAV.Item("Title"), Strings.OptionsScroll.WAVHash) + POWAVSwitch.Text = Strings.OptionsScroll.WAVHash XMLLoadLocaleToolTipUniversal(eWAV.Item("MoveUp"), BWAVUp) XMLLoadLocaleToolTipUniversal(eWAV.Item("MoveDown"), BWAVDown) XMLLoadLocaleToolTipUniversal(eWAV.Item("Browse"), BWAVBrowse) XMLLoadLocaleToolTipUniversal(eWAV.Item("Remove"), BWAVRemove) + XMLLoadLocaleToolTipUniversal(eWAV.Item("Duplicate"), BWAVDuplicate) + XMLLoadLocaleToolTipUniversal(eWAV.Item("OverrideColor"), BWAVColorOverride) End If Dim eBMP As XmlElement = eOptionsPanel.Item("BMP") If eBMP IsNot Nothing Then - XMLLoadLocale(eBMP.Item("Title"), POBMPSwitch.Text) + XMLLoadLocale(eBMP.Item("Title"), Strings.OptionsScroll.BMPHash) + POBMPSwitch.Text = Strings.OptionsScroll.BMPHash + XMLLoadLocaleToolTipUniversal(eBMP.Item("MoveUp"), BBMPUp) + XMLLoadLocaleToolTipUniversal(eBMP.Item("MoveDown"), BBMPDown) + XMLLoadLocaleToolTipUniversal(eBMP.Item("Browse"), BBMPBrowse) + XMLLoadLocaleToolTipUniversal(eBMP.Item("Remove"), BBMPRemove) End If XMLLoadLocale(eOptionsPanel.Item("Beat"), POBeatSwitch.Text) XMLLoadLocale(eOptionsPanel.Item("Beat.Apply"), BBeatApply.Text) XMLLoadLocale(eOptionsPanel.Item("Beat.Apply"), BBeatApplyV.Text) XMLLoadLocale(eOptionsPanel.Item("Expansion"), POExpansionSwitch.Text) + XMLLoadLocale(eOptionsPanel.Item("ExpansionRandom"), BExpansion.Text) End If Dim eMessages As XmlElement = Root.Item("Messages") @@ -934,6 +1363,9 @@ EndOfSub: XMLLoadLocale(eMessages.Item("SaveOnExit"), Strings.Messages.SaveOnExit) XMLLoadLocale(eMessages.Item("SaveOnExit1"), Strings.Messages.SaveOnExit1) XMLLoadLocale(eMessages.Item("SaveOnExit2"), Strings.Messages.SaveOnExit2) + XMLLoadLocale(eMessages.Item("SaveOnExitOther"), Strings.Messages.SaveOnExitOther) + XMLLoadLocale(eMessages.Item("SaveAsDisabled"), Strings.Messages.SaveAsDisabled) ' + XMLLoadLocale(eMessages.Item("SaveWhileModifyingSection"), Strings.Messages.SaveWhileModifyingSection) ' XMLLoadLocale(eMessages.Item("PromptEnter"), Strings.Messages.PromptEnter) XMLLoadLocale(eMessages.Item("PromptEnterNumeric"), Strings.Messages.PromptEnterNumeric) XMLLoadLocale(eMessages.Item("PromptEnterBPM"), Strings.Messages.PromptEnterBPM) @@ -959,6 +1391,10 @@ EndOfSub: XMLLoadLocale(eMessages.Item("FileAssociationError"), Strings.Messages.FileAssociationError) XMLLoadLocale(eMessages.Item("RestoreDefaultSettings"), Strings.Messages.RestoreDefaultSettings) XMLLoadLocale(eMessages.Item("RestoreAutosavedFile"), Strings.Messages.RestoreAutosavedFile) + XMLLoadLocale(eMessages.Item("GhostNotesShowMain"), Strings.Messages.GhostNotesShowMain) + XMLLoadLocale(eMessages.Item("GhostNotesModifyExpansion1"), Strings.Messages.GhostNotesModifyExpansion1) + XMLLoadLocale(eMessages.Item("GhostNotesModifyExpansion2"), Strings.Messages.GhostNotesModifyExpansion2) + XMLLoadLocale(eMessages.Item("PasteNotesDifferentCount"), Strings.Messages.PasteNotesDifferentCount) ' End If Dim eFileType As XmlElement = Root.Item("FileType") @@ -981,17 +1417,9 @@ EndOfSub: XMLLoadLocale(eFileType.Item("OGG"), Strings.FileType.OGG) XMLLoadLocale(eFileType.Item("MP3"), Strings.FileType.MP3) XMLLoadLocale(eFileType.Item("MID"), Strings.FileType.MID) + XMLLoadLocale(eFileType.Item("_im"), Strings.FileType._im) XMLLoadLocale(eFileType.Item("_image"), Strings.FileType._image) XMLLoadLocale(eFileType.Item("_movie"), Strings.FileType._movie) - XMLLoadLocale(eFileType.Item("BMP"), Strings.FileType.BMP) - XMLLoadLocale(eFileType.Item("PNG"), Strings.FileType.PNG) - XMLLoadLocale(eFileType.Item("JPG"), Strings.FileType.JPG) - XMLLoadLocale(eFileType.Item("GIF"), Strings.FileType.GIF) - XMLLoadLocale(eFileType.Item("MPG"), Strings.FileType.MPG) - XMLLoadLocale(eFileType.Item("AVI"), Strings.FileType.AVI) - XMLLoadLocale(eFileType.Item("MP4"), Strings.FileType.MP4) - XMLLoadLocale(eFileType.Item("WMV"), Strings.FileType.WMV) - XMLLoadLocale(eFileType.Item("WEBM"), Strings.FileType.WEBM) XMLLoadLocale(eFileType.Item("EXE"), Strings.FileType.EXE) End If @@ -1025,6 +1453,7 @@ EndOfSub: XMLLoadLocale(ePlayerOptions.Item("DirectoryOfApp"), Strings.fopPlayer.DirectoryOfApp) XMLLoadLocale(ePlayerOptions.Item("CurrMeasure"), Strings.fopPlayer.CurrMeasure) XMLLoadLocale(ePlayerOptions.Item("FileName"), Strings.fopPlayer.FileName) + XMLLoadLocale(ePlayerOptions.Item("FileNameTemplate"), Strings.fopPlayer.FileNameTemplate) XMLLoadLocale(ePlayerOptions.Item("RestoreDefault"), Strings.fopPlayer.RestoreDefault) End If @@ -1070,24 +1499,130 @@ EndOfSub: Dim eGeneralOptions As XmlElement = Root.Item("GeneralOptions") If eGeneralOptions IsNot Nothing Then XMLLoadLocale(eGeneralOptions.Item("Title"), Strings.fopGeneral.Title) + XMLLoadLocale(eGeneralOptions.Item("AssociateFileType"), Strings.fopGeneral.AssociateFileType) + XMLLoadLocale(eGeneralOptions.Item("MaxGridPartition"), Strings.fopGeneral.MaxGridPartition) + XMLLoadLocale(eGeneralOptions.Item("MinimumJackThreshold"), Strings.fopGeneral.MinimumJackThreshold) + XMLLoadLocale(eGeneralOptions.Item("AutoLongNoteGap"), Strings.fopGeneral.AutoLongNoteGap) + XMLLoadLocale(eGeneralOptions.Item("TemporaryBMSFilename"), Strings.fopGeneral.TemporaryBMSFilename) + + XMLLoadLocale(eGeneralOptions.Item("AutoSave"), Strings.fopGeneral.AutoSave) + XMLLoadLocale(eGeneralOptions.Item("minutes"), Strings.fopGeneral.minutes) + XMLLoadLocale(eGeneralOptions.Item("BeepWhileSaved"), Strings.fopGeneral.BeepWhileSaved) + XMLLoadLocale(eGeneralOptions.Item("Preload"), Strings.fopGeneral.Preload) + XMLLoadLocale(eGeneralOptions.Item("ExtendBPM"), Strings.fopGeneral.ExtendBPM) + XMLLoadLocale(eGeneralOptions.Item("ExtendSTOP"), Strings.fopGeneral.ExtendSTOP) + XMLLoadLocale(eGeneralOptions.Item("DisplayAudioLines"), Strings.fopGeneral.DisplayAudioLines) + XMLLoadLocale(eGeneralOptions.Item("SnapToVerticalPositionTemplate"), Strings.fopGeneral.SnapToVerticalPositionTemplate) + XMLLoadLocale(eGeneralOptions.Item("SnapToVerticalPositionPattern"), Strings.fopGeneral.SnapToVerticalPositionPattern) + XMLLoadLocale(eGeneralOptions.Item("MouseWheel"), Strings.fopGeneral.MouseWheel) XMLLoadLocale(eGeneralOptions.Item("TextEncoding"), Strings.fopGeneral.TextEncoding) XMLLoadLocale(eGeneralOptions.Item("PageUpDown"), Strings.fopGeneral.PageUpDown) XMLLoadLocale(eGeneralOptions.Item("MiddleButton"), Strings.fopGeneral.MiddleButton) XMLLoadLocale(eGeneralOptions.Item("MiddleButtonAuto"), Strings.fopGeneral.MiddleButtonAuto) XMLLoadLocale(eGeneralOptions.Item("MiddleButtonDrag"), Strings.fopGeneral.MiddleButtonDrag) - XMLLoadLocale(eGeneralOptions.Item("AssociateFileType"), Strings.fopGeneral.AssociateFileType) - XMLLoadLocale(eGeneralOptions.Item("MaxGridPartition"), Strings.fopGeneral.MaxGridPartition) - XMLLoadLocale(eGeneralOptions.Item("BeepWhileSaved"), Strings.fopGeneral.BeepWhileSaved) - XMLLoadLocale(eGeneralOptions.Item("ExtendBPM"), Strings.fopGeneral.ExtendBPM) - XMLLoadLocale(eGeneralOptions.Item("ExtendSTOP"), Strings.fopGeneral.ExtendSTOP) XMLLoadLocale(eGeneralOptions.Item("AutoFocusOnMouseEnter"), Strings.fopGeneral.AutoFocusOnMouseEnter) XMLLoadLocale(eGeneralOptions.Item("DisableFirstClick"), Strings.fopGeneral.DisableFirstClick) - XMLLoadLocale(eGeneralOptions.Item("AutoSave"), Strings.fopGeneral.AutoSave) - XMLLoadLocale(eGeneralOptions.Item("minutes"), Strings.fopGeneral.minutes) XMLLoadLocale(eGeneralOptions.Item("StopPreviewOnClick"), Strings.fopGeneral.StopPreviewOnClick) End If + Dim eVisualOverrideOptions As XmlElement = Root.Item("VisualOverrideOptions") + If eVisualOverrideOptions IsNot Nothing Then + XMLLoadLocale(eVisualOverrideOptions.Item("Title"), Strings.fopVisualOverride.Title) + XMLLoadLocale(eVisualOverrideOptions.Item("Add"), Strings.fopVisualOverride.Add) + XMLLoadLocale(eVisualOverrideOptions.Item("Up"), Strings.fopVisualOverride.Up) + XMLLoadLocale(eVisualOverrideOptions.Item("Down"), Strings.fopVisualOverride.Down) + XMLLoadLocale(eVisualOverrideOptions.Item("Duplicate"), Strings.fopVisualOverride.Duplicate) + XMLLoadLocale(eVisualOverrideOptions.Item("Split"), Strings.fopVisualOverride.Split) + XMLLoadLocale(eVisualOverrideOptions.Item("SemiAutoAssign"), Strings.fopVisualOverride.SemiAutoAssign) + XMLLoadLocale(eVisualOverrideOptions.Item("Remove"), Strings.fopVisualOverride.Remove) + XMLLoadLocale(eVisualOverrideOptions.Item("LoadSettingsFrom"), Strings.fopVisualOverride.LoadSettingsFrom) + XMLLoadLocale(eVisualOverrideOptions.Item("SaveSettingsTo"), Strings.fopVisualOverride.SaveSettingsTo) + XMLLoadLocale(eVisualOverrideOptions.Item("EnableItem"), Strings.fopVisualOverride.EnableItem) + XMLLoadLocale(eVisualOverrideOptions.Item("ColorS"), Strings.fopVisualOverride.ColorS) + XMLLoadLocale(eVisualOverrideOptions.Item("ColorG"), Strings.fopVisualOverride.ColorG) + XMLLoadLocale(eVisualOverrideOptions.Item("ColorGHSLU"), Strings.fopVisualOverride.ColorGHSLU) + XMLLoadLocale(eVisualOverrideOptions.Item("ColorGHSLD"), Strings.fopVisualOverride.ColorGHSLD) + XMLLoadLocale(eVisualOverrideOptions.Item("OptionName"), Strings.fopVisualOverride.OptionName) + XMLLoadLocale(eVisualOverrideOptions.Item("LabelRange"), Strings.fopVisualOverride.LabelRange) + XMLLoadLocale(eVisualOverrideOptions.Item("ToText"), Strings.fopVisualOverride.ToText) + XMLLoadLocale(eVisualOverrideOptions.Item("NoteColor"), Strings.fopVisualOverride.NoteColor) + XMLLoadLocale(eVisualOverrideOptions.Item("NoteColorRange"), Strings.fopVisualOverride.NoteColorRange) + XMLLoadLocale(eVisualOverrideOptions.Item("Preview"), Strings.fopVisualOverride.Preview) + + XMLLoadLocale(eVisualOverrideOptions.Item("Chart"), Strings.fopVisualOverride.Chart) + XMLLoadLocale(eVisualOverrideOptions.Item("Song"), Strings.fopVisualOverride.Song) + XMLLoadLocale(eVisualOverrideOptions.Item("Editor"), Strings.fopVisualOverride.Editor) + + XMLLoadLocale(eVisualOverrideOptions.Item("SplitMsgCannot"), Strings.fopVisualOverride.SplitMsgCannot) + XMLLoadLocale(eVisualOverrideOptions.Item("SplitMsgUpper"), Strings.fopVisualOverride.SplitMsgUpper) + XMLLoadLocale(eVisualOverrideOptions.Item("SplitMsgNotBetweenRange"), Strings.fopVisualOverride.SplitMsgNotBetweenRange) + + XMLLoadLocale(eVisualOverrideOptions.Item("SemiAutoMsgAssign"), Strings.fopVisualOverride.SemiAutoMsgAssign) + XMLLoadLocale(eVisualOverrideOptions.Item("SemiAutoMsgNone"), Strings.fopVisualOverride.SemiAutoMsgNone) + XMLLoadLocale(eVisualOverrideOptions.Item("SemiAutoMsgAssignMore"), Strings.fopVisualOverride.SemiAutoMsgAssignMore) + + XMLLoadLocale(eVisualOverrideOptions.Item("SaveCurrentSettings"), Strings.fopVisualOverride.SaveCurrentSettings) + XMLLoadLocale(eVisualOverrideOptions.Item("OverwriteExistingSettings"), Strings.fopVisualOverride.OverwriteExistingSettings) + End If + + Dim eKeybindingOptions As XmlElement = Root.Item("KeybindingOptions") + If eKeybindingOptions IsNot Nothing Then + XMLLoadLocale(eKeybindingOptions.Item("Title"), Strings.fopKeybinding.Title) + XMLLoadLocale(eKeybindingOptions.Item("BindingName"), Strings.fopKeybinding.BindingName) + XMLLoadLocale(eKeybindingOptions.Item("Description"), Strings.fopKeybinding.Description) + XMLLoadLocale(eKeybindingOptions.Item("Keybindings"), Strings.fopKeybinding.Keybindings) + + XMLLoadLocale(eKeybindingOptions.Item("MoveTo"), Strings.fopKeybinding.MoveTo) + XMLLoadLocale(eKeybindingOptions.Item("MoveToDescription"), Strings.fopKeybinding.MoveToDescription) + XMLLoadLocale(eKeybindingOptions.Item("MoveToScratchDescription"), Strings.fopKeybinding.MoveToScratchDescription) + XMLLoadLocale(eKeybindingOptions.Item("MoveToBGMDescription"), Strings.fopKeybinding.MoveToBGMDescription) + XMLLoadLocale(eKeybindingOptions.Item("MoveToTemplate"), Strings.fopKeybinding.MoveToTemplate) + XMLLoadLocale(eKeybindingOptions.Item("MoveToTemplateDescription"), Strings.fopKeybinding.MoveToTemplateDescription) + XMLLoadLocale(eKeybindingOptions.Item("CheckTechnicalError"), Strings.fopKeybinding.CheckTechnicalError) + XMLLoadLocale(eKeybindingOptions.Item("SelectExpansionSection"), Strings.fopKeybinding.SelectExpansionSection) + XMLLoadLocale(eKeybindingOptions.Item("PastePattern"), Strings.fopKeybinding.PastePattern) + XMLLoadLocale(eKeybindingOptions.Item("SelectHovered"), Strings.fopKeybinding.SelectHovered) + + XMLLoadLocale(eKeybindingOptions.Item("ErrorUnavailable"), Strings.fopKeybinding.ErrorUnavailable) + XMLLoadLocale(eKeybindingOptions.Item("ErrorAssigned"), Strings.fopKeybinding.ErrorAssigned) + XMLLoadLocale(eKeybindingOptions.Item("ErrorNoteAssignment"), Strings.fopKeybinding.ErrorNoteAssignment) + ReloadKeybindingNames(Keybindings) + End If + + Dim eExpandOptions As XmlElement = Root.Item("ExpandOptions") + If eExpandOptions IsNot Nothing Then + XMLLoadLocale(eExpandOptions.Item("Title"), Strings.fopExpand.Title) + XMLLoadLocale(eExpandOptions.Item("SelectExpansionCode"), Strings.fopExpand.SelectExpansionCode) + XMLLoadLocale(eExpandOptions.Item("DisplayGhostNotes"), Strings.fopExpand.DisplayGhostNotes) + XMLLoadLocale(eExpandOptions.Item("DisplayGhostNotesAll"), Strings.fopExpand.DisplayGhostNotesAll) + XMLLoadLocale(eExpandOptions.Item("ModifyNotes"), Strings.fopExpand.ModifyNotes) + XMLLoadLocale(eExpandOptions.Item("ModifySection"), Strings.fopExpand.ModifySection) + XMLLoadLocale(eExpandOptions.Item("RemoveGhostNotes"), Strings.fopExpand.RemoveGhostNotes) + XMLLoadLocale(eExpandOptions.Item("RemoveGhostNotes"), Strings.fopExpand.RemoveGhostNotes) + XMLLoadLocale(eExpandOptions.Item("ErrorEmpty"), Strings.fopExpand.ErrorEmpty) + XMLLoadLocale(eExpandOptions.Item("ErrorNoLineSelected"), Strings.fopExpand.ErrorNoLineSelected) + XMLLoadLocale(eExpandOptions.Item("ErrorNotDetected"), Strings.fopExpand.ErrorNotDetected) + End If + + Dim eTOTALTool As XmlElement = Root.Item("TOTALTool") + If eTOTALTool IsNot Nothing Then + XMLLoadLocale(eTOTALTool.Item("Title"), Strings.fopTOTAL.Title) + XMLLoadLocale(eTOTALTool.Item("CalculationOption"), Strings.fopTOTAL.CalculationOption) + XMLLoadLocale(eTOTALTool.Item("Parameters"), Strings.fopTOTAL.Parameters) + XMLLoadLocale(eTOTALTool.Item("TOTAL"), Strings.fopTOTAL.TOTAL) + XMLLoadLocale(eTOTALTool.Item("CalculationFormula"), Strings.fopTOTAL.CalculationFormula) + XMLLoadLocale(eTOTALTool.Item("IIDXTOTALSupposition1"), Strings.fopTOTAL.IIDXTOTALSupposition1) + XMLLoadLocale(eTOTALTool.Item("IIDXTOTALSupposition2"), Strings.fopTOTAL.IIDXTOTALSupposition2) + XMLLoadLocale(eTOTALTool.Item("Multiplier"), Strings.fopTOTAL.Multiplier) + XMLLoadLocale(eTOTALTool.Item("Notes"), Strings.fopTOTAL.Notes) + XMLLoadLocale(eTOTALTool.Item("GlobalMultiplier"), Strings.fopTOTAL.GlobalMultiplier) + XMLLoadLocale(eTOTALTool.Item("DecimalPlaces"), Strings.fopTOTAL.DecimalPlaces) + XMLLoadLocale(eTOTALTool.Item("DisplayValue"), Strings.fopTOTAL.DisplayValue) + XMLLoadLocale(eTOTALTool.Item("DisplayRecommendedTOTAL"), Strings.fopTOTAL.DisplayRecommendedTOTAL) + XMLLoadLocale(eTOTALTool.Item("AutofillTOTAL"), Strings.fopTOTAL.AutofillTOTAL) + End If + Dim eFind As XmlElement = Root.Item("Find") If eFind IsNot Nothing Then XMLLoadLocale(eFind.Item("NoteRange"), Strings.fFind.NoteRange) @@ -1146,6 +1681,10 @@ EndOfSub: POWaveFormPart2.Visible = xPOWaveFormPart2 End Try + For Each keybind In Keybindings + RenameShortcut(keybind) + Next + 'File.Delete(xTempFileName) End Sub @@ -1161,43 +1700,45 @@ EndOfSub: xW1 = UCase(Mid(xLine, 1, InStr(xLine, "=") - 1)) xW2 = Mid(xLine, InStr(xLine, "=") + 1) + Dim xW2Int As Integer = CInt(xW2) + Select Case xW1 - Case "VOTITLE" : vo.ColumnTitle.Color = Color.FromArgb(Val(xW2)) + Case "VOTITLE" : vo.ColumnTitle.Color = Color.FromArgb(xW2Int) Case "VOTITLEFONT" : vo.ColumnTitleFont = StringToFont(xW2, Me.Font) - Case "VOBG" : vo.Bg.Color = Color.FromArgb(Val(xW2)) - Case "VOGRID" : vo.pGrid.Color = Color.FromArgb(Val(xW2)) - Case "VOSUB" : vo.pSub.Color = Color.FromArgb(Val(xW2)) - Case "VOVLINE" : vo.pVLine.Color = Color.FromArgb(Val(xW2)) - Case "VOMLINE" : vo.pMLine.Color = Color.FromArgb(Val(xW2)) + Case "VOBG" : vo.Bg.Color = Color.FromArgb(xW2Int) + Case "VOGRID" : vo.pGrid.Color = Color.FromArgb(xW2Int) + Case "VOSUB" : vo.pSub.Color = Color.FromArgb(xW2Int) + Case "VOVLINE" : vo.pVLine.Color = Color.FromArgb(xW2Int) + Case "VOMLINE" : vo.pMLine.Color = Color.FromArgb(xW2Int) Case "VOBGMWAV" - vo.pBGMWav.Color = Color.FromArgb(Val(xW2)) + vo.pBGMWav.Color = Color.FromArgb(xW2Int) TWTransparency.Value = vo.pBGMWav.Color.A TWTransparency2.Value = vo.pBGMWav.Color.A - TWSaturation.Value = vo.pBGMWav.Color.GetSaturation * 1000 - TWSaturation2.Value = vo.pBGMWav.Color.GetSaturation * 1000 - Case "VOSELBOX" : vo.SelBox.Color = Color.FromArgb(Val(xW2)) - Case "VOPECURSOR" : vo.PECursor.Color = Color.FromArgb(Val(xW2)) - Case "VOPEHALF" : vo.PEHalf.Color = Color.FromArgb(Val(xW2)) - Case "VOPEDELTAMOUSEOVER" : vo.PEDeltaMouseOver = Val(xW2) - Case "VOPEMOUSEOVER" : vo.PEMouseOver.Color = Color.FromArgb(Val(xW2)) - Case "VOPESEL" : vo.PESel.Color = Color.FromArgb(Val(xW2)) - Case "VOPEBPM" : vo.PEBPM.Color = Color.FromArgb(Val(xW2)) + TWSaturation.Value = CDec(vo.pBGMWav.Color.GetSaturation * 1000) + TWSaturation2.Value = CInt(vo.pBGMWav.Color.GetSaturation * 1000) + Case "VOSELBOX" : vo.SelBox.Color = Color.FromArgb(xW2Int) + Case "VOPECURSOR" : vo.PECursor.Color = Color.FromArgb(xW2Int) + Case "VOPEHALF" : vo.PEHalf.Color = Color.FromArgb(xW2Int) + Case "VOPEDELTAMOUSEOVER" : vo.PEDeltaMouseOver = xW2Int + Case "VOPEMOUSEOVER" : vo.PEMouseOver.Color = Color.FromArgb(xW2Int) + Case "VOPESEL" : vo.PESel.Color = Color.FromArgb(xW2Int) + Case "VOPEBPM" : vo.PEBPM.Color = Color.FromArgb(xW2Int) Case "VOPEBPMFONT" : vo.PEBPMFont = StringToFont(xW2, Me.Font) - Case "VKHEIGHT" : vo.kHeight = Val(xW2) + Case "VKHEIGHT" : vo.kHeight = xW2Int Case "VKFONT" : vo.kFont = StringToFont(xW2, Me.Font) Case "VKMFONT" : vo.kMFont = StringToFont(xW2, Me.Font) - Case "VKLABELVSHIFT" : vo.kLabelVShift = Val(xW2) - Case "VKLABELHSHIFT" : vo.kLabelHShift = Val(xW2) - Case "VKLABELHSHIFTL" : vo.kLabelHShiftL = Val(xW2) - Case "VKMOUSEOVER" : vo.kMouseOver.Color = Color.FromArgb(Val(xW2)) - Case "VKMOUSEOVERE " : vo.kMouseOverE.Color = Color.FromArgb(Val(xW2)) - Case "VKSELECTED" : vo.kSelected.Color = Color.FromArgb(Val(xW2)) - 'Case "VKHIDTRANSPARENCY" : vo.kOpacity = Val(xW2) + Case "VKLABELVSHIFT" : vo.kLabelVShift = xW2Int + Case "VKLABELHSHIFT" : vo.kLabelHShift = xW2Int + Case "VKLABELHSHIFTL" : vo.kLabelHShiftL = xW2Int + Case "VKMOUSEOVER" : vo.kMouseOver.Color = Color.FromArgb(xW2Int) + Case "VKMOUSEOVERE " : vo.kMouseOverE.Color = Color.FromArgb(xW2Int) + Case "VKSELECTED" : vo.kSelected.Color = Color.FromArgb(xW2Int) + 'Case "VKHIDTRANSPARENCY" : vo.kOpacity = xW2Int Case "KLENGTH" Dim xE() As String = LoadThemeComptability_SplitStringInto26Parts(xW2) For i As Integer = 0 To 26 - column(i).Width = Val(xE(i)) + column(i).Width = CInt(xE(i)) Next Case "KTITLE" @@ -1209,31 +1750,31 @@ EndOfSub: Case "KCOLOR" Dim xE() As String = LoadThemeComptability_SplitStringInto26Parts(xW2) For i As Integer = 0 To 26 - column(i).setNoteColor(Val(xE(i))) + column(i).setNoteColor(CInt(xE(i))) Next Case "KCOLORL" Dim xE() As String = LoadThemeComptability_SplitStringInto26Parts(xW2) For i As Integer = 0 To 26 - column(i).setLNoteColor(Val(xE(i))) + column(i).setLNoteColor(CInt(xE(i))) Next Case "KFORECOLOR" Dim xE() As String = LoadThemeComptability_SplitStringInto26Parts(xW2) For i As Integer = 0 To 26 - column(i).cText = Color.FromArgb(Val(xE(i))) + column(i).cText = Color.FromArgb(CInt(xE(i))) Next Case "KFORECOLORL" Dim xE() As String = LoadThemeComptability_SplitStringInto26Parts(xW2) For i As Integer = 0 To 26 - column(i).cLText = Color.FromArgb(Val(xE(i))) + column(i).cLText = Color.FromArgb(CInt(xE(i))) Next Case "KBGCOLOR" Dim xE() As String = LoadThemeComptability_SplitStringInto26Parts(xW2) For i As Integer = 0 To 26 - column(i).cBG = Color.FromArgb(Val(xE(i))) + column(i).cBG = Color.FromArgb(CInt(xE(i))) Next End Select @@ -1256,7 +1797,8 @@ EndOfSub: End Function Private Sub LoadLang(ByVal sender As System.Object, ByVal e As System.EventArgs) - Dim xFN2 As String = sender.ToolTipText + Dim LangS As ToolStripItem = CType(sender, ToolStripItem) + Dim xFN2 As String = LangS.ToolTipText 'ReadLanguagePack(xFN2) LoadLocale(xFN2) End Sub @@ -1285,7 +1827,73 @@ EndOfSub: 'If Not File.Exists(My.Application.Info.DirectoryPath & "\Data\" & sender.Text) Then Exit Sub 'SaveTheme = True 'LoadCFF(My.Computer.FileSystem.ReadAllText(My.Application.Info.DirectoryPath & "\Theme\" & sender.Text, System.Text.Encoding.Unicode)) - LoadSettings(My.Application.Info.DirectoryPath & "\Data\" & sender.Text) + Dim ThemeS As ToolStripItem = CType(sender, ToolStripItem) + LoadSettings(My.Application.Info.DirectoryPath & "\Data\" & ThemeS.Text) RefreshPanelAll() End Sub + + Private Sub LoadColorOverride(ByVal Path As String) + Dim F As String = ColorOverridePath(Path) + + If My.Computer.FileSystem.FileExists(F) Then + + Dim Doc As New XmlDocument + Dim FileStream As New IO.FileStream(F, FileMode.Open, FileAccess.Read) + Doc.Load(FileStream) + + Dim Root As XmlElement = Doc.Item("ColorOverride") + + Dim n As Integer = CInt(Root.GetAttribute("Count")) + ReDim COverrides(n) + Dim i As Integer + For Each eColor As XmlElement In Root.ChildNodes + With eColor + XMLLoadAttribute(.GetAttribute("Index"), i) + XMLLoadAttribute(.GetAttribute("Name"), COverrides(i).Name) + XMLLoadAttribute(.GetAttribute("Enabled"), COverrides(i).Enabled) + XMLLoadAttribute(.GetAttribute("ColorOption"), COverrides(i).ColorOption) + XMLLoadAttribute(.GetAttribute("RangeL"), COverrides(i).RangeL) + XMLLoadAttribute(.GetAttribute("RangeU"), COverrides(i).RangeU) + XMLLoadAttribute(.GetAttribute("NoteColor"), COverrides(i).NoteColor) + XMLLoadAttribute(.GetAttribute("NoteColorU"), COverrides(i).NoteColorU) + End With + Next + FileStream.Close() + Else + ReDim COverrides(-1) + End If + LoadColorOverrideActive() + End Sub + + Private Sub LoadColorOverrideActive() + For xIN = 1 To UBound(COverridesColors) + COverridesColors(xIN) = Color.Empty + For xICO = 0 To UBound(COverrides) + If Not COverrides(xICO).Enabled Then Continue For + Dim CORangeL = COverrides(xICO).RangeL + Dim CORangeU = COverrides(xICO).RangeU + Dim CONoteColor = COverrides(xICO).NoteColor + Dim CONoteColorU = COverrides(xICO).NoteColorU + If xIN >= CORangeL AndAlso xIN <= CORangeU Then + Select Case COverrides(xICO).ColorOption + Case 0 + COverridesColors(xIN) = Color.FromArgb(CONoteColor) + Exit For + Case 1 + Dim CORange = Math.Max(1, CORangeU - CORangeL) + COverridesColors(xIN) = InterpolateColorARGB(Color.FromArgb(CONoteColor), Color.FromArgb(CONoteColorU), (xIN - CORangeL) / CORange) + Exit For + Case 2 + Dim CORange = Math.Max(1, CORangeU - CORangeL) + COverridesColors(xIN) = InterpolateColorAHSL(Color.FromArgb(CONoteColor), Color.FromArgb(CONoteColorU), (xIN - CORangeL) / CORange) + Exit For + Case 3 + Dim CORange = Math.Max(1, CORangeU - CORangeL) + COverridesColors(xIN) = InterpolateColorAHSL(Color.FromArgb(CONoteColor), Color.FromArgb(CONoteColorU), (xIN - CORangeL) / CORange, , 0) + Exit For + End Select + End If + Next + Next + End Sub End Class diff --git a/iBMSC/EditorRecent.vb b/iBMSC/EditorRecent.vb index 8f4f52ab7..bbd8e265c 100644 --- a/iBMSC/EditorRecent.vb +++ b/iBMSC/EditorRecent.vb @@ -3,6 +3,9 @@ Dim xAlreadyExists As Boolean = False Dim xI1 As Integer + ' Check if it's ___TempRandom.bms + If xFileName.StartsWith("___TempRandom") Then Exit Sub + For xI1 = 0 To 4 If Recent(xI1) = xFileName Then xAlreadyExists = True @@ -45,8 +48,8 @@ Case Else : Return End Select - xTBOpenR.Text = IIf(Text = "", "<" & Strings.None & ">", GetFileName(Text)) : xTBOpenR.ToolTipText = Text : xTBOpenR.Enabled = Not Text = "" - xmnOpenR.Text = IIf(Text = "", "<" & Strings.None & ">", GetFileName(Text)) : xmnOpenR.ToolTipText = Text : xmnOpenR.Enabled = Not Text = "" + xTBOpenR.Text = IIf(Text = "", "<" & Strings.None & ">", GetFileName(Text)).ToString() : xTBOpenR.ToolTipText = Text : xTBOpenR.Enabled = Not Text = "" + xmnOpenR.Text = IIf(Text = "", "<" & Strings.None & ">", GetFileName(Text)).ToString() : xmnOpenR.ToolTipText = Text : xmnOpenR.Enabled = Not Text = "" End Sub Private Sub OpenRecent(ByVal xFileName As String) @@ -57,22 +60,10 @@ MsgBox(Strings.Messages.CannotFind.Replace("{}", xFileName), MsgBoxStyle.Critical) Exit Sub End If - If ClosingPopSave() Then Exit Sub - Select Case UCase(Path.GetExtension(xFileName)) - Case ".BMS", ".BME", ".BML", ".PMS", ".TXT" - InitPath = ExcludeFileName(xFileName) - SetFileName(xFileName) - ClearUndo() - OpenBMS(My.Computer.FileSystem.ReadAllText(xFileName, TextEncoding)) - SetFileName(FileName) - SetIsSaved(True) - Case ".IBMSC" - InitPath = ExcludeFileName(xFileName) - SetFileName("Imported_" & GetFileName(xFileName)) - OpeniBMSC(xFileName) - SetIsSaved(False) - End Select + SaveBMSStruct() + Dim xProg As New fLoadFileProgress(xFileName) + xProg.ShowDialog(Me) End Sub Private Sub TBOpenR0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBOpenR0.Click, mnOpenR0.Click diff --git a/iBMSC/EditorUndoRedo.vb b/iBMSC/EditorUndoRedo.vb index 9a4676bf3..021ffd761 100644 --- a/iBMSC/EditorUndoRedo.vb +++ b/iBMSC/EditorUndoRedo.vb @@ -12,16 +12,16 @@ Partial Public Class MainWindow Select Case xType Case UndoRedo.opAddNote - Dim xCmd As UndoRedo.AddNote = sCmd + Dim xCmd As UndoRedo.AddNote = CType(sCmd, UndoRedo.AddNote) ReDim Preserve Notes(UBound(Notes) + 1) Notes(UBound(Notes)) = xCmd.note If TBWavIncrease.Checked Then - IncreaseCurrentWav() + IncreaseCurrentWAV() End If Case UndoRedo.opRemoveNote - Dim xCmd As UndoRedo.RemoveNote = sCmd + Dim xCmd As UndoRedo.RemoveNote = CType(sCmd, UndoRedo.RemoveNote) Dim xI2 As Integer = FindNoteIndex(xCmd.note) If xI2 < Notes.Length Then @@ -32,11 +32,11 @@ Partial Public Class MainWindow End If If TBWavIncrease.Checked Then - DecreaseCurrentWav() + DecreaseCurrentWAV() End If Case UndoRedo.opChangeNote - Dim xCmd As UndoRedo.ChangeNote = sCmd + Dim xCmd As UndoRedo.ChangeNote = CType(sCmd, UndoRedo.ChangeNote) Dim xI2 As Integer = FindNoteIndex(xCmd.note) If xI2 < Notes.Length Then @@ -44,7 +44,7 @@ Partial Public Class MainWindow End If Case UndoRedo.opMoveNote - Dim xCmd As UndoRedo.MoveNote = sCmd + Dim xCmd As UndoRedo.MoveNote = CType(sCmd, UndoRedo.MoveNote) Dim xI2 As Integer = FindNoteIndex(xCmd.note) If xI2 < Notes.Length Then @@ -56,7 +56,7 @@ Partial Public Class MainWindow End If Case UndoRedo.opLongNoteModify - Dim xCmd As UndoRedo.LongNoteModify = sCmd + Dim xCmd As UndoRedo.LongNoteModify = CType(sCmd, UndoRedo.LongNoteModify) Dim xI2 As Integer = FindNoteIndex(xCmd.note) If xI2 < Notes.Length Then @@ -65,14 +65,14 @@ Partial Public Class MainWindow .VPosition = xCmd.NVPosition .Length = xCmd.NLongNote Else - .LongNote = xCmd.NLongNote + .LongNote = CBool(xCmd.NLongNote) End If .Selected = xCmd.note.Selected And nEnabled(.ColumnIndex) End With End If Case UndoRedo.opHiddenNoteModify - Dim xCmd As UndoRedo.HiddenNoteModify = sCmd + Dim xCmd As UndoRedo.HiddenNoteModify = CType(sCmd, UndoRedo.HiddenNoteModify) Dim xI2 As Integer = FindNoteIndex(xCmd.note) If xI2 < Notes.Length Then @@ -81,7 +81,7 @@ Partial Public Class MainWindow End If Case UndoRedo.opRelabelNote - Dim xCmd As UndoRedo.RelabelNote = sCmd + Dim xCmd As UndoRedo.RelabelNote = CType(sCmd, UndoRedo.RelabelNote) Dim xI2 As Integer = FindNoteIndex(xCmd.note) If xI2 < Notes.Length Then @@ -93,25 +93,35 @@ Partial Public Class MainWindow ReDim Preserve Notes(0) Case UndoRedo.opChangeMeasureLength - Dim xCmd As UndoRedo.ChangeMeasureLength = sCmd + Dim xCmd As UndoRedo.ChangeMeasureLength = CType(sCmd, UndoRedo.ChangeMeasureLength) Dim xxD As Long = GetDenominator(xCmd.Value / 192) 'Dim xDenom As Integer = 192 / GCD(xCmd.Value, 192.0R) 'If xDenom < 4 Then xDenom = 4 For Each xM As Integer In xCmd.Indices MeasureLength(xM) = xCmd.Value - LBeat.Items(xM) = Add3Zeros(xM) & ": " & (xCmd.Value / 192) & IIf(xxD > 10000, "", " ( " & CLng(xCmd.Value / 192 * xxD) & " / " & xxD & " ) ") + LBeat.Items(xM) = Add3Zeros(xM) & ": " & (xCmd.Value / 192) & IIf(xxD > 10000, "", " ( " & CLng(xCmd.Value / 192 * xxD) & " / " & xxD & " ) ").ToString() LBeat.SelectedIndices.Add(xM) Next UpdateMeasureBottom() + Case UndoRedo.opChangeMeasure + Dim xCmd As UndoRedo.ChangeMeasure = CType(sCmd, UndoRedo.ChangeMeasure) + For xIM = 0 To UBound(xCmd.MeasureLength) + MeasureLength(xIM) = xCmd.MeasureLength(xIM) + Dim a As Double = MeasureLength(xIM) / 192.0R + Dim xxD = GetDenominator(a) + LBeat.Items(xIM) = Add3Zeros(xIM) & ": " & a & IIf(xxD > 10000, "", " ( " & CLng(a * xxD) & " / " & xxD & " ) ").ToString() + Next + UpdateMeasureBottom() + Case UndoRedo.opChangeTimeSelection - Dim xCmd As UndoRedo.ChangeTimeSelection = sCmd + Dim xCmd As UndoRedo.ChangeTimeSelection = CType(sCmd, UndoRedo.ChangeTimeSelection) vSelStart = xCmd.SelStart vSelLength = xCmd.SelLength vSelHalf = xCmd.SelHalf If xCmd.Selected Then - Dim xSelLo As Double = vSelStart + IIf(vSelLength < 0, vSelLength, 0) - Dim xSelHi As Double = vSelStart + IIf(vSelLength > 0, vSelLength, 0) + Dim xSelLo As Double = vSelStart + CDbl(IIf(vSelLength < 0, vSelLength, 0)) + Dim xSelHi As Double = vSelStart + CDbl(IIf(vSelLength > 0, vSelLength, 0)) For xI2 As Integer = 1 To UBound(Notes) Notes(xI2).Selected = Notes(xI2).VPosition >= xSelLo AndAlso Notes(xI2).VPosition < xSelHi AndAlso @@ -120,13 +130,10 @@ Partial Public Class MainWindow End If Case UndoRedo.opNT - Dim xCmd As UndoRedo.NT = sCmd + Dim xCmd As UndoRedo.NT = CType(sCmd, UndoRedo.NT) NTInput = xCmd.BecomeNT - TBNTInput.Checked = NTInput - mnNTInput.Checked = NTInput + RefreshItemsByNTInput() - POBLong.Enabled = Not NTInput - POBLongShort.Enabled = Not NTInput bAdjustLength = False bAdjustUpper = False @@ -134,7 +141,7 @@ Partial Public Class MainWindow If NTInput Then ConvertBMSE2NT() Else ConvertNT2BMSE() End If Case UndoRedo.opWavAutoincFlag - Dim xcmd As UndoRedo.WavAutoincFlag = sCmd + Dim xcmd As UndoRedo.WavAutoincFlag = CType(sCmd, UndoRedo.WavAutoincFlag) TBWavIncrease.Checked = xcmd.Checked Case UndoRedo.opVoid @@ -147,7 +154,7 @@ Partial Public Class MainWindow sCmd = sCmd.Next Loop - THBPM.Value = Notes(0).Value / 10000 + THBPM.Value = CDec(Notes(0).Value / 10000) If IsSaved Then SetIsSaved(False) SortByVPositionInsertion() @@ -183,8 +190,8 @@ Partial Public Class MainWindow ' ClearURReference(sRedo(xI1)) 'Next - ReDim sUndo(99) - ReDim sRedo(99) + ReDim sUndo(UndoRedoCount) + ReDim sRedo(UndoRedoCount) sUndo(0) = New UndoRedo.NoOperation sUndo(1) = New UndoRedo.NoOperation sRedo(0) = New UndoRedo.NoOperation @@ -226,9 +233,9 @@ Partial Public Class MainWindow Dim xUndo As New UndoRedo.RemoveNote(Notes(xI1)) Dim xRedo As New UndoRedo.AddNote(Notes(xI1)) xUndo.Next = BaseUndo - BaseUndo = xUndo - If BaseRedo IsNot Nothing Then BaseRedo.Next = xRedo - BaseRedo = xRedo + BaseUndo = xUndo + If BaseRedo IsNot Nothing Then BaseRedo.Next = xRedo + BaseRedo = xRedo Next End Sub @@ -238,7 +245,7 @@ Partial Public Class MainWindow Dim xRedo As New UndoRedo.AddNote(Notes(xI1)) If BaseRedo IsNot Nothing Then BaseRedo.Next = xRedo - BaseRedo = xRedo + BaseRedo = xRedo Next Dim xUndo As New UndoRedo.RemoveAllNotes @@ -269,7 +276,7 @@ Partial Public Class MainWindow Private Sub RedoRemoveNoteSelected(ByVal xSel As Boolean, ByRef BaseUndo As UndoRedo.LinkedURCmd, ByRef BaseRedo As UndoRedo.LinkedURCmd) For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For Dim xUndo As New UndoRedo.AddNote(Notes(xI1)) Dim xRedo As New UndoRedo.RemoveNote(Notes(xI1)) xUndo.Next = BaseUndo @@ -328,6 +335,19 @@ Partial Public Class MainWindow BaseRedo = xRedo End Sub + Private Sub RedoLongNoteModify(note As Note, nVPos As Double, nLongB As Boolean, ByRef BaseUndo As UndoRedo.LinkedURCmd, ByRef BaseRedo As UndoRedo.LinkedURCmd) + Dim n = note + n.VPosition = nVPos + n.LongNote = nLongB + + Dim xUndo As New UndoRedo.LongNoteModify(n, note.VPosition, note.Length) + Dim xRedo As New UndoRedo.LongNoteModify(note, nVPos, n.Length) + xUndo.Next = BaseUndo + BaseUndo = xUndo + If BaseRedo IsNot Nothing Then BaseRedo.Next = xRedo + BaseRedo = xRedo + End Sub + Private Sub RedoHiddenNoteModify(xN As Note, nHide As Boolean, xSel As Boolean, ByRef BaseUndo As UndoRedo.LinkedURCmd, ByRef BaseRedo As UndoRedo.LinkedURCmd) Dim noteAfterModification = xN noteAfterModification.Hidden = nHide @@ -378,7 +398,16 @@ Partial Public Class MainWindow xUndo(UBound(xUndo)).Next = BaseUndo BaseUndo = xUndo(0) - Dim xRedo As New UndoRedo.ChangeMeasureLength(nVal, xIndices.Clone) + Dim xRedo As New UndoRedo.ChangeMeasureLength(nVal, CType(xIndices.Clone(), Integer())) + If BaseRedo IsNot Nothing Then BaseRedo.Next = xRedo + BaseRedo = xRedo + End Sub + + Private Sub RedoChangeMeasure(ByVal MeasureLength0() As Double, ByVal MeasureLength1() As Double, ByRef BaseUndo As UndoRedo.LinkedURCmd, ByRef BaseRedo As UndoRedo.LinkedURCmd) + Dim xUndo As New UndoRedo.ChangeMeasure(MeasureLength0) + Dim xRedo As New UndoRedo.ChangeMeasure(MeasureLength1) + xUndo.Next = BaseUndo + BaseUndo = xUndo If BaseRedo IsNot Nothing Then BaseRedo.Next = xRedo BaseRedo = xRedo End Sub diff --git a/iBMSC/FileTab.vb b/iBMSC/FileTab.vb new file mode 100644 index 000000000..4b7a5bdea --- /dev/null +++ b/iBMSC/FileTab.vb @@ -0,0 +1,418 @@ +Imports System.Linq +Imports iBMSC.Editor + +Partial Public Class MainWindow + + ' BMS File tabs + ''' + ''' Everything related to file tabs are put here. + ''' + ''' Currently, Untitled.bms must be at the last of the tab list. + ''' + + Dim BMSFiles As BMSFile() + Dim BMSFileIndex As Integer = 0 + + ''' + ''' Info about a BMS File. + ''' + + Structure BMSFile + Public Filename As String + Public RandomSource As String + Public Struct As BMSStruct + + Public TSB As ToolStripButton + Public TabColor As Color + + ''' Filename. + ''' Source filename to edit #RANDOM section for. + ''' BMS Structure with all information about a chart such as notes and #WAV list. + ''' Tool strip button, or a tab. + ''' Color of the tab (when unchecked). + Public Sub New(xFilename As String, xTSB As ToolStripButton, xTabColor As Color, Optional xStruct As BMSStruct = Nothing) + Filename = xFilename + Struct = xStruct + + TSB = xTSB + TabColor = xTabColor + End Sub + + Public Sub AddRandomSource(xPath As String) + RandomSource = xPath + End Sub + + Public Function IsInitialized() As Boolean + Return Struct.Notes IsNot Nothing + End Function + + Public Function IsSaved() As Boolean + If IsInitialized() Then + Return Struct.IsSaved + Else + Return True + End If + End Function + End Structure + + Structure BMSStruct + Public Notes() As Note + Public NotesTemplate() As Note + Public hWAV() As String + Public hBMP() As String + Public hBPM() As Long + Public hSTOP() As Long + Public hBMSCROLL() As Long + Public hCOM() As String + Public wLWAV() As WavSample + Public HeaderT() As String ' Text + Public HeaderN() As Decimal ' Numeric + Public HeaderI() As Integer ' Integer + Public Expansion As String + Public MeasureLength() As Double + Public FileNameTemplate As String + + Public ExpansionSplit() As String + Public GhostMode As Integer + + Public sUndo() As UndoRedo.LinkedURCmd + Public sRedo() As UndoRedo.LinkedURCmd + Public sI As Integer + + Public ExpansionEnabled As Boolean + Public IsSaved As Boolean + Public NTInput As Boolean + Public WaveformLoaded As Boolean + + Public Sub New(xNotes() As Note, xNotesTemplate() As Note, + xWAV() As String, xBMP() As String, xBPM() As Long, xSTOP() As Long, xBMSCROLL() As Long, xCOM() As String, xLWAV() As WavSample, + xHeaderT() As String, xHeaderN() As Decimal, xHeaderI() As Integer, xExpansion As String, xMeasureLength() As Double, xFileNameTemplate As String, + xExpansionSplit() As String, xGhostMode As Integer, + xUndo() As UndoRedo.LinkedURCmd, xRedo() As UndoRedo.LinkedURCmd, xSI As Integer, + xExpansionEnabled As Boolean, xIsSaved As Boolean, xNTInput As Boolean, xWaveformLoaded As Boolean) + + Notes = xNotes + NotesTemplate = xNotesTemplate + hWAV = xWAV + hBMP = xBMP + hBPM = xBPM + hSTOP = xSTOP + hBMSCROLL = xBMSCROLL + hCOM = xCOM + wLWAV = xLWAV + HeaderT = xHeaderT + HeaderN = xHeaderN + HeaderI = xHeaderI + Expansion = xExpansion + MeasureLength = xMeasureLength + FileNameTemplate = xFileNameTemplate + + ExpansionSplit = xExpansionSplit + GhostMode = xGhostMode + + sUndo = xUndo + sRedo = xRedo + sI = xSI + + ExpansionEnabled = xExpansionEnabled + IsSaved = xIsSaved + NTInput = xNTInput + WaveformLoaded = xWaveformLoaded + End Sub + End Structure + + Private Function TBClose_Click(sender As Object, e As EventArgs) As Boolean Handles mnClose.Click + If ClosingPopSave() Then Return False + + If BMSFileIndex = UBound(BMSFiles) Or BMSFileIndex = -1 Then TBNew_Click(Nothing, Nothing) : Return False + + If BMSFiles(BMSFileIndex).RandomSource IsNot Nothing Then + CloseFileWithRandomSource() + + Else + Dim xIRemove As Integer = BMSFileIndex + TBTab_Click(BMSFiles(BMSFileIndex + 1).TSB, New EventArgs) + RemoveBMSFile(xIRemove) + SetBMSFileIndex(xIRemove) + + End If + + Return True + End Function + + Private Sub TBTab_Click(sender As Object, e As EventArgs) + Dim TSBS As ToolStripButton = CType(sender, ToolStripButton) + If TSBS.Checked Then Exit Sub + + TimerPreviewNote.Enabled = False + SaveBMSStruct() + + Dim i As Integer = FindBMSTabIndex(TSBS) + SetBMSFileIndex(i) + + If BMSFiles(BMSFileIndex).IsInitialized Then + SetFileName(BMSFiles(BMSFileIndex).Filename) + LoadBMSStruct(BMSFileIndex) + ElseIf BMSFiles(BMSFileIndex).Filename = FileNameInit Then + TBNew_Click(Nothing, Nothing) + Else + ReadFile(BMSFiles(BMSFileIndex).Filename) + End If + End Sub + + Private Sub TBTab_MouseDown(sender As Object, e As MouseEventArgs) + Dim TSBCurrent = BMSFiles(BMSFileIndex).TSB + Dim TSBSender = CType(sender, ToolStripButton) + Dim xIClicked = FindBMSTabIndex(TSBSender) + + If e.Button = MouseButtons.Middle Then + If xIClicked = BMSFileIndex Then + TBClose_Click(Nothing, Nothing) + + Else + TBTab_Click(BMSFiles(xIClicked).TSB, New EventArgs) + TBClose_Click(Nothing, Nothing) + TBTab_Click(TSBCurrent, New EventArgs) + + End If + + ElseIf e.Button = MouseButtons.Right Then + Dim xColorPicker As New ColorPicker + xColorPicker.SetOrigColor(TSBSender.BackColor) + If xColorPicker.ShowDialog(Me) = Windows.Forms.DialogResult.Cancel Then Exit Sub + ColorTSBChange(TSBSender, xColorPicker.NewColor) + BMSFiles(xIClicked).TabColor = xColorPicker.NewColor + End If + End Sub + + Private Sub TBTab_MouseMove(sender As Object, e As MouseEventArgs) + Dim TSBS = CType(sender, ToolStripButton) + Dim xITab = FindBMSTabIndex(TSBS) + If Not BMSFiles(xITab).IsInitialized Then Exit Sub + Dim BannerDir = ExcludeFileName(BMSFiles(xITab).Filename) & "\" & BMSFiles(xITab).Struct.HeaderT(8) + If Not My.Computer.FileSystem.FileExists(BannerDir) Then + BannerDir = ExcludeFileName(BMSFiles(xITab).Filename) & "\" & BMSFiles(xITab).Struct.HeaderT(7) + If Not My.Computer.FileSystem.FileExists(BannerDir) Then Exit Sub + End If + + With PBOnTabHover + .Image = New Bitmap(BannerDir) + .Size = .Image.Size + ' .Location = e.Location + ' .Parent = Me + .Visible = True + End With + End Sub + + Private Sub TBTab_MouseLeave(sender As Object, e As EventArgs) + PBOnTabHover.Visible = False + End Sub + + Public Sub AddBMSFiles(xPaths As String()) + For xI = 0 To UBound(xPaths) + NewRecent(xPaths(xI)) + AddBMSFile(xPaths(xI)) + Next + End Sub + + Public Sub AddBMSFiles(xPaths As String) + NewRecent(xPaths) + AddBMSFile(xPaths) + End Sub + + Private Sub AddBMSFile(xPath As String) + Dim i As Integer = FindBMSTabIndex(xPath) + If i <> -1 Then + SetBMSFileIndex(i) + + Else + If BMSFileIndex = UBound(BMSFiles) AndAlso xPath <> FileNameInit Then BMSFileIndex -= 1 + ReDim Preserve BMSFiles(BMSFiles.Length) + + For xI = UBound(BMSFiles) - 1 To BMSFileIndex + 1 Step -1 + BMSFiles(xI + 1) = BMSFiles(xI) + Next + + BMSFileIndex += 1 + With BMSFiles(BMSFileIndex) + .Filename = xPath + .TabColor = System.Drawing.SystemColors.Control + .TSB = NewBMSTab(xPath) + .Struct = Nothing + End With + + ' Re-add buttons to TBTab + For i = 1 To TBTab.Items.Count + TBTab.Items.RemoveAt(0) + Next + For i = 0 To UBound(BMSFiles) + TBTab.Items.Add(BMSFiles(i).TSB) + Next + SetBMSFileIndex(BMSFileIndex) + End If + End Sub + + Private Sub ColorTSBChange(ByVal xTSB As ToolStripButton, ByVal c As Color) ' Copied from OpPlayer + xTSB.BackColor = c + xTSB.ForeColor = CType(IIf(CInt(c.GetBrightness * 255) + 255 - c.A >= 128, Color.Black, Color.White), Color) + End Sub + + Private Function FindBMSTabIndex(ByVal xTSB As ToolStripButton) As Integer + For i = 0 To UBound(BMSFiles) + If BMSFiles(i).TSB Is xTSB Then Return i + Next + Return -1 + End Function + + Private Function FindBMSTabIndex(ByVal xStr As String) As Integer + For i = 0 To UBound(BMSFiles) + If BMSFiles(i).Filename = xStr Then Return i + Next + Return -1 + End Function + + Private Sub InitializeBMSFiles() + If BMSFiles IsNot Nothing Then + Dim BMSFileListCheck(UBound(BMSFiles)) As BMSFile + Dim i = -1 + For Each BMS In BMSFiles + If My.Computer.FileSystem.FileExists(BMS.Filename) OrElse BMS.Filename = FileNameInit Then + i += 1 + BMSFileListCheck(i) = BMS + End If + Next + BMSFiles = CType(BMSFileListCheck.Clone(), BMSFile()) + ReDim Preserve BMSFiles(i) + Else + ReDim BMSFiles(0) + BMSFiles(0) = New BMSFile(FileNameInit, NewBMSTab(FileNameInit), System.Drawing.SystemColors.Control) + End If + End Sub + + Private Function NewBMSTab(xPath As String) As ToolStripButton ' Optional xColor as Color = Color.Empty is not accepted + Dim xTSB As New ToolStripButton + With xTSB + .Image = My.Resources.x16Blank + .Name = GetFileName(xPath) + .Text = GetFileName(xPath) + End With + AddHandler xTSB.Click, AddressOf TBTab_Click + AddHandler xTSB.MouseDown, AddressOf TBTab_MouseDown + AddHandler xTSB.MouseMove, AddressOf TBTab_MouseMove + AddHandler xTSB.MouseLeave, AddressOf TBTab_MouseLeave + Return xTSB + End Function + + Private Sub RemoveBMSFile(xI As Integer) + For i = xI To UBound(BMSFiles) - 1 + BMSFiles(i) = BMSFiles(i + 1) + Next + ReDim Preserve BMSFiles(UBound(BMSFiles) - 1) + TBTab.Items.RemoveAt(xI) + End Sub + + Private Sub SetBMSFileIndex(xI As Integer) + BMSFileIndex = xI + For i = 0 To UBound(BMSFiles) + If i = BMSFileIndex Then + BMSFiles(i).TSB.Checked = True + Else + BMSFiles(i).TSB.Checked = False + End If + Next + End Sub + + Private Sub SaveBMSStruct(Optional xI As Integer = -1) + If xI = -1 Then xI = BMSFileIndex + ' Console.WriteLine(FileName) + ' Console.WriteLine(MeasureLength(0)) + ' If BMSFileStructs(0).MeasureLength IsNot Nothing Then Console.WriteLine("BMSStruct 0, MeasureLength 0: " & BMSFileStructs(0).MeasureLength(0)) + Dim HeaderT() As String = {THTitle.Text, THArtist.Text, THGenre.Text, THPlayLevel.Text, THTotal.Text, + THSubTitle.Text, THSubArtist.Text, THStageFile.Text, THBanner.Text, THBackBMP.Text, THExRank.Text, THComment.Text} + Dim HeaderN() As Decimal = {THBPM.Value} + Dim HeaderI() As Integer = {CHPlayer.SelectedIndex, CHRank.SelectedIndex, CHDifficulty.SelectedIndex, CHLnObj.SelectedIndex} + + BMSFiles(xI).Struct = New BMSStruct(Notes, NotesTemplate, + hWAV, hBMP, hBPM, hSTOP, hBMSCROLL, hCOM, wLWAV, + HeaderT, HeaderN, HeaderI, TExpansion.Text, MeasureLength, FileNameTemplate, + ExpansionSplit, GhostMode, + sUndo, sRedo, sI, + TExpansion.Enabled, IsSaved, NTInput, WaveformLoaded) + + End Sub + + Private Sub SaveAllBMSStruct() + For i = 0 To UBound(BMSFiles) - 1 + ReadFile(BMSFiles(i).Filename, False) + SaveBMSStruct(i) + Next + End Sub + + Private Sub LoadBMSStruct(Optional xI As Integer = -1) + If xI = -1 Then xI = BMSFileIndex + + With BMSFiles(xI).Struct + Notes = .Notes + NotesTemplate = .NotesTemplate + + hWAV = .hWAV + hBMP = .hBMP + hBPM = .hBPM + hSTOP = .hSTOP + hBMSCROLL = .hBMSCROLL + hCOM = .hCOM + wLWAV = .wLWAV + + THTitle.Text = .HeaderT(0) + THArtist.Text = .HeaderT(1) + THGenre.Text = .HeaderT(2) + THPlayLevel.Text = .HeaderT(3) + THTotal.Text = .HeaderT(4) + THSubTitle.Text = .HeaderT(5) + THSubArtist.Text = .HeaderT(6) + THStageFile.Text = .HeaderT(7) + THBanner.Text = .HeaderT(8) + THBackBMP.Text = .HeaderT(9) + THExRank.Text = .HeaderT(10) + THComment.Text = .HeaderT(11) + + THBPM.Value = .HeaderN(0) + + CHPlayer.SelectedIndex = .HeaderI(0) + CHRank.SelectedIndex = .HeaderI(1) + CHDifficulty.SelectedIndex = .HeaderI(2) + CHLnObj.SelectedIndex = .HeaderI(3) + + TExpansion.Text = .Expansion + MeasureLength = .MeasureLength + FileNameTemplate = .FileNameTemplate + + ExpansionSplit = .ExpansionSplit + GhostMode = .GhostMode + + sUndo = .sUndo + sRedo = .sRedo + sI = .sI + + TExpansion.Enabled = .ExpansionEnabled + IsSaved = .IsSaved + NTInput = .NTInput + WaveformLoaded = .WaveformLoaded + End With + + If Not WaveformLoaded AndAlso ShowWaveform Then WaveformLoadId = 1 : TimerLoadWaveform.Enabled = True + SetIsSaved(IsSaved) + + LWAVRefresh() ' P: Wow why does refreshing this list take so damn long + LBMPRefresh() ' P: Likely this too + LBeatRefresh() + RefreshItemsByNTInput() + + LoadColorOverride(FileName) + UpdateMeasureBottom() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + RefreshPanelAll() + POStatusRefresh() + End Sub +End Class diff --git a/iBMSC/ImageButtons/Blank.png b/iBMSC/ImageButtons/Blank.png new file mode 100644 index 000000000..a92837b4e Binary files /dev/null and b/iBMSC/ImageButtons/Blank.png differ diff --git a/iBMSC/ImageButtons/ImageErrorG.gif b/iBMSC/ImageButtons/ImageErrorG.gif new file mode 100644 index 000000000..d78c9007b Binary files /dev/null and b/iBMSC/ImageButtons/ImageErrorG.gif differ diff --git a/iBMSC/ImageButtons/ImageErrorR.png b/iBMSC/ImageButtons/ImageErrorR.png new file mode 100644 index 000000000..59f4aba77 Binary files /dev/null and b/iBMSC/ImageButtons/ImageErrorR.png differ diff --git a/iBMSC/ImageButtonsSmall/x16Blank.png b/iBMSC/ImageButtonsSmall/x16Blank.png new file mode 100644 index 000000000..9ee1f7684 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16Blank.png differ diff --git a/iBMSC/ImageButtonsSmall/x16CheckErrorTechnical.png b/iBMSC/ImageButtonsSmall/x16CheckErrorTechnical.png new file mode 100644 index 000000000..d859a8578 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16CheckErrorTechnical.png differ diff --git a/iBMSC/ImageButtonsSmall/x16Color.png b/iBMSC/ImageButtonsSmall/x16Color.png new file mode 100644 index 000000000..68a6acf92 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16Color.png differ diff --git a/iBMSC/ImageButtonsSmall/x16Flip.png b/iBMSC/ImageButtonsSmall/x16Flip.png new file mode 100644 index 000000000..07e1e9df9 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16Flip.png differ diff --git a/iBMSC/ImageButtonsSmall/x16HRandom.png b/iBMSC/ImageButtonsSmall/x16HRandom.png new file mode 100644 index 000000000..756805de4 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16HRandom.png differ diff --git a/iBMSC/ImageButtonsSmall/x16Key.png b/iBMSC/ImageButtonsSmall/x16Key.png new file mode 100644 index 000000000..c3c4eef74 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16Key.png differ diff --git a/iBMSC/ImageButtonsSmall/x16PastePattern.png b/iBMSC/ImageButtonsSmall/x16PastePattern.png new file mode 100644 index 000000000..d8bbddb36 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16PastePattern.png differ diff --git a/iBMSC/ImageButtonsSmall/x16RRandom.png b/iBMSC/ImageButtonsSmall/x16RRandom.png new file mode 100644 index 000000000..7b25de5f3 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16RRandom.png differ diff --git a/iBMSC/ImageButtonsSmall/x16Random.png b/iBMSC/ImageButtonsSmall/x16Random.png new file mode 100644 index 000000000..c062b8b42 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16Random.png differ diff --git a/iBMSC/ImageButtonsSmall/x16SRandom.png b/iBMSC/ImageButtonsSmall/x16SRandom.png new file mode 100644 index 000000000..b4c0bbeb1 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16SRandom.png differ diff --git a/iBMSC/ImageButtonsSmall/x16ShowWaveform.png b/iBMSC/ImageButtonsSmall/x16ShowWaveform.png new file mode 100644 index 000000000..de35cc98b Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16ShowWaveform.png differ diff --git a/iBMSC/ImageButtonsSmall/x16ShowWaveformN.png b/iBMSC/ImageButtonsSmall/x16ShowWaveformN.png new file mode 100644 index 000000000..d83ba6927 Binary files /dev/null and b/iBMSC/ImageButtonsSmall/x16ShowWaveformN.png differ diff --git a/iBMSC/MainWindow.designer.vb b/iBMSC/MainWindow.designer.vb index 14733a67f..3c2bc52a7 100644 --- a/iBMSC/MainWindow.designer.vb +++ b/iBMSC/MainWindow.designer.vb @@ -1,4642 +1,5145 @@ - _ -Partial Class MainWindow - Inherits System.Windows.Forms.Form - - 'Form 重写 Dispose,以清理组件列表。 - _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - 'Windows 窗体设计器所必需的 - Private components As System.ComponentModel.IContainer - - '注意: 以下过程是 Windows 窗体设计器所必需的 - '可以使用 Windows 窗体设计器修改它。 - '不要使用代码编辑器修改它。 - _ - Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainWindow)) - Me.cmnLanguage = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.TBLangDef = New System.Windows.Forms.ToolStripMenuItem() - Me.TBLangRefresh = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator() - Me.TBLanguage = New System.Windows.Forms.ToolStripDropDownButton() - Me.mnLanguage = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnTheme = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.TBThemeDef = New System.Windows.Forms.ToolStripMenuItem() - Me.TBThemeSave = New System.Windows.Forms.ToolStripMenuItem() - Me.TBThemeRefresh = New System.Windows.Forms.ToolStripMenuItem() - Me.TBThemeLoadComptability = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() - Me.TBTheme = New System.Windows.Forms.ToolStripDropDownButton() - Me.mnTheme = New System.Windows.Forms.ToolStripMenuItem() - Me.POptionsScroll = New System.Windows.Forms.Panel() - Me.POptions = New System.Windows.Forms.Panel() - Me.POExpansion = New System.Windows.Forms.Panel() - Me.POExpansionInner = New System.Windows.Forms.Panel() - Me.TExpansion = New System.Windows.Forms.TextBox() - Me.POExpansionResizer = New System.Windows.Forms.Button() - Me.POExpansionSwitch = New System.Windows.Forms.CheckBox() - Me.POBeat = New System.Windows.Forms.Panel() - Me.POBeatInner = New System.Windows.Forms.TableLayoutPanel() - Me.POBeatExpander = New System.Windows.Forms.CheckBox() - Me.POBeatResizer = New System.Windows.Forms.Button() - Me.TableLayoutPanel7 = New System.Windows.Forms.TableLayoutPanel() - Me.nBeatD = New System.Windows.Forms.NumericUpDown() - Me.BBeatApplyV = New System.Windows.Forms.Button() - Me.nBeatN = New System.Windows.Forms.NumericUpDown() - Me.BBeatApply = New System.Windows.Forms.Button() - Me.Label7 = New System.Windows.Forms.Label() - Me.tBeatValue = New System.Windows.Forms.TextBox() - Me.LBeat = New System.Windows.Forms.ListBox() - Me.POBeatPart2 = New System.Windows.Forms.TableLayoutPanel() - Me.CBeatScale = New System.Windows.Forms.RadioButton() - Me.CBeatCut = New System.Windows.Forms.RadioButton() - Me.CBeatMeasure = New System.Windows.Forms.RadioButton() - Me.CBeatPreserve = New System.Windows.Forms.RadioButton() - Me.POBeatSwitch = New System.Windows.Forms.CheckBox() - Me.POBMP = New System.Windows.Forms.Panel() - Me.POBMPInner = New System.Windows.Forms.TableLayoutPanel() - Me.LBMP = New System.Windows.Forms.ListBox() - Me.FlowLayoutPanel4 = New System.Windows.Forms.FlowLayoutPanel() - Me.BBMPUp = New System.Windows.Forms.Button() - Me.BBMPDown = New System.Windows.Forms.Button() - Me.BBMPBrowse = New System.Windows.Forms.Button() - Me.BBMPRemove = New System.Windows.Forms.Button() - Me.POBMPResizer = New System.Windows.Forms.Button() - Me.POBMPSwitch = New System.Windows.Forms.CheckBox() - Me.POWAV = New System.Windows.Forms.Panel() - Me.POWAVInner = New System.Windows.Forms.TableLayoutPanel() - Me.POWAVExpander = New System.Windows.Forms.CheckBox() - Me.LWAV = New System.Windows.Forms.ListBox() - Me.FlowLayoutPanel3 = New System.Windows.Forms.FlowLayoutPanel() - Me.BWAVUp = New System.Windows.Forms.Button() - Me.BWAVDown = New System.Windows.Forms.Button() - Me.BWAVBrowse = New System.Windows.Forms.Button() - Me.BWAVRemove = New System.Windows.Forms.Button() - Me.POWAVResizer = New System.Windows.Forms.Button() - Me.POWAVPart2 = New System.Windows.Forms.TableLayoutPanel() - Me.CWAVMultiSelect = New System.Windows.Forms.CheckBox() - Me.CWAVChangeLabel = New System.Windows.Forms.CheckBox() - Me.POWAVSwitch = New System.Windows.Forms.CheckBox() - Me.POWaveForm = New System.Windows.Forms.Panel() - Me.POWaveFormInner = New System.Windows.Forms.Panel() - Me.POWaveFormPart2 = New System.Windows.Forms.TableLayoutPanel() - Me.TWSaturation = New System.Windows.Forms.NumericUpDown() - Me.PictureBox2 = New System.Windows.Forms.PictureBox() - Me.TWTransparency = New System.Windows.Forms.NumericUpDown() - Me.PictureBox3 = New System.Windows.Forms.PictureBox() - Me.TWPrecision = New System.Windows.Forms.NumericUpDown() - Me.PictureBox4 = New System.Windows.Forms.PictureBox() - Me.TWWidth = New System.Windows.Forms.NumericUpDown() - Me.PictureBox5 = New System.Windows.Forms.PictureBox() - Me.TWLeft = New System.Windows.Forms.NumericUpDown() - Me.PictureBox6 = New System.Windows.Forms.PictureBox() - Me.TWSaturation2 = New System.Windows.Forms.TrackBar() - Me.TWLeft2 = New System.Windows.Forms.TrackBar() - Me.TWTransparency2 = New System.Windows.Forms.TrackBar() - Me.TWWidth2 = New System.Windows.Forms.TrackBar() - Me.TWPrecision2 = New System.Windows.Forms.TrackBar() - Me.POWaveFormExpander = New System.Windows.Forms.CheckBox() - Me.POWaveFormPart1 = New System.Windows.Forms.TableLayoutPanel() - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() - Me.FlowLayoutPanel1 = New System.Windows.Forms.FlowLayoutPanel() - Me.BWLoad = New System.Windows.Forms.Button() - Me.BWClear = New System.Windows.Forms.Button() - Me.BWLock = New System.Windows.Forms.CheckBox() - Me.TWFileName = New System.Windows.Forms.TextBox() - Me.TableLayoutPanel6 = New System.Windows.Forms.TableLayoutPanel() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.TWPosition2 = New System.Windows.Forms.TrackBar() - Me.TWPosition = New System.Windows.Forms.NumericUpDown() - Me.POWaveFormSwitch = New System.Windows.Forms.CheckBox() - Me.POGrid = New System.Windows.Forms.Panel() - Me.POGridInner = New System.Windows.Forms.Panel() - Me.POGridPart2 = New System.Windows.Forms.TableLayoutPanel() - Me.TableLayoutPanel5 = New System.Windows.Forms.TableLayoutPanel() - Me.FlowLayoutPanel2 = New System.Windows.Forms.FlowLayoutPanel() - Me.cVSLockL = New System.Windows.Forms.CheckBox() - Me.cVSLock = New System.Windows.Forms.CheckBox() - Me.cVSLockR = New System.Windows.Forms.CheckBox() - Me.Label5 = New System.Windows.Forms.Label() - Me.TableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() - Me.Label1 = New System.Windows.Forms.Label() - Me.CGB = New System.Windows.Forms.NumericUpDown() - Me.POGridExpander = New System.Windows.Forms.CheckBox() - Me.POGridPart1 = New System.Windows.Forms.TableLayoutPanel() - Me.TableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() - Me.PictureBox9 = New System.Windows.Forms.PictureBox() - Me.CGHeight2 = New System.Windows.Forms.TrackBar() - Me.CGHeight = New System.Windows.Forms.NumericUpDown() - Me.PictureBox10 = New System.Windows.Forms.PictureBox() - Me.CGWidth2 = New System.Windows.Forms.TrackBar() - Me.CGWidth = New System.Windows.Forms.NumericUpDown() - Me.CGDisableVertical = New System.Windows.Forms.CheckBox() - Me.CGSnap = New System.Windows.Forms.CheckBox() - Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() - Me.PictureBox7 = New System.Windows.Forms.PictureBox() - Me.CGDivide = New System.Windows.Forms.NumericUpDown() - Me.CGSub = New System.Windows.Forms.NumericUpDown() - Me.BGSlash = New System.Windows.Forms.Button() - Me.POGridSwitch = New System.Windows.Forms.CheckBox() - Me.POHeader = New System.Windows.Forms.Panel() - Me.POHeaderInner = New System.Windows.Forms.Panel() - Me.POHeaderPart2 = New System.Windows.Forms.TableLayoutPanel() - Me.CHDifficulty = New System.Windows.Forms.ComboBox() - Me.Label13 = New System.Windows.Forms.Label() - Me.THExRank = New System.Windows.Forms.TextBox() - Me.Label25 = New System.Windows.Forms.Label() - Me.CHLnObj = New System.Windows.Forms.ComboBox() - Me.Label23 = New System.Windows.Forms.Label() - Me.Label21 = New System.Windows.Forms.Label() - Me.THComment = New System.Windows.Forms.TextBox() - Me.Label24 = New System.Windows.Forms.Label() - Me.Label15 = New System.Windows.Forms.Label() - Me.THTotal = New System.Windows.Forms.TextBox() - Me.Label20 = New System.Windows.Forms.Label() - Me.BHStageFile = New System.Windows.Forms.Button() - Me.BHBanner = New System.Windows.Forms.Button() - Me.Label19 = New System.Windows.Forms.Label() - Me.BHBackBMP = New System.Windows.Forms.Button() - Me.Label17 = New System.Windows.Forms.Label() - Me.Label16 = New System.Windows.Forms.Label() - Me.Label12 = New System.Windows.Forms.Label() - Me.THBackBMP = New System.Windows.Forms.TextBox() - Me.Label11 = New System.Windows.Forms.Label() - Me.THBanner = New System.Windows.Forms.TextBox() - Me.THStageFile = New System.Windows.Forms.TextBox() - Me.THSubTitle = New System.Windows.Forms.TextBox() - Me.THSubArtist = New System.Windows.Forms.TextBox() - Me.POHeaderExpander = New System.Windows.Forms.CheckBox() - Me.POHeaderPart1 = New System.Windows.Forms.TableLayoutPanel() - Me.Label3 = New System.Windows.Forms.Label() - Me.THPlayLevel = New System.Windows.Forms.TextBox() - Me.CHRank = New System.Windows.Forms.ComboBox() - Me.Label10 = New System.Windows.Forms.Label() - Me.CHPlayer = New System.Windows.Forms.ComboBox() - Me.Label4 = New System.Windows.Forms.Label() - Me.THGenre = New System.Windows.Forms.TextBox() - Me.THBPM = New System.Windows.Forms.NumericUpDown() - Me.Label2 = New System.Windows.Forms.Label() - Me.THArtist = New System.Windows.Forms.TextBox() - Me.THTitle = New System.Windows.Forms.TextBox() - Me.Label9 = New System.Windows.Forms.Label() - Me.Label8 = New System.Windows.Forms.Label() - Me.Label6 = New System.Windows.Forms.Label() - Me.POHeaderSwitch = New System.Windows.Forms.CheckBox() - Me.Timer1 = New System.Windows.Forms.Timer(Me.components) - Me.Menu1 = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.MInsert = New System.Windows.Forms.ToolStripMenuItem() - Me.MRemove = New System.Windows.Forms.ToolStripMenuItem() - Me.AutoSaveTimer = New System.Windows.Forms.Timer(Me.components) - Me.mnMain = New System.Windows.Forms.MenuStrip() - Me.mnFile = New System.Windows.Forms.ToolStripMenuItem() - Me.mnNew = New System.Windows.Forms.ToolStripMenuItem() - Me.mnOpen = New System.Windows.Forms.ToolStripMenuItem() - Me.mnImportSM = New System.Windows.Forms.ToolStripMenuItem() - Me.mnImportIBMSC = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator14 = New System.Windows.Forms.ToolStripSeparator() - Me.mnSave = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSaveAs = New System.Windows.Forms.ToolStripMenuItem() - Me.mnExport = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator15 = New System.Windows.Forms.ToolStripSeparator() - Me.mnOpenR0 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnOpenR1 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnOpenR2 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnOpenR3 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnOpenR4 = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator16 = New System.Windows.Forms.ToolStripSeparator() - Me.mnQuit = New System.Windows.Forms.ToolStripMenuItem() - Me.mnEdit = New System.Windows.Forms.ToolStripMenuItem() - Me.mnUndo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnRedo = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator17 = New System.Windows.Forms.ToolStripSeparator() - Me.mnCut = New System.Windows.Forms.ToolStripMenuItem() - Me.mnCopy = New System.Windows.Forms.ToolStripMenuItem() - Me.mnPaste = New System.Windows.Forms.ToolStripMenuItem() - Me.mnDelete = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSelectAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnGotoMeasure = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator18 = New System.Windows.Forms.ToolStripSeparator() - Me.mnFind = New System.Windows.Forms.ToolStripMenuItem() - Me.mnStatistics = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator19 = New System.Windows.Forms.ToolStripSeparator() - Me.mnTimeSelect = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSelect = New System.Windows.Forms.ToolStripMenuItem() - Me.mnWrite = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator23 = New System.Windows.Forms.ToolStripSeparator() - Me.mnMyO2 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSys = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSMenu = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSTB = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSOP = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSStatus = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSLSplitter = New System.Windows.Forms.ToolStripMenuItem() - Me.mnSRSplitter = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator21 = New System.Windows.Forms.ToolStripSeparator() - Me.CGShow = New System.Windows.Forms.ToolStripMenuItem() - Me.CGShowS = New System.Windows.Forms.ToolStripMenuItem() - Me.CGShowBG = New System.Windows.Forms.ToolStripMenuItem() - Me.CGShowM = New System.Windows.Forms.ToolStripMenuItem() - Me.CGShowMB = New System.Windows.Forms.ToolStripMenuItem() - Me.CGShowV = New System.Windows.Forms.ToolStripMenuItem() - Me.CGShowC = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator22 = New System.Windows.Forms.ToolStripSeparator() - Me.CGBPM = New System.Windows.Forms.ToolStripMenuItem() - Me.CGSTOP = New System.Windows.Forms.ToolStripMenuItem() - Me.CGSCROLL = New System.Windows.Forms.ToolStripMenuItem() - Me.CGBLP = New System.Windows.Forms.ToolStripMenuItem() - Me.mnOptions = New System.Windows.Forms.ToolStripMenuItem() - Me.mnNTInput = New System.Windows.Forms.ToolStripMenuItem() - Me.mnErrorCheck = New System.Windows.Forms.ToolStripMenuItem() - Me.mnPreviewOnClick = New System.Windows.Forms.ToolStripMenuItem() - Me.mnShowFileName = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator20 = New System.Windows.Forms.ToolStripSeparator() - Me.mnGOptions = New System.Windows.Forms.ToolStripMenuItem() - Me.mnVOptions = New System.Windows.Forms.ToolStripMenuItem() - Me.mnPOptions = New System.Windows.Forms.ToolStripMenuItem() - Me.mnConversion = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnConversion = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.POBLong = New System.Windows.Forms.ToolStripMenuItem() - Me.POBShort = New System.Windows.Forms.ToolStripMenuItem() - Me.POBLongShort = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator10 = New System.Windows.Forms.ToolStripSeparator() - Me.POBHidden = New System.Windows.Forms.ToolStripMenuItem() - Me.POBVisible = New System.Windows.Forms.ToolStripMenuItem() - Me.POBHiddenVisible = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator11 = New System.Windows.Forms.ToolStripSeparator() - Me.POBModify = New System.Windows.Forms.ToolStripMenuItem() - Me.POBMirror = New System.Windows.Forms.ToolStripMenuItem() - Me.mnPreview = New System.Windows.Forms.ToolStripMenuItem() - Me.mnPlayB = New System.Windows.Forms.ToolStripMenuItem() - Me.mnPlay = New System.Windows.Forms.ToolStripMenuItem() - Me.mnStop = New System.Windows.Forms.ToolStripMenuItem() - Me.POConvert = New System.Windows.Forms.ToolStripDropDownButton() - Me.TBMain = New System.Windows.Forms.ToolStrip() - Me.TBNew = New System.Windows.Forms.ToolStripButton() - Me.TBOpen = New System.Windows.Forms.ToolStripSplitButton() - Me.TBOpenR0 = New System.Windows.Forms.ToolStripMenuItem() - Me.TBOpenR1 = New System.Windows.Forms.ToolStripMenuItem() - Me.TBOpenR2 = New System.Windows.Forms.ToolStripMenuItem() - Me.TBOpenR3 = New System.Windows.Forms.ToolStripMenuItem() - Me.TBOpenR4 = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator12 = New System.Windows.Forms.ToolStripSeparator() - Me.TBImportSM = New System.Windows.Forms.ToolStripMenuItem() - Me.TBImportIBMSC = New System.Windows.Forms.ToolStripMenuItem() - Me.TBSave = New System.Windows.Forms.ToolStripSplitButton() - Me.TBSaveAs = New System.Windows.Forms.ToolStripMenuItem() - Me.TBExport = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() - Me.TBCut = New System.Windows.Forms.ToolStripButton() - Me.TBCopy = New System.Windows.Forms.ToolStripButton() - Me.TBPaste = New System.Windows.Forms.ToolStripButton() - Me.TBFind = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator24 = New System.Windows.Forms.ToolStripSeparator() - Me.TBStatistics = New System.Windows.Forms.ToolStripButton() - Me.TBMyO2 = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() - Me.TBErrorCheck = New System.Windows.Forms.ToolStripButton() - Me.TBPreviewOnClick = New System.Windows.Forms.ToolStripButton() - Me.TBShowFileName = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator() - Me.TBNTInput = New System.Windows.Forms.ToolStripButton() - Me.TBWavIncrease = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() - Me.TBUndo = New System.Windows.Forms.ToolStripButton() - Me.TBRedo = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() - Me.TBTimeSelect = New System.Windows.Forms.ToolStripButton() - Me.TBSelect = New System.Windows.Forms.ToolStripButton() - Me.TBWrite = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() - Me.TBPlayB = New System.Windows.Forms.ToolStripButton() - Me.TBPlay = New System.Windows.Forms.ToolStripButton() - Me.TBStop = New System.Windows.Forms.ToolStripButton() - Me.TBPOptions = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator() - Me.TBVOptions = New System.Windows.Forms.ToolStripButton() - Me.TBGOptions = New System.Windows.Forms.ToolStripButton() - Me.POBStorm = New System.Windows.Forms.ToolStripButton() - Me.pStatus = New System.Windows.Forms.Panel() - Me.FStatus2 = New System.Windows.Forms.StatusStrip() - Me.FSSS = New System.Windows.Forms.ToolStripButton() - Me.FSSL = New System.Windows.Forms.ToolStripButton() - Me.FSSH = New System.Windows.Forms.ToolStripButton() - Me.BVCReverse = New System.Windows.Forms.ToolStripButton() - Me.LblMultiply = New System.Windows.Forms.ToolStripStatusLabel() - Me.TVCM = New System.Windows.Forms.ToolStripTextBox() - Me.LblDivide = New System.Windows.Forms.ToolStripStatusLabel() - Me.TVCD = New System.Windows.Forms.ToolStripTextBox() - Me.BVCApply = New System.Windows.Forms.ToolStripButton() - Me.TVCBPM = New System.Windows.Forms.ToolStripTextBox() - Me.BVCCalculate = New System.Windows.Forms.ToolStripButton() - Me.BConvertStop = New System.Windows.Forms.ToolStripButton() - Me.FStatus = New System.Windows.Forms.StatusStrip() - Me.FSC = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSW = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSM = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSP1 = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSP3 = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSP2 = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSP4 = New System.Windows.Forms.ToolStripStatusLabel() - Me.TimeStatusLabel = New System.Windows.Forms.ToolStripStatusLabel() - Me.FST = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSH = New System.Windows.Forms.ToolStripStatusLabel() - Me.FSE = New System.Windows.Forms.ToolStripStatusLabel() - Me.TimerMiddle = New System.Windows.Forms.Timer(Me.components) - Me.ToolStripContainer1 = New System.Windows.Forms.ToolStripContainer() - Me.PMain = New System.Windows.Forms.Panel() - Me.PMainIn = New System.Windows.Forms.Panel() - Me.MainPanelScroll = New System.Windows.Forms.VScrollBar() - Me.HS = New System.Windows.Forms.HScrollBar() - Me.SpR = New System.Windows.Forms.Button() - Me.SpL = New System.Windows.Forms.Button() - Me.PMainR = New System.Windows.Forms.Panel() - Me.PMainInR = New System.Windows.Forms.Panel() - Me.RightPanelScroll = New System.Windows.Forms.VScrollBar() - Me.HSR = New System.Windows.Forms.HScrollBar() - Me.PMainL = New System.Windows.Forms.Panel() - Me.PMainInL = New System.Windows.Forms.Panel() - Me.LeftPanelScroll = New System.Windows.Forms.VScrollBar() - Me.HSL = New System.Windows.Forms.HScrollBar() - Me.POptionsResizer = New System.Windows.Forms.Button() - Me.ToolTipUniversal = New System.Windows.Forms.ToolTip(Me.components) - Me.cmnLanguage.SuspendLayout() - Me.cmnTheme.SuspendLayout() - Me.POptionsScroll.SuspendLayout() - Me.POptions.SuspendLayout() - Me.POExpansion.SuspendLayout() - Me.POExpansionInner.SuspendLayout() - Me.POBeat.SuspendLayout() - Me.POBeatInner.SuspendLayout() - Me.TableLayoutPanel7.SuspendLayout() - CType(Me.nBeatD, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.nBeatN, System.ComponentModel.ISupportInitialize).BeginInit() - Me.POBeatPart2.SuspendLayout() - Me.POWAV.SuspendLayout() - Me.POWAVInner.SuspendLayout() - Me.FlowLayoutPanel3.SuspendLayout() - Me.POWAVPart2.SuspendLayout() - Me.POBMP.SuspendLayout() - Me.POBMPInner.SuspendLayout() - Me.FlowLayoutPanel4.SuspendLayout() - Me.POWaveForm.SuspendLayout() - Me.POWaveFormInner.SuspendLayout() - Me.POWaveFormPart2.SuspendLayout() - CType(Me.TWSaturation, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWTransparency, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWPrecision, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PictureBox4, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWWidth, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PictureBox5, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWLeft, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PictureBox6, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWSaturation2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWLeft2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWTransparency2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWWidth2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWPrecision2, System.ComponentModel.ISupportInitialize).BeginInit() - Me.POWaveFormPart1.SuspendLayout() - Me.TableLayoutPanel1.SuspendLayout() - Me.FlowLayoutPanel1.SuspendLayout() - Me.TableLayoutPanel6.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWPosition2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.TWPosition, System.ComponentModel.ISupportInitialize).BeginInit() - Me.POGrid.SuspendLayout() - Me.POGridInner.SuspendLayout() - Me.POGridPart2.SuspendLayout() - Me.TableLayoutPanel5.SuspendLayout() - Me.FlowLayoutPanel2.SuspendLayout() - Me.TableLayoutPanel4.SuspendLayout() - CType(Me.CGB, System.ComponentModel.ISupportInitialize).BeginInit() - Me.POGridPart1.SuspendLayout() - Me.TableLayoutPanel3.SuspendLayout() - CType(Me.PictureBox9, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.CGHeight2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.CGHeight, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.PictureBox10, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.CGWidth2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.CGWidth, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TableLayoutPanel2.SuspendLayout() - CType(Me.PictureBox7, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.CGDivide, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.CGSub, System.ComponentModel.ISupportInitialize).BeginInit() - Me.POHeader.SuspendLayout() - Me.POHeaderInner.SuspendLayout() - Me.POHeaderPart2.SuspendLayout() - Me.POHeaderPart1.SuspendLayout() - CType(Me.THBPM, System.ComponentModel.ISupportInitialize).BeginInit() - Me.Menu1.SuspendLayout() - Me.mnMain.SuspendLayout() - Me.cmnConversion.SuspendLayout() - Me.TBMain.SuspendLayout() - Me.pStatus.SuspendLayout() - Me.FStatus2.SuspendLayout() - Me.FStatus.SuspendLayout() - Me.ToolStripContainer1.ContentPanel.SuspendLayout() - Me.ToolStripContainer1.TopToolStripPanel.SuspendLayout() - Me.ToolStripContainer1.SuspendLayout() - Me.PMain.SuspendLayout() - Me.PMainR.SuspendLayout() - Me.PMainL.SuspendLayout() - Me.SuspendLayout() - ' - 'cmnLanguage - ' - Me.cmnLanguage.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBLangDef, Me.TBLangRefresh, Me.ToolStripSeparator9}) - Me.cmnLanguage.Name = "cmnLanguage" - Me.cmnLanguage.OwnerItem = Me.mnLanguage - Me.cmnLanguage.Size = New System.Drawing.Size(121, 54) - ' - 'TBLangDef - ' - Me.TBLangDef.Name = "TBLangDef" - Me.TBLangDef.Size = New System.Drawing.Size(120, 22) - Me.TBLangDef.Text = "(Default)" - ' - 'TBLangRefresh - ' - Me.TBLangRefresh.Image = Global.iBMSC.My.Resources.Resources.x16Refresh - Me.TBLangRefresh.Name = "TBLangRefresh" - Me.TBLangRefresh.Size = New System.Drawing.Size(120, 22) - Me.TBLangRefresh.Text = "Refresh" - ' - 'ToolStripSeparator9 - ' - Me.ToolStripSeparator9.Name = "ToolStripSeparator9" - Me.ToolStripSeparator9.Size = New System.Drawing.Size(117, 6) - ' - 'TBLanguage - ' - Me.TBLanguage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBLanguage.DropDown = Me.cmnLanguage - Me.TBLanguage.Image = Global.iBMSC.My.Resources.Resources.x16Language - Me.TBLanguage.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBLanguage.Name = "TBLanguage" - Me.TBLanguage.Size = New System.Drawing.Size(29, 22) - Me.TBLanguage.Text = "Language" - ' - 'mnLanguage - ' - Me.mnLanguage.DropDown = Me.cmnLanguage - Me.mnLanguage.Image = Global.iBMSC.My.Resources.Resources.x16Language - Me.mnLanguage.Name = "mnLanguage" - Me.mnLanguage.Size = New System.Drawing.Size(229, 22) - Me.mnLanguage.Text = "&Language" - ' - 'cmnTheme - ' - Me.cmnTheme.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBThemeDef, Me.TBThemeSave, Me.TBThemeRefresh, Me.TBThemeLoadComptability, Me.ToolStripSeparator6}) - Me.cmnTheme.Name = "cmnLanguage" - Me.cmnTheme.OwnerItem = Me.mnTheme - Me.cmnTheme.Size = New System.Drawing.Size(246, 98) - ' - 'TBThemeDef - ' - Me.TBThemeDef.Name = "TBThemeDef" - Me.TBThemeDef.Size = New System.Drawing.Size(245, 22) - Me.TBThemeDef.Text = "(Default)" - ' - 'TBThemeSave - ' - Me.TBThemeSave.Image = Global.iBMSC.My.Resources.Resources.x16SaveAs - Me.TBThemeSave.Name = "TBThemeSave" - Me.TBThemeSave.Size = New System.Drawing.Size(245, 22) - Me.TBThemeSave.Text = "Save Theme" - ' - 'TBThemeRefresh - ' - Me.TBThemeRefresh.Image = Global.iBMSC.My.Resources.Resources.x16Refresh - Me.TBThemeRefresh.Name = "TBThemeRefresh" - Me.TBThemeRefresh.Size = New System.Drawing.Size(245, 22) - Me.TBThemeRefresh.Text = "Refresh" - ' - 'TBThemeLoadComptability - ' - Me.TBThemeLoadComptability.Name = "TBThemeLoadComptability" - Me.TBThemeLoadComptability.Size = New System.Drawing.Size(245, 22) - Me.TBThemeLoadComptability.Text = "Load Theme File from iBMSC 2.x" - ' - 'ToolStripSeparator6 - ' - Me.ToolStripSeparator6.Name = "ToolStripSeparator6" - Me.ToolStripSeparator6.Size = New System.Drawing.Size(242, 6) - ' - 'TBTheme - ' - Me.TBTheme.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBTheme.DropDown = Me.cmnTheme - Me.TBTheme.Image = Global.iBMSC.My.Resources.Resources.x16Theme - Me.TBTheme.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBTheme.Name = "TBTheme" - Me.TBTheme.Size = New System.Drawing.Size(29, 22) - Me.TBTheme.Text = "Theme" - ' - 'mnTheme - ' - Me.mnTheme.DropDown = Me.cmnTheme - Me.mnTheme.Image = Global.iBMSC.My.Resources.Resources.x16Theme - Me.mnTheme.Name = "mnTheme" - Me.mnTheme.Size = New System.Drawing.Size(229, 22) - Me.mnTheme.Text = "&Theme" - ' - 'POptionsScroll - ' - Me.POptionsScroll.AutoScroll = True - Me.POptionsScroll.Controls.Add(Me.POptions) - Me.POptionsScroll.Dock = System.Windows.Forms.DockStyle.Right - Me.POptionsScroll.Location = New System.Drawing.Point(882, 0) - Me.POptionsScroll.Name = "POptionsScroll" - Me.POptionsScroll.Size = New System.Drawing.Size(200, 730) - Me.POptionsScroll.TabIndex = 28 - ' - 'POptions - ' - Me.POptions.AutoSize = True - Me.POptions.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POptions.Controls.Add(Me.POExpansion) - Me.POptions.Controls.Add(Me.POBeat) - Me.POptions.Controls.Add(Me.POBMP) - Me.POptions.Controls.Add(Me.POWAV) - Me.POptions.Controls.Add(Me.POWaveForm) - Me.POptions.Controls.Add(Me.POGrid) - Me.POptions.Controls.Add(Me.POHeader) - Me.POptions.Dock = System.Windows.Forms.DockStyle.Top - Me.POptions.Location = New System.Drawing.Point(0, 0) - Me.POptions.Name = "POptions" - Me.POptions.Size = New System.Drawing.Size(183, 1722) - Me.POptions.TabIndex = 29 - ' - 'POExpansion - ' - Me.POExpansion.AutoSize = True - Me.POExpansion.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POExpansion.Controls.Add(Me.POExpansionInner) - Me.POExpansion.Controls.Add(Me.POExpansionSwitch) - Me.POExpansion.Dock = System.Windows.Forms.DockStyle.Top - Me.POExpansion.Location = New System.Drawing.Point(0, 1452) - Me.POExpansion.Name = "POExpansion" - Me.POExpansion.Size = New System.Drawing.Size(183, 270) - Me.POExpansion.TabIndex = 6 - ' - 'POExpansionInner - ' - Me.POExpansionInner.Controls.Add(Me.TExpansion) - Me.POExpansionInner.Controls.Add(Me.POExpansionResizer) - Me.POExpansionInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POExpansionInner.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POExpansionInner.Location = New System.Drawing.Point(0, 20) - Me.POExpansionInner.Name = "POExpansionInner" - Me.POExpansionInner.Size = New System.Drawing.Size(183, 250) - Me.POExpansionInner.TabIndex = 7 - Me.POExpansionInner.Visible = False - ' - 'TExpansion - ' - Me.TExpansion.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.TExpansion.Dock = System.Windows.Forms.DockStyle.Fill - Me.TExpansion.HideSelection = False - Me.TExpansion.Location = New System.Drawing.Point(0, 0) - Me.TExpansion.Multiline = True - Me.TExpansion.Name = "TExpansion" - Me.TExpansion.ScrollBars = System.Windows.Forms.ScrollBars.Vertical - Me.TExpansion.Size = New System.Drawing.Size(183, 245) - Me.TExpansion.TabIndex = 0 - Me.TExpansion.WordWrap = False - ' - 'POExpansionResizer - ' - Me.POExpansionResizer.Dock = System.Windows.Forms.DockStyle.Bottom - Me.POExpansionResizer.FlatAppearance.BorderSize = 0 - Me.POExpansionResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.POExpansionResizer.Location = New System.Drawing.Point(0, 245) - Me.POExpansionResizer.Margin = New System.Windows.Forms.Padding(0) - Me.POExpansionResizer.Name = "POExpansionResizer" - Me.POExpansionResizer.Size = New System.Drawing.Size(183, 5) - Me.POExpansionResizer.TabIndex = 65 - Me.POExpansionResizer.TabStop = False - Me.POExpansionResizer.UseVisualStyleBackColor = True - ' - 'POExpansionSwitch - ' - Me.POExpansionSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POExpansionSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POExpansionSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POExpansionSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POExpansionSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POExpansionSwitch.Location = New System.Drawing.Point(0, 0) - Me.POExpansionSwitch.Name = "POExpansionSwitch" - Me.POExpansionSwitch.Size = New System.Drawing.Size(183, 20) - Me.POExpansionSwitch.TabIndex = 6 - Me.POExpansionSwitch.TabStop = False - Me.POExpansionSwitch.Text = "Expansion Code" - Me.POExpansionSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POExpansionSwitch.UseCompatibleTextRendering = True - Me.POExpansionSwitch.UseVisualStyleBackColor = False - ' - 'POBeat - ' - Me.POBeat.AutoSize = True - Me.POBeat.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POBeat.Controls.Add(Me.POBeatInner) - Me.POBeat.Controls.Add(Me.POBeatSwitch) - Me.POBeat.Dock = System.Windows.Forms.DockStyle.Top - Me.POBeat.Location = New System.Drawing.Point(0, 1182) - Me.POBeat.Name = "POBeat" - Me.POBeat.Size = New System.Drawing.Size(183, 270) - Me.POBeat.TabIndex = 5 - ' - 'POBeatInner - ' - Me.POBeatInner.ColumnCount = 1 - Me.POBeatInner.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POBeatInner.Controls.Add(Me.POBeatExpander, 0, 1) - Me.POBeatInner.Controls.Add(Me.POBeatResizer, 0, 4) - Me.POBeatInner.Controls.Add(Me.TableLayoutPanel7, 0, 0) - Me.POBeatInner.Controls.Add(Me.LBeat, 0, 3) - Me.POBeatInner.Controls.Add(Me.POBeatPart2, 0, 2) - Me.POBeatInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POBeatInner.Location = New System.Drawing.Point(0, 20) - Me.POBeatInner.Name = "POBeatInner" - Me.POBeatInner.RowCount = 5 - Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatInner.Size = New System.Drawing.Size(183, 250) - Me.POBeatInner.TabIndex = 6 - Me.POBeatInner.Visible = False - ' - 'POBeatExpander - ' - Me.POBeatExpander.Appearance = System.Windows.Forms.Appearance.Button - Me.POBeatExpander.AutoSize = True - Me.POBeatExpander.Cursor = System.Windows.Forms.Cursors.Hand - Me.POBeatExpander.Dock = System.Windows.Forms.DockStyle.Top - Me.POBeatExpander.FlatAppearance.BorderSize = 0 - Me.POBeatExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.POBeatExpander.Location = New System.Drawing.Point(0, 54) - Me.POBeatExpander.Margin = New System.Windows.Forms.Padding(0) - Me.POBeatExpander.Name = "POBeatExpander" - Me.POBeatExpander.Size = New System.Drawing.Size(183, 25) - Me.POBeatExpander.TabIndex = 65 - Me.POBeatExpander.TabStop = False - Me.POBeatExpander.Text = "Expand..." - Me.POBeatExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POBeatExpander.UseVisualStyleBackColor = False - ' - 'POBeatResizer - ' - Me.POBeatInner.SetColumnSpan(Me.POBeatResizer, 2) - Me.POBeatResizer.Dock = System.Windows.Forms.DockStyle.Top - Me.POBeatResizer.FlatAppearance.BorderSize = 0 - Me.POBeatResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.POBeatResizer.Location = New System.Drawing.Point(0, 245) - Me.POBeatResizer.Margin = New System.Windows.Forms.Padding(0) - Me.POBeatResizer.Name = "POBeatResizer" - Me.POBeatResizer.Size = New System.Drawing.Size(183, 5) - Me.POBeatResizer.TabIndex = 64 - Me.POBeatResizer.TabStop = False - Me.POBeatResizer.UseVisualStyleBackColor = True - ' - 'TableLayoutPanel7 - ' - Me.TableLayoutPanel7.AutoSize = True - Me.TableLayoutPanel7.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel7.ColumnCount = 4 - Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) - Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) - Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.0!)) - Me.TableLayoutPanel7.Controls.Add(Me.nBeatD, 2, 0) - Me.TableLayoutPanel7.Controls.Add(Me.BBeatApplyV, 3, 1) - Me.TableLayoutPanel7.Controls.Add(Me.nBeatN, 0, 0) - Me.TableLayoutPanel7.Controls.Add(Me.BBeatApply, 3, 0) - Me.TableLayoutPanel7.Controls.Add(Me.Label7, 1, 0) - Me.TableLayoutPanel7.Controls.Add(Me.tBeatValue, 0, 1) - Me.TableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel7.Location = New System.Drawing.Point(0, 0) - Me.TableLayoutPanel7.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel7.Name = "TableLayoutPanel7" - Me.TableLayoutPanel7.RowCount = 2 - Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.TableLayoutPanel7.Size = New System.Drawing.Size(183, 54) - Me.TableLayoutPanel7.TabIndex = 63 - ' - 'nBeatD - ' - Me.nBeatD.Dock = System.Windows.Forms.DockStyle.Fill - Me.nBeatD.Location = New System.Drawing.Point(66, 3) - Me.nBeatD.Maximum = New Decimal(New Integer() {10000, 0, 0, 0}) - Me.nBeatD.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.nBeatD.Name = "nBeatD" - Me.nBeatD.Size = New System.Drawing.Size(45, 23) - Me.nBeatD.TabIndex = 37 - Me.nBeatD.Value = New Decimal(New Integer() {4, 0, 0, 0}) - ' - 'BBeatApplyV - ' - Me.BBeatApplyV.AutoSize = True - Me.BBeatApplyV.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.BBeatApplyV.Dock = System.Windows.Forms.DockStyle.Fill - Me.BBeatApplyV.Location = New System.Drawing.Point(114, 29) - Me.BBeatApplyV.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.BBeatApplyV.Name = "BBeatApplyV" - Me.BBeatApplyV.Size = New System.Drawing.Size(66, 25) - Me.BBeatApplyV.TabIndex = 35 - Me.BBeatApplyV.Text = "Apply" - Me.BBeatApplyV.UseVisualStyleBackColor = True - ' - 'nBeatN - ' - Me.nBeatN.Dock = System.Windows.Forms.DockStyle.Fill - Me.nBeatN.Location = New System.Drawing.Point(3, 3) - Me.nBeatN.Maximum = New Decimal(New Integer() {99999, 0, 0, 0}) - Me.nBeatN.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.nBeatN.Name = "nBeatN" - Me.nBeatN.Size = New System.Drawing.Size(45, 23) - Me.nBeatN.TabIndex = 27 - Me.nBeatN.Value = New Decimal(New Integer() {4, 0, 0, 0}) - ' - 'BBeatApply - ' - Me.BBeatApply.AutoSize = True - Me.BBeatApply.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.BBeatApply.Dock = System.Windows.Forms.DockStyle.Fill - Me.BBeatApply.Location = New System.Drawing.Point(114, 2) - Me.BBeatApply.Margin = New System.Windows.Forms.Padding(0, 2, 3, 2) - Me.BBeatApply.Name = "BBeatApply" - Me.BBeatApply.Size = New System.Drawing.Size(66, 25) - Me.BBeatApply.TabIndex = 30 - Me.BBeatApply.Text = "Apply" - Me.BBeatApply.UseVisualStyleBackColor = True - ' - 'Label7 - ' - Me.Label7.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Label7.AutoSize = True - Me.Label7.Location = New System.Drawing.Point(51, 7) - Me.Label7.Margin = New System.Windows.Forms.Padding(0) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(12, 15) - Me.Label7.TabIndex = 31 - Me.Label7.Text = "/" - Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'tBeatValue - ' - Me.TableLayoutPanel7.SetColumnSpan(Me.tBeatValue, 3) - Me.tBeatValue.Dock = System.Windows.Forms.DockStyle.Fill - Me.tBeatValue.Location = New System.Drawing.Point(3, 30) - Me.tBeatValue.Margin = New System.Windows.Forms.Padding(3, 1, 3, 0) - Me.tBeatValue.Name = "tBeatValue" - Me.tBeatValue.Size = New System.Drawing.Size(108, 23) - Me.tBeatValue.TabIndex = 36 - Me.tBeatValue.Text = "1" - ' - 'LBeat - ' - Me.LBeat.Dock = System.Windows.Forms.DockStyle.Fill - Me.LBeat.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.LBeat.IntegralHeight = False - Me.LBeat.ItemHeight = 14 - Me.LBeat.Items.AddRange(New Object() {"000: 15.984375 (1023/64)"}) - Me.LBeat.Location = New System.Drawing.Point(3, 155) - Me.LBeat.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.LBeat.Name = "LBeat" - Me.LBeat.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.LBeat.Size = New System.Drawing.Size(177, 90) - Me.LBeat.TabIndex = 26 - ' - 'POBeatPart2 - ' - Me.POBeatPart2.AutoSize = True - Me.POBeatPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POBeatPart2.ColumnCount = 1 - Me.POBeatPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POBeatPart2.Controls.Add(Me.CBeatScale, 0, 3) - Me.POBeatPart2.Controls.Add(Me.CBeatCut, 0, 2) - Me.POBeatPart2.Controls.Add(Me.CBeatMeasure, 0, 1) - Me.POBeatPart2.Controls.Add(Me.CBeatPreserve, 0, 0) - Me.POBeatPart2.Dock = System.Windows.Forms.DockStyle.Fill - Me.POBeatPart2.Location = New System.Drawing.Point(0, 79) - Me.POBeatPart2.Margin = New System.Windows.Forms.Padding(0) - Me.POBeatPart2.Name = "POBeatPart2" - Me.POBeatPart2.RowCount = 4 - Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBeatPart2.Size = New System.Drawing.Size(183, 76) - Me.POBeatPart2.TabIndex = 66 - Me.POBeatPart2.Visible = False - ' - 'CBeatScale - ' - Me.CBeatScale.AutoSize = True - Me.CBeatScale.Location = New System.Drawing.Point(3, 57) - Me.CBeatScale.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CBeatScale.Name = "CBeatScale" - Me.CBeatScale.Size = New System.Drawing.Size(151, 19) - Me.CBeatScale.TabIndex = 3 - Me.CBeatScale.Text = "Scale to measure length" - Me.CBeatScale.UseVisualStyleBackColor = True - ' - 'CBeatCut - ' - Me.CBeatCut.AutoEllipsis = True - Me.CBeatCut.Dock = System.Windows.Forms.DockStyle.Fill - Me.CBeatCut.Location = New System.Drawing.Point(3, 38) - Me.CBeatCut.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CBeatCut.Name = "CBeatCut" - Me.CBeatCut.Size = New System.Drawing.Size(177, 19) - Me.CBeatCut.TabIndex = 2 - Me.CBeatCut.Text = "Keep measure position and cut overflow" - Me.CBeatCut.UseVisualStyleBackColor = True - ' - 'CBeatMeasure - ' - Me.CBeatMeasure.AutoSize = True - Me.CBeatMeasure.Location = New System.Drawing.Point(3, 19) - Me.CBeatMeasure.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CBeatMeasure.Name = "CBeatMeasure" - Me.CBeatMeasure.Size = New System.Drawing.Size(145, 19) - Me.CBeatMeasure.TabIndex = 1 - Me.CBeatMeasure.Text = "Keep measure position" - Me.CBeatMeasure.UseVisualStyleBackColor = True - ' - 'CBeatPreserve - ' - Me.CBeatPreserve.AutoSize = True - Me.CBeatPreserve.Checked = True - Me.CBeatPreserve.Location = New System.Drawing.Point(3, 0) - Me.CBeatPreserve.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CBeatPreserve.Name = "CBeatPreserve" - Me.CBeatPreserve.Size = New System.Drawing.Size(145, 19) - Me.CBeatPreserve.TabIndex = 0 - Me.CBeatPreserve.TabStop = True - Me.CBeatPreserve.Text = "Keep absolute position" - Me.CBeatPreserve.UseVisualStyleBackColor = True - ' - 'POBeatSwitch - ' - Me.POBeatSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POBeatSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POBeatSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POBeatSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POBeatSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POBeatSwitch.Location = New System.Drawing.Point(0, 0) - Me.POBeatSwitch.Name = "POBeatSwitch" - Me.POBeatSwitch.Size = New System.Drawing.Size(183, 20) - Me.POBeatSwitch.TabIndex = 5 - Me.POBeatSwitch.TabStop = False - Me.POBeatSwitch.Text = "Beat" - Me.POBeatSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POBeatSwitch.UseCompatibleTextRendering = True - Me.POBeatSwitch.UseVisualStyleBackColor = False - ' - 'POBMP - ' - Me.POBMP.AllowDrop = True - Me.POBMP.AutoSize = True - Me.POBMP.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POBMP.Controls.Add(Me.POBMPInner) - Me.POBMP.Controls.Add(Me.POBMPSwitch) - Me.POBMP.Dock = System.Windows.Forms.DockStyle.Top - Me.POBMP.Location = New System.Drawing.Point(0, 912) - Me.POBMP.Name = "POBMP" - Me.POBMP.Size = New System.Drawing.Size(183, 270) - Me.POBMP.TabIndex = 4 - ' - 'POBMPInner - ' - Me.POBMPInner.ColumnCount = 1 - Me.POBMPInner.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POBMPInner.Controls.Add(Me.LBMP, 0, 1) - Me.POBMPInner.Controls.Add(Me.FlowLayoutPanel4, 0, 0) - Me.POBMPInner.Controls.Add(Me.POBMPResizer, 0, 2) - Me.POBMPInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POBMPInner.Location = New System.Drawing.Point(0, 20) - Me.POBMPInner.Name = "POBMPInner" - Me.POBMPInner.RowCount = 3 - Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POBMPInner.Size = New System.Drawing.Size(183, 250) - Me.POBMPInner.TabIndex = 5 - Me.POBMPInner.Visible = False - ' - 'LBMP - ' - Me.LBMP.Dock = System.Windows.Forms.DockStyle.Fill - Me.LBMP.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.LBMP.IntegralHeight = False - Me.LBMP.ItemHeight = 14 - Me.LBMP.Location = New System.Drawing.Point(3, 93) - Me.LBMP.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.LBMP.Name = "LBMP" - Me.LBMP.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.LBMP.Size = New System.Drawing.Size(177, 152) - Me.LBMP.TabIndex = 25 - ' - 'FlowLayoutPanel4 - ' - Me.FlowLayoutPanel4.AutoSize = True - Me.FlowLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.FlowLayoutPanel4.Controls.Add(Me.BBMPUp) - Me.FlowLayoutPanel4.Controls.Add(Me.BBMPDown) - Me.FlowLayoutPanel4.Controls.Add(Me.BBMPBrowse) - Me.FlowLayoutPanel4.Controls.Add(Me.BBMPRemove) - Me.FlowLayoutPanel4.Location = New System.Drawing.Point(3, 3) - Me.FlowLayoutPanel4.Name = "FlowLayoutPanel4" - Me.FlowLayoutPanel4.Size = New System.Drawing.Size(96, 24) - Me.FlowLayoutPanel4.TabIndex = 26 - Me.FlowLayoutPanel4.WrapContents = False - ' - 'BBMPUp - ' - Me.BBMPUp.Image = Global.iBMSC.My.Resources.Resources.x16Up - Me.BBMPUp.Location = New System.Drawing.Point(0, 0) - Me.BBMPUp.Margin = New System.Windows.Forms.Padding(0) - Me.BBMPUp.Name = "BBMPUp" - Me.BBMPUp.Size = New System.Drawing.Size(24, 24) - Me.BBMPUp.TabIndex = 26 - Me.ToolTipUniversal.SetToolTip(Me.BBMPUp, "Move Up") - Me.BBMPUp.UseVisualStyleBackColor = True - ' - 'BBMPDown - ' - Me.BBMPDown.Image = Global.iBMSC.My.Resources.Resources.x16Down - Me.BBMPDown.Location = New System.Drawing.Point(24, 0) - Me.BBMPDown.Margin = New System.Windows.Forms.Padding(0) - Me.BBMPDown.Name = "BBMPDown" - Me.BBMPDown.Size = New System.Drawing.Size(24, 24) - Me.BBMPDown.TabIndex = 27 - Me.ToolTipUniversal.SetToolTip(Me.BBMPDown, "Move Down") - Me.BBMPDown.UseVisualStyleBackColor = True - ' - 'BBMPBrowse - ' - Me.BBMPBrowse.Image = Global.iBMSC.My.Resources.Resources.x16PlayerBrowse - Me.BBMPBrowse.Location = New System.Drawing.Point(48, 0) - Me.BBMPBrowse.Margin = New System.Windows.Forms.Padding(0) - Me.BBMPBrowse.Name = "BBMPBrowse" - Me.BBMPBrowse.Size = New System.Drawing.Size(24, 24) - Me.BBMPBrowse.TabIndex = 30 - Me.ToolTipUniversal.SetToolTip(Me.BBMPBrowse, "Browse") - Me.BBMPBrowse.UseVisualStyleBackColor = True - ' - 'BBMPRemove - ' - Me.BBMPRemove.Image = Global.iBMSC.My.Resources.Resources.x16Remove - Me.BBMPRemove.Location = New System.Drawing.Point(72, 0) - Me.BBMPRemove.Margin = New System.Windows.Forms.Padding(0) - Me.BBMPRemove.Name = "BBMPRemove" - Me.BBMPRemove.Size = New System.Drawing.Size(24, 24) - Me.BBMPRemove.TabIndex = 31 - Me.ToolTipUniversal.SetToolTip(Me.BBMPRemove, "Remove") - Me.BBMPRemove.UseVisualStyleBackColor = True - ' - 'POBMPResizer - ' - Me.POBMPResizer.Dock = System.Windows.Forms.DockStyle.Top - Me.POBMPResizer.FlatAppearance.BorderSize = 0 - Me.POBMPResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.POBMPResizer.Location = New System.Drawing.Point(0, 245) - Me.POBMPResizer.Margin = New System.Windows.Forms.Padding(0) - Me.POBMPResizer.Name = "POBMPResizer" - Me.POBMPResizer.Size = New System.Drawing.Size(183, 5) - Me.POBMPResizer.TabIndex = 33 - Me.POBMPResizer.TabStop = False - Me.POBMPResizer.UseVisualStyleBackColor = True - ' - 'POBMPSwitch - ' - Me.POBMPSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POBMPSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POBMPSwitch.Checked = True - Me.POBMPSwitch.CheckState = System.Windows.Forms.CheckState.Checked - Me.POBMPSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POBMPSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POBMPSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POBMPSwitch.Location = New System.Drawing.Point(0, 0) - Me.POBMPSwitch.Name = "POBMPSwitch" - Me.POBMPSwitch.Size = New System.Drawing.Size(183, 20) - Me.POBMPSwitch.TabIndex = 4 - Me.POBMPSwitch.TabStop = False - Me.POBMPSwitch.Text = "#BMP (Images List)" - Me.POBMPSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POBMPSwitch.UseCompatibleTextRendering = True - Me.POBMPSwitch.UseVisualStyleBackColor = False - - ' - 'POWAV - ' - Me.POWAV.AllowDrop = True - Me.POWAV.AutoSize = True - Me.POWAV.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POWAV.Controls.Add(Me.POWAVInner) - Me.POWAV.Controls.Add(Me.POWAVSwitch) - Me.POWAV.Dock = System.Windows.Forms.DockStyle.Top - Me.POWAV.Location = New System.Drawing.Point(0, 912) - Me.POWAV.Name = "POWAV" - Me.POWAV.Size = New System.Drawing.Size(183, 270) - Me.POWAV.TabIndex = 4 - ' - 'POWAVInner - ' - Me.POWAVInner.ColumnCount = 1 - Me.POWAVInner.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POWAVInner.Controls.Add(Me.POWAVExpander, 0, 1) - Me.POWAVInner.Controls.Add(Me.LWAV, 0, 3) - Me.POWAVInner.Controls.Add(Me.FlowLayoutPanel3, 0, 0) - Me.POWAVInner.Controls.Add(Me.POWAVResizer, 0, 4) - Me.POWAVInner.Controls.Add(Me.POWAVPart2, 0, 2) - Me.POWAVInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POWAVInner.Location = New System.Drawing.Point(0, 20) - Me.POWAVInner.Name = "POWAVInner" - Me.POWAVInner.RowCount = 5 - Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWAVInner.Size = New System.Drawing.Size(183, 250) - Me.POWAVInner.TabIndex = 5 - ' - 'POWAVExpander - ' - Me.POWAVExpander.Appearance = System.Windows.Forms.Appearance.Button - Me.POWAVExpander.AutoSize = True - Me.POWAVExpander.Cursor = System.Windows.Forms.Cursors.Hand - Me.POWAVExpander.Dock = System.Windows.Forms.DockStyle.Top - Me.POWAVExpander.FlatAppearance.BorderSize = 0 - Me.POWAVExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.POWAVExpander.Location = New System.Drawing.Point(0, 30) - Me.POWAVExpander.Margin = New System.Windows.Forms.Padding(0) - Me.POWAVExpander.Name = "POWAVExpander" - Me.POWAVExpander.Size = New System.Drawing.Size(183, 25) - Me.POWAVExpander.TabIndex = 34 - Me.POWAVExpander.TabStop = False - Me.POWAVExpander.Text = "Expand..." - Me.POWAVExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POWAVExpander.UseVisualStyleBackColor = False - ' - 'LWAV - ' - Me.LWAV.Dock = System.Windows.Forms.DockStyle.Fill - Me.LWAV.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.LWAV.IntegralHeight = False - Me.LWAV.ItemHeight = 14 - Me.LWAV.Location = New System.Drawing.Point(3, 93) - Me.LWAV.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.LWAV.Name = "LWAV" - Me.LWAV.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.LWAV.Size = New System.Drawing.Size(177, 152) - Me.LWAV.TabIndex = 25 - ' - 'FlowLayoutPanel3 - ' - Me.FlowLayoutPanel3.AutoSize = True - Me.FlowLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.FlowLayoutPanel3.Controls.Add(Me.BWAVUp) - Me.FlowLayoutPanel3.Controls.Add(Me.BWAVDown) - Me.FlowLayoutPanel3.Controls.Add(Me.BWAVBrowse) - Me.FlowLayoutPanel3.Controls.Add(Me.BWAVRemove) - Me.FlowLayoutPanel3.Location = New System.Drawing.Point(3, 3) - Me.FlowLayoutPanel3.Name = "FlowLayoutPanel3" - Me.FlowLayoutPanel3.Size = New System.Drawing.Size(96, 24) - Me.FlowLayoutPanel3.TabIndex = 26 - Me.FlowLayoutPanel3.WrapContents = False - ' - 'BWAVUp - ' - Me.BWAVUp.Image = Global.iBMSC.My.Resources.Resources.x16Up - Me.BWAVUp.Location = New System.Drawing.Point(0, 0) - Me.BWAVUp.Margin = New System.Windows.Forms.Padding(0) - Me.BWAVUp.Name = "BWAVUp" - Me.BWAVUp.Size = New System.Drawing.Size(24, 24) - Me.BWAVUp.TabIndex = 26 - Me.ToolTipUniversal.SetToolTip(Me.BWAVUp, "Move Up") - Me.BWAVUp.UseVisualStyleBackColor = True - ' - 'BWAVDown - ' - Me.BWAVDown.Image = Global.iBMSC.My.Resources.Resources.x16Down - Me.BWAVDown.Location = New System.Drawing.Point(24, 0) - Me.BWAVDown.Margin = New System.Windows.Forms.Padding(0) - Me.BWAVDown.Name = "BWAVDown" - Me.BWAVDown.Size = New System.Drawing.Size(24, 24) - Me.BWAVDown.TabIndex = 27 - Me.ToolTipUniversal.SetToolTip(Me.BWAVDown, "Move Down") - Me.BWAVDown.UseVisualStyleBackColor = True - ' - 'BWAVBrowse - ' - Me.BWAVBrowse.Image = Global.iBMSC.My.Resources.Resources.x16PlayerBrowse - Me.BWAVBrowse.Location = New System.Drawing.Point(48, 0) - Me.BWAVBrowse.Margin = New System.Windows.Forms.Padding(0) - Me.BWAVBrowse.Name = "BWAVBrowse" - Me.BWAVBrowse.Size = New System.Drawing.Size(24, 24) - Me.BWAVBrowse.TabIndex = 30 - Me.ToolTipUniversal.SetToolTip(Me.BWAVBrowse, "Browse") - Me.BWAVBrowse.UseVisualStyleBackColor = True - ' - 'BWAVRemove - ' - Me.BWAVRemove.Image = Global.iBMSC.My.Resources.Resources.x16Remove - Me.BWAVRemove.Location = New System.Drawing.Point(72, 0) - Me.BWAVRemove.Margin = New System.Windows.Forms.Padding(0) - Me.BWAVRemove.Name = "BWAVRemove" - Me.BWAVRemove.Size = New System.Drawing.Size(24, 24) - Me.BWAVRemove.TabIndex = 31 - Me.ToolTipUniversal.SetToolTip(Me.BWAVRemove, "Remove") - Me.BWAVRemove.UseVisualStyleBackColor = True - ' - 'POWAVResizer - ' - Me.POWAVResizer.Dock = System.Windows.Forms.DockStyle.Top - Me.POWAVResizer.FlatAppearance.BorderSize = 0 - Me.POWAVResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.POWAVResizer.Location = New System.Drawing.Point(0, 245) - Me.POWAVResizer.Margin = New System.Windows.Forms.Padding(0) - Me.POWAVResizer.Name = "POWAVResizer" - Me.POWAVResizer.Size = New System.Drawing.Size(183, 5) - Me.POWAVResizer.TabIndex = 33 - Me.POWAVResizer.TabStop = False - Me.POWAVResizer.UseVisualStyleBackColor = True - ' - 'POWAVPart2 - ' - Me.POWAVPart2.AutoSize = True - Me.POWAVPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POWAVPart2.ColumnCount = 1 - Me.POWAVPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POWAVPart2.Controls.Add(Me.CWAVMultiSelect, 0, 0) - Me.POWAVPart2.Controls.Add(Me.CWAVChangeLabel, 0, 1) - Me.POWAVPart2.Dock = System.Windows.Forms.DockStyle.Fill - Me.POWAVPart2.Location = New System.Drawing.Point(0, 55) - Me.POWAVPart2.Margin = New System.Windows.Forms.Padding(0) - Me.POWAVPart2.Name = "POWAVPart2" - Me.POWAVPart2.RowCount = 2 - Me.POWAVPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWAVPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWAVPart2.Size = New System.Drawing.Size(183, 38) - Me.POWAVPart2.TabIndex = 35 - Me.POWAVPart2.Visible = False - ' - 'CWAVMultiSelect - ' - Me.CWAVMultiSelect.AutoSize = True - Me.CWAVMultiSelect.Checked = True - Me.CWAVMultiSelect.CheckState = System.Windows.Forms.CheckState.Checked - Me.CWAVMultiSelect.Location = New System.Drawing.Point(3, 0) - Me.CWAVMultiSelect.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CWAVMultiSelect.Name = "CWAVMultiSelect" - Me.CWAVMultiSelect.Size = New System.Drawing.Size(154, 19) - Me.CWAVMultiSelect.TabIndex = 0 - Me.CWAVMultiSelect.Text = "Allow Multiple Selection" - Me.CWAVMultiSelect.UseVisualStyleBackColor = True - ' - 'CWAVChangeLabel - ' - Me.CWAVChangeLabel.AutoSize = True - Me.CWAVChangeLabel.Checked = True - Me.CWAVChangeLabel.CheckState = System.Windows.Forms.CheckState.Checked - Me.CWAVChangeLabel.Location = New System.Drawing.Point(3, 19) - Me.CWAVChangeLabel.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CWAVChangeLabel.Name = "CWAVChangeLabel" - Me.CWAVChangeLabel.Size = New System.Drawing.Size(155, 19) - Me.CWAVChangeLabel.TabIndex = 1 - Me.CWAVChangeLabel.Text = "Synchronize Note Labels" - Me.CWAVChangeLabel.UseVisualStyleBackColor = True - ' - 'POWAVSwitch - ' - Me.POWAVSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POWAVSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POWAVSwitch.Checked = True - Me.POWAVSwitch.CheckState = System.Windows.Forms.CheckState.Checked - Me.POWAVSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POWAVSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POWAVSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POWAVSwitch.Location = New System.Drawing.Point(0, 0) - Me.POWAVSwitch.Name = "POWAVSwitch" - Me.POWAVSwitch.Size = New System.Drawing.Size(183, 20) - Me.POWAVSwitch.TabIndex = 4 - Me.POWAVSwitch.TabStop = False - Me.POWAVSwitch.Text = "#WAV (Sounds List)" - Me.POWAVSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POWAVSwitch.UseCompatibleTextRendering = True - Me.POWAVSwitch.UseVisualStyleBackColor = False - ' - 'POWaveForm - ' - Me.POWaveForm.AutoSize = True - Me.POWaveForm.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POWaveForm.Controls.Add(Me.POWaveFormInner) - Me.POWaveForm.Controls.Add(Me.POWaveFormSwitch) - Me.POWaveForm.Dock = System.Windows.Forms.DockStyle.Top - Me.POWaveForm.Location = New System.Drawing.Point(0, 669) - Me.POWaveForm.Name = "POWaveForm" - Me.POWaveForm.Size = New System.Drawing.Size(183, 243) - Me.POWaveForm.TabIndex = 3 - ' - 'POWaveFormInner - ' - Me.POWaveFormInner.AutoSize = True - Me.POWaveFormInner.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POWaveFormInner.Controls.Add(Me.POWaveFormPart2) - Me.POWaveFormInner.Controls.Add(Me.POWaveFormExpander) - Me.POWaveFormInner.Controls.Add(Me.POWaveFormPart1) - Me.POWaveFormInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POWaveFormInner.Location = New System.Drawing.Point(0, 20) - Me.POWaveFormInner.Name = "POWaveFormInner" - Me.POWaveFormInner.Size = New System.Drawing.Size(183, 223) - Me.POWaveFormInner.TabIndex = 29 - Me.POWaveFormInner.Visible = False - ' - 'POWaveFormPart2 - ' - Me.POWaveFormPart2.AutoSize = True - Me.POWaveFormPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POWaveFormPart2.ColumnCount = 3 - Me.POWaveFormPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.POWaveFormPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70.0!)) - Me.POWaveFormPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) - Me.POWaveFormPart2.Controls.Add(Me.TWSaturation, 2, 4) - Me.POWaveFormPart2.Controls.Add(Me.PictureBox2, 0, 0) - Me.POWaveFormPart2.Controls.Add(Me.TWTransparency, 2, 3) - Me.POWaveFormPart2.Controls.Add(Me.PictureBox3, 0, 1) - Me.POWaveFormPart2.Controls.Add(Me.TWPrecision, 2, 2) - Me.POWaveFormPart2.Controls.Add(Me.PictureBox4, 0, 2) - Me.POWaveFormPart2.Controls.Add(Me.TWWidth, 2, 1) - Me.POWaveFormPart2.Controls.Add(Me.PictureBox5, 0, 3) - Me.POWaveFormPart2.Controls.Add(Me.TWLeft, 2, 0) - Me.POWaveFormPart2.Controls.Add(Me.PictureBox6, 0, 4) - Me.POWaveFormPart2.Controls.Add(Me.TWSaturation2, 1, 4) - Me.POWaveFormPart2.Controls.Add(Me.TWLeft2, 1, 0) - Me.POWaveFormPart2.Controls.Add(Me.TWTransparency2, 1, 3) - Me.POWaveFormPart2.Controls.Add(Me.TWWidth2, 1, 1) - Me.POWaveFormPart2.Controls.Add(Me.TWPrecision2, 1, 2) - Me.POWaveFormPart2.Dock = System.Windows.Forms.DockStyle.Top - Me.POWaveFormPart2.Location = New System.Drawing.Point(0, 83) - Me.POWaveFormPart2.Name = "POWaveFormPart2" - Me.POWaveFormPart2.RowCount = 5 - Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.POWaveFormPart2.Size = New System.Drawing.Size(183, 140) - Me.POWaveFormPart2.TabIndex = 5 - ' - 'TWSaturation - ' - Me.TWSaturation.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWSaturation.Increment = New Decimal(New Integer() {50, 0, 0, 0}) - Me.TWSaturation.Location = New System.Drawing.Point(137, 112) - Me.TWSaturation.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.TWSaturation.Maximum = New Decimal(New Integer() {1000, 0, 0, 0}) - Me.TWSaturation.Name = "TWSaturation" - Me.TWSaturation.Size = New System.Drawing.Size(43, 23) - Me.TWSaturation.TabIndex = 68 - ' - 'PictureBox2 - ' - Me.PictureBox2.Image = Global.iBMSC.My.Resources.Resources.WAVLeft - Me.PictureBox2.Location = New System.Drawing.Point(3, 0) - Me.PictureBox2.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox2.Name = "PictureBox2" - Me.PictureBox2.Size = New System.Drawing.Size(24, 24) - Me.PictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox2.TabIndex = 60 - Me.PictureBox2.TabStop = False - ' - 'TWTransparency - ' - Me.TWTransparency.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWTransparency.Increment = New Decimal(New Integer() {10, 0, 0, 0}) - Me.TWTransparency.Location = New System.Drawing.Point(137, 84) - Me.TWTransparency.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.TWTransparency.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) - Me.TWTransparency.Name = "TWTransparency" - Me.TWTransparency.Size = New System.Drawing.Size(43, 23) - Me.TWTransparency.TabIndex = 69 - Me.TWTransparency.Value = New Decimal(New Integer() {80, 0, 0, 0}) - ' - 'PictureBox3 - ' - Me.PictureBox3.Image = Global.iBMSC.My.Resources.Resources.WAVWidth - Me.PictureBox3.Location = New System.Drawing.Point(3, 28) - Me.PictureBox3.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox3.Name = "PictureBox3" - Me.PictureBox3.Size = New System.Drawing.Size(24, 24) - Me.PictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox3.TabIndex = 61 - Me.PictureBox3.TabStop = False - ' - 'TWPrecision - ' - Me.TWPrecision.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWPrecision.Location = New System.Drawing.Point(137, 56) - Me.TWPrecision.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.TWPrecision.Maximum = New Decimal(New Integer() {50, 0, 0, 0}) - Me.TWPrecision.Name = "TWPrecision" - Me.TWPrecision.Size = New System.Drawing.Size(43, 23) - Me.TWPrecision.TabIndex = 46 - Me.TWPrecision.Value = New Decimal(New Integer() {5, 0, 0, 0}) - ' - 'PictureBox4 - ' - Me.PictureBox4.Image = Global.iBMSC.My.Resources.Resources.WAVPrecision - Me.PictureBox4.Location = New System.Drawing.Point(3, 56) - Me.PictureBox4.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox4.Name = "PictureBox4" - Me.PictureBox4.Size = New System.Drawing.Size(24, 24) - Me.PictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox4.TabIndex = 62 - Me.PictureBox4.TabStop = False - ' - 'TWWidth - ' - Me.TWWidth.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWWidth.Increment = New Decimal(New Integer() {10, 0, 0, 0}) - Me.TWWidth.Location = New System.Drawing.Point(137, 28) - Me.TWWidth.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.TWWidth.Maximum = New Decimal(New Integer() {1000, 0, 0, 0}) - Me.TWWidth.Name = "TWWidth" - Me.TWWidth.Size = New System.Drawing.Size(43, 23) - Me.TWWidth.TabIndex = 45 - Me.TWWidth.Value = New Decimal(New Integer() {200, 0, 0, 0}) - ' - 'PictureBox5 - ' - Me.PictureBox5.Image = Global.iBMSC.My.Resources.Resources.WAVTransparency - Me.PictureBox5.Location = New System.Drawing.Point(3, 84) - Me.PictureBox5.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox5.Name = "PictureBox5" - Me.PictureBox5.Size = New System.Drawing.Size(24, 24) - Me.PictureBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox5.TabIndex = 67 - Me.PictureBox5.TabStop = False - ' - 'TWLeft - ' - Me.TWLeft.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWLeft.Increment = New Decimal(New Integer() {5, 0, 0, 0}) - Me.TWLeft.Location = New System.Drawing.Point(137, 0) - Me.TWLeft.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.TWLeft.Maximum = New Decimal(New Integer() {800, 0, 0, 0}) - Me.TWLeft.Name = "TWLeft" - Me.TWLeft.Size = New System.Drawing.Size(43, 23) - Me.TWLeft.TabIndex = 44 - Me.TWLeft.Value = New Decimal(New Integer() {50, 0, 0, 0}) - ' - 'PictureBox6 - ' - Me.PictureBox6.Image = Global.iBMSC.My.Resources.Resources.WAVSaturation - Me.PictureBox6.Location = New System.Drawing.Point(3, 112) - Me.PictureBox6.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox6.Name = "PictureBox6" - Me.PictureBox6.Size = New System.Drawing.Size(24, 24) - Me.PictureBox6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox6.TabIndex = 66 - Me.PictureBox6.TabStop = False - ' - 'TWSaturation2 - ' - Me.TWSaturation2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWSaturation2.LargeChange = 200 - Me.TWSaturation2.Location = New System.Drawing.Point(30, 112) - Me.TWSaturation2.Margin = New System.Windows.Forms.Padding(0) - Me.TWSaturation2.Maximum = 1000 - Me.TWSaturation2.Name = "TWSaturation2" - Me.TWSaturation2.Size = New System.Drawing.Size(107, 28) - Me.TWSaturation2.SmallChange = 50 - Me.TWSaturation2.TabIndex = 70 - Me.TWSaturation2.TickFrequency = 200 - ' - 'TWLeft2 - ' - Me.TWLeft2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWLeft2.LargeChange = 50 - Me.TWLeft2.Location = New System.Drawing.Point(30, 0) - Me.TWLeft2.Margin = New System.Windows.Forms.Padding(0) - Me.TWLeft2.Maximum = 800 - Me.TWLeft2.Name = "TWLeft2" - Me.TWLeft2.Size = New System.Drawing.Size(107, 28) - Me.TWLeft2.SmallChange = 10 - Me.TWLeft2.TabIndex = 63 - Me.TWLeft2.TickFrequency = 100 - Me.TWLeft2.Value = 50 - ' - 'TWTransparency2 - ' - Me.TWTransparency2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWTransparency2.LargeChange = 64 - Me.TWTransparency2.Location = New System.Drawing.Point(30, 84) - Me.TWTransparency2.Margin = New System.Windows.Forms.Padding(0) - Me.TWTransparency2.Maximum = 255 - Me.TWTransparency2.Name = "TWTransparency2" - Me.TWTransparency2.Size = New System.Drawing.Size(107, 28) - Me.TWTransparency2.SmallChange = 8 - Me.TWTransparency2.TabIndex = 71 - Me.TWTransparency2.TickFrequency = 64 - Me.TWTransparency2.Value = 80 - ' - 'TWWidth2 - ' - Me.TWWidth2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWWidth2.LargeChange = 50 - Me.TWWidth2.Location = New System.Drawing.Point(30, 28) - Me.TWWidth2.Margin = New System.Windows.Forms.Padding(0) - Me.TWWidth2.Maximum = 1000 - Me.TWWidth2.Name = "TWWidth2" - Me.TWWidth2.Size = New System.Drawing.Size(107, 28) - Me.TWWidth2.SmallChange = 10 - Me.TWWidth2.TabIndex = 64 - Me.TWWidth2.TickFrequency = 100 - Me.TWWidth2.Value = 200 - ' - 'TWPrecision2 - ' - Me.TWPrecision2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWPrecision2.LargeChange = 4 - Me.TWPrecision2.Location = New System.Drawing.Point(30, 56) - Me.TWPrecision2.Margin = New System.Windows.Forms.Padding(0) - Me.TWPrecision2.Maximum = 50 - Me.TWPrecision2.Name = "TWPrecision2" - Me.TWPrecision2.Size = New System.Drawing.Size(107, 28) - Me.TWPrecision2.TabIndex = 65 - Me.TWPrecision2.TickFrequency = 5 - Me.TWPrecision2.Value = 5 - ' - 'POWaveFormExpander - ' - Me.POWaveFormExpander.Appearance = System.Windows.Forms.Appearance.Button - Me.POWaveFormExpander.AutoSize = True - Me.POWaveFormExpander.Cursor = System.Windows.Forms.Cursors.Hand - Me.POWaveFormExpander.Dock = System.Windows.Forms.DockStyle.Top - Me.POWaveFormExpander.FlatAppearance.BorderSize = 0 - Me.POWaveFormExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.POWaveFormExpander.Location = New System.Drawing.Point(0, 58) - Me.POWaveFormExpander.Margin = New System.Windows.Forms.Padding(0) - Me.POWaveFormExpander.Name = "POWaveFormExpander" - Me.POWaveFormExpander.Size = New System.Drawing.Size(183, 25) - Me.POWaveFormExpander.TabIndex = 29 - Me.POWaveFormExpander.TabStop = False - Me.POWaveFormExpander.Text = "Expand..." - Me.POWaveFormExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POWaveFormExpander.UseVisualStyleBackColor = False - ' - 'POWaveFormPart1 - ' - Me.POWaveFormPart1.AutoSize = True - Me.POWaveFormPart1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POWaveFormPart1.ColumnCount = 1 - Me.POWaveFormPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POWaveFormPart1.Controls.Add(Me.TableLayoutPanel1, 0, 0) - Me.POWaveFormPart1.Controls.Add(Me.TableLayoutPanel6, 0, 1) - Me.POWaveFormPart1.Dock = System.Windows.Forms.DockStyle.Top - Me.POWaveFormPart1.Location = New System.Drawing.Point(0, 0) - Me.POWaveFormPart1.Name = "POWaveFormPart1" - Me.POWaveFormPart1.RowCount = 2 - Me.POWaveFormPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWaveFormPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POWaveFormPart1.Size = New System.Drawing.Size(183, 58) - Me.POWaveFormPart1.TabIndex = 4 - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.AutoSize = True - Me.TableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.TableLayoutPanel1.Controls.Add(Me.FlowLayoutPanel1, 0, 0) - Me.TableLayoutPanel1.Controls.Add(Me.TWFileName, 1, 0) - Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 0) - Me.TableLayoutPanel1.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 1 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(183, 30) - Me.TableLayoutPanel1.TabIndex = 0 - ' - 'FlowLayoutPanel1 - ' - Me.FlowLayoutPanel1.AutoSize = True - Me.FlowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.FlowLayoutPanel1.Controls.Add(Me.BWLoad) - Me.FlowLayoutPanel1.Controls.Add(Me.BWClear) - Me.FlowLayoutPanel1.Controls.Add(Me.BWLock) - Me.FlowLayoutPanel1.Location = New System.Drawing.Point(3, 3) - Me.FlowLayoutPanel1.Name = "FlowLayoutPanel1" - Me.FlowLayoutPanel1.Size = New System.Drawing.Size(72, 24) - Me.FlowLayoutPanel1.TabIndex = 72 - Me.FlowLayoutPanel1.WrapContents = False - ' - 'BWLoad - ' - Me.BWLoad.Image = Global.iBMSC.My.Resources.Resources.x16Add - Me.BWLoad.Location = New System.Drawing.Point(0, 0) - Me.BWLoad.Margin = New System.Windows.Forms.Padding(0) - Me.BWLoad.Name = "BWLoad" - Me.BWLoad.Size = New System.Drawing.Size(24, 24) - Me.BWLoad.TabIndex = 40 - Me.ToolTipUniversal.SetToolTip(Me.BWLoad, "Load WaveForm") - Me.BWLoad.UseVisualStyleBackColor = True - ' - 'BWClear - ' - Me.BWClear.Image = Global.iBMSC.My.Resources.Resources.x16Remove - Me.BWClear.Location = New System.Drawing.Point(24, 0) - Me.BWClear.Margin = New System.Windows.Forms.Padding(0) - Me.BWClear.Name = "BWClear" - Me.BWClear.Size = New System.Drawing.Size(24, 24) - Me.BWClear.TabIndex = 41 - Me.ToolTipUniversal.SetToolTip(Me.BWClear, "Clear WaveForm") - Me.BWClear.UseVisualStyleBackColor = True - ' - 'BWLock - ' - Me.BWLock.Appearance = System.Windows.Forms.Appearance.Button - Me.BWLock.Checked = True - Me.BWLock.CheckState = System.Windows.Forms.CheckState.Checked - Me.BWLock.Image = Global.iBMSC.My.Resources.Resources.x16Lock - Me.BWLock.Location = New System.Drawing.Point(48, 0) - Me.BWLock.Margin = New System.Windows.Forms.Padding(0) - Me.BWLock.Name = "BWLock" - Me.BWLock.Size = New System.Drawing.Size(24, 24) - Me.BWLock.TabIndex = 0 - Me.ToolTipUniversal.SetToolTip(Me.BWLock, "Lock to BGM") - Me.BWLock.UseVisualStyleBackColor = True - ' - 'TWFileName - ' - Me.TWFileName.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWFileName.Location = New System.Drawing.Point(81, 3) - Me.TWFileName.Name = "TWFileName" - Me.TWFileName.ReadOnly = True - Me.TWFileName.Size = New System.Drawing.Size(99, 23) - Me.TWFileName.TabIndex = 42 - Me.TWFileName.Text = "(None)" - ' - 'TableLayoutPanel6 - ' - Me.TableLayoutPanel6.AutoSize = True - Me.TableLayoutPanel6.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel6.ColumnCount = 3 - Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60.0!)) - Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.0!)) - Me.TableLayoutPanel6.Controls.Add(Me.PictureBox1, 0, 0) - Me.TableLayoutPanel6.Controls.Add(Me.TWPosition2, 1, 0) - Me.TableLayoutPanel6.Controls.Add(Me.TWPosition, 2, 0) - Me.TableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel6.Location = New System.Drawing.Point(0, 30) - Me.TableLayoutPanel6.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel6.Name = "TableLayoutPanel6" - Me.TableLayoutPanel6.RowCount = 1 - Me.TableLayoutPanel6.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.TableLayoutPanel6.Size = New System.Drawing.Size(183, 28) - Me.TableLayoutPanel6.TabIndex = 1 - ' - 'PictureBox1 - ' - Me.PictureBox1.Image = Global.iBMSC.My.Resources.Resources.WAVOffset - Me.PictureBox1.Location = New System.Drawing.Point(3, 0) - Me.PictureBox1.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(24, 24) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox1.TabIndex = 59 - Me.PictureBox1.TabStop = False - ' - 'TWPosition2 - ' - Me.TWPosition2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWPosition2.Enabled = False - Me.TWPosition2.LargeChange = 24 - Me.TWPosition2.Location = New System.Drawing.Point(30, 0) - Me.TWPosition2.Margin = New System.Windows.Forms.Padding(0) - Me.TWPosition2.Maximum = 960 - Me.TWPosition2.Name = "TWPosition2" - Me.TWPosition2.Size = New System.Drawing.Size(91, 28) - Me.TWPosition2.TabIndex = 58 - Me.TWPosition2.TickFrequency = 192 - ' - 'TWPosition - ' - Me.TWPosition.DecimalPlaces = 2 - Me.TWPosition.Dock = System.Windows.Forms.DockStyle.Fill - Me.TWPosition.Enabled = False - Me.TWPosition.Location = New System.Drawing.Point(121, 0) - Me.TWPosition.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.TWPosition.Maximum = New Decimal(New Integer() {192000, 0, 0, 0}) - Me.TWPosition.Name = "TWPosition" - Me.TWPosition.Size = New System.Drawing.Size(59, 23) - Me.TWPosition.TabIndex = 43 - ' - 'POWaveFormSwitch - ' - Me.POWaveFormSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POWaveFormSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POWaveFormSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POWaveFormSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POWaveFormSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POWaveFormSwitch.Location = New System.Drawing.Point(0, 0) - Me.POWaveFormSwitch.Name = "POWaveFormSwitch" - Me.POWaveFormSwitch.Size = New System.Drawing.Size(183, 20) - Me.POWaveFormSwitch.TabIndex = 3 - Me.POWaveFormSwitch.TabStop = False - Me.POWaveFormSwitch.Text = "WaveForm" - Me.POWaveFormSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POWaveFormSwitch.UseCompatibleTextRendering = True - Me.POWaveFormSwitch.UseVisualStyleBackColor = False - ' - 'POGrid - ' - Me.POGrid.AutoSize = True - Me.POGrid.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POGrid.Controls.Add(Me.POGridInner) - Me.POGrid.Controls.Add(Me.POGridSwitch) - Me.POGrid.Dock = System.Windows.Forms.DockStyle.Top - Me.POGrid.Location = New System.Drawing.Point(0, 439) - Me.POGrid.Name = "POGrid" - Me.POGrid.Size = New System.Drawing.Size(183, 230) - Me.POGrid.TabIndex = 2 - ' - 'POGridInner - ' - Me.POGridInner.AutoSize = True - Me.POGridInner.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POGridInner.Controls.Add(Me.POGridPart2) - Me.POGridInner.Controls.Add(Me.POGridExpander) - Me.POGridInner.Controls.Add(Me.POGridPart1) - Me.POGridInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POGridInner.Location = New System.Drawing.Point(0, 20) - Me.POGridInner.Name = "POGridInner" - Me.POGridInner.Size = New System.Drawing.Size(183, 210) - Me.POGridInner.TabIndex = 3 - ' - 'POGridPart2 - ' - Me.POGridPart2.AutoSize = True - Me.POGridPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POGridPart2.ColumnCount = 1 - Me.POGridPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POGridPart2.Controls.Add(Me.TableLayoutPanel5, 0, 1) - Me.POGridPart2.Controls.Add(Me.TableLayoutPanel4, 0, 0) - Me.POGridPart2.Dock = System.Windows.Forms.DockStyle.Top - Me.POGridPart2.Location = New System.Drawing.Point(0, 152) - Me.POGridPart2.Name = "POGridPart2" - Me.POGridPart2.RowCount = 2 - Me.POGridPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POGridPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POGridPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - Me.POGridPart2.Size = New System.Drawing.Size(183, 58) - Me.POGridPart2.TabIndex = 0 - ' - 'TableLayoutPanel5 - ' - Me.TableLayoutPanel5.AutoSize = True - Me.TableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel5.ColumnCount = 2 - Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.TableLayoutPanel5.Controls.Add(Me.FlowLayoutPanel2, 1, 0) - Me.TableLayoutPanel5.Controls.Add(Me.Label5, 0, 0) - Me.TableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel5.Location = New System.Drawing.Point(0, 29) - Me.TableLayoutPanel5.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel5.Name = "TableLayoutPanel5" - Me.TableLayoutPanel5.RowCount = 1 - Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.TableLayoutPanel5.Size = New System.Drawing.Size(183, 29) - Me.TableLayoutPanel5.TabIndex = 46 - ' - 'FlowLayoutPanel2 - ' - Me.FlowLayoutPanel2.AutoSize = True - Me.FlowLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.FlowLayoutPanel2.Controls.Add(Me.cVSLockL) - Me.FlowLayoutPanel2.Controls.Add(Me.cVSLock) - Me.FlowLayoutPanel2.Controls.Add(Me.cVSLockR) - Me.FlowLayoutPanel2.Location = New System.Drawing.Point(115, 3) - Me.FlowLayoutPanel2.Name = "FlowLayoutPanel2" - Me.FlowLayoutPanel2.Size = New System.Drawing.Size(65, 23) - Me.FlowLayoutPanel2.TabIndex = 72 - Me.FlowLayoutPanel2.WrapContents = False - ' - 'cVSLockL - ' - Me.cVSLockL.Appearance = System.Windows.Forms.Appearance.Button - Me.cVSLockL.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.cVSLockL.Image = Global.iBMSC.My.Resources.Resources.x16Lock - Me.cVSLockL.Location = New System.Drawing.Point(0, 0) - Me.cVSLockL.Margin = New System.Windows.Forms.Padding(0) - Me.cVSLockL.Name = "cVSLockL" - Me.cVSLockL.Size = New System.Drawing.Size(23, 23) - Me.cVSLockL.TabIndex = 38 - Me.cVSLockL.Tag = "0" - Me.ToolTipUniversal.SetToolTip(Me.cVSLockL, "Lock Left Editing Panel") - ' - 'cVSLock - ' - Me.cVSLock.Appearance = System.Windows.Forms.Appearance.Button - Me.cVSLock.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.cVSLock.Image = Global.iBMSC.My.Resources.Resources.x16Lock - Me.cVSLock.Location = New System.Drawing.Point(23, 0) - Me.cVSLock.Margin = New System.Windows.Forms.Padding(0) - Me.cVSLock.Name = "cVSLock" - Me.cVSLock.Size = New System.Drawing.Size(23, 23) - Me.cVSLock.TabIndex = 40 - Me.cVSLock.Tag = "1" - Me.ToolTipUniversal.SetToolTip(Me.cVSLock, "Lock Middle Editing Panel") - ' - 'cVSLockR - ' - Me.cVSLockR.Appearance = System.Windows.Forms.Appearance.Button - Me.cVSLockR.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.cVSLockR.Image = Global.iBMSC.My.Resources.Resources.x16Lock - Me.cVSLockR.Location = New System.Drawing.Point(46, 0) - Me.cVSLockR.Margin = New System.Windows.Forms.Padding(0) - Me.cVSLockR.Name = "cVSLockR" - Me.cVSLockR.Size = New System.Drawing.Size(23, 23) - Me.cVSLockR.TabIndex = 41 - Me.cVSLockR.Tag = "2" - Me.ToolTipUniversal.SetToolTip(Me.cVSLockR, "Lock Right Editing Panel") - ' - 'Label5 - ' - Me.Label5.AutoSize = True - Me.Label5.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label5.Location = New System.Drawing.Point(3, 0) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(106, 29) - Me.Label5.TabIndex = 39 - Me.Label5.Text = "Vertical Scroll Lock" - Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'TableLayoutPanel4 - ' - Me.TableLayoutPanel4.AutoSize = True - Me.TableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel4.ColumnCount = 2 - Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.TableLayoutPanel4.Controls.Add(Me.Label1, 0, 0) - Me.TableLayoutPanel4.Controls.Add(Me.CGB, 1, 0) - Me.TableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel4.Location = New System.Drawing.Point(0, 0) - Me.TableLayoutPanel4.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel4.Name = "TableLayoutPanel4" - Me.TableLayoutPanel4.RowCount = 1 - Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.TableLayoutPanel4.Size = New System.Drawing.Size(183, 29) - Me.TableLayoutPanel4.TabIndex = 44 - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label1.Location = New System.Drawing.Point(3, 0) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(126, 29) - Me.Label1.TabIndex = 43 - Me.Label1.Text = "Number of B Columns" - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'CGB - ' - Me.CGB.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGB.Location = New System.Drawing.Point(135, 3) - Me.CGB.Maximum = New Decimal(New Integer() {999, 0, 0, 0}) - Me.CGB.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.CGB.Name = "CGB" - Me.CGB.Size = New System.Drawing.Size(45, 23) - Me.CGB.TabIndex = 35 - Me.CGB.Value = New Decimal(New Integer() {15, 0, 0, 0}) - ' - 'POGridExpander - ' - Me.POGridExpander.Appearance = System.Windows.Forms.Appearance.Button - Me.POGridExpander.AutoSize = True - Me.POGridExpander.Cursor = System.Windows.Forms.Cursors.Hand - Me.POGridExpander.Dock = System.Windows.Forms.DockStyle.Top - Me.POGridExpander.FlatAppearance.BorderSize = 0 - Me.POGridExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.POGridExpander.Location = New System.Drawing.Point(0, 127) - Me.POGridExpander.Margin = New System.Windows.Forms.Padding(0) - Me.POGridExpander.Name = "POGridExpander" - Me.POGridExpander.Size = New System.Drawing.Size(183, 25) - Me.POGridExpander.TabIndex = 27 - Me.POGridExpander.TabStop = False - Me.POGridExpander.Text = "Expand..." - Me.POGridExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POGridExpander.UseVisualStyleBackColor = False - ' - 'POGridPart1 - ' - Me.POGridPart1.AutoSize = True - Me.POGridPart1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POGridPart1.ColumnCount = 1 - Me.POGridPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POGridPart1.Controls.Add(Me.TableLayoutPanel3, 0, 1) - Me.POGridPart1.Controls.Add(Me.CGDisableVertical, 0, 3) - Me.POGridPart1.Controls.Add(Me.CGSnap, 0, 2) - Me.POGridPart1.Controls.Add(Me.TableLayoutPanel2, 0, 0) - Me.POGridPart1.Dock = System.Windows.Forms.DockStyle.Top - Me.POGridPart1.Location = New System.Drawing.Point(0, 0) - Me.POGridPart1.Name = "POGridPart1" - Me.POGridPart1.RowCount = 4 - Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - Me.POGridPart1.Size = New System.Drawing.Size(183, 127) - Me.POGridPart1.TabIndex = 11 - ' - 'TableLayoutPanel3 - ' - Me.TableLayoutPanel3.AutoSize = True - Me.TableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel3.ColumnCount = 3 - Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70.0!)) - Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) - Me.TableLayoutPanel3.Controls.Add(Me.PictureBox9, 0, 0) - Me.TableLayoutPanel3.Controls.Add(Me.CGHeight2, 1, 0) - Me.TableLayoutPanel3.Controls.Add(Me.CGHeight, 2, 0) - Me.TableLayoutPanel3.Controls.Add(Me.PictureBox10, 0, 1) - Me.TableLayoutPanel3.Controls.Add(Me.CGWidth2, 1, 1) - Me.TableLayoutPanel3.Controls.Add(Me.CGWidth, 2, 1) - Me.TableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel3.Location = New System.Drawing.Point(0, 30) - Me.TableLayoutPanel3.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel3.Name = "TableLayoutPanel3" - Me.TableLayoutPanel3.RowCount = 2 - Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - Me.TableLayoutPanel3.Size = New System.Drawing.Size(183, 56) - Me.TableLayoutPanel3.TabIndex = 12 - ' - 'PictureBox9 - ' - Me.PictureBox9.Image = Global.iBMSC.My.Resources.Resources.lgheight - Me.PictureBox9.Location = New System.Drawing.Point(3, 0) - Me.PictureBox9.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox9.Name = "PictureBox9" - Me.PictureBox9.Size = New System.Drawing.Size(24, 24) - Me.PictureBox9.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox9.TabIndex = 27 - Me.PictureBox9.TabStop = False - ' - 'CGHeight2 - ' - Me.CGHeight2.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGHeight2.LargeChange = 4 - Me.CGHeight2.Location = New System.Drawing.Point(30, 0) - Me.CGHeight2.Margin = New System.Windows.Forms.Padding(0) - Me.CGHeight2.Maximum = 20 - Me.CGHeight2.Minimum = 1 - Me.CGHeight2.Name = "CGHeight2" - Me.CGHeight2.Size = New System.Drawing.Size(107, 28) - Me.CGHeight2.TabIndex = 29 - Me.CGHeight2.TickFrequency = 2 - Me.CGHeight2.Value = 4 - ' - 'CGHeight - ' - Me.CGHeight.DecimalPlaces = 2 - Me.CGHeight.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGHeight.Increment = New Decimal(New Integer() {25, 0, 0, 131072}) - Me.CGHeight.Location = New System.Drawing.Point(137, 0) - Me.CGHeight.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.CGHeight.Maximum = New Decimal(New Integer() {99, 0, 0, 0}) - Me.CGHeight.Minimum = New Decimal(New Integer() {25, 0, 0, 131072}) - Me.CGHeight.Name = "CGHeight" - Me.CGHeight.Size = New System.Drawing.Size(43, 23) - Me.CGHeight.TabIndex = 23 - Me.CGHeight.Value = New Decimal(New Integer() {1, 0, 0, 0}) - ' - 'PictureBox10 - ' - Me.PictureBox10.Image = Global.iBMSC.My.Resources.Resources.lgwidth - Me.PictureBox10.Location = New System.Drawing.Point(3, 28) - Me.PictureBox10.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.PictureBox10.Name = "PictureBox10" - Me.PictureBox10.Size = New System.Drawing.Size(24, 24) - Me.PictureBox10.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox10.TabIndex = 28 - Me.PictureBox10.TabStop = False - ' - 'CGWidth2 - ' - Me.CGWidth2.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGWidth2.LargeChange = 4 - Me.CGWidth2.Location = New System.Drawing.Point(30, 28) - Me.CGWidth2.Margin = New System.Windows.Forms.Padding(0) - Me.CGWidth2.Maximum = 20 - Me.CGWidth2.Minimum = 1 - Me.CGWidth2.Name = "CGWidth2" - Me.CGWidth2.Size = New System.Drawing.Size(107, 28) - Me.CGWidth2.TabIndex = 30 - Me.CGWidth2.TickFrequency = 2 - Me.CGWidth2.Value = 4 - ' - 'CGWidth - ' - Me.CGWidth.DecimalPlaces = 2 - Me.CGWidth.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGWidth.Increment = New Decimal(New Integer() {25, 0, 0, 131072}) - Me.CGWidth.Location = New System.Drawing.Point(137, 28) - Me.CGWidth.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.CGWidth.Maximum = New Decimal(New Integer() {99, 0, 0, 0}) - Me.CGWidth.Minimum = New Decimal(New Integer() {25, 0, 0, 131072}) - Me.CGWidth.Name = "CGWidth" - Me.CGWidth.Size = New System.Drawing.Size(43, 23) - Me.CGWidth.TabIndex = 24 - Me.CGWidth.Value = New Decimal(New Integer() {1, 0, 0, 0}) - ' - 'CGDisableVertical - ' - Me.CGDisableVertical.AutoSize = True - Me.CGDisableVertical.Location = New System.Drawing.Point(3, 108) - Me.CGDisableVertical.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) - Me.CGDisableVertical.Name = "CGDisableVertical" - Me.CGDisableVertical.Size = New System.Drawing.Size(162, 19) - Me.CGDisableVertical.TabIndex = 45 - Me.CGDisableVertical.Text = "Disable vertical moves (D)" - Me.CGDisableVertical.UseVisualStyleBackColor = True - ' - 'CGSnap - ' - Me.CGSnap.AutoSize = True - Me.CGSnap.Checked = True - Me.CGSnap.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGSnap.Location = New System.Drawing.Point(3, 89) - Me.CGSnap.Margin = New System.Windows.Forms.Padding(3, 3, 3, 0) - Me.CGSnap.Name = "CGSnap" - Me.CGSnap.Size = New System.Drawing.Size(109, 19) - Me.CGSnap.TabIndex = 10 - Me.CGSnap.Text = "Snap to grid (G)" - Me.CGSnap.UseVisualStyleBackColor = True - ' - 'TableLayoutPanel2 - ' - Me.TableLayoutPanel2.AutoSize = True - Me.TableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.TableLayoutPanel2.ColumnCount = 4 - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.TableLayoutPanel2.Controls.Add(Me.PictureBox7, 0, 0) - Me.TableLayoutPanel2.Controls.Add(Me.CGDivide, 1, 0) - Me.TableLayoutPanel2.Controls.Add(Me.CGSub, 2, 0) - Me.TableLayoutPanel2.Controls.Add(Me.BGSlash, 3, 0) - Me.TableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill - Me.TableLayoutPanel2.Location = New System.Drawing.Point(0, 0) - Me.TableLayoutPanel2.Margin = New System.Windows.Forms.Padding(0) - Me.TableLayoutPanel2.Name = "TableLayoutPanel2" - Me.TableLayoutPanel2.RowCount = 1 - Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.TableLayoutPanel2.Size = New System.Drawing.Size(183, 30) - Me.TableLayoutPanel2.TabIndex = 11 - ' - 'PictureBox7 - ' - Me.PictureBox7.Anchor = System.Windows.Forms.AnchorStyles.None - Me.PictureBox7.Image = Global.iBMSC.My.Resources.Resources.lgpartition - Me.PictureBox7.Location = New System.Drawing.Point(3, 3) - Me.PictureBox7.Name = "PictureBox7" - Me.PictureBox7.Size = New System.Drawing.Size(24, 24) - Me.PictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox7.TabIndex = 25 - Me.PictureBox7.TabStop = False - ' - 'CGDivide - ' - Me.CGDivide.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGDivide.Location = New System.Drawing.Point(33, 3) - Me.CGDivide.Maximum = New Decimal(New Integer() {1920, 0, 0, 0}) - Me.CGDivide.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.CGDivide.Name = "CGDivide" - Me.CGDivide.Size = New System.Drawing.Size(58, 23) - Me.CGDivide.TabIndex = 36 - Me.CGDivide.Value = New Decimal(New Integer() {16, 0, 0, 0}) - ' - 'CGSub - ' - Me.CGSub.Dock = System.Windows.Forms.DockStyle.Fill - Me.CGSub.Location = New System.Drawing.Point(97, 3) - Me.CGSub.Maximum = New Decimal(New Integer() {1920, 0, 0, 0}) - Me.CGSub.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) - Me.CGSub.Name = "CGSub" - Me.CGSub.Size = New System.Drawing.Size(58, 23) - Me.CGSub.TabIndex = 37 - Me.CGSub.Value = New Decimal(New Integer() {4, 0, 0, 0}) - ' - 'BGSlash - ' - Me.BGSlash.Anchor = System.Windows.Forms.AnchorStyles.None - Me.BGSlash.Image = Global.iBMSC.My.Resources.Resources.Shortcut - Me.BGSlash.Location = New System.Drawing.Point(158, 4) - Me.BGSlash.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) - Me.BGSlash.Name = "BGSlash" - Me.BGSlash.Size = New System.Drawing.Size(22, 22) - Me.BGSlash.TabIndex = 38 - Me.BGSlash.UseVisualStyleBackColor = True - ' - 'POGridSwitch - ' - Me.POGridSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POGridSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POGridSwitch.Checked = True - Me.POGridSwitch.CheckState = System.Windows.Forms.CheckState.Checked - Me.POGridSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POGridSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POGridSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POGridSwitch.Location = New System.Drawing.Point(0, 0) - Me.POGridSwitch.Name = "POGridSwitch" - Me.POGridSwitch.Size = New System.Drawing.Size(183, 20) - Me.POGridSwitch.TabIndex = 2 - Me.POGridSwitch.TabStop = False - Me.POGridSwitch.Text = "Grid" - Me.POGridSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POGridSwitch.UseCompatibleTextRendering = True - Me.POGridSwitch.UseVisualStyleBackColor = False - ' - 'POHeader - ' - Me.POHeader.AutoSize = True - Me.POHeader.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POHeader.Controls.Add(Me.POHeaderInner) - Me.POHeader.Controls.Add(Me.POHeaderSwitch) - Me.POHeader.Dock = System.Windows.Forms.DockStyle.Top - Me.POHeader.Location = New System.Drawing.Point(0, 0) - Me.POHeader.Name = "POHeader" - Me.POHeader.Size = New System.Drawing.Size(183, 439) - Me.POHeader.TabIndex = 1 - ' - 'POHeaderInner - ' - Me.POHeaderInner.AutoSize = True - Me.POHeaderInner.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POHeaderInner.Controls.Add(Me.POHeaderPart2) - Me.POHeaderInner.Controls.Add(Me.POHeaderExpander) - Me.POHeaderInner.Controls.Add(Me.POHeaderPart1) - Me.POHeaderInner.Dock = System.Windows.Forms.DockStyle.Top - Me.POHeaderInner.Location = New System.Drawing.Point(0, 20) - Me.POHeaderInner.Name = "POHeaderInner" - Me.POHeaderInner.Size = New System.Drawing.Size(183, 419) - Me.POHeaderInner.TabIndex = 2 - ' - 'POHeaderPart2 - ' - Me.POHeaderPart2.AutoSize = True - Me.POHeaderPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POHeaderPart2.ColumnCount = 3 - Me.POHeaderPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.POHeaderPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POHeaderPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.POHeaderPart2.Controls.Add(Me.CHDifficulty, 1, 5) - Me.POHeaderPart2.Controls.Add(Me.Label13, 2, 6) - Me.POHeaderPart2.Controls.Add(Me.THExRank, 1, 6) - Me.POHeaderPart2.Controls.Add(Me.Label25, 2, 7) - Me.POHeaderPart2.Controls.Add(Me.CHLnObj, 1, 9) - Me.POHeaderPart2.Controls.Add(Me.Label23, 0, 6) - Me.POHeaderPart2.Controls.Add(Me.Label21, 0, 5) - Me.POHeaderPart2.Controls.Add(Me.THComment, 1, 8) - Me.POHeaderPart2.Controls.Add(Me.Label24, 0, 9) - Me.POHeaderPart2.Controls.Add(Me.Label15, 0, 0) - Me.POHeaderPart2.Controls.Add(Me.THTotal, 1, 7) - Me.POHeaderPart2.Controls.Add(Me.Label20, 0, 7) - Me.POHeaderPart2.Controls.Add(Me.BHStageFile, 2, 2) - Me.POHeaderPart2.Controls.Add(Me.BHBanner, 2, 3) - Me.POHeaderPart2.Controls.Add(Me.Label19, 0, 8) - Me.POHeaderPart2.Controls.Add(Me.BHBackBMP, 2, 4) - Me.POHeaderPart2.Controls.Add(Me.Label17, 0, 1) - Me.POHeaderPart2.Controls.Add(Me.Label16, 0, 2) - Me.POHeaderPart2.Controls.Add(Me.Label12, 0, 3) - Me.POHeaderPart2.Controls.Add(Me.THBackBMP, 1, 4) - Me.POHeaderPart2.Controls.Add(Me.Label11, 0, 4) - Me.POHeaderPart2.Controls.Add(Me.THBanner, 1, 3) - Me.POHeaderPart2.Controls.Add(Me.THStageFile, 1, 2) - Me.POHeaderPart2.Controls.Add(Me.THSubTitle, 1, 0) - Me.POHeaderPart2.Controls.Add(Me.THSubArtist, 1, 1) - Me.POHeaderPart2.Dock = System.Windows.Forms.DockStyle.Top - Me.POHeaderPart2.Location = New System.Drawing.Point(0, 186) - Me.POHeaderPart2.Name = "POHeaderPart2" - Me.POHeaderPart2.RowCount = 10 - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart2.Size = New System.Drawing.Size(183, 233) - Me.POHeaderPart2.TabIndex = 27 - ' - 'CHDifficulty - ' - Me.POHeaderPart2.SetColumnSpan(Me.CHDifficulty, 2) - Me.CHDifficulty.Dock = System.Windows.Forms.DockStyle.Top - Me.CHDifficulty.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.CHDifficulty.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.CHDifficulty.Items.AddRange(New Object() {"None", "1 - EZ / Beginner", "2 - NM / Normal", "3 - HD / Hyper", "4 - MX / Another", "5 - SC / Insane"}) - Me.CHDifficulty.Location = New System.Drawing.Point(67, 118) - Me.CHDifficulty.Margin = New System.Windows.Forms.Padding(0) - Me.CHDifficulty.Name = "CHDifficulty" - Me.CHDifficulty.Size = New System.Drawing.Size(116, 23) - Me.CHDifficulty.TabIndex = 63 - ' - 'Label13 - ' - Me.Label13.AutoSize = True - Me.Label13.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label13.Location = New System.Drawing.Point(158, 141) - Me.Label13.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.Label13.Name = "Label13" - Me.Label13.Size = New System.Drawing.Size(25, 23) - Me.Label13.TabIndex = 63 - Me.Label13.Text = "(%)" - Me.Label13.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'THExRank - ' - Me.THExRank.Dock = System.Windows.Forms.DockStyle.Fill - Me.THExRank.Location = New System.Drawing.Point(67, 141) - Me.THExRank.Margin = New System.Windows.Forms.Padding(0) - Me.THExRank.Name = "THExRank" - Me.THExRank.Size = New System.Drawing.Size(88, 23) - Me.THExRank.TabIndex = 27 - ' - 'Label25 - ' - Me.Label25.AutoSize = True - Me.Label25.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label25.Location = New System.Drawing.Point(158, 164) - Me.Label25.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.Label25.Name = "Label25" - Me.Label25.Size = New System.Drawing.Size(25, 23) - Me.Label25.TabIndex = 23 - Me.Label25.Text = "(%)" - Me.Label25.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'CHLnObj - ' - Me.POHeaderPart2.SetColumnSpan(Me.CHLnObj, 2) - Me.CHLnObj.Dock = System.Windows.Forms.DockStyle.Top - Me.CHLnObj.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.CHLnObj.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.CHLnObj.Items.AddRange(New Object() {"None (#LnType 1)", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "0G", "0H", "0I", "0J", "0K", "0L", "0M", "0N", "0O", "0P", "0Q", "0R", "0S", "0T", "0U", "0V", "0W", "0X", "0Y", "0Z", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "1G", "1H", "1I", "1J", "1K", "1L", "1M", "1N", "1O", "1P", "1Q", "1R", "1S", "1T", "1U", "1V", "1W", "1X", "1Y", "1Z", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "2G", "2H", "2I", "2J", "2K", "2L", "2M", "2N", "2O", "2P", "2Q", "2R", "2S", "2T", "2U", "2V", "2W", "2X", "2Y", "2Z", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "3G", "3H", "3I", "3J", "3K", "3L", "3M", "3N", "3O", "3P", "3Q", "3R", "3S", "3T", "3U", "3V", "3W", "3X", "3Y", "3Z", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "4G", "4H", "4I", "4J", "4K", "4L", "4M", "4N", "4O", "4P", "4Q", "4R", "4S", "4T", "4U", "4V", "4W", "4X", "4Y", "4Z", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F", "5G", "5H", "5I", "5J", "5K", "5L", "5M", "5N", "5O", "5P", "5Q", "5R", "5S", "5T", "5U", "5V", "5W", "5X", "5Y", "5Z", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F", "6G", "6H", "6I", "6J", "6K", "6L", "6M", "6N", "6O", "6P", "6Q", "6R", "6S", "6T", "6U", "6V", "6W", "6X", "6Y", "6Z", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "7F", "7G", "7H", "7I", "7J", "7K", "7L", "7M", "7N", "7O", "7P", "7Q", "7R", "7S", "7T", "7U", "7V", "7W", "7X", "7Y", "7Z", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8A", "8B", "8C", "8D", "8E", "8F", "8G", "8H", "8I", "8J", "8K", "8L", "8M", "8N", "8O", "8P", "8Q", "8R", "8S", "8T", "8U", "8V", "8W", "8X", "8Y", "8Z", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F", "9G", "9H", "9I", "9J", "9K", "9L", "9M", "9N", "9O", "9P", "9Q", "9R", "9S", "9T", "9U", "9V", "9W", "9X", "9Y", "9Z", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CI", "CJ", "CK", "CL", "CM", "CN", "CO", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ", "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "DG", "DH", "DI", "DJ", "DK", "DL", "DM", "DN", "DO", "DP", "DQ", "DR", "DS", "DT", "DU", "DV", "DW", "DX", "DY", "DZ", "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EI", "EJ", "EK", "EL", "EM", "EN", "EO", "EP", "EQ", "ER", "ES", "ET", "EU", "EV", "EW", "EX", "EY", "EZ", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FI", "FJ", "FK", "FL", "FM", "FN", "FO", "FP", "FQ", "FR", "FS", "FT", "FU", "FV", "FW", "FX", "FY", "FZ", "G0", "G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8", "G9", "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GI", "GJ", "GK", "GL", "GM", "GN", "GO", "GP", "GQ", "GR", "GS", "GT", "GU", "GV", "GW", "GX", "GY", "GZ", "H0", "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HI", "HJ", "HK", "HL", "HM", "HN", "HO", "HP", "HQ", "HR", "HS", "HT", "HU", "HV", "HW", "HX", "HY", "HZ", "I0", "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8", "I9", "IA", "IB", "IC", "ID", "IE", "IF", "IG", "IH", "II", "IJ", "IK", "IL", "IM", "IN", "IO", "IP", "IQ", "IR", "IS", "IT", "IU", "IV", "IW", "IX", "IY", "IZ", "J0", "J1", "J2", "J3", "J4", "J5", "J6", "J7", "J8", "J9", "JA", "JB", "JC", "JD", "JE", "JF", "JG", "JH", "JI", "JJ", "JK", "JL", "JM", "JN", "JO", "JP", "JQ", "JR", "JS", "JT", "JU", "JV", "JW", "JX", "JY", "JZ", "K0", "K1", "K2", "K3", "K4", "K5", "K6", "K7", "K8", "K9", "KA", "KB", "KC", "KD", "KE", "KF", "KG", "KH", "KI", "KJ", "KK", "KL", "KM", "KN", "KO", "KP", "KQ", "KR", "KS", "KT", "KU", "KV", "KW", "KX", "KY", "KZ", "L0", "L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9", "LA", "LB", "LC", "LD", "LE", "LF", "LG", "LH", "LI", "LJ", "LK", "LL", "LM", "LN", "LO", "LP", "LQ", "LR", "LS", "LT", "LU", "LV", "LW", "LX", "LY", "LZ", "M0", "M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "MA", "MB", "MC", "MD", "ME", "MF", "MG", "MH", "MI", "MJ", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "N0", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "NA", "NB", "NC", "ND", "NE", "NF", "NG", "NH", "NI", "NJ", "NK", "NL", "NM", "NN", "NO", "NP", "NQ", "NR", "NS", "NT", "NU", "NV", "NW", "NX", "NY", "NZ", "O0", "O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8", "O9", "OA", "OB", "OC", "OD", "OE", "OF", "OG", "OH", "OI", "OJ", "OK", "OL", "OM", "ON", "OO", "OP", "OQ", "OR", "OS", "OT", "OU", "OV", "OW", "OX", "OY", "OZ", "P0", "P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ", "PK", "PL", "PM", "PN", "PO", "PP", "PQ", "PR", "PS", "PT", "PU", "PV", "PW", "PX", "PY", "PZ", "Q0", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH", "QI", "QJ", "QK", "QL", "QM", "QN", "QO", "QP", "QQ", "QR", "QS", "QT", "QU", "QV", "QW", "QX", "QY", "QZ", "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8", "R9", "RA", "RB", "RC", "RD", "RE", "RF", "RG", "RH", "RI", "RJ", "RK", "RL", "RM", "RN", "RO", "RP", "RQ", "RR", "RS", "RT", "RU", "RV", "RW", "RX", "RY", "RZ", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SP", "SQ", "SR", "SS", "ST", "SU", "SV", "SW", "SX", "SY", "SZ", "T0", "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "TA", "TB", "TC", "TD", "TE", "TF", "TG", "TH", "TI", "TJ", "TK", "TL", "TM", "TN", "TO", "TP", "TQ", "TR", "TS", "TT", "TU", "TV", "TW", "TX", "TY", "TZ", "U0", "U1", "U2", "U3", "U4", "U5", "U6", "U7", "U8", "U9", "UA", "UB", "UC", "UD", "UE", "UF", "UG", "UH", "UI", "UJ", "UK", "UL", "UM", "UN", "UO", "UP", "UQ", "UR", "US", "UT", "UU", "UV", "UW", "UX", "UY", "UZ", "V0", "V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "VA", "VB", "VC", "VD", "VE", "VF", "VG", "VH", "VI", "VJ", "VK", "VL", "VM", "VN", "VO", "VP", "VQ", "VR", "VS", "VT", "VU", "VV", "VW", "VX", "VY", "VZ", "W0", "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8", "W9", "WA", "WB", "WC", "WD", "WE", "WF", "WG", "WH", "WI", "WJ", "WK", "WL", "WM", "WN", "WO", "WP", "WQ", "WR", "WS", "WT", "WU", "WV", "WW", "WX", "WY", "WZ", "X0", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "XA", "XB", "XC", "XD", "XE", "XF", "XG", "XH", "XI", "XJ", "XK", "XL", "XM", "XN", "XO", "XP", "XQ", "XR", "XS", "XT", "XU", "XV", "XW", "XX", "XY", "XZ", "Y0", "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7", "Y8", "Y9", "YA", "YB", "YC", "YD", "YE", "YF", "YG", "YH", "YI", "YJ", "YK", "YL", "YM", "YN", "YO", "YP", "YQ", "YR", "YS", "YT", "YU", "YV", "YW", "YX", "YY", "YZ", "Z0", "Z1", "Z2", "Z3", "Z4", "Z5", "Z6", "Z7", "Z8", "Z9", "ZA", "ZB", "ZC", "ZD", "ZE", "ZF", "ZG", "ZH", "ZI", "ZJ", "ZK", "ZL", "ZM", "ZN", "ZO", "ZP", "ZQ", "ZR", "ZS", "ZT", "ZU", "ZV", "ZW", "ZX", "ZY", "ZZ"}) - Me.CHLnObj.Location = New System.Drawing.Point(67, 210) - Me.CHLnObj.Margin = New System.Windows.Forms.Padding(0) - Me.CHLnObj.Name = "CHLnObj" - Me.CHLnObj.Size = New System.Drawing.Size(116, 23) - Me.CHLnObj.TabIndex = 28 - ' - 'Label23 - ' - Me.Label23.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label23.AutoSize = True - Me.Label23.Location = New System.Drawing.Point(20, 145) - Me.Label23.Name = "Label23" - Me.Label23.Size = New System.Drawing.Size(44, 15) - Me.Label23.TabIndex = 26 - Me.Label23.Text = "ExRank" - Me.Label23.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label21 - ' - Me.Label21.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label21.AutoSize = True - Me.Label21.Location = New System.Drawing.Point(9, 122) - Me.Label21.Name = "Label21" - Me.Label21.Size = New System.Drawing.Size(55, 15) - Me.Label21.TabIndex = 25 - Me.Label21.Text = "Difficulty" - Me.Label21.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THComment - ' - Me.POHeaderPart2.SetColumnSpan(Me.THComment, 2) - Me.THComment.Dock = System.Windows.Forms.DockStyle.Fill - Me.THComment.Location = New System.Drawing.Point(67, 187) - Me.THComment.Margin = New System.Windows.Forms.Padding(0) - Me.THComment.Name = "THComment" - Me.THComment.Size = New System.Drawing.Size(116, 23) - Me.THComment.TabIndex = 19 - ' - 'Label24 - ' - Me.Label24.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label24.AutoSize = True - Me.Label24.Location = New System.Drawing.Point(25, 214) - Me.Label24.Name = "Label24" - Me.Label24.Size = New System.Drawing.Size(39, 15) - Me.Label24.TabIndex = 27 - Me.Label24.Text = "LnObj" - Me.Label24.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label15 - ' - Me.Label15.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label15.AutoSize = True - Me.Label15.Location = New System.Drawing.Point(14, 4) - Me.Label15.Name = "Label15" - Me.Label15.Size = New System.Drawing.Size(50, 15) - Me.Label15.TabIndex = 6 - Me.Label15.Text = "SubTitle" - Me.Label15.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THTotal - ' - Me.THTotal.Dock = System.Windows.Forms.DockStyle.Fill - Me.THTotal.Location = New System.Drawing.Point(67, 164) - Me.THTotal.Margin = New System.Windows.Forms.Padding(0) - Me.THTotal.Name = "THTotal" - Me.THTotal.Size = New System.Drawing.Size(88, 23) - Me.THTotal.TabIndex = 5 - ' - 'Label20 - ' - Me.Label20.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label20.AutoSize = True - Me.Label20.Location = New System.Drawing.Point(30, 168) - Me.Label20.Name = "Label20" - Me.Label20.Size = New System.Drawing.Size(34, 15) - Me.Label20.TabIndex = 5 - Me.Label20.Text = "Total" - Me.Label20.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'BHStageFile - ' - Me.BHStageFile.Dock = System.Windows.Forms.DockStyle.Fill - Me.BHStageFile.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.BHStageFile.Location = New System.Drawing.Point(158, 46) - Me.BHStageFile.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.BHStageFile.Name = "BHStageFile" - Me.BHStageFile.Size = New System.Drawing.Size(25, 24) - Me.BHStageFile.TabIndex = 20 - Me.BHStageFile.Text = "..." - Me.BHStageFile.UseVisualStyleBackColor = True - ' - 'BHBanner - ' - Me.BHBanner.Dock = System.Windows.Forms.DockStyle.Fill - Me.BHBanner.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.BHBanner.Location = New System.Drawing.Point(158, 70) - Me.BHBanner.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.BHBanner.Name = "BHBanner" - Me.BHBanner.Size = New System.Drawing.Size(25, 24) - Me.BHBanner.TabIndex = 21 - Me.BHBanner.Text = "..." - Me.BHBanner.UseVisualStyleBackColor = True - ' - 'Label19 - ' - Me.Label19.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label19.AutoSize = True - Me.Label19.Location = New System.Drawing.Point(3, 191) - Me.Label19.Name = "Label19" - Me.Label19.Size = New System.Drawing.Size(61, 15) - Me.Label19.TabIndex = 13 - Me.Label19.Text = "Comment" - Me.Label19.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'BHBackBMP - ' - Me.BHBackBMP.Dock = System.Windows.Forms.DockStyle.Fill - Me.BHBackBMP.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.BHBackBMP.Location = New System.Drawing.Point(158, 94) - Me.BHBackBMP.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.BHBackBMP.Name = "BHBackBMP" - Me.BHBackBMP.Size = New System.Drawing.Size(25, 24) - Me.BHBackBMP.TabIndex = 22 - Me.BHBackBMP.Text = "..." - Me.BHBackBMP.UseVisualStyleBackColor = True - ' - 'Label17 - ' - Me.Label17.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label17.AutoSize = True - Me.Label17.Location = New System.Drawing.Point(9, 27) - Me.Label17.Name = "Label17" - Me.Label17.Size = New System.Drawing.Size(55, 15) - Me.Label17.TabIndex = 7 - Me.Label17.Text = "SubArtist" - Me.Label17.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label16 - ' - Me.Label16.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label16.AutoSize = True - Me.Label16.Location = New System.Drawing.Point(7, 50) - Me.Label16.Name = "Label16" - Me.Label16.Size = New System.Drawing.Size(57, 15) - Me.Label16.TabIndex = 9 - Me.Label16.Text = "Stage File" - Me.Label16.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label12 - ' - Me.Label12.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label12.AutoSize = True - Me.Label12.Location = New System.Drawing.Point(20, 74) - Me.Label12.Name = "Label12" - Me.Label12.Size = New System.Drawing.Size(44, 15) - Me.Label12.TabIndex = 13 - Me.Label12.Text = "Banner" - Me.Label12.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THBackBMP - ' - Me.THBackBMP.Dock = System.Windows.Forms.DockStyle.Fill - Me.THBackBMP.Location = New System.Drawing.Point(67, 94) - Me.THBackBMP.Margin = New System.Windows.Forms.Padding(0) - Me.THBackBMP.Name = "THBackBMP" - Me.THBackBMP.Size = New System.Drawing.Size(88, 23) - Me.THBackBMP.TabIndex = 17 - ' - 'Label11 - ' - Me.Label11.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label11.AutoSize = True - Me.Label11.Location = New System.Drawing.Point(4, 98) - Me.Label11.Name = "Label11" - Me.Label11.Size = New System.Drawing.Size(60, 15) - Me.Label11.TabIndex = 16 - Me.Label11.Text = "Back BMP" - Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THBanner - ' - Me.THBanner.Dock = System.Windows.Forms.DockStyle.Fill - Me.THBanner.Location = New System.Drawing.Point(67, 70) - Me.THBanner.Margin = New System.Windows.Forms.Padding(0) - Me.THBanner.Name = "THBanner" - Me.THBanner.Size = New System.Drawing.Size(88, 23) - Me.THBanner.TabIndex = 19 - ' - 'THStageFile - ' - Me.THStageFile.Dock = System.Windows.Forms.DockStyle.Fill - Me.THStageFile.Location = New System.Drawing.Point(67, 46) - Me.THStageFile.Margin = New System.Windows.Forms.Padding(0) - Me.THStageFile.Name = "THStageFile" - Me.THStageFile.Size = New System.Drawing.Size(88, 23) - Me.THStageFile.TabIndex = 18 - ' - 'THSubTitle - ' - Me.POHeaderPart2.SetColumnSpan(Me.THSubTitle, 2) - Me.THSubTitle.Dock = System.Windows.Forms.DockStyle.Fill - Me.THSubTitle.Location = New System.Drawing.Point(67, 0) - Me.THSubTitle.Margin = New System.Windows.Forms.Padding(0) - Me.THSubTitle.Name = "THSubTitle" - Me.THSubTitle.Size = New System.Drawing.Size(116, 23) - Me.THSubTitle.TabIndex = 6 - ' - 'THSubArtist - ' - Me.POHeaderPart2.SetColumnSpan(Me.THSubArtist, 2) - Me.THSubArtist.Dock = System.Windows.Forms.DockStyle.Fill - Me.THSubArtist.Location = New System.Drawing.Point(67, 23) - Me.THSubArtist.Margin = New System.Windows.Forms.Padding(0) - Me.THSubArtist.Name = "THSubArtist" - Me.THSubArtist.Size = New System.Drawing.Size(116, 23) - Me.THSubArtist.TabIndex = 7 - ' - 'POHeaderExpander - ' - Me.POHeaderExpander.Appearance = System.Windows.Forms.Appearance.Button - Me.POHeaderExpander.AutoSize = True - Me.POHeaderExpander.Cursor = System.Windows.Forms.Cursors.Hand - Me.POHeaderExpander.Dock = System.Windows.Forms.DockStyle.Top - Me.POHeaderExpander.FlatAppearance.BorderSize = 0 - Me.POHeaderExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup - Me.POHeaderExpander.Location = New System.Drawing.Point(0, 161) - Me.POHeaderExpander.Margin = New System.Windows.Forms.Padding(0) - Me.POHeaderExpander.Name = "POHeaderExpander" - Me.POHeaderExpander.Size = New System.Drawing.Size(183, 25) - Me.POHeaderExpander.TabIndex = 26 - Me.POHeaderExpander.TabStop = False - Me.POHeaderExpander.Text = "Expand..." - Me.POHeaderExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POHeaderExpander.UseVisualStyleBackColor = False - ' - 'POHeaderPart1 - ' - Me.POHeaderPart1.AutoSize = True - Me.POHeaderPart1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POHeaderPart1.ColumnCount = 2 - Me.POHeaderPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) - Me.POHeaderPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.POHeaderPart1.Controls.Add(Me.Label3, 0, 0) - Me.POHeaderPart1.Controls.Add(Me.THPlayLevel, 1, 6) - Me.POHeaderPart1.Controls.Add(Me.CHRank, 1, 5) - Me.POHeaderPart1.Controls.Add(Me.Label10, 0, 5) - Me.POHeaderPart1.Controls.Add(Me.CHPlayer, 1, 4) - Me.POHeaderPart1.Controls.Add(Me.Label4, 0, 1) - Me.POHeaderPart1.Controls.Add(Me.THGenre, 1, 2) - Me.POHeaderPart1.Controls.Add(Me.THBPM, 1, 3) - Me.POHeaderPart1.Controls.Add(Me.Label2, 0, 2) - Me.POHeaderPart1.Controls.Add(Me.THArtist, 1, 1) - Me.POHeaderPart1.Controls.Add(Me.THTitle, 1, 0) - Me.POHeaderPart1.Controls.Add(Me.Label9, 0, 3) - Me.POHeaderPart1.Controls.Add(Me.Label8, 0, 4) - Me.POHeaderPart1.Controls.Add(Me.Label6, 0, 6) - Me.POHeaderPart1.Dock = System.Windows.Forms.DockStyle.Top - Me.POHeaderPart1.Location = New System.Drawing.Point(0, 0) - Me.POHeaderPart1.Name = "POHeaderPart1" - Me.POHeaderPart1.RowCount = 7 - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.POHeaderPart1.Size = New System.Drawing.Size(183, 161) - Me.POHeaderPart1.TabIndex = 25 - ' - 'Label3 - ' - Me.Label3.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label3.AutoSize = True - Me.Label3.Location = New System.Drawing.Point(32, 4) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(30, 15) - Me.Label3.TabIndex = 6 - Me.Label3.Text = "Title" - Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THPlayLevel - ' - Me.THPlayLevel.Dock = System.Windows.Forms.DockStyle.Fill - Me.THPlayLevel.Location = New System.Drawing.Point(65, 138) - Me.THPlayLevel.Margin = New System.Windows.Forms.Padding(0) - Me.THPlayLevel.Name = "THPlayLevel" - Me.THPlayLevel.Size = New System.Drawing.Size(118, 23) - Me.THPlayLevel.TabIndex = 8 - ' - 'CHRank - ' - Me.CHRank.Dock = System.Windows.Forms.DockStyle.Top - Me.CHRank.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.CHRank.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.CHRank.Items.AddRange(New Object() {"0 - Very Hard", "1 - Hard", "2 - Normal", "3 - Easy", "4 - Very Easy"}) - Me.CHRank.Location = New System.Drawing.Point(65, 115) - Me.CHRank.Margin = New System.Windows.Forms.Padding(0) - Me.CHRank.Name = "CHRank" - Me.CHRank.Size = New System.Drawing.Size(118, 23) - Me.CHRank.TabIndex = 15 - ' - 'Label10 - ' - Me.Label10.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label10.AutoSize = True - Me.Label10.Location = New System.Drawing.Point(29, 119) - Me.Label10.Name = "Label10" - Me.Label10.Size = New System.Drawing.Size(33, 15) - Me.Label10.TabIndex = 16 - Me.Label10.Text = "Rank" - Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'CHPlayer - ' - Me.CHPlayer.Dock = System.Windows.Forms.DockStyle.Top - Me.CHPlayer.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.CHPlayer.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.CHPlayer.Items.AddRange(New Object() {"1 - Single Play", "2 - Couple Play", "3 - Double Play"}) - Me.CHPlayer.Location = New System.Drawing.Point(65, 92) - Me.CHPlayer.Margin = New System.Windows.Forms.Padding(0) - Me.CHPlayer.Name = "CHPlayer" - Me.CHPlayer.Size = New System.Drawing.Size(118, 23) - Me.CHPlayer.TabIndex = 14 - ' - 'Label4 - ' - Me.Label4.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label4.AutoSize = True - Me.Label4.Location = New System.Drawing.Point(27, 27) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(35, 15) - Me.Label4.TabIndex = 7 - Me.Label4.Text = "Artist" - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THGenre - ' - Me.THGenre.Dock = System.Windows.Forms.DockStyle.Fill - Me.THGenre.Location = New System.Drawing.Point(65, 46) - Me.THGenre.Margin = New System.Windows.Forms.Padding(0) - Me.THGenre.Name = "THGenre" - Me.THGenre.Size = New System.Drawing.Size(118, 23) - Me.THGenre.TabIndex = 5 - ' - 'THBPM - ' - Me.THBPM.DecimalPlaces = 4 - Me.THBPM.Dock = System.Windows.Forms.DockStyle.Fill - Me.THBPM.Increment = New Decimal(New Integer() {10, 0, 0, 0}) - Me.THBPM.Location = New System.Drawing.Point(65, 69) - Me.THBPM.Margin = New System.Windows.Forms.Padding(0) - Me.THBPM.Maximum = New Decimal(New Integer() {655359999, 0, 0, 262144}) - Me.THBPM.Minimum = New Decimal(New Integer() {1, 0, 0, 262144}) - Me.THBPM.Name = "THBPM" - Me.THBPM.Size = New System.Drawing.Size(118, 23) - Me.THBPM.TabIndex = 10 - Me.THBPM.Value = New Decimal(New Integer() {120, 0, 0, 0}) - ' - 'Label2 - ' - Me.Label2.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label2.AutoSize = True - Me.Label2.Location = New System.Drawing.Point(24, 50) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(38, 15) - Me.Label2.TabIndex = 5 - Me.Label2.Text = "Genre" - Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'THArtist - ' - Me.THArtist.Dock = System.Windows.Forms.DockStyle.Fill - Me.THArtist.Location = New System.Drawing.Point(65, 23) - Me.THArtist.Margin = New System.Windows.Forms.Padding(0) - Me.THArtist.Name = "THArtist" - Me.THArtist.Size = New System.Drawing.Size(118, 23) - Me.THArtist.TabIndex = 7 - ' - 'THTitle - ' - Me.THTitle.Dock = System.Windows.Forms.DockStyle.Fill - Me.THTitle.Location = New System.Drawing.Point(65, 0) - Me.THTitle.Margin = New System.Windows.Forms.Padding(0) - Me.THTitle.Name = "THTitle" - Me.THTitle.Size = New System.Drawing.Size(118, 23) - Me.THTitle.TabIndex = 6 - ' - 'Label9 - ' - Me.Label9.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label9.AutoSize = True - Me.Label9.Location = New System.Drawing.Point(30, 73) - Me.Label9.Name = "Label9" - Me.Label9.Size = New System.Drawing.Size(32, 15) - Me.Label9.TabIndex = 9 - Me.Label9.Text = "BPM" - Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label8 - ' - Me.Label8.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label8.AutoSize = True - Me.Label8.Location = New System.Drawing.Point(23, 96) - Me.Label8.Name = "Label8" - Me.Label8.Size = New System.Drawing.Size(39, 15) - Me.Label8.TabIndex = 13 - Me.Label8.Text = "Player" - Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label6 - ' - Me.Label6.Anchor = System.Windows.Forms.AnchorStyles.Right - Me.Label6.AutoSize = True - Me.Label6.Location = New System.Drawing.Point(3, 142) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(59, 15) - Me.Label6.TabIndex = 8 - Me.Label6.Text = "Play Level" - Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'POHeaderSwitch - ' - Me.POHeaderSwitch.Appearance = System.Windows.Forms.Appearance.Button - Me.POHeaderSwitch.BackColor = System.Drawing.SystemColors.Control - Me.POHeaderSwitch.Checked = True - Me.POHeaderSwitch.CheckState = System.Windows.Forms.CheckState.Checked - Me.POHeaderSwitch.Cursor = System.Windows.Forms.Cursors.Hand - Me.POHeaderSwitch.Dock = System.Windows.Forms.DockStyle.Top - Me.POHeaderSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.POHeaderSwitch.Location = New System.Drawing.Point(0, 0) - Me.POHeaderSwitch.Name = "POHeaderSwitch" - Me.POHeaderSwitch.Size = New System.Drawing.Size(183, 20) - Me.POHeaderSwitch.TabIndex = 1 - Me.POHeaderSwitch.TabStop = False - Me.POHeaderSwitch.Text = "Header" - Me.POHeaderSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.POHeaderSwitch.UseCompatibleTextRendering = True - Me.POHeaderSwitch.UseVisualStyleBackColor = False - ' - 'Timer1 - ' - Me.Timer1.Interval = 15 - ' - 'Menu1 - ' - Me.Menu1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MInsert, Me.MRemove}) - Me.Menu1.Name = "Menu1" - Me.Menu1.Size = New System.Drawing.Size(166, 48) - ' - 'MInsert - ' - Me.MInsert.Image = Global.iBMSC.My.Resources.Resources.x16Add - Me.MInsert.Name = "MInsert" - Me.MInsert.Size = New System.Drawing.Size(165, 22) - Me.MInsert.Text = "Insert Measure" - ' - 'MRemove - ' - Me.MRemove.Image = Global.iBMSC.My.Resources.Resources.x16Remove - Me.MRemove.Name = "MRemove" - Me.MRemove.Size = New System.Drawing.Size(165, 22) - Me.MRemove.Text = "Remove Measure" - ' - 'AutoSaveTimer - ' - Me.AutoSaveTimer.Enabled = True - Me.AutoSaveTimer.Interval = 300000 - ' - 'mnMain - ' - Me.mnMain.AccessibleRole = System.Windows.Forms.AccessibleRole.MenuBar - Me.mnMain.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch - Me.mnMain.Dock = System.Windows.Forms.DockStyle.None - Me.mnMain.GripMargin = New System.Windows.Forms.Padding(2) - Me.mnMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnFile, Me.mnEdit, Me.mnSys, Me.mnOptions, Me.mnConversion, Me.mnPreview}) - Me.mnMain.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow - Me.mnMain.Location = New System.Drawing.Point(0, 0) - Me.mnMain.Name = "mnMain" - Me.mnMain.Size = New System.Drawing.Size(876, 23) - Me.mnMain.TabIndex = 57 - ' - 'mnFile - ' - Me.mnFile.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnNew, Me.mnOpen, Me.mnImportSM, Me.mnImportIBMSC, Me.ToolStripSeparator14, Me.mnSave, Me.mnSaveAs, Me.mnExport, Me.ToolStripSeparator15, Me.mnOpenR0, Me.mnOpenR1, Me.mnOpenR2, Me.mnOpenR3, Me.mnOpenR4, Me.ToolStripSeparator16, Me.mnQuit}) - Me.mnFile.Name = "mnFile" - Me.mnFile.Size = New System.Drawing.Size(37, 19) - Me.mnFile.Text = "&File" - ' - 'mnNew - ' - Me.mnNew.Image = Global.iBMSC.My.Resources.Resources.x16New - Me.mnNew.Name = "mnNew" - Me.mnNew.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.N), System.Windows.Forms.Keys) - Me.mnNew.Size = New System.Drawing.Size(199, 22) - Me.mnNew.Text = "&New" - ' - 'mnOpen - ' - Me.mnOpen.Image = Global.iBMSC.My.Resources.Resources.x16Open - Me.mnOpen.Name = "mnOpen" - Me.mnOpen.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) - Me.mnOpen.Size = New System.Drawing.Size(199, 22) - Me.mnOpen.Text = "&Open" - ' - 'mnImportSM - ' - Me.mnImportSM.Image = Global.iBMSC.My.Resources.Resources.x16Import2 - Me.mnImportSM.Name = "mnImportSM" - Me.mnImportSM.Size = New System.Drawing.Size(199, 22) - Me.mnImportSM.Text = "Import from .S&M file" - ' - 'mnImportIBMSC - ' - Me.mnImportIBMSC.Image = Global.iBMSC.My.Resources.Resources.x16Import2 - Me.mnImportIBMSC.Name = "mnImportIBMSC" - Me.mnImportIBMSC.Size = New System.Drawing.Size(199, 22) - Me.mnImportIBMSC.Text = "Import from .&IBMSC file" - ' - 'ToolStripSeparator14 - ' - Me.ToolStripSeparator14.Name = "ToolStripSeparator14" - Me.ToolStripSeparator14.Size = New System.Drawing.Size(196, 6) - ' - 'mnSave - ' - Me.mnSave.Image = Global.iBMSC.My.Resources.Resources.x16Save - Me.mnSave.Name = "mnSave" - Me.mnSave.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) - Me.mnSave.Size = New System.Drawing.Size(199, 22) - Me.mnSave.Text = "&Save" - ' - 'mnSaveAs - ' - Me.mnSaveAs.Image = Global.iBMSC.My.Resources.Resources.x16SaveAs - Me.mnSaveAs.Name = "mnSaveAs" - Me.mnSaveAs.Size = New System.Drawing.Size(199, 22) - Me.mnSaveAs.Text = "Save &As..." - ' - 'mnExport - ' - Me.mnExport.Image = Global.iBMSC.My.Resources.Resources.x16Export - Me.mnExport.Name = "mnExport" - Me.mnExport.Size = New System.Drawing.Size(199, 22) - Me.mnExport.Text = "&Export .IBMSC file" - ' - 'ToolStripSeparator15 - ' - Me.ToolStripSeparator15.Name = "ToolStripSeparator15" - Me.ToolStripSeparator15.Size = New System.Drawing.Size(196, 6) - ' - 'mnOpenR0 - ' - Me.mnOpenR0.Enabled = False - Me.mnOpenR0.Name = "mnOpenR0" - Me.mnOpenR0.Size = New System.Drawing.Size(199, 22) - Me.mnOpenR0.Tag = "0" - Me.mnOpenR0.Text = "Recent #0" - ' - 'mnOpenR1 - ' - Me.mnOpenR1.Enabled = False - Me.mnOpenR1.Name = "mnOpenR1" - Me.mnOpenR1.Size = New System.Drawing.Size(199, 22) - Me.mnOpenR1.Tag = "1" - Me.mnOpenR1.Text = "Recent #1" - ' - 'mnOpenR2 - ' - Me.mnOpenR2.Enabled = False - Me.mnOpenR2.Name = "mnOpenR2" - Me.mnOpenR2.Size = New System.Drawing.Size(199, 22) - Me.mnOpenR2.Tag = "2" - Me.mnOpenR2.Text = "Recent #2" - ' - 'mnOpenR3 - ' - Me.mnOpenR3.Enabled = False - Me.mnOpenR3.Name = "mnOpenR3" - Me.mnOpenR3.Size = New System.Drawing.Size(199, 22) - Me.mnOpenR3.Tag = "3" - Me.mnOpenR3.Text = "Recent #3" - ' - 'mnOpenR4 - ' - Me.mnOpenR4.Enabled = False - Me.mnOpenR4.Name = "mnOpenR4" - Me.mnOpenR4.Size = New System.Drawing.Size(199, 22) - Me.mnOpenR4.Tag = "4" - Me.mnOpenR4.Text = "Recent #4" - ' - 'ToolStripSeparator16 - ' - Me.ToolStripSeparator16.Name = "ToolStripSeparator16" - Me.ToolStripSeparator16.Size = New System.Drawing.Size(196, 6) - ' - 'mnQuit - ' - Me.mnQuit.Name = "mnQuit" - Me.mnQuit.Size = New System.Drawing.Size(199, 22) - Me.mnQuit.Text = "&Quit" - ' - 'mnEdit - ' - Me.mnEdit.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnUndo, Me.mnRedo, Me.ToolStripSeparator17, Me.mnCut, Me.mnCopy, Me.mnPaste, Me.mnDelete, Me.mnSelectAll, Me.mnGotoMeasure, Me.ToolStripSeparator18, Me.mnFind, Me.mnStatistics, Me.ToolStripSeparator19, Me.mnTimeSelect, Me.mnSelect, Me.mnWrite, Me.ToolStripSeparator23, Me.mnMyO2}) - Me.mnEdit.Name = "mnEdit" - Me.mnEdit.Size = New System.Drawing.Size(39, 19) - Me.mnEdit.Text = "&Edit" - ' - 'mnUndo - ' - Me.mnUndo.Enabled = False - Me.mnUndo.Image = Global.iBMSC.My.Resources.Resources.x16Undo - Me.mnUndo.Name = "mnUndo" - Me.mnUndo.ShortcutKeyDisplayString = "Ctrl+Z" - Me.mnUndo.Size = New System.Drawing.Size(233, 22) - Me.mnUndo.Text = "&Undo" - ' - 'mnRedo - ' - Me.mnRedo.Enabled = False - Me.mnRedo.Image = Global.iBMSC.My.Resources.Resources.x16Redo - Me.mnRedo.Name = "mnRedo" - Me.mnRedo.ShortcutKeyDisplayString = "Ctrl+Y" - Me.mnRedo.Size = New System.Drawing.Size(233, 22) - Me.mnRedo.Text = "&Redo" - ' - 'ToolStripSeparator17 - ' - Me.ToolStripSeparator17.Name = "ToolStripSeparator17" - Me.ToolStripSeparator17.Size = New System.Drawing.Size(230, 6) - ' - 'mnCut - ' - Me.mnCut.Image = Global.iBMSC.My.Resources.Resources.x16Cut - Me.mnCut.Name = "mnCut" - Me.mnCut.ShortcutKeyDisplayString = "Ctrl+X" - Me.mnCut.Size = New System.Drawing.Size(233, 22) - Me.mnCut.Text = "Cu&t" - ' - 'mnCopy - ' - Me.mnCopy.Image = Global.iBMSC.My.Resources.Resources.x16Copy - Me.mnCopy.Name = "mnCopy" - Me.mnCopy.ShortcutKeyDisplayString = "Ctrl+C" - Me.mnCopy.Size = New System.Drawing.Size(233, 22) - Me.mnCopy.Text = "&Copy" - ' - 'mnPaste - ' - Me.mnPaste.Image = Global.iBMSC.My.Resources.Resources.x16Paste - Me.mnPaste.Name = "mnPaste" - Me.mnPaste.ShortcutKeyDisplayString = "Ctrl+V" - Me.mnPaste.Size = New System.Drawing.Size(233, 22) - Me.mnPaste.Text = "&Paste" - ' - 'mnDelete - ' - Me.mnDelete.Image = Global.iBMSC.My.Resources.Resources.x16Remove - Me.mnDelete.Name = "mnDelete" - Me.mnDelete.ShortcutKeyDisplayString = "Del" - Me.mnDelete.Size = New System.Drawing.Size(233, 22) - Me.mnDelete.Text = "De&lete" - ' - 'mnSelectAll - ' - Me.mnSelectAll.Name = "mnSelectAll" - Me.mnSelectAll.ShortcutKeyDisplayString = "Ctrl+A" - Me.mnSelectAll.Size = New System.Drawing.Size(233, 22) - Me.mnSelectAll.Text = "Select &All" - ' - 'mnGotoMeasure - ' - Me.mnGotoMeasure.Name = "mnGotoMeasure" - Me.mnGotoMeasure.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.G), System.Windows.Forms.Keys) - Me.mnGotoMeasure.Size = New System.Drawing.Size(233, 22) - Me.mnGotoMeasure.Text = "Go To Measure..." - ' - 'ToolStripSeparator18 - ' - Me.ToolStripSeparator18.Name = "ToolStripSeparator18" - Me.ToolStripSeparator18.Size = New System.Drawing.Size(230, 6) - ' - 'mnFind - ' - Me.mnFind.Image = Global.iBMSC.My.Resources.Resources.x16Find - Me.mnFind.Name = "mnFind" - Me.mnFind.ShortcutKeyDisplayString = "Ctrl+F" - Me.mnFind.Size = New System.Drawing.Size(233, 22) - Me.mnFind.Text = "&Find / Delete / Replace" - ' - 'mnStatistics - ' - Me.mnStatistics.Image = Global.iBMSC.My.Resources.Resources.x16Statistics - Me.mnStatistics.Name = "mnStatistics" - Me.mnStatistics.ShortcutKeyDisplayString = "Ctrl+T" - Me.mnStatistics.Size = New System.Drawing.Size(233, 22) - Me.mnStatistics.Text = "St&atistics" - ' - 'ToolStripSeparator19 - ' - Me.ToolStripSeparator19.Name = "ToolStripSeparator19" - Me.ToolStripSeparator19.Size = New System.Drawing.Size(230, 6) - ' - 'mnTimeSelect - ' - Me.mnTimeSelect.CheckOnClick = True - Me.mnTimeSelect.Image = Global.iBMSC.My.Resources.Resources.x16TimeSelection - Me.mnTimeSelect.Name = "mnTimeSelect" - Me.mnTimeSelect.ShortcutKeys = System.Windows.Forms.Keys.F1 - Me.mnTimeSelect.Size = New System.Drawing.Size(233, 22) - Me.mnTimeSelect.Text = "T&ime Selection Tool" - ' - 'mnSelect - ' - Me.mnSelect.Checked = True - Me.mnSelect.CheckOnClick = True - Me.mnSelect.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnSelect.Image = Global.iBMSC.My.Resources.Resources.x16Select - Me.mnSelect.Name = "mnSelect" - Me.mnSelect.ShortcutKeys = System.Windows.Forms.Keys.F2 - Me.mnSelect.Size = New System.Drawing.Size(233, 22) - Me.mnSelect.Text = "&Select Tool" - ' - 'mnWrite - ' - Me.mnWrite.CheckOnClick = True - Me.mnWrite.Image = Global.iBMSC.My.Resources.Resources.x16Pen - Me.mnWrite.Name = "mnWrite" - Me.mnWrite.ShortcutKeys = System.Windows.Forms.Keys.F3 - Me.mnWrite.Size = New System.Drawing.Size(233, 22) - Me.mnWrite.Text = "&Write Tool" - ' - 'ToolStripSeparator23 - ' - Me.ToolStripSeparator23.Name = "ToolStripSeparator23" - Me.ToolStripSeparator23.Size = New System.Drawing.Size(230, 6) - ' - 'mnMyO2 - ' - Me.mnMyO2.Image = Global.iBMSC.My.Resources.Resources.x16MyO2 - Me.mnMyO2.Name = "mnMyO2" - Me.mnMyO2.Size = New System.Drawing.Size(233, 22) - Me.mnMyO2.Text = "MyO2 ToolBox (Chinese Only)" - ' - 'mnSys - ' - Me.mnSys.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnSMenu, Me.mnSTB, Me.mnSOP, Me.mnSStatus, Me.mnSLSplitter, Me.mnSRSplitter, Me.ToolStripSeparator21, Me.CGShow, Me.CGShowS, Me.CGShowBG, Me.CGShowM, Me.CGShowMB, Me.CGShowV, Me.CGShowC, Me.ToolStripSeparator22, Me.CGBPM, Me.CGSTOP, Me.CGSCROLL, Me.CGBLP}) - Me.mnSys.Name = "mnSys" - Me.mnSys.Size = New System.Drawing.Size(44, 19) - Me.mnSys.Text = "&View" - ' - 'mnSMenu - ' - Me.mnSMenu.Checked = True - Me.mnSMenu.CheckOnClick = True - Me.mnSMenu.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnSMenu.Name = "mnSMenu" - Me.mnSMenu.Size = New System.Drawing.Size(172, 22) - Me.mnSMenu.Text = "&Main Menu" - Me.mnSMenu.Visible = False - ' - 'mnSTB - ' - Me.mnSTB.Checked = True - Me.mnSTB.CheckOnClick = True - Me.mnSTB.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnSTB.Name = "mnSTB" - Me.mnSTB.Size = New System.Drawing.Size(172, 22) - Me.mnSTB.Text = "&ToolBar" - ' - 'mnSOP - ' - Me.mnSOP.Checked = True - Me.mnSOP.CheckOnClick = True - Me.mnSOP.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnSOP.Name = "mnSOP" - Me.mnSOP.Size = New System.Drawing.Size(172, 22) - Me.mnSOP.Text = "&Options Panel" - ' - 'mnSStatus - ' - Me.mnSStatus.Checked = True - Me.mnSStatus.CheckOnClick = True - Me.mnSStatus.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnSStatus.Name = "mnSStatus" - Me.mnSStatus.Size = New System.Drawing.Size(172, 22) - Me.mnSStatus.Text = "&Status Bar" - ' - 'mnSLSplitter - ' - Me.mnSLSplitter.CheckOnClick = True - Me.mnSLSplitter.Name = "mnSLSplitter" - Me.mnSLSplitter.Size = New System.Drawing.Size(172, 22) - Me.mnSLSplitter.Text = "&Left Splitter" - ' - 'mnSRSplitter - ' - Me.mnSRSplitter.CheckOnClick = True - Me.mnSRSplitter.Name = "mnSRSplitter" - Me.mnSRSplitter.Size = New System.Drawing.Size(172, 22) - Me.mnSRSplitter.Text = "&Right Splitter" - ' - 'ToolStripSeparator21 - ' - Me.ToolStripSeparator21.Name = "ToolStripSeparator21" - Me.ToolStripSeparator21.Size = New System.Drawing.Size(169, 6) - ' - 'CGShow - ' - Me.CGShow.Checked = True - Me.CGShow.CheckOnClick = True - Me.CGShow.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShow.Name = "CGShow" - Me.CGShow.Size = New System.Drawing.Size(172, 22) - Me.CGShow.Text = "Grid" - ' - 'CGShowS - ' - Me.CGShowS.Checked = True - Me.CGShowS.CheckOnClick = True - Me.CGShowS.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShowS.Name = "CGShowS" - Me.CGShowS.Size = New System.Drawing.Size(172, 22) - Me.CGShowS.Text = "Sub" - ' - 'CGShowBG - ' - Me.CGShowBG.Checked = True - Me.CGShowBG.CheckOnClick = True - Me.CGShowBG.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShowBG.Name = "CGShowBG" - Me.CGShowBG.Size = New System.Drawing.Size(172, 22) - Me.CGShowBG.Text = "BackGround" - ' - 'CGShowM - ' - Me.CGShowM.Checked = True - Me.CGShowM.CheckOnClick = True - Me.CGShowM.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShowM.Name = "CGShowM" - Me.CGShowM.Size = New System.Drawing.Size(172, 22) - Me.CGShowM.Text = "Measure Index" - ' - 'CGShowMB - ' - Me.CGShowMB.Checked = True - Me.CGShowMB.CheckOnClick = True - Me.CGShowMB.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShowMB.Name = "CGShowMB" - Me.CGShowMB.Size = New System.Drawing.Size(172, 22) - Me.CGShowMB.Text = "Measure Line" - ' - 'CGShowV - ' - Me.CGShowV.Checked = True - Me.CGShowV.CheckOnClick = True - Me.CGShowV.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShowV.Name = "CGShowV" - Me.CGShowV.Size = New System.Drawing.Size(172, 22) - Me.CGShowV.Text = "Vertical Line" - ' - 'CGShowC - ' - Me.CGShowC.Checked = True - Me.CGShowC.CheckOnClick = True - Me.CGShowC.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGShowC.Name = "CGShowC" - Me.CGShowC.Size = New System.Drawing.Size(172, 22) - Me.CGShowC.Text = "Column Caption" - ' - 'ToolStripSeparator22 - ' - Me.ToolStripSeparator22.Name = "ToolStripSeparator22" - Me.ToolStripSeparator22.Size = New System.Drawing.Size(169, 6) - ' - 'CGBPM - ' - Me.CGBPM.Checked = True - Me.CGBPM.CheckOnClick = True - Me.CGBPM.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGBPM.Name = "CGBPM" - Me.CGBPM.Size = New System.Drawing.Size(172, 22) - Me.CGBPM.Text = "BPM" - ' - 'CGSTOP - ' - Me.CGSTOP.Checked = True - Me.CGSTOP.CheckOnClick = True - Me.CGSTOP.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGSTOP.Name = "CGSTOP" - Me.CGSTOP.Size = New System.Drawing.Size(172, 22) - Me.CGSTOP.Text = "STOP" - ' - 'CGSCROLL - ' - Me.CGSCROLL.Checked = True - Me.CGSCROLL.CheckOnClick = True - Me.CGSCROLL.CheckState = System.Windows.Forms.CheckState.Checked - Me.CGSCROLL.Name = "CGSCROLL" - Me.CGSCROLL.Size = New System.Drawing.Size(172, 22) - Me.CGSCROLL.Text = "SCROLL" - ' - 'CGBLP - ' - Me.CGBLP.Checked = True - Me.CGBLP.CheckOnClick = True - Me.CGBLP.Name = "CGBLP" - Me.CGBLP.Size = New System.Drawing.Size(172, 22) - Me.CGBLP.Text = "BGA / Layer / Poor" - ' - 'mnOptions - ' - Me.mnOptions.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnNTInput, Me.mnErrorCheck, Me.mnPreviewOnClick, Me.mnShowFileName, Me.ToolStripSeparator20, Me.mnGOptions, Me.mnVOptions, Me.mnPOptions, Me.mnLanguage, Me.mnTheme}) - Me.mnOptions.Name = "mnOptions" - Me.mnOptions.Size = New System.Drawing.Size(61, 19) - Me.mnOptions.Text = "&Options" - ' - 'mnNTInput - ' - Me.mnNTInput.Checked = True - Me.mnNTInput.CheckOnClick = True - Me.mnNTInput.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnNTInput.Image = Global.iBMSC.My.Resources.Resources.x16NTInput - Me.mnNTInput.Name = "mnNTInput" - Me.mnNTInput.ShortcutKeys = System.Windows.Forms.Keys.F8 - Me.mnNTInput.Size = New System.Drawing.Size(229, 22) - Me.mnNTInput.Text = "L&N Input Style - NT/BMSE" - ' - 'mnErrorCheck - ' - Me.mnErrorCheck.Checked = True - Me.mnErrorCheck.CheckOnClick = True - Me.mnErrorCheck.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnErrorCheck.Image = Global.iBMSC.My.Resources.Resources.x16CheckError - Me.mnErrorCheck.Name = "mnErrorCheck" - Me.mnErrorCheck.Size = New System.Drawing.Size(229, 22) - Me.mnErrorCheck.Text = "&Error Check" - ' - 'mnPreviewOnClick - ' - Me.mnPreviewOnClick.Checked = True - Me.mnPreviewOnClick.CheckOnClick = True - Me.mnPreviewOnClick.CheckState = System.Windows.Forms.CheckState.Checked - Me.mnPreviewOnClick.Image = Global.iBMSC.My.Resources.Resources.x16PreviewOnClick - Me.mnPreviewOnClick.Name = "mnPreviewOnClick" - Me.mnPreviewOnClick.Size = New System.Drawing.Size(229, 22) - Me.mnPreviewOnClick.Text = "Preview on &Click" - ' - 'mnShowFileName - ' - Me.mnShowFileName.CheckOnClick = True - Me.mnShowFileName.Image = Global.iBMSC.My.Resources.Resources.x16ShowFileNameN - Me.mnShowFileName.Name = "mnShowFileName" - Me.mnShowFileName.Size = New System.Drawing.Size(229, 22) - Me.mnShowFileName.Text = "Show &File Name on Notes" - ' - 'ToolStripSeparator20 - ' - Me.ToolStripSeparator20.Name = "ToolStripSeparator20" - Me.ToolStripSeparator20.Size = New System.Drawing.Size(226, 6) - ' - 'mnGOptions - ' - Me.mnGOptions.Image = Global.iBMSC.My.Resources.Resources.x16GeneralOptions - Me.mnGOptions.Name = "mnGOptions" - Me.mnGOptions.Size = New System.Drawing.Size(229, 22) - Me.mnGOptions.Text = "&General Options" - ' - 'mnVOptions - ' - Me.mnVOptions.Image = Global.iBMSC.My.Resources.Resources.x16VisualOptions - Me.mnVOptions.Name = "mnVOptions" - Me.mnVOptions.Size = New System.Drawing.Size(229, 22) - Me.mnVOptions.Text = "&Visual Options" - ' - 'mnPOptions - ' - Me.mnPOptions.Image = Global.iBMSC.My.Resources.Resources.x16PlayerOptions - Me.mnPOptions.Name = "mnPOptions" - Me.mnPOptions.Size = New System.Drawing.Size(229, 22) - Me.mnPOptions.Text = "&Player Options" - ' - 'mnConversion - ' - Me.mnConversion.DropDown = Me.cmnConversion - Me.mnConversion.Name = "mnConversion" - Me.mnConversion.Size = New System.Drawing.Size(84, 19) - Me.mnConversion.Text = "&Conversions" - ' - 'cmnConversion - ' - Me.cmnConversion.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.POBLong, Me.POBShort, Me.POBLongShort, Me.ToolStripSeparator10, Me.POBHidden, Me.POBVisible, Me.POBHiddenVisible, Me.ToolStripSeparator11, Me.POBModify, Me.POBMirror}) - Me.cmnConversion.Name = "cmnLanguage" - Me.cmnConversion.OwnerItem = Me.POConvert - Me.cmnConversion.Size = New System.Drawing.Size(222, 192) - ' - 'POBLong - ' - Me.POBLong.Enabled = False - Me.POBLong.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesL - Me.POBLong.Name = "POBLong" - Me.POBLong.Size = New System.Drawing.Size(221, 22) - Me.POBLong.Text = "→ &Long Note" - ' - 'POBShort - ' - Me.POBShort.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesN - Me.POBShort.Name = "POBShort" - Me.POBShort.Size = New System.Drawing.Size(221, 22) - Me.POBShort.Text = "→ &Short Note" - ' - 'POBLongShort - ' - Me.POBLongShort.Enabled = False - Me.POBLongShort.Image = Global.iBMSC.My.Resources.Resources.ConvertNotes - Me.POBLongShort.Name = "POBLongShort" - Me.POBLongShort.Size = New System.Drawing.Size(221, 22) - Me.POBLongShort.Text = "Long Note ↔ Short Note" - ' - 'ToolStripSeparator10 - ' - Me.ToolStripSeparator10.Name = "ToolStripSeparator10" - Me.ToolStripSeparator10.Size = New System.Drawing.Size(218, 6) - ' - 'POBHidden - ' - Me.POBHidden.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesH - Me.POBHidden.Name = "POBHidden" - Me.POBHidden.Size = New System.Drawing.Size(221, 22) - Me.POBHidden.Text = "→ &Hidden Note" - ' - 'POBVisible - ' - Me.POBVisible.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesV - Me.POBVisible.Name = "POBVisible" - Me.POBVisible.Size = New System.Drawing.Size(221, 22) - Me.POBVisible.Text = "→ &Visible Note" - ' - 'POBHiddenVisible - ' - Me.POBHiddenVisible.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesHV - Me.POBHiddenVisible.Name = "POBHiddenVisible" - Me.POBHiddenVisible.Size = New System.Drawing.Size(221, 22) - Me.POBHiddenVisible.Text = "Hidden Note ↔ Visible Note" - ' - 'ToolStripSeparator11 - ' - Me.ToolStripSeparator11.Name = "ToolStripSeparator11" - Me.ToolStripSeparator11.Size = New System.Drawing.Size(218, 6) - ' - 'POBModify - ' - Me.POBModify.Image = Global.iBMSC.My.Resources.Resources.x16ModifyLabel - Me.POBModify.Name = "POBModify" - Me.POBModify.Size = New System.Drawing.Size(221, 22) - Me.POBModify.Text = "&Modify Labels" - ' - 'POBMirror - ' - Me.POBMirror.Image = Global.iBMSC.My.Resources.Resources.x16Mirror - Me.POBMirror.Name = "POBMirror" - Me.POBMirror.Size = New System.Drawing.Size(221, 22) - Me.POBMirror.Text = "Mi&rror" - ' - 'mnPreview - ' - Me.mnPreview.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnPlayB, Me.mnPlay, Me.mnStop}) - Me.mnPreview.Name = "mnPreview" - Me.mnPreview.Size = New System.Drawing.Size(60, 19) - Me.mnPreview.Text = "&Preview" - ' - 'mnPlayB - ' - Me.mnPlayB.Image = Global.iBMSC.My.Resources.Resources.x16PlayB - Me.mnPlayB.Name = "mnPlayB" - Me.mnPlayB.ShortcutKeys = System.Windows.Forms.Keys.F5 - Me.mnPlayB.Size = New System.Drawing.Size(201, 22) - Me.mnPlayB.Text = "Play from &beginning" - ' - 'mnPlay - ' - Me.mnPlay.Image = Global.iBMSC.My.Resources.Resources.x16Play - Me.mnPlay.Name = "mnPlay" - Me.mnPlay.ShortcutKeys = System.Windows.Forms.Keys.F6 - Me.mnPlay.Size = New System.Drawing.Size(201, 22) - Me.mnPlay.Text = "&Play from here" - ' - 'mnStop - ' - Me.mnStop.Image = Global.iBMSC.My.Resources.Resources.x16Stop - Me.mnStop.Name = "mnStop" - Me.mnStop.ShortcutKeys = System.Windows.Forms.Keys.F7 - Me.mnStop.Size = New System.Drawing.Size(201, 22) - Me.mnStop.Text = "&Stop" - ' - 'POConvert - ' - Me.POConvert.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.POConvert.DropDown = Me.cmnConversion - Me.POConvert.Image = Global.iBMSC.My.Resources.Resources.ConvertNotes - Me.POConvert.ImageTransparentColor = System.Drawing.Color.Magenta - Me.POConvert.Name = "POConvert" - Me.POConvert.Size = New System.Drawing.Size(29, 22) - Me.POConvert.Text = "Convert Notes" - ' - 'TBMain - ' - Me.TBMain.AccessibleRole = System.Windows.Forms.AccessibleRole.ToolBar - Me.TBMain.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch - Me.TBMain.Dock = System.Windows.Forms.DockStyle.None - Me.TBMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBNew, Me.TBOpen, Me.TBSave, Me.ToolStripSeparator1, Me.TBCut, Me.TBCopy, Me.TBPaste, Me.TBFind, Me.ToolStripSeparator24, Me.TBStatistics, Me.POConvert, Me.TBMyO2, Me.ToolStripSeparator4, Me.TBErrorCheck, Me.TBPreviewOnClick, Me.TBShowFileName, Me.ToolStripSeparator8, Me.TBNTInput, Me.TBWavIncrease, Me.ToolStripSeparator2, Me.TBUndo, Me.TBRedo, Me.ToolStripSeparator5, Me.TBTimeSelect, Me.TBSelect, Me.TBWrite, Me.ToolStripSeparator3, Me.TBPlayB, Me.TBPlay, Me.TBStop, Me.TBPOptions, Me.ToolStripSeparator7, Me.TBVOptions, Me.TBGOptions, Me.TBLanguage, Me.TBTheme, Me.POBStorm}) - Me.TBMain.Location = New System.Drawing.Point(3, 23) - Me.TBMain.Name = "TBMain" - Me.TBMain.Size = New System.Drawing.Size(805, 25) - Me.TBMain.TabIndex = 64 - Me.TBMain.Text = "Main Toolbar" - ' - 'TBNew - ' - Me.TBNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBNew.Image = Global.iBMSC.My.Resources.Resources.x16New - Me.TBNew.ImageTransparentColor = System.Drawing.Color.Transparent - Me.TBNew.Name = "TBNew" - Me.TBNew.Size = New System.Drawing.Size(23, 22) - Me.TBNew.Text = "New (Ctrl+N)" - ' - 'TBOpen - ' - Me.TBOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBOpen.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBOpenR0, Me.TBOpenR1, Me.TBOpenR2, Me.TBOpenR3, Me.TBOpenR4, Me.ToolStripSeparator12, Me.TBImportSM, Me.TBImportIBMSC}) - Me.TBOpen.Image = Global.iBMSC.My.Resources.Resources.x16Open - Me.TBOpen.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBOpen.Name = "TBOpen" - Me.TBOpen.Size = New System.Drawing.Size(32, 22) - Me.TBOpen.Text = "Open (Ctrl+O)" - ' - 'TBOpenR0 - ' - Me.TBOpenR0.Enabled = False - Me.TBOpenR0.Name = "TBOpenR0" - Me.TBOpenR0.Size = New System.Drawing.Size(199, 22) - Me.TBOpenR0.Tag = "0" - Me.TBOpenR0.Text = "Recent #0" - ' - 'TBOpenR1 - ' - Me.TBOpenR1.Enabled = False - Me.TBOpenR1.Name = "TBOpenR1" - Me.TBOpenR1.Size = New System.Drawing.Size(199, 22) - Me.TBOpenR1.Tag = "1" - Me.TBOpenR1.Text = "Recent #1" - ' - 'TBOpenR2 - ' - Me.TBOpenR2.Enabled = False - Me.TBOpenR2.Name = "TBOpenR2" - Me.TBOpenR2.Size = New System.Drawing.Size(199, 22) - Me.TBOpenR2.Tag = "2" - Me.TBOpenR2.Text = "Recent #2" - ' - 'TBOpenR3 - ' - Me.TBOpenR3.Enabled = False - Me.TBOpenR3.Name = "TBOpenR3" - Me.TBOpenR3.Size = New System.Drawing.Size(199, 22) - Me.TBOpenR3.Tag = "3" - Me.TBOpenR3.Text = "Recent #3" - ' - 'TBOpenR4 - ' - Me.TBOpenR4.Enabled = False - Me.TBOpenR4.Name = "TBOpenR4" - Me.TBOpenR4.Size = New System.Drawing.Size(199, 22) - Me.TBOpenR4.Tag = "4" - Me.TBOpenR4.Text = "Recent #4" - ' - 'ToolStripSeparator12 - ' - Me.ToolStripSeparator12.Name = "ToolStripSeparator12" - Me.ToolStripSeparator12.Size = New System.Drawing.Size(196, 6) - ' - 'TBImportSM - ' - Me.TBImportSM.Image = Global.iBMSC.My.Resources.Resources.x16Import2 - Me.TBImportSM.Name = "TBImportSM" - Me.TBImportSM.Size = New System.Drawing.Size(199, 22) - Me.TBImportSM.Text = "Import from .SM file" - ' - 'TBImportIBMSC - ' - Me.TBImportIBMSC.Image = Global.iBMSC.My.Resources.Resources.x16Import2 - Me.TBImportIBMSC.Name = "TBImportIBMSC" - Me.TBImportIBMSC.Size = New System.Drawing.Size(199, 22) - Me.TBImportIBMSC.Text = "Import from .IBMSC file" - ' - 'TBSave - ' - Me.TBSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBSave.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBSaveAs, Me.TBExport}) - Me.TBSave.Image = Global.iBMSC.My.Resources.Resources.x16Save - Me.TBSave.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBSave.Name = "TBSave" - Me.TBSave.Size = New System.Drawing.Size(32, 22) - Me.TBSave.Text = "Save (Ctrl+S)" - ' - 'TBSaveAs - ' - Me.TBSaveAs.Image = Global.iBMSC.My.Resources.Resources.x16SaveAs - Me.TBSaveAs.Name = "TBSaveAs" - Me.TBSaveAs.Size = New System.Drawing.Size(167, 22) - Me.TBSaveAs.Text = "Save As..." - ' - 'TBExport - ' - Me.TBExport.Image = Global.iBMSC.My.Resources.Resources.x16Export - Me.TBExport.Name = "TBExport" - Me.TBExport.Size = New System.Drawing.Size(167, 22) - Me.TBExport.Text = "Export .IBMSC file" - ' - 'ToolStripSeparator1 - ' - Me.ToolStripSeparator1.Name = "ToolStripSeparator1" - Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25) - ' - 'TBCut - ' - Me.TBCut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBCut.Image = Global.iBMSC.My.Resources.Resources.x16Cut - Me.TBCut.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBCut.Name = "TBCut" - Me.TBCut.Size = New System.Drawing.Size(23, 22) - Me.TBCut.Text = "Cut (Ctrl+X)" - ' - 'TBCopy - ' - Me.TBCopy.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBCopy.Image = Global.iBMSC.My.Resources.Resources.x16Copy - Me.TBCopy.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBCopy.Name = "TBCopy" - Me.TBCopy.Size = New System.Drawing.Size(23, 22) - Me.TBCopy.Text = "Copy (Ctrl+C)" - ' - 'TBPaste - ' - Me.TBPaste.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBPaste.Image = Global.iBMSC.My.Resources.Resources.x16Paste - Me.TBPaste.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBPaste.Name = "TBPaste" - Me.TBPaste.Size = New System.Drawing.Size(23, 22) - Me.TBPaste.Text = "Paste (Ctrl+V)" - ' - 'TBFind - ' - Me.TBFind.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBFind.Image = Global.iBMSC.My.Resources.Resources.x16Find - Me.TBFind.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBFind.Name = "TBFind" - Me.TBFind.Size = New System.Drawing.Size(23, 22) - Me.TBFind.Text = "Find / Delete / Replace (Ctrl+F)" - ' - 'ToolStripSeparator24 - ' - Me.ToolStripSeparator24.Name = "ToolStripSeparator24" - Me.ToolStripSeparator24.Size = New System.Drawing.Size(6, 25) - ' - 'TBStatistics - ' - Me.TBStatistics.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.TBStatistics.Image = Global.iBMSC.My.Resources.Resources.x16Statistics - Me.TBStatistics.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBStatistics.Name = "TBStatistics" - Me.TBStatistics.Size = New System.Drawing.Size(34, 22) - Me.TBStatistics.Text = "0" - Me.TBStatistics.ToolTipText = "Statistics (Ctrl+T)" - ' - 'TBMyO2 - ' - Me.TBMyO2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBMyO2.Image = Global.iBMSC.My.Resources.Resources.x16MyO2 - Me.TBMyO2.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBMyO2.Name = "TBMyO2" - Me.TBMyO2.Size = New System.Drawing.Size(23, 22) - Me.TBMyO2.Text = "MyO2 ToolBox (Chinese Only)" - ' - 'ToolStripSeparator4 - ' - Me.ToolStripSeparator4.Name = "ToolStripSeparator4" - Me.ToolStripSeparator4.Size = New System.Drawing.Size(6, 25) - ' - 'TBErrorCheck - ' - Me.TBErrorCheck.Checked = True - Me.TBErrorCheck.CheckOnClick = True - Me.TBErrorCheck.CheckState = System.Windows.Forms.CheckState.Checked - Me.TBErrorCheck.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBErrorCheck.Image = Global.iBMSC.My.Resources.Resources.x16CheckError - Me.TBErrorCheck.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBErrorCheck.Name = "TBErrorCheck" - Me.TBErrorCheck.Size = New System.Drawing.Size(23, 22) - Me.TBErrorCheck.Text = "Error Check" - ' - 'TBPreviewOnClick - ' - Me.TBPreviewOnClick.Checked = True - Me.TBPreviewOnClick.CheckOnClick = True - Me.TBPreviewOnClick.CheckState = System.Windows.Forms.CheckState.Checked - Me.TBPreviewOnClick.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBPreviewOnClick.Image = Global.iBMSC.My.Resources.Resources.x16PreviewOnClick - Me.TBPreviewOnClick.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBPreviewOnClick.Name = "TBPreviewOnClick" - Me.TBPreviewOnClick.Size = New System.Drawing.Size(23, 22) - Me.TBPreviewOnClick.Text = "Preview On Click" - ' - 'TBShowFileName - ' - Me.TBShowFileName.CheckOnClick = True - Me.TBShowFileName.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBShowFileName.Image = Global.iBMSC.My.Resources.Resources.x16ShowFileNameN - Me.TBShowFileName.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBShowFileName.Name = "TBShowFileName" - Me.TBShowFileName.Size = New System.Drawing.Size(23, 22) - Me.TBShowFileName.Text = "Show File Name on Notes" - ' - 'ToolStripSeparator8 - ' - Me.ToolStripSeparator8.Name = "ToolStripSeparator8" - Me.ToolStripSeparator8.Size = New System.Drawing.Size(6, 25) - ' - 'TBNTInput - ' - Me.TBNTInput.Checked = True - Me.TBNTInput.CheckOnClick = True - Me.TBNTInput.CheckState = System.Windows.Forms.CheckState.Checked - Me.TBNTInput.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBNTInput.Image = Global.iBMSC.My.Resources.Resources.x16NTInput - Me.TBNTInput.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBNTInput.Name = "TBNTInput" - Me.TBNTInput.Size = New System.Drawing.Size(23, 22) - Me.TBNTInput.Text = "LongNote Input Style - NoteTool/BMSE" - ' - 'TBWavIncrease - ' - Me.TBWavIncrease.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBWavIncrease.Image = CType(resources.GetObject("TBWavIncrease.Image"), System.Drawing.Image) - Me.TBWavIncrease.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBWavIncrease.Name = "TBWavIncrease" - Me.TBWavIncrease.Size = New System.Drawing.Size(23, 22) - Me.TBWavIncrease.Text = "Autoincrease WAV when writing" - ' - 'ToolStripSeparator2 - ' - Me.ToolStripSeparator2.Name = "ToolStripSeparator2" - Me.ToolStripSeparator2.Size = New System.Drawing.Size(6, 25) - ' - 'TBUndo - ' - Me.TBUndo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBUndo.Enabled = False - Me.TBUndo.Image = Global.iBMSC.My.Resources.Resources.x16Undo - Me.TBUndo.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBUndo.Name = "TBUndo" - Me.TBUndo.Size = New System.Drawing.Size(23, 22) - Me.TBUndo.Text = "Undo (Ctrl+Z)" - ' - 'TBRedo - ' - Me.TBRedo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBRedo.Enabled = False - Me.TBRedo.Image = Global.iBMSC.My.Resources.Resources.x16Redo - Me.TBRedo.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBRedo.Name = "TBRedo" - Me.TBRedo.Size = New System.Drawing.Size(23, 22) - Me.TBRedo.Text = "Redo (Ctrl+Y)" - ' - 'ToolStripSeparator5 - ' - Me.ToolStripSeparator5.Name = "ToolStripSeparator5" - Me.ToolStripSeparator5.Size = New System.Drawing.Size(6, 25) - ' - 'TBTimeSelect - ' - Me.TBTimeSelect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBTimeSelect.Image = Global.iBMSC.My.Resources.Resources.x16TimeSelection - Me.TBTimeSelect.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBTimeSelect.Name = "TBTimeSelect" - Me.TBTimeSelect.Size = New System.Drawing.Size(23, 22) - Me.TBTimeSelect.Text = "Time Selection Tool (F1)" - ' - 'TBSelect - ' - Me.TBSelect.Checked = True - Me.TBSelect.CheckState = System.Windows.Forms.CheckState.Checked - Me.TBSelect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBSelect.Image = Global.iBMSC.My.Resources.Resources.x16Select - Me.TBSelect.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBSelect.Name = "TBSelect" - Me.TBSelect.Size = New System.Drawing.Size(23, 22) - Me.TBSelect.Text = "Select Tool (F2)" - ' - 'TBWrite - ' - Me.TBWrite.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBWrite.Image = Global.iBMSC.My.Resources.Resources.x16Pen - Me.TBWrite.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBWrite.Name = "TBWrite" - Me.TBWrite.Size = New System.Drawing.Size(23, 22) - Me.TBWrite.Text = "Write Tool (F3)" - ' - 'ToolStripSeparator3 - ' - Me.ToolStripSeparator3.Name = "ToolStripSeparator3" - Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 25) - ' - 'TBPlayB - ' - Me.TBPlayB.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBPlayB.Image = Global.iBMSC.My.Resources.Resources.x16PlayB - Me.TBPlayB.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBPlayB.Name = "TBPlayB" - Me.TBPlayB.Size = New System.Drawing.Size(23, 22) - Me.TBPlayB.Text = "Play from beginning (F5)" - ' - 'TBPlay - ' - Me.TBPlay.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBPlay.Image = Global.iBMSC.My.Resources.Resources.x16Play - Me.TBPlay.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBPlay.Name = "TBPlay" - Me.TBPlay.Size = New System.Drawing.Size(23, 22) - Me.TBPlay.Text = "Play from here (F6)" - ' - 'TBStop - ' - Me.TBStop.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBStop.Image = Global.iBMSC.My.Resources.Resources.x16Stop - Me.TBStop.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBStop.Name = "TBStop" - Me.TBStop.Size = New System.Drawing.Size(23, 22) - Me.TBStop.Text = "Stop (F7)" - ' - 'TBPOptions - ' - Me.TBPOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBPOptions.Image = Global.iBMSC.My.Resources.Resources.x16PlayerOptions - Me.TBPOptions.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBPOptions.Name = "TBPOptions" - Me.TBPOptions.Size = New System.Drawing.Size(23, 22) - Me.TBPOptions.Text = "Player Options" - ' - 'ToolStripSeparator7 - ' - Me.ToolStripSeparator7.Name = "ToolStripSeparator7" - Me.ToolStripSeparator7.Size = New System.Drawing.Size(6, 25) - ' - 'TBVOptions - ' - Me.TBVOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBVOptions.Image = Global.iBMSC.My.Resources.Resources.x16VisualOptions - Me.TBVOptions.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBVOptions.Name = "TBVOptions" - Me.TBVOptions.Size = New System.Drawing.Size(23, 22) - Me.TBVOptions.Text = "Visual Options" - ' - 'TBGOptions - ' - Me.TBGOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.TBGOptions.Image = Global.iBMSC.My.Resources.Resources.x16GeneralOptions - Me.TBGOptions.ImageTransparentColor = System.Drawing.Color.Magenta - Me.TBGOptions.Name = "TBGOptions" - Me.TBGOptions.Size = New System.Drawing.Size(23, 22) - Me.TBGOptions.Text = "General Options" - ' - 'POBStorm - ' - Me.POBStorm.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.POBStorm.Image = Global.iBMSC.My.Resources.Resources.x16Storm - Me.POBStorm.ImageTransparentColor = System.Drawing.Color.Magenta - Me.POBStorm.Name = "POBStorm" - Me.POBStorm.Size = New System.Drawing.Size(23, 22) - Me.POBStorm.Text = "Storm" - Me.POBStorm.Visible = False - ' - 'pStatus - ' - Me.pStatus.AutoSize = True - Me.pStatus.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.pStatus.Controls.Add(Me.FStatus2) - Me.pStatus.Controls.Add(Me.FStatus) - Me.pStatus.Dock = System.Windows.Forms.DockStyle.Bottom - Me.pStatus.Location = New System.Drawing.Point(0, 708) - Me.pStatus.Name = "pStatus" - Me.pStatus.Size = New System.Drawing.Size(876, 22) - Me.pStatus.TabIndex = 62 - ' - 'FStatus2 - ' - Me.FStatus2.AccessibleRole = System.Windows.Forms.AccessibleRole.StatusBar - Me.FStatus2.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FSSS, Me.FSSL, Me.FSSH, Me.BVCReverse, Me.LblMultiply, Me.TVCM, Me.LblDivide, Me.TVCD, Me.BVCApply, Me.TVCBPM, Me.BVCCalculate, Me.BConvertStop}) - Me.FStatus2.Location = New System.Drawing.Point(0, 0) - Me.FStatus2.Name = "FStatus2" - Me.FStatus2.ShowItemToolTips = True - Me.FStatus2.Size = New System.Drawing.Size(876, 22) - Me.FStatus2.TabIndex = 0 - Me.FStatus2.Text = "Status" - Me.FStatus2.Visible = False - ' - 'FSSS - ' - Me.FSSS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.FSSS.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.FSSS.ImageTransparentColor = System.Drawing.Color.Magenta - Me.FSSS.Name = "FSSS" - Me.FSSS.Size = New System.Drawing.Size(23, 20) - Me.FSSS.Text = "0" - Me.FSSS.ToolTipText = "Selection Start Position" - ' - 'FSSL - ' - Me.FSSL.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.FSSL.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.FSSL.ImageTransparentColor = System.Drawing.Color.Magenta - Me.FSSL.Name = "FSSL" - Me.FSSL.Size = New System.Drawing.Size(23, 20) - Me.FSSL.Text = "0" - Me.FSSL.ToolTipText = "Selection Length" - ' - 'FSSH - ' - Me.FSSH.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.FSSH.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.FSSH.ImageTransparentColor = System.Drawing.Color.Magenta - Me.FSSH.Name = "FSSH" - Me.FSSH.Size = New System.Drawing.Size(23, 20) - Me.FSSH.Text = "0" - Me.FSSH.ToolTipText = "Selection Split Position" - ' - 'BVCReverse - ' - Me.BVCReverse.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.BVCReverse.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BVCReverse.ImageTransparentColor = System.Drawing.Color.Magenta - Me.BVCReverse.Name = "BVCReverse" - Me.BVCReverse.Size = New System.Drawing.Size(102, 20) - Me.BVCReverse.Text = "Reverse Selection" - ' - 'LblMultiply - ' - Me.LblMultiply.Name = "LblMultiply" - Me.LblMultiply.Size = New System.Drawing.Size(15, 17) - Me.LblMultiply.Text = "×" - ' - 'TVCM - ' - Me.TVCM.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) - Me.TVCM.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.TVCM.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.TVCM.Name = "TVCM" - Me.TVCM.Size = New System.Drawing.Size(60, 22) - Me.TVCM.Text = "2" - Me.TVCM.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center - ' - 'LblDivide - ' - Me.LblDivide.Name = "LblDivide" - Me.LblDivide.Size = New System.Drawing.Size(15, 17) - Me.LblDivide.Text = "÷" - ' - 'TVCD - ' - Me.TVCD.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) - Me.TVCD.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.TVCD.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.TVCD.Name = "TVCD" - Me.TVCD.Size = New System.Drawing.Size(60, 22) - Me.TVCD.Text = "1" - Me.TVCD.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center - ' - 'BVCApply - ' - Me.BVCApply.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.BVCApply.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BVCApply.ImageTransparentColor = System.Drawing.Color.Magenta - Me.BVCApply.Name = "BVCApply" - Me.BVCApply.Size = New System.Drawing.Size(95, 20) - Me.BVCApply.Text = "Expand By Ratio" - Me.BVCApply.ToolTipText = "This will expand notes and selection by the ratio next to this button. Ignores ce" & - "nter bar." - ' - 'TVCBPM - ' - Me.TVCBPM.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) - Me.TVCBPM.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.TVCBPM.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.TVCBPM.Name = "TVCBPM" - Me.TVCBPM.Size = New System.Drawing.Size(80, 22) - Me.TVCBPM.Text = "120" - Me.TVCBPM.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center - ' - 'BVCCalculate - ' - Me.BVCCalculate.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.BVCCalculate.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BVCCalculate.ImageTransparentColor = System.Drawing.Color.Magenta - Me.BVCCalculate.Name = "BVCCalculate" - Me.BVCCalculate.Size = New System.Drawing.Size(104, 20) - Me.BVCCalculate.Text = "Relocate By Value" - Me.BVCCalculate.ToolTipText = "This will move notes within the selection and preserve the selection, given the B" & - "PM value next to this button. Considers center bar." - ' - 'BConvertStop - ' - Me.BConvertStop.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.BConvertStop.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BConvertStop.ImageTransparentColor = System.Drawing.Color.Magenta - Me.BConvertStop.Name = "BConvertStop" - Me.BConvertStop.Size = New System.Drawing.Size(117, 20) - Me.BConvertStop.Text = "Transform Into Stop" - Me.BConvertStop.ToolTipText = "This will move notes within the selection and preserve the selection, given the B" & - "PM value next to this button. Considers center bar." - ' - 'FStatus - ' - Me.FStatus.AccessibleRole = System.Windows.Forms.AccessibleRole.StatusBar - Me.FStatus.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FSC, Me.FSW, Me.FSM, Me.FSP1, Me.FSP3, Me.FSP2, Me.FSP4, Me.TimeStatusLabel, Me.FST, Me.FSH, Me.FSE}) - Me.FStatus.Location = New System.Drawing.Point(0, 0) - Me.FStatus.Name = "FStatus" - Me.FStatus.ShowItemToolTips = True - Me.FStatus.Size = New System.Drawing.Size(876, 22) - Me.FStatus.SizingGrip = False - Me.FStatus.TabIndex = 62 - Me.FStatus.Text = "Status" - ' - 'FSC - ' - Me.FSC.AutoSize = False - Me.FSC.Name = "FSC" - Me.FSC.Size = New System.Drawing.Size(70, 17) - Me.FSC.Text = "BPM" - Me.FSC.ToolTipText = "Column Caption" - ' - 'FSW - ' - Me.FSW.AutoSize = False - Me.FSW.ForeColor = System.Drawing.Color.FromArgb(CType(CType(128, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(0, Byte), Integer)) - Me.FSW.Name = "FSW" - Me.FSW.Size = New System.Drawing.Size(40, 17) - Me.FSW.Text = "01" - Me.FSW.ToolTipText = "Note Index" - ' - 'FSM - ' - Me.FSM.AutoSize = False - Me.FSM.ForeColor = System.Drawing.Color.Teal - Me.FSM.Name = "FSM" - Me.FSM.Size = New System.Drawing.Size(40, 17) - Me.FSM.Text = "000" - Me.FSM.ToolTipText = "Measure Index" - ' - 'FSP1 - ' - Me.FSP1.AutoSize = False - Me.FSP1.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.FSP1.Name = "FSP1" - Me.FSP1.Size = New System.Drawing.Size(170, 17) - Me.FSP1.Text = "9.41176470588235 / 9999" - Me.FSP1.ToolTipText = "Grid Resolution" - ' - 'FSP3 - ' - Me.FSP3.AutoSize = False - Me.FSP3.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.FSP3.ForeColor = System.Drawing.Color.Maroon - Me.FSP3.Name = "FSP3" - Me.FSP3.Size = New System.Drawing.Size(85, 17) - Me.FSP3.Text = "9999 / 9999" - Me.FSP3.ToolTipText = "Reduced Resolution" - ' - 'FSP2 - ' - Me.FSP2.AutoSize = False - Me.FSP2.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) - Me.FSP2.ForeColor = System.Drawing.Color.Green - Me.FSP2.Name = "FSP2" - Me.FSP2.Size = New System.Drawing.Size(170, 17) - Me.FSP2.Text = "112.941176470588 / 9999" - Me.FSP2.ToolTipText = "Measure Resolution" - ' - 'FSP4 - ' - Me.FSP4.AutoSize = False - Me.FSP4.Name = "FSP4" - Me.FSP4.Size = New System.Drawing.Size(115, 17) - Me.FSP4.Text = "112.941176470588" - Me.FSP4.ToolTipText = "Absolute Position" - ' - 'TimeStatusLabel - ' - Me.TimeStatusLabel.Name = "TimeStatusLabel" - Me.TimeStatusLabel.Size = New System.Drawing.Size(55, 17) - Me.TimeStatusLabel.Text = "00:00:000" - ' - 'FST - ' - Me.FST.ForeColor = System.Drawing.Color.Olive - Me.FST.LinkColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(255, Byte), Integer)) - Me.FST.Name = "FST" - Me.FST.Size = New System.Drawing.Size(64, 17) - Me.FST.Text = "Length = 0" - ' - 'FSH - ' - Me.FSH.ForeColor = System.Drawing.Color.Blue - Me.FSH.Name = "FSH" - Me.FSH.Size = New System.Drawing.Size(46, 17) - Me.FSH.Text = "Hidden" - ' - 'FSE - ' - Me.FSE.ForeColor = System.Drawing.Color.Red - Me.FSE.Name = "FSE" - Me.FSE.Size = New System.Drawing.Size(32, 17) - Me.FSE.Text = "Error" - ' - 'TimerMiddle - ' - Me.TimerMiddle.Interval = 15 - ' - 'ToolStripContainer1 - ' - ' - 'ToolStripContainer1.ContentPanel - ' - Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.PMain) - Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.SpR) - Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.SpL) - Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.PMainR) - Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.PMainL) - Me.ToolStripContainer1.ContentPanel.Size = New System.Drawing.Size(876, 660) - Me.ToolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill - Me.ToolStripContainer1.Location = New System.Drawing.Point(0, 0) - Me.ToolStripContainer1.Name = "ToolStripContainer1" - Me.ToolStripContainer1.Size = New System.Drawing.Size(876, 708) - Me.ToolStripContainer1.TabIndex = 65 - Me.ToolStripContainer1.Text = "ToolStripContainer1" - ' - 'ToolStripContainer1.TopToolStripPanel - ' - Me.ToolStripContainer1.TopToolStripPanel.Controls.Add(Me.mnMain) - Me.ToolStripContainer1.TopToolStripPanel.Controls.Add(Me.TBMain) - ' - 'PMain - ' - Me.PMain.BackColor = System.Drawing.Color.Black - Me.PMain.Controls.Add(Me.PMainIn) - Me.PMain.Controls.Add(Me.MainPanelScroll) - Me.PMain.Controls.Add(Me.HS) - Me.PMain.Dock = System.Windows.Forms.DockStyle.Fill - Me.PMain.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PMain.ForeColor = System.Drawing.Color.White - Me.PMain.Location = New System.Drawing.Point(5, 0) - Me.PMain.Name = "PMain" - Me.PMain.Size = New System.Drawing.Size(866, 660) - Me.PMain.TabIndex = 58 - Me.PMain.Tag = "1" - ' - 'PMainIn - ' - Me.PMainIn.BackColor = System.Drawing.Color.Black - Me.PMainIn.Dock = System.Windows.Forms.DockStyle.Fill - Me.PMainIn.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PMainIn.ForeColor = System.Drawing.Color.White - Me.PMainIn.Location = New System.Drawing.Point(0, 0) - Me.PMainIn.Name = "PMainIn" - Me.PMainIn.Size = New System.Drawing.Size(849, 643) - Me.PMainIn.TabIndex = 0 - Me.PMainIn.TabStop = True - Me.PMainIn.Tag = "1" - ' - 'MainPanelScroll - ' - Me.MainPanelScroll.AccessibleRole = System.Windows.Forms.AccessibleRole.ScrollBar - Me.MainPanelScroll.Dock = System.Windows.Forms.DockStyle.Right - Me.MainPanelScroll.LargeChange = 592 - Me.MainPanelScroll.Location = New System.Drawing.Point(849, 0) - Me.MainPanelScroll.Maximum = 591 - Me.MainPanelScroll.Minimum = -10000 - Me.MainPanelScroll.Name = "MainPanelScroll" - Me.MainPanelScroll.Size = New System.Drawing.Size(17, 643) - Me.MainPanelScroll.SmallChange = 12 - Me.MainPanelScroll.TabIndex = 2 - Me.MainPanelScroll.Tag = "1" - ' - 'HS - ' - Me.HS.AccessibleRole = System.Windows.Forms.AccessibleRole.ScrollBar - Me.HS.Dock = System.Windows.Forms.DockStyle.Bottom - Me.HS.LargeChange = 777 - Me.HS.Location = New System.Drawing.Point(0, 643) - Me.HS.Maximum = 1233 - Me.HS.Name = "HS" - Me.HS.Size = New System.Drawing.Size(866, 17) - Me.HS.TabIndex = 3 - Me.HS.Tag = "1" - ' - 'SpR - ' - Me.SpR.Dock = System.Windows.Forms.DockStyle.Right - Me.SpR.FlatAppearance.BorderSize = 0 - Me.SpR.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.SpR.Location = New System.Drawing.Point(871, 0) - Me.SpR.Name = "SpR" - Me.SpR.Size = New System.Drawing.Size(5, 660) - Me.SpR.TabIndex = 59 - Me.SpR.TabStop = False - Me.SpR.UseVisualStyleBackColor = True - Me.SpR.Visible = False - ' - 'SpL - ' - Me.SpL.Dock = System.Windows.Forms.DockStyle.Left - Me.SpL.FlatAppearance.BorderSize = 0 - Me.SpL.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.SpL.Location = New System.Drawing.Point(0, 0) - Me.SpL.Name = "SpL" - Me.SpL.Size = New System.Drawing.Size(5, 660) - Me.SpL.TabIndex = 60 - Me.SpL.TabStop = False - Me.SpL.UseVisualStyleBackColor = True - Me.SpL.Visible = False - ' - 'PMainR - ' - Me.PMainR.BackColor = System.Drawing.Color.Black - Me.PMainR.Controls.Add(Me.PMainInR) - Me.PMainR.Controls.Add(Me.RightPanelScroll) - Me.PMainR.Controls.Add(Me.HSR) - Me.PMainR.Dock = System.Windows.Forms.DockStyle.Right - Me.PMainR.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PMainR.ForeColor = System.Drawing.Color.White - Me.PMainR.Location = New System.Drawing.Point(876, 0) - Me.PMainR.Name = "PMainR" - Me.PMainR.Size = New System.Drawing.Size(0, 660) - Me.PMainR.TabIndex = 56 - Me.PMainR.Tag = "2" - ' - 'PMainInR - ' - Me.PMainInR.BackColor = System.Drawing.Color.Black - Me.PMainInR.Dock = System.Windows.Forms.DockStyle.Fill - Me.PMainInR.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PMainInR.ForeColor = System.Drawing.Color.White - Me.PMainInR.Location = New System.Drawing.Point(0, 0) - Me.PMainInR.Name = "PMainInR" - Me.PMainInR.Size = New System.Drawing.Size(0, 643) - Me.PMainInR.TabIndex = 0 - Me.PMainInR.TabStop = True - Me.PMainInR.Tag = "2" - ' - 'RightPanelScroll - ' - Me.RightPanelScroll.Dock = System.Windows.Forms.DockStyle.Right - Me.RightPanelScroll.LargeChange = 592 - Me.RightPanelScroll.Location = New System.Drawing.Point(-17, 0) - Me.RightPanelScroll.Maximum = 591 - Me.RightPanelScroll.Minimum = -10000 - Me.RightPanelScroll.Name = "RightPanelScroll" - Me.RightPanelScroll.Size = New System.Drawing.Size(17, 643) - Me.RightPanelScroll.SmallChange = 12 - Me.RightPanelScroll.TabIndex = 2 - Me.RightPanelScroll.Tag = "2" - ' - 'HSR - ' - Me.HSR.Dock = System.Windows.Forms.DockStyle.Bottom - Me.HSR.LargeChange = 777 - Me.HSR.Location = New System.Drawing.Point(0, 643) - Me.HSR.Maximum = 1233 - Me.HSR.Name = "HSR" - Me.HSR.Size = New System.Drawing.Size(0, 17) - Me.HSR.TabIndex = 3 - Me.HSR.Tag = "2" - ' - 'PMainL - ' - Me.PMainL.BackColor = System.Drawing.Color.Black - Me.PMainL.Controls.Add(Me.PMainInL) - Me.PMainL.Controls.Add(Me.LeftPanelScroll) - Me.PMainL.Controls.Add(Me.HSL) - Me.PMainL.Dock = System.Windows.Forms.DockStyle.Left - Me.PMainL.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PMainL.ForeColor = System.Drawing.Color.White - Me.PMainL.Location = New System.Drawing.Point(0, 0) - Me.PMainL.Name = "PMainL" - Me.PMainL.Size = New System.Drawing.Size(0, 660) - Me.PMainL.TabIndex = 54 - Me.PMainL.Tag = "0" - ' - 'PMainInL - ' - Me.PMainInL.BackColor = System.Drawing.Color.Black - Me.PMainInL.Dock = System.Windows.Forms.DockStyle.Fill - Me.PMainInL.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PMainInL.ForeColor = System.Drawing.Color.White - Me.PMainInL.Location = New System.Drawing.Point(0, 0) - Me.PMainInL.Name = "PMainInL" - Me.PMainInL.Size = New System.Drawing.Size(0, 643) - Me.PMainInL.TabIndex = 0 - Me.PMainInL.TabStop = True - Me.PMainInL.Tag = "0" - ' - 'LeftPanelScroll - ' - Me.LeftPanelScroll.Dock = System.Windows.Forms.DockStyle.Right - Me.LeftPanelScroll.LargeChange = 592 - Me.LeftPanelScroll.Location = New System.Drawing.Point(-17, 0) - Me.LeftPanelScroll.Maximum = 591 - Me.LeftPanelScroll.Minimum = -10000 - Me.LeftPanelScroll.Name = "LeftPanelScroll" - Me.LeftPanelScroll.Size = New System.Drawing.Size(17, 643) - Me.LeftPanelScroll.SmallChange = 12 - Me.LeftPanelScroll.TabIndex = 2 - Me.LeftPanelScroll.Tag = "0" - ' - 'HSL - ' - Me.HSL.Dock = System.Windows.Forms.DockStyle.Bottom - Me.HSL.LargeChange = 777 - Me.HSL.Location = New System.Drawing.Point(0, 643) - Me.HSL.Maximum = 1233 - Me.HSL.Name = "HSL" - Me.HSL.Size = New System.Drawing.Size(0, 17) - Me.HSL.TabIndex = 3 - Me.HSL.Tag = "0" - ' - 'POptionsResizer - ' - Me.POptionsResizer.AutoSize = True - Me.POptionsResizer.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink - Me.POptionsResizer.Dock = System.Windows.Forms.DockStyle.Right - Me.POptionsResizer.FlatAppearance.BorderSize = 0 - Me.POptionsResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.POptionsResizer.Location = New System.Drawing.Point(876, 0) - Me.POptionsResizer.Name = "POptionsResizer" - Me.POptionsResizer.Size = New System.Drawing.Size(6, 730) - Me.POptionsResizer.TabIndex = 67 - Me.POptionsResizer.TabStop = False - Me.POptionsResizer.UseVisualStyleBackColor = True - ' - 'MainWindow - ' - Me.AllowDrop = True - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None - Me.ClientSize = New System.Drawing.Size(1082, 730) - Me.Controls.Add(Me.ToolStripContainer1) - Me.Controls.Add(Me.pStatus) - Me.Controls.Add(Me.POptionsResizer) - Me.Controls.Add(Me.POptionsScroll) - Me.DoubleBuffered = True - Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.KeyPreview = True - Me.MainMenuStrip = Me.mnMain - Me.Name = "MainWindow" - Me.cmnLanguage.ResumeLayout(False) - Me.cmnTheme.ResumeLayout(False) - Me.POptionsScroll.ResumeLayout(False) - Me.POptionsScroll.PerformLayout() - Me.POptions.ResumeLayout(False) - Me.POptions.PerformLayout() - Me.POExpansion.ResumeLayout(False) - Me.POExpansionInner.ResumeLayout(False) - Me.POExpansionInner.PerformLayout() - Me.POBeat.ResumeLayout(False) - Me.POBeatInner.ResumeLayout(False) - Me.POBeatInner.PerformLayout() - Me.TableLayoutPanel7.ResumeLayout(False) - Me.TableLayoutPanel7.PerformLayout() - CType(Me.nBeatD, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.nBeatN, System.ComponentModel.ISupportInitialize).EndInit() - Me.POBeatPart2.ResumeLayout(False) - Me.POBeatPart2.PerformLayout() - Me.POWAV.ResumeLayout(False) - Me.POWAVInner.ResumeLayout(False) - Me.POWAVInner.PerformLayout() - Me.FlowLayoutPanel3.ResumeLayout(False) - Me.POBMP.ResumeLayout(False) - Me.POBMPInner.ResumeLayout(False) - Me.POBMPInner.PerformLayout() - Me.FlowLayoutPanel4.ResumeLayout(False) - Me.POWAVPart2.ResumeLayout(False) - Me.POWAVPart2.PerformLayout() - Me.POWaveForm.ResumeLayout(False) - Me.POWaveForm.PerformLayout() - Me.POWaveFormInner.ResumeLayout(False) - Me.POWaveFormInner.PerformLayout() - Me.POWaveFormPart2.ResumeLayout(False) - Me.POWaveFormPart2.PerformLayout() - CType(Me.TWSaturation, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWTransparency, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWPrecision, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PictureBox4, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWWidth, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PictureBox5, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWLeft, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PictureBox6, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWSaturation2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWLeft2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWTransparency2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWWidth2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWPrecision2, System.ComponentModel.ISupportInitialize).EndInit() - Me.POWaveFormPart1.ResumeLayout(False) - Me.POWaveFormPart1.PerformLayout() - Me.TableLayoutPanel1.ResumeLayout(False) - Me.TableLayoutPanel1.PerformLayout() - Me.FlowLayoutPanel1.ResumeLayout(False) - Me.TableLayoutPanel6.ResumeLayout(False) - Me.TableLayoutPanel6.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWPosition2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.TWPosition, System.ComponentModel.ISupportInitialize).EndInit() - Me.POGrid.ResumeLayout(False) - Me.POGrid.PerformLayout() - Me.POGridInner.ResumeLayout(False) - Me.POGridInner.PerformLayout() - Me.POGridPart2.ResumeLayout(False) - Me.POGridPart2.PerformLayout() - Me.TableLayoutPanel5.ResumeLayout(False) - Me.TableLayoutPanel5.PerformLayout() - Me.FlowLayoutPanel2.ResumeLayout(False) - Me.TableLayoutPanel4.ResumeLayout(False) - Me.TableLayoutPanel4.PerformLayout() - CType(Me.CGB, System.ComponentModel.ISupportInitialize).EndInit() - Me.POGridPart1.ResumeLayout(False) - Me.POGridPart1.PerformLayout() - Me.TableLayoutPanel3.ResumeLayout(False) - Me.TableLayoutPanel3.PerformLayout() - CType(Me.PictureBox9, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.CGHeight2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.CGHeight, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.PictureBox10, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.CGWidth2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.CGWidth, System.ComponentModel.ISupportInitialize).EndInit() - Me.TableLayoutPanel2.ResumeLayout(False) - Me.TableLayoutPanel2.PerformLayout() - CType(Me.PictureBox7, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.CGDivide, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.CGSub, System.ComponentModel.ISupportInitialize).EndInit() - Me.POHeader.ResumeLayout(False) - Me.POHeader.PerformLayout() - Me.POHeaderInner.ResumeLayout(False) - Me.POHeaderInner.PerformLayout() - Me.POHeaderPart2.ResumeLayout(False) - Me.POHeaderPart2.PerformLayout() - Me.POHeaderPart1.ResumeLayout(False) - Me.POHeaderPart1.PerformLayout() - CType(Me.THBPM, System.ComponentModel.ISupportInitialize).EndInit() - Me.Menu1.ResumeLayout(False) - Me.mnMain.ResumeLayout(False) - Me.mnMain.PerformLayout() - Me.cmnConversion.ResumeLayout(False) - Me.TBMain.ResumeLayout(False) - Me.TBMain.PerformLayout() - Me.pStatus.ResumeLayout(False) - Me.pStatus.PerformLayout() - Me.FStatus2.ResumeLayout(False) - Me.FStatus2.PerformLayout() - Me.FStatus.ResumeLayout(False) - Me.FStatus.PerformLayout() - Me.ToolStripContainer1.ContentPanel.ResumeLayout(False) - Me.ToolStripContainer1.TopToolStripPanel.ResumeLayout(False) - Me.ToolStripContainer1.TopToolStripPanel.PerformLayout() - Me.ToolStripContainer1.ResumeLayout(False) - Me.ToolStripContainer1.PerformLayout() - Me.PMain.ResumeLayout(False) - Me.PMainR.ResumeLayout(False) - Me.PMainL.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - Friend WithEvents POptionsScroll As System.Windows.Forms.Panel - Friend WithEvents LWAV As System.Windows.Forms.ListBox - Friend WithEvents LBMP As System.Windows.Forms.ListBox - Friend WithEvents Timer1 As System.Windows.Forms.Timer - Friend WithEvents MInsert As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents MRemove As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents Menu1 As System.Windows.Forms.ContextMenuStrip - Friend WithEvents AutoSaveTimer As System.Windows.Forms.Timer - Friend WithEvents mnMain As System.Windows.Forms.MenuStrip - Friend WithEvents mnFile As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnNew As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnOpen As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnImportSM As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnImportIBMSC As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator14 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnSave As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSaveAs As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnExport As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator15 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnOpenR0 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnOpenR1 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnOpenR2 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnOpenR3 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnOpenR4 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator16 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnQuit As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnEdit As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnUndo As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnRedo As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator17 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnCut As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnCopy As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnPaste As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator18 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnFind As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnStatistics As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnDelete As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSelectAll As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnMyO2 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator19 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnOptions As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnPreview As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnPlayB As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnPlay As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnStop As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnTimeSelect As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSelect As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnWrite As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator23 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnConversion As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnErrorCheck As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnPreviewOnClick As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnShowFileName As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator20 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents mnGOptions As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnVOptions As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnLanguage As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnTheme As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents cmnLanguage As System.Windows.Forms.ContextMenuStrip - Friend WithEvents TBLangDef As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator9 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents cmnTheme As System.Windows.Forms.ContextMenuStrip - Friend WithEvents TBThemeDef As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBThemeSave As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBThemeRefresh As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator6 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents cmnConversion As System.Windows.Forms.ContextMenuStrip - Friend WithEvents POBLong As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents POBShort As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents POBLongShort As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator10 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents POBHidden As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents POBVisible As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents POBHiddenVisible As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator11 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents POBMirror As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents POBModify As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSys As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSMenu As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSTB As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSOP As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSStatus As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSLSplitter As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnSRSplitter As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents mnNTInput As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBLangRefresh As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGSub As System.Windows.Forms.NumericUpDown - Friend WithEvents CGDivide As System.Windows.Forms.NumericUpDown - Friend WithEvents PictureBox7 As System.Windows.Forms.PictureBox - Friend WithEvents CGSnap As System.Windows.Forms.CheckBox - Friend WithEvents BWLock As System.Windows.Forms.CheckBox - Friend WithEvents TWSaturation As System.Windows.Forms.NumericUpDown - Friend WithEvents TWTransparency As System.Windows.Forms.NumericUpDown - Friend WithEvents TWPrecision As System.Windows.Forms.NumericUpDown - Friend WithEvents TWWidth As System.Windows.Forms.NumericUpDown - Friend WithEvents TWLeft As System.Windows.Forms.NumericUpDown - Friend WithEvents TWPosition As System.Windows.Forms.NumericUpDown - Friend WithEvents PictureBox5 As System.Windows.Forms.PictureBox - Friend WithEvents PictureBox6 As System.Windows.Forms.PictureBox - Friend WithEvents PictureBox4 As System.Windows.Forms.PictureBox - Friend WithEvents PictureBox3 As System.Windows.Forms.PictureBox - Friend WithEvents PictureBox2 As System.Windows.Forms.PictureBox - Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox - Friend WithEvents TWSaturation2 As System.Windows.Forms.TrackBar - Friend WithEvents TWTransparency2 As System.Windows.Forms.TrackBar - Friend WithEvents TWPrecision2 As System.Windows.Forms.TrackBar - Friend WithEvents TWWidth2 As System.Windows.Forms.TrackBar - Friend WithEvents TWLeft2 As System.Windows.Forms.TrackBar - Friend WithEvents TWPosition2 As System.Windows.Forms.TrackBar - Friend WithEvents TWFileName As System.Windows.Forms.TextBox - Friend WithEvents BWClear As System.Windows.Forms.Button - Friend WithEvents BWLoad As System.Windows.Forms.Button - Friend WithEvents TBMain As System.Windows.Forms.ToolStrip - Friend WithEvents TBNew As System.Windows.Forms.ToolStripButton - Friend WithEvents TBOpen As System.Windows.Forms.ToolStripSplitButton - Friend WithEvents TBOpenR0 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBOpenR1 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBOpenR2 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBOpenR3 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBOpenR4 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator12 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBImportSM As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBImportIBMSC As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBSave As System.Windows.Forms.ToolStripSplitButton - Friend WithEvents TBSaveAs As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents TBExport As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBCut As System.Windows.Forms.ToolStripButton - Friend WithEvents TBCopy As System.Windows.Forms.ToolStripButton - Friend WithEvents TBPaste As System.Windows.Forms.ToolStripButton - Friend WithEvents TBFind As System.Windows.Forms.ToolStripButton - Friend WithEvents TBStatistics As System.Windows.Forms.ToolStripButton - Friend WithEvents pStatus As System.Windows.Forms.Panel - Friend WithEvents FStatus As System.Windows.Forms.StatusStrip - Friend WithEvents FSC As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSP1 As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSP2 As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSP3 As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSP4 As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FST As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSH As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSE As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FStatus2 As System.Windows.Forms.StatusStrip - Friend WithEvents BVCReverse As System.Windows.Forms.ToolStripButton - Friend WithEvents LblMultiply As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents TVCBPM As System.Windows.Forms.ToolStripTextBox - Friend WithEvents TVCM As System.Windows.Forms.ToolStripTextBox - Friend WithEvents LblDivide As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents TVCD As System.Windows.Forms.ToolStripTextBox - Friend WithEvents BVCApply As System.Windows.Forms.ToolStripButton - Friend WithEvents BVCCalculate As System.Windows.Forms.ToolStripButton - Friend WithEvents FSW As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents FSSS As System.Windows.Forms.ToolStripButton - Friend WithEvents FSSL As System.Windows.Forms.ToolStripButton - Friend WithEvents FSSH As System.Windows.Forms.ToolStripButton - Friend WithEvents TExpansion As System.Windows.Forms.TextBox - Friend WithEvents TimerMiddle As System.Windows.Forms.Timer - Friend WithEvents ToolStripSeparator21 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents CGShow As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGShowS As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGShowBG As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGShowM As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGShowMB As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGShowV As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGShowC As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator22 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents CGBLP As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGSTOP As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents CGSCROLL As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents nBeatN As System.Windows.Forms.NumericUpDown - Friend WithEvents LBeat As System.Windows.Forms.ListBox - Friend WithEvents Label7 As System.Windows.Forms.Label - Friend WithEvents BBeatApply As System.Windows.Forms.Button - Friend WithEvents mnPOptions As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripContainer1 As System.Windows.Forms.ToolStripContainer - Friend WithEvents PMain As System.Windows.Forms.Panel - Friend WithEvents PMainIn As System.Windows.Forms.Panel - Friend WithEvents MainPanelScroll As System.Windows.Forms.VScrollBar - Friend WithEvents HS As System.Windows.Forms.HScrollBar - Friend WithEvents PMainR As System.Windows.Forms.Panel - Friend WithEvents PMainInR As System.Windows.Forms.Panel - Friend WithEvents RightPanelScroll As System.Windows.Forms.VScrollBar - Friend WithEvents HSR As System.Windows.Forms.HScrollBar - Friend WithEvents PMainL As System.Windows.Forms.Panel - Friend WithEvents PMainInL As System.Windows.Forms.Panel - Friend WithEvents LeftPanelScroll As System.Windows.Forms.VScrollBar - Friend WithEvents HSL As System.Windows.Forms.HScrollBar - Friend WithEvents POConvert As System.Windows.Forms.ToolStripDropDownButton - Friend WithEvents TBLanguage As System.Windows.Forms.ToolStripDropDownButton - Friend WithEvents TBTheme As System.Windows.Forms.ToolStripDropDownButton - Friend WithEvents TBMyO2 As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripSeparator4 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBErrorCheck As System.Windows.Forms.ToolStripButton - Friend WithEvents TBPreviewOnClick As System.Windows.Forms.ToolStripButton - Friend WithEvents TBShowFileName As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripSeparator2 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBUndo As System.Windows.Forms.ToolStripButton - Friend WithEvents TBRedo As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripSeparator5 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBNTInput As System.Windows.Forms.ToolStripButton - Friend WithEvents TBTimeSelect As System.Windows.Forms.ToolStripButton - Friend WithEvents TBSelect As System.Windows.Forms.ToolStripButton - Friend WithEvents TBWrite As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBPlayB As System.Windows.Forms.ToolStripButton - Friend WithEvents TBPlay As System.Windows.Forms.ToolStripButton - Friend WithEvents TBStop As System.Windows.Forms.ToolStripButton - Friend WithEvents TBPOptions As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripSeparator7 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents TBVOptions As System.Windows.Forms.ToolStripButton - Friend WithEvents TBGOptions As System.Windows.Forms.ToolStripButton - Friend WithEvents POBStorm As System.Windows.Forms.ToolStripButton - Friend WithEvents POptions As System.Windows.Forms.Panel - Friend WithEvents POHeader As System.Windows.Forms.Panel - Friend WithEvents POHeaderSwitch As System.Windows.Forms.CheckBox - Friend WithEvents POGrid As System.Windows.Forms.Panel - Friend WithEvents POGridSwitch As System.Windows.Forms.CheckBox - Friend WithEvents POHeaderInner As System.Windows.Forms.Panel - Friend WithEvents POHeaderPart2 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents THExRank As System.Windows.Forms.TextBox - Friend WithEvents Label25 As System.Windows.Forms.Label - Friend WithEvents CHLnObj As System.Windows.Forms.ComboBox - Friend WithEvents Label23 As System.Windows.Forms.Label - Friend WithEvents Label21 As System.Windows.Forms.Label - Friend WithEvents THComment As System.Windows.Forms.TextBox - Friend WithEvents Label24 As System.Windows.Forms.Label - Friend WithEvents Label15 As System.Windows.Forms.Label - Friend WithEvents THTotal As System.Windows.Forms.TextBox - Friend WithEvents Label20 As System.Windows.Forms.Label - Friend WithEvents BHStageFile As System.Windows.Forms.Button - Friend WithEvents BHBanner As System.Windows.Forms.Button - Friend WithEvents Label19 As System.Windows.Forms.Label - Friend WithEvents BHBackBMP As System.Windows.Forms.Button - Friend WithEvents Label17 As System.Windows.Forms.Label - Friend WithEvents Label16 As System.Windows.Forms.Label - Friend WithEvents Label12 As System.Windows.Forms.Label - Friend WithEvents THBackBMP As System.Windows.Forms.TextBox - Friend WithEvents Label11 As System.Windows.Forms.Label - Friend WithEvents THBanner As System.Windows.Forms.TextBox - Friend WithEvents THStageFile As System.Windows.Forms.TextBox - Friend WithEvents THSubTitle As System.Windows.Forms.TextBox - Friend WithEvents THSubArtist As System.Windows.Forms.TextBox - Friend WithEvents POHeaderExpander As System.Windows.Forms.CheckBox - Friend WithEvents POHeaderPart1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents Label3 As System.Windows.Forms.Label - Friend WithEvents THPlayLevel As System.Windows.Forms.TextBox - Friend WithEvents CHRank As System.Windows.Forms.ComboBox - Friend WithEvents Label10 As System.Windows.Forms.Label - Friend WithEvents CHPlayer As System.Windows.Forms.ComboBox - Friend WithEvents CHDifficulty As System.Windows.Forms.ComboBox - Friend WithEvents Label4 As System.Windows.Forms.Label - Friend WithEvents THGenre As System.Windows.Forms.TextBox - Friend WithEvents THBPM As System.Windows.Forms.NumericUpDown - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents THArtist As System.Windows.Forms.TextBox - Friend WithEvents THTitle As System.Windows.Forms.TextBox - Friend WithEvents Label9 As System.Windows.Forms.Label - Friend WithEvents Label8 As System.Windows.Forms.Label - Friend WithEvents Label6 As System.Windows.Forms.Label - Friend WithEvents POGridPart1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents TableLayoutPanel2 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents POGridInner As System.Windows.Forms.Panel - Friend WithEvents POGridPart2 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents TableLayoutPanel5 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents cVSLockR As System.Windows.Forms.CheckBox - Friend WithEvents Label5 As System.Windows.Forms.Label - Friend WithEvents cVSLock As System.Windows.Forms.CheckBox - Friend WithEvents cVSLockL As System.Windows.Forms.CheckBox - Friend WithEvents CGDisableVertical As System.Windows.Forms.CheckBox - Friend WithEvents TableLayoutPanel4 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents CGB As System.Windows.Forms.NumericUpDown - Friend WithEvents POGridExpander As System.Windows.Forms.CheckBox - Friend WithEvents TableLayoutPanel3 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents PictureBox9 As System.Windows.Forms.PictureBox - Friend WithEvents CGHeight2 As System.Windows.Forms.TrackBar - Friend WithEvents CGHeight As System.Windows.Forms.NumericUpDown - Friend WithEvents PictureBox10 As System.Windows.Forms.PictureBox - Friend WithEvents CGWidth2 As System.Windows.Forms.TrackBar - Friend WithEvents CGWidth As System.Windows.Forms.NumericUpDown - Friend WithEvents POWaveForm As System.Windows.Forms.Panel - Friend WithEvents POWaveFormSwitch As System.Windows.Forms.CheckBox - Friend WithEvents POWaveFormInner As System.Windows.Forms.Panel - Friend WithEvents POWaveFormPart2 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents POWaveFormExpander As System.Windows.Forms.CheckBox - Friend WithEvents POWaveFormPart1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents TableLayoutPanel6 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents FlowLayoutPanel1 As System.Windows.Forms.FlowLayoutPanel - Friend WithEvents FlowLayoutPanel2 As System.Windows.Forms.FlowLayoutPanel - Friend WithEvents POWAV As System.Windows.Forms.Panel - Friend WithEvents POWAVInner As System.Windows.Forms.TableLayoutPanel - Friend WithEvents POWAVSwitch As System.Windows.Forms.CheckBox - Friend WithEvents POBMP As System.Windows.Forms.Panel - Friend WithEvents POBMPInner As System.Windows.Forms.TableLayoutPanel - Friend WithEvents POBMPSwitch As System.Windows.Forms.CheckBox - Friend WithEvents POBeat As System.Windows.Forms.Panel - Friend WithEvents POBeatInner As System.Windows.Forms.TableLayoutPanel - Friend WithEvents POBeatSwitch As System.Windows.Forms.CheckBox - Friend WithEvents FlowLayoutPanel3 As System.Windows.Forms.FlowLayoutPanel - Friend WithEvents FlowLayoutPanel4 As System.Windows.Forms.FlowLayoutPanel - Friend WithEvents BWAVUp As System.Windows.Forms.Button - Friend WithEvents BWAVDown As System.Windows.Forms.Button - Friend WithEvents BWAVBrowse As System.Windows.Forms.Button - Friend WithEvents BWAVRemove As System.Windows.Forms.Button - Friend WithEvents BBMPUp As System.Windows.Forms.Button - Friend WithEvents BBMPDown As System.Windows.Forms.Button - Friend WithEvents BBMPBrowse As System.Windows.Forms.Button - Friend WithEvents BBMPRemove As System.Windows.Forms.Button - Friend WithEvents POExpansion As System.Windows.Forms.Panel - Friend WithEvents POExpansionInner As System.Windows.Forms.Panel - Friend WithEvents POExpansionSwitch As System.Windows.Forms.CheckBox - Friend WithEvents POWAVResizer As System.Windows.Forms.Button - Friend WithEvents POBMPResizer As System.Windows.Forms.Button - Friend WithEvents TableLayoutPanel7 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents POExpansionResizer As System.Windows.Forms.Button - Friend WithEvents POBeatResizer As System.Windows.Forms.Button - Friend WithEvents POptionsResizer As System.Windows.Forms.Button - Friend WithEvents SpR As System.Windows.Forms.Button - Friend WithEvents SpL As System.Windows.Forms.Button - Friend WithEvents TBThemeLoadComptability As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents POWAVExpander As System.Windows.Forms.CheckBox - Friend WithEvents POWAVPart2 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents CWAVMultiSelect As System.Windows.Forms.CheckBox - Friend WithEvents CWAVChangeLabel As System.Windows.Forms.CheckBox - Friend WithEvents nBeatD As System.Windows.Forms.NumericUpDown - Friend WithEvents BBeatApplyV As System.Windows.Forms.Button - Friend WithEvents tBeatValue As System.Windows.Forms.TextBox - Friend WithEvents POBeatExpander As System.Windows.Forms.CheckBox - Friend WithEvents POBeatPart2 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents CBeatScale As System.Windows.Forms.RadioButton - Friend WithEvents CBeatCut As System.Windows.Forms.RadioButton - Friend WithEvents CBeatMeasure As System.Windows.Forms.RadioButton - Friend WithEvents CBeatPreserve As System.Windows.Forms.RadioButton - Friend WithEvents Label13 As System.Windows.Forms.Label - Friend WithEvents ToolTipUniversal As System.Windows.Forms.ToolTip - Friend WithEvents CGBPM As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents BGSlash As System.Windows.Forms.Button - Friend WithEvents FSM As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents mnGotoMeasure As ToolStripMenuItem - Friend WithEvents ToolStripSeparator24 As ToolStripSeparator - Friend WithEvents ToolStripSeparator8 As ToolStripSeparator - Friend WithEvents TBWavIncrease As ToolStripButton - Friend WithEvents TimeStatusLabel As ToolStripStatusLabel - Friend WithEvents BConvertStop As ToolStripButton -End Class + +Partial Class MainWindow + Inherits System.Windows.Forms.Form + + 'Form 重写 Dispose,以清理组件列表。 + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Windows 窗体设计器所必需的 + Private components As System.ComponentModel.IContainer + + '注意: 以下过程是 Windows 窗体设计器所必需的 + '可以使用 Windows 窗体设计器修改它。 + '不要使用代码编辑器修改它。 + + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainWindow)) + Me.cmnLanguage = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.TBLangDef = New System.Windows.Forms.ToolStripMenuItem() + Me.TBLangRefresh = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator() + Me.TBLanguage = New System.Windows.Forms.ToolStripDropDownButton() + Me.mnLanguage = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnTheme = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.TBThemeDef = New System.Windows.Forms.ToolStripMenuItem() + Me.TBThemeSave = New System.Windows.Forms.ToolStripMenuItem() + Me.TBThemeRefresh = New System.Windows.Forms.ToolStripMenuItem() + Me.TBThemeLoadComptability = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() + Me.TBTheme = New System.Windows.Forms.ToolStripDropDownButton() + Me.mnTheme = New System.Windows.Forms.ToolStripMenuItem() + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.Menu1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.MInsert = New System.Windows.Forms.ToolStripMenuItem() + Me.MRemove = New System.Windows.Forms.ToolStripMenuItem() + Me.AutoSaveTimer = New System.Windows.Forms.Timer(Me.components) + Me.mnMain = New System.Windows.Forms.MenuStrip() + Me.mnFile = New System.Windows.Forms.ToolStripMenuItem() + Me.mnNew = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOpen = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOpenTemplate = New System.Windows.Forms.ToolStripMenuItem() + Me.mnImportSM = New System.Windows.Forms.ToolStripMenuItem() + Me.mnImportIBMSC = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator14 = New System.Windows.Forms.ToolStripSeparator() + Me.mnSave = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSaveAs = New System.Windows.Forms.ToolStripMenuItem() + Me.mnExport = New System.Windows.Forms.ToolStripMenuItem() + Me.mnClose = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator15 = New System.Windows.Forms.ToolStripSeparator() + Me.mnOpenR0 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOpenR1 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOpenR2 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOpenR3 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOpenR4 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator16 = New System.Windows.Forms.ToolStripSeparator() + Me.mnQuit = New System.Windows.Forms.ToolStripMenuItem() + Me.mnEdit = New System.Windows.Forms.ToolStripMenuItem() + Me.mnUndo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnRedo = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator17 = New System.Windows.Forms.ToolStripSeparator() + Me.mnCut = New System.Windows.Forms.ToolStripMenuItem() + Me.mnCopy = New System.Windows.Forms.ToolStripMenuItem() + Me.mnPaste = New System.Windows.Forms.ToolStripMenuItem() + Me.mnPastePattern = New System.Windows.Forms.ToolStripMenuItem() + Me.mnDelete = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSelectAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnGotoMeasure = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator18 = New System.Windows.Forms.ToolStripSeparator() + Me.mnFind = New System.Windows.Forms.ToolStripMenuItem() + Me.mnStatistics = New System.Windows.Forms.ToolStripMenuItem() + Me.mnStatisticsAdvanced = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator19 = New System.Windows.Forms.ToolStripSeparator() + Me.mnTimeSelect = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSelect = New System.Windows.Forms.ToolStripMenuItem() + Me.mnWrite = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSys = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSMenu = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSTB = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSOP = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSStatus = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSLSplitter = New System.Windows.Forms.ToolStripMenuItem() + Me.mnSRSplitter = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator21 = New System.Windows.Forms.ToolStripSeparator() + Me.CGShow = New System.Windows.Forms.ToolStripMenuItem() + Me.CGShowS = New System.Windows.Forms.ToolStripMenuItem() + Me.CGShowBG = New System.Windows.Forms.ToolStripMenuItem() + Me.CGShowM = New System.Windows.Forms.ToolStripMenuItem() + Me.CGShowMB = New System.Windows.Forms.ToolStripMenuItem() + Me.CGShowV = New System.Windows.Forms.ToolStripMenuItem() + Me.CGShowC = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator22 = New System.Windows.Forms.ToolStripSeparator() + Me.CGBPM = New System.Windows.Forms.ToolStripMenuItem() + Me.CGSTOP = New System.Windows.Forms.ToolStripMenuItem() + Me.CGSCROLL = New System.Windows.Forms.ToolStripMenuItem() + Me.CGBLP = New System.Windows.Forms.ToolStripMenuItem() + Me.mnOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mnNTInput = New System.Windows.Forms.ToolStripMenuItem() + Me.mnErrorCheck = New System.Windows.Forms.ToolStripMenuItem() + Me.mnPreviewOnClick = New System.Windows.Forms.ToolStripMenuItem() + Me.mnShowFileName = New System.Windows.Forms.ToolStripMenuItem() + Me.mnShowWaveform = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator20 = New System.Windows.Forms.ToolStripSeparator() + Me.mnPOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mnGOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mnKOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mnVOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mnVCOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mnConversion = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnConversion = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.POBLong = New System.Windows.Forms.ToolStripMenuItem() + Me.POBShort = New System.Windows.Forms.ToolStripMenuItem() + Me.POBLongShort = New System.Windows.Forms.ToolStripMenuItem() + Me.POBLongObjNT = New System.Windows.Forms.ToolStripMenuItem() + Me.POBLongNTObj = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator25 = New System.Windows.Forms.ToolStripSeparator() + Me.POBAutoLongVPosition = New System.Windows.Forms.ToolStripMenuItem() + Me.POBAutoLongColumn = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator10 = New System.Windows.Forms.ToolStripSeparator() + Me.POBHidden = New System.Windows.Forms.ToolStripMenuItem() + Me.POBVisible = New System.Windows.Forms.ToolStripMenuItem() + Me.POBHiddenVisible = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator11 = New System.Windows.Forms.ToolStripSeparator() + Me.POBModify = New System.Windows.Forms.ToolStripMenuItem() + Me.POBMirror = New System.Windows.Forms.ToolStripMenuItem() + Me.POBFlip = New System.Windows.Forms.ToolStripMenuItem() + Me.POBRandom = New System.Windows.Forms.ToolStripMenuItem() + Me.POBRRandom = New System.Windows.Forms.ToolStripMenuItem() + Me.POBSRandom = New System.Windows.Forms.ToolStripMenuItem() + Me.POBHRandom = New System.Windows.Forms.ToolStripMenuItem() + Me.POBSort = New System.Windows.Forms.ToolStripMenuItem() + Me.POConvert = New System.Windows.Forms.ToolStripDropDownButton() + Me.mnPreview = New System.Windows.Forms.ToolStripMenuItem() + Me.mnPlayB = New System.Windows.Forms.ToolStripMenuItem() + Me.mnPlay = New System.Windows.Forms.ToolStripMenuItem() + Me.mnStop = New System.Windows.Forms.ToolStripMenuItem() + Me.mnTools = New System.Windows.Forms.ToolStripMenuItem() + Me.mnTechnicalErrorCheck = New System.Windows.Forms.ToolStripMenuItem() + Me.mnTOTAL = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator13 = New System.Windows.Forms.ToolStripSeparator() + Me.mnMyO2 = New System.Windows.Forms.ToolStripMenuItem() + Me.TBMain = New System.Windows.Forms.ToolStrip() + Me.TBNew = New System.Windows.Forms.ToolStripButton() + Me.TBOpen = New System.Windows.Forms.ToolStripSplitButton() + Me.TBOpenR0 = New System.Windows.Forms.ToolStripMenuItem() + Me.TBOpenR1 = New System.Windows.Forms.ToolStripMenuItem() + Me.TBOpenR2 = New System.Windows.Forms.ToolStripMenuItem() + Me.TBOpenR3 = New System.Windows.Forms.ToolStripMenuItem() + Me.TBOpenR4 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator12 = New System.Windows.Forms.ToolStripSeparator() + Me.TBImportSM = New System.Windows.Forms.ToolStripMenuItem() + Me.TBImportIBMSC = New System.Windows.Forms.ToolStripMenuItem() + Me.TBSave = New System.Windows.Forms.ToolStripSplitButton() + Me.TBSaveAs = New System.Windows.Forms.ToolStripMenuItem() + Me.TBExport = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.TBCut = New System.Windows.Forms.ToolStripButton() + Me.TBCopy = New System.Windows.Forms.ToolStripButton() + Me.TBPaste = New System.Windows.Forms.ToolStripButton() + Me.TBPastePattern = New System.Windows.Forms.ToolStripButton() + Me.TBFind = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator24 = New System.Windows.Forms.ToolStripSeparator() + Me.TBStatistics = New System.Windows.Forms.ToolStripButton() + Me.TBMyO2 = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() + Me.TBErrorCheck = New System.Windows.Forms.ToolStripButton() + Me.TBPreviewOnClick = New System.Windows.Forms.ToolStripButton() + Me.TBShowFileName = New System.Windows.Forms.ToolStripButton() + Me.TBShowWaveform = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator() + Me.TBNTInput = New System.Windows.Forms.ToolStripButton() + Me.TBWavIncrease = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() + Me.TBUndo = New System.Windows.Forms.ToolStripButton() + Me.TBRedo = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() + Me.TBTimeSelect = New System.Windows.Forms.ToolStripButton() + Me.TBSelect = New System.Windows.Forms.ToolStripButton() + Me.TBWrite = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() + Me.TBPlayB = New System.Windows.Forms.ToolStripButton() + Me.TBPlay = New System.Windows.Forms.ToolStripButton() + Me.TBStop = New System.Windows.Forms.ToolStripButton() + Me.TBPOptions = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator() + Me.TBGOptions = New System.Windows.Forms.ToolStripButton() + Me.TBKOptions = New System.Windows.Forms.ToolStripButton() + Me.TBVOptions = New System.Windows.Forms.ToolStripButton() + Me.POBStorm = New System.Windows.Forms.ToolStripButton() + Me.TBTotalValue = New System.Windows.Forms.ToolStripLabel() + Me.pStatus = New System.Windows.Forms.Panel() + Me.FStatus2 = New System.Windows.Forms.StatusStrip() + Me.FSSS = New System.Windows.Forms.ToolStripButton() + Me.FSSL = New System.Windows.Forms.ToolStripButton() + Me.FSSH = New System.Windows.Forms.ToolStripButton() + Me.BVCReverse = New System.Windows.Forms.ToolStripButton() + Me.LblMultiply = New System.Windows.Forms.ToolStripStatusLabel() + Me.TVCM = New System.Windows.Forms.ToolStripTextBox() + Me.LblDivide = New System.Windows.Forms.ToolStripStatusLabel() + Me.TVCD = New System.Windows.Forms.ToolStripTextBox() + Me.BVCApply = New System.Windows.Forms.ToolStripButton() + Me.TVCBPM = New System.Windows.Forms.ToolStripTextBox() + Me.BVCCalculate = New System.Windows.Forms.ToolStripButton() + Me.BConvertStop = New System.Windows.Forms.ToolStripButton() + Me.BDefineMeasure = New System.Windows.Forms.ToolStripButton() + Me.BInsertOrRemoveSpaceMN = New System.Windows.Forms.ToolStripButton() + Me.BInsertOrRemoveSpaceM = New System.Windows.Forms.ToolStripButton() + Me.BInsertOrRemoveSpaceN = New System.Windows.Forms.ToolStripButton() + Me.FStatus = New System.Windows.Forms.StatusStrip() + Me.FSC = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSW = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSM = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSP1 = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSP3 = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSP2 = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSP4 = New System.Windows.Forms.ToolStripStatusLabel() + Me.TimeStatusLabel = New System.Windows.Forms.ToolStripStatusLabel() + Me.FST = New System.Windows.Forms.ToolStripStatusLabel() + Me.FSE = New System.Windows.Forms.ToolStripStatusLabel() + Me.TimerMiddle = New System.Windows.Forms.Timer(Me.components) + Me.ToolStripContainer1 = New System.Windows.Forms.ToolStripContainer() + Me.PMain = New System.Windows.Forms.Panel() + Me.PMainIn = New System.Windows.Forms.Panel() + Me.PBOnTabHover = New System.Windows.Forms.PictureBox() + Me.MainPanelScroll = New System.Windows.Forms.VScrollBar() + Me.HS = New System.Windows.Forms.HScrollBar() + Me.SpR = New System.Windows.Forms.Button() + Me.SpL = New System.Windows.Forms.Button() + Me.PMainR = New System.Windows.Forms.Panel() + Me.PMainInR = New System.Windows.Forms.Panel() + Me.RightPanelScroll = New System.Windows.Forms.VScrollBar() + Me.HSR = New System.Windows.Forms.HScrollBar() + Me.PMainL = New System.Windows.Forms.Panel() + Me.PMainInL = New System.Windows.Forms.Panel() + Me.LeftPanelScroll = New System.Windows.Forms.VScrollBar() + Me.HSL = New System.Windows.Forms.HScrollBar() + Me.TBTab = New System.Windows.Forms.ToolStrip() + Me.POptionsResizer = New System.Windows.Forms.Button() + Me.ToolTipUniversal = New System.Windows.Forms.ToolTip(Me.components) + Me.cVSLockR = New System.Windows.Forms.CheckBox() + Me.cVSLock = New System.Windows.Forms.CheckBox() + Me.cVSLockL = New System.Windows.Forms.CheckBox() + Me.BWLock = New System.Windows.Forms.CheckBox() + Me.BWClear = New System.Windows.Forms.Button() + Me.BWLoad = New System.Windows.Forms.Button() + Me.BWAVRemove = New System.Windows.Forms.Button() + Me.BWAVBrowse = New System.Windows.Forms.Button() + Me.BWAVDown = New System.Windows.Forms.Button() + Me.BWAVUp = New System.Windows.Forms.Button() + Me.BWAVDuplicate = New System.Windows.Forms.Button() + Me.BWAVColorOverride = New System.Windows.Forms.Button() + Me.BBMPUp = New System.Windows.Forms.Button() + Me.BBMPDown = New System.Windows.Forms.Button() + Me.BBMPBrowse = New System.Windows.Forms.Button() + Me.BBMPRemove = New System.Windows.Forms.Button() + Me.POptions = New System.Windows.Forms.Panel() + Me.POExpansion = New System.Windows.Forms.Panel() + Me.POExpansionInner = New System.Windows.Forms.Panel() + Me.BExpansion = New System.Windows.Forms.Button() + Me.TExpansion = New System.Windows.Forms.TextBox() + Me.POExpansionResizer = New System.Windows.Forms.Button() + Me.POExpansionSwitch = New System.Windows.Forms.CheckBox() + Me.POBeat = New System.Windows.Forms.Panel() + Me.POBeatInner = New System.Windows.Forms.TableLayoutPanel() + Me.POBeatExpander = New System.Windows.Forms.CheckBox() + Me.POBeatResizer = New System.Windows.Forms.Button() + Me.TableLayoutPanel7 = New System.Windows.Forms.TableLayoutPanel() + Me.nBeatD = New System.Windows.Forms.NumericUpDown() + Me.BBeatApplyV = New System.Windows.Forms.Button() + Me.nBeatN = New System.Windows.Forms.NumericUpDown() + Me.BBeatApply = New System.Windows.Forms.Button() + Me.Label7 = New System.Windows.Forms.Label() + Me.tBeatValue = New System.Windows.Forms.TextBox() + Me.LBeat = New System.Windows.Forms.ListBox() + Me.POBeatPart2 = New System.Windows.Forms.TableLayoutPanel() + Me.CBeatScale = New System.Windows.Forms.RadioButton() + Me.CBeatCut = New System.Windows.Forms.RadioButton() + Me.CBeatMeasure = New System.Windows.Forms.RadioButton() + Me.CBeatPreserve = New System.Windows.Forms.RadioButton() + Me.POBeatSwitch = New System.Windows.Forms.CheckBox() + Me.POWAV = New System.Windows.Forms.Panel() + Me.POBMP = New System.Windows.Forms.Panel() + Me.POBMPInner = New System.Windows.Forms.TableLayoutPanel() + Me.POBMPExpander = New System.Windows.Forms.CheckBox() + Me.LBMP = New System.Windows.Forms.ListBox() + Me.FlowLayoutPanel4 = New System.Windows.Forms.FlowLayoutPanel() + Me.POBMPResizer = New System.Windows.Forms.Button() + Me.POBMPPart2 = New System.Windows.Forms.TableLayoutPanel() + Me.CBMPMultiSelect = New System.Windows.Forms.CheckBox() + Me.CBMPChangeLabel = New System.Windows.Forms.CheckBox() + Me.POBMPSwitch = New System.Windows.Forms.CheckBox() + Me.POWAVInner = New System.Windows.Forms.TableLayoutPanel() + Me.POWAVExpander = New System.Windows.Forms.CheckBox() + Me.LWAV = New System.Windows.Forms.ListBox() + Me.FlowLayoutPanel3 = New System.Windows.Forms.FlowLayoutPanel() + Me.POWAVResizer = New System.Windows.Forms.Button() + Me.POWAVPart2 = New System.Windows.Forms.TableLayoutPanel() + Me.CWAVMultiSelect = New System.Windows.Forms.CheckBox() + Me.CWAVChangeLabel = New System.Windows.Forms.CheckBox() + Me.POWAVSwitch = New System.Windows.Forms.CheckBox() + Me.POWaveForm = New System.Windows.Forms.Panel() + Me.POWaveFormInner = New System.Windows.Forms.Panel() + Me.POWaveFormPart2 = New System.Windows.Forms.TableLayoutPanel() + Me.TWSaturation = New System.Windows.Forms.NumericUpDown() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.TWTransparency = New System.Windows.Forms.NumericUpDown() + Me.PictureBox3 = New System.Windows.Forms.PictureBox() + Me.TWPrecision = New System.Windows.Forms.NumericUpDown() + Me.PictureBox4 = New System.Windows.Forms.PictureBox() + Me.TWWidth = New System.Windows.Forms.NumericUpDown() + Me.PictureBox5 = New System.Windows.Forms.PictureBox() + Me.TWLeft = New System.Windows.Forms.NumericUpDown() + Me.PictureBox6 = New System.Windows.Forms.PictureBox() + Me.TWSaturation2 = New System.Windows.Forms.TrackBar() + Me.TWLeft2 = New System.Windows.Forms.TrackBar() + Me.TWTransparency2 = New System.Windows.Forms.TrackBar() + Me.TWWidth2 = New System.Windows.Forms.TrackBar() + Me.TWPrecision2 = New System.Windows.Forms.TrackBar() + Me.POWaveFormExpander = New System.Windows.Forms.CheckBox() + Me.POWaveFormPart1 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.FlowLayoutPanel1 = New System.Windows.Forms.FlowLayoutPanel() + Me.TWFileName = New System.Windows.Forms.TextBox() + Me.TableLayoutPanel6 = New System.Windows.Forms.TableLayoutPanel() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.TWPosition2 = New System.Windows.Forms.TrackBar() + Me.TWPosition = New System.Windows.Forms.NumericUpDown() + Me.POWaveFormSwitch = New System.Windows.Forms.CheckBox() + Me.POGrid = New System.Windows.Forms.Panel() + Me.POGridInner = New System.Windows.Forms.Panel() + Me.POGridPart2 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel5 = New System.Windows.Forms.TableLayoutPanel() + Me.FlowLayoutPanel2 = New System.Windows.Forms.FlowLayoutPanel() + Me.Label5 = New System.Windows.Forms.Label() + Me.TableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() + Me.Label1 = New System.Windows.Forms.Label() + Me.CGB = New System.Windows.Forms.NumericUpDown() + Me.POGridExpander = New System.Windows.Forms.CheckBox() + Me.POGridPart1 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() + Me.PictureBox9 = New System.Windows.Forms.PictureBox() + Me.CGHeight2 = New System.Windows.Forms.TrackBar() + Me.CGHeight = New System.Windows.Forms.NumericUpDown() + Me.PictureBox10 = New System.Windows.Forms.PictureBox() + Me.CGWidth2 = New System.Windows.Forms.TrackBar() + Me.CGWidth = New System.Windows.Forms.NumericUpDown() + Me.CGDisableVertical = New System.Windows.Forms.CheckBox() + Me.CGSnap = New System.Windows.Forms.CheckBox() + Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() + Me.PictureBox7 = New System.Windows.Forms.PictureBox() + Me.CGDivide = New System.Windows.Forms.NumericUpDown() + Me.CGSub = New System.Windows.Forms.NumericUpDown() + Me.BGSlash = New System.Windows.Forms.Button() + Me.POGridSwitch = New System.Windows.Forms.CheckBox() + Me.POHeader = New System.Windows.Forms.Panel() + Me.POHeaderInner = New System.Windows.Forms.Panel() + Me.POHeaderPart2 = New System.Windows.Forms.TableLayoutPanel() + Me.Label13 = New System.Windows.Forms.Label() + Me.THExRank = New System.Windows.Forms.TextBox() + Me.CHLnObj = New System.Windows.Forms.ComboBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.THComment = New System.Windows.Forms.TextBox() + Me.Label24 = New System.Windows.Forms.Label() + Me.Label15 = New System.Windows.Forms.Label() + Me.BHStageFile = New System.Windows.Forms.Button() + Me.BHBanner = New System.Windows.Forms.Button() + Me.Label19 = New System.Windows.Forms.Label() + Me.BHBackBMP = New System.Windows.Forms.Button() + Me.Label17 = New System.Windows.Forms.Label() + Me.Label16 = New System.Windows.Forms.Label() + Me.Label12 = New System.Windows.Forms.Label() + Me.THBackBMP = New System.Windows.Forms.TextBox() + Me.Label11 = New System.Windows.Forms.Label() + Me.THBanner = New System.Windows.Forms.TextBox() + Me.THStageFile = New System.Windows.Forms.TextBox() + Me.THSubTitle = New System.Windows.Forms.TextBox() + Me.THSubArtist = New System.Windows.Forms.TextBox() + Me.POHeaderExpander = New System.Windows.Forms.CheckBox() + Me.POHeaderPart1 = New System.Windows.Forms.TableLayoutPanel() + Me.CHDifficulty = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label25 = New System.Windows.Forms.Label() + Me.CHRank = New System.Windows.Forms.ComboBox() + Me.Label10 = New System.Windows.Forms.Label() + Me.CHPlayer = New System.Windows.Forms.ComboBox() + Me.Label4 = New System.Windows.Forms.Label() + Me.THGenre = New System.Windows.Forms.TextBox() + Me.THTotal = New System.Windows.Forms.TextBox() + Me.THBPM = New System.Windows.Forms.NumericUpDown() + Me.Label20 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.THArtist = New System.Windows.Forms.TextBox() + Me.THTitle = New System.Windows.Forms.TextBox() + Me.Label9 = New System.Windows.Forms.Label() + Me.Label8 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.THPlayLevel = New System.Windows.Forms.TextBox() + Me.Label21 = New System.Windows.Forms.Label() + Me.POHeaderSwitch = New System.Windows.Forms.CheckBox() + Me.POptionsScroll = New System.Windows.Forms.Panel() + Me.TimerInternalPlay = New System.Windows.Forms.Timer(Me.components) + Me.TimerPreviewNote = New System.Windows.Forms.Timer(Me.components) + Me.TimerRefreshPanel = New System.Windows.Forms.Timer(Me.components) + Me.TimerExternalExpansion = New System.Windows.Forms.Timer(Me.components) + Me.TimerLoadWaveform = New System.Windows.Forms.Timer(Me.components) + Me.TimerLWAVRefresh = New System.Windows.Forms.Timer(Me.components) + Me.TimerLBMPRefresh = New System.Windows.Forms.Timer(Me.components) + Me.cmnLanguage.SuspendLayout() + Me.cmnTheme.SuspendLayout() + Me.Menu1.SuspendLayout() + Me.mnMain.SuspendLayout() + Me.cmnConversion.SuspendLayout() + Me.TBMain.SuspendLayout() + Me.pStatus.SuspendLayout() + Me.FStatus2.SuspendLayout() + Me.FStatus.SuspendLayout() + Me.ToolStripContainer1.ContentPanel.SuspendLayout() + Me.ToolStripContainer1.TopToolStripPanel.SuspendLayout() + Me.ToolStripContainer1.SuspendLayout() + Me.PMain.SuspendLayout() + Me.PMainIn.SuspendLayout() + CType(Me.PBOnTabHover, System.ComponentModel.ISupportInitialize).BeginInit() + Me.PMainR.SuspendLayout() + Me.PMainL.SuspendLayout() + Me.POptions.SuspendLayout() + Me.POExpansion.SuspendLayout() + Me.POExpansionInner.SuspendLayout() + Me.POBeat.SuspendLayout() + Me.POBeatInner.SuspendLayout() + Me.TableLayoutPanel7.SuspendLayout() + CType(Me.nBeatD, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.nBeatN, System.ComponentModel.ISupportInitialize).BeginInit() + Me.POBeatPart2.SuspendLayout() + Me.POWAV.SuspendLayout() + Me.POBMP.SuspendLayout() + Me.POBMPInner.SuspendLayout() + Me.FlowLayoutPanel4.SuspendLayout() + Me.POBMPPart2.SuspendLayout() + Me.POWAVInner.SuspendLayout() + Me.FlowLayoutPanel3.SuspendLayout() + Me.POWAVPart2.SuspendLayout() + Me.POWaveForm.SuspendLayout() + Me.POWaveFormInner.SuspendLayout() + Me.POWaveFormPart2.SuspendLayout() + CType(Me.TWSaturation, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWTransparency, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWPrecision, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWWidth, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox5, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWLeft, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox6, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWSaturation2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWLeft2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWTransparency2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWWidth2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWPrecision2, System.ComponentModel.ISupportInitialize).BeginInit() + Me.POWaveFormPart1.SuspendLayout() + Me.TableLayoutPanel1.SuspendLayout() + Me.FlowLayoutPanel1.SuspendLayout() + Me.TableLayoutPanel6.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWPosition2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TWPosition, System.ComponentModel.ISupportInitialize).BeginInit() + Me.POGrid.SuspendLayout() + Me.POGridInner.SuspendLayout() + Me.POGridPart2.SuspendLayout() + Me.TableLayoutPanel5.SuspendLayout() + Me.FlowLayoutPanel2.SuspendLayout() + Me.TableLayoutPanel4.SuspendLayout() + CType(Me.CGB, System.ComponentModel.ISupportInitialize).BeginInit() + Me.POGridPart1.SuspendLayout() + Me.TableLayoutPanel3.SuspendLayout() + CType(Me.PictureBox9, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CGHeight2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CGHeight, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox10, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CGWidth2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CGWidth, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TableLayoutPanel2.SuspendLayout() + CType(Me.PictureBox7, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CGDivide, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.CGSub, System.ComponentModel.ISupportInitialize).BeginInit() + Me.POHeader.SuspendLayout() + Me.POHeaderInner.SuspendLayout() + Me.POHeaderPart2.SuspendLayout() + Me.POHeaderPart1.SuspendLayout() + CType(Me.THBPM, System.ComponentModel.ISupportInitialize).BeginInit() + Me.POptionsScroll.SuspendLayout() + Me.SuspendLayout() + ' + 'cmnLanguage + ' + Me.cmnLanguage.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBLangDef, Me.TBLangRefresh, Me.ToolStripSeparator9}) + Me.cmnLanguage.Name = "cmnLanguage" + Me.cmnLanguage.OwnerItem = Me.mnLanguage + Me.cmnLanguage.Size = New System.Drawing.Size(121, 54) + ' + 'TBLangDef + ' + Me.TBLangDef.Name = "TBLangDef" + Me.TBLangDef.Size = New System.Drawing.Size(120, 22) + Me.TBLangDef.Text = "(Default)" + ' + 'TBLangRefresh + ' + Me.TBLangRefresh.Image = Global.iBMSC.My.Resources.Resources.x16Refresh + Me.TBLangRefresh.Name = "TBLangRefresh" + Me.TBLangRefresh.Size = New System.Drawing.Size(120, 22) + Me.TBLangRefresh.Text = "Refresh" + ' + 'ToolStripSeparator9 + ' + Me.ToolStripSeparator9.Name = "ToolStripSeparator9" + Me.ToolStripSeparator9.Size = New System.Drawing.Size(117, 6) + ' + 'TBLanguage + ' + Me.TBLanguage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBLanguage.DropDown = Me.cmnLanguage + Me.TBLanguage.Image = Global.iBMSC.My.Resources.Resources.x16Language + Me.TBLanguage.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBLanguage.Name = "TBLanguage" + Me.TBLanguage.Size = New System.Drawing.Size(29, 22) + Me.TBLanguage.Text = "Language" + ' + 'mnLanguage + ' + Me.mnLanguage.DropDown = Me.cmnLanguage + Me.mnLanguage.Image = Global.iBMSC.My.Resources.Resources.x16Language + Me.mnLanguage.Name = "mnLanguage" + Me.mnLanguage.Size = New System.Drawing.Size(253, 22) + Me.mnLanguage.Text = "&Language" + ' + 'cmnTheme + ' + Me.cmnTheme.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBThemeDef, Me.TBThemeSave, Me.TBThemeRefresh, Me.TBThemeLoadComptability, Me.ToolStripSeparator6}) + Me.cmnTheme.Name = "cmnLanguage" + Me.cmnTheme.OwnerItem = Me.mnTheme + Me.cmnTheme.Size = New System.Drawing.Size(246, 98) + ' + 'TBThemeDef + ' + Me.TBThemeDef.Name = "TBThemeDef" + Me.TBThemeDef.Size = New System.Drawing.Size(245, 22) + Me.TBThemeDef.Text = "(Default)" + ' + 'TBThemeSave + ' + Me.TBThemeSave.Image = Global.iBMSC.My.Resources.Resources.x16SaveAs + Me.TBThemeSave.Name = "TBThemeSave" + Me.TBThemeSave.Size = New System.Drawing.Size(245, 22) + Me.TBThemeSave.Text = "Save Theme" + ' + 'TBThemeRefresh + ' + Me.TBThemeRefresh.Image = Global.iBMSC.My.Resources.Resources.x16Refresh + Me.TBThemeRefresh.Name = "TBThemeRefresh" + Me.TBThemeRefresh.Size = New System.Drawing.Size(245, 22) + Me.TBThemeRefresh.Text = "Refresh" + ' + 'TBThemeLoadComptability + ' + Me.TBThemeLoadComptability.Name = "TBThemeLoadComptability" + Me.TBThemeLoadComptability.Size = New System.Drawing.Size(245, 22) + Me.TBThemeLoadComptability.Text = "Load Theme File from iBMSC 2.x" + ' + 'ToolStripSeparator6 + ' + Me.ToolStripSeparator6.Name = "ToolStripSeparator6" + Me.ToolStripSeparator6.Size = New System.Drawing.Size(242, 6) + ' + 'TBTheme + ' + Me.TBTheme.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBTheme.DropDown = Me.cmnTheme + Me.TBTheme.Image = Global.iBMSC.My.Resources.Resources.x16Theme + Me.TBTheme.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBTheme.Name = "TBTheme" + Me.TBTheme.Size = New System.Drawing.Size(29, 22) + Me.TBTheme.Text = "Theme" + ' + 'mnTheme + ' + Me.mnTheme.DropDown = Me.cmnTheme + Me.mnTheme.Image = Global.iBMSC.My.Resources.Resources.x16Theme + Me.mnTheme.Name = "mnTheme" + Me.mnTheme.Size = New System.Drawing.Size(253, 22) + Me.mnTheme.Text = "&Theme" + ' + 'Timer1 + ' + Me.Timer1.Interval = 15 + ' + 'Menu1 + ' + Me.Menu1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MInsert, Me.MRemove}) + Me.Menu1.Name = "Menu1" + Me.Menu1.Size = New System.Drawing.Size(166, 48) + ' + 'MInsert + ' + Me.MInsert.Image = Global.iBMSC.My.Resources.Resources.x16Add + Me.MInsert.Name = "MInsert" + Me.MInsert.Size = New System.Drawing.Size(165, 22) + Me.MInsert.Text = "Insert Measure" + ' + 'MRemove + ' + Me.MRemove.Image = Global.iBMSC.My.Resources.Resources.x16Remove + Me.MRemove.Name = "MRemove" + Me.MRemove.Size = New System.Drawing.Size(165, 22) + Me.MRemove.Text = "Remove Measure" + ' + 'AutoSaveTimer + ' + Me.AutoSaveTimer.Enabled = True + Me.AutoSaveTimer.Interval = 300000 + ' + 'mnMain + ' + Me.mnMain.AccessibleRole = System.Windows.Forms.AccessibleRole.MenuBar + Me.mnMain.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch + Me.mnMain.Dock = System.Windows.Forms.DockStyle.None + Me.mnMain.GripMargin = New System.Windows.Forms.Padding(2) + Me.mnMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnFile, Me.mnEdit, Me.mnSys, Me.mnOptions, Me.mnConversion, Me.mnPreview, Me.mnTools}) + Me.mnMain.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow + Me.mnMain.Location = New System.Drawing.Point(0, 0) + Me.mnMain.Name = "mnMain" + Me.mnMain.Size = New System.Drawing.Size(1267, 23) + Me.mnMain.TabIndex = 57 + ' + 'mnFile + ' + Me.mnFile.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnNew, Me.mnOpen, Me.mnOpenTemplate, Me.mnImportSM, Me.mnImportIBMSC, Me.ToolStripSeparator14, Me.mnSave, Me.mnSaveAs, Me.mnExport, Me.mnClose, Me.ToolStripSeparator15, Me.mnOpenR0, Me.mnOpenR1, Me.mnOpenR2, Me.mnOpenR3, Me.mnOpenR4, Me.ToolStripSeparator16, Me.mnQuit}) + Me.mnFile.Name = "mnFile" + Me.mnFile.Size = New System.Drawing.Size(37, 19) + Me.mnFile.Text = "&File" + ' + 'mnNew + ' + Me.mnNew.Image = Global.iBMSC.My.Resources.Resources.x16New + Me.mnNew.Name = "mnNew" + Me.mnNew.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.N), System.Windows.Forms.Keys) + Me.mnNew.Size = New System.Drawing.Size(240, 22) + Me.mnNew.Text = "&New" + ' + 'mnOpen + ' + Me.mnOpen.Image = Global.iBMSC.My.Resources.Resources.x16Open + Me.mnOpen.Name = "mnOpen" + Me.mnOpen.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.mnOpen.Size = New System.Drawing.Size(240, 22) + Me.mnOpen.Text = "&Open" + ' + 'mnOpenTemplate + ' + Me.mnOpenTemplate.Image = Global.iBMSC.My.Resources.Resources.x16Open + Me.mnOpenTemplate.Name = "mnOpenTemplate" + Me.mnOpenTemplate.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.mnOpenTemplate.Size = New System.Drawing.Size(240, 22) + Me.mnOpenTemplate.Text = "Open &Template" + ' + 'mnImportSM + ' + Me.mnImportSM.Image = Global.iBMSC.My.Resources.Resources.x16Import2 + Me.mnImportSM.Name = "mnImportSM" + Me.mnImportSM.Size = New System.Drawing.Size(240, 22) + Me.mnImportSM.Text = "Import from .S&M file" + ' + 'mnImportIBMSC + ' + Me.mnImportIBMSC.Image = Global.iBMSC.My.Resources.Resources.x16Import2 + Me.mnImportIBMSC.Name = "mnImportIBMSC" + Me.mnImportIBMSC.Size = New System.Drawing.Size(240, 22) + Me.mnImportIBMSC.Text = "Import from .&IBMSC file" + ' + 'ToolStripSeparator14 + ' + Me.ToolStripSeparator14.Name = "ToolStripSeparator14" + Me.ToolStripSeparator14.Size = New System.Drawing.Size(237, 6) + ' + 'mnSave + ' + Me.mnSave.Image = Global.iBMSC.My.Resources.Resources.x16Save + Me.mnSave.Name = "mnSave" + Me.mnSave.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.mnSave.Size = New System.Drawing.Size(240, 22) + Me.mnSave.Text = "&Save" + ' + 'mnSaveAs + ' + Me.mnSaveAs.Image = Global.iBMSC.My.Resources.Resources.x16SaveAs + Me.mnSaveAs.Name = "mnSaveAs" + Me.mnSaveAs.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.mnSaveAs.Size = New System.Drawing.Size(240, 22) + Me.mnSaveAs.Text = "Save &As..." + ' + 'mnExport + ' + Me.mnExport.Image = Global.iBMSC.My.Resources.Resources.x16Export + Me.mnExport.Name = "mnExport" + Me.mnExport.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Shift) _ + Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) + Me.mnExport.Size = New System.Drawing.Size(240, 22) + Me.mnExport.Text = "&Export .IBMSC file" + ' + 'mnClose + ' + Me.mnClose.Image = Global.iBMSC.My.Resources.Resources.x16MeasureRemove + Me.mnClose.Name = "mnClose" + Me.mnClose.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.W), System.Windows.Forms.Keys) + Me.mnClose.Size = New System.Drawing.Size(240, 22) + Me.mnClose.Text = "&Close" + ' + 'ToolStripSeparator15 + ' + Me.ToolStripSeparator15.Name = "ToolStripSeparator15" + Me.ToolStripSeparator15.Size = New System.Drawing.Size(237, 6) + ' + 'mnOpenR0 + ' + Me.mnOpenR0.Enabled = False + Me.mnOpenR0.Name = "mnOpenR0" + Me.mnOpenR0.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.D1), System.Windows.Forms.Keys) + Me.mnOpenR0.Size = New System.Drawing.Size(240, 22) + Me.mnOpenR0.Tag = "0" + Me.mnOpenR0.Text = "Recent #&1" + ' + 'mnOpenR1 + ' + Me.mnOpenR1.Enabled = False + Me.mnOpenR1.Name = "mnOpenR1" + Me.mnOpenR1.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.D2), System.Windows.Forms.Keys) + Me.mnOpenR1.Size = New System.Drawing.Size(240, 22) + Me.mnOpenR1.Tag = "1" + Me.mnOpenR1.Text = "Recent #&2" + ' + 'mnOpenR2 + ' + Me.mnOpenR2.Enabled = False + Me.mnOpenR2.Name = "mnOpenR2" + Me.mnOpenR2.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.D3), System.Windows.Forms.Keys) + Me.mnOpenR2.Size = New System.Drawing.Size(240, 22) + Me.mnOpenR2.Tag = "2" + Me.mnOpenR2.Text = "Recent #&3" + ' + 'mnOpenR3 + ' + Me.mnOpenR3.Enabled = False + Me.mnOpenR3.Name = "mnOpenR3" + Me.mnOpenR3.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.D4), System.Windows.Forms.Keys) + Me.mnOpenR3.Size = New System.Drawing.Size(240, 22) + Me.mnOpenR3.Tag = "3" + Me.mnOpenR3.Text = "Recent #&4" + ' + 'mnOpenR4 + ' + Me.mnOpenR4.Enabled = False + Me.mnOpenR4.Name = "mnOpenR4" + Me.mnOpenR4.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.D5), System.Windows.Forms.Keys) + Me.mnOpenR4.Size = New System.Drawing.Size(240, 22) + Me.mnOpenR4.Tag = "4" + Me.mnOpenR4.Text = "Recent #&5" + ' + 'ToolStripSeparator16 + ' + Me.ToolStripSeparator16.Name = "ToolStripSeparator16" + Me.ToolStripSeparator16.Size = New System.Drawing.Size(237, 6) + ' + 'mnQuit + ' + Me.mnQuit.Name = "mnQuit" + Me.mnQuit.Size = New System.Drawing.Size(240, 22) + Me.mnQuit.Text = "&Quit" + ' + 'mnEdit + ' + Me.mnEdit.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnUndo, Me.mnRedo, Me.ToolStripSeparator17, Me.mnCut, Me.mnCopy, Me.mnPaste, Me.mnPastePattern, Me.mnDelete, Me.mnSelectAll, Me.mnGotoMeasure, Me.ToolStripSeparator18, Me.mnFind, Me.mnStatistics, Me.mnStatisticsAdvanced, Me.ToolStripSeparator19, Me.mnTimeSelect, Me.mnSelect, Me.mnWrite}) + Me.mnEdit.Name = "mnEdit" + Me.mnEdit.Size = New System.Drawing.Size(39, 19) + Me.mnEdit.Text = "&Edit" + ' + 'mnUndo + ' + Me.mnUndo.Enabled = False + Me.mnUndo.Image = Global.iBMSC.My.Resources.Resources.x16Undo + Me.mnUndo.Name = "mnUndo" + Me.mnUndo.ShortcutKeyDisplayString = "Ctrl+Z" + Me.mnUndo.Size = New System.Drawing.Size(256, 22) + Me.mnUndo.Text = "&Undo" + ' + 'mnRedo + ' + Me.mnRedo.Enabled = False + Me.mnRedo.Image = Global.iBMSC.My.Resources.Resources.x16Redo + Me.mnRedo.Name = "mnRedo" + Me.mnRedo.ShortcutKeyDisplayString = "Ctrl+Y" + Me.mnRedo.Size = New System.Drawing.Size(256, 22) + Me.mnRedo.Text = "&Redo" + ' + 'ToolStripSeparator17 + ' + Me.ToolStripSeparator17.Name = "ToolStripSeparator17" + Me.ToolStripSeparator17.Size = New System.Drawing.Size(253, 6) + ' + 'mnCut + ' + Me.mnCut.Image = Global.iBMSC.My.Resources.Resources.x16Cut + Me.mnCut.Name = "mnCut" + Me.mnCut.ShortcutKeyDisplayString = "Ctrl+X" + Me.mnCut.Size = New System.Drawing.Size(256, 22) + Me.mnCut.Text = "Cu&t" + ' + 'mnCopy + ' + Me.mnCopy.Image = Global.iBMSC.My.Resources.Resources.x16Copy + Me.mnCopy.Name = "mnCopy" + Me.mnCopy.ShortcutKeyDisplayString = "Ctrl+C" + Me.mnCopy.Size = New System.Drawing.Size(256, 22) + Me.mnCopy.Text = "&Copy" + ' + 'mnPaste + ' + Me.mnPaste.Image = Global.iBMSC.My.Resources.Resources.x16Paste + Me.mnPaste.Name = "mnPaste" + Me.mnPaste.ShortcutKeyDisplayString = "Ctrl+V" + Me.mnPaste.Size = New System.Drawing.Size(256, 22) + Me.mnPaste.Text = "&Paste" + ' + 'mnPastePattern + ' + Me.mnPastePattern.Image = Global.iBMSC.My.Resources.Resources.x16PastePattern + Me.mnPastePattern.Name = "mnPastePattern" + Me.mnPastePattern.ShortcutKeyDisplayString = "Ctrl+Shift+V" + Me.mnPastePattern.Size = New System.Drawing.Size(256, 22) + Me.mnPastePattern.Text = "Paste Patter&n" + ' + 'mnDelete + ' + Me.mnDelete.Image = Global.iBMSC.My.Resources.Resources.x16Remove + Me.mnDelete.Name = "mnDelete" + Me.mnDelete.ShortcutKeyDisplayString = "Del" + Me.mnDelete.Size = New System.Drawing.Size(256, 22) + Me.mnDelete.Text = "De&lete" + ' + 'mnSelectAll + ' + Me.mnSelectAll.Name = "mnSelectAll" + Me.mnSelectAll.ShortcutKeyDisplayString = "Ctrl+A" + Me.mnSelectAll.Size = New System.Drawing.Size(256, 22) + Me.mnSelectAll.Text = "Select &All" + ' + 'mnGotoMeasure + ' + Me.mnGotoMeasure.Name = "mnGotoMeasure" + Me.mnGotoMeasure.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.G), System.Windows.Forms.Keys) + Me.mnGotoMeasure.Size = New System.Drawing.Size(256, 22) + Me.mnGotoMeasure.Text = "&Go To Measure" + ' + 'ToolStripSeparator18 + ' + Me.ToolStripSeparator18.Name = "ToolStripSeparator18" + Me.ToolStripSeparator18.Size = New System.Drawing.Size(253, 6) + ' + 'mnFind + ' + Me.mnFind.Image = Global.iBMSC.My.Resources.Resources.x16Find + Me.mnFind.Name = "mnFind" + Me.mnFind.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F), System.Windows.Forms.Keys) + Me.mnFind.Size = New System.Drawing.Size(256, 22) + Me.mnFind.Text = "&Find / Delete / Replace" + ' + 'mnStatistics + ' + Me.mnStatistics.Image = Global.iBMSC.My.Resources.Resources.x16Statistics + Me.mnStatistics.Name = "mnStatistics" + Me.mnStatistics.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.T), System.Windows.Forms.Keys) + Me.mnStatistics.Size = New System.Drawing.Size(256, 22) + Me.mnStatistics.Text = "St&atistics" + ' + 'mnStatisticsAdvanced + ' + Me.mnStatisticsAdvanced.Image = Global.iBMSC.My.Resources.Resources.x16Statistics + Me.mnStatisticsAdvanced.Name = "mnStatisticsAdvanced" + Me.mnStatisticsAdvanced.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Shift) _ + Or System.Windows.Forms.Keys.T), System.Windows.Forms.Keys) + Me.mnStatisticsAdvanced.Size = New System.Drawing.Size(256, 22) + Me.mnStatisticsAdvanced.Text = "Statistics (Ad&vanced)" + ' + 'ToolStripSeparator19 + ' + Me.ToolStripSeparator19.Name = "ToolStripSeparator19" + Me.ToolStripSeparator19.Size = New System.Drawing.Size(253, 6) + ' + 'mnTimeSelect + ' + Me.mnTimeSelect.CheckOnClick = True + Me.mnTimeSelect.Image = Global.iBMSC.My.Resources.Resources.x16TimeSelection + Me.mnTimeSelect.Name = "mnTimeSelect" + Me.mnTimeSelect.ShortcutKeys = System.Windows.Forms.Keys.F1 + Me.mnTimeSelect.Size = New System.Drawing.Size(256, 22) + Me.mnTimeSelect.Text = "T&ime Selection Tool" + ' + 'mnSelect + ' + Me.mnSelect.Checked = True + Me.mnSelect.CheckOnClick = True + Me.mnSelect.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnSelect.Image = Global.iBMSC.My.Resources.Resources.x16Select + Me.mnSelect.Name = "mnSelect" + Me.mnSelect.ShortcutKeys = System.Windows.Forms.Keys.F2 + Me.mnSelect.Size = New System.Drawing.Size(256, 22) + Me.mnSelect.Text = "&Select Tool" + ' + 'mnWrite + ' + Me.mnWrite.CheckOnClick = True + Me.mnWrite.Image = Global.iBMSC.My.Resources.Resources.x16Pen + Me.mnWrite.Name = "mnWrite" + Me.mnWrite.ShortcutKeys = System.Windows.Forms.Keys.F3 + Me.mnWrite.Size = New System.Drawing.Size(256, 22) + Me.mnWrite.Text = "&Write Tool" + ' + 'mnSys + ' + Me.mnSys.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnSMenu, Me.mnSTB, Me.mnSOP, Me.mnSStatus, Me.mnSLSplitter, Me.mnSRSplitter, Me.ToolStripSeparator21, Me.CGShow, Me.CGShowS, Me.CGShowBG, Me.CGShowM, Me.CGShowMB, Me.CGShowV, Me.CGShowC, Me.ToolStripSeparator22, Me.CGBPM, Me.CGSTOP, Me.CGSCROLL, Me.CGBLP}) + Me.mnSys.Name = "mnSys" + Me.mnSys.Size = New System.Drawing.Size(44, 19) + Me.mnSys.Text = "&View" + ' + 'mnSMenu + ' + Me.mnSMenu.Checked = True + Me.mnSMenu.CheckOnClick = True + Me.mnSMenu.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnSMenu.Name = "mnSMenu" + Me.mnSMenu.Size = New System.Drawing.Size(210, 22) + Me.mnSMenu.Text = "&Main Menu" + Me.mnSMenu.Visible = False + ' + 'mnSTB + ' + Me.mnSTB.Checked = True + Me.mnSTB.CheckOnClick = True + Me.mnSTB.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnSTB.Name = "mnSTB" + Me.mnSTB.Size = New System.Drawing.Size(210, 22) + Me.mnSTB.Text = "&ToolBar" + ' + 'mnSOP + ' + Me.mnSOP.Checked = True + Me.mnSOP.CheckOnClick = True + Me.mnSOP.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnSOP.Name = "mnSOP" + Me.mnSOP.Size = New System.Drawing.Size(210, 22) + Me.mnSOP.Text = "&Options Panel" + ' + 'mnSStatus + ' + Me.mnSStatus.Checked = True + Me.mnSStatus.CheckOnClick = True + Me.mnSStatus.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnSStatus.Name = "mnSStatus" + Me.mnSStatus.Size = New System.Drawing.Size(210, 22) + Me.mnSStatus.Text = "&Status Bar" + ' + 'mnSLSplitter + ' + Me.mnSLSplitter.CheckOnClick = True + Me.mnSLSplitter.Name = "mnSLSplitter" + Me.mnSLSplitter.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.Left), System.Windows.Forms.Keys) + Me.mnSLSplitter.Size = New System.Drawing.Size(210, 22) + Me.mnSLSplitter.Text = "&Left Splitter" + ' + 'mnSRSplitter + ' + Me.mnSRSplitter.CheckOnClick = True + Me.mnSRSplitter.Name = "mnSRSplitter" + Me.mnSRSplitter.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.Right), System.Windows.Forms.Keys) + Me.mnSRSplitter.Size = New System.Drawing.Size(210, 22) + Me.mnSRSplitter.Text = "&Right Splitter" + ' + 'ToolStripSeparator21 + ' + Me.ToolStripSeparator21.Name = "ToolStripSeparator21" + Me.ToolStripSeparator21.Size = New System.Drawing.Size(207, 6) + ' + 'CGShow + ' + Me.CGShow.Checked = True + Me.CGShow.CheckOnClick = True + Me.CGShow.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShow.Name = "CGShow" + Me.CGShow.Size = New System.Drawing.Size(210, 22) + Me.CGShow.Text = "Grid" + ' + 'CGShowS + ' + Me.CGShowS.Checked = True + Me.CGShowS.CheckOnClick = True + Me.CGShowS.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShowS.Name = "CGShowS" + Me.CGShowS.Size = New System.Drawing.Size(210, 22) + Me.CGShowS.Text = "Sub" + ' + 'CGShowBG + ' + Me.CGShowBG.Checked = True + Me.CGShowBG.CheckOnClick = True + Me.CGShowBG.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShowBG.Name = "CGShowBG" + Me.CGShowBG.Size = New System.Drawing.Size(210, 22) + Me.CGShowBG.Text = "BackGround" + ' + 'CGShowM + ' + Me.CGShowM.Checked = True + Me.CGShowM.CheckOnClick = True + Me.CGShowM.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShowM.Name = "CGShowM" + Me.CGShowM.Size = New System.Drawing.Size(210, 22) + Me.CGShowM.Text = "Measure Index" + ' + 'CGShowMB + ' + Me.CGShowMB.Checked = True + Me.CGShowMB.CheckOnClick = True + Me.CGShowMB.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShowMB.Name = "CGShowMB" + Me.CGShowMB.Size = New System.Drawing.Size(210, 22) + Me.CGShowMB.Text = "Measure Line" + ' + 'CGShowV + ' + Me.CGShowV.Checked = True + Me.CGShowV.CheckOnClick = True + Me.CGShowV.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShowV.Name = "CGShowV" + Me.CGShowV.Size = New System.Drawing.Size(210, 22) + Me.CGShowV.Text = "Vertical Line" + ' + 'CGShowC + ' + Me.CGShowC.Checked = True + Me.CGShowC.CheckOnClick = True + Me.CGShowC.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGShowC.Name = "CGShowC" + Me.CGShowC.Size = New System.Drawing.Size(210, 22) + Me.CGShowC.Text = "Column Caption" + ' + 'ToolStripSeparator22 + ' + Me.ToolStripSeparator22.Name = "ToolStripSeparator22" + Me.ToolStripSeparator22.Size = New System.Drawing.Size(207, 6) + ' + 'CGBPM + ' + Me.CGBPM.Checked = True + Me.CGBPM.CheckOnClick = True + Me.CGBPM.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGBPM.Name = "CGBPM" + Me.CGBPM.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.B), System.Windows.Forms.Keys) + Me.CGBPM.Size = New System.Drawing.Size(210, 22) + Me.CGBPM.Text = "BPM" + ' + 'CGSTOP + ' + Me.CGSTOP.Checked = True + Me.CGSTOP.CheckOnClick = True + Me.CGSTOP.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGSTOP.Name = "CGSTOP" + Me.CGSTOP.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.CGSTOP.Size = New System.Drawing.Size(210, 22) + Me.CGSTOP.Text = "STOP" + ' + 'CGSCROLL + ' + Me.CGSCROLL.Checked = True + Me.CGSCROLL.CheckOnClick = True + Me.CGSCROLL.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGSCROLL.Name = "CGSCROLL" + Me.CGSCROLL.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.R), System.Windows.Forms.Keys) + Me.CGSCROLL.Size = New System.Drawing.Size(210, 22) + Me.CGSCROLL.Text = "SCROLL" + ' + 'CGBLP + ' + Me.CGBLP.Checked = True + Me.CGBLP.CheckOnClick = True + Me.CGBLP.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGBLP.Name = "CGBLP" + Me.CGBLP.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.G), System.Windows.Forms.Keys) + Me.CGBLP.Size = New System.Drawing.Size(210, 22) + Me.CGBLP.Text = "BGA / Layer / Poor" + ' + 'mnOptions + ' + Me.mnOptions.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnNTInput, Me.mnErrorCheck, Me.mnPreviewOnClick, Me.mnShowFileName, Me.mnShowWaveform, Me.ToolStripSeparator20, Me.mnPOptions, Me.mnGOptions, Me.mnKOptions, Me.mnVOptions, Me.mnVCOptions, Me.mnLanguage, Me.mnTheme}) + Me.mnOptions.Name = "mnOptions" + Me.mnOptions.Size = New System.Drawing.Size(61, 19) + Me.mnOptions.Text = "&Options" + ' + 'mnNTInput + ' + Me.mnNTInput.Checked = True + Me.mnNTInput.CheckOnClick = True + Me.mnNTInput.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnNTInput.Image = Global.iBMSC.My.Resources.Resources.x16NTInput + Me.mnNTInput.Name = "mnNTInput" + Me.mnNTInput.ShortcutKeys = System.Windows.Forms.Keys.F8 + Me.mnNTInput.Size = New System.Drawing.Size(253, 22) + Me.mnNTInput.Text = "L&N Input Style - NT/BMSE" + ' + 'mnErrorCheck + ' + Me.mnErrorCheck.Checked = True + Me.mnErrorCheck.CheckOnClick = True + Me.mnErrorCheck.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnErrorCheck.Image = Global.iBMSC.My.Resources.Resources.x16CheckError + Me.mnErrorCheck.Name = "mnErrorCheck" + Me.mnErrorCheck.Size = New System.Drawing.Size(253, 22) + Me.mnErrorCheck.Text = "&Error Check" + ' + 'mnPreviewOnClick + ' + Me.mnPreviewOnClick.Checked = True + Me.mnPreviewOnClick.CheckOnClick = True + Me.mnPreviewOnClick.CheckState = System.Windows.Forms.CheckState.Checked + Me.mnPreviewOnClick.Image = Global.iBMSC.My.Resources.Resources.x16PreviewOnClick + Me.mnPreviewOnClick.Name = "mnPreviewOnClick" + Me.mnPreviewOnClick.Size = New System.Drawing.Size(253, 22) + Me.mnPreviewOnClick.Text = "Preview on &Click" + ' + 'mnShowFileName + ' + Me.mnShowFileName.CheckOnClick = True + Me.mnShowFileName.Image = Global.iBMSC.My.Resources.Resources.x16ShowFileNameN + Me.mnShowFileName.Name = "mnShowFileName" + Me.mnShowFileName.Size = New System.Drawing.Size(253, 22) + Me.mnShowFileName.Text = "Show &File Name on Notes" + ' + 'mnShowWaveform + ' + Me.mnShowWaveform.CheckOnClick = True + Me.mnShowWaveform.Image = Global.iBMSC.My.Resources.Resources.x16ShowWaveform + Me.mnShowWaveform.Name = "mnShowWaveform" + Me.mnShowWaveform.Size = New System.Drawing.Size(253, 22) + Me.mnShowWaveform.Text = "Show &Waveform on Notes" + ' + 'ToolStripSeparator20 + ' + Me.ToolStripSeparator20.Name = "ToolStripSeparator20" + Me.ToolStripSeparator20.Size = New System.Drawing.Size(250, 6) + ' + 'mnPOptions + ' + Me.mnPOptions.Image = Global.iBMSC.My.Resources.Resources.x16PlayerOptions + Me.mnPOptions.Name = "mnPOptions" + Me.mnPOptions.ShortcutKeys = System.Windows.Forms.Keys.F9 + Me.mnPOptions.Size = New System.Drawing.Size(253, 22) + Me.mnPOptions.Text = "&Player Options" + ' + 'mnGOptions + ' + Me.mnGOptions.Image = Global.iBMSC.My.Resources.Resources.x16GeneralOptions + Me.mnGOptions.Name = "mnGOptions" + Me.mnGOptions.ShortcutKeys = System.Windows.Forms.Keys.F10 + Me.mnGOptions.Size = New System.Drawing.Size(253, 22) + Me.mnGOptions.Text = "&General Options" + ' + 'mnKOptions + ' + Me.mnKOptions.Image = Global.iBMSC.My.Resources.Resources.x16Key + Me.mnKOptions.Name = "mnKOptions" + Me.mnKOptions.ShortcutKeys = CType((System.Windows.Forms.Keys.Shift Or System.Windows.Forms.Keys.F10), System.Windows.Forms.Keys) + Me.mnKOptions.Size = New System.Drawing.Size(253, 22) + Me.mnKOptions.Text = "&Keybinding Options" + ' + 'mnVOptions + ' + Me.mnVOptions.Image = Global.iBMSC.My.Resources.Resources.x16VisualOptions + Me.mnVOptions.Name = "mnVOptions" + Me.mnVOptions.ShortcutKeys = System.Windows.Forms.Keys.F12 + Me.mnVOptions.Size = New System.Drawing.Size(253, 22) + Me.mnVOptions.Text = "&Visual Options" + ' + 'mnVCOptions + ' + Me.mnVCOptions.Image = Global.iBMSC.My.Resources.Resources.x16Color + Me.mnVCOptions.Name = "mnVCOptions" + Me.mnVCOptions.ShortcutKeys = CType((System.Windows.Forms.Keys.Shift Or System.Windows.Forms.Keys.F12), System.Windows.Forms.Keys) + Me.mnVCOptions.Size = New System.Drawing.Size(253, 22) + Me.mnVCOptions.Text = "C&olor Override Options" + ' + 'mnConversion + ' + Me.mnConversion.DropDown = Me.cmnConversion + Me.mnConversion.Name = "mnConversion" + Me.mnConversion.Size = New System.Drawing.Size(84, 19) + Me.mnConversion.Text = "&Conversions" + ' + 'cmnConversion + ' + Me.cmnConversion.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.POBLong, Me.POBShort, Me.POBLongShort, Me.POBLongObjNT, Me.POBLongNTObj, Me.ToolStripSeparator25, Me.POBAutoLongVPosition, Me.POBAutoLongColumn, Me.ToolStripSeparator10, Me.POBHidden, Me.POBVisible, Me.POBHiddenVisible, Me.ToolStripSeparator11, Me.POBModify, Me.POBMirror, Me.POBFlip, Me.POBRandom, Me.POBRRandom, Me.POBSRandom, Me.POBHRandom, Me.POBSort}) + Me.cmnConversion.Name = "cmnLanguage" + Me.cmnConversion.OwnerItem = Me.mnConversion + Me.cmnConversion.Size = New System.Drawing.Size(237, 418) + ' + 'POBLong + ' + Me.POBLong.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesL + Me.POBLong.Name = "POBLong" + Me.POBLong.Size = New System.Drawing.Size(236, 22) + Me.POBLong.Text = "→ &Long Note" + Me.POBLong.Visible = False + ' + 'POBShort + ' + Me.POBShort.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesN + Me.POBShort.Name = "POBShort" + Me.POBShort.Size = New System.Drawing.Size(236, 22) + Me.POBShort.Text = "→ &Short Note" + ' + 'POBLongShort + ' + Me.POBLongShort.Image = Global.iBMSC.My.Resources.Resources.ConvertNotes + Me.POBLongShort.Name = "POBLongShort" + Me.POBLongShort.Size = New System.Drawing.Size(236, 22) + Me.POBLongShort.Text = "Long Note ↔ Short Note" + Me.POBLongShort.Visible = False + ' + 'POBLongObjNT + ' + Me.POBLongObjNT.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesL + Me.POBLongObjNT.Name = "POBLongObjNT" + Me.POBLongObjNT.Size = New System.Drawing.Size(236, 22) + Me.POBLongObjNT.Text = "L&NObj → NT Long Note" + ' + 'POBLongNTObj + ' + Me.POBLongNTObj.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesL + Me.POBLongNTObj.Name = "POBLongNTObj" + Me.POBLongNTObj.Size = New System.Drawing.Size(236, 22) + Me.POBLongNTObj.Text = "&NT Long Note → LNObj" + ' + 'ToolStripSeparator25 + ' + Me.ToolStripSeparator25.Name = "ToolStripSeparator25" + Me.ToolStripSeparator25.Size = New System.Drawing.Size(233, 6) + ' + 'POBAutoLongVPosition + ' + Me.POBAutoLongVPosition.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesL + Me.POBAutoLongVPosition.Name = "POBAutoLongVPosition" + Me.POBAutoLongVPosition.Size = New System.Drawing.Size(236, 22) + Me.POBAutoLongVPosition.Text = "&Auto Long Note (By VPosition)" + ' + 'POBAutoLongColumn + ' + Me.POBAutoLongColumn.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesL + Me.POBAutoLongColumn.Name = "POBAutoLongColumn" + Me.POBAutoLongColumn.Size = New System.Drawing.Size(236, 22) + Me.POBAutoLongColumn.Text = "&Auto Long Note (By Column)" + ' + 'ToolStripSeparator10 + ' + Me.ToolStripSeparator10.Name = "ToolStripSeparator10" + Me.ToolStripSeparator10.Size = New System.Drawing.Size(233, 6) + ' + 'POBHidden + ' + Me.POBHidden.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesH + Me.POBHidden.Name = "POBHidden" + Me.POBHidden.Size = New System.Drawing.Size(236, 22) + Me.POBHidden.Text = "→ &Hidden Note" + ' + 'POBVisible + ' + Me.POBVisible.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesV + Me.POBVisible.Name = "POBVisible" + Me.POBVisible.Size = New System.Drawing.Size(236, 22) + Me.POBVisible.Text = "→ &Visible Note" + ' + 'POBHiddenVisible + ' + Me.POBHiddenVisible.Image = Global.iBMSC.My.Resources.Resources.ConvertNotesHV + Me.POBHiddenVisible.Name = "POBHiddenVisible" + Me.POBHiddenVisible.Size = New System.Drawing.Size(236, 22) + Me.POBHiddenVisible.Text = "Hidden Note ↔ Visible Note" + ' + 'ToolStripSeparator11 + ' + Me.ToolStripSeparator11.Name = "ToolStripSeparator11" + Me.ToolStripSeparator11.Size = New System.Drawing.Size(233, 6) + ' + 'POBModify + ' + Me.POBModify.Image = Global.iBMSC.My.Resources.Resources.x16ModifyLabel + Me.POBModify.Name = "POBModify" + Me.POBModify.ShortcutKeys = CType((System.Windows.Forms.Keys.Shift Or System.Windows.Forms.Keys.F2), System.Windows.Forms.Keys) + Me.POBModify.Size = New System.Drawing.Size(236, 22) + Me.POBModify.Text = "Modify &Labels" + ' + 'POBMirror + ' + Me.POBMirror.Image = Global.iBMSC.My.Resources.Resources.x16Mirror + Me.POBMirror.Name = "POBMirror" + Me.POBMirror.Size = New System.Drawing.Size(236, 22) + Me.POBMirror.Text = "&Mirror" + ' + 'POBFlip + ' + Me.POBFlip.Image = Global.iBMSC.My.Resources.Resources.x16Flip + Me.POBFlip.Name = "POBFlip" + Me.POBFlip.Size = New System.Drawing.Size(236, 22) + Me.POBFlip.Text = "&Flip" + ' + 'POBRandom + ' + Me.POBRandom.Image = Global.iBMSC.My.Resources.Resources.x16Random + Me.POBRandom.Name = "POBRandom" + Me.POBRandom.Size = New System.Drawing.Size(236, 22) + Me.POBRandom.Text = "&Random" + ' + 'POBRRandom + ' + Me.POBRRandom.Image = Global.iBMSC.My.Resources.Resources.x16RRandom + Me.POBRRandom.Name = "POBRRandom" + Me.POBRRandom.Size = New System.Drawing.Size(236, 22) + Me.POBRRandom.Text = "&R-Random" + ' + 'POBSRandom + ' + Me.POBSRandom.Image = Global.iBMSC.My.Resources.Resources.x16SRandom + Me.POBSRandom.Name = "POBSRandom" + Me.POBSRandom.Size = New System.Drawing.Size(236, 22) + Me.POBSRandom.Text = "&S-Random" + ' + 'POBHRandom + ' + Me.POBHRandom.Image = Global.iBMSC.My.Resources.Resources.x16HRandom + Me.POBHRandom.Name = "POBHRandom" + Me.POBHRandom.Size = New System.Drawing.Size(236, 22) + Me.POBHRandom.Text = "&H-Random" + ' + 'POBSort + ' + Me.POBSort.Image = Global.iBMSC.My.Resources.Resources.lgwidth + Me.POBSort.Name = "POBSort" + Me.POBSort.Size = New System.Drawing.Size(236, 22) + Me.POBSort.Text = "S&ort" + ' + 'POConvert + ' + Me.POConvert.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.POConvert.DropDown = Me.cmnConversion + Me.POConvert.Image = Global.iBMSC.My.Resources.Resources.ConvertNotes + Me.POConvert.ImageTransparentColor = System.Drawing.Color.Magenta + Me.POConvert.Name = "POConvert" + Me.POConvert.Size = New System.Drawing.Size(29, 22) + Me.POConvert.Text = "Convert Notes" + ' + 'mnPreview + ' + Me.mnPreview.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnPlayB, Me.mnPlay, Me.mnStop}) + Me.mnPreview.Name = "mnPreview" + Me.mnPreview.Size = New System.Drawing.Size(60, 19) + Me.mnPreview.Text = "&Preview" + ' + 'mnPlayB + ' + Me.mnPlayB.Image = Global.iBMSC.My.Resources.Resources.x16PlayB + Me.mnPlayB.Name = "mnPlayB" + Me.mnPlayB.ShortcutKeys = System.Windows.Forms.Keys.F5 + Me.mnPlayB.Size = New System.Drawing.Size(201, 22) + Me.mnPlayB.Text = "Play from &beginning" + ' + 'mnPlay + ' + Me.mnPlay.Image = Global.iBMSC.My.Resources.Resources.x16Play + Me.mnPlay.Name = "mnPlay" + Me.mnPlay.ShortcutKeys = System.Windows.Forms.Keys.F6 + Me.mnPlay.Size = New System.Drawing.Size(201, 22) + Me.mnPlay.Text = "&Play from here" + ' + 'mnStop + ' + Me.mnStop.Image = Global.iBMSC.My.Resources.Resources.x16Stop + Me.mnStop.Name = "mnStop" + Me.mnStop.ShortcutKeys = System.Windows.Forms.Keys.F7 + Me.mnStop.Size = New System.Drawing.Size(201, 22) + Me.mnStop.Text = "&Stop" + ' + 'mnTools + ' + Me.mnTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnTechnicalErrorCheck, Me.mnTOTAL, Me.ToolStripSeparator13, Me.mnMyO2}) + Me.mnTools.Name = "mnTools" + Me.mnTools.Size = New System.Drawing.Size(46, 19) + Me.mnTools.Text = "Tools" + ' + 'mnTechnicalErrorCheck + ' + Me.mnTechnicalErrorCheck.Image = Global.iBMSC.My.Resources.Resources.x16CheckErrorTechnical + Me.mnTechnicalErrorCheck.Name = "mnTechnicalErrorCheck" + Me.mnTechnicalErrorCheck.ShortcutKeyDisplayString = "Ctrl+Alt+E" + Me.mnTechnicalErrorCheck.Size = New System.Drawing.Size(250, 22) + Me.mnTechnicalErrorCheck.Text = "Check Technical &Error" + ' + 'mnTOTAL + ' + Me.mnTOTAL.Name = "mnTOTAL" + Me.mnTOTAL.Size = New System.Drawing.Size(250, 22) + Me.mnTOTAL.Text = "#&TOTAL Tool" + ' + 'ToolStripSeparator13 + ' + Me.ToolStripSeparator13.Name = "ToolStripSeparator13" + Me.ToolStripSeparator13.Size = New System.Drawing.Size(247, 6) + ' + 'mnMyO2 + ' + Me.mnMyO2.Image = Global.iBMSC.My.Resources.Resources.x16MyO2 + Me.mnMyO2.Name = "mnMyO2" + Me.mnMyO2.Size = New System.Drawing.Size(250, 22) + Me.mnMyO2.Text = "MyO2 ToolBox (Chinese Only)" + ' + 'TBMain + ' + Me.TBMain.AccessibleRole = System.Windows.Forms.AccessibleRole.ToolBar + Me.TBMain.BackColor = System.Drawing.SystemColors.Control + Me.TBMain.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch + Me.TBMain.Dock = System.Windows.Forms.DockStyle.None + Me.TBMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBNew, Me.TBOpen, Me.TBSave, Me.ToolStripSeparator1, Me.TBCut, Me.TBCopy, Me.TBPaste, Me.TBPastePattern, Me.TBFind, Me.ToolStripSeparator24, Me.TBStatistics, Me.POConvert, Me.TBMyO2, Me.ToolStripSeparator4, Me.TBErrorCheck, Me.TBPreviewOnClick, Me.TBShowFileName, Me.TBShowWaveform, Me.ToolStripSeparator8, Me.TBNTInput, Me.TBWavIncrease, Me.ToolStripSeparator2, Me.TBUndo, Me.TBRedo, Me.ToolStripSeparator5, Me.TBTimeSelect, Me.TBSelect, Me.TBWrite, Me.ToolStripSeparator3, Me.TBPlayB, Me.TBPlay, Me.TBStop, Me.TBPOptions, Me.ToolStripSeparator7, Me.TBGOptions, Me.TBKOptions, Me.TBVOptions, Me.TBLanguage, Me.TBTheme, Me.POBStorm, Me.TBTotalValue}) + Me.TBMain.Location = New System.Drawing.Point(3, 23) + Me.TBMain.Name = "TBMain" + Me.TBMain.Size = New System.Drawing.Size(962, 25) + Me.TBMain.TabIndex = 64 + Me.TBMain.Text = "Main Toolbar" + ' + 'TBNew + ' + Me.TBNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBNew.Image = Global.iBMSC.My.Resources.Resources.x16New + Me.TBNew.ImageTransparentColor = System.Drawing.Color.Transparent + Me.TBNew.Name = "TBNew" + Me.TBNew.Size = New System.Drawing.Size(23, 22) + Me.TBNew.Text = "New (Ctrl+N)" + ' + 'TBOpen + ' + Me.TBOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBOpen.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBOpenR0, Me.TBOpenR1, Me.TBOpenR2, Me.TBOpenR3, Me.TBOpenR4, Me.ToolStripSeparator12, Me.TBImportSM, Me.TBImportIBMSC}) + Me.TBOpen.Image = Global.iBMSC.My.Resources.Resources.x16Open + Me.TBOpen.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBOpen.Name = "TBOpen" + Me.TBOpen.Size = New System.Drawing.Size(32, 22) + Me.TBOpen.Text = "Open (Ctrl+O)" + ' + 'TBOpenR0 + ' + Me.TBOpenR0.Enabled = False + Me.TBOpenR0.Name = "TBOpenR0" + Me.TBOpenR0.Size = New System.Drawing.Size(199, 22) + Me.TBOpenR0.Tag = "0" + Me.TBOpenR0.Text = "Recent #0" + ' + 'TBOpenR1 + ' + Me.TBOpenR1.Enabled = False + Me.TBOpenR1.Name = "TBOpenR1" + Me.TBOpenR1.Size = New System.Drawing.Size(199, 22) + Me.TBOpenR1.Tag = "1" + Me.TBOpenR1.Text = "Recent #1" + ' + 'TBOpenR2 + ' + Me.TBOpenR2.Enabled = False + Me.TBOpenR2.Name = "TBOpenR2" + Me.TBOpenR2.Size = New System.Drawing.Size(199, 22) + Me.TBOpenR2.Tag = "2" + Me.TBOpenR2.Text = "Recent #2" + ' + 'TBOpenR3 + ' + Me.TBOpenR3.Enabled = False + Me.TBOpenR3.Name = "TBOpenR3" + Me.TBOpenR3.Size = New System.Drawing.Size(199, 22) + Me.TBOpenR3.Tag = "3" + Me.TBOpenR3.Text = "Recent #3" + ' + 'TBOpenR4 + ' + Me.TBOpenR4.Enabled = False + Me.TBOpenR4.Name = "TBOpenR4" + Me.TBOpenR4.Size = New System.Drawing.Size(199, 22) + Me.TBOpenR4.Tag = "4" + Me.TBOpenR4.Text = "Recent #4" + ' + 'ToolStripSeparator12 + ' + Me.ToolStripSeparator12.Name = "ToolStripSeparator12" + Me.ToolStripSeparator12.Size = New System.Drawing.Size(196, 6) + ' + 'TBImportSM + ' + Me.TBImportSM.Image = Global.iBMSC.My.Resources.Resources.x16Import2 + Me.TBImportSM.Name = "TBImportSM" + Me.TBImportSM.Size = New System.Drawing.Size(199, 22) + Me.TBImportSM.Text = "Import from .SM file" + ' + 'TBImportIBMSC + ' + Me.TBImportIBMSC.Image = Global.iBMSC.My.Resources.Resources.x16Import2 + Me.TBImportIBMSC.Name = "TBImportIBMSC" + Me.TBImportIBMSC.Size = New System.Drawing.Size(199, 22) + Me.TBImportIBMSC.Text = "Import from .IBMSC file" + ' + 'TBSave + ' + Me.TBSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBSave.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TBSaveAs, Me.TBExport}) + Me.TBSave.Image = Global.iBMSC.My.Resources.Resources.x16Save + Me.TBSave.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBSave.Name = "TBSave" + Me.TBSave.Size = New System.Drawing.Size(32, 22) + Me.TBSave.Text = "Save (Ctrl+S)" + ' + 'TBSaveAs + ' + Me.TBSaveAs.Image = Global.iBMSC.My.Resources.Resources.x16SaveAs + Me.TBSaveAs.Name = "TBSaveAs" + Me.TBSaveAs.Size = New System.Drawing.Size(168, 22) + Me.TBSaveAs.Text = "Save As..." + ' + 'TBExport + ' + Me.TBExport.Image = Global.iBMSC.My.Resources.Resources.x16Export + Me.TBExport.Name = "TBExport" + Me.TBExport.Size = New System.Drawing.Size(168, 22) + Me.TBExport.Text = "Export .IBMSC file" + ' + 'ToolStripSeparator1 + ' + Me.ToolStripSeparator1.Name = "ToolStripSeparator1" + Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25) + ' + 'TBCut + ' + Me.TBCut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBCut.Image = Global.iBMSC.My.Resources.Resources.x16Cut + Me.TBCut.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBCut.Name = "TBCut" + Me.TBCut.Size = New System.Drawing.Size(23, 22) + Me.TBCut.Text = "Cut (Ctrl+X)" + ' + 'TBCopy + ' + Me.TBCopy.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBCopy.Image = Global.iBMSC.My.Resources.Resources.x16Copy + Me.TBCopy.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBCopy.Name = "TBCopy" + Me.TBCopy.Size = New System.Drawing.Size(23, 22) + Me.TBCopy.Text = "Copy (Ctrl+C)" + ' + 'TBPaste + ' + Me.TBPaste.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBPaste.Image = Global.iBMSC.My.Resources.Resources.x16Paste + Me.TBPaste.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBPaste.Name = "TBPaste" + Me.TBPaste.Size = New System.Drawing.Size(23, 22) + Me.TBPaste.Text = "Paste (Ctrl+V)" + ' + 'TBPastePattern + ' + Me.TBPastePattern.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBPastePattern.Image = Global.iBMSC.My.Resources.Resources.x16PastePattern + Me.TBPastePattern.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBPastePattern.Name = "TBPastePattern" + Me.TBPastePattern.Size = New System.Drawing.Size(23, 22) + Me.TBPastePattern.Text = "Paste Pattern (Ctrl+Shift+V)" + ' + 'TBFind + ' + Me.TBFind.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBFind.Image = Global.iBMSC.My.Resources.Resources.x16Find + Me.TBFind.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBFind.Name = "TBFind" + Me.TBFind.Size = New System.Drawing.Size(23, 22) + Me.TBFind.Text = "Find / Delete / Replace (Ctrl+F)" + ' + 'ToolStripSeparator24 + ' + Me.ToolStripSeparator24.Name = "ToolStripSeparator24" + Me.ToolStripSeparator24.Size = New System.Drawing.Size(6, 25) + ' + 'TBStatistics + ' + Me.TBStatistics.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.TBStatistics.Image = Global.iBMSC.My.Resources.Resources.x16Statistics + Me.TBStatistics.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBStatistics.Name = "TBStatistics" + Me.TBStatistics.Size = New System.Drawing.Size(34, 22) + Me.TBStatistics.Text = "0" + Me.TBStatistics.ToolTipText = "Statistics (Ctrl+T)" + ' + 'TBMyO2 + ' + Me.TBMyO2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBMyO2.Image = Global.iBMSC.My.Resources.Resources.x16MyO2 + Me.TBMyO2.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBMyO2.Name = "TBMyO2" + Me.TBMyO2.Size = New System.Drawing.Size(23, 22) + Me.TBMyO2.Text = "MyO2 ToolBox (Chinese Only)" + ' + 'ToolStripSeparator4 + ' + Me.ToolStripSeparator4.Name = "ToolStripSeparator4" + Me.ToolStripSeparator4.Size = New System.Drawing.Size(6, 25) + ' + 'TBErrorCheck + ' + Me.TBErrorCheck.Checked = True + Me.TBErrorCheck.CheckOnClick = True + Me.TBErrorCheck.CheckState = System.Windows.Forms.CheckState.Checked + Me.TBErrorCheck.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBErrorCheck.Image = Global.iBMSC.My.Resources.Resources.x16CheckError + Me.TBErrorCheck.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBErrorCheck.Name = "TBErrorCheck" + Me.TBErrorCheck.Size = New System.Drawing.Size(23, 22) + Me.TBErrorCheck.Text = "Error Check" + ' + 'TBPreviewOnClick + ' + Me.TBPreviewOnClick.Checked = True + Me.TBPreviewOnClick.CheckOnClick = True + Me.TBPreviewOnClick.CheckState = System.Windows.Forms.CheckState.Checked + Me.TBPreviewOnClick.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBPreviewOnClick.Image = Global.iBMSC.My.Resources.Resources.x16PreviewOnClick + Me.TBPreviewOnClick.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBPreviewOnClick.Name = "TBPreviewOnClick" + Me.TBPreviewOnClick.Size = New System.Drawing.Size(23, 22) + Me.TBPreviewOnClick.Text = "Preview On Click" + ' + 'TBShowFileName + ' + Me.TBShowFileName.CheckOnClick = True + Me.TBShowFileName.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBShowFileName.Image = Global.iBMSC.My.Resources.Resources.x16ShowFileNameN + Me.TBShowFileName.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBShowFileName.Name = "TBShowFileName" + Me.TBShowFileName.Size = New System.Drawing.Size(23, 22) + Me.TBShowFileName.Text = "Show File Name on Notes" + ' + 'TBShowWaveform + ' + Me.TBShowWaveform.CheckOnClick = True + Me.TBShowWaveform.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBShowWaveform.Image = Global.iBMSC.My.Resources.Resources.x16ShowWaveform + Me.TBShowWaveform.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBShowWaveform.Name = "TBShowWaveform" + Me.TBShowWaveform.Size = New System.Drawing.Size(23, 22) + Me.TBShowWaveform.Text = "Show Waveform on Notes" + Me.TBShowWaveform.ToolTipText = "Show Waveform on Notes" + ' + 'ToolStripSeparator8 + ' + Me.ToolStripSeparator8.Name = "ToolStripSeparator8" + Me.ToolStripSeparator8.Size = New System.Drawing.Size(6, 25) + ' + 'TBNTInput + ' + Me.TBNTInput.Checked = True + Me.TBNTInput.CheckOnClick = True + Me.TBNTInput.CheckState = System.Windows.Forms.CheckState.Checked + Me.TBNTInput.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBNTInput.Image = Global.iBMSC.My.Resources.Resources.x16NTInput + Me.TBNTInput.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBNTInput.Name = "TBNTInput" + Me.TBNTInput.Size = New System.Drawing.Size(23, 22) + Me.TBNTInput.Text = "LongNote Input Style - NoteTool/BMSE" + ' + 'TBWavIncrease + ' + Me.TBWavIncrease.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBWavIncrease.Image = CType(resources.GetObject("TBWavIncrease.Image"), System.Drawing.Image) + Me.TBWavIncrease.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBWavIncrease.Name = "TBWavIncrease" + Me.TBWavIncrease.Size = New System.Drawing.Size(23, 22) + Me.TBWavIncrease.Text = "Autoincrease WAV when writing" + ' + 'ToolStripSeparator2 + ' + Me.ToolStripSeparator2.Name = "ToolStripSeparator2" + Me.ToolStripSeparator2.Size = New System.Drawing.Size(6, 25) + ' + 'TBUndo + ' + Me.TBUndo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBUndo.Enabled = False + Me.TBUndo.Image = Global.iBMSC.My.Resources.Resources.x16Undo + Me.TBUndo.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBUndo.Name = "TBUndo" + Me.TBUndo.Size = New System.Drawing.Size(23, 22) + Me.TBUndo.Text = "Undo (Ctrl+Z)" + ' + 'TBRedo + ' + Me.TBRedo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBRedo.Enabled = False + Me.TBRedo.Image = Global.iBMSC.My.Resources.Resources.x16Redo + Me.TBRedo.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBRedo.Name = "TBRedo" + Me.TBRedo.Size = New System.Drawing.Size(23, 22) + Me.TBRedo.Text = "Redo (Ctrl+Y)" + ' + 'ToolStripSeparator5 + ' + Me.ToolStripSeparator5.Name = "ToolStripSeparator5" + Me.ToolStripSeparator5.Size = New System.Drawing.Size(6, 25) + ' + 'TBTimeSelect + ' + Me.TBTimeSelect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBTimeSelect.Image = Global.iBMSC.My.Resources.Resources.x16TimeSelection + Me.TBTimeSelect.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBTimeSelect.Name = "TBTimeSelect" + Me.TBTimeSelect.Size = New System.Drawing.Size(23, 22) + Me.TBTimeSelect.Text = "Time Selection Tool (F1)" + ' + 'TBSelect + ' + Me.TBSelect.Checked = True + Me.TBSelect.CheckState = System.Windows.Forms.CheckState.Checked + Me.TBSelect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBSelect.Image = Global.iBMSC.My.Resources.Resources.x16Select + Me.TBSelect.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBSelect.Name = "TBSelect" + Me.TBSelect.Size = New System.Drawing.Size(23, 22) + Me.TBSelect.Text = "Select Tool (F2)" + ' + 'TBWrite + ' + Me.TBWrite.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBWrite.Image = Global.iBMSC.My.Resources.Resources.x16Pen + Me.TBWrite.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBWrite.Name = "TBWrite" + Me.TBWrite.Size = New System.Drawing.Size(23, 22) + Me.TBWrite.Text = "Write Tool (F3)" + ' + 'ToolStripSeparator3 + ' + Me.ToolStripSeparator3.Name = "ToolStripSeparator3" + Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 25) + ' + 'TBPlayB + ' + Me.TBPlayB.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBPlayB.Image = Global.iBMSC.My.Resources.Resources.x16PlayB + Me.TBPlayB.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBPlayB.Name = "TBPlayB" + Me.TBPlayB.Size = New System.Drawing.Size(23, 22) + Me.TBPlayB.Text = "Play from beginning (F5)" + ' + 'TBPlay + ' + Me.TBPlay.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBPlay.Image = Global.iBMSC.My.Resources.Resources.x16Play + Me.TBPlay.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBPlay.Name = "TBPlay" + Me.TBPlay.Size = New System.Drawing.Size(23, 22) + Me.TBPlay.Text = "Play from here (F6)" + ' + 'TBStop + ' + Me.TBStop.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBStop.Image = Global.iBMSC.My.Resources.Resources.x16Stop + Me.TBStop.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBStop.Name = "TBStop" + Me.TBStop.Size = New System.Drawing.Size(23, 22) + Me.TBStop.Text = "Stop (F7)" + ' + 'TBPOptions + ' + Me.TBPOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBPOptions.Image = Global.iBMSC.My.Resources.Resources.x16PlayerOptions + Me.TBPOptions.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBPOptions.Name = "TBPOptions" + Me.TBPOptions.Size = New System.Drawing.Size(23, 22) + Me.TBPOptions.Text = "Player Options (F9)" + ' + 'ToolStripSeparator7 + ' + Me.ToolStripSeparator7.Name = "ToolStripSeparator7" + Me.ToolStripSeparator7.Size = New System.Drawing.Size(6, 25) + ' + 'TBGOptions + ' + Me.TBGOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBGOptions.Image = Global.iBMSC.My.Resources.Resources.x16GeneralOptions + Me.TBGOptions.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBGOptions.Name = "TBGOptions" + Me.TBGOptions.Size = New System.Drawing.Size(23, 22) + Me.TBGOptions.Text = "General Options (F10)" + ' + 'TBKOptions + ' + Me.TBKOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBKOptions.Image = Global.iBMSC.My.Resources.Resources.x16Key + Me.TBKOptions.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBKOptions.Name = "TBKOptions" + Me.TBKOptions.Size = New System.Drawing.Size(23, 22) + Me.TBKOptions.Text = "Keybinding Options (Shift+F10)" + ' + 'TBVOptions + ' + Me.TBVOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.TBVOptions.Image = Global.iBMSC.My.Resources.Resources.x16VisualOptions + Me.TBVOptions.ImageTransparentColor = System.Drawing.Color.Magenta + Me.TBVOptions.Name = "TBVOptions" + Me.TBVOptions.Size = New System.Drawing.Size(23, 22) + Me.TBVOptions.Text = "Visual Options (F12)" + ' + 'POBStorm + ' + Me.POBStorm.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.POBStorm.Image = Global.iBMSC.My.Resources.Resources.x16Storm + Me.POBStorm.ImageTransparentColor = System.Drawing.Color.Magenta + Me.POBStorm.Name = "POBStorm" + Me.POBStorm.Size = New System.Drawing.Size(23, 22) + Me.POBStorm.Text = "Storm" + Me.POBStorm.Visible = False + ' + 'TBTotalValue + ' + Me.TBTotalValue.Name = "TBTotalValue" + Me.TBTotalValue.Size = New System.Drawing.Size(142, 22) + Me.TBTotalValue.Text = "Recommended #TOTAL: 0" + ' + 'pStatus + ' + Me.pStatus.AutoSize = True + Me.pStatus.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.pStatus.Controls.Add(Me.FStatus2) + Me.pStatus.Controls.Add(Me.FStatus) + Me.pStatus.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pStatus.Location = New System.Drawing.Point(0, 759) + Me.pStatus.Name = "pStatus" + Me.pStatus.Size = New System.Drawing.Size(1267, 22) + Me.pStatus.TabIndex = 62 + ' + 'FStatus2 + ' + Me.FStatus2.AccessibleRole = System.Windows.Forms.AccessibleRole.StatusBar + Me.FStatus2.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FSSS, Me.FSSL, Me.FSSH, Me.BVCReverse, Me.LblMultiply, Me.TVCM, Me.LblDivide, Me.TVCD, Me.BVCApply, Me.TVCBPM, Me.BVCCalculate, Me.BConvertStop, Me.BDefineMeasure, Me.BInsertOrRemoveSpaceMN, Me.BInsertOrRemoveSpaceM, Me.BInsertOrRemoveSpaceN}) + Me.FStatus2.Location = New System.Drawing.Point(0, 0) + Me.FStatus2.Name = "FStatus2" + Me.FStatus2.ShowItemToolTips = True + Me.FStatus2.Size = New System.Drawing.Size(1267, 22) + Me.FStatus2.TabIndex = 0 + Me.FStatus2.Text = "Status" + Me.FStatus2.Visible = False + ' + 'FSSS + ' + Me.FSSS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.FSSS.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.FSSS.ImageTransparentColor = System.Drawing.Color.Magenta + Me.FSSS.Name = "FSSS" + Me.FSSS.Size = New System.Drawing.Size(23, 20) + Me.FSSS.Text = "0" + Me.FSSS.ToolTipText = "Selection Start Position" + ' + 'FSSL + ' + Me.FSSL.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.FSSL.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.FSSL.ImageTransparentColor = System.Drawing.Color.Magenta + Me.FSSL.Name = "FSSL" + Me.FSSL.Size = New System.Drawing.Size(23, 20) + Me.FSSL.Text = "0" + Me.FSSL.ToolTipText = "Selection Length" + ' + 'FSSH + ' + Me.FSSH.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.FSSH.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.FSSH.ImageTransparentColor = System.Drawing.Color.Magenta + Me.FSSH.Name = "FSSH" + Me.FSSH.Size = New System.Drawing.Size(23, 20) + Me.FSSH.Text = "0" + Me.FSSH.ToolTipText = "Selection Split Position" + ' + 'BVCReverse + ' + Me.BVCReverse.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.BVCReverse.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BVCReverse.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BVCReverse.Name = "BVCReverse" + Me.BVCReverse.Size = New System.Drawing.Size(102, 20) + Me.BVCReverse.Text = "Reverse Selection" + ' + 'LblMultiply + ' + Me.LblMultiply.Name = "LblMultiply" + Me.LblMultiply.Size = New System.Drawing.Size(15, 17) + Me.LblMultiply.Text = "×" + ' + 'TVCM + ' + Me.TVCM.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.TVCM.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.TVCM.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.TVCM.Name = "TVCM" + Me.TVCM.Size = New System.Drawing.Size(60, 22) + Me.TVCM.Text = "2" + Me.TVCM.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center + ' + 'LblDivide + ' + Me.LblDivide.Name = "LblDivide" + Me.LblDivide.Size = New System.Drawing.Size(15, 17) + Me.LblDivide.Text = "÷" + ' + 'TVCD + ' + Me.TVCD.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.TVCD.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.TVCD.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.TVCD.Name = "TVCD" + Me.TVCD.Size = New System.Drawing.Size(60, 22) + Me.TVCD.Text = "1" + Me.TVCD.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center + ' + 'BVCApply + ' + Me.BVCApply.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.BVCApply.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BVCApply.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BVCApply.Name = "BVCApply" + Me.BVCApply.Size = New System.Drawing.Size(96, 20) + Me.BVCApply.Text = "Expand By Ratio" + Me.BVCApply.ToolTipText = "This will expand notes and selection by the ratio next to this button. Ignores ce" & + "nter bar." + ' + 'TVCBPM + ' + Me.TVCBPM.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.TVCBPM.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.TVCBPM.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.TVCBPM.Name = "TVCBPM" + Me.TVCBPM.Size = New System.Drawing.Size(80, 22) + Me.TVCBPM.Text = "120" + Me.TVCBPM.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center + ' + 'BVCCalculate + ' + Me.BVCCalculate.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.BVCCalculate.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BVCCalculate.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BVCCalculate.Name = "BVCCalculate" + Me.BVCCalculate.Size = New System.Drawing.Size(103, 20) + Me.BVCCalculate.Text = "Relocate By Value" + Me.BVCCalculate.ToolTipText = "This will move notes within the selection and preserve the selection, given the B" & + "PM value next to this button. Considers center bar." + ' + 'BConvertStop + ' + Me.BConvertStop.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.BConvertStop.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BConvertStop.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BConvertStop.Name = "BConvertStop" + Me.BConvertStop.Size = New System.Drawing.Size(115, 20) + Me.BConvertStop.Text = "Transform Into Stop" + Me.BConvertStop.ToolTipText = "This will move notes within the selection and preserve the selection, given the B" & + "PM value next to this button. Considers center bar." + ' + 'BDefineMeasure + ' + Me.BDefineMeasure.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.BDefineMeasure.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BDefineMeasure.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BDefineMeasure.Name = "BDefineMeasure" + Me.BDefineMeasure.Size = New System.Drawing.Size(93, 20) + Me.BDefineMeasure.Text = "Define Measure" + Me.BDefineMeasure.ToolTipText = "This will allow you to create/remove/define measures." + ' + 'BInsertOrRemoveSpaceMN + ' + Me.BInsertOrRemoveSpaceMN.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.BInsertOrRemoveSpaceMN.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BInsertOrRemoveSpaceMN.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BInsertOrRemoveSpaceMN.Name = "BInsertOrRemoveSpaceMN" + Me.BInsertOrRemoveSpaceMN.Size = New System.Drawing.Size(122, 20) + Me.BInsertOrRemoveSpaceMN.Text = "Insert/Remove Space" + Me.BInsertOrRemoveSpaceMN.ToolTipText = "This will insert/remove space at the bottom of your selection." + ' + 'BInsertOrRemoveSpaceM + ' + Me.BInsertOrRemoveSpaceM.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.BInsertOrRemoveSpaceM.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BInsertOrRemoveSpaceM.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BInsertOrRemoveSpaceM.Name = "BInsertOrRemoveSpaceM" + Me.BInsertOrRemoveSpaceM.Size = New System.Drawing.Size(92, 20) + Me.BInsertOrRemoveSpaceM.Text = "(Measure Only)" + Me.BInsertOrRemoveSpaceM.ToolTipText = "This will insert/remove measure length at the bottom of your selection." + ' + 'BInsertOrRemoveSpaceN + ' + Me.BInsertOrRemoveSpaceN.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.BInsertOrRemoveSpaceN.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BInsertOrRemoveSpaceN.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BInsertOrRemoveSpaceN.Name = "BInsertOrRemoveSpaceN" + Me.BInsertOrRemoveSpaceN.Size = New System.Drawing.Size(78, 20) + Me.BInsertOrRemoveSpaceN.Text = "(Notes Only)" + Me.BInsertOrRemoveSpaceN.ToolTipText = "This will insert/remove space at the bottom of your time selection for the notes." & + "" + ' + 'FStatus + ' + Me.FStatus.AccessibleRole = System.Windows.Forms.AccessibleRole.StatusBar + Me.FStatus.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FSC, Me.FSW, Me.FSM, Me.FSP1, Me.FSP3, Me.FSP2, Me.FSP4, Me.TimeStatusLabel, Me.FST, Me.FSE}) + Me.FStatus.Location = New System.Drawing.Point(0, 0) + Me.FStatus.Name = "FStatus" + Me.FStatus.ShowItemToolTips = True + Me.FStatus.Size = New System.Drawing.Size(1267, 22) + Me.FStatus.SizingGrip = False + Me.FStatus.TabIndex = 62 + Me.FStatus.Text = "Status" + ' + 'FSC + ' + Me.FSC.AutoSize = False + Me.FSC.Name = "FSC" + Me.FSC.Size = New System.Drawing.Size(70, 17) + Me.FSC.Text = "BPM" + Me.FSC.ToolTipText = "Column Caption" + ' + 'FSW + ' + Me.FSW.AutoSize = False + Me.FSW.ForeColor = System.Drawing.Color.FromArgb(CType(CType(128, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(0, Byte), Integer)) + Me.FSW.Name = "FSW" + Me.FSW.Size = New System.Drawing.Size(40, 17) + Me.FSW.Text = "01" + Me.FSW.ToolTipText = "Note Index" + ' + 'FSM + ' + Me.FSM.AutoSize = False + Me.FSM.ForeColor = System.Drawing.Color.Teal + Me.FSM.Name = "FSM" + Me.FSM.Size = New System.Drawing.Size(40, 17) + Me.FSM.Text = "000" + Me.FSM.ToolTipText = "Measure Index" + ' + 'FSP1 + ' + Me.FSP1.AutoSize = False + Me.FSP1.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.FSP1.Name = "FSP1" + Me.FSP1.Size = New System.Drawing.Size(170, 17) + Me.FSP1.Text = "9.41176470588235 / 9999" + Me.FSP1.ToolTipText = "Grid Resolution" + ' + 'FSP3 + ' + Me.FSP3.AutoSize = False + Me.FSP3.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.FSP3.ForeColor = System.Drawing.Color.Maroon + Me.FSP3.Name = "FSP3" + Me.FSP3.Size = New System.Drawing.Size(85, 17) + Me.FSP3.Text = "9999 / 9999" + Me.FSP3.ToolTipText = "Reduced Resolution" + ' + 'FSP2 + ' + Me.FSP2.AutoSize = False + Me.FSP2.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold) + Me.FSP2.ForeColor = System.Drawing.Color.Green + Me.FSP2.Name = "FSP2" + Me.FSP2.Size = New System.Drawing.Size(170, 17) + Me.FSP2.Text = "112.941176470588 / 9999" + Me.FSP2.ToolTipText = "Measure Resolution" + ' + 'FSP4 + ' + Me.FSP4.AutoSize = False + Me.FSP4.Name = "FSP4" + Me.FSP4.Size = New System.Drawing.Size(115, 17) + Me.FSP4.Text = "112.941176470588" + Me.FSP4.ToolTipText = "Absolute Position" + ' + 'TimeStatusLabel + ' + Me.TimeStatusLabel.Name = "TimeStatusLabel" + Me.TimeStatusLabel.Size = New System.Drawing.Size(55, 17) + Me.TimeStatusLabel.Text = "00:00:000" + ' + 'FST + ' + Me.FST.ForeColor = System.Drawing.Color.Olive + Me.FST.LinkColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(255, Byte), Integer)) + Me.FST.Name = "FST" + Me.FST.Size = New System.Drawing.Size(64, 17) + Me.FST.Text = "Length = 0" + ' + 'FSE + ' + Me.FSE.ForeColor = System.Drawing.Color.Red + Me.FSE.Name = "FSE" + Me.FSE.Size = New System.Drawing.Size(32, 17) + Me.FSE.Text = "Error" + ' + 'TimerMiddle + ' + Me.TimerMiddle.Interval = 15 + ' + 'ToolStripContainer1 + ' + ' + 'ToolStripContainer1.ContentPanel + ' + Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.PMain) + Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.SpR) + Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.SpL) + Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.PMainR) + Me.ToolStripContainer1.ContentPanel.Controls.Add(Me.PMainL) + Me.ToolStripContainer1.ContentPanel.Size = New System.Drawing.Size(1267, 661) + Me.ToolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.ToolStripContainer1.Location = New System.Drawing.Point(0, 0) + Me.ToolStripContainer1.Name = "ToolStripContainer1" + Me.ToolStripContainer1.Size = New System.Drawing.Size(1267, 759) + Me.ToolStripContainer1.TabIndex = 65 + Me.ToolStripContainer1.Text = "ToolStripContainer1" + ' + 'ToolStripContainer1.TopToolStripPanel + ' + Me.ToolStripContainer1.TopToolStripPanel.Controls.Add(Me.mnMain) + Me.ToolStripContainer1.TopToolStripPanel.Controls.Add(Me.TBMain) + Me.ToolStripContainer1.TopToolStripPanel.Controls.Add(Me.TBTab) + ' + 'PMain + ' + Me.PMain.BackColor = System.Drawing.Color.Black + Me.PMain.Controls.Add(Me.PMainIn) + Me.PMain.Controls.Add(Me.MainPanelScroll) + Me.PMain.Controls.Add(Me.HS) + Me.PMain.Dock = System.Windows.Forms.DockStyle.Fill + Me.PMain.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.PMain.ForeColor = System.Drawing.Color.White + Me.PMain.Location = New System.Drawing.Point(5, 0) + Me.PMain.Name = "PMain" + Me.PMain.Size = New System.Drawing.Size(1257, 661) + Me.PMain.TabIndex = 58 + Me.PMain.TabStop = True + Me.PMain.Tag = "1" + ' + 'PMainIn + ' + Me.PMainIn.BackColor = System.Drawing.Color.Black + Me.PMainIn.Controls.Add(Me.PBOnTabHover) + Me.PMainIn.Dock = System.Windows.Forms.DockStyle.Fill + Me.PMainIn.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.PMainIn.ForeColor = System.Drawing.Color.White + Me.PMainIn.Location = New System.Drawing.Point(0, 0) + Me.PMainIn.Name = "PMainIn" + Me.PMainIn.Size = New System.Drawing.Size(1240, 644) + Me.PMainIn.TabIndex = 0 + Me.PMainIn.TabStop = True + Me.PMainIn.Tag = "1" + ' + 'PBOnTabHover + ' + Me.PBOnTabHover.Location = New System.Drawing.Point(7, 3) + Me.PBOnTabHover.Name = "PBOnTabHover" + Me.PBOnTabHover.Size = New System.Drawing.Size(330, 102) + Me.PBOnTabHover.TabIndex = 0 + Me.PBOnTabHover.TabStop = False + Me.PBOnTabHover.Visible = False + ' + 'MainPanelScroll + ' + Me.MainPanelScroll.AccessibleRole = System.Windows.Forms.AccessibleRole.ScrollBar + Me.MainPanelScroll.Dock = System.Windows.Forms.DockStyle.Right + Me.MainPanelScroll.LargeChange = 592 + Me.MainPanelScroll.Location = New System.Drawing.Point(1240, 0) + Me.MainPanelScroll.Maximum = 591 + Me.MainPanelScroll.Minimum = -10000 + Me.MainPanelScroll.Name = "MainPanelScroll" + Me.MainPanelScroll.Size = New System.Drawing.Size(17, 644) + Me.MainPanelScroll.SmallChange = 12 + Me.MainPanelScroll.TabIndex = 2 + Me.MainPanelScroll.Tag = "1" + ' + 'HS + ' + Me.HS.AccessibleRole = System.Windows.Forms.AccessibleRole.ScrollBar + Me.HS.Dock = System.Windows.Forms.DockStyle.Bottom + Me.HS.LargeChange = 777 + Me.HS.Location = New System.Drawing.Point(0, 644) + Me.HS.Maximum = 1233 + Me.HS.Name = "HS" + Me.HS.Size = New System.Drawing.Size(1257, 17) + Me.HS.TabIndex = 3 + Me.HS.Tag = "1" + ' + 'SpR + ' + Me.SpR.Dock = System.Windows.Forms.DockStyle.Right + Me.SpR.FlatAppearance.BorderSize = 0 + Me.SpR.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.SpR.Location = New System.Drawing.Point(1262, 0) + Me.SpR.Name = "SpR" + Me.SpR.Size = New System.Drawing.Size(5, 661) + Me.SpR.TabIndex = 59 + Me.SpR.TabStop = False + Me.SpR.UseVisualStyleBackColor = True + Me.SpR.Visible = False + ' + 'SpL + ' + Me.SpL.Dock = System.Windows.Forms.DockStyle.Left + Me.SpL.FlatAppearance.BorderSize = 0 + Me.SpL.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.SpL.Location = New System.Drawing.Point(0, 0) + Me.SpL.Name = "SpL" + Me.SpL.Size = New System.Drawing.Size(5, 661) + Me.SpL.TabIndex = 60 + Me.SpL.TabStop = False + Me.SpL.UseVisualStyleBackColor = True + Me.SpL.Visible = False + ' + 'PMainR + ' + Me.PMainR.BackColor = System.Drawing.Color.Black + Me.PMainR.Controls.Add(Me.PMainInR) + Me.PMainR.Controls.Add(Me.RightPanelScroll) + Me.PMainR.Controls.Add(Me.HSR) + Me.PMainR.Dock = System.Windows.Forms.DockStyle.Right + Me.PMainR.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.PMainR.ForeColor = System.Drawing.Color.White + Me.PMainR.Location = New System.Drawing.Point(1267, 0) + Me.PMainR.Name = "PMainR" + Me.PMainR.Size = New System.Drawing.Size(0, 661) + Me.PMainR.TabIndex = 56 + Me.PMainR.Tag = "2" + ' + 'PMainInR + ' + Me.PMainInR.BackColor = System.Drawing.Color.Black + Me.PMainInR.Dock = System.Windows.Forms.DockStyle.Fill + Me.PMainInR.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.PMainInR.ForeColor = System.Drawing.Color.White + Me.PMainInR.Location = New System.Drawing.Point(0, 0) + Me.PMainInR.Name = "PMainInR" + Me.PMainInR.Size = New System.Drawing.Size(0, 644) + Me.PMainInR.TabIndex = 0 + Me.PMainInR.TabStop = True + Me.PMainInR.Tag = "2" + ' + 'RightPanelScroll + ' + Me.RightPanelScroll.Dock = System.Windows.Forms.DockStyle.Right + Me.RightPanelScroll.LargeChange = 592 + Me.RightPanelScroll.Location = New System.Drawing.Point(-17, 0) + Me.RightPanelScroll.Maximum = 591 + Me.RightPanelScroll.Minimum = -10000 + Me.RightPanelScroll.Name = "RightPanelScroll" + Me.RightPanelScroll.Size = New System.Drawing.Size(17, 644) + Me.RightPanelScroll.SmallChange = 12 + Me.RightPanelScroll.TabIndex = 2 + Me.RightPanelScroll.Tag = "2" + ' + 'HSR + ' + Me.HSR.Dock = System.Windows.Forms.DockStyle.Bottom + Me.HSR.LargeChange = 777 + Me.HSR.Location = New System.Drawing.Point(0, 644) + Me.HSR.Maximum = 1233 + Me.HSR.Name = "HSR" + Me.HSR.Size = New System.Drawing.Size(0, 17) + Me.HSR.TabIndex = 3 + Me.HSR.Tag = "2" + ' + 'PMainL + ' + Me.PMainL.BackColor = System.Drawing.Color.Black + Me.PMainL.Controls.Add(Me.PMainInL) + Me.PMainL.Controls.Add(Me.LeftPanelScroll) + Me.PMainL.Controls.Add(Me.HSL) + Me.PMainL.Dock = System.Windows.Forms.DockStyle.Left + Me.PMainL.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.PMainL.ForeColor = System.Drawing.Color.White + Me.PMainL.Location = New System.Drawing.Point(0, 0) + Me.PMainL.Name = "PMainL" + Me.PMainL.Size = New System.Drawing.Size(0, 661) + Me.PMainL.TabIndex = 54 + Me.PMainL.Tag = "0" + ' + 'PMainInL + ' + Me.PMainInL.BackColor = System.Drawing.Color.Black + Me.PMainInL.Dock = System.Windows.Forms.DockStyle.Fill + Me.PMainInL.Font = New System.Drawing.Font("Verdana", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.PMainInL.ForeColor = System.Drawing.Color.White + Me.PMainInL.Location = New System.Drawing.Point(0, 0) + Me.PMainInL.Name = "PMainInL" + Me.PMainInL.Size = New System.Drawing.Size(0, 644) + Me.PMainInL.TabIndex = 0 + Me.PMainInL.TabStop = True + Me.PMainInL.Tag = "0" + ' + 'LeftPanelScroll + ' + Me.LeftPanelScroll.Dock = System.Windows.Forms.DockStyle.Right + Me.LeftPanelScroll.LargeChange = 592 + Me.LeftPanelScroll.Location = New System.Drawing.Point(-17, 0) + Me.LeftPanelScroll.Maximum = 591 + Me.LeftPanelScroll.Minimum = -10000 + Me.LeftPanelScroll.Name = "LeftPanelScroll" + Me.LeftPanelScroll.Size = New System.Drawing.Size(17, 644) + Me.LeftPanelScroll.SmallChange = 12 + Me.LeftPanelScroll.TabIndex = 2 + Me.LeftPanelScroll.Tag = "0" + ' + 'HSL + ' + Me.HSL.Dock = System.Windows.Forms.DockStyle.Bottom + Me.HSL.LargeChange = 777 + Me.HSL.Location = New System.Drawing.Point(0, 644) + Me.HSL.Maximum = 1233 + Me.HSL.Name = "HSL" + Me.HSL.Size = New System.Drawing.Size(0, 17) + Me.HSL.TabIndex = 3 + Me.HSL.Tag = "0" + ' + 'TBTab + ' + Me.TBTab.BackColor = System.Drawing.SystemColors.Control + Me.TBTab.Dock = System.Windows.Forms.DockStyle.None + Me.TBTab.Location = New System.Drawing.Point(3, 48) + Me.TBTab.Name = "TBTab" + Me.TBTab.Size = New System.Drawing.Size(111, 25) + Me.TBTab.TabIndex = 65 + ' + 'POptionsResizer + ' + Me.POptionsResizer.AutoSize = True + Me.POptionsResizer.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POptionsResizer.Dock = System.Windows.Forms.DockStyle.Right + Me.POptionsResizer.FlatAppearance.BorderSize = 0 + Me.POptionsResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.POptionsResizer.Location = New System.Drawing.Point(1267, 0) + Me.POptionsResizer.Name = "POptionsResizer" + Me.POptionsResizer.Size = New System.Drawing.Size(6, 781) + Me.POptionsResizer.TabIndex = 67 + Me.POptionsResizer.TabStop = False + Me.POptionsResizer.UseVisualStyleBackColor = True + ' + 'cVSLockR + ' + Me.cVSLockR.Appearance = System.Windows.Forms.Appearance.Button + Me.cVSLockR.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.cVSLockR.Image = Global.iBMSC.My.Resources.Resources.x16Lock + Me.cVSLockR.Location = New System.Drawing.Point(46, 0) + Me.cVSLockR.Margin = New System.Windows.Forms.Padding(0) + Me.cVSLockR.Name = "cVSLockR" + Me.cVSLockR.Size = New System.Drawing.Size(23, 23) + Me.cVSLockR.TabIndex = 305 + Me.cVSLockR.Tag = "2" + Me.ToolTipUniversal.SetToolTip(Me.cVSLockR, "Lock Right Editing Panel") + ' + 'cVSLock + ' + Me.cVSLock.Appearance = System.Windows.Forms.Appearance.Button + Me.cVSLock.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.cVSLock.Image = Global.iBMSC.My.Resources.Resources.x16Lock + Me.cVSLock.Location = New System.Drawing.Point(23, 0) + Me.cVSLock.Margin = New System.Windows.Forms.Padding(0) + Me.cVSLock.Name = "cVSLock" + Me.cVSLock.Size = New System.Drawing.Size(23, 23) + Me.cVSLock.TabIndex = 304 + Me.cVSLock.Tag = "1" + Me.ToolTipUniversal.SetToolTip(Me.cVSLock, "Lock Middle Editing Panel") + ' + 'cVSLockL + ' + Me.cVSLockL.Appearance = System.Windows.Forms.Appearance.Button + Me.cVSLockL.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.cVSLockL.Image = Global.iBMSC.My.Resources.Resources.x16Lock + Me.cVSLockL.Location = New System.Drawing.Point(0, 0) + Me.cVSLockL.Margin = New System.Windows.Forms.Padding(0) + Me.cVSLockL.Name = "cVSLockL" + Me.cVSLockL.Size = New System.Drawing.Size(23, 23) + Me.cVSLockL.TabIndex = 303 + Me.cVSLockL.Tag = "0" + Me.ToolTipUniversal.SetToolTip(Me.cVSLockL, "Lock Left Editing Panel") + ' + 'BWLock + ' + Me.BWLock.Appearance = System.Windows.Forms.Appearance.Button + Me.BWLock.Checked = True + Me.BWLock.CheckState = System.Windows.Forms.CheckState.Checked + Me.BWLock.Image = Global.iBMSC.My.Resources.Resources.x16Lock + Me.BWLock.Location = New System.Drawing.Point(48, 0) + Me.BWLock.Margin = New System.Windows.Forms.Padding(0) + Me.BWLock.Name = "BWLock" + Me.BWLock.Size = New System.Drawing.Size(24, 24) + Me.BWLock.TabIndex = 404 + Me.ToolTipUniversal.SetToolTip(Me.BWLock, "Lock to BGM") + Me.BWLock.UseVisualStyleBackColor = True + ' + 'BWClear + ' + Me.BWClear.Image = Global.iBMSC.My.Resources.Resources.x16Remove + Me.BWClear.Location = New System.Drawing.Point(24, 0) + Me.BWClear.Margin = New System.Windows.Forms.Padding(0) + Me.BWClear.Name = "BWClear" + Me.BWClear.Size = New System.Drawing.Size(24, 24) + Me.BWClear.TabIndex = 403 + Me.ToolTipUniversal.SetToolTip(Me.BWClear, "Clear WaveForm") + Me.BWClear.UseVisualStyleBackColor = True + ' + 'BWLoad + ' + Me.BWLoad.Image = Global.iBMSC.My.Resources.Resources.x16Add + Me.BWLoad.Location = New System.Drawing.Point(0, 0) + Me.BWLoad.Margin = New System.Windows.Forms.Padding(0) + Me.BWLoad.Name = "BWLoad" + Me.BWLoad.Size = New System.Drawing.Size(24, 24) + Me.BWLoad.TabIndex = 402 + Me.ToolTipUniversal.SetToolTip(Me.BWLoad, "Load WaveForm") + Me.BWLoad.UseVisualStyleBackColor = True + ' + 'BWAVRemove + ' + Me.BWAVRemove.Image = Global.iBMSC.My.Resources.Resources.x16Remove + Me.BWAVRemove.Location = New System.Drawing.Point(72, 0) + Me.BWAVRemove.Margin = New System.Windows.Forms.Padding(0) + Me.BWAVRemove.Name = "BWAVRemove" + Me.BWAVRemove.Size = New System.Drawing.Size(24, 24) + Me.BWAVRemove.TabIndex = 605 + Me.ToolTipUniversal.SetToolTip(Me.BWAVRemove, "Remove") + Me.BWAVRemove.UseVisualStyleBackColor = True + ' + 'BWAVBrowse + ' + Me.BWAVBrowse.Image = Global.iBMSC.My.Resources.Resources.x16PlayerBrowse + Me.BWAVBrowse.Location = New System.Drawing.Point(48, 0) + Me.BWAVBrowse.Margin = New System.Windows.Forms.Padding(0) + Me.BWAVBrowse.Name = "BWAVBrowse" + Me.BWAVBrowse.Size = New System.Drawing.Size(24, 24) + Me.BWAVBrowse.TabIndex = 604 + Me.ToolTipUniversal.SetToolTip(Me.BWAVBrowse, "Browse") + Me.BWAVBrowse.UseVisualStyleBackColor = True + ' + 'BWAVDown + ' + Me.BWAVDown.Image = Global.iBMSC.My.Resources.Resources.x16Down + Me.BWAVDown.Location = New System.Drawing.Point(24, 0) + Me.BWAVDown.Margin = New System.Windows.Forms.Padding(0) + Me.BWAVDown.Name = "BWAVDown" + Me.BWAVDown.Size = New System.Drawing.Size(24, 24) + Me.BWAVDown.TabIndex = 603 + Me.ToolTipUniversal.SetToolTip(Me.BWAVDown, "Move Down") + Me.BWAVDown.UseVisualStyleBackColor = True + ' + 'BWAVUp + ' + Me.BWAVUp.Image = Global.iBMSC.My.Resources.Resources.x16Up + Me.BWAVUp.Location = New System.Drawing.Point(0, 0) + Me.BWAVUp.Margin = New System.Windows.Forms.Padding(0) + Me.BWAVUp.Name = "BWAVUp" + Me.BWAVUp.Size = New System.Drawing.Size(24, 24) + Me.BWAVUp.TabIndex = 602 + Me.ToolTipUniversal.SetToolTip(Me.BWAVUp, "Move Up") + Me.BWAVUp.UseVisualStyleBackColor = True + ' + 'BWAVDuplicate + ' + Me.BWAVDuplicate.Image = Global.iBMSC.My.Resources.Resources.WAVDuplicate + Me.BWAVDuplicate.Location = New System.Drawing.Point(96, 0) + Me.BWAVDuplicate.Margin = New System.Windows.Forms.Padding(0) + Me.BWAVDuplicate.Name = "BWAVDuplicate" + Me.BWAVDuplicate.Size = New System.Drawing.Size(24, 24) + Me.BWAVDuplicate.TabIndex = 606 + Me.ToolTipUniversal.SetToolTip(Me.BWAVDuplicate, "Duplicate") + Me.BWAVDuplicate.UseVisualStyleBackColor = True + ' + 'BWAVColorOverride + ' + Me.BWAVColorOverride.Image = Global.iBMSC.My.Resources.Resources.x16Color + Me.BWAVColorOverride.Location = New System.Drawing.Point(120, 0) + Me.BWAVColorOverride.Margin = New System.Windows.Forms.Padding(0) + Me.BWAVColorOverride.Name = "BWAVColorOverride" + Me.BWAVColorOverride.Size = New System.Drawing.Size(24, 24) + Me.BWAVColorOverride.TabIndex = 607 + Me.ToolTipUniversal.SetToolTip(Me.BWAVColorOverride, "Override color") + Me.BWAVColorOverride.UseVisualStyleBackColor = True + ' + 'BBMPUp + ' + Me.BBMPUp.Image = Global.iBMSC.My.Resources.Resources.x16Up + Me.BBMPUp.Location = New System.Drawing.Point(0, 0) + Me.BBMPUp.Margin = New System.Windows.Forms.Padding(0) + Me.BBMPUp.Name = "BBMPUp" + Me.BBMPUp.Size = New System.Drawing.Size(24, 24) + Me.BBMPUp.TabIndex = 602 + Me.ToolTipUniversal.SetToolTip(Me.BBMPUp, "Move Up") + Me.BBMPUp.UseVisualStyleBackColor = True + ' + 'BBMPDown + ' + Me.BBMPDown.Image = Global.iBMSC.My.Resources.Resources.x16Down + Me.BBMPDown.Location = New System.Drawing.Point(24, 0) + Me.BBMPDown.Margin = New System.Windows.Forms.Padding(0) + Me.BBMPDown.Name = "BBMPDown" + Me.BBMPDown.Size = New System.Drawing.Size(24, 24) + Me.BBMPDown.TabIndex = 603 + Me.ToolTipUniversal.SetToolTip(Me.BBMPDown, "Move Down") + Me.BBMPDown.UseVisualStyleBackColor = True + ' + 'BBMPBrowse + ' + Me.BBMPBrowse.Image = Global.iBMSC.My.Resources.Resources.x16PlayerBrowse + Me.BBMPBrowse.Location = New System.Drawing.Point(48, 0) + Me.BBMPBrowse.Margin = New System.Windows.Forms.Padding(0) + Me.BBMPBrowse.Name = "BBMPBrowse" + Me.BBMPBrowse.Size = New System.Drawing.Size(24, 24) + Me.BBMPBrowse.TabIndex = 604 + Me.ToolTipUniversal.SetToolTip(Me.BBMPBrowse, "Browse") + Me.BBMPBrowse.UseVisualStyleBackColor = True + ' + 'BBMPRemove + ' + Me.BBMPRemove.Image = Global.iBMSC.My.Resources.Resources.x16Remove + Me.BBMPRemove.Location = New System.Drawing.Point(72, 0) + Me.BBMPRemove.Margin = New System.Windows.Forms.Padding(0) + Me.BBMPRemove.Name = "BBMPRemove" + Me.BBMPRemove.Size = New System.Drawing.Size(24, 24) + Me.BBMPRemove.TabIndex = 605 + Me.ToolTipUniversal.SetToolTip(Me.BBMPRemove, "Remove") + Me.BBMPRemove.UseVisualStyleBackColor = True + ' + 'POptions + ' + Me.POptions.AutoSize = True + Me.POptions.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POptions.Controls.Add(Me.POExpansion) + Me.POptions.Controls.Add(Me.POBeat) + Me.POptions.Controls.Add(Me.POWAV) + Me.POptions.Controls.Add(Me.POWaveForm) + Me.POptions.Controls.Add(Me.POGrid) + Me.POptions.Controls.Add(Me.POHeader) + Me.POptions.Dock = System.Windows.Forms.DockStyle.Top + Me.POptions.Location = New System.Drawing.Point(0, 0) + Me.POptions.Name = "POptions" + Me.POptions.Size = New System.Drawing.Size(183, 2048) + Me.POptions.TabIndex = 29 + ' + 'POExpansion + ' + Me.POExpansion.AutoSize = True + Me.POExpansion.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POExpansion.Controls.Add(Me.POExpansionInner) + Me.POExpansion.Controls.Add(Me.POExpansionSwitch) + Me.POExpansion.Dock = System.Windows.Forms.DockStyle.Top + Me.POExpansion.Location = New System.Drawing.Point(0, 1753) + Me.POExpansion.Name = "POExpansion" + Me.POExpansion.Size = New System.Drawing.Size(183, 295) + Me.POExpansion.TabIndex = 6 + ' + 'POExpansionInner + ' + Me.POExpansionInner.Controls.Add(Me.BExpansion) + Me.POExpansionInner.Controls.Add(Me.TExpansion) + Me.POExpansionInner.Controls.Add(Me.POExpansionResizer) + Me.POExpansionInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POExpansionInner.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POExpansionInner.Location = New System.Drawing.Point(0, 20) + Me.POExpansionInner.Name = "POExpansionInner" + Me.POExpansionInner.Size = New System.Drawing.Size(183, 275) + Me.POExpansionInner.TabIndex = 7 + Me.POExpansionInner.Visible = False + ' + 'BExpansion + ' + Me.BExpansion.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BExpansion.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.BExpansion.Location = New System.Drawing.Point(0, 245) + Me.BExpansion.Name = "BExpansion" + Me.BExpansion.Size = New System.Drawing.Size(183, 25) + Me.BExpansion.TabIndex = 1003 + Me.BExpansion.Text = "#RANDOM Editor" + Me.BExpansion.UseVisualStyleBackColor = True + ' + 'TExpansion + ' + Me.TExpansion.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.TExpansion.Dock = System.Windows.Forms.DockStyle.Top + Me.TExpansion.HideSelection = False + Me.TExpansion.Location = New System.Drawing.Point(0, 0) + Me.TExpansion.MaxLength = 99999999 + Me.TExpansion.Multiline = True + Me.TExpansion.Name = "TExpansion" + Me.TExpansion.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.TExpansion.Size = New System.Drawing.Size(183, 245) + Me.TExpansion.TabIndex = 1002 + Me.TExpansion.WordWrap = False + ' + 'POExpansionResizer + ' + Me.POExpansionResizer.Dock = System.Windows.Forms.DockStyle.Bottom + Me.POExpansionResizer.FlatAppearance.BorderSize = 0 + Me.POExpansionResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.POExpansionResizer.Location = New System.Drawing.Point(0, 270) + Me.POExpansionResizer.Margin = New System.Windows.Forms.Padding(0) + Me.POExpansionResizer.Name = "POExpansionResizer" + Me.POExpansionResizer.Size = New System.Drawing.Size(183, 5) + Me.POExpansionResizer.TabIndex = 65 + Me.POExpansionResizer.TabStop = False + Me.POExpansionResizer.UseVisualStyleBackColor = True + ' + 'POExpansionSwitch + ' + Me.POExpansionSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POExpansionSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POExpansionSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POExpansionSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POExpansionSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POExpansionSwitch.Location = New System.Drawing.Point(0, 0) + Me.POExpansionSwitch.Name = "POExpansionSwitch" + Me.POExpansionSwitch.Size = New System.Drawing.Size(183, 20) + Me.POExpansionSwitch.TabIndex = 1001 + Me.POExpansionSwitch.TabStop = False + Me.POExpansionSwitch.Text = "Expansion Code" + Me.POExpansionSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POExpansionSwitch.UseCompatibleTextRendering = True + Me.POExpansionSwitch.UseVisualStyleBackColor = False + ' + 'POBeat + ' + Me.POBeat.AutoSize = True + Me.POBeat.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POBeat.Controls.Add(Me.POBeatInner) + Me.POBeat.Controls.Add(Me.POBeatSwitch) + Me.POBeat.Dock = System.Windows.Forms.DockStyle.Top + Me.POBeat.Location = New System.Drawing.Point(0, 1483) + Me.POBeat.Name = "POBeat" + Me.POBeat.Size = New System.Drawing.Size(183, 270) + Me.POBeat.TabIndex = 5 + ' + 'POBeatInner + ' + Me.POBeatInner.ColumnCount = 1 + Me.POBeatInner.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POBeatInner.Controls.Add(Me.POBeatExpander, 0, 1) + Me.POBeatInner.Controls.Add(Me.POBeatResizer, 0, 4) + Me.POBeatInner.Controls.Add(Me.TableLayoutPanel7, 0, 0) + Me.POBeatInner.Controls.Add(Me.LBeat, 0, 3) + Me.POBeatInner.Controls.Add(Me.POBeatPart2, 0, 2) + Me.POBeatInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POBeatInner.Location = New System.Drawing.Point(0, 20) + Me.POBeatInner.Name = "POBeatInner" + Me.POBeatInner.RowCount = 5 + Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POBeatInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatInner.Size = New System.Drawing.Size(183, 250) + Me.POBeatInner.TabIndex = 6 + Me.POBeatInner.Visible = False + ' + 'POBeatExpander + ' + Me.POBeatExpander.Appearance = System.Windows.Forms.Appearance.Button + Me.POBeatExpander.AutoSize = True + Me.POBeatExpander.Cursor = System.Windows.Forms.Cursors.Hand + Me.POBeatExpander.Dock = System.Windows.Forms.DockStyle.Top + Me.POBeatExpander.FlatAppearance.BorderSize = 0 + Me.POBeatExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.POBeatExpander.Location = New System.Drawing.Point(0, 54) + Me.POBeatExpander.Margin = New System.Windows.Forms.Padding(0) + Me.POBeatExpander.Name = "POBeatExpander" + Me.POBeatExpander.Size = New System.Drawing.Size(183, 25) + Me.POBeatExpander.TabIndex = 901 + Me.POBeatExpander.TabStop = False + Me.POBeatExpander.Text = "Expand..." + Me.POBeatExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POBeatExpander.UseVisualStyleBackColor = False + ' + 'POBeatResizer + ' + Me.POBeatInner.SetColumnSpan(Me.POBeatResizer, 2) + Me.POBeatResizer.Dock = System.Windows.Forms.DockStyle.Top + Me.POBeatResizer.FlatAppearance.BorderSize = 0 + Me.POBeatResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.POBeatResizer.Location = New System.Drawing.Point(0, 245) + Me.POBeatResizer.Margin = New System.Windows.Forms.Padding(0) + Me.POBeatResizer.Name = "POBeatResizer" + Me.POBeatResizer.Size = New System.Drawing.Size(183, 5) + Me.POBeatResizer.TabIndex = 64 + Me.POBeatResizer.TabStop = False + Me.POBeatResizer.UseVisualStyleBackColor = True + ' + 'TableLayoutPanel7 + ' + Me.TableLayoutPanel7.AutoSize = True + Me.TableLayoutPanel7.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel7.ColumnCount = 4 + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.0!)) + Me.TableLayoutPanel7.Controls.Add(Me.nBeatD, 2, 0) + Me.TableLayoutPanel7.Controls.Add(Me.BBeatApplyV, 3, 1) + Me.TableLayoutPanel7.Controls.Add(Me.nBeatN, 0, 0) + Me.TableLayoutPanel7.Controls.Add(Me.BBeatApply, 3, 0) + Me.TableLayoutPanel7.Controls.Add(Me.Label7, 1, 0) + Me.TableLayoutPanel7.Controls.Add(Me.tBeatValue, 0, 1) + Me.TableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel7.Location = New System.Drawing.Point(0, 0) + Me.TableLayoutPanel7.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel7.Name = "TableLayoutPanel7" + Me.TableLayoutPanel7.RowCount = 2 + Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel7.Size = New System.Drawing.Size(183, 54) + Me.TableLayoutPanel7.TabIndex = 63 + ' + 'nBeatD + ' + Me.nBeatD.Dock = System.Windows.Forms.DockStyle.Fill + Me.nBeatD.Location = New System.Drawing.Point(66, 3) + Me.nBeatD.Maximum = New Decimal(New Integer() {10000, 0, 0, 0}) + Me.nBeatD.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.nBeatD.Name = "nBeatD" + Me.nBeatD.Size = New System.Drawing.Size(45, 23) + Me.nBeatD.TabIndex = 803 + Me.nBeatD.Value = New Decimal(New Integer() {4, 0, 0, 0}) + ' + 'BBeatApplyV + ' + Me.BBeatApplyV.AutoSize = True + Me.BBeatApplyV.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.BBeatApplyV.Dock = System.Windows.Forms.DockStyle.Fill + Me.BBeatApplyV.Location = New System.Drawing.Point(114, 29) + Me.BBeatApplyV.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.BBeatApplyV.Name = "BBeatApplyV" + Me.BBeatApplyV.Size = New System.Drawing.Size(66, 25) + Me.BBeatApplyV.TabIndex = 806 + Me.BBeatApplyV.Text = "Apply" + Me.BBeatApplyV.UseVisualStyleBackColor = True + ' + 'nBeatN + ' + Me.nBeatN.Dock = System.Windows.Forms.DockStyle.Fill + Me.nBeatN.Location = New System.Drawing.Point(3, 3) + Me.nBeatN.Maximum = New Decimal(New Integer() {99999, 0, 0, 0}) + Me.nBeatN.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.nBeatN.Name = "nBeatN" + Me.nBeatN.Size = New System.Drawing.Size(45, 23) + Me.nBeatN.TabIndex = 802 + Me.nBeatN.Value = New Decimal(New Integer() {4, 0, 0, 0}) + ' + 'BBeatApply + ' + Me.BBeatApply.AutoSize = True + Me.BBeatApply.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.BBeatApply.Dock = System.Windows.Forms.DockStyle.Fill + Me.BBeatApply.Location = New System.Drawing.Point(114, 2) + Me.BBeatApply.Margin = New System.Windows.Forms.Padding(0, 2, 3, 2) + Me.BBeatApply.Name = "BBeatApply" + Me.BBeatApply.Size = New System.Drawing.Size(66, 25) + Me.BBeatApply.TabIndex = 804 + Me.BBeatApply.Text = "Apply" + Me.BBeatApply.UseVisualStyleBackColor = True + ' + 'Label7 + ' + Me.Label7.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Label7.AutoSize = True + Me.Label7.Location = New System.Drawing.Point(51, 7) + Me.Label7.Margin = New System.Windows.Forms.Padding(0) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(12, 15) + Me.Label7.TabIndex = 31 + Me.Label7.Text = "/" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'tBeatValue + ' + Me.TableLayoutPanel7.SetColumnSpan(Me.tBeatValue, 3) + Me.tBeatValue.Dock = System.Windows.Forms.DockStyle.Fill + Me.tBeatValue.Location = New System.Drawing.Point(3, 30) + Me.tBeatValue.Margin = New System.Windows.Forms.Padding(3, 1, 3, 0) + Me.tBeatValue.Name = "tBeatValue" + Me.tBeatValue.Size = New System.Drawing.Size(108, 23) + Me.tBeatValue.TabIndex = 805 + Me.tBeatValue.Text = "1" + ' + 'LBeat + ' + Me.LBeat.Dock = System.Windows.Forms.DockStyle.Fill + Me.LBeat.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LBeat.IntegralHeight = False + Me.LBeat.ItemHeight = 14 + Me.LBeat.Items.AddRange(New Object() {"000: 15.984375 (1023/64)"}) + Me.LBeat.Location = New System.Drawing.Point(3, 155) + Me.LBeat.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.LBeat.Name = "LBeat" + Me.LBeat.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.LBeat.Size = New System.Drawing.Size(177, 90) + Me.LBeat.TabIndex = 906 + ' + 'POBeatPart2 + ' + Me.POBeatPart2.AutoSize = True + Me.POBeatPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POBeatPart2.ColumnCount = 1 + Me.POBeatPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POBeatPart2.Controls.Add(Me.CBeatScale, 0, 3) + Me.POBeatPart2.Controls.Add(Me.CBeatCut, 0, 2) + Me.POBeatPart2.Controls.Add(Me.CBeatMeasure, 0, 1) + Me.POBeatPart2.Controls.Add(Me.CBeatPreserve, 0, 0) + Me.POBeatPart2.Dock = System.Windows.Forms.DockStyle.Fill + Me.POBeatPart2.Location = New System.Drawing.Point(0, 79) + Me.POBeatPart2.Margin = New System.Windows.Forms.Padding(0) + Me.POBeatPart2.Name = "POBeatPart2" + Me.POBeatPart2.RowCount = 4 + Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBeatPart2.Size = New System.Drawing.Size(183, 76) + Me.POBeatPart2.TabIndex = 66 + Me.POBeatPart2.Visible = False + ' + 'CBeatScale + ' + Me.CBeatScale.AutoSize = True + Me.CBeatScale.Location = New System.Drawing.Point(3, 57) + Me.CBeatScale.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CBeatScale.Name = "CBeatScale" + Me.CBeatScale.Size = New System.Drawing.Size(151, 19) + Me.CBeatScale.TabIndex = 905 + Me.CBeatScale.Text = "Scale to measure length" + Me.CBeatScale.UseVisualStyleBackColor = True + ' + 'CBeatCut + ' + Me.CBeatCut.AutoEllipsis = True + Me.CBeatCut.Dock = System.Windows.Forms.DockStyle.Fill + Me.CBeatCut.Location = New System.Drawing.Point(3, 38) + Me.CBeatCut.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CBeatCut.Name = "CBeatCut" + Me.CBeatCut.Size = New System.Drawing.Size(177, 19) + Me.CBeatCut.TabIndex = 904 + Me.CBeatCut.Text = "Keep measure position and cut overflow" + Me.CBeatCut.UseVisualStyleBackColor = True + ' + 'CBeatMeasure + ' + Me.CBeatMeasure.AutoSize = True + Me.CBeatMeasure.Location = New System.Drawing.Point(3, 19) + Me.CBeatMeasure.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CBeatMeasure.Name = "CBeatMeasure" + Me.CBeatMeasure.Size = New System.Drawing.Size(145, 19) + Me.CBeatMeasure.TabIndex = 903 + Me.CBeatMeasure.Text = "Keep measure position" + Me.CBeatMeasure.UseVisualStyleBackColor = True + ' + 'CBeatPreserve + ' + Me.CBeatPreserve.AutoSize = True + Me.CBeatPreserve.Checked = True + Me.CBeatPreserve.Location = New System.Drawing.Point(3, 0) + Me.CBeatPreserve.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CBeatPreserve.Name = "CBeatPreserve" + Me.CBeatPreserve.Size = New System.Drawing.Size(145, 19) + Me.CBeatPreserve.TabIndex = 902 + Me.CBeatPreserve.TabStop = True + Me.CBeatPreserve.Text = "Keep absolute position" + Me.CBeatPreserve.UseVisualStyleBackColor = True + ' + 'POBeatSwitch + ' + Me.POBeatSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POBeatSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POBeatSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POBeatSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POBeatSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POBeatSwitch.Location = New System.Drawing.Point(0, 0) + Me.POBeatSwitch.Name = "POBeatSwitch" + Me.POBeatSwitch.Size = New System.Drawing.Size(183, 20) + Me.POBeatSwitch.TabIndex = 801 + Me.POBeatSwitch.TabStop = False + Me.POBeatSwitch.Text = "Beat" + Me.POBeatSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POBeatSwitch.UseCompatibleTextRendering = True + Me.POBeatSwitch.UseVisualStyleBackColor = False + ' + 'POWAV + ' + Me.POWAV.AllowDrop = True + Me.POWAV.AutoSize = True + Me.POWAV.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POWAV.Controls.Add(Me.POBMP) + Me.POWAV.Controls.Add(Me.POWAVInner) + Me.POWAV.Controls.Add(Me.POWAVSwitch) + Me.POWAV.Dock = System.Windows.Forms.DockStyle.Top + Me.POWAV.Location = New System.Drawing.Point(0, 943) + Me.POWAV.Name = "POWAV" + Me.POWAV.Size = New System.Drawing.Size(183, 540) + Me.POWAV.TabIndex = 4 + ' + 'POBMP + ' + Me.POBMP.AllowDrop = True + Me.POBMP.AutoSize = True + Me.POBMP.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POBMP.Controls.Add(Me.POBMPInner) + Me.POBMP.Controls.Add(Me.POBMPSwitch) + Me.POBMP.Dock = System.Windows.Forms.DockStyle.Top + Me.POBMP.Location = New System.Drawing.Point(0, 270) + Me.POBMP.Name = "POBMP" + Me.POBMP.Size = New System.Drawing.Size(183, 270) + Me.POBMP.TabIndex = 602 + ' + 'POBMPInner + ' + Me.POBMPInner.ColumnCount = 1 + Me.POBMPInner.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POBMPInner.Controls.Add(Me.POBMPExpander, 0, 1) + Me.POBMPInner.Controls.Add(Me.LBMP, 0, 3) + Me.POBMPInner.Controls.Add(Me.FlowLayoutPanel4, 0, 0) + Me.POBMPInner.Controls.Add(Me.POBMPResizer, 0, 4) + Me.POBMPInner.Controls.Add(Me.POBMPPart2, 0, 2) + Me.POBMPInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POBMPInner.Location = New System.Drawing.Point(0, 20) + Me.POBMPInner.Name = "POBMPInner" + Me.POBMPInner.RowCount = 5 + Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POBMPInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBMPInner.Size = New System.Drawing.Size(183, 250) + Me.POBMPInner.TabIndex = 5 + ' + 'POBMPExpander + ' + Me.POBMPExpander.Appearance = System.Windows.Forms.Appearance.Button + Me.POBMPExpander.AutoSize = True + Me.POBMPExpander.Cursor = System.Windows.Forms.Cursors.Hand + Me.POBMPExpander.Dock = System.Windows.Forms.DockStyle.Top + Me.POBMPExpander.FlatAppearance.BorderSize = 0 + Me.POBMPExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.POBMPExpander.Location = New System.Drawing.Point(0, 30) + Me.POBMPExpander.Margin = New System.Windows.Forms.Padding(0) + Me.POBMPExpander.Name = "POBMPExpander" + Me.POBMPExpander.Size = New System.Drawing.Size(183, 25) + Me.POBMPExpander.TabIndex = 701 + Me.POBMPExpander.TabStop = False + Me.POBMPExpander.Text = "Expand..." + Me.POBMPExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POBMPExpander.UseVisualStyleBackColor = False + ' + 'LBMP + ' + Me.LBMP.Dock = System.Windows.Forms.DockStyle.Fill + Me.LBMP.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LBMP.IntegralHeight = False + Me.LBMP.ItemHeight = 14 + Me.LBMP.Location = New System.Drawing.Point(3, 93) + Me.LBMP.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.LBMP.Name = "LBMP" + Me.LBMP.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.LBMP.Size = New System.Drawing.Size(177, 152) + Me.LBMP.TabIndex = 704 + ' + 'FlowLayoutPanel4 + ' + Me.FlowLayoutPanel4.AutoSize = True + Me.FlowLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.FlowLayoutPanel4.Controls.Add(Me.BBMPUp) + Me.FlowLayoutPanel4.Controls.Add(Me.BBMPDown) + Me.FlowLayoutPanel4.Controls.Add(Me.BBMPBrowse) + Me.FlowLayoutPanel4.Controls.Add(Me.BBMPRemove) + Me.FlowLayoutPanel4.Location = New System.Drawing.Point(3, 3) + Me.FlowLayoutPanel4.Name = "FlowLayoutPanel4" + Me.FlowLayoutPanel4.Size = New System.Drawing.Size(96, 24) + Me.FlowLayoutPanel4.TabIndex = 26 + Me.FlowLayoutPanel4.WrapContents = False + ' + 'POBMPResizer + ' + Me.POBMPResizer.Dock = System.Windows.Forms.DockStyle.Top + Me.POBMPResizer.FlatAppearance.BorderSize = 0 + Me.POBMPResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.POBMPResizer.Location = New System.Drawing.Point(0, 245) + Me.POBMPResizer.Margin = New System.Windows.Forms.Padding(0) + Me.POBMPResizer.Name = "POBMPResizer" + Me.POBMPResizer.Size = New System.Drawing.Size(183, 5) + Me.POBMPResizer.TabIndex = 33 + Me.POBMPResizer.TabStop = False + Me.POBMPResizer.UseVisualStyleBackColor = True + ' + 'POBMPPart2 + ' + Me.POBMPPart2.AutoSize = True + Me.POBMPPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POBMPPart2.ColumnCount = 1 + Me.POBMPPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POBMPPart2.Controls.Add(Me.CBMPMultiSelect, 0, 0) + Me.POBMPPart2.Controls.Add(Me.CBMPChangeLabel, 0, 1) + Me.POBMPPart2.Dock = System.Windows.Forms.DockStyle.Fill + Me.POBMPPart2.Location = New System.Drawing.Point(0, 55) + Me.POBMPPart2.Margin = New System.Windows.Forms.Padding(0) + Me.POBMPPart2.Name = "POBMPPart2" + Me.POBMPPart2.RowCount = 2 + Me.POBMPPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBMPPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POBMPPart2.Size = New System.Drawing.Size(183, 38) + Me.POBMPPart2.TabIndex = 35 + Me.POBMPPart2.Visible = False + ' + 'CBMPMultiSelect + ' + Me.CBMPMultiSelect.AutoSize = True + Me.CBMPMultiSelect.Checked = True + Me.CBMPMultiSelect.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBMPMultiSelect.Location = New System.Drawing.Point(3, 0) + Me.CBMPMultiSelect.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CBMPMultiSelect.Name = "CBMPMultiSelect" + Me.CBMPMultiSelect.Size = New System.Drawing.Size(154, 19) + Me.CBMPMultiSelect.TabIndex = 702 + Me.CBMPMultiSelect.Text = "Allow Multiple Selection" + Me.CBMPMultiSelect.UseVisualStyleBackColor = True + ' + 'CBMPChangeLabel + ' + Me.CBMPChangeLabel.AutoSize = True + Me.CBMPChangeLabel.Checked = True + Me.CBMPChangeLabel.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBMPChangeLabel.Location = New System.Drawing.Point(3, 19) + Me.CBMPChangeLabel.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CBMPChangeLabel.Name = "CBMPChangeLabel" + Me.CBMPChangeLabel.Size = New System.Drawing.Size(155, 19) + Me.CBMPChangeLabel.TabIndex = 703 + Me.CBMPChangeLabel.Text = "Synchronize Note Labels" + Me.CBMPChangeLabel.UseVisualStyleBackColor = True + ' + 'POBMPSwitch + ' + Me.POBMPSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POBMPSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POBMPSwitch.Checked = True + Me.POBMPSwitch.CheckState = System.Windows.Forms.CheckState.Checked + Me.POBMPSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POBMPSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POBMPSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POBMPSwitch.Location = New System.Drawing.Point(0, 0) + Me.POBMPSwitch.Name = "POBMPSwitch" + Me.POBMPSwitch.Size = New System.Drawing.Size(183, 20) + Me.POBMPSwitch.TabIndex = 601 + Me.POBMPSwitch.TabStop = False + Me.POBMPSwitch.Text = "#BMP (Images List)" + Me.POBMPSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POBMPSwitch.UseCompatibleTextRendering = True + Me.POBMPSwitch.UseVisualStyleBackColor = False + ' + 'POWAVInner + ' + Me.POWAVInner.ColumnCount = 1 + Me.POWAVInner.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POWAVInner.Controls.Add(Me.POWAVExpander, 0, 1) + Me.POWAVInner.Controls.Add(Me.LWAV, 0, 3) + Me.POWAVInner.Controls.Add(Me.FlowLayoutPanel3, 0, 0) + Me.POWAVInner.Controls.Add(Me.POWAVResizer, 0, 4) + Me.POWAVInner.Controls.Add(Me.POWAVPart2, 0, 2) + Me.POWAVInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POWAVInner.Location = New System.Drawing.Point(0, 20) + Me.POWAVInner.Name = "POWAVInner" + Me.POWAVInner.RowCount = 5 + Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POWAVInner.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWAVInner.Size = New System.Drawing.Size(183, 250) + Me.POWAVInner.TabIndex = 5 + ' + 'POWAVExpander + ' + Me.POWAVExpander.Appearance = System.Windows.Forms.Appearance.Button + Me.POWAVExpander.AutoSize = True + Me.POWAVExpander.Cursor = System.Windows.Forms.Cursors.Hand + Me.POWAVExpander.Dock = System.Windows.Forms.DockStyle.Top + Me.POWAVExpander.FlatAppearance.BorderSize = 0 + Me.POWAVExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.POWAVExpander.Location = New System.Drawing.Point(0, 30) + Me.POWAVExpander.Margin = New System.Windows.Forms.Padding(0) + Me.POWAVExpander.Name = "POWAVExpander" + Me.POWAVExpander.Size = New System.Drawing.Size(183, 25) + Me.POWAVExpander.TabIndex = 701 + Me.POWAVExpander.TabStop = False + Me.POWAVExpander.Text = "Expand..." + Me.POWAVExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POWAVExpander.UseVisualStyleBackColor = False + ' + 'LWAV + ' + Me.LWAV.Dock = System.Windows.Forms.DockStyle.Fill + Me.LWAV.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LWAV.IntegralHeight = False + Me.LWAV.ItemHeight = 14 + Me.LWAV.Location = New System.Drawing.Point(3, 93) + Me.LWAV.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.LWAV.Name = "LWAV" + Me.LWAV.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.LWAV.Size = New System.Drawing.Size(177, 152) + Me.LWAV.TabIndex = 704 + ' + 'FlowLayoutPanel3 + ' + Me.FlowLayoutPanel3.AutoSize = True + Me.FlowLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.FlowLayoutPanel3.Controls.Add(Me.BWAVUp) + Me.FlowLayoutPanel3.Controls.Add(Me.BWAVDown) + Me.FlowLayoutPanel3.Controls.Add(Me.BWAVBrowse) + Me.FlowLayoutPanel3.Controls.Add(Me.BWAVRemove) + Me.FlowLayoutPanel3.Controls.Add(Me.BWAVDuplicate) + Me.FlowLayoutPanel3.Controls.Add(Me.BWAVColorOverride) + Me.FlowLayoutPanel3.Location = New System.Drawing.Point(3, 3) + Me.FlowLayoutPanel3.Name = "FlowLayoutPanel3" + Me.FlowLayoutPanel3.Size = New System.Drawing.Size(144, 24) + Me.FlowLayoutPanel3.TabIndex = 26 + Me.FlowLayoutPanel3.WrapContents = False + ' + 'POWAVResizer + ' + Me.POWAVResizer.Dock = System.Windows.Forms.DockStyle.Top + Me.POWAVResizer.FlatAppearance.BorderSize = 0 + Me.POWAVResizer.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.POWAVResizer.Location = New System.Drawing.Point(0, 245) + Me.POWAVResizer.Margin = New System.Windows.Forms.Padding(0) + Me.POWAVResizer.Name = "POWAVResizer" + Me.POWAVResizer.Size = New System.Drawing.Size(183, 5) + Me.POWAVResizer.TabIndex = 33 + Me.POWAVResizer.TabStop = False + Me.POWAVResizer.UseVisualStyleBackColor = True + ' + 'POWAVPart2 + ' + Me.POWAVPart2.AutoSize = True + Me.POWAVPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POWAVPart2.ColumnCount = 1 + Me.POWAVPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POWAVPart2.Controls.Add(Me.CWAVMultiSelect, 0, 0) + Me.POWAVPart2.Controls.Add(Me.CWAVChangeLabel, 0, 1) + Me.POWAVPart2.Dock = System.Windows.Forms.DockStyle.Fill + Me.POWAVPart2.Location = New System.Drawing.Point(0, 55) + Me.POWAVPart2.Margin = New System.Windows.Forms.Padding(0) + Me.POWAVPart2.Name = "POWAVPart2" + Me.POWAVPart2.RowCount = 2 + Me.POWAVPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWAVPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWAVPart2.Size = New System.Drawing.Size(183, 38) + Me.POWAVPart2.TabIndex = 35 + Me.POWAVPart2.Visible = False + ' + 'CWAVMultiSelect + ' + Me.CWAVMultiSelect.AutoSize = True + Me.CWAVMultiSelect.Checked = True + Me.CWAVMultiSelect.CheckState = System.Windows.Forms.CheckState.Checked + Me.CWAVMultiSelect.Location = New System.Drawing.Point(3, 0) + Me.CWAVMultiSelect.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CWAVMultiSelect.Name = "CWAVMultiSelect" + Me.CWAVMultiSelect.Size = New System.Drawing.Size(154, 19) + Me.CWAVMultiSelect.TabIndex = 702 + Me.CWAVMultiSelect.Text = "Allow Multiple Selection" + Me.CWAVMultiSelect.UseVisualStyleBackColor = True + ' + 'CWAVChangeLabel + ' + Me.CWAVChangeLabel.AutoSize = True + Me.CWAVChangeLabel.Checked = True + Me.CWAVChangeLabel.CheckState = System.Windows.Forms.CheckState.Checked + Me.CWAVChangeLabel.Location = New System.Drawing.Point(3, 19) + Me.CWAVChangeLabel.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CWAVChangeLabel.Name = "CWAVChangeLabel" + Me.CWAVChangeLabel.Size = New System.Drawing.Size(155, 19) + Me.CWAVChangeLabel.TabIndex = 703 + Me.CWAVChangeLabel.Text = "Synchronize Note Labels" + Me.CWAVChangeLabel.UseVisualStyleBackColor = True + ' + 'POWAVSwitch + ' + Me.POWAVSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POWAVSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POWAVSwitch.Checked = True + Me.POWAVSwitch.CheckState = System.Windows.Forms.CheckState.Checked + Me.POWAVSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POWAVSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POWAVSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POWAVSwitch.Location = New System.Drawing.Point(0, 0) + Me.POWAVSwitch.Name = "POWAVSwitch" + Me.POWAVSwitch.Size = New System.Drawing.Size(183, 20) + Me.POWAVSwitch.TabIndex = 601 + Me.POWAVSwitch.TabStop = False + Me.POWAVSwitch.Text = "#WAV (Sounds List)" + Me.POWAVSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POWAVSwitch.UseCompatibleTextRendering = True + Me.POWAVSwitch.UseVisualStyleBackColor = False + ' + 'POWaveForm + ' + Me.POWaveForm.AutoSize = True + Me.POWaveForm.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POWaveForm.Controls.Add(Me.POWaveFormInner) + Me.POWaveForm.Controls.Add(Me.POWaveFormSwitch) + Me.POWaveForm.Dock = System.Windows.Forms.DockStyle.Top + Me.POWaveForm.Location = New System.Drawing.Point(0, 700) + Me.POWaveForm.Name = "POWaveForm" + Me.POWaveForm.Size = New System.Drawing.Size(183, 243) + Me.POWaveForm.TabIndex = 3 + ' + 'POWaveFormInner + ' + Me.POWaveFormInner.AutoSize = True + Me.POWaveFormInner.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POWaveFormInner.Controls.Add(Me.POWaveFormPart2) + Me.POWaveFormInner.Controls.Add(Me.POWaveFormExpander) + Me.POWaveFormInner.Controls.Add(Me.POWaveFormPart1) + Me.POWaveFormInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POWaveFormInner.Location = New System.Drawing.Point(0, 20) + Me.POWaveFormInner.Name = "POWaveFormInner" + Me.POWaveFormInner.Size = New System.Drawing.Size(183, 223) + Me.POWaveFormInner.TabIndex = 29 + Me.POWaveFormInner.Visible = False + ' + 'POWaveFormPart2 + ' + Me.POWaveFormPart2.AutoSize = True + Me.POWaveFormPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POWaveFormPart2.ColumnCount = 3 + Me.POWaveFormPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.POWaveFormPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70.0!)) + Me.POWaveFormPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) + Me.POWaveFormPart2.Controls.Add(Me.TWSaturation, 2, 4) + Me.POWaveFormPart2.Controls.Add(Me.PictureBox2, 0, 0) + Me.POWaveFormPart2.Controls.Add(Me.TWTransparency, 2, 3) + Me.POWaveFormPart2.Controls.Add(Me.PictureBox3, 0, 1) + Me.POWaveFormPart2.Controls.Add(Me.TWPrecision, 2, 2) + Me.POWaveFormPart2.Controls.Add(Me.PictureBox4, 0, 2) + Me.POWaveFormPart2.Controls.Add(Me.TWWidth, 2, 1) + Me.POWaveFormPart2.Controls.Add(Me.PictureBox5, 0, 3) + Me.POWaveFormPart2.Controls.Add(Me.TWLeft, 2, 0) + Me.POWaveFormPart2.Controls.Add(Me.PictureBox6, 0, 4) + Me.POWaveFormPart2.Controls.Add(Me.TWSaturation2, 1, 4) + Me.POWaveFormPart2.Controls.Add(Me.TWLeft2, 1, 0) + Me.POWaveFormPart2.Controls.Add(Me.TWTransparency2, 1, 3) + Me.POWaveFormPart2.Controls.Add(Me.TWWidth2, 1, 1) + Me.POWaveFormPart2.Controls.Add(Me.TWPrecision2, 1, 2) + Me.POWaveFormPart2.Dock = System.Windows.Forms.DockStyle.Top + Me.POWaveFormPart2.Location = New System.Drawing.Point(0, 83) + Me.POWaveFormPart2.Name = "POWaveFormPart2" + Me.POWaveFormPart2.RowCount = 5 + Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POWaveFormPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POWaveFormPart2.Size = New System.Drawing.Size(183, 140) + Me.POWaveFormPart2.TabIndex = 5 + ' + 'TWSaturation + ' + Me.TWSaturation.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWSaturation.Increment = New Decimal(New Integer() {50, 0, 0, 0}) + Me.TWSaturation.Location = New System.Drawing.Point(137, 112) + Me.TWSaturation.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.TWSaturation.Maximum = New Decimal(New Integer() {1000, 0, 0, 0}) + Me.TWSaturation.Name = "TWSaturation" + Me.TWSaturation.Size = New System.Drawing.Size(43, 23) + Me.TWSaturation.TabIndex = 511 + ' + 'PictureBox2 + ' + Me.PictureBox2.Image = Global.iBMSC.My.Resources.Resources.WAVLeft + Me.PictureBox2.Location = New System.Drawing.Point(3, 0) + Me.PictureBox2.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox2.Name = "PictureBox2" + Me.PictureBox2.Size = New System.Drawing.Size(24, 24) + Me.PictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox2.TabIndex = 60 + Me.PictureBox2.TabStop = False + ' + 'TWTransparency + ' + Me.TWTransparency.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWTransparency.Increment = New Decimal(New Integer() {10, 0, 0, 0}) + Me.TWTransparency.Location = New System.Drawing.Point(137, 84) + Me.TWTransparency.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.TWTransparency.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.TWTransparency.Name = "TWTransparency" + Me.TWTransparency.Size = New System.Drawing.Size(43, 23) + Me.TWTransparency.TabIndex = 509 + Me.TWTransparency.Value = New Decimal(New Integer() {80, 0, 0, 0}) + ' + 'PictureBox3 + ' + Me.PictureBox3.Image = Global.iBMSC.My.Resources.Resources.WAVWidth + Me.PictureBox3.Location = New System.Drawing.Point(3, 28) + Me.PictureBox3.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox3.Name = "PictureBox3" + Me.PictureBox3.Size = New System.Drawing.Size(24, 24) + Me.PictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox3.TabIndex = 61 + Me.PictureBox3.TabStop = False + ' + 'TWPrecision + ' + Me.TWPrecision.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWPrecision.Increment = New Decimal(New Integer() {0, 0, 0, 0}) + Me.TWPrecision.Location = New System.Drawing.Point(137, 56) + Me.TWPrecision.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.TWPrecision.Name = "TWPrecision" + Me.TWPrecision.Size = New System.Drawing.Size(43, 23) + Me.TWPrecision.TabIndex = 507 + Me.TWPrecision.Value = New Decimal(New Integer() {10, 0, 0, 0}) + ' + 'PictureBox4 + ' + Me.PictureBox4.Image = Global.iBMSC.My.Resources.Resources.WAVPrecision + Me.PictureBox4.Location = New System.Drawing.Point(3, 56) + Me.PictureBox4.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox4.Name = "PictureBox4" + Me.PictureBox4.Size = New System.Drawing.Size(24, 24) + Me.PictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox4.TabIndex = 62 + Me.PictureBox4.TabStop = False + ' + 'TWWidth + ' + Me.TWWidth.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWWidth.Increment = New Decimal(New Integer() {10, 0, 0, 0}) + Me.TWWidth.Location = New System.Drawing.Point(137, 28) + Me.TWWidth.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.TWWidth.Maximum = New Decimal(New Integer() {1000, 0, 0, 0}) + Me.TWWidth.Name = "TWWidth" + Me.TWWidth.Size = New System.Drawing.Size(43, 23) + Me.TWWidth.TabIndex = 505 + Me.TWWidth.Value = New Decimal(New Integer() {200, 0, 0, 0}) + ' + 'PictureBox5 + ' + Me.PictureBox5.Image = Global.iBMSC.My.Resources.Resources.WAVTransparency + Me.PictureBox5.Location = New System.Drawing.Point(3, 84) + Me.PictureBox5.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox5.Name = "PictureBox5" + Me.PictureBox5.Size = New System.Drawing.Size(24, 24) + Me.PictureBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox5.TabIndex = 67 + Me.PictureBox5.TabStop = False + ' + 'TWLeft + ' + Me.TWLeft.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWLeft.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.TWLeft.Location = New System.Drawing.Point(137, 0) + Me.TWLeft.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.TWLeft.Maximum = New Decimal(New Integer() {800, 0, 0, 0}) + Me.TWLeft.Name = "TWLeft" + Me.TWLeft.Size = New System.Drawing.Size(43, 23) + Me.TWLeft.TabIndex = 503 + Me.TWLeft.Value = New Decimal(New Integer() {50, 0, 0, 0}) + ' + 'PictureBox6 + ' + Me.PictureBox6.Image = Global.iBMSC.My.Resources.Resources.WAVSaturation + Me.PictureBox6.Location = New System.Drawing.Point(3, 112) + Me.PictureBox6.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox6.Name = "PictureBox6" + Me.PictureBox6.Size = New System.Drawing.Size(24, 24) + Me.PictureBox6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox6.TabIndex = 66 + Me.PictureBox6.TabStop = False + ' + 'TWSaturation2 + ' + Me.TWSaturation2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWSaturation2.LargeChange = 200 + Me.TWSaturation2.Location = New System.Drawing.Point(30, 112) + Me.TWSaturation2.Margin = New System.Windows.Forms.Padding(0) + Me.TWSaturation2.Maximum = 1000 + Me.TWSaturation2.Name = "TWSaturation2" + Me.TWSaturation2.Size = New System.Drawing.Size(107, 28) + Me.TWSaturation2.SmallChange = 50 + Me.TWSaturation2.TabIndex = 510 + Me.TWSaturation2.TickFrequency = 200 + ' + 'TWLeft2 + ' + Me.TWLeft2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWLeft2.LargeChange = 50 + Me.TWLeft2.Location = New System.Drawing.Point(30, 0) + Me.TWLeft2.Margin = New System.Windows.Forms.Padding(0) + Me.TWLeft2.Maximum = 800 + Me.TWLeft2.Name = "TWLeft2" + Me.TWLeft2.Size = New System.Drawing.Size(107, 28) + Me.TWLeft2.SmallChange = 10 + Me.TWLeft2.TabIndex = 502 + Me.TWLeft2.TickFrequency = 100 + Me.TWLeft2.Value = 50 + ' + 'TWTransparency2 + ' + Me.TWTransparency2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWTransparency2.LargeChange = 64 + Me.TWTransparency2.Location = New System.Drawing.Point(30, 84) + Me.TWTransparency2.Margin = New System.Windows.Forms.Padding(0) + Me.TWTransparency2.Maximum = 255 + Me.TWTransparency2.Name = "TWTransparency2" + Me.TWTransparency2.Size = New System.Drawing.Size(107, 28) + Me.TWTransparency2.SmallChange = 8 + Me.TWTransparency2.TabIndex = 508 + Me.TWTransparency2.TickFrequency = 64 + Me.TWTransparency2.Value = 80 + ' + 'TWWidth2 + ' + Me.TWWidth2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWWidth2.LargeChange = 50 + Me.TWWidth2.Location = New System.Drawing.Point(30, 28) + Me.TWWidth2.Margin = New System.Windows.Forms.Padding(0) + Me.TWWidth2.Maximum = 1000 + Me.TWWidth2.Name = "TWWidth2" + Me.TWWidth2.Size = New System.Drawing.Size(107, 28) + Me.TWWidth2.SmallChange = 10 + Me.TWWidth2.TabIndex = 504 + Me.TWWidth2.TickFrequency = 100 + Me.TWWidth2.Value = 200 + ' + 'TWPrecision2 + ' + Me.TWPrecision2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWPrecision2.LargeChange = 4 + Me.TWPrecision2.Location = New System.Drawing.Point(30, 56) + Me.TWPrecision2.Margin = New System.Windows.Forms.Padding(0) + Me.TWPrecision2.Maximum = 100 + Me.TWPrecision2.Name = "TWPrecision2" + Me.TWPrecision2.Size = New System.Drawing.Size(107, 28) + Me.TWPrecision2.TabIndex = 506 + Me.TWPrecision2.TickFrequency = 5 + Me.TWPrecision2.Value = 1 + ' + 'POWaveFormExpander + ' + Me.POWaveFormExpander.Appearance = System.Windows.Forms.Appearance.Button + Me.POWaveFormExpander.AutoSize = True + Me.POWaveFormExpander.Cursor = System.Windows.Forms.Cursors.Hand + Me.POWaveFormExpander.Dock = System.Windows.Forms.DockStyle.Top + Me.POWaveFormExpander.FlatAppearance.BorderSize = 0 + Me.POWaveFormExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.POWaveFormExpander.Location = New System.Drawing.Point(0, 58) + Me.POWaveFormExpander.Margin = New System.Windows.Forms.Padding(0) + Me.POWaveFormExpander.Name = "POWaveFormExpander" + Me.POWaveFormExpander.Size = New System.Drawing.Size(183, 25) + Me.POWaveFormExpander.TabIndex = 501 + Me.POWaveFormExpander.TabStop = False + Me.POWaveFormExpander.Text = "Expand..." + Me.POWaveFormExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POWaveFormExpander.UseVisualStyleBackColor = False + ' + 'POWaveFormPart1 + ' + Me.POWaveFormPart1.AutoSize = True + Me.POWaveFormPart1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POWaveFormPart1.ColumnCount = 1 + Me.POWaveFormPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POWaveFormPart1.Controls.Add(Me.TableLayoutPanel1, 0, 0) + Me.POWaveFormPart1.Controls.Add(Me.TableLayoutPanel6, 0, 1) + Me.POWaveFormPart1.Dock = System.Windows.Forms.DockStyle.Top + Me.POWaveFormPart1.Location = New System.Drawing.Point(0, 0) + Me.POWaveFormPart1.Name = "POWaveFormPart1" + Me.POWaveFormPart1.RowCount = 2 + Me.POWaveFormPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWaveFormPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POWaveFormPart1.Size = New System.Drawing.Size(183, 58) + Me.POWaveFormPart1.TabIndex = 4 + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.AutoSize = True + Me.TableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.FlowLayoutPanel1, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.TWFileName, 1, 0) + Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 0) + Me.TableLayoutPanel1.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(183, 30) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'FlowLayoutPanel1 + ' + Me.FlowLayoutPanel1.AutoSize = True + Me.FlowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.FlowLayoutPanel1.Controls.Add(Me.BWLoad) + Me.FlowLayoutPanel1.Controls.Add(Me.BWClear) + Me.FlowLayoutPanel1.Controls.Add(Me.BWLock) + Me.FlowLayoutPanel1.Location = New System.Drawing.Point(3, 3) + Me.FlowLayoutPanel1.Name = "FlowLayoutPanel1" + Me.FlowLayoutPanel1.Size = New System.Drawing.Size(72, 24) + Me.FlowLayoutPanel1.TabIndex = 72 + Me.FlowLayoutPanel1.WrapContents = False + ' + 'TWFileName + ' + Me.TWFileName.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWFileName.Location = New System.Drawing.Point(81, 3) + Me.TWFileName.Name = "TWFileName" + Me.TWFileName.ReadOnly = True + Me.TWFileName.Size = New System.Drawing.Size(99, 23) + Me.TWFileName.TabIndex = 405 + Me.TWFileName.Text = "(None)" + ' + 'TableLayoutPanel6 + ' + Me.TableLayoutPanel6.AutoSize = True + Me.TableLayoutPanel6.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel6.ColumnCount = 3 + Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60.0!)) + Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.0!)) + Me.TableLayoutPanel6.Controls.Add(Me.PictureBox1, 0, 0) + Me.TableLayoutPanel6.Controls.Add(Me.TWPosition2, 1, 0) + Me.TableLayoutPanel6.Controls.Add(Me.TWPosition, 2, 0) + Me.TableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel6.Location = New System.Drawing.Point(0, 30) + Me.TableLayoutPanel6.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel6.Name = "TableLayoutPanel6" + Me.TableLayoutPanel6.RowCount = 1 + Me.TableLayoutPanel6.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.TableLayoutPanel6.Size = New System.Drawing.Size(183, 28) + Me.TableLayoutPanel6.TabIndex = 1 + ' + 'PictureBox1 + ' + Me.PictureBox1.Image = Global.iBMSC.My.Resources.Resources.WAVOffset + Me.PictureBox1.Location = New System.Drawing.Point(3, 0) + Me.PictureBox1.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(24, 24) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 59 + Me.PictureBox1.TabStop = False + ' + 'TWPosition2 + ' + Me.TWPosition2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWPosition2.Enabled = False + Me.TWPosition2.LargeChange = 24 + Me.TWPosition2.Location = New System.Drawing.Point(30, 0) + Me.TWPosition2.Margin = New System.Windows.Forms.Padding(0) + Me.TWPosition2.Maximum = 960 + Me.TWPosition2.Name = "TWPosition2" + Me.TWPosition2.Size = New System.Drawing.Size(91, 28) + Me.TWPosition2.TabIndex = 406 + Me.TWPosition2.TickFrequency = 192 + ' + 'TWPosition + ' + Me.TWPosition.DecimalPlaces = 2 + Me.TWPosition.Dock = System.Windows.Forms.DockStyle.Fill + Me.TWPosition.Enabled = False + Me.TWPosition.Location = New System.Drawing.Point(121, 0) + Me.TWPosition.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.TWPosition.Maximum = New Decimal(New Integer() {192000, 0, 0, 0}) + Me.TWPosition.Name = "TWPosition" + Me.TWPosition.Size = New System.Drawing.Size(59, 23) + Me.TWPosition.TabIndex = 407 + ' + 'POWaveFormSwitch + ' + Me.POWaveFormSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POWaveFormSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POWaveFormSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POWaveFormSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POWaveFormSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POWaveFormSwitch.Location = New System.Drawing.Point(0, 0) + Me.POWaveFormSwitch.Name = "POWaveFormSwitch" + Me.POWaveFormSwitch.Size = New System.Drawing.Size(183, 20) + Me.POWaveFormSwitch.TabIndex = 401 + Me.POWaveFormSwitch.TabStop = False + Me.POWaveFormSwitch.Text = "WaveForm" + Me.POWaveFormSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POWaveFormSwitch.UseCompatibleTextRendering = True + Me.POWaveFormSwitch.UseVisualStyleBackColor = False + ' + 'POGrid + ' + Me.POGrid.AutoSize = True + Me.POGrid.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POGrid.Controls.Add(Me.POGridInner) + Me.POGrid.Controls.Add(Me.POGridSwitch) + Me.POGrid.Dock = System.Windows.Forms.DockStyle.Top + Me.POGrid.Location = New System.Drawing.Point(0, 470) + Me.POGrid.Name = "POGrid" + Me.POGrid.Size = New System.Drawing.Size(183, 230) + Me.POGrid.TabIndex = 2 + ' + 'POGridInner + ' + Me.POGridInner.AutoSize = True + Me.POGridInner.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POGridInner.Controls.Add(Me.POGridPart2) + Me.POGridInner.Controls.Add(Me.POGridExpander) + Me.POGridInner.Controls.Add(Me.POGridPart1) + Me.POGridInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POGridInner.Location = New System.Drawing.Point(0, 20) + Me.POGridInner.Name = "POGridInner" + Me.POGridInner.Size = New System.Drawing.Size(183, 210) + Me.POGridInner.TabIndex = 3 + ' + 'POGridPart2 + ' + Me.POGridPart2.AutoSize = True + Me.POGridPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POGridPart2.ColumnCount = 1 + Me.POGridPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POGridPart2.Controls.Add(Me.TableLayoutPanel5, 0, 1) + Me.POGridPart2.Controls.Add(Me.TableLayoutPanel4, 0, 0) + Me.POGridPart2.Dock = System.Windows.Forms.DockStyle.Top + Me.POGridPart2.Location = New System.Drawing.Point(0, 152) + Me.POGridPart2.Name = "POGridPart2" + Me.POGridPart2.RowCount = 2 + Me.POGridPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POGridPart2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POGridPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.POGridPart2.Size = New System.Drawing.Size(183, 58) + Me.POGridPart2.TabIndex = 1 + ' + 'TableLayoutPanel5 + ' + Me.TableLayoutPanel5.AutoSize = True + Me.TableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel5.ColumnCount = 2 + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel5.Controls.Add(Me.FlowLayoutPanel2, 1, 0) + Me.TableLayoutPanel5.Controls.Add(Me.Label5, 0, 0) + Me.TableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel5.Location = New System.Drawing.Point(0, 29) + Me.TableLayoutPanel5.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel5.Name = "TableLayoutPanel5" + Me.TableLayoutPanel5.RowCount = 1 + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel5.Size = New System.Drawing.Size(183, 29) + Me.TableLayoutPanel5.TabIndex = 46 + ' + 'FlowLayoutPanel2 + ' + Me.FlowLayoutPanel2.AutoSize = True + Me.FlowLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.FlowLayoutPanel2.Controls.Add(Me.cVSLockL) + Me.FlowLayoutPanel2.Controls.Add(Me.cVSLock) + Me.FlowLayoutPanel2.Controls.Add(Me.cVSLockR) + Me.FlowLayoutPanel2.Location = New System.Drawing.Point(114, 3) + Me.FlowLayoutPanel2.Name = "FlowLayoutPanel2" + Me.FlowLayoutPanel2.Size = New System.Drawing.Size(66, 23) + Me.FlowLayoutPanel2.TabIndex = 72 + Me.FlowLayoutPanel2.WrapContents = False + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label5.Location = New System.Drawing.Point(3, 0) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(105, 29) + Me.Label5.TabIndex = 303 + Me.Label5.Text = "Vertical Scroll Lock" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'TableLayoutPanel4 + ' + Me.TableLayoutPanel4.AutoSize = True + Me.TableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel4.ColumnCount = 2 + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel4.Controls.Add(Me.Label1, 0, 0) + Me.TableLayoutPanel4.Controls.Add(Me.CGB, 1, 0) + Me.TableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel4.Location = New System.Drawing.Point(0, 0) + Me.TableLayoutPanel4.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel4.Name = "TableLayoutPanel4" + Me.TableLayoutPanel4.RowCount = 1 + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel4.Size = New System.Drawing.Size(183, 29) + Me.TableLayoutPanel4.TabIndex = 44 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label1.Location = New System.Drawing.Point(3, 0) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(126, 29) + Me.Label1.TabIndex = 302 + Me.Label1.Text = "Number of B Columns" + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'CGB + ' + Me.CGB.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGB.Location = New System.Drawing.Point(135, 3) + Me.CGB.Maximum = New Decimal(New Integer() {999, 0, 0, 0}) + Me.CGB.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.CGB.Name = "CGB" + Me.CGB.Size = New System.Drawing.Size(45, 23) + Me.CGB.TabIndex = 302 + Me.CGB.Value = New Decimal(New Integer() {15, 0, 0, 0}) + ' + 'POGridExpander + ' + Me.POGridExpander.Appearance = System.Windows.Forms.Appearance.Button + Me.POGridExpander.AutoSize = True + Me.POGridExpander.Cursor = System.Windows.Forms.Cursors.Hand + Me.POGridExpander.Dock = System.Windows.Forms.DockStyle.Top + Me.POGridExpander.FlatAppearance.BorderSize = 0 + Me.POGridExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.POGridExpander.Location = New System.Drawing.Point(0, 127) + Me.POGridExpander.Margin = New System.Windows.Forms.Padding(0) + Me.POGridExpander.Name = "POGridExpander" + Me.POGridExpander.Size = New System.Drawing.Size(183, 25) + Me.POGridExpander.TabIndex = 301 + Me.POGridExpander.TabStop = False + Me.POGridExpander.Text = "Expand..." + Me.POGridExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POGridExpander.UseVisualStyleBackColor = False + ' + 'POGridPart1 + ' + Me.POGridPart1.AutoSize = True + Me.POGridPart1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POGridPart1.ColumnCount = 1 + Me.POGridPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POGridPart1.Controls.Add(Me.TableLayoutPanel3, 0, 1) + Me.POGridPart1.Controls.Add(Me.CGDisableVertical, 0, 3) + Me.POGridPart1.Controls.Add(Me.CGSnap, 0, 2) + Me.POGridPart1.Controls.Add(Me.TableLayoutPanel2, 0, 0) + Me.POGridPart1.Dock = System.Windows.Forms.DockStyle.Top + Me.POGridPart1.Location = New System.Drawing.Point(0, 0) + Me.POGridPart1.Name = "POGridPart1" + Me.POGridPart1.RowCount = 4 + Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.POGridPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.POGridPart1.Size = New System.Drawing.Size(183, 127) + Me.POGridPart1.TabIndex = 0 + ' + 'TableLayoutPanel3 + ' + Me.TableLayoutPanel3.AutoSize = True + Me.TableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel3.ColumnCount = 3 + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70.0!)) + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30.0!)) + Me.TableLayoutPanel3.Controls.Add(Me.PictureBox9, 0, 0) + Me.TableLayoutPanel3.Controls.Add(Me.CGHeight2, 1, 0) + Me.TableLayoutPanel3.Controls.Add(Me.CGHeight, 2, 0) + Me.TableLayoutPanel3.Controls.Add(Me.PictureBox10, 0, 1) + Me.TableLayoutPanel3.Controls.Add(Me.CGWidth2, 1, 1) + Me.TableLayoutPanel3.Controls.Add(Me.CGWidth, 2, 1) + Me.TableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel3.Location = New System.Drawing.Point(0, 30) + Me.TableLayoutPanel3.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel3.Name = "TableLayoutPanel3" + Me.TableLayoutPanel3.RowCount = 2 + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.TableLayoutPanel3.Size = New System.Drawing.Size(183, 56) + Me.TableLayoutPanel3.TabIndex = 12 + ' + 'PictureBox9 + ' + Me.PictureBox9.Image = Global.iBMSC.My.Resources.Resources.lgheight + Me.PictureBox9.Location = New System.Drawing.Point(3, 0) + Me.PictureBox9.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox9.Name = "PictureBox9" + Me.PictureBox9.Size = New System.Drawing.Size(24, 24) + Me.PictureBox9.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox9.TabIndex = 27 + Me.PictureBox9.TabStop = False + ' + 'CGHeight2 + ' + Me.CGHeight2.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGHeight2.LargeChange = 4 + Me.CGHeight2.Location = New System.Drawing.Point(30, 0) + Me.CGHeight2.Margin = New System.Windows.Forms.Padding(0) + Me.CGHeight2.Maximum = 20 + Me.CGHeight2.Minimum = 1 + Me.CGHeight2.Name = "CGHeight2" + Me.CGHeight2.Size = New System.Drawing.Size(107, 28) + Me.CGHeight2.TabIndex = 205 + Me.CGHeight2.TickFrequency = 2 + Me.CGHeight2.Value = 4 + ' + 'CGHeight + ' + Me.CGHeight.DecimalPlaces = 2 + Me.CGHeight.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGHeight.Increment = New Decimal(New Integer() {25, 0, 0, 131072}) + Me.CGHeight.Location = New System.Drawing.Point(137, 0) + Me.CGHeight.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.CGHeight.Maximum = New Decimal(New Integer() {99, 0, 0, 0}) + Me.CGHeight.Minimum = New Decimal(New Integer() {25, 0, 0, 131072}) + Me.CGHeight.Name = "CGHeight" + Me.CGHeight.Size = New System.Drawing.Size(43, 23) + Me.CGHeight.TabIndex = 206 + Me.CGHeight.Value = New Decimal(New Integer() {1, 0, 0, 0}) + ' + 'PictureBox10 + ' + Me.PictureBox10.Image = Global.iBMSC.My.Resources.Resources.lgwidth + Me.PictureBox10.Location = New System.Drawing.Point(3, 28) + Me.PictureBox10.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.PictureBox10.Name = "PictureBox10" + Me.PictureBox10.Size = New System.Drawing.Size(24, 24) + Me.PictureBox10.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox10.TabIndex = 28 + Me.PictureBox10.TabStop = False + ' + 'CGWidth2 + ' + Me.CGWidth2.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGWidth2.LargeChange = 4 + Me.CGWidth2.Location = New System.Drawing.Point(30, 28) + Me.CGWidth2.Margin = New System.Windows.Forms.Padding(0) + Me.CGWidth2.Maximum = 20 + Me.CGWidth2.Minimum = 1 + Me.CGWidth2.Name = "CGWidth2" + Me.CGWidth2.Size = New System.Drawing.Size(107, 28) + Me.CGWidth2.TabIndex = 207 + Me.CGWidth2.TickFrequency = 2 + Me.CGWidth2.Value = 4 + ' + 'CGWidth + ' + Me.CGWidth.DecimalPlaces = 2 + Me.CGWidth.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGWidth.Increment = New Decimal(New Integer() {25, 0, 0, 131072}) + Me.CGWidth.Location = New System.Drawing.Point(137, 28) + Me.CGWidth.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.CGWidth.Maximum = New Decimal(New Integer() {99, 0, 0, 0}) + Me.CGWidth.Minimum = New Decimal(New Integer() {25, 0, 0, 131072}) + Me.CGWidth.Name = "CGWidth" + Me.CGWidth.Size = New System.Drawing.Size(43, 23) + Me.CGWidth.TabIndex = 208 + Me.CGWidth.Value = New Decimal(New Integer() {1, 0, 0, 0}) + ' + 'CGDisableVertical + ' + Me.CGDisableVertical.AutoSize = True + Me.CGDisableVertical.Location = New System.Drawing.Point(3, 108) + Me.CGDisableVertical.Margin = New System.Windows.Forms.Padding(3, 0, 3, 0) + Me.CGDisableVertical.Name = "CGDisableVertical" + Me.CGDisableVertical.Size = New System.Drawing.Size(162, 19) + Me.CGDisableVertical.TabIndex = 210 + Me.CGDisableVertical.Text = "Disable vertical moves (D)" + Me.CGDisableVertical.UseVisualStyleBackColor = True + ' + 'CGSnap + ' + Me.CGSnap.AutoSize = True + Me.CGSnap.Checked = True + Me.CGSnap.CheckState = System.Windows.Forms.CheckState.Checked + Me.CGSnap.Location = New System.Drawing.Point(3, 89) + Me.CGSnap.Margin = New System.Windows.Forms.Padding(3, 3, 3, 0) + Me.CGSnap.Name = "CGSnap" + Me.CGSnap.Size = New System.Drawing.Size(109, 19) + Me.CGSnap.TabIndex = 209 + Me.CGSnap.Text = "Snap to grid (G)" + Me.CGSnap.UseVisualStyleBackColor = True + ' + 'TableLayoutPanel2 + ' + Me.TableLayoutPanel2.AutoSize = True + Me.TableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.TableLayoutPanel2.ColumnCount = 4 + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel2.Controls.Add(Me.PictureBox7, 0, 0) + Me.TableLayoutPanel2.Controls.Add(Me.CGDivide, 1, 0) + Me.TableLayoutPanel2.Controls.Add(Me.CGSub, 2, 0) + Me.TableLayoutPanel2.Controls.Add(Me.BGSlash, 3, 0) + Me.TableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel2.Location = New System.Drawing.Point(0, 0) + Me.TableLayoutPanel2.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel2.Name = "TableLayoutPanel2" + Me.TableLayoutPanel2.RowCount = 1 + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel2.Size = New System.Drawing.Size(183, 30) + Me.TableLayoutPanel2.TabIndex = 11 + ' + 'PictureBox7 + ' + Me.PictureBox7.Anchor = System.Windows.Forms.AnchorStyles.None + Me.PictureBox7.Image = Global.iBMSC.My.Resources.Resources.lgpartition + Me.PictureBox7.Location = New System.Drawing.Point(3, 3) + Me.PictureBox7.Name = "PictureBox7" + Me.PictureBox7.Size = New System.Drawing.Size(24, 24) + Me.PictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox7.TabIndex = 25 + Me.PictureBox7.TabStop = False + ' + 'CGDivide + ' + Me.CGDivide.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGDivide.Location = New System.Drawing.Point(33, 3) + Me.CGDivide.Maximum = New Decimal(New Integer() {1920, 0, 0, 0}) + Me.CGDivide.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.CGDivide.Name = "CGDivide" + Me.CGDivide.Size = New System.Drawing.Size(58, 23) + Me.CGDivide.TabIndex = 202 + Me.CGDivide.Value = New Decimal(New Integer() {16, 0, 0, 0}) + ' + 'CGSub + ' + Me.CGSub.Dock = System.Windows.Forms.DockStyle.Fill + Me.CGSub.Location = New System.Drawing.Point(97, 3) + Me.CGSub.Maximum = New Decimal(New Integer() {1920, 0, 0, 0}) + Me.CGSub.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.CGSub.Name = "CGSub" + Me.CGSub.Size = New System.Drawing.Size(58, 23) + Me.CGSub.TabIndex = 203 + Me.CGSub.Value = New Decimal(New Integer() {4, 0, 0, 0}) + ' + 'BGSlash + ' + Me.BGSlash.Anchor = System.Windows.Forms.AnchorStyles.None + Me.BGSlash.Image = Global.iBMSC.My.Resources.Resources.Shortcut + Me.BGSlash.Location = New System.Drawing.Point(158, 4) + Me.BGSlash.Margin = New System.Windows.Forms.Padding(0, 0, 3, 0) + Me.BGSlash.Name = "BGSlash" + Me.BGSlash.Size = New System.Drawing.Size(22, 22) + Me.BGSlash.TabIndex = 204 + Me.BGSlash.UseVisualStyleBackColor = True + ' + 'POGridSwitch + ' + Me.POGridSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POGridSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POGridSwitch.Checked = True + Me.POGridSwitch.CheckState = System.Windows.Forms.CheckState.Checked + Me.POGridSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POGridSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POGridSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POGridSwitch.Location = New System.Drawing.Point(0, 0) + Me.POGridSwitch.Name = "POGridSwitch" + Me.POGridSwitch.Size = New System.Drawing.Size(183, 20) + Me.POGridSwitch.TabIndex = 201 + Me.POGridSwitch.TabStop = False + Me.POGridSwitch.Text = "Grid" + Me.POGridSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POGridSwitch.UseCompatibleTextRendering = True + Me.POGridSwitch.UseVisualStyleBackColor = False + ' + 'POHeader + ' + Me.POHeader.AutoSize = True + Me.POHeader.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POHeader.Controls.Add(Me.POHeaderInner) + Me.POHeader.Controls.Add(Me.POHeaderSwitch) + Me.POHeader.Dock = System.Windows.Forms.DockStyle.Top + Me.POHeader.Location = New System.Drawing.Point(0, 0) + Me.POHeader.Name = "POHeader" + Me.POHeader.Size = New System.Drawing.Size(183, 470) + Me.POHeader.TabIndex = 1 + ' + 'POHeaderInner + ' + Me.POHeaderInner.AutoSize = True + Me.POHeaderInner.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POHeaderInner.Controls.Add(Me.POHeaderPart2) + Me.POHeaderInner.Controls.Add(Me.POHeaderExpander) + Me.POHeaderInner.Controls.Add(Me.POHeaderPart1) + Me.POHeaderInner.Dock = System.Windows.Forms.DockStyle.Top + Me.POHeaderInner.Location = New System.Drawing.Point(0, 20) + Me.POHeaderInner.Name = "POHeaderInner" + Me.POHeaderInner.Size = New System.Drawing.Size(183, 450) + Me.POHeaderInner.TabIndex = 2 + ' + 'POHeaderPart2 + ' + Me.POHeaderPart2.AutoSize = True + Me.POHeaderPart2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POHeaderPart2.ColumnCount = 3 + Me.POHeaderPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70.0!)) + Me.POHeaderPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POHeaderPart2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POHeaderPart2.Controls.Add(Me.Label13, 2, 5) + Me.POHeaderPart2.Controls.Add(Me.THExRank, 1, 5) + Me.POHeaderPart2.Controls.Add(Me.CHLnObj, 1, 7) + Me.POHeaderPart2.Controls.Add(Me.Label23, 0, 5) + Me.POHeaderPart2.Controls.Add(Me.THComment, 1, 6) + Me.POHeaderPart2.Controls.Add(Me.Label24, 0, 7) + Me.POHeaderPart2.Controls.Add(Me.Label15, 0, 0) + Me.POHeaderPart2.Controls.Add(Me.BHStageFile, 2, 2) + Me.POHeaderPart2.Controls.Add(Me.BHBanner, 2, 3) + Me.POHeaderPart2.Controls.Add(Me.Label19, 0, 6) + Me.POHeaderPart2.Controls.Add(Me.BHBackBMP, 2, 4) + Me.POHeaderPart2.Controls.Add(Me.Label17, 0, 1) + Me.POHeaderPart2.Controls.Add(Me.Label16, 0, 2) + Me.POHeaderPart2.Controls.Add(Me.Label12, 0, 3) + Me.POHeaderPart2.Controls.Add(Me.THBackBMP, 1, 4) + Me.POHeaderPart2.Controls.Add(Me.Label11, 0, 4) + Me.POHeaderPart2.Controls.Add(Me.THBanner, 1, 3) + Me.POHeaderPart2.Controls.Add(Me.THStageFile, 1, 2) + Me.POHeaderPart2.Controls.Add(Me.THSubTitle, 1, 0) + Me.POHeaderPart2.Controls.Add(Me.THSubArtist, 1, 1) + Me.POHeaderPart2.Dock = System.Windows.Forms.DockStyle.Top + Me.POHeaderPart2.Location = New System.Drawing.Point(0, 250) + Me.POHeaderPart2.Name = "POHeaderPart2" + Me.POHeaderPart2.RowCount = 8 + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.POHeaderPart2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.POHeaderPart2.Size = New System.Drawing.Size(183, 200) + Me.POHeaderPart2.TabIndex = 102 + ' + 'Label13 + ' + Me.Label13.AutoSize = True + Me.Label13.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label13.Location = New System.Drawing.Point(158, 125) + Me.Label13.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.Label13.Name = "Label13" + Me.Label13.Size = New System.Drawing.Size(25, 25) + Me.Label13.TabIndex = 115 + Me.Label13.Text = "(%)" + Me.Label13.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'THExRank + ' + Me.THExRank.Dock = System.Windows.Forms.DockStyle.Fill + Me.THExRank.Location = New System.Drawing.Point(70, 125) + Me.THExRank.Margin = New System.Windows.Forms.Padding(0) + Me.THExRank.Name = "THExRank" + Me.THExRank.Size = New System.Drawing.Size(85, 23) + Me.THExRank.TabIndex = 114 + ' + 'CHLnObj + ' + Me.POHeaderPart2.SetColumnSpan(Me.CHLnObj, 2) + Me.CHLnObj.Dock = System.Windows.Forms.DockStyle.Fill + Me.CHLnObj.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.CHLnObj.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CHLnObj.Items.AddRange(New Object() {"None (#LnType 1)", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "0G", "0H", "0I", "0J", "0K", "0L", "0M", "0N", "0O", "0P", "0Q", "0R", "0S", "0T", "0U", "0V", "0W", "0X", "0Y", "0Z", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "1G", "1H", "1I", "1J", "1K", "1L", "1M", "1N", "1O", "1P", "1Q", "1R", "1S", "1T", "1U", "1V", "1W", "1X", "1Y", "1Z", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "2G", "2H", "2I", "2J", "2K", "2L", "2M", "2N", "2O", "2P", "2Q", "2R", "2S", "2T", "2U", "2V", "2W", "2X", "2Y", "2Z", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F", "3G", "3H", "3I", "3J", "3K", "3L", "3M", "3N", "3O", "3P", "3Q", "3R", "3S", "3T", "3U", "3V", "3W", "3X", "3Y", "3Z", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "4G", "4H", "4I", "4J", "4K", "4L", "4M", "4N", "4O", "4P", "4Q", "4R", "4S", "4T", "4U", "4V", "4W", "4X", "4Y", "4Z", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F", "5G", "5H", "5I", "5J", "5K", "5L", "5M", "5N", "5O", "5P", "5Q", "5R", "5S", "5T", "5U", "5V", "5W", "5X", "5Y", "5Z", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F", "6G", "6H", "6I", "6J", "6K", "6L", "6M", "6N", "6O", "6P", "6Q", "6R", "6S", "6T", "6U", "6V", "6W", "6X", "6Y", "6Z", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "7F", "7G", "7H", "7I", "7J", "7K", "7L", "7M", "7N", "7O", "7P", "7Q", "7R", "7S", "7T", "7U", "7V", "7W", "7X", "7Y", "7Z", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8A", "8B", "8C", "8D", "8E", "8F", "8G", "8H", "8I", "8J", "8K", "8L", "8M", "8N", "8O", "8P", "8Q", "8R", "8S", "8T", "8U", "8V", "8W", "8X", "8Y", "8Z", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F", "9G", "9H", "9I", "9J", "9K", "9L", "9M", "9N", "9O", "9P", "9Q", "9R", "9S", "9T", "9U", "9V", "9W", "9X", "9Y", "9Z", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CI", "CJ", "CK", "CL", "CM", "CN", "CO", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ", "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "DG", "DH", "DI", "DJ", "DK", "DL", "DM", "DN", "DO", "DP", "DQ", "DR", "DS", "DT", "DU", "DV", "DW", "DX", "DY", "DZ", "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EI", "EJ", "EK", "EL", "EM", "EN", "EO", "EP", "EQ", "ER", "ES", "ET", "EU", "EV", "EW", "EX", "EY", "EZ", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FI", "FJ", "FK", "FL", "FM", "FN", "FO", "FP", "FQ", "FR", "FS", "FT", "FU", "FV", "FW", "FX", "FY", "FZ", "G0", "G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8", "G9", "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GI", "GJ", "GK", "GL", "GM", "GN", "GO", "GP", "GQ", "GR", "GS", "GT", "GU", "GV", "GW", "GX", "GY", "GZ", "H0", "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HI", "HJ", "HK", "HL", "HM", "HN", "HO", "HP", "HQ", "HR", "HS", "HT", "HU", "HV", "HW", "HX", "HY", "HZ", "I0", "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8", "I9", "IA", "IB", "IC", "ID", "IE", "IF", "IG", "IH", "II", "IJ", "IK", "IL", "IM", "IN", "IO", "IP", "IQ", "IR", "IS", "IT", "IU", "IV", "IW", "IX", "IY", "IZ", "J0", "J1", "J2", "J3", "J4", "J5", "J6", "J7", "J8", "J9", "JA", "JB", "JC", "JD", "JE", "JF", "JG", "JH", "JI", "JJ", "JK", "JL", "JM", "JN", "JO", "JP", "JQ", "JR", "JS", "JT", "JU", "JV", "JW", "JX", "JY", "JZ", "K0", "K1", "K2", "K3", "K4", "K5", "K6", "K7", "K8", "K9", "KA", "KB", "KC", "KD", "KE", "KF", "KG", "KH", "KI", "KJ", "KK", "KL", "KM", "KN", "KO", "KP", "KQ", "KR", "KS", "KT", "KU", "KV", "KW", "KX", "KY", "KZ", "L0", "L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9", "LA", "LB", "LC", "LD", "LE", "LF", "LG", "LH", "LI", "LJ", "LK", "LL", "LM", "LN", "LO", "LP", "LQ", "LR", "LS", "LT", "LU", "LV", "LW", "LX", "LY", "LZ", "M0", "M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "MA", "MB", "MC", "MD", "ME", "MF", "MG", "MH", "MI", "MJ", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "N0", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "NA", "NB", "NC", "ND", "NE", "NF", "NG", "NH", "NI", "NJ", "NK", "NL", "NM", "NN", "NO", "NP", "NQ", "NR", "NS", "NT", "NU", "NV", "NW", "NX", "NY", "NZ", "O0", "O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8", "O9", "OA", "OB", "OC", "OD", "OE", "OF", "OG", "OH", "OI", "OJ", "OK", "OL", "OM", "ON", "OO", "OP", "OQ", "OR", "OS", "OT", "OU", "OV", "OW", "OX", "OY", "OZ", "P0", "P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ", "PK", "PL", "PM", "PN", "PO", "PP", "PQ", "PR", "PS", "PT", "PU", "PV", "PW", "PX", "PY", "PZ", "Q0", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH", "QI", "QJ", "QK", "QL", "QM", "QN", "QO", "QP", "QQ", "QR", "QS", "QT", "QU", "QV", "QW", "QX", "QY", "QZ", "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8", "R9", "RA", "RB", "RC", "RD", "RE", "RF", "RG", "RH", "RI", "RJ", "RK", "RL", "RM", "RN", "RO", "RP", "RQ", "RR", "RS", "RT", "RU", "RV", "RW", "RX", "RY", "RZ", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SP", "SQ", "SR", "SS", "ST", "SU", "SV", "SW", "SX", "SY", "SZ", "T0", "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "TA", "TB", "TC", "TD", "TE", "TF", "TG", "TH", "TI", "TJ", "TK", "TL", "TM", "TN", "TO", "TP", "TQ", "TR", "TS", "TT", "TU", "TV", "TW", "TX", "TY", "TZ", "U0", "U1", "U2", "U3", "U4", "U5", "U6", "U7", "U8", "U9", "UA", "UB", "UC", "UD", "UE", "UF", "UG", "UH", "UI", "UJ", "UK", "UL", "UM", "UN", "UO", "UP", "UQ", "UR", "US", "UT", "UU", "UV", "UW", "UX", "UY", "UZ", "V0", "V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "VA", "VB", "VC", "VD", "VE", "VF", "VG", "VH", "VI", "VJ", "VK", "VL", "VM", "VN", "VO", "VP", "VQ", "VR", "VS", "VT", "VU", "VV", "VW", "VX", "VY", "VZ", "W0", "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8", "W9", "WA", "WB", "WC", "WD", "WE", "WF", "WG", "WH", "WI", "WJ", "WK", "WL", "WM", "WN", "WO", "WP", "WQ", "WR", "WS", "WT", "WU", "WV", "WW", "WX", "WY", "WZ", "X0", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "XA", "XB", "XC", "XD", "XE", "XF", "XG", "XH", "XI", "XJ", "XK", "XL", "XM", "XN", "XO", "XP", "XQ", "XR", "XS", "XT", "XU", "XV", "XW", "XX", "XY", "XZ", "Y0", "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7", "Y8", "Y9", "YA", "YB", "YC", "YD", "YE", "YF", "YG", "YH", "YI", "YJ", "YK", "YL", "YM", "YN", "YO", "YP", "YQ", "YR", "YS", "YT", "YU", "YV", "YW", "YX", "YY", "YZ", "Z0", "Z1", "Z2", "Z3", "Z4", "Z5", "Z6", "Z7", "Z8", "Z9", "ZA", "ZB", "ZC", "ZD", "ZE", "ZF", "ZG", "ZH", "ZI", "ZJ", "ZK", "ZL", "ZM", "ZN", "ZO", "ZP", "ZQ", "ZR", "ZS", "ZT", "ZU", "ZV", "ZW", "ZX", "ZY", "ZZ"}) + Me.CHLnObj.Location = New System.Drawing.Point(70, 175) + Me.CHLnObj.Margin = New System.Windows.Forms.Padding(0) + Me.CHLnObj.Name = "CHLnObj" + Me.CHLnObj.Size = New System.Drawing.Size(113, 23) + Me.CHLnObj.TabIndex = 119 + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Dock = System.Windows.Forms.DockStyle.Right + Me.Label23.Location = New System.Drawing.Point(22, 125) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(45, 25) + Me.Label23.TabIndex = 113 + Me.Label23.Text = "ExRank" + Me.Label23.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'THComment + ' + Me.POHeaderPart2.SetColumnSpan(Me.THComment, 2) + Me.THComment.Dock = System.Windows.Forms.DockStyle.Fill + Me.THComment.Location = New System.Drawing.Point(70, 150) + Me.THComment.Margin = New System.Windows.Forms.Padding(0) + Me.THComment.Name = "THComment" + Me.THComment.Size = New System.Drawing.Size(113, 23) + Me.THComment.TabIndex = 117 + ' + 'Label24 + ' + Me.Label24.AutoSize = True + Me.Label24.Dock = System.Windows.Forms.DockStyle.Right + Me.Label24.Location = New System.Drawing.Point(26, 175) + Me.Label24.Name = "Label24" + Me.Label24.Size = New System.Drawing.Size(41, 25) + Me.Label24.TabIndex = 118 + Me.Label24.Text = "LNObj" + Me.Label24.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label15 + ' + Me.Label15.AutoSize = True + Me.Label15.Dock = System.Windows.Forms.DockStyle.Right + Me.Label15.Location = New System.Drawing.Point(18, 0) + Me.Label15.Name = "Label15" + Me.Label15.Size = New System.Drawing.Size(49, 25) + Me.Label15.TabIndex = 100 + Me.Label15.Text = "SubTitle" + Me.Label15.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'BHStageFile + ' + Me.BHStageFile.Dock = System.Windows.Forms.DockStyle.Fill + Me.BHStageFile.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BHStageFile.Location = New System.Drawing.Point(158, 50) + Me.BHStageFile.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.BHStageFile.Name = "BHStageFile" + Me.BHStageFile.Size = New System.Drawing.Size(25, 25) + Me.BHStageFile.TabIndex = 106 + Me.BHStageFile.Text = "..." + Me.BHStageFile.UseVisualStyleBackColor = True + ' + 'BHBanner + ' + Me.BHBanner.Dock = System.Windows.Forms.DockStyle.Fill + Me.BHBanner.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BHBanner.Location = New System.Drawing.Point(158, 75) + Me.BHBanner.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.BHBanner.Name = "BHBanner" + Me.BHBanner.Size = New System.Drawing.Size(25, 25) + Me.BHBanner.TabIndex = 109 + Me.BHBanner.Text = "..." + Me.BHBanner.UseVisualStyleBackColor = True + ' + 'Label19 + ' + Me.Label19.AutoSize = True + Me.Label19.Dock = System.Windows.Forms.DockStyle.Right + Me.Label19.Location = New System.Drawing.Point(6, 150) + Me.Label19.Name = "Label19" + Me.Label19.Size = New System.Drawing.Size(61, 25) + Me.Label19.TabIndex = 116 + Me.Label19.Text = "Comment" + Me.Label19.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'BHBackBMP + ' + Me.BHBackBMP.Dock = System.Windows.Forms.DockStyle.Fill + Me.BHBackBMP.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BHBackBMP.Location = New System.Drawing.Point(158, 100) + Me.BHBackBMP.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.BHBackBMP.Name = "BHBackBMP" + Me.BHBackBMP.Size = New System.Drawing.Size(25, 25) + Me.BHBackBMP.TabIndex = 112 + Me.BHBackBMP.Text = "..." + Me.BHBackBMP.UseVisualStyleBackColor = True + ' + 'Label17 + ' + Me.Label17.AutoSize = True + Me.Label17.Dock = System.Windows.Forms.DockStyle.Right + Me.Label17.Location = New System.Drawing.Point(12, 25) + Me.Label17.Name = "Label17" + Me.Label17.Size = New System.Drawing.Size(55, 25) + Me.Label17.TabIndex = 102 + Me.Label17.Text = "SubArtist" + Me.Label17.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label16 + ' + Me.Label16.AutoSize = True + Me.Label16.Dock = System.Windows.Forms.DockStyle.Right + Me.Label16.Location = New System.Drawing.Point(10, 50) + Me.Label16.Name = "Label16" + Me.Label16.Size = New System.Drawing.Size(57, 25) + Me.Label16.TabIndex = 104 + Me.Label16.Text = "Stage File" + Me.Label16.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label12 + ' + Me.Label12.AutoSize = True + Me.Label12.Dock = System.Windows.Forms.DockStyle.Right + Me.Label12.Location = New System.Drawing.Point(23, 75) + Me.Label12.Name = "Label12" + Me.Label12.Size = New System.Drawing.Size(44, 25) + Me.Label12.TabIndex = 107 + Me.Label12.Text = "Banner" + Me.Label12.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'THBackBMP + ' + Me.THBackBMP.Dock = System.Windows.Forms.DockStyle.Fill + Me.THBackBMP.Location = New System.Drawing.Point(70, 100) + Me.THBackBMP.Margin = New System.Windows.Forms.Padding(0) + Me.THBackBMP.Name = "THBackBMP" + Me.THBackBMP.Size = New System.Drawing.Size(85, 23) + Me.THBackBMP.TabIndex = 111 + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.Dock = System.Windows.Forms.DockStyle.Right + Me.Label11.Location = New System.Drawing.Point(7, 100) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(60, 25) + Me.Label11.TabIndex = 110 + Me.Label11.Text = "Back BMP" + Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'THBanner + ' + Me.THBanner.Dock = System.Windows.Forms.DockStyle.Fill + Me.THBanner.Location = New System.Drawing.Point(70, 75) + Me.THBanner.Margin = New System.Windows.Forms.Padding(0) + Me.THBanner.Name = "THBanner" + Me.THBanner.Size = New System.Drawing.Size(85, 23) + Me.THBanner.TabIndex = 108 + ' + 'THStageFile + ' + Me.THStageFile.Dock = System.Windows.Forms.DockStyle.Fill + Me.THStageFile.Location = New System.Drawing.Point(70, 50) + Me.THStageFile.Margin = New System.Windows.Forms.Padding(0) + Me.THStageFile.Name = "THStageFile" + Me.THStageFile.Size = New System.Drawing.Size(85, 23) + Me.THStageFile.TabIndex = 105 + ' + 'THSubTitle + ' + Me.POHeaderPart2.SetColumnSpan(Me.THSubTitle, 2) + Me.THSubTitle.Dock = System.Windows.Forms.DockStyle.Fill + Me.THSubTitle.Location = New System.Drawing.Point(70, 0) + Me.THSubTitle.Margin = New System.Windows.Forms.Padding(0) + Me.THSubTitle.Name = "THSubTitle" + Me.THSubTitle.Size = New System.Drawing.Size(113, 23) + Me.THSubTitle.TabIndex = 101 + ' + 'THSubArtist + ' + Me.POHeaderPart2.SetColumnSpan(Me.THSubArtist, 2) + Me.THSubArtist.Dock = System.Windows.Forms.DockStyle.Fill + Me.THSubArtist.Location = New System.Drawing.Point(70, 25) + Me.THSubArtist.Margin = New System.Windows.Forms.Padding(0) + Me.THSubArtist.Name = "THSubArtist" + Me.THSubArtist.Size = New System.Drawing.Size(113, 23) + Me.THSubArtist.TabIndex = 103 + ' + 'POHeaderExpander + ' + Me.POHeaderExpander.Appearance = System.Windows.Forms.Appearance.Button + Me.POHeaderExpander.AutoSize = True + Me.POHeaderExpander.Cursor = System.Windows.Forms.Cursors.Hand + Me.POHeaderExpander.Dock = System.Windows.Forms.DockStyle.Top + Me.POHeaderExpander.FlatAppearance.BorderSize = 0 + Me.POHeaderExpander.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.POHeaderExpander.Location = New System.Drawing.Point(0, 225) + Me.POHeaderExpander.Margin = New System.Windows.Forms.Padding(0) + Me.POHeaderExpander.Name = "POHeaderExpander" + Me.POHeaderExpander.Size = New System.Drawing.Size(183, 25) + Me.POHeaderExpander.TabIndex = 101 + Me.POHeaderExpander.TabStop = False + Me.POHeaderExpander.Text = "Expand..." + Me.POHeaderExpander.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POHeaderExpander.UseVisualStyleBackColor = False + ' + 'POHeaderPart1 + ' + Me.POHeaderPart1.AutoSize = True + Me.POHeaderPart1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.POHeaderPart1.ColumnCount = 3 + Me.POHeaderPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70.0!)) + Me.POHeaderPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.POHeaderPart1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + Me.POHeaderPart1.Controls.Add(Me.CHDifficulty, 1, 6) + Me.POHeaderPart1.Controls.Add(Me.Label3, 0, 0) + Me.POHeaderPart1.Controls.Add(Me.Label25, 2, 8) + Me.POHeaderPart1.Controls.Add(Me.CHRank, 1, 5) + Me.POHeaderPart1.Controls.Add(Me.Label10, 0, 5) + Me.POHeaderPart1.Controls.Add(Me.CHPlayer, 1, 4) + Me.POHeaderPart1.Controls.Add(Me.Label4, 0, 1) + Me.POHeaderPart1.Controls.Add(Me.THGenre, 1, 2) + Me.POHeaderPart1.Controls.Add(Me.THTotal, 1, 8) + Me.POHeaderPart1.Controls.Add(Me.THBPM, 1, 3) + Me.POHeaderPart1.Controls.Add(Me.Label20, 0, 8) + Me.POHeaderPart1.Controls.Add(Me.Label2, 0, 2) + Me.POHeaderPart1.Controls.Add(Me.THArtist, 1, 1) + Me.POHeaderPart1.Controls.Add(Me.THTitle, 1, 0) + Me.POHeaderPart1.Controls.Add(Me.Label9, 0, 3) + Me.POHeaderPart1.Controls.Add(Me.Label8, 0, 4) + Me.POHeaderPart1.Controls.Add(Me.Label6, 0, 7) + Me.POHeaderPart1.Controls.Add(Me.THPlayLevel, 1, 7) + Me.POHeaderPart1.Controls.Add(Me.Label21, 0, 6) + Me.POHeaderPart1.Dock = System.Windows.Forms.DockStyle.Top + Me.POHeaderPart1.Location = New System.Drawing.Point(0, 0) + Me.POHeaderPart1.Name = "POHeaderPart1" + Me.POHeaderPart1.RowCount = 9 + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.POHeaderPart1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.POHeaderPart1.Size = New System.Drawing.Size(183, 225) + Me.POHeaderPart1.TabIndex = 25 + ' + 'CHDifficulty + ' + Me.POHeaderPart1.SetColumnSpan(Me.CHDifficulty, 2) + Me.CHDifficulty.Dock = System.Windows.Forms.DockStyle.Fill + Me.CHDifficulty.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.CHDifficulty.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CHDifficulty.Items.AddRange(New Object() {"None", "1 - EZ / Beginner", "2 - NM / Normal", "3 - HD / Hyper", "4 - MX / Another", "5 - SC / Insane"}) + Me.CHDifficulty.Location = New System.Drawing.Point(70, 150) + Me.CHDifficulty.Margin = New System.Windows.Forms.Padding(0) + Me.CHDifficulty.Name = "CHDifficulty" + Me.CHDifficulty.Size = New System.Drawing.Size(113, 23) + Me.CHDifficulty.TabIndex = 13 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Dock = System.Windows.Forms.DockStyle.Right + Me.Label3.Location = New System.Drawing.Point(38, 0) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(29, 25) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Title" + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label25 + ' + Me.Label25.AutoSize = True + Me.Label25.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label25.Location = New System.Drawing.Point(158, 200) + Me.Label25.Margin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.Label25.Name = "Label25" + Me.Label25.Size = New System.Drawing.Size(25, 25) + Me.Label25.TabIndex = 18 + Me.Label25.Text = "(%)" + Me.Label25.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'CHRank + ' + Me.POHeaderPart1.SetColumnSpan(Me.CHRank, 2) + Me.CHRank.Dock = System.Windows.Forms.DockStyle.Fill + Me.CHRank.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.CHRank.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CHRank.Items.AddRange(New Object() {"0 - Very Hard", "1 - Hard", "2 - Normal", "3 - Easy", "4 - Very Easy"}) + Me.CHRank.Location = New System.Drawing.Point(70, 125) + Me.CHRank.Margin = New System.Windows.Forms.Padding(0) + Me.CHRank.Name = "CHRank" + Me.CHRank.Size = New System.Drawing.Size(113, 23) + Me.CHRank.TabIndex = 11 + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Dock = System.Windows.Forms.DockStyle.Right + Me.Label10.Location = New System.Drawing.Point(3, 125) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(64, 25) + Me.Label10.TabIndex = 10 + Me.Label10.Text = "JudgeRank" + Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'CHPlayer + ' + Me.POHeaderPart1.SetColumnSpan(Me.CHPlayer, 2) + Me.CHPlayer.Dock = System.Windows.Forms.DockStyle.Fill + Me.CHPlayer.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.CHPlayer.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.CHPlayer.Items.AddRange(New Object() {"1 - Single Play", "2 - Couple Play", "3 - Double Play"}) + Me.CHPlayer.Location = New System.Drawing.Point(70, 100) + Me.CHPlayer.Margin = New System.Windows.Forms.Padding(0) + Me.CHPlayer.Name = "CHPlayer" + Me.CHPlayer.Size = New System.Drawing.Size(113, 23) + Me.CHPlayer.TabIndex = 9 + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Dock = System.Windows.Forms.DockStyle.Right + Me.Label4.Location = New System.Drawing.Point(32, 25) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(35, 25) + Me.Label4.TabIndex = 2 + Me.Label4.Text = "Artist" + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'THGenre + ' + Me.POHeaderPart1.SetColumnSpan(Me.THGenre, 2) + Me.THGenre.Dock = System.Windows.Forms.DockStyle.Fill + Me.THGenre.Location = New System.Drawing.Point(70, 50) + Me.THGenre.Margin = New System.Windows.Forms.Padding(0) + Me.THGenre.Name = "THGenre" + Me.THGenre.Size = New System.Drawing.Size(113, 23) + Me.THGenre.TabIndex = 5 + ' + 'THTotal + ' + Me.THTotal.Dock = System.Windows.Forms.DockStyle.Fill + Me.THTotal.Location = New System.Drawing.Point(70, 200) + Me.THTotal.Margin = New System.Windows.Forms.Padding(0) + Me.THTotal.Name = "THTotal" + Me.THTotal.Size = New System.Drawing.Size(85, 23) + Me.THTotal.TabIndex = 17 + ' + 'THBPM + ' + Me.POHeaderPart1.SetColumnSpan(Me.THBPM, 2) + Me.THBPM.DecimalPlaces = 4 + Me.THBPM.Dock = System.Windows.Forms.DockStyle.Fill + Me.THBPM.Increment = New Decimal(New Integer() {10, 0, 0, 0}) + Me.THBPM.Location = New System.Drawing.Point(70, 75) + Me.THBPM.Margin = New System.Windows.Forms.Padding(0) + Me.THBPM.Maximum = New Decimal(New Integer() {655359999, 0, 0, 262144}) + Me.THBPM.Minimum = New Decimal(New Integer() {1, 0, 0, 262144}) + Me.THBPM.Name = "THBPM" + Me.THBPM.Size = New System.Drawing.Size(113, 23) + Me.THBPM.TabIndex = 7 + Me.THBPM.Value = New Decimal(New Integer() {120, 0, 0, 0}) + ' + 'Label20 + ' + Me.Label20.AutoSize = True + Me.Label20.Dock = System.Windows.Forms.DockStyle.Right + Me.Label20.Location = New System.Drawing.Point(35, 200) + Me.Label20.Name = "Label20" + Me.Label20.Size = New System.Drawing.Size(32, 25) + Me.Label20.TabIndex = 16 + Me.Label20.Text = "Total" + Me.Label20.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Dock = System.Windows.Forms.DockStyle.Right + Me.Label2.Location = New System.Drawing.Point(29, 50) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(38, 25) + Me.Label2.TabIndex = 4 + Me.Label2.Text = "Genre" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'THArtist + ' + Me.POHeaderPart1.SetColumnSpan(Me.THArtist, 2) + Me.THArtist.Dock = System.Windows.Forms.DockStyle.Fill + Me.THArtist.Location = New System.Drawing.Point(70, 25) + Me.THArtist.Margin = New System.Windows.Forms.Padding(0) + Me.THArtist.Name = "THArtist" + Me.THArtist.Size = New System.Drawing.Size(113, 23) + Me.THArtist.TabIndex = 3 + ' + 'THTitle + ' + Me.POHeaderPart1.SetColumnSpan(Me.THTitle, 2) + Me.THTitle.Dock = System.Windows.Forms.DockStyle.Fill + Me.THTitle.Location = New System.Drawing.Point(70, 0) + Me.THTitle.Margin = New System.Windows.Forms.Padding(0) + Me.THTitle.Name = "THTitle" + Me.THTitle.Size = New System.Drawing.Size(113, 23) + Me.THTitle.TabIndex = 1 + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Dock = System.Windows.Forms.DockStyle.Right + Me.Label9.Location = New System.Drawing.Point(35, 75) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(32, 25) + Me.Label9.TabIndex = 6 + Me.Label9.Text = "BPM" + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.Dock = System.Windows.Forms.DockStyle.Right + Me.Label8.Location = New System.Drawing.Point(28, 100) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(39, 25) + Me.Label8.TabIndex = 8 + Me.Label8.Text = "Player" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Dock = System.Windows.Forms.DockStyle.Right + Me.Label6.Location = New System.Drawing.Point(8, 175) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(59, 25) + Me.Label6.TabIndex = 14 + Me.Label6.Text = "Play Level" + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'THPlayLevel + ' + Me.POHeaderPart1.SetColumnSpan(Me.THPlayLevel, 2) + Me.THPlayLevel.Dock = System.Windows.Forms.DockStyle.Fill + Me.THPlayLevel.Location = New System.Drawing.Point(70, 175) + Me.THPlayLevel.Margin = New System.Windows.Forms.Padding(0) + Me.THPlayLevel.Name = "THPlayLevel" + Me.THPlayLevel.Size = New System.Drawing.Size(113, 23) + Me.THPlayLevel.TabIndex = 15 + ' + 'Label21 + ' + Me.Label21.AutoSize = True + Me.Label21.Dock = System.Windows.Forms.DockStyle.Right + Me.Label21.Location = New System.Drawing.Point(12, 150) + Me.Label21.Name = "Label21" + Me.Label21.Size = New System.Drawing.Size(55, 25) + Me.Label21.TabIndex = 12 + Me.Label21.Text = "Difficulty" + Me.Label21.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'POHeaderSwitch + ' + Me.POHeaderSwitch.Appearance = System.Windows.Forms.Appearance.Button + Me.POHeaderSwitch.BackColor = System.Drawing.SystemColors.Control + Me.POHeaderSwitch.Checked = True + Me.POHeaderSwitch.CheckState = System.Windows.Forms.CheckState.Checked + Me.POHeaderSwitch.Cursor = System.Windows.Forms.Cursors.Hand + Me.POHeaderSwitch.Dock = System.Windows.Forms.DockStyle.Top + Me.POHeaderSwitch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.POHeaderSwitch.Location = New System.Drawing.Point(0, 0) + Me.POHeaderSwitch.Name = "POHeaderSwitch" + Me.POHeaderSwitch.Size = New System.Drawing.Size(183, 20) + Me.POHeaderSwitch.TabIndex = 1 + Me.POHeaderSwitch.TabStop = False + Me.POHeaderSwitch.Text = "Header" + Me.POHeaderSwitch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.POHeaderSwitch.UseCompatibleTextRendering = True + Me.POHeaderSwitch.UseVisualStyleBackColor = False + ' + 'POptionsScroll + ' + Me.POptionsScroll.AutoScroll = True + Me.POptionsScroll.Controls.Add(Me.POptions) + Me.POptionsScroll.Dock = System.Windows.Forms.DockStyle.Right + Me.POptionsScroll.Location = New System.Drawing.Point(1273, 0) + Me.POptionsScroll.Name = "POptionsScroll" + Me.POptionsScroll.Size = New System.Drawing.Size(200, 781) + Me.POptionsScroll.TabIndex = 28 + ' + 'TimerInternalPlay + ' + Me.TimerInternalPlay.Interval = 1 + ' + 'TimerPreviewNote + ' + Me.TimerPreviewNote.Interval = 1 + ' + 'TimerRefreshPanel + ' + Me.TimerRefreshPanel.Interval = 15 + ' + 'TimerExternalExpansion + ' + Me.TimerExternalExpansion.Interval = 3000 + ' + 'TimerLoadWaveform + ' + Me.TimerLoadWaveform.Interval = 1 + ' + 'TimerLWAVRefresh + ' + Me.TimerLWAVRefresh.Interval = 15 + ' + 'TimerLBMPRefresh + ' + Me.TimerLBMPRefresh.Interval = 15 + ' + 'MainWindow + ' + Me.AllowDrop = True + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.ClientSize = New System.Drawing.Size(1473, 781) + Me.Controls.Add(Me.ToolStripContainer1) + Me.Controls.Add(Me.pStatus) + Me.Controls.Add(Me.POptionsResizer) + Me.Controls.Add(Me.POptionsScroll) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.KeyPreview = True + Me.MainMenuStrip = Me.mnMain + Me.Name = "MainWindow" + Me.cmnLanguage.ResumeLayout(False) + Me.cmnTheme.ResumeLayout(False) + Me.Menu1.ResumeLayout(False) + Me.mnMain.ResumeLayout(False) + Me.mnMain.PerformLayout() + Me.cmnConversion.ResumeLayout(False) + Me.TBMain.ResumeLayout(False) + Me.TBMain.PerformLayout() + Me.pStatus.ResumeLayout(False) + Me.pStatus.PerformLayout() + Me.FStatus2.ResumeLayout(False) + Me.FStatus2.PerformLayout() + Me.FStatus.ResumeLayout(False) + Me.FStatus.PerformLayout() + Me.ToolStripContainer1.ContentPanel.ResumeLayout(False) + Me.ToolStripContainer1.TopToolStripPanel.ResumeLayout(False) + Me.ToolStripContainer1.TopToolStripPanel.PerformLayout() + Me.ToolStripContainer1.ResumeLayout(False) + Me.ToolStripContainer1.PerformLayout() + Me.PMain.ResumeLayout(False) + Me.PMainIn.ResumeLayout(False) + CType(Me.PBOnTabHover, System.ComponentModel.ISupportInitialize).EndInit() + Me.PMainR.ResumeLayout(False) + Me.PMainL.ResumeLayout(False) + Me.POptions.ResumeLayout(False) + Me.POptions.PerformLayout() + Me.POExpansion.ResumeLayout(False) + Me.POExpansionInner.ResumeLayout(False) + Me.POExpansionInner.PerformLayout() + Me.POBeat.ResumeLayout(False) + Me.POBeatInner.ResumeLayout(False) + Me.POBeatInner.PerformLayout() + Me.TableLayoutPanel7.ResumeLayout(False) + Me.TableLayoutPanel7.PerformLayout() + CType(Me.nBeatD, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.nBeatN, System.ComponentModel.ISupportInitialize).EndInit() + Me.POBeatPart2.ResumeLayout(False) + Me.POBeatPart2.PerformLayout() + Me.POWAV.ResumeLayout(False) + Me.POWAV.PerformLayout() + Me.POBMP.ResumeLayout(False) + Me.POBMPInner.ResumeLayout(False) + Me.POBMPInner.PerformLayout() + Me.FlowLayoutPanel4.ResumeLayout(False) + Me.POBMPPart2.ResumeLayout(False) + Me.POBMPPart2.PerformLayout() + Me.POWAVInner.ResumeLayout(False) + Me.POWAVInner.PerformLayout() + Me.FlowLayoutPanel3.ResumeLayout(False) + Me.POWAVPart2.ResumeLayout(False) + Me.POWAVPart2.PerformLayout() + Me.POWaveForm.ResumeLayout(False) + Me.POWaveForm.PerformLayout() + Me.POWaveFormInner.ResumeLayout(False) + Me.POWaveFormInner.PerformLayout() + Me.POWaveFormPart2.ResumeLayout(False) + Me.POWaveFormPart2.PerformLayout() + CType(Me.TWSaturation, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWTransparency, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWPrecision, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWWidth, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox5, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWLeft, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox6, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWSaturation2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWLeft2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWTransparency2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWWidth2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWPrecision2, System.ComponentModel.ISupportInitialize).EndInit() + Me.POWaveFormPart1.ResumeLayout(False) + Me.POWaveFormPart1.PerformLayout() + Me.TableLayoutPanel1.ResumeLayout(False) + Me.TableLayoutPanel1.PerformLayout() + Me.FlowLayoutPanel1.ResumeLayout(False) + Me.TableLayoutPanel6.ResumeLayout(False) + Me.TableLayoutPanel6.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWPosition2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TWPosition, System.ComponentModel.ISupportInitialize).EndInit() + Me.POGrid.ResumeLayout(False) + Me.POGrid.PerformLayout() + Me.POGridInner.ResumeLayout(False) + Me.POGridInner.PerformLayout() + Me.POGridPart2.ResumeLayout(False) + Me.POGridPart2.PerformLayout() + Me.TableLayoutPanel5.ResumeLayout(False) + Me.TableLayoutPanel5.PerformLayout() + Me.FlowLayoutPanel2.ResumeLayout(False) + Me.TableLayoutPanel4.ResumeLayout(False) + Me.TableLayoutPanel4.PerformLayout() + CType(Me.CGB, System.ComponentModel.ISupportInitialize).EndInit() + Me.POGridPart1.ResumeLayout(False) + Me.POGridPart1.PerformLayout() + Me.TableLayoutPanel3.ResumeLayout(False) + Me.TableLayoutPanel3.PerformLayout() + CType(Me.PictureBox9, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CGHeight2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CGHeight, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox10, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CGWidth2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CGWidth, System.ComponentModel.ISupportInitialize).EndInit() + Me.TableLayoutPanel2.ResumeLayout(False) + Me.TableLayoutPanel2.PerformLayout() + CType(Me.PictureBox7, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CGDivide, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.CGSub, System.ComponentModel.ISupportInitialize).EndInit() + Me.POHeader.ResumeLayout(False) + Me.POHeader.PerformLayout() + Me.POHeaderInner.ResumeLayout(False) + Me.POHeaderInner.PerformLayout() + Me.POHeaderPart2.ResumeLayout(False) + Me.POHeaderPart2.PerformLayout() + Me.POHeaderPart1.ResumeLayout(False) + Me.POHeaderPart1.PerformLayout() + CType(Me.THBPM, System.ComponentModel.ISupportInitialize).EndInit() + Me.POptionsScroll.ResumeLayout(False) + Me.POptionsScroll.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Timer1 As System.Windows.Forms.Timer + Friend WithEvents MInsert As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents MRemove As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents Menu1 As System.Windows.Forms.ContextMenuStrip + Friend WithEvents AutoSaveTimer As System.Windows.Forms.Timer + Friend WithEvents mnMain As System.Windows.Forms.MenuStrip + Friend WithEvents mnFile As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnNew As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnOpen As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnImportSM As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnImportIBMSC As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator14 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnSave As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSaveAs As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnExport As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator15 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnOpenR0 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnOpenR1 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnOpenR2 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnOpenR3 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnOpenR4 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator16 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnQuit As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnEdit As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnUndo As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnRedo As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator17 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnCut As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnCopy As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnPaste As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator18 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnFind As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnStatisticsAdvanced As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnDelete As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSelectAll As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator19 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnOptions As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnPreview As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnPlayB As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnPlay As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnStop As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnTimeSelect As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSelect As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnWrite As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnConversion As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnErrorCheck As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnPreviewOnClick As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnShowFileName As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator20 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents mnGOptions As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnVOptions As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnLanguage As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnTheme As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents cmnLanguage As System.Windows.Forms.ContextMenuStrip + Friend WithEvents TBLangDef As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator9 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents cmnTheme As System.Windows.Forms.ContextMenuStrip + Friend WithEvents TBThemeDef As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBThemeSave As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBThemeRefresh As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator6 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents cmnConversion As System.Windows.Forms.ContextMenuStrip + Friend WithEvents POBLong As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents POBShort As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents POBLongShort As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator10 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents POBHidden As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents POBVisible As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents POBHiddenVisible As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator11 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents POBMirror As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents POBFlip As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents POBModify As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSys As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSMenu As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSTB As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSOP As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSStatus As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSLSplitter As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnSRSplitter As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnNTInput As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBLangRefresh As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBMain As System.Windows.Forms.ToolStrip + Friend WithEvents TBNew As System.Windows.Forms.ToolStripButton + Friend WithEvents TBOpen As System.Windows.Forms.ToolStripSplitButton + Friend WithEvents TBOpenR0 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBOpenR1 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBOpenR2 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBOpenR3 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBOpenR4 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator12 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBImportSM As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBImportIBMSC As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBSave As System.Windows.Forms.ToolStripSplitButton + Friend WithEvents TBSaveAs As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TBExport As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBCut As System.Windows.Forms.ToolStripButton + Friend WithEvents TBCopy As System.Windows.Forms.ToolStripButton + Friend WithEvents TBPaste As System.Windows.Forms.ToolStripButton + Friend WithEvents TBFind As System.Windows.Forms.ToolStripButton + Friend WithEvents TBStatistics As System.Windows.Forms.ToolStripButton + Friend WithEvents pStatus As System.Windows.Forms.Panel + Friend WithEvents FStatus As System.Windows.Forms.StatusStrip + Friend WithEvents FSC As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FSP1 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FSP2 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FSP3 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FSP4 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FST As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FSE As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FStatus2 As System.Windows.Forms.StatusStrip + Friend WithEvents BVCReverse As System.Windows.Forms.ToolStripButton + Friend WithEvents LblMultiply As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents TVCBPM As System.Windows.Forms.ToolStripTextBox + Friend WithEvents TVCM As System.Windows.Forms.ToolStripTextBox + Friend WithEvents LblDivide As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents TVCD As System.Windows.Forms.ToolStripTextBox + Friend WithEvents BVCApply As System.Windows.Forms.ToolStripButton + Friend WithEvents BVCCalculate As System.Windows.Forms.ToolStripButton + Friend WithEvents FSW As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents FSSS As System.Windows.Forms.ToolStripButton + Friend WithEvents FSSL As System.Windows.Forms.ToolStripButton + Friend WithEvents FSSH As System.Windows.Forms.ToolStripButton + Friend WithEvents TimerMiddle As System.Windows.Forms.Timer + Friend WithEvents ToolStripSeparator21 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents CGShow As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGShowS As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGShowBG As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGShowM As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGShowMB As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGShowV As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGShowC As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripSeparator22 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents CGBLP As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGSTOP As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents CGSCROLL As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnPOptions As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolStripContainer1 As System.Windows.Forms.ToolStripContainer + Friend WithEvents PMain As System.Windows.Forms.Panel + Friend WithEvents PMainIn As System.Windows.Forms.Panel + Friend WithEvents MainPanelScroll As System.Windows.Forms.VScrollBar + Friend WithEvents HS As System.Windows.Forms.HScrollBar + Friend WithEvents PMainR As System.Windows.Forms.Panel + Friend WithEvents PMainInR As System.Windows.Forms.Panel + Friend WithEvents RightPanelScroll As System.Windows.Forms.VScrollBar + Friend WithEvents HSR As System.Windows.Forms.HScrollBar + Friend WithEvents PMainL As System.Windows.Forms.Panel + Friend WithEvents PMainInL As System.Windows.Forms.Panel + Friend WithEvents LeftPanelScroll As System.Windows.Forms.VScrollBar + Friend WithEvents HSL As System.Windows.Forms.HScrollBar + Friend WithEvents POConvert As System.Windows.Forms.ToolStripDropDownButton + Friend WithEvents TBLanguage As System.Windows.Forms.ToolStripDropDownButton + Friend WithEvents TBTheme As System.Windows.Forms.ToolStripDropDownButton + Friend WithEvents TBMyO2 As System.Windows.Forms.ToolStripButton + Friend WithEvents ToolStripSeparator4 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBErrorCheck As System.Windows.Forms.ToolStripButton + Friend WithEvents TBPreviewOnClick As System.Windows.Forms.ToolStripButton + Friend WithEvents TBShowFileName As System.Windows.Forms.ToolStripButton + Friend WithEvents ToolStripSeparator2 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBUndo As System.Windows.Forms.ToolStripButton + Friend WithEvents TBRedo As System.Windows.Forms.ToolStripButton + Friend WithEvents ToolStripSeparator5 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBNTInput As System.Windows.Forms.ToolStripButton + Friend WithEvents TBTimeSelect As System.Windows.Forms.ToolStripButton + Friend WithEvents TBSelect As System.Windows.Forms.ToolStripButton + Friend WithEvents TBWrite As System.Windows.Forms.ToolStripButton + Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBPlayB As System.Windows.Forms.ToolStripButton + Friend WithEvents TBPlay As System.Windows.Forms.ToolStripButton + Friend WithEvents TBStop As System.Windows.Forms.ToolStripButton + Friend WithEvents TBPOptions As System.Windows.Forms.ToolStripButton + Friend WithEvents ToolStripSeparator7 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents TBVOptions As System.Windows.Forms.ToolStripButton + Friend WithEvents TBGOptions As System.Windows.Forms.ToolStripButton + Friend WithEvents POBStorm As System.Windows.Forms.ToolStripButton + Friend WithEvents POptionsResizer As System.Windows.Forms.Button + Friend WithEvents SpL As System.Windows.Forms.Button + Friend WithEvents TBThemeLoadComptability As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ToolTipUniversal As System.Windows.Forms.ToolTip + Friend WithEvents CGBPM As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents FSM As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents mnGotoMeasure As ToolStripMenuItem + Friend WithEvents ToolStripSeparator24 As ToolStripSeparator + Friend WithEvents ToolStripSeparator8 As ToolStripSeparator + Friend WithEvents TBWavIncrease As ToolStripButton + Friend WithEvents TimeStatusLabel As ToolStripStatusLabel + Friend WithEvents BConvertStop As ToolStripButton + Friend WithEvents POBRandom As ToolStripMenuItem + Friend WithEvents POBSRandom As ToolStripMenuItem + Friend WithEvents mnStatistics As ToolStripMenuItem + Friend WithEvents mnVCOptions As ToolStripMenuItem + Friend WithEvents POBSort As ToolStripMenuItem + Friend WithEvents SpR As Button + Friend WithEvents POptions As Panel + Friend WithEvents POExpansion As Panel + Friend WithEvents POExpansionInner As Panel + Friend WithEvents TExpansion As TextBox + Friend WithEvents POExpansionResizer As Button + Friend WithEvents POExpansionSwitch As CheckBox + Friend WithEvents POBeat As Panel + Friend WithEvents POBeatInner As TableLayoutPanel + Friend WithEvents POBeatExpander As CheckBox + Friend WithEvents POBeatResizer As Button + Friend WithEvents TableLayoutPanel7 As TableLayoutPanel + Friend WithEvents nBeatD As NumericUpDown + Friend WithEvents BBeatApplyV As Button + Friend WithEvents nBeatN As NumericUpDown + Friend WithEvents BBeatApply As Button + Friend WithEvents Label7 As Label + Friend WithEvents tBeatValue As TextBox + Friend WithEvents LBeat As ListBox + Friend WithEvents POBeatPart2 As TableLayoutPanel + Friend WithEvents CBeatScale As RadioButton + Friend WithEvents CBeatCut As RadioButton + Friend WithEvents CBeatMeasure As RadioButton + Friend WithEvents CBeatPreserve As RadioButton + Friend WithEvents POBeatSwitch As CheckBox + Friend WithEvents POWAV As Panel + Friend WithEvents POWAVInner As TableLayoutPanel + Friend WithEvents POWAVExpander As CheckBox + Friend WithEvents LWAV As ListBox + Friend WithEvents FlowLayoutPanel3 As FlowLayoutPanel + Friend WithEvents BWAVUp As Button + Friend WithEvents BWAVDown As Button + Friend WithEvents BWAVBrowse As Button + Friend WithEvents BWAVRemove As Button + Friend WithEvents POWAVResizer As Button + Friend WithEvents POWAVPart2 As TableLayoutPanel + Friend WithEvents CWAVMultiSelect As CheckBox + Friend WithEvents CWAVChangeLabel As CheckBox + Friend WithEvents POWAVSwitch As CheckBox + Friend WithEvents POWaveForm As Panel + Friend WithEvents POWaveFormInner As Panel + Friend WithEvents POWaveFormPart2 As TableLayoutPanel + Friend WithEvents TWSaturation As NumericUpDown + Friend WithEvents PictureBox2 As PictureBox + Friend WithEvents TWTransparency As NumericUpDown + Friend WithEvents PictureBox3 As PictureBox + Friend WithEvents TWPrecision As NumericUpDown + Friend WithEvents PictureBox4 As PictureBox + Friend WithEvents TWWidth As NumericUpDown + Friend WithEvents PictureBox5 As PictureBox + Friend WithEvents TWLeft As NumericUpDown + Friend WithEvents PictureBox6 As PictureBox + Friend WithEvents TWSaturation2 As TrackBar + Friend WithEvents TWLeft2 As TrackBar + Friend WithEvents TWTransparency2 As TrackBar + Friend WithEvents TWWidth2 As TrackBar + Friend WithEvents TWPrecision2 As TrackBar + Friend WithEvents POWaveFormExpander As CheckBox + Friend WithEvents POWaveFormPart1 As TableLayoutPanel + Friend WithEvents TableLayoutPanel1 As TableLayoutPanel + Friend WithEvents FlowLayoutPanel1 As FlowLayoutPanel + Friend WithEvents BWLoad As Button + Friend WithEvents BWClear As Button + Friend WithEvents BWLock As CheckBox + Friend WithEvents TWFileName As TextBox + Friend WithEvents TableLayoutPanel6 As TableLayoutPanel + Friend WithEvents PictureBox1 As PictureBox + Friend WithEvents TWPosition2 As TrackBar + Friend WithEvents TWPosition As NumericUpDown + Friend WithEvents POWaveFormSwitch As CheckBox + Friend WithEvents POGrid As Panel + Friend WithEvents POGridInner As Panel + Friend WithEvents POGridPart2 As TableLayoutPanel + Friend WithEvents TableLayoutPanel5 As TableLayoutPanel + Friend WithEvents FlowLayoutPanel2 As FlowLayoutPanel + Friend WithEvents cVSLockL As CheckBox + Friend WithEvents cVSLock As CheckBox + Friend WithEvents cVSLockR As CheckBox + Friend WithEvents Label5 As Label + Friend WithEvents TableLayoutPanel4 As TableLayoutPanel + Friend WithEvents Label1 As Label + Friend WithEvents CGB As NumericUpDown + Friend WithEvents POGridExpander As CheckBox + Friend WithEvents POGridPart1 As TableLayoutPanel + Friend WithEvents TableLayoutPanel3 As TableLayoutPanel + Friend WithEvents PictureBox9 As PictureBox + Friend WithEvents CGHeight2 As TrackBar + Friend WithEvents CGHeight As NumericUpDown + Friend WithEvents PictureBox10 As PictureBox + Friend WithEvents CGWidth2 As TrackBar + Friend WithEvents CGWidth As NumericUpDown + Friend WithEvents CGDisableVertical As CheckBox + Friend WithEvents CGSnap As CheckBox + Friend WithEvents TableLayoutPanel2 As TableLayoutPanel + Friend WithEvents PictureBox7 As PictureBox + Friend WithEvents CGDivide As NumericUpDown + Friend WithEvents CGSub As NumericUpDown + Friend WithEvents BGSlash As Button + Friend WithEvents POGridSwitch As CheckBox + Friend WithEvents POHeader As Panel + Friend WithEvents POHeaderInner As Panel + Friend WithEvents POHeaderPart2 As TableLayoutPanel + Friend WithEvents CHDifficulty As ComboBox + Friend WithEvents Label13 As Label + Friend WithEvents THExRank As TextBox + Friend WithEvents Label25 As Label + Friend WithEvents CHLnObj As ComboBox + Friend WithEvents Label23 As Label + Friend WithEvents Label21 As Label + Friend WithEvents THComment As TextBox + Friend WithEvents Label24 As Label + Friend WithEvents Label15 As Label + Friend WithEvents THTotal As TextBox + Friend WithEvents Label20 As Label + Friend WithEvents BHStageFile As Button + Friend WithEvents BHBanner As Button + Friend WithEvents Label19 As Label + Friend WithEvents BHBackBMP As Button + Friend WithEvents Label17 As Label + Friend WithEvents Label16 As Label + Friend WithEvents Label12 As Label + Friend WithEvents THBackBMP As TextBox + Friend WithEvents Label11 As Label + Friend WithEvents THBanner As TextBox + Friend WithEvents THStageFile As TextBox + Friend WithEvents THSubTitle As TextBox + Friend WithEvents POHeaderExpander As CheckBox + Friend WithEvents POHeaderPart1 As TableLayoutPanel + Friend WithEvents Label3 As Label + Friend WithEvents CHRank As ComboBox + Friend WithEvents Label10 As Label + Friend WithEvents CHPlayer As ComboBox + Friend WithEvents Label4 As Label + Friend WithEvents THGenre As TextBox + Friend WithEvents THBPM As NumericUpDown + Friend WithEvents Label2 As Label + Friend WithEvents THArtist As TextBox + Friend WithEvents THTitle As TextBox + Friend WithEvents Label9 As Label + Friend WithEvents Label8 As Label + Friend WithEvents POHeaderSwitch As CheckBox + Friend WithEvents POptionsScroll As Panel + Friend WithEvents BExpansion As Button + Friend WithEvents TBTotalValue As ToolStripLabel + Friend WithEvents THSubArtist As TextBox + Friend WithEvents POBRRandom As ToolStripMenuItem + Friend WithEvents POBHRandom As ToolStripMenuItem + Friend WithEvents mnShowWaveform As ToolStripMenuItem + Friend WithEvents TBShowWaveform As ToolStripButton + Friend WithEvents BDefineMeasure As ToolStripButton + Friend WithEvents BInsertOrRemoveSpaceM As ToolStripButton + Friend WithEvents BInsertOrRemoveSpaceN As ToolStripButton + Friend WithEvents BInsertOrRemoveSpaceMN As ToolStripButton + Friend WithEvents BWAVDuplicate As Button + Friend WithEvents BWAVColorOverride As Button + Friend WithEvents mnKOptions As ToolStripMenuItem + Friend WithEvents TBKOptions As ToolStripButton + Friend WithEvents TimerInternalPlay As Timer + Friend WithEvents TimerPreviewNote As Timer + Friend WithEvents mnTools As ToolStripMenuItem + Friend WithEvents mnTechnicalErrorCheck As ToolStripMenuItem + Friend WithEvents mnTOTAL As ToolStripMenuItem + Friend WithEvents ToolStripSeparator13 As ToolStripSeparator + Friend WithEvents mnOpenTemplate As ToolStripMenuItem + Friend WithEvents POBAutoLongVPosition As ToolStripMenuItem + Friend WithEvents ToolStripSeparator25 As ToolStripSeparator + Friend WithEvents POBAutoLongColumn As ToolStripMenuItem + Friend WithEvents POBLongObjNT As ToolStripMenuItem + Friend WithEvents POBLongNTObj As ToolStripMenuItem + Friend WithEvents TimerRefreshPanel As Timer + Friend WithEvents TimerExternalExpansion As Timer + Friend WithEvents Label6 As Label + Friend WithEvents THPlayLevel As TextBox + Friend WithEvents mnPastePattern As ToolStripMenuItem + Friend WithEvents TBPastePattern As ToolStripButton + Friend WithEvents TimerLoadWaveform As Timer + Friend WithEvents TBTab As ToolStrip + Friend WithEvents mnClose As ToolStripMenuItem + Friend WithEvents PBOnTabHover As PictureBox + Friend WithEvents TimerLWAVRefresh As Timer + Friend WithEvents POBMP As Panel + Friend WithEvents POBMPInner As TableLayoutPanel + Friend WithEvents POBMPExpander As CheckBox + Friend WithEvents LBMP As ListBox + Friend WithEvents FlowLayoutPanel4 As FlowLayoutPanel + Friend WithEvents BBMPUp As Button + Friend WithEvents BBMPDown As Button + Friend WithEvents BBMPBrowse As Button + Friend WithEvents BBMPRemove As Button + Friend WithEvents POBMPResizer As Button + Friend WithEvents POBMPPart2 As TableLayoutPanel + Friend WithEvents CBMPMultiSelect As CheckBox + Friend WithEvents CBMPChangeLabel As CheckBox + Friend WithEvents POBMPSwitch As CheckBox + Friend WithEvents TimerLBMPRefresh As Timer + Friend WithEvents mnMyO2 As ToolStripMenuItem +End Class diff --git a/iBMSC/MainWindow.resx b/iBMSC/MainWindow.resx index 44044d1e1..eef0f8214 100644 --- a/iBMSC/MainWindow.resx +++ b/iBMSC/MainWindow.resx @@ -1,2478 +1,2502 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 497, 2 - - - 625, 2 - - - 1240, 2 - - - 87, 2 - - - 176, 2 - - - 266, 2 - - - 400, 47 - - - 737, 2 - - - 839, 2 - - - - - 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 - - - - 1022, 2 - - - 931, 2 - - - 1120, 2 - - - 65 - - - - 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 - AgYBAQMiCgo4NxISyQ4EBFkCAAAMAAAABAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAA - AwAAAAMAAAAEAAAABQMCAQMbFA4IdVc6xIdkRvVfQi3fKR0UtAEAADcDAwMEAAECBwAAABMAAAEMAAAA - BQAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAYCAQUAAAArAAAAWAAAAGMAAABlOBIT1BUGBrkBAAB3AAAAagAAAGYAAABkAAAAYwAAAGMAAABjAAAA - YwAAAGMAAABjAAAAYwAAAGQAAAB4AAAAigAAAHkHBgR8nXla9qOCY/+igmT+lm5V+gEAAIMAAABjAwkQ - fwURH7UAAQGkAAAAiwAAAHEAAABkAAAAYwAAAGMAAABjAAAAYwAAAGMAAABiAAAAUwAAACIAAAADAAAA - AAkCAg4HAgILDQUEBg0FBFcjDgrPIw4K7SENCu4cCwjvVTAp+TsXGPsaCQj1GAkH8xkKCPAeDAnvIg4K - 7iMOCu4jDgruIw4K7iIOCu4iDgruIg4K7iIOCu9QTk34T09P+jAtLPc0JRz3t5R0/reXdf+xknL/clE9 - /B8NCfAiDgruG0x99zCE0P8ne739F1+M+hYPEvQiDgrvIw4K7h8NCe4eDQnuIQ4K7iIOCu4hDgrtFQkG - 2AIAAJkAAAA2AAAAAiAJCXILAwNAGAsISEIbFPJGHRX+XSog/lEiGv9PLSX+uaWY/pR6i/+YdH3+gmBj - /0MiIf46GRT+Wykf/mMrIf9kLSP+ZCsh/mQtIv9jLCH+Yish/lYrI/+CgYH+hoaG/oeHh/+Hblz+y6uL - /suqiP/EooP+SzAk/jIUD/8+GRP+NHSv/0GK1P49hc7+O5DO/z8iI/5aJRv+WSQa/0ssHf4wGxP+LRMO - /zwYEv5LHxb+OBcR/yANCu4CAACPAAAAGEQWFsYVBgZ+SyIbzU0fF/9UJyD+cj0y/mY4Mv+dpq3+rXGL - /pt2i/+hjqf+mrDL/7mYpf5PLSv+lnFr/raLgv+3jIP+tomB/raIgP+0hn3+s4V8/n5kX/+jo6P+oKCg - /pKSkv+ce2P+17GW/taxk//Al33+YFtX/mhlZP8/QEb+Rpbe/1Sb5/5PluH+OYK2/3ZMRf6XYFX+jVlO - /6B4Vf6jfFr+kWpO/2E9LP5lKR7+aywf/zcWEf4TCAbMAAAAOkAVFUw/FxbZPhsY+V04LP9TPjf/RyQg - /2lHQ/+astb/h3OC/5iOof+Jdob/mnKK/6FliP98Wl3/pJaR/8e5s//HubP/0MG6/9rJwv/gz8f/3s3E - /4SAf//AwMD/u7u7/52al/+8j3n/2KqY/9isl/+kfmr/d3d2/4aGhv9PdZP/ZK3w/2Wu+f9lqvH/LmiL - /01EQv9qWlf/f2RX/62LbP+piGf/pIVm/5FwXf+LWE7/djAj/00fF/8jDwrnAAAARToaGgNbMTG8wKad - /smiov+SrLv+fVt1/kMiG/+Lr7T+o8nq/s647P/Swuf+o5W1/5Jlg/5vT03+OR4O/j0fD/86Hg7+OCIM - /kQuDP9TOw/+VDwQ/ouJh//Ozs7+y8vL/qeUjP/Hlo/+15+X/tekmv+QcWb+oKCg/qOjo/9Gg7D+csf5 - /27C/v5iufP+RGB0/4CAgP53dnX+eV5J/8Cigv69nXv+uZd5/3xnWf61o5/+eTgr/1MhGP4mEAvpAAAA - RikUFR1ySE3emoeZ/qBvfP+Hh4r+kcPJ/ks3Ov9XSlP+fazH/rek1/+wsJv+yLjd/6ybpv6zlbf+rois - /rOJtP+wj6H+i36C/jkdFv8zIAj+QDAU/rOzs//Q0ND+0NDQ/o+Ce/+wqaL+ycXF/sKbmv+gjYj+v7+/ - /q2vsP9KpdD+c9/+/3HY/v5Rsd7+a3B1/5CQkP6FhYX+nn5k/9Swj/7QrYz+upJ1/0dBO/5UTk3+Qyci - /0AaE/4mEAzpAAAARjQXGG+klKz/q4il/6CRov/i2vH/jc3y/1U6Qv+GRmr/UCcp/56mpv/Lzqn/wLy+ - /8Oy1f/Eptr/xKjd/8Ck4P+1hbn/uIGe/7Snr/9IKB3/XlFB/8jIyP/R0dH/z8/P/2JXQ/9+YCn/nIpl - /4V9dv/Jycj/zs7O/5qstP9szdn/etnh/3Tp9v9Mpb7/nJyc/6+vr/+PjIj/v5V7/9evlv/XsZX/nHlk - /3BwcP+IiIj/gYGB/zIXEv8mEAzpAAAARlo4O66st9L+pneY/rykyv/PveP+ubzq/l1IT/+QUXf+eDpX - /oiKef+1uJj+tq23/56PpP6TiJr+iHyS/oFxi/99bIv+eVl6/oVpff+CcXX+UkI9/q6trP/FxcX+vLy8 - /m1UJf+PYhT+d1UX/qysq//Q0ND+0NDQ/omJhf+If2j+6ODf/5iytP5yrLv+wsLC/8XFxf6Zhnv+z5+R - /9inmP7VqZj+hGlb/5OTk/6VlZX+e3h4/0AaE/4mEAzpAAAARm1FSoyyeaH/rG+b/8y13f+hmob/s7eN - /5egm/9zRFv/cUFl/11sfP9dhJv/TYSw/0WLv/9Ckcv/Q5bS/0WY0v9IlM3/T4y//1OAq/9ggp//TVVn - /0BCRP9rZVr/cl49/5FnHf+ichz/h2w8/7m5uf/Gxsb/0dHR/2BcV/8lGwz/LCUd/zQvJ/+8vb3/z8/P - /87Ozv+mg3v/u5ya/8aXk//RmZH/hndx/7W1tf+zs7P/al1a/00gF/8mEAvpAAAARl83QCCMXW3qsnOj - /r2Yv/++rrv+rbSA/pmij/9Ogqz+K4fP/iGa7f8XmvH+F5z1/xee9/4Xn/j+F5/4/heg+P8Xn/j+F5/4 - /hee9/8XnfX+KKL0/kas8f9Unc3+YH+N/k9OQP9EMhH+RjQW/pORjv/m5ub+srGx/jo2MP8aFA3+HhcP - /1VUUv7Ozs7+0dHR/8jIyP47NjP+qayr/83R0f6kgnz+tLGv/8rKyv7AwMD+Wz45/1MiGP4mEAvpAAAA - RkEiJgIrDQ14kWxv/NzG2/+/qcL+comp/iOK1f8Wlu7+F531/hig+v8Yovz+GKP8/xmi/P4co/v+IKT6 - /iKl+v8hpPn+HqP5/hqi+v8Yofr+F6H7/heh+v8Xn/n+G5/2/kOs8/9mncT+JkZd/gsOD/8pKCj+Dw0K - /h8WCf8xIgz+OikP/4qHg/7CwsL+wcHB/7a2tf4zKBb+MiYW/y8nH/59fHv+0NDQ/9DQ0P6trKz+ZDsz - /1YjGf4mEAvpAAAARiANDRtbLS3ZzK68/s2+2f9djMP+F5Dl/hab8/8Yofr+GKP9/hyk/P8vqvv+SLL5 - /1259/5qvPX+cr/0/njB8/96wvP+d8Hz/nG/9P9ku/X+ULT2/jeq9/8go/j+F6H6/heh+v8doPf+Z7ry - /hk6U/8DAwP+BAMD/gUFBP8JBwb+BgUG/xIREP66urr+urq6/21tbf4NCgr+CggI/xEQEP6xsbH+0dHR - /9HR0f6PjY3+fEpA/1gkGv4nEAzpAAAARjEVFYDDnKL/287k/2KUzP8Vkef/F5z1/xii/P8bpP3/MKv7 - /1C1+P9ctfP/XrLt/12t6P9ZpuD/VZ/W/1Wb0P9andH/ZabY/3m24/+Mw+v/nc7x/5nP8/+Ex/T/Yrr1 - /y6m9v8Xnvf/IJ3x/zdjg/8OCgb/FxEL/xkTDP8XEQv/GBMO/xcTDv8dFxD/GxYP/yMbD/8nHhH/JB0S - /y4rJ/+vr6//ycnJ/8TExP+KgYD/kltQ/1gkGv8nEAzpAAAARnlpbdvRrbP+kbHZ/hWO5P8Wm/T+GKL8 - /h2l/f80rPr+Qqz0/jOe6f8wjtL+SHuT/1djVv5bSjL+UD4f/lJAHf9ZRB3+ZU8k/n9qOP9ra1H+Yn2C - /mKSr/97tN7+oM7w/ozI8v89pu/+FZPr/iZxpf9IMg7+WT8U/k03Ff9FMhL+VjsS/1I5EP5NNRL+RTET - /044Ev5RORP+VjwW/1c/GP5pWDv+ta+m/392af61nZj+n2Va/1klG/4mEAzpAAAARpWChv2rhY/+JIrY - /haY8P8Yofr+G6T9/iin+f8rofH+GY3h/kt/nv+dglL+r4dH/6p/Pv6pfjn+oHYy/qyAPP+ofzr+u5RX - /rWLS/+ugkL+solK/q2ERf+cg1X+e46Q/mWbwv9OoN7+FIbb/hx5vf9rVC7+n3g7/qZ7Pf+uhEn+rYNF - /6R7Pv6shVL+poFL/5l3Qv6CXib+aEsV/2BJGP5PPRP+QDIQ/0UzFP6zmZL+n2dc/1gkGv4mEAzpAAAA - RpqDhftki7f/FJDn/xee9/8Yo/3/GaL6/xub8v8ajd//Z3eC/6OAW//Fn2z/x6Bu/8KbZv/KpXn/xKBx - /8qnd//Ipnf/zq2F/9Wzi//RrYL/wJpm/8qibv/Mp3j/wpxq/72ccP+RlpH/P4a8/xV0wf+QfWH/yqZ9 - /7+dcf+KfFz/dnFU/2xyWf+AbUr/v5dl/7qXZv+slVH/z7Zb/+fLaP/rzWj/5spo/8awXv+Th2T/bEU5 - /1QiGf8nEAzpAAAARnJhaNIhjNv+Fpfv/hii+/8Xovz+FZ31/hWQ5v93k6L+xKBx/seea//MoWz+v5VW - /8efaf7DnWj+vplo/sGfdv+tjWL+podd/pt9UP+piFz+vppp/sypef+fm3r+col4/nGJeP9mdV7+uJdq - /pOVif+6mGf+yqV0/oeqi/8Twcf+Gdjg/zLk6/5hoZn+p4li/8WpUP7hwE/+7MpW/+3LWv7ry1/+6spb - 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 - /0AzHv5NfSz+juuS/kHsSP89rDv+RTYO/muCQf+457b+aO1t/kvrUv9QiU/+NScO/kCckv9k6O3+AOjx - /gPr8/8A7vf+AOXu/iyuqv+aysP+ke7y/xzl7f4A7PX+AO/4/wDm7/4fbmz+kIJK/+raof7iwlP+275Y - /6SSS/7Os1X+58VS/+bEUv7bvFD+VE4lmk2k6xQ7ldvufMLy/z+w+v8Yovz/F5z0/ztfdf9OPR//UDcK - /5yLgv/r5O7/0LzX/3doZP9IShT/huGJ/1HqV/9H5k7/M0Mg/z8sDf9UaDD/kvGV/0fxTv9L6FH/RFUj - /0tqR/985On/K+jv/wDt9v8A7PX/AODp/0mLdv+QhWL/i9DM/7709v9g7PH/Gufv/wDe5v8YgoP/Oy8b - /7ite//t4LL/5Mx3/+PGYf/kx2P/5stu/+HJcP+6oUH3KScPXEeg5wE5luCmfr7t/ma99/8ao/v+F5/5 - /jaS0P84MSD+TDQJ/mJLJf+hkIj+kX95/2RSPf5CLwv+Z7Rg/nfqe/9A7Ej+TtRT/kF0N/89ijH+SulQ - /kbuTf885UP+PXsu/kU4G/9awsP+ku7x/j/o7/8T4en+Bc3U/lFPN/9lTjj+XFdA/2Kqqf617fD+oO3w - /xLP1/4XgID+NCYY/0g2Gf6Cc0H+uq56/9DDjP7j1Jj+0rh1/5RxPP43IBHpAAAARgAAAABPouU/WaXf - /IPG9P81rPn/GKL7/x2e9P9DY3X/QCwJ/1w+C/9rUy//kIOD/4yDgP9BMxv/S3Em/6Dro/9R5Vf/SOhO - /0XmS/9P5VX/Z+ls/3Lpdv851j//VXYn/21OH/9Pfmb/kOHl/4Hj5/8p0Nf/J4mE/z0xJP9LPS//SDko - /0E4Kf8mW1n/JW5v/yVhX/8qOjT/LyUb/zMnGv82KBf/LyMS/zYqG//czMP/soJ3/10oH/8nEAzpAAAA - RgAAAABlnM0EU5XM7ZDH7/9sv/b+HKP6/heg+v81n+b+Njs4/ks2E/+ZhYD+zL3S/8i20P6PgXz+YU0d - /n3Edf+u6rD+kOOS/o7fjv+B1H/+fMd1/mKvU/9ZeTH+Y0sh/m9UJ/9kTSX+gI9z/l1yYf9SVT3+VUcz - /lxLN/9SRDP+XU08/z41Lv4zLSj+MSsn/zQuJ/46MSf+RTUl/0Y2I/5ENST+LSYc/y8mHP7cy8j+sYB3 - /10pH/4oEAzpAAAARgAAAAAAAAAArKm16lyk3P+SzPP+TLP4/hii+/8Xn/j+R5nQ/i4vK/9dUUb+uq+1 - /7Wns/5+bl/+YEwr/l9aMP9caTP+YGIy/mRaL/9mVi7+bFgy/nhfNv9xWTD+ZE4r/mROK/9nUCv+oYNe - /oBrVP9aSTb+T0U5/lJHPf9aTkH+Z1lG/2VZSv5dUUT+S0M8/0hAOv5IQTr+TEI4/1dINf5XRzP+PzYq - /zQpHv7cy8f+sH91/18qIP4nEAzpAAAARgAAAAAAAAAAyq2o6n+gw/+Fvun/icn0/zar+P8Yofv/GJ73 - /06Yyv80Nzf/SkI4/2FYTf9jWU3/Y1lM/2VZS/9mWkn/a1tE/29dQP9uXUL/bF1I/3RlT/9uYk7/Y1lN - /2VaTv9oXU7/l4Nu/4d6bf9kWUz/XFVM/1JMRf9VTkj/XldQ/2BZUf9nXFH/bGFS/21hUv9hWlH/YlhP - /2lcS/9rXEj/Ukc5/zsuH//czMj/s4N6/14pH/8nEAzpAAAARgAAAAAAAAAAzK2o6s62sv9dj7/+msvu - /oLH9f8wqfj+GKH6/hif9/9KoNv+QlBZ/0VAOv5lXlb+cGpj/nJrZf9wa2X+cWtk/nNtY/95b2H+fHBd - /nlvY/95cGL+eG9j/nhvY/98cmP+m4pz/qOTgf9tY1n+UVdZ/i9cfv9LSUX+bmlj/3BqZf54b2X+hXZh - /52MdP53bmb+dW5m/3pwZv5+cWD+YlhO/z8xIv7g0c7+sYF4/18rIf4nEAzpAAAARgAAAAAAAAAAza+p - 6ta7tv+XcW7+Q3yv/qHP8P+Cx/X+NKr4/hih+v8Xn/j+N6Xv/1R9mf5AREX+V1RP/nJuav98eXb+gX56 - /oB9ev+AfXr+gH57/oOAfP+Ggn3+i4N6/pKHc/+bim3+lYRp/oJ+d/9Qe5n+XKje/jiY3v9NU1f+g355 - /4aBff6HgXz+i4R7/5SJe/6MhHv+h4J8/4eCff6LhX7+cWtl/zwxJ/7f0Mz+s4N6/1woHv4oEAzpAAAA - RgAAAAAAAAAAzrCr6ta8t/+aaF7/Riwp/0aFtP+iz/D/i8r0/0Ww9/8Zofr/F6H6/xuf9v9FpOT/VH6c - /0pVXf9QUFD/ZWNg/3Vzb/9/e3j/hIB8/4WAev+BfHP/d3Fp/2dmY/9WbHj/Onyo/yCR4P8YmvH/H5/0 - /2O58v9PY3L/j4yK/5uYlf+dmZX/npqV/6Cblf+jnZf/oJuW/6CcmP+fm5f/g356/z80K//g0c3/tIZ9 - /10oHv8nEAzpAAAARgAAAAAAAAAAz7Gs6ta8t/+baF7+RCAU/mpkVf9kncn+lsfr/pvQ9P9lvPb+KKb4 - /xih+v4XoPr+F572/jGl8/9DnNr+SYm2/k58nP9QdpL+TnWQ/kt4mP9Afqn+NYjD/ieW4v8YmfD+F5v0 - /hef+P8Yovv+GKH6/hua8P9JcY/+nJmX/7Wyr/60sq7+tbGu/7Wxrv61sq/+t7Ow/7i0sf64tbH+mJOP - /0o+Mv7h09D+tIZ9/14pIP4nEAzpAAAARgAAAAAAAAAA0bWv6tnBvf+dbGP+RB8T/m9kUP/MyMD+hq/P - /niz4f+q1fP+isr1/1a29/4opvn+GKH6/hih+/8XoPr+F5/4/hed9v8XnPX+Fpz0/hec9f8Xnfb+F573 - /hig+f8Yofv+GKL8/h+l/P8hpPr+F531/hWS6f81d6j+paSj/8nHxv7JyMb+ysjG/8vJx/7Mycf+zcrH - /87LyP7Oy8j+pqOf/0o/NP7h08/+tYd+/14pH/4oEAzpAAAARgAAAAAAAAAA0rex6tnBvP+camH/Qx4T - /21iTf/Y0sf/5uLa/8LS3P9rqdr/jMDo/6nV9P+LyvX/ab72/0Ow+P8qp/n/HaP6/xii+/8Yovv/GKL8 - /xii/P8Zovz/HaT7/yio+/86rvr/Ubb5/2G69v9LrvH/GZHm/xKE2f9Rlsz/0dHR/9zc2//d3Nv/3dzb - /97d3P/e3dz/397c/+De3f/f3dv/paCb/05AL//i08//tIV8/10pIP8nEAzpAAAARgAAAAAAAAAA07iz - 6tvEwP+hcmj+QR0T/l1ROv/Nw7D+7eni/vHu6f/u7er+rszj/2mo2/5+uOT+otDx/p7R9P+Ny/T+fsX1 - /nDA9v9nvff+Y7z3/mW89/9qvvf+b7/2/nG/9P9uu/L+ZLTt/kuk5f8vkdv+U5/a/q7N5v/n6er+7Ovq - /+zr6v7s6+r+7Ovq/+zr6v7s7Ov+7ezr/+vq6f7a2NX+e3Jo/1A6IP7Zw77+rHlw/10pH/4nEAzpAAAA - RgAAAAAAAAAA1by36t3Hw/+8lY3+Rx4W/jIhEP9cU0L+g31x/oyHfv+NiH/+jId+/4mGf/5qe4X+QHKZ - /kuMv/9lp9r+ebfm/oS/6v+Iwu3+iMPt/oC/7P9vten+X6vk/kmd3f85jMv+NXms/k10kP97goP+j4qA - /pmTi/+WkYv+i4aB/4qGgf6IhYL+h4WD/4eFg/6HhYL+iIWD/4WCgP5ybWf+RTgm/2VENP63i4P+mltP - /14qIP4nEAzoAAAARQAAAAAAAAAA3cjE6eHOyv/WvLf/kWFY/0QbFP86GRH/PB4U/z0fFf8+HxX/PR4V - /zwfFv87HhX/Oh0U/zsgGv89Kir/OzhF/zdFXv80TW3/NU9w/zNPcP81SWb/OT5Q/z0xNf8+JB7/PB8V - /zsdE/86HBP/ORwT/zsdFf9AIxv/Oh4W/zYbE/82GhP/NRoT/zQaFP80GRT/MxkT/zMZE/80GBD/Rx4U - /307Lv+fZFn/kEw//1soHv8qEQ3kAQAANAAAAAAAAAAA7uTiz+vg3f/cxsH+1724/rmRif+cbGP+lWNZ - /pZlW/+UYVf+k2BW/5NfVf6TYFb+kV1T/pFcUv+PWlD+kFtR/o1YTv+NWE3+i1ZL/otVSv+KVEn+iFJH - /ohRRv+HT0X+hU1D/oVOQv+DS0D+gko+/oJKP/+BRzz+fkQ5/31DOP5+Qzj+fEI3/3k/NP55PjL+dzww - /3Y7L/52Oi7+gUA0/5NRRP6UUkX+i0c6/0keFv4pEQyzCwQDEAAAAAAAAAAA8+3sVfLq6Pzt4uD+49LO - /tzGwv/aw77+28XA/trCvf/Xvrn+1ru2/9W6tf7StrH+0rWv/tCzrf/Or6n+zKym/s2tp//KqKL+yKag - /seknv/Fopv+wp2W/sGbk/+/mJD+vpeP/ruRif+6kIf+uIyE/reKgf+0hn3+soN6/7B/df6ufXP+q3hu - /6l0af6ncWf+omle/6NqYP6fZFj+nmJW/5tdUP6PTD/+Zy4j/1AkHOwaCwg1GAkHAQAAAAAAAAAAAAAA - APXv7lnx6efa49LP+tzHwvrbxcH628S/+tjAvPrawr762cG9+te+ufrVvLf61bu2+tS6tPrUubT60rax - +tG0rvrPsKv6zrCq+s2vqfrMraf6za2o+sqpo/rJqKL6x6We+siln/rEoJn6xKCZ+sOel/rBnJT6v5iQ - +sCakvq9lIz6u5KJ+rqQiPq5job6uIyD+raIf/q0hn36s4R7+rB/dvqjcmj3jmBXwkspIzM2GhUBAAAA - AP4f/8H//wAA+AAAAAAHAADgAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAA - AAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAA - AMAAAAAAAAAAwAAAAAAAAADgAAAAAAEAACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwICGAHAgIfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAACkeFD4bEwyJAQEATwMCAQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEACQAAADUCAABEKw4Org0EBIkAAABLAAAARgAAAEQAAABEAAAA - RAAAAEQAAABEAAAARwAAAF4DAgFRZ1A6vqaBYf+KZ031AQAAYAEFCVICCA6CAAAAZQAAAEsAAABEAAAA - RAAAAEQAAABEAAAAPAAAABAAAAAACwMDIAkDAw4hDgqgLBIN8CcQDPRTNy75Ty0v+y4WFfceDAn1KhEN - 9C4TDvQuEw70LhMO9C0SDfQ2JCH1ZWVl/EdFRPmgf2L9u5p5/4JiTP4mEAv1JT9f+DOEzv4mc6r8IhMV - 9i0SDfQiDgr0JA8L9CkRDPQhDgrpBgIBmQAAABQxDw+pLxUQkUsfF/9sNiv/a05I/7WOmP+ghp7/pJ+z - /4BbYP94T0j/pXBm/6ZxZv+kbmT/pG5j/4NsZ/+bm5v/hH14/8uliP/TsJH/dV9S/1RGQ/89bZ7/TpXh - /z6Jx/91RDz/h01B/4tmR/90Ujz/WC0g/2EoHf8qEQ30AQAAVUEWFmdbODLxfWph/1g+Pv92YG7/lKKu - /6iYtP+cg5v/oW2H/3FbUf+aiXz/oY+A/7Ofif+6pIv/mZaV/8HBwf+kkIX/1qeY/9Gjkf9+dXD/hYWG - /1Gg4P9msvr/RX6o/2FZWP9xW0//sJBw/6uLa/+YfG//gUAz/0UcFP4IAwJ0MBYXQqmLlv+ec33/kKu7 - /044Nv97pcH/vK3N/76xzP+qlKT/gV10/4pfd/9yYWP/MhwO/zwrDv+2trb/z8/P/5qFff/Ou7r/vJCK - /6urq/+EnKz/bND2/3PQ+/9Re5P/i4uL/5J+bv/PrYv/wJt8/1tTTf9dQDr/PxkT/wkDAnVlREqooo+t - /7iowP+yz/P/akJU/2gzRf+kqpX/zMjC/8Cr0f+9pND/s5fL/6t6n/+eipL/WUc6/8HBwf/Ly8v/alQt - /450Qv+inpr/zs7O/4CosP+d0tX/dNrn/4iWnv+ysrL/q4l1/9eulv+riHP/fn5+/4SDg/80FhH/CQQD - dYRgbr+reqT/wanQ/7Kxnv98bnL/fkZt/25+gf9ri6f/V4Ws/0+EsP9Pg6//Unii/15wkP9QVmL/c3Ny - /4uAbf+PZh3/i2gp/729vf/Pz8//XVRG/2FYT/9mcnL/y8zM/7i2tf++kor/0J2W/5yAdv+tra3/g3x6 - /0IbFP8JAwJ1VjA3QaBvivbEpMX/q6eQ/2aWq/8oiNL/HJzy/xee9v8YoPn/F6D6/xeg+f8XoPn/F5/4 - /x+h9v85pu7/SI66/1hqbP82Lhz/gX9+/5GQjv80Kx3/LB8N/4iHhf/Q0ND/mZiX/2RgWf+Oioj/uKyq - /8vLy/94Y1//SB0V/wkDAnUrERI/mHJ49sK72P87jtP/Fpny/xih+v8epfz/NKz6/0my+P9XtvX/X7j1 - /1239f9StPb/Qa/3/yim+f8Yofr/HqL4/1aq4/8OHir/AwMD/wkHBv8RDQn/Xlxc/7+/v/9gXlz/GRML - /zw4Nf/Ozs7/zc3N/3FQSf9LHhb/CQQCdWlERLvVy+H/N5HZ/xec9P8ao/z/M6z7/06w8/9Np+f/UpXF - /019o/9Hdpj/VoGf/3iju/97tNz/kMjv/4DF9P85qfX/G5vy/ytLX/8jGQv/IBgN/yUbDv8rIA//KR8Q - /zElEf8xJRP/TUY7/8/Pz/+1tLT/kWVc/0wfF/8JBAN1nX+C+WWZy/8WmPD/GaP8/ymn+f8omur/TIWl - /5B+VP+Xby7/kWkp/5xzLv+kfDn/pHk3/6N+Qv+If1//hJui/3Ot2P8ikOD/LWOG/4lmLf+SbDP/lG41 - /4pnM/+JaTv/f18u/2lKFv9hSBj/T0Ag/2lVQP+qenH/Sx4W/wkEAnWNhpL2GY7i/xig+v8Yofr/GZXq - /26Gkv+4lGz/yaNz/8unev/NqX3/zqt+/82thf/PrIH/xKBu/8umdP+2lGn/noZj/3GMmv9MfaD/wJxv - /5ecev9ikoD/bJKC/6WFWf+6mln/0bVW/+rLYv/pymL/y7Nd/4RpTf9EHBT/CQQCdTNhjsMYmO//GaP8 - /xWb8/9Ohab/qIlg/6OCWv+yj1X/hoJE/3iGQv90l1D/ZphI/2ORSf9xbD//jIle/yO+wf88z9T/i3pM - /6uCQv+0jFD/ap58/yjc4/8L5e3/bYlp/9i5Tf/szF//6tJ9/+rXlP/u1Hn/6Mlg/1E8I/8JBAN1JYTN - zimk9f8Yovv/F5Dj/4p+a//KuM3/0cLT/3x/NP9D3Un/Q+9L/2DuZv+A7YT/Xu1k/1HmVv9ZgU3/NNzj - /wHi6/9wbT7/jmgo/2VVJP+DYyX/etnW/xrp8P86taL/28Nn/8iqRf+LaCL/a04Y/8Ozev/wz1//oIg+ - /wgDAnUhjt7pNqv4/xih+/8edrP/qJBz/97Q4//fy+f/nJBk/2/kcv9D8Er/c7FO/6enXv+w2Zj/Vu9c - /1C8TP9d1dX/BuLr/3aLbP96qor/KNjf/3WEcf+FuKL/U+vx/xPX2//CtHP/sJJI/6t8O/+BYSP/zK5K - /+/MWv+rkT3/CAMCdSmR3/E+rvn/GKH6/x5klP9/ZTf/0sPH/+DN6P9yXED/c8ls/0btTf9Lcy3/Vj8X - /1KAMf9W7Vz/O7M7/0ukoP8e4+r/LW9g/zh7Z/8X3+f/Jra4/0NQRf9o5+z/AuTt/0BcTP96Z0D/sZVC - /+bFVv/sy1z/38BX/2xMI/8JBAN1NZfg6key+P8Yofv/HGWZ/1FEMP+fkpL/4tHp/3Fmbv9RkFD/We5f - /0XQTP82bzj/Nrc9/0LtSv8dZyL/F1lc/z7k6/8QiIz/KoGB/x/g6P8D4uv/J19f/1LAw/8X6fH/FXV3 - /4NyMf/px1T/7s9m/9fBef+9lXX/TSEZ/wkEA3VAm+PMWLf2/xii+/8febj/VEUr/3toU//j1en/opOi - /0FgJv907Hj/TvFV/3/ug/9g7Wb/P95H/yImGf8oODL/T9/l/xHGy/8toJ3/G+Ts/yTm7v8K09r/Hamt - /xnu9/8PqKz/p5ZQ/+nIV/+SgDr/jH10/7ychf96ZT3/CAUDgjyY4pZvvfP/HqX8/yCX5/9COyz/VkIg - /9fK2P/OvNT/ST8Y/3jfev9B6Uj/SF0m/5m8hf9z7nj/Ub1W/zEvGv9avrz/Debv/wjf5v8E5/D/XsK+ - /3nr7/8N5+//Ae/4/wrR2P95cET/5s97/8WrTf+OfUj/2LtX/+PCUv9rYTC3QZzlSWy16/85rfr/F573 - /ztZaP9QORD/qZqT/9TF2f9pV0f/baxe/1HrWP9Ckz3/Oi8Q/3DLa/9F70z/RYw1/0yCbf9d6u//Auv0 - /wDg6f9keF3/hqWT/6nt8P9V6/H/Bdbe/zQxIv+qnXD/5tWU/+fRgv/lznv/x69Z/zszFIVPo+gGVaTi - 3mi99v8Yovv/MJDQ/z4vEv9eQhP/e2tb/2RXR/9KZSb/f+mD/0bpTf9L2FD/Vuhb/1bmXP9Fly//WlAs - /4TY2P9q4uj/F62u/0E0Jf9KOyr/P11W/1GXmP8ffn//Lygf/zkqGP9IOhr/h3hX/8Shgv9RJhr/CQQD - dQAAAABrm8ifhcLu/zuu+f8YoPj/Pm6L/08+If/FuMn/xbXL/19NJf9+sW3/hMF4/36zbP92pF//ZIpB - /2NTJf9pUCb/fXZU/19kUP9TSDT/V0g3/11OPP9HPjT/OTIt/zkyK/9DNyr/Szso/zswIf9oXFT/wJqS - /08iGv8KBAN1AAAAAL6qq5xyptP/h8j0/yWl+v8gofb/QGV8/1ZNRv9zaF//YlVE/2RWQv9nVz//a1k6 - /2xbQP94ZUj/ZlhD/2VYRP+Kdl3/emxc/1xSR/9SS0T/X1ZN/2NaUP9kWU7/YVdM/1xTSv9mV0X/U0g6 - /21fVf/DnZb/TyIa/wkEAnUAAAAAzK6onLytsf9wpND/fcX1/yKk+f8govf/Rn2i/0lIRf9pZF3/dW9p - /3Rvav91cGj/e3Jl/3tzaf99dGn/gndm/5aGb/+OgXL/TmVz/y5bfP9sZmH/d3Fr/4N4aP+Qg3H/eXJs - /351a/9uZVr/cmVa/8Odlv9PIhr/CgQDdQAAAADOsKucz7Gs/1A6P/91q9T/hMf1/yyo+P8YoPn/OZzf - /0xwif9WWl3/bGpn/316d/+EgX3/hYF8/4B6c/91c2z/W3qJ/zKKx/87qfP/VprK/3x5dv+Wko//mJSP - /56Xj/+alZD/mpWR/4eCfv9yZl7/xKCZ/04iGf8KBAN1AAAAANCzrZzSta//VCYa/3Z7df9+s9z/mM7z - /1C09/8dovr/F5/5/yyj8v83k9H/PIW3/zyBsP84hLj/LY3P/x+Z7P8Xnfb/GKH6/xih+v8hlOP/hIWF - /7q3tf+6t7T/u7i1/725tv++urf/p6Of/3puZf/FoZr/TyIa/wkEA3UAAAAA0raxnNK2sP9TJhr/jYNx - /9vb1v+Tvdz/i8Hp/4/M9f9Vtvf/MKr5/x2j+v8Yofv/GKH6/xih+/8ao/v/Jaf7/zqu+v9Ns/f/Iprt - /xWH2v+qtb7/19fW/9jX1v/Z2Nf/29nX/9za2P+3tLD/fW9k/8Whmv9PIhr/CgQDdQAAAADUubSc1765 - /1YpH/9sX0n/0szC/9/c1v/AzNP/ga3P/3q04f+Qx+//kMz0/33E9f9xwPX/cL/1/3O/9P9vu/D/VKnn - /0ea1/9qo8z/ws/Y/9vZ1//a2df/2tnY/9rZ2P/a2dj/1tTT/4iAdv99ZFL/toqB/08iGv8JBAN1AAAA - ANvGwZzdx8P/lWtj/zobEf9CKyH/SDIo/0gyKP9HMij/RDIt/zU7S/88U3D/SWqN/1B0mf9IcJb/PmCD - /zNIYv89Oj//RzMp/0cyJ/9MNy7/STQs/0MuKP9CLij/QS4p/0AtKf8+Kyb/PSEX/4ZMQP+ZWU3/TiIa - /wsEA2oAAAAA7uTieerd2//aw77/vZiQ/6yDe/+rgHj/qHx0/6d6cf+meXD/o3Vs/6Jzaf+gcWj/n29m - /5xsYv+bamH/mWZc/5dkWv+VYVb/k15U/5FcUf+OV0z/jFVK/4tSR/+HTkP/hUo//4NHO/+HSDz/lVNG - /4hFOP9EHBXwDgUEJAAAAAD07ewI8+3sp+nb2PjeycX83MbC/NvEwPzZwb382MC7/NW7tvzVurX807ex - /NG0rvzNr6j8za6o/MuqpPzIpqD8x6Sd/MWhmvzBnJT8wJqS/L2Vjfy7kor8uI2E/LWHfvyzhHv8sH92 - /K58c/yncmj8hlNJ4UQjHUsAAAAA+f+H/8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAgAAA - AIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAEoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAA - AAAAAAAAAAAAGxsbYyoqKsgrKyvKKysryisrK8orKyvKKioqyioqKsoqKirKKioqyikpKcopKSnKKCgo - yigoKMogICDCAwMDQISEhPajnpX/sqmY/6+nl/+tpJX/qqKT/6qhkv+poJD/p56O/6Kai/+dloj/mpOF - /5iQgv+hmYr/kpKR/x4eHrGTk5P9d10v/35YEv9nTx3/U084/1BOOf9VRiT/X0IP/3FOEP92UhD/eVQR - /31XEf9+VxL/aEoU/6KZiv8lJSW4l5eX/XBpVf9ZlbL/ULL0/2C7+P9mvvf/Ybv3/1ao3v9fg4//SjkY - /zYnDv8sIA7/KR8Q/x0XDv+GhYL/JSUluJeeo/1Fndn/Vrj5/2ievf9RZ3L/cXdv/5uej/+Xsrv/bLjs - /x80Qv8ZEwv/HxcM/yIaD/8SDgr/hYSD/yYmJrh0pcn9TLT5/26ctP+gfUf/knhA/5GFSf+QfUT/goVY - /2qKdv+ShGf/XJV+/0iId/+4nEP/4MZq/8KtYf8nJiG4ZK3g/Uqv8v+nlHX/q6ug/0zkUf9nylD/X+Ne - /023jf8xsaT/e5l1/3eZe/8b1tn/wKlR/4VmLv/avWD/XVInuG+15v1KpuP/o39G/728uv9ZzFX/dqRS - /2LRU/9Yp17/LcHA/0W7r/8/qqL/K9zh/4eUav/VtU//2sJt/zQxJbiHut/9T7Lz/zMqHP+joZ7/Y6hk - /1DPVf9d3WH/IEMk/yrN1P8VzdP/Mtng/xHY3/9CmYT/0rdY/6+jfP9zZzbPnrvR/Wm/+P9AXGX/c2JH - /3aGYf9L1E//SaZE/0HCQf9UnZH/G93j/1FcRv9QtrP/JnRw/39ySv/KuXv/XlYzv7S5vP2Bttv/Uqvm - /05OQv+Ge2b/Ynk5/2p7O/9jXib/cFw6/05HMP9SQS7/LSMa/zMnHP8yJRb/npuY/ycnJ7i7u7v9W2Nl - /4vE6v9Vrej/Tmdx/1ZJMf9nVTn/X1A5/21mV/9Kc4z/UWd0/2BWSf9aUEb/Vkk5/5+cmf8nJye4v7+/ - /XFnVv+dn5n/mMLg/3bE9/9Ys+//TJ/W/0yj3f9UtfX/XLn2/1aJrf+WkIj/lo+J/4R+eP+in5v/Jycn - uMLCwv16c2b/29TJ/9fTyv+9ztn/sNDn/5/L6/+YyOr/ncfl/7DK3v/Lzc7/0M7N/9LQzf+2sq7/pqKe - /ycnJ7jS0tL9XFdP/4eDfP+JhYD/hYOA/4WDgP+Fg3//hoR//4iFf/+KhoH/iYaD/4SCgP+DgYD/aGNd - /5eVkv8nJye07+/vstTU1P3Gxsb9w8PD/b+/v/27u7v9uLi4/bS0tP2wsLD9q6ur/aenp/2ioqL9nZ2d - /Zqamv2Li4v0KSkpTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAA= - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 483, 17 + + + 611, 17 + + + 170, 17 + + + 259, 17 + + + 349, 17 + + + 1402, 17 + + + 723, 17 + + + 859, 17 + + + + + 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 + /Q/6VSSzTfDXUQAAAABJRU5ErkJggg== + + + + 1042, 17 + + + 951, 17 + + + 1140, 17 + + + 630, 56 + + + 1260, 17 + + + 1499, 17 + + + 362, 56 + + + 17, 17 + + + 182, 56 + + + 17, 56 + + + 715, 56 + + + 866, 49 + + + 89 + + + + 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 + AgYBAQMiCgo4NxISyQ4EBFkCAAAMAAAABAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAA + AwAAAAMAAAAEAAAABQMCAQMbFA4IdVc6xIdkRvVfQi3fKR0UtAEAADcDAwMEAAECBwAAABMAAAEMAAAA + BQAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYCAQUAAAArAAAAWAAAAGMAAABlOBIT1BUGBrkBAAB3AAAAagAAAGYAAABkAAAAYwAAAGMAAABjAAAA + YwAAAGMAAABjAAAAYwAAAGQAAAB4AAAAigAAAHkHBgR8nXla9qOCY/+igmT+lm5V+gEAAIMAAABjAwkQ + fwURH7UAAQGkAAAAiwAAAHEAAABkAAAAYwAAAGMAAABjAAAAYwAAAGMAAABiAAAAUwAAACIAAAADAAAA + AAkCAg4HAgILDQUEBg0FBFcjDgrPIw4K7SENCu4cCwjvVTAp+TsXGPsaCQj1GAkH8xkKCPAeDAnvIg4K + 7iMOCu4jDgruIw4K7iIOCu4iDgruIg4K7iIOCu9QTk34T09P+jAtLPc0JRz3t5R0/reXdf+xknL/clE9 + /B8NCfAiDgruG0x99zCE0P8ne739F1+M+hYPEvQiDgrvIw4K7h8NCe4eDQnuIQ4K7iIOCu4hDgrtFQkG + 2AIAAJkAAAA2AAAAAiAJCXILAwNAGAsISEIbFPJGHRX+XSog/lEiGv9PLSX+uaWY/pR6i/+YdH3+gmBj + /0MiIf46GRT+Wykf/mMrIf9kLSP+ZCsh/mQtIv9jLCH+Yish/lYrI/+CgYH+hoaG/oeHh/+Hblz+y6uL + /suqiP/EooP+SzAk/jIUD/8+GRP+NHSv/0GK1P49hc7+O5DO/z8iI/5aJRv+WSQa/0ssHf4wGxP+LRMO + /zwYEv5LHxb+OBcR/yANCu4CAACPAAAAGEQWFsYVBgZ+SyIbzU0fF/9UJyD+cj0y/mY4Mv+dpq3+rXGL + /pt2i/+hjqf+mrDL/7mYpf5PLSv+lnFr/raLgv+3jIP+tomB/raIgP+0hn3+s4V8/n5kX/+jo6P+oKCg + /pKSkv+ce2P+17GW/taxk//Al33+YFtX/mhlZP8/QEb+Rpbe/1Sb5/5PluH+OYK2/3ZMRf6XYFX+jVlO + /6B4Vf6jfFr+kWpO/2E9LP5lKR7+aywf/zcWEf4TCAbMAAAAOkAVFUw/FxbZPhsY+V04LP9TPjf/RyQg + /2lHQ/+astb/h3OC/5iOof+Jdob/mnKK/6FliP98Wl3/pJaR/8e5s//HubP/0MG6/9rJwv/gz8f/3s3E + /4SAf//AwMD/u7u7/52al/+8j3n/2KqY/9isl/+kfmr/d3d2/4aGhv9PdZP/ZK3w/2Wu+f9lqvH/LmiL + /01EQv9qWlf/f2RX/62LbP+piGf/pIVm/5FwXf+LWE7/djAj/00fF/8jDwrnAAAARToaGgNbMTG8wKad + /smiov+SrLv+fVt1/kMiG/+Lr7T+o8nq/s647P/Swuf+o5W1/5Jlg/5vT03+OR4O/j0fD/86Hg7+OCIM + /kQuDP9TOw/+VDwQ/ouJh//Ozs7+y8vL/qeUjP/Hlo/+15+X/tekmv+QcWb+oKCg/qOjo/9Gg7D+csf5 + /27C/v5iufP+RGB0/4CAgP53dnX+eV5J/8Cigv69nXv+uZd5/3xnWf61o5/+eTgr/1MhGP4mEAvpAAAA + RikUFR1ySE3emoeZ/qBvfP+Hh4r+kcPJ/ks3Ov9XSlP+fazH/rek1/+wsJv+yLjd/6ybpv6zlbf+rois + /rOJtP+wj6H+i36C/jkdFv8zIAj+QDAU/rOzs//Q0ND+0NDQ/o+Ce/+wqaL+ycXF/sKbmv+gjYj+v7+/ + /q2vsP9KpdD+c9/+/3HY/v5Rsd7+a3B1/5CQkP6FhYX+nn5k/9Swj/7QrYz+upJ1/0dBO/5UTk3+Qyci + /0AaE/4mEAzpAAAARjQXGG+klKz/q4il/6CRov/i2vH/jc3y/1U6Qv+GRmr/UCcp/56mpv/Lzqn/wLy+ + /8Oy1f/Eptr/xKjd/8Ck4P+1hbn/uIGe/7Snr/9IKB3/XlFB/8jIyP/R0dH/z8/P/2JXQ/9+YCn/nIpl + /4V9dv/Jycj/zs7O/5qstP9szdn/etnh/3Tp9v9Mpb7/nJyc/6+vr/+PjIj/v5V7/9evlv/XsZX/nHlk + /3BwcP+IiIj/gYGB/zIXEv8mEAzpAAAARlo4O66st9L+pneY/rykyv/PveP+ubzq/l1IT/+QUXf+eDpX + /oiKef+1uJj+tq23/56PpP6TiJr+iHyS/oFxi/99bIv+eVl6/oVpff+CcXX+UkI9/q6trP/FxcX+vLy8 + /m1UJf+PYhT+d1UX/qysq//Q0ND+0NDQ/omJhf+If2j+6ODf/5iytP5yrLv+wsLC/8XFxf6Zhnv+z5+R + /9inmP7VqZj+hGlb/5OTk/6VlZX+e3h4/0AaE/4mEAzpAAAARm1FSoyyeaH/rG+b/8y13f+hmob/s7eN + /5egm/9zRFv/cUFl/11sfP9dhJv/TYSw/0WLv/9Ckcv/Q5bS/0WY0v9IlM3/T4y//1OAq/9ggp//TVVn + /0BCRP9rZVr/cl49/5FnHf+ichz/h2w8/7m5uf/Gxsb/0dHR/2BcV/8lGwz/LCUd/zQvJ/+8vb3/z8/P + /87Ozv+mg3v/u5ya/8aXk//RmZH/hndx/7W1tf+zs7P/al1a/00gF/8mEAvpAAAARl83QCCMXW3qsnOj + /r2Yv/++rrv+rbSA/pmij/9Ogqz+K4fP/iGa7f8XmvH+F5z1/xee9/4Xn/j+F5/4/heg+P8Xn/j+F5/4 + /hee9/8XnfX+KKL0/kas8f9Unc3+YH+N/k9OQP9EMhH+RjQW/pORjv/m5ub+srGx/jo2MP8aFA3+HhcP + /1VUUv7Ozs7+0dHR/8jIyP47NjP+qayr/83R0f6kgnz+tLGv/8rKyv7AwMD+Wz45/1MiGP4mEAvpAAAA + RkEiJgIrDQ14kWxv/NzG2/+/qcL+comp/iOK1f8Wlu7+F531/hig+v8Yovz+GKP8/xmi/P4co/v+IKT6 + /iKl+v8hpPn+HqP5/hqi+v8Yofr+F6H7/heh+v8Xn/n+G5/2/kOs8/9mncT+JkZd/gsOD/8pKCj+Dw0K + /h8WCf8xIgz+OikP/4qHg/7CwsL+wcHB/7a2tf4zKBb+MiYW/y8nH/59fHv+0NDQ/9DQ0P6trKz+ZDsz + /1YjGf4mEAvpAAAARiANDRtbLS3ZzK68/s2+2f9djMP+F5Dl/hab8/8Yofr+GKP9/hyk/P8vqvv+SLL5 + /1259/5qvPX+cr/0/njB8/96wvP+d8Hz/nG/9P9ku/X+ULT2/jeq9/8go/j+F6H6/heh+v8doPf+Z7ry + /hk6U/8DAwP+BAMD/gUFBP8JBwb+BgUG/xIREP66urr+urq6/21tbf4NCgr+CggI/xEQEP6xsbH+0dHR + /9HR0f6PjY3+fEpA/1gkGv4nEAzpAAAARjEVFYDDnKL/287k/2KUzP8Vkef/F5z1/xii/P8bpP3/MKv7 + /1C1+P9ctfP/XrLt/12t6P9ZpuD/VZ/W/1Wb0P9andH/ZabY/3m24/+Mw+v/nc7x/5nP8/+Ex/T/Yrr1 + /y6m9v8Xnvf/IJ3x/zdjg/8OCgb/FxEL/xkTDP8XEQv/GBMO/xcTDv8dFxD/GxYP/yMbD/8nHhH/JB0S + /y4rJ/+vr6//ycnJ/8TExP+KgYD/kltQ/1gkGv8nEAzpAAAARnlpbdvRrbP+kbHZ/hWO5P8Wm/T+GKL8 + /h2l/f80rPr+Qqz0/jOe6f8wjtL+SHuT/1djVv5bSjL+UD4f/lJAHf9ZRB3+ZU8k/n9qOP9ra1H+Yn2C + /mKSr/97tN7+oM7w/ozI8v89pu/+FZPr/iZxpf9IMg7+WT8U/k03Ff9FMhL+VjsS/1I5EP5NNRL+RTET + /044Ev5RORP+VjwW/1c/GP5pWDv+ta+m/392af61nZj+n2Va/1klG/4mEAzpAAAARpWChv2rhY/+JIrY + /haY8P8Yofr+G6T9/iin+f8rofH+GY3h/kt/nv+dglL+r4dH/6p/Pv6pfjn+oHYy/qyAPP+ofzr+u5RX + /rWLS/+ugkL+solK/q2ERf+cg1X+e46Q/mWbwv9OoN7+FIbb/hx5vf9rVC7+n3g7/qZ7Pf+uhEn+rYNF + /6R7Pv6shVL+poFL/5l3Qv6CXib+aEsV/2BJGP5PPRP+QDIQ/0UzFP6zmZL+n2dc/1gkGv4mEAzpAAAA + RpqDhftki7f/FJDn/xee9/8Yo/3/GaL6/xub8v8ajd//Z3eC/6OAW//Fn2z/x6Bu/8KbZv/KpXn/xKBx + /8qnd//Ipnf/zq2F/9Wzi//RrYL/wJpm/8qibv/Mp3j/wpxq/72ccP+RlpH/P4a8/xV0wf+QfWH/yqZ9 + /7+dcf+KfFz/dnFU/2xyWf+AbUr/v5dl/7qXZv+slVH/z7Zb/+fLaP/rzWj/5spo/8awXv+Th2T/bEU5 + /1QiGf8nEAzpAAAARnJhaNIhjNv+Fpfv/hii+/8Xovz+FZ31/hWQ5v93k6L+xKBx/seea//MoWz+v5VW + /8efaf7DnWj+vplo/sGfdv+tjWL+podd/pt9UP+piFz+vppp/sypef+fm3r+col4/nGJeP9mdV7+uJdq + /pOVif+6mGf+yqV0/oeqi/8Twcf+Gdjg/zLk6/5hoZn+p4li/8WpUP7hwE/+7MpW/+3LWv7ry1/+6spb + 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 + /0AzHv5NfSz+juuS/kHsSP89rDv+RTYO/muCQf+457b+aO1t/kvrUv9QiU/+NScO/kCckv9k6O3+AOjx + /gPr8/8A7vf+AOXu/iyuqv+aysP+ke7y/xzl7f4A7PX+AO/4/wDm7/4fbmz+kIJK/+raof7iwlP+275Y + /6SSS/7Os1X+58VS/+bEUv7bvFD+VE4lmk2k6xQ7ldvufMLy/z+w+v8Yovz/F5z0/ztfdf9OPR//UDcK + /5yLgv/r5O7/0LzX/3doZP9IShT/huGJ/1HqV/9H5k7/M0Mg/z8sDf9UaDD/kvGV/0fxTv9L6FH/RFUj + /0tqR/985On/K+jv/wDt9v8A7PX/AODp/0mLdv+QhWL/i9DM/7709v9g7PH/Gufv/wDe5v8YgoP/Oy8b + /7ite//t4LL/5Mx3/+PGYf/kx2P/5stu/+HJcP+6oUH3KScPXEeg5wE5luCmfr7t/ma99/8ao/v+F5/5 + /jaS0P84MSD+TDQJ/mJLJf+hkIj+kX95/2RSPf5CLwv+Z7Rg/nfqe/9A7Ej+TtRT/kF0N/89ijH+SulQ + /kbuTf885UP+PXsu/kU4G/9awsP+ku7x/j/o7/8T4en+Bc3U/lFPN/9lTjj+XFdA/2Kqqf617fD+oO3w + /xLP1/4XgID+NCYY/0g2Gf6Cc0H+uq56/9DDjP7j1Jj+0rh1/5RxPP43IBHpAAAARgAAAABPouU/WaXf + /IPG9P81rPn/GKL7/x2e9P9DY3X/QCwJ/1w+C/9rUy//kIOD/4yDgP9BMxv/S3Em/6Dro/9R5Vf/SOhO + /0XmS/9P5VX/Z+ls/3Lpdv851j//VXYn/21OH/9Pfmb/kOHl/4Hj5/8p0Nf/J4mE/z0xJP9LPS//SDko + /0E4Kf8mW1n/JW5v/yVhX/8qOjT/LyUb/zMnGv82KBf/LyMS/zYqG//czMP/soJ3/10oH/8nEAzpAAAA + RgAAAABlnM0EU5XM7ZDH7/9sv/b+HKP6/heg+v81n+b+Njs4/ks2E/+ZhYD+zL3S/8i20P6PgXz+YU0d + /n3Edf+u6rD+kOOS/o7fjv+B1H/+fMd1/mKvU/9ZeTH+Y0sh/m9UJ/9kTSX+gI9z/l1yYf9SVT3+VUcz + /lxLN/9SRDP+XU08/z41Lv4zLSj+MSsn/zQuJ/46MSf+RTUl/0Y2I/5ENST+LSYc/y8mHP7cy8j+sYB3 + /10pH/4oEAzpAAAARgAAAAAAAAAArKm16lyk3P+SzPP+TLP4/hii+/8Xn/j+R5nQ/i4vK/9dUUb+uq+1 + /7Wns/5+bl/+YEwr/l9aMP9caTP+YGIy/mRaL/9mVi7+bFgy/nhfNv9xWTD+ZE4r/mROK/9nUCv+oYNe + /oBrVP9aSTb+T0U5/lJHPf9aTkH+Z1lG/2VZSv5dUUT+S0M8/0hAOv5IQTr+TEI4/1dINf5XRzP+PzYq + /zQpHv7cy8f+sH91/18qIP4nEAzpAAAARgAAAAAAAAAAyq2o6n+gw/+Fvun/icn0/zar+P8Yofv/GJ73 + /06Yyv80Nzf/SkI4/2FYTf9jWU3/Y1lM/2VZS/9mWkn/a1tE/29dQP9uXUL/bF1I/3RlT/9uYk7/Y1lN + /2VaTv9oXU7/l4Nu/4d6bf9kWUz/XFVM/1JMRf9VTkj/XldQ/2BZUf9nXFH/bGFS/21hUv9hWlH/YlhP + /2lcS/9rXEj/Ukc5/zsuH//czMj/s4N6/14pH/8nEAzpAAAARgAAAAAAAAAAzK2o6s62sv9dj7/+msvu + /oLH9f8wqfj+GKH6/hif9/9KoNv+QlBZ/0VAOv5lXlb+cGpj/nJrZf9wa2X+cWtk/nNtY/95b2H+fHBd + /nlvY/95cGL+eG9j/nhvY/98cmP+m4pz/qOTgf9tY1n+UVdZ/i9cfv9LSUX+bmlj/3BqZf54b2X+hXZh + /52MdP53bmb+dW5m/3pwZv5+cWD+YlhO/z8xIv7g0c7+sYF4/18rIf4nEAzpAAAARgAAAAAAAAAAza+p + 6ta7tv+XcW7+Q3yv/qHP8P+Cx/X+NKr4/hih+v8Xn/j+N6Xv/1R9mf5AREX+V1RP/nJuav98eXb+gX56 + /oB9ev+AfXr+gH57/oOAfP+Ggn3+i4N6/pKHc/+bim3+lYRp/oJ+d/9Qe5n+XKje/jiY3v9NU1f+g355 + /4aBff6HgXz+i4R7/5SJe/6MhHv+h4J8/4eCff6LhX7+cWtl/zwxJ/7f0Mz+s4N6/1woHv4oEAzpAAAA + RgAAAAAAAAAAzrCr6ta8t/+aaF7/Riwp/0aFtP+iz/D/i8r0/0Ww9/8Zofr/F6H6/xuf9v9FpOT/VH6c + /0pVXf9QUFD/ZWNg/3Vzb/9/e3j/hIB8/4WAev+BfHP/d3Fp/2dmY/9WbHj/Onyo/yCR4P8YmvH/H5/0 + /2O58v9PY3L/j4yK/5uYlf+dmZX/npqV/6Cblf+jnZf/oJuW/6CcmP+fm5f/g356/z80K//g0c3/tIZ9 + /10oHv8nEAzpAAAARgAAAAAAAAAAz7Gs6ta8t/+baF7+RCAU/mpkVf9kncn+lsfr/pvQ9P9lvPb+KKb4 + /xih+v4XoPr+F572/jGl8/9DnNr+SYm2/k58nP9QdpL+TnWQ/kt4mP9Afqn+NYjD/ieW4v8YmfD+F5v0 + /hef+P8Yovv+GKH6/hua8P9JcY/+nJmX/7Wyr/60sq7+tbGu/7Wxrv61sq/+t7Ow/7i0sf64tbH+mJOP + /0o+Mv7h09D+tIZ9/14pIP4nEAzpAAAARgAAAAAAAAAA0bWv6tnBvf+dbGP+RB8T/m9kUP/MyMD+hq/P + /niz4f+q1fP+isr1/1a29/4opvn+GKH6/hih+/8XoPr+F5/4/hed9v8XnPX+Fpz0/hec9f8Xnfb+F573 + /hig+f8Yofv+GKL8/h+l/P8hpPr+F531/hWS6f81d6j+paSj/8nHxv7JyMb+ysjG/8vJx/7Mycf+zcrH + /87LyP7Oy8j+pqOf/0o/NP7h08/+tYd+/14pH/4oEAzpAAAARgAAAAAAAAAA0rex6tnBvP+camH/Qx4T + /21iTf/Y0sf/5uLa/8LS3P9rqdr/jMDo/6nV9P+LyvX/ab72/0Ow+P8qp/n/HaP6/xii+/8Yovv/GKL8 + /xii/P8Zovz/HaT7/yio+/86rvr/Ubb5/2G69v9LrvH/GZHm/xKE2f9Rlsz/0dHR/9zc2//d3Nv/3dzb + /97d3P/e3dz/397c/+De3f/f3dv/paCb/05AL//i08//tIV8/10pIP8nEAzpAAAARgAAAAAAAAAA07iz + 6tvEwP+hcmj+QR0T/l1ROv/Nw7D+7eni/vHu6f/u7er+rszj/2mo2/5+uOT+otDx/p7R9P+Ny/T+fsX1 + /nDA9v9nvff+Y7z3/mW89/9qvvf+b7/2/nG/9P9uu/L+ZLTt/kuk5f8vkdv+U5/a/q7N5v/n6er+7Ovq + /+zr6v7s6+r+7Ovq/+zr6v7s7Ov+7ezr/+vq6f7a2NX+e3Jo/1A6IP7Zw77+rHlw/10pH/4nEAzpAAAA + RgAAAAAAAAAA1by36t3Hw/+8lY3+Rx4W/jIhEP9cU0L+g31x/oyHfv+NiH/+jId+/4mGf/5qe4X+QHKZ + /kuMv/9lp9r+ebfm/oS/6v+Iwu3+iMPt/oC/7P9vten+X6vk/kmd3f85jMv+NXms/k10kP97goP+j4qA + /pmTi/+WkYv+i4aB/4qGgf6IhYL+h4WD/4eFg/6HhYL+iIWD/4WCgP5ybWf+RTgm/2VENP63i4P+mltP + /14qIP4nEAzoAAAARQAAAAAAAAAA3cjE6eHOyv/WvLf/kWFY/0QbFP86GRH/PB4U/z0fFf8+HxX/PR4V + /zwfFv87HhX/Oh0U/zsgGv89Kir/OzhF/zdFXv80TW3/NU9w/zNPcP81SWb/OT5Q/z0xNf8+JB7/PB8V + /zsdE/86HBP/ORwT/zsdFf9AIxv/Oh4W/zYbE/82GhP/NRoT/zQaFP80GRT/MxkT/zMZE/80GBD/Rx4U + /307Lv+fZFn/kEw//1soHv8qEQ3kAQAANAAAAAAAAAAA7uTiz+vg3f/cxsH+1724/rmRif+cbGP+lWNZ + /pZlW/+UYVf+k2BW/5NfVf6TYFb+kV1T/pFcUv+PWlD+kFtR/o1YTv+NWE3+i1ZL/otVSv+KVEn+iFJH + /ohRRv+HT0X+hU1D/oVOQv+DS0D+gko+/oJKP/+BRzz+fkQ5/31DOP5+Qzj+fEI3/3k/NP55PjL+dzww + /3Y7L/52Oi7+gUA0/5NRRP6UUkX+i0c6/0keFv4pEQyzCwQDEAAAAAAAAAAA8+3sVfLq6Pzt4uD+49LO + /tzGwv/aw77+28XA/trCvf/Xvrn+1ru2/9W6tf7StrH+0rWv/tCzrf/Or6n+zKym/s2tp//KqKL+yKag + /seknv/Fopv+wp2W/sGbk/+/mJD+vpeP/ruRif+6kIf+uIyE/reKgf+0hn3+soN6/7B/df6ufXP+q3hu + /6l0af6ncWf+omle/6NqYP6fZFj+nmJW/5tdUP6PTD/+Zy4j/1AkHOwaCwg1GAkHAQAAAAAAAAAAAAAA + APXv7lnx6efa49LP+tzHwvrbxcH628S/+tjAvPrawr762cG9+te+ufrVvLf61bu2+tS6tPrUubT60rax + +tG0rvrPsKv6zrCq+s2vqfrMraf6za2o+sqpo/rJqKL6x6We+siln/rEoJn6xKCZ+sOel/rBnJT6v5iQ + +sCakvq9lIz6u5KJ+rqQiPq5job6uIyD+raIf/q0hn36s4R7+rB/dvqjcmj3jmBXwkspIzM2GhUBAAAA + AP4f/8H//wAA+AAAAAAHAADgAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAA + AAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAA + AMAAAAAAAAAAwAAAAAAAAADgAAAAAAEAACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwICGAHAgIfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACkeFD4bEwyJAQEATwMCAQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEACQAAADUCAABEKw4Org0EBIkAAABLAAAARgAAAEQAAABEAAAA + RAAAAEQAAABEAAAARwAAAF4DAgFRZ1A6vqaBYf+KZ031AQAAYAEFCVICCA6CAAAAZQAAAEsAAABEAAAA + RAAAAEQAAABEAAAAPAAAABAAAAAACwMDIAkDAw4hDgqgLBIN8CcQDPRTNy75Ty0v+y4WFfceDAn1KhEN + 9C4TDvQuEw70LhMO9C0SDfQ2JCH1ZWVl/EdFRPmgf2L9u5p5/4JiTP4mEAv1JT9f+DOEzv4mc6r8IhMV + 9i0SDfQiDgr0JA8L9CkRDPQhDgrpBgIBmQAAABQxDw+pLxUQkUsfF/9sNiv/a05I/7WOmP+ghp7/pJ+z + /4BbYP94T0j/pXBm/6ZxZv+kbmT/pG5j/4NsZ/+bm5v/hH14/8uliP/TsJH/dV9S/1RGQ/89bZ7/TpXh + /z6Jx/91RDz/h01B/4tmR/90Ujz/WC0g/2EoHf8qEQ30AQAAVUEWFmdbODLxfWph/1g+Pv92YG7/lKKu + /6iYtP+cg5v/oW2H/3FbUf+aiXz/oY+A/7Ofif+6pIv/mZaV/8HBwf+kkIX/1qeY/9Gjkf9+dXD/hYWG + /1Gg4P9msvr/RX6o/2FZWP9xW0//sJBw/6uLa/+YfG//gUAz/0UcFP4IAwJ0MBYXQqmLlv+ec33/kKu7 + /044Nv97pcH/vK3N/76xzP+qlKT/gV10/4pfd/9yYWP/MhwO/zwrDv+2trb/z8/P/5qFff/Ou7r/vJCK + /6urq/+EnKz/bND2/3PQ+/9Re5P/i4uL/5J+bv/PrYv/wJt8/1tTTf9dQDr/PxkT/wkDAnVlREqooo+t + /7iowP+yz/P/akJU/2gzRf+kqpX/zMjC/8Cr0f+9pND/s5fL/6t6n/+eipL/WUc6/8HBwf/Ly8v/alQt + /450Qv+inpr/zs7O/4CosP+d0tX/dNrn/4iWnv+ysrL/q4l1/9eulv+riHP/fn5+/4SDg/80FhH/CQQD + dYRgbr+reqT/wanQ/7Kxnv98bnL/fkZt/25+gf9ri6f/V4Ws/0+EsP9Pg6//Unii/15wkP9QVmL/c3Ny + /4uAbf+PZh3/i2gp/729vf/Pz8//XVRG/2FYT/9mcnL/y8zM/7i2tf++kor/0J2W/5yAdv+tra3/g3x6 + /0IbFP8JAwJ1VjA3QaBvivbEpMX/q6eQ/2aWq/8oiNL/HJzy/xee9v8YoPn/F6D6/xeg+f8XoPn/F5/4 + /x+h9v85pu7/SI66/1hqbP82Lhz/gX9+/5GQjv80Kx3/LB8N/4iHhf/Q0ND/mZiX/2RgWf+Oioj/uKyq + /8vLy/94Y1//SB0V/wkDAnUrERI/mHJ49sK72P87jtP/Fpny/xih+v8epfz/NKz6/0my+P9XtvX/X7j1 + /1239f9StPb/Qa/3/yim+f8Yofr/HqL4/1aq4/8OHir/AwMD/wkHBv8RDQn/Xlxc/7+/v/9gXlz/GRML + /zw4Nf/Ozs7/zc3N/3FQSf9LHhb/CQQCdWlERLvVy+H/N5HZ/xec9P8ao/z/M6z7/06w8/9Np+f/UpXF + /019o/9Hdpj/VoGf/3iju/97tNz/kMjv/4DF9P85qfX/G5vy/ytLX/8jGQv/IBgN/yUbDv8rIA//KR8Q + /zElEf8xJRP/TUY7/8/Pz/+1tLT/kWVc/0wfF/8JBAN1nX+C+WWZy/8WmPD/GaP8/ymn+f8omur/TIWl + /5B+VP+Xby7/kWkp/5xzLv+kfDn/pHk3/6N+Qv+If1//hJui/3Ot2P8ikOD/LWOG/4lmLf+SbDP/lG41 + /4pnM/+JaTv/f18u/2lKFv9hSBj/T0Ag/2lVQP+qenH/Sx4W/wkEAnWNhpL2GY7i/xig+v8Yofr/GZXq + /26Gkv+4lGz/yaNz/8unev/NqX3/zqt+/82thf/PrIH/xKBu/8umdP+2lGn/noZj/3GMmv9MfaD/wJxv + /5ecev9ikoD/bJKC/6WFWf+6mln/0bVW/+rLYv/pymL/y7Nd/4RpTf9EHBT/CQQCdTNhjsMYmO//GaP8 + /xWb8/9Ohab/qIlg/6OCWv+yj1X/hoJE/3iGQv90l1D/ZphI/2ORSf9xbD//jIle/yO+wf88z9T/i3pM + /6uCQv+0jFD/ap58/yjc4/8L5e3/bYlp/9i5Tf/szF//6tJ9/+rXlP/u1Hn/6Mlg/1E8I/8JBAN1JYTN + zimk9f8Yovv/F5Dj/4p+a//KuM3/0cLT/3x/NP9D3Un/Q+9L/2DuZv+A7YT/Xu1k/1HmVv9ZgU3/NNzj + /wHi6/9wbT7/jmgo/2VVJP+DYyX/etnW/xrp8P86taL/28Nn/8iqRf+LaCL/a04Y/8Ozev/wz1//oIg+ + /wgDAnUhjt7pNqv4/xih+/8edrP/qJBz/97Q4//fy+f/nJBk/2/kcv9D8Er/c7FO/6enXv+w2Zj/Vu9c + /1C8TP9d1dX/BuLr/3aLbP96qor/KNjf/3WEcf+FuKL/U+vx/xPX2//CtHP/sJJI/6t8O/+BYSP/zK5K + /+/MWv+rkT3/CAMCdSmR3/E+rvn/GKH6/x5klP9/ZTf/0sPH/+DN6P9yXED/c8ls/0btTf9Lcy3/Vj8X + /1KAMf9W7Vz/O7M7/0ukoP8e4+r/LW9g/zh7Z/8X3+f/Jra4/0NQRf9o5+z/AuTt/0BcTP96Z0D/sZVC + /+bFVv/sy1z/38BX/2xMI/8JBAN1NZfg6key+P8Yofv/HGWZ/1FEMP+fkpL/4tHp/3Fmbv9RkFD/We5f + /0XQTP82bzj/Nrc9/0LtSv8dZyL/F1lc/z7k6/8QiIz/KoGB/x/g6P8D4uv/J19f/1LAw/8X6fH/FXV3 + /4NyMf/px1T/7s9m/9fBef+9lXX/TSEZ/wkEA3VAm+PMWLf2/xii+/8febj/VEUr/3toU//j1en/opOi + /0FgJv907Hj/TvFV/3/ug/9g7Wb/P95H/yImGf8oODL/T9/l/xHGy/8toJ3/G+Ts/yTm7v8K09r/Hamt + /xnu9/8PqKz/p5ZQ/+nIV/+SgDr/jH10/7ychf96ZT3/CAUDgjyY4pZvvfP/HqX8/yCX5/9COyz/VkIg + /9fK2P/OvNT/ST8Y/3jfev9B6Uj/SF0m/5m8hf9z7nj/Ub1W/zEvGv9avrz/Debv/wjf5v8E5/D/XsK+ + /3nr7/8N5+//Ae/4/wrR2P95cET/5s97/8WrTf+OfUj/2LtX/+PCUv9rYTC3QZzlSWy16/85rfr/F573 + /ztZaP9QORD/qZqT/9TF2f9pV0f/baxe/1HrWP9Ckz3/Oi8Q/3DLa/9F70z/RYw1/0yCbf9d6u//Auv0 + /wDg6f9keF3/hqWT/6nt8P9V6/H/Bdbe/zQxIv+qnXD/5tWU/+fRgv/lznv/x69Z/zszFIVPo+gGVaTi + 3mi99v8Yovv/MJDQ/z4vEv9eQhP/e2tb/2RXR/9KZSb/f+mD/0bpTf9L2FD/Vuhb/1bmXP9Fly//WlAs + /4TY2P9q4uj/F62u/0E0Jf9KOyr/P11W/1GXmP8ffn//Lygf/zkqGP9IOhr/h3hX/8Shgv9RJhr/CQQD + dQAAAABrm8ifhcLu/zuu+f8YoPj/Pm6L/08+If/FuMn/xbXL/19NJf9+sW3/hMF4/36zbP92pF//ZIpB + /2NTJf9pUCb/fXZU/19kUP9TSDT/V0g3/11OPP9HPjT/OTIt/zkyK/9DNyr/Szso/zswIf9oXFT/wJqS + /08iGv8KBAN1AAAAAL6qq5xyptP/h8j0/yWl+v8gofb/QGV8/1ZNRv9zaF//YlVE/2RWQv9nVz//a1k6 + /2xbQP94ZUj/ZlhD/2VYRP+Kdl3/emxc/1xSR/9SS0T/X1ZN/2NaUP9kWU7/YVdM/1xTSv9mV0X/U0g6 + /21fVf/DnZb/TyIa/wkEAnUAAAAAzK6onLytsf9wpND/fcX1/yKk+f8govf/Rn2i/0lIRf9pZF3/dW9p + /3Rvav91cGj/e3Jl/3tzaf99dGn/gndm/5aGb/+OgXL/TmVz/y5bfP9sZmH/d3Fr/4N4aP+Qg3H/eXJs + /351a/9uZVr/cmVa/8Odlv9PIhr/CgQDdQAAAADOsKucz7Gs/1A6P/91q9T/hMf1/yyo+P8YoPn/OZzf + /0xwif9WWl3/bGpn/316d/+EgX3/hYF8/4B6c/91c2z/W3qJ/zKKx/87qfP/VprK/3x5dv+Wko//mJSP + /56Xj/+alZD/mpWR/4eCfv9yZl7/xKCZ/04iGf8KBAN1AAAAANCzrZzSta//VCYa/3Z7df9+s9z/mM7z + /1C09/8dovr/F5/5/yyj8v83k9H/PIW3/zyBsP84hLj/LY3P/x+Z7P8Xnfb/GKH6/xih+v8hlOP/hIWF + /7q3tf+6t7T/u7i1/725tv++urf/p6Of/3puZf/FoZr/TyIa/wkEA3UAAAAA0raxnNK2sP9TJhr/jYNx + /9vb1v+Tvdz/i8Hp/4/M9f9Vtvf/MKr5/x2j+v8Yofv/GKH6/xih+/8ao/v/Jaf7/zqu+v9Ns/f/Iprt + /xWH2v+qtb7/19fW/9jX1v/Z2Nf/29nX/9za2P+3tLD/fW9k/8Whmv9PIhr/CgQDdQAAAADUubSc1765 + /1YpH/9sX0n/0szC/9/c1v/AzNP/ga3P/3q04f+Qx+//kMz0/33E9f9xwPX/cL/1/3O/9P9vu/D/VKnn + /0ea1/9qo8z/ws/Y/9vZ1//a2df/2tnY/9rZ2P/a2dj/1tTT/4iAdv99ZFL/toqB/08iGv8JBAN1AAAA + ANvGwZzdx8P/lWtj/zobEf9CKyH/SDIo/0gyKP9HMij/RDIt/zU7S/88U3D/SWqN/1B0mf9IcJb/PmCD + /zNIYv89Oj//RzMp/0cyJ/9MNy7/STQs/0MuKP9CLij/QS4p/0AtKf8+Kyb/PSEX/4ZMQP+ZWU3/TiIa + /wsEA2oAAAAA7uTieerd2//aw77/vZiQ/6yDe/+rgHj/qHx0/6d6cf+meXD/o3Vs/6Jzaf+gcWj/n29m + /5xsYv+bamH/mWZc/5dkWv+VYVb/k15U/5FcUf+OV0z/jFVK/4tSR/+HTkP/hUo//4NHO/+HSDz/lVNG + /4hFOP9EHBXwDgUEJAAAAAD07ewI8+3sp+nb2PjeycX83MbC/NvEwPzZwb382MC7/NW7tvzVurX807ex + /NG0rvzNr6j8za6o/MuqpPzIpqD8x6Sd/MWhmvzBnJT8wJqS/L2Vjfy7kor8uI2E/LWHfvyzhHv8sH92 + /K58c/yncmj8hlNJ4UQjHUsAAAAA+f+H/8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAgAAA + AIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAEoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAA + AAAAAAAAAAAAGxsbYyoqKsgrKyvKKysryisrK8orKyvKKioqyioqKsoqKirKKioqyikpKcopKSnKKCgo + yigoKMogICDCAwMDQISEhPajnpX/sqmY/6+nl/+tpJX/qqKT/6qhkv+poJD/p56O/6Kai/+dloj/mpOF + /5iQgv+hmYr/kpKR/x4eHrGTk5P9d10v/35YEv9nTx3/U084/1BOOf9VRiT/X0IP/3FOEP92UhD/eVQR + /31XEf9+VxL/aEoU/6KZiv8lJSW4l5eX/XBpVf9ZlbL/ULL0/2C7+P9mvvf/Ybv3/1ao3v9fg4//SjkY + /zYnDv8sIA7/KR8Q/x0XDv+GhYL/JSUluJeeo/1Fndn/Vrj5/2ievf9RZ3L/cXdv/5uej/+Xsrv/bLjs + /x80Qv8ZEwv/HxcM/yIaD/8SDgr/hYSD/yYmJrh0pcn9TLT5/26ctP+gfUf/knhA/5GFSf+QfUT/goVY + /2qKdv+ShGf/XJV+/0iId/+4nEP/4MZq/8KtYf8nJiG4ZK3g/Uqv8v+nlHX/q6ug/0zkUf9nylD/X+Ne + /023jf8xsaT/e5l1/3eZe/8b1tn/wKlR/4VmLv/avWD/XVInuG+15v1KpuP/o39G/728uv9ZzFX/dqRS + /2LRU/9Yp17/LcHA/0W7r/8/qqL/K9zh/4eUav/VtU//2sJt/zQxJbiHut/9T7Lz/zMqHP+joZ7/Y6hk + /1DPVf9d3WH/IEMk/yrN1P8VzdP/Mtng/xHY3/9CmYT/0rdY/6+jfP9zZzbPnrvR/Wm/+P9AXGX/c2JH + /3aGYf9L1E//SaZE/0HCQf9UnZH/G93j/1FcRv9QtrP/JnRw/39ySv/KuXv/XlYzv7S5vP2Bttv/Uqvm + /05OQv+Ge2b/Ynk5/2p7O/9jXib/cFw6/05HMP9SQS7/LSMa/zMnHP8yJRb/npuY/ycnJ7i7u7v9W2Nl + /4vE6v9Vrej/Tmdx/1ZJMf9nVTn/X1A5/21mV/9Kc4z/UWd0/2BWSf9aUEb/Vkk5/5+cmf8nJye4v7+/ + /XFnVv+dn5n/mMLg/3bE9/9Ys+//TJ/W/0yj3f9UtfX/XLn2/1aJrf+WkIj/lo+J/4R+eP+in5v/Jycn + uMLCwv16c2b/29TJ/9fTyv+9ztn/sNDn/5/L6/+YyOr/ncfl/7DK3v/Lzc7/0M7N/9LQzf+2sq7/pqKe + /ycnJ7jS0tL9XFdP/4eDfP+JhYD/hYOA/4WDgP+Fg3//hoR//4iFf/+KhoH/iYaD/4SCgP+DgYD/aGNd + /5eVkv8nJye07+/vstTU1P3Gxsb9w8PD/b+/v/27u7v9uLi4/bS0tP2wsLD9q6ur/aenp/2ioqL9nZ2d + /Zqamv2Li4v0KSkpTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAA= + + \ No newline at end of file diff --git a/iBMSC/MainWindow.vb b/iBMSC/MainWindow.vb index c123224d9..fd5deba6d 100644 --- a/iBMSC/MainWindow.vb +++ b/iBMSC/MainWindow.vb @@ -1,4657 +1,6785 @@ -Imports System.Linq -Imports iBMSC.Editor - - -Public Class MainWindow - - - 'Public Structure MARGINS - ' Public Left As Integer - ' Public Right As Integer - ' Public Top As Integer - ' Public Bottom As Integer - 'End Structure - - ' _ - 'Public Shared Function DwmIsCompositionEnabled(ByRef en As Integer) As Integer - 'End Function - ' _ - 'Public Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef margin As MARGINS) As Integer - 'End Function - Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer - Public Declare Function ReleaseCapture Lib "user32.dll" Alias "ReleaseCapture" () As Integer - - 'Private Declare Auto Function GetWindowLong Lib "user32" (ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer - 'Private Declare Auto Function SetWindowLong Lib "user32" (ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer - 'Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer - ' _ - 'Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean - 'End Function - - 'Private Const GWL_STYLE As Integer = -16 - 'Private Const WS_CAPTION As Integer = &HC00000 - 'Private Const SWP_NOSIZE As Integer = &H1 - 'Private Const SWP_NOMOVE As Integer = &H2 - 'Private Const SWP_NOZORDER As Integer = &H4 - 'Private Const SWP_NOACTIVATE As Integer = &H10 - 'Private Const SWP_FRAMECHANGED As Integer = &H20 - 'Private Const SWP_REFRESH As Integer = SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_FRAMECHANGED - - - Dim MeasureLength(999) As Double - Dim MeasureBottom(999) As Double - - Public Function MeasureUpper(idx As Integer) As Double - Return MeasureBottom(idx) + MeasureLength(idx) - End Function - - - Dim Notes() As Note = {New Note(niBPM, -1, 1200000, 0, False)} - Dim mColumn(999) As Integer '0 = no column, 1 = 1 column, etc. - Dim GreatestVPosition As Double '+ 2000 = -VS.Minimum - - Dim VSValue As Integer = 0 'Store value before ValueChange event - Dim HSValue As Integer = 0 'Store value before ValueChange event - - 'Dim SortingMethod As Integer = 1 - Dim MiddleButtonMoveMethod As Integer = 0 - Dim TextEncoding As System.Text.Encoding = System.Text.Encoding.UTF8 - Dim DispLang As String = "" 'Display Language - Dim Recent() As String = {"", "", "", "", ""} - Dim NTInput As Boolean = True - Dim ShowFileName As Boolean = False - - Dim BeepWhileSaved As Boolean = True - Dim BPMx1296 As Boolean = False - Dim STOPx1296 As Boolean = False - - Dim IsInitializing As Boolean = True - Dim FirstMouseEnter As Boolean = True - - Dim WAVMultiSelect As Boolean = True - Dim WAVChangeLabel As Boolean = True - Dim BeatChangeMode As Integer = 0 - - 'Dim FloatTolerance As Double = 0.0001R - Dim BMSGridLimit As Double = 1.0R - - Dim LnObj As Integer = 0 '0 for none, 1-1295 for 01-ZZ - - 'IO - Dim FileName As String = "Untitled.bms" - 'Dim TitlePath As New Drawing2D.GraphicsPath - Dim InitPath As String = "" - Dim IsSaved As Boolean = True - - 'Variables for Drag/Drop - Dim DDFileName() As String = {} - Dim SupportedFileExtension() As String = {".bms", ".bme", ".bml", ".pms", ".txt", ".sm", ".ibmsc"} - Dim SupportedAudioExtension() As String = {".wav", ".mp3", ".ogg"} - Dim SupportedImageExtension() As String = {".bmp", ".png", ".jpg", ".jpeg", ".gif", ".mpg", ".mpeg", ".avi", ".m1v", ".m2v", ".m4v", ".mp4", ".webm", ".wmv"} - - 'Variables for theme - 'Dim SaveTheme As Boolean = True - - 'Variables for undo/redo - Dim sUndo(99) As UndoRedo.LinkedURCmd - Dim sRedo(99) As UndoRedo.LinkedURCmd - Dim sI As Integer = 0 - - 'Variables for select tool - Dim DisableVerticalMove As Boolean = False - Dim KMouseOver As Integer = -1 'Mouse is on which note (for drawing green outline) - Dim LastMouseDownLocation As PointF = New Point(-1, -1) 'Mouse is clicked on which point (location for display) (for selection box) - Dim pMouseMove As PointF = New Point(-1, -1) 'Mouse is moved to which point (location for display) (for selection box) - 'Dim KMouseDown As Integer = -1 'Mouse is clicked on which note (for moving) - Dim deltaVPosition As Double = 0 'difference between mouse and VPosition of K - Dim bAdjustLength As Boolean 'If adjusting note length instead of moving it - Dim bAdjustUpper As Boolean 'true = Adjusting upper end, false = adjusting lower end - Dim bAdjustSingle As Boolean 'true if there is only one note to be adjusted - Dim tempY As Integer - Dim tempV As Integer - Dim tempX As Integer - Dim tempH As Integer - Dim MiddleButtonLocation As New Point(0, 0) - Dim MiddleButtonClicked As Boolean = False - Dim MouseMoveStatus As Point = New Point(0, 0) 'mouse is moved to which point (For Status Panel) - 'Dim uCol As Integer 'temp variables for undo, original enabled columnindex - 'Dim uVPos As Double 'temp variables for undo, original vposition - 'Dim uPairWithI As Double 'temp variables for undo, original note length - Dim uAdded As Boolean 'temp variables for undo, if undo command is added - 'Dim uNote As Note 'temp variables for undo, original note - Dim SelectedNotes(-1) As Note 'temp notes for undo - Dim ctrlPressed As Boolean = False 'Indicates if the CTRL key is pressed while mousedown - Dim DuplicatedSelectedNotes As Boolean = False 'Indicates if duplicate notes of select/unselect note - - 'Variables for write tool - Dim ShouldDrawTempNote As Boolean = False - Dim SelectedColumn As Integer = -1 - Dim TempVPosition As Double = -1.0# - Dim TempLength As Double = 0.0# - - 'Variables for post effects tool - Dim vSelStart As Double = 192.0# - Dim vSelLength As Double = 0.0# - Dim vSelHalf As Double = 0.0# - Dim vSelMouseOverLine As Integer = 0 '0 = nothing, 1 = start, 2 = half, 3 = end - Dim vSelAdjust As Boolean = False - Dim vSelK() As Note = {} - Dim vSelPStart As Double = 192.0# - Dim vSelPLength As Double = 0.0# - Dim vSelPHalf As Double = 0.0# - - 'Variables for Full-Screen Mode - Dim isFullScreen As Boolean = False - Dim previousWindowState As FormWindowState = FormWindowState.Normal - Dim previousWindowPosition As New Rectangle(0, 0, 0, 0) - - 'Variables misc - Dim menuVPosition As Double = 0.0# - Dim tempResize As Integer = 0 - - '----AutoSave Options - Dim PreviousAutoSavedFileName As String = "" - Dim AutoSaveInterval As Integer = 120000 - - '----ErrorCheck Options - Dim ErrorCheck As Boolean = True - - '----Header Options - Dim hWAV(1295) As String - Dim hBMP(1295) As String - Dim hBPM(1295) As Long 'x10000 - Dim hSTOP(1295) As Long - Dim hSCROLL(1295) As Long - - '----Grid Options - Dim gSnap As Boolean = True - Dim gShowGrid As Boolean = True 'Grid - Dim gShowSubGrid As Boolean = True 'Sub - Dim gShowBG As Boolean = True 'BG Color - Dim gShowMeasureNumber As Boolean = True 'Measure Label - Dim gShowVerticalLine As Boolean = True 'Vertical - Dim gShowMeasureBar As Boolean = True 'Measure Barline - Dim gShowC As Boolean = True 'Column Caption - Dim gDivide As Integer = 16 - Dim gSub As Integer = 4 - Dim gSlash As Integer = 192 - Dim gxHeight As Single = 1.0! - Dim gxWidth As Single = 1.0! - Dim gWheel As Integer = 96 - Dim gPgUpDn As Integer = 384 - - Dim gDisplayBGAColumn As Boolean = True - Dim gSCROLL As Boolean = True - Dim gSTOP As Boolean = True - Dim gBPM As Boolean = True - 'Dim gA8 As Boolean = False - Dim iPlayer As Integer = 0 - Dim gColumns As Integer = 46 - - '----Visual Options - Dim vo As New visualSettings() - - Public Sub setVO(ByVal xvo As visualSettings) - vo = xvo - End Sub - - '----Preview Options - Structure PlayerArguments - Public Path As String - Public aBegin As String - Public aHere As String - Public aStop As String - Public Sub New(ByVal xPath As String, ByVal xBegin As String, ByVal xHere As String, ByVal xStop As String) - Path = xPath - aBegin = xBegin - aHere = xHere - aStop = xStop - End Sub - End Structure - - Public pArgs() As PlayerArguments = {New PlayerArguments("\uBMplay.exe", - "-P -N0 """"", - "-P -N """"", - "-S"), - New PlayerArguments("\o2play.exe", - "-P -N0 """"", - "-P -N """"", - "-S")} - Public CurrentPlayer As Integer = 0 - Dim PreviewOnClick As Boolean = True - Dim PreviewErrorCheck As Boolean = False - Dim ClickStopPreview As Boolean = True - Dim pTempFileNames() As String = {} - - '----Split Panel Options - Dim PanelWidth() As Single = {0, 100, 0} - Dim PanelHScroll() As Integer = {0, 0, 0} - Dim PanelVScroll() As Integer = {0, 0, 0} - Dim spLock() As Boolean = {False, False, False} - Dim spDiff() As Integer = {0, 0, 0} - Dim PanelFocus As Integer = 1 '0 = Left, 1 = Middle, 2 = Right - Dim spMouseOver As Integer = 1 - - Dim AutoFocusMouseEnter As Boolean = False - Dim FirstClickDisabled As Boolean = True - Dim tempFirstMouseDown As Boolean = False - - Dim spMain() As Panel = {} - - '----Find Delete Replace Options - Dim fdriMesL As Integer - Dim fdriMesU As Integer - Dim fdriLblL As Integer - Dim fdriLblU As Integer - Dim fdriValL As Integer - Dim fdriValU As Integer - Dim fdriCol() As Integer - - - Public Sub New() - InitializeComponent() - Audio.Initialize() - End Sub - - ''' - ''' - ''' - ''' Original horizontal position. - ''' HS.Value - - - Private Function HorizontalPositiontoDisplay(ByVal xHPosition As Integer, ByVal xHSVal As Long) As Integer - Return CInt(xHPosition * gxWidth - xHSVal * gxWidth) - End Function - - ''' - ''' - ''' - ''' Original vertical position. - ''' VS.Value - ''' Height of the panel. (DisplayRectangle, but not ClipRectangle) - - - Private Function NoteRowToPanelHeight(ByVal xVPosition As Double, ByVal xVSVal As Long, ByVal xTHeight As Integer) As Integer - Return xTHeight - CInt((xVPosition + xVSVal) * gxHeight) - 1 - End Function - - Public Function MeasureAtDisplacement(ByVal xVPos As Double) As Integer - 'Return Math.Floor((xVPos + FloatTolerance) / 192) - 'Return Math.Floor(xVPos / 192) - Dim xI1 As Integer - For xI1 = 1 To 999 - If xVPos < MeasureBottom(xI1) Then Exit For - Next - Return xI1 - 1 - End Function - - Private Function GetMaxVPosition() As Double - Return MeasureUpper(999) - End Function - - Private Function SnapToGrid(ByVal xVPos As Double) As Double - Dim xOffset As Double = MeasureBottom(MeasureAtDisplacement(xVPos)) - Dim xRatio As Double = 192.0R / gDivide - Return Math.Floor((xVPos - xOffset) / xRatio) * xRatio + xOffset - End Function - - Private Sub CalculateGreatestVPosition() - 'If K Is Nothing Then Exit Sub - Dim xI1 As Integer - GreatestVPosition = 0 - - If NTInput Then - For xI1 = UBound(Notes) To 0 Step -1 - If Notes(xI1).VPosition + Notes(xI1).Length > GreatestVPosition Then GreatestVPosition = Notes(xI1).VPosition + Notes(xI1).Length - Next - Else - For xI1 = UBound(Notes) To 0 Step -1 - If Notes(xI1).VPosition > GreatestVPosition Then GreatestVPosition = Notes(xI1).VPosition - Next - End If - - Dim xI2 As Integer = -CInt(IIf(GreatestVPosition + 2000 > GetMaxVPosition(), GetMaxVPosition, GreatestVPosition + 2000)) - MainPanelScroll.Minimum = xI2 - LeftPanelScroll.Minimum = xI2 - RightPanelScroll.Minimum = xI2 - End Sub - - - Private Sub SortByVPositionInsertion() 'Insertion Sort - If UBound(Notes) <= 0 Then Exit Sub - Dim xNote As Note - Dim xI1 As Integer - Dim xI2 As Integer - For xI1 = 2 To UBound(Notes) - xNote = Notes(xI1) - For xI2 = xI1 - 1 To 1 Step -1 - If Notes(xI2).VPosition > xNote.VPosition Then - Notes(xI2 + 1) = Notes(xI2) - ' If KMouseDown = xI2 Then KMouseDown += 1 - If xI2 = 1 Then - Notes(xI2) = xNote - ' If KMouseDown = xI1 Then KMouseDown = xI2 - Exit For - End If - Else - Notes(xI2 + 1) = xNote - ' If KMouseDown = xI1 Then KMouseDown = xI2 + 1 - Exit For - End If - Next - Next - - End Sub - - Private Sub SortByVPositionQuick(ByVal xMin As Integer, ByVal xMax As Integer) 'Quick Sort - Dim xNote As Note - Dim iHi As Integer - Dim iLo As Integer - Dim xI1 As Integer - - ' If min >= max, the list contains 0 or 1 items so it is sorted. - If xMin >= xMax Then Exit Sub - - ' Pick the dividing value. - xI1 = CInt((xMax - xMin) / 2) + xMin - xNote = Notes(xI1) - - ' Swap it to the front. - Notes(xI1) = Notes(xMin) - - iLo = xMin - iHi = xMax - Do - ' Look down from hi for a value < med_value. - Do While Notes(iHi).VPosition >= xNote.VPosition - iHi = iHi - 1 - If iHi <= iLo Then Exit Do - Loop - If iHi <= iLo Then - Notes(iLo) = xNote - Exit Do - End If - - ' Swap the lo and hi values. - Notes(iLo) = Notes(iHi) - - ' Look up from lo for a value >= med_value. - iLo = iLo + 1 - Do While Notes(iLo).VPosition < xNote.VPosition - iLo = iLo + 1 - If iLo >= iHi Then Exit Do - Loop - If iLo >= iHi Then - iLo = iHi - Notes(iHi) = xNote - Exit Do - End If - - ' Swap the lo and hi values. - Notes(iHi) = Notes(iLo) - Loop - - ' Sort the two sublists. - SortByVPositionQuick(xMin, iLo - 1) - SortByVPositionQuick(iLo + 1, xMax) - End Sub - - Private Sub SortByVPositionQuick3(ByVal xMin As Integer, ByVal xMax As Integer) - Dim xxMin As Integer - Dim xxMax As Integer - Dim xxMid As Integer - Dim xNote As Note - Dim xNoteMid As Note - Dim xI1 As Integer - Dim xI2 As Integer - Dim xI3 As Integer - - 'If xMax = 0 Then - ' xMin = LBound(K1) - ' xMax = UBound(K1) - 'End If - xxMin = xMin - xxMax = xMax - xxMid = xMax - xMin + 1 - xI1 = CInt(Int(xxMid * Rnd())) + xMin - xI2 = CInt(Int(xxMid * Rnd())) + xMin - xI3 = CInt(Int(xxMid * Rnd())) + xMin - If Notes(xI1).VPosition <= Notes(xI2).VPosition And Notes(xI2).VPosition <= Notes(xI3).VPosition Then - xxMid = xI2 - Else - If Notes(xI2).VPosition <= Notes(xI1).VPosition And Notes(xI1).VPosition <= Notes(xI3).VPosition Then - xxMid = xI1 - Else - xxMid = xI3 - End If - End If - xNoteMid = Notes(xxMid) - Do - Do While Notes(xxMin).VPosition < xNoteMid.VPosition And xxMin < xMax - xxMin = xxMin + 1 - Loop - Do While xNoteMid.VPosition < Notes(xxMax).VPosition And xxMax > xMin - xxMax = xxMax - 1 - Loop - If xxMin <= xxMax Then - xNote = Notes(xxMin) - Notes(xxMin) = Notes(xxMax) - Notes(xxMax) = xNote - xxMin = xxMin + 1 - xxMax = xxMax - 1 - End If - Loop Until xxMin > xxMax - If xxMax - xMin < xMax - xxMin Then - If xMin < xxMax Then SortByVPositionQuick3(xMin, xxMax) - If xxMin < xMax Then SortByVPositionQuick3(xxMin, xMax) - Else - If xxMin < xMax Then SortByVPositionQuick3(xxMin, xMax) - If xMin < xxMax Then SortByVPositionQuick3(xMin, xxMax) - End If - End Sub - - - Private Sub UpdateMeasureBottom() - MeasureBottom(0) = 0.0# - For xI1 As Integer = 0 To 998 - MeasureBottom(xI1 + 1) = MeasureBottom(xI1) + MeasureLength(xI1) - Next - End Sub - - Private Function PathIsValid(ByVal sPath As String) As Boolean - Return File.Exists(sPath) Or Directory.Exists(sPath) - End Function - - Public Function PrevCodeToReal(ByVal InitStr As String) As String - Dim xFileName As String = IIf(Not PathIsValid(FileName), - IIf(InitPath = "", My.Application.Info.DirectoryPath, InitPath), - ExcludeFileName(FileName)) _ - & "\___TempBMS.bms" - Dim xMeasure As Integer = MeasureAtDisplacement(Math.Abs(PanelVScroll(PanelFocus))) - Dim xS1 As String = Replace(InitStr, "", My.Application.Info.DirectoryPath) - Dim xS2 As String = Replace(xS1, "", xMeasure) - Dim xS3 As String = Replace(xS2, "", xFileName) - Return xS3 - End Function - - Private Sub SetFileName(ByVal xFileName As String) - FileName = xFileName.Trim - InitPath = ExcludeFileName(FileName) - SetIsSaved(IsSaved) - End Sub - - Private Sub SetIsSaved(ByVal isSaved As Boolean) - 'pttl.Refresh() - 'pIsSaved.Visible = Not xBool - Dim xVersion As String = My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor & - IIf(My.Application.Info.Version.Build = 0, "", "." & My.Application.Info.Version.Build) - Text = IIf(isSaved, "", "*") & GetFileName(FileName) & " - " & My.Application.Info.Title & " " & xVersion - Me.IsSaved = isSaved - End Sub - - Private Sub PreviewNote(ByVal xFileLocation As String, ByVal bStop As Boolean) - If bStop Then - Audio.StopPlaying() - End If - Audio.Play(xFileLocation) - End Sub - - Private Sub AddNote(note As Note, - Optional ByVal xSelected As Boolean = False, - Optional ByVal OverWrite As Boolean = True, - Optional ByVal SortAndUpdatePairing As Boolean = True) - - If note.VPosition < 0 Or note.VPosition >= GetMaxVPosition() Then Exit Sub - - Dim xI1 As Integer = 1 - - If OverWrite Then - Do While xI1 <= UBound(Notes) - If Notes(xI1).VPosition = note.VPosition And - Notes(xI1).ColumnIndex = note.ColumnIndex Then - RemoveNote(xI1) - Else - xI1 += 1 - End If - Loop - End If - - ReDim Preserve Notes(UBound(Notes) + 1) - note.Selected = note.Selected And nEnabled(note.ColumnIndex) - Notes(UBound(Notes)) = note - - If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() - CalculateTotalPlayableNotes() - End Sub - - Private Sub RemoveNote(ByVal I As Integer, Optional ByVal SortAndUpdatePairing As Boolean = True) - KMouseOver = -1 - Dim xI2 As Integer - - If TBWavIncrease.Checked Then - If Notes(I).Value = LWAV.SelectedIndex * 10000 Then - DecreaseCurrentWav() - End If - End If - - For xI2 = I + 1 To UBound(Notes) - Notes(xI2 - 1) = Notes(xI2) - Next - ReDim Preserve Notes(UBound(Notes) - 1) - If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() - - End Sub - - Private Sub AddNotesFromClipboard(Optional ByVal xSelected As Boolean = True, Optional ByVal SortAndUpdatePairing As Boolean = True) - Dim xStrLine() As String = Split(Clipboard.GetText, vbCrLf) - - Dim xI1 As Integer - For xI1 = 0 To UBound(Notes) - Notes(xI1).Selected = False - Next - - Dim xVS As Long = PanelVScroll(PanelFocus) - Dim xTempVP As Double - Dim xKbu() As Note = Notes - - If xStrLine(0) = "iBMSC Clipboard Data" Then - If NTInput Then ReDim Preserve Notes(0) - - 'paste - Dim xStrSub() As String - For xI1 = 1 To UBound(xStrLine) - If xStrLine(xI1).Trim = "" Then Continue For - xStrSub = Split(xStrLine(xI1), " ") - xTempVP = Val(xStrSub(1)) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) - If UBound(xStrSub) = 5 And xTempVP >= 0 And xTempVP < GetMaxVPosition() Then - ReDim Preserve Notes(UBound(Notes) + 1) - With Notes(UBound(Notes)) - .ColumnIndex = Val(xStrSub(0)) - .VPosition = xTempVP - .Value = Val(xStrSub(2)) - .LongNote = CBool(Val(xStrSub(3))) - .Hidden = CBool(Val(xStrSub(4))) - .Landmine = CBool(Val(xStrSub(5))) - .Selected = xSelected - End With - End If - Next - - 'convert - If NTInput Then - ConvertBMSE2NT() - - For xI1 = 1 To UBound(Notes) - Notes(xI1 - 1) = Notes(xI1) - Next - ReDim Preserve Notes(UBound(Notes) - 1) - - Dim xKn() As Note = Notes - Notes = xKbu - - Dim xIStart As Integer = Notes.Length - ReDim Preserve Notes(UBound(Notes) + xKn.Length) - - For xI1 = xIStart To UBound(Notes) - Notes(xI1) = xKn(xI1 - xIStart) - Next - End If - - ElseIf xStrLine(0) = "iBMSC Clipboard Data xNT" Then - If Not NTInput Then ReDim Preserve Notes(0) - - 'paste - Dim xStrSub() As String - For xI1 = 1 To UBound(xStrLine) - If xStrLine(xI1).Trim = "" Then Continue For - xStrSub = Split(xStrLine(xI1), " ") - xTempVP = Val(xStrSub(1)) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) - If UBound(xStrSub) = 5 And xTempVP >= 0 And xTempVP < GetMaxVPosition() Then - ReDim Preserve Notes(UBound(Notes) + 1) - With Notes(UBound(Notes)) - .ColumnIndex = Val(xStrSub(0)) - .VPosition = xTempVP - .Value = Val(xStrSub(2)) - .Length = Val(xStrSub(3)) - .Hidden = CBool(Val(xStrSub(4))) - .Landmine = CBool(Val(xStrSub(5))) - .Selected = xSelected - End With - End If - Next - - 'convert - If Not NTInput Then - ConvertNT2BMSE() - - For xI1 = 1 To UBound(Notes) - Notes(xI1 - 1) = Notes(xI1) - Next - ReDim Preserve Notes(UBound(Notes) - 1) - - Dim xKn() As Note = Notes - Notes = xKbu - - Dim xIStart As Integer = Notes.Length - ReDim Preserve Notes(UBound(Notes) + xKn.Length) - - For xI1 = xIStart To UBound(Notes) - Notes(xI1) = xKn(xI1 - xIStart) - Next - End If - - ElseIf xStrLine(0) = "BMSE ClipBoard Object Data Format" Then - If NTInput Then ReDim Preserve Notes(0) - - 'paste - For xI1 = 1 To UBound(xStrLine) - ' zdr: holy crap this is obtuse - Dim posStr = Mid(xStrLine(xI1), 5, 7) - Dim vPos = Val(posStr) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) - - Dim bmsIdent = Mid(xStrLine(xI1), 1, 3) - Dim lineCol = BMSEChannelToColumnIndex(bmsIdent) - - Dim Value = Val(Mid(xStrLine(xI1), 12)) * 10000 - - Dim attribute = Mid(xStrLine(xI1), 4, 1) - - Dim validCol = Len(xStrLine(xI1)) > 11 And lineCol > 0 - Dim inRange = vPos >= 0 And vPos < GetMaxVPosition() - If validCol And inRange Then - ReDim Preserve Notes(UBound(Notes) + 1) - - With Notes(UBound(Notes)) - .ColumnIndex = lineCol - .VPosition = vPos - .Value = Value - .LongNote = attribute = "2" - .Hidden = attribute = "1" - .Selected = xSelected And nEnabled(.ColumnIndex) - End With - End If - Next - - 'convert - If NTInput Then - ConvertBMSE2NT() - - For xI1 = 1 To UBound(Notes) - Notes(xI1 - 1) = Notes(xI1) - Next - ReDim Preserve Notes(UBound(Notes) - 1) - - Dim xKn() As Note = Notes - Notes = xKbu - - Dim xIStart As Integer = Notes.Length - ReDim Preserve Notes(UBound(Notes) + xKn.Length) - - For xI1 = xIStart To UBound(Notes) - Notes(xI1) = xKn(xI1 - xIStart) - Next - End If - End If - - If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() - CalculateTotalPlayableNotes() - End Sub - - Private Sub CopyNotes(Optional ByVal Unselect As Boolean = True) - Dim xStrAll As String = "iBMSC Clipboard Data" & IIf(NTInput, " xNT", "") - Dim xI1 As Integer - Dim MinMeasure As Double = 999 - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected And MeasureAtDisplacement(Notes(xI1).VPosition) < MinMeasure Then MinMeasure = MeasureAtDisplacement(Notes(xI1).VPosition) - Next - MinMeasure = MeasureBottom(MinMeasure) - - If Not NTInput Then - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected Then - xStrAll &= vbCrLf & Notes(xI1).ColumnIndex.ToString & " " & - (Notes(xI1).VPosition - MinMeasure).ToString & " " & - Notes(xI1).Value.ToString & " " & - CInt(Notes(xI1).LongNote).ToString & " " & - CInt(Notes(xI1).Hidden).ToString & " " & - CInt(Notes(xI1).Landmine).ToString - Notes(xI1).Selected = Not Unselect - End If - Next - - Else - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected Then - xStrAll &= vbCrLf & Notes(xI1).ColumnIndex.ToString & " " & - (Notes(xI1).VPosition - MinMeasure).ToString & " " & - Notes(xI1).Value.ToString & " " & - Notes(xI1).Length.ToString & " " & - CInt(Notes(xI1).Hidden).ToString & " " & - CInt(Notes(xI1).Landmine).ToString - Notes(xI1).Selected = Not Unselect - End If - Next - End If - - Clipboard.SetText(xStrAll) - End Sub - - Private Sub RemoveNotes(Optional ByVal SortAndUpdatePairing As Boolean = True) - If UBound(Notes) = 0 Then Exit Sub - - KMouseOver = -1 - Dim xI1 As Integer = 1 - Dim xI2 As Integer - Do - If Notes(xI1).Selected Then - For xI2 = xI1 + 1 To UBound(Notes) - Notes(xI2 - 1) = Notes(xI2) - Next - ReDim Preserve Notes(UBound(Notes) - 1) - xI1 = 0 - End If - xI1 += 1 - Loop While xI1 < UBound(Notes) + 1 - If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() - CalculateTotalPlayableNotes() - End Sub - - Private Function EnabledColumnIndexToColumnArrayIndex(ByVal cEnabled As Integer) As Integer - Dim xI1 As Integer = 0 - Do - If xI1 >= gColumns Then Exit Do - If Not nEnabled(xI1) Then cEnabled += 1 - If xI1 >= cEnabled Then Exit Do - xI1 += 1 - Loop - Return cEnabled - End Function - - Private Function ColumnArrayIndexToEnabledColumnIndex(ByVal cReal As Integer) As Integer - Dim xI1 As Integer - For xI1 = 0 To cReal - 1 - If Not nEnabled(xI1) Then cReal -= 1 - Next - Return cReal - End Function - - Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed - If pTempFileNames IsNot Nothing Then - For Each xStr As String In pTempFileNames - IO.File.Delete(xStr) - Next - End If - If PreviousAutoSavedFileName <> "" Then IO.File.Delete(PreviousAutoSavedFileName) - End Sub - - Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing - If Not IsSaved Then - Dim xStr As String = Strings.Messages.SaveOnExit - If e.CloseReason = CloseReason.WindowsShutDown Then xStr = Strings.Messages.SaveOnExit1 - If e.CloseReason = CloseReason.TaskManagerClosing Then xStr = Strings.Messages.SaveOnExit2 - - Dim xResult As MsgBoxResult = MsgBox(xStr, MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question, Me.Text) - - If xResult = MsgBoxResult.Yes Then - If ExcludeFileName(FileName) = "" Then - Dim xDSave As New SaveFileDialog - xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & - Strings.FileType.BMS & "|*.bms|" & - Strings.FileType.BME & "|*.bme|" & - Strings.FileType.BML & "|*.bml|" & - Strings.FileType.PMS & "|*.pms|" & - Strings.FileType.TXT & "|*.txt|" & - Strings.FileType._all & "|*.*" - xDSave.DefaultExt = "bms" - xDSave.InitialDirectory = InitPath - - If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then e.Cancel = True : Exit Sub - SetFileName(xDSave.FileName) - End If - Dim xStrAll As String = SaveBMS() - My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) - NewRecent(FileName) - If BeepWhileSaved Then Beep() - End If - - If xResult = MsgBoxResult.Cancel Then e.Cancel = True - End If - - If Not e.Cancel Then - 'If SaveTheme Then - ' My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\Skin.cff", SaveSkinCFF, False, System.Text.Encoding.Unicode) - 'Else - ' My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\Skin.cff", "", False, System.Text.Encoding.Unicode) - 'End If - ' - 'My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\PlayerArgs.cff", SavePlayerCFF, False, System.Text.Encoding.Unicode) - 'My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\Config.cff", SaveCFF, False, System.Text.Encoding.Unicode) - 'My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\PreConfig.cff", "", False, System.Text.Encoding.Unicode) - Me.SaveSettings(My.Application.Info.DirectoryPath & "\iBMSC.Settings.xml", False) - End If - End Sub - - Private Function FilterFileBySupported(ByVal xFile() As String, ByVal xFilter() As String) As String() - Dim xPath(-1) As String - For xI1 As Integer = 0 To UBound(xFile) - If My.Computer.FileSystem.FileExists(xFile(xI1)) And Array.IndexOf(xFilter, Path.GetExtension(xFile(xI1))) <> -1 Then - ReDim Preserve xPath(UBound(xPath) + 1) - xPath(UBound(xPath)) = xFile(xI1) - End If - - If My.Computer.FileSystem.DirectoryExists(xFile(xI1)) Then - Dim xFileNames() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(xFile(xI1)).GetFiles() - For Each xStr As FileInfo In xFileNames - If Array.IndexOf(xFilter, xStr.Extension) = -1 Then Continue For - ReDim Preserve xPath(UBound(xPath) + 1) - xPath(UBound(xPath)) = xStr.FullName - Next - End If - Next - - Return xPath - End Function - - Private Sub InitializeNewBMS() - 'ReDim K(0) - 'With K(0) - ' .ColumnIndex = niBPM - ' .VPosition = -1 - ' .LongNote = False - ' .Selected = False - ' .Value = 1200000 - 'End With - - THTitle.Text = "" - THArtist.Text = "" - THGenre.Text = "" - THBPM.Value = 120 - If CHPlayer.SelectedIndex = -1 Then CHPlayer.SelectedIndex = 0 - CHRank.SelectedIndex = 3 - THPlayLevel.Text = "" - THSubTitle.Text = "" - THSubArtist.Text = "" - THStageFile.Text = "" - THBanner.Text = "" - THBackBMP.Text = "" - CHDifficulty.SelectedIndex = 0 - THExRank.Text = "" - THTotal.Text = "" - THComment.Text = "" - 'THLnType.Text = "1" - CHLnObj.SelectedIndex = 0 - - TExpansion.Text = "" - - LBeat.Items.Clear() - For xI1 As Integer = 0 To 999 - MeasureLength(xI1) = 192.0R - MeasureBottom(xI1) = xI1 * 192.0R - LBeat.Items.Add(Add3Zeros(xI1) & ": 1 ( 4 / 4 )") - Next - End Sub - - Private Sub InitializeOpenBMS() - CHPlayer.SelectedIndex = 0 - 'THLnType.Text = "" - End Sub - - Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles Me.DragEnter - If e.Data.GetDataPresent(DataFormats.FileDrop) Then - e.Effect = DragDropEffects.Copy - DDFileName = FilterFileBySupported(CType(e.Data.GetData(DataFormats.FileDrop), String()), SupportedFileExtension) - Else - e.Effect = DragDropEffects.None - End If - RefreshPanelAll() - End Sub - - Private Sub Form1_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DragLeave - ReDim DDFileName(-1) - RefreshPanelAll() - End Sub - - Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles Me.DragDrop - ReDim DDFileName(-1) - If Not e.Data.GetDataPresent(DataFormats.FileDrop) Then Return - - Dim xOrigPath() As String = CType(e.Data.GetData(DataFormats.FileDrop), String()) - Dim xPath() As String = FilterFileBySupported(xOrigPath, SupportedFileExtension) - If xPath.Length > 0 Then - Dim xProg As New fLoadFileProgress(xPath, IsSaved) - xProg.ShowDialog(Me) - End If - - RefreshPanelAll() - End Sub - - Private Sub setFullScreen(ByVal value As Boolean) - If value Then - If Me.WindowState = FormWindowState.Minimized Then Exit Sub - - Me.SuspendLayout() - previousWindowPosition.Location = Me.Location - previousWindowPosition.Size = Me.Size - previousWindowState = Me.WindowState - - Me.WindowState = FormWindowState.Normal - Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None - Me.WindowState = FormWindowState.Maximized - ToolStripContainer1.TopToolStripPanelVisible = False - - Me.ResumeLayout() - isFullScreen = True - Else - Me.SuspendLayout() - Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable - ToolStripContainer1.TopToolStripPanelVisible = True - Me.WindowState = FormWindowState.Normal - - Me.WindowState = previousWindowState - If Me.WindowState = FormWindowState.Normal Then - Me.Location = previousWindowPosition.Location - Me.Size = previousWindowPosition.Size - End If - - Me.ResumeLayout() - isFullScreen = False - End If - End Sub - - Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown - Select Case e.KeyCode - Case Keys.F11 - setFullScreen(Not isFullScreen) - End Select - End Sub - - Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp - RefreshPanelAll() - POStatusRefresh() - End Sub - - Friend Sub ReadFile(ByVal xPath As String) - Select Case LCase(Path.GetExtension(xPath)) - Case ".bms", ".bme", ".bml", ".pms", ".txt" - OpenBMS(My.Computer.FileSystem.ReadAllText(xPath, TextEncoding)) - ClearUndo() - NewRecent(xPath) - SetFileName(xPath) - SetIsSaved(True) - - Case ".sm" - If OpenSM(My.Computer.FileSystem.ReadAllText(xPath, TextEncoding)) Then Return - InitPath = ExcludeFileName(xPath) - ClearUndo() - SetFileName("Untitled.bms") - SetIsSaved(False) - - Case ".ibmsc" - OpeniBMSC(xPath) - InitPath = ExcludeFileName(xPath) - NewRecent(xPath) - SetFileName("Imported_" & GetFileName(xPath)) - SetIsSaved(False) - - End Select - End Sub - - - Public Function GCD(ByVal NumA As Double, ByVal NumB As Double) As Double - Dim xNMax As Double = NumA - Dim xNMin As Double = NumB - If NumA < NumB Then - xNMax = NumB - xNMin = NumA - End If - Do While xNMin >= BMSGridLimit - GCD = xNMax - Math.Floor(xNMax / xNMin) * xNMin - xNMax = xNMin - xNMin = GCD - Loop - GCD = xNMax - End Function - - Private Shared Function LoadCursorFromFile(ByVal fileName As String) As IntPtr - End Function - Public Shared Function ActuallyLoadCursor(ByVal path As String) As Cursor - Return New Cursor(LoadCursorFromFile(path)) - End Function - - Private Sub Unload() Handles MyBase.Disposed - Audio.Finalize() - End Sub - - Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - 'On Error Resume Next - Me.TopMost = True - Me.SuspendLayout() - Me.Visible = False - - 'POBMP.Dispose() - 'POBGA.Dispose() - - 'Me.MaximizedBounds = Screen.GetWorkingArea(Me) - 'Me.Visible = False - SetFileName(FileName) - 'Me.ShowCaption = False - 'SetWindowText(Me.Handle.ToInt32, FileName) - - InitializeNewBMS() - 'nBeatD.SelectedIndex = 4 - - Try - Dim xTempFileName As String = RandomFileName(".cur") - My.Computer.FileSystem.WriteAllBytes(xTempFileName, My.Resources.CursorResizeDown, False) - Dim xDownCursor As Cursor = ActuallyLoadCursor(xTempFileName) - My.Computer.FileSystem.WriteAllBytes(xTempFileName, My.Resources.CursorResizeLeft, False) - Dim xLeftCursor As Cursor = ActuallyLoadCursor(xTempFileName) - My.Computer.FileSystem.WriteAllBytes(xTempFileName, My.Resources.CursorResizeRight, False) - Dim xRightCursor As Cursor = ActuallyLoadCursor(xTempFileName) - File.Delete(xTempFileName) - - POWAVResizer.Cursor = xDownCursor - POBMPResizer.Cursor = xDownCursor - POBeatResizer.Cursor = xDownCursor - POExpansionResizer.Cursor = xDownCursor - - POptionsResizer.Cursor = xLeftCursor - - SpL.Cursor = xRightCursor - SpR.Cursor = xLeftCursor - Catch ex As Exception - - End Try - - spMain = New Panel() {PMainInL, PMainIn, PMainInR} - - Dim xI1 As Integer - - sUndo(0) = New UndoRedo.NoOperation - sUndo(1) = New UndoRedo.NoOperation - sRedo(0) = New UndoRedo.NoOperation - sRedo(1) = New UndoRedo.NoOperation - sI = 0 - - LWAV.Items.Clear() - LBMP.Items.Clear() - For xI1 = 1 To 1295 - LWAV.Items.Add(C10to36(xI1) & ":") - LBMP.Items.Add(C10to36(xI1) & ":") - Next - LWAV.SelectedIndex = 0 - LBMP.SelectedIndex = 0 - CHPlayer.SelectedIndex = 0 - - CalculateGreatestVPosition() - TBLangRefresh_Click(TBLangRefresh, Nothing) - TBThemeRefresh_Click(TBThemeRefresh, Nothing) - - POHeaderPart2.Visible = False - POGridPart2.Visible = False - POWaveFormPart2.Visible = False - - If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\iBMSC.Settings.xml") Then - LoadSettings(My.Application.Info.DirectoryPath & "\iBMSC.Settings.xml") - 'Else - '---- Settings for first-time start-up --------------------------------------------------------------------------- - 'Me.LoadLocale(My.Application.Info.DirectoryPath & "\Data\chs.Lang.xml") - '----------------------------------------------------------------------------------------------------------------- - End If - 'On Error GoTo 0 - SetIsSaved(True) - - Dim xStr() As String = Environment.GetCommandLineArgs - 'Dim xStr() As String = {Application.ExecutablePath, "C:\Users\User\Desktop\yang run xuan\SoFtwArES\Games\O2Mania\music\SHOOT!\shoot! -NM-.bms"} - - If xStr.Length = 2 Then - ReadFile(xStr(1)) - If LCase(Path.GetExtension(xStr(1))) = ".ibmsc" AndAlso GetFileName(xStr(1)).StartsWith("AutoSave_", True, Nothing) Then GoTo 1000 - End If - - 'pIsSaved.Visible = Not IsSaved - IsInitializing = False - - If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length > 1 Then GoTo 1000 - Dim xFiles() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(My.Application.Info.DirectoryPath).GetFiles("AutoSave_*.IBMSC") - If xFiles Is Nothing OrElse xFiles.Length = 0 Then GoTo 1000 - - 'Me.TopMost = True - If MsgBox(Replace(Strings.Messages.RestoreAutosavedFile, "{}", xFiles.Length), MsgBoxStyle.YesNo Or MsgBoxStyle.MsgBoxSetForeground) = MsgBoxResult.Yes Then - For Each xF As FileInfo In xFiles - 'MsgBox(xF.FullName) - System.Diagnostics.Process.Start(Application.ExecutablePath, """" & xF.FullName & """") - Next - End If - - For Each xF As FileInfo In xFiles - ReDim Preserve pTempFileNames(UBound(pTempFileNames) + 1) - pTempFileNames(UBound(pTempFileNames)) = xF.FullName - Next - -1000: - IsInitializing = False - POStatusRefresh() - Me.ResumeLayout() - - tempResize = Me.WindowState - Me.TopMost = False - Me.WindowState = tempResize - - Me.Visible = True - End Sub - - Private Sub UpdatePairing() - Dim i As Integer, j As Integer - - If NTInput Then - For i = 0 To UBound(Notes) - Notes(i).HasError = False - Notes(i).LNPair = 0 - If Notes(i).Length < 0 Then Notes(i).Length = 0 - Next - - For i = 1 To UBound(Notes) - If Notes(i).Length <> 0 Then - For j = i + 1 To UBound(Notes) - If Notes(j).VPosition > Notes(i).VPosition + Notes(i).Length Then Exit For - If Notes(j).ColumnIndex = Notes(i).ColumnIndex Then Notes(j).HasError = True - Next - Else - For j = i + 1 To UBound(Notes) - If Notes(j).VPosition > Notes(i).VPosition Then Exit For - If Notes(j).ColumnIndex = Notes(i).ColumnIndex Then Notes(j).HasError = True - Next - - If Notes(i).Value \ 10000 = LnObj AndAlso Not IsColumnNumeric(Notes(i).ColumnIndex) Then - For j = i - 1 To 1 Step -1 - If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For - If Notes(j).Hidden Then Continue For - - If Notes(j).Length <> 0 OrElse Notes(j).Value \ 10000 = LnObj Then - Notes(i).HasError = True - Else - Notes(i).LNPair = j - Notes(j).LNPair = i - End If - Exit For - Next - If j = 0 Then - Notes(i).HasError = True - End If - End If - End If - Next - - Else - For i = 0 To UBound(Notes) - Notes(i).HasError = False - Notes(i).LNPair = 0 - Next - - For i = 1 To UBound(Notes) - - If Notes(i).LongNote Then - 'LongNote: If overlapping a note, then error. - ' Else if already matched by a LongNote below, then match it. - ' Otherwise match anything above. - ' If ShortNote above then error on above. - ' If nothing above then error. - For j = i - 1 To 1 Step -1 - If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For - If Notes(j).VPosition = Notes(i).VPosition Then - Notes(i).HasError = True - GoTo EndSearch - ElseIf Notes(j).LongNote And Notes(j).LNPair = i Then - Notes(i).LNPair = j - GoTo EndSearch - Else - Exit For - End If - Next - - For j = i + 1 To UBound(Notes) - If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For - Notes(i).LNPair = j - Notes(j).LNPair = i - If Not Notes(j).LongNote AndAlso Notes(j).Value \ 10000 <> LnObj Then - Notes(j).HasError = True - End If - Exit For - Next - - If j = UBound(Notes) + 1 Then - Notes(i).HasError = True - End If -EndSearch: - - ElseIf Notes(i).Value \ 10000 = LnObj And - Not IsColumnNumeric(Notes(i).ColumnIndex) Then - 'LnObj: Match anything below. - ' If matching a LongNote not matching back, then error on below. - ' If overlapping a note, then error. - ' If mathcing a LnObj below, then error on below. - ' If nothing below, then error. - For j = i - 1 To 1 Step -1 - If Notes(i).ColumnIndex <> Notes(j).ColumnIndex Then Continue For - If Notes(j).LNPair <> 0 And Notes(j).LNPair <> i Then - Notes(j).HasError = True - End If - Notes(i).LNPair = j - Notes(j).LNPair = i - If Notes(i).VPosition = Notes(j).VPosition Then - Notes(i).HasError = True - End If - If Notes(j).Value \ 10000 = LnObj Then - Notes(j).HasError = True - End If - Exit For - Next - - If j = 0 Then - Notes(i).HasError = True - End If - - Else - 'ShortNote: If overlapping a note, then error. - For j = i - 1 To 1 Step -1 - If Notes(j).VPosition < Notes(i).VPosition Then Exit For - If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For - Notes(i).HasError = True - Exit For - Next - - End If - Next - - - End If - - Dim currentMS = 0.0# - Dim currentBPM = Notes(0).Value / 10000 - Dim currentBPMVPosition = 0.0# - For i = 1 To UBound(Notes) - If Notes(i).ColumnIndex = niBPM Then - currentMS += (Notes(i).VPosition - currentBPMVPosition) / currentBPM * 1250 - currentBPM = Notes(i).Value / 10000 - currentBPMVPosition = Notes(i).VPosition - End If - 'K(i).TimeOffset = currentMS + (K(i).VPosition - currentBPMVPosition) / currentBPM * 1250 - Next - End Sub - - - - Public Sub ExceptionSave(ByVal Path As String) - SaveiBMSC(Path) - End Sub - - ''' - ''' True if pressed cancel. False elsewise. - ''' - ''' True if pressed cancel. False elsewise. - - Private Function ClosingPopSave() As Boolean - If Not IsSaved Then - Dim xResult As MsgBoxResult = MsgBox(Strings.Messages.SaveOnExit, MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question, Me.Text) - - If xResult = MsgBoxResult.Yes Then - If ExcludeFileName(FileName) = "" Then - Dim xDSave As New SaveFileDialog - xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & - Strings.FileType.BMS & "|*.bms|" & - Strings.FileType.BME & "|*.bme|" & - Strings.FileType.BML & "|*.bml|" & - Strings.FileType.PMS & "|*.pms|" & - Strings.FileType.TXT & "|*.txt|" & - Strings.FileType._all & "|*.*" - xDSave.DefaultExt = "bms" - xDSave.InitialDirectory = InitPath - - If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Return True - SetFileName(xDSave.FileName) - End If - Dim xStrAll As String = SaveBMS() - My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) - NewRecent(FileName) - If BeepWhileSaved Then Beep() - End If - - If xResult = MsgBoxResult.Cancel Then Return True - End If - Return False - End Function - - Private Sub TBNew_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles TBNew.Click, mnNew.Click - - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - If ClosingPopSave() Then Exit Sub - - ClearUndo() - InitializeNewBMS() - - ReDim Notes(0) - ReDim mColumn(999) - ReDim hWAV(1295) - ReDim hBMP(1295) - ReDim hBPM(1295) 'x10000 - ReDim hSTOP(1295) - ReDim hSCROLL(1295) - THGenre.Text = "" - THTitle.Text = "" - THArtist.Text = "" - THPlayLevel.Text = "" - - With Notes(0) - .ColumnIndex = niBPM - .VPosition = -1 - '.LongNote = False - '.Selected = False - .Value = 1200000 - End With - THBPM.Value = 120 - - LWAV.Items.Clear() - LBMP.Items.Clear() - Dim xI1 As Integer - For xI1 = 1 To 1295 - LWAV.Items.Add(C10to36(xI1) & ": " & hWAV(xI1)) - LBMP.Items.Add(C10to36(xI1) & ": " & hBMP(xI1)) - Next - LWAV.SelectedIndex = 0 - LBMP.SelectedIndex = 0 - - SetFileName("Untitled.bms") - SetIsSaved(True) - 'pIsSaved.Visible = Not IsSaved - - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub TBNewC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'Handles TBNewC.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - If ClosingPopSave() Then Exit Sub - - ClearUndo() - - ReDim Notes(0) - ReDim mColumn(999) - ReDim hWAV(1295) - ReDim hBMP(1295) - ReDim hBPM(1295) 'x10000 - ReDim hSTOP(1295) - ReDim hSCROLL(1295) - THGenre.Text = "" - THTitle.Text = "" - THArtist.Text = "" - THPlayLevel.Text = "" - - With Notes(0) - .ColumnIndex = niBPM - .VPosition = -1 - '.LongNote = False - '.Selected = False - .Value = 1200000 - End With - THBPM.Value = 120 - - SetFileName("Untitled.bms") - SetIsSaved(True) - 'pIsSaved.Visible = Not IsSaved - - If MsgBox("Please copy your code to clipboard and click OK.", MsgBoxStyle.OkCancel, "Create from code") = MsgBoxResult.Cancel Then Exit Sub - OpenBMS(Clipboard.GetText) - End Sub - - Private Sub TBOpen_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBOpen.ButtonClick, mnOpen.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - If ClosingPopSave() Then Exit Sub - - Dim xDOpen As New OpenFileDialog - xDOpen.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt" - xDOpen.DefaultExt = "bms" - xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - - If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDOpen.FileName) - OpenBMS(My.Computer.FileSystem.ReadAllText(xDOpen.FileName, TextEncoding)) - ClearUndo() - SetFileName(xDOpen.FileName) - NewRecent(FileName) - SetIsSaved(True) - 'pIsSaved.Visible = Not IsSaved - End Sub - - Private Sub TBImportIBMSC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBImportIBMSC.Click, mnImportIBMSC.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - If ClosingPopSave() Then Return - - Dim xDOpen As New OpenFileDialog - xDOpen.Filter = Strings.FileType.IBMSC & "|*.ibmsc" - xDOpen.DefaultExt = "ibmsc" - xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - - If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Return - InitPath = ExcludeFileName(xDOpen.FileName) - SetFileName("Imported_" & GetFileName(xDOpen.FileName)) - OpeniBMSC(xDOpen.FileName) - NewRecent(xDOpen.FileName) - SetIsSaved(False) - 'pIsSaved.Visible = Not IsSaved - End Sub - - Private Sub TBImportSM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBImportSM.Click, mnImportSM.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - If ClosingPopSave() Then Exit Sub - - Dim xDOpen As New OpenFileDialog - xDOpen.Filter = Strings.FileType.SM & "|*.sm" - xDOpen.DefaultExt = "sm" - xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - - If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - If OpenSM(My.Computer.FileSystem.ReadAllText(xDOpen.FileName, TextEncoding)) Then Exit Sub - InitPath = ExcludeFileName(xDOpen.FileName) - SetFileName("Untitled.bms") - ClearUndo() - SetIsSaved(False) - 'pIsSaved.Visible = Not IsSaved - End Sub - - Private Sub TBSave_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSave.ButtonClick, mnSave.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - - If ExcludeFileName(FileName) = "" Then - Dim xDSave As New SaveFileDialog - xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & - Strings.FileType.BMS & "|*.bms|" & - Strings.FileType.BME & "|*.bme|" & - Strings.FileType.BML & "|*.bml|" & - Strings.FileType.PMS & "|*.pms|" & - Strings.FileType.TXT & "|*.txt|" & - Strings.FileType._all & "|*.*" - xDSave.DefaultExt = "bms" - xDSave.InitialDirectory = InitPath - - If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDSave.FileName) - SetFileName(xDSave.FileName) - End If - Dim xStrAll As String = SaveBMS() - My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) - NewRecent(FileName) - SetFileName(FileName) - SetIsSaved(True) - 'pIsSaved.Visible = Not IsSaved - If BeepWhileSaved Then Beep() - End Sub - - Private Sub TBSaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSaveAs.Click, mnSaveAs.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - - Dim xDSave As New SaveFileDialog - xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & - Strings.FileType.BMS & "|*.bms|" & - Strings.FileType.BME & "|*.bme|" & - Strings.FileType.BML & "|*.bml|" & - Strings.FileType.PMS & "|*.pms|" & - Strings.FileType.TXT & "|*.txt|" & - Strings.FileType._all & "|*.*" - xDSave.DefaultExt = "bms" - xDSave.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - - If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDSave.FileName) - SetFileName(xDSave.FileName) - Dim xStrAll As String = SaveBMS() - My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) - NewRecent(FileName) - SetFileName(FileName) - SetIsSaved(True) - 'pIsSaved.Visible = Not IsSaved - If BeepWhileSaved Then Beep() - End Sub - - Private Sub TBExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBExport.Click, mnExport.Click - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - KMouseOver = -1 - - Dim xDSave As New SaveFileDialog - xDSave.Filter = Strings.FileType.IBMSC & "|*.ibmsc" - xDSave.DefaultExt = "ibmsc" - xDSave.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - - SaveiBMSC(xDSave.FileName) - 'My.Computer.FileSystem.WriteAllText(xDSave.FileName, xStrAll, False, TextEncoding) - NewRecent(FileName) - If BeepWhileSaved Then Beep() - End Sub - - - - Private Sub VSGotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MainPanelScroll.GotFocus, LeftPanelScroll.GotFocus, RightPanelScroll.GotFocus - PanelFocus = sender.Tag - spMain(PanelFocus).Focus() - End Sub - - Private Sub VSValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MainPanelScroll.ValueChanged, LeftPanelScroll.ValueChanged, RightPanelScroll.ValueChanged - Dim iI As Integer = sender.Tag - - ' az: We got a wheel event when we're zooming in/out - If My.Computer.Keyboard.CtrlKeyDown Then - sender.Value = VSValue ' Undo the scroll - Exit Sub - End If - - If iI = PanelFocus And Not LastMouseDownLocation = New Point(-1, -1) And Not VSValue = -1 Then LastMouseDownLocation.Y += (VSValue - sender.Value) * gxHeight - PanelVScroll(iI) = sender.Value - - If spLock((iI + 1) Mod 3) Then - Dim xVS As Integer = PanelVScroll(iI) + spDiff(iI) - If xVS > 0 Then xVS = 0 - If xVS < MainPanelScroll.Minimum Then xVS = MainPanelScroll.Minimum - Select Case iI - Case 0 : MainPanelScroll.Value = xVS - Case 1 : RightPanelScroll.Value = xVS - Case 2 : LeftPanelScroll.Value = xVS - End Select - End If - - If spLock((iI + 2) Mod 3) Then - Dim xVS As Integer = PanelVScroll(iI) - spDiff((iI + 2) Mod 3) - If xVS > 0 Then xVS = 0 - If xVS < MainPanelScroll.Minimum Then xVS = MainPanelScroll.Minimum - Select Case iI - Case 0 : RightPanelScroll.Value = xVS - Case 1 : LeftPanelScroll.Value = xVS - Case 2 : MainPanelScroll.Value = xVS - End Select - End If - - spDiff(iI) = PanelVScroll((iI + 1) Mod 3) - PanelVScroll(iI) - spDiff((iI + 2) Mod 3) = PanelVScroll(iI) - PanelVScroll((iI + 2) Mod 3) - - VSValue = sender.Value - RefreshPanel(iI, spMain(iI).DisplayRectangle) - End Sub - - Private Sub cVSLock_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cVSLockL.CheckedChanged, cVSLock.CheckedChanged, cVSLockR.CheckedChanged - Dim iI As Integer = sender.Tag - spLock(iI) = sender.Checked - If Not spLock(iI) Then Return - - spDiff(iI) = PanelVScroll((iI + 1) Mod 3) - PanelVScroll(iI) - spDiff((iI + 2) Mod 3) = PanelVScroll(iI) - PanelVScroll((iI + 2) Mod 3) - - 'POHeaderB.Text = spDiff(0) & "_" & spDiff(1) & "_" & spDiff(2) - End Sub - - Private Sub HSGotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles HS.GotFocus, HSL.GotFocus, HSR.GotFocus - PanelFocus = sender.Tag - spMain(PanelFocus).Focus() - End Sub - - Private Sub HSValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HS.ValueChanged, HSL.ValueChanged, HSR.ValueChanged - Dim iI As Integer = sender.Tag - If Not LastMouseDownLocation = New Point(-1, -1) And Not HSValue = -1 Then LastMouseDownLocation.X += (HSValue - sender.Value) * gxWidth - PanelHScroll(iI) = sender.Value - HSValue = sender.Value - RefreshPanel(iI, spMain(iI).DisplayRectangle) - End Sub - - Private Sub TBSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSelect.Click, mnSelect.Click - TBSelect.Checked = True - TBWrite.Checked = False - TBTimeSelect.Checked = False - mnSelect.Checked = True - mnWrite.Checked = False - mnTimeSelect.Checked = False - - FStatus2.Visible = False - FStatus.Visible = True - - ShouldDrawTempNote = False - SelectedColumn = -1 - TempVPosition = -1 - TempLength = 0 - - vSelStart = MeasureBottom(MeasureAtDisplacement(-PanelVScroll(PanelFocus)) + 1) - vSelLength = 0 - - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub TBWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBWrite.Click, mnWrite.Click - TBSelect.Checked = False - TBWrite.Checked = True - TBTimeSelect.Checked = False - mnSelect.Checked = False - mnWrite.Checked = True - mnTimeSelect.Checked = False - - FStatus2.Visible = False - FStatus.Visible = True - - ShouldDrawTempNote = True - SelectedColumn = -1 - TempVPosition = -1 - TempLength = 0 - - vSelStart = MeasureBottom(MeasureAtDisplacement(-PanelVScroll(PanelFocus)) + 1) - vSelLength = 0 - - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub TBPostEffects_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBTimeSelect.Click, mnTimeSelect.Click - TBSelect.Checked = False - TBWrite.Checked = False - TBTimeSelect.Checked = True - mnSelect.Checked = False - mnWrite.Checked = False - mnTimeSelect.Checked = True - - FStatus.Visible = False - FStatus2.Visible = True - - vSelMouseOverLine = 0 - ShouldDrawTempNote = False - SelectedColumn = -1 - TempVPosition = -1 - TempLength = 0 - ValidateSelection() - - Dim xI1 As Integer - For xI1 = 0 To UBound(Notes) - Notes(xI1).Selected = False - Next - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub CGHeight_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGHeight.ValueChanged - gxHeight = CSng(CGHeight.Value) - CGHeight2.Value = IIf(CGHeight.Value * 4 < CGHeight2.Maximum, CDec(CGHeight.Value * 4), CGHeight2.Maximum) - RefreshPanelAll() - End Sub - - Private Sub CGHeight2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGHeight2.Scroll - CGHeight.Value = CGHeight2.Value / 4 - End Sub - - Private Sub CGWidth_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGWidth.ValueChanged - gxWidth = CSng(CGWidth.Value) - CGWidth2.Value = IIf(CGWidth.Value * 4 < CGWidth2.Maximum, CDec(CGWidth.Value * 4), CGWidth2.Maximum) - - HS.LargeChange = PMainIn.Width / gxWidth - If HS.Value > HS.Maximum - HS.LargeChange + 1 Then HS.Value = HS.Maximum - HS.LargeChange + 1 - HSL.LargeChange = PMainInL.Width / gxWidth - If HSL.Value > HSL.Maximum - HSL.LargeChange + 1 Then HSL.Value = HSL.Maximum - HSL.LargeChange + 1 - HSR.LargeChange = PMainInR.Width / gxWidth - If HSR.Value > HSR.Maximum - HSR.LargeChange + 1 Then HSR.Value = HSR.Maximum - HSR.LargeChange + 1 - - RefreshPanelAll() - End Sub - - Private Sub CGWidth2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGWidth2.Scroll - CGWidth.Value = CGWidth2.Value / 4 - End Sub - - Private Sub CGDivide_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGDivide.ValueChanged - gDivide = CGDivide.Value - RefreshPanelAll() - End Sub - Private Sub CGSub_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSub.ValueChanged - gSub = CGSub.Value - RefreshPanelAll() - End Sub - Private Sub BGSlash_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BGSlash.Click - Dim xd As Integer = Val(InputBox(Strings.Messages.PromptSlashValue, , gSlash)) - If xd = 0 Then Exit Sub - If xd > CGDivide.Maximum Then xd = CGDivide.Maximum - If xd < CGDivide.Minimum Then xd = CGDivide.Minimum - gSlash = xd - End Sub - - - Private Sub CGSnap_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSnap.CheckedChanged - gSnap = CGSnap.Checked - RefreshPanelAll() - End Sub - - Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick - Dim xI1 As Integer - - Select Case PanelFocus - Case 0 - With LeftPanelScroll - xI1 = .Value + (tempY / 5) / gxHeight - If xI1 > 0 Then xI1 = 0 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - With HSL - xI1 = .Value + (tempX / 10) / gxWidth - If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - - Case 1 - With MainPanelScroll - xI1 = .Value + (tempY / 5) / gxHeight - If xI1 > 0 Then xI1 = 0 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - With HS - xI1 = .Value + (tempX / 10) / gxWidth - If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - - Case 2 - With RightPanelScroll - xI1 = .Value + (tempY / 5) / gxHeight - If xI1 > 0 Then xI1 = 0 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - With HSR - xI1 = .Value + (tempX / 10) / gxWidth - If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - End Select - - Dim xMEArgs As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 0, MouseMoveStatus.X, MouseMoveStatus.Y, 0) - PMainInMouseMove(spMain(PanelFocus), xMEArgs) - - End Sub - - Private Sub TimerMiddle_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerMiddle.Tick - If Not MiddleButtonClicked Then TimerMiddle.Enabled = False : Return - - Dim xI1 As Integer - - Select Case PanelFocus - Case 0 - With LeftPanelScroll - xI1 = .Value + (Cursor.Position.Y - MiddleButtonLocation.Y) / 5 / gxHeight - If xI1 > 0 Then xI1 = 0 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - With HSL - xI1 = .Value + (Cursor.Position.X - MiddleButtonLocation.X) / 5 / gxWidth - If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - - Case 1 - With MainPanelScroll - xI1 = .Value + (Cursor.Position.Y - MiddleButtonLocation.Y) / 5 / gxHeight - If xI1 > 0 Then xI1 = 0 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - With HS - xI1 = .Value + (Cursor.Position.X - MiddleButtonLocation.X) / 5 / gxWidth - If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - - Case 2 - With RightPanelScroll - xI1 = .Value + (Cursor.Position.Y - MiddleButtonLocation.Y) / 5 / gxHeight - If xI1 > 0 Then xI1 = 0 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - With HSR - xI1 = .Value + (Cursor.Position.X - MiddleButtonLocation.X) / 5 / gxWidth - If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 - If xI1 < .Minimum Then xI1 = .Minimum - .Value = xI1 - End With - End Select - - Dim xMEArgs As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 0, MouseMoveStatus.X, MouseMoveStatus.Y, 0) - PMainInMouseMove(spMain(PanelFocus), xMEArgs) - End Sub - - Private Sub ValidateWavListView() - Try - Dim xRect As Rectangle = LWAV.GetItemRectangle(LWAV.SelectedIndex) - If xRect.Top + xRect.Height > LWAV.DisplayRectangle.Height Then SendMessage(LWAV.Handle, &H115, 1, 0) - Catch ex As Exception - End Try - End Sub - - Private Sub LWAV_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LWAV.Click - If TBWrite.Checked Then FSW.Text = C10to36(LWAV.SelectedIndex + 1) - - PreviewNote("", True) - If Not PreviewOnClick Then Exit Sub - If hWAV(LWAV.SelectedIndex + 1) = "" Then Exit Sub - - Dim xFileLocation As String = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) & "\" & hWAV(LWAV.SelectedIndex + 1) - PreviewNote(xFileLocation, False) - End Sub - - Private Sub LWAV_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LWAV.DoubleClick - Dim xDWAV As New OpenFileDialog - xDWAV.DefaultExt = "wav" - xDWAV.Filter = Strings.FileType._wave & "|*.wav;*.ogg;*.mp3|" & - Strings.FileType.WAV & "|*.wav|" & - Strings.FileType.OGG & "|*.ogg|" & - Strings.FileType.MP3 & "|*.mp3|" & - Strings.FileType._all & "|*.*" - xDWAV.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - - If xDWAV.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDWAV.FileName) - hWAV(LWAV.SelectedIndex + 1) = GetFileName(xDWAV.FileName) - LWAV.Items.Item(LWAV.SelectedIndex) = C10to36(LWAV.SelectedIndex + 1) & ": " & GetFileName(xDWAV.FileName) - If IsSaved Then SetIsSaved(False) - End Sub - - Private Sub LWAV_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LWAV.KeyDown - Select Case e.KeyCode - Case Keys.Delete - hWAV(LWAV.SelectedIndex + 1) = "" - LWAV.Items.Item(LWAV.SelectedIndex) = C10to36(LWAV.SelectedIndex + 1) & ": " - If IsSaved Then SetIsSaved(False) - End Select - End Sub - - Private Sub LBMP_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LBMP.DoubleClick - Dim xDBMP As New OpenFileDialog - xDBMP.DefaultExt = "bmp" - xDBMP.Filter = Strings.FileType._image & "|*.bmp;*.png;*.jpg;*.jpeg;.gif|" & - Strings.FileType._movie & "|*.mpg;*.m1v;*.m2v;*.avi;*.mp4;*.m4v;*.wmv;*.webm|" & - Strings.FileType.BMP & "|*.bmp|" & - Strings.FileType.PNG & "|*.png|" & - Strings.FileType.JPG & "|*.jpg;*.jpeg|" & - Strings.FileType.GIF & "|*.gif|" & - Strings.FileType.MP4 & "|*.mp4;*.m4v|" & - Strings.FileType.AVI & "|*.avi|" & - Strings.FileType.MPG & "|*.mpg;*.m1v;*.m2v|" & - Strings.FileType.WMV & "|*.wmv|" & - Strings.FileType.WEBM & "|*.webm|" & - Strings.FileType._all & "|*.*" - xDBMP.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - - If xDBMP.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDBMP.FileName) - hBMP(LBMP.SelectedIndex + 1) = GetFileName(xDBMP.FileName) - LBMP.Items.Item(LBMP.SelectedIndex) = C10to36(LBMP.SelectedIndex + 1) & ": " & GetFileName(xDBMP.FileName) - If IsSaved Then SetIsSaved(False) - End Sub - - Private Sub LBMP_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LBMP.KeyDown - Select Case e.KeyCode - Case Keys.Delete - hBMP(LBMP.SelectedIndex + 1) = "" - LBMP.Items.Item(LBMP.SelectedIndex) = C10to36(LBMP.SelectedIndex + 1) & ": " - If IsSaved Then SetIsSaved(False) - End Select - End Sub - - Private Sub TBErrorCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBErrorCheck.Click, mnErrorCheck.Click - ErrorCheck = sender.Checked - TBErrorCheck.Checked = ErrorCheck - mnErrorCheck.Checked = ErrorCheck - TBErrorCheck.Image = IIf(TBErrorCheck.Checked, My.Resources.x16CheckError, My.Resources.x16CheckErrorN) - mnErrorCheck.Image = IIf(TBErrorCheck.Checked, My.Resources.x16CheckError, My.Resources.x16CheckErrorN) - RefreshPanelAll() - End Sub - - Private Sub TBPreviewOnClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPreviewOnClick.Click, mnPreviewOnClick.Click - PreviewNote("", True) - PreviewOnClick = sender.Checked - TBPreviewOnClick.Checked = PreviewOnClick - mnPreviewOnClick.Checked = PreviewOnClick - TBPreviewOnClick.Image = IIf(PreviewOnClick, My.Resources.x16PreviewOnClick, My.Resources.x16PreviewOnClickN) - mnPreviewOnClick.Image = IIf(PreviewOnClick, My.Resources.x16PreviewOnClick, My.Resources.x16PreviewOnClickN) - End Sub - - 'Private Sub TBPreviewErrorCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) - ' PreviewErrorCheck = TBPreviewErrorCheck.Checked - ' TBPreviewErrorCheck.Image = IIf(PreviewErrorCheck, My.Resources.x16PreviewCheck, My.Resources.x16PreviewCheckN) - 'End Sub - - Private Sub TBShowFileName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBShowFileName.Click, mnShowFileName.Click - ShowFileName = sender.Checked - TBShowFileName.Checked = ShowFileName - mnShowFileName.Checked = ShowFileName - TBShowFileName.Image = IIf(ShowFileName, My.Resources.x16ShowFileName, My.Resources.x16ShowFileNameN) - mnShowFileName.Image = IIf(ShowFileName, My.Resources.x16ShowFileName, My.Resources.x16ShowFileNameN) - RefreshPanelAll() - End Sub - - Private Sub TBCut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBCut.Click, mnCut.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - Me.RedoRemoveNoteSelected(True, xUndo, xRedo) - 'Dim xRedo As String = sCmdKDs() - 'Dim xUndo As String = sCmdKs(True) - - CopyNotes(False) - RemoveNotes(False) - AddUndo(xUndo, xBaseRedo.Next) - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - RefreshPanelAll() - POStatusRefresh() - CalculateGreatestVPosition() - End Sub - - Private Sub TBCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBCopy.Click, mnCopy.Click - CopyNotes() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub TBPaste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPaste.Click, mnPaste.Click - AddNotesFromClipboard() - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - Me.RedoAddNoteSelected(True, xUndo, xRedo) - AddUndo(xUndo, xBaseRedo.Next) - - 'AddUndo(sCmdKDs(), sCmdKs(True)) - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - RefreshPanelAll() - POStatusRefresh() - CalculateGreatestVPosition() - End Sub - - 'Private Function pArgPath(ByVal I As Integer) - ' Return Mid(pArgs(I), 1, InStr(pArgs(I), vbCrLf) - 1) - 'End Function - - Private Function GetFileName(ByVal s As String) As String - Dim fslash As Integer = InStrRev(s, "/") - Dim bslash As Integer = InStrRev(s, "\") - Return Mid(s, IIf(fslash > bslash, fslash, bslash) + 1) - End Function - - Private Function ExcludeFileName(ByVal s As String) As String - Dim fslash As Integer = InStrRev(s, "/") - Dim bslash As Integer = InStrRev(s, "\") - If (bslash Or fslash) = 0 Then Return "" - Return Mid(s, 1, IIf(fslash > bslash, fslash, bslash) - 1) - End Function - - Private Sub PlayerMissingPrompt() - Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) - MsgBox(Strings.Messages.CannotFind.Replace("{}", PrevCodeToReal(xArg.Path)) & vbCrLf & - Strings.Messages.PleaseRespecifyPath, MsgBoxStyle.Critical, Strings.Messages.PlayerNotFound) - - Dim xDOpen As New OpenFileDialog - xDOpen.InitialDirectory = IIf(ExcludeFileName(PrevCodeToReal(xArg.Path)) = "", - My.Application.Info.DirectoryPath, - ExcludeFileName(PrevCodeToReal(xArg.Path))) - xDOpen.FileName = PrevCodeToReal(xArg.Path) - xDOpen.Filter = Strings.FileType.EXE & "|*.exe" - xDOpen.DefaultExt = "exe" - If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - - 'pArgs(CurrentPlayer) = Replace(xDOpen.FileName, My.Application.Info.DirectoryPath, "") & _ - ' Mid(pArgs(CurrentPlayer), InStr(pArgs(CurrentPlayer), vbCrLf)) - 'xStr = Split(pArgs(CurrentPlayer), vbCrLf) - pArgs(CurrentPlayer).Path = Replace(xDOpen.FileName, My.Application.Info.DirectoryPath, "") - xArg = pArgs(CurrentPlayer) - End Sub - - Private Sub TBPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPlay.Click, mnPlay.Click - 'Dim xStr() As String = Split(pArgs(CurrentPlayer), vbCrLf) - Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) - - If Not File.Exists(PrevCodeToReal(xArg.Path)) Then - PlayerMissingPrompt() - xArg = pArgs(CurrentPlayer) - End If - - ' az: Treat it like we cancelled the operation - If Not File.Exists(PrevCodeToReal(xArg.Path)) Then - Exit Sub - End If - - Dim xStrAll As String = SaveBMS() - Dim xFileName As String = IIf(Not PathIsValid(FileName), - IIf(InitPath = "", My.Application.Info.DirectoryPath, InitPath), - ExcludeFileName(FileName)) & "\___TempBMS.bms" - My.Computer.FileSystem.WriteAllText(xFileName, xStrAll, False, TextEncoding) - - AddTempFileList(xFileName) - System.Diagnostics.Process.Start(PrevCodeToReal(xArg.Path), PrevCodeToReal(xArg.aHere)) - End Sub - - Private Sub TBPlayB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPlayB.Click, mnPlayB.Click - 'Dim xStr() As String = Split(pArgs(CurrentPlayer), vbCrLf) - Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) - - If Not File.Exists(PrevCodeToReal(xArg.Path)) Then - PlayerMissingPrompt() - xArg = pArgs(CurrentPlayer) - End If - - If Not File.Exists(PrevCodeToReal(xArg.Path)) Then - Exit Sub - End If - - Dim xStrAll As String = SaveBMS() - Dim xFileName As String = IIf(Not PathIsValid(FileName), - IIf(InitPath = "", My.Application.Info.DirectoryPath, InitPath), - ExcludeFileName(FileName)) & "\___TempBMS.bms" - My.Computer.FileSystem.WriteAllText(xFileName, xStrAll, False, TextEncoding) - - AddTempFileList(xFileName) - - System.Diagnostics.Process.Start(PrevCodeToReal(xArg.Path), PrevCodeToReal(xArg.aBegin)) - End Sub - - Private Sub TBStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBStop.Click, mnStop.Click - 'Dim xStr() As String = Split(pArgs(CurrentPlayer), vbCrLf) - Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) - - If Not File.Exists(PrevCodeToReal(xArg.Path)) Then - PlayerMissingPrompt() - xArg = pArgs(CurrentPlayer) - End If - - If Not File.Exists(PrevCodeToReal(xArg.Path)) Then - Exit Sub - End If - - System.Diagnostics.Process.Start(PrevCodeToReal(xArg.Path), PrevCodeToReal(xArg.aStop)) - End Sub - - Private Sub AddTempFileList(ByVal s As String) - Dim xAdd As Boolean = True - If pTempFileNames IsNot Nothing Then - For Each xStr1 As String In pTempFileNames - If xStr1 = s Then xAdd = False : Exit For - Next - End If - - If xAdd Then - ReDim Preserve pTempFileNames(UBound(pTempFileNames) + 1) - pTempFileNames(UBound(pTempFileNames)) = s - End If - End Sub - - Private Sub TBStatistics_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBStatistics.Click, mnStatistics.Click - SortByVPositionInsertion() - UpdatePairing() - - Dim data(6, 5) As Integer - For i As Integer = 1 To UBound(Notes) - With Notes(i) - Dim row As Integer = -1 - Select Case .ColumnIndex - Case niBPM : row = 0 - Case niSTOP : row = 1 - Case niSCROLL : row = 2 - Case niA1, niA2, niA3, niA4, niA5, niA6, niA7, niA8 : row = 3 - Case niD1, niD2, niD3, niD4, niD5, niD6, niD7, niD8 : row = 4 - Case Is >= niB : row = 5 - Case Else : row = 6 - End Select - - -StartCount: If Not NTInput Then - If Not .LongNote Then data(row, 0) += 1 - If .LongNote Then data(row, 1) += 1 - If .Value \ 10000 = LnObj Then data(row, 2) += 1 - If .Hidden Then data(row, 3) += 1 - If .HasError Then data(row, 4) += 1 - data(row, 5) += 1 - - Else - Dim noteUnit As Integer = 1 - If .Length = 0 Then data(row, 0) += 1 - If .Length <> 0 Then data(row, 1) += 2 : noteUnit = 2 - - If .Value \ 10000 = LnObj Then data(row, 2) += noteUnit - If .Hidden Then data(row, 3) += noteUnit - If .HasError Then data(row, 4) += noteUnit - data(row, 5) += noteUnit - - End If - - If row <> 6 Then row = 6 : GoTo StartCount - End With - Next - - Dim dStat As New dgStatistics(data) - dStat.ShowDialog() - End Sub - - ''' - ''' Remark: Pls sort and updatepairing before this process. - ''' - - Private Sub CalculateTotalPlayableNotes() - Dim xI1 As Integer - Dim xIAll As Integer = 0 - - If Not NTInput Then - For xI1 = 1 To UBound(Notes) - If Notes(xI1).ColumnIndex >= niA1 And Notes(xI1).ColumnIndex <= niA8 Then xIAll += 1 - Next - - Else - For xI1 = 1 To UBound(Notes) - If Notes(xI1).ColumnIndex >= niA1 And Notes(xI1).ColumnIndex <= niA8 Then - xIAll += 1 - If Notes(xI1).Length <> 0 Then xIAll += 1 - End If - Next - End If - - TBStatistics.Text = xIAll - End Sub - - Public Function GetMouseVPosition(Optional snap As Boolean = True) - Dim panHeight = spMain(PanelFocus).Height - Dim panDisplacement = PanelVScroll(PanelFocus) - Dim vpos = (panHeight - panDisplacement * gxHeight - MouseMoveStatus.Y - 1) / gxHeight - If snap Then - Return SnapToGrid(vpos) - Else - Return vpos - End If - End Function - - Private Sub POStatusRefresh() - - If TBSelect.Checked Then - Dim xI1 As Integer = KMouseOver - If xI1 < 0 Then - - TempVPosition = GetMouseVPosition(gSnap) - - SelectedColumn = GetColumnAtX(MouseMoveStatus.X, PanelHScroll(PanelFocus)) - - Dim xMeasure As Integer = MeasureAtDisplacement(TempVPosition) - Dim xMLength As Double = MeasureLength(xMeasure) - Dim xVposMod As Double = TempVPosition - MeasureBottom(xMeasure) - Dim xGCD As Double = GCD(IIf(xVposMod = 0, xMLength, xVposMod), xMLength) - - FSP1.Text = (xVposMod * gDivide / 192).ToString & " / " & (xMLength * gDivide / 192).ToString & " " - FSP2.Text = xVposMod.ToString & " / " & xMLength & " " - FSP3.Text = CInt(xVposMod / xGCD).ToString & " / " & CInt(xMLength / xGCD).ToString & " " - FSP4.Text = TempVPosition.ToString() & " " - TimeStatusLabel.Text = GetTimeFromVPosition(TempVPosition).ToString("F4") - FSC.Text = nTitle(SelectedColumn) - FSW.Text = "" - FSM.Text = Add3Zeros(xMeasure) - FST.Text = "" - FSH.Text = "" - FSE.Text = "" - - Else - Dim xMeasure As Integer = MeasureAtDisplacement(Notes(xI1).VPosition) - Dim xMLength As Double = MeasureLength(xMeasure) - Dim xVposMod As Double = Notes(xI1).VPosition - MeasureBottom(xMeasure) - Dim xGCD As Double = GCD(IIf(xVposMod = 0, xMLength, xVposMod), xMLength) - - FSP1.Text = (xVposMod * gDivide / 192).ToString & " / " & (xMLength * gDivide / 192).ToString & " " - FSP2.Text = xVposMod.ToString & " / " & xMLength & " " - FSP3.Text = CInt(xVposMod / xGCD).ToString & " / " & CInt(xMLength / xGCD).ToString & " " - FSP4.Text = Notes(xI1).VPosition.ToString() & " " - TimeStatusLabel.Text = GetTimeFromVPosition(TempVPosition).ToString("F4") - FSC.Text = nTitle(Notes(xI1).ColumnIndex) - FSW.Text = IIf(IsColumnNumeric(Notes(xI1).ColumnIndex), - Notes(xI1).Value / 10000, - C10to36(Notes(xI1).Value \ 10000)) - FSM.Text = Add3Zeros(xMeasure) - FST.Text = IIf(NTInput, Strings.StatusBar.Length & " = " & Notes(xI1).Length, IIf(Notes(xI1).LongNote, Strings.StatusBar.LongNote, "")) - FSH.Text = IIf(Notes(xI1).Hidden, Strings.StatusBar.Hidden, "") - FSE.Text = IIf(Notes(xI1).HasError, Strings.StatusBar.Err, "") - - End If - - ElseIf TBWrite.Checked Then - If SelectedColumn < 0 Then Exit Sub - - Dim xMeasure As Integer = MeasureAtDisplacement(TempVPosition) - Dim xMLength As Double = MeasureLength(xMeasure) - Dim xVposMod As Double = TempVPosition - MeasureBottom(xMeasure) - Dim xGCD As Double = GCD(IIf(xVposMod = 0, xMLength, xVposMod), xMLength) - - FSP1.Text = (xVposMod * gDivide / 192).ToString & " / " & (xMLength * gDivide / 192).ToString & " " - FSP2.Text = xVposMod.ToString & " / " & xMLength & " " - FSP3.Text = CInt(xVposMod / xGCD).ToString & " / " & CInt(xMLength / xGCD).ToString & " " - FSP4.Text = TempVPosition.ToString() & " " - TimeStatusLabel.Text = GetTimeFromVPosition(TempVPosition).ToString("F4") - FSC.Text = nTitle(SelectedColumn) - FSW.Text = C10to36(LWAV.SelectedIndex + 1) - FSM.Text = Add3Zeros(xMeasure) - FST.Text = IIf(NTInput, TempLength, IIf(My.Computer.Keyboard.ShiftKeyDown, Strings.StatusBar.LongNote, "")) - FSH.Text = IIf(My.Computer.Keyboard.CtrlKeyDown, Strings.StatusBar.Hidden, "") - - ElseIf TBTimeSelect.Checked Then - FSSS.Text = vSelStart - FSSL.Text = vSelLength - FSSH.Text = vSelHalf - - End If - FStatus.Invalidate() - End Sub - - Private Function GetTimeFromVPosition(vpos As Double) As Double - Dim timing_notes = (From note In Notes - Where note.ColumnIndex = niBPM Or note.ColumnIndex = niSTOP - Group By Column = note.ColumnIndex - Into NoteGroups = Group).ToDictionary(Function(x) x.Column, Function(x) x.NoteGroups) - - Dim bpm_notes = timing_notes.Item(niBPM) - - Dim stop_notes As IEnumerable(Of Note) = Nothing - - If timing_notes.ContainsKey(niSTOP) Then - stop_notes = timing_notes.Item(niSTOP) - End If - - - Dim stop_contrib As Double - Dim bpm_contrib As Double - - For i = 0 To bpm_notes.Count() - 1 - ' az: sum bpm contribution first - Dim duration = 0.0 - Dim current_note = bpm_notes.ElementAt(i) - Dim notevpos = Math.Max(0, current_note.VPosition) - - If i + 1 <> bpm_notes.Count() Then - Dim next_note = bpm_notes.ElementAt(i + 1) - duration = next_note.VPosition - notevpos - Else - duration = vpos - notevpos - End If - - Dim current_bps = 60 / (current_note.Value / 10000) - bpm_contrib += current_bps * duration / 48 - - If stop_notes Is Nothing Then Continue For - - Dim stops = From stp In stop_notes - Where stp.VPosition >= notevpos And - stp.VPosition < notevpos + duration - - Dim stop_beats = stops.Sum(Function(x) x.Value / 10000.0) / 48 - stop_contrib += current_bps * stop_beats - - Next - - Return stop_contrib + bpm_contrib - End Function - - Private Sub POBStorm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBStorm.Click - - End Sub - - Private Sub POBMirror_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBMirror.Click - Dim xI1 As Integer - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - 'xRedo &= sCmdKM(niA1, .VPosition, .Value, IIf(NTInput, .Length, .LongNote), .Hidden, RealColumnToEnabled(niA7) - RealColumnToEnabled(niA1), 0, True) & vbCrLf - 'xUndo &= sCmdKM(niA7, .VPosition, .Value, IIf(NTInput, .Length, .LongNote), .Hidden, RealColumnToEnabled(niA1) - RealColumnToEnabled(niA7), 0, True) & vbCrLf - - Dim xCol As Integer = 0 - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Select Case Notes(xI1).ColumnIndex - Case niA1 : xCol = niA7 - Case niA2 : xCol = niA6 - Case niA3 : xCol = niA5 - Case niA4 : xCol = niA4 - Case niA5 : xCol = niA3 - Case niA6 : xCol = niA2 - Case niA7 : xCol = niA1 - Case Else : Continue For - End Select - - Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) - Notes(xI1).ColumnIndex = xCol - Next - - AddUndo(xUndo, xBaseRedo.Next) - UpdatePairing() - RefreshPanelAll() - End Sub - - - - - - - - Private Sub ValidateSelection() - If vSelStart < 0 Then vSelLength += vSelStart : vSelHalf += vSelStart : vSelStart = 0 - If vSelStart > GetMaxVPosition() - 1 Then vSelLength += vSelStart - GetMaxVPosition() + 1 : vSelHalf += vSelStart - GetMaxVPosition() + 1 : vSelStart = GetMaxVPosition() - 1 - If vSelStart + vSelLength < 0 Then vSelLength = -vSelStart - If vSelStart + vSelLength > GetMaxVPosition() - 1 Then vSelLength = GetMaxVPosition() - 1 - vSelStart - - If Math.Sign(vSelHalf) <> Math.Sign(vSelLength) Then vSelHalf = 0 - If Math.Abs(vSelHalf) > Math.Abs(vSelLength) Then vSelHalf = vSelLength - End Sub - - - - Private Sub TVCM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TVCM.KeyDown - If e.KeyCode = Keys.Enter Then - TVCM.Text = Val(TVCM.Text) - If Val(TVCM.Text) <= 0 Then - MsgBox(Strings.Messages.NegativeFactorError, MsgBoxStyle.Critical, Strings.Messages.Err) - TVCM.Text = 1 - TVCM.Focus() - TVCM.SelectAll() - Else - BVCApply_Click(BVCApply, New System.EventArgs) - End If - End If - End Sub - - Private Sub TVCM_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TVCM.LostFocus - TVCM.Text = Val(TVCM.Text) - If Val(TVCM.Text) <= 0 Then - MsgBox(Strings.Messages.NegativeFactorError, MsgBoxStyle.Critical, Strings.Messages.Err) - TVCM.Text = 1 - TVCM.Focus() - TVCM.SelectAll() - End If - End Sub - - Private Sub TVCD_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TVCD.KeyDown - If e.KeyCode = Keys.Enter Then - TVCD.Text = Val(TVCD.Text) - If Val(TVCD.Text) <= 0 Then - MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) - TVCD.Text = 1 - TVCD.Focus() - TVCD.SelectAll() - Else - BVCApply_Click(BVCApply, New System.EventArgs) - End If - End If - End Sub - - Private Sub TVCD_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TVCD.LostFocus - TVCD.Text = Val(TVCD.Text) - If Val(TVCD.Text) <= 0 Then - MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) - TVCD.Text = 1 - TVCD.Focus() - TVCD.SelectAll() - End If - End Sub - - Private Sub TVCBPM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TVCBPM.KeyDown - If e.KeyCode = Keys.Enter Then - TVCBPM.Text = Val(TVCBPM.Text) - If Val(TVCBPM.Text) <= 0 Then - MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) - TVCBPM.Text = Notes(0).Value / 10000 - TVCBPM.Focus() - TVCBPM.SelectAll() - Else - BVCCalculate_Click(BVCCalculate, New System.EventArgs) - End If - End If - End Sub - - Private Sub TVCBPM_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TVCBPM.LostFocus - TVCBPM.Text = Val(TVCBPM.Text) - If Val(TVCBPM.Text) <= 0 Then - MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) - TVCBPM.Text = Notes(0).Value / 10000 - TVCBPM.Focus() - TVCBPM.SelectAll() - End If - End Sub - - Private Function FindNoteIndex(note As Note) As Integer - Dim xI1 As Integer - If NTInput Then - For xI1 = 1 To UBound(Notes) - If Notes(xI1).equalsNT(note) Then Return xI1 - Next - Else - For xI1 = 1 To UBound(Notes) - If Notes(xI1).equalsBMSE(note) Then Return xI1 - Next - End If - Return xI1 - End Function - - - - - Private Function sIA() As Integer - Return IIf(sI > 98, 0, sI + 1) - End Function - - Private Function sIM() As Integer - Return IIf(sI < 1, 99, sI - 1) - End Function - - - - Private Sub TBUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBUndo.Click, mnUndo.Click - KMouseOver = -1 - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - If sUndo(sI).ofType = UndoRedo.opNoOperation Then Exit Sub - PerformCommand(sUndo(sI)) - sI = sIM() - - TBUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation - TBRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation - mnUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation - mnRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation - End Sub - - Private Sub TBRedo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBRedo.Click, mnRedo.Click - KMouseOver = -1 - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - If sRedo(sIA).ofType = UndoRedo.opNoOperation Then Exit Sub - PerformCommand(sRedo(sIA)) - sI = sIA() - - TBUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation - TBRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation - mnUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation - mnRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation - End Sub - - 'Undo appends before, Redo appends after. - 'After a sequence of Commands, - ' Undo will be the first one to execute, - ' Redo will be the last one to execute. - 'Remember to save the first Redo. - - 'In case where undo is Nothing: Dont worry. - 'In case where redo is Nothing: - ' If only one redo is in a sequence, put Nothing. - ' If several redo are in a sequence, - ' Create Void first. - ' Record its reference into a seperate copy. (xBaseRedo = xRedo) - ' Use this xRedo as the BaseRedo. - ' When calling AddUndo subroutine, use xBaseRedo.Next as cRedo. - - 'Dim xUndo As UndoRedo.LinkedURCmd = Nothing - 'Dim xRedo As UndoRedo.LinkedURCmd = Nothing - '... 'Me.RedoRemoveNote(K(xI1), True, xUndo, xRedo) - 'AddUndo(xUndo, xRedo) - - 'Dim xUndo As UndoRedo.LinkedURCmd = Nothing - 'Dim xRedo As New UndoRedo.Void - 'Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - '... 'Me.RedoRemoveNote(K(xI1), True, xUndo, xRedo) - 'AddUndo(xUndo, xBaseRedo.Next) - - - - Private Sub TBAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) - Dim Aboutboxx1 As New AboutBox1() - 'If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\About.png") Then - Aboutboxx1.bBitmap = My.Resources.About0 - 'Aboutboxx1.SelectBitmap() - Aboutboxx1.ClientSize = New Size(1000, 500) - Aboutboxx1.ClickToCopy.Visible = True - Aboutboxx1.ShowDialog(Me) - 'Else - ' MsgBox(locale.Messages.cannotfind & " ""About.png""", MsgBoxStyle.Critical, locale.Messages.err) - 'End If - End Sub - - Private Sub TBOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBVOptions.Click, mnVOptions.Click - - Dim xDiag As New OpVisual(vo, column, LWAV.Font) - xDiag.ShowDialog(Me) - UpdateColumnsX() - RefreshPanelAll() - End Sub - - Private Sub AddToPOWAV(ByVal xPath() As String) - Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer - LWAV.SelectedIndices.CopyTo(xIndices, 0) - If xIndices.Length = 0 Then Exit Sub - - If xIndices.Length < xPath.Length Then - Dim i As Integer = xIndices.Length - Dim currWavIndex As Integer = xIndices(UBound(xIndices)) + 1 - ReDim Preserve xIndices(UBound(xPath)) - - Do While i < xIndices.Length And currWavIndex <= 1294 - Do While currWavIndex <= 1294 AndAlso hWAV(currWavIndex + 1) <> "" - currWavIndex += 1 - Loop - If currWavIndex > 1294 Then Exit Do - - xIndices(i) = currWavIndex - currWavIndex += 1 - i += 1 - Loop - - If currWavIndex > 1294 Then - ReDim Preserve xPath(i - 1) - ReDim Preserve xIndices(i - 1) - End If - End If - - 'Dim xI2 As Integer = 0 - For xI1 As Integer = 0 To UBound(xPath) - 'If xI2 > UBound(xIndices) Then Exit For - 'hWAV(xIndices(xI2) + 1) = GetFileName(xPath(xI1)) - 'LWAV.Items.Item(xIndices(xI2)) = C10to36(xIndices(xI2) + 1) & ": " & GetFileName(xPath(xI1)) - hWAV(xIndices(xI1) + 1) = GetFileName(xPath(xI1)) - LWAV.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " & GetFileName(xPath(xI1)) - 'xI2 += 1 - Next - - LWAV.SelectedIndices.Clear() - For xI1 As Integer = 0 To IIf(UBound(xIndices) < UBound(xPath), UBound(xIndices), UBound(xPath)) - LWAV.SelectedIndices.Add(xIndices(xI1)) - Next - - If IsSaved Then SetIsSaved(False) - RefreshPanelAll() - End Sub - - Private Sub POWAV_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POWAV.DragDrop - ReDim DDFileName(-1) - If Not e.Data.GetDataPresent(DataFormats.FileDrop) Then Return - - Dim xOrigPath() As String = CType(e.Data.GetData(DataFormats.FileDrop), String()) - Dim xPath() As String = FilterFileBySupported(xOrigPath, SupportedAudioExtension) - Array.Sort(xPath) - If xPath.Length = 0 Then - RefreshPanelAll() - Exit Sub - End If - - AddToPOWAV(xPath) - End Sub - - Private Sub POWAV_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POWAV.DragEnter - If e.Data.GetDataPresent(DataFormats.FileDrop) Then - e.Effect = DragDropEffects.Copy - DDFileName = FilterFileBySupported(CType(e.Data.GetData(DataFormats.FileDrop), String()), SupportedAudioExtension) - Else - e.Effect = DragDropEffects.None - End If - RefreshPanelAll() - End Sub - - Private Sub POWAV_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles POWAV.DragLeave - ReDim DDFileName(-1) - RefreshPanelAll() - End Sub - - Private Sub POWAV_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POWAV.Resize - LWAV.Height = sender.Height - 25 - End Sub - - Private Sub AddToPOBMP(ByVal xPath() As String) - Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer - LBMP.SelectedIndices.CopyTo(xIndices, 0) - If xIndices.Length = 0 Then Exit Sub - - If xIndices.Length < xPath.Length Then - Dim i As Integer = xIndices.Length - Dim currBmpIndex As Integer = xIndices(UBound(xIndices)) + 1 - ReDim Preserve xIndices(UBound(xPath)) - - Do While i < xIndices.Length And currBmpIndex <= 1294 - Do While currBmpIndex <= 1294 AndAlso hBMP(currBmpIndex + 1) <> "" - currBmpIndex += 1 - Loop - If currBmpIndex > 1294 Then Exit Do - - xIndices(i) = currBmpIndex - currBmpIndex += 1 - i += 1 - Loop - - If currBmpIndex > 1294 Then - ReDim Preserve xPath(i - 1) - ReDim Preserve xIndices(i - 1) - End If - End If - - 'Dim xI2 As Integer = 0 - For xI1 As Integer = 0 To UBound(xPath) - 'If xI2 > UBound(xIndices) Then Exit For - 'hBMP(xIndices(xI2) + 1) = GetFileName(xPath(xI1)) - 'LBMP.Items.Item(xIndices(xI2)) = C10to36(xIndices(xI2) + 1) & ": " & GetFileName(xPath(xI1)) - hBMP(xIndices(xI1) + 1) = GetFileName(xPath(xI1)) - LBMP.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " & GetFileName(xPath(xI1)) - 'xI2 += 1 - Next - - LBMP.SelectedIndices.Clear() - For xI1 As Integer = 0 To IIf(UBound(xIndices) < UBound(xPath), UBound(xIndices), UBound(xPath)) - LBMP.SelectedIndices.Add(xIndices(xI1)) - Next - - If IsSaved Then SetIsSaved(False) - RefreshPanelAll() - End Sub - - Private Sub POBMP_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POBMP.DragDrop - ReDim DDFileName(-1) - If Not e.Data.GetDataPresent(DataFormats.FileDrop) Then Return - - Dim xOrigPath() As String = CType(e.Data.GetData(DataFormats.FileDrop), String()) - Dim xPath() As String = FilterFileBySupported(xOrigPath, SupportedImageExtension) - Array.Sort(xPath) - If xPath.Length = 0 Then - RefreshPanelAll() - Exit Sub - End If - - AddToPOBMP(xPath) - End Sub - - Private Sub POBMP_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POBMP.DragEnter - If e.Data.GetDataPresent(DataFormats.FileDrop) Then - e.Effect = DragDropEffects.Copy - DDFileName = FilterFileBySupported(CType(e.Data.GetData(DataFormats.FileDrop), String()), SupportedImageExtension) - Else - e.Effect = DragDropEffects.None - End If - RefreshPanelAll() - End Sub - - Private Sub POBMP_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles POBMP.DragLeave - ReDim DDFileName(-1) - RefreshPanelAll() - End Sub - - Private Sub POBMP_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POBMP.Resize - LBMP.Height = sender.Height - 25 - End Sub - Private Sub POBeat_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POBeat.Resize - LBeat.Height = POBeat.Height - 25 - End Sub - Private Sub POExpansion_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POExpansion.Resize - TExpansion.Height = POExpansion.Height - 2 - End Sub - - Private Sub mn_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) - sender.ForeColor = Color.White - End Sub - Private Sub mn_DropDownOpened(ByVal sender As Object, ByVal e As System.EventArgs) - sender.ForeColor = Color.Black - End Sub - Private Sub mn_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) - If sender.Pressed Then Return - sender.ForeColor = Color.Black - End Sub - Private Sub mn_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) - If sender.Pressed Then Return - sender.ForeColor = Color.White - End Sub - - Private Sub TBPOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPOptions.Click, mnPOptions.Click - Dim xDOp As New OpPlayer(CurrentPlayer) - xDOp.ShowDialog(Me) - End Sub - - Private Sub THGenre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ - THGenre.TextChanged, THTitle.TextChanged, THArtist.TextChanged, THPlayLevel.TextChanged, CHRank.SelectedIndexChanged, TExpansion.TextChanged, - THSubTitle.TextChanged, THSubArtist.TextChanged, THStageFile.TextChanged, THBanner.TextChanged, THBackBMP.TextChanged, - CHDifficulty.SelectedIndexChanged, THExRank.TextChanged, THTotal.TextChanged, THComment.TextChanged - If IsSaved Then SetIsSaved(False) - End Sub - - Private Sub CHLnObj_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHLnObj.SelectedIndexChanged - If IsSaved Then SetIsSaved(False) - LnObj = CHLnObj.SelectedIndex - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub ConvertBMSE2NT() - ReDim SelectedNotes(-1) - SortByVPositionInsertion() - - For i2 As Integer = 0 To UBound(Notes) - Notes(i2).Length = 0.0# - Next - - Dim i As Integer = 1 - Dim j As Integer = 0 - Dim xUbound As Integer = UBound(Notes) - - Do While i <= xUbound - If Not Notes(i).LongNote Then i += 1 : Continue Do - - For j = i + 1 To xUbound - If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For - - If Notes(j).LongNote Then - Notes(i).Length = Notes(j).VPosition - Notes(i).VPosition - For j2 As Integer = j To xUbound - 1 - Notes(j2) = Notes(j2 + 1) - Next - xUbound -= 1 - Exit For - - ElseIf Notes(j).Value \ 10000 = LnObj Then - Exit For - - End If - Next - - i += 1 - Loop - - ReDim Preserve Notes(xUbound) - - For i = 0 To xUbound - Notes(i).LongNote = False - Next - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - End Sub - - Private Sub ConvertNT2BMSE() - ReDim SelectedNotes(-1) - Dim xK(0) As Note - xK(0) = Notes(0) - - For xI1 As Integer = 1 To UBound(Notes) - ReDim Preserve xK(UBound(xK) + 1) - With xK(UBound(xK)) - .ColumnIndex = Notes(xI1).ColumnIndex - .LongNote = Notes(xI1).Length > 0 - .Landmine = Notes(xI1).Landmine - .Value = Notes(xI1).Value - .VPosition = Notes(xI1).VPosition - .Selected = Notes(xI1).Selected - .Hidden = Notes(xI1).Hidden - End With - - If Notes(xI1).Length > 0 Then - ReDim Preserve xK(UBound(xK) + 1) - With xK(UBound(xK)) - .ColumnIndex = Notes(xI1).ColumnIndex - .LongNote = True - .Landmine = False - .Value = Notes(xI1).Value - .VPosition = Notes(xI1).VPosition + Notes(xI1).Length - .Selected = Notes(xI1).Selected - .Hidden = Notes(xI1).Hidden - End With - End If - Next - - Notes = xK - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - End Sub - - Private Sub TBWavIncrease_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBWavIncrease.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - TBWavIncrease.Checked = Not sender.Checked - Me.RedoWavIncrease(TBWavIncrease.Checked, xUndo, xRedo) - AddUndo(xUndo, xBaseRedo.Next) - End Sub - - Private Sub TBNTInput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBNTInput.Click, mnNTInput.Click - 'Dim xUndo As String = "NT_" & CInt(NTInput) & "_0" & vbCrLf & "KZ" & vbCrLf & sCmdKsAll(False) - 'Dim xRedo As String = "NT_" & CInt(Not NTInput) & "_1" - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Me.RedoRemoveNoteAll(False, xUndo, xRedo) - - NTInput = sender.Checked - - TBNTInput.Checked = NTInput - mnNTInput.Checked = NTInput - POBLong.Enabled = Not NTInput - POBLongShort.Enabled = Not NTInput - - bAdjustLength = False - bAdjustUpper = False - - Me.RedoNT(NTInput, False, xUndo, xRedo) - If NTInput Then - ConvertBMSE2NT() - Else - ConvertNT2BMSE() - End If - Me.RedoAddNoteAll(False, xUndo, xRedo) - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - End Sub - - Private Sub THBPM_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles THBPM.ValueChanged - If Notes IsNot Nothing Then Notes(0).Value = THBPM.Value * 10000 : RefreshPanelAll() - If IsSaved Then SetIsSaved(False) - End Sub - - Private Sub TWPosition_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPosition.ValueChanged - wPosition = TWPosition.Value - TWPosition2.Value = IIf(wPosition > TWPosition2.Maximum, TWPosition2.Maximum, wPosition) - RefreshPanelAll() - End Sub - - Private Sub TWLeft_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWLeft.ValueChanged - wLeft = TWLeft.Value - TWLeft2.Value = IIf(wLeft > TWLeft2.Maximum, TWLeft2.Maximum, wLeft) - RefreshPanelAll() - End Sub - - Private Sub TWWidth_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWWidth.ValueChanged - wWidth = TWWidth.Value - TWWidth2.Value = IIf(wWidth > TWWidth2.Maximum, TWWidth2.Maximum, wWidth) - RefreshPanelAll() - End Sub - - Private Sub TWPrecision_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPrecision.ValueChanged - wPrecision = TWPrecision.Value - TWPrecision2.Value = IIf(wPrecision > TWPrecision2.Maximum, TWPrecision2.Maximum, wPrecision) - RefreshPanelAll() - End Sub - - Private Sub TWTransparency_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWTransparency.ValueChanged - TWTransparency2.Value = TWTransparency.Value - vo.pBGMWav.Color = Color.FromArgb(TWTransparency.Value, vo.pBGMWav.Color) - RefreshPanelAll() - End Sub - - Private Sub TWSaturation_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWSaturation.ValueChanged - Dim xColor As Color = vo.pBGMWav.Color - TWSaturation2.Value = TWSaturation.Value - vo.pBGMWav.Color = HSL2RGB(xColor.GetHue, TWSaturation.Value, xColor.GetBrightness * 1000, xColor.A) - RefreshPanelAll() - End Sub - - Private Sub TWPosition2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPosition2.Scroll - TWPosition.Value = TWPosition2.Value - End Sub - - Private Sub TWLeft2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWLeft2.Scroll - TWLeft.Value = TWLeft2.Value - End Sub - - Private Sub TWWidth2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWWidth2.Scroll - TWWidth.Value = TWWidth2.Value - End Sub - - Private Sub TWPrecision2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPrecision2.Scroll - TWPrecision.Value = TWPrecision2.Value - End Sub - - Private Sub TWTransparency2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWTransparency2.Scroll - TWTransparency.Value = TWTransparency2.Value - End Sub - - Private Sub TWSaturation2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWSaturation2.Scroll - TWSaturation.Value = TWSaturation2.Value - End Sub - - Private Sub TBLangDef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBLangDef.Click - DispLang = "" - MsgBox(Strings.Messages.PreferencePostpone, MsgBoxStyle.Information) - End Sub - - Private Sub TBLangRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBLangRefresh.Click - For xI1 As Integer = cmnLanguage.Items.Count - 1 To 3 Step -1 - Try - cmnLanguage.Items.RemoveAt(xI1) - Catch ex As Exception - End Try - Next - - If Not Directory.Exists(My.Application.Info.DirectoryPath & "\Data") Then My.Computer.FileSystem.CreateDirectory(My.Application.Info.DirectoryPath & "\Data") - Dim xFileNames() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(My.Application.Info.DirectoryPath & "\Data").GetFiles("*.Lang.xml") - - For Each xStr As FileInfo In xFileNames - LoadLocaleXML(xStr) - Next - End Sub - - - Private Sub UpdateColumnsX() - column(0).Left = 0 - 'If col(0).Width = 0 Then col(0).Visible = False - - For xI1 As Integer = 1 To UBound(column) - column(xI1).Left = column(xI1 - 1).Left + IIf(column(xI1 - 1).isVisible, column(xI1 - 1).Width, 0) - 'If col(xI1).Width = 0 Then col(xI1).Visible = False - Next - HSL.Maximum = nLeft(gColumns) + column(niB).Width - HS.Maximum = nLeft(gColumns) + column(niB).Width - HSR.Maximum = nLeft(gColumns) + column(niB).Width - End Sub - - Private Sub CHPlayer_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHPlayer.SelectedIndexChanged - If CHPlayer.SelectedIndex = -1 Then CHPlayer.SelectedIndex = 0 - - iPlayer = CHPlayer.SelectedIndex - Dim xGP2 As Boolean = iPlayer <> 0 - column(niD1).isVisible = xGP2 - column(niD2).isVisible = xGP2 - column(niD3).isVisible = xGP2 - column(niD4).isVisible = xGP2 - column(niD5).isVisible = xGP2 - column(niD6).isVisible = xGP2 - column(niD7).isVisible = xGP2 - column(niD8).isVisible = xGP2 - column(niS3).isVisible = xGP2 - - For xI1 As Integer = 1 To UBound(Notes) - Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) - Next - 'AddUndo(xUndo, xRedo) - UpdateColumnsX() - - If IsInitializing Then Exit Sub - RefreshPanelAll() - End Sub - - Private Sub CGB_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGB.ValueChanged - gColumns = niB + CGB.Value - 1 - UpdateColumnsX() - RefreshPanelAll() - End Sub - - Private Sub TBGOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBGOptions.Click, mnGOptions.Click - Dim xTE As Integer - Select Case UCase(EncodingToString(TextEncoding)) ' az: wow seriously? is there really no better way? - Case "SYSTEM ANSI" : xTE = 0 - Case "LITTLE ENDIAN UTF16" : xTE = 1 - Case "ASCII" : xTE = 2 - Case "BIG ENDIAN UTF16" : xTE = 3 - Case "LITTLE ENDIAN UTF32" : xTE = 4 - Case "UTF7" : xTE = 5 - Case "UTF8" : xTE = 6 - Case "SJIS" : xTE = 7 - Case "EUC-KR" : xTE = 8 - Case Else : xTE = 0 - End Select - - Dim xDiag As New OpGeneral(gWheel, gPgUpDn, MiddleButtonMoveMethod, xTE, 192.0R / BMSGridLimit, - AutoSaveInterval, BeepWhileSaved, BPMx1296, STOPx1296, - AutoFocusMouseEnter, FirstClickDisabled, ClickStopPreview) - - If xDiag.ShowDialog() = Windows.Forms.DialogResult.OK Then - With xDiag - gWheel = .zWheel - gPgUpDn = .zPgUpDn - TextEncoding = .zEncoding - 'SortingMethod = .zSort - MiddleButtonMoveMethod = .zMiddle - AutoSaveInterval = .zAutoSave - BMSGridLimit = 192.0R / .zGridPartition - BeepWhileSaved = .cBeep.Checked - BPMx1296 = .cBpm1296.Checked - STOPx1296 = .cStop1296.Checked - AutoFocusMouseEnter = .cMEnterFocus.Checked - FirstClickDisabled = .cMClickFocus.Checked - ClickStopPreview = .cMStopPreview.Checked - End With - If AutoSaveInterval Then AutoSaveTimer.Interval = AutoSaveInterval - AutoSaveTimer.Enabled = AutoSaveInterval - End If - End Sub - - Private Sub POBLong_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBLong.Click - If NTInput Then Exit Sub - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, True, xUndo, xRedo) - Notes(xI1).LongNote = True - Next - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub POBNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBShort.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - If Not NTInput Then - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, 0, xUndo, xRedo) - Notes(xI1).LongNote = False - Next - - Else - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, 0, xUndo, xRedo) - Notes(xI1).Length = 0 - Next - End If - - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub POBNormalLong_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBLongShort.Click - If NTInput Then Exit Sub - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, Not Notes(xI1).LongNote, xUndo, xRedo) - Notes(xI1).LongNote = Not Notes(xI1).LongNote - Next - - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub POBHidden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBHidden.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoHiddenNoteModify(Notes(xI1), True, True, xUndo, xRedo) - Notes(xI1).Hidden = True - Next - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub POBVisible_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBVisible.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoHiddenNoteModify(Notes(xI1), False, True, xUndo, xRedo) - Notes(xI1).Hidden = False - Next - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub POBHiddenVisible_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBHiddenVisible.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 As Integer = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - Me.RedoHiddenNoteModify(Notes(xI1), Not Notes(xI1).Hidden, True, xUndo, xRedo) - Notes(xI1).Hidden = Not Notes(xI1).Hidden - Next - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - End Sub - - Private Sub POBModify_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles POBModify.Click - Dim xNum As Boolean = False - Dim xLbl As Boolean = False - Dim xI1 As Integer - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected AndAlso IsColumnNumeric(Notes(xI1).ColumnIndex) Then xNum = True : Exit For - Next - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected AndAlso Not IsColumnNumeric(Notes(xI1).ColumnIndex) Then xLbl = True : Exit For - Next - If Not (xNum Or xLbl) Then Exit Sub - - If xNum Then - Dim xD1 As Double = Val(InputBox(Strings.Messages.PromptEnterNumeric, Text)) * 10000 - If Not xD1 = 0 Then - If xD1 <= 0 Then xD1 = 1 - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 = 1 To UBound(Notes) - If Not IsColumnNumeric(Notes(xI1).ColumnIndex) Then Continue For - If Not Notes(xI1).Selected Then Continue For - - Me.RedoRelabelNote(Notes(xI1), xD1, xUndo, xRedo) - Notes(xI1).Value = xD1 - Next - AddUndo(xUndo, xBaseRedo.Next) - End If - End If - - If xLbl Then - Dim xStr As String = UCase(Trim(InputBox(Strings.Messages.PromptEnter, Me.Text))) - - If Len(xStr) = 0 Then GoTo Jump2 - If xStr = "00" Or xStr = "0" Then GoTo Jump1 - If Not Len(xStr) = 1 And Not Len(xStr) = 2 Then GoTo Jump1 - - Dim xI3 As Integer = Asc(Mid(xStr, 1, 1)) - If Not ((xI3 >= 48 And xI3 <= 57) Or (xI3 >= 65 And xI3 <= 90)) Then GoTo Jump1 - If Len(xStr) = 2 Then - Dim xI4 As Integer = Asc(Mid(xStr, 2, 1)) - If Not ((xI4 >= 48 And xI4 <= 57) Or (xI4 >= 65 And xI4 <= 90)) Then GoTo Jump1 - End If - Dim xVal As Integer = C36to10(xStr) * 10000 - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 = 1 To UBound(Notes) - If IsColumnNumeric(Notes(xI1).ColumnIndex) Then Continue For - If Not Notes(xI1).Selected Then Continue For - - Me.RedoRelabelNote(Notes(xI1), xVal, xUndo, xRedo) - Notes(xI1).Value = xVal - Next - AddUndo(xUndo, xBaseRedo.Next) - GoTo Jump2 -Jump1: - MsgBox(Strings.Messages.InvalidLabel, MsgBoxStyle.Critical, Strings.Messages.Err) -Jump2: - End If - - RefreshPanelAll() - End Sub - - Private Sub TBMyO2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBMyO2.Click, mnMyO2.Click - Dim xDiag As New dgMyO2 - xDiag.Show() - End Sub - - - Private Sub TBFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBFind.Click, mnFind.Click - Dim xDiag As New diagFind(gColumns, Strings.Messages.Err, Strings.Messages.InvalidLabel) - xDiag.Show() - End Sub - - Private Function fdrCheck(ByVal xNote As Note) As Boolean - Return xNote.VPosition >= MeasureBottom(fdriMesL) And xNote.VPosition < MeasureBottom(fdriMesU) + MeasureLength(fdriMesU) AndAlso - IIf(IsColumnNumeric(xNote.ColumnIndex), - xNote.Value >= fdriValL And xNote.Value <= fdriValU, - xNote.Value >= fdriLblL And xNote.Value <= fdriLblU) AndAlso - Array.IndexOf(fdriCol, xNote.ColumnIndex) <> -1 - End Function - - Private Function fdrRangeS(ByVal xbLim1 As Boolean, ByVal xbLim2 As Boolean, ByVal xVal As Boolean) As Boolean - Return (Not xbLim1 And xbLim2 And xVal) Or (xbLim1 And Not xbLim2 And Not xVal) Or (xbLim1 And xbLim2) - End Function - - Public Sub fdrSelect(ByVal iRange As Integer, - ByVal xMesL As Integer, ByVal xMesU As Integer, - ByVal xLblL As String, ByVal xLblU As String, - ByVal xValL As Integer, ByVal xValU As Integer, - ByVal iCol() As Integer) - - fdriMesL = xMesL - fdriMesU = xMesU - fdriLblL = C36to10(xLblL) * 10000 - fdriLblU = C36to10(xLblU) * 10000 - fdriValL = xValL - fdriValU = xValU - fdriCol = iCol - - Dim xbSel As Boolean = iRange Mod 2 = 0 - Dim xbUnsel As Boolean = iRange Mod 3 = 0 - Dim xbShort As Boolean = iRange Mod 5 = 0 - Dim xbLong As Boolean = iRange Mod 7 = 0 - Dim xbHidden As Boolean = iRange Mod 11 = 0 - Dim xbVisible As Boolean = iRange Mod 13 = 0 - - Dim xSel(UBound(Notes)) As Boolean - For xI1 As Integer = 1 To UBound(Notes) - xSel(xI1) = Notes(xI1).Selected - Next - - 'Main process - For xI1 As Integer = 1 To UBound(Notes) - Dim bbba As Boolean = xbSel And xSel(xI1) - Dim bbbb As Boolean = xbUnsel And Not xSel(xI1) - Dim bbbc As Boolean = nEnabled(Notes(xI1).ColumnIndex) - Dim bbbd As Boolean = fdrRangeS(xbShort, xbLong, IIf(NTInput, Notes(xI1).Length, Notes(xI1).LongNote)) - Dim bbbe As Boolean = fdrRangeS(xbVisible, xbHidden, Notes(xI1).Hidden) - Dim bbbf As Boolean = fdrCheck(Notes(xI1)) - - If ((xbSel And xSel(xI1)) Or (xbUnsel And Not xSel(xI1))) AndAlso - nEnabled(Notes(xI1).ColumnIndex) AndAlso fdrRangeS(xbShort, xbLong, IIf(NTInput, Notes(xI1).Length, Notes(xI1).LongNote)) And fdrRangeS(xbVisible, xbHidden, Notes(xI1).Hidden) Then - Notes(xI1).Selected = fdrCheck(Notes(xI1)) - End If - Next - - RefreshPanelAll() - Beep() - End Sub - - Public Sub fdrUnselect(ByVal iRange As Integer, - ByVal xMesL As Integer, ByVal xMesU As Integer, - ByVal xLblL As String, ByVal xLblU As String, - ByVal xValL As Integer, ByVal xValU As Integer, - ByVal iCol() As Integer) - - fdriMesL = xMesL - fdriMesU = xMesU - fdriLblL = C36to10(xLblL) * 10000 - fdriLblU = C36to10(xLblU) * 10000 - fdriValL = xValL - fdriValU = xValU - fdriCol = iCol - - Dim xbSel As Boolean = iRange Mod 2 = 0 - Dim xbUnsel As Boolean = iRange Mod 3 = 0 - Dim xbShort As Boolean = iRange Mod 5 = 0 - Dim xbLong As Boolean = iRange Mod 7 = 0 - Dim xbHidden As Boolean = iRange Mod 11 = 0 - Dim xbVisible As Boolean = iRange Mod 13 = 0 - - Dim xSel(UBound(Notes)) As Boolean - For xI1 As Integer = 1 To UBound(Notes) - xSel(xI1) = Notes(xI1).Selected - Next - - 'Main process - For xI1 As Integer = 1 To UBound(Notes) - If ((xbSel And xSel(xI1)) Or (xbUnsel And Not xSel(xI1))) AndAlso - nEnabled(Notes(xI1).ColumnIndex) AndAlso fdrRangeS(xbShort, xbLong, IIf(NTInput, Notes(xI1).Length, Notes(xI1).LongNote)) And fdrRangeS(xbVisible, xbHidden, Notes(xI1).Hidden) Then - Notes(xI1).Selected = Not fdrCheck(Notes(xI1)) - End If - Next - - RefreshPanelAll() - Beep() - End Sub - - Public Sub fdrDelete(ByVal iRange As Integer, - ByVal xMesL As Integer, ByVal xMesU As Integer, - ByVal xLblL As String, ByVal xLblU As String, - ByVal xValL As Integer, ByVal xValU As Integer, - ByVal iCol() As Integer) - - fdriMesL = xMesL - fdriMesU = xMesU - fdriLblL = C36to10(xLblL) * 10000 - fdriLblU = C36to10(xLblU) * 10000 - fdriValL = xValL - fdriValU = xValU - fdriCol = iCol - - Dim xbSel As Boolean = iRange Mod 2 = 0 - Dim xbUnsel As Boolean = iRange Mod 3 = 0 - Dim xbShort As Boolean = iRange Mod 5 = 0 - Dim xbLong As Boolean = iRange Mod 7 = 0 - Dim xbHidden As Boolean = iRange Mod 11 = 0 - Dim xbVisible As Boolean = iRange Mod 13 = 0 - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - 'Main process - Dim xI1 As Integer = 1 - Do While xI1 <= UBound(Notes) - If ((xbSel And Notes(xI1).Selected) Or (xbUnsel And Not Notes(xI1).Selected)) AndAlso - fdrCheck(Notes(xI1)) AndAlso nEnabled(Notes(xI1).ColumnIndex) AndAlso fdrRangeS(xbShort, xbLong, IIf(NTInput, Notes(xI1).Length, Notes(xI1).LongNote)) And fdrRangeS(xbVisible, xbHidden, Notes(xI1).Hidden) Then - RedoRemoveNote(Notes(xI1), xUndo, xRedo) - RemoveNote(xI1, False) - Else - xI1 += 1 - End If - Loop - - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - CalculateTotalPlayableNotes() - Beep() - End Sub - - Public Sub fdrReplaceL(ByVal iRange As Integer, - ByVal xMesL As Integer, ByVal xMesU As Integer, - ByVal xLblL As String, ByVal xLblU As String, - ByVal xValL As Integer, ByVal xValU As Integer, - ByVal iCol() As Integer, ByVal xReplaceLbl As String) - - fdriMesL = xMesL - fdriMesU = xMesU - fdriLblL = C36to10(xLblL) * 10000 - fdriLblU = C36to10(xLblU) * 10000 - fdriValL = xValL - fdriValU = xValU - fdriCol = iCol - - Dim xbSel As Boolean = iRange Mod 2 = 0 - Dim xbUnsel As Boolean = iRange Mod 3 = 0 - Dim xbShort As Boolean = iRange Mod 5 = 0 - Dim xbLong As Boolean = iRange Mod 7 = 0 - Dim xbHidden As Boolean = iRange Mod 11 = 0 - Dim xbVisible As Boolean = iRange Mod 13 = 0 - - Dim xxLbl As Integer = C36to10(xReplaceLbl) * 10000 - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - 'Main process - For xI1 As Integer = 1 To UBound(Notes) - If ((xbSel And Notes(xI1).Selected) Or (xbUnsel And Not Notes(xI1).Selected)) AndAlso - fdrCheck(Notes(xI1)) AndAlso nEnabled(Notes(xI1).ColumnIndex) And Not IsColumnNumeric(Notes(xI1).ColumnIndex) AndAlso fdrRangeS(xbShort, xbLong, IIf(NTInput, Notes(xI1).Length, Notes(xI1).LongNote)) And fdrRangeS(xbVisible, xbHidden, Notes(xI1).Hidden) Then - 'xUndo &= sCmdKC(K(xI1).ColumnIndex, K(xI1).VPosition, xxLbl, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, 0, 0, K(xI1).Value, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, True) & vbCrLf - 'xRedo &= sCmdKC(K(xI1).ColumnIndex, K(xI1).VPosition, K(xI1).Value, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, 0, 0, xxLbl, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, True) & vbCrLf - Me.RedoRelabelNote(Notes(xI1), xxLbl, xUndo, xRedo) - Notes(xI1).Value = xxLbl - End If - Next - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - Beep() - End Sub - - Public Sub fdrReplaceV(ByVal iRange As Integer, - ByVal xMesL As Integer, ByVal xMesU As Integer, - ByVal xLblL As String, ByVal xLblU As String, - ByVal xValL As Integer, ByVal xValU As Integer, - ByVal iCol() As Integer, ByVal xReplaceVal As Integer) - - fdriMesL = xMesL - fdriMesU = xMesU - fdriLblL = C36to10(xLblL) * 10000 - fdriLblU = C36to10(xLblU) * 10000 - fdriValL = xValL - fdriValU = xValU - fdriCol = iCol - - Dim xbSel As Boolean = iRange Mod 2 = 0 - Dim xbUnsel As Boolean = iRange Mod 3 = 0 - Dim xbShort As Boolean = iRange Mod 5 = 0 - Dim xbLong As Boolean = iRange Mod 7 = 0 - Dim xbHidden As Boolean = iRange Mod 11 = 0 - Dim xbVisible As Boolean = iRange Mod 13 = 0 - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - 'Main process - For xI1 As Integer = 1 To UBound(Notes) - If ((xbSel And Notes(xI1).Selected) Or (xbUnsel And Not Notes(xI1).Selected)) AndAlso - fdrCheck(Notes(xI1)) AndAlso nEnabled(Notes(xI1).ColumnIndex) And IsColumnNumeric(Notes(xI1).ColumnIndex) AndAlso fdrRangeS(xbShort, xbLong, IIf(NTInput, Notes(xI1).Length, Notes(xI1).LongNote)) And fdrRangeS(xbVisible, xbHidden, Notes(xI1).Hidden) Then - 'xUndo &= sCmdKC(K(xI1).ColumnIndex, K(xI1).VPosition, xReplaceVal, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, 0, 0, K(xI1).Value, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, True) & vbCrLf - 'xRedo &= sCmdKC(K(xI1).ColumnIndex, K(xI1).VPosition, K(xI1).Value, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, 0, 0, xReplaceVal, IIf(NTInput, K(xI1).Length, K(xI1).LongNote), K(xI1).Hidden, True) & vbCrLf - Me.RedoRelabelNote(Notes(xI1), xReplaceVal, xUndo, xRedo) - Notes(xI1).Value = xReplaceVal - End If - Next - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - Beep() - End Sub - - Private Sub MInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MInsert.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Dim xMeasure As Integer = MeasureAtDisplacement(menuVPosition) - Dim xMLength As Double = MeasureLength(xMeasure) - Dim xVP As Double = MeasureBottom(xMeasure) - - If NTInput Then - Dim xI1 As Integer = 1 - Do While xI1 <= UBound(Notes) - If MeasureAtDisplacement(Notes(xI1).VPosition) >= 999 Then - Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) - RemoveNote(xI1, False) - Else - xI1 += 1 - End If - Loop - - Dim xdVP As Double - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition >= xVP And Notes(xI1).VPosition + Notes(xI1).Length <= MeasureBottom(999) Then - Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition + xMLength, xUndo, xRedo) - Notes(xI1).VPosition += xMLength - - ElseIf Notes(xI1).VPosition >= xVP Then - xdVP = MeasureBottom(999) - 1 - Notes(xI1).VPosition - Notes(xI1).Length - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition + xMLength, Notes(xI1).Length + xdVP, xUndo, xRedo) - Notes(xI1).VPosition += xMLength - Notes(xI1).Length += xdVP - - ElseIf Notes(xI1).VPosition + Notes(xI1).Length >= xVP Then - xdVP = IIf(Notes(xI1).VPosition + Notes(xI1).Length > MeasureBottom(999) - 1, GetMaxVPosition() - 1 - Notes(xI1).VPosition - Notes(xI1).Length, xMLength) - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, Notes(xI1).Length + xdVP, xUndo, xRedo) - Notes(xI1).Length += xdVP - End If - Next - - Else - Dim xI1 As Integer = 1 - Do While xI1 <= UBound(Notes) - If MeasureAtDisplacement(Notes(xI1).VPosition) >= 999 Then - Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) - RemoveNote(xI1, False) - Else - xI1 += 1 - End If - Loop - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition >= xVP Then - Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition + xMLength, xUndo, xRedo) - Notes(xI1).VPosition += xMLength - End If - Next - End If - - For xI1 As Integer = 999 To xMeasure + 1 Step -1 - MeasureLength(xI1) = MeasureLength(xI1 - 1) - Next - UpdateMeasureBottom() - - AddUndo(xUndo, xBaseRedo.Next) - UpdatePairing() - CalculateGreatestVPosition() - CalculateTotalPlayableNotes() - RefreshPanelAll() - End Sub - - Private Sub MRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MRemove.Click - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Dim xMeasure As Integer = MeasureAtDisplacement(menuVPosition) - Dim xMLength As Double = MeasureLength(xMeasure) - Dim xVP As Double = MeasureBottom(xMeasure) - - If NTInput Then - Dim xI1 As Integer = 1 - Do While xI1 <= UBound(Notes) - If MeasureAtDisplacement(Notes(xI1).VPosition) = xMeasure And MeasureAtDisplacement(Notes(xI1).VPosition + Notes(xI1).Length) = xMeasure Then - Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) - RemoveNote(xI1, False) - Else - xI1 += 1 - End If - Loop - - Dim xdVP As Double - xVP = MeasureBottom(xMeasure) - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition >= xVP + xMLength Then - Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition - xMLength, xUndo, xRedo) - Notes(xI1).VPosition -= xMLength - - ElseIf Notes(xI1).VPosition >= xVP Then - xdVP = xMLength + xVP - Notes(xI1).VPosition - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition + xdVP - xMLength, Notes(xI1).Length - xdVP, xUndo, xRedo) - Notes(xI1).VPosition += xdVP - xMLength - Notes(xI1).Length -= xdVP - - ElseIf Notes(xI1).VPosition + Notes(xI1).Length >= xVP Then - xdVP = IIf(Notes(xI1).VPosition + Notes(xI1).Length >= xVP + xMLength, xMLength, Notes(xI1).VPosition + Notes(xI1).Length - xVP + 1) - Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, Notes(xI1).Length - xdVP, xUndo, xRedo) - Notes(xI1).Length -= xdVP - End If - Next - - Else - Dim xI1 As Integer = 1 - Do While xI1 <= UBound(Notes) - If MeasureAtDisplacement(Notes(xI1).VPosition) = xMeasure Then - Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) - RemoveNote(xI1, False) - Else - xI1 += 1 - End If - Loop - - xVP = MeasureBottom(xMeasure) - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition >= xVP Then - Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition - xMLength, xUndo, xRedo) - Notes(xI1).VPosition -= xMLength - End If - Next - End If - - For xI1 As Integer = 999 To xMeasure + 1 Step -1 - MeasureLength(xI1 - 1) = MeasureLength(xI1) - Next - UpdateMeasureBottom() - - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - CalculateGreatestVPosition() - CalculateTotalPlayableNotes() - RefreshPanelAll() - End Sub - - Private Sub TBThemeDef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeDef.Click - Dim xTempFileName As String = My.Application.Info.DirectoryPath & "\____TempFile.Theme.xml" - My.Computer.FileSystem.WriteAllText(xTempFileName, My.Resources.O2Mania_Theme, False, System.Text.Encoding.Unicode) - LoadSettings(xTempFileName) - System.IO.File.Delete(xTempFileName) - - RefreshPanelAll() - End Sub - - Private Sub TBThemeSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeSave.Click - Dim xDiag As New SaveFileDialog - xDiag.Filter = Strings.FileType.THEME_XML & "|*.Theme.xml" - xDiag.DefaultExt = "Theme.xml" - xDiag.InitialDirectory = My.Application.Info.DirectoryPath & "\Data" - If xDiag.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - - Me.SaveSettings(xDiag.FileName, True) - If BeepWhileSaved Then Beep() - TBThemeRefresh_Click(TBThemeRefresh, New System.EventArgs) - End Sub - - Private Sub TBThemeRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeRefresh.Click - For xI1 As Integer = cmnTheme.Items.Count - 1 To 5 Step -1 - Try - cmnTheme.Items.RemoveAt(xI1) - Catch ex As Exception - End Try - Next - - If Not Directory.Exists(My.Application.Info.DirectoryPath & "\Data") Then My.Computer.FileSystem.CreateDirectory(My.Application.Info.DirectoryPath & "\Data") - Dim xFileNames() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(My.Application.Info.DirectoryPath & "\Data").GetFiles("*.Theme.xml") - For Each xStr As FileInfo In xFileNames - cmnTheme.Items.Add(xStr.Name, Nothing, AddressOf LoadTheme) - Next - End Sub - - Private Sub TBThemeLoadComptability_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeLoadComptability.Click - Dim xDiag As New OpenFileDialog - xDiag.Filter = Strings.FileType.TH & "|*.th" - xDiag.DefaultExt = "th" - xDiag.InitialDirectory = My.Application.Info.DirectoryPath - If My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\Theme") Then xDiag.InitialDirectory = My.Application.Info.DirectoryPath & "\Theme" - If xDiag.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - - Me.LoadThemeComptability(xDiag.FileName) - RefreshPanelAll() - End Sub - - ''' - ''' Will return Double.PositiveInfinity if canceled. - ''' - Private Function InputBoxDouble(ByVal Prompt As String, ByVal LBound As Double, ByVal UBound As Double, Optional ByVal Title As String = "", Optional ByVal DefaultResponse As String = "") As Double - Dim xStr As String = InputBox(Prompt, Title, DefaultResponse) - If xStr = "" Then Return Double.PositiveInfinity - - InputBoxDouble = Val(xStr) - If InputBoxDouble > UBound Then InputBoxDouble = UBound - If InputBoxDouble < LBound Then InputBoxDouble = LBound - End Function - - Private Sub FSSS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FSSS.Click - Dim xMax As Double = IIf(vSelLength > 0, GetMaxVPosition() - vSelLength, GetMaxVPosition) - Dim xMin As Double = IIf(vSelLength < 0, -vSelLength, 0) - Dim xDouble As Double = InputBoxDouble("Please enter a number between " & xMin & " and " & xMax & ".", xMin, xMax, , vSelStart) - If xDouble = Double.PositiveInfinity Then Return - - vSelStart = xDouble - ValidateSelection() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub FSSL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FSSL.Click - Dim xMax As Double = GetMaxVPosition() - vSelStart - Dim xMin As Double = -vSelStart - Dim xDouble As Double = InputBoxDouble("Please enter a number between " & xMin & " and " & xMax & ".", xMin, xMax, , vSelLength) - If xDouble = Double.PositiveInfinity Then Return - - vSelLength = xDouble - ValidateSelection() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub FSSH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FSSH.Click - Dim xMax As Double = IIf(vSelLength > 0, vSelLength, 0) - Dim xMin As Double = IIf(vSelLength > 0, 0, -vSelLength) - Dim xDouble As Double = InputBoxDouble("Please enter a number between " & xMin & " and " & xMax & ".", xMin, xMax, , vSelHalf) - If xDouble = Double.PositiveInfinity Then Return - - vSelHalf = xDouble - ValidateSelection() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BVCReverse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BVCReverse.Click - vSelStart += vSelLength - vSelHalf -= vSelLength - vSelLength *= -1 - ValidateSelection() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub AutoSaveTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AutoSaveTimer.Tick - Dim xTime As Date = Now - Dim xFileName As String - With xTime - xFileName = My.Application.Info.DirectoryPath & "\AutoSave_" & - .Year & "_" & .Month & "_" & .Day & "_" & .Hour & "_" & .Minute & "_" & .Second & "_" & .Millisecond & ".IBMSC" - End With - 'My.Computer.FileSystem.WriteAllText(xFileName, SaveiBMSC, False, System.Text.Encoding.Unicode) - SaveiBMSC(xFileName) - - On Error Resume Next - If PreviousAutoSavedFileName <> "" Then IO.File.Delete(PreviousAutoSavedFileName) - On Error GoTo 0 - - PreviousAutoSavedFileName = xFileName - End Sub - - Private Sub CWAVMultiSelect_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CWAVMultiSelect.CheckedChanged - WAVMultiSelect = CWAVMultiSelect.Checked - LWAV.SelectionMode = IIf(WAVMultiSelect, SelectionMode.MultiExtended, SelectionMode.One) - LBMP.SelectionMode = IIf(WAVMultiSelect, SelectionMode.MultiExtended, SelectionMode.One) - End Sub - - Private Sub CWAVChangeLabel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CWAVChangeLabel.CheckedChanged - WAVChangeLabel = CWAVChangeLabel.Checked - End Sub - - Private Sub BWAVUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVUp.Click - If LWAV.SelectedIndex = -1 Then Return - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer - LWAV.SelectedIndices.CopyTo(xIndices, 0) - - Dim xS As Integer - For xS = 0 To 1294 - If Array.IndexOf(xIndices, xS) = -1 Then Exit For - Next - - Dim xStr As String = "" - Dim xIndex As Integer = -1 - For xI1 As Integer = xS To 1294 - xIndex = Array.IndexOf(xIndices, xI1) - If xIndex <> -1 Then - xStr = hWAV(xI1 + 1) - hWAV(xI1 + 1) = hWAV(xI1) - hWAV(xI1) = xStr - - LWAV.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hWAV(xI1 + 1) - LWAV.Items.Item(xI1 - 1) = C10to36(xI1) & ": " & hWAV(xI1) - - If Not WAVChangeLabel Then GoTo 1100 - - Dim xL1 As String = C10to36(xI1) - Dim xL2 As String = C10to36(xI1 + 1) - For xI2 As Integer = 1 To UBound(Notes) - If IsColumnNumeric(Notes(xI2).ColumnIndex) Then Continue For - - If C10to36(Notes(xI2).Value \ 10000) = xL1 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 + 10000 - - ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 - - End If - Next - -1100: xIndices(xIndex) += -1 - End If - Next - - LWAV.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LWAV.SelectedIndices.Add(xIndices(xI1)) - Next - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BWAVDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVDown.Click - If LWAV.SelectedIndex = -1 Then Return - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer - LWAV.SelectedIndices.CopyTo(xIndices, 0) - - Dim xS As Integer - For xS = 1294 To 0 Step -1 - If Array.IndexOf(xIndices, xS) = -1 Then Exit For - Next - - Dim xStr As String = "" - Dim xIndex As Integer = -1 - For xI1 As Integer = xS To 0 Step -1 - xIndex = Array.IndexOf(xIndices, xI1) - If xIndex <> -1 Then - xStr = hWAV(xI1 + 1) - hWAV(xI1 + 1) = hWAV(xI1 + 2) - hWAV(xI1 + 2) = xStr - - LWAV.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hWAV(xI1 + 1) - LWAV.Items.Item(xI1 + 1) = C10to36(xI1 + 2) & ": " & hWAV(xI1 + 2) - - If Not WAVChangeLabel Then GoTo 1100 - - Dim xL1 As String = C10to36(xI1 + 2) - Dim xL2 As String = C10to36(xI1 + 1) - For xI2 As Integer = 1 To UBound(Notes) - If IsColumnNumeric(Notes(xI2).ColumnIndex) Then Continue For - - If C10to36(Notes(xI2).Value \ 10000) = xL1 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 + 10000 - - ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 20000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 + 20000 - - End If - Next - -1100: xIndices(xIndex) += 1 - End If - Next - - LWAV.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LWAV.SelectedIndices.Add(xIndices(xI1)) - Next - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BWAVBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVBrowse.Click - Dim xDWAV As New OpenFileDialog - xDWAV.DefaultExt = "wav" - xDWAV.Filter = Strings.FileType._wave & "|*.wav;*.ogg;*.mp3|" & - Strings.FileType.WAV & "|*.wav|" & - Strings.FileType.OGG & "|*.ogg|" & - Strings.FileType.MP3 & "|*.mp3|" & - Strings.FileType._all & "|*.*" - xDWAV.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - xDWAV.Multiselect = WAVMultiSelect - - If xDWAV.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDWAV.FileName) - - AddToPOWAV(xDWAV.FileNames) - End Sub - - Private Sub BWAVRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVRemove.Click - Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer - LWAV.SelectedIndices.CopyTo(xIndices, 0) - For xI1 As Integer = 0 To UBound(xIndices) - hWAV(xIndices(xI1) + 1) = "" - LWAV.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " - Next - - LWAV.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LWAV.SelectedIndices.Add(xIndices(xI1)) - Next - - If IsSaved Then SetIsSaved(False) - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BBMPUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPUp.Click - If LBMP.SelectedIndex = -1 Then Return - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer - LBMP.SelectedIndices.CopyTo(xIndices, 0) - - Dim xS As Integer - For xS = 0 To 1294 - If Array.IndexOf(xIndices, xS) = -1 Then Exit For - Next - - Dim xStr As String = "" - Dim xIndex As Integer = -1 - For xI1 As Integer = xS To 1294 - xIndex = Array.IndexOf(xIndices, xI1) - If xIndex <> -1 Then - xStr = hBMP(xI1 + 1) - hBMP(xI1 + 1) = hBMP(xI1) - hBMP(xI1) = xStr - - LBMP.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hBMP(xI1 + 1) - LBMP.Items.Item(xI1 - 1) = C10to36(xI1) & ": " & hBMP(xI1) - - If Not WAVChangeLabel Then GoTo 1100 - - Dim xL1 As String = C10to36(xI1) - Dim xL2 As String = C10to36(xI1 + 1) - For xI2 As Integer = 1 To UBound(Notes) - If IsColumnNumeric(Notes(xI2).ColumnIndex) Then Continue For - - If C10to36(Notes(xI2).Value \ 10000) = xL1 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 + 10000 - - ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 - - End If - Next - -1100: xIndices(xIndex) += -1 - End If - Next - - LBMP.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LBMP.SelectedIndices.Add(xIndices(xI1)) - Next - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BBMPDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPDown.Click - If LBMP.SelectedIndex = -1 Then Return - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer - LBMP.SelectedIndices.CopyTo(xIndices, 0) - - Dim xS As Integer - For xS = 1294 To 0 Step -1 - If Array.IndexOf(xIndices, xS) = -1 Then Exit For - Next - - Dim xStr As String = "" - Dim xIndex As Integer = -1 - For xI1 As Integer = xS To 0 Step -1 - xIndex = Array.IndexOf(xIndices, xI1) - If xIndex <> -1 Then - xStr = hBMP(xI1 + 1) - hBMP(xI1 + 1) = hBMP(xI1 + 2) - hBMP(xI1 + 2) = xStr - - LBMP.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hBMP(xI1 + 1) - LBMP.Items.Item(xI1 + 1) = C10to36(xI1 + 2) & ": " & hBMP(xI1 + 2) - - If Not WAVChangeLabel Then GoTo 1100 - - Dim xL1 As String = C10to36(xI1 + 2) - Dim xL2 As String = C10to36(xI1 + 1) - For xI2 As Integer = 1 To UBound(Notes) - If IsColumnNumeric(Notes(xI2).ColumnIndex) Then Continue For - - If C10to36(Notes(xI2).Value \ 10000) = xL1 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 + 10000 - - ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then - Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 20000, xUndo, xRedo) - Notes(xI2).Value = xI1 * 10000 + 20000 - - End If - Next - -1100: xIndices(xIndex) += 1 - End If - Next - - LBMP.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LBMP.SelectedIndices.Add(xIndices(xI1)) - Next - - AddUndo(xUndo, xBaseRedo.Next) - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BBMPBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPBrowse.Click - Dim xDBMP As New OpenFileDialog - xDBMP.DefaultExt = "bmp" - xDBMP.Filter = Strings.FileType._image & "|*.bmp;*.png;*.jpg;*.jpeg;.gif|" & - Strings.FileType._movie & "|*.mpg;*.m1v;*.m2v;*.avi;*.mp4;*.m4v;*.wmv;*.webm|" & - Strings.FileType.BMP & "|*.bmp|" & - Strings.FileType.PNG & "|*.png|" & - Strings.FileType.JPG & "|*.jpg;*.jpeg|" & - Strings.FileType.GIF & "|*.gif|" & - Strings.FileType.MP4 & "|*.mp4;*.m4v|" & - Strings.FileType.AVI & "|*.avi|" & - Strings.FileType.MPG & "|*.mpg;*.m1v;*.m2v|" & - Strings.FileType.WMV & "|*.wmv|" & - Strings.FileType.WEBM & "|*.webm|" & - Strings.FileType._all & "|*.*" - xDBMP.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - xDBMP.Multiselect = WAVMultiSelect - - If xDBMP.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDBMP.FileName) - - AddToPOBMP(xDBMP.FileNames) - End Sub - - Private Sub BBMPRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPRemove.Click - Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer - LBMP.SelectedIndices.CopyTo(xIndices, 0) - For xI1 As Integer = 0 To UBound(xIndices) - hBMP(xIndices(xI1) + 1) = "" - LBMP.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " - Next - - LBMP.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LBMP.SelectedIndices.Add(xIndices(xI1)) - Next - - If IsSaved Then SetIsSaved(False) - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub mnMain_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles mnMain.MouseDown ', TBMain.MouseDown ', pttl.MouseDown, pIsSaved.MouseDown - If e.Button = Windows.Forms.MouseButtons.Left Then - ReleaseCapture() - SendMessage(Me.Handle, &H112, &HF012, 0) - If e.Clicks = 2 Then - If Me.WindowState = FormWindowState.Maximized Then Me.WindowState = FormWindowState.Normal Else Me.WindowState = FormWindowState.Maximized - End If - ElseIf e.Button = Windows.Forms.MouseButtons.Right Then - 'mnSys.Show(sender, e.Location) - End If - End Sub - - Private Sub mnSelectAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSelectAll.Click - If Not (PMainIn.Focused OrElse PMainInL.Focused Or PMainInR.Focused) Then Exit Sub - For xI1 As Integer = 1 To UBound(Notes) - Notes(xI1).Selected = nEnabled(Notes(xI1).ColumnIndex) - Next - If TBTimeSelect.Checked Then - CalculateGreatestVPosition() - vSelStart = 0 - vSelLength = MeasureBottom(MeasureAtDisplacement(GreatestVPosition)) + MeasureLength(MeasureAtDisplacement(GreatestVPosition)) - End If - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub mnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnDelete.Click - If Not (PMainIn.Focused OrElse PMainInL.Focused Or PMainInR.Focused) Then Exit Sub - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Me.RedoRemoveNoteSelected(True, xUndo, xRedo) - RemoveNotes(True) - - AddUndo(xUndo, xBaseRedo.Next) - CalculateGreatestVPosition() - CalculateTotalPlayableNotes() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub mnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) - Process.Start("http://www.cs.mcgill.ca/~ryang6/iBMSC/") - End Sub - - Private Sub mnUpdateC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) - Process.Start("http://bbs.rohome.net/thread-1074065-1-1.html") - End Sub - - Private Sub mnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnQuit.Click - Close() - End Sub - - - Private Sub EnableDWM() - mnMain.BackColor = Color.Black - 'TBMain.BackColor = Color.FromArgb(64, 64, 64) - - For Each xmn As ToolStripMenuItem In mnMain.Items - xmn.ForeColor = Color.White - AddHandler xmn.DropDownClosed, AddressOf mn_DropDownClosed - AddHandler xmn.DropDownOpened, AddressOf mn_DropDownOpened - AddHandler xmn.MouseEnter, AddressOf mn_MouseEnter - AddHandler xmn.MouseLeave, AddressOf mn_MouseLeave - Next - End Sub - - Private Sub DisableDWM() - mnMain.BackColor = SystemColors.Control - 'TBMain.BackColor = SystemColors.Control - - For Each xmn As ToolStripMenuItem In mnMain.Items - xmn.ForeColor = SystemColors.ControlText - RemoveHandler xmn.DropDownClosed, AddressOf mn_DropDownClosed - RemoveHandler xmn.DropDownOpened, AddressOf mn_DropDownOpened - RemoveHandler xmn.MouseEnter, AddressOf mn_MouseEnter - RemoveHandler xmn.MouseLeave, AddressOf mn_MouseLeave - Next - End Sub - - Private Sub ttlIcon_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) - 'ttlIcon.Image = My.Resources.icon2_16 - 'mnSys.Show(ttlIcon, 0, ttlIcon.Height) - End Sub - Private Sub ttlIcon_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) - 'ttlIcon.Image = My.Resources.icon2_16_highlight - End Sub - Private Sub ttlIcon_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) - 'ttlIcon.Image = My.Resources.icon2_16 - End Sub - - Private Sub mnSMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSMenu.CheckedChanged - mnMain.Visible = mnSMenu.Checked - End Sub - Private Sub mnSTB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSTB.CheckedChanged - TBMain.Visible = mnSTB.Checked - End Sub - Private Sub mnSOP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSOP.CheckedChanged - POptions.Visible = mnSOP.Checked - End Sub - Private Sub mnSStatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSStatus.CheckedChanged - pStatus.Visible = mnSStatus.Checked - End Sub - Private Sub mnSLSplitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSLSplitter.CheckedChanged - SpL.Visible = mnSLSplitter.Checked - End Sub - Private Sub mnSRSplitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSRSplitter.CheckedChanged - SpR.Visible = mnSRSplitter.Checked - End Sub - Private Sub CGShow_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShow.CheckedChanged - gShowGrid = CGShow.Checked - RefreshPanelAll() - End Sub - Private Sub CGShowS_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowS.CheckedChanged - gShowSubGrid = CGShowS.Checked - RefreshPanelAll() - End Sub - Private Sub CGShowBG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowBG.CheckedChanged - gShowBG = CGShowBG.Checked - RefreshPanelAll() - End Sub - Private Sub CGShowM_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowM.CheckedChanged - gShowMeasureNumber = CGShowM.Checked - RefreshPanelAll() - End Sub - Private Sub CGShowV_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowV.CheckedChanged - gShowVerticalLine = CGShowV.Checked - RefreshPanelAll() - End Sub - Private Sub CGShowMB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowMB.CheckedChanged - gShowMeasureBar = CGShowMB.Checked - RefreshPanelAll() - End Sub - Private Sub CGShowC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowC.CheckedChanged - gShowC = CGShowC.Checked - RefreshPanelAll() - End Sub - Private Sub CGBLP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGBLP.CheckedChanged - gDisplayBGAColumn = CGBLP.Checked - - column(niBGA).isVisible = gDisplayBGAColumn - column(niLAYER).isVisible = gDisplayBGAColumn - column(niPOOR).isVisible = gDisplayBGAColumn - column(niS4).isVisible = gDisplayBGAColumn - - If IsInitializing Then Exit Sub - For xI1 As Integer = 1 To UBound(Notes) - Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) - Next - 'AddUndo(xUndo, xRedo) - UpdateColumnsX() - RefreshPanelAll() - End Sub - Private Sub CGSCROLL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSCROLL.CheckedChanged - gSCROLL = CGSCROLL.Checked - - column(niSCROLL).isVisible = gSCROLL - - If IsInitializing Then Exit Sub - For xI1 As Integer = 1 To UBound(Notes) - Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) - Next - 'AddUndo(xUndo, xRedo) - UpdateColumnsX() - RefreshPanelAll() - End Sub - Private Sub CGSTOP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSTOP.CheckedChanged - gSTOP = CGSTOP.Checked - - column(niSTOP).isVisible = gSTOP - - If IsInitializing Then Exit Sub - For xI1 As Integer = 1 To UBound(Notes) - Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) - Next - 'AddUndo(xUndo, xRedo) - UpdateColumnsX() - RefreshPanelAll() - End Sub - Private Sub CGBPM_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGBPM.CheckedChanged - 'Dim xUndo As UndoRedo.LinkedURCmd = Nothing - 'Dim xRedo As UndoRedo.LinkedURCmd = Nothing - 'Me.RedoChangeVisibleColumns(gBLP, gSTOP, iPlayer, gBLP, CGSTOP.Checked, iPlayer, xUndo, xRedo) - gBPM = CGBPM.Checked - - column(niBPM).isVisible = gBPM - - If IsInitializing Then Exit Sub - For xI1 As Integer = 1 To UBound(Notes) - Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) - Next - 'AddUndo(xUndo, xRedo) - UpdateColumnsX() - RefreshPanelAll() - End Sub - - Private Sub CGDisableVertical_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGDisableVertical.CheckedChanged - DisableVerticalMove = CGDisableVertical.Checked - End Sub - - Private Sub CBeatPreserve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBeatPreserve.Click, CBeatMeasure.Click, CBeatCut.Click, CBeatScale.Click - 'If Not sender.Checked Then Exit Sub - Dim xBeatList() As RadioButton = {CBeatPreserve, CBeatMeasure, CBeatCut, CBeatScale} - BeatChangeMode = Array.IndexOf(Of RadioButton)(xBeatList, sender) - 'For xI1 As Integer = 0 To mnBeat.Items.Count - 1 - 'If xI1 <> BeatChangeMode Then CType(mnBeat.Items(xI1), ToolStripMenuItem).Checked = False - 'Next - 'sender.Checked = True - End Sub - - - Private Sub tBeatValue_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tBeatValue.LostFocus - Dim a As Double - If Double.TryParse(tBeatValue.Text, a) Then - If a <= 0.0# Or a >= 1000.0# Then tBeatValue.BackColor = Color.FromArgb(&HFFFFC0C0) Else tBeatValue.BackColor = Nothing - - tBeatValue.Text = a - End If - End Sub - - - - Private Sub ApplyBeat(ByVal xRatio As Double, ByVal xDisplay As String) - SortByVPositionInsertion() - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Me.RedoChangeMeasureLengthSelected(192 * xRatio, xUndo, xRedo) - - Dim xIndices(LBeat.SelectedIndices.Count - 1) As Integer - LBeat.SelectedIndices.CopyTo(xIndices, 0) - - - For Each xI1 As Integer In xIndices - Dim dLength As Double = xRatio * 192.0R - MeasureLength(xI1) - Dim dRatio As Double = xRatio * 192.0R / MeasureLength(xI1) - - Dim xBottom As Double = 0 - For xI2 As Integer = 0 To xI1 - 1 - xBottom += MeasureLength(xI2) - Next - Dim xUpBefore As Double = xBottom + MeasureLength(xI1) - Dim xUpAfter As Double = xUpBefore + dLength - - Select Case BeatChangeMode - Case 1 -case2: Dim xI0 As Integer - - If NTInput Then - For xI0 = 1 To UBound(Notes) - If Notes(xI0).VPosition >= xUpBefore Then Exit For - If Notes(xI0).VPosition + Notes(xI0).Length >= xUpBefore Then - Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, Notes(xI0).Length + dLength, xUndo, xRedo) - Notes(xI0).Length += dLength - End If - Next - Else - For xI0 = 1 To UBound(Notes) - If Notes(xI0).VPosition >= xUpBefore Then Exit For - Next - End If - - For xI9 As Integer = xI0 To UBound(Notes) - Me.RedoLongNoteModify(Notes(xI9), Notes(xI9).VPosition + dLength, Notes(xI9).Length, xUndo, xRedo) - Notes(xI9).VPosition += dLength - Next - - Case 2 - If dLength < 0 Then - If NTInput Then - Dim xI0 As Integer = 1 - Dim xU As Integer = UBound(Notes) - Do While xI0 <= xU - If Notes(xI0).VPosition < xUpAfter Then - If Notes(xI0).VPosition + Notes(xI0).Length >= xUpAfter And Notes(xI0).VPosition + Notes(xI0).Length < xUpBefore Then - Dim nLen As Double = xUpAfter - Notes(xI0).VPosition - 1.0R - Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, nLen, xUndo, xRedo) - Notes(xI0).Length = nLen - End If - ElseIf Notes(xI0).VPosition < xUpBefore Then - If Notes(xI0).VPosition + Notes(xI0).Length < xUpBefore Then - Me.RedoRemoveNote(Notes(xI0), xUndo, xRedo) - RemoveNote(xI0) - xI0 -= 1 - xU -= 1 - Else - Dim nLen As Double = Notes(xI0).Length - xUpBefore + Notes(xI0).VPosition - Me.RedoLongNoteModify(Notes(xI0), xUpBefore, nLen, xUndo, xRedo) - Notes(xI0).Length = nLen - Notes(xI0).VPosition = xUpBefore - End If - End If - xI0 += 1 - Loop - Else - Dim xI0 As Integer - Dim xI9 As Integer - For xI0 = 1 To UBound(Notes) - If Notes(xI0).VPosition >= xUpAfter Then Exit For - Next - For xI9 = xI0 To UBound(Notes) - If Notes(xI9).VPosition >= xUpBefore Then Exit For - Next - - For xI8 As Integer = xI0 To xI9 - 1 - Me.RedoRemoveNote(Notes(xI8), xUndo, xRedo) - Next - For xI8 As Integer = xI9 To UBound(Notes) - Notes(xI8 - xI9 + xI0) = Notes(xI8) - Next - ReDim Preserve Notes(UBound(Notes) - xI9 + xI0) - End If - End If - - GoTo case2 - - Case 3 - If NTInput Then - For xI0 As Integer = 1 To UBound(Notes) - If Notes(xI0).VPosition < xBottom Then - If Notes(xI0).VPosition + Notes(xI0).Length > xUpBefore Then - Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, Notes(xI0).Length + dLength, xUndo, xRedo) - Notes(xI0).Length += dLength - ElseIf Notes(xI0).VPosition + Notes(xI0).Length > xBottom Then - Dim nLen As Double = (Notes(xI0).Length + Notes(xI0).VPosition - xBottom) * dRatio + xBottom - Notes(xI0).VPosition - Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, nLen, xUndo, xRedo) - Notes(xI0).Length = nLen - End If - ElseIf Notes(xI0).VPosition < xUpBefore Then - If Notes(xI0).VPosition + Notes(xI0).Length > xUpBefore Then - Dim nLen As Double = (xUpBefore - Notes(xI0).VPosition) * dRatio + Notes(xI0).VPosition + Notes(xI0).Length - xUpBefore - Dim nVPos As Double = (Notes(xI0).VPosition - xBottom) * dRatio + xBottom - Me.RedoLongNoteModify(Notes(xI0), nVPos, nLen, xUndo, xRedo) - Notes(xI0).Length = nLen - Notes(xI0).VPosition = nVPos - Else - Dim nLen As Double = Notes(xI0).Length * dRatio - Dim nVPos As Double = (Notes(xI0).VPosition - xBottom) * dRatio + xBottom - Me.RedoLongNoteModify(Notes(xI0), nVPos, nLen, xUndo, xRedo) - Notes(xI0).Length = nLen - Notes(xI0).VPosition = nVPos - End If - Else - Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition + dLength, Notes(xI0).Length, xUndo, xRedo) - Notes(xI0).VPosition += dLength - End If - Next - Else - Dim xI0 As Integer - Dim xI9 As Integer - For xI0 = 1 To UBound(Notes) - If Notes(xI0).VPosition >= xBottom Then Exit For - Next - For xI9 = xI0 To UBound(Notes) - If Notes(xI9).VPosition >= xUpBefore Then Exit For - Next - - For xI8 As Integer = xI0 To xI9 - 1 - Dim nVP As Double = (Notes(xI8).VPosition - xBottom) * dRatio + xBottom - Me.RedoLongNoteModify(Notes(xI0), nVP, Notes(xI0).Length, xUndo, xRedo) - Notes(xI8).VPosition = nVP - Next - - 'GoTo case2 - - For xI8 As Integer = xI9 To UBound(Notes) - Me.RedoLongNoteModify(Notes(xI8), Notes(xI8).VPosition + dLength, Notes(xI8).Length, xUndo, xRedo) - Notes(xI8).VPosition += dLength - Next - End If - - End Select - - MeasureLength(xI1) = xRatio * 192.0R - LBeat.Items(xI1) = Add3Zeros(xI1) & ": " & xDisplay - Next - UpdateMeasureBottom() - 'xUndo &= vbCrLf & xUndo2 - 'xRedo &= vbCrLf & xRedo2 - - LBeat.SelectedIndices.Clear() - For xI1 As Integer = 0 To UBound(xIndices) - LBeat.SelectedIndices.Add(xIndices(xI1)) - Next - - AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - POStatusRefresh() - End Sub - - Private Sub BBeatApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBeatApply.Click - Dim xxD As Integer = nBeatD.Value - Dim xxN As Integer = nBeatN.Value - Dim xxRatio As Double = xxN / xxD - - ApplyBeat(xxRatio, xxRatio & " ( " & xxN & " / " & xxD & " ) ") - End Sub - - Private Sub BBeatApplyV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBeatApplyV.Click - Dim a As Double - If Double.TryParse(tBeatValue.Text, a) Then - If a <= 0.0# Or a >= 1000.0# Then System.Media.SystemSounds.Hand.Play() : Exit Sub - - Dim xxD As Long = GetDenominator(a) - - ApplyBeat(a, a & IIf(xxD > 10000, "", " ( " & CLng(a * xxD) & " / " & xxD & " ) ")) - End If - End Sub - - - Private Sub BHStageFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BHStageFile.Click, BHBanner.Click, BHBackBMP.Click - Dim xDiag As New OpenFileDialog - xDiag.Filter = Strings.FileType._image & "|*.bmp;*.png;*.jpeg;*.jpg;*.gif|" & - Strings.FileType._all & "|*.*" - xDiag.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) - xDiag.DefaultExt = "png" - - If xDiag.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - InitPath = ExcludeFileName(xDiag.FileName) - - If [Object].ReferenceEquals(sender, BHStageFile) Then - THStageFile.Text = GetFileName(xDiag.FileName) - ElseIf [Object].ReferenceEquals(sender, BHBanner) Then - THBanner.Text = GetFileName(xDiag.FileName) - ElseIf [Object].ReferenceEquals(sender, BHBackBMP) Then - THBackBMP.Text = GetFileName(xDiag.FileName) - End If - End Sub - - Private Sub Switches_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ - POHeaderSwitch.CheckedChanged, - POGridSwitch.CheckedChanged, - POWaveFormSwitch.CheckedChanged, - POWAVSwitch.CheckedChanged, - POBMPSwitch.CheckedChanged, - POBeatSwitch.CheckedChanged, - POExpansionSwitch.CheckedChanged - - Try - Dim Source As CheckBox = CType(sender, CheckBox) - Dim Target As Panel = Nothing - - If Object.ReferenceEquals(sender, Nothing) Then : Exit Sub - ElseIf Object.ReferenceEquals(sender, POHeaderSwitch) Then : Target = POHeaderInner - ElseIf Object.ReferenceEquals(sender, POGridSwitch) Then : Target = POGridInner - ElseIf Object.ReferenceEquals(sender, POWaveFormSwitch) Then : Target = POWaveFormInner - ElseIf Object.ReferenceEquals(sender, POWAVSwitch) Then : Target = POWAVInner - ElseIf Object.ReferenceEquals(sender, POBMPSwitch) Then : Target = POBMPInner - ElseIf Object.ReferenceEquals(sender, POBeatSwitch) Then : Target = POBeatInner - ElseIf Object.ReferenceEquals(sender, POExpansionSwitch) Then : Target = POExpansionInner - End If - - If Source.Checked Then - Target.Visible = True - Else - Target.Visible = False - End If - - Catch ex As Exception - - End Try - End Sub - - Private Sub Expanders_CheckChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ - POHeaderExpander.CheckedChanged, - POGridExpander.CheckedChanged, - POWaveFormExpander.CheckedChanged, - POWAVExpander.CheckedChanged, - POBeatExpander.CheckedChanged - - Try - Dim Source As CheckBox = CType(sender, CheckBox) - Dim Target As Panel = Nothing - 'Dim TargetParent As Panel = Nothing - - If Object.ReferenceEquals(sender, Nothing) Then : Exit Sub - ElseIf Object.ReferenceEquals(sender, POHeaderExpander) Then : Target = POHeaderPart2 ' : TargetParent = POHeaderInner - ElseIf Object.ReferenceEquals(sender, POGridExpander) Then : Target = POGridPart2 ' : TargetParent = POGridInner - ElseIf Object.ReferenceEquals(sender, POWaveFormExpander) Then : Target = POWaveFormPart2 ' : TargetParent = POWaveFormInner - ElseIf Object.ReferenceEquals(sender, POWAVExpander) Then : Target = POWAVPart2 ' : TargetParent = POWaveFormInner - ElseIf Object.ReferenceEquals(sender, POBeatExpander) Then : Target = POBeatPart2 ' : TargetParent = POWaveFormInner - End If - - If Source.Checked Then - Target.Visible = True - 'Source.Image = My.Resources.Collapse - Else - Target.Visible = False - 'Source.Image = My.Resources.Expand - End If - - Catch ex As Exception - - End Try - - End Sub - - Private Sub VerticalResizer_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POWAVResizer.MouseDown, POBMPResizer.MouseDown, POBeatResizer.MouseDown, POExpansionResizer.MouseDown - tempResize = e.Y - End Sub - - Private Sub HorizontalResizer_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POptionsResizer.MouseDown, SpL.MouseDown, SpR.MouseDown - tempResize = e.X - End Sub - - Private Sub POResizer_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POWAVResizer.MouseMove, POBMPResizer.MouseMove, POBeatResizer.MouseMove, POExpansionResizer.MouseMove - If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub - If e.Y = tempResize Then Exit Sub - - Try - Dim Source As Button = CType(sender, Button) - Dim Target As Panel = Source.Parent - - Dim xHeight As Integer = Target.Height + e.Y - tempResize - If xHeight < 10 Then xHeight = 10 - Target.Height = xHeight - - Target.Refresh() - Catch ex As Exception - - End Try - End Sub - - Private Sub POptionsResizer_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POptionsResizer.MouseMove - If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub - If e.X = tempResize Then Exit Sub - - Try - Dim xWidth As Integer = POptionsScroll.Width - e.X + tempResize - If xWidth < 25 Then xWidth = 25 - POptionsScroll.Width = xWidth - - Me.Refresh() - Application.DoEvents() - Catch ex As Exception - - End Try - End Sub - - Private Sub SpR_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles SpR.MouseMove - If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub - If e.X = tempResize Then Exit Sub - - Try - Dim xWidth As Integer = PMainR.Width - e.X + tempResize - If xWidth < 0 Then xWidth = 0 - PMainR.Width = xWidth - - Me.ToolStripContainer1.Refresh() - Application.DoEvents() - Catch ex As Exception - - End Try - End Sub - - Private Sub SpL_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles SpL.MouseMove - If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub - If e.X = tempResize Then Exit Sub - - Try - Dim xWidth As Integer = PMainL.Width + e.X - tempResize - If xWidth < 0 Then xWidth = 0 - PMainL.Width = xWidth - - Me.ToolStripContainer1.Refresh() - Application.DoEvents() - Catch ex As Exception - - End Try - End Sub - - Private Sub mnGotoMeasure_Click(sender As Object, e As EventArgs) Handles mnGotoMeasure.Click - Dim s = InputBox(Strings.Messages.PromptEnterMeasure, "Enter Measure") - - Dim i As Integer - If Int32.TryParse(s, i) Then - If i < 0 Or i > 999 Then - Exit Sub - End If - - PanelVScroll(PanelFocus) = -MeasureBottom(i) - End If - End Sub -End Class +Imports System.Linq +Imports iBMSC.Editor + + +Public Class MainWindow + + + 'Public Structure MARGINS + ' Public Left As Integer + ' Public Right As Integer + ' Public Top As Integer + ' Public Bottom As Integer + 'End Structure + + ' _ + 'Public Shared Function DwmIsCompositionEnabled(ByRef en As Integer) As Integer + 'End Function + ' _ + 'Public Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef margin As MARGINS) As Integer + 'End Function + Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer + Public Declare Function ReleaseCapture Lib "user32.dll" Alias "ReleaseCapture" () As Integer + + 'Private Declare Auto Function GetWindowLong Lib "user32" (ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer + 'Private Declare Auto Function SetWindowLong Lib "user32" (ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer + 'Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer + ' _ + 'Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean + 'End Function + + 'Private Const GWL_STYLE As Integer = -16 + 'Private Const WS_CAPTION As Integer = &HC00000 + 'Private Const SWP_NOSIZE As Integer = &H1 + 'Private Const SWP_NOMOVE As Integer = &H2 + 'Private Const SWP_NOZORDER As Integer = &H4 + 'Private Const SWP_NOACTIVATE As Integer = &H10 + 'Private Const SWP_FRAMECHANGED As Integer = &H20 + 'Private Const SWP_REFRESH As Integer = SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_FRAMECHANGED + + Public Sub New() + InitializeComponent() + Audio.Initialize() + End Sub + + Dim MeasureLength(999) As Double + Dim MeasureBottom(999) As Double + + Public Function MeasureUpper(idx As Integer) As Double + Return MeasureBottom(idx) + MeasureLength(idx) + End Function + + + Dim Notes() As Note = {New Note(niBPM, -1, 1200000, 0, False)} + Dim NotesTemplate() As Note = {New Note(niBPM, -1, 1200000, 0, False)} + Dim mColumn(999) As Integer '0 = no column, 1 = 1 column, etc. + Dim GreatestVPosition As Double '+ 2000 = -VS.Minimum + + Dim VSValue As Integer = 0 'Store value before ValueChange event + Dim HSValue As Integer = 0 'Store value before ValueChange event + + 'Dim SortingMethod As Integer = 1 + Dim MiddleButtonMoveMethod As Integer = 0 + Dim TextEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS") + Dim DispLang As String = "" 'Display Language + Dim Recent() As String = {"", "", "", "", ""} + Dim NTInput As Boolean = True + Dim ShowFileName As Boolean = False + Dim ShowWaveform As Boolean = False + Dim ShowBMP As Boolean = False + + Dim BeepWhileSaved As Boolean = True + Dim PreloadBMSStruct As Boolean = False + Dim BPMx1296 As Boolean = False + Dim STOPx1296 As Boolean = False + Dim AudioLine As Boolean = True + Dim TemplateSnapToVPosition As Boolean = False + Dim PastePatternToVPosition As Boolean = False + + Dim IsApplicationInitializing As Boolean = True + Dim FirstMouseEnter As Boolean = True + + Dim WAVMultiSelect As Boolean = True + Dim WAVChangeLabel As Boolean = True + Dim BMPMultiSelect As Boolean = True + Dim BMPChangeLabel As Boolean = True + Dim BeatChangeMode As Integer = 0 + + 'Dim FloatTolerance As Double = 0.0001R + Dim BMSGridLimit As Double = 1.0R + + Dim LnObj As Integer = 0 '0 for none, 1-1295 for 01-ZZ + + 'IO + Dim FileNameInit As String = "Untitled.bms" + Dim FileName As String = FileNameInit + Dim TempFileName As String = "___TempBMS.bmsc" + Dim RandomTempFileName As String = "___TempRandom" & GenerateRandomString(6, False) & ".bmsc" + Public ExpansionSplit(2) As String + 'Dim TitlePath As New Drawing2D.GraphicsPath + Dim InitPath As String = "" + Dim IsSaved As Boolean = True + Dim FileNameTemplate As String = "" + + 'Variables for Drag/Drop + Dim DDFileName() As String = {} + Dim SupportedFileExtension() As String = {".bms", ".bme", ".bml", ".pms", ".txt", ".sm", ".ibmsc"} + Dim SupportedAudioExtension() As String = {} + Dim SupportedImageExtension() As String = {".bmp", ".png", ".jpg", ".jpeg", ".gif", ".mpg", ".mpeg", ".avi", ".m1v", ".m2v", ".m4v", ".mp4", ".webm", ".wmv"} + + 'Variables for theme + 'Dim SaveTheme As Boolean = True + + 'Variables for undo/redo + Dim UndoRedoCount As Integer = 200 + Dim sUndo(UndoRedoCount) As UndoRedo.LinkedURCmd + Dim sRedo(UndoRedoCount) As UndoRedo.LinkedURCmd + Dim sI As Integer = 0 + + 'Variables for select tool + Dim DisableVerticalMove As Boolean = False + Dim KMouseOver As Integer = -1 'Mouse is on which note (for drawing green outline) + Dim LastMouseDownLocation As PointF = New Point(-1, -1) 'Mouse is clicked on which point (location for display) (for selection box) + Dim pMouseMove As PointF = New Point(-1, -1) 'Mouse is moved to which point (location for display) (for selection box) + 'Dim KMouseDown As Integer = -1 'Mouse is clicked on which note (for moving) + Dim deltaVPosition As Double = 0 'difference between mouse and VPosition of K + Dim bAdjustLength As Boolean 'If adjusting note length instead of moving it + Dim bAdjustUpper As Boolean 'true = Adjusting upper end, false = adjusting lower end + Dim bAdjustSingle As Boolean 'true if there is only one note to be adjusted + Dim tempX As Integer + Dim tempY As Integer + Dim tempV As Integer + Dim tempH As Integer + Dim MiddleButtonLocation As New Point(0, 0) + Dim MiddleButtonClicked As Boolean = False + Dim MouseMoveStatus As Point = New Point(0, 0) 'mouse is moved to which point (For Status Panel) + 'Dim uCol As Integer 'temp variables for undo, original enabled columnindex + 'Dim uVPos As Double 'temp variables for undo, original vposition + 'Dim uPairWithI As Double 'temp variables for undo, original note length + Dim uAdded As Boolean 'temp variables for undo, if undo command is added + 'Dim uNote As Note 'temp variables for undo, original note + Dim SelectedNotes(-1) As Note 'temp notes for undo + Dim ctrlPressed As Boolean = False 'Indicates if the CTRL key is pressed while mousedown + Dim DuplicatedSelectedNotes As Boolean = False 'Indicates if duplicate notes of select/unselect note + + 'Variables for write tool + Dim ShouldDrawTempNote As Boolean = False + Dim SelectedColumn As Integer = -1 + Dim TempVPosition As Double = -1.0# + Dim TempLength As Double = 0.0# + + 'Variables for post effects tool + Dim vSelStart As Double = 192.0# + Dim vSelLength As Double = 0.0# + Dim vSelHalf As Double = 0.0# + Dim vSelMouseOverLine As Integer = 0 '0 = nothing, 1 = start, 2 = half, 3 = end + Dim vSelAdjust As Boolean = False + Dim vSelK() As Note = {} + Dim vSelPStart As Double = 192.0# + Dim vSelPLength As Double = 0.0# + Dim vSelPHalf As Double = 0.0# + + 'Variables for Full-Screen Mode + Dim isFullScreen As Boolean = False + Dim previousWindowState As FormWindowState = FormWindowState.Normal + Dim previousWindowPosition As New Rectangle(0, 0, 0, 0) + + 'Variables misc + Dim menuVPosition As Double = 0.0# + Dim tempResize As Integer = 0 + Dim hCOM(1295) As String ' + Dim hCOMNum As Integer = 0 + Dim gXKeyMode As String = "SP" ' Determines from column width 7key mode, 9key mode or 14key mode + Dim gXKeyCol() As Integer + Dim gLNGap As Double = 16 + Dim wLWAV(1295) As WavSample + Dim WaveformLoaded As Boolean = False + Dim WaveformLoadId As Integer = 1 + Dim NoteWVPosEnd() As Double + Dim LWAVRefreshId As Integer = 1 + Dim LBMPRefreshId As Integer = 1 + + '----AutoSave Options + Dim PreviousAutoSavedFileName As String = "" + Dim AutoSaveInterval As Integer = 120000 + + '----ErrorCheck Options + Dim ErrorCheck As Boolean = True + Dim ErrorJackBPM As Double = 255 + Dim ErrorJackTH As Double = 16 + Dim ErrorJackSpeed As Double = 60 * 4 / ErrorJackBPM / ErrorJackTH + + '----Header Options + Dim hBMP(1295) As String + Dim hWAV(1295) As String + Dim hBMSCROLL(1295) As Long + Dim hBPM(1295) As Long 'x10000 + Dim hSTOP(1295) As Long + + '----Grid Options + Dim gSnap As Boolean = True + Dim gShowGrid As Boolean = True 'Grid + Dim gShowSubGrid As Boolean = True 'Sub + Dim gShowBG As Boolean = True 'BG Color + Dim gShowMeasureNumber As Boolean = True 'Measure Label + Dim gShowVerticalLine As Boolean = True 'Vertical + Dim gShowMeasureBar As Boolean = True 'Measure Barline + Dim gShowC As Boolean = True 'Column Caption + Dim gDivide As Integer = 16 + Dim gSub As Integer = 4 + Dim gSlash As Integer = 192 + Dim gxHeight As Single = 1.0! + Dim gxWidth As Single = 1.0! + Dim gWheel As Integer = 96 + Dim gPgUpDn As Integer = 384 + + Dim gDisplayBGAColumn As Boolean = True + Dim gSCROLL As Boolean = True + Dim gSTOP As Boolean = True + Dim gBPM As Boolean = True + 'Dim gA8 As Boolean = False + Dim iPlayer As Integer = 0 + Dim gColumns As Integer = 46 + + '----Visual Options + Dim vo As New visualSettings() + + Public Sub setVO(ByVal xvo As visualSettings) + vo = xvo + End Sub + + '----Note Waveforms + Structure WavSample + Public WavL() As Single + Public WavR() As Single + Public SampleRate As Integer + Public Duration As Single + + Public Sub New(xWavL() As Single, + xWavR() As Single, + xSampleRate As Integer, + xDuration As Single) + WavL = xWavL + WavR = xWavR + SampleRate = xSampleRate + Duration = xDuration + End Sub + End Structure + + '----Visual Override Options + Structure ColorOverride + Public Name As String + Public Enabled As Boolean + Public ColorOption As Integer + Public RangeL As Integer + Public RangeU As Integer + Public NoteColor As Integer + Public NoteColorU As Integer + + Public Sub New(ByVal xName As String, + ByVal xEnabled As Boolean, + ByVal xColorOption As Integer, + ByVal xRangeL As Integer, + ByVal xRangeU As Integer, + ByVal xNoteColor As Integer, + ByVal xNoteColorU As Integer) + + Name = xName + Enabled = xEnabled + ColorOption = xColorOption + RangeL = xRangeL + RangeU = xRangeU + NoteColor = xNoteColor + NoteColorU = xNoteColorU + End Sub + End Structure + Dim COverrides(-1) As ColorOverride + Dim COverridesColors(1295) As Color + Dim COverridesSaveOption As Integer = 1 + + '----Keybinding Options + Structure Keybinding + Public OpVar As Integer + Public OpName As String + Public Description As String + Public Combo() As String + Public Category As Integer + + Public Sub New(xOpVar As Integer, ByVal xOpName As String, Optional xDescription As String = "", Optional xKey() As String = Nothing, Optional xCategory As Integer = -1) + OpVar = xOpVar + OpName = xOpName + Description = xDescription + Combo = xKey + Category = xCategory + End Sub + End Structure + + Public KbCategorySP As Integer = 1 + Public KbCategoryPMS As Integer = 2 + Public KbCategoryDP As Integer = 3 + Public KbCategoryBGM As Integer = 4 + Public KbCategoryAllMod As Integer = 10 ' AllMod meaning all modifiers included + Public KbCategoryHidden As Integer = 0 + Public KbCategory() As Integer = {KbCategoryPMS, KbCategoryDP, KbCategorySP, KbCategoryBGM, KbCategoryAllMod, KbCategoryHidden, -1} ' Order matters + Public KeybindingsInit() As Keybinding = { ' SP Note Assignments + New Keybinding(0, "Move to A2", "Move note to 1P Lane 1", {"D1", "NumPad1"}, KbCategorySP), + New Keybinding(1, "Move to A3", "Move note to 1P Lane 2", {"D2", "NumPad2"}, KbCategorySP), + New Keybinding(2, "Move to A4", "Move note to 1P Lane 3", {"D3", "NumPad3"}, KbCategorySP), + New Keybinding(3, "Move to A5", "Move note to 1P Lane 4", {"D4", "NumPad4"}, KbCategorySP), + New Keybinding(4, "Move to A6", "Move note to 1P Lane 5", {"D5", "NumPad5"}, KbCategorySP), + New Keybinding(5, "Move to A7", "Move note to 1P Lane 6", {"D6", "NumPad6"}, KbCategorySP), + New Keybinding(6, "Move to A8", "Move note to 1P Lane 7", {"D7", "NumPad7"}, KbCategorySP), + New Keybinding(7, "Move to A1", "Move note to 1P Scratch Lane", {"D8", "NumPad8"}, KbCategorySP), + _ ' DP Note Assignments + New Keybinding(10, "Move to D1", "Move note to 2P Lane 1", {"Q", "Ctrl+D1", "NumPad1"}, KbCategoryDP), + New Keybinding(11, "Move to D2", "Move note to 2P Lane 2", {"W", "Ctrl+D2", "NumPad2"}, KbCategoryDP), + New Keybinding(12, "Move to D3", "Move note to 2P Lane 3", {"E", "Ctrl+D3", "NumPad3"}, KbCategoryDP), + New Keybinding(13, "Move to D4", "Move note to 2P Lane 4", {"R", "Ctrl+D4", "NumPad4"}, KbCategoryDP), + New Keybinding(14, "Move to D5", "Move note to 2P Lane 5", {"T", "Ctrl+D5", "NumPad5"}, KbCategoryDP), + New Keybinding(15, "Move to D6", "Move note to 2P Lane 6", {"Y", "Ctrl+D6", "NumPad6"}, KbCategoryDP), + New Keybinding(16, "Move to D7", "Move note to 2P Lane 7", {"U", "Ctrl+D7", "NumPad7"}, KbCategoryDP), + New Keybinding(17, "Move to D8", "Move note to 2P Scratch Lane", {"I", "Ctrl+D8", "NumPad8"}, KbCategoryDP), + _ ' PMS Note Assignments + New Keybinding(20, "Move to P1", "Move note to PMS Lane 1", {"D1", "NumPad1"}, KbCategoryPMS), + New Keybinding(21, "Move to P2", "Move note to PMS Lane 2", {"D2", "NumPad2"}, KbCategoryPMS), + New Keybinding(22, "Move to P3", "Move note to PMS Lane 3", {"D3", "NumPad3"}, KbCategoryPMS), + New Keybinding(23, "Move to P4", "Move note to PMS Lane 4", {"D4", "NumPad4"}, KbCategoryPMS), + New Keybinding(24, "Move to P5", "Move note to PMS Lane 5", {"D5", "NumPad5"}, KbCategoryPMS), + New Keybinding(25, "Move to P6", "Move note to PMS Lane 6", {"D6", "NumPad6"}, KbCategoryPMS), + New Keybinding(26, "Move to P7", "Move note to PMS Lane 7", {"D7", "NumPad7"}, KbCategoryPMS), + New Keybinding(27, "Move to P8", "Move note to PMS Lane 8", {"D8", "NumPad8"}, KbCategoryPMS), + New Keybinding(28, "Move to P9", "Move note to PMS Lane 9", {"D9", "NumPad9"}, KbCategoryPMS), + _ ' Miscellaneous BMS + New Keybinding(100, "Move to BGM", "Move note to BGM Lane", {"D0", "NumPad0"}, KbCategoryBGM), + New Keybinding(101, "Move to Template Position", "Move note to Template Position if available", {"P"}), + New Keybinding(102, "Disable Vertical Moves", "Disable vertical moves", {"D"}), + New Keybinding(103, "Snap to Grid", "Snap to grid", {"G"}), + _ + New Keybinding(104, "Convert to Long Note", "→ Long Note", {"L"}), + New Keybinding(105, "Convert to Short Note", "→ Short Note", {"S"}), + New Keybinding(106, "Convert between Long and Short Note", "Long Note ↔ Short Note", {""}), + New Keybinding(107, "Auto Long Note (By VPosition)", "Auto Long Note (By VPosition)", {""}), + New Keybinding(108, "Auto Long Note (By Column)", "Auto Long Note (By Column)", {""}), + _ + New Keybinding(109, "Check Technical Error", "Check for technical errors such as impossible scratches in DP or impossible chords in PMS", {"Ctrl+Alt+E"}), + New Keybinding(110, "Select Expansion Section", "Select #IF sections in the Expansion field", {"Ctrl+Alt+R"}), + _ ' Miscellaneous Editor + New Keybinding(111, "Undo", "", {"Ctrl+Z"}), + New Keybinding(112, "Redo", "", {"Ctrl+Y", "Ctrl+Alt+Z"}), + New Keybinding(113, "Cut", "", {"Ctrl+X"}), + New Keybinding(114, "Copy", "", {"Ctrl+C"}), + New Keybinding(115, "Paste", "", {"Ctrl+V"}), + New Keybinding(116, "Paste Pattern", "Apply pattern of the notes on the clipboard to the highlighted notes.", {"Ctrl+Shift+V"}), + New Keybinding(117, "Select All", "", {"Ctrl+A"}), + New Keybinding(118, "Select All with Hovered Note Label", "", {"Ctrl+Shift+A"}), + _ ' All Modifiers + New Keybinding(200, "Move Note Up", "*HIDDEN*", {"Up"}, KbCategoryAllMod), + New Keybinding(201, "Move Note Down", "*HIDDEN*", {"Down"}, KbCategoryAllMod), + New Keybinding(202, "Move Note Left", "*HIDDEN*", {"Left"}, KbCategoryAllMod), + New Keybinding(203, "Move Note Right", "*HIDDEN*", {"Right"}, KbCategoryAllMod), + New Keybinding(204, "Insert Space/Define Measure", "*HIDDEN*", {"Insert"}, KbCategoryAllMod), + New Keybinding(205, "Delete", "*HIDDEN*", {"Delete"}, KbCategoryAllMod), + New Keybinding(206, "Home", "*HIDDEN*", {"Home"}, KbCategoryAllMod), + New Keybinding(207, "End", "*HIDDEN*", {"End"}, KbCategoryAllMod), + New Keybinding(208, "PageUp", "*HIDDEN*", {"PageUp"}, KbCategoryAllMod), + New Keybinding(209, "PageDown", "*HIDDEN*", {"PageDown"}, KbCategoryAllMod), + New Keybinding(210, "Next", "*HIDDEN*", {"Next"}, KbCategoryAllMod), ' ??? + New Keybinding(211, "TabBetweenFiles", "*HIDDEN*", {"Tab"}, KbCategoryAllMod), + New Keybinding(212, "TabBetweenNotes", "*HIDDEN*", {"Capital"}, KbCategoryAllMod), + New Keybinding(213, "Decrease Division", "*HIDDEN*", {"Oemcomma"}, KbCategoryAllMod), + New Keybinding(214, "Increase Division", "*HIDDEN*", {"OemPeriod"}, KbCategoryAllMod), + _ ' Hidden / Experimental + New Keybinding(215, "Set CGDivision", "*HIDDEN*", {"OemQuestion"}, KbCategoryHidden), + New Keybinding(216, "Decrease CGHeight", "*HIDDEN*", {"OemMinus"}, KbCategoryHidden), + New Keybinding(217, "Increase CGHeight", "*HIDDEN*", {"Oemplus"}, KbCategoryHidden), + New Keybinding(218, "DecreaseCurrentWav", "*HIDDEN*", {"Subtract"}, KbCategoryHidden), + New Keybinding(219, "IncreaseCurrentWav", "*HIDDEN*", {"Add"}, KbCategoryHidden), + New Keybinding(220, "TBPreviewHighlighted_Click", "*EXPERIMENTAL*", {"Shift+F4"}, KbCategoryHidden) + } + + Dim Keybindings() As Keybinding = CType(KeybindingsInit, Keybinding()) + + Private Function ExcludeShortcut(ByVal xStr As String) As String + Dim IParenthesis = xStr.LastIndexOf("(") + If IParenthesis = -1 Then Return xStr.Replace("&", "") + Return xStr.Substring(0, IParenthesis - 1).Replace("&", "") + End Function + + Public Sub ReloadKeybindingNames(ByRef K() As Keybinding) + For i = 0 To UBound(K) + With K(i) + Select Case .OpVar + Case 0 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A2") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "1") + Case 1 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A3") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "2") + Case 2 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A4") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "3") + Case 3 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A5") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "4") + Case 4 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A6") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "5") + Case 5 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A7") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "6") + Case 6 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A8") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "1P").Replace("{2}", "7") + Case 7 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "A1") : .Description = Strings.fopKeybinding.MoveToScratchDescription.Replace("{}", "1P") + + Case 10 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D1") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "1") + Case 11 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D2") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "2") + Case 12 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D3") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "3") + Case 13 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D4") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "4") + Case 14 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D5") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "5") + Case 15 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D6") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "6") + Case 16 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D7") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "2P").Replace("{2}", "7") + Case 17 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "D8") : .Description = Strings.fopKeybinding.MoveToScratchDescription.Replace("{}", "2P") + + Case 20 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P1") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "1") + Case 21 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P2") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "2") + Case 22 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P3") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "3") + Case 23 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P4") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "4") + Case 24 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P5") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "5") + Case 25 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P6") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "6") + Case 26 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P7") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "7") + Case 27 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P8") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "8") + Case 28 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "P9") : .Description = Strings.fopKeybinding.MoveToDescription.Replace("{1}", "PMS").Replace("{2}", "9") + + Case 100 : .OpName = Strings.fopKeybinding.MoveTo.Replace("{}", "BGM") : .Description = Strings.fopKeybinding.MoveToBGMDescription + Case 101 : .OpName = Strings.fopKeybinding.MoveToTemplate : .Description = Strings.fopKeybinding.MoveToTemplateDescription + Case 102 : .OpName = ExcludeShortcut(CGDisableVertical.Text) : .Description = "" + Case 103 : .OpName = ExcludeShortcut(CGSnap.Text) : .Description = "" + + Case 104 : .OpName = ExcludeShortcut(POBLong.Text) : .Description = "" + Case 105 : .OpName = ExcludeShortcut(POBShort.Text) : .Description = "" + Case 106 : .OpName = ExcludeShortcut(POBLongShort.Text) : .Description = "" + Case 107 : .OpName = ExcludeShortcut(POBAutoLongVPosition.Text) : .Description = "" + Case 108 : .OpName = ExcludeShortcut(POBAutoLongColumn.Text) : .Description = "" + + Case 109 : .OpName = ExcludeShortcut(mnTechnicalErrorCheck.Text) : .Description = Strings.fopKeybinding.CheckTechnicalError + Case 110 : .OpName = ExcludeShortcut(BExpansion.Text) : .Description = Strings.fopKeybinding.SelectExpansionSection + + Case 111 : .OpName = ExcludeShortcut(mnUndo.Text) : .Description = "" + Case 112 : .OpName = ExcludeShortcut(mnRedo.Text) : .Description = "" + Case 113 : .OpName = ExcludeShortcut(mnCut.Text) : .Description = "" + Case 114 : .OpName = ExcludeShortcut(mnCopy.Text) : .Description = "" + Case 115 : .OpName = ExcludeShortcut(mnPaste.Text) : .Description = "" + Case 116 : .OpName = ExcludeShortcut(mnPastePattern.Text) : .Description = Strings.fopKeybinding.PastePattern + Case 117 : .OpName = ExcludeShortcut(mnSelectAll.Text) : .Description = "" + Case 118 : .OpName = Strings.fopKeybinding.SelectHovered : .Description = "" + + End Select + End With + Next + End Sub + + '----Preview Options + Structure PlayerArguments + Public Path As String + Public aBegin As String + Public aHere As String + Public aStop As String + Public Sub New(ByVal xPath As String, ByVal xBegin As String, ByVal xHere As String, ByVal xStop As String) + Path = xPath + aBegin = xBegin + aHere = xHere + aStop = xStop + End Sub + End Structure + + Public pArgsInit() As PlayerArguments = {New PlayerArguments("\mBMplay.exe", + """""", + "-s """"", + "-t"), + New PlayerArguments("\uBMplay.exe", + "-P -N0 """"", + "-P -N """"", + "-S"), + New PlayerArguments("\o2play.exe", + "-P -N0 """"", + "-P -N """"", + "-S")} + Public pArgs() As PlayerArguments = CType(pArgsInit.Clone(), PlayerArguments()) + Public CurrentPlayer As Integer = 0 + Dim PreviewOnClick As Boolean = True + Dim PreviewErrorCheck As Boolean = False + Dim ClickStopPreview As Boolean = True + Dim pTempFileNames() As String = {} + + Dim InternalPlayNotes() As Note + Dim InternalPlayNoteIndex As Integer + Dim InternalPlayTimerStart As Long = 0 + Dim InternalPlayTimerEnd As Long = 0 + Dim InternalPlayTimerCount As Long = 0 + Dim InternalPlayWav(1295) As AudioC + + '----Split Panel Options + Dim PanelWidth() As Single = {0, 100, 0} + Dim PanelHScroll() As Integer = {0, 0, 0} + Dim PanelVScroll() As Double = {0, 0, 0} + Dim spLock() As Boolean = {False, False, False} + Dim spDiff() As Integer = {0, 0, 0} + Dim PanelFocus As Integer = 1 '0 = Left, 1 = Middle, 2 = Right + Dim spMouseOver As Integer = 1 + + Dim AutoFocusMouseEnter As Boolean = False + Dim FirstClickDisabled As Boolean = True + Dim tempFirstMouseDown As Boolean = False + + Dim spMain() As Panel = {} + + '----#TOTAL Tool + Dim TotalOption As Integer = 0 + Dim TotalMultiplier As Double = 0.25 + Dim TotalGlobalMultiplier As Double = 1 + Dim TotalDecimal As Integer = 0 + Dim TotalDisplayValue As Boolean = True + Dim TotalDisplayText As Boolean = True + Dim TotalAutofill As Boolean = True + + '----Find Delete Replace Options + Dim fdriMesL As Integer + Dim fdriMesU As Integer + Dim fdriLblL As Integer + Dim fdriLblU As Integer + Dim fdriValL As Integer + Dim fdriValU As Integer + Dim fdriCol() As Integer + + '----#RANDOM Editor + Dim GhostMode As Integer = 0 ' 0 - Default, ghost notes entirely uneditable, 1 - Ghost notes loaded with expectation of editing them, 2 - Ghost notes loaded as main notes and main notes temporarily changed to ghost notes + Dim GhostEdit As Boolean = False + + ''' + ''' + ''' + ''' Original horizontal position. + ''' HS.Value + + + Private Function HorizontalPositiontoDisplay(ByVal xHPosition As Integer, ByVal xHSVal As Integer) As Integer + Return CInt(xHPosition * gxWidth - xHSVal * gxWidth) + End Function + + ''' + ''' + ''' + ''' Original vertical position. + ''' VS.Value + ''' Height of the panel. (DisplayRectangle, but not ClipRectangle) + + + Private Function NoteRowToPanelHeight(ByVal xVPosition As Double, ByVal xVSVal As Integer, ByVal xTHeight As Integer) As Integer + Return xTHeight - CInt((xVPosition + xVSVal) * gxHeight) - 1 + End Function + + Public Function MeasureAtDisplacement(ByVal xVPos As Double) As Integer + 'Return Math.Floor((xVPos + FloatTolerance) / 192) + 'Return Math.Floor(xVPos / 192) + Dim xI1 As Integer + For xI1 = 1 To 999 + If xVPos < MeasureBottom(xI1) Then Exit For + Next + Return xI1 - 1 + End Function + + Private Function GetMaxVPosition() As Double + Return MeasureUpper(999) + End Function + + Private Function SnapToGrid(ByVal xVPos As Double) As Double + Dim xOffset As Double = MeasureBottom(MeasureAtDisplacement(xVPos)) + Dim xRatio As Double = 192.0R / gDivide + Return Math.Floor((xVPos - xOffset) / xRatio) * xRatio + xOffset + End Function + + Private Sub CalculateGreatestVPosition() + 'If K Is Nothing Then Exit Sub + Dim xI1 As Integer + GreatestVPosition = 0 + + If NTInput Then + For xI1 = UBound(Notes) To 0 Step -1 + If Notes(xI1).VPosition + Notes(xI1).Length > GreatestVPosition Then GreatestVPosition = Notes(xI1).VPosition + Notes(xI1).Length + Next + Else + For xI1 = UBound(Notes) To 0 Step -1 + If Notes(xI1).VPosition > GreatestVPosition Then GreatestVPosition = Notes(xI1).VPosition + Next + End If + + Dim xI2 As Integer = -CInt(IIf(GreatestVPosition + 2000 > GetMaxVPosition(), GetMaxVPosition, GreatestVPosition + 2000)) + MainPanelScroll.Minimum = xI2 + LeftPanelScroll.Minimum = xI2 + RightPanelScroll.Minimum = xI2 + End Sub + + + Private Sub SortByVPositionInsertion() 'Insertion Sort + If UBound(Notes) <= 0 Then Exit Sub + Dim xNote As Note + Dim xI1 As Integer + Dim xI2 As Integer + For xI1 = 2 To UBound(Notes) + xNote = Notes(xI1) + For xI2 = xI1 - 1 To 1 Step -1 + If Notes(xI2).VPosition > xNote.VPosition Then + Notes(xI2 + 1) = Notes(xI2) + ' If KMouseDown = xI2 Then KMouseDown += 1 + If xI2 = 1 Then + Notes(xI2) = xNote + ' If KMouseDown = xI1 Then KMouseDown = xI2 + Exit For + End If + Else + Notes(xI2 + 1) = xNote + ' If KMouseDown = xI1 Then KMouseDown = xI2 + 1 + Exit For + End If + Next + Next + + End Sub + + Private Sub SortByVPositionQuick(ByVal xMin As Integer, ByVal xMax As Integer) 'Quick Sort + Dim xNote As Note + Dim iHi As Integer + Dim iLo As Integer + Dim xI1 As Integer + + ' If min >= max, the list contains 0 or 1 items so it is sorted. + If xMin >= xMax Then Exit Sub + + ' Pick the dividing value. + xI1 = CInt((xMax + xMin) / 2) + xNote = Notes(xI1) + + ' Swap it to the front. + Notes(xI1) = Notes(xMin) + + iLo = xMin + iHi = xMax + Do + ' Look down from hi for a value < med_value. + Do While Notes(iHi).VPosition > xNote.VPosition OrElse (Notes(iHi).VPosition = xNote.VPosition AndAlso Notes(iHi).ColumnIndex > xNote.ColumnIndex) + iHi = iHi - 1 + If iHi <= iLo Then Exit Do + Loop + If iHi <= iLo Then + Notes(iLo) = xNote + Exit Do + End If + + ' Swap the lo and hi values. + Notes(iLo) = Notes(iHi) + + ' Look up from lo for a value >= med_value. + iLo = iLo + 1 + Do While Notes(iLo).VPosition < xNote.VPosition + iLo = iLo + 1 + If iLo >= iHi Then Exit Do + Loop + If iLo >= iHi Then + iLo = iHi + Notes(iHi) = xNote + Exit Do + End If + + ' Swap the lo and hi values. + Notes(iHi) = Notes(iLo) + Loop + + ' Sort the two sublists. + SortByVPositionQuick(xMin, iLo - 1) + SortByVPositionQuick(iLo + 1, xMax) + End Sub + + Private Sub SortByVPositionQuick3(ByVal xMin As Integer, ByVal xMax As Integer) + Dim xxMin As Integer + Dim xxMax As Integer + Dim xxMid As Integer + Dim xNote As Note + Dim xNoteMid As Note + Dim xI1 As Integer + Dim xI2 As Integer + Dim xI3 As Integer + + 'If xMax = 0 Then + ' xMin = LBound(K1) + ' xMax = UBound(K1) + 'End If + xxMin = xMin + xxMax = xMax + xxMid = xMax - xMin + 1 + xI1 = CInt(Int(xxMid * Rnd())) + xMin + xI2 = CInt(Int(xxMid * Rnd())) + xMin + xI3 = CInt(Int(xxMid * Rnd())) + xMin + If Notes(xI1).VPosition <= Notes(xI2).VPosition And Notes(xI2).VPosition <= Notes(xI3).VPosition Then + xxMid = xI2 + Else + If Notes(xI2).VPosition <= Notes(xI1).VPosition And Notes(xI1).VPosition <= Notes(xI3).VPosition Then + xxMid = xI1 + Else + xxMid = xI3 + End If + End If + xNoteMid = Notes(xxMid) + Do + Do While Notes(xxMin).VPosition < xNoteMid.VPosition And xxMin < xMax + xxMin = xxMin + 1 + Loop + Do While xNoteMid.VPosition < Notes(xxMax).VPosition And xxMax > xMin + xxMax = xxMax - 1 + Loop + If xxMin <= xxMax Then + xNote = Notes(xxMin) + Notes(xxMin) = Notes(xxMax) + Notes(xxMax) = xNote + xxMin = xxMin + 1 + xxMax = xxMax - 1 + End If + Loop Until xxMin > xxMax + If xxMax - xMin < xMax - xxMin Then + If xMin < xxMax Then SortByVPositionQuick3(xMin, xxMax) + If xxMin < xMax Then SortByVPositionQuick3(xxMin, xMax) + Else + If xxMin < xMax Then SortByVPositionQuick3(xxMin, xMax) + If xMin < xxMax Then SortByVPositionQuick3(xMin, xxMax) + End If + End Sub + + + Private Sub UpdateMeasureBottom() + MeasureBottom(0) = 0.0# + For xI1 As Integer = 0 To 998 + MeasureBottom(xI1 + 1) = MeasureBottom(xI1) + MeasureLength(xI1) + Next + End Sub + + Private Function PathIsValid(ByVal sPath As String) As Boolean + Return File.Exists(sPath) Or Directory.Exists(sPath) + End Function + + Public Function PrevCodeToReal(ByVal InitStr As String) As String + Dim xPath As String = IIf(Not PathIsValid(FileName), + IIf(InitPath = "", My.Application.Info.DirectoryPath, InitPath), + ExcludeFileName(FileName)).ToString() _ + & "\" + Dim xFileName As String = xPath & TempFileName + Dim xFileNameT As String = xPath & FileNameTemplate + Dim xMeasure As Integer = MeasureAtDisplacement(Math.Abs(PanelVScroll(PanelFocus))) + Dim xStr As String = Replace(InitStr, "", My.Application.Info.DirectoryPath) + xStr = Replace(xStr, "", xMeasure.ToString()) + xStr = Replace(xStr, "", xFileName) + xStr = Replace(xStr, "", xFileNameT) + Return xStr + End Function + + Private Sub SetFileName(ByVal xFileName As String) + FileName = xFileName.Trim + InitPath = ExcludeFileName(FileName) + SetIsSaved(IsSaved) + End Sub + + Private Sub SetIsSaved(ByVal isSaved As Boolean) + 'pttl.Refresh() + 'pIsSaved.Visible = Not xBool + Dim xVersion As String = My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor & + IIf(My.Application.Info.Version.Build = 0, "", "." & My.Application.Info.Version.Build).ToString() + Text = IIf(isSaved, "", "*").ToString() & GetFileName(FileName) & " - " & My.Application.Info.Title & " " & xVersion + Me.IsSaved = isSaved + + If BMSFiles IsNot Nothing Then + If Not isSaved Then + BMSFiles(BMSFileIndex).TSB.Image = My.Resources.x16New + Else + BMSFiles(BMSFileIndex).TSB.Image = My.Resources.x16Blank + End If + End If + End Sub + + Private Sub PreviewNote(ByVal xFileLocation As String, ByVal bStop As Boolean) + If bStop Then + Audio.StopPlaying() + TimerPreviewNote.Enabled = False + End If + Audio.Play(xFileLocation) + End Sub + + Private Sub AddNote(note As Note, + Optional ByVal xSelected As Boolean = False, + Optional ByVal OverWrite As Boolean = True, + Optional ByVal SortAndUpdatePairing As Boolean = True) + + If note.VPosition < 0 Or note.VPosition >= GetMaxVPosition() Then Exit Sub + + Dim xI1 As Integer = 1 + + If OverWrite Then + Do While xI1 <= UBound(Notes) + If Notes(xI1).VPosition = note.VPosition And + Notes(xI1).ColumnIndex = note.ColumnIndex Then + RemoveNote(xI1) + Else + xI1 += 1 + End If + Loop + End If + + ReDim Preserve Notes(UBound(Notes) + 1) + note.Selected = note.Selected And nEnabled(note.ColumnIndex) + Notes(UBound(Notes)) = note + + If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() + CalculateTotalPlayableNotes() + End Sub + + Private Sub RemoveNote(ByVal I As Integer, Optional ByVal SortAndUpdatePairing As Boolean = True) + KMouseOver = -1 + Dim xI2 As Integer + + If TBWavIncrease.Checked Then + If Notes(I).Value = LWAV.SelectedIndex * 10000 Then + DecreaseCurrentWAV() + End If + End If + + For xI2 = I + 1 To UBound(Notes) + Notes(xI2 - 1) = Notes(xI2) + Next + ReDim Preserve Notes(UBound(Notes) - 1) + If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() + + End Sub + + Private Sub AddNotesFromClipboard(Optional ByVal xSelected As Boolean = True, Optional ByVal SortAndUpdatePairing As Boolean = True) + Dim xStrLine() As String = Split(Clipboard.GetText, vbCrLf) + + Dim xI1 As Integer + For xI1 = 0 To UBound(Notes) + Notes(xI1).Selected = False + Next + + Dim xVS As Integer = CInt(PanelVScroll(PanelFocus)) + Dim xTempVP As Double + Dim NoteLen As Integer = Notes.Length + + If xStrLine(0) = "iBMSC Clipboard Data" Then + 'paste + Dim xStrSub() As String + For xI1 = 1 To UBound(xStrLine) + If xStrLine(xI1).Trim = "" Then Continue For + xStrSub = Split(xStrLine(xI1), " ") + xTempVP = CDbl(xStrSub(1)) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) + If UBound(xStrSub) = 5 And xTempVP >= 0 And xTempVP < GetMaxVPosition() Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = CInt(xStrSub(0)) + .VPosition = xTempVP + .Value = CLng(xStrSub(2)) + .LongNote = CBool(xStrSub(3)) + .Hidden = CBool(xStrSub(4)) + .Landmine = CBool(xStrSub(5)) + .Selected = xSelected + End With + End If + Next + + 'convert + If NTInput Then ConvertBMSE2NT(NoteLen) + ElseIf xStrLine(0) = "iBMSC Clipboard Data xNT" Then + 'paste + Dim xStrSub() As String + For xI1 = 1 To UBound(xStrLine) + If xStrLine(xI1).Trim = "" Then Continue For + xStrSub = Split(xStrLine(xI1), " ") + xTempVP = CDbl(xStrSub(1)) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) + If UBound(xStrSub) = 5 And xTempVP >= 0 And xTempVP < GetMaxVPosition() Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = CInt(xStrSub(0)) + .VPosition = xTempVP + .Value = CLng(xStrSub(2)) + .Length = CDbl(xStrSub(3)) + .Hidden = CBool(xStrSub(4)) + .Landmine = CBool(xStrSub(5)) + .Selected = xSelected + End With + End If + Next + + 'convert + If Not NTInput Then ConvertNT2BMSE(NoteLen) + ElseIf xStrLine(0) = "BMSE ClipBoard Object Data Format" Then + 'paste + For xI1 = 1 To UBound(xStrLine) + If xStrLine(xI1).Trim = "" Then Continue For + ' zdr: holy crap this is obtuse + Dim posStr = Mid(xStrLine(xI1), 5, 7) + Dim vPos = CDbl(posStr) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) + + Dim bmsIdent = Mid(xStrLine(xI1), 1, 3) + Dim lineCol = BMSEChannelToColumnIndex(bmsIdent) + + Dim Value = CDbl(Mid(xStrLine(xI1), 12)) * 10000 + + Dim attribute = Mid(xStrLine(xI1), 4, 1) + + Dim validCol = Len(xStrLine(xI1)) > 11 And lineCol > 0 + Dim inRange = vPos >= 0 And vPos < GetMaxVPosition() + If validCol And inRange Then + ReDim Preserve Notes(Notes.Length) + + With Notes(UBound(Notes)) + .ColumnIndex = lineCol + .VPosition = vPos + .Value = CLng(Value) + .LongNote = attribute = "2" + .Hidden = attribute = "1" + .Selected = xSelected And nEnabled(.ColumnIndex) + End With + End If + Next + + 'convert + If NTInput Then ConvertBMSE2NT(NoteLen) + End If + + If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() + CalculateTotalPlayableNotes() + End Sub + + Private Function GetNotesFromClipboard() As Note() + Dim xStrLine() As String = Split(Clipboard.GetText, vbCrLf) + + Dim xVS As Integer = CInt(PanelVScroll(PanelFocus)) + Dim xTempVP As Double + Dim NoteLen As Integer = Notes.Length + Dim NoteCB As Note() + + If xStrLine(0) = "iBMSC Clipboard Data" Then + Dim NotesBK As Note() = CType(Notes.Clone(), Note()) + ReDim Preserve Notes(0) + + 'paste + Dim xStrSub() As String + For xI1 = 1 To UBound(xStrLine) + If xStrLine(xI1).Trim = "" Then Continue For + xStrSub = Split(xStrLine(xI1), " ") + xTempVP = CDbl(xStrSub(1)) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) + If UBound(xStrSub) = 5 And xTempVP >= 0 And xTempVP < GetMaxVPosition() Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = CInt(xStrSub(0)) + .VPosition = xTempVP + .Value = CLng(xStrSub(2)) + .LongNote = CBool(xStrSub(3)) + .Hidden = CBool(xStrSub(4)) + .Landmine = CBool(xStrSub(5)) + End With + End If + Next + + 'convert + ' Wow this code is fucking shit + UpdatePairing() + If NTInput Then ConvertBMSE2NT() + ReDim NoteCB(UBound(Notes) - 1) + + For xI1 = 1 To UBound(Notes) + NoteCB(xI1 - 1) = Notes(xI1) + Next + Notes = NotesBK + Return NoteCB + ElseIf xStrLine(0) = "iBMSC Clipboard Data xNT" Then + 'paste + Dim xStrSub() As String + For xI1 = 1 To UBound(xStrLine) + If xStrLine(xI1).Trim = "" Then Continue For + xStrSub = Split(xStrLine(xI1), " ") + xTempVP = CDbl(xStrSub(1)) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) + If UBound(xStrSub) = 5 And xTempVP >= 0 And xTempVP < GetMaxVPosition() Then + ReDim Preserve Notes(Notes.Length) + With Notes(UBound(Notes)) + .ColumnIndex = CInt(xStrSub(0)) + .VPosition = xTempVP + .Value = CLng(xStrSub(2)) + .Length = CDbl(xStrSub(3)) + .Hidden = CBool(xStrSub(4)) + .Landmine = CBool(xStrSub(5)) + End With + End If + Next + + 'convert + If Not NTInput Then ConvertNT2BMSE(NoteLen) + ReDim NoteCB(UBound(Notes) - NoteLen) + For xI1 = NoteLen To UBound(Notes) + NoteCB(xI1 - NoteLen) = Notes(xI1) + Next + ReDim Preserve Notes(NoteLen - 1) + Return NoteCB + ElseIf xStrLine(0) = "BMSE ClipBoard Object Data Format" Then + Dim NotesBK As Note() = CType(Notes.Clone(), Note()) + If Not NTInput Then ReDim Preserve Notes(0) + + 'paste + For xI1 = 1 To UBound(xStrLine) + ' zdr: holy crap this is obtuse + Dim posStr = Mid(xStrLine(xI1), 5, 7) + Dim vPos = CDbl(posStr) + MeasureBottom(MeasureAtDisplacement(-xVS) + 1) + + Dim bmsIdent = Mid(xStrLine(xI1), 1, 3) + Dim lineCol = BMSEChannelToColumnIndex(bmsIdent) + + Dim Value = CDbl(Mid(xStrLine(xI1), 12)) * 10000 + + Dim attribute = Mid(xStrLine(xI1), 4, 1) + + Dim validCol = Len(xStrLine(xI1)) > 11 And lineCol > 0 + Dim inRange = vPos >= 0 And vPos < GetMaxVPosition() + If validCol And inRange Then + ReDim Preserve Notes(Notes.Length) + + With Notes(UBound(Notes)) + .ColumnIndex = lineCol + .VPosition = vPos + .Value = CLng(Value) + .LongNote = attribute = "2" + .Hidden = attribute = "1" + End With + End If + Next + + 'convert + UpdatePairing() + If NTInput Then ConvertBMSE2NT() + ReDim NoteCB(UBound(Notes) - 1) + + For xI1 = 1 To UBound(Notes) + NoteCB(xI1 - 1) = Notes(xI1) + Next + Notes = NotesBK + Return NoteCB + End If + + Return Nothing + End Function + + Private Sub CopyNotes(Optional ByVal Unselect As Boolean = True) + Dim xStrAll As String = "iBMSC Clipboard Data" & IIf(NTInput, " xNT", "").ToString() + Dim xI1 As Integer + Dim MinMeasure As Double = 999 + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected And MeasureAtDisplacement(Notes(xI1).VPosition) < MinMeasure Then MinMeasure = MeasureAtDisplacement(Notes(xI1).VPosition) + Next + MinMeasure = MeasureBottom(CInt(MinMeasure)) + + If Not NTInput Then + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected Then + xStrAll &= vbCrLf & Notes(xI1).ColumnIndex.ToString & " " & + (Notes(xI1).VPosition - MinMeasure).ToString & " " & + Notes(xI1).Value.ToString & " " & + CInt(Notes(xI1).LongNote).ToString & " " & + CInt(Notes(xI1).Hidden).ToString & " " & + CInt(Notes(xI1).Landmine).ToString + Notes(xI1).Selected = Not Unselect + End If + Next + + Else + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected Then + xStrAll &= vbCrLf & Notes(xI1).ColumnIndex.ToString & " " & + (Notes(xI1).VPosition - MinMeasure).ToString & " " & + Notes(xI1).Value.ToString & " " & + Notes(xI1).Length.ToString & " " & + CInt(Notes(xI1).Hidden).ToString & " " & + CInt(Notes(xI1).Landmine).ToString + Notes(xI1).Selected = Not Unselect + End If + Next + End If + + Clipboard.SetText(xStrAll) + End Sub + + Private Sub RemoveNotes(Optional ByVal SortAndUpdatePairing As Boolean = True) + If UBound(Notes) = 0 Then Exit Sub + + KMouseOver = -1 + Dim xI1 As Integer = 1 + Dim xI2 As Integer + Dim xIC As Integer + Dim xComCount(1295) As Integer + Do + If Notes(xI1).Selected AndAlso Not Notes(xI1).Ghost Then + For xI2 = xI1 + 1 To UBound(Notes) + Notes(xI2 - 1) = Notes(xI2) + Next + ReDim Preserve Notes(UBound(Notes) - 1) + xI1 = 0 + End If + xI1 += 1 + Loop While xI1 < UBound(Notes) + 1 + + ' Check and remove comments + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Comment Then + xIC = CInt(Notes(xI1).Value / 10000) + xComCount(xIC) += 1 + End If + Next + xI1 = 1 + Do While xI1 <= hCOMNum + If xComCount(xI1) = 0 Then + RemoveCommentLine(xI1) + If xI1 = xComCount.Length Then + xComCount(xI1) = 0 + Exit Do + Else + xComCount(xI1) = xComCount(xI1 + 1) + End If + For xI2 = 1 To UBound(Notes) + If Notes(xI2).Value / 10000 > xI1 Then Notes(xI2).Value -= 10000 + Next + Else + xI1 += 1 + End If + Loop + + If SortAndUpdatePairing Then SortByVPositionInsertion() : UpdatePairing() + CalculateTotalPlayableNotes() + End Sub + + Private Function EnabledColumnIndexToColumnArrayIndex(ByVal cEnabled As Integer) As Integer + Dim xI1 As Integer = 0 + Do + If xI1 >= gColumns Then Exit Do + If Not nEnabled(xI1) Then cEnabled += 1 + If xI1 >= cEnabled Then Exit Do + xI1 += 1 + Loop + Return cEnabled + End Function + + Private Function ColumnArrayIndexToEnabledColumnIndex(ByVal cReal As Integer) As Integer + Dim xI1 As Integer + For xI1 = 0 To cReal - 1 + If Not nEnabled(xI1) Then cReal -= 1 + Next + Return cReal + End Function + + Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed + If pTempFileNames IsNot Nothing Then + For Each xStr As String In pTempFileNames + IO.File.Delete(xStr) + Next + End If + If PreviousAutoSavedFileName <> "" Then IO.File.Delete(PreviousAutoSavedFileName) + End Sub + + Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + ' TODO: SaveAll + Dim xStrAll As String + Dim xRandomFile As Boolean = GetFileName(FileName).StartsWith("___TempRandom") + If Not IsSaved Then + Dim xStr As String = Strings.Messages.SaveOnExit + If e.CloseReason = CloseReason.WindowsShutDown Then xStr = Strings.Messages.SaveOnExit1 + If e.CloseReason = CloseReason.TaskManagerClosing Then xStr = Strings.Messages.SaveOnExit2 + + Dim xResult As MsgBoxResult = MsgBox(xStr, MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question, Me.Text) + + If xResult = MsgBoxResult.Yes AndAlso Not xRandomFile Then + If ExcludeFileName(FileName) = "" Then + Dim xDSave As New SaveFileDialog + xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & + Strings.FileType.BMS & "|*.bms|" & + Strings.FileType.BME & "|*.bme|" & + Strings.FileType.BML & "|*.bml|" & + Strings.FileType.PMS & "|*.pms|" & + Strings.FileType.TXT & "|*.txt|" & + Strings.FileType._all & "|*.*" + xDSave.DefaultExt = "bms" + xDSave.InitialDirectory = InitPath + + If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then e.Cancel = True : Exit Sub + SetFileName(xDSave.FileName) + End If + xStrAll = SaveBMS() + My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) + NewRecent(FileName) + If BeepWhileSaved Then Beep() + End If + + If xResult = MsgBoxResult.Cancel Then e.Cancel = True + End If + + If xRandomFile Then + xStrAll = SaveBMS() + My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) + If BeepWhileSaved Then Beep() + End If + + For i = 0 To UBound(BMSFiles) + If Not BMSFiles(i).IsSaved Then + Dim xStr As String = Strings.Messages.SaveOnExitOther + Dim xResult As MsgBoxResult = MsgBox(xStr, MsgBoxStyle.OkCancel Or MsgBoxStyle.Question, Me.Text) + If xResult = MsgBoxResult.Cancel Then e.Cancel = True : Exit Sub + Exit For + End If + Next + + If Not e.Cancel AndAlso Not xRandomFile Then + 'If SaveTheme Then + ' My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\Skin.cff", SaveSkinCFF, False, System.Text.Encoding.Unicode) + 'Else + ' My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\Skin.cff", "", False, System.Text.Encoding.Unicode) + 'End If + ' + 'My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\PlayerArgs.cff", SavePlayerCFF, False, System.Text.Encoding.Unicode) + 'My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\Config.cff", SaveCFF, False, System.Text.Encoding.Unicode) + 'My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\PreConfig.cff", "", False, System.Text.Encoding.Unicode) + Me.SaveSettings(My.Application.Info.DirectoryPath & "\iBMSC.Settings.xml", False) + End If + End Sub + + Private Function FilterFileBySupported(ByVal xFile() As String, ByVal xFilter() As String) As String() + Dim xPath(-1) As String + For xI1 As Integer = 0 To UBound(xFile) + If My.Computer.FileSystem.FileExists(xFile(xI1)) And Array.IndexOf(xFilter, Path.GetExtension(xFile(xI1))) <> -1 Then + ReDim Preserve xPath(UBound(xPath) + 1) + xPath(UBound(xPath)) = xFile(xI1) + End If + + If My.Computer.FileSystem.DirectoryExists(xFile(xI1)) Then + Dim xFileNames() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(xFile(xI1)).GetFiles() + For Each xStr As FileInfo In xFileNames + If Array.IndexOf(xFilter, xStr.Extension) = -1 Then Continue For + ReDim Preserve xPath(UBound(xPath) + 1) + xPath(UBound(xPath)) = xStr.FullName + Next + End If + Next + + Return xPath + End Function + + Private Sub InitializeNewBMS() + 'ReDim K(0) + 'With K(0) + ' .ColumnIndex = niBPM + ' .VPosition = -1 + ' .LongNote = False + ' .Selected = False + ' .Value = 1200000 + 'End With + + THTitle.Text = "" + THArtist.Text = "" + THGenre.Text = "" + THBPM.Value = 120 + If CHPlayer.SelectedIndex = -1 Then CHPlayer.SelectedIndex = 0 + CHRank.SelectedIndex = 3 + THPlayLevel.Text = "" + THSubTitle.Text = "" + THSubArtist.Text = "" + THStageFile.Text = "" + THBanner.Text = "" + THBackBMP.Text = "" + CHDifficulty.SelectedIndex = 0 + THExRank.Text = "" + THTotal.Text = "" + THComment.Text = "" + 'THLnType.Text = "1" + CHLnObj.SelectedIndex = 0 + GhostMode = 0 + FileNameTemplate = "" + ReDim hCOM(1295) + hCOMNum = 0 + COverrides = Nothing + ReDim wLWAV(1295) + WaveformLoaded = False + + TExpansion.Text = "" + ReDim ExpansionSplit(2) + + + ReDim MeasureLength(999) + LBeat.Items.Clear() + For xI1 As Integer = 0 To 999 + MeasureLength(xI1) = 192.0R + MeasureBottom(xI1) = xI1 * 192.0R + LBeat.Items.Add(Add3Zeros(xI1) & ": 1 ( " & CInt(nBeatD.Value) & " / " & CInt(nBeatD.Value) & " )") + Next + End Sub + + Private Sub InitializeOpenBMS() + CHPlayer.SelectedIndex = 0 + 'THLnType.Text = "" + End Sub + + Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles Me.DragEnter + If e.Data.GetDataPresent(DataFormats.FileDrop) Then + e.Effect = DragDropEffects.Copy + DDFileName = FilterFileBySupported(CType(e.Data.GetData(DataFormats.FileDrop), String()), SupportedFileExtension) + Else + e.Effect = DragDropEffects.None + End If + RefreshPanelAll() + End Sub + + Private Sub Form1_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DragLeave + ReDim DDFileName(-1) + RefreshPanelAll() + End Sub + + Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles Me.DragDrop + + ' If ClosingPopSave() Then Exit Sub + + ReDim DDFileName(-1) + ' If Not e.Data.GetDataPresent(DataFormats.FileDrop) Then Return + + Dim xOrigPath() As String = CType(e.Data.GetData(DataFormats.FileDrop), String()) + ' Dim xPath() As String = FilterFileBySupported(xOrigPath, SupportedFileExtension) + ' If xPath.Length > 0 Then + + SaveBMSStruct() + Dim xProg As New fLoadFileProgress(xOrigPath) + xProg.ShowDialog(Me) + ' End If + + RefreshPanelAll() + End Sub + + Private Sub setFullScreen(ByVal value As Boolean) + If value Then + If Me.WindowState = FormWindowState.Minimized Then Exit Sub + + Me.SuspendLayout() + previousWindowPosition.Location = Me.Location + previousWindowPosition.Size = Me.Size + previousWindowState = Me.WindowState + + Me.WindowState = FormWindowState.Normal + Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None + Me.WindowState = FormWindowState.Maximized + ToolStripContainer1.TopToolStripPanelVisible = False + + Me.ResumeLayout() + isFullScreen = True + Else + Me.SuspendLayout() + Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable + ToolStripContainer1.TopToolStripPanelVisible = True + Me.WindowState = FormWindowState.Normal + + Me.WindowState = previousWindowState + If Me.WindowState = FormWindowState.Normal Then + Me.Location = previousWindowPosition.Location + Me.Size = previousWindowPosition.Size + End If + + Me.ResumeLayout() + isFullScreen = False + End If + End Sub + + Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown + Select Case e.KeyCode + Case Keys.F11 + setFullScreen(Not isFullScreen) + End Select + End Sub + + Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp + RefreshPanelAll() + POStatusRefresh() + End Sub + + Friend Sub ReadFile(ByVal xPath As String, Optional xAddRecent As Boolean = True) + Select Case LCase(Path.GetExtension(xPath)) + Case ".bms", ".bme", ".bml", ".pms", ".txt" + SetFileName(xPath) + OpenBMS(My.Computer.FileSystem.ReadAllText(xPath, TextEncoding)) + ClearUndo() + If xAddRecent Then NewRecent(xPath) + SetIsSaved(True) + + Case ".sm" + SetFileName(FileNameInit) + If OpenSM(My.Computer.FileSystem.ReadAllText(xPath, TextEncoding)) Then Return + InitPath = ExcludeFileName(xPath) + ClearUndo() + SetIsSaved(False) + + Case ".ibmsc" + SetFileName("Imported_" & GetFileName(xPath)) + OpeniBMSC(xPath) + InitPath = ExcludeFileName(xPath) + If xAddRecent Then NewRecent(xPath) + SetIsSaved(False) + + Case Else + SetFileName(xPath) + OpenBMS(My.Computer.FileSystem.ReadAllText(xPath, TextEncoding)) + ClearUndo() + If xAddRecent Then NewRecent(xPath) + SetIsSaved(True) + + End Select + End Sub + + + Public Function GCD(ByVal NumA As Double, ByVal NumB As Double) As Double + Dim xNMax As Double = NumA + Dim xNMin As Double = NumB + If NumA < NumB Then + xNMax = NumB + xNMin = NumA + End If + Do While xNMin >= BMSGridLimit + GCD = xNMax - Math.Floor(xNMax / xNMin) * xNMin + xNMax = xNMin + xNMin = GCD + Loop + GCD = xNMax + End Function + + Private Shared Function LoadCursorFromFile(ByVal fileName As String) As IntPtr + End Function + Public Shared Function ActuallyLoadCursor(ByVal path As String) As Cursor + Return New Cursor(LoadCursorFromFile(path)) + End Function + + Private Sub Unload() Handles MyBase.Disposed + Audio.Finalize() + End Sub + + Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + SupportedAudioExtension = GetSupportedExtensions() + + 'On Error Resume Next + Me.TopMost = True + Me.SuspendLayout() + Me.Visible = False + + 'POBMP.Dispose() + 'POBGA.Dispose() + + 'Me.MaximizedBounds = Screen.GetWorkingArea(Me) + 'Me.Visible = False + SetFileName(FileName) + 'Me.ShowCaption = False + 'SetWindowText(Me.Handle.ToInt32, FileName) + + 'nBeatD.SelectedIndex = 4 + + Try + Dim xTempFileName As String = RandomFileName(".cur") + My.Computer.FileSystem.WriteAllBytes(xTempFileName, My.Resources.CursorResizeDown, False) + Dim xDownCursor As Cursor = ActuallyLoadCursor(xTempFileName) + My.Computer.FileSystem.WriteAllBytes(xTempFileName, My.Resources.CursorResizeLeft, False) + Dim xLeftCursor As Cursor = ActuallyLoadCursor(xTempFileName) + My.Computer.FileSystem.WriteAllBytes(xTempFileName, My.Resources.CursorResizeRight, False) + Dim xRightCursor As Cursor = ActuallyLoadCursor(xTempFileName) + File.Delete(xTempFileName) + + POWAVResizer.Cursor = xDownCursor + POBMPResizer.Cursor = xDownCursor + POBeatResizer.Cursor = xDownCursor + POExpansionResizer.Cursor = xDownCursor + + POptionsResizer.Cursor = xLeftCursor + + SpL.Cursor = xRightCursor + SpR.Cursor = xLeftCursor + Catch ex As Exception + + End Try + + spMain = New Panel() {PMainInL, PMainIn, PMainInR} + + sUndo(0) = New UndoRedo.NoOperation + sUndo(1) = New UndoRedo.NoOperation + sRedo(0) = New UndoRedo.NoOperation + sRedo(1) = New UndoRedo.NoOperation + sI = 0 + + + LWAV.Items.Clear() + LBMP.Items.Clear() + For xI1 = 1 To 1295 + LWAV.Items.Add(C10to36(xI1) & ": " & hWAV(xI1)) + LBMP.Items.Add(C10to36(xI1) & ": " & hBMP(xI1)) + Next + + LWAV.SelectedIndex = 0 + LBMP.SelectedIndex = 0 + CHPlayer.SelectedIndex = 0 + + CalculateGreatestVPosition() + TBLangRefresh_Click(TBLangRefresh, Nothing) + TBThemeRefresh_Click(TBThemeRefresh, Nothing) + + POHeaderPart2.Visible = False + POGridPart2.Visible = False + POWaveFormPart2.Visible = False + + If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\iBMSC.Settings.xml") Then + LoadSettings(My.Application.Info.DirectoryPath & "\iBMSC.Settings.xml") + 'Else + '---- Settings for first-time start-up --------------------------------------------------------------------------- + 'Me.LoadLocale(My.Application.Info.DirectoryPath & "\Data\chs.Lang.xml") + '----------------------------------------------------------------------------------------------------------------- + End If + 'On Error GoTo 0 + + InitializeBMSFiles() + + For xI = 0 To UBound(BMSFiles) + TBTab.Items.Add(BMSFiles(xI).TSB) + Next + SetBMSFileIndex(BMSFileIndex) + + 'pIsSaved.Visible = Not IsSaved + + If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length <= 1 Then + + Dim xFiles() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(My.Application.Info.DirectoryPath).GetFiles("AutoSave_*.IBMSC") + If xFiles IsNot Nothing AndAlso xFiles.Length > 0 Then + + 'Me.TopMost = True + If MsgBox(Replace(Strings.Messages.RestoreAutosavedFile, "{}", xFiles.Length.ToString()), MsgBoxStyle.YesNo Or MsgBoxStyle.MsgBoxSetForeground) = MsgBoxResult.Yes Then + Dim xFUB = UBound(xFiles) + Dim xFilesPaths(xFUB) As String + For xI = 0 To xFUB + xFilesPaths(xI) = xFiles(xI).FullName + Next + SetBMSFileIndex(UBound(BMSFiles) - 1) + AddBMSFiles(xFilesPaths) + ' For Each xF As FileInfo In xFiles + ' 'MsgBox(xF.FullName) + ' System.Diagnostics.Process.Start(Application.ExecutablePath, """" & xF.FullName & """") + ' Next + End If + + For Each xF As FileInfo In xFiles + ReDim Preserve pTempFileNames(UBound(pTempFileNames) + 1) + pTempFileNames(UBound(pTempFileNames)) = xF.FullName + Next + End If + End If + + + tempResize = Me.WindowState + Me.TopMost = False + Me.WindowState = CType(tempResize, FormWindowState) + + Me.Visible = True + + Dim xStr() As String = Environment.GetCommandLineArgs + + If xStr.Length > 1 Then + Dim xStrFiles(UBound(xStr) - 1) As String + For xI = 0 To UBound(xStrFiles) + xStrFiles(xI) = xStr(xI + 1) + Next + SetBMSFileIndex(UBound(BMSFiles) - 1) + AddBMSFiles(xStrFiles) + End If + + SetIsSaved(True) + If PreloadBMSStruct Then SaveAllBMSStruct() + + IsApplicationInitializing = False + + If BMSFileIndex <> UBound(BMSFiles) Then ReadFile(BMSFiles(BMSFileIndex).Filename) Else TBNew_Click(Nothing, Nothing) + + LoadColorOverride(FileName) + + POStatusRefresh() + Me.ResumeLayout() + End Sub + + Private Sub UpdatePairing() + Dim i As Integer, j As Integer + + If NTInput Then + For i = 0 To UBound(Notes) + Notes(i).LNPair = 0 + If Notes(i).Length < 0 Then Notes(i).Length = 0 + If Notes(i).ErrorType = 1 Then Continue For + Notes(i).HasError = False + Notes(i).ErrorType = 0 + Next + + For i = 1 To UBound(Notes) + If Notes(i).Length <> 0 Then + For j = i + 1 To UBound(Notes) + If Notes(j).VPosition > Notes(i).VPosition + Notes(i).Length Then Exit For + If Notes(j).ColumnIndex = Notes(i).ColumnIndex Then Notes(j).HasError = True + Next + Else + For j = i + 1 To UBound(Notes) + If Notes(j).VPosition > Notes(i).VPosition Then Exit For + If Notes(j).ColumnIndex = Notes(i).ColumnIndex Then Notes(j).HasError = True + Next + + If Notes(i).Value \ 10000 = LnObj AndAlso Not IsColumnNumeric(Notes(i).ColumnIndex) Then + For j = i - 1 To 1 Step -1 + If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For + If Notes(j).Hidden Then Continue For + + If Notes(j).Length <> 0 OrElse Notes(j).Value \ 10000 = LnObj Then + Notes(i).HasError = True + Else + Notes(i).LNPair = j + Notes(j).LNPair = i + End If + Exit For + Next + If j = 0 Then + Notes(i).HasError = True + End If + End If + End If + Next + + Else + For i = 0 To UBound(Notes) + If Notes(i).ErrorType = 1 Then Continue For + Notes(i).HasError = False + Notes(i).ErrorType = 0 + Notes(i).LNPair = 0 + Next + + For i = 1 To UBound(Notes) + + If Notes(i).LongNote Then + 'LongNote: If overlapping a note, then error. + ' Else if already matched by a LongNote below, then match it. + ' Otherwise match anything above. + ' If ShortNote above then error on above. + ' If nothing above then error. + For j = i - 1 To 1 Step -1 + If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For + If Notes(j).VPosition = Notes(i).VPosition Then + Notes(i).HasError = True + Exit For + ElseIf Notes(j).LongNote And Notes(j).LNPair = i Then + Notes(i).LNPair = j + Exit For + Else + Exit For + End If + Next + + If Not Notes(i).HasError AndAlso Notes(i).LNPair = 0 Then + + For j = i + 1 To UBound(Notes) + If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For + Notes(i).LNPair = j + Notes(j).LNPair = i + If Not Notes(j).LongNote AndAlso Notes(j).Value \ 10000 <> LnObj Then + Notes(j).HasError = True + End If + Exit For + Next + + If j = UBound(Notes) + 1 Then + Notes(i).HasError = True + End If + End If + + ElseIf Notes(i).Value \ 10000 = LnObj And + Not IsColumnNumeric(Notes(i).ColumnIndex) Then + 'LnObj: Match anything below. + ' If matching a LongNote not matching back, then error on below. + ' If overlapping a note, then error. + ' If mathcing a LnObj below, then error on below. + ' If nothing below, then error. + For j = i - 1 To 1 Step -1 + If Notes(i).ColumnIndex <> Notes(j).ColumnIndex Then Continue For + If Notes(j).LNPair <> 0 And Notes(j).LNPair <> i Then + Notes(j).HasError = True + End If + Notes(i).LNPair = j + Notes(j).LNPair = i + If Notes(i).VPosition = Notes(j).VPosition Then + Notes(i).HasError = True + End If + If Notes(j).Value \ 10000 = LnObj Then + Notes(j).HasError = True + End If + Exit For + Next + + If j = 0 Then + Notes(i).HasError = True + End If + + Else + 'ShortNote: If overlapping a note, then error. + For j = i - 1 To 1 Step -1 + If Notes(j).VPosition < Notes(i).VPosition Then Exit For + If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For + Notes(i).HasError = True + Exit For + Next + + End If + Next + + + End If + + Dim currentMS = 0.0# + Dim currentBPM = Notes(0).Value / 10000 + Dim currentBPMVPosition = 0.0# + For i = 1 To UBound(Notes) + If Notes(i).ColumnIndex = niBPM Then + currentMS += (Notes(i).VPosition - currentBPMVPosition) / currentBPM * 1250 + currentBPM = Notes(i).Value / 10000 + currentBPMVPosition = Notes(i).VPosition + End If + 'K(i).TimeOffset = currentMS + (K(i).VPosition - currentBPMVPosition) / currentBPM * 1250 + Next + End Sub + + Private Sub CheckTechnicalError(sender As Object, e As EventArgs) + For xIN = 1 To UBound(Notes) + If Notes(xIN).ErrorType = 1 Then + Notes(xIN).ErrorType = 0 + Notes(xIN).HasError = False + End If + Next + If gXKeyMode = "PMS" Then CheckErrorImpossibleChord() + If gXKeyMode = "DP" Then CheckErrorImpossibleScratch() + CheckErrorJack() + End Sub + + Private Sub CheckErrorImpossibleChord() + For xIN = 1 To UBound(Notes) + If Not gXKeyCol.Contains(Notes(xIN).ColumnIndex) Or Not IsPlayableNote(xIN) Then Continue For + Dim xIColArray() As Integer = {FindColumnNumber(Notes(xIN).ColumnIndex)} ' Array of columns + Dim xINArray() As Integer = {xIN} ' Array of notes in the columns + Dim xIComp = xIN - 1 + Do While xIComp > 0 ' If note is in range, add to xIColArray and xINArray + If GetTimeFromVPosition(Notes(xIN).VPosition) - GetTimeFromVPosition(Notes(xIComp).VPosition) > ErrorJackSpeed Then Exit Do + If Not gXKeyCol.Contains(Notes(xIComp).ColumnIndex) Or Not IsPlayableNote(xIComp) Then xIComp -= 1 : Continue Do + ReDim Preserve xIColArray(xIColArray.Length) + xIColArray(UBound(xIColArray)) = FindColumnNumber(Notes(xIComp).ColumnIndex) + ReDim Preserve xINArray(xINArray.Length) + xINArray(UBound(xINArray)) = xIComp + xIComp -= 1 + Loop + + Dim xIColArray2 = FindLNColumnsAtVPosition(Notes(xIN).VPosition) ' Account for LNs + ReDim Preserve xIColArray(UBound(xIColArray) + xIColArray2.Length) + For xINCol = 0 To UBound(xIColArray2) + xIColArray(UBound(xIColArray) - xINCol) = FindColumnNumber(xIColArray2(xINCol)) + Next + Array.Sort(xIColArray) + + Dim posLHand As Integer = 0 ' Position of left hand based on the leftmost note, i.e. 1 - 4 + Dim posRHand As Integer = 0 ' Position of right hand based on the leftmost note, i.e. 4 - 7 + For Each xIN2 In xIColArray + If posLHand = 0 Then ' Assign to left hand + posLHand = xIN2 + Continue For + ElseIf posLHand + 2 < xIN2 AndAlso posRHand = 0 Then ' Assign to right hand + posRHand = xIN2 + ElseIf posRHand <> 0 AndAlso posRHand + 2 < xIN2 Then ' If right hand is assigned and note is out of hand range + For Each xINAssign In xINArray ' Assign error type 1 to every note in xINArray + Notes(xINAssign).HasError = True + Notes(xINAssign).ErrorType = 1 + Next + End If + Next + Next + End Sub + + Private Sub CheckErrorImpossibleScratch() + Dim xKArrayLFull() As Integer = {niA2, niA3, niA4, niA5, niA6, niA7, niA8} + Dim xKArrayRFull() As Integer = {niD1, niD2, niD3, niD4, niD5, niD6, niD7} + Dim xKArrayL() As Integer = {niA5, niA6, niA7, niA8} + Dim xKArrayR() As Integer = {niD1, niD2, niD3, niD4} + Dim xScrL As Integer = niA1 + Dim xScrR As Integer = niD8 + For xIN = 1 To UBound(Notes) ' Check for notes near scratch notes + If (Not Notes(xIN).ColumnIndex = xScrL AndAlso Not Notes(xIN).ColumnIndex = xScrR) Or Not IsPlayableNote(xIN) Then Continue For + Dim xKArray() = xKArrayL + Dim xKArrayFull() = xKArrayLFull + If Notes(xIN).ColumnIndex = xScrR Then xKArray = xKArrayR : xKArrayFull = xKArrayRFull + + Dim xIColArray(-1) As Integer + Dim xIComp = xIN - 1 + Do While xIComp > 0 ' If note is in range, add to xIColArray and xINArray + If GetTimeFromVPosition(Notes(xIN).VPosition) - GetTimeFromVPosition(Notes(xIComp).VPosition) > ErrorJackSpeed Then Exit Do + If Not xKArray.Contains(Notes(xIComp).ColumnIndex) Or Not IsPlayableNote(xIComp) Then xIComp -= 1 : Continue Do + ReDim Preserve xIColArray(xIColArray.Length) + xIComp -= 1 + Loop + xIComp = xIN + 1 + Do While xIComp <= UBound(Notes) ' If note is in range, add to xIColArray and xINArray + If GetTimeFromVPosition(Notes(xIComp).VPosition) - GetTimeFromVPosition(Notes(xIN).VPosition) > ErrorJackSpeed Then Exit Do + If Not xKArray.Contains(Notes(xIComp).ColumnIndex) Or Not IsPlayableNote(xIComp) Then xIComp += 1 : Continue Do + ReDim Preserve xIColArray(xIColArray.Length) + xIComp += 1 + Loop + + Dim xIColArray2 = FindLNColumnsAtVPosition(Notes(xIN).VPosition) ' Account for LNs + Dim xIColArray3(-1) As Integer + For xIComp = 0 To UBound(xIColArray2) + If xKArrayFull.Contains(xIColArray2(xIComp)) Then ReDim Preserve xIColArray3(xIColArray3.Length) + Next + + If xIColArray.Length + xIColArray3.Length > 0 Then + Notes(xIN).HasError = True + Notes(xIN).ErrorType = 1 + End If + Next + End Sub + + Private Sub CheckErrorJack() + For xIN = 1 To UBound(Notes) + If Not IsPlayableNote(xIN) Then Continue For + Dim xIComp = xIN - 1 + Do While xIComp > 0 + If Notes(xIComp).VPosition = Notes(xIN).VPosition Then xIComp -= 1 : Continue Do + If GetTimeFromVPosition(Notes(xIN).VPosition) - GetTimeFromVPosition(Notes(xIComp).VPosition) > ErrorJackSpeed Then Exit Do + If gXKeyCol.Contains(Notes(xIN).ColumnIndex) AndAlso Notes(xIN).ColumnIndex = Notes(xIComp).ColumnIndex Then + Notes(xIN).HasError = True + Notes(xIN).ErrorType = 1 + Exit Do + End If + xIComp -= 1 + Loop + Next + End Sub + + Private Function FindColumnNumber(xI As Integer) As Integer + For i = 0 To UBound(gXKeyCol) + If xI = gXKeyCol(i) Then Return i + 1 + Next + Return 0 + End Function + + Private Function FindLNColumnsAtVPosition(ByVal VPos As Double) As Integer() + ' NTInput + If Not NTInput Then ConvertBMSE2NT() + + Dim xN = From note In Notes + Where note.Length > 0 AndAlso note.VPosition <= VPos AndAlso VPos <= note.VPosition + note.Length AndAlso gXKeyCol.Contains(note.ColumnIndex) + Select note + + Dim col(xN.Count - 1) As Integer + For i = 0 To UBound(col) + col(i) = xN(i).ColumnIndex + Next + If Not NTInput Then ConvertNT2BMSE() + Return col + End Function + + Private Function IsPlayableNote(ByVal xI As Integer) As Boolean + Return Not (Notes(xI).Hidden Or Notes(xI).Landmine Or Notes(xI).Comment) + End Function + + Public Sub ExceptionSave(ByVal Path As String) + SaveiBMSC(Path) + End Sub + + ''' + ''' True if pressed cancel. False elsewise. + ''' + ''' True if pressed cancel. False elsewise. + + Private Function ClosingPopSave() As Boolean + If Not TExpansion.Enabled Then + MsgBox(Strings.Messages.SaveWhileModifyingSection) + Return True + ElseIf Not IsSaved Then + Dim xResult As MsgBoxResult = MsgBox(Strings.Messages.SaveOnExit, MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question, Me.Text) + + If xResult = MsgBoxResult.Yes Then + If ExcludeFileName(FileName) = "" Then + Dim xDSave As New SaveFileDialog + xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & + Strings.FileType.BMS & "|*.bms|" & + Strings.FileType.BME & "|*.bme|" & + Strings.FileType.BML & "|*.bml|" & + Strings.FileType.PMS & "|*.pms|" & + Strings.FileType.TXT & "|*.txt|" & + Strings.FileType._all & "|*.*" + xDSave.DefaultExt = "bms" + xDSave.InitialDirectory = InitPath + + If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Return True + SetFileName(xDSave.FileName) + End If + Dim xStrAll As String = SaveBMS() + My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) + NewRecent(FileName) + If BeepWhileSaved Then Beep() + End If + + If xResult = MsgBoxResult.Cancel Then Return True + End If + Return False + End Function + + Private Sub TBNew_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles TBNew.Click, mnNew.Click + SaveBMSStruct() + If BMSFiles(UBound(BMSFiles)).Filename <> FileNameInit Then AddBMSFile(FileNameInit) + SetBMSFileIndex(UBound(BMSFiles)) + + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + ' If ClosingPopSave() Then Exit Sub + + ClearUndo() + SetFileName(FileNameInit) + InitializeNewBMS() + + ReDim Notes(0) + ReDim mColumn(999) + ReDim hWAV(1295) + ReDim hBPM(1295) 'x10000 + ReDim hSTOP(1295) + ReDim hBMSCROLL(1295) + THGenre.Text = "" + THTitle.Text = "" + THArtist.Text = "" + THPlayLevel.Text = "" + + With Notes(0) + .ColumnIndex = niBPM + .VPosition = -1 + '.LongNote = False + '.Selected = False + .Value = 1200000 + End With + THBPM.Value = 120 + + LWAVRefresh() + LWAV.SelectedIndex = 0 + LBMPRefresh() + LBMP.SelectedIndex = 0 + + SetIsSaved(True) + 'pIsSaved.Visible = Not IsSaved + + CalculateTotalPlayableNotes(False) + CalculateGreatestVPosition() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub TBNewC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'Handles TBNewC.Click + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + If ClosingPopSave() Then Exit Sub + + ClearUndo() + + ReDim Notes(0) + ReDim mColumn(999) + ReDim hWAV(1295) + ReDim hBPM(1295) 'x10000 + ReDim hSTOP(1295) + ReDim hBMSCROLL(1295) + THGenre.Text = "" + THTitle.Text = "" + THArtist.Text = "" + THPlayLevel.Text = "" + + With Notes(0) + .ColumnIndex = niBPM + .VPosition = -1 + '.LongNote = False + '.Selected = False + .Value = 1200000 + End With + THBPM.Value = 120 + + SetFileName(FileNameInit) + SetIsSaved(True) + 'pIsSaved.Visible = Not IsSaved + + If MsgBox("Please copy your code to clipboard and click OK.", MsgBoxStyle.OkCancel, "Create from code") = MsgBoxResult.Cancel Then Exit Sub + OpenBMS(Clipboard.GetText) + End Sub + + Private Sub TBOpen_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBOpen.ButtonClick, mnOpen.Click + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + ' If ClosingPopSave() Then Exit Sub + + Dim xDOpen As New OpenFileDialog + xDOpen.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & + Strings.FileType.BMS & "|*.bms|" & + Strings.FileType.BME & "|*.bme|" & + Strings.FileType.BML & "|*.bml|" & + Strings.FileType.PMS & "|*.pms|" & + Strings.FileType.TXT & "|*.txt|" & + Strings.FileType._all & "|*.*" + xDOpen.DefaultExt = "bms" + xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + xDOpen.Multiselect = True + + If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + + SaveBMSStruct() + Dim xProg As New fLoadFileProgress(xDOpen.FileNames) + xProg.ShowDialog(Me) + + RefreshPanelAll() + 'pIsSaved.Visible = Not IsSaved + End Sub + + Private Sub TBOpenTemplate_ButtonClick(sender As Object, e As EventArgs) Handles mnOpenTemplate.Click + Dim xDOpen As New OpenFileDialog + xDOpen.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & + Strings.FileType.BMS & "|*.bms|" & + Strings.FileType.BME & "|*.bme|" & + Strings.FileType.BML & "|*.bml|" & + Strings.FileType.PMS & "|*.pms|" & + Strings.FileType.TXT & "|*.txt|" & + Strings.FileType._all & "|*.*" + xDOpen.DefaultExt = "bms" + xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + + If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + NotesTemplate = OpenBMSFunc(My.Computer.FileSystem.ReadAllText(xDOpen.FileName, TextEncoding)) + FileNameTemplate = GetFileName(xDOpen.FileName) + End Sub + + Private Sub TBImportIBMSC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBImportIBMSC.Click, mnImportIBMSC.Click + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + ' If ClosingPopSave() Then Return + + Dim xDOpen As New OpenFileDialog + xDOpen.Filter = Strings.FileType.IBMSC & "|*.ibmsc" + xDOpen.DefaultExt = "ibmsc" + xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + ' xDOpen.Multiselect = True + + If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Return + + SaveBMSStruct() + + AddBMSFiles(xDOpen.FileName) + ReadFile(xDOpen.FileName, False) + 'pIsSaved.Visible = Not IsSaved + End Sub + + Private Sub TBImportSM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBImportSM.Click, mnImportSM.Click + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + ' If ClosingPopSave() Then Exit Sub + + Dim xDOpen As New OpenFileDialog + xDOpen.Filter = Strings.FileType.SM & "|*.sm" + xDOpen.DefaultExt = "sm" + xDOpen.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + + If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + SaveBMSStruct() + + AddBMSFiles(xDOpen.FileName) + ReadFile(xDOpen.FileName, False) + 'pIsSaved.Visible = Not IsSaved + End Sub + + Private Sub TBSave_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSave.ButtonClick, mnSave.Click + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + + If ExcludeFileName(FileName) = "" Then + Dim xDSave As New SaveFileDialog + xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & + Strings.FileType.BMS & "|*.bms|" & + Strings.FileType.BME & "|*.bme|" & + Strings.FileType.BML & "|*.bml|" & + Strings.FileType.PMS & "|*.pms|" & + Strings.FileType.TXT & "|*.txt|" & + Strings.FileType._all & "|*.*" + xDSave.DefaultExt = "bms" + xDSave.InitialDirectory = InitPath + + If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + SetFileName(xDSave.FileName) + NewRecent(FileName) + + BMSFiles(BMSFileIndex).Filename = FileName + BMSFiles(BMSFileIndex).TSB.Text = GetFileName(FileName) + End If + Dim xStrAll As String = SaveBMS() + My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) + If BMSFiles(BMSFileIndex).RandomSource Is Nothing Then SetIsSaved(True) + 'pIsSaved.Visible = Not IsSaved + If BeepWhileSaved Then Beep() + End Sub + + Private Sub TBSaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSaveAs.Click, mnSaveAs.Click + If BMSFiles(BMSFileIndex).RandomSource IsNot Nothing Then MsgBox(Strings.Messages.SaveAsDisabled) : Exit Sub + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + + Dim xDSave As New SaveFileDialog + xDSave.Filter = Strings.FileType._bms & "|*.bms;*.bme;*.bml;*.pms;*.txt|" & + Strings.FileType.BMS & "|*.bms|" & + Strings.FileType.BME & "|*.bme|" & + Strings.FileType.BML & "|*.bml|" & + Strings.FileType.PMS & "|*.pms|" & + Strings.FileType.TXT & "|*.txt|" & + Strings.FileType._all & "|*.*" + xDSave.DefaultExt = "bms" + xDSave.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + + If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + + For i = 0 To UBound(BMSFiles) + If BMSFiles(i).RandomSource = FileName Then BMSFiles(i).AddRandomSource(xDSave.FileName) + Next + + SetFileName(xDSave.FileName) + Dim xStrAll As String = SaveBMS() + My.Computer.FileSystem.WriteAllText(FileName, xStrAll, False, TextEncoding) + NewRecent(FileName) + SetFileName(FileName) + SetIsSaved(True) + 'pIsSaved.Visible = Not IsSaved + + BMSFiles(BMSFileIndex).Filename = FileName + BMSFiles(BMSFileIndex).TSB.Text = GetFileName(FileName) + + If BeepWhileSaved Then Beep() + End Sub + + Private Sub TBExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBExport.Click, mnExport.Click + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + KMouseOver = -1 + + Dim xDSave As New SaveFileDialog + xDSave.Filter = Strings.FileType.IBMSC & "|*.ibmsc" + xDSave.DefaultExt = "ibmsc" + xDSave.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + If xDSave.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + + SaveiBMSC(xDSave.FileName) + 'My.Computer.FileSystem.WriteAllText(xDSave.FileName, xStrAll, False, TextEncoding) + NewRecent(FileName) + If BeepWhileSaved Then Beep() + End Sub + + Private Sub VSGotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MainPanelScroll.GotFocus, LeftPanelScroll.GotFocus, RightPanelScroll.GotFocus + Dim VScrollS As VScrollBar = CType(sender, VScrollBar) + PanelFocus = CInt(VScrollS.Tag) + spMain(PanelFocus).Focus() + End Sub + + Private Sub VSValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MainPanelScroll.ValueChanged, LeftPanelScroll.ValueChanged, RightPanelScroll.ValueChanged + Dim VScrollS As VScrollBar = CType(sender, VScrollBar) + + Dim iI As Integer = CInt(VScrollS.Tag) + + ' az: We got a wheel event when we're zooming in/out + If My.Computer.Keyboard.CtrlKeyDown Or My.Computer.Keyboard.ShiftKeyDown Then + VScrollS.Value = VSValue ' Undo the scroll + Exit Sub + End If + + If iI = PanelFocus And Not LastMouseDownLocation = New Point(-1, -1) And Not VSValue = -1 Then LastMouseDownLocation.Y += (VSValue - VScrollS.Value) * gxHeight + PanelVScroll(iI) = VScrollS.Value + + If spLock((iI + 1) Mod 3) Then + Dim xVS As Integer = CInt(PanelVScroll(iI) + spDiff(iI)) + If xVS > 0 Then xVS = 0 + If xVS < MainPanelScroll.Minimum Then xVS = MainPanelScroll.Minimum + Select Case iI + Case 0 : MainPanelScroll.Value = xVS + Case 1 : RightPanelScroll.Value = xVS + Case 2 : LeftPanelScroll.Value = xVS + End Select + End If + + If spLock((iI + 2) Mod 3) Then + Dim xVS As Integer = CInt(PanelVScroll(iI) - spDiff((iI + 2) Mod 3)) + If xVS > 0 Then xVS = 0 + If xVS < MainPanelScroll.Minimum Then xVS = MainPanelScroll.Minimum + Select Case iI + Case 0 : RightPanelScroll.Value = xVS + Case 1 : LeftPanelScroll.Value = xVS + Case 2 : MainPanelScroll.Value = xVS + End Select + End If + + spDiff(iI) = CInt(PanelVScroll((iI + 1) Mod 3) - PanelVScroll(iI)) + spDiff((iI + 2) Mod 3) = CInt(PanelVScroll(iI) - PanelVScroll((iI + 2) Mod 3)) + + VSValue = VScrollS.Value + RefreshPanel(iI, spMain(iI).DisplayRectangle) + End Sub + + Private Sub cVSLock_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cVSLockL.CheckedChanged, cVSLock.CheckedChanged, cVSLockR.CheckedChanged + Dim CBS As CheckBox = CType(sender, CheckBox) + Dim iI As Integer = CInt(CBS.Tag) + spLock(iI) = CBS.Checked + If Not spLock(iI) Then Return + + spDiff(iI) = CInt(PanelVScroll((iI + 1) Mod 3) - PanelVScroll(iI)) + spDiff((iI + 2) Mod 3) = CInt(PanelVScroll(iI) - PanelVScroll((iI + 2) Mod 3)) + + 'POHeaderB.Text = spDiff(0) & "_" & spDiff(1) & "_" & spDiff(2) + End Sub + + Private Sub HSGotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles HS.GotFocus, HSL.GotFocus, HSR.GotFocus + Dim HScrollS As HScrollBar = CType(sender, HScrollBar) + PanelFocus = CInt(HScrollS.Tag) + spMain(PanelFocus).Focus() + End Sub + + Private Sub HSValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HS.ValueChanged, HSL.ValueChanged, HSR.ValueChanged + Dim HScrollS As HScrollBar = CType(sender, HScrollBar) + Dim iI As Integer = CInt(HScrollS.Tag) + If Not LastMouseDownLocation = New Point(-1, -1) And Not HSValue = -1 Then LastMouseDownLocation.X += (HSValue - HScrollS.Value) * gxWidth + PanelHScroll(iI) = HScrollS.Value + HSValue = HScrollS.Value + RefreshPanel(iI, spMain(iI).DisplayRectangle) + End Sub + + Private Sub TBSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSelect.Click, mnSelect.Click + TBSelect.Checked = True + TBWrite.Checked = False + TBTimeSelect.Checked = False + mnSelect.Checked = True + mnWrite.Checked = False + mnTimeSelect.Checked = False + + FStatus2.Visible = False + FStatus.Visible = True + + ShouldDrawTempNote = False + SelectedColumn = -1 + TempVPosition = -1 + TempLength = 0 + + vSelStart = MeasureBottom(MeasureAtDisplacement(-PanelVScroll(PanelFocus)) + 1) + vSelLength = 0 + + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub TBWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBWrite.Click, mnWrite.Click + TBSelect.Checked = False + TBWrite.Checked = True + TBTimeSelect.Checked = False + mnSelect.Checked = False + mnWrite.Checked = True + mnTimeSelect.Checked = False + + FStatus2.Visible = False + FStatus.Visible = True + + ShouldDrawTempNote = True + SelectedColumn = -1 + TempVPosition = -1 + TempLength = 0 + + vSelStart = MeasureBottom(MeasureAtDisplacement(-PanelVScroll(PanelFocus)) + 1) + vSelLength = 0 + + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub TBPostEffects_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBTimeSelect.Click, mnTimeSelect.Click + TBSelect.Checked = False + TBWrite.Checked = False + TBTimeSelect.Checked = True + mnSelect.Checked = False + mnWrite.Checked = False + mnTimeSelect.Checked = True + + FStatus.Visible = False + FStatus2.Visible = True + + vSelMouseOverLine = 0 + ShouldDrawTempNote = False + SelectedColumn = -1 + TempVPosition = -1 + TempLength = 0 + ValidateSelection() + + Dim xI1 As Integer + For xI1 = 0 To UBound(Notes) + Notes(xI1).Selected = False + Next + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub CGHeight_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGHeight.ValueChanged + gxHeight = CSng(CGHeight.Value) + CGHeight2.Value = CInt(IIf(CGHeight.Value * 4 < CGHeight2.Maximum, CDec(CGHeight.Value * 4), CGHeight2.Maximum)) + RefreshPanelAll() + End Sub + + Private Sub CGHeight2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGHeight2.Scroll + CGHeight.Value = CDec(CGHeight2.Value / 4) + End Sub + + Private Sub CGWidth_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGWidth.ValueChanged + gxWidth = CSng(CGWidth.Value) + CGWidth2.Value = CInt(IIf(CGWidth.Value * 4 < CGWidth2.Maximum, CDec(CGWidth.Value * 4), CGWidth2.Maximum)) + + HS.LargeChange = CInt(PMainIn.Width / gxWidth) + If HS.Value > HS.Maximum - HS.LargeChange + 1 Then HS.Value = HS.Maximum - HS.LargeChange + 1 + HSL.LargeChange = CInt(PMainInL.Width / gxWidth) + If HSL.Value > HSL.Maximum - HSL.LargeChange + 1 Then HSL.Value = HSL.Maximum - HSL.LargeChange + 1 + HSR.LargeChange = CInt(PMainInR.Width / gxWidth) + If HSR.Value > HSR.Maximum - HSR.LargeChange + 1 Then HSR.Value = HSR.Maximum - HSR.LargeChange + 1 + + RefreshPanelAll() + End Sub + + Private Sub CGWidth2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles CGWidth2.Scroll + CGWidth.Value = CDec(CGWidth2.Value / 4) + End Sub + + Private Sub CGDivide_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGDivide.ValueChanged + gDivide = CInt(CGDivide.Value) + RefreshPanelAll() + End Sub + Private Sub CGSub_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSub.ValueChanged + gSub = CInt(CGSub.Value) + RefreshPanelAll() + End Sub + Private Sub BGSlash_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BGSlash.Click + Dim xd As Integer = CInt(InputBox(Strings.Messages.PromptSlashValue, , gSlash.ToString())) + If xd = 0 Then Exit Sub + If xd > CGDivide.Maximum Then xd = CInt(CGDivide.Maximum) + If xd < CGDivide.Minimum Then xd = CInt(CGDivide.Minimum) + gSlash = xd + End Sub + + + Private Sub CGSnap_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSnap.CheckedChanged + gSnap = CGSnap.Checked + RefreshPanelAll() + End Sub + + + + Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick + Dim xI1 As Integer + + Select Case PanelFocus + Case 0 + With LeftPanelScroll + xI1 = CInt(.Value + (tempY / 5) / gxHeight) + If xI1 > 0 Then xI1 = 0 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + With HSL + xI1 = CInt(.Value + (tempX / 10) / gxWidth) + If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + + Case 1 + With MainPanelScroll + xI1 = CInt(.Value + (tempY / 5) / gxHeight) + If xI1 > 0 Then xI1 = 0 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + With HS + xI1 = CInt(.Value + (tempX / 10) / gxWidth) + If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + + Case 2 + With RightPanelScroll + xI1 = CInt(.Value + (tempY / 5) / gxHeight) + If xI1 > 0 Then xI1 = 0 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + With HSR + xI1 = CInt(.Value + (tempX / 10) / gxWidth) + If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + End Select + + Dim xMEArgs As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 0, MouseMoveStatus.X, MouseMoveStatus.Y, 0) + PMainInMouseMove(spMain(PanelFocus), xMEArgs) + + End Sub + + Private Sub TimerMiddle_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerMiddle.Tick + If Not MiddleButtonClicked Then TimerMiddle.Enabled = False : Return + + Dim xI1 As Integer + + Select Case PanelFocus + Case 0 + With LeftPanelScroll + xI1 = CInt(.Value + (Cursor.Position.Y - MiddleButtonLocation.Y) / 5 / gxHeight) + If xI1 > 0 Then xI1 = 0 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + With HSL + xI1 = CInt(.Value + (Cursor.Position.X - MiddleButtonLocation.X) / 5 / gxWidth) + If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + + Case 1 + With MainPanelScroll + xI1 = CInt(.Value + (Cursor.Position.Y - MiddleButtonLocation.Y) / 5 / gxHeight) + If xI1 > 0 Then xI1 = 0 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + With HS + xI1 = CInt(.Value + (Cursor.Position.X - MiddleButtonLocation.X) / 5 / gxWidth) + If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + + Case 2 + With RightPanelScroll + xI1 = CInt(.Value + (Cursor.Position.Y - MiddleButtonLocation.Y) / 5 / gxHeight) + If xI1 > 0 Then xI1 = 0 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + With HSR + xI1 = CInt(.Value + (Cursor.Position.X - MiddleButtonLocation.X) / 5 / gxWidth) + If xI1 > .Maximum - .LargeChange + 1 Then xI1 = .Maximum - .LargeChange + 1 + If xI1 < .Minimum Then xI1 = .Minimum + .Value = xI1 + End With + End Select + + Dim xMEArgs As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 0, MouseMoveStatus.X, MouseMoveStatus.Y, 0) + PMainInMouseMove(spMain(PanelFocus), xMEArgs) + End Sub + + Private Sub ValidateWAVListView() + Try + Dim xRect As Rectangle = LWAV.GetItemRectangle(LWAV.SelectedIndex) + If xRect.Top + xRect.Height > LWAV.DisplayRectangle.Height Then SendMessage(LWAV.Handle, &H115, 1, 0) + Catch ex As Exception + End Try + End Sub + + Private Sub ValidateBMPListView() + Try + Dim xRect As Rectangle = LBMP.GetItemRectangle(LBMP.SelectedIndex) + If xRect.Top + xRect.Height > LBMP.DisplayRectangle.Height Then SendMessage(LBMP.Handle, &H115, 1, 0) + Catch ex As Exception + End Try + End Sub + + Private Sub LWAV_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LWAV.Click + If TBWrite.Checked Then FSW.Text = C10to36(LWAV.SelectedIndex + 1) + + PreviewNote("", True) + If Not PreviewOnClick Then Exit Sub + If hWAV(LWAV.SelectedIndex + 1) = "" Then Exit Sub + + Dim xFileLocation As String = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() & "\" & hWAV(LWAV.SelectedIndex + 1) + PreviewNote(xFileLocation, False) + End Sub + + Private Sub LWAV_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LWAV.DoubleClick + Dim xDWAV As New OpenFileDialog + xDWAV.DefaultExt = "wav" + xDWAV.Filter = Strings.FileType._wave & "|*.wav;*.ogg;*.mp3|" & + Strings.FileType.WAV & "|*.wav|" & + Strings.FileType.OGG & "|*.ogg|" & + Strings.FileType.MP3 & "|*.mp3|" & + Strings.FileType._all & "|*.*" + xDWAV.Multiselect = True + xDWAV.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + + If xDWAV.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + InitPath = ExcludeFileName(xDWAV.FileName) + + ' Replace multiple + AddToPOWAV(xDWAV.FileNames) + If IsSaved Then SetIsSaved(False) + End Sub + + Private Sub LWAV_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LWAV.KeyDown + Select Case e.KeyCode + Case Keys.Space + LWAV_Click(sender, e) + Case Keys.Enter + LWAV_DoubleClick(sender, e) + Case Keys.Delete + Dim xLWAVIds(LWAV.SelectedIndices.Count - 1) As Integer + For i = 0 To LWAV.SelectedIndices.Count - 1 + xLWAVIds(i) = LWAV.SelectedIndices(i) + Next + For i = 0 To xLWAVIds.Count - 1 + hWAV(xLWAVIds(i) + 1) = "" + wLWAV(xLWAVIds(i) + 1) = New WavSample({}, {}, 0, 0) + LWAV.Items.Item(xLWAVIds(i)) = C10to36(xLWAVIds(i) + 1) & ": " + Next + If IsSaved Then SetIsSaved(False) + End Select + End Sub + + Private Sub LWAVRefresh() + LWAV.EndUpdate() + LWAV.BeginUpdate() + LWAVRefreshId = 1 + LWAV.Enabled = False + TimerLWAVRefresh.Enabled = True + End Sub + + Private Sub TimerLWAVRefresh_Tick(sender As Object, e As EventArgs) Handles TimerLWAVRefresh.Tick + For i = 0 To 9 + Dim xIL = LWAVRefreshId - 1 + LWAV.Items(xIL) = C10to36(LWAVRefreshId) & ": " & hWAV(LWAVRefreshId) + POWAVSwitch.Text = Strings.OptionsScroll.WAVHash & " (" & LWAVRefreshId & "/1295)" + Console.WriteLine(LWAVRefreshId) + + If LWAVRefreshId = 1295 Then + POWAVSwitch.Text = Strings.OptionsScroll.WAVHash + LWAVRefreshId = 1 + LWAV.Enabled = True + TimerLWAVRefresh.Enabled = False + LWAV.EndUpdate() + Exit Sub + End If + LWAVRefreshId += 1 + + Next + End Sub + + Private Sub LBMPRefresh() + LBMP.EndUpdate() + LBMP.Items(0) = "Updating..." + LBMP.BeginUpdate() + LBMPRefreshId = 1 + LBMP.Enabled = False + TimerLBMPRefresh.Enabled = True + End Sub + + Private Sub TimerLBMPRefresh_Tick(sender As Object, e As EventArgs) Handles TimerLBMPRefresh.Tick + For i = 0 To 9 + Dim xIL = LBMPRefreshId - 1 + LBMP.Items(xIL) = C10to36(LBMPRefreshId) & ": " & hBMP(LBMPRefreshId) + POBMPSwitch.Text = Strings.OptionsScroll.BMPHash & " (" & LBMPRefreshId & "/1295)" + ' Console.WriteLine(LBMPRefreshId) + + If LBMPRefreshId = 1295 Then + POBMPSwitch.Text = Strings.OptionsScroll.BMPHash + LBMPRefreshId = 1 + LBMP.Enabled = True + TimerLBMPRefresh.Enabled = False + LBMP.EndUpdate() + Exit Sub + End If + LBMPRefreshId += 1 + + Next + End Sub + + Private Sub LBeatRefresh() + For xILB = 0 To 999 + Dim a As Double = MeasureLength(xILB) / 192.0R + Dim xxD = GetDenominator(a) + LBeat.Items(xILB) = Add3Zeros(xILB) & ": " & a & IIf(xxD > 10000, "", " ( " & CLng(a * xxD) & " / " & xxD & " ) ").ToString() + Next + End Sub + + Private Sub TBErrorCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBErrorCheck.Click, mnErrorCheck.Click + If TypeOf sender Is ToolStripButton Then + Dim senderC As ToolStripButton = CType(sender, ToolStripButton) + ErrorCheck = senderC.Checked + ElseIf TypeOf sender Is ToolStripMenuItem Then + Dim senderC As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + ErrorCheck = senderC.Checked + End If + + TBErrorCheck.Checked = ErrorCheck + mnErrorCheck.Checked = ErrorCheck + TBErrorCheck.Image = CType(IIf(TBErrorCheck.Checked, My.Resources.x16CheckError, My.Resources.x16CheckErrorN), Image) + mnErrorCheck.Image = CType(IIf(TBErrorCheck.Checked, My.Resources.x16CheckError, My.Resources.x16CheckErrorN), Image) + RefreshPanelAll() + End Sub + + Private Sub TBPreviewOnClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPreviewOnClick.Click, mnPreviewOnClick.Click + PreviewNote("", True) + If TypeOf sender Is ToolStripButton Then + Dim senderC As ToolStripButton = CType(sender, ToolStripButton) + PreviewOnClick = senderC.Checked + ElseIf TypeOf sender Is ToolStripMenuItem Then + Dim senderC As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + PreviewOnClick = senderC.Checked + End If + TBPreviewOnClick.Checked = PreviewOnClick + mnPreviewOnClick.Checked = PreviewOnClick + TBPreviewOnClick.Image = CType(IIf(PreviewOnClick, My.Resources.x16PreviewOnClick, My.Resources.x16PreviewOnClickN), Image) + mnPreviewOnClick.Image = CType(IIf(PreviewOnClick, My.Resources.x16PreviewOnClick, My.Resources.x16PreviewOnClickN), Image) + End Sub + + 'Private Sub TBPreviewErrorCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + ' PreviewErrorCheck = TBPreviewErrorCheck.Checked + ' TBPreviewErrorCheck.Image = IIf(PreviewErrorCheck, My.Resources.x16PreviewCheck, My.Resources.x16PreviewCheckN) + 'End Sub + + Private Sub TBShowFileName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBShowFileName.Click, mnShowFileName.Click + If TypeOf sender Is ToolStripButton Then + Dim senderC As ToolStripButton = CType(sender, ToolStripButton) + ShowFileName = senderC.Checked + ElseIf TypeOf sender Is ToolStripMenuItem Then + Dim senderC As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + ShowFileName = senderC.Checked + End If + TBShowFileName.Checked = ShowFileName + mnShowFileName.Checked = ShowFileName + TBShowFileName.Image = CType(IIf(ShowFileName, My.Resources.x16ShowFileName, My.Resources.x16ShowFileNameN), Image) + mnShowFileName.Image = CType(IIf(ShowFileName, My.Resources.x16ShowFileName, My.Resources.x16ShowFileNameN), Image) + RefreshPanelAll() + End Sub + + Private Sub TBShowWaveform_Click(sender As Object, e As EventArgs) Handles TBShowWaveform.Click, mnShowWaveform.Click + If TypeOf sender Is ToolStripButton Then + Dim senderC As ToolStripButton = CType(sender, ToolStripButton) + ShowWaveform = senderC.Checked + ElseIf TypeOf sender Is ToolStripMenuItem Then + Dim senderC As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + ShowWaveform = senderC.Checked + End If + TBShowWaveform.Checked = ShowWaveform + mnShowWaveform.Checked = ShowWaveform + TBShowWaveform.Image = CType(IIf(ShowWaveform, My.Resources.x16ShowWaveform, My.Resources.x16ShowWaveformN), Image) + mnShowWaveform.Image = CType(IIf(ShowWaveform, My.Resources.x16ShowWaveform, My.Resources.x16ShowWaveformN), Image) + + If ShowWaveform Then + If Not WaveformLoaded Then + TimerLoadWaveform.Enabled = True + Else + LoadNoteWVPosEnd() + End If + Else + TimerLoadWaveform.Enabled = False + End If + End Sub + + Private Sub TimerLoadWaveform_Tick(sender As Object, e As EventArgs) Handles TimerLoadWaveform.Tick + Console.WriteLine(WaveformLoadId) + If hWAV(WaveformLoadId) <> "" Then wLWAV(WaveformLoadId) = LoadWaveForm(ExcludeFileName(FileName) & "\" & hWAV(WaveformLoadId)) + If WaveformLoadId = UBound(wLWAV) Then + WaveformLoadId = 1 + TimerLoadWaveform.Enabled = False + WaveformLoaded = True + + LoadNoteWVPosEnd() + RefreshPanelAll() + Exit Sub + End If + + WaveformLoadId += 1 + End Sub + + Private Sub LoadNoteWVPosEnd() + ReDim NoteWVPosEnd(UBound(Notes)) + For i = 0 To UBound(Notes) + If IsColumnSound(Notes(i).ColumnIndex) Then + NoteWVPosEnd(i) = GetVPositionFromTime(GetTimeFromVPosition(Notes(i).VPosition) + wLWAV(CInt(Notes(i).Value / 10000)).Duration) + Else + NoteWVPosEnd(i) = -1 + End If + Next + End Sub + + Private Sub TBCut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBCut.Click, mnCut.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + Me.RedoRemoveNoteSelected(True, xUndo, xRedo) + 'Dim xRedo As String = sCmdKDs() + 'Dim xUndo As String = sCmdKs(True) + + CopyNotes(False) + RemoveNotes(False) + AddUndo(xUndo, xBaseRedo.Next) + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + POStatusRefresh() + CalculateGreatestVPosition() + End Sub + + Private Sub TBCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBCopy.Click, mnCopy.Click + CopyNotes() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub TBPaste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPaste.Click, mnPaste.Click + AddNotesFromClipboard() + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + Me.RedoAddNoteSelected(True, xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) + + 'AddUndo(sCmdKDs(), sCmdKs(True)) + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + POStatusRefresh() + CalculateGreatestVPosition() + End Sub + + Private Sub TBPastePattern_Click(ByVal sender As Object, ByVal e As EventArgs) Handles mnPastePattern.Click, TBPastePattern.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + ' Preferable to work under NT settings + Dim NTInputTemp As Boolean = NTInput + If Not NTInputTemp Then + NTInput = True + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertBMSE2NT() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + Dim NotesCB As Note() = GetNotesFromClipboard() + If NotesCB Is Nothing Then + If Not NTInputTemp Then ConvertNT2BMSE() + Exit Sub + End If + + ' Count selected notes + Dim xLS As Integer = (From note In Notes Where note.Selected Select note).Count + + If NotesCB.Length <> xLS Then + Dim xDiag = MsgBox(Strings.Messages.SaveWarning & Strings.Messages.PasteNotesDifferentCount, MsgBoxStyle.YesNo) + If xDiag = MsgBoxResult.No Then Exit Sub + End If + + Dim xICB As Integer = -1 + For xIN = 1 To UBound(Notes) + If Not Notes(xIN).Selected OrElse Notes(xIN).Ghost Then Continue For + + xICB = (xICB + 1) Mod NotesCB.Length + Dim xCol = NotesCB(xICB).ColumnIndex + Dim xVPos = CDbl(IIf(PastePatternToVPosition, NotesCB(xICB).VPosition, Notes(xIN).VPosition)) + Dim xLen = NotesCB(xICB).Length + + RedoMoveNote(Notes(xIN), xCol, xVPos, xUndo, xRedo) + Notes(xIN).ColumnIndex = xCol + Notes(xIN).VPosition = xVPos + + RedoLongNoteModify(Notes(xIN), Notes(xIN).VPosition, xLen, xUndo, xRedo) + Notes(xIN).Length = xLen + Next + + If Not NTInputTemp Then + NTInput = False + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertNT2BMSE() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + AddUndo(xUndo, xBaseRedo.Next) + + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub LBeatCopyPaste(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles LBeat.PreviewKeyDown + Select Case e.KeyCode + Case Keys.C + If My.Computer.Keyboard.CtrlKeyDown Then + Dim xIndices(LBeat.SelectedIndices.Count - 1) As Integer + + LBeat.SelectedIndices.CopyTo(xIndices, 0) + Dim xMeasureLengthSelected(UBound(xIndices)) As String + For xIL = 0 To UBound(xIndices) + xMeasureLengthSelected(xIL) = (MeasureLength(xIL) / 192.0R).ToString + Next + + Clipboard.SetText(Join(xMeasureLengthSelected, vbCrLf)) + End If + Case Keys.V + If My.Computer.Keyboard.CtrlKeyDown Then + If LBeat.SelectedIndex = -1 Then Exit Sub + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + Dim xMeasureLengthBefore = CType(MeasureLength.Clone, Double()) + + Dim xMeasureLengthClipboard() As String = Split(Clipboard.GetText, vbCrLf) + + Dim xIL0 As Integer = LBeat.SelectedIndex + Dim xRatio As Double + For xIL = 0 To UBound(xMeasureLengthClipboard) + LBeat.SelectedIndices.Clear() + If Double.TryParse(xMeasureLengthClipboard(xIL), xRatio) Then + If xRatio <= 0.0# Or xRatio >= 1000.0# Then System.Media.SystemSounds.Hand.Play() : Exit Sub + + LBeat.SelectedIndex = xIL0 + xIL + ApplyBeat(xRatio, xUndo, xRedo) + End If + Next + + LBeat.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xMeasureLengthClipboard) + LBeat.SelectedIndices.Add(xIL0 + xI1) + Next + + RedoChangeMeasure(xMeasureLengthBefore, CType(MeasureLength.Clone(), Double()), xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) + + RefreshPanelAll() + POStatusRefresh() + End If + Case Keys.Z + If My.Computer.Keyboard.CtrlKeyDown Then TBUndo_Click(TBUndo, New EventArgs) + Case Keys.Y + If My.Computer.Keyboard.CtrlKeyDown Then TBRedo_Click(TBRedo, New EventArgs) + End Select + End Sub + + 'Private Function pArgPath(ByVal I As Integer) + ' Return Mid(pArgs(I), 1, InStr(pArgs(I), vbCrLf) - 1) + 'End Function + + Private Sub TBPreviewHighlighted_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + ' Experimental feature. Not optimized, will eat up a lot of RAM if a lot of notes are played. + + If TimerInternalPlay.Enabled = True Then + TimerInternalPlay.Enabled = False + For i = 1 To UBound(InternalPlayWav) + InternalPlayWav(i).Finalized() + Next + Exit Sub + End If + + For i = 1 To UBound(InternalPlayWav) + InternalPlayWav(i) = New AudioC + InternalPlayWav(i).Initialize() + Next + + ReDim InternalPlayNotes(UBound(Notes)) + Dim xI1 As Integer = -1 + For xI2 = 1 To UBound(Notes) + With Notes(xI2) + If .Selected AndAlso Not .Comment AndAlso IsColumnSound(.ColumnIndex) AndAlso hWAV(CInt(.Value / 10000)) <> "" Then + xI1 += 1 + InternalPlayNotes(xI1) = Notes(xI2) + End If + End With + Next + ReDim Preserve InternalPlayNotes(xI1) + ' InternalPlayNotes = From Note In Notes Where Note.Selected AndAlso Not Note.Comment AndAlso IsColumnSound(Note.ColumnIndex) AndAlso hWAV(Note.Value / 10000) <> "" + ' Select Note + + If InternalPlayNotes.Count >= 100 Then + Dim xResult As MsgBoxResult = MsgBox("Warning: You're about to play a lot of notes." & vbCrLf & "This is not recommended as this function has not been fully developed." & vbCrLf & "Do you wish to continue?", MsgBoxStyle.YesNo) + If xResult = MsgBoxResult.No Then Exit Sub + End If + InternalPlayTimerStart = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds + InternalPlayTimerEnd = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds + + CLng((GetTimeFromVPosition(InternalPlayNotes(InternalPlayNotes.Count - 1).VPosition) - GetTimeFromVPosition(InternalPlayNotes(0).VPosition)) * 1000) + InternalPlayNoteIndex = 0 + TimerInternalPlay.Enabled = True + End Sub + + Private Sub TimerInternalPlay_Tick(sender As Object, e As EventArgs) Handles TimerInternalPlay.Tick + InternalPlayTimerCount = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds - InternalPlayTimerStart + InternalPlaySub() + End Sub + + Private Sub InternalPlaySub() + If InternalPlayNoteIndex > InternalPlayNotes.Length - 1 Then + Dim xIWL = InternalPlayNoteIndex - 1 + If InternalPlayTimerCount > CLng((GetTimeFromVPosition(InternalPlayNotes(xIWL).VPosition) - GetTimeFromVPosition(InternalPlayNotes(0).VPosition)) * 1000) Then + TimerInternalPlay.Enabled = False + For i = 1 To UBound(InternalPlayWav) + InternalPlayWav(i).Finalized() + Next + End If + + Exit Sub + End If + + Dim NoteTime = GetTimeFromVPosition(InternalPlayNotes(InternalPlayNoteIndex).VPosition) - GetTimeFromVPosition(InternalPlayNotes(0).VPosition) + If InternalPlayTimerCount >= CLng(NoteTime * 1000) Then + Dim xIW As Integer = CInt(InternalPlayNotes(InternalPlayNoteIndex).Value / 10000) + If xIW <= 0 Then xIW = 1 + If xIW >= 1296 Then xIW = 1295 + + Dim xFileLocation As String = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() & "\" & hWAV(xIW) + InternalPlayWav(xIW).Play(xFileLocation) + + InternalPlayNoteIndex += 1 + End If + End Sub + + Private Function GetFileName(ByVal s As String) As String + Dim fslash As Integer = InStrRev(s, "/") + Dim bslash As Integer = InStrRev(s, "\") + Return Mid(s, CInt(IIf(fslash > bslash, fslash, bslash)) + 1) + End Function + + Private Function ExcludeFileName(ByVal s As String) As String + Dim fslash As Integer = InStrRev(s, "/") + Dim bslash As Integer = InStrRev(s, "\") + If (bslash Or fslash) = 0 Then Return "" + Return Mid(s, 1, CInt(IIf(fslash > bslash, fslash, bslash)) - 1) + End Function + + Private Sub PlayerMissingPrompt() + Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) + MsgBox(Strings.Messages.CannotFind.Replace("{}", PrevCodeToReal(xArg.Path)) & vbCrLf & + Strings.Messages.PleaseRespecifyPath, MsgBoxStyle.Critical, Strings.Messages.PlayerNotFound) + + Dim xDOpen As New OpenFileDialog + xDOpen.InitialDirectory = IIf(ExcludeFileName(PrevCodeToReal(xArg.Path)) = "", + My.Application.Info.DirectoryPath, + ExcludeFileName(PrevCodeToReal(xArg.Path))).ToString() + xDOpen.FileName = PrevCodeToReal(xArg.Path) + xDOpen.Filter = Strings.FileType.EXE & "|*.exe" + xDOpen.DefaultExt = "exe" + If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + + 'pArgs(CurrentPlayer) = Replace(xDOpen.FileName, My.Application.Info.DirectoryPath, "") & _ + ' Mid(pArgs(CurrentPlayer), InStr(pArgs(CurrentPlayer), vbCrLf)) + 'xStr = Split(pArgs(CurrentPlayer), vbCrLf) + pArgs(CurrentPlayer).Path = Replace(xDOpen.FileName, My.Application.Info.DirectoryPath, "") + xArg = pArgs(CurrentPlayer) + End Sub + + + Private Sub TBPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPlay.Click, mnPlay.Click + 'Dim xStr() As String = Split(pArgs(CurrentPlayer), vbCrLf) + Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) + + If Not File.Exists(PrevCodeToReal(xArg.Path)) Then + PlayerMissingPrompt() + xArg = pArgs(CurrentPlayer) + End If + + ' az: Treat it like we cancelled the operation + If Not File.Exists(PrevCodeToReal(xArg.Path)) Then + Exit Sub + End If + + Dim xStrAll As String = SaveBMS() + Dim xFileName As String = IIf(Not PathIsValid(FileName), + IIf(InitPath = "", My.Application.Info.DirectoryPath, InitPath), + ExcludeFileName(FileName)).ToString() & "\" & TempFileName + My.Computer.FileSystem.WriteAllText(xFileName, xStrAll, False, TextEncoding) + + AddTempFileList(xFileName) + System.Diagnostics.Process.Start(PrevCodeToReal(xArg.Path), PrevCodeToReal(xArg.aHere)) + End Sub + + Private Sub TBPlayB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPlayB.Click, mnPlayB.Click + 'Dim xStr() As String = Split(pArgs(CurrentPlayer), vbCrLf) + Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) + + If Not File.Exists(PrevCodeToReal(xArg.Path)) Then + PlayerMissingPrompt() + xArg = pArgs(CurrentPlayer) + End If + + If Not File.Exists(PrevCodeToReal(xArg.Path)) Then + Exit Sub + End If + + Dim xStrAll As String = SaveBMS() + Dim xFileName As String = IIf(Not PathIsValid(FileName), + IIf(InitPath = "", My.Application.Info.DirectoryPath, InitPath), + ExcludeFileName(FileName)).ToString() & "\" & TempFileName + My.Computer.FileSystem.WriteAllText(xFileName, xStrAll, False, TextEncoding) + + AddTempFileList(xFileName) + + System.Diagnostics.Process.Start(PrevCodeToReal(xArg.Path), PrevCodeToReal(xArg.aBegin)) + End Sub + + Private Sub TBStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBStop.Click, mnStop.Click + 'Dim xStr() As String = Split(pArgs(CurrentPlayer), vbCrLf) + Dim xArg As MainWindow.PlayerArguments = pArgs(CurrentPlayer) + + If Not File.Exists(PrevCodeToReal(xArg.Path)) Then + PlayerMissingPrompt() + xArg = pArgs(CurrentPlayer) + End If + + If Not File.Exists(PrevCodeToReal(xArg.Path)) Then + Exit Sub + End If + + System.Diagnostics.Process.Start(PrevCodeToReal(xArg.Path), PrevCodeToReal(xArg.aStop)) + End Sub + + Private Sub AddTempFileList(ByVal s As String) + Dim xAdd As Boolean = True + If pTempFileNames IsNot Nothing Then + For Each xStr1 As String In pTempFileNames + If xStr1 = s Then xAdd = False : Exit For + Next + End If + + If xAdd Then + ReDim Preserve pTempFileNames(UBound(pTempFileNames) + 1) + pTempFileNames(UBound(pTempFileNames)) = s + End If + End Sub + + Private Sub TBStatistics_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBStatistics.Click, mnStatistics.Click + SortByVPositionInsertion() + UpdatePairing() + + Dim data(6, 5) As Integer + Dim dataLNToggle As Boolean = True ' For halving long note counts in Not NTInput mode + For i As Integer = 1 To UBound(Notes) + With Notes(i) + Dim row As Integer = -1 + Select Case .ColumnIndex + ' Case niSCROLL : row = 0 + Case niBPM : row = 0 + Case niSTOP : row = 1 + Case niA1, niA2, niA3, niA4, niA5, niA6, niA7, niA8 : row = 2 + Case niD1, niD2, niD3, niD4, niD5, niD6, niD7, niD8 : row = 3 + Case Is >= niB : row = 4 + Case Else : row = 5 + End Select + + Do While row <> 6 + If Not NTInput Then + If Not .LongNote Then data(row, 0) += 1 + If .LongNote Then + If dataLNToggle Then data(row, 1) += 1 + dataLNToggle = Not dataLNToggle + End If + If .Value \ 10000 = LnObj Then data(row, 2) += 1 + If .Hidden Then data(row, 3) += 1 + If .HasError Then data(row, 4) += 1 + data(row, 5) += 1 + + Else + Dim noteUnit As Integer = 1 + If .Length = 0 Then data(row, 0) += 1 + If .Length <> 0 Then data(row, 1) += 2 : noteUnit = 2 + + If .Value \ 10000 = LnObj Then data(row, 2) += noteUnit + If .Hidden Then data(row, 3) += noteUnit + If .HasError Then data(row, 4) += noteUnit + data(row, 5) += noteUnit + + End If + + row = 6 + Loop + End With + Next + + Dim dStat As New dgStatisticsLegacy(data) + dStat.ShowDialog() + End Sub + + Private Sub TBStatisticsAdvanced_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnStatisticsAdvanced.Click + SortByVPositionInsertion() + UpdatePairing() + Dim rows = 26 - 2 ' TableLayoutPanel1.RowCount doesn't work + Dim cols = 8 - 2 ' Size of tables including names sub 2 + Dim rowLabels = {Strings.fStatistics.lSCROLL, Strings.fStatistics.lBPM, Strings.fStatistics.lSTOP, + Strings.fStatistics.lA1, Strings.fStatistics.lA2, Strings.fStatistics.lA3, Strings.fStatistics.lA4, Strings.fStatistics.lA5, Strings.fStatistics.lA6, Strings.fStatistics.lA7, Strings.fStatistics.lA8, + Strings.fStatistics.lD1, Strings.fStatistics.lD2, Strings.fStatistics.lD3, Strings.fStatistics.lD4, Strings.fStatistics.lD5, Strings.fStatistics.lD6, Strings.fStatistics.lD7, Strings.fStatistics.lD8, + Strings.fStatistics.lA, Strings.fStatistics.lD, Strings.fStatistics.lBGA, Strings.fStatistics.lBGM, Strings.fStatistics.lNotes, + Strings.fStatistics.lTotal} + Dim colLabels = {Strings.fStatistics.lShort, Strings.fStatistics.lLong, Strings.fStatistics.lLnObj, Strings.fStatistics.lHidden, Strings.fStatistics.lLandmines, Strings.fStatistics.lErrors, + Strings.fStatistics.lTotal} + Dim data(rows, cols) As Integer + Dim dataWAV(1295, 1) As Integer + Dim dataLNToggle As Boolean = True ' For halving long note counts in Not NTInput mode + + Dim noteLanes = {niA1, niA2, niA3, niA4, niA5, niA6, niA7, niA8, + niD1, niD2, niD3, niD4, niD5, niD6, niD7, niD8} + + ' Check if #WAV has been assigned + For i = 0 To dataWAV.GetUpperBound(0) + If Not IsNothing(hWAV(i)) Then + dataWAV(i, 0) = 1 + Else + dataWAV(i, 0) = 0 + End If + Next + + For i As Integer = 1 To UBound(Notes) + With Notes(i) + Dim row As Integer + Select Case .ColumnIndex + Case niSCROLL : row = 0 + Case niBPM : row = 1 + Case niSTOP : row = 2 + Case niA1 : row = 3 + Case niA2 : row = 4 + Case niA3 : row = 5 + Case niA4 : row = 6 + Case niA5 : row = 7 + Case niA6 : row = 8 + Case niA7 : row = 9 + Case niA8 : row = 10 + Case niD1 : row = 11 + Case niD2 : row = 12 + Case niD3 : row = 13 + Case niD4 : row = 14 + Case niD5 : row = 15 + Case niD6 : row = 16 + Case niD7 : row = 17 + Case niD8 : row = 18 + Case Is >= niB : row = 22 + Case Else : row = 21 + End Select + + + Dim idWAV As Integer = CInt(.Value / 10000) + If Not NTInput Then + If Not (.LongNote Or .Hidden Or .Landmine Or .Hidden Or .Value \ 10000 = LnObj Or .Comment) Then + data(row, 0) += 1 + If noteLanes.Contains(.ColumnIndex) Or .ColumnIndex >= niB Then + dataWAV(idWAV, 1) += 1 + End If + End If + If .LongNote Then + If dataLNToggle Then data(row, 1) += 1 : dataWAV(idWAV, 1) += 1 + dataLNToggle = Not dataLNToggle + End If + If .Value \ 10000 = LnObj Then data(row, 2) += 1 + If .Hidden Then data(row, 3) += 1 + If .Landmine Then data(row, 4) += 1 + If .HasError Then data(row, 5) += 1 + + Else + If Not (.LongNote Or .Hidden Or .Landmine Or .Hidden Or .Value \ 10000 = LnObj Or .Comment) Then + data(row, 0) += 1 + If noteLanes.Contains(.ColumnIndex) Or .ColumnIndex >= niB Then + dataWAV(idWAV, 1) += 1 + End If + End If + If .Length <> 0 Then data(row, 1) += 1 + If .Value \ 10000 = LnObj Then data(row, 2) += 1 + If .Hidden Then data(row, 3) += 1 + If .Landmine Then data(row, 4) += 1 + If .HasError Then data(row, 5) += 1 + + End If + + End With + Next + + ' Calculate Total notes on column and row + For r As Integer = 0 To rows - 1 + For c As Integer = 0 To cols - 1 + data(r, cols) += data(r, c) ' Total in row + + ' Ignore rows "A1-A8" and "D1-D8" + Select Case r + Case 19 To 20 : Continue For + Case Else : data(rows, c) += data(r, c) ' Total in column + End Select + + Select Case r + Case 3 To 10 : data(19, c) += data(r, c) : data(23, c) += data(r, c) + Case 11 To 18 : data(20, c) += data(r, c) : data(23, c) += data(r, c) + End Select + Next + Next + data(rows, cols) = UBound(Notes) + ' Change to the whole table cause more convenient + Dim dStat As New dgStatistics(data, rowLabels, colLabels, dataWAV) + dStat.ShowDialog() + End Sub + + ''' + ''' Remark: Pls sort and updatepairing before this process. + ''' + + Private Sub CalculateTotalPlayableNotes(Optional ModifyTotal As Boolean = True) + Dim xI1 As Integer + Dim xIAll As Integer = 0 + Dim xITemp As Integer = 0 + + If Not NTInput Then + For xI1 = 1 To UBound(Notes) + With Notes(xI1) + If .ColumnIndex >= niA1 And .ColumnIndex <= niD8 Then + If Not (.LongNote Or .Hidden Or .Landmine Or .Hidden Or .Value \ 10000 = LnObj Or .Comment) Then + xIAll += 1 + ElseIf .LongNote AndAlso Not (.Hidden Or .Landmine Or .Hidden Or .Value \ 10000 = LnObj Or .Comment) Then + xITemp += 1 + End If + End If + End With + Next + xIAll += CInt(xITemp / 2) + Else + For xI1 = 1 To UBound(Notes) + With Notes(xI1) + If .ColumnIndex >= niA1 And .ColumnIndex <= niD8 AndAlso + Not (.LongNote Or .Hidden Or .Landmine Or .Hidden Or .Value \ 10000 = LnObj Or .Comment) Then xIAll += 1 + End With + Next + End If + + Dim TotalValue As Double + Select Case TotalOption + Case 0 + TotalValue = xIAll * 7.605 / (0.01 * xIAll + 6.5) * TotalGlobalMultiplier + Case 1 + TotalValue = CDbl(IIf(xIAll < 400, 200 + xIAll / 5, IIf(xIAll < 600, 280 + (xIAll - 400) / 2.5, 360 + (xIAll - 600) / 5))) * TotalGlobalMultiplier + Case 2 + TotalValue = xIAll * TotalMultiplier * TotalGlobalMultiplier + End Select + If TotalDisplayValue Then + TBTotalValue.Text = IIf(TotalDisplayText, Strings.StatusBar.RecommendedTotal & ": ", "").ToString() & Math.Round(TotalValue, TotalDecimal).ToString() + Else + TBTotalValue.Text = "" + End If + TBStatistics.Text = xIAll.ToString() + If ModifyTotal AndAlso TotalAutofill Then THTotal.Text = Math.Round(TotalValue, TotalDecimal).ToString() + End Sub + + Public Function GetMouseVPosition(Optional snap As Boolean = True) As Double + Dim panHeight = spMain(PanelFocus).Height + Dim panDisplacement = PanelVScroll(PanelFocus) + Dim vpos = (panHeight - panDisplacement * gxHeight - MouseMoveStatus.Y - 1) / gxHeight + If snap Then + Return SnapToGrid(vpos) + Else + Return vpos + End If + End Function + + Private Sub POStatusRefresh() + + If TBSelect.Checked Then + Dim xI1 As Integer = KMouseOver + If xI1 < 0 Then + + TempVPosition = GetMouseVPosition(gSnap) + + SelectedColumn = GetColumnAtX(MouseMoveStatus.X, PanelHScroll(PanelFocus)) + + Dim xMeasure As Integer = MeasureAtDisplacement(TempVPosition) + Dim xMLength As Double = MeasureLength(xMeasure) + Dim xVposMod As Double = TempVPosition - MeasureBottom(xMeasure) + Dim xGCD As Double = GCD(CDbl(IIf(xVposMod = 0, xMLength, xVposMod)), xMLength) + + FSP1.Text = (xVposMod * gDivide / 192).ToString & " / " & (xMLength * gDivide / 192).ToString & " " + FSP2.Text = xVposMod.ToString & " / " & xMLength & " " + FSP3.Text = CInt(xVposMod / xGCD).ToString & " / " & CInt(xMLength / xGCD).ToString & " " + FSP4.Text = TempVPosition.ToString() & " " + TimeStatusLabel.Text = GetTimeFromVPosition(TempVPosition).ToString("F4") + FSC.Text = nTitle(SelectedColumn) + FSW.Text = "" + FSM.Text = Add3Zeros(xMeasure) + FST.Text = "" + FSE.Text = "" + + ElseIf xI1 <= UBound(Notes) Then + Dim xMeasure As Integer = MeasureAtDisplacement(Notes(xI1).VPosition) + Dim xMLength As Double = MeasureLength(xMeasure) + Dim xVposMod As Double = Notes(xI1).VPosition - MeasureBottom(xMeasure) + Dim xGCD As Double = GCD(CDbl(IIf(xVposMod = 0, xMLength, xVposMod)), xMLength) + + FSP1.Text = (xVposMod * gDivide / 192).ToString & " / " & (xMLength * gDivide / 192).ToString & " " + FSP2.Text = xVposMod.ToString & " / " & xMLength & " " + FSP3.Text = CInt(xVposMod / xGCD).ToString & " / " & CInt(xMLength / xGCD).ToString & " " + FSP4.Text = Notes(xI1).VPosition.ToString() & " " + TimeStatusLabel.Text = GetTimeFromVPosition(Notes(xI1).VPosition).ToString("F4") + FSC.Text = nTitle(Notes(xI1).ColumnIndex) + FSW.Text = IIf(IsColumnNumeric(Notes(xI1).ColumnIndex), + Notes(xI1).Value / 10000, + C10to36(Notes(xI1).Value \ 10000)).ToString() + FSM.Text = Add3Zeros(xMeasure) + + ' TODO: Count stops + If Notes(xI1).Length > 0 Then + FST.ForeColor = System.Drawing.Color.Olive + FST.Text = Strings.StatusBar.LongNote & " " & + Notes(xI1).Length / 192.0R * 4 & " " & Strings.Beats & " " & + "(" & GetTimeFromVPosition(Notes(xI1).VPosition + Notes(xI1).Length) - GetTimeFromVPosition(Notes(xI1).VPosition) & "s)" + ElseIf Notes(xI1).LNPair <> 0 Then + FST.ForeColor = System.Drawing.Color.Olive + FST.Text = Strings.StatusBar.LongNote & " " & + Math.Abs(Notes(xI1).VPosition - Notes(Notes(xI1).LNPair).VPosition) / 192.0R * 4 & " " & Strings.Beats & " " & + "(" & Math.Abs(GetTimeFromVPosition(Notes(Notes(xI1).LNPair).VPosition) - GetTimeFromVPosition(Notes(xI1).VPosition)) & "s)" + ElseIf Notes(xI1).LongNote Then + FST.ForeColor = System.Drawing.Color.Olive + FST.Text = Strings.StatusBar.LongNote + ElseIf Notes(xI1).Hidden Then + FST.ForeColor = System.Drawing.Color.Blue + FST.Text = Strings.StatusBar.Hidden + ElseIf Notes(xI1).Landmine Then + FST.ForeColor = System.Drawing.Color.Red + FST.Text = Strings.StatusBar.Landmine + ElseIf Notes(xI1).Comment Then + FST.ForeColor = System.Drawing.Color.Green + FST.Text = Strings.StatusBar.Comment + Else + FST.ForeColor = System.Drawing.Color.Olive + FST.Text = Strings.StatusBar.Note + End If + + If Notes(xI1).HasError Then + Select Case Notes(xI1).ErrorType + Case 0 + FSE.Text = Strings.StatusBar.Err + Case 1 + FSE.Text = Strings.StatusBar.ErrTechnical + End Select + Else + FSE.Text = "" + End If + + End If + + ElseIf TBWrite.Checked Then + If SelectedColumn < 0 Then Exit Sub + + Dim xMeasure As Integer = MeasureAtDisplacement(TempVPosition) + Dim xMLength As Double = MeasureLength(xMeasure) + Dim xVposMod As Double = TempVPosition - MeasureBottom(xMeasure) + Dim xGCD As Double = GCD(CDbl(IIf(xVposMod = 0, xMLength, xVposMod)), xMLength) + + FSP1.Text = (xVposMod * gDivide / 192).ToString & " / " & (xMLength * gDivide / 192).ToString & " " + FSP2.Text = xVposMod.ToString & " / " & xMLength & " " + FSP3.Text = CInt(xVposMod / xGCD).ToString & " / " & CInt(xMLength / xGCD).ToString & " " + FSP4.Text = TempVPosition.ToString() & " " + TimeStatusLabel.Text = GetTimeFromVPosition(TempVPosition).ToString("F4") + FSC.Text = nTitle(SelectedColumn) + FSW.Text = C10to36(LWAV.SelectedIndex + 1) + FSM.Text = Add3Zeros(xMeasure) + If TempLength > 0 Then + FST.ForeColor = System.Drawing.Color.Olive + FST.Text = Strings.StatusBar.LongNote & " " & + TempLength / 192.0R * 4 & " " & Strings.Beats & " " & + "(" & Strings.StatusBar.Approximate & " " & GetTimeFromVPosition(TempVPosition + TempLength) - GetTimeFromVPosition(TempVPosition) & "s)" + ElseIf My.Computer.Keyboard.CtrlKeyDown AndAlso My.Computer.Keyboard.ShiftKeyDown Then + FST.ForeColor = System.Drawing.Color.Red + FST.Text = Strings.StatusBar.Landmine + ElseIf My.Computer.Keyboard.ShiftKeyDown AndAlso Not NTInput Then + FST.ForeColor = System.Drawing.Color.Olive + FST.Text = Strings.StatusBar.LongNote + ElseIf My.Computer.Keyboard.CtrlKeyDown Then + FST.ForeColor = System.Drawing.Color.Blue + FST.Text = Strings.StatusBar.Hidden + End If + + ElseIf TBTimeSelect.Checked Then + FSSS.Text = vSelStart.ToString() + FSSL.Text = vSelLength.ToString() + FSSH.Text = vSelHalf.ToString() + + End If + FStatus.Invalidate() + End Sub + + Private Function GetTimeFromVPosition(vpos As Double) As Double + Dim timing_notes = (From note In Notes + Where note.ColumnIndex = niBPM Or note.ColumnIndex = niSTOP + Group By Column = note.ColumnIndex + Into NoteGroups = Group).ToDictionary(Function(x) x.Column, Function(x) x.NoteGroups) + + Dim bpm_notes = timing_notes.Item(niBPM) + + Dim stop_notes As IEnumerable(Of Note) = Nothing + + If timing_notes.ContainsKey(niSTOP) Then + stop_notes = timing_notes.Item(niSTOP) + End If + + + Dim stop_contrib As Double + Dim bpm_contrib As Double + Dim duration = 0.0 + + For i = 0 To bpm_notes.Count() - 1 + ' az: sum bpm contribution first + ' P: Yeah but not all of them + Dim current_note = bpm_notes.ElementAt(i) + Dim notevpos = Math.Max(0, current_note.VPosition) + If notevpos > vpos Then Exit For + + If i + 1 <> bpm_notes.Count() Then + Dim next_note = bpm_notes.ElementAt(i + 1) + duration = Math.Min(next_note.VPosition, vpos) - notevpos + Else + duration = vpos - notevpos + End If + + Dim current_bps = 60 / (current_note.Value / 10000) + bpm_contrib += current_bps * duration / 48 + + If stop_notes Is Nothing Then Continue For + + Dim stops = From stp In stop_notes + Where stp.VPosition >= notevpos And + stp.VPosition < notevpos + duration + + Dim stop_beats = stops.Sum(Function(x) x.Value / 10000.0) / 48 + stop_contrib += current_bps * stop_beats + + Next + + Return stop_contrib + bpm_contrib + End Function + + Private Function GetVPositionFromTime(ByVal Time As Double) As Double + Dim timing_notes = (From note In Notes + Where note.ColumnIndex = niBPM Or note.ColumnIndex = niSTOP + Group By Column = note.ColumnIndex + Into NoteGroups = Group).ToDictionary(Function(x) x.Column, Function(x) x.NoteGroups) + + Dim bpm_notes = timing_notes.Item(niBPM) + + Dim stop_notes As IEnumerable(Of Note) = Nothing + + If timing_notes.ContainsKey(niSTOP) Then + stop_notes = timing_notes.Item(niSTOP) + End If + + Dim stop_subtract_time As Double + Dim bpm_contrib_time As Double + Dim DurationVPos As Double + Dim remaining_time As Double = Time + + Dim VPos As Double = 0 + + For i = 0 To bpm_notes.Count() - 1 + If remaining_time = 0 Then Exit For + + Dim current_note = bpm_notes.ElementAt(i) + Dim notevpos = Math.Max(0, current_note.VPosition) + + ' Beats per second + Dim current_bps = 60 / (current_note.Value / 10000) + + ' Get duration from BPM notes first + If i + 1 <> bpm_notes.Count() Then + ' Get duration in seconds between this and next bpm notes + Dim next_note = bpm_notes.ElementAt(i + 1) + DurationVPos = next_note.VPosition - notevpos + bpm_contrib_time = current_bps * DurationVPos / 48 + + ' If remaining_time is out of range between current and next bpm_note + If bpm_contrib_time >= remaining_time Then + VPos += 48 * remaining_time / current_bps + remaining_time = 0 + Else + VPos += DurationVPos + remaining_time -= bpm_contrib_time + End If + Else + bpm_contrib_time = remaining_time + VPos += 48 * remaining_time / current_bps + remaining_time = 0 + End If + + If stop_notes Is Nothing Then Continue For + + ' Dim stops = From stp In stop_notes + ' Where stp.VPosition >= notevpos And + ' stp.VPosition < VPos + Dim stops(stop_notes.Count - 1) As Note + Dim xIS = -1 + For Each stp In stop_notes + If stp.VPosition >= notevpos AndAlso stp.VPosition < VPos Then + xIS += 1 + stops(xIS) = stp + End If + Next + ReDim Preserve stops(xIS) + + Dim stop_contrib As Double = 0 + + For j = 0 To stops.Count() - 1 + ' Get negative duration from stop notes + Dim current_stop_note = stops.ElementAt(j) + If current_stop_note.VPosition >= VPos Then Exit For + + stop_subtract_time = current_bps * current_stop_note.Value / 10000.0 / 48 + + ' If the stop note duration exceeds excess time from current calculation + If stop_subtract_time > remaining_time Then + ' Recalculate VPos from stop note VPos + Dim remaining_time_stop As Double = remaining_time + bpm_contrib_time - current_bps * (current_stop_note.VPosition - notevpos) / 48 - stop_contrib + remaining_time = 0 + VPos = current_stop_note.VPosition + ' If the stop note duration exceeds duration between stop note and specified time + If stop_subtract_time >= remaining_time_stop Then + Exit For + Else + remaining_time_stop -= stop_subtract_time + VPos += 48 * remaining_time_stop / current_bps + End If + Else + remaining_time -= stop_subtract_time + End If + stop_contrib += stop_subtract_time + Next + Next + Return VPos + End Function + + + Private Sub ValidateSelection() + If vSelStart < 0 Then vSelLength += vSelStart : vSelHalf += vSelStart : vSelStart = 0 + If vSelStart > GetMaxVPosition() - 1 Then vSelLength += vSelStart - GetMaxVPosition() + 1 : vSelHalf += vSelStart - GetMaxVPosition() + 1 : vSelStart = GetMaxVPosition() - 1 + If vSelStart + vSelLength < 0 Then vSelLength = -vSelStart + If vSelStart + vSelLength > GetMaxVPosition() - 1 Then vSelLength = GetMaxVPosition() - 1 - vSelStart + + If Math.Sign(vSelHalf) <> Math.Sign(vSelLength) Then vSelHalf = 0 + If Math.Abs(vSelHalf) > Math.Abs(vSelLength) Then vSelHalf = vSelLength + End Sub + + + + Private Sub TVCM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TVCM.KeyDown + If e.KeyCode = Keys.Enter Then + Dim xTP As Double + If Not Double.TryParse(TVCM.Text, xTP) Then + TVCM.Text = 1.ToString() + Else + TVCM.Text = xTP.ToString() + End If + If CDbl(TVCM.Text) <= 0 Then + MsgBox(Strings.Messages.NegativeFactorError, MsgBoxStyle.Critical, Strings.Messages.Err) + TVCM.Text = 1.ToString() + TVCM.Focus() + TVCM.SelectAll() + Else + BVCApply_Click(BVCApply, New System.EventArgs) + End If + End If + End Sub + + Private Sub TVCM_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TVCM.LostFocus + Dim xTP As Double + If Not Double.TryParse(TVCM.Text, xTP) Then + TVCM.Text = 0.ToString() + Else + TVCM.Text = xTP.ToString() + End If + If CDbl(TVCM.Text) <= 0 Then + MsgBox(Strings.Messages.NegativeFactorError, MsgBoxStyle.Critical, Strings.Messages.Err) + TVCM.Text = 1.ToString() + TVCM.Focus() + TVCM.SelectAll() + End If + End Sub + + Private Sub TVCD_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TVCD.KeyDown + If e.KeyCode = Keys.Enter Then + Dim xTP As Double + If Not Double.TryParse(TVCD.Text, xTP) Then + TVCD.Text = 0.ToString() + Else + TVCD.Text = xTP.ToString() + End If + If CDbl(TVCD.Text) <= 0 Then + MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) + TVCD.Text = 1.ToString() + TVCD.Focus() + TVCD.SelectAll() + Else + BVCApply_Click(BVCApply, New System.EventArgs) + End If + End If + End Sub + + Private Sub TVCD_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TVCD.LostFocus + Dim xTP As Double + If Not Double.TryParse(TVCD.Text, xTP) Then + TVCD.Text = 0.ToString() + Else + TVCD.Text = xTP.ToString() + End If + If CDbl(TVCD.Text) <= 0 Then + MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) + TVCD.Text = 1.ToString() + TVCD.Focus() + TVCD.SelectAll() + End If + End Sub + + Private Sub TVCBPM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TVCBPM.KeyDown + If e.KeyCode = Keys.Enter Then + Dim xTP As Double + If Not Double.TryParse(TVCBPM.Text, xTP) Then + TVCBPM.Text = 0.ToString() + Else + TVCBPM.Text = xTP.ToString() + End If + If CDbl(TVCBPM.Text) <= 0 Then + MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) + TVCBPM.Text = (Notes(0).Value / 10000).ToString() + TVCBPM.Focus() + TVCBPM.SelectAll() + Else + BVCCalculate_Click(BVCCalculate, New System.EventArgs) + End If + End If + End Sub + + Private Sub TVCBPM_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TVCBPM.LostFocus + Dim xTP As Double + If Not Double.TryParse(TVCBPM.Text, xTP) Then + TVCBPM.Text = 0.ToString() + Else + TVCBPM.Text = xTP.ToString() + End If + If CDbl(TVCBPM.Text) <= 0 Then + MsgBox(Strings.Messages.NegativeDivisorError, MsgBoxStyle.Critical, Strings.Messages.Err) + TVCBPM.Text = (Notes(0).Value / 10000).ToString() + TVCBPM.Focus() + TVCBPM.SelectAll() + End If + End Sub + + Private Function FindNoteIndex(note As Note) As Integer + Dim xI1 As Integer + If NTInput Then + For xI1 = 1 To UBound(Notes) + If Notes(xI1).equalsNT(note) Then Return xI1 + Next + Else + For xI1 = 1 To UBound(Notes) + If Notes(xI1).equalsBMSE(note) Then Return xI1 + Next + End If + Return xI1 + End Function + + + + + Private Function sIA() As Integer + Return CInt(IIf(sI > UndoRedoCount - 1, 0, sI + 1)) + End Function + + Private Function sIM() As Integer + Return CInt(IIf(sI < 1, UndoRedoCount, sI - 1)) + End Function + + + + Private Sub TBUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBUndo.Click, mnUndo.Click + KMouseOver = -1 + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + If sUndo(sI).ofType = UndoRedo.opNoOperation Then Exit Sub + PerformCommand(sUndo(sI)) + sI = sIM() + + TBUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation + TBRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation + mnUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation + mnRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation + End Sub + + Private Sub TBRedo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBRedo.Click, mnRedo.Click + Console.WriteLine("Redo sI " + sI.ToString()) + KMouseOver = -1 + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + If sRedo(sIA).ofType = UndoRedo.opNoOperation Then Exit Sub + PerformCommand(sRedo(sIA)) + sI = sIA() + + Console.WriteLine("Redo sI " + sI.ToString()) + + TBUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation + TBRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation + mnUndo.Enabled = sUndo(sI).ofType <> UndoRedo.opNoOperation + mnRedo.Enabled = sRedo(sIA).ofType <> UndoRedo.opNoOperation + End Sub + + 'Undo appends before, Redo appends after. + 'After a sequence of Commands, + ' Undo will be the first one to execute, + ' Redo will be the last one to execute. + 'Remember to save the first Redo. + + 'In case where undo is Nothing: Dont worry. + 'In case where redo is Nothing: + ' If only one redo is in a sequence, put Nothing. + ' If several redo are in a sequence, + ' Create Void first. + ' Record its reference into a seperate copy. (xBaseRedo = xRedo) + ' Use this xRedo as the BaseRedo. + ' When calling AddUndo subroutine, use xBaseRedo.Next as cRedo. + + 'Dim xUndo As UndoRedo.LinkedURCmd = Nothing + 'Dim xRedo As UndoRedo.LinkedURCmd = Nothing + '... 'Me.RedoRemoveNote(K(xI1), True, xUndo, xRedo) + 'AddUndo(xUndo, xRedo) + + 'Dim xUndo As UndoRedo.LinkedURCmd = Nothing + 'Dim xRedo As New UndoRedo.Void + 'Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + '... 'Me.RedoRemoveNote(K(xI1), True, xUndo, xRedo) + 'AddUndo(xUndo, xBaseRedo.Next) + + Private Sub TBAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + Dim Aboutboxx1 As New AboutBox1() + 'If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\About.png") Then + Aboutboxx1.bBitmap = My.Resources.About0 + 'Aboutboxx1.SelectBitmap() + Aboutboxx1.ClientSize = New Size(1000, 500) + Aboutboxx1.ClickToCopy.Visible = True + Aboutboxx1.ShowDialog(Me) + 'Else + ' MsgBox(locale.Messages.cannotfind & " ""About.png""", MsgBoxStyle.Critical, locale.Messages.err) + 'End If + End Sub + + Private Sub TBVOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBVOptions.Click, mnVOptions.Click + + Dim xDiag As New OpVisual(vo, column, LWAV.Font) + xDiag.ShowDialog(Me) + UpdateColumnsX() + RefreshPanelAll() + End Sub + + Private Sub TBVCOptions_Click(sender As Object, e As EventArgs) Handles mnVCOptions.Click, BWAVColorOverride.Click + Dim xDiag As New OpVisualOverride(COverrides, hWAV, COverridesSaveOption) + ' Save settings + If xDiag.ShowDialog() = Windows.Forms.DialogResult.OK Then + COverrides = CType(xDiag.COverrides.Clone(), ColorOverride()) + If COverridesSaveOption <> xDiag.CoBSave.SelectedIndex Then + COverridesSaveOption = xDiag.CoBSave.SelectedIndex + + If Not IsNothing(COverrides) Then If COverrides.Length > 0 Then WriteColorOverride(FileName, True) + Else + If Not IsNothing(COverrides) Then If COverrides.Length > 0 Then WriteColorOverride(FileName, False) + + End If + End If + + ' Load settings if chosen + If xDiag.CoBLoad.SelectedIndex <> -1 Then + COverridesSaveOption = xDiag.CoBLoad.SelectedIndex + LoadColorOverride(FileName) + + TBVCOptions_Click(sender, New EventArgs) + End If + + LoadColorOverrideActive() + ' LWAV.Refresh() + + UpdateColumnsX() + RefreshPanelAll() + End Sub + + ' Private Sub LWAV_DrawItem(sender As Object, e As DrawItemEventArgs) Handles LWAV.DrawItem + ' e.DrawBackground() + ' Dim c As Color + ' GetColor(New Note(0, 0, (e.Index + 1) * 10000, 0), c, c, 1, COverridesActive) + ' e.Graphics.FillRectangle(New SolidBrush(c), e.Bounds) + ' e.Graphics.DrawString(LWAV.Items.Item(e.Index).ToString(), e.Font, New SolidBrush(e.ForeColor), e.Bounds) + ' e.DrawFocusRectangle() + ' e.Graphics.Dispose() + ' End Sub + + Private Sub AddToPOWAV(ByVal xPath() As String) + Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer + LWAV.SelectedIndices.CopyTo(xIndices, 0) + If xIndices.Length = 0 Then Exit Sub + + If xIndices.Length < xPath.Length Then + Dim i As Integer = xIndices.Length + Dim currWavIndex As Integer = xIndices(UBound(xIndices)) + 1 + ReDim Preserve xIndices(UBound(xPath)) + + Do While i < xIndices.Length And currWavIndex <= 1294 + Do While currWavIndex <= 1294 AndAlso hWAV(currWavIndex + 1) <> "" + currWavIndex += 1 + Loop + If currWavIndex > 1294 Then Exit Do + + xIndices(i) = currWavIndex + currWavIndex += 1 + i += 1 + Loop + + If currWavIndex > 1294 Then + ReDim Preserve xPath(i - 1) + ReDim Preserve xIndices(i - 1) + End If + End If + + 'Dim xI2 As Integer = 0 + For xI1 As Integer = 0 To UBound(xPath) + 'If xI2 > UBound(xIndices) Then Exit For + 'hWAV(xIndices(xI2) + 1) = GetFileName(xPath(xI1)) + 'LWAV.Items.Item(xIndices(xI2)) = C10to36(xIndices(xI2) + 1) & ": " & GetFileName(xPath(xI1)) + hWAV(xIndices(xI1) + 1) = GetFileName(xPath(xI1)) + LWAV.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " & GetFileName(xPath(xI1)) + 'xI2 += 1 + ' Add waveforms to wLWAV + If ShowWaveform Then wLWAV(xIndices(xI1) + 1) = LoadWaveForm(xPath(xI1)) + Next + + LWAV.SelectedIndices.Clear() + For xI1 As Integer = 0 To CInt(IIf(UBound(xIndices) < UBound(xPath), UBound(xIndices), UBound(xPath))) + LWAV.SelectedIndices.Add(xIndices(xI1)) + Next + + If IsSaved Then SetIsSaved(False) + RefreshPanelAll() + End Sub + + Private Sub POWAV_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POWAV.DragDrop + ReDim DDFileName(-1) + If Not e.Data.GetDataPresent(DataFormats.FileDrop) Then Return + + Dim xOrigPath() As String = CType(e.Data.GetData(DataFormats.FileDrop), String()) + Dim xPath() As String = FilterFileBySupported(xOrigPath, SupportedAudioExtension) + Array.Sort(xPath) + If xPath.Length = 0 Then + RefreshPanelAll() + Exit Sub + End If + + AddToPOWAV(xPath) + End Sub + + Private Sub POWAV_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POWAV.DragEnter + If e.Data.GetDataPresent(DataFormats.FileDrop) Then + e.Effect = DragDropEffects.Copy + DDFileName = FilterFileBySupported(CType(e.Data.GetData(DataFormats.FileDrop), String()), SupportedAudioExtension) + Else + e.Effect = DragDropEffects.None + End If + RefreshPanelAll() + End Sub + + Private Sub POWAV_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles POWAV.DragLeave + ReDim DDFileName(-1) + RefreshPanelAll() + End Sub + + Private Sub POWAV_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POWAV.Resize + LWAV.Height = POWAV.Height - 25 + End Sub + Private Sub POBeat_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POBeat.Resize + LBeat.Height = POBeat.Height - 25 + End Sub + Private Sub POExpansion_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POExpansion.Resize + TExpansion.Height = POExpansion.Height - 25 - BExpansion.Height + End Sub + + Private Sub AddToPOBMP(ByVal xPath() As String) + Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer + LBMP.SelectedIndices.CopyTo(xIndices, 0) + If xIndices.Length = 0 Then Exit Sub + + If xIndices.Length < xPath.Length Then + Dim i As Integer = xIndices.Length + Dim currBMPIndex As Integer = xIndices(UBound(xIndices)) + 1 + ReDim Preserve xIndices(UBound(xPath)) + + Do While i < xIndices.Length And currBMPIndex <= 1294 + Do While currBMPIndex <= 1294 AndAlso hBMP(currBMPIndex + 1) <> "" + currBMPIndex += 1 + Loop + If currBMPIndex > 1294 Then Exit Do + + xIndices(i) = currBMPIndex + currBMPIndex += 1 + i += 1 + Loop + + If currBMPIndex > 1294 Then + ReDim Preserve xPath(i - 1) + ReDim Preserve xIndices(i - 1) + End If + End If + + 'Dim xI2 As Integer = 0 + For xI1 As Integer = 0 To UBound(xPath) + 'If xI2 > UBound(xIndices) Then Exit For + 'hBMP(xIndices(xI2) + 1) = GetFileName(xPath(xI1)) + 'LBMP.Items.Item(xIndices(xI2)) = C10to36(xIndices(xI2) + 1) & ": " & GetFileName(xPath(xI1)) + hBMP(xIndices(xI1) + 1) = GetFileName(xPath(xI1)) + LBMP.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " & GetFileName(xPath(xI1)) + 'xI2 += 1 + ' Add BMPeforms to wLBMP + Next + + LBMP.SelectedIndices.Clear() + For xI1 As Integer = 0 To CInt(IIf(UBound(xIndices) < UBound(xPath), UBound(xIndices), UBound(xPath))) + LBMP.SelectedIndices.Add(xIndices(xI1)) + Next + + If IsSaved Then SetIsSaved(False) + RefreshPanelAll() + End Sub + + Private Sub POBMP_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POBMP.DragDrop + ReDim DDFileName(-1) + If Not e.Data.GetDataPresent(DataFormats.FileDrop) Then Return + + Dim xOrigPath() As String = CType(e.Data.GetData(DataFormats.FileDrop), String()) + Dim xPath() As String = FilterFileBySupported(xOrigPath, SupportedImageExtension) + Array.Sort(xPath) + If xPath.Length = 0 Then + RefreshPanelAll() + Exit Sub + End If + + AddToPOBMP(xPath) + End Sub + + Private Sub POBMP_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles POBMP.DragEnter + If e.Data.GetDataPresent(DataFormats.FileDrop) Then + e.Effect = DragDropEffects.Copy + DDFileName = FilterFileBySupported(CType(e.Data.GetData(DataFormats.FileDrop), String()), SupportedImageExtension) + Else + e.Effect = DragDropEffects.None + End If + RefreshPanelAll() + End Sub + + Private Sub POBMP_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles POBMP.DragLeave + ReDim DDFileName(-1) + RefreshPanelAll() + End Sub + + Private Sub POBMP_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles POBMP.Resize + LBMP.Height = POBMP.Height - 25 + End Sub + + Private Sub mn_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) + Dim TSMIS As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + TSMIS.ForeColor = Color.White + End Sub + Private Sub mn_DropDownOpened(ByVal sender As Object, ByVal e As System.EventArgs) + Dim TSMIS As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + TSMIS.ForeColor = Color.Black + End Sub + Private Sub mn_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) + Dim TSMIS As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + If TSMIS.Pressed Then Return + TSMIS.ForeColor = Color.Black + End Sub + Private Sub mn_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) + Dim TSMIS As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + If TSMIS.Pressed Then Return + TSMIS.ForeColor = Color.White + End Sub + + Private Sub TBPOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBPOptions.Click, mnPOptions.Click + Dim xDOp As New OpPlayer(CurrentPlayer) + xDOp.ShowDialog(Me) + End Sub + + Private Sub THGenre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ + THGenre.TextChanged, THTitle.TextChanged, THArtist.TextChanged, THPlayLevel.TextChanged, CHRank.SelectedIndexChanged, + THSubTitle.TextChanged, THSubArtist.TextChanged, THStageFile.TextChanged, THBanner.TextChanged, THBackBMP.TextChanged, + CHDifficulty.SelectedIndexChanged, THExRank.TextChanged, THTotal.TextChanged, THComment.TextChanged, TExpansion.TextChanged + If IsSaved Then SetIsSaved(False) + End Sub + + Private Sub CHLnObj_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHLnObj.SelectedIndexChanged + If IsSaved Then SetIsSaved(False) + LnObj = CHLnObj.SelectedIndex + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub ConvertBMSE2NT(Optional xIFrom As Integer = 1) + ReDim SelectedNotes(-1) + If xIFrom = 1 Then SortByVPositionInsertion() + + For i2 As Integer = xIFrom To UBound(Notes) + Notes(i2).Length = 0.0# + Next + + Dim i As Integer = xIFrom + Dim j As Integer + Dim xUbound As Integer = UBound(Notes) + + Do While i <= xUbound + If Not Notes(i).LongNote Then i += 1 : Continue Do + + For j = i + 1 To xUbound + If Notes(j).ColumnIndex <> Notes(i).ColumnIndex Then Continue For + + If Notes(j).LongNote Then + Notes(i).Length = Notes(j).VPosition - Notes(i).VPosition + For j2 As Integer = j To xUbound - 1 + Notes(j2) = Notes(j2 + 1) + Next + xUbound -= 1 + Exit For + + ElseIf Notes(j).Value \ 10000 = LnObj Then + Exit For + + End If + Next + + i += 1 + Loop + + ReDim Preserve Notes(xUbound) + + For i = xIFrom To xUbound + Notes(i).LongNote = False + Next + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + End Sub + + Private Sub ConvertNT2BMSE(Optional xIFrom As Integer = 1) + ReDim SelectedNotes(-1) + Dim xK(xIFrom - 1) As Note + For xI = 0 To xIFrom - 1 + xK(xI) = Notes(xI) + Next + + For xI1 As Integer = xIFrom To UBound(Notes) + ReDim Preserve xK(UBound(xK) + 1) + With xK(UBound(xK)) + .ColumnIndex = Notes(xI1).ColumnIndex + .LongNote = Notes(xI1).Length > 0 + .Landmine = Notes(xI1).Landmine + .Value = Notes(xI1).Value + .VPosition = Notes(xI1).VPosition + .Selected = Notes(xI1).Selected + .Hidden = Notes(xI1).Hidden + .Ghost = Notes(xI1).Ghost + .Comment = Notes(xI1).Comment + End With + + If Notes(xI1).Length > 0 Then + ReDim Preserve xK(UBound(xK) + 1) + With xK(UBound(xK)) + .ColumnIndex = Notes(xI1).ColumnIndex + .LongNote = True + .Landmine = False + .Value = Notes(xI1).Value + .VPosition = Notes(xI1).VPosition + Notes(xI1).Length + .Selected = Notes(xI1).Selected + .Hidden = Notes(xI1).Hidden + .Ghost = Notes(xI1).Ghost + .Comment = Notes(xI1).Comment + End With + End If + Next + + Notes = xK + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + End Sub + + Private Sub TBWavIncrease_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBWavIncrease.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + TBWavIncrease.Checked = Not TBWavIncrease.Checked + Me.RedoWavIncrease(TBWavIncrease.Checked, xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) + End Sub + + Private Sub TBNTInput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBNTInput.Click, mnNTInput.Click + If TypeOf sender Is ToolStripButton Then + Dim senderC As ToolStripButton = CType(sender, ToolStripButton) + NTInput = senderC.Checked + ElseIf TypeOf sender Is ToolStripMenuItem Then + Dim senderC As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + NTInput = senderC.Checked + End If + + RefreshItemsByNTInput() + + bAdjustLength = False + bAdjustUpper = False + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Me.RedoRemoveNoteAll(False, xUndo, xRedo) + Me.RedoNT(NTInput, False, xUndo, xRedo) + If NTInput Then + ConvertBMSE2NT() + Else + ConvertNT2BMSE() + End If + Me.RedoAddNoteAll(False, xUndo, xRedo) + + AddUndo(xUndo, xBaseRedo.Next) + RefreshPanelAll() + End Sub + + Private Sub RefreshItemsByNTInput() + TBNTInput.Checked = NTInput + mnNTInput.Checked = NTInput + POBLongObjNT.Visible = NTInput + POBLongNTObj.Visible = NTInput + POBLong.Visible = Not NTInput + POBLongShort.Visible = Not NTInput + End Sub + + Private Sub THBPM_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles THBPM.ValueChanged + If Notes IsNot Nothing Then Notes(0).Value = CLng(THBPM.Value * 10000) : RefreshPanelAll() + If IsSaved Then SetIsSaved(False) + End Sub + + Private Sub TWPosition_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPosition.ValueChanged + wPosition = TWPosition.Value + TWPosition2.Value = CInt(IIf(wPosition > TWPosition2.Maximum, TWPosition2.Maximum, wPosition)) + RefreshPanelAll() + End Sub + + Private Sub TWLeft_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWLeft.ValueChanged + wLeft = CInt(TWLeft.Value) + TWLeft2.Value = CInt(IIf(wLeft > TWLeft2.Maximum, TWLeft2.Maximum, wLeft)) + RefreshPanelAll() + End Sub + + Private Sub TWWidth_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWWidth.ValueChanged + wWidth = CInt(TWWidth.Value) + TWWidth2.Value = CInt(IIf(wWidth > TWWidth2.Maximum, TWWidth2.Maximum, wWidth)) + RefreshPanelAll() + End Sub + + Private Sub TWPrecision_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPrecision.ValueChanged + ' (0 - 100) → (0 - 20) + wPrecision = TWPrecision.Value / 5 + TWPrecision2.Value = CInt(IIf(TWPrecision.Value > TWPrecision2.Maximum, TWPrecision2.Maximum, TWPrecision.Value)) + RefreshPanelAll() + End Sub + + Private Sub TWTransparency_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWTransparency.ValueChanged + TWTransparency2.Value = CInt(TWTransparency.Value) + vo.pBGMWav.Color = Color.FromArgb(CInt(TWTransparency.Value), vo.pBGMWav.Color) + RefreshPanelAll() + End Sub + + Private Sub TWSaturation_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWSaturation.ValueChanged + Dim xColor As Color = vo.pBGMWav.Color + TWSaturation2.Value = CInt(TWSaturation.Value) + vo.pBGMWav.Color = HSL2RGB(CInt(xColor.GetHue), CInt(TWSaturation.Value), CInt(xColor.GetBrightness * 1000), xColor.A) + RefreshPanelAll() + End Sub + + Private Sub TWPosition2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPosition2.Scroll + TWPosition.Value = TWPosition2.Value + End Sub + + Private Sub TWLeft2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWLeft2.Scroll + TWLeft.Value = TWLeft2.Value + End Sub + + Private Sub TWWidth2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWWidth2.Scroll + TWWidth.Value = TWWidth2.Value + End Sub + + Private Sub TWPrecision2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWPrecision2.Scroll + TWPrecision.Value = TWPrecision2.Value + End Sub + + Private Sub TWTransparency2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWTransparency2.Scroll + TWTransparency.Value = TWTransparency2.Value + End Sub + + Private Sub TWSaturation2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TWSaturation2.Scroll + TWSaturation.Value = TWSaturation2.Value + End Sub + + Private Sub TBLangDef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBLangDef.Click + DispLang = "" + MsgBox(Strings.Messages.PreferencePostpone, MsgBoxStyle.Information) + End Sub + + Private Sub TBLangRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBLangRefresh.Click + For xI1 As Integer = cmnLanguage.Items.Count - 1 To 3 Step -1 + Try + cmnLanguage.Items.RemoveAt(xI1) + Catch ex As Exception + End Try + Next + + If Not Directory.Exists(My.Application.Info.DirectoryPath & "\Data") Then My.Computer.FileSystem.CreateDirectory(My.Application.Info.DirectoryPath & "\Data") + Dim xFileNames() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(My.Application.Info.DirectoryPath & "\Data").GetFiles("*.Lang.xml") + + For Each xStr As FileInfo In xFileNames + LoadLocaleXML(xStr) + Next + End Sub + + Private Sub TBTotalValue_Click(sender As Object, e As EventArgs) Handles TBTotalValue.Click, mnTOTAL.Click + Dim xDiag As New OpTotal(CInt(TBStatistics.Text), TotalOption, TotalMultiplier, TotalGlobalMultiplier, TotalDecimal, TotalDisplayValue, TotalDisplayText, TotalAutofill) + If xDiag.ShowDialog() = Windows.Forms.DialogResult.OK Then + With xDiag + TotalOption = .TotalOption + TotalMultiplier = .NMultiplier.Value + TotalGlobalMultiplier = .NGlobalMultiplier.Value + TotalDecimal = CInt(.NDecimal.Value) + TotalDisplayValue = .CBDisplayValue.Checked + TotalDisplayText = .CBDisplayText.Checked + TotalAutofill = .CBAutoFill.Checked + End With + + CalculateTotalPlayableNotes() + End If + End Sub + + Private Sub THTotal_KeyDown(sender As Object, e As KeyEventArgs) Handles THTotal.KeyDown + TotalAutofill = False + End Sub + + Private Sub UpdateColumnsX() + column(0).Left = 0 + 'If col(0).Width = 0 Then col(0).Visible = False + + For xI1 As Integer = 1 To UBound(column) + column(xI1).Left = column(xI1 - 1).Left + CInt(IIf(column(xI1 - 1).isVisible, column(xI1 - 1).Width, 0)) + 'If col(xI1).Width = 0 Then col(xI1).Visible = False + Next + HSL.Maximum = nLeft(gColumns) + column(niB).Width + HS.Maximum = nLeft(gColumns) + column(niB).Width + HSR.Maximum = nLeft(gColumns) + column(niB).Width + End Sub + + Private Sub CHPlayer_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHPlayer.SelectedIndexChanged + If CHPlayer.SelectedIndex = -1 Then CHPlayer.SelectedIndex = 0 + + iPlayer = CHPlayer.SelectedIndex + Dim xGP2 As Boolean = iPlayer <> 0 + column(niD1).isVisible = xGP2 + column(niD2).isVisible = xGP2 + column(niD3).isVisible = xGP2 + column(niD4).isVisible = xGP2 + column(niD5).isVisible = xGP2 + column(niD6).isVisible = xGP2 + column(niD7).isVisible = xGP2 + column(niD8).isVisible = xGP2 + column(niS3).isVisible = xGP2 + + For xI1 As Integer = 1 To UBound(Notes) + Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) + Next + 'AddUndo(xUndo, xRedo) + UpdateColumnsX() + + If IsApplicationInitializing Then Exit Sub + RefreshPanelAll() + End Sub + + Private Sub CGB_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGB.ValueChanged + gColumns = CInt(niB + CGB.Value - 1) + UpdateColumnsX() + RefreshPanelAll() + End Sub + + Private Sub TBGOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBGOptions.Click, mnGOptions.Click + Dim xTE As Integer + Select Case UCase(EncodingToString(TextEncoding)) ' az: wow seriously? is there really no better way? + Case "SYSTEM ANSI" : xTE = 0 + Case "LITTLE ENDIAN UTF16" : xTE = 1 + Case "ASCII" : xTE = 2 + Case "BIG ENDIAN UTF16" : xTE = 3 + Case "LITTLE ENDIAN UTF32" : xTE = 4 + Case "UTF7" : xTE = 5 + Case "UTF8" : xTE = 6 + Case "SJIS" : xTE = 7 + Case "EUC-KR" : xTE = 8 + Case Else : xTE = 0 + End Select + + Dim xDiag As New OpGeneral(gWheel, gPgUpDn, MiddleButtonMoveMethod, xTE, CInt(192.0R / BMSGridLimit), ErrorJackBPM, ErrorJackTH, gLNGap, TempFileName, + AutoSaveInterval, BeepWhileSaved, PreloadBMSStruct, BPMx1296, STOPx1296, AudioLine, TemplateSnapToVPosition, PastePatternToVPosition, + AutoFocusMouseEnter, FirstClickDisabled, ClickStopPreview) + + If xDiag.ShowDialog() = Windows.Forms.DialogResult.OK Then + With xDiag + gWheel = .zWheel + gPgUpDn = .zPgUpDn + TextEncoding = .zEncoding + 'SortingMethod = .zSort + MiddleButtonMoveMethod = .zMiddle + AutoSaveInterval = .zAutoSave + BMSGridLimit = 192.0R / .zGridPartition + ErrorJackBPM = .nJackBPM.Value + ErrorJackTH = .nJackTH.Value + ErrorJackSpeed = 60 * 4 / .nJackBPM.Value / .nJackTH.Value + gLNGap = .NLNGap.Value + TempFileName = .TTemp.Text + BeepWhileSaved = .cBeep.Checked + PreloadBMSStruct = .cPreloadBMSStruct.Checked + BPMx1296 = .cBpm1296.Checked + STOPx1296 = .cStop1296.Checked + AudioLine = .cAudioLine.Checked + TemplateSnapToVPosition = .cTemplateSnapToVPosition.Checked + PastePatternToVPosition = .cPastePatternToVPosition.Checked + AutoFocusMouseEnter = .cMEnterFocus.Checked + FirstClickDisabled = .cMClickFocus.Checked + ClickStopPreview = .cMStopPreview.Checked + End With + If AutoSaveInterval > 0 Then AutoSaveTimer.Interval = AutoSaveInterval + AutoSaveTimer.Enabled = AutoSaveInterval > 0 + End If + End Sub + + Private Sub TBKOptions_Click(sender As Object, e As EventArgs) Handles TBKOptions.Click, mnKOptions.Click + Dim xDiag As New OpKeybinding(Keybindings) + If xDiag.ShowDialog() = Windows.Forms.DialogResult.OK Then + With xDiag + + ' Rename shortcutstrings + For Each keybind In .Keybinds + For i = 0 To UBound(Keybindings) + If Keybindings(i).OpName = keybind.OpName Then + Keybindings(i) = keybind + Exit For + End If + Next + RenameShortcut(keybind) + Next + End With + End If + End Sub + + Private Sub RenameShortcut(ByVal keybind As Keybinding) + Dim Kb0 = keybind.Combo(0) + Dim KbAll = Join(keybind.Combo, ", ") + Select Case keybind.OpVar + Case 103 + RenameShortcutKb0(CGSnap.Text, Kb0) + Case 102 + RenameShortcutKb0(CGDisableVertical.Text, Kb0) + Case 104 + POBLong.ShortcutKeyDisplayString = Kb0 + Case 105 + POBShort.ShortcutKeyDisplayString = Kb0 + Case 106 + POBLongShort.ShortcutKeyDisplayString = Kb0 + Case 107 + POBAutoLongVPosition.ShortcutKeyDisplayString = Kb0 + Case 108 + POBAutoLongColumn.ShortcutKeyDisplayString = Kb0 + Case 111 + mnUndo.ShortcutKeyDisplayString = Kb0 + RenameShortcutKb0(TBUndo.Text, KbAll) + Case 112 + mnRedo.ShortcutKeyDisplayString = Kb0 + RenameShortcutKb0(TBRedo.Text, KbAll) + Case 113 + mnCut.ShortcutKeyDisplayString = Kb0 + RenameShortcutKb0(TBCut.Text, KbAll) + Case 114 + mnCopy.ShortcutKeyDisplayString = Kb0 + RenameShortcutKb0(TBCopy.Text, KbAll) + Case 115 + mnPaste.ShortcutKeyDisplayString = Kb0 + RenameShortcutKb0(TBPaste.Text, KbAll) + Case 116 + mnPastePattern.ShortcutKeyDisplayString = Kb0 + RenameShortcutKb0(TBPastePattern.Text, KbAll) + Case 117 + mnSelectAll.ShortcutKeyDisplayString = Kb0 + Case 109 + mnTechnicalErrorCheck.ShortcutKeyDisplayString = Kb0 + End Select + End Sub + + Private Sub RenameShortcutKb0(ByRef xStr As String, ByVal Kb As String) + Dim IParenthesis = xStr.LastIndexOf("(") + If IParenthesis = -1 Then Return + xStr = xStr.Substring(0, IParenthesis) & "(" & Kb & ")" + End Sub + + Private Sub POBLongObjNT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBLongObjNT.Click + If Not NTInput OrElse LnObj = 0 Then Exit Sub + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected OrElse Notes(xI1).Ghost OrElse LnObj <> Notes(xI1).Value / 10000 OrElse Notes(xI1).LNPair = 0 Then Notes(xI1).Selected = False : Continue For + + Dim LNPair As Integer = Notes(xI1).LNPair + Dim xLen As Double = Notes(xI1).VPosition - Notes(LNPair).VPosition + Me.RedoLongNoteModify(Notes(LNPair), Notes(LNPair).VPosition, xLen, xUndo, xRedo) + Notes(LNPair).Length = Notes(xI1).VPosition - Notes(LNPair).VPosition + Next + + Me.RedoRemoveNoteSelected(True, xUndo, xRedo) + RemoveNotes(True) + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBLongNTObj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBLongNTObj.Click + If Not NTInput OrElse LnObj = 0 Then Exit Sub + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected OrElse Notes(xI1).Ghost OrElse Notes(xI1).Length = 0 Then Continue For + + Dim vPos As Double = Notes(xI1).VPosition + Notes(xI1).Length + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, 0, xUndo, xRedo) + Notes(xI1).Length = 0 + + Dim NoteLNObj As Note = CType(Notes(xI1), Note) + NoteLNObj.VPosition = vPos + NoteLNObj.Value = LnObj * 10000 + RedoAddNote(NoteLNObj, xUndo, xRedo) + AddNote(NoteLNObj) + Next + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + + + Private Sub POBLong_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBLong.Click + If NTInput Then Exit Sub + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, True, xUndo, xRedo) + Notes(xI1).LongNote = True + Next + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBShort.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + If Not NTInput Then + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, 0, xUndo, xRedo) + Notes(xI1).LongNote = False + Next + + Else + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, 0, xUndo, xRedo) + Notes(xI1).Length = 0 + Next + End If + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBNormalLong_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBLongShort.Click + If NTInput Then Exit Sub + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, Not Notes(xI1).LongNote, xUndo, xRedo) + Notes(xI1).LongNote = Not Notes(xI1).LongNote + Next + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBAutoLongVPosition_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBAutoLongVPosition.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + ' Change to NTInput because easier to code + If Not NTInput Then + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertBMSE2NT() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + For i = 1 To UBound(Notes) + If Notes(i).Selected Then Console.WriteLine(i) + Next + + Dim xIPrev(-1) As Integer + Dim xI1 = 1 + Do While xI1 <= UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then xI1 += 1 : Continue Do + + ' Get xICurrCol to see if LN shortening is required due to being in the same column as the next note + Dim xICurr = GetNotesBySelectedAndVPosition(Notes(xI1).VPosition) + Dim xICurrCol(UBound(xICurr)) As Integer + For i = 0 To UBound(xICurrCol) + xICurrCol(i) = Notes(xICurr(i)).ColumnIndex + Next + If xIPrev.Length <> 0 Then + For Each xIPrevIndv In xIPrev + Dim xLen As Double = Math.Max(Notes(xI1).VPosition - Notes(xIPrevIndv).VPosition - + CDbl(IIf(xICurrCol.Contains(Notes(xIPrevIndv).ColumnIndex), gLNGap * 192 / 4, 0)), + 0) + + RedoLongNoteModify(Notes(xIPrevIndv), Notes(xIPrevIndv).VPosition, xLen, xUndo, xRedo) + Notes(xIPrevIndv).Length = xLen + + Next + End If + xIPrev = xICurr + xI1 = xIPrev(UBound(xIPrev)) + 1 + Loop + + ' If xIPrev.Length <> 0 Then + ' For Each xIPrevIndv In xIPrev + ' Dim xWLWAV As Integer = CInt(Notes(xIPrevIndv).Value / 10000) + ' If wLWAV(xWLWAV).Duration = 0 Then wLWAV(xWLWAV) = LoadDuration(ExcludeFileName(FileName) & "\" & hWAV(xWLWAV)) + ' + ' Dim xLen As Double = Math.Max(GetVPositionFromTime(GetTimeFromVPosition(Notes(xIPrevIndv).VPosition) + + ' wLWAV(xWLWAV).Duration) - + ' Notes(xIPrevIndv).VPosition - gLNGap * 192 / 4, 0) + ' + ' RedoLongNoteModify(Notes(xIPrevIndv), Notes(xIPrevIndv).VPosition, xLen, xUndo, xRedo) + ' Notes(xIPrevIndv).Length = xLen + ' Next + ' End If + + If Not NTInput Then + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertNT2BMSE() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBAutoLongColumn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBAutoLongColumn.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + ' Change to NTInput because easier to code + If Not NTInput Then + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertBMSE2NT() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + Dim xIPrev(UBound(gXKeyCol)) As Integer + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected OrElse Notes(xI1).Ghost OrElse Not gXKeyCol.Contains(Notes(xI1).ColumnIndex) Then Continue For + + Dim xICol = Array.IndexOf(gXKeyCol, Notes(xI1).ColumnIndex) + If xIPrev(xICol) <> 0 Then + Dim xLen As Double = Math.Max(Notes(xI1).VPosition - Notes(xIPrev(xICol)).VPosition - gLNGap * 192 / 4, 0) + + RedoLongNoteModify(Notes(xIPrev(xICol)), Notes(xIPrev(xICol)).VPosition, xLen, xUndo, xRedo) + Notes(xIPrev(xICol)).Length = xLen + End If + xIPrev(xICol) = xI1 + Next + + ' For Each xIPrevIndv In xIPrev + ' If xIPrevIndv <> 0 Then + ' Dim xWLWAV As Integer = CInt(Notes(xIPrevIndv).Value / 10000) + ' If wLWAV(xWLWAV).Duration = 0 Then wLWAV(xWLWAV) = LoadDuration(ExcludeFileName(FileName) & "\" & hWAV(xWLWAV)) + ' + ' Dim xLen As Double = Math.Max(GetVPositionFromTime(GetTimeFromVPosition(Notes(xIPrevIndv).VPosition) + + ' wLWAV(xWLWAV).Duration) - + ' Notes(xIPrevIndv).VPosition - gLNGap * 192 / 4, 0) + ' + ' RedoLongNoteModify(Notes(xIPrevIndv), Notes(xIPrevIndv).VPosition, xLen, xUndo, xRedo) + ' Notes(xIPrevIndv).Length = xLen + ' End If + ' Next + + If Not NTInput Then + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertNT2BMSE() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBHidden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBHidden.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected OrElse Notes(xI1).Landmine OrElse Notes(xI1).Ghost Then Continue For + + Me.RedoHiddenNoteModify(Notes(xI1), True, True, xUndo, xRedo) + Notes(xI1).Hidden = True + Next + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBVisible_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBVisible.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoHiddenNoteModify(Notes(xI1), False, True, xUndo, xRedo) + Notes(xI1).Hidden = False + Next + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBHiddenVisible_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBHiddenVisible.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 As Integer = 1 To UBound(Notes) + If Not Notes(xI1).Selected OrElse Notes(xI1).Landmine OrElse Notes(xI1).Ghost Then Continue For + + Me.RedoHiddenNoteModify(Notes(xI1), Not Notes(xI1).Hidden, True, xUndo, xRedo) + Notes(xI1).Hidden = Not Notes(xI1).Hidden + Next + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBModify_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles POBModify.Click + Dim xNum As Boolean = False + Dim xLbl As Boolean = False + Dim xI1 As Integer + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected AndAlso IsColumnNumeric(Notes(xI1).ColumnIndex) Then xNum = True : Exit For + Next + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected AndAlso Not IsColumnNumeric(Notes(xI1).ColumnIndex) Then xLbl = True : Exit For + Next + If Not (xNum Or xLbl) Then Exit Sub + + If xNum Then + Dim xD1 As Long = CLng(InputBox(Strings.Messages.PromptEnterNumeric, Text)) * 10000 + If Not xD1 = 0 Then + If xD1 <= 0 Then xD1 = 1 + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 = 1 To UBound(Notes) + If Not IsColumnNumeric(Notes(xI1).ColumnIndex) Or Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoRelabelNote(Notes(xI1), xD1, xUndo, xRedo) + Notes(xI1).Value = xD1 + Next + AddUndo(xUndo, xBaseRedo.Next) + End If + End If + + If xLbl Then + Dim xStr As String = UCase(Trim(InputBox(Strings.Messages.PromptEnter, Me.Text))) + + If Len(xStr) <> 0 Then + Dim Valid As Boolean = True + + If xStr = "00" Or xStr = "0" Then Valid = False + If Not Len(xStr) = 1 And Not Len(xStr) = 2 Then Valid = False + + Dim xI3 As Integer = Asc(Mid(xStr, 1, 1)) + If Not ((xI3 >= 48 And xI3 <= 57) Or (xI3 >= 65 And xI3 <= 90)) Then Valid = False + If Len(xStr) = 2 Then + Dim xI4 As Integer = Asc(Mid(xStr, 2, 1)) + If Not ((xI4 >= 48 And xI4 <= 57) Or (xI4 >= 65 And xI4 <= 90)) Then Valid = False + End If + + If Valid Then + Dim xVal As Integer = C36to10(xStr) * 10000 + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + For xI1 = 1 To UBound(Notes) + If IsColumnNumeric(Notes(xI1).ColumnIndex) Or Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + Me.RedoRelabelNote(Notes(xI1), xVal, xUndo, xRedo) + Notes(xI1).Value = xVal + Next + AddUndo(xUndo, xBaseRedo.Next) + Else + MsgBox(Strings.Messages.InvalidLabel, MsgBoxStyle.Critical, Strings.Messages.Err) + End If + End If + End If + + RefreshPanelAll() + End Sub + + Private Sub POBMirror_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBMirror.Click + Dim xI1 As Integer + Dim xI2 As Integer + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + 'xRedo &= sCmdKM(niA1, .VPosition, .Value, IIf(NTInput, .Length, .LongNote), .Hidden, RealColumnToEnabled(niA7) - RealColumnToEnabled(niA1), 0, True) & vbCrLf + 'xUndo &= sCmdKM(niA7, .VPosition, .Value, IIf(NTInput, .Length, .LongNote), .Hidden, RealColumnToEnabled(niA1) - RealColumnToEnabled(niA7), 0, True) & vbCrLf + + ' gXKeyCol: Unmodified array + ' Array 1: Modified array based on range + ' Array R: Array 1 reversed + + ' New function: Declare an array to see the range of selected notes. B columns ignored. + Dim xRangeL As Integer = niB ' Big number + Dim xRangeU As Integer = 0 ' Smol number + + ' Range finder + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Then Continue For + If xRangeL > Notes(xI1).ColumnIndex Then xRangeL = Notes(xI1).ColumnIndex + If xRangeU < Notes(xI1).ColumnIndex Then xRangeU = Notes(xI1).ColumnIndex + Next + + Dim xniArray1(UBound(gXKeyCol)) As Integer + Dim xIA1 As Integer = -1 + For Each ni In gXKeyCol + If xRangeL <= ni AndAlso ni <= xRangeU Then + xIA1 += 1 + xniArray1(xIA1) = ni + End If + Next + If xIA1 <= 0 Then Exit Sub + + ReDim Preserve xniArray1(xIA1) + + Dim xniArrayR = xniArray1.Reverse() + Dim xniArrayLen = xniArray1.Length + + Dim xCol As Integer + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xCol = Notes(xI1).ColumnIndex + ' MsgBox("Test" & "xCol: " & xCol & " xI1: " & xI1) + For xI2 = 0 To xniArrayLen - 1 + ' MsgBox("Test 2 xI2: " & xI2) + If xCol = xniArray1(xI2) Then + xCol = xniArrayR(xI2) + Exit For + End If + + Next + + Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) + Notes(xI1).ColumnIndex = xCol + Next + + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + RefreshPanelAll() + End Sub + + + Private Sub POBFlip_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles POBFlip.Click + If gXKeyMode <> "DP" Then Exit Sub + Dim xI1 As Integer + Dim xI2 As Integer + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + ' Array 1: Unmodified array + ' Array R: Flipped array + + Dim xniArray1 = New Integer() {niA1, niA2, niA3, niA4, niA5, niA6, niA7, niA8, niD1, niD2, niD3, niD4, niD5, niD6, niD7, niD8} + Dim xniArrayR = New Integer() {niD8, niD1, niD2, niD3, niD4, niD5, niD6, niD7, niA2, niA3, niA4, niA5, niA6, niA7, niA8, niA1} + + Dim xniArrayLen = xniArray1.Length + + Dim xCol As Integer + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xCol = Notes(xI1).ColumnIndex + For xI2 = 0 To xniArrayLen - 1 + If xCol = xniArray1(xI2) Then + xCol = xniArrayR(xI2) + Exit For + End If + + Next + + Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) + Notes(xI1).ColumnIndex = xCol + Next + + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBRandomAll(sender As Object, e As EventArgs) Handles POBRandom.Click, POBRRandom.Click, POBSRandom.Click, POBHRandom.Click + Dim NameS As String = CType(sender, ToolStripMenuItem).Name + + Dim xI1 As Integer + Dim xI2 As Integer + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + ' gXKeyCol: Unmodified array + ' Array 1: Modified array based on range + ' Array R: Array 1 randomized + + ' New function: Declare an array to see the range of selected notes. B columns ignored. + Dim xRangeL As Integer = niB ' Big number + Dim xRangeU As Integer = 0 ' Smol number + + ' Range finder + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Then Continue For + If xRangeL > Notes(xI1).ColumnIndex Then xRangeL = Notes(xI1).ColumnIndex + If xRangeU < Notes(xI1).ColumnIndex Then xRangeU = Notes(xI1).ColumnIndex + Next + + Dim xniArray1(UBound(gXKeyCol)) As Integer + Dim xIA1 As Integer = -1 + For Each ni In gXKeyCol + If xRangeL <= ni AndAlso ni <= xRangeU Then + xIA1 += 1 + xniArray1(xIA1) = ni + End If + Next + If xIA1 <= 0 Then Exit Sub + + ReDim Preserve xniArray1(xIA1) + + Dim xniArrayR() As Integer = CType(xniArray1.Clone(), Integer()) + + Select Case NameS + Case "POBRandom", "POBRRandom" + ' Shuffle columns + If NameS = "POBRandom" Then + Shuffle(xniArrayR) + Else + Dim R As Integer = CInt(Math.Floor(xniArrayR.Length * Rnd())) + Dim M As Integer = CInt(Math.Floor(2 * Rnd()) * 2 - 1) + For i = 0 To UBound(xniArrayR) + xniArrayR(i) = xniArray1((i * M + R + xniArrayR.Length) Mod xniArrayR.Length) + Next + End If + + ' Move notes + Dim xCol As Integer + For xI1 = 1 To UBound(Notes) + With Notes(xI1) + If Not .Selected Or .Ghost Then Continue For + + xCol = .ColumnIndex + For xI2 = 0 To xniArray1.Length - 1 + If xCol = xniArray1(xI2) Then + xCol = xniArrayR(xI2) + Exit For + End If + + Next + + Me.RedoMoveNote(Notes(xI1), xCol, .VPosition, xUndo, xRedo) + .ColumnIndex = xCol + End With + Next + Case "POBSRandom", "POBHRandom" + ' Find array of indexes of selected notes in the same vPosition + xI1 = 1 + Dim xI1Arr(-1) As Integer + Dim vPos As Double + Dim xI1ArrPrevUBound As Integer = -1 ' Used for HRandom + ' Find the first index of selected notes + Do While xI1 <= UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Or Notes(xI1).ColumnIndex < xniArray1(0) Or Notes(xI1).ColumnIndex > xniArray1(UBound(xniArray1)) Then xI1 += 1 : Continue Do + ' Begin building array until vPosition changes + vPos = Notes(xI1).VPosition + Do While xI1 <= UBound(Notes) AndAlso Notes(xI1).VPosition = vPos + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Or Notes(xI1).ColumnIndex < xniArray1(0) Or Notes(xI1).ColumnIndex > xniArray1(UBound(xniArray1)) Then xI1 += 1 : Continue Do + ReDim Preserve xI1Arr(xI1Arr.Length) + xI1Arr(UBound(xI1Arr)) = xI1 + xI1 += 1 + Loop + + ' Shuffle columns + If NameS = "POBSRandom" Or xI1ArrPrevUBound = -1 Then ' If SRandom or for HRandom, if it's the first set of notes + Shuffle(xniArrayR) + Else + Dim xniArrayR1(xI1ArrPrevUBound) As Integer + Dim xniArrayR2(UBound(xniArray1) - xI1ArrPrevUBound - 1) As Integer + For i = 0 To UBound(xniArrayR1) + xniArrayR1(i) = xniArrayR(i) + Next + For i = 0 To UBound(xniArrayR2) + xniArrayR2(i) = xniArrayR(i + xI1ArrPrevUBound + 1) + Next + Shuffle(xniArrayR1) + Shuffle(xniArrayR2) + For i = 0 To UBound(xniArrayR2) + xniArrayR(i) = xniArrayR2(i) + Next + For i = UBound(xniArrayR2) + 1 To UBound(xniArrayR) + xniArrayR(i) = xniArrayR1(i - UBound(xniArrayR2) - 1) + Next + End If + + ' Move notes + For xI2 = 0 To UBound(xI1Arr) + Dim xI2I = xI1Arr(xI2) + Me.RedoMoveNote(Notes(xI2I), xniArrayR(xI2), Notes(xI2I).VPosition, xUndo, xRedo) + Notes(xI2I).ColumnIndex = xniArrayR(xI2) + Next + xI1ArrPrevUBound = UBound(xI1Arr) + ReDim xI1Arr(-1) + Loop + End Select + + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Sub POBSort_Click(sender As Object, e As EventArgs) Handles POBSort.Click + Dim xI1 As Integer + Dim xI2 As Integer + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + ' Array 1: Unmodified array + Dim xniArray1() As Integer = gXKeyCol + Dim niBMax As Integer = niB + + Dim xniArrayLen = xniArray1.Length + + Dim vPos As Double + Dim xIArray(0) As Integer + Dim xValueArray(0) As Long + Dim xITemp As Integer + + ' Find array of indexes of selected notes in the same vPosition + xI1 = 1 + Dim xI1Arr(-1) As Integer + ' Find the first index of selected notes + Do While xI1 <= UBound(Notes) + If Not Notes(xI1).Selected OrElse Notes(xI1).Ghost OrElse Not IsColumnSound(Notes(xI1).ColumnIndex) Then xI1 += 1 : Continue Do + ' Begin building array until vPosition changes too much + vPos = Notes(xI1).VPosition + Do While xI1 <= UBound(Notes) AndAlso Math.Abs(GetTimeFromVPosition(Notes(xI1).VPosition) - GetTimeFromVPosition(vPos)) <= ErrorJackSpeed + If Not Notes(xI1).Selected OrElse Notes(xI1).Ghost OrElse Not IsColumnSound(Notes(xI1).ColumnIndex) Then xI1 += 1 : Continue Do + ReDim Preserve xI1Arr(xI1Arr.Length) + xI1Arr(UBound(xI1Arr)) = xI1 + xI1 += 1 + Loop + + ' Extend xniArray1 if need be + If xI1Arr.Length > xniArray1.Length Then + Dim xUB0 As Integer = UBound(xniArray1) + ReDim Preserve xniArray1(UBound(xI1Arr)) + For i = xUB0 + 1 To UBound(xniArray1) + xniArray1(i) = niBMax + niBMax += 1 + Next + End If + + ' Sort columns, insertion sort + For xI2 = 1 To UBound(xI1Arr) + For xI3 = xI2 To 1 Step -1 + If Notes(xI1Arr(xI3 - 1)).Value > Notes(xI1Arr(xI3)).Value Then + xITemp = xI1Arr(xI3 - 1) + xI1Arr(xI3 - 1) = xI1Arr(xI3) + xI1Arr(xI3) = xITemp + End If + Next + Next + + ' Move notes + For xI2 = 0 To UBound(xI1Arr) + Dim xI2I = xI1Arr(xI2) + RedoMoveNote(Notes(xI2I), xniArray1(xI2), Notes(xI2I).VPosition, xUndo, xRedo) + Notes(xI2I).ColumnIndex = xniArray1(xI2) + Next + ReDim xI1Arr(-1) + Loop + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionQuick(0, UBound(Notes)) + UpdatePairing() + RefreshPanelAll() + End Sub + + Private Function GetNotesBySelectedAndVPosition(ByVal VPos As Double, Optional xI As Integer = 1) As Integer() + Dim xIArr(-1) As Integer + For xIN = xI To UBound(Notes) + If Not Notes(xIN).Selected OrElse Notes(xIN).Ghost Then Continue For + + If Notes(xIN).VPosition = VPos Then + ReDim Preserve xIArr(xIArr.Length) + xIArr(UBound(xIArr)) = xIN + ElseIf Notes(xIN).VPosition > VPos Then + Exit For + End If + Next + Return xIArr + End Function + + Private Function GetNotesBySelectedAndVPosition(ByVal xIN As Integer, Optional xI As Integer = 1) As Integer() + Return GetNotesBySelectedAndVPosition(Notes(xIN).VPosition, xI) + End Function + + Private Sub TBMyO2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBMyO2.Click, mnMyO2.Click + Dim xDiag As New dgMyO2 + xDiag.Show() + End Sub + + + Private Sub TBFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBFind.Click, mnFind.Click + Dim xDiag As New dgFind(gColumns) + xDiag.Show() + End Sub + + ''' + ''' Checks if the note satisfies the input measure, label, and value ranges. + ''' + + Private Function fdrCheck(ByVal xNote As Note) As Boolean + Return xNote.VPosition >= MeasureBottom(fdriMesL) And xNote.VPosition < MeasureBottom(fdriMesU) + MeasureLength(fdriMesU) AndAlso + CBool(IIf(IsColumnNumeric(xNote.ColumnIndex), + xNote.Value >= fdriValL And xNote.Value <= fdriValU, + xNote.Value >= fdriLblL And xNote.Value <= fdriLblU)) AndAlso + Array.IndexOf(fdriCol, xNote.ColumnIndex - 1) <> -1 + ' lol Fixed + End Function + + Private Function fdrRangeS(ByVal xbLim1 As Boolean, ByVal xbLim2 As Boolean, ByVal xVal As Boolean) As Boolean + Return (Not xbLim1 And xbLim2 And xVal) Or (xbLim1 And Not xbLim2 And Not xVal) Or (xbLim1 And xbLim2) + End Function + + Public Sub fdrFind(ByVal iRange() As Boolean, + ByVal xMesL As Integer, ByVal xMesU As Integer, + ByVal xLblL As String, ByVal xLblU As String, + ByVal xValL As Integer, ByVal xValU As Integer, + ByVal iCol() As Integer, ByVal fdrFunction As String, Optional xReplaceLbl As String = Nothing, Optional xReplaceVal As Integer = Nothing) + + fdriMesL = xMesL + fdriMesU = xMesU + fdriLblL = C36to10(xLblL) * 10000 + fdriLblU = C36to10(xLblU) * 10000 + fdriValL = xValL + fdriValU = xValU + fdriCol = iCol + + Dim xbSel As Boolean = iRange(0) + Dim xbUnsel As Boolean = iRange(1) + Dim xbShort As Boolean = iRange(2) + Dim xbLong As Boolean = iRange(3) + Dim xbHidden As Boolean = iRange(4) + Dim xbVisible As Boolean = iRange(5) + Dim xbNoError As Boolean = iRange(6) + Dim xbError As Boolean = iRange(7) + Dim xbNotComment As Boolean = iRange(8) + Dim xbComment As Boolean = iRange(9) + + Select Case fdrFunction + Case "TBSelect" + Dim xSel(UBound(Notes)) As Boolean + For xI1 As Integer = 1 To UBound(Notes) + xSel(xI1) = Notes(xI1).Selected + Next + + 'Main process + For xI1 As Integer = 1 To UBound(Notes) + With Notes(xI1) + If ((xbSel And xSel(xI1)) Or (xbUnsel And Not xSel(xI1))) AndAlso + nEnabled(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) Then + + .Selected = fdrCheck(Notes(xI1)) + End If + End With + Next + Case "TBUnselect" + Dim xSel(UBound(Notes)) As Boolean + For xI1 As Integer = 1 To UBound(Notes) + xSel(xI1) = Notes(xI1).Selected + Next + + 'Main process + For xI1 As Integer = 1 To UBound(Notes) + With Notes(xI1) + If ((xbSel And xSel(xI1)) Or (xbUnsel And Not xSel(xI1))) AndAlso + nEnabled(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) Then + + .Selected = Not fdrCheck(Notes(xI1)) + End If + End With + Next + Case "FNotePrevious" + Dim xSel(UBound(Notes)) As Boolean + For xI1 As Integer = 1 To UBound(Notes) + xSel(xI1) = Notes(xI1).Selected + Notes(xI1).Selected = False + Next + + For xI1 = UBound(Notes) To 1 Step -1 + With Notes(xI1) + If ((xbSel And xSel(xI1)) Or (xbUnsel And Not xSel(xI1))) AndAlso + nEnabled(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) AndAlso + fdrCheck(Notes(xI1)) AndAlso + .VPosition < -PanelVScroll(PanelFocus) Then + + PanelVScroll(PanelFocus) = - .VPosition + .Selected = True + Exit For + End If + End With + Next + Case "FNoteNext" + Dim xSel(UBound(Notes)) As Boolean + For xI1 As Integer = 1 To UBound(Notes) + xSel(xI1) = Notes(xI1).Selected + Notes(xI1).Selected = False + Next + + For xI1 = 1 To UBound(Notes) + With Notes(xI1) + If ((xbSel And xSel(xI1)) Or (xbUnsel And Not xSel(xI1))) AndAlso + nEnabled(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) AndAlso + fdrCheck(Notes(xI1)) AndAlso + .VPosition > -PanelVScroll(PanelFocus) Then + + PanelVScroll(PanelFocus) = - .VPosition + .Selected = True + Exit For + End If + End With + Next + Case "TBDelete" + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + 'Main process + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + With Notes(xI1) + If (Not .Ghost) AndAlso + ((xbSel And .Selected) Or (xbUnsel And Not .Selected)) AndAlso + fdrCheck(Notes(xI1)) AndAlso + nEnabled(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) Then + + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + RemoveNote(xI1, False) + Else + xI1 += 1 + End If + End With + Loop + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + Case "TBrl" + Dim xxLbl As Integer = C36to10(xReplaceLbl) * 10000 + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + 'Main process + For xI1 As Integer = 1 To UBound(Notes) + With Notes(xI1) + If (Not .Ghost) AndAlso + ((xbSel And .Selected) Or (xbUnsel And Not .Selected)) AndAlso + fdrCheck(Notes(xI1)) AndAlso + nEnabled(.ColumnIndex) AndAlso + Not IsColumnNumeric(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) Then + + Me.RedoRelabelNote(Notes(xI1), xxLbl, xUndo, xRedo) + .Value = xxLbl + End If + End With + Next + + AddUndo(xUndo, xBaseRedo.Next) + Case "TBrv" + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + 'Main process + For xI1 As Integer = 1 To UBound(Notes) + With Notes(xI1) + If (Not .Ghost) AndAlso + ((xbSel And .Selected) Or (xbUnsel And Not .Selected)) AndAlso + fdrCheck(Notes(xI1)) AndAlso + nEnabled(.ColumnIndex) AndAlso + IsColumnNumeric(.ColumnIndex) AndAlso + fdrRangeS(xbShort, xbLong, CBool(IIf(NTInput, .Length, .LongNote))) AndAlso + fdrRangeS(xbVisible, xbHidden, .Hidden) AndAlso + fdrRangeS(xbNoError, xbError, .HasError) AndAlso + fdrRangeS(xbNotComment, xbComment, .Comment) Then + + Me.RedoRelabelNote(Notes(xI1), xReplaceVal, xUndo, xRedo) + .Value = xReplaceVal + End If + End With + Next + + AddUndo(xUndo, xBaseRedo.Next) + End Select + + RefreshPanelAll() + Beep() + End Sub + + Private Sub MInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MInsert.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xMeasure As Integer = MeasureAtDisplacement(menuVPosition) + Dim xMLength As Double = MeasureLength(xMeasure) + Dim xVP As Double = MeasureBottom(xMeasure) + + If NTInput Then + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + If MeasureAtDisplacement(Notes(xI1).VPosition) >= 999 Then + Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) + RemoveNote(xI1, False) + Else + xI1 += 1 + End If + Loop + + Dim xdVP As Double + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition >= xVP And Notes(xI1).VPosition + Notes(xI1).Length <= MeasureBottom(999) Then + Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition + xMLength, xUndo, xRedo) + Notes(xI1).VPosition += xMLength + + ElseIf Notes(xI1).VPosition >= xVP Then + xdVP = MeasureBottom(999) - 1 - Notes(xI1).VPosition - Notes(xI1).Length + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition + xMLength, Notes(xI1).Length + xdVP, xUndo, xRedo) + Notes(xI1).VPosition += xMLength + Notes(xI1).Length += xdVP + + ElseIf Notes(xI1).VPosition + Notes(xI1).Length >= xVP Then + xdVP = CDbl(IIf(Notes(xI1).VPosition + Notes(xI1).Length > MeasureBottom(999) - 1, GetMaxVPosition() - 1 - Notes(xI1).VPosition - Notes(xI1).Length, xMLength)) + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, Notes(xI1).Length + xdVP, xUndo, xRedo) + Notes(xI1).Length += xdVP + End If + Next + + Else + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + If MeasureAtDisplacement(Notes(xI1).VPosition) >= 999 Then + Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) + RemoveNote(xI1, False) + Else + xI1 += 1 + End If + Loop + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition >= xVP Then + Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition + xMLength, xUndo, xRedo) + Notes(xI1).VPosition += xMLength + End If + Next + End If + + For xI1 As Integer = 999 To xMeasure + 1 Step -1 + MeasureLength(xI1) = MeasureLength(xI1 - 1) + Next + UpdateMeasureBottom() + + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + CalculateGreatestVPosition() + CalculateTotalPlayableNotes() + RefreshPanelAll() + End Sub + + Private Sub MRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MRemove.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xMeasure As Integer = MeasureAtDisplacement(menuVPosition) + Dim xMLength As Double = MeasureLength(xMeasure) + Dim xVP As Double = MeasureBottom(xMeasure) + + If NTInput Then + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + If MeasureAtDisplacement(Notes(xI1).VPosition) = xMeasure And MeasureAtDisplacement(Notes(xI1).VPosition + Notes(xI1).Length) = xMeasure Then + Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) + RemoveNote(xI1, False) + Else + xI1 += 1 + End If + Loop + + Dim xdVP As Double + xVP = MeasureBottom(xMeasure) + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition >= xVP + xMLength Then + Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition - xMLength, xUndo, xRedo) + Notes(xI1).VPosition -= xMLength + + ElseIf Notes(xI1).VPosition >= xVP Then + xdVP = xMLength + xVP - Notes(xI1).VPosition + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition + xdVP - xMLength, Notes(xI1).Length - xdVP, xUndo, xRedo) + Notes(xI1).VPosition += xdVP - xMLength + Notes(xI1).Length -= xdVP + + ElseIf Notes(xI1).VPosition + Notes(xI1).Length >= xVP Then + xdVP = CDbl(IIf(Notes(xI1).VPosition + Notes(xI1).Length >= xVP + xMLength, xMLength, Notes(xI1).VPosition + Notes(xI1).Length - xVP + 1)) + Me.RedoLongNoteModify(Notes(xI1), Notes(xI1).VPosition, Notes(xI1).Length - xdVP, xUndo, xRedo) + Notes(xI1).Length -= xdVP + End If + Next + + Else + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + If MeasureAtDisplacement(Notes(xI1).VPosition) = xMeasure Then + Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) + RemoveNote(xI1, False) + Else + xI1 += 1 + End If + Loop + + xVP = MeasureBottom(xMeasure) + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition >= xVP Then + Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, Notes(xI1).VPosition - xMLength, xUndo, xRedo) + Notes(xI1).VPosition -= xMLength + End If + Next + End If + + For xI1 As Integer = 999 To xMeasure + 1 Step -1 + MeasureLength(xI1 - 1) = MeasureLength(xI1) + Next + UpdateMeasureBottom() + + AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + CalculateGreatestVPosition() + CalculateTotalPlayableNotes() + RefreshPanelAll() + End Sub + + Private Sub TBThemeDef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeDef.Click + Dim xTempFileName As String = My.Application.Info.DirectoryPath & "\____TempFile.Theme.xml" + My.Computer.FileSystem.WriteAllText(xTempFileName, My.Resources.O2Mania_Theme, False, System.Text.Encoding.Unicode) + LoadSettings(xTempFileName) + System.IO.File.Delete(xTempFileName) + + RefreshPanelAll() + End Sub + + Private Sub TBThemeSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeSave.Click + Dim xDiag As New SaveFileDialog + xDiag.Filter = Strings.FileType.THEME_XML & "|*.Theme.xml" + xDiag.DefaultExt = "Theme.xml" + xDiag.InitialDirectory = My.Application.Info.DirectoryPath & "\Data" + If xDiag.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + + Me.SaveSettings(xDiag.FileName, True) + If BeepWhileSaved Then Beep() + TBThemeRefresh_Click(TBThemeRefresh, New System.EventArgs) + End Sub + + Private Sub TBThemeRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeRefresh.Click + For xI1 As Integer = cmnTheme.Items.Count - 1 To 5 Step -1 + Try + cmnTheme.Items.RemoveAt(xI1) + Catch ex As Exception + End Try + Next + + If Not Directory.Exists(My.Application.Info.DirectoryPath & "\Data") Then My.Computer.FileSystem.CreateDirectory(My.Application.Info.DirectoryPath & "\Data") + Dim xFileNames() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo(My.Application.Info.DirectoryPath & "\Data").GetFiles("*.Theme.xml") + For Each xStr As FileInfo In xFileNames + cmnTheme.Items.Add(xStr.Name, Nothing, AddressOf LoadTheme) + Next + End Sub + + Private Sub TBThemeLoadComptability_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBThemeLoadComptability.Click + Dim xDiag As New OpenFileDialog + xDiag.Filter = Strings.FileType.TH & "|*.th" + xDiag.DefaultExt = "th" + xDiag.InitialDirectory = My.Application.Info.DirectoryPath + If My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\Theme") Then xDiag.InitialDirectory = My.Application.Info.DirectoryPath & "\Theme" + If xDiag.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + + Me.LoadThemeComptability(xDiag.FileName) + RefreshPanelAll() + End Sub + + ''' + ''' Will return Double.PositiveInfinity if canceled. + ''' + Private Function InputBoxDouble(ByVal Prompt As String, ByVal LBound As Double, ByVal UBound As Double, Optional ByVal Title As String = "", Optional ByVal DefaultResponse As String = "") As Double + Dim xStr As String = InputBox(Prompt, Title, DefaultResponse) + If xStr = "" Then Return Double.PositiveInfinity + + If Not Double.TryParse(xStr, InputBoxDouble) Then Return Double.PositiveInfinity + If InputBoxDouble > UBound Then InputBoxDouble = UBound + If InputBoxDouble < LBound Then InputBoxDouble = LBound + End Function + + Private Sub FSSS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FSSS.Click + Dim xMax As Double = CDbl(IIf(vSelLength > 0, GetMaxVPosition() - vSelLength, GetMaxVPosition)) + Dim xMin As Double = CDbl(IIf(vSelLength < 0, -vSelLength, 0)) + Dim xDouble As Double = InputBoxDouble("Please enter a number between " & xMin & " and " & xMax & ".", xMin, xMax, , vSelStart.ToString()) + If xDouble = Double.PositiveInfinity Then Return + + vSelStart = xDouble + ValidateSelection() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub FSSL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FSSL.Click + Dim xMax As Double = GetMaxVPosition() - vSelStart + Dim xMin As Double = -vSelStart + Dim xDouble As Double = InputBoxDouble("Please enter a number between " & xMin & " and " & xMax & ".", xMin, xMax, , vSelLength.ToString()) + If xDouble = Double.PositiveInfinity Then Return + + vSelLength = xDouble + ValidateSelection() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub FSSH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FSSH.Click + Dim xMax As Double = CDbl(IIf(vSelLength > 0, vSelLength, 0)) + Dim xMin As Double = CDbl(IIf(vSelLength > 0, 0, -vSelLength)) + Dim xDouble As Double = InputBoxDouble("Please enter a number between " & xMin & " and " & xMax & ".", xMin, xMax, , vSelHalf.ToString()) + If xDouble = Double.PositiveInfinity Then Return + + vSelHalf = xDouble + ValidateSelection() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BVCReverse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BVCReverse.Click + vSelStart += vSelLength + vSelHalf -= vSelLength + vSelLength *= -1 + ValidateSelection() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub AutoSaveTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AutoSaveTimer.Tick + Dim xTime As Date = Now + Dim xFileName As String + With xTime + xFileName = My.Application.Info.DirectoryPath & "\AutoSave_" & + .Year & "_" & .Month & "_" & .Day & "_" & .Hour & "_" & .Minute & "_" & .Second & "_" & .Millisecond & ".IBMSC" + End With + 'My.Computer.FileSystem.WriteAllText(xFileName, SaveiBMSC, False, System.Text.Encoding.Unicode) + SaveiBMSC(xFileName) + + On Error Resume Next + If PreviousAutoSavedFileName <> "" Then IO.File.Delete(PreviousAutoSavedFileName) + On Error GoTo 0 + + PreviousAutoSavedFileName = xFileName + End Sub + + Private Sub CWAVMultiSelect_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CWAVMultiSelect.CheckedChanged + WAVMultiSelect = CWAVMultiSelect.Checked + LWAV.SelectionMode = CType(IIf(WAVMultiSelect, SelectionMode.MultiExtended, SelectionMode.One), SelectionMode) + End Sub + + Private Sub CWAVChangeLabel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CWAVChangeLabel.CheckedChanged + WAVChangeLabel = CWAVChangeLabel.Checked + End Sub + + Private Sub BWAVUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVUp.Click + If LWAV.SelectedIndex = -1 Then Return + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer + LWAV.SelectedIndices.CopyTo(xIndices, 0) + + Dim xS As Integer + For xS = 0 To 1294 + If Array.IndexOf(xIndices, xS) = -1 Then Exit For + Next + + Dim xStr As String = "" + Dim xIndex As Integer = -1 + For xI1 As Integer = xS To 1294 + xIndex = Array.IndexOf(xIndices, xI1) + If xIndex <> -1 Then + xStr = hWAV(xI1 + 1) + hWAV(xI1 + 1) = hWAV(xI1) + hWAV(xI1) = xStr + + LWAV.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hWAV(xI1 + 1) + LWAV.Items.Item(xI1 - 1) = C10to36(xI1) & ": " & hWAV(xI1) + + If WAVChangeLabel Then + Dim xL1 As String = C10to36(xI1) + Dim xL2 As String = C10to36(xI1 + 1) + For xI2 As Integer = 1 To UBound(Notes) + If Not IsColumnSound(Notes(xI2).ColumnIndex) Then Continue For + + If C10to36(Notes(xI2).Value \ 10000) = xL1 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + 10000 + + ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + + End If + Next + + End If + xIndices(xIndex) += -1 + End If + Next + + LWAV.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LWAV.SelectedIndices.Add(xIndices(xI1)) + Next + + AddUndo(xUndo, xBaseRedo.Next) + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BWAVDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVDown.Click + If LWAV.SelectedIndex = -1 Then Return + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer + LWAV.SelectedIndices.CopyTo(xIndices, 0) + + Dim xS As Integer + For xS = 1294 To 0 Step -1 + If Array.IndexOf(xIndices, xS) = -1 Then Exit For + Next + + Dim xStr As String = "" + Dim xIndex As Integer = -1 + For xI1 As Integer = xS To 0 Step -1 + xIndex = Array.IndexOf(xIndices, xI1) + If xIndex <> -1 Then + xStr = hWAV(xI1 + 1) + hWAV(xI1 + 1) = hWAV(xI1 + 2) + hWAV(xI1 + 2) = xStr + + LWAV.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hWAV(xI1 + 1) + LWAV.Items.Item(xI1 + 1) = C10to36(xI1 + 2) & ": " & hWAV(xI1 + 2) + + If WAVChangeLabel Then + Dim xL1 As String = C10to36(xI1 + 2) + Dim xL2 As String = C10to36(xI1 + 1) + For xI2 As Integer = 1 To UBound(Notes) + If Not IsColumnSound(Notes(xI2).ColumnIndex) Then Continue For + + If C10to36(Notes(xI2).Value \ 10000) = xL1 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + 10000 + + ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 20000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + 20000 + + End If + Next + + End If + xIndices(xIndex) += 1 + End If + Next + + LWAV.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LWAV.SelectedIndices.Add(xIndices(xI1)) + Next + + AddUndo(xUndo, xBaseRedo.Next) + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BWAVBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVBrowse.Click + Dim xDWAV As New OpenFileDialog + xDWAV.DefaultExt = "wav" + xDWAV.Filter = Strings.FileType._wave & "|*.wav;*.ogg;*.mp3|" & + Strings.FileType.WAV & "|*.wav|" & + Strings.FileType.OGG & "|*.ogg|" & + Strings.FileType.MP3 & "|*.mp3|" & + Strings.FileType._all & "|*.*" + xDWAV.InitialDirectory = CStr(IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName))) + xDWAV.Multiselect = WAVMultiSelect + + If xDWAV.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + InitPath = ExcludeFileName(xDWAV.FileName) + + AddToPOWAV(xDWAV.FileNames) + End Sub + + Private Sub BWAVRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWAVRemove.Click + Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer + LWAV.SelectedIndices.CopyTo(xIndices, 0) + For xI1 As Integer = 0 To UBound(xIndices) + hWAV(xIndices(xI1) + 1) = "" + LWAV.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " + Next + + LWAV.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LWAV.SelectedIndices.Add(xIndices(xI1)) + Next + + If IsSaved Then SetIsSaved(False) + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BWAVDuplicate_Click(sender As Object, e As EventArgs) Handles BWAVDuplicate.Click + Dim xIndices(LWAV.SelectedIndices.Count - 1) As Integer + LWAV.SelectedIndices.CopyTo(xIndices, 0) + + ' Duplicate WAVs + Dim xWAVDup(2 * (xIndices(UBound(xIndices)) - xIndices(0) + 1)) As String + ' Duplicate first selected WAV + xWAVDup(0) = hWAV(xIndices(0) + 1) + xWAVDup(1) = hWAV(xIndices(0) + 1) + Dim xID As Integer = 1 + For xI1 = 1 To UBound(xIndices) + ' If skipped indices, add same amount of skipped indices + If xIndices(xI1) - xIndices(xI1 - 1) > 1 Then + For xISkip = 2 To xIndices(xI1) - xIndices(xI1 - 1) + xID += 1 + xWAVDup(xID) = "" + Next + End If + + ' Continue duplicating selected WAVs + For xI2 = 0 To 1 + xID += 1 + xWAVDup(xID) = hWAV(xIndices(xI1) + 1) + Next + Next + ReDim Preserve xWAVDup(xID) + + ' Add duplicated WAV list to hWAV + Dim xIL0 As Integer = LWAV.SelectedIndex + Dim xIL1 As Integer + For xI3 = 0 To xID + xIL1 = xIL0 + xI3 + If xIL1 > LWAV.Items.Count - 1 Then xIL1 = LWAV.Items.Count - 1 : Exit For + hWAV(xIL1 + 1) = xWAVDup(xI3) + LWAV.Items.Item(xIL1) = C10to36(xIL1 + 1) & ": " & xWAVDup(xI3) + Next + + LWAV.SelectedIndices.Clear() + For xI1 = xIL0 To xIL1 + LWAV.SelectedIndices.Add(xI1) + Next + + If IsSaved Then SetIsSaved(False) + RefreshPanelAll() + POStatusRefresh() + End Sub + + + Private Sub CBMPMultiSelect_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBMPMultiSelect.CheckedChanged + BMPMultiSelect = CBMPMultiSelect.Checked + LBMP.SelectionMode = CType(IIf(BMPMultiSelect, SelectionMode.MultiExtended, SelectionMode.One), SelectionMode) + End Sub + + Private Sub CBMPChangeLabel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBMPChangeLabel.CheckedChanged + BMPChangeLabel = CBMPChangeLabel.Checked + End Sub + + Private Sub BBMPUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPUp.Click + If LBMP.SelectedIndex = -1 Then Return + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer + LBMP.SelectedIndices.CopyTo(xIndices, 0) + + Dim xS As Integer + For xS = 0 To 1294 + If Array.IndexOf(xIndices, xS) = -1 Then Exit For + Next + + Dim xStr As String = "" + Dim xIndex As Integer = -1 + For xI1 As Integer = xS To 1294 + xIndex = Array.IndexOf(xIndices, xI1) + If xIndex <> -1 Then + xStr = hBMP(xI1 + 1) + hBMP(xI1 + 1) = hBMP(xI1) + hBMP(xI1) = xStr + + LBMP.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hBMP(xI1 + 1) + LBMP.Items.Item(xI1 - 1) = C10to36(xI1) & ": " & hBMP(xI1) + + If BMPChangeLabel Then + Dim xL1 As String = C10to36(xI1) + Dim xL2 As String = C10to36(xI1 + 1) + For xI2 As Integer = 1 To UBound(Notes) + If IsColumnNumeric(Notes(xI2).ColumnIndex) Then Continue For + + If C10to36(Notes(xI2).Value \ 10000) = xL1 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + 10000 + + ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + + End If + Next + + End If + xIndices(xIndex) += -1 + End If + Next + + LBMP.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LBMP.SelectedIndices.Add(xIndices(xI1)) + Next + + AddUndo(xUndo, xBaseRedo.Next) + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BBMPDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPDown.Click + If LBMP.SelectedIndex = -1 Then Return + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer + LBMP.SelectedIndices.CopyTo(xIndices, 0) + + Dim xS As Integer + For xS = 1294 To 0 Step -1 + If Array.IndexOf(xIndices, xS) = -1 Then Exit For + Next + + Dim xStr As String = "" + Dim xIndex As Integer = -1 + For xI1 As Integer = xS To 0 Step -1 + xIndex = Array.IndexOf(xIndices, xI1) + If xIndex <> -1 Then + xStr = hBMP(xI1 + 1) + hBMP(xI1 + 1) = hBMP(xI1 + 2) + hBMP(xI1 + 2) = xStr + + LBMP.Items.Item(xI1) = C10to36(xI1 + 1) & ": " & hBMP(xI1 + 1) + LBMP.Items.Item(xI1 + 1) = C10to36(xI1 + 2) & ": " & hBMP(xI1 + 2) + + If BMPChangeLabel Then + + + Dim xL1 As String = C10to36(xI1 + 2) + Dim xL2 As String = C10to36(xI1 + 1) + For xI2 As Integer = 1 To UBound(Notes) + If IsColumnNumeric(Notes(xI2).ColumnIndex) Then Continue For + + If C10to36(Notes(xI2).Value \ 10000) = xL1 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 10000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + 10000 + + ElseIf C10to36(Notes(xI2).Value \ 10000) = xL2 Then + Me.RedoRelabelNote(Notes(xI2), xI1 * 10000 + 20000, xUndo, xRedo) + Notes(xI2).Value = xI1 * 10000 + 20000 + + End If + Next + + End If + xIndices(xIndex) += 1 + End If + Next + + LBMP.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LBMP.SelectedIndices.Add(xIndices(xI1)) + Next + + AddUndo(xUndo, xBaseRedo.Next) + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BBMPBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPBrowse.Click + Dim xDBMP As New OpenFileDialog + xDBMP.Filter = Strings.FileType._im & "|*.bmp;*.png;*.jpg;*.gif;*.mpg;*.mpeg;*.avi;*.m1v;*.m2v;*.m4v;*.mp4;*.webm;*.wmv|" & + Strings.FileType._image & "|*.bmp;*.png;*.jpg;*.gif|" & + Strings.FileType._movie & "|*.mpg;*.mpeg;*.avi;*.m1v;*.m2v;*.m4v;*.mp4;*.webm;*.wmv|" & + Strings.FileType._all & "|*.*" + xDBMP.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + xDBMP.DefaultExt = "png" + xDBMP.Multiselect = BMPMultiSelect + + If xDBMP.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + InitPath = ExcludeFileName(xDBMP.FileName) + + AddToPOBMP(xDBMP.FileNames) + End Sub + + Private Sub BBMPRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBMPRemove.Click + Dim xIndices(LBMP.SelectedIndices.Count - 1) As Integer + LBMP.SelectedIndices.CopyTo(xIndices, 0) + For xI1 As Integer = 0 To UBound(xIndices) + hBMP(xIndices(xI1) + 1) = "" + LBMP.Items.Item(xIndices(xI1)) = C10to36(xIndices(xI1) + 1) & ": " + Next + + LBMP.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LBMP.SelectedIndices.Add(xIndices(xI1)) + Next + + If IsSaved Then SetIsSaved(False) + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub mnMain_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles mnMain.MouseDown ', TBMain.MouseDown ', pttl.MouseDown, pIsSaved.MouseDown + If e.Button = Windows.Forms.MouseButtons.Left Then + ReleaseCapture() + SendMessage(Me.Handle, &H112, &HF012, 0) + If e.Clicks = 2 Then + If Me.WindowState = FormWindowState.Maximized Then Me.WindowState = FormWindowState.Normal Else Me.WindowState = FormWindowState.Maximized + End If + ElseIf e.Button = Windows.Forms.MouseButtons.Right Then + 'mnSys.Show(sender, e.Location) + End If + End Sub + + Private Sub mnSelectAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSelectAll.Click + If Not (PMainIn.Focused OrElse PMainInL.Focused Or PMainInR.Focused) Then Exit Sub + For xI1 As Integer = 1 To UBound(Notes) + Notes(xI1).Selected = nEnabled(Notes(xI1).ColumnIndex) + Next + If TBTimeSelect.Checked Then + CalculateGreatestVPosition() + vSelStart = 0 + vSelLength = MeasureBottom(MeasureAtDisplacement(GreatestVPosition)) + MeasureLength(MeasureAtDisplacement(GreatestVPosition)) + End If + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub mnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnDelete.Click + If Not (PMainIn.Focused OrElse PMainInL.Focused Or PMainInR.Focused) Then Exit Sub + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Me.RedoRemoveNoteSelected(True, xUndo, xRedo) + RemoveNotes(True) + + AddUndo(xUndo, xBaseRedo.Next) + CalculateGreatestVPosition() + CalculateTotalPlayableNotes() + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub mnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + Process.Start("http://www.cs.mcgill.ca/~ryang6/iBMSC/") + End Sub + + Private Sub mnUpdateC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + Process.Start("http://bbs.rohome.net/thread-1074065-1-1.html") + End Sub + + Private Sub mnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnQuit.Click + Close() + End Sub + + + Private Sub EnableDWM() + mnMain.BackColor = Color.Black + 'TBMain.BackColor = Color.FromArgb(64, 64, 64) + + For Each xmn As ToolStripMenuItem In mnMain.Items + xmn.ForeColor = Color.White + AddHandler xmn.DropDownClosed, AddressOf mn_DropDownClosed + AddHandler xmn.DropDownOpened, AddressOf mn_DropDownOpened + AddHandler xmn.MouseEnter, AddressOf mn_MouseEnter + AddHandler xmn.MouseLeave, AddressOf mn_MouseLeave + Next + End Sub + + Private Sub DisableDWM() + mnMain.BackColor = SystemColors.Control + 'TBMain.BackColor = SystemColors.Control + + For Each xmn As ToolStripMenuItem In mnMain.Items + xmn.ForeColor = SystemColors.ControlText + RemoveHandler xmn.DropDownClosed, AddressOf mn_DropDownClosed + RemoveHandler xmn.DropDownOpened, AddressOf mn_DropDownOpened + RemoveHandler xmn.MouseEnter, AddressOf mn_MouseEnter + RemoveHandler xmn.MouseLeave, AddressOf mn_MouseLeave + Next + End Sub + + Private Sub ttlIcon_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + 'ttlIcon.Image = My.Resources.icon2_16 + 'mnSys.Show(ttlIcon, 0, ttlIcon.Height) + End Sub + Private Sub ttlIcon_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) + 'ttlIcon.Image = My.Resources.icon2_16_highlight + End Sub + Private Sub ttlIcon_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) + 'ttlIcon.Image = My.Resources.icon2_16 + End Sub + + Private Sub mnSMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSMenu.CheckedChanged + mnMain.Visible = mnSMenu.Checked + End Sub + Private Sub mnSTB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSTB.CheckedChanged + TBMain.Visible = mnSTB.Checked + End Sub + Private Sub mnSOP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSOP.CheckedChanged + POptions.Visible = mnSOP.Checked + End Sub + Private Sub mnSStatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSStatus.CheckedChanged + pStatus.Visible = mnSStatus.Checked + End Sub + Private Sub mnSLSplitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSLSplitter.CheckedChanged + SpL.Visible = mnSLSplitter.Checked + End Sub + Private Sub mnSRSplitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSRSplitter.CheckedChanged + SpR.Visible = mnSRSplitter.Checked + End Sub + Private Sub CGShow_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShow.CheckedChanged + gShowGrid = CGShow.Checked + RefreshPanelAll() + End Sub + Private Sub CGShowS_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowS.CheckedChanged + gShowSubGrid = CGShowS.Checked + RefreshPanelAll() + End Sub + Private Sub CGShowBG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowBG.CheckedChanged + gShowBG = CGShowBG.Checked + RefreshPanelAll() + End Sub + Private Sub CGShowM_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowM.CheckedChanged + gShowMeasureNumber = CGShowM.Checked + RefreshPanelAll() + End Sub + Private Sub CGShowV_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowV.CheckedChanged + gShowVerticalLine = CGShowV.Checked + RefreshPanelAll() + End Sub + Private Sub CGShowMB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowMB.CheckedChanged + gShowMeasureBar = CGShowMB.Checked + RefreshPanelAll() + End Sub + Private Sub CGShowC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGShowC.CheckedChanged + gShowC = CGShowC.Checked + RefreshPanelAll() + End Sub + Private Sub CGBLP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGBLP.CheckedChanged + gDisplayBGAColumn = CGBLP.Checked + + column(niBGA).isVisible = gDisplayBGAColumn + column(niLAYER).isVisible = gDisplayBGAColumn + column(niPOOR).isVisible = gDisplayBGAColumn + column(niS4).isVisible = gDisplayBGAColumn + + If IsApplicationInitializing Then Exit Sub + For xI1 As Integer = 1 To UBound(Notes) + Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) + Next + 'AddUndo(xUndo, xRedo) + UpdateColumnsX() + RefreshPanelAll() + End Sub + Private Sub CGSCROLL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSCROLL.CheckedChanged + gSCROLL = CGSCROLL.Checked + + column(niSCROLL).isVisible = gSCROLL + + If IsApplicationInitializing Then Exit Sub + For xI1 As Integer = 1 To UBound(Notes) + Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) + Next + 'AddUndo(xUndo, xRedo) + UpdateColumnsX() + RefreshPanelAll() + End Sub + Private Sub CGSTOP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGSTOP.CheckedChanged + gSTOP = CGSTOP.Checked + + column(niSTOP).isVisible = gSTOP + + If IsApplicationInitializing Then Exit Sub + For xI1 As Integer = 1 To UBound(Notes) + Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) + Next + 'AddUndo(xUndo, xRedo) + UpdateColumnsX() + RefreshPanelAll() + End Sub + Private Sub CGBPM_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGBPM.CheckedChanged + 'Dim xUndo As UndoRedo.LinkedURCmd = Nothing + 'Dim xRedo As UndoRedo.LinkedURCmd = Nothing + 'Me.RedoChangeVisibleColumns(gBLP, gSTOP, iPlayer, gBLP, CGSTOP.Checked, iPlayer, xUndo, xRedo) + gBPM = CGBPM.Checked + + column(niBPM).isVisible = gBPM + + If IsApplicationInitializing Then Exit Sub + For xI1 As Integer = 1 To UBound(Notes) + Notes(xI1).Selected = Notes(xI1).Selected And nEnabled(Notes(xI1).ColumnIndex) + Next + 'AddUndo(xUndo, xRedo) + UpdateColumnsX() + RefreshPanelAll() + End Sub + + Private Sub CGDisableVertical_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CGDisableVertical.CheckedChanged + DisableVerticalMove = CGDisableVertical.Checked + End Sub + + Private Sub CBeatPreserve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBeatPreserve.Click, CBeatMeasure.Click, CBeatCut.Click, CBeatScale.Click + 'If Not sender.Checked Then Exit Sub + Dim RadioS As RadioButton = CType(sender, RadioButton) + Dim xBeatList() As RadioButton = {CBeatPreserve, CBeatMeasure, CBeatCut, CBeatScale} + BeatChangeMode = Array.IndexOf(Of RadioButton)(xBeatList, RadioS) + 'For xI1 As Integer = 0 To mnBeat.Items.Count - 1 + 'If xI1 <> BeatChangeMode Then CType(mnBeat.Items(xI1), ToolStripMenuItem).Checked = False + 'Next + 'sender.Checked = True + End Sub + + + Private Sub tBeatValue_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tBeatValue.LostFocus + Dim a As Double + If Double.TryParse(tBeatValue.Text, a) Then + If a <= 0.0# Or a >= 1000.0# Then tBeatValue.BackColor = Color.FromArgb(&HFFFFC0C0) Else tBeatValue.BackColor = Nothing + + tBeatValue.Text = a.ToString() + End If + End Sub + + + + Private Sub ApplyBeat(ByVal xRatio As Double, ByRef xUndo As UndoRedo.LinkedURCmd, ByRef xRedo As UndoRedo.LinkedURCmd, Optional xN As Integer = -1, Optional xD As Integer = -1) + SortByVPositionInsertion() + If xN = -1 AndAlso xD = -1 Then + If xRatio = 1 Then + xD = CInt(CGSub.Value) + xN = xD + Else + xD = CInt(GetDenominator(xRatio)) + xN = CInt(xRatio * xD) + End If + End If + + Me.RedoChangeMeasureLengthSelected(192 * xRatio, xUndo, xRedo) + + Dim xIndices(LBeat.SelectedIndices.Count - 1) As Integer + LBeat.SelectedIndices.CopyTo(xIndices, 0) + + + For Each xI1 As Integer In xIndices + Dim dLength As Double = xRatio * 192.0R - MeasureLength(xI1) + Dim dRatio As Double = xRatio * 192.0R / MeasureLength(xI1) + + Dim xBottom As Double = 0 + For xI2 As Integer = 0 To xI1 - 1 + xBottom += MeasureLength(xI2) + Next + Dim xUpBefore As Double = xBottom + MeasureLength(xI1) + Dim xUpAfter As Double = xUpBefore + dLength + + Select Case BeatChangeMode ' CBeatPreserve => Case 0 + Case 1 +case2: Dim xI0 As Integer + + If NTInput Then + For xI0 = 1 To UBound(Notes) + If Notes(xI0).VPosition >= xUpBefore Then Exit For + If Notes(xI0).VPosition + Notes(xI0).Length >= xUpBefore Then + Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, Notes(xI0).Length + dLength, xUndo, xRedo) + Notes(xI0).Length += dLength + End If + Next + Else + For xI0 = 1 To UBound(Notes) + If Notes(xI0).VPosition >= xUpBefore Then Exit For + Next + End If + + For xI9 As Integer = xI0 To UBound(Notes) + Me.RedoLongNoteModify(Notes(xI9), Notes(xI9).VPosition + dLength, Notes(xI9).Length, xUndo, xRedo) + Notes(xI9).VPosition += dLength + Next + + Case 2 + If dLength < 0 Then + If NTInput Then + Dim xI0 As Integer = 1 + Dim xU As Integer = UBound(Notes) + Do While xI0 <= xU + If Notes(xI0).VPosition < xUpAfter Then + If Notes(xI0).VPosition + Notes(xI0).Length >= xUpAfter And Notes(xI0).VPosition + Notes(xI0).Length < xUpBefore Then + Dim nLen As Double = xUpAfter - Notes(xI0).VPosition - 1.0R + Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, nLen, xUndo, xRedo) + Notes(xI0).Length = nLen + End If + ElseIf Notes(xI0).VPosition < xUpBefore Then + If Notes(xI0).VPosition + Notes(xI0).Length < xUpBefore Then + Me.RedoRemoveNote(Notes(xI0), xUndo, xRedo) + RemoveNote(xI0) + xI0 -= 1 + xU -= 1 + Else + Dim nLen As Double = Notes(xI0).Length - xUpBefore + Notes(xI0).VPosition + Me.RedoLongNoteModify(Notes(xI0), xUpBefore, nLen, xUndo, xRedo) + Notes(xI0).Length = nLen + Notes(xI0).VPosition = xUpBefore + End If + End If + xI0 += 1 + Loop + Else + Dim xI0 As Integer + Dim xI9 As Integer + For xI0 = 1 To UBound(Notes) + If Notes(xI0).VPosition >= xUpAfter Then Exit For + Next + For xI9 = xI0 To UBound(Notes) + If Notes(xI9).VPosition >= xUpBefore Then Exit For + Next + + For xI8 As Integer = xI0 To xI9 - 1 + Me.RedoRemoveNote(Notes(xI8), xUndo, xRedo) + Next + For xI8 As Integer = xI9 To UBound(Notes) + Notes(xI8 - xI9 + xI0) = Notes(xI8) + Next + ReDim Preserve Notes(UBound(Notes) - xI9 + xI0) + End If + End If + + GoTo case2 + + Case 3 + If NTInput Then + For xI0 As Integer = 1 To UBound(Notes) + If Notes(xI0).VPosition < xBottom Then + If Notes(xI0).VPosition + Notes(xI0).Length > xUpBefore Then + Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, Notes(xI0).Length + dLength, xUndo, xRedo) + Notes(xI0).Length += dLength + ElseIf Notes(xI0).VPosition + Notes(xI0).Length > xBottom Then + Dim nLen As Double = (Notes(xI0).Length + Notes(xI0).VPosition - xBottom) * dRatio + xBottom - Notes(xI0).VPosition + Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition, nLen, xUndo, xRedo) + Notes(xI0).Length = nLen + End If + ElseIf Notes(xI0).VPosition < xUpBefore Then + If Notes(xI0).VPosition + Notes(xI0).Length > xUpBefore Then + Dim nLen As Double = (xUpBefore - Notes(xI0).VPosition) * dRatio + Notes(xI0).VPosition + Notes(xI0).Length - xUpBefore + Dim nVPos As Double = (Notes(xI0).VPosition - xBottom) * dRatio + xBottom + Me.RedoLongNoteModify(Notes(xI0), nVPos, nLen, xUndo, xRedo) + Notes(xI0).Length = nLen + Notes(xI0).VPosition = nVPos + Else + Dim nLen As Double = Notes(xI0).Length * dRatio + Dim nVPos As Double = (Notes(xI0).VPosition - xBottom) * dRatio + xBottom + Me.RedoLongNoteModify(Notes(xI0), nVPos, nLen, xUndo, xRedo) + Notes(xI0).Length = nLen + Notes(xI0).VPosition = nVPos + End If + Else + Me.RedoLongNoteModify(Notes(xI0), Notes(xI0).VPosition + dLength, Notes(xI0).Length, xUndo, xRedo) + Notes(xI0).VPosition += dLength + End If + Next + Else + Dim xI0 As Integer + Dim xI9 As Integer + For xI0 = 1 To UBound(Notes) + If Notes(xI0).VPosition >= xBottom Then Exit For + Next + For xI9 = xI0 To UBound(Notes) + If Notes(xI9).VPosition >= xUpBefore Then Exit For + Next + + For xI8 As Integer = xI0 To xI9 - 1 + Dim nVP As Double = (Notes(xI8).VPosition - xBottom) * dRatio + xBottom + Me.RedoLongNoteModify(Notes(xI0), nVP, Notes(xI0).Length, xUndo, xRedo) + Notes(xI8).VPosition = nVP + Next + + 'GoTo case2 + + For xI8 As Integer = xI9 To UBound(Notes) + Me.RedoLongNoteModify(Notes(xI8), Notes(xI8).VPosition + dLength, Notes(xI8).Length, xUndo, xRedo) + Notes(xI8).VPosition += dLength + Next + End If + + End Select + + MeasureLength(xI1) = xRatio * 192.0R + LBeat.Items(xI1) = Add3Zeros(xI1) & ": " & xRatio & " ( " & xN & " / " & xD & " ) " + Next + UpdateMeasureBottom() + + LBeat.SelectedIndices.Clear() + For xI1 As Integer = 0 To UBound(xIndices) + LBeat.SelectedIndices.Add(xIndices(xI1)) + Next + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + End Sub + + Private Sub BBeatApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBeatApply.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim xxD As Integer = CInt(nBeatD.Value) + Dim xxN As Integer = CInt(nBeatN.Value) + Dim xxRatio As Double = xxN / xxD + + ApplyBeat(xxRatio, xUndo, xRedo, xxN, xxD) + AddUndo(xUndo, xBaseRedo.Next) + + RefreshPanelAll() + POStatusRefresh() + End Sub + + Private Sub BBeatApplyV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBeatApplyV.Click + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim a As Double + If Double.TryParse(tBeatValue.Text, a) Then + If a <= 0.0# Or a >= 1000.0# Then System.Media.SystemSounds.Hand.Play() : Exit Sub + + Dim xxD As Long = GetDenominator(a) + + ApplyBeat(a, xUndo, xRedo) + End If + AddUndo(xUndo, xBaseRedo.Next) + + RefreshPanelAll() + POStatusRefresh() + End Sub + + + Private Sub BHStageFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BHStageFile.Click, BHBanner.Click, BHBackBMP.Click + Dim xDiag As New OpenFileDialog + xDiag.Filter = Strings.FileType._image & "|*.bmp;*.png;*.jpg;*.gif|" & + Strings.FileType._all & "|*.*" + xDiag.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() + xDiag.DefaultExt = "png" + + If xDiag.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + InitPath = ExcludeFileName(xDiag.FileName) + + If [Object].ReferenceEquals(sender, BHStageFile) Then + THStageFile.Text = GetFileName(xDiag.FileName) + ElseIf [Object].ReferenceEquals(sender, BHBanner) Then + THBanner.Text = GetFileName(xDiag.FileName) + ElseIf [Object].ReferenceEquals(sender, BHBackBMP) Then + THBackBMP.Text = GetFileName(xDiag.FileName) + End If + End Sub + + Private Sub Switches_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ + POHeaderSwitch.CheckedChanged, + POGridSwitch.CheckedChanged, + POWaveFormSwitch.CheckedChanged, + POWAVSwitch.CheckedChanged, + POBMPSwitch.CheckedChanged, + POBeatSwitch.CheckedChanged, + POExpansionSwitch.CheckedChanged + + Try + Dim Source As CheckBox = CType(sender, CheckBox) + Dim Target As Panel = Nothing + + If Object.ReferenceEquals(sender, Nothing) Then : Exit Sub + ElseIf Object.ReferenceEquals(sender, POHeaderSwitch) Then : Target = POHeaderInner + ElseIf Object.ReferenceEquals(sender, POGridSwitch) Then : Target = POGridInner + ElseIf Object.ReferenceEquals(sender, POWaveFormSwitch) Then : Target = POWaveFormInner + ElseIf Object.ReferenceEquals(sender, POWAVSwitch) Then : Target = POWAVInner + ElseIf Object.ReferenceEquals(sender, POBMPSwitch) Then : Target = POBMPInner + ElseIf Object.ReferenceEquals(sender, POBeatSwitch) Then : Target = POBeatInner + ElseIf Object.ReferenceEquals(sender, POExpansionSwitch) Then : Target = POExpansionInner + End If + + If Source.Checked Then + Target.Visible = True + Else + Target.Visible = False + End If + + Catch ex As Exception + + End Try + End Sub + + Private Sub Expanders_CheckChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ + POHeaderExpander.CheckedChanged, + POGridExpander.CheckedChanged, + POWaveFormExpander.CheckedChanged, + POWAVExpander.CheckedChanged, + POBMPExpander.CheckedChanged, + POBeatExpander.CheckedChanged + + Try + Dim Source As CheckBox = CType(sender, CheckBox) + Dim Target As Panel = Nothing + 'Dim TargetParent As Panel = Nothing + + If Object.ReferenceEquals(sender, Nothing) Then : Exit Sub + ElseIf Object.ReferenceEquals(sender, POHeaderExpander) Then : Target = POHeaderPart2 ' : TargetParent = POHeaderInner + ElseIf Object.ReferenceEquals(sender, POGridExpander) Then : Target = POGridPart2 ' : TargetParent = POGridInner + ElseIf Object.ReferenceEquals(sender, POWaveFormExpander) Then : Target = POWaveFormPart2 ' : TargetParent = POWaveFormInner + ElseIf Object.ReferenceEquals(sender, POWAVExpander) Then : Target = POWAVPart2 ' : TargetParent = POWaveFormInner + ElseIf Object.ReferenceEquals(sender, POBMPExpander) Then : Target = POBMPPart2 ' : TargetParent = POWaveFormInner + ElseIf Object.ReferenceEquals(sender, POBeatExpander) Then : Target = POBeatPart2 ' : TargetParent = POWaveFormInner + End If + + If Source.Checked Then + Target.Visible = True + 'Source.Image = My.Resources.Collapse + Else + Target.Visible = False + 'Source.Image = My.Resources.Expand + End If + + Catch ex As Exception + + End Try + + End Sub + + Private Sub VerticalResizer_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POWAVResizer.MouseDown, POBMPResizer.MouseDown, POBeatResizer.MouseDown, POExpansionResizer.MouseDown + tempResize = e.Y + End Sub + + Private Sub HorizontalResizer_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POptionsResizer.MouseDown, SpL.MouseDown, SpR.MouseDown + tempResize = e.X + End Sub + + Private Sub POResizer_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POWAVResizer.MouseMove, POBMPResizer.MouseMove, POBeatResizer.MouseMove, POExpansionResizer.MouseMove + If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub + If e.Y = tempResize Then Exit Sub + + Try + Dim Source As Button = CType(sender, Button) + Dim Target As Panel = CType(Source.Parent, Panel) + + Dim xHeight As Integer = Target.Height + e.Y - tempResize + If xHeight < 10 Then xHeight = 10 + Target.Height = xHeight + + Target.Refresh() + Catch ex As Exception + + End Try + End Sub + + Private Sub POptionsResizer_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles POptionsResizer.MouseMove + If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub + If e.X = tempResize Then Exit Sub + + Try + Dim xWidth As Integer = POptionsScroll.Width - e.X + tempResize + If xWidth < 25 Then xWidth = 25 + POptionsScroll.Width = xWidth + + Me.Refresh() + Application.DoEvents() + Catch ex As Exception + + End Try + End Sub + + Private Sub SpR_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles SpR.MouseMove + If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub + If e.X = tempResize Then Exit Sub + + Try + Dim xWidth As Integer = PMainR.Width - e.X + tempResize + If xWidth < 0 Then xWidth = 0 + PMainR.Width = xWidth + + Me.ToolStripContainer1.Refresh() + Application.DoEvents() + Catch ex As Exception + + End Try + End Sub + + Private Sub SpL_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles SpL.MouseMove + If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub + If e.X = tempResize Then Exit Sub + + Try + Dim xWidth As Integer = PMainL.Width + e.X - tempResize + If xWidth < 0 Then xWidth = 0 + PMainL.Width = xWidth + + Me.ToolStripContainer1.Refresh() + Application.DoEvents() + Catch ex As Exception + + End Try + End Sub + + Private Sub mnGotoMeasure_Click(sender As Object, e As EventArgs) Handles mnGotoMeasure.Click + Dim s = InputBox(Strings.Messages.PromptEnterMeasure, "Enter Measure") + + ' Interpolation, Value = F + (C - F) * (i - Floor(i)) + Dim i As Double + If Double.TryParse(s, i) AndAlso i > 0 AndAlso i < 999 Then + Dim iCe As Integer = CInt(Math.Ceiling(i)) + Dim iFl As Integer = CInt(Math.Floor(i)) + PanelVScroll(PanelFocus) = -(MeasureBottom(iFl) + (MeasureBottom(iCe) - MeasureBottom(iFl)) * (i - iFl)) + End If + End Sub + + + ' Generic shuffle for basic type arrays + Public Function Shuffle(Of T)(items As T()) As T() + Dim temp As T + Dim j As Int32 + + For i = items.Count To 2 Step -1 + ' Pick an item for position i. + j = CInt(Math.Floor(i * Rnd())) + ' Swap + i -= 1 + temp = items(i) + items(i) = items(j) + items(j) = temp + Next + Return items + End Function + + Private Sub Expand_Load(sender As Object, e As EventArgs) Handles BExpansion.Click + If Not TExpansion.Enabled Then Exit Sub + + If TExpansion.Text = "" Then MsgBox(Strings.fopExpand.ErrorEmpty) : Exit Sub + ' Find different ranges of #IF sections + + ReDim ExpansionSplit(2) + Dim xDOp As New OpExpand() + ExpansionSplit(1) = "-" + Try + xDOp.ShowDialog(Me) + Catch + Exit Sub + End Try + End Sub + + Public Sub Expand_DisplayGhostNotes(Optional xGhostMode As Integer = 0) + Select Case GhostMode + Case 0 + GhostMode = xGhostMode + Case 1 + GhostMode = 0 + Case 2 + Dim xResult As MsgBoxResult = MsgBox(Strings.Messages.SaveWarning & Strings.Messages.GhostNotesShowMain, MsgBoxStyle.YesNo) + If xResult = MsgBoxResult.No Then Exit Sub + If xResult = MsgBoxResult.Yes Then SaveBMS() + SwapGhostNotes() + GhostMode = 0 + End Select + OpenBMS(ExpansionSplit(1), True) + End Sub + + Public Sub Expand_ModifyNotes() + Select Case GhostMode + Case 2 + SwapGhostNotes() + End Select + RemoveGhostNotes() + GhostMode = 2 + OpenBMS(ExpansionSplit(1), True) + SwapGhostNotes() + End Sub + + Public Sub Expand_ModifySection() + ' TODO: Revise to the now available tab style + Dim SourceFileName = FileName + + RemoveGhostNotes() + GhostMode = 0 + Dim RandomTempFilePath = ExcludeFileName(FileName) & "\" & RandomTempFileName + ' Picks another random filename because the programme somehow generated the same exact RandomFileName as a previous instance. 1 in 2-billion chance btw + Do Until Not My.Computer.FileSystem.FileExists(RandomTempFilePath) + RandomTempFileName = "___TempRandom" & GenerateRandomString(6, False) & ".bmsc" + RandomTempFilePath = ExcludeFileName(FileName) & "\" & RandomTempFileName + Loop + ExpansionSplit(1) = GenerateHeaderMeta() & GenerateHeaderIndexedData() & ExpansionSplit(1) + ' Dim xStrHeader As String = GenerateHeaderMeta() + ' xStrHeader &= GenerateHeaderIndexedData() + My.Computer.FileSystem.WriteAllText(RandomTempFilePath, ExpansionSplit(1), False, TextEncoding) + AddTempFileList(RandomTempFilePath) + TExpansion.Enabled = False + + SaveBMSStruct() + Dim xProg As New fLoadFileProgress(RandomTempFilePath) + xProg.ShowDialog(Me) + BMSFiles(BMSFileIndex).AddRandomSource(SourceFileName) + TExpansion.Enabled = True + SetIsSaved(False) + End Sub + + ''' + ''' Basically TBClose_Click except when RandomSource is not nothing. + ''' Assumes saved and RandomSource string is not empty when executing this sub. + ''' + Public Sub CloseFileWithRandomSource() + Dim xICurrent As Integer = BMSFileIndex + Dim xISource As Integer = FindBMSTabIndex(BMSFiles(BMSFileIndex).RandomSource) + Dim StructExpansionSplit() As String = BMSFiles(xISource).Struct.ExpansionSplit + StructExpansionSplit(1) = "" + + Dim ReadText As String = Nothing + ReadText = My.Computer.FileSystem.ReadAllText(BMSFiles(BMSFileIndex).Filename, TextEncoding) + TBTab_Click(BMSFiles(xISource).TSB, New EventArgs) + TExpansion.Text = "" + Dim xStrCompare() As String = Split(Replace(Replace(Replace(SaveBMS(), vbLf, vbCr), vbCr & vbCr, vbCr), vbCr, vbCrLf), vbCrLf,, CompareMethod.Text) + For Each xStrLine In Split(ReadText, vbCrLf) + If (Not xStrCompare.Contains(xStrLine) AndAlso xStrLine <> "*---------------------- RANDOM DATA FIELD") Or + SWIC(xStrLine, "#RANDOM") Or SWIC(xStrLine, "#IF") Or SWIC(xStrLine, "#ENDIF") Then + StructExpansionSplit(1) &= xStrLine & vbCrLf + End If + Next + TExpansion.Text = Join(StructExpansionSplit, vbCrLf) + TExpansion.Enabled = True + + RemoveBMSFile(xICurrent) + SetBMSFileIndex(xISource) + End Sub + + Public Sub Expand_RemoveGhostNotes() + Select Case GhostMode + Case 2 + SwapGhostNotes() + End Select + RemoveGhostNotes() + GhostMode = 0 + End Sub + + Public Sub RemoveGhostNotes() + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + If Notes(xI1).Ghost Then + RemoveNote(xI1) + Else + xI1 += 1 + End If + Loop + End Sub + + Public Sub RemoveCommentNotes() + Dim xI1 As Integer = 1 + Do While xI1 <= UBound(Notes) + If Notes(xI1).Comment Then + RemoveNote(xI1) + Else + xI1 += 1 + End If + Loop + End Sub + + Public Sub SwapGhostNotes() + For xI1 = 1 To UBound(Notes) + Notes(xI1).Ghost = Not Notes(xI1).Ghost + Next + End Sub + + Public Function GenerateRandomString(ByRef len As Integer, ByRef upper As Boolean) As String + Dim rand As New Random() + Dim allowableChars() As Char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ0123456789".ToCharArray() + Dim final As String = String.Empty + For i As Integer = 0 To len - 1 + final += allowableChars(rand.Next(allowableChars.Length - 1)) + Next + + Return IIf(upper, final.ToUpper(), final).ToString() + End Function + + Private Sub TExpansion_Click(sender As Object, e As EventArgs) Handles TExpansion.Click + Select Case GhostMode + Case 1 + Dim xResult As MsgBoxResult = MsgBox(Strings.Messages.SaveWarning & Strings.Messages.GhostNotesModifyExpansion1, MsgBoxStyle.YesNo) + If xResult = MsgBoxResult.No Then PMain.Focus() : Exit Sub + GhostMode = 0 + Case 2 + Dim xResult As MsgBoxResult = MsgBox(Strings.Messages.SaveWarning & Strings.Messages.GhostNotesModifyExpansion2, MsgBoxStyle.YesNo) + If xResult = MsgBoxResult.No Then PMain.Focus() : Exit Sub + SaveBMS() + Expand_RemoveGhostNotes() + End Select + End Sub + + Public Sub AddCommentLine(ByVal xComment As String) + For i = 1 To UBound(hCOM) + If IsNothing(hCOM(i)) Then hCOM(i) = xComment : hCOMNum = i : Exit For + Next + End Sub + + Public Sub RemoveCommentLine(ByVal xI As Integer) + Do While hCOM(xI) <> "" + If xI = hCOM.Length Then + hCOM(xI) = "" + Exit Do + Else + hCOM(xI) = hCOM(xI + 1) + End If + xI += 1 + Loop + hCOMNum = xI - 1 + End Sub + + Private Sub TimerPreviewNote_Tick(sender As Object, e As EventArgs) Handles TimerPreviewNote.Tick + Dim TimeNow = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds + If TimeNow > InternalPlayTimerEnd Then TimerPreviewNote.Enabled = False + InternalPlayTimerCount = TimeNow - InternalPlayTimerStart + RefreshPanelAll() + End Sub + + Private Sub TimerRefreshPanel_Tick(sender As Object, e As EventArgs) Handles TimerRefreshPanel.Tick + RefreshPanelAll() + End Sub +End Class \ No newline at end of file diff --git a/iBMSC/MiscButtons/WAVDuplicate.png b/iBMSC/MiscButtons/WAVDuplicate.png new file mode 100644 index 000000000..d08a73ae5 Binary files /dev/null and b/iBMSC/MiscButtons/WAVDuplicate.png differ diff --git a/iBMSC/My Project/Application.myapp b/iBMSC/My Project/Application.myapp index 3d2b33def..ae97443bf 100644 --- a/iBMSC/My Project/Application.myapp +++ b/iBMSC/My Project/Application.myapp @@ -1,5 +1,5 @@  - + true MainWindow false diff --git a/iBMSC/My Project/AssemblyInfo.vb b/iBMSC/My Project/AssemblyInfo.vb index 0dfe18c06..799f2b00d 100644 --- a/iBMSC/My Project/AssemblyInfo.vb +++ b/iBMSC/My Project/AssemblyInfo.vb @@ -1,8 +1,5 @@ -Imports System.Resources - -Imports System -Imports System.Reflection -Imports System.Runtime.InteropServices +Imports System.Reflection +Imports System.Resources ' General Information about an assembly is controlled through the following ' set of attributes. Change these attribute values to modify the information @@ -10,14 +7,14 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - - + + - + - + - + 'The following GUID is for the ID of the typelib if this project is exposed to COM @@ -33,7 +30,7 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + - \ No newline at end of file + \ No newline at end of file diff --git a/iBMSC/My Project/Resources.Designer.vb b/iBMSC/My Project/Resources.Designer.vb index 7ae1d3c5a..d2d976ad3 100644 --- a/iBMSC/My Project/Resources.Designer.vb +++ b/iBMSC/My Project/Resources.Designer.vb @@ -22,7 +22,7 @@ Namespace My.Resources ''' ''' A strongly-typed resource class, for looking up localized strings, etc. ''' - _ @@ -70,6 +70,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Blank() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Blank", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -210,6 +220,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property ImageErrorG() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("ImageErrorG", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property ImageErrorR() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("ImageErrorR", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -252,12 +282,12 @@ Namespace My.Resources ''' ''' Looks up a localized string similar to <?xml version="1.0" encoding="utf-16"?> - '''<iBMSC Major="2" Minor="4" Build="0"> + '''<iBMSC Major="3" Minor="1" Build="0"> ''' <Columns> ''' <Column Index="0" Width="50" Title="Measure" NoteColor="0" TextColor="-16711681" LongNoteColor="0" LongTextColor="-16711681" BG="0" /> - ''' <Column Index="1" Width="60" Title="BPM" NoteColor="0" TextColor="-65536" LongNoteColor="0" LongTextColor="-65536" BG="0" /> - ''' <Column Index="2" Width="50" Title="STOP" NoteColor="0" TextColor="-65536" LongNoteColor="0" LongTextColor="-65536" BG="0" /> - ''' [rest of string was truncated]";. + ''' <Column Index="1" Width="60" Title="SCROLL" NoteColor="0" TextColor="-65536" LongNoteColor="0" LongTextColor="-65536" BG="0" /> + ''' <Column Index="2" Width="60" Title="BPM" NoteColor="0" TextColor="-65536" LongNoteColor="0" LongTextColor="-65536" BG="0" /> + ''' [rest of string was truncated]";. ''' Friend ReadOnly Property O2Mania_Theme() As String Get @@ -305,6 +335,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property WAVDuplicate() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("WAVDuplicate", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -395,6 +435,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16Blank() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16Blank", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -415,6 +465,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16CheckErrorTechnical() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16CheckErrorTechnical", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16Color() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16Color", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -475,6 +545,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16Flip() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16Flip", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -495,6 +575,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16HRandom() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16HRandom", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -515,6 +605,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16Key() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16Key", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -685,6 +785,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16PastePattern() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16PastePattern", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -785,6 +895,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16Random() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16Random", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -815,6 +935,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16RRandom() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16RRandom", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -875,6 +1005,36 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16ShowWaveform() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16ShowWaveform", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16ShowWaveformN() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16ShowWaveformN", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property x16SRandom() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("x16SRandom", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' diff --git a/iBMSC/My Project/Resources.resx b/iBMSC/My Project/Resources.resx index 8f661ddb2..ab7c1188c 100644 --- a/iBMSC/My Project/Resources.resx +++ b/iBMSC/My Project/Resources.resx @@ -112,277 +112,325 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\About.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Select.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\Collapse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16settings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ConvertNotes.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Up.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ConvertNotesH.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ShowWaveform.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ConvertNotesHV.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16TimeSelection.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ConvertNotesL.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16MyO2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ConvertNotesN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16LnBMSE.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ConvertNotesV.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icon\icon2_16_highlight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\CursorResizeDown.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\ImageButtonsSmall\CursorResizeLeft.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\ImageButtonsSmall\CursorResizeRight.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\ImageButtonsSmall\Expand.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ModifyLabel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icon\icon2_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\SplashScreenx.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icon\icon2_16_highlight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\ImageError.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Theme.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\lgheight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16PreviewOnClick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\lgpartition.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16CheckErrorTechnical.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\lgsub.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16MeasureRemove.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\lgwidth.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Random.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\O2Mania.Theme.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16 + + ..\MiscButtons\x16PlayerDefault.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\Shortcut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\ConvertNotes.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\SplashScreenx.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16HRandom.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtons\Statistics3.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16SaveAs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\TransparentBG.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\WAVLeft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16PreviewCheckN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\WAVOffset.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\..\..\backup\3.4.0.12\iBMSC\ImageButtonsSmall\x16Flip.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\WAVPrecision.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Color.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\WAVSaturation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\ConvertNotesL.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\WAVTransparency.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\Expand.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\WAVWidth.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Statistics.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16About.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16SRandom.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\x16Add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16GeneralOptions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Associate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\WAVPrecision.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16CheckError.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Find.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16CheckErrorN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Paste.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Copy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ShowFileNameN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\x16Cut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Down.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\ImageButtonsSmall\x16Export.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\ImageButtonsSmall\x16Export2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\ConvertNotesH.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Find.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\CursorResizeLeft.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\ImageButtonsSmall\x16GeneralOptions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\lgpartition.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Import2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\x16Import.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Import2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icon\icon2_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Language.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16NewFromCode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16LnBMSE.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16RRandom.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16LnNT.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Mirror.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\x16Lock.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\About.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16MeasureInsert.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Associate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16MeasureRemove.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Down.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Mirror.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\lgheight.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16ModifyLabel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16PlayerOptions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16ModifyLabelN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\lgsub.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16ModifyLabelY.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\WAVTransparency.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\x16MultiSelect.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16MyO2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ShowFileName.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ModifyLabelN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16NewFromCode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\O2Mania.Theme.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16 - - ..\ImageButtonsSmall\x16NTInput.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Key.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\ConvertNotesHV.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Paste.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ShowWaveformN.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16VisualOptions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Export.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16PreviewCheck.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\Collapse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16CheckError.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtons\Statistics3.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\x16Pen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\TransparentBG.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16PlayB.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16CheckErrorN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\x16PlayerBrowse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Language.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\x16PlayerDefault.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\x16Lock.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16PlayerOptions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\WAVWidth.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16PreviewCheck.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\ConvertNotesN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16PreviewCheckN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\x16PlayerBrowse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16PreviewOnClick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Storm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16PreviewOnClickN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16MeasureInsert.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\x16Remove.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\x16Refresh.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\MiscButtons\x16Remove.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\x16Add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\ImageError.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16SaveAs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\WAVLeft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Select.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\WAVSaturation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16settings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\MiscButtons\WAVOffset.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16ShowFileName.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Copy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16ShowFileNameN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16NTInput.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Statistics.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\CursorResizeRight.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\ImageButtonsSmall\x16About.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\MiscButtons\WAVDuplicate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\ImageButtonsSmall\x16Stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Storm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16ModifyLabelY.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Theme.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtons\Shortcut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16TimeSelection.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16PreviewOnClickN.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\imagebuttons\imageerrorg.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16Up.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16LnNT.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\ImageButtonsSmall\x16VisualOptions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\ImageButtonsSmall\x16Export2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtons\ConvertNotesV.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16PlayB.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtons\ImageErrorR.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\MiscButtons\lgwidth.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16PastePattern.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtons\Blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ImageButtonsSmall\x16Blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/iBMSC/My Project/Settings.Designer.vb b/iBMSC/My Project/Settings.Designer.vb index 09b82ee6c..83193ac6d 100644 --- a/iBMSC/My Project/Settings.Designer.vb +++ b/iBMSC/My Project/Settings.Designer.vb @@ -15,7 +15,7 @@ Option Explicit On Namespace My _ Partial Friend NotInheritable Class MySettings Inherits Global.System.Configuration.ApplicationSettingsBase diff --git a/iBMSC/My Project/Settings.settings b/iBMSC/My Project/Settings.settings new file mode 100644 index 000000000..392df0a85 --- /dev/null +++ b/iBMSC/My Project/Settings.settings @@ -0,0 +1,6 @@ + + + + + + diff --git a/iBMSC/MyO2.vb b/iBMSC/MyO2.vb index 691b67b40..ede69a6b4 100644 --- a/iBMSC/MyO2.vb +++ b/iBMSC/MyO2.vb @@ -22,14 +22,14 @@ 'Adjust note Dim xcTime As Double = 0 Dim xcVPos As Double = 0 - Dim xcBPM As Integer = Notes(0).Value + Dim xcBPM As Integer = CInt(Notes(0).Value) If Not NTInput Then For xI1 = 1 To UBound(Notes) If Notes(xI1).ColumnIndex = niBPM Then xcTime += (Notes(xI1).VPosition - xcVPos) / xcBPM xcVPos = Notes(xI1).VPosition - xcBPM = Notes(xI1).Value + xcBPM = CInt(Notes(xI1).Value) Else Notes(xI1).VPosition = vBPM * (xcTime + (Notes(xI1).VPosition - xcVPos) / xcBPM) End If @@ -40,7 +40,7 @@ If Notes(xI1).ColumnIndex = niBPM Then xcTime += (Notes(xI1).VPosition - xcVPos) / xcBPM xcVPos = Notes(xI1).VPosition - xcBPM = Notes(xI1).Value + xcBPM = CInt(Notes(xI1).Value) ElseIf Notes(xI1).Length = 0 Then Notes(xI1).VPosition = vBPM * (xcTime + (Notes(xI1).VPosition - xcVPos) / xcBPM) Else @@ -55,7 +55,7 @@ If Notes(xI2).ColumnIndex = niBPM Then xcTime2 += (Notes(xI2).VPosition - xcVPos2) / xcBPM2 xcVPos2 = Notes(xI2).VPosition - xcBPM2 = Notes(xI2).Value + xcBPM2 = CInt(Notes(xI2).Value) End If Next Dim xNewTimeU As Double = (xcTime2 + (Notes(xI1).VPosition + Notes(xI1).Length - xcVPos2) / xcBPM2) @@ -94,7 +94,7 @@ SortByVPositionInsertion() UpdatePairing() Notes(0).Value = vBPM - THBPM.Value = vBPM / 10000 + THBPM.Value = CDec(vBPM / 10000) CalculateTotalPlayableNotes() CalculateGreatestVPosition() RefreshPanelAll() @@ -151,8 +151,8 @@ Dim xD48 As Integer = 0 Dim xD64 As Integer = 0 For xI2 As Integer = 0 To UBound(xVPos) - xD48 += Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 4) * 4) - xD64 += Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 3) * 3) + xD48 += CInt(Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 4) * 4)) + xD64 += CInt(Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 3) * 3)) Next xAdj64 = xD48 > xD64 @@ -170,8 +170,8 @@ End If Next -980: xLowerIndex = xUpperIndex -990: Next + xLowerIndex = xUpperIndex + Next Else For xMeasure As Integer = 0 To MeasureAtDisplacement(GreatestVPosition) @@ -183,21 +183,21 @@ For xI2 As Integer = 1 To UBound(Notes) If MeasureAtDisplacement(Notes(xI2).VPosition) > xMeasure Then Exit For - If GetBMSChannelBy(Notes(xI2)) <> xId Then GoTo 1330 - If IsChannelLongNote(xId) Xor CBool(Notes(xI2).Length) Then GoTo 1330 + If GetBMSChannelBy(Notes(xI2)) <> xId Then Exit For + If IsChannelLongNote(xId) Xor CBool(Notes(xI2).Length) Then Exit For If MeasureAtDisplacement(Notes(xI2).VPosition) = xMeasure AndAlso Math.Abs(Notes(xI2).VPosition - MeasureAtDisplacement(Notes(xI2).VPosition) * 192) > 0 Then ReDim Preserve xVPos(UBound(xVPos) + 1) xVPos(UBound(xVPos)) = Notes(xI2).VPosition - xMeasure * 192 : If xVPos(UBound(xVPos)) < 0 Then xVPos(UBound(xVPos)) = 0 End If - If Not CBool(Notes(xI2).Length) Then GoTo 1330 + If Not CBool(Notes(xI2).Length) Then Exit For If MeasureAtDisplacement(Notes(xI2).VPosition + Notes(xI2).Length) = xMeasure AndAlso Not Notes(xI2).VPosition + Notes(xI2).Length - xMeasure * 192 = 0 Then ReDim Preserve xVPos(UBound(xVPos) + 1) xVPos(UBound(xVPos)) = Notes(xI2).VPosition + Notes(xI2).Length - xMeasure * 192 : If xVPos(UBound(xVPos)) < 0 Then xVPos(UBound(xVPos)) = 0 End If -1330: Next + Next 'find gcd Dim xGCD As Double = 192 @@ -212,8 +212,8 @@ Dim xD48 As Integer = 0 Dim xD64 As Integer = 0 For xI2 As Integer = 0 To UBound(xVPos) - xD48 += Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 4) * 4) - xD64 += Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 3) * 3) + xD48 += CInt(Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 4) * 4)) + xD64 += CInt(Math.Abs(xVPos(xI2) - CInt(xVPos(xI2) / 3) * 3)) Next xAdj64 = xD48 > xD64 @@ -231,7 +231,7 @@ End If Next -1990: Next + Next End If Return xResult @@ -259,7 +259,7 @@ Notes(xI1).ColumnIndex = xadj.ColumnIndex And Notes(xI1).LongNote = xadj.LongNote And Notes(xI1).Hidden = xadj.Hidden Then - Notes(xI1).VPosition = CLng(Notes(xI1).VPosition / IIf(xadj.AdjTo64, 3, 4)) * IIf(xadj.AdjTo64, 3, 4) + Notes(xI1).VPosition = CLng(Notes(xI1).VPosition / CDbl(IIf(xadj.AdjTo64, 3, 4))) * CDbl(IIf(xadj.AdjTo64, 3, 4)) End If Next Next @@ -267,24 +267,24 @@ Else For Each xadj As dgMyO2.Adj In xaj For xI1 As Integer = 1 To UBound(Notes) - If CBool(Notes(xI1).Length) Xor xadj.LongNote Then GoTo 1100 + If CBool(Notes(xI1).Length) Xor xadj.LongNote Then Continue For Dim xStart As Double = Notes(xI1).VPosition Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length If MeasureAtDisplacement(Notes(xI1).VPosition) = xadj.Measure And Notes(xI1).ColumnIndex = xadj.ColumnIndex And Notes(xI1).Hidden = xadj.Hidden Then _ - xStart = CLng(Notes(xI1).VPosition / IIf(xadj.AdjTo64, 3, 4)) * IIf(xadj.AdjTo64, 3, 4) + xStart = CLng(Notes(xI1).VPosition / CDbl(IIf(xadj.AdjTo64, 3, 4))) * CDbl(IIf(xadj.AdjTo64, 3, 4)) If Notes(xI1).Length > 0 AndAlso MeasureAtDisplacement(Notes(xI1).VPosition + Notes(xI1).Length) = xadj.Measure And Notes(xI1).ColumnIndex = xadj.ColumnIndex And Notes(xI1).Hidden = xadj.Hidden Then _ - xEnd = CLng((Notes(xI1).VPosition + Notes(xI1).Length) / IIf(xadj.AdjTo64, 3, 4)) * IIf(xadj.AdjTo64, 3, 4) + xEnd = CLng((Notes(xI1).VPosition + Notes(xI1).Length) / CDbl(IIf(xadj.AdjTo64, 3, 4))) * CDbl(IIf(xadj.AdjTo64, 3, 4)) Notes(xI1).VPosition = xStart If Notes(xI1).Length > 0 Then Notes(xI1).Length = xEnd - Notes(xI1).VPosition -1100: Next + Next Next End If diff --git a/iBMSC/Option Windows/Note.vb b/iBMSC/Option Windows/Note.vb index e7bf20140..465ee3a75 100644 --- a/iBMSC/Option Windows/Note.vb +++ b/iBMSC/Option Windows/Note.vb @@ -7,10 +7,13 @@ Public Hidden As Boolean Public Length As Double Public Landmine As Boolean + Public Ghost As Boolean + Public Comment As Boolean Public LNPair As Integer Public Selected As Boolean Public HasError As Boolean + Public ErrorType As Integer 'Public TempBoolean As Boolean Public TempSelected As Boolean @@ -23,7 +26,9 @@ Value = note.Value And LongNote = note.LongNote And Hidden = note.Hidden And - Landmine = note.Landmine + Landmine = note.Landmine And + Ghost = note.Ghost And + Comment = note.Comment End Function Public Function equalsNT(note As Note) As Boolean Return VPosition = note.VPosition And @@ -31,7 +36,9 @@ Value = note.Value And Hidden = note.Hidden And Length = note.Length And - Landmine = note.Landmine + Landmine = note.Landmine And + Ghost = note.Ghost And + Comment = note.Comment End Function Public Sub New(nColumnIndex As Integer, @@ -40,14 +47,38 @@ Optional nLongNote As Double = 0, Optional nHidden As Boolean = False, Optional nSelected As Boolean = False, - Optional nLandmine As Boolean = False) + Optional nLandmine As Boolean = False, + Optional nGhost As Boolean = False, + Optional nComment As Boolean = False) VPosition = nVposition ColumnIndex = nColumnIndex Value = nValue - LongNote = nLongNote + LongNote = CBool(IIf(nLongNote > 0, True, False)) Length = nLongNote Hidden = nHidden Landmine = nLandmine + Ghost = nGhost + Comment = nComment + End Sub + + Public Sub New(nColumnIndex As Integer, + nVposition As Double, + nValue As Long, + Optional nLongNote As Boolean = False, + Optional nHidden As Boolean = False, + Optional nSelected As Boolean = False, + Optional nLandmine As Boolean = False, + Optional nGhost As Boolean = False, + Optional nComment As Boolean = False) + VPosition = nVposition + ColumnIndex = nColumnIndex + Value = nValue + LongNote = nLongNote + Length = 0 + Hidden = nHidden + Landmine = nLandmine + Ghost = nGhost + Comment = nComment End Sub Friend Function ToBytes() As Byte() @@ -66,6 +97,8 @@ bw.Write(Length) bw.Write(Hidden) bw.Write(Landmine) + bw.Write(Ghost) + bw.Write(Comment) End Sub Friend Sub FromBinReader(ByRef br As BinaryReader) @@ -76,6 +109,8 @@ Length = br.ReadDouble() Hidden = br.ReadBoolean() Landmine = br.ReadBoolean() + Ghost = br.ReadBoolean() + Comment = br.ReadBoolean() End Sub Friend Sub FromBytes(ByRef bytes() As Byte) diff --git a/iBMSC/Option Windows/OpExpand.Designer.vb b/iBMSC/Option Windows/OpExpand.Designer.vb new file mode 100644 index 000000000..013402940 --- /dev/null +++ b/iBMSC/Option Windows/OpExpand.Designer.vb @@ -0,0 +1,207 @@ + +Partial Class OpExpand + 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.Label5 = New System.Windows.Forms.Label() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.BModifyNotes = New System.Windows.Forms.Button() + Me.LExpansionCode = New System.Windows.Forms.ListBox() + Me.BDisplayGhostAll = New System.Windows.Forms.Button() + Me.BDisplayGhost = New System.Windows.Forms.Button() + Me.BModifySection = New System.Windows.Forms.Button() + Me.BRemoveGhostNotes = New System.Windows.Forms.Button() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel1.SuspendLayout() + Me.SuspendLayout() + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Location = New System.Drawing.Point(14, 10) + Me.Label5.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(129, 15) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Select Expansion Code:" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Cancel_Button.AutoSize = True + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Cancel_Button.Location = New System.Drawing.Point(164, 69) + Me.Cancel_Button.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(153, 28) + Me.Cancel_Button.TabIndex = 5 + Me.Cancel_Button.Text = "Cancel" + ' + 'BModifyNotes + ' + Me.BModifyNotes.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BModifyNotes.AutoSize = True + Me.BModifyNotes.DialogResult = System.Windows.Forms.DialogResult.OK + Me.BModifyNotes.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BModifyNotes.Location = New System.Drawing.Point(4, 36) + Me.BModifyNotes.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BModifyNotes.Name = "BModifyNotes" + Me.BModifyNotes.Size = New System.Drawing.Size(152, 27) + Me.BModifyNotes.TabIndex = 2 + Me.BModifyNotes.Text = "Modify Notes" + ' + 'LExpansionCode + ' + Me.LExpansionCode.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LExpansionCode.FormattingEnabled = True + Me.LExpansionCode.ItemHeight = 15 + Me.LExpansionCode.Location = New System.Drawing.Point(14, 29) + Me.LExpansionCode.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.LExpansionCode.Name = "LExpansionCode" + Me.LExpansionCode.Size = New System.Drawing.Size(321, 499) + Me.LExpansionCode.TabIndex = 1 + ' + 'BDisplayGhostAll + ' + Me.BDisplayGhostAll.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BDisplayGhostAll.AutoSize = True + Me.BDisplayGhostAll.DialogResult = System.Windows.Forms.DialogResult.OK + Me.BDisplayGhostAll.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BDisplayGhostAll.Location = New System.Drawing.Point(164, 3) + Me.BDisplayGhostAll.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BDisplayGhostAll.Name = "BDisplayGhostAll" + Me.BDisplayGhostAll.Size = New System.Drawing.Size(153, 27) + Me.BDisplayGhostAll.TabIndex = 1 + Me.BDisplayGhostAll.Text = "DisplayGhostNotes (All)" + ' + 'BDisplayGhost + ' + Me.BDisplayGhost.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BDisplayGhost.AutoSize = True + Me.BDisplayGhost.DialogResult = System.Windows.Forms.DialogResult.OK + Me.BDisplayGhost.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BDisplayGhost.Location = New System.Drawing.Point(4, 3) + Me.BDisplayGhost.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BDisplayGhost.Name = "BDisplayGhost" + Me.BDisplayGhost.Size = New System.Drawing.Size(152, 27) + Me.BDisplayGhost.TabIndex = 0 + Me.BDisplayGhost.Text = "Display Ghost Notes" + ' + 'BModifySection + ' + Me.BModifySection.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BModifySection.AutoSize = True + Me.BModifySection.DialogResult = System.Windows.Forms.DialogResult.Yes + Me.BModifySection.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BModifySection.Location = New System.Drawing.Point(164, 36) + Me.BModifySection.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BModifySection.Name = "BModifySection" + Me.BModifySection.Size = New System.Drawing.Size(153, 27) + Me.BModifySection.TabIndex = 3 + Me.BModifySection.Text = "Modify Section" + ' + 'BRemoveGhostNotes + ' + Me.BRemoveGhostNotes.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BRemoveGhostNotes.AutoSize = True + Me.BRemoveGhostNotes.DialogResult = System.Windows.Forms.DialogResult.No + Me.BRemoveGhostNotes.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BRemoveGhostNotes.Location = New System.Drawing.Point(4, 69) + Me.BRemoveGhostNotes.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BRemoveGhostNotes.Name = "BRemoveGhostNotes" + Me.BRemoveGhostNotes.Size = New System.Drawing.Size(152, 28) + Me.BRemoveGhostNotes.TabIndex = 4 + Me.BRemoveGhostNotes.Text = "Remove Ghost Notes" + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.BDisplayGhost, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.BRemoveGhostNotes, 0, 2) + Me.TableLayoutPanel1.Controls.Add(Me.BDisplayGhostAll, 1, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 2) + Me.TableLayoutPanel1.Controls.Add(Me.BModifySection, 1, 1) + Me.TableLayoutPanel1.Controls.Add(Me.BModifyNotes, 0, 1) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(14, 537) + Me.TableLayoutPanel1.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 3 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(321, 100) + Me.TableLayoutPanel1.TabIndex = 2 + ' + 'OpExpand + ' + Me.AcceptButton = Me.BDisplayGhost + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(349, 647) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Controls.Add(Me.LExpansionCode) + Me.Controls.Add(Me.Label5) + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "OpExpand" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "#RANDOM Editor" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.TableLayoutPanel1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents Label5 As Label + Friend WithEvents Cancel_Button As Button + Friend WithEvents BModifyNotes As Button + Friend WithEvents LExpansionCode As ListBox + Friend WithEvents BDisplayGhostAll As Button + Friend WithEvents BDisplayGhost As Button + Friend WithEvents BModifySection As Button + Friend WithEvents BRemoveGhostNotes As Button + Friend WithEvents TableLayoutPanel1 As TableLayoutPanel +End Class diff --git a/iBMSC/Option Windows/OpExpand.resx b/iBMSC/Option Windows/OpExpand.resx new file mode 100644 index 000000000..29dcb1b3a --- /dev/null +++ b/iBMSC/Option Windows/OpExpand.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/iBMSC/Option Windows/OpExpand.vb b/iBMSC/Option Windows/OpExpand.vb new file mode 100644 index 000000000..643027731 --- /dev/null +++ b/iBMSC/Option Windows/OpExpand.vb @@ -0,0 +1,151 @@ +Public Class OpExpand + + Dim TExpansionTextSplit() As String = Split(MainWindow.TExpansion.Text, vbCrLf, , CompareMethod.Text) + Dim CurrSelection As Integer = -1 + Dim RangeL As Integer = -1 + Dim RangeU As Integer = -1 + Dim xStack As Integer = 0 + Public Sub New() + InitializeComponent() + + ' If no expansion text + If MainWindow.TExpansion.Text = "" Then + MsgBox(Strings.fopExpand.ErrorEmpty) + Me.Close() + Exit Sub + End If + + ' List expansion code per line + LExpansionCode.Items.Clear() + For Each xStrLine In TExpansionTextSplit + LExpansionCode.Items.Add(xStrLine) + Next + End Sub + + Private Sub OpExpand_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Me.Font = MainWindow.Font + + Text = Strings.fopExpand.Title + Label5.Text = Strings.fopExpand.SelectExpansionCode + BDisplayGhost.Text = Strings.fopExpand.DisplayGhostNotes + BDisplayGhostAll.Text = Strings.fopExpand.DisplayGhostNotesAll + BModifyNotes.Text = Strings.fopExpand.ModifyNotes + BModifySection.Text = Strings.fopExpand.ModifySection + BRemoveGhostNotes.Text = Strings.fopExpand.RemoveGhostNotes + Cancel_Button.Text = Strings.Cancel + End Sub + + Private Sub BDisplayGhost_Click(sender As Object, e As EventArgs) Handles BDisplayGhost.Click, LExpansionCode.DoubleClick + Select_Section() + If MainWindow.ExpansionSplit(1) = "-" Then Exit Sub + Me.Close() + MainWindow.Expand_DisplayGhostNotes(1) + End Sub + + Private Sub BDisplayGhostAll_Click(sender As Object, e As EventArgs) Handles BDisplayGhostAll.Click + MainWindow.ExpansionSplit(1) = "" + For Each xStrLine As String In MainWindow.TExpansion.Text.Split(CChar(vbCrLf)) + If xStrLine <> "" AndAlso Not SWIC(xStrLine, "#RANDOM") AndAlso Not SWIC(xStrLine, "#IF") Then MainWindow.ExpansionSplit(1) &= xStrLine & vbCrLf + Next + Me.Close() + MainWindow.Expand_DisplayGhostNotes() + End Sub + + Private Sub BModifyNotes_Click(sender As Object, e As EventArgs) Handles BModifyNotes.Click + Select_Section() + If MainWindow.ExpansionSplit(1) = "-" Then Exit Sub + Me.Close() + MainWindow.Expand_ModifyNotes() + End Sub + + Private Sub BModifySection_Click(sender As Object, e As EventArgs) Handles BModifySection.Click ', LExpansionCode.DoubleClick + Select_Section() + If MainWindow.ExpansionSplit(1) = "-" Then Exit Sub + Me.Close() + MainWindow.Expand_ModifySection() + End Sub + + Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ExpansionCodeList_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LExpansionCode.Click + CurrSelection = LExpansionCode.SelectedIndex + End Sub + + Private Function SWIC(str As String, strHash As String) As Boolean ' Copied from ChartIO.vb + Return str.StartsWith(strHash, StringComparison.CurrentCultureIgnoreCase) + End Function + + Private Sub BRemoveGhostNotes_Click(sender As Object, e As EventArgs) Handles BRemoveGhostNotes.Click + Me.Close() + MainWindow.Expand_RemoveGhostNotes() + End Sub + + Private Sub Select_Section() ' Select #if section + ' If no line selected + If CurrSelection = -1 Then + MsgBox(Strings.fopExpand.ErrorNoLineSelected) + MainWindow.ExpansionSplit(1) = "-" + Exit Sub + End If + + ' Find the first line of the currect #if section, right after #if + For L = CurrSelection To 0 Step -1 + If SWIC(LExpansionCode.Items(L).ToString(), "#ENDIF") AndAlso L <> CurrSelection Then + xStack += 1 + End If + + If SWIC(LExpansionCode.Items(L).ToString(), "#IF") Then + If xStack > 0 Then + xStack -= 1 + Else + RangeL = L + 1 + Exit For + End If + + End If + Next + ' Find the last line of the currect #if section, right before #endif + For U = CurrSelection To TExpansionTextSplit.Length - 1 + If SWIC(LExpansionCode.Items(U).ToString(), "#IF") AndAlso U <> CurrSelection Then + xStack += 1 + End If + + If SWIC(LExpansionCode.Items(U).ToString(), "#ENDIF") Then + If xStack > 0 Then + xStack -= 1 + Else + RangeU = U - 1 + Exit For + End If + + End If + Next + + ' If RangeL or RangeU's values have not been found + If RangeL = -1 Or RangeU = -1 Then + MsgBox(Strings.fopExpand.ErrorNotDetected) + MainWindow.ExpansionSplit(1) = "-" + Exit Sub + End If + + ' Split expansion code into 3 parts + Dim TExpansionTextSelected(RangeL - 1) As String + For i = 0 To RangeL - 1 + TExpansionTextSelected(i) = TExpansionTextSplit(i) + Next + MainWindow.ExpansionSplit(0) = Join(TExpansionTextSelected, vbCrLf) + ReDim TExpansionTextSelected(RangeU - RangeL) + For i = RangeL To RangeU + TExpansionTextSelected(i - RangeL) = TExpansionTextSplit(i) + Next + MainWindow.ExpansionSplit(1) = Join(TExpansionTextSelected, vbCrLf) + ReDim TExpansionTextSelected(TExpansionTextSplit.Length - 1 - RangeU - 1) + For i = RangeU + 1 To TExpansionTextSplit.Length - 1 + TExpansionTextSelected(i - RangeU - 1) = TExpansionTextSplit(i) + Next + MainWindow.ExpansionSplit(2) = Join(TExpansionTextSelected, vbCrLf) + End Sub +End Class \ No newline at end of file diff --git a/iBMSC/Option Windows/OpGeneral.Designer.vb b/iBMSC/Option Windows/OpGeneral.Designer.vb index 18fca2da7..761b54d47 100644 --- a/iBMSC/Option Windows/OpGeneral.Designer.vb +++ b/iBMSC/Option Windows/OpGeneral.Designer.vb @@ -53,11 +53,36 @@ Partial Class OpGeneral Me.FlowLayoutPanel1 = New System.Windows.Forms.FlowLayoutPanel() Me.rMiddleAuto = New System.Windows.Forms.RadioButton() Me.rMiddleDrag = New System.Windows.Forms.RadioButton() + Me.nJackBPM = New System.Windows.Forms.NumericUpDown() + Me.Label8 = New System.Windows.Forms.Label() + Me.nJackTH = New System.Windows.Forms.NumericUpDown() + Me.Label9 = New System.Windows.Forms.Label() + Me.LabelTHJack = New System.Windows.Forms.Label() + Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() + Me.cAudioLine = New System.Windows.Forms.CheckBox() + Me.cTemplateSnapToVPosition = New System.Windows.Forms.CheckBox() + Me.NLNGap = New System.Windows.Forms.NumericUpDown() + Me.Label10 = New System.Windows.Forms.Label() + Me.TableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() + Me.Label11 = New System.Windows.Forms.Label() + Me.TableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() + Me.LabelTHLN = New System.Windows.Forms.Label() + Me.TTemp = New System.Windows.Forms.TextBox() + Me.TableLayoutPanel5 = New System.Windows.Forms.TableLayoutPanel() + Me.cPastePatternToVPosition = New System.Windows.Forms.CheckBox() + Me.cPreloadBMSStruct = New System.Windows.Forms.CheckBox() Me.TableLayoutPanel1.SuspendLayout() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.NAutoSave, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.nGridPartition, System.ComponentModel.ISupportInitialize).BeginInit() Me.FlowLayoutPanel1.SuspendLayout() + CType(Me.nJackBPM, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.nJackTH, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TableLayoutPanel2.SuspendLayout() + CType(Me.NLNGap, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TableLayoutPanel3.SuspendLayout() + Me.TableLayoutPanel4.SuspendLayout() + Me.TableLayoutPanel5.SuspendLayout() Me.SuspendLayout() ' 'TableLayoutPanel1 @@ -68,12 +93,12 @@ Partial Class OpGeneral Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(229, 463) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(229, 669) Me.TableLayoutPanel1.Name = "TableLayoutPanel1" Me.TableLayoutPanel1.RowCount = 1 Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) Me.TableLayoutPanel1.Size = New System.Drawing.Size(170, 33) - Me.TableLayoutPanel1.TabIndex = 0 + Me.TableLayoutPanel1.TabIndex = 109 ' 'OK_Button ' @@ -96,13 +121,15 @@ Partial Class OpGeneral ' 'CWheel ' + Me.CWheel.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.CWheel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList Me.CWheel.FormattingEnabled = True Me.CWheel.Items.AddRange(New Object() {"1", "1 / 2", "1 / 3", "1 / 4"}) - Me.CWheel.Location = New System.Drawing.Point(154, 269) + Me.CWheel.Location = New System.Drawing.Point(154, 475) Me.CWheel.Name = "CWheel" Me.CWheel.Size = New System.Drawing.Size(237, 23) - Me.CWheel.TabIndex = 11 + Me.CWheel.TabIndex = 101 ' 'CTextEncoding ' @@ -112,14 +139,16 @@ Partial Class OpGeneral Me.CTextEncoding.Location = New System.Drawing.Point(137, 18) Me.CTextEncoding.Name = "CTextEncoding" Me.CTextEncoding.Size = New System.Drawing.Size(254, 23) - Me.CTextEncoding.TabIndex = 2 + Me.CTextEncoding.TabIndex = 1 ' 'Label1 ' - Me.Label1.Location = New System.Drawing.Point(12, 271) + Me.Label1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label1.Location = New System.Drawing.Point(12, 477) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(136, 17) - Me.Label1.TabIndex = 40 + Me.Label1.TabIndex = 100 Me.Label1.Text = "Mouse Wheel" Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' @@ -128,7 +157,7 @@ Partial Class OpGeneral Me.Label2.Location = New System.Drawing.Point(-5, 20) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(136, 17) - Me.Label2.TabIndex = 41 + Me.Label2.TabIndex = 1 Me.Label2.Text = "Text Encoding" Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' @@ -137,7 +166,7 @@ Partial Class OpGeneral Me.Label4.Location = New System.Drawing.Point(-5, 50) Me.Label4.Name = "Label4" Me.Label4.Size = New System.Drawing.Size(136, 17) - Me.Label4.TabIndex = 43 + Me.Label4.TabIndex = 2 Me.Label4.Text = "Associate Filetype" Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' @@ -155,17 +184,21 @@ Partial Class OpGeneral Me.cBeep.AutoSize = True Me.cBeep.Checked = True Me.cBeep.CheckState = System.Windows.Forms.CheckState.Checked - Me.cBeep.Location = New System.Drawing.Point(32, 169) + Me.TableLayoutPanel5.SetColumnSpan(Me.cBeep, 3) + Me.cBeep.Dock = System.Windows.Forms.DockStyle.Left + Me.cBeep.Location = New System.Drawing.Point(3, 28) Me.cBeep.Name = "cBeep" Me.cBeep.Size = New System.Drawing.Size(116, 19) - Me.cBeep.TabIndex = 8 + Me.cBeep.TabIndex = 12 Me.cBeep.Text = "Beep while saved" Me.cBeep.UseVisualStyleBackColor = True ' 'PictureBox1 ' + Me.PictureBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.PictureBox1.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer)) - Me.PictureBox1.Location = New System.Drawing.Point(20, 253) + Me.PictureBox1.Location = New System.Drawing.Point(20, 459) Me.PictureBox1.Name = "PictureBox1" Me.PictureBox1.Size = New System.Drawing.Size(375, 1) Me.PictureBox1.TabIndex = 47 @@ -174,40 +207,48 @@ Partial Class OpGeneral 'cBpm1296 ' Me.cBpm1296.AutoSize = True - Me.cBpm1296.Location = New System.Drawing.Point(32, 194) + Me.TableLayoutPanel5.SetColumnSpan(Me.cBpm1296, 3) + Me.cBpm1296.Dock = System.Windows.Forms.DockStyle.Left + Me.cBpm1296.Location = New System.Drawing.Point(3, 78) Me.cBpm1296.Name = "cBpm1296" - Me.cBpm1296.Size = New System.Drawing.Size(253, 19) - Me.cBpm1296.TabIndex = 9 + Me.cBpm1296.Size = New System.Drawing.Size(254, 19) + Me.cBpm1296.TabIndex = 13 Me.cBpm1296.Text = "Extend number of multi-byte BPMs to 1296" Me.cBpm1296.UseVisualStyleBackColor = True ' 'cStop1296 ' Me.cStop1296.AutoSize = True - Me.cStop1296.Location = New System.Drawing.Point(32, 219) + Me.TableLayoutPanel5.SetColumnSpan(Me.cStop1296, 3) + Me.cStop1296.Dock = System.Windows.Forms.DockStyle.Left + Me.cStop1296.Location = New System.Drawing.Point(3, 103) Me.cStop1296.Name = "cStop1296" - Me.cStop1296.Size = New System.Drawing.Size(198, 19) - Me.cStop1296.TabIndex = 10 + Me.cStop1296.Size = New System.Drawing.Size(197, 19) + Me.cStop1296.TabIndex = 14 Me.cStop1296.Text = "Extend number of STOPs to 1296" Me.cStop1296.UseVisualStyleBackColor = True ' 'cMEnterFocus ' + Me.cMEnterFocus.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.cMEnterFocus.AutoSize = True - Me.cMEnterFocus.Location = New System.Drawing.Point(34, 379) + Me.cMEnterFocus.Location = New System.Drawing.Point(34, 585) Me.cMEnterFocus.Name = "cMEnterFocus" Me.cMEnterFocus.Size = New System.Drawing.Size(322, 19) - Me.cMEnterFocus.TabIndex = 14 + Me.cMEnterFocus.TabIndex = 106 Me.cMEnterFocus.Text = "Automatically set focus to editing panel on mouse enter" Me.cMEnterFocus.UseVisualStyleBackColor = True ' 'cMClickFocus ' + Me.cMClickFocus.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.cMClickFocus.AutoSize = True - Me.cMClickFocus.Location = New System.Drawing.Point(34, 404) + Me.cMClickFocus.Location = New System.Drawing.Point(34, 610) Me.cMClickFocus.Name = "cMClickFocus" Me.cMClickFocus.Size = New System.Drawing.Size(293, 19) - Me.cMClickFocus.TabIndex = 15 + Me.cMClickFocus.TabIndex = 107 Me.cMClickFocus.Text = "Disable first click if the editing panel is not focused" Me.cMClickFocus.UseVisualStyleBackColor = True ' @@ -216,7 +257,7 @@ Partial Class OpGeneral Me.TBAssociatePMS.Location = New System.Drawing.Point(310, 78) Me.TBAssociatePMS.Name = "TBAssociatePMS" Me.TBAssociatePMS.Size = New System.Drawing.Size(81, 23) - Me.TBAssociatePMS.TabIndex = 4 + Me.TBAssociatePMS.TabIndex = 7 Me.TBAssociatePMS.Text = "*.pms" Me.TBAssociatePMS.UseVisualStyleBackColor = True ' @@ -225,45 +266,52 @@ Partial Class OpGeneral Me.TBAssociateIBMSC.Location = New System.Drawing.Point(265, 47) Me.TBAssociateIBMSC.Name = "TBAssociateIBMSC" Me.TBAssociateIBMSC.Size = New System.Drawing.Size(127, 23) - Me.TBAssociateIBMSC.TabIndex = 5 + Me.TBAssociateIBMSC.TabIndex = 4 Me.TBAssociateIBMSC.Text = "*.ibmsc" Me.TBAssociateIBMSC.UseVisualStyleBackColor = True ' 'Label5 ' - Me.Label5.Location = New System.Drawing.Point(12, 300) + Me.Label5.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label5.Location = New System.Drawing.Point(12, 506) Me.Label5.Name = "Label5" Me.Label5.Size = New System.Drawing.Size(136, 17) - Me.Label5.TabIndex = 56 + Me.Label5.TabIndex = 102 Me.Label5.Text = "PageUp / PageDown" Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' 'CPgUpDn ' + Me.CPgUpDn.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.CPgUpDn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList Me.CPgUpDn.FormattingEnabled = True Me.CPgUpDn.Items.AddRange(New Object() {"8", "6", "4", "3", "2", "1", "1 / 2"}) - Me.CPgUpDn.Location = New System.Drawing.Point(154, 298) + Me.CPgUpDn.Location = New System.Drawing.Point(154, 504) Me.CPgUpDn.Name = "CPgUpDn" Me.CPgUpDn.Size = New System.Drawing.Size(237, 23) - Me.CPgUpDn.TabIndex = 12 + Me.CPgUpDn.TabIndex = 103 ' 'NAutoSave ' + Me.NAutoSave.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.NAutoSave.DecimalPlaces = 1 - Me.NAutoSave.Location = New System.Drawing.Point(171, 142) + Me.NAutoSave.Location = New System.Drawing.Point(191, 3) Me.NAutoSave.Maximum = New Decimal(New Integer() {60, 0, 0, 0}) Me.NAutoSave.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) Me.NAutoSave.Name = "NAutoSave" - Me.NAutoSave.Size = New System.Drawing.Size(62, 23) - Me.NAutoSave.TabIndex = 7 + Me.NAutoSave.Size = New System.Drawing.Size(88, 23) + Me.NAutoSave.TabIndex = 11 Me.NAutoSave.Value = New Decimal(New Integer() {2, 0, 0, 0}) ' 'Label7 ' - Me.Label7.Location = New System.Drawing.Point(239, 144) + Me.Label7.Dock = System.Windows.Forms.DockStyle.Left + Me.Label7.Location = New System.Drawing.Point(285, 0) Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(73, 17) + Me.Label7.Size = New System.Drawing.Size(73, 25) Me.Label7.TabIndex = 59 Me.Label7.Text = "minutes" Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft @@ -273,42 +321,46 @@ Partial Class OpGeneral Me.cAutoSave.AutoSize = True Me.cAutoSave.Checked = True Me.cAutoSave.CheckState = System.Windows.Forms.CheckState.Checked - Me.cAutoSave.Location = New System.Drawing.Point(32, 144) + Me.cAutoSave.Dock = System.Windows.Forms.DockStyle.Left + Me.cAutoSave.Location = New System.Drawing.Point(3, 3) Me.cAutoSave.Name = "cAutoSave" Me.cAutoSave.Size = New System.Drawing.Size(76, 19) - Me.cAutoSave.TabIndex = 6 + Me.cAutoSave.TabIndex = 10 Me.cAutoSave.Text = "AutoSave" Me.cAutoSave.UseVisualStyleBackColor = True ' 'cMStopPreview ' + Me.cMStopPreview.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.cMStopPreview.AutoSize = True Me.cMStopPreview.Checked = True Me.cMStopPreview.CheckState = System.Windows.Forms.CheckState.Checked - Me.cMStopPreview.Location = New System.Drawing.Point(34, 429) + Me.cMStopPreview.Location = New System.Drawing.Point(34, 635) Me.cMStopPreview.Name = "cMStopPreview" Me.cMStopPreview.Size = New System.Drawing.Size(253, 19) - Me.cMStopPreview.TabIndex = 60 + Me.cMStopPreview.TabIndex = 108 Me.cMStopPreview.Text = "Stop preview if clicked on the editing panel" Me.cMStopPreview.UseVisualStyleBackColor = True ' 'nGridPartition ' - Me.nGridPartition.Location = New System.Drawing.Point(219, 107) + Me.nGridPartition.Location = New System.Drawing.Point(197, 3) Me.nGridPartition.Maximum = New Decimal(New Integer() {10000, 0, 0, 0}) Me.nGridPartition.Minimum = New Decimal(New Integer() {8, 0, 0, 0}) Me.nGridPartition.Name = "nGridPartition" Me.nGridPartition.Size = New System.Drawing.Size(79, 23) - Me.nGridPartition.TabIndex = 61 + Me.nGridPartition.TabIndex = 9 Me.nGridPartition.Value = New Decimal(New Integer() {192, 0, 0, 0}) ' 'Label6 ' - Me.Label6.Location = New System.Drawing.Point(44, 108) + Me.Label6.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label6.Location = New System.Drawing.Point(3, 0) Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(169, 17) - Me.Label6.TabIndex = 62 - Me.Label6.Text = "Max Grid Partition in BMS" + Me.Label6.Size = New System.Drawing.Size(188, 33) + Me.Label6.TabIndex = 8 + Me.Label6.Text = "Maximum Grid Partition in BMS" Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' 'TBAssociateBME @@ -316,7 +368,7 @@ Partial Class OpGeneral Me.TBAssociateBME.Location = New System.Drawing.Point(137, 78) Me.TBAssociateBME.Name = "TBAssociateBME" Me.TBAssociateBME.Size = New System.Drawing.Size(76, 23) - Me.TBAssociateBME.TabIndex = 63 + Me.TBAssociateBME.TabIndex = 5 Me.TBAssociateBME.Text = "*.bme" Me.TBAssociateBME.UseVisualStyleBackColor = True ' @@ -325,30 +377,34 @@ Partial Class OpGeneral Me.TBAssociateBML.Location = New System.Drawing.Point(219, 78) Me.TBAssociateBML.Name = "TBAssociateBML" Me.TBAssociateBML.Size = New System.Drawing.Size(85, 23) - Me.TBAssociateBML.TabIndex = 64 + Me.TBAssociateBML.TabIndex = 6 Me.TBAssociateBML.Text = "*.bml" Me.TBAssociateBML.UseVisualStyleBackColor = True ' 'Label3 ' - Me.Label3.Location = New System.Drawing.Point(12, 328) + Me.Label3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label3.Location = New System.Drawing.Point(12, 534) Me.Label3.Name = "Label3" Me.Label3.Size = New System.Drawing.Size(136, 17) - Me.Label3.TabIndex = 65 + Me.Label3.TabIndex = 104 Me.Label3.Text = "Mouse Middle Button" Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight ' 'FlowLayoutPanel1 ' + Me.FlowLayoutPanel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.FlowLayoutPanel1.AutoSize = True Me.FlowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink Me.FlowLayoutPanel1.Controls.Add(Me.rMiddleAuto) Me.FlowLayoutPanel1.Controls.Add(Me.rMiddleDrag) Me.FlowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown - Me.FlowLayoutPanel1.Location = New System.Drawing.Point(154, 327) + Me.FlowLayoutPanel1.Location = New System.Drawing.Point(154, 533) Me.FlowLayoutPanel1.Name = "FlowLayoutPanel1" Me.FlowLayoutPanel1.Size = New System.Drawing.Size(141, 38) - Me.FlowLayoutPanel1.TabIndex = 66 + Me.FlowLayoutPanel1.TabIndex = 105 ' 'rMiddleAuto ' @@ -375,32 +431,259 @@ Partial Class OpGeneral Me.rMiddleDrag.Text = "Click and Drag" Me.rMiddleDrag.UseVisualStyleBackColor = True ' + 'nJackBPM + ' + Me.nJackBPM.Location = New System.Drawing.Point(3, 3) + Me.nJackBPM.Maximum = New Decimal(New Integer() {10000, 0, 0, 0}) + Me.nJackBPM.Minimum = New Decimal(New Integer() {8, 0, 0, 0}) + Me.nJackBPM.Name = "nJackBPM" + Me.nJackBPM.Size = New System.Drawing.Size(50, 23) + Me.nJackBPM.TabIndex = 9 + Me.nJackBPM.Value = New Decimal(New Integer() {255, 0, 0, 0}) + ' + 'Label8 + ' + Me.Label8.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label8.Location = New System.Drawing.Point(3, 33) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(188, 33) + Me.Label8.TabIndex = 8 + Me.Label8.Text = "Minimum Jack Threshold" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'nJackTH + ' + Me.nJackTH.Location = New System.Drawing.Point(101, 3) + Me.nJackTH.Maximum = New Decimal(New Integer() {10000, 0, 0, 0}) + Me.nJackTH.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.nJackTH.Name = "nJackTH" + Me.nJackTH.Size = New System.Drawing.Size(35, 23) + Me.nJackTH.TabIndex = 9 + Me.nJackTH.Value = New Decimal(New Integer() {16, 0, 0, 0}) + ' + 'Label9 + ' + Me.Label9.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label9.Location = New System.Drawing.Point(59, 0) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(36, 27) + Me.Label9.TabIndex = 8 + Me.Label9.Text = "BPM" + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'LabelTHJack + ' + Me.LabelTHJack.Dock = System.Windows.Forms.DockStyle.Fill + Me.LabelTHJack.Location = New System.Drawing.Point(142, 0) + Me.LabelTHJack.Name = "LabelTHJack" + Me.LabelTHJack.Size = New System.Drawing.Size(30, 27) + Me.LabelTHJack.TabIndex = 8 + Me.LabelTHJack.Text = "th" + Me.LabelTHJack.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'TableLayoutPanel2 + ' + Me.TableLayoutPanel2.ColumnCount = 4 + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 32.22222!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 24.44444!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 23.88889!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 19.44444!)) + Me.TableLayoutPanel2.Controls.Add(Me.nJackBPM, 0, 0) + Me.TableLayoutPanel2.Controls.Add(Me.Label9, 1, 0) + Me.TableLayoutPanel2.Controls.Add(Me.nJackTH, 2, 0) + Me.TableLayoutPanel2.Controls.Add(Me.LabelTHJack, 3, 0) + Me.TableLayoutPanel2.Location = New System.Drawing.Point(197, 36) + Me.TableLayoutPanel2.Name = "TableLayoutPanel2" + Me.TableLayoutPanel2.RowCount = 1 + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel2.Size = New System.Drawing.Size(175, 27) + Me.TableLayoutPanel2.TabIndex = 110 + ' + 'cAudioLine + ' + Me.cAudioLine.AutoSize = True + Me.TableLayoutPanel5.SetColumnSpan(Me.cAudioLine, 3) + Me.cAudioLine.Dock = System.Windows.Forms.DockStyle.Left + Me.cAudioLine.Location = New System.Drawing.Point(3, 128) + Me.cAudioLine.Name = "cAudioLine" + Me.cAudioLine.Size = New System.Drawing.Size(233, 19) + Me.cAudioLine.TabIndex = 14 + Me.cAudioLine.Text = "Display audio lines during note preview" + Me.cAudioLine.UseVisualStyleBackColor = True + ' + 'cTemplateSnapToVPosition + ' + Me.cTemplateSnapToVPosition.AutoSize = True + Me.TableLayoutPanel5.SetColumnSpan(Me.cTemplateSnapToVPosition, 3) + Me.cTemplateSnapToVPosition.Dock = System.Windows.Forms.DockStyle.Left + Me.cTemplateSnapToVPosition.Location = New System.Drawing.Point(3, 153) + Me.cTemplateSnapToVPosition.Name = "cTemplateSnapToVPosition" + Me.cTemplateSnapToVPosition.Size = New System.Drawing.Size(326, 19) + Me.cTemplateSnapToVPosition.TabIndex = 111 + Me.cTemplateSnapToVPosition.Text = "Snap to Vertical Position for Moving to Template Position" + Me.cTemplateSnapToVPosition.UseVisualStyleBackColor = True + ' + 'NLNGap + ' + Me.NLNGap.DecimalPlaces = 4 + Me.NLNGap.Increment = New Decimal(New Integer() {1, 0, 0, 65536}) + Me.NLNGap.Location = New System.Drawing.Point(3, 3) + Me.NLNGap.Name = "NLNGap" + Me.NLNGap.Size = New System.Drawing.Size(74, 23) + Me.NLNGap.TabIndex = 9 + Me.NLNGap.Value = New Decimal(New Integer() {5, 0, 0, 65536}) + ' + 'Label10 + ' + Me.Label10.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label10.Location = New System.Drawing.Point(3, 66) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(188, 33) + Me.Label10.TabIndex = 8 + Me.Label10.Text = "Auto Long Note Gap" + Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'TableLayoutPanel3 + ' + Me.TableLayoutPanel3.ColumnCount = 2 + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 51.8617!)) + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 48.1383!)) + Me.TableLayoutPanel3.Controls.Add(Me.Label11, 0, 3) + Me.TableLayoutPanel3.Controls.Add(Me.TableLayoutPanel4, 1, 2) + Me.TableLayoutPanel3.Controls.Add(Me.Label10, 0, 2) + Me.TableLayoutPanel3.Controls.Add(Me.TableLayoutPanel2, 1, 1) + Me.TableLayoutPanel3.Controls.Add(Me.Label8, 0, 1) + Me.TableLayoutPanel3.Controls.Add(Me.nGridPartition, 1, 0) + Me.TableLayoutPanel3.Controls.Add(Me.Label6, 0, 0) + Me.TableLayoutPanel3.Controls.Add(Me.TTemp, 1, 3) + Me.TableLayoutPanel3.Location = New System.Drawing.Point(15, 107) + Me.TableLayoutPanel3.Name = "TableLayoutPanel3" + Me.TableLayoutPanel3.RowCount = 4 + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel3.Size = New System.Drawing.Size(376, 133) + Me.TableLayoutPanel3.TabIndex = 112 + ' + 'Label11 + ' + Me.Label11.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label11.Location = New System.Drawing.Point(3, 99) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(188, 34) + Me.Label11.TabIndex = 115 + Me.Label11.Text = "Temporary BMS Filename" + Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'TableLayoutPanel4 + ' + Me.TableLayoutPanel4.ColumnCount = 2 + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80.0!)) + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel4.Controls.Add(Me.LabelTHLN, 1, 0) + Me.TableLayoutPanel4.Controls.Add(Me.NLNGap, 0, 0) + Me.TableLayoutPanel4.Location = New System.Drawing.Point(197, 69) + Me.TableLayoutPanel4.Name = "TableLayoutPanel4" + Me.TableLayoutPanel4.RowCount = 1 + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel4.Size = New System.Drawing.Size(175, 27) + Me.TableLayoutPanel4.TabIndex = 114 + ' + 'LabelTHLN + ' + Me.LabelTHLN.Dock = System.Windows.Forms.DockStyle.Fill + Me.LabelTHLN.Location = New System.Drawing.Point(83, 0) + Me.LabelTHLN.Name = "LabelTHLN" + Me.LabelTHLN.Size = New System.Drawing.Size(89, 27) + Me.LabelTHLN.TabIndex = 10 + Me.LabelTHLN.Text = "beats" + Me.LabelTHLN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'TTemp + ' + Me.TTemp.Dock = System.Windows.Forms.DockStyle.Fill + Me.TTemp.Location = New System.Drawing.Point(197, 102) + Me.TTemp.Name = "TTemp" + Me.TTemp.Size = New System.Drawing.Size(176, 23) + Me.TTemp.TabIndex = 116 + Me.TTemp.Text = "___TempBMS.bmsc" + ' + 'TableLayoutPanel5 + ' + Me.TableLayoutPanel5.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel5.ColumnCount = 3 + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel5.Controls.Add(Me.cAutoSave, 0, 0) + Me.TableLayoutPanel5.Controls.Add(Me.NAutoSave, 1, 0) + Me.TableLayoutPanel5.Controls.Add(Me.cTemplateSnapToVPosition, 0, 6) + Me.TableLayoutPanel5.Controls.Add(Me.Label7, 2, 0) + Me.TableLayoutPanel5.Controls.Add(Me.cBeep, 0, 1) + Me.TableLayoutPanel5.Controls.Add(Me.cBpm1296, 0, 3) + Me.TableLayoutPanel5.Controls.Add(Me.cStop1296, 0, 4) + Me.TableLayoutPanel5.Controls.Add(Me.cAudioLine, 0, 5) + Me.TableLayoutPanel5.Controls.Add(Me.cPastePatternToVPosition, 0, 7) + Me.TableLayoutPanel5.Controls.Add(Me.cPreloadBMSStruct, 0, 2) + Me.TableLayoutPanel5.Location = New System.Drawing.Point(15, 246) + Me.TableLayoutPanel5.Name = "TableLayoutPanel5" + Me.TableLayoutPanel5.RowCount = 8 + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5!)) + Me.TableLayoutPanel5.Size = New System.Drawing.Size(376, 201) + Me.TableLayoutPanel5.TabIndex = 113 + ' + 'cPastePatternToVPosition + ' + Me.cPastePatternToVPosition.AutoSize = True + Me.TableLayoutPanel5.SetColumnSpan(Me.cPastePatternToVPosition, 3) + Me.cPastePatternToVPosition.Dock = System.Windows.Forms.DockStyle.Left + Me.cPastePatternToVPosition.Location = New System.Drawing.Point(3, 178) + Me.cPastePatternToVPosition.Name = "cPastePatternToVPosition" + Me.cPastePatternToVPosition.Size = New System.Drawing.Size(259, 20) + Me.cPastePatternToVPosition.TabIndex = 111 + Me.cPastePatternToVPosition.Text = "Snap to Vertical Position for Pasting Patterns" + Me.cPastePatternToVPosition.UseVisualStyleBackColor = True + ' + 'cPreloadBMSStruct + ' + Me.cPreloadBMSStruct.AutoSize = True + Me.TableLayoutPanel5.SetColumnSpan(Me.cPreloadBMSStruct, 3) + Me.cPreloadBMSStruct.Location = New System.Drawing.Point(3, 53) + Me.cPreloadBMSStruct.Name = "cPreloadBMSStruct" + Me.cPreloadBMSStruct.Size = New System.Drawing.Size(182, 19) + Me.cPreloadBMSStruct.TabIndex = 112 + Me.cPreloadBMSStruct.Text = "Preload all files in the files tab" + Me.cPreloadBMSStruct.UseVisualStyleBackColor = True + ' 'OpGeneral ' Me.AcceptButton = Me.OK_Button Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(413, 510) + Me.ClientSize = New System.Drawing.Size(413, 716) + Me.Controls.Add(Me.TableLayoutPanel5) + Me.Controls.Add(Me.TableLayoutPanel3) Me.Controls.Add(Me.FlowLayoutPanel1) Me.Controls.Add(Me.Label3) Me.Controls.Add(Me.TBAssociateBML) Me.Controls.Add(Me.TBAssociateBME) - Me.Controls.Add(Me.Label6) - Me.Controls.Add(Me.nGridPartition) Me.Controls.Add(Me.cMStopPreview) - Me.Controls.Add(Me.cAutoSave) - Me.Controls.Add(Me.Label7) - Me.Controls.Add(Me.NAutoSave) Me.Controls.Add(Me.Label5) Me.Controls.Add(Me.CPgUpDn) Me.Controls.Add(Me.TBAssociateIBMSC) Me.Controls.Add(Me.TBAssociatePMS) Me.Controls.Add(Me.cMClickFocus) Me.Controls.Add(Me.cMEnterFocus) - Me.Controls.Add(Me.cStop1296) - Me.Controls.Add(Me.cBpm1296) Me.Controls.Add(Me.PictureBox1) - Me.Controls.Add(Me.cBeep) Me.Controls.Add(Me.TBAssociate) Me.Controls.Add(Me.Label4) Me.Controls.Add(Me.Label2) @@ -422,6 +705,15 @@ Partial Class OpGeneral CType(Me.nGridPartition, System.ComponentModel.ISupportInitialize).EndInit() Me.FlowLayoutPanel1.ResumeLayout(False) Me.FlowLayoutPanel1.PerformLayout() + CType(Me.nJackBPM, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.nJackTH, System.ComponentModel.ISupportInitialize).EndInit() + Me.TableLayoutPanel2.ResumeLayout(False) + CType(Me.NLNGap, System.ComponentModel.ISupportInitialize).EndInit() + Me.TableLayoutPanel3.ResumeLayout(False) + Me.TableLayoutPanel3.PerformLayout() + Me.TableLayoutPanel4.ResumeLayout(False) + Me.TableLayoutPanel5.ResumeLayout(False) + Me.TableLayoutPanel5.PerformLayout() Me.ResumeLayout(False) Me.PerformLayout() @@ -457,5 +749,22 @@ Partial Class OpGeneral Friend WithEvents FlowLayoutPanel1 As System.Windows.Forms.FlowLayoutPanel Friend WithEvents rMiddleAuto As System.Windows.Forms.RadioButton Friend WithEvents rMiddleDrag As System.Windows.Forms.RadioButton - + Friend WithEvents nJackBPM As NumericUpDown + Friend WithEvents Label8 As Label + Friend WithEvents nJackTH As NumericUpDown + Friend WithEvents Label9 As Label + Friend WithEvents LabelTHJack As Label + Friend WithEvents TableLayoutPanel2 As TableLayoutPanel + Friend WithEvents cAudioLine As CheckBox + Friend WithEvents cTemplateSnapToVPosition As CheckBox + Friend WithEvents NLNGap As NumericUpDown + Friend WithEvents Label10 As Label + Friend WithEvents TableLayoutPanel3 As TableLayoutPanel + Friend WithEvents TableLayoutPanel4 As TableLayoutPanel + Friend WithEvents LabelTHLN As Label + Friend WithEvents TableLayoutPanel5 As TableLayoutPanel + Friend WithEvents cPastePatternToVPosition As CheckBox + Friend WithEvents Label11 As Label + Friend WithEvents TTemp As TextBox + Friend WithEvents cPreloadBMSStruct As CheckBox End Class diff --git a/iBMSC/Option Windows/OpGeneral.vb b/iBMSC/Option Windows/OpGeneral.vb index c18db8609..6524a29ce 100644 --- a/iBMSC/Option Windows/OpGeneral.vb +++ b/iBMSC/Option Windows/OpGeneral.vb @@ -1,5 +1,3 @@ -Imports System.Windows.Forms - Public Class OpGeneral Public zWheel As Integer Public zPgUpDn As Integer @@ -44,9 +42,9 @@ Public Class OpGeneral Case 8 : zEncoding = System.Text.Encoding.GetEncoding(51949) End Select 'zSort = CSortingMethod.SelectedIndex - zMiddle = IIf(rMiddleDrag.Checked, 1, 0) - zAutoSave = IIf(cAutoSave.Checked, 1, 0) * NAutoSave.Value * 60000 - zGridPartition = nGridPartition.Value + zMiddle = CInt(IIf(rMiddleDrag.Checked, 1, 0)) + zAutoSave = CInt(IIf(cAutoSave.Checked, NAutoSave.Value * 60000, 0)) + zGridPartition = CInt(nGridPartition.Value) Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() End Sub @@ -56,8 +54,8 @@ Public Class OpGeneral Me.Close() End Sub - Public Sub New(ByVal xMsWheel As Integer, ByVal xPgUpDn As Integer, ByVal xMiddleButton As Integer, ByVal xTextEncoding As Integer, ByVal xGridPartition As Integer, _ - ByVal xAutoSave As Integer, ByVal xBeep As Boolean, ByVal xBPMx As Boolean, ByVal xSTOPx As Boolean, _ + Public Sub New(ByVal xMsWheel As Integer, ByVal xPgUpDn As Integer, ByVal xMiddleButton As Integer, ByVal xTextEncoding As Integer, ByVal xGridPartition As Integer, ByVal xJackBPM As Double, ByVal xJackTH As Double, ByVal xLNGap As Double, ByVal xTemp As String, + ByVal xAutoSave As Integer, ByVal xBeep As Boolean, ByVal xPreloadBMSStruct As Boolean, ByVal xBPMx As Boolean, ByVal xSTOPx As Boolean, ByVal xAudioLine As Boolean, ByVal xTemplateSnapToVPosition As Boolean, ByVal xPastePatternToVPosition As Boolean, ByVal xMFEnter As Boolean, ByVal xMFClick As Boolean, ByVal xMStopPreview As Boolean) InitializeComponent() @@ -82,6 +80,10 @@ Public Class OpGeneral CTextEncoding.SelectedIndex = xTextEncoding 'CSortingMethod.SelectedIndex = xSort nGridPartition.Value = xGridPartition + nJackBPM.Value = CDec(xJackBPM) + nJackTH.Value = CDec(xJackTH) + NLNGap.Value = CDec(xLNGap) + TTemp.Text = xTemp If xMiddleButton = 0 Then rMiddleAuto.Checked = True _ Else rMiddleDrag.Checked = True @@ -89,12 +91,16 @@ Public Class OpGeneral If xAutoSave / 60000 > NAutoSave.Maximum Or xAutoSave / 60000 < NAutoSave.Minimum Then cAutoSave.Checked = False Else - NAutoSave.Value = xAutoSave / 60000 + NAutoSave.Value = CDec(xAutoSave / 60000) End If cBeep.Checked = xBeep + cPreloadBMSStruct.Checked = xPreloadBMSStruct cBpm1296.Checked = xBPMx cStop1296.Checked = xSTOPx + cAudioLine.Checked = xAudioLine + cTemplateSnapToVPosition.Checked = xTemplateSnapToVPosition + cPastePatternToVPosition.Checked = xPastePatternToVPosition cMEnterFocus.Checked = xMFEnter cMClickFocus.Checked = xMFClick cMStopPreview.Checked = xMStopPreview @@ -106,32 +112,42 @@ Public Class OpGeneral 'lpfa = Form1.lpfa 'Dim xL() As String = Form1.lpgo Me.Text = Strings.fopGeneral.Title - Label1.Text = Strings.fopGeneral.MouseWheel - Label2.Text = Strings.fopGeneral.TextEncoding - 'Label3.Text = Locale.fopGeneral.SortingMethod - Label5.Text = Strings.fopGeneral.PageUpDown - Label3.Text = Strings.fopGeneral.MiddleButton + Dim enc = System.Text.Encoding.Default + CTextEncoding.Items(0) = "System ANSI (" & enc.EncodingName & ")" Label4.Text = Strings.fopGeneral.AssociateFileType - 'CSortingMethod.Items.Item(0) = Locale.fopGeneral.sortBubble - 'CSortingMethod.Items.Item(1) = Locale.fopGeneral.sortInsertion - 'CSortingMethod.Items.Item(2) = Locale.fopGeneral.sortQuick - 'CSortingMethod.Items.Item(3) = Locale.fopGeneral.sortQuickD3 - 'CSortingMethod.Items.Item(4) = Locale.fopGeneral.sortHeap - rMiddleAuto.Text = Strings.fopGeneral.MiddleButtonAuto - rMiddleDrag.Text = Strings.fopGeneral.MiddleButtonDrag Label6.Text = Strings.fopGeneral.MaxGridPartition + Label8.Text = Strings.fopGeneral.MinimumJackThreshold + Label10.Text = Strings.fopGeneral.AutoLongNoteGap + Label11.Text = Strings.fopGeneral.TemporaryBMSFilename + NLNGap_ValueChanged(Nothing, Nothing) + nJackTH_ValueChanged(Nothing, Nothing) + cAutoSave.Text = Strings.fopGeneral.AutoSave + Label7.Text = Strings.fopGeneral.minutes cBeep.Text = Strings.fopGeneral.BeepWhileSaved + cPreloadBMSStruct.Text = Strings.fopGeneral.Preload cBpm1296.Text = Strings.fopGeneral.ExtendBPM cStop1296.Text = Strings.fopGeneral.ExtendSTOP + cAudioLine.Text = Strings.fopGeneral.DisplayAudioLines + cTemplateSnapToVPosition.Text = Strings.fopGeneral.SnapToVerticalPositionTemplate + cPastePatternToVPosition.Text = Strings.fopGeneral.SnapToVerticalPositionPattern + + Label1.Text = Strings.fopGeneral.MouseWheel + Label2.Text = Strings.fopGeneral.TextEncoding + Label5.Text = Strings.fopGeneral.PageUpDown + Label3.Text = Strings.fopGeneral.MiddleButton + rMiddleAuto.Text = Strings.fopGeneral.MiddleButtonAuto + rMiddleDrag.Text = Strings.fopGeneral.MiddleButtonDrag cMEnterFocus.Text = Strings.fopGeneral.AutoFocusOnMouseEnter cMClickFocus.Text = Strings.fopGeneral.DisableFirstClick - cAutoSave.Text = Strings.fopGeneral.AutoSave - Label7.Text = Strings.fopGeneral.minutes cMStopPreview.Text = Strings.fopGeneral.StopPreviewOnClick - Dim enc = System.Text.Encoding.Default - CTextEncoding.Items(0) = "System ANSI (" & enc.EncodingName & ")" + 'Label3.Text = Locale.fopGeneral.SortingMethod + 'CSortingMethod.Items.Item(0) = Locale.fopGeneral.sortBubble + 'CSortingMethod.Items.Item(1) = Locale.fopGeneral.sortInsertion + 'CSortingMethod.Items.Item(2) = Locale.fopGeneral.sortQuick + 'CSortingMethod.Items.Item(3) = Locale.fopGeneral.sortQuickD3 + 'CSortingMethod.Items.Item(4) = Locale.fopGeneral.sortHeap OK_Button.Text = Strings.OK Cancel_Button.Text = Strings.Cancel @@ -359,4 +375,28 @@ Public Class OpGeneral Private Sub cAutoSave_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cAutoSave.CheckedChanged NAutoSave.Enabled = cAutoSave.Checked End Sub + + Private Sub nJackTH_ValueChanged(sender As Object, e As EventArgs) Handles nJackTH.ValueChanged + Select Case nJackTH.Value Mod 100 + Case 1, 21, 31, 41, 51, 61, 71, 81, 91 + LabelTHJack.Text = Strings.st + Case 2, 22, 32, 42, 52, 62, 72, 82, 92 + LabelTHJack.Text = Strings.nd + Case 3, 23, 33, 43, 53, 63, 73, 83, 93 + LabelTHJack.Text = Strings.rd + Case Else + LabelTHJack.Text = Strings.th + End Select + End Sub + + Private Sub NLNGap_ValueChanged(sender As Object, e As EventArgs) Handles NLNGap.ValueChanged + Select Case NLNGap.Value + Case Is > 1 + LabelTHLN.Text = Strings.Beats + Case Is > 0 + LabelTHLN.Text = Strings.Beat + Case 0 + LabelTHLN.Text = Strings.Beats + End Select + End Sub End Class diff --git a/iBMSC/Option Windows/OpKeybinding.Designer.vb b/iBMSC/Option Windows/OpKeybinding.Designer.vb new file mode 100644 index 000000000..e5dde2e6a --- /dev/null +++ b/iBMSC/Option Windows/OpKeybinding.Designer.vb @@ -0,0 +1,184 @@ + +Partial Class OpKeybinding + 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() + Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem(New String() {"Demo Option", "Option Description", "Ctrl+Shift+Esc"}, -1) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.LVKeybinding = New System.Windows.Forms.ListView() + Me.BindingName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.Description = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.BindingKey = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.BAdd = New System.Windows.Forms.Button() + Me.BRemove = New System.Windows.Forms.Button() + Me.BDefault = New System.Windows.Forms.Button() + Me.LCombos = New System.Windows.Forms.ListBox() + Me.TComboInput = New System.Windows.Forms.TextBox() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.OK_Button.Location = New System.Drawing.Point(469, 680) + Me.OK_Button.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(78, 27) + Me.OK_Button.TabIndex = 100 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(554, 680) + Me.Cancel_Button.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(78, 27) + Me.Cancel_Button.TabIndex = 101 + Me.Cancel_Button.Text = "Cancel" + ' + 'LVKeybinding + ' + Me.LVKeybinding.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LVKeybinding.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.BindingName, Me.Description, Me.BindingKey}) + Me.LVKeybinding.FullRowSelect = True + Me.LVKeybinding.GridLines = True + Me.LVKeybinding.HideSelection = False + Me.LVKeybinding.Items.AddRange(New System.Windows.Forms.ListViewItem() {ListViewItem1}) + Me.LVKeybinding.Location = New System.Drawing.Point(12, 12) + Me.LVKeybinding.MultiSelect = False + Me.LVKeybinding.Name = "LVKeybinding" + Me.LVKeybinding.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.LVKeybinding.Size = New System.Drawing.Size(620, 548) + Me.LVKeybinding.TabIndex = 0 + Me.LVKeybinding.UseCompatibleStateImageBehavior = False + Me.LVKeybinding.View = System.Windows.Forms.View.Details + ' + 'BindingName + ' + Me.BindingName.Text = "Binding Name" + Me.BindingName.Width = 200 + ' + 'Description + ' + Me.Description.Text = "Description" + Me.Description.Width = 250 + ' + 'BindingKey + ' + Me.BindingKey.Text = "Keybindings" + Me.BindingKey.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.BindingKey.Width = 150 + ' + 'BAdd + ' + Me.BAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BAdd.Location = New System.Drawing.Point(12, 680) + Me.BAdd.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BAdd.Name = "BAdd" + Me.BAdd.Size = New System.Drawing.Size(78, 27) + Me.BAdd.TabIndex = 3 + Me.BAdd.Text = "Add" + ' + 'BRemove + ' + Me.BRemove.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BRemove.Location = New System.Drawing.Point(98, 680) + Me.BRemove.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BRemove.Name = "BRemove" + Me.BRemove.Size = New System.Drawing.Size(78, 27) + Me.BRemove.TabIndex = 4 + Me.BRemove.Text = "Remove" + ' + 'BDefault + ' + Me.BDefault.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.BDefault.Location = New System.Drawing.Point(245, 680) + Me.BDefault.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BDefault.Name = "BDefault" + Me.BDefault.Size = New System.Drawing.Size(156, 27) + Me.BDefault.TabIndex = 10 + Me.BDefault.Text = "Restore Default" + ' + 'LCombos + ' + Me.LCombos.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.LCombos.FormattingEnabled = True + Me.LCombos.ItemHeight = 15 + Me.LCombos.Location = New System.Drawing.Point(12, 566) + Me.LCombos.Name = "LCombos" + Me.LCombos.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.LCombos.Size = New System.Drawing.Size(163, 79) + Me.LCombos.TabIndex = 1 + ' + 'TComboInput + ' + Me.TComboInput.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.TComboInput.Location = New System.Drawing.Point(12, 651) + Me.TComboInput.Name = "TComboInput" + Me.TComboInput.ReadOnly = True + Me.TComboInput.Size = New System.Drawing.Size(163, 23) + Me.TComboInput.TabIndex = 2 + ' + 'OpKeybinding + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(645, 719) + Me.Controls.Add(Me.TComboInput) + Me.Controls.Add(Me.LCombos) + Me.Controls.Add(Me.BDefault) + Me.Controls.Add(Me.BRemove) + Me.Controls.Add(Me.BAdd) + Me.Controls.Add(Me.LVKeybinding) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "OpKeybinding" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Keybinding Options" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents OK_Button As Button + Friend WithEvents Cancel_Button As Button + Friend WithEvents LVKeybinding As ListView + Friend WithEvents BindingName As ColumnHeader + Friend WithEvents BindingKey As ColumnHeader + Friend WithEvents Description As ColumnHeader + Friend WithEvents BAdd As Button + Friend WithEvents BRemove As Button + Friend WithEvents BDefault As Button + Friend WithEvents LCombos As ListBox + Friend WithEvents TComboInput As TextBox +End Class diff --git a/iBMSC/Option Windows/OpKeybinding.resx b/iBMSC/Option Windows/OpKeybinding.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/iBMSC/Option Windows/OpKeybinding.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/iBMSC/Option Windows/OpKeybinding.vb b/iBMSC/Option Windows/OpKeybinding.vb new file mode 100644 index 000000000..d284a700a --- /dev/null +++ b/iBMSC/Option Windows/OpKeybinding.vb @@ -0,0 +1,272 @@ +Imports System.Linq + +Public Class OpKeybinding + Public Keybinds() As MainWindow.Keybinding + Dim KeybindsHidden() As MainWindow.Keybinding + Dim keyComboEvent() As String + Dim keyComboOK As Boolean + + Public Sub New(ByVal xKeybindings() As MainWindow.Keybinding) + Try + InitializeComponent() + Keybinds = CType(xKeybindings.Clone(), MainWindow.Keybinding()) + InitializeKeybindings() + Catch ex As Exception + MsgBox("New OpKeybinding Error" & vbCrLf & ex.Message) + End Try + End Sub + Private Sub OpKeybinding_Load(ByVal sender As Object, e As EventArgs) Handles MyBase.Load + Font = MainWindow.Font + + Text = Strings.fopKeybinding.Title + LVKeybinding.Columns(0).Text = Strings.fopKeybinding.BindingName + LVKeybinding.Columns(1).Text = Strings.fopKeybinding.Description + LVKeybinding.Columns(2).Text = Strings.fopKeybinding.Keybindings + BAdd.Text = Strings.fopPlayer.Add + BRemove.Text = Strings.fopPlayer.Remove + OK_Button.Text = Strings.OK + Cancel_Button.Text = Strings.Cancel + BDefault.Text = Strings.fopPlayer.RestoreDefault + End Sub + + Private Sub OK_Button_Click(sender As Object, e As EventArgs) Handles OK_Button.Click + ' Do not close window if textbox is being focused on + If TComboInput.Focused Then + If TComboInput.Text <> "" Then BAdd_Click(sender, New EventArgs) + Exit Sub + End If + + DialogResult = DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub LVKeybinding_Click(sender As Object, e As EventArgs) Handles LVKeybinding.Click, LVKeybinding.KeyUp + ' List keybindings in LCombos + LCombos.Items.Clear() + With Keybinds(LVKeybinding.FocusedItem.Index) + If .Combo.Length = 0 OrElse .Combo(0) = "" Then Exit Sub + For Each keyComboIndividual In .Combo + LCombos.Items.Add(keyComboIndividual) + Next + End With + End Sub + + Private Sub LVKeybinding_DoubleClick(sender As Object, e As EventArgs) Handles LVKeybinding.DoubleClick + LVKeybinding_Click(sender, e) + TComboInput.Focus() + End Sub + + Private Sub LCombos_KeyDown(sender As Object, e As KeyEventArgs) Handles LCombos.KeyDown + If e.KeyCode = Keys.Delete Then BRemove_Click(sender, New EventArgs) : Exit Sub + End Sub + + Private Sub TComboInput_KeyDown(sender As Object, e As KeyEventArgs) Handles TComboInput.KeyDown + If e.KeyCode = Keys.ControlKey Or e.KeyCode = Keys.ShiftKey Or e.KeyCode = Keys.Menu Then Exit Sub + + If e.KeyCode = Keys.Delete Then BRemove_Click(sender, New EventArgs) : Exit Sub + + ReDim keyComboEvent(-1) + If e.Control Then + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = "Ctrl" + End If + If e.Shift Then + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = "Shift" + End If + If e.Alt Then + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = "Alt" + End If + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = e.KeyCode.ToString + + TComboInput.Text = Join(keyComboEvent, "+") + End Sub + + Private Sub BAdd_Click(sender As Object, e As EventArgs) Handles BAdd.Click + If TComboInput.Text <> "" Then + keyComboOK = True + CheckConflictWithOtherFunctions() + CheckConflictWithOtherKeybindings() + If Not keyComboOK Then Exit Sub + + With Keybinds(LVKeybinding.FocusedItem.Index) + If .Combo.Length = 0 Then ReDim .Combo(0) + If .Combo(0) <> "" Then ReDim Preserve .Combo(.Combo.Length) + .Combo(UBound(.Combo)) = TComboInput.Text + + LCombos.Items.Add(TComboInput.Text) + LVKeybinding.FocusedItem.SubItems(2).Text = Join(.Combo, ", ") + End With + TComboInput.Text = "" + End If + End Sub + + Private Sub BRemove_Click(sender As Object, e As EventArgs) Handles BRemove.Click + If LCombos.SelectedIndex <> -1 Then + Dim xIndices(LCombos.SelectedIndices.Count - 1) As Integer + LCombos.SelectedIndices.CopyTo(xIndices, 0) + + Dim TempCombos(-1) As String + For i = 0 To UBound(Keybinds(LVKeybinding.FocusedItem.Index).Combo) + If Not xIndices.Contains(i) Then + ReDim Preserve TempCombos(TempCombos.Length) + TempCombos(UBound(TempCombos)) = LCombos.Items(i).ToString() + End If + Next + + Keybinds(LVKeybinding.FocusedItem.Index).Combo = TempCombos + LVKeybinding.FocusedItem.SubItems(2).Text = Join(TempCombos, ", ") + + LVKeybinding_Click(sender, e) + End If + + TComboInput.Text = "" + End Sub + + ' This causes the application to crash on other PCs. what + ' Private Sub LVKeybinding_ColumnWidthChanged(sender As Object, e As ColumnWidthChangedEventArgs) Handles LVKeybinding.ColumnWidthChanged + ' BindingKey.Width = LVKeybinding.Width - BindingName.Width - Description.Width - 25 + ' End Sub + + Private Sub BDefault_Click(sender As Object, e As EventArgs) Handles BDefault.Click + Keybinds = CType(MainWindow.KeybindingsInit.Clone(), MainWindow.Keybinding()) + MainWindow.ReloadKeybindingNames(Keybinds) + InitializeKeybindings() + End Sub + + Private Sub CheckConflictWithOtherFunctions() + ' Check with hidden functions + For Each keybindHidden In KeybindsHidden + If keyComboEvent(UBound(keyComboEvent)) = keybindHidden.Combo(0) Then + keyComboOK = False + MsgBox(Strings.fopKeybinding.ErrorUnavailable.Replace("{}", keyComboEvent(UBound(keyComboEvent)))) + Exit Sub + End If + Next + + ' Check with other miscellaneous keys + Dim OtherFunctionKeys() As String = {"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"} + If OtherFunctionKeys.Contains(keyComboEvent(UBound(keyComboEvent))) Then + keyComboOK = False + MsgBox(Strings.fopKeybinding.ErrorUnavailable.Replace("{}", keyComboEvent(UBound(keyComboEvent)))) + Exit Sub + End If + + ' Check with other key combos + Dim OtherFunctionKeyCombos() As String = {"Ctrl+N", "Ctrl+O", "Ctrl+Alt+O", "Ctrl+S", "Ctrl+Alt+S", "Ctrl+Shift+E", "Ctrl+W", "Alt+D1", "Alt+D2", "Alt+D3", "Alt+D4", "Alt+D5", + "Ctrl+F", "Ctrl+G", "Ctrl+T", "Ctrl+Shift+T", + "Alt+B", "Alt+S", "Alt+R", "Alt+G"} + If OtherFunctionKeyCombos.Contains(TComboInput.Text) Then + keyComboOK = False + MsgBox(Strings.fopKeybinding.ErrorAssigned.Replace("{}", TComboInput.Text)) + Exit Sub + End If + + ' Check for category restrictions + Select Case Keybinds(LVKeybinding.FocusedItem.Index).Category + ' If note assignment option, check if there is shift + Case MainWindow.KbCategorySP, MainWindow.KbCategoryDP, MainWindow.KbCategoryPMS, MainWindow.KbCategoryBGM + If keyComboEvent.Contains("Shift") Then + keyComboOK = False + MsgBox(Strings.fopKeybinding.ErrorAssigned) + Exit Sub + End If + End Select + End Sub + + Private Sub CheckConflictWithOtherKeybindings() + Dim CategoryToIgnore() As Integer = {} + Select Case Keybinds(LVKeybinding.FocusedItem.Index).Category + ' If note assignment option, check with each other in the same category + Case MainWindow.KbCategorySP + CategoryToIgnore = {MainWindow.KbCategoryDP, MainWindow.KbCategoryPMS} + Case MainWindow.KbCategoryDP + CategoryToIgnore = {MainWindow.KbCategorySP, MainWindow.KbCategoryPMS} + Case MainWindow.KbCategoryPMS + CategoryToIgnore = {MainWindow.KbCategorySP, MainWindow.KbCategoryDP} + + End Select + + For i = 0 To UBound(Keybinds) + If CategoryToIgnore.Contains(Keybinds(i).Category) Then Continue For + + Dim keybind = Keybinds(i) + For j = 0 To UBound(keybind.Combo) + If keybind.Combo(j) = TComboInput.Text Then + If MsgBox(Strings.fopKeybinding.ErrorNoteAssignment.Replace("{1}", TComboInput.Text).Replace("{2}", keybind.OpName), MsgBoxStyle.YesNo) = DialogResult.Yes Then + For k = j To UBound(Keybinds(i).Combo) - 1 + Keybinds(i).Combo(k) = Keybinds(i).Combo(k + 1) + Next + ReDim Preserve Keybinds(i).Combo(UBound(Keybinds(i).Combo) - 1) + + LVKeybinding.Items(i).SubItems(2).Text = Join(Keybinds(i).Combo, ", ") + Exit For + Else + keyComboOK = False + Exit Sub + End If + End If + Next + Next + End Sub + + Private Sub InitializeKeybindings() + LVKeybinding.Items.Clear() + + ' Remove hidden options + Dim KeybindsBackup As MainWindow.Keybinding() = CType(Keybinds.Clone(), MainWindow.Keybinding()) + ReDim KeybindsHidden(UBound(KeybindsBackup)) + Dim i As Integer = -1 + Dim j As Integer = -1 + For Each keybind In KeybindsBackup + If keybind.Category <> MainWindow.KbCategoryAllMod AndAlso + keybind.Category <> MainWindow.KbCategoryHidden Then + i += 1 + Keybinds(i) = keybind + Continue For + Else + j += 1 + KeybindsHidden(j) = keybind + Continue For + End If + Next + ReDim Preserve Keybinds(i) + ReDim Preserve KeybindsHidden(j) + + ' List view array initialization + Dim LVArray(UBound(Keybinds)) As ListViewItem + i = -1 + For Each keybind In Keybinds + i += 1 + + LVArray(i) = New ListViewItem + ' Option name + LVArray(i).SubItems(0).Text = (keybind.OpName) + ' Add description + LVArray(i).SubItems.Add(keybind.Description) + + ' Add keybindings combined into 1 string + Dim keybindStrings() As String + If Not IsNothing(keybind.Combo) Then + ReDim keybindStrings(UBound(keybind.Combo)) + For xI = 0 To UBound(keybind.Combo) + keybindStrings(xI) = keybind.Combo(xI) + Next + Else + keybindStrings = {""} + End If + LVArray(i).SubItems.Add(Join(keybindStrings, ", ")) + Dim x = CInt("&HF9") + If i Mod 2 = 1 Then LVArray(i).BackColor = Color.FromArgb(x, x, x) + Next + + LVKeybinding.Items.AddRange(LVArray) + End Sub +End Class \ No newline at end of file diff --git a/iBMSC/Option Windows/OpPlayer.Designer.vb b/iBMSC/Option Windows/OpPlayer.Designer.vb index 9c91bc7c3..8c656ceb7 100644 --- a/iBMSC/Option Windows/OpPlayer.Designer.vb +++ b/iBMSC/Option Windows/OpPlayer.Designer.vb @@ -22,25 +22,25 @@ Partial Class OpPlayer '不要使用代码编辑器修改它。 _ Private Sub InitializeComponent() - Me.OK_Button = New System.Windows.Forms.Button - Me.Cancel_Button = New System.Windows.Forms.Button - Me.Label2 = New System.Windows.Forms.Label - Me.Label3 = New System.Windows.Forms.Label - Me.Label4 = New System.Windows.Forms.Label - Me.TPlayB = New System.Windows.Forms.TextBox - Me.TPlay = New System.Windows.Forms.TextBox - Me.TStop = New System.Windows.Forms.TextBox - Me.Label6 = New System.Windows.Forms.Label - Me.TPath = New System.Windows.Forms.TextBox - Me.Label1 = New System.Windows.Forms.Label - Me.BBrowse = New System.Windows.Forms.Button - Me.BDefault = New System.Windows.Forms.Button - Me.BRemove = New System.Windows.Forms.Button - Me.BAdd = New System.Windows.Forms.Button - Me.LPlayer = New System.Windows.Forms.ListBox - Me.PictureBox1 = New System.Windows.Forms.PictureBox - Me.Label5 = New System.Windows.Forms.Label - Me.Label7 = New System.Windows.Forms.Label + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.TPlayB = New System.Windows.Forms.TextBox() + Me.TPlay = New System.Windows.Forms.TextBox() + Me.TStop = New System.Windows.Forms.TextBox() + Me.LReferences = New System.Windows.Forms.Label() + Me.TPath = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.BBrowse = New System.Windows.Forms.Button() + Me.BDefault = New System.Windows.Forms.Button() + Me.BRemove = New System.Windows.Forms.Button() + Me.BAdd = New System.Windows.Forms.Button() + Me.LPlayer = New System.Windows.Forms.ListBox() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' @@ -48,7 +48,7 @@ Partial Class OpPlayer ' Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.OK_Button.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.OK_Button.Location = New System.Drawing.Point(72, 316) + Me.OK_Button.Location = New System.Drawing.Point(72, 331) Me.OK_Button.Name = "OK_Button" Me.OK_Button.Size = New System.Drawing.Size(78, 23) Me.OK_Button.TabIndex = 0 @@ -59,7 +59,7 @@ Partial Class OpPlayer Me.Cancel_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Cancel_Button.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.Cancel_Button.Location = New System.Drawing.Point(156, 316) + Me.Cancel_Button.Location = New System.Drawing.Point(156, 331) Me.Cancel_Button.Name = "Cancel_Button" Me.Cancel_Button.Size = New System.Drawing.Size(78, 23) Me.Cancel_Button.TabIndex = 1 @@ -115,13 +115,13 @@ Partial Class OpPlayer ' 'Label6 ' - Me.Label6.AutoSize = True - Me.Label6.Location = New System.Drawing.Point(14, 244) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(225, 60) - Me.Label6.TabIndex = 11 - Me.Label6.Text = "References (case-sensitive):" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " = Directory of the application" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "" & _ - " = Current measure" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " = File Name" + Me.LReferences.AutoSize = True + Me.LReferences.Location = New System.Drawing.Point(14, 244) + Me.LReferences.Name = "Label6" + Me.LReferences.Size = New System.Drawing.Size(225, 75) + Me.LReferences.TabIndex = 11 + Me.LReferences.Text = "References (case-sensitive):" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " = Directory of the application" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "" & + " = Current measure" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " = File Name" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " = File Name of Template" ' 'TPath ' @@ -153,7 +153,7 @@ Partial Class OpPlayer ' Me.BDefault.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.BDefault.FlatStyle = System.Windows.Forms.FlatStyle.System - Me.BDefault.Location = New System.Drawing.Point(240, 316) + Me.BDefault.Location = New System.Drawing.Point(240, 331) Me.BDefault.Name = "BDefault" Me.BDefault.Size = New System.Drawing.Size(130, 23) Me.BDefault.TabIndex = 62 @@ -223,7 +223,7 @@ Partial Class OpPlayer Me.AcceptButton = Me.OK_Button Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(382, 351) + Me.ClientSize = New System.Drawing.Size(382, 366) Me.Controls.Add(Me.Label7) Me.Controls.Add(Me.Label5) Me.Controls.Add(Me.PictureBox1) @@ -236,7 +236,7 @@ Partial Class OpPlayer Me.Controls.Add(Me.BBrowse) Me.Controls.Add(Me.TPath) Me.Controls.Add(Me.Label1) - Me.Controls.Add(Me.Label6) + Me.Controls.Add(Me.LReferences) Me.Controls.Add(Me.TStop) Me.Controls.Add(Me.TPlay) Me.Controls.Add(Me.TPlayB) @@ -264,7 +264,7 @@ Partial Class OpPlayer Friend WithEvents TPlayB As System.Windows.Forms.TextBox Friend WithEvents TPlay As System.Windows.Forms.TextBox Friend WithEvents TStop As System.Windows.Forms.TextBox - Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents LReferences As System.Windows.Forms.Label Friend WithEvents TPath As System.Windows.Forms.TextBox Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents BBrowse As System.Windows.Forms.Button diff --git a/iBMSC/Option Windows/OpPlayer.resx b/iBMSC/Option Windows/OpPlayer.resx index 19dc0dd8b..d58980a38 100644 --- a/iBMSC/Option Windows/OpPlayer.resx +++ b/iBMSC/Option Windows/OpPlayer.resx @@ -112,9 +112,9 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.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/iBMSC/Option Windows/OpPlayer.vb b/iBMSC/Option Windows/OpPlayer.vb index 4777828f3..fd83d8948 100644 --- a/iBMSC/Option Windows/OpPlayer.vb +++ b/iBMSC/Option Windows/OpPlayer.vb @@ -1,209 +1,203 @@ -Imports System.Windows.Forms - -Public Class OpPlayer - Dim pArg() As MainWindow.PlayerArguments - 'Dim ImplicitChange As Boolean = False - Dim CurrPlayer As Integer = -1 - - Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click - DialogResult = DialogResult.OK - Close() - - MainWindow.pArgs = pArg.Clone - MainWindow.CurrentPlayer = CurrPlayer - - Dispose() - End Sub - - Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close() - Me.Dispose() - End Sub - - Private Sub OpPlayer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - Me.Font = MainWindow.Font - - Me.Text = Strings.fopPlayer.Title - Label1.Text = Strings.fopPlayer.Path - Label2.Text = Strings.fopPlayer.PlayFromBeginning - Label3.Text = Strings.fopPlayer.PlayFromHere - Label4.Text = Strings.fopPlayer.StopPlaying - BAdd.Text = Strings.fopPlayer.Add - BRemove.Text = Strings.fopPlayer.Remove - Label6.Text = Strings.fopPlayer.References & vbCrLf & _ - " = " & Strings.fopPlayer.DirectoryOfApp & vbCrLf & _ - " = " & Strings.fopPlayer.CurrMeasure & vbCrLf & _ - " = " & Strings.fopPlayer.FileName - OK_Button.Text = Strings.OK - Cancel_Button.Text = Strings.Cancel - BDefault.Text = Strings.fopPlayer.RestoreDefault - End Sub - - Private Sub LPlayer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LPlayer.Click - If pArg Is Nothing OrElse pArg.Length = 0 Then Exit Sub - - CurrPlayer = LPlayer.SelectedIndex - ShowInTextbox() - End Sub - - Private Sub LPlayer_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LPlayer.KeyDown - LPlayer_Click(sender, New EventArgs) - End Sub - - Private Sub BPrevAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BAdd.Click - ReDim Preserve pArg(UBound(pArg) + 1) - CurrPlayer += 1 - For xI1 As Integer = UBound(pArg) To CurrPlayer Step -1 - pArg(xI1) = pArg(xI1 - 1) - Next - - LPlayer.Items.Insert(CurrPlayer, _ - GetFileName(pArg(CurrPlayer - 1).Path)) - LPlayer.SelectedIndex += 1 - End Sub - - Private Sub BPrevDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BRemove.Click - If LPlayer.Items.Count = 1 Then - MsgBox(Strings.Messages.PreviewDelError, MsgBoxStyle.Exclamation) - Exit Sub - End If - - For xI1 As Integer = CurrPlayer To UBound(pArg) - 1 - pArg(xI1) = pArg(xI1 + 1) - Next - ReDim Preserve pArg(UBound(pArg) - 1) - - 'RemoveHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged - LPlayer.Items.RemoveAt(CurrPlayer) - 'AddHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged - - LPlayer.SelectedIndex = IIf(CurrPlayer > UBound(pArg), CurrPlayer - 1, CurrPlayer) - CurrPlayer = Math.Min(CurrPlayer, UBound(pArg)) - ShowInTextbox() - End Sub - - Private Sub BPrevBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBrowse.Click - Dim xDOpen As New OpenFileDialog - xDOpen.InitialDirectory = IIf(Path.GetDirectoryName(Replace(TPath.Text, "", My.Application.Info.DirectoryPath)) = "", _ - My.Application.Info.DirectoryPath, _ - Path.GetDirectoryName(Replace(TPath.Text, "", My.Application.Info.DirectoryPath))) - xDOpen.Filter = Strings.FileType.EXE & "|*.exe" - xDOpen.DefaultExt = "exe" - If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub - TPath.Text = Replace(xDOpen.FileName, My.Application.Info.DirectoryPath, "") - End Sub - - Private Sub BPrevDefault_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BDefault.Click - 'ImplicitChange = True - If MsgBox(Strings.Messages.RestoreDefaultSettings, MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub - - pArg = New MainWindow.PlayerArguments() {New MainWindow.PlayerArguments("\uBMplay.exe", _ - "-P -N0 """"", _ - "-P -N """"", _ - "-S"), _ - New MainWindow.PlayerArguments("\o2play.exe", _ - "-P -N0 """"", _ - "-P -N """"", _ - "-S")} - CurrPlayer = 0 - ResetLPlayer_ShowInTextbox() - 'ImplicitChange = False - End Sub - - 'Affect LPlayer and all textboxes - Private Sub ResetLPlayer_ShowInTextbox() - LPlayer.Items.Clear() - For xI1 As Integer = 0 To UBound(pArg) - LPlayer.Items.Add(GetFileName(pArg(xI1).Path)) - Next - 'RemoveHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged - LPlayer.SelectedIndex = CurrPlayer - 'AddHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged - ShowInTextbox() - 'ImplicitChange = False - End Sub - - 'affect current LPlayer index value - Private Sub LPlayerChangeCurrIndex(ByVal xStr As String) - 'RemoveHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged - LPlayer.Items.Item(CurrPlayer) = GetFileName(xStr) - 'AddHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged - End Sub - - 'Affect pArgs - Private Sub SavePArg() - pArg(CurrPlayer).Path = TPath.Text - pArg(CurrPlayer).aBegin = TPlayB.Text - pArg(CurrPlayer).aHere = TPlay.Text - pArg(CurrPlayer).aStop = TStop.Text - 'pArg(CurrPlayer) = TPath.Text & vbCrLf & _ - ' TPlayB.Text & vbCrLf & _ - ' TPlay.Text & vbCrLf & _ - ' TStop.Text - End Sub - - 'affect all textboxes - Private Sub ShowInTextbox() - 'ImplicitChange = True - 'Dim xStr() As String = Split(pArg(CurrPlayer), vbCrLf) - 'If xStr.Length <> 4 Then ReDim Preserve xStr(3) - TPath.Text = pArg(CurrPlayer).Path - TPlayB.Text = pArg(CurrPlayer).aBegin - TPlay.Text = pArg(CurrPlayer).aHere - TStop.Text = pArg(CurrPlayer).aStop - ValidateTextBox() - 'ImplicitChange = False - End Sub - - Private Sub ValidateTextBox() - For Each xT As TextBox In New TextBox() {TPath, TPlayB, TPlay, TStop} - Dim xText As String = xT.Text.Replace("", "").Replace("", "").Replace("", "").Replace("""", "") - Dim xContainsInvalidChar As Boolean = False - - For Each xC As Char In Path.GetInvalidPathChars - If xText.IndexOf(xC) <> -1 Then - xContainsInvalidChar = True - Exit For - End If - Next - - If xContainsInvalidChar Then - xT.BackColor = Color.FromArgb(&HFFFFC0C0) - Else - xT.BackColor = Nothing - End If - Next - End Sub - - Public Sub New(ByVal xCurrPlayer As Integer) - InitializeComponent() - - pArg = MainWindow.pArgs.Clone - CurrPlayer = xCurrPlayer - ResetLPlayer_ShowInTextbox() - End Sub - - Private Sub TPath_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TPath.KeyUp, TPlay.KeyUp, TPlayB.KeyUp, TStop.KeyUp - SavePArg() - If [Object].ReferenceEquals(sender, TPath) Then _ - LPlayerChangeCurrIndex(pArg(CurrPlayer).Path) - End Sub - - Private Sub TPath_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TPath.LostFocus, TPlay.LostFocus, TPlayB.LostFocus, TStop.LostFocus - SavePArg() - If [Object].ReferenceEquals(sender, TPath) Then _ - LPlayerChangeCurrIndex(pArg(CurrPlayer).Path) - ValidateTextBox() - End Sub - - 'Private Function pArgPath(ByVal I As Integer) - ' Return Mid(pArg(I), 1, InStr(pArg(I), vbCrLf) - 1) - 'End Function - - Private Function GetFileName(ByVal s As String) As String - Dim fslash As Integer = InStrRev(s, "/") - Dim bslash As Integer = InStrRev(s, "\") - Return Mid(s, IIf(fslash > bslash, fslash, bslash) + 1) - End Function -End Class +Public Class OpPlayer + Dim pArg() As MainWindow.PlayerArguments + 'Dim ImplicitChange As Boolean = False + Dim CurrPlayer As Integer = -1 + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + DialogResult = DialogResult.OK + Close() + + MainWindow.pArgs = CType(pArg.Clone(), MainWindow.PlayerArguments()) + MainWindow.CurrentPlayer = CurrPlayer + + Dispose() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Me.Dispose() + End Sub + + Private Sub OpPlayer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + Me.Font = MainWindow.Font + + Me.Text = Strings.fopPlayer.Title + Label1.Text = Strings.fopPlayer.Path + Label2.Text = Strings.fopPlayer.PlayFromBeginning + Label3.Text = Strings.fopPlayer.PlayFromHere + Label4.Text = Strings.fopPlayer.StopPlaying + BAdd.Text = Strings.fopPlayer.Add + BRemove.Text = Strings.fopPlayer.Remove + LReferences.Text = Strings.fopPlayer.References & vbCrLf & + " = " & Strings.fopPlayer.DirectoryOfApp & vbCrLf & + " = " & Strings.fopPlayer.CurrMeasure & vbCrLf & + " = " & Strings.fopPlayer.FileName & vbCrLf & + " = " & Strings.fopPlayer.FileNameTemplate + OK_Button.Text = Strings.OK + Cancel_Button.Text = Strings.Cancel + BDefault.Text = Strings.fopPlayer.RestoreDefault + End Sub + + Private Sub LPlayer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LPlayer.Click + If pArg Is Nothing OrElse pArg.Length = 0 Then Exit Sub + + CurrPlayer = LPlayer.SelectedIndex + ShowInTextbox() + End Sub + + Private Sub LPlayer_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles LPlayer.KeyDown + LPlayer_Click(sender, New EventArgs) + End Sub + + Private Sub BPrevAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BAdd.Click + ReDim Preserve pArg(UBound(pArg) + 1) + CurrPlayer += 1 + For xI1 As Integer = UBound(pArg) To CurrPlayer Step -1 + pArg(xI1) = pArg(xI1 - 1) + Next + + LPlayer.Items.Insert(CurrPlayer, + GetFileName(pArg(CurrPlayer - 1).Path)) + LPlayer.SelectedIndex += 1 + End Sub + + Private Sub BPrevDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BRemove.Click + If LPlayer.Items.Count = 1 Then + MsgBox(Strings.Messages.PreviewDelError, MsgBoxStyle.Exclamation) + Exit Sub + End If + + For xI1 As Integer = CurrPlayer To UBound(pArg) - 1 + pArg(xI1) = pArg(xI1 + 1) + Next + ReDim Preserve pArg(UBound(pArg) - 1) + + 'RemoveHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged + LPlayer.Items.RemoveAt(CurrPlayer) + 'AddHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged + + LPlayer.SelectedIndex = CInt(IIf(CurrPlayer > UBound(pArg), CurrPlayer - 1, CurrPlayer)) + CurrPlayer = Math.Min(CurrPlayer, UBound(pArg)) + ShowInTextbox() + End Sub + + Private Sub BPrevBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BBrowse.Click + Dim xDOpen As New OpenFileDialog + xDOpen.InitialDirectory = IIf(Path.GetDirectoryName(Replace(TPath.Text, "", My.Application.Info.DirectoryPath)) = "", + My.Application.Info.DirectoryPath, + Path.GetDirectoryName(Replace(TPath.Text, "", My.Application.Info.DirectoryPath))).ToString() + xDOpen.Filter = Strings.FileType.EXE & "|*.exe" + xDOpen.DefaultExt = "exe" + If xDOpen.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub + TPath.Text = Replace(xDOpen.FileName, My.Application.Info.DirectoryPath, "") + End Sub + + Private Sub BPrevDefault_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BDefault.Click + 'ImplicitChange = True + If MsgBox(Strings.Messages.RestoreDefaultSettings, CType(MsgBoxStyle.Question + MsgBoxStyle.YesNo, Global.Microsoft.VisualBasic.MsgBoxStyle)) = MsgBoxResult.No Then Exit Sub + + pArg = CType(MainWindow.pArgsInit.Clone(), MainWindow.PlayerArguments()) + + CurrPlayer = 0 + ResetLPlayer_ShowInTextbox() + 'ImplicitChange = False + End Sub + + 'Affect LPlayer and all textboxes + Private Sub ResetLPlayer_ShowInTextbox() + LPlayer.Items.Clear() + For xI1 As Integer = 0 To UBound(pArg) + LPlayer.Items.Add(GetFileName(pArg(xI1).Path)) + Next + 'RemoveHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged + LPlayer.SelectedIndex = CurrPlayer + 'AddHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged + ShowInTextbox() + 'ImplicitChange = False + End Sub + + 'affect current LPlayer index value + Private Sub LPlayerChangeCurrIndex(ByVal xStr As String) + 'RemoveHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged + LPlayer.Items.Item(CurrPlayer) = GetFileName(xStr) + 'AddHandler LPlayer.SelectedIndexChanged, AddressOf LPlayer_SelectedIndexChanged + End Sub + + 'Affect pArgs + Private Sub SavePArg() + With pArg(CurrPlayer) + .Path = TPath.Text + .aBegin = TPlayB.Text + .aHere = TPlay.Text + .aStop = TStop.Text + End With + End Sub + + 'affect all textboxes + Private Sub ShowInTextbox() + 'ImplicitChange = True + 'Dim xStr() As String = Split(pArg(CurrPlayer), vbCrLf) + 'If xStr.Length <> 4 Then ReDim Preserve xStr(3) + With pArg(CurrPlayer) + TPath.Text = .Path + TPlayB.Text = .aBegin + TPlay.Text = .aHere + TStop.Text = .aStop + End With + ValidateTextBox() + + 'ImplicitChange = False + End Sub + + Private Sub ValidateTextBox() + For Each xT As TextBox In New TextBox() {TPath, TPlayB, TPlay, TStop} + Dim xText As String = xT.Text.Replace("", "").Replace("", "").Replace("", "").Replace("", "").Replace("""", "") + Dim xContainsInvalidChar As Boolean = False + + For Each xC As Char In Path.GetInvalidPathChars + If xText.IndexOf(xC) <> -1 Then + xContainsInvalidChar = True + Exit For + End If + Next + + If xContainsInvalidChar Then + xT.BackColor = Color.FromArgb(&HFFFFC0C0) + Else + xT.BackColor = Nothing + End If + Next + End Sub + + Public Sub New(ByVal xCurrPlayer As Integer) + InitializeComponent() + + pArg = CType(MainWindow.pArgs.Clone(), MainWindow.PlayerArguments()) + CurrPlayer = xCurrPlayer + ResetLPlayer_ShowInTextbox() + End Sub + + Private Sub TPath_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TPath.KeyUp, TPlay.KeyUp, TPlayB.KeyUp, TStop.KeyUp + SavePArg() + If [Object].ReferenceEquals(sender, TPath) Then _ + LPlayerChangeCurrIndex(pArg(CurrPlayer).Path) + End Sub + + Private Sub TPath_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TPath.LostFocus, TPlay.LostFocus, TPlayB.LostFocus, TStop.LostFocus + SavePArg() + If [Object].ReferenceEquals(sender, TPath) Then _ + LPlayerChangeCurrIndex(pArg(CurrPlayer).Path) + ValidateTextBox() + End Sub + + 'Private Function pArgPath(ByVal I As Integer) + ' Return Mid(pArg(I), 1, InStr(pArg(I), vbCrLf) - 1) + 'End Function + + Private Function GetFileName(ByVal s As String) As String + Dim fslash As Integer = InStrRev(s, "/") + Dim bslash As Integer = InStrRev(s, "\") + Return Mid(s, CInt(IIf(fslash > bslash, fslash, bslash)) + 1) + End Function +End Class diff --git a/iBMSC/Option Windows/OpTotal.Designer.vb b/iBMSC/Option Windows/OpTotal.Designer.vb new file mode 100644 index 000000000..2c678624a --- /dev/null +++ b/iBMSC/Option Windows/OpTotal.Designer.vb @@ -0,0 +1,505 @@ + _ +Partial Class OpTotal + 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.CTotalIIDX1 = New System.Windows.Forms.RadioButton() + Me.Label1 = New System.Windows.Forms.Label() + Me.CTotalIIDX2 = New System.Windows.Forms.RadioButton() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.NMultiplier = New System.Windows.Forms.NumericUpDown() + Me.TableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() + Me.Label9 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.Label10 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.CTotalMultiplier = New System.Windows.Forms.RadioButton() + Me.LTotalIIDX1 = New System.Windows.Forms.Label() + Me.LTotalIIDX2 = New System.Windows.Forms.Label() + Me.LTotalMultiplier = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label8 = New System.Windows.Forms.Label() + Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.CBDisplayText = New System.Windows.Forms.CheckBox() + Me.TableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() + Me.Label11 = New System.Windows.Forms.Label() + Me.Label5 = New System.Windows.Forms.Label() + Me.NDecimal = New System.Windows.Forms.NumericUpDown() + Me.NGlobalMultiplier = New System.Windows.Forms.NumericUpDown() + Me.TableLayoutPanel5 = New System.Windows.Forms.TableLayoutPanel() + Me.CBAutoFill = New System.Windows.Forms.CheckBox() + Me.CBDisplayValue = New System.Windows.Forms.CheckBox() + Me.TableLayoutPanel1.SuspendLayout() + CType(Me.NMultiplier, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TableLayoutPanel4.SuspendLayout() + Me.TableLayoutPanel2.SuspendLayout() + Me.TableLayoutPanel3.SuspendLayout() + CType(Me.NDecimal, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.NGlobalMultiplier, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TableLayoutPanel5.SuspendLayout() + Me.SuspendLayout() + ' + 'CTotalIIDX1 + ' + Me.CTotalIIDX1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.CTotalIIDX1.AutoSize = True + Me.CTotalIIDX1.Location = New System.Drawing.Point(4, 20) + Me.CTotalIIDX1.Name = "CTotalIIDX1" + Me.CTotalIIDX1.Size = New System.Drawing.Size(163, 19) + Me.CTotalIIDX1.TabIndex = 1 + Me.CTotalIIDX1.TabStop = True + Me.CTotalIIDX1.Text = "IIDX #TOTAL Supposition 1" + Me.CTotalIIDX1.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label1.Location = New System.Drawing.Point(4, 1) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(163, 15) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "#TOTAL Calculation Option" + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'CTotalIIDX2 + ' + Me.CTotalIIDX2.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.CTotalIIDX2.AutoSize = True + Me.CTotalIIDX2.Location = New System.Drawing.Point(4, 46) + Me.CTotalIIDX2.Name = "CTotalIIDX2" + Me.CTotalIIDX2.Size = New System.Drawing.Size(163, 60) + Me.CTotalIIDX2.TabIndex = 2 + Me.CTotalIIDX2.TabStop = True + Me.CTotalIIDX2.Text = "IIDX #TOTAL Supposition 2" + Me.CTotalIIDX2.UseVisualStyleBackColor = True + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] + Me.TableLayoutPanel1.ColumnCount = 4 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel1.Controls.Add(Me.NMultiplier, 1, 3) + Me.TableLayoutPanel1.Controls.Add(Me.TableLayoutPanel4, 3, 2) + Me.TableLayoutPanel1.Controls.Add(Me.Label4, 3, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label3, 2, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Label2, 1, 0) + Me.TableLayoutPanel1.Controls.Add(Me.CTotalIIDX1, 0, 1) + Me.TableLayoutPanel1.Controls.Add(Me.CTotalIIDX2, 0, 2) + Me.TableLayoutPanel1.Controls.Add(Me.CTotalMultiplier, 0, 3) + Me.TableLayoutPanel1.Controls.Add(Me.Label1, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.LTotalIIDX1, 2, 1) + Me.TableLayoutPanel1.Controls.Add(Me.LTotalIIDX2, 2, 2) + Me.TableLayoutPanel1.Controls.Add(Me.LTotalMultiplier, 2, 3) + Me.TableLayoutPanel1.Controls.Add(Me.Label6, 3, 1) + Me.TableLayoutPanel1.Controls.Add(Me.Label8, 3, 3) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(12, 12) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 4 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(570, 140) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'NMultiplier + ' + Me.NMultiplier.DecimalPlaces = 3 + Me.NMultiplier.Dock = System.Windows.Forms.DockStyle.Fill + Me.NMultiplier.Increment = New Decimal(New Integer() {1, 0, 0, 131072}) + Me.NMultiplier.Location = New System.Drawing.Point(174, 113) + Me.NMultiplier.Name = "NMultiplier" + Me.NMultiplier.Size = New System.Drawing.Size(66, 23) + Me.NMultiplier.TabIndex = 6 + Me.NMultiplier.Value = New Decimal(New Integer() {25, 0, 0, 131072}) + ' + 'TableLayoutPanel4 + ' + Me.TableLayoutPanel4.AutoSize = True + Me.TableLayoutPanel4.ColumnCount = 1 + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel4.Controls.Add(Me.Label9, 0, 2) + Me.TableLayoutPanel4.Controls.Add(Me.Label7, 0, 0) + Me.TableLayoutPanel4.Controls.Add(Me.Label10, 0, 1) + Me.TableLayoutPanel4.Location = New System.Drawing.Point(312, 46) + Me.TableLayoutPanel4.Name = "TableLayoutPanel4" + Me.TableLayoutPanel4.RowCount = 3 + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel4.Size = New System.Drawing.Size(219, 60) + Me.TableLayoutPanel4.TabIndex = 113 + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label9.Location = New System.Drawing.Point(3, 40) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(213, 20) + Me.Label9.TabIndex = 13 + Me.Label9.Text = "Notes > 600 ? 360 + (Notes - 600) / 5" + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label7.Location = New System.Drawing.Point(3, 0) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(213, 20) + Me.Label7.TabIndex = 12 + Me.Label7.Text = "Notes < 400 ? 200 + Notes / 5 :" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label10.Location = New System.Drawing.Point(3, 20) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(213, 20) + Me.Label10.TabIndex = 12 + Me.Label10.Text = "Notes < 600 ? 280 + (Notes - 400) / 2.5 :" + Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label4.Location = New System.Drawing.Point(312, 1) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(254, 15) + Me.Label4.TabIndex = 4 + Me.Label4.Text = "Calculation Formula" + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label3.Location = New System.Drawing.Point(247, 1) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 15) + Me.Label3.TabIndex = 3 + Me.Label3.Text = "#TOTAL" + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label2.Location = New System.Drawing.Point(174, 1) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(66, 15) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Parameters" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'CTotalMultiplier + ' + Me.CTotalMultiplier.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.CTotalMultiplier.AutoSize = True + Me.CTotalMultiplier.Location = New System.Drawing.Point(4, 113) + Me.CTotalMultiplier.Name = "CTotalMultiplier" + Me.CTotalMultiplier.Size = New System.Drawing.Size(163, 23) + Me.CTotalMultiplier.TabIndex = 3 + Me.CTotalMultiplier.TabStop = True + Me.CTotalMultiplier.Text = "Multiplier" + Me.CTotalMultiplier.UseVisualStyleBackColor = True + ' + 'LTotalIIDX1 + ' + Me.LTotalIIDX1.AutoSize = True + Me.LTotalIIDX1.Dock = System.Windows.Forms.DockStyle.Fill + Me.LTotalIIDX1.Location = New System.Drawing.Point(247, 17) + Me.LTotalIIDX1.Name = "LTotalIIDX1" + Me.LTotalIIDX1.Size = New System.Drawing.Size(58, 25) + Me.LTotalIIDX1.TabIndex = 7 + Me.LTotalIIDX1.Text = "IIDX 1" + Me.LTotalIIDX1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'LTotalIIDX2 + ' + Me.LTotalIIDX2.AutoSize = True + Me.LTotalIIDX2.Dock = System.Windows.Forms.DockStyle.Fill + Me.LTotalIIDX2.Location = New System.Drawing.Point(247, 43) + Me.LTotalIIDX2.Name = "LTotalIIDX2" + Me.LTotalIIDX2.Size = New System.Drawing.Size(58, 66) + Me.LTotalIIDX2.TabIndex = 8 + Me.LTotalIIDX2.Text = "IIDX 2" + Me.LTotalIIDX2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'LTotalMultiplier + ' + Me.LTotalMultiplier.AutoSize = True + Me.LTotalMultiplier.Dock = System.Windows.Forms.DockStyle.Fill + Me.LTotalMultiplier.Location = New System.Drawing.Point(247, 110) + Me.LTotalMultiplier.Name = "LTotalMultiplier" + Me.LTotalMultiplier.Size = New System.Drawing.Size(58, 29) + Me.LTotalMultiplier.TabIndex = 9 + Me.LTotalMultiplier.Text = "Multiplier" + Me.LTotalMultiplier.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label6.Location = New System.Drawing.Point(312, 17) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(254, 25) + Me.Label6.TabIndex = 10 + Me.Label6.Text = "7.605 * Notes / (0.01 * Notes + 6.5)" + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label8.Location = New System.Drawing.Point(312, 110) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(254, 29) + Me.Label8.TabIndex = 12 + Me.Label8.Text = "Notes * Multiplier" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'TableLayoutPanel2 + ' + Me.TableLayoutPanel2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel2.ColumnCount = 2 + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel2.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel2.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel2.Location = New System.Drawing.Point(412, 246) + Me.TableLayoutPanel2.Name = "TableLayoutPanel2" + Me.TableLayoutPanel2.RowCount = 1 + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel2.Size = New System.Drawing.Size(170, 33) + Me.TableLayoutPanel2.TabIndex = 100 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(78, 27) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(88, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(78, 27) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'CBDisplayText + ' + Me.CBDisplayText.AutoSize = True + Me.CBDisplayText.Checked = True + Me.CBDisplayText.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBDisplayText.Location = New System.Drawing.Point(3, 29) + Me.CBDisplayText.Name = "CBDisplayText" + Me.CBDisplayText.Size = New System.Drawing.Size(200, 19) + Me.CBDisplayText.TabIndex = 2 + Me.CBDisplayText.Text = "Display ""Recommended #TOTAL""" + Me.CBDisplayText.UseVisualStyleBackColor = True + ' + 'TableLayoutPanel3 + ' + Me.TableLayoutPanel3.ColumnCount = 2 + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel3.Controls.Add(Me.Label11, 0, 1) + Me.TableLayoutPanel3.Controls.Add(Me.Label5, 0, 0) + Me.TableLayoutPanel3.Controls.Add(Me.NDecimal, 1, 1) + Me.TableLayoutPanel3.Controls.Add(Me.NGlobalMultiplier, 1, 0) + Me.TableLayoutPanel3.Location = New System.Drawing.Point(12, 158) + Me.TableLayoutPanel3.Name = "TableLayoutPanel3" + Me.TableLayoutPanel3.RowCount = 2 + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel3.Size = New System.Drawing.Size(167, 55) + Me.TableLayoutPanel3.TabIndex = 1 + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label11.Location = New System.Drawing.Point(3, 27) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(95, 28) + Me.Label11.TabIndex = 2 + Me.Label11.Text = "Decimal Places" + Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label5.Location = New System.Drawing.Point(3, 0) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(95, 27) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Global Multiplier" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'NDecimal + ' + Me.NDecimal.Location = New System.Drawing.Point(104, 30) + Me.NDecimal.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) + Me.NDecimal.Name = "NDecimal" + Me.NDecimal.Size = New System.Drawing.Size(60, 23) + Me.NDecimal.TabIndex = 3 + ' + 'NGlobalMultiplier + ' + Me.NGlobalMultiplier.DecimalPlaces = 2 + Me.NGlobalMultiplier.Increment = New Decimal(New Integer() {1, 0, 0, 131072}) + Me.NGlobalMultiplier.Location = New System.Drawing.Point(104, 3) + Me.NGlobalMultiplier.Name = "NGlobalMultiplier" + Me.NGlobalMultiplier.Size = New System.Drawing.Size(60, 23) + Me.NGlobalMultiplier.TabIndex = 4 + Me.NGlobalMultiplier.Value = New Decimal(New Integer() {10, 0, 0, 65536}) + ' + 'TableLayoutPanel5 + ' + Me.TableLayoutPanel5.ColumnCount = 1 + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel5.Controls.Add(Me.CBAutoFill, 0, 2) + Me.TableLayoutPanel5.Controls.Add(Me.CBDisplayText, 0, 1) + Me.TableLayoutPanel5.Controls.Add(Me.CBDisplayValue, 0, 0) + Me.TableLayoutPanel5.Location = New System.Drawing.Point(182, 158) + Me.TableLayoutPanel5.Name = "TableLayoutPanel5" + Me.TableLayoutPanel5.RowCount = 3 + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel5.Size = New System.Drawing.Size(400, 80) + Me.TableLayoutPanel5.TabIndex = 101 + ' + 'CBAutoFill + ' + Me.CBAutoFill.AutoSize = True + Me.CBAutoFill.Location = New System.Drawing.Point(3, 55) + Me.CBAutoFill.Name = "CBAutoFill" + Me.CBAutoFill.Size = New System.Drawing.Size(107, 19) + Me.CBAutoFill.TabIndex = 3 + Me.CBAutoFill.Text = "Autofill #TOTAL" + Me.CBAutoFill.UseVisualStyleBackColor = True + ' + 'CBDisplayValue + ' + Me.CBDisplayValue.AutoSize = True + Me.CBDisplayValue.Checked = True + Me.CBDisplayValue.CheckState = System.Windows.Forms.CheckState.Checked + Me.CBDisplayValue.Location = New System.Drawing.Point(3, 3) + Me.CBDisplayValue.Name = "CBDisplayValue" + Me.CBDisplayValue.Size = New System.Drawing.Size(95, 19) + Me.CBDisplayValue.TabIndex = 2 + Me.CBDisplayValue.Text = "Display Value" + Me.CBDisplayValue.UseVisualStyleBackColor = True + ' + 'OpTotal + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(594, 291) + Me.Controls.Add(Me.TableLayoutPanel5) + Me.Controls.Add(Me.TableLayoutPanel3) + Me.Controls.Add(Me.TableLayoutPanel2) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "OpTotal" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "#TOTAL Tool" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.TableLayoutPanel1.PerformLayout() + CType(Me.NMultiplier, System.ComponentModel.ISupportInitialize).EndInit() + Me.TableLayoutPanel4.ResumeLayout(False) + Me.TableLayoutPanel4.PerformLayout() + Me.TableLayoutPanel2.ResumeLayout(False) + Me.TableLayoutPanel3.ResumeLayout(False) + Me.TableLayoutPanel3.PerformLayout() + CType(Me.NDecimal, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.NGlobalMultiplier, System.ComponentModel.ISupportInitialize).EndInit() + Me.TableLayoutPanel5.ResumeLayout(False) + Me.TableLayoutPanel5.PerformLayout() + Me.ResumeLayout(False) + + End Sub + + Friend WithEvents CTotalIIDX1 As RadioButton + Friend WithEvents Label1 As Label + Friend WithEvents CTotalIIDX2 As RadioButton + Friend WithEvents TableLayoutPanel1 As TableLayoutPanel + Friend WithEvents CTotalMultiplier As RadioButton + Friend WithEvents Label4 As Label + Friend WithEvents Label3 As Label + Friend WithEvents Label2 As Label + Friend WithEvents TableLayoutPanel2 As TableLayoutPanel + Friend WithEvents OK_Button As Button + Friend WithEvents Cancel_Button As Button + Friend WithEvents LTotalIIDX1 As Label + Friend WithEvents LTotalIIDX2 As Label + Friend WithEvents LTotalMultiplier As Label + Friend WithEvents CBDisplayText As CheckBox + Friend WithEvents TableLayoutPanel4 As TableLayoutPanel + Friend WithEvents Label9 As Label + Friend WithEvents Label7 As Label + Friend WithEvents Label10 As Label + Friend WithEvents Label6 As Label + Friend WithEvents Label8 As Label + Friend WithEvents TableLayoutPanel3 As TableLayoutPanel + Friend WithEvents Label5 As Label + Friend WithEvents Label11 As Label + Friend WithEvents NDecimal As NumericUpDown + Friend WithEvents NGlobalMultiplier As NumericUpDown + Friend WithEvents TableLayoutPanel5 As TableLayoutPanel + Friend WithEvents CBDisplayValue As CheckBox + Friend WithEvents CBAutoFill As CheckBox + Friend WithEvents NMultiplier As NumericUpDown +End Class diff --git a/iBMSC/Option Windows/OpTotal.resx b/iBMSC/Option Windows/OpTotal.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/iBMSC/Option Windows/OpTotal.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/iBMSC/Option Windows/OpTotal.vb b/iBMSC/Option Windows/OpTotal.vb new file mode 100644 index 000000000..9e8ff6997 --- /dev/null +++ b/iBMSC/Option Windows/OpTotal.vb @@ -0,0 +1,80 @@ +Public Class OpTotal + Dim NoteCount As Integer + Public TotalOption As Integer + Dim CTotalList() As RadioButton + + Public Sub New(ByVal xNoteCount As Integer, ByVal xTotalOption As Integer, ByVal xMultiplier As Double, + ByVal xGlobalMultiplier As Double, ByVal xDecimal As Integer, + ByVal xDisplayValue As Boolean, ByVal xDisplayText As Boolean, ByVal xAutofill As Boolean) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CTotalList = {CTotalIIDX1, CTotalIIDX2, CTotalMultiplier} + NoteCount = xNoteCount + TotalOption = xTotalOption + NMultiplier.Value = CDec(xMultiplier) + NGlobalMultiplier.Value = CDec(xGlobalMultiplier) + NDecimal.Value = xDecimal + CBDisplayValue.Checked = xDisplayValue + CBDisplayText.Checked = xDisplayText + CBAutoFill.Checked = xAutofill + CTotalList(TotalOption).Checked = True + + CalculateTotal() + End Sub + Private Sub OpTotal_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Font = MainWindow.Font + + Text = Strings.fopTOTAL.Title + + Label1.Text = Strings.fopTOTAL.CalculationOption + Label2.Text = Strings.fopTOTAL.Parameters + Label3.Text = Strings.fopTOTAL.TOTAL + Label4.Text = Strings.fopTOTAL.CalculationFormula + CTotalIIDX1.Text = Strings.fopTOTAL.IIDXTOTALSupposition1 + CTotalIIDX2.Text = Strings.fopTOTAL.IIDXTOTALSupposition2 + CTotalMultiplier.Text = Strings.fopTOTAL.Multiplier + Label5.Text = Strings.fopTOTAL.GlobalMultiplier + Label11.Text = Strings.fopTOTAL.DecimalPlaces + CBDisplayValue.Text = Strings.fopTOTAL.DisplayValue + CBDisplayText.Text = Strings.fopTOTAL.DisplayRecommendedTOTAL.Replace("{}", Strings.StatusBar.RecommendedTotal) + CBAutoFill.Text = Strings.fopTOTAL.AutofillTOTAL + + Dim Notes As String = Strings.fopTOTAL.Notes + Label6.Text = "7.605 * " & Notes & " / (0.01 * " & Notes & " + 6.5)" + Label7.Text = Notes & " < 400 ? 200 + " & Notes & " / 5 :" + Label10.Text = Notes & " < 600 ? 280 + (" & Notes & " - 400) / 2.5 :" + Label9.Text = Notes & " > 600 ? 360 + (" & Notes & " - 600) / 5" + Label8.Text = Notes & " * " & Strings.fopTOTAL.Multiplier + + OK_Button.Text = Strings.OK + Cancel_Button.Text = Strings.Cancel + End Sub + + Private Sub OK_Button_Click(sender As Object, e As EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CTotalIIDX1_Click(sender As Object, e As EventArgs) Handles CTotalIIDX1.Click, CTotalIIDX2.Click, CTotalMultiplier.Click + Dim RadioS As RadioButton = CType(sender, RadioButton) + TotalOption = Array.IndexOf(Of RadioButton)(CTotalList, RadioS) + End Sub + + Private Sub NGlobalMultiplier_TextChanged(sender As Object, e As EventArgs) Handles NGlobalMultiplier.TextChanged, NDecimal.TextChanged + CalculateTotal() + End Sub + + Private Sub CalculateTotal() + Dim Dec = CInt(NDecimal.Value) + LTotalIIDX1.Text = Math.Round(NoteCount * 7.605 / (0.01 * NoteCount + 6.5) * NGlobalMultiplier.Value, Dec).ToString() + LTotalIIDX2.Text = Math.Round(CDbl(IIf(NoteCount < 400, 200 + NoteCount / 5, IIf(NoteCount < 600, 280 + (NoteCount - 400) / 2.5, 360 + (NoteCount - 600) / 5))) * CDbl(NGlobalMultiplier.Text), Dec).ToString() + LTotalMultiplier.Text = Math.Round(NoteCount * CDbl(NMultiplier.Text) * CDbl(NGlobalMultiplier.Text), Dec).ToString() + End Sub +End Class \ No newline at end of file diff --git a/iBMSC/Option Windows/OpVisual.vb b/iBMSC/Option Windows/OpVisual.vb index 1943a197e..c1899a4d3 100644 --- a/iBMSC/Option Windows/OpVisual.vb +++ b/iBMSC/Option Windows/OpVisual.vb @@ -1,5 +1,3 @@ -Imports System.Runtime.CompilerServices -Imports System.Windows.Forms Imports iBMSC.Editor Public Class OpVisual @@ -83,7 +81,7 @@ Public Class OpVisual Me.iLabelVerticalShift.SetValClamped(vo.kLabelVShift) Me.iLabelHorizShift.SetValClamped(vo.kLabelHShift) Me.iLongLabelHorizShift.SetValClamped(vo.kLabelHShiftL) - Me.iHiddenNoteOpacity.SetValClamped(vo.kOpacity) + Me.iHiddenNoteOpacity.SetValClamped(CDec(vo.kOpacity)) Me.iTSSensitivity.SetValClamped(vo.PEDeltaMouseOver) Me.iMiddleSensitivity.SetValClamped(vo.MiddleDeltaRelease) @@ -95,7 +93,7 @@ Public Class OpVisual 'lForeColorL = xlForeColorL 'lBg = xlBg - col = xcol.Clone + col = CType(xcol.Clone(), Column()) ReDim co(UBound(col)) For xI1 As Integer = 0 To UBound(col) @@ -173,7 +171,7 @@ Public Class OpVisual .Location = New Point(lLeft(xI1), 323) .Size = New Size(33, 66) .BackColor = col(xI1).cBG - .ForeColor = IIf(CInt(col(xI1).cBG.GetBrightness * 255) + 255 - col(xI1).cBG.A >= 128, Color.Black, Color.White) + .ForeColor = CType(IIf(CInt(col(xI1).cBG.GetBrightness * 255) + 255 - col(xI1).cBG.A >= 128, Color.Black, Color.White), Color) .Text = To4Hex(col(xI1).cBG.ToArgb) .Name = "cBG" .Tag = Nothing @@ -206,7 +204,7 @@ Public Class OpVisual Private Sub cButtonChange(ByVal xbutton As Button, ByVal c As Color) xbutton.Text = Hex(c.ToArgb) xbutton.BackColor = c - xbutton.ForeColor = IIf(CInt(c.GetBrightness * 255) + 255 - c.A >= 128, Color.Black, Color.White) + xbutton.ForeColor = CType(IIf(CInt(c.GetBrightness * 255) + 255 - c.A >= 128, Color.Black, Color.White), Color) End Sub Private Sub fButtonChange(ByVal xbutton As Button, ByVal f As Font) @@ -299,7 +297,7 @@ Public Class OpVisual For xI1 As Integer = 0 To UBound(co) col(xI1).Title = co(xI1).Title.Text - col(xI1).Width = co(xI1).Width.Value + col(xI1).Width = CInt(co(xI1).Width.Value) col(xI1).setNoteColor(co(xI1).SNote.BackColor.ToArgb) col(xI1).cText = co(xI1).SText.ForeColor col(xI1).setLNoteColor(co(xI1).LNote.BackColor.ToArgb) @@ -753,7 +751,7 @@ Public Class OpVisual CType(s.Tag, Button).ForeColor = xColorPicker.NewColor Case "cBG" s.BackColor = xColorPicker.NewColor - s.ForeColor = IIf(CInt(xColorPicker.NewColor.GetBrightness * 255) + 255 - xColorPicker.NewColor.A >= 128, Color.Black, Color.White) + s.ForeColor = CType(IIf(CInt(xColorPicker.NewColor.GetBrightness * 255) + 255 - xColorPicker.NewColor.A >= 128, Color.Black, Color.White), Color) End Select 'lColor(xI) = xColorPicker.NewColor 'sender.Text = To4Hex(lColor(xI).ToArgb) diff --git a/iBMSC/Option Windows/OpVisualOverride.Designer.vb b/iBMSC/Option Windows/OpVisualOverride.Designer.vb new file mode 100644 index 000000000..9c46f7d45 --- /dev/null +++ b/iBMSC/Option Windows/OpVisualOverride.Designer.vb @@ -0,0 +1,681 @@ + _ +Partial Class OpVisualOverride + 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.LOverrides = New System.Windows.Forms.ListBox() + Me.BRemove = New System.Windows.Forms.Button() + Me.BAdd = New System.Windows.Forms.Button() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.TLValues = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel7 = New System.Windows.Forms.TableLayoutPanel() + Me.BColorGradL = New System.Windows.Forms.Button() + Me.Label8 = New System.Windows.Forms.Label() + Me.BColorGradU = New System.Windows.Forms.Button() + Me.TName = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.BColorSing = New System.Windows.Forms.Button() + Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() + Me.TRangeU = New System.Windows.Forms.TextBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.TRangeL = New System.Windows.Forms.TextBox() + Me.Label4 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.PColorGrad = New System.Windows.Forms.Panel() + Me.TableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel5 = New System.Windows.Forms.TableLayoutPanel() + Me.RColorGradHSLU = New System.Windows.Forms.RadioButton() + Me.RColorSing = New System.Windows.Forms.RadioButton() + Me.RColorGrad = New System.Windows.Forms.RadioButton() + Me.RColorGradHSLD = New System.Windows.Forms.RadioButton() + Me.TableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() + Me.BUp = New System.Windows.Forms.Button() + Me.BDown = New System.Windows.Forms.Button() + Me.BDuplicate = New System.Windows.Forms.Button() + Me.BSplit = New System.Windows.Forms.Button() + Me.BSemiAuto = New System.Windows.Forms.Button() + Me.CBEnable = New System.Windows.Forms.CheckBox() + Me.Label7 = New System.Windows.Forms.Label() + Me.CoBLoad = New System.Windows.Forms.ComboBox() + Me.Label9 = New System.Windows.Forms.Label() + Me.CoBSave = New System.Windows.Forms.ComboBox() + Me.TLValues.SuspendLayout() + Me.TableLayoutPanel7.SuspendLayout() + Me.TableLayoutPanel2.SuspendLayout() + Me.TableLayoutPanel3.SuspendLayout() + Me.TableLayoutPanel5.SuspendLayout() + Me.TableLayoutPanel4.SuspendLayout() + Me.SuspendLayout() + ' + 'LOverrides + ' + Me.LOverrides.FormattingEnabled = True + Me.LOverrides.IntegralHeight = False + Me.LOverrides.ItemHeight = 15 + Me.LOverrides.Items.AddRange(New Object() {"Drums", "Arps"}) + Me.LOverrides.Location = New System.Drawing.Point(14, 14) + Me.LOverrides.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.LOverrides.Name = "LOverrides" + Me.LOverrides.Size = New System.Drawing.Size(133, 147) + Me.LOverrides.TabIndex = 0 + ' + 'BRemove + ' + Me.BRemove.Dock = System.Windows.Forms.DockStyle.Fill + Me.BRemove.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BRemove.Location = New System.Drawing.Point(4, 120) + Me.BRemove.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BRemove.Name = "BRemove" + Me.BRemove.Size = New System.Drawing.Size(190, 27) + Me.BRemove.TabIndex = 3 + Me.BRemove.Text = "Remove" + Me.BRemove.UseVisualStyleBackColor = True + ' + 'BAdd + ' + Me.BAdd.Dock = System.Windows.Forms.DockStyle.Fill + Me.BAdd.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BAdd.Location = New System.Drawing.Point(4, 3) + Me.BAdd.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BAdd.Name = "BAdd" + Me.BAdd.Size = New System.Drawing.Size(190, 27) + Me.BAdd.TabIndex = 0 + Me.BAdd.Text = "Add" + Me.BAdd.UseVisualStyleBackColor = True + ' + 'OK_Button + ' + Me.OK_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.OK_Button.Location = New System.Drawing.Point(187, 472) + Me.OK_Button.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(78, 27) + Me.OK_Button.TabIndex = 3 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(272, 472) + Me.Cancel_Button.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(78, 27) + Me.Cancel_Button.TabIndex = 4 + Me.Cancel_Button.Text = "Cancel" + ' + 'ContextMenuStrip1 + ' + Me.ContextMenuStrip1.Name = "ContextMenuStrip1" + Me.ContextMenuStrip1.Size = New System.Drawing.Size(61, 4) + ' + 'TLValues + ' + Me.TLValues.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TLValues.ColumnCount = 2 + Me.TLValues.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 142.0!)) + Me.TLValues.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TLValues.Controls.Add(Me.TableLayoutPanel7, 1, 3) + Me.TLValues.Controls.Add(Me.TName, 1, 0) + Me.TLValues.Controls.Add(Me.Label1, 0, 1) + Me.TLValues.Controls.Add(Me.Label3, 0, 0) + Me.TLValues.Controls.Add(Me.BColorSing, 1, 2) + Me.TLValues.Controls.Add(Me.TableLayoutPanel2, 1, 1) + Me.TLValues.Controls.Add(Me.Label4, 0, 2) + Me.TLValues.Controls.Add(Me.Label2, 0, 3) + Me.TLValues.Controls.Add(Me.Label6, 0, 4) + Me.TLValues.Controls.Add(Me.PColorGrad, 1, 4) + Me.TLValues.Location = New System.Drawing.Point(14, 305) + Me.TLValues.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.TLValues.Name = "TLValues" + Me.TLValues.RowCount = 6 + Me.TLValues.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) + Me.TLValues.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) + Me.TLValues.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) + Me.TLValues.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) + Me.TLValues.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) + Me.TLValues.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TLValues.Size = New System.Drawing.Size(339, 161) + Me.TLValues.TabIndex = 2 + ' + 'TableLayoutPanel7 + ' + Me.TableLayoutPanel7.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel7.ColumnCount = 3 + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 42.0!)) + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.0!)) + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 42.0!)) + Me.TableLayoutPanel7.Controls.Add(Me.BColorGradL, 0, 0) + Me.TableLayoutPanel7.Controls.Add(Me.Label8, 1, 0) + Me.TableLayoutPanel7.Controls.Add(Me.BColorGradU, 2, 0) + Me.TableLayoutPanel7.Location = New System.Drawing.Point(142, 90) + Me.TableLayoutPanel7.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel7.Name = "TableLayoutPanel7" + Me.TableLayoutPanel7.RowCount = 1 + Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel7.Size = New System.Drawing.Size(197, 30) + Me.TableLayoutPanel7.TabIndex = 7 + ' + 'BColorGradL + ' + Me.BColorGradL.Dock = System.Windows.Forms.DockStyle.Fill + Me.BColorGradL.Location = New System.Drawing.Point(4, 3) + Me.BColorGradL.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BColorGradL.Name = "BColorGradL" + Me.BColorGradL.Size = New System.Drawing.Size(74, 24) + Me.BColorGradL.TabIndex = 6 + Me.BColorGradL.Text = "Button1" + Me.BColorGradL.UseVisualStyleBackColor = True + ' + 'Label8 + ' + Me.Label8.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label8.AutoSize = True + Me.Label8.Location = New System.Drawing.Point(86, 0) + Me.Label8.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(23, 30) + Me.Label8.TabIndex = 1 + Me.Label8.Text = "to" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'BColorGradU + ' + Me.BColorGradU.Dock = System.Windows.Forms.DockStyle.Fill + Me.BColorGradU.Location = New System.Drawing.Point(117, 3) + Me.BColorGradU.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BColorGradU.Name = "BColorGradU" + Me.BColorGradU.Size = New System.Drawing.Size(76, 24) + Me.BColorGradU.TabIndex = 6 + Me.BColorGradU.Text = "Button1" + Me.BColorGradU.UseVisualStyleBackColor = True + ' + 'TName + ' + Me.TName.Anchor = CType((System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TName.Location = New System.Drawing.Point(146, 3) + Me.TName.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.TName.Name = "TName" + Me.TName.Size = New System.Drawing.Size(189, 23) + Me.TName.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(4, 30) + Me.Label1.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(134, 30) + Me.Label1.TabIndex = 2 + Me.Label1.Text = "Label Range" + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label3 + ' + Me.Label3.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(4, 0) + Me.Label3.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(134, 30) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Option Name" + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'BColorSing + ' + Me.BColorSing.Dock = System.Windows.Forms.DockStyle.Fill + Me.BColorSing.Location = New System.Drawing.Point(146, 63) + Me.BColorSing.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BColorSing.Name = "BColorSing" + Me.BColorSing.Size = New System.Drawing.Size(189, 24) + Me.BColorSing.TabIndex = 5 + Me.BColorSing.Text = "Button1" + Me.BColorSing.UseVisualStyleBackColor = True + ' + 'TableLayoutPanel2 + ' + Me.TableLayoutPanel2.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel2.ColumnCount = 3 + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.TableLayoutPanel2.Controls.Add(Me.TRangeU, 2, 0) + Me.TableLayoutPanel2.Controls.Add(Me.Label5, 1, 0) + Me.TableLayoutPanel2.Controls.Add(Me.TRangeL, 0, 0) + Me.TableLayoutPanel2.Location = New System.Drawing.Point(142, 30) + Me.TableLayoutPanel2.Margin = New System.Windows.Forms.Padding(0) + Me.TableLayoutPanel2.Name = "TableLayoutPanel2" + Me.TableLayoutPanel2.RowCount = 1 + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel2.Size = New System.Drawing.Size(197, 30) + Me.TableLayoutPanel2.TabIndex = 3 + ' + 'TRangeU + ' + Me.TRangeU.Anchor = CType((System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TRangeU.Location = New System.Drawing.Point(134, 3) + Me.TRangeU.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.TRangeU.MaxLength = 2 + Me.TRangeU.Name = "TRangeU" + Me.TRangeU.Size = New System.Drawing.Size(59, 23) + Me.TRangeU.TabIndex = 2 + ' + 'Label5 + ' + Me.Label5.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label5.AutoSize = True + Me.Label5.Location = New System.Drawing.Point(69, 0) + Me.Label5.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(57, 30) + Me.Label5.TabIndex = 1 + Me.Label5.Text = "to" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'TRangeL + ' + Me.TRangeL.Anchor = CType((System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TRangeL.Location = New System.Drawing.Point(4, 3) + Me.TRangeL.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.TRangeL.MaxLength = 2 + Me.TRangeL.Name = "TRangeL" + Me.TRangeL.Size = New System.Drawing.Size(57, 23) + Me.TRangeL.TabIndex = 0 + ' + 'Label4 + ' + Me.Label4.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label4.AutoSize = True + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.Label4.Location = New System.Drawing.Point(4, 60) + Me.Label4.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(134, 30) + Me.Label4.TabIndex = 4 + Me.Label4.Text = "Note Color" + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label2 + ' + Me.Label2.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.Label2.Location = New System.Drawing.Point(4, 90) + Me.Label2.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(134, 30) + Me.Label2.TabIndex = 6 + Me.Label2.Text = "Note Color Range" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label6 + ' + Me.Label6.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label6.AutoSize = True + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.Label6.Location = New System.Drawing.Point(4, 120) + Me.Label6.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(134, 30) + Me.Label6.TabIndex = 8 + Me.Label6.Text = "Preview" + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'PColorGrad + ' + Me.PColorGrad.Dock = System.Windows.Forms.DockStyle.Fill + Me.PColorGrad.Location = New System.Drawing.Point(145, 123) + Me.PColorGrad.Name = "PColorGrad" + Me.PColorGrad.Size = New System.Drawing.Size(191, 24) + Me.PColorGrad.TabIndex = 9 + ' + 'TableLayoutPanel3 + ' + Me.TableLayoutPanel3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel3.ColumnCount = 1 + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel3.Controls.Add(Me.TableLayoutPanel5, 0, 5) + Me.TableLayoutPanel3.Controls.Add(Me.BAdd, 0, 0) + Me.TableLayoutPanel3.Controls.Add(Me.BRemove, 0, 3) + Me.TableLayoutPanel3.Controls.Add(Me.TableLayoutPanel4, 0, 1) + Me.TableLayoutPanel3.Controls.Add(Me.BSemiAuto, 0, 2) + Me.TableLayoutPanel3.Controls.Add(Me.CBEnable, 0, 4) + Me.TableLayoutPanel3.Location = New System.Drawing.Point(155, 14) + Me.TableLayoutPanel3.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.TableLayoutPanel3.Name = "TableLayoutPanel3" + Me.TableLayoutPanel3.RowCount = 6 + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel3.Size = New System.Drawing.Size(198, 285) + Me.TableLayoutPanel3.TabIndex = 1 + ' + 'TableLayoutPanel5 + ' + Me.TableLayoutPanel5.ColumnCount = 1 + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel5.Controls.Add(Me.RColorGradHSLU, 0, 3) + Me.TableLayoutPanel5.Controls.Add(Me.RColorSing, 0, 0) + Me.TableLayoutPanel5.Controls.Add(Me.RColorGrad, 0, 1) + Me.TableLayoutPanel5.Controls.Add(Me.RColorGradHSLD, 0, 2) + Me.TableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel5.Location = New System.Drawing.Point(3, 178) + Me.TableLayoutPanel5.Name = "TableLayoutPanel5" + Me.TableLayoutPanel5.RowCount = 4 + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!)) + Me.TableLayoutPanel5.Size = New System.Drawing.Size(192, 104) + Me.TableLayoutPanel5.TabIndex = 5 + ' + 'RColorGradHSLU + ' + Me.RColorGradHSLU.AutoSize = True + Me.RColorGradHSLU.Location = New System.Drawing.Point(3, 81) + Me.RColorGradHSLU.Name = "RColorGradHSLU" + Me.RColorGradHSLU.Size = New System.Drawing.Size(139, 19) + Me.RColorGradHSLU.TabIndex = 8 + Me.RColorGradHSLU.TabStop = True + Me.RColorGradHSLU.Text = "Color gradient (HSL↓)" + Me.RColorGradHSLU.UseVisualStyleBackColor = True + ' + 'RColorSing + ' + Me.RColorSing.AutoSize = True + Me.RColorSing.Location = New System.Drawing.Point(3, 3) + Me.RColorSing.Name = "RColorSing" + Me.RColorSing.Size = New System.Drawing.Size(98, 19) + Me.RColorSing.TabIndex = 5 + Me.RColorSing.TabStop = True + Me.RColorSing.Text = "Singular color" + Me.RColorSing.UseVisualStyleBackColor = True + ' + 'RColorGrad + ' + Me.RColorGrad.AutoSize = True + Me.RColorGrad.Location = New System.Drawing.Point(3, 29) + Me.RColorGrad.Name = "RColorGrad" + Me.RColorGrad.Size = New System.Drawing.Size(101, 19) + Me.RColorGrad.TabIndex = 6 + Me.RColorGrad.TabStop = True + Me.RColorGrad.Text = "Color gradient" + Me.RColorGrad.UseVisualStyleBackColor = True + ' + 'RColorGradHSLD + ' + Me.RColorGradHSLD.AutoSize = True + Me.RColorGradHSLD.Location = New System.Drawing.Point(3, 55) + Me.RColorGradHSLD.Name = "RColorGradHSLD" + Me.RColorGradHSLD.Size = New System.Drawing.Size(139, 19) + Me.RColorGradHSLD.TabIndex = 7 + Me.RColorGradHSLD.TabStop = True + Me.RColorGradHSLD.Text = "Color gradient (HSL↑)" + Me.RColorGradHSLD.UseVisualStyleBackColor = True + ' + 'TableLayoutPanel4 + ' + Me.TableLayoutPanel4.ColumnCount = 2 + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel4.Controls.Add(Me.BUp, 0, 0) + Me.TableLayoutPanel4.Controls.Add(Me.BDown, 0, 1) + Me.TableLayoutPanel4.Controls.Add(Me.BDuplicate, 1, 0) + Me.TableLayoutPanel4.Controls.Add(Me.BSplit, 1, 1) + Me.TableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel4.Location = New System.Drawing.Point(3, 36) + Me.TableLayoutPanel4.Name = "TableLayoutPanel4" + Me.TableLayoutPanel4.RowCount = 2 + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel4.Size = New System.Drawing.Size(192, 45) + Me.TableLayoutPanel4.TabIndex = 1 + ' + 'BUp + ' + Me.BUp.Dock = System.Windows.Forms.DockStyle.Fill + Me.BUp.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BUp.Location = New System.Drawing.Point(4, 3) + Me.BUp.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BUp.Name = "BUp" + Me.BUp.Size = New System.Drawing.Size(88, 16) + Me.BUp.TabIndex = 0 + Me.BUp.Text = "Up" + Me.BUp.UseVisualStyleBackColor = True + ' + 'BDown + ' + Me.BDown.Dock = System.Windows.Forms.DockStyle.Fill + Me.BDown.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BDown.Location = New System.Drawing.Point(4, 25) + Me.BDown.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BDown.Name = "BDown" + Me.BDown.Size = New System.Drawing.Size(88, 17) + Me.BDown.TabIndex = 0 + Me.BDown.Text = "Down" + Me.BDown.UseVisualStyleBackColor = True + ' + 'BDuplicate + ' + Me.BDuplicate.Dock = System.Windows.Forms.DockStyle.Fill + Me.BDuplicate.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BDuplicate.Location = New System.Drawing.Point(100, 3) + Me.BDuplicate.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BDuplicate.Name = "BDuplicate" + Me.BDuplicate.Size = New System.Drawing.Size(88, 16) + Me.BDuplicate.TabIndex = 0 + Me.BDuplicate.Text = "Duplicate" + Me.BDuplicate.UseVisualStyleBackColor = True + ' + 'BSplit + ' + Me.BSplit.Dock = System.Windows.Forms.DockStyle.Fill + Me.BSplit.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BSplit.Location = New System.Drawing.Point(100, 25) + Me.BSplit.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BSplit.Name = "BSplit" + Me.BSplit.Size = New System.Drawing.Size(88, 17) + Me.BSplit.TabIndex = 0 + Me.BSplit.Text = "Split" + Me.BSplit.UseVisualStyleBackColor = True + ' + 'BSemiAuto + ' + Me.BSemiAuto.Dock = System.Windows.Forms.DockStyle.Fill + Me.BSemiAuto.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.BSemiAuto.Location = New System.Drawing.Point(4, 87) + Me.BSemiAuto.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.BSemiAuto.Name = "BSemiAuto" + Me.BSemiAuto.Size = New System.Drawing.Size(190, 27) + Me.BSemiAuto.TabIndex = 2 + Me.BSemiAuto.Text = "Semi-auto assign" + Me.BSemiAuto.UseVisualStyleBackColor = True + ' + 'CBEnable + ' + Me.CBEnable.AutoSize = True + Me.CBEnable.Location = New System.Drawing.Point(3, 153) + Me.CBEnable.Name = "CBEnable" + Me.CBEnable.Size = New System.Drawing.Size(88, 19) + Me.CBEnable.TabIndex = 4 + Me.CBEnable.Text = "Enable Item" + Me.CBEnable.UseVisualStyleBackColor = True + ' + 'Label7 + ' + Me.Label7.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label7.AutoSize = True + Me.Label7.Location = New System.Drawing.Point(11, 168) + Me.Label7.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(112, 15) + Me.Label7.TabIndex = 0 + Me.Label7.Text = "Load Settings From:" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'CoBLoad + ' + Me.CoBLoad.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.CoBLoad.FormattingEnabled = True + Me.CoBLoad.Items.AddRange(New Object() {"Editor", "Chart", "Song"}) + Me.CoBLoad.Location = New System.Drawing.Point(14, 191) + Me.CoBLoad.Name = "CoBLoad" + Me.CoBLoad.Size = New System.Drawing.Size(133, 23) + Me.CoBLoad.TabIndex = 5 + ' + 'Label9 + ' + Me.Label9.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label9.AutoSize = True + Me.Label9.Location = New System.Drawing.Point(11, 221) + Me.Label9.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(94, 15) + Me.Label9.TabIndex = 0 + Me.Label9.Text = "Save Settings To:" + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'CoBSave + ' + Me.CoBSave.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.CoBSave.FormattingEnabled = True + Me.CoBSave.Items.AddRange(New Object() {"Editor", "Chart", "Song"}) + Me.CoBSave.Location = New System.Drawing.Point(14, 243) + Me.CoBSave.Name = "CoBSave" + Me.CoBSave.Size = New System.Drawing.Size(133, 23) + Me.CoBSave.TabIndex = 5 + ' + 'OpVisualOverride + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(364, 513) + Me.Controls.Add(Me.CoBSave) + Me.Controls.Add(Me.CoBLoad) + Me.Controls.Add(Me.Label9) + Me.Controls.Add(Me.LOverrides) + Me.Controls.Add(Me.Label7) + Me.Controls.Add(Me.TableLayoutPanel3) + Me.Controls.Add(Me.TLValues) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "OpVisualOverride" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Visual Override Options" + Me.TLValues.ResumeLayout(False) + Me.TLValues.PerformLayout() + Me.TableLayoutPanel7.ResumeLayout(False) + Me.TableLayoutPanel7.PerformLayout() + Me.TableLayoutPanel2.ResumeLayout(False) + Me.TableLayoutPanel2.PerformLayout() + Me.TableLayoutPanel3.ResumeLayout(False) + Me.TableLayoutPanel3.PerformLayout() + Me.TableLayoutPanel5.ResumeLayout(False) + Me.TableLayoutPanel5.PerformLayout() + Me.TableLayoutPanel4.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents LOverrides As ListBox + Friend WithEvents BRemove As Button + Friend WithEvents BAdd As Button + Friend WithEvents OK_Button As Button + Friend WithEvents Cancel_Button As Button + Friend WithEvents ContextMenuStrip1 As ContextMenuStrip + Friend WithEvents TLValues As TableLayoutPanel + Friend WithEvents Label1 As Label + Friend WithEvents Label3 As Label + Friend WithEvents Label4 As Label + Friend WithEvents TName As TextBox + Friend WithEvents BColorSing As Button + Friend WithEvents TableLayoutPanel2 As TableLayoutPanel + Friend WithEvents TRangeU As TextBox + Friend WithEvents Label5 As Label + Friend WithEvents TRangeL As TextBox + Friend WithEvents TableLayoutPanel3 As TableLayoutPanel + Friend WithEvents TableLayoutPanel5 As TableLayoutPanel + Friend WithEvents RColorSing As RadioButton + Friend WithEvents RColorGrad As RadioButton + Friend WithEvents RColorGradHSLD As RadioButton + Friend WithEvents TableLayoutPanel4 As TableLayoutPanel + Friend WithEvents BUp As Button + Friend WithEvents BDown As Button + Friend WithEvents BDuplicate As Button + Friend WithEvents BSplit As Button + Friend WithEvents BSemiAuto As Button + Friend WithEvents CBEnable As CheckBox + Friend WithEvents TableLayoutPanel7 As TableLayoutPanel + Friend WithEvents Label8 As Label + Friend WithEvents Label2 As Label + Friend WithEvents Label6 As Label + Friend WithEvents BColorGradL As Button + Friend WithEvents BColorGradU As Button + Friend WithEvents PColorGrad As Panel + Friend WithEvents Label7 As Label + Friend WithEvents CoBLoad As ComboBox + Friend WithEvents Label9 As Label + Friend WithEvents CoBSave As ComboBox + Friend WithEvents RColorGradHSLU As RadioButton +End Class diff --git a/iBMSC/Option Windows/OpVisualOverride.resx b/iBMSC/Option Windows/OpVisualOverride.resx new file mode 100644 index 000000000..279a44748 --- /dev/null +++ b/iBMSC/Option Windows/OpVisualOverride.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/iBMSC/Option Windows/OpVisualOverride.vb b/iBMSC/Option Windows/OpVisualOverride.vb new file mode 100644 index 000000000..2356b2a64 --- /dev/null +++ b/iBMSC/Option Windows/OpVisualOverride.vb @@ -0,0 +1,472 @@ +Public Class OpVisualOverride + Public COverrides() As MainWindow.ColorOverride + Dim CColorOptionList() As RadioButton + Public LoadSettings As Integer + Dim WHeight As Integer + Dim TLValuesHeight() As Single + Dim hWAV(1295) As String + + Public Sub New(ByVal xColorOverrides() As MainWindow.ColorOverride, xhWAV As String(), SaveOption As Integer) + InitializeComponent() + CColorOptionList = {RColorSing, RColorGrad, RColorGradHSLD, RColorGradHSLU} + + LOverrides.Items.Clear() + + If xColorOverrides IsNot Nothing Then + COverrides = CType(xColorOverrides.Clone(), MainWindow.ColorOverride()) + Else + COverrides = Nothing + End If + + WHeight = Height + ReDim TLValuesHeight(TLValues.RowStyles.Count - 1) + For i = 0 To TLValues.RowStyles.Count - 1 + TLValuesHeight(i) = TLValues.RowStyles(i).Height + Next + + hWAV = xhWAV + CoBSave.SelectedIndex = SaveOption + UpdateTLValuesDisplay() + + If Not IsNothing(COverrides) Then + ' List expansion code per line + For Each COverride In COverrides + LOverrides.Items.Add(COverride.Name) + Next + + If COverrides.Length > 0 Then + LOverrides.SelectedIndex = 0 + ShowInTextbox() + End If + End If + End Sub + Private Sub OpVisualOverride_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Me.Font = MainWindow.Font + + OK_Button.Text = Strings.OK + Cancel_Button.Text = Strings.Cancel + + Me.Name = Strings.fopVisualOverride.Title + BAdd.Text = Strings.fopVisualOverride.add + BUp.Text = Strings.fopVisualOverride.up + Bdown.Text = Strings.fopVisualOverride.Down + BDuplicate.Text = Strings.fopVisualOverride.Duplicate + BSplit.Text = Strings.fopVisualOverride.Split + BSemiAuto.Text = Strings.fopVisualOverride.SemiAutoAssign + BRemove.Text = Strings.fopVisualOverride.Remove + + Label7.Text = Strings.fopVisualOverride.LoadSettingsFrom + CoBLoad.Items.Item(0) = Strings.fopVisualOverride.Editor + CoBLoad.Items.Item(1) = Strings.fopVisualOverride.Chart + CoBLoad.Items.Item(2) = Strings.fopVisualOverride.Song + Label9.Text = Strings.fopVisualOverride.SaveSettingsTo + CoBSave.Items.Item(0) = Strings.fopVisualOverride.Editor + CoBSave.Items.Item(1) = Strings.fopVisualOverride.Chart + CoBSave.Items.Item(2) = Strings.fopVisualOverride.Song + + CBEnable.Text = Strings.fopVisualOverride.EnableItem + RColorSing.Text = Strings.fopVisualOverride.ColorS + RColorGrad.Text = Strings.fopVisualOverride.ColorG + RColorGradHSLU.Text = Strings.fopVisualOverride.ColorGHSLU + RColorGradHSLD.Text = Strings.fopVisualOverride.ColorGHSLD + + Label3.Text = Strings.fopVisualOverride.OptionName + Label1.Text = Strings.fopVisualOverride.LabelRange + Label5.Text = Strings.fopVisualOverride.ToText + Label4.Text = Strings.fopVisualOverride.NoteColor + Label2.Text = Strings.fopVisualOverride.NoteColorRange + Label8.Text = Strings.fopVisualOverride.ToText + Label6.Text = Strings.fopVisualOverride.Preview + End Sub + + Private Sub LOverrides_Click(sender As Object, e As EventArgs) Handles LOverrides.Click + If IsNothing(COverrides) Or LOverrides.SelectedIndex = -1 Then Exit Sub + ShowInTextbox() + End Sub + + Private Sub LOverrides_KeyDown(sender As Object, e As KeyEventArgs) Handles LOverrides.KeyDown + If IsNothing(COverrides) Or LOverrides.SelectedIndex = -1 Then Exit Sub + If e.KeyCode = Keys.Delete Then BRemove_Click(sender, New EventArgs) : Exit Sub + + ShowInTextbox() + End Sub + Private Sub OK_Button_Click(sender As Object, e As EventArgs) Handles OK_Button.Click + DialogResult = DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub BAdd_Click(sender As Object, e As EventArgs) Handles BAdd.Click + If IsNothing(COverrides) Then + ReDim COverrides(0) + Else + ReDim Preserve COverrides(UBound(COverrides) + 1) + End If + With COverrides(UBound(COverrides)) + .Name = "New Item" + .Enabled = True + .ColorOption = 0 + .RangeL = 1 + .RangeU = 2 + .NoteColor = 0 + .NoteColorU = 0 + End With + + LOverrides.Items.Insert(LOverrides.Items.Count, "New Item") + LOverrides.SelectedIndex = UBound(COverrides) + ShowInTextbox() + End Sub + + Private Sub BUp_Click(sender As Object, e As EventArgs) Handles BUp.Click + Dim xI = LOverrides.SelectedIndex + If xI <= 1 Then Exit Sub + + Dim COverrideTemp = COverrides(xI - 1) + COverrides(xI - 1) = COverrides(xI) + COverrides(xI) = COverrideTemp + + Dim ItemTemp = LOverrides.Items(xI - 1) + LOverrides.Items(xI - 1) = LOverrides.Items(xI) + LOverrides.Items(xI) = ItemTemp + LOverrides.SelectedIndex -= 1 + End Sub + + Private Sub BDown_Click(sender As Object, e As EventArgs) Handles BDown.Click + Dim xI = LOverrides.SelectedIndex + If xI = -1 Or xI = LOverrides.Items.Count - 1 Then Exit Sub + + Dim COverrideTemp = COverrides(xI + 1) + COverrides(xI + 1) = COverrides(xI) + COverrides(xI) = COverrideTemp + + Dim ItemTemp = LOverrides.Items(xI + 1) + LOverrides.Items(xI + 1) = LOverrides.Items(xI) + LOverrides.Items(xI) = ItemTemp + LOverrides.SelectedIndex += 1 + End Sub + + Private Sub BDuplicate_Click(sender As Object, e As EventArgs) Handles BDuplicate.Click + Dim xI = LOverrides.SelectedIndex + If xI = -1 Then Exit Sub + + ReDim Preserve COverrides(COverrides.Length) + LOverrides.Items.Add("") + For i = UBound(COverrides) To xI + 1 Step -1 + LOverrides.Items(i) = LOverrides.Items(i - 1) + COverrides(i) = COverrides(i - 1) + Next + End Sub + + Private Sub BSplit_Click(sender As Object, e As EventArgs) Handles BSplit.Click + Dim xI = LOverrides.SelectedIndex + If xI = -1 Then Exit Sub + If C36to10(TRangeU.Text) - C36to10(TRangeL.Text) <= 0 Then MsgBox(Strings.fopVisualOverride.SplitMsgCannot) : Exit Sub + + Dim xRangeLU = C36to10(InputBox(Strings.fopVisualOverride.SplitMsgUpper)) + Do While xRangeLU < C36to10(TRangeL.Text) Or C36to10(TRangeU.Text) < xRangeLU + If xRangeLU = 0 Then Exit Sub + xRangeLU = C36to10(InputBox(Strings.fopVisualOverride.SplitMsgNotBetweenRange)) + Loop + + BDuplicate_Click(sender, New EventArgs) + COverrides(xI).RangeU = xRangeLU + COverrides(xI + 1).RangeL = xRangeLU + 1 + ShowInTextbox() + End Sub + + Private Sub BSemiAuto_Click(sender As Object, e As EventArgs) Handles BSemiAuto.Click + Dim OptionName As String = InputBox(Strings.fopVisualOverride.SemiAutoMsgAssign) + Do While OptionName <> "" + Dim RangeL As Integer = 0 + Dim RangeU As Integer = 0 + Dim i As Integer = 1 + Dim Flag As Boolean = False + Do While i <= UBound(hWAV) + If Not Flag AndAlso SWIC(hWAV(i), OptionName) Then + RangeL = i + Flag = True + ElseIf Flag AndAlso Not SWIC(hWAV(i), OptionName) Then + RangeU = i - 1 + Exit Do + End If + i += 1 + Loop + + If RangeL <> 0 Then + ReDim Preserve COverrides(COverrides.Length) + COverrides(UBound(COverrides)) = New MainWindow.ColorOverride(OptionName, True, 0, RangeL, RangeU, Color.FromArgb(255, CInt(Math.Floor(256 * Rnd())), CInt(Math.Floor(256 * Rnd())), CInt(Math.Floor(256 * Rnd()))).ToArgb, 0) + LOverrides.Items.Add(OptionName) + Else + MsgBox(Strings.fopVisualOverride.SemiAutoMsgNone) + End If + OptionName = InputBox(Strings.fopVisualOverride.SemiAutoMsgAssignMore) + Loop + End Sub + + Private Sub BRemove_Click(sender As Object, e As EventArgs) Handles BRemove.Click + If LOverrides.SelectedIndex = -1 Then Exit Sub + + For i = LOverrides.SelectedIndex To UBound(COverrides) - 1 + COverrides(i) = COverrides(i + 1) + Next + ReDim Preserve COverrides(UBound(COverrides) - 1) + + LOverrides.Items.RemoveAt(LOverrides.SelectedIndex) + End Sub + + Private Sub CoBLoad_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CoBLoad.SelectedIndexChanged + If CoBLoad.SelectedIndex = -1 Then Exit Sub + + Dim SaveCurrentSettings = MsgBox(Strings.fopVisualOverride.SaveCurrentSettings, MsgBoxStyle.YesNoCancel) + If SaveCurrentSettings = MsgBoxResult.Yes Then + OK_Button_Click(sender, e) + ElseIf SaveCurrentSettings = MsgBoxResult.No Then + Cancel_Button_Click(sender, e) + Else + CoBLoad.SelectedIndex = -1 + End If + End Sub + + Private Sub CBEnable_CheckedChanged(sender As Object, e As EventArgs) Handles CBEnable.CheckedChanged + If LOverrides.SelectedIndex = -1 Then Exit Sub + + COverrides(LOverrides.SelectedIndex).Enabled = CBEnable.Checked + End Sub + + Private Sub CColorList_CheckedChanged(sender As Object, e As EventArgs) Handles RColorSing.CheckedChanged, RColorGrad.CheckedChanged, RColorGradHSLD.CheckedChanged, RColorGradHSLU.CheckedChanged + If LOverrides.SelectedIndex = -1 Then Exit Sub + + Dim RadioS As RadioButton = CType(sender, RadioButton) + Dim COption = COverrides(LOverrides.SelectedIndex).ColorOption + Dim COption1 = Array.IndexOf(CColorOptionList, RadioS) + If (COption = 0 AndAlso COption1 <> 0) OrElse (COption <> 0 AndAlso COption1 = 0) Then UpdateTLValuesDisplay() + COverrides(LOverrides.SelectedIndex).ColorOption = COption1 + + RefreshPreview() + End Sub + + Private Sub SaveCOverride(sender As Object, e As KeyEventArgs) Handles TName.KeyUp, TRangeL.KeyUp, TRangeU.KeyUp + If IsNothing(COverrides) Then Exit Sub + With COverrides(LOverrides.SelectedIndex) + .Name = TName.Text + .RangeL = C36to10(TRangeL.Text) + .RangeU = C36to10(TRangeU.Text) + End With + If [Object].ReferenceEquals(sender, TName) Then LOverrides.Items.Item(LOverrides.SelectedIndex) = TName.Text + RefreshPreview() + End Sub + + Private Sub BColor_Click(sender As Object, e As EventArgs) Handles BColorSing.Click, BColorGradL.Click + Dim xColorPicker As New ColorPicker + xColorPicker.SetOrigColor(BColorSing.BackColor) + If xColorPicker.ShowDialog(Me) = Windows.Forms.DialogResult.Cancel Then Exit Sub + cButtonChange(BColorSing, xColorPicker.NewColor) + cButtonChange(BColorGradL, xColorPicker.NewColor) + COverrides(LOverrides.SelectedIndex).NoteColor = xColorPicker.NewColor.ToArgb + RefreshPreview() + End Sub + + Private Sub BColorGradU_Click(sender As Object, e As EventArgs) Handles BColorGradU.Click + Dim xColorPicker As New ColorPicker + xColorPicker.SetOrigColor(BColorGradU.BackColor) + If xColorPicker.ShowDialog(Me) = Windows.Forms.DialogResult.Cancel Then Exit Sub + cButtonChange(BColorGradU, xColorPicker.NewColor) + COverrides(LOverrides.SelectedIndex).NoteColorU = xColorPicker.NewColor.ToArgb + RefreshPreview() + End Sub + + Private Sub cButtonChange(ByVal xbutton As Button, ByVal c As Color) ' Copied from OpPlayer + xbutton.Text = Hex(c.ToArgb) + xbutton.BackColor = c + xbutton.ForeColor = CType(IIf(CInt(c.GetBrightness * 255) + 255 - c.A >= 128, Color.Black, Color.White), Color) + End Sub + + ' Below are copied from Utilities + Public Function C10to36S(ByVal xStart As Integer) As Char + If xStart < 10 Then Return CChar(CStr(xStart)) Else Return Chr(xStart + 55) + End Function + Public Function C36to10S(ByVal xChar As Char) As Integer + Dim xAsc As Integer = Asc(UCase(xChar)) + If xAsc >= 48 And xAsc <= 57 Then + Return xAsc - 48 + ElseIf xAsc >= 65 And xAsc <= 90 Then + Return xAsc - 55 + End If + Return 0 + End Function + Public Function C10to36(ByVal xStart As Long) As String + If xStart < 1 Then xStart = 1 + If xStart > 1295 Then xStart = 1295 + Return C10to36S(CInt(xStart \ 36)) & C10to36S(CInt(xStart Mod 36)) + End Function + Public Function C36to10(ByVal xStart As String) As Integer + xStart = Mid("00" & xStart, Len(xStart) + 1) + Return C36to10S(xStart.Chars(0)) * 36 + C36to10S(xStart.Chars(1)) + End Function + + Private Sub ShowInTextbox() ' Referenced OpPlayer + With COverrides(LOverrides.SelectedIndex) + TName.Text = .Name + CBEnable.Checked = .Enabled + CColorOptionList(.ColorOption).Checked = True + TRangeL.Text = C10to36(.RangeL) + TRangeU.Text = C10to36(.RangeU) + BColorSing.Text = .NoteColor.ToString() + BColorGradL.Text = .NoteColor.ToString() + BColorGradU.Text = .NoteColorU.ToString() + cButtonChange(BColorSing, Color.FromArgb(.NoteColor)) + cButtonChange(BColorGradL, Color.FromArgb(.NoteColor)) + cButtonChange(BColorGradU, Color.FromArgb(.NoteColorU)) + End With + RefreshPreview() + End Sub + + + Private Sub RefreshPreview() + If Not CColorOptionList(1).Checked AndAlso Not CColorOptionList(2).Checked AndAlso Not CColorOptionList(3).Checked Then Exit Sub + Dim e1 As BufferedGraphics = BufferedGraphicsManager.Current.Allocate(PColorGrad.CreateGraphics, PColorGrad.DisplayRectangle) + Dim PanelW As Integer = PColorGrad.DisplayRectangle.Width + Dim PanelH As Integer = PColorGrad.DisplayRectangle.Height + Dim iStep As Integer + If C36to10(TRangeU.Text) - C36to10(TRangeL.Text) < 0 Then + iStep = PanelW + Else + iStep = Math.Max(CInt(PanelW / (C36to10(TRangeU.Text) - C36to10(TRangeL.Text) + 1)), 1) + End If + Dim ColorL As Color = BColorGradL.BackColor + Dim ColorU As Color = BColorGradU.BackColor + Dim ColorI As Color + For i = 0 To PanelW Step iStep + If CColorOptionList(1).Checked Then + ColorI = InterpolateColorARGB(ColorL, ColorU, i / PanelW) + ElseIf CColorOptionList(2).Checked OrElse CColorOptionList(3).Checked Then + Dim Direction As Integer = 1 + If CColorOptionList(3).Checked Then Direction = 0 + ColorI = InterpolateColorAHSL(ColorL, ColorU, i / PanelW, Direction) + End If + e1.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush(New Point(0, 0), + New Point(0, PanelH), + ColorI, + ColorI), + i, 0, + i + iStep, PanelH) + Next + + e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias + e1.Render(PColorGrad.CreateGraphics) + e1.Dispose() + End Sub + + Private Function InterpolateColorARGB(ColorL As Color, ColorU As Color, Ratio As Double) As Color + Dim A As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.A)) + (Ratio * Convert.ToInt32(ColorU.A)) + Dim R As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.R)) + (Ratio * Convert.ToInt32(ColorU.R)) + Dim G As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.G)) + (Ratio * Convert.ToInt32(ColorU.G)) + Dim B As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.B)) + (Ratio * Convert.ToInt32(ColorU.B)) + Return Color.FromArgb(Convert.ToByte(A), Convert.ToByte(R), Convert.ToByte(G), Convert.ToByte(B)) + End Function + + Private Function InterpolateColorAHSL(ColorL As Color, ColorU As Color, Ratio As Double, Optional Direction As Integer = 1) As Color + Dim HSLL = GetHSL(ColorL) + Dim HSLU = GetHSL(ColorU) + If Direction = 1 AndAlso HSLL(0) > HSLU(0) Then + HSLU(0) += 360 + ElseIf Direction = 0 AndAlso HSLL(0) < HSLU(0) Then + HSLL(0) += 360 + End If + Dim A As Double = Math.Min((1 - Ratio) * Convert.ToInt32(ColorL.A) + (Ratio * Convert.ToInt32(ColorU.A)), 255) + Dim H As Double = ((1 - Ratio) * HSLL(0) + Ratio * HSLU(0)) Mod 360 + Dim S As Double = Math.Min((1 - Ratio) * HSLL(1) + Ratio * HSLU(1), 1000) + Dim L As Double = Math.Min((1 - Ratio) * HSLL(2) + Ratio * HSLU(2), 1000) + + ' Copied from ColorPicker + Dim xxS = S / 1000 + Dim xxB = (L - 500) / 500 + Dim R As Double + Dim G As Double + Dim B As Double + + If H < 60 Then + B = -1 : R = 1 : G = (H - 30) / 30 + ElseIf H < 120 Then + B = -1 : G = 1 : R = (90 - H) / 30 + ElseIf H < 180 Then + R = -1 : G = 1 : B = (H - 150) / 30 + ElseIf H < 240 Then + R = -1 : B = 1 : G = (210 - H) / 30 + ElseIf H < 300 Then + G = -1 : B = 1 : R = (H - 270) / 30 + Else + G = -1 : R = 1 : B = (330 - H) / 30 + End If + + R = (R * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 + G = (G * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 + B = (B * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 + + Return Color.FromArgb(CInt(A), CInt(R), CInt(G), CInt(B)) + End Function + + Private Function GetHSL(ColorI As Color) As Integer() + Dim R As Double = CInt(ColorI.R) / 255 + Dim G As Double = CInt(ColorI.G) / 255 + Dim B As Double = CInt(ColorI.B) / 255 + Console.WriteLine("R: " & R & vbCrLf & "G: " & G & vbCrLf & "B: " & B & vbCrLf) + Dim CMin = Math.Min(Math.Min(R, G), B) + Dim CMax = Math.Max(Math.Max(R, G), B) + Dim Delta = CMax - CMin + Dim H As Double + Dim S As Double + Dim L As Double + Console.WriteLine("CMin: " & CMin & vbCrLf & "CMax: " & CMax & vbCrLf & "Delta: " & Delta & vbCrLf) + If Delta = 0 Then + H = 0 + ElseIf CMax = R Then + H = (6 + ((G - B) / Delta)) Mod 6 + ElseIf CMax = G Then + H = (B - R) / Delta + 2 + Else + H = (R - G) / Delta + 4 + End If + + H = Math.Round(H * 60) + If H < 0 Then H += 360 + + L = (CMax + CMin) / 2 + + If Delta = 0 Then S = 0 Else If L = 1 Then S = 1 Else S = Delta / (1 - Math.Abs(2 * L - 1)) + Console.WriteLine(H & vbCrLf & S & vbCrLf & L & vbCrLf) + S *= 1000 + L *= 1000 + + Return {CInt(H), CInt(S), CInt(L)} + End Function + + Private Sub UpdateTLValuesDisplay() + If TLValuesHeight Is Nothing Then Exit Sub + SuspendLayout() + TLValues.SuspendLayout() + Height = WHeight + TLValues.RowStyles(2).Height = TLValuesHeight(2) + TLValues.RowStyles(3).Height = TLValuesHeight(3) + TLValues.RowStyles(4).Height = TLValuesHeight(4) + If CColorOptionList(0).Checked Then + TLValues.RowStyles(3).Height = 0 + TLValues.RowStyles(4).Height = 0 + Height -= CInt(TLValuesHeight(3) + TLValuesHeight(4)) + Else + TLValues.RowStyles(2).Height = 0 + Height -= CInt(TLValuesHeight(2)) + End If + ResumeLayout() + TLValues.ResumeLayout() + End Sub + + Private Function SWIC(str As String, strHash As String) As Boolean ' StartsWith, IgnoreCase + If str Is Nothing Then Return False + Return str.StartsWith(strHash, StringComparison.CurrentCultureIgnoreCase) + End Function +End Class \ No newline at end of file diff --git a/iBMSC/PanelDraw.vb b/iBMSC/PanelDraw.vb index c43f236a7..0adae05e2 100644 --- a/iBMSC/PanelDraw.vb +++ b/iBMSC/PanelDraw.vb @@ -1,731 +1,987 @@ -Imports iBMSC.Editor - -Partial Public Class MainWindow - - Private Sub RefreshPanelAll() - If IsInitializing Then Exit Sub - RefreshPanel(0, PMainInL.DisplayRectangle) - RefreshPanel(1, PMainIn.DisplayRectangle) - RefreshPanel(2, PMainInR.DisplayRectangle) - End Sub - - Dim bufferlist As Dictionary(Of Integer, BufferedGraphics) = New Dictionary(Of Integer, BufferedGraphics) - Dim rectList As Dictionary(Of Integer, Rectangle) = New Dictionary(Of Integer, Rectangle) - Private Function GetBuffer(xIndex As Integer, DisplayRect As Rectangle) - If bufferlist.ContainsKey(xIndex) AndAlso rectList.Item(xIndex) = DisplayRect Then - Return bufferlist.Item(xIndex) - Else - If bufferlist.ContainsKey(xIndex) Then - bufferlist.Item(xIndex).Dispose() - bufferlist.Remove(xIndex) - rectList.Remove(xIndex) - End If - - Dim gfx = BufferedGraphicsManager.Current.Allocate(spMain(xIndex).CreateGraphics, DisplayRect) - bufferlist.Add(xIndex, gfx) - rectList.Add(xIndex, DisplayRect) - Return gfx - End If - End Function - - Private Sub RefreshPanel(ByVal xIndex As Integer, ByVal DisplayRect As Rectangle) - If Me.WindowState = FormWindowState.Minimized Then Return - If DisplayRect.Width <= 0 Or DisplayRect.Height <= 0 Then Return - 'If spMain.Count = 0 Then Return - 'Dim currentContext As BufferedGraphicsContext = BufferedGraphicsManager.Current - Dim e1 As BufferedGraphics = GetBuffer(xIndex, DisplayRect) - e1.Graphics.FillRectangle(vo.Bg, DisplayRect) - - Dim xTHeight As Integer = spMain(xIndex).Height - Dim xTWidth As Integer = spMain(xIndex).Width - Dim xPanelHScroll As Integer = PanelHScroll(xIndex) - Dim xPanelDisplacement As Integer = PanelVScroll(xIndex) - Dim xVSR As Integer = -PanelVScroll(xIndex) - Dim xVSu As Integer = IIf(xVSR + xTHeight / gxHeight > GetMaxVPosition(), GetMaxVPosition(), xVSR + xTHeight / gxHeight) - - 'e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias - Dim xI1 As Integer - - 'Bg color - DrawBackgroundColor(e1, xTHeight, xTWidth, xPanelHScroll, xI1) - - xI1 = DrawPanelLines(e1, xTHeight, xTWidth, xPanelHScroll, xPanelDisplacement, xVSu) - - 'Column Caption - xI1 = DrawColumnCaptions(e1, xTWidth, xPanelHScroll, xI1) - - 'WaveForm - DrawWaveform(e1, xTHeight, xVSR, xI1) - - 'K - 'If Not K Is Nothing Then - DrawNotes(e1, xTHeight, xPanelHScroll, xPanelDisplacement) - - 'End If - - 'Selection Box - DrawSelectionBox(xIndex, e1) - - 'Mouse Over - If TBSelect.Checked AndAlso Not KMouseOver = -1 Then - DrawMouseOver(e1, xTHeight, xPanelHScroll, xPanelDisplacement) - End If - - If ShouldDrawTempNote AndAlso (SelectedColumn > -1 And TempVPosition > -1) Then - DrawTempNote(e1, xTHeight, xPanelHScroll, xPanelDisplacement) - End If - - 'Time Selection - If TBTimeSelect.Checked Then - DrawTimeSelection(e1, xTHeight, xTWidth, xPanelHScroll, xPanelDisplacement) - End If - - 'Middle button: CLick and Scroll - If MiddleButtonClicked Then - e1 = DrawClickAndScroll(xIndex, e1) - End If - - 'Drag/Drop - DrawDragAndDrop(xIndex, e1) - - e1.Render(spMain(xIndex).CreateGraphics) - 'e1.Dispose() - End Sub - - Private Sub DrawTempNote(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVS As Integer) - Dim xValue As Integer = (LWAV.SelectedIndex + 1) * 10000 - - Dim xAlpha As Single = 1.0F - If ModifierHiddenActive() Then - xAlpha = vo.kOpacity - End If - - Dim xText As String = C10to36(xValue \ 10000) - If IsColumnNumeric(SelectedColumn) Then - xText = GetColumn(SelectedColumn).Title - End If - - Dim xPen As Pen - Dim xBrush As Drawing2D.LinearGradientBrush - Dim xBrush2 As SolidBrush - Dim point1 As New Point(HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS), - NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight - 10) - Dim point2 As New Point(HorizontalPositiontoDisplay(nLeft(SelectedColumn) + GetColumnWidth(SelectedColumn), xHS), - NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) + 10) - - Dim bright As Color - Dim dark As Color - If NTInput Or Not ModifierLongNoteActive() Then - xPen = New Pen(GetColumn(SelectedColumn).getBright(xAlpha)) - bright = GetColumn(SelectedColumn).getBright(xAlpha) - dark = GetColumn(SelectedColumn).getDark(xAlpha) - - xBrush2 = New SolidBrush(GetColumn(SelectedColumn).cText) - Else - xPen = New Pen(GetColumn(SelectedColumn).getLongBright(xAlpha)) - bright = GetColumn(SelectedColumn).getLongBright(xAlpha) - dark = GetColumn(SelectedColumn).getLongDark(xAlpha) - - xBrush2 = New SolidBrush(GetColumn(SelectedColumn).cLText) - End If - - ' Temp landmine - If ModifierLandmineActive() Then - bright = Color.Red - dark = Color.Red - End If - - xBrush = New Drawing2D.LinearGradientBrush(point1, point2, bright, dark) - - e1.Graphics.FillRectangle(xBrush, HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS) + 2, - NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight + 1, - GetColumnWidth(SelectedColumn) * gxWidth - 3, - vo.kHeight - 1) - e1.Graphics.DrawRectangle(xPen, - HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS) + 1, - NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight, - GetColumnWidth(SelectedColumn) * gxWidth - 2, - vo.kHeight) - - e1.Graphics.DrawString(xText, vo.kFont, xBrush2, - HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS) + vo.kLabelHShiftL - 2, - NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight + vo.kLabelVShift) - End Sub - - Private Sub DrawDragAndDrop(xIndex As Integer, e1 As BufferedGraphics) - If UBound(DDFileName) > -1 Then - 'Dim xFont As New Font("Cambria", 12) - Dim xBrush As New SolidBrush(Color.FromArgb(&HC0FFFFFF)) - Dim xCenterX As Single = spMain(xIndex).DisplayRectangle.Width / 2 - Dim xCenterY As Single = spMain(xIndex).DisplayRectangle.Height / 2 - Dim xFormat As New System.Drawing.StringFormat - xFormat.Alignment = StringAlignment.Center - xFormat.LineAlignment = StringAlignment.Center - e1.Graphics.DrawString(Join(DDFileName, vbCrLf), Me.Font, xBrush, spMain(xIndex).DisplayRectangle, xFormat) - End If - End Sub - - Private Sub DrawSelectionBox(xIndex As Integer, e1 As BufferedGraphics) - If TBSelect.Checked AndAlso xIndex = PanelFocus AndAlso Not (pMouseMove = New Point(-1, -1) Or LastMouseDownLocation = New Point(-1, -1)) Then - e1.Graphics.DrawRectangle(vo.SelBox, IIf(pMouseMove.X > LastMouseDownLocation.X, LastMouseDownLocation.X, pMouseMove.X), - IIf(pMouseMove.Y > LastMouseDownLocation.Y, LastMouseDownLocation.Y, pMouseMove.Y), - Math.Abs(pMouseMove.X - LastMouseDownLocation.X), Math.Abs(pMouseMove.Y - LastMouseDownLocation.Y)) - End If - End Sub - - Function GetColumnHighlightColor(col As Color, Optional factor As Double = 2.0) - Dim clamp = Function(x) IIf(x > 255, 255, x) - Return Color.FromArgb( - clamp(col.A * factor), - clamp(col.R * factor), - clamp(col.G * factor), - clamp(col.B * factor)) - End Function - - Private Sub DrawBackgroundColor(e1 As BufferedGraphics, xTHeight As Integer, xTWidth As Integer, xHS As Integer, xI1 As Integer) - If gShowBG Then - For xI1 = 0 To gColumns - If nLeft(xI1 + 1) * gxWidth - xHS * gxWidth + 1 < 0 Then Continue For - If nLeft(xI1) * gxWidth - xHS * gxWidth + 1 > xTWidth Then Exit For - If Not GetColumn(xI1).cBG.GetBrightness = 0 And GetColumnWidth(xI1) > 0 Then - Dim col = GetColumn(xI1).cBG - If xI1 = GetColumnAtX(MouseMoveStatus.X, xHS) Then - Dim bf = 1.2 - col = GetColumnHighlightColor(col) - End If - Dim brush = New SolidBrush(col) - - e1.Graphics.FillRectangle(brush, - nLeft(xI1) * gxWidth - xHS * gxWidth + 1, - 0, - GetColumnWidth(xI1) * gxWidth, - xTHeight) - End If - Next - End If - End Sub - - Private Function DrawColumnCaptions(e1 As BufferedGraphics, xTWidth As Integer, xHS As Integer, xI1 As Integer) As Integer - If gShowC Then - For xI1 = 0 To gColumns - If nLeft(xI1 + 1) * gxWidth - xHS * gxWidth + 1 < 0 Then Continue For - If nLeft(xI1) * gxWidth - xHS * gxWidth + 1 > xTWidth Then Exit For - If GetColumnWidth(xI1) > 0 Then e1.Graphics.DrawString(nTitle(xI1), vo.ColumnTitleFont, vo.ColumnTitle, nLeft(xI1) * gxWidth - xHS * gxWidth, 0) - Next - End If - - Return xI1 - End Function - - Private Function DrawPanelLines(e1 As BufferedGraphics, - xTHeight As Integer, xTWidth As Integer, - xHS As Integer, xVS As Integer, - xVSu As Integer) As Integer - 'Vertical line - If gShowVerticalLine Then - For xI1 = 0 To gColumns - Dim xpos = nLeft(xI1) * gxWidth - xHS * gxWidth - If xpos + 1 < 0 Then Continue For - If xpos + 1 > xTWidth Then Exit For - If GetColumnWidth(xI1) > 0 Then e1.Graphics.DrawLine(vo.pVLine, - xpos, 0, - xpos, xTHeight) - Next - End If - - 'Grid, Sub, Measure - Dim Measure - For Measure = MeasureAtDisplacement(-xVS) To MeasureAtDisplacement(xVSu) - 'grid - If gShowGrid Then DrawGridLines(e1, - xTHeight, xTWidth, - xVS, Measure, - gDivide, vo.pGrid) - - 'sub - If gShowSubGrid Then DrawGridLines(e1, - xTHeight, xTWidth, - xVS, Measure, - gSub, vo.pSub) - - - 'measure and measurebar - Dim xCurr = MeasureBottom(Measure) - Dim Height = NoteRowToPanelHeight(xCurr, xVS, xTHeight) - If gShowMeasureBar Then e1.Graphics.DrawLine(vo.pMLine, 0, Height, - xTWidth, Height) - If gShowMeasureNumber Then e1.Graphics.DrawString("[" & Add3Zeros(Measure).ToString & "]", vo.kMFont, - New SolidBrush(GetColumn(0).cText), -xHS * gxWidth, - Height - vo.kMFont.Height) - Next - - Dim vpos = GetMouseVPosition(gSnap) - Dim mouseLineHeight = NoteRowToPanelHeight(vpos, xVS, xTHeight) - Dim p = New Pen(Color.White) - e1.Graphics.DrawLine(p, 0, mouseLineHeight, xTWidth, mouseLineHeight) - - Return Measure - End Function - - Private Sub DrawGridLines(e1 As BufferedGraphics, - xTHeight As Integer, xTWidth As Integer, - xVS As Integer, measureIndex As Integer, - divisions As Integer, pen As Pen) - Dim Line = 0 - Dim xUpper As Double = MeasureUpper(measureIndex) - Dim xCurr = MeasureBottom(measureIndex) - Dim xDiff = 192 / divisions - Do While xCurr < xUpper - Dim Height = NoteRowToPanelHeight(xCurr, xVS, xTHeight) - e1.Graphics.DrawLine(pen, 0, Height, - xTWidth, Height) - Line += 1 - xCurr = MeasureBottom(measureIndex) + Line * xDiff - Loop - End Sub - - Private Function IsNoteVisible(note As Note, xTHeight As Integer, xVS As Integer) As Boolean - Dim xUpperBorder As Single = Math.Abs(xVS) + xTHeight / gxHeight - Dim xLowerBorder As Single = Math.Abs(xVS) - vo.kHeight / gxHeight - - Dim AboveLower = note.VPosition >= xLowerBorder - Dim HeadBelow = note.VPosition <= xLowerBorder - Dim TailAbove = note.VPosition + note.Length >= xLowerBorder - Dim IntersectsNT = HeadBelow And TailAbove - Dim Intersecs = (note.VPosition <= xLowerBorder And Notes(note.LNPair).VPosition >= xLowerBorder) - Dim AboveUpper = note.VPosition > xUpperBorder - - Dim NoteInside = (Not AboveUpper) And AboveLower - - Return NoteInside OrElse IntersectsNT OrElse IntersectsNT - End Function - - Private Function IsNoteVisible(noteindex As Integer, xTHeight As Integer, xVS As Integer) As Boolean - Return IsNoteVisible(Notes(noteindex), xTHeight, xVS) - End Function - - Private Sub DrawNotes(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVS As Integer) - Dim xI1 As Integer - Dim xUpperBorder As Single = Math.Abs(xVS) + xTHeight / gxHeight - Dim xLowerBorder As Single = Math.Abs(xVS) - vo.kHeight / gxHeight - - For xI1 = 0 To UBound(Notes) - If Notes(xI1).VPosition > xUpperBorder Then Exit For - If Not IsNoteVisible(xI1, xTHeight, xVS) Then Continue For - If NTInput Then - DrawNoteNT(Notes(xI1), e1, xHS, xVS, xTHeight) - Else - DrawNote(Notes(xI1), e1, xHS, xVS, xTHeight) - End If - Next - End Sub - - Private Function GetNoteRectangle(note As Note, xTHeight As Integer, xHS As Integer, xVS As Integer) As Rectangle - Dim xDispX As Integer = HorizontalPositiontoDisplay(nLeft(note.ColumnIndex), xHS) - - Dim xDispY As Integer = IIf(Not NTInput Or (bAdjustLength And Not bAdjustUpper), - NoteRowToPanelHeight(note.VPosition, xVS, xTHeight) - vo.kHeight - 1, - NoteRowToPanelHeight(note.VPosition + - note.Length, xVS, xTHeight) - - vo.kHeight - 1) - - Dim xDispW As Integer = GetColumnWidth(note.ColumnIndex) * gxWidth + 1 - Dim xDispH As Integer = IIf(Not NTInput Or bAdjustLength, - vo.kHeight + 3, - note.Length * gxHeight + vo.kHeight + 3) - - Return New Rectangle(xDispX, xDispY, xDispW, xDispH) - End Function - - Private Function GetNoteRectangle(noteIndex As Integer, xTHeight As Integer, xHS As Integer, xVS As Integer) As Rectangle - Return GetNoteRectangle(Notes(noteIndex), xTHeight, xHS, xVS) - End Function - - - Private Sub DrawMouseOver(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVS As Integer) - If NTInput Then - If Not bAdjustLength Then DrawNoteNT(Notes(KMouseOver), e1, xHS, xVS, xTHeight) - Else - DrawNote(Notes(KMouseOver), e1, xHS, xVS, xTHeight) - End If - - Dim rect = GetNoteRectangle(KMouseOver, xTHeight, xHS, xVS) - Dim pen = IIf(bAdjustLength, vo.kMouseOverE, vo.kMouseOver) - e1.Graphics.DrawRectangle(pen, rect.X, rect.Y, rect.Width - 1, rect.Height - 1) - - If ModifierMultiselectActive() Then - For Each note In Notes - If IsNoteVisible(note, xTHeight, xVS) AndAlso IsLabelMatch(note, KMouseOver) Then - Dim nrect = GetNoteRectangle(note, xTHeight, xHS, xVS) - e1.Graphics.DrawRectangle(pen, nrect.X, nrect.Y, nrect.Width - 1, nrect.Height - 1) - End If - Next - End If - - End Sub - - Private Sub DrawTimeSelection(e1 As BufferedGraphics, xTHeight As Integer, xTWidth As Integer, xHS As Integer, xVS As Integer) - Dim xI1 As Integer - Dim xBPMStart = Notes(0).Value - Dim xBPMHalf = Notes(0).Value - Dim xBPMEnd = Notes(0).Value - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).ColumnIndex = niBPM Then - If Notes(xI1).VPosition <= vSelStart Then xBPMStart = Notes(xI1).Value - If Notes(xI1).VPosition <= vSelStart + vSelHalf Then xBPMHalf = Notes(xI1).Value - If Notes(xI1).VPosition <= vSelStart + vSelLength Then xBPMEnd = Notes(xI1).Value - End If - If Notes(xI1).VPosition > vSelStart + vSelLength Then Exit For - Next - - 'Selection area - e1.Graphics.FillRectangle(vo.PESel, - 0, - NoteRowToPanelHeight(vSelStart + IIf(vSelLength > 0, vSelLength, 0), xVS, xTHeight) + Math.Abs(CInt(vSelLength <> 0)), - xTWidth, - CInt(Math.Abs(vSelLength) * gxHeight)) - 'End Cursor - e1.Graphics.DrawLine(vo.PECursor, - 0, - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight), - xTWidth, - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight)) - 'Half Cursor - e1.Graphics.DrawLine(vo.PEHalf, - 0, - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight), - xTWidth, - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight)) - 'Start BPM - e1.Graphics.DrawString(xBPMStart / 10000, - vo.PEBPMFont, vo.PEBPM, - (-xHS + nLeft(niBPM)) * gxWidth, - NoteRowToPanelHeight(vSelStart, xVS, xTHeight) - vo.PEBPMFont.Height + 3) - 'Half BPM - e1.Graphics.DrawString(xBPMHalf / 10000, - vo.PEBPMFont, vo.PEBPM, - (-xHS + nLeft(niBPM)) * gxWidth, - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight) - vo.PEBPMFont.Height + 3) - 'End BPM - e1.Graphics.DrawString(xBPMEnd / 10000, - vo.PEBPMFont, vo.PEBPM, - (-xHS + nLeft(niBPM)) * gxWidth, - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight) - vo.PEBPMFont.Height + 3) - - 'SelLine - If vSelMouseOverLine = 1 Then 'Start Cursor - e1.Graphics.DrawRectangle(vo.PEMouseOver, - 0, NoteRowToPanelHeight(vSelStart, xVS, xTHeight) - 1, - xTWidth - 1, 2) - ElseIf vSelMouseOverLine = 2 Then 'Half Cursor - e1.Graphics.DrawRectangle(vo.PEMouseOver, - 0, NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight) - 1, - xTWidth - 1, 2) - ElseIf vSelMouseOverLine = 3 Then 'End Cursor - e1.Graphics.DrawRectangle(vo.PEMouseOver, - 0, NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight) - 1, - xTWidth - 1, 2) - End If - End Sub - - Private Function DrawClickAndScroll(xIndex As Integer, e1 As BufferedGraphics) As BufferedGraphics - Dim xDeltaLocation As Point = spMain(xIndex).PointToScreen(New Point(0, 0)) - - Dim xInitX As Single = MiddleButtonLocation.X - xDeltaLocation.X - Dim xInitY As Single = MiddleButtonLocation.Y - xDeltaLocation.Y - Dim xCurrX As Single = Cursor.Position.X - xDeltaLocation.X - Dim xCurrY As Single = Cursor.Position.Y - xDeltaLocation.Y - Dim xAngle As Double = Math.Atan2(xCurrY - xInitY, xCurrX - xInitX) - e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality - - If Not (xInitX = xCurrX And xInitY = xCurrY) Then - Dim xPointx() As PointF = {New PointF(xCurrX, xCurrY), - New PointF(Math.Cos(xAngle + Math.PI / 2) * 10 + xInitX, Math.Sin(xAngle + Math.PI / 2) * 10 + xInitY), - New PointF(Math.Cos(xAngle - Math.PI / 2) * 10 + xInitX, Math.Sin(xAngle - Math.PI / 2) * 10 + xInitY)} - e1.Graphics.FillPolygon(New Drawing2D.LinearGradientBrush(New Point(xInitX, xInitY), New Point(xCurrX, xCurrY), Color.FromArgb(0), Color.FromArgb(-1)), xPointx) - End If - - e1.Graphics.FillEllipse(Brushes.LightGray, xInitX - 10, xInitY - 10, 20, 20) - e1.Graphics.DrawEllipse(Pens.Black, xInitX - 8, xInitY - 8, 16, 16) - - e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.Default - Return e1 - End Function - - Private Sub DrawWaveform(e1 As BufferedGraphics, xTHeight As Integer, xVSR As Integer, xI1 As Integer) - If wWavL IsNot Nothing And wWavR IsNot Nothing And wPrecision > 0 Then - If wLock Then - For xI0 As Integer = 1 To UBound(Notes) - If Notes(xI0).ColumnIndex >= niB Then wPosition = Notes(xI0).VPosition : Exit For - Next - End If - - Dim xPtsL(xTHeight * wPrecision) As PointF - Dim xPtsR(xTHeight * wPrecision) As PointF - - Dim xD1 As Double - - Dim bVPosition() As Double = {wPosition} - Dim bBPM() As Decimal = {Notes(0).Value / 10000} - Dim bWavDataIndex() As Decimal = {0} - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).ColumnIndex = niBPM Then - If Notes(xI1).VPosition >= wPosition Then - ReDim Preserve bVPosition(UBound(bVPosition) + 1) - ReDim Preserve bBPM(UBound(bBPM) + 1) - ReDim Preserve bWavDataIndex(UBound(bWavDataIndex) + 1) - bVPosition(UBound(bVPosition)) = Notes(xI1).VPosition - bBPM(UBound(bBPM)) = Notes(xI1).Value / 10000 - bWavDataIndex(UBound(bWavDataIndex)) = (Notes(xI1).VPosition - bVPosition(UBound(bVPosition) - 1)) * 1.25 * wSampleRate / bBPM(UBound(bBPM) - 1) + bWavDataIndex(UBound(bWavDataIndex) - 1) - Else - bBPM(0) = Notes(xI1).Value / 10000 - End If - End If - Next - - Dim xI2 As Integer = 0 - Dim xI3 As Double - - For xI1 = xTHeight * wPrecision To 0 Step -1 - xI3 = (-xI1 / wPrecision + xTHeight + xVSR * gxHeight - 1) / gxHeight - For xI2 = 1 To UBound(bVPosition) - If bVPosition(xI2) >= xI3 Then Exit For - Next - xI2 -= 1 - xD1 = bWavDataIndex(xI2) + (xI3 - bVPosition(xI2)) * 1.25 * wSampleRate / bBPM(xI2) - - If xD1 <= UBound(wWavL) And xD1 >= 0 Then - xPtsL(xI1) = New PointF(wWavL(Int(xD1)) * wWidth + wLeft, xI1 / wPrecision) - xPtsR(xI1) = New PointF(wWavR(Int(xD1)) * wWidth + wLeft, xI1 / wPrecision) - Else - xPtsL(xI1) = New PointF(wLeft, xI1 / wPrecision) - xPtsR(xI1) = New PointF(wLeft, xI1 / wPrecision) - End If - Next - e1.Graphics.DrawLines(vo.pBGMWav, xPtsL) - e1.Graphics.DrawLines(vo.pBGMWav, xPtsR) - End If - End Sub - - ''' - ''' Draw a note in a buffer. - ''' - ''' Note to be drawn. - ''' Buffer. - ''' HS.Value. - ''' VS.Value. - ''' Display height of the panel. (not ClipRectangle.Height) - - Private Sub DrawNote(ByVal sNote As Note, ByVal e As BufferedGraphics, ByVal xHS As Long, ByVal xVS As Long, ByVal xHeight As Integer) ', Optional ByVal CheckError As Boolean = True) ', Optional ByVal ConnectToIndex As Long = 0) - If Not nEnabled(sNote.ColumnIndex) Then Exit Sub - Dim xAlpha As Single = 1.0F - If sNote.Hidden Then xAlpha = vo.kOpacity - - Dim xLabel As String = C10to36(sNote.Value \ 10000) - If ShowFileName Then - If IsColumnSound(sNote.ColumnIndex) Then - If hWAV(C36to10(xLabel)) <> "" Then xLabel = Path.GetFileNameWithoutExtension(hWAV(C36to10(xLabel))) - Else - If hBMP(C36to10(xLabel)) <> "" Then xLabel = Path.GetFileNameWithoutExtension(hBMP(C36to10(xLabel))) - End If - End If - - Dim xPen As Pen - Dim xBrush As Drawing2D.LinearGradientBrush - Dim xBrush2 As SolidBrush - - Dim bright As Color - Dim dark As Color - Dim p1 = New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight - 10) - Dim p2 = New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) + GetColumnWidth(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) + 10) - - If Not sNote.LongNote Then - xPen = New Pen(GetColumn(sNote.ColumnIndex).getBright(xAlpha)) - - bright = GetColumn(sNote.ColumnIndex).getBright(xAlpha) - dark = GetColumn(sNote.ColumnIndex).getDark(xAlpha) - - If sNote.Landmine Then - bright = Color.Red - dark = Color.Red - End If - - xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cText) - Else - bright = GetColumn(sNote.ColumnIndex).getLongBright(xAlpha) - dark = GetColumn(sNote.ColumnIndex).getLongDark(xAlpha) - - xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cLText) - End If - - xPen = New Pen(bright) - xBrush = New Drawing2D.LinearGradientBrush(p1, p2, bright, dark) - - ' Fill - e.Graphics.FillRectangle(xBrush, HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS) + 2, - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight + 1, - GetColumnWidth(sNote.ColumnIndex) * gxWidth - 3, - vo.kHeight - 1) - ' Outline - e.Graphics.DrawRectangle(xPen, - HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS) + 1, - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight, - GetColumnWidth(sNote.ColumnIndex) * gxWidth - 2, - vo.kHeight) - - ' Label - e.Graphics.DrawString(IIf(IsColumnNumeric(sNote.ColumnIndex), sNote.Value / 10000, xLabel), - vo.kFont, xBrush2, - HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS) + vo.kLabelHShift, - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight + vo.kLabelVShift) - - If sNote.ColumnIndex < niB Then - If sNote.LNPair <> 0 Then - DrawPairedLNBody(sNote, e, xHS, xVS, xHeight, xAlpha) - End If - End If - - - 'e.Graphics.DrawString(sNote.TimeOffset.ToString("0.##"), New Font("Verdana", 9), Brushes.Cyan, _ - ' New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex + 1), xHS), VerticalPositiontoDisplay(sNote.VPosition, xVS, xHeight) - vo.kHeight - 2)) - - 'If ErrorCheck AndAlso (sNote.LongNote Xor sNote.PairWithI <> 0) Then e.Graphics.DrawImage(My.Resources.ImageError, _ - If ErrorCheck AndAlso sNote.HasError Then e.Graphics.DrawImage(My.Resources.ImageError, - CInt(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) + GetColumnWidth(sNote.ColumnIndex) / 2, xHS) - 12), - CInt(NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight / 2 - 12), - 24, 24) - - If sNote.Selected Then e.Graphics.DrawRectangle(vo.kSelected, HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS), NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight - 1, GetColumnWidth(sNote.ColumnIndex) * gxWidth, vo.kHeight + 2) - - End Sub - - Private Sub DrawPairedLNBody(sNote As Note, e As BufferedGraphics, xHS As Long, xVS As Long, xHeight As Integer, xAlpha As Single) - Dim xPen2 As New Pen(GetColumn(sNote.ColumnIndex).getLongBright(xAlpha)) - Dim xBrush3 As New Drawing2D.LinearGradientBrush( - New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) - 0.5 * GetColumnWidth(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight)), - New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) + 1.5 * GetColumnWidth(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) + vo.kHeight), - GetColumn(sNote.ColumnIndex).getLongBright(xAlpha), - GetColumn(sNote.ColumnIndex).getLongDark(xAlpha)) - e.Graphics.FillRectangle(xBrush3, HorizontalPositiontoDisplay(nLeft(Notes(sNote.LNPair).ColumnIndex), xHS) + 3, NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight) + 1, - GetColumnWidth(Notes(sNote.LNPair).ColumnIndex) * gxWidth - 5, NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight) - vo.kHeight - 1) - e.Graphics.DrawRectangle(xPen2, HorizontalPositiontoDisplay(nLeft(Notes(sNote.LNPair).ColumnIndex), xHS) + 2, NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight), - GetColumnWidth(Notes(sNote.LNPair).ColumnIndex) * gxWidth - 4, NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight) - vo.kHeight) - End Sub - - ''' - ''' Draw a note in a buffer under NT mode. - ''' - ''' Note to be drawn. - ''' Buffer. - ''' HS.Value. - ''' VS.Value. - ''' Display height of the panel. (not ClipRectangle.Height) - - Private Sub DrawNoteNT(ByVal sNote As Note, ByVal e As BufferedGraphics, ByVal xHS As Long, ByVal xVS As Long, ByVal xHeight As Integer) ', Optional ByVal CheckError As Boolean = True) - If Not nEnabled(sNote.ColumnIndex) Then Exit Sub - Dim xAlpha As Single = 1.0F - If sNote.Hidden Then xAlpha = vo.kOpacity - - Dim xLabel As String = C10to36(sNote.Value \ 10000) - If ShowFileName Then - If IsColumnSound(sNote.ColumnIndex) Then - If hWAV(C36to10(xLabel)) <> "" Then xLabel = Path.GetFileNameWithoutExtension(hWAV(C36to10(xLabel))) - Else - If hBMP(C36to10(xLabel)) <> "" Then xLabel = Path.GetFileNameWithoutExtension(hBMP(C36to10(xLabel))) - End If - End If - - Dim xPen1 As Pen - Dim xBrush As Drawing2D.LinearGradientBrush - Dim xBrush2 As SolidBrush - - Dim p1 As Point - Dim p2 As Point - Dim bright As Color - Dim dark As Color - - If sNote.Length = 0 Then - p1 = New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight - 10) - - p2 = New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) + GetColumnWidth(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) + 10) - - bright = GetColumn(sNote.ColumnIndex).getBright(xAlpha) - dark = GetColumn(sNote.ColumnIndex).getDark(xAlpha) - - If sNote.Landmine Then - bright = Color.Red - dark = Color.Red - End If - - xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cText) - Else - p1 = New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) - 0.5 * GetColumnWidth(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight) - p2 = New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) + 1.5 * GetColumnWidth(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight)) - - bright = GetColumn(sNote.ColumnIndex).getLongBright(xAlpha) - dark = GetColumn(sNote.ColumnIndex).getLongDark(xAlpha) - - xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cLText) - End If - - xPen1 = New Pen(bright) - xBrush = New Drawing2D.LinearGradientBrush(p1, p2, bright, dark) - - ' Note gradient - e.Graphics.FillRectangle(xBrush, - HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS) + 1, - NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight + 1, - GetColumnWidth(sNote.ColumnIndex) * gxWidth - 1, - CInt(sNote.Length * gxHeight) + vo.kHeight - 1) - - ' Outline - e.Graphics.DrawRectangle(xPen1, HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS) + 1, - NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight, - GetColumnWidth(sNote.ColumnIndex) * gxWidth - 3, CInt(sNote.Length * gxHeight) + vo.kHeight) - - ' Note B36 - e.Graphics.DrawString(IIf(IsColumnNumeric(sNote.ColumnIndex), sNote.Value / 10000, xLabel), - vo.kFont, xBrush2, - HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS) + vo.kLabelHShiftL - 2, - NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight + vo.kLabelVShift) - - ' Draw paired body - If sNote.ColumnIndex < niB Then - If sNote.Length = 0 And sNote.LNPair <> 0 Then - DrawPairedLNBody(sNote, e, xHS, xVS, xHeight, xAlpha) - End If - End If - - - ' Select Box - If sNote.Selected Then - e.Graphics.DrawRectangle(vo.kSelected, - HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex), xHS), - NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight - 1, - GetColumnWidth(sNote.ColumnIndex) * gxWidth, - CInt(sNote.Length * gxHeight) + vo.kHeight + 2) - End If - - ' Errors - If ErrorCheck AndAlso sNote.HasError Then - e.Graphics.DrawImage(My.Resources.ImageError, - CInt(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex) + GetColumnWidth(sNote.ColumnIndex) / 2, xHS) - 12), - CInt(NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight / 2 - 12), - 24, 24) - End If - - 'e.Graphics.DrawString(sNote.TimeOffset.ToString("0.##"), New Font("Verdana", 9), Brushes.Cyan, _ - ' New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex + 1), xHS), VerticalPositiontoDisplay(sNote.VPosition, xVS, xHeight) - vo.kHeight - 2)) - - End Sub -End Class +Imports iBMSC.Editor + +Partial Public Class MainWindow + + Private Sub RefreshPanelAll() + If IsApplicationInitializing Then Exit Sub + RefreshPanel(0, PMainInL.DisplayRectangle) + RefreshPanel(1, PMainIn.DisplayRectangle) + RefreshPanel(2, PMainInR.DisplayRectangle) + End Sub + + Dim bufferlist As Dictionary(Of Integer, BufferedGraphics) = New Dictionary(Of Integer, BufferedGraphics) + Dim rectList As Dictionary(Of Integer, Rectangle) = New Dictionary(Of Integer, Rectangle) + + Dim LastNoteToDraw As Integer = 0 + + Private Function GetBuffer(xIndex As Integer, DisplayRect As Rectangle) As BufferedGraphics + If bufferlist.ContainsKey(xIndex) AndAlso rectList.Item(xIndex) = DisplayRect Then + Return bufferlist.Item(xIndex) + Else + If bufferlist.ContainsKey(xIndex) Then + bufferlist.Item(xIndex).Dispose() + bufferlist.Remove(xIndex) + rectList.Remove(xIndex) + End If + + Dim gfx = BufferedGraphicsManager.Current.Allocate(spMain(xIndex).CreateGraphics, DisplayRect) + bufferlist.Add(xIndex, gfx) + rectList.Add(xIndex, DisplayRect) + Return gfx + End If + End Function + + Private Sub RefreshPanel(ByVal xIndex As Integer, ByVal DisplayRect As Rectangle) + If IsApplicationInitializing OrElse + Me.WindowState = FormWindowState.Minimized OrElse + DisplayRect.Width <= 0 OrElse DisplayRect.Height <= 0 Then Return + 'If spMain.Count = 0 Then Return + 'Dim currentContext As BufferedGraphicsContext = BufferedGraphicsManager.Current + Dim e1 As BufferedGraphics = GetBuffer(xIndex, DisplayRect) + e1.Graphics.FillRectangle(vo.Bg, DisplayRect) + + Dim xTHeight As Integer = spMain(xIndex).Height + Dim xTWidth As Integer = spMain(xIndex).Width + Dim xPanelHScroll As Integer = PanelHScroll(xIndex) ' Stick with integer instead of long since you will never scroll there + Dim xPanelDisplacement As Integer = CInt(PanelVScroll(xIndex)) ' Stick with integer instead of long since you will never scroll there + Dim xVSR As Integer = CInt(-PanelVScroll(xIndex)) + Dim xVSu As Integer = CInt(IIf(xVSR + xTHeight / gxHeight > GetMaxVPosition(), GetMaxVPosition(), xVSR + xTHeight / gxHeight)) + + 'e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias + Dim xI1 As Integer + + 'Bg color + DrawBackgroundColor(e1, xTHeight, xTWidth, xPanelHScroll, xI1) + + ' Determine current mode: PMS, DP or SP + If GetColumn(5).Width = 0 Then + gXKeyMode = "PMS" + gXKeyCol = {niA2, niA3, niA4, niA5, niA6, niD2, niD3, niD4, niD5} + If CHPlayer.SelectedIndex = 0 Then CHPlayer.SelectedIndex = 2 + POBFlip.Visible = False + ElseIf CHPlayer.SelectedIndex <> 0 Then + gXKeyMode = "DP" + gXKeyCol = {niA1, niA2, niA3, niA4, niA5, niA6, niA7, niA8, niD1, niD2, niD3, niD4, niD5, niD6, niD7, niD8} + POBFlip.Visible = True + Else + gXKeyMode = "SP" + gXKeyCol = {niA1, niA2, niA3, niA4, niA5, niA6, niA7, niA8} + POBFlip.Visible = False + End If + + xI1 = DrawPanelLines(e1, xTHeight, xTWidth, xPanelHScroll, xPanelDisplacement, xVSu) + + 'Column Caption + xI1 = DrawColumnCaptions(e1, xTWidth, xPanelHScroll, xI1) + + 'WaveForm + DrawWaveform(e1, xTHeight, xPanelHScroll, xVSR) + + If TimerPreviewNote.Enabled Then DrawPlayLines(e1, xTHeight, xTWidth, xPanelHScroll, xPanelDisplacement) + + 'K + 'If Not K Is Nothing Then + DrawNotes(e1, xTHeight, xPanelHScroll, xPanelDisplacement) + + ' Draw waveform on notes + If ShowWaveform Then DrawWaveformNotes(e1, xTHeight, xPanelHScroll, xVSR) + + 'End If + + 'Selection Box + DrawSelectionBox(xIndex, e1) + + 'Mouse Over + If TBSelect.Checked AndAlso Not KMouseOver = -1 AndAlso KMouseOver <= UBound(Notes) Then + DrawMouseOver(e1, xTHeight, xPanelHScroll, xPanelDisplacement) + End If + + If ShouldDrawTempNote AndAlso (SelectedColumn > -1 And TempVPosition > -1) Then + DrawTempNote(e1, xTHeight, xPanelHScroll, xPanelDisplacement) + End If + + 'Time Selection + If TBTimeSelect.Checked Then + DrawTimeSelection(e1, xTHeight, xTWidth, xPanelHScroll, xPanelDisplacement) + End If + + 'Middle button: CLick and Scroll + If MiddleButtonClicked Then + e1 = DrawClickAndScroll(xIndex, e1) + End If + + 'Drag/Drop + DrawDragAndDrop(xIndex, e1) + + e1.Render(spMain(xIndex).CreateGraphics) + 'e1.Dispose() + End Sub + + Private Sub DrawTempNote(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVS As Integer) + Dim xText As String + + If IsColumnNumeric(SelectedColumn) Then + xText = GetColumn(SelectedColumn).Title + + ElseIf IsColumnSound(SelectedColumn) Then + Dim xValue = LWAV.SelectedIndex + 1 + If ShowFileName AndAlso hWAV(xValue) <> "" Then + xText = Path.GetFileNameWithoutExtension(hWAV(xValue)) + Else + xText = C10to36(xValue) + End If + + Else + Dim xValue = LBMP.SelectedIndex + 1 + If ShowFileName AndAlso hBMP(xValue) <> "" Then + xText = Path.GetFileNameWithoutExtension(hBMP(xValue)) + Else + xText = C10to36(xValue) + End If + + End If + + Dim xAlpha As Single = 1.0F + If ModifierHiddenActive() Then + xAlpha = vo.kOpacity + End If + + Dim xPen As Pen + Dim xBrush As Drawing2D.LinearGradientBrush + Dim xBrush2 As SolidBrush + Dim point1 As New Point(HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS), + NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight - 10) + Dim point2 As New Point(HorizontalPositiontoDisplay(nLeft(SelectedColumn) + GetColumnWidth(SelectedColumn), xHS), + NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) + 10) + + Dim bright As Color + Dim dark As Color + If NTInput Or Not ModifierLongNoteActive() Then + xPen = New Pen(GetColumn(SelectedColumn).getBright(xAlpha)) + bright = GetColumn(SelectedColumn).getBright(xAlpha) + dark = GetColumn(SelectedColumn).getDark(xAlpha) + + xBrush2 = New SolidBrush(GetColumn(SelectedColumn).cText) + Else + xPen = New Pen(GetColumn(SelectedColumn).getLongBright(xAlpha)) + bright = GetColumn(SelectedColumn).getLongBright(xAlpha) + dark = GetColumn(SelectedColumn).getLongDark(xAlpha) + + xBrush2 = New SolidBrush(GetColumn(SelectedColumn).cLText) + End If + + ' Temp landmine + If ModifierLandmineActive() Then + bright = Color.Red + dark = Color.Red + End If + + xBrush = New Drawing2D.LinearGradientBrush(point1, point2, bright, dark) + + e1.Graphics.FillRectangle(xBrush, HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS) + 2, + NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight + 1, + GetColumnWidth(SelectedColumn) * gxWidth - 3, + vo.kHeight - 1) + e1.Graphics.DrawRectangle(xPen, + HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS) + 1, + NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight, + GetColumnWidth(SelectedColumn) * gxWidth - 2, + vo.kHeight) + + e1.Graphics.DrawString(xText, vo.kFont, xBrush2, + HorizontalPositiontoDisplay(nLeft(SelectedColumn), xHS) + vo.kLabelHShiftL - 2, + NoteRowToPanelHeight(TempVPosition, xVS, xTHeight) - vo.kHeight + vo.kLabelVShift) + End Sub + + Private Sub DrawDragAndDrop(xIndex As Integer, e1 As BufferedGraphics) + If UBound(DDFileName) > -1 Then + 'Dim xFont As New Font("Cambria", 12) + Dim xBrush As New SolidBrush(Color.FromArgb(&HC0FFFFFF)) + Dim xCenterX As Single = CSng(spMain(xIndex).DisplayRectangle.Width / 2) + Dim xCenterY As Single = CSng(spMain(xIndex).DisplayRectangle.Height / 2) + Dim xFormat As New System.Drawing.StringFormat + xFormat.Alignment = StringAlignment.Center + xFormat.LineAlignment = StringAlignment.Center + e1.Graphics.DrawString(Join(DDFileName, vbCrLf), Me.Font, xBrush, spMain(xIndex).DisplayRectangle, xFormat) + End If + End Sub + + Private Sub DrawSelectionBox(xIndex As Integer, e1 As BufferedGraphics) + If TBSelect.Checked AndAlso xIndex = PanelFocus AndAlso Not (pMouseMove = New Point(-1, -1) Or LastMouseDownLocation = New Point(-1, -1)) Then + TimerRefreshPanel.Enabled = True + e1.Graphics.DrawRectangle(vo.SelBox, CSng(IIf(pMouseMove.X > LastMouseDownLocation.X, LastMouseDownLocation.X, pMouseMove.X)), + CSng(IIf(pMouseMove.Y > LastMouseDownLocation.Y, LastMouseDownLocation.Y, pMouseMove.Y)), + Math.Abs(pMouseMove.X - LastMouseDownLocation.X), Math.Abs(pMouseMove.Y - LastMouseDownLocation.Y)) + Else + TimerRefreshPanel.Enabled = False + End If + End Sub + + Function GetColumnHighlightColor(col As Color, Optional factor As Double = 2.0) As Color + Dim clamp = Function(x As Double) CInt(IIf(x > 255, 255, x)) + Return Color.FromArgb( + clamp(col.A * factor), + clamp(col.R * factor), + clamp(col.G * factor), + clamp(col.B * factor)) + End Function + + Private Sub DrawBackgroundColor(e1 As BufferedGraphics, xTHeight As Integer, xTWidth As Integer, xHS As Integer, xI1 As Integer) + If gShowBG Then + For xI1 = 0 To gColumns + If nLeft(xI1 + 1) * gxWidth - xHS * gxWidth + 1 < 0 Then Continue For + If nLeft(xI1) * gxWidth - xHS * gxWidth + 1 > xTWidth Then Exit For + If Not GetColumn(xI1).cBG.GetBrightness = 0 And GetColumnWidth(xI1) > 0 Then + Dim col = GetColumn(xI1).cBG + If xI1 = GetColumnAtX(MouseMoveStatus.X, xHS) Then + Dim bf = 1.2 + col = GetColumnHighlightColor(col) + End If + Dim brush = New SolidBrush(col) + + e1.Graphics.FillRectangle(brush, + nLeft(xI1) * gxWidth - xHS * gxWidth + 1, + 0, + GetColumnWidth(xI1) * gxWidth, + xTHeight) + End If + Next + End If + End Sub + + Private Function DrawColumnCaptions(e1 As BufferedGraphics, xTWidth As Integer, xHS As Integer, xI1 As Integer) As Integer + If gShowC Then + For xI1 = 0 To gColumns + If nLeft(xI1 + 1) * gxWidth - xHS * gxWidth + 1 < 0 Then Continue For + If nLeft(xI1) * gxWidth - xHS * gxWidth + 1 > xTWidth Then Exit For + If GetColumnWidth(xI1) > 0 Then e1.Graphics.DrawString(nTitle(xI1), vo.ColumnTitleFont, vo.ColumnTitle, nLeft(xI1) * gxWidth - xHS * gxWidth, 0) + Next + End If + + Return xI1 + End Function + + Private Function DrawPanelLines(e1 As BufferedGraphics, + xTHeight As Integer, xTWidth As Integer, + xHS As Integer, xVS As Integer, + xVSu As Integer) As Integer + 'Vertical line + If gShowVerticalLine Then + For xI1 = 0 To gColumns + Dim xpos = nLeft(xI1) * gxWidth - xHS * gxWidth + If xpos + 1 < 0 Then Continue For + If xpos + 1 > xTWidth Then Exit For + If GetColumnWidth(xI1) > 0 Then e1.Graphics.DrawLine(vo.pVLine, + xpos, 0, + xpos, xTHeight) + Next + End If + + 'Grid, Sub, Measure + Dim Measure As Integer + For Measure = MeasureAtDisplacement(-xVS) To MeasureAtDisplacement(xVSu) + 'grid + If gShowGrid Then DrawGridLines(e1, + xTHeight, xTWidth, + xVS, Measure, + gDivide, vo.pGrid) + + 'sub + If gShowSubGrid Then DrawGridLines(e1, + xTHeight, xTWidth, + xVS, Measure, + gSub, vo.pSub) + + + 'measure and measurebar + Dim xCurr = MeasureBottom(Measure) + Dim Height = NoteRowToPanelHeight(xCurr, xVS, xTHeight) + If gShowMeasureBar Then e1.Graphics.DrawLine(vo.pMLine, 0, Height, + xTWidth, Height) + If gShowMeasureNumber Then e1.Graphics.DrawString("[" & Add3Zeros(Measure).ToString & "]", vo.kMFont, + New SolidBrush(GetColumn(0).cText), -xHS * gxWidth, + Height - vo.kMFont.Height) + Next + + Dim vpos = GetMouseVPosition(gSnap) + Dim mouseLineHeight = NoteRowToPanelHeight(vpos, xVS, xTHeight) + Dim p = New Pen(Color.White) + e1.Graphics.DrawLine(p, 0, mouseLineHeight, xTWidth, mouseLineHeight) + + Return Measure + End Function + + Private Sub DrawGridLines(e1 As BufferedGraphics, + xTHeight As Integer, xTWidth As Integer, + xVS As Integer, measureIndex As Integer, + divisions As Integer, pen As Pen) + Dim Line = 0 + Dim xUpper As Double = MeasureUpper(measureIndex) + Dim xCurr = MeasureBottom(measureIndex) + Dim xDiff = 192 / divisions + Do While xCurr < xUpper + Dim Height = NoteRowToPanelHeight(xCurr, xVS, xTHeight) + e1.Graphics.DrawLine(pen, 0, Height, + xTWidth, Height) + Line += 1 + xCurr = MeasureBottom(measureIndex) + Line * xDiff + Loop + End Sub + + Private Function IsNoteVisible(note As Note, xTHeight As Integer, xVS As Integer) As Boolean + Dim xUpperBorder As Single = Math.Abs(xVS) + xTHeight / gxHeight + Dim xLowerBorder As Single = Math.Abs(xVS) - vo.kHeight / gxHeight + + Dim AboveLower = note.VPosition >= xLowerBorder + Dim HeadBelow = note.VPosition <= xLowerBorder + Dim TailAbove = note.VPosition + note.Length >= xLowerBorder + Dim IntersectsNT = HeadBelow And TailAbove + Dim Intersecs = (note.VPosition <= xLowerBorder And Notes(note.LNPair).VPosition >= xLowerBorder) + Dim AboveUpper = note.VPosition > xUpperBorder + + Dim NoteInside = (Not AboveUpper) And AboveLower + + Return NoteInside OrElse IntersectsNT OrElse IntersectsNT + End Function + + Private Function IsNoteVisible(noteindex As Integer, xTHeight As Integer, xVS As Integer) As Boolean + Return IsNoteVisible(Notes(noteindex), xTHeight, xVS) + End Function + + Private Sub DrawNotes(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVS As Integer) + Dim xI1 As Integer + Dim xUpperBorder As Single = Math.Abs(xVS) + xTHeight / gxHeight + Dim xLowerBorder As Single = Math.Abs(xVS) - vo.kHeight / gxHeight + + For xI1 = 0 To UBound(Notes) + If Notes(xI1).VPosition > xUpperBorder Then LastNoteToDraw = xI1 - 1 : Exit For + If Not IsNoteVisible(xI1, xTHeight, xVS) Then Continue For + If NTInput Then + DrawNoteNT(Notes(xI1), e1, xHS, xVS, xTHeight) + Else + DrawNote(Notes(xI1), e1, xHS, xVS, xTHeight) + End If + Next + End Sub + + Private Function GetNoteRectangle(note As Note, xTHeight As Integer, xHS As Integer, xVS As Integer) As Rectangle + Dim xDispX As Integer = HorizontalPositiontoDisplay(nLeft(note.ColumnIndex), xHS) + + Dim xDispY As Integer = CInt(IIf(Not NTInput Or (bAdjustLength And Not bAdjustUpper), + NoteRowToPanelHeight(note.VPosition, xVS, xTHeight) - vo.kHeight - 1, + NoteRowToPanelHeight(note.VPosition + + note.Length, xVS, xTHeight) - + vo.kHeight - 1)) + + Dim xDispW As Integer = CInt(GetColumnWidth(note.ColumnIndex) * gxWidth + 1) + Dim xDispH As Integer = CInt(IIf(Not NTInput Or bAdjustLength, + vo.kHeight + 3, + note.Length * gxHeight + vo.kHeight + 3)) + + Return New Rectangle(xDispX, xDispY, xDispW, xDispH) + End Function + + Private Function GetNoteRectangle(noteIndex As Integer, xTHeight As Integer, xHS As Integer, xVS As Integer) As Rectangle + Return GetNoteRectangle(Notes(noteIndex), xTHeight, xHS, xVS) + End Function + + + Private Sub DrawMouseOver(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVS As Integer) + If NTInput Then + If Not bAdjustLength Then DrawNoteNT(Notes(KMouseOver), e1, xHS, xVS, xTHeight) + Else + DrawNote(Notes(KMouseOver), e1, xHS, xVS, xTHeight) + End If + + Dim rect = GetNoteRectangle(KMouseOver, xTHeight, xHS, xVS) + Dim pen = CType(IIf(bAdjustLength, vo.kMouseOverE, vo.kMouseOver), Pen) + e1.Graphics.DrawRectangle(pen, rect.X, rect.Y, rect.Width - 1, rect.Height - 1) + + If ModifierMultiselectVisibleActive() Or ModifierMultiselectNoteActive() Then + For Each note In Notes + If IsNoteVisible(note, xTHeight, xVS) AndAlso IsLabelMatch(note, KMouseOver) Then + Dim nrect = GetNoteRectangle(note, xTHeight, xHS, xVS) + e1.Graphics.DrawRectangle(pen, nrect.X, nrect.Y, nrect.Width - 1, nrect.Height - 1) + End If + Next + End If + + End Sub + + Private Sub DrawTimeSelection(e1 As BufferedGraphics, xTHeight As Integer, xTWidth As Integer, xHS As Integer, xVS As Integer) + Dim xI1 As Integer + Dim xBPMStart = Notes(0).Value + Dim xBPMHalf = Notes(0).Value + Dim xBPMEnd = Notes(0).Value + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).ColumnIndex = niBPM Then + If Notes(xI1).VPosition <= vSelStart Then xBPMStart = Notes(xI1).Value + If Notes(xI1).VPosition <= vSelStart + vSelHalf Then xBPMHalf = Notes(xI1).Value + If Notes(xI1).VPosition <= vSelStart + vSelLength Then xBPMEnd = Notes(xI1).Value + End If + If Notes(xI1).VPosition > vSelStart + vSelLength Then Exit For + Next + + 'Selection area + e1.Graphics.FillRectangle(vo.PESel, + 0, + NoteRowToPanelHeight(vSelStart + CDbl(IIf(vSelLength > 0, vSelLength, 0)), xVS, xTHeight) + Math.Abs(CInt(vSelLength <> 0)), + xTWidth, + CInt(Math.Abs(vSelLength) * gxHeight)) + 'End Cursor + e1.Graphics.DrawLine(vo.PECursor, + 0, + NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight), + xTWidth, + NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight)) + 'Half Cursor + e1.Graphics.DrawLine(vo.PEHalf, + 0, + NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight), + xTWidth, + NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight)) + 'Start BPM + e1.Graphics.DrawString((xBPMStart / 10000).ToString(), + vo.PEBPMFont, vo.PEBPM, + (-xHS + nLeft(niBPM)) * gxWidth, + NoteRowToPanelHeight(vSelStart, xVS, xTHeight) - vo.PEBPMFont.Height + 3) + 'Half BPM + e1.Graphics.DrawString((xBPMHalf / 10000).ToString(), + vo.PEBPMFont, vo.PEBPM, + (-xHS + nLeft(niBPM)) * gxWidth, + NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight) - vo.PEBPMFont.Height + 3) + 'End BPM + e1.Graphics.DrawString((xBPMEnd / 10000).ToString(), + vo.PEBPMFont, vo.PEBPM, + (-xHS + nLeft(niBPM)) * gxWidth, + NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight) - vo.PEBPMFont.Height + 3) + + 'SelLine + If vSelMouseOverLine = 1 Then 'Start Cursor + e1.Graphics.DrawRectangle(vo.PEMouseOver, + 0, NoteRowToPanelHeight(vSelStart, xVS, xTHeight) - 1, + xTWidth - 1, 2) + ElseIf vSelMouseOverLine = 2 Then 'Half Cursor + e1.Graphics.DrawRectangle(vo.PEMouseOver, + 0, NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xTHeight) - 1, + xTWidth - 1, 2) + ElseIf vSelMouseOverLine = 3 Then 'End Cursor + e1.Graphics.DrawRectangle(vo.PEMouseOver, + 0, NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xTHeight) - 1, + xTWidth - 1, 2) + End If + End Sub + + Private Function DrawClickAndScroll(xIndex As Integer, e1 As BufferedGraphics) As BufferedGraphics + Dim xDeltaLocation As Point = spMain(xIndex).PointToScreen(New Point(0, 0)) + + Dim xInitX As Single = MiddleButtonLocation.X - xDeltaLocation.X + Dim xInitY As Single = MiddleButtonLocation.Y - xDeltaLocation.Y + Dim xCurrX As Single = Cursor.Position.X - xDeltaLocation.X + Dim xCurrY As Single = Cursor.Position.Y - xDeltaLocation.Y + Dim xAngle As Double = Math.Atan2(xCurrY - xInitY, xCurrX - xInitX) + e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality + + If Not (xInitX = xCurrX And xInitY = xCurrY) Then + Dim xPointx() As PointF = {New PointF(xCurrX, xCurrY), + New PointF(CSng(Math.Cos(xAngle + Math.PI / 2) * 10 + xInitX), CSng(Math.Sin(xAngle + Math.PI / 2) * 10 + xInitY)), + New PointF(CSng(Math.Cos(xAngle - Math.PI / 2) * 10 + xInitX), CSng(Math.Sin(xAngle - Math.PI / 2) * 10 + xInitY))} + e1.Graphics.FillPolygon(New Drawing2D.LinearGradientBrush(New PointF(xInitX, xInitY), New PointF(xCurrX, xCurrY), Color.FromArgb(0), Color.FromArgb(-1)), xPointx) + End If + + e1.Graphics.FillEllipse(Brushes.LightGray, xInitX - 10, xInitY - 10, 20, 20) + e1.Graphics.DrawEllipse(Pens.Black, xInitX - 8, xInitY - 8, 16, 16) + + e1.Graphics.SmoothingMode = Drawing2D.SmoothingMode.Default + Return e1 + End Function + + Private Sub DrawWaveform(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVSR As Integer, Optional xINote As Integer = -1) + Dim xwWavL() As Single + Dim xwWavR() As Single + Dim xwSampleRate As Integer + Dim xwPosition As Double + Dim xwLeft As Integer + If xINote = -1 Then + xwWavL = wWavL + xwWavR = wWavR + xwSampleRate = wSampleRate + xwPosition = wPosition + xwLeft = wLeft + Else + Dim xINoteValue As Integer = CInt(Notes(xINote).Value / 10000) + Dim xnLeft As Integer = nLeft(Notes(xINote).ColumnIndex) + Dim xColumnWidth As Integer = GetColumnWidth(Notes(xINote).ColumnIndex) + + xwWavL = wLWAV(xINoteValue).WavL + xwWavR = wLWAV(xINoteValue).WavR + xwSampleRate = wLWAV(xINoteValue).SampleRate + xwPosition = Notes(xINote).VPosition + xwLeft = CInt((HorizontalPositiontoDisplay(xnLeft, xHS) + HorizontalPositiontoDisplay(xnLeft + xColumnWidth, xHS)) / 2) + End If + + If xwWavL IsNot Nothing And xwWavR IsNot Nothing And wPrecision > 0 Then + If wLock AndAlso xINote = -1 Then + For xI0 As Integer = 1 To UBound(Notes) + If Notes(xI0).ColumnIndex >= niB Then wPosition = Notes(xI0).VPosition : Exit For + Next + End If + + Dim xPtsL(CInt(xTHeight * wPrecision)) As PointF + Dim xPtsR(CInt(xTHeight * wPrecision)) As PointF + + Dim xD1 As Double + + Dim bVPosition() As Double = {xwPosition} + Dim bBPM() As Decimal = {CDec(Notes(0).Value / 10000)} + Dim bWavDataIndex() As Decimal = {0} + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).ColumnIndex = niBPM Then + If Notes(xI1).VPosition >= xwPosition Then + ReDim Preserve bVPosition(UBound(bVPosition) + 1) + ReDim Preserve bBPM(UBound(bBPM) + 1) + ReDim Preserve bWavDataIndex(UBound(bWavDataIndex) + 1) + bVPosition(UBound(bVPosition)) = Notes(xI1).VPosition + bBPM(UBound(bBPM)) = CDec(Notes(xI1).Value / 10000) + bWavDataIndex(UBound(bWavDataIndex)) = CDec((Notes(xI1).VPosition - bVPosition(UBound(bVPosition) - 1)) * 1.25 * xwSampleRate / bBPM(UBound(bBPM) - 1) + bWavDataIndex(UBound(bWavDataIndex) - 1)) + Else + bBPM(0) = CDec(Notes(xI1).Value / 10000) + End If + End If + Next + + Dim xI2 As Integer + Dim xI3 As Double + Dim xIPts As Integer = -1 + + For xI1 = xTHeight * wPrecision To 0 Step -1 + xI3 = (-xI1 / wPrecision + xTHeight + xVSR * gxHeight - 1) / gxHeight ' Upper bound? + For xI2 = 1 To UBound(bVPosition) + If bVPosition(xI2) >= xI3 Then Exit For + Next + xI2 -= 1 + xD1 = bWavDataIndex(xI2) + (xI3 - bVPosition(xI2)) * 1.25 * xwSampleRate / bBPM(xI2) + + If xD1 <= UBound(xwWavL) AndAlso xD1 >= 0 Then + xIPts += 1 + xPtsL(xIPts) = New PointF(xwWavL(CInt(xD1)) * wWidth + xwLeft, CSng(xI1 / wPrecision)) + xPtsR(xIPts) = New PointF(xwWavR(CInt(xD1)) * wWidth + xwLeft, CSng(xI1 / wPrecision)) + End If + Next + ReDim Preserve xPtsL(xIPts) + ReDim Preserve xPtsR(xIPts) + If xPtsL.Length <= 1 Or xPtsR.Length <= 1 Then Exit Sub + e1.Graphics.DrawLines(vo.pBGMWav, xPtsL) + e1.Graphics.DrawLines(vo.pBGMWav, xPtsR) + End If + End Sub + + ''' + ''' Draws waveforms on notes based on their value. + ''' + + Private Sub DrawWaveformNotes(e1 As BufferedGraphics, xTHeight As Integer, xHS As Integer, xVSR As Integer) + ' Turns out I don't know how to optimize it + If IsNothing(NoteWVPosEnd) OrElse Notes.Length = 1 Then Exit Sub + + For xINote = 1 To UBound(NoteWVPosEnd) + If Not IsColumnSound(Notes(xINote).ColumnIndex) OrElse NoteWVPosEnd(xINote) < -PanelVScroll(PanelFocus) Then Continue For + If -PanelVScroll(PanelFocus) + spMain(PanelFocus).Height / gxHeight < Notes(xINote).VPosition Then Exit For + + If Not Notes(xINote).Comment Then ' Note is not comment + DrawWaveform(e1, xTHeight, xHS, xVSR, xINote) + End If + Next + + ' Naive method + ' For xINote = 1 To UBound(Notes) + ' If -PanelVScroll(PanelFocus) + spMain(PanelFocus).Height / gxHeight < Notes(xINote).VPosition Then Exit For ' if note is higher than window + ' If Not IsColumnSound(Notes(xINote).ColumnIndex) Then Continue For + ' + ' If Not Notes(xINote).Comment Then ' Note is not comment + ' DrawWaveform(e1, xTHeight, xHS, xVSR, xINote) + ' End If + ' Next + End Sub + + ''' + ''' Draw a note in a buffer. + ''' + ''' Note to be drawn. + ''' Buffer. + ''' HS.Value. + ''' VS.Value. + ''' Display height of the panel. (not ClipRectangle.Height) + + Private Sub DrawNote(ByVal sNote As Note, ByVal e As BufferedGraphics, ByVal xHS As Integer, ByVal xVS As Integer, ByVal xHeight As Integer) ', Optional ByVal CheckError As Boolean = True) ', Optional ByVal ConnectToIndex As Long = 0) + If Not nEnabled(sNote.ColumnIndex) Then Exit Sub + Dim xAlpha As Single = 1.0F + If sNote.Hidden Then xAlpha = vo.kOpacity + If sNote.Ghost Then xAlpha *= 0.1F + + Dim xLabel As String = GetNoteLabel(sNote) + + Dim xPen As Pen + Dim xBrush As Drawing2D.LinearGradientBrush + Dim xBrush2 As SolidBrush + + Dim bright As Color + Dim dark As Color + Dim xnLeft = nLeft(sNote.ColumnIndex) + Dim xColumnWidth As Integer = GetColumnWidth(sNote.ColumnIndex) + If sNote.Comment Then + For i = 1 To 4 + xColumnWidth += GetColumnWidth(sNote.ColumnIndex + i) + Next + End If + + Dim p1 = New Point(HorizontalPositiontoDisplay(xnLeft, xHS), + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight - 10) + Dim p2 = New Point(HorizontalPositiontoDisplay(xnLeft + xColumnWidth, xHS), + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) + 10) + + ' Color override + GetColor(sNote, bright, dark, xAlpha) + + If Not sNote.LongNote Then + xPen = New Pen(GetColumn(sNote.ColumnIndex).getBright(xAlpha)) + + xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cText) + Else + xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cLText) + End If + + xPen = New Pen(bright) + xBrush = New Drawing2D.LinearGradientBrush(p1, p2, bright, dark) + + ' Fill + e.Graphics.FillRectangle(xBrush, HorizontalPositiontoDisplay(xnLeft, xHS) + 2, + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight + 1, + xColumnWidth * gxWidth - 3, + vo.kHeight - 1) + ' Outline + e.Graphics.DrawRectangle(xPen, + HorizontalPositiontoDisplay(xnLeft, xHS) + 1, + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight, + xColumnWidth * gxWidth - 2, + vo.kHeight) + + ' Label + e.Graphics.DrawString(xLabel, + vo.kFont, xBrush2, + HorizontalPositiontoDisplay(xnLeft, xHS) + vo.kLabelHShift, + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight + vo.kLabelVShift - CInt(IIf(sNote.Comment, CInt(sNote.Length * gxHeight), 0))) + + If sNote.ColumnIndex < niB Then + If sNote.LNPair <> 0 Then + DrawPairedLNBody(sNote, e, xHS, xVS, xHeight, xAlpha) + End If + End If + + + 'e.Graphics.DrawString(sNote.TimeOffset.ToString("0.##"), New Font("Verdana", 9), Brushes.Cyan, _ + ' New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex + 1), xHS), VerticalPositiontoDisplay(sNote.VPosition, xVS, xHeight) - vo.kHeight - 2)) + + If ErrorCheck AndAlso sNote.HasError Then + Dim ErrorGraphics As Bitmap + Select Case sNote.ErrorType + Case 1 + ErrorGraphics = My.Resources.ImageErrorR + Case Else + ErrorGraphics = My.Resources.ImageError + End Select + + e.Graphics.DrawImage(ErrorGraphics, + CInt(HorizontalPositiontoDisplay(CInt(xnLeft + xColumnWidth / 2), xHS) - 12), + CInt(NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight / 2 - 12), + 24, 24) + End If + + If sNote.Selected Then e.Graphics.DrawRectangle(vo.kSelected, HorizontalPositiontoDisplay(xnLeft, xHS), NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight - 1, xColumnWidth * gxWidth, vo.kHeight + 2) + + End Sub + + Private Sub DrawPairedLNBody(sNote As Note, e As BufferedGraphics, xHS As Integer, xVS As Integer, xHeight As Integer, xAlpha As Single) + Dim xnLeft = nLeft(sNote.ColumnIndex) + Dim xColumnWidth = GetColumnWidth(sNote.ColumnIndex) + Dim xPen2 As New Pen(GetColumn(sNote.ColumnIndex).getLongBright(xAlpha)) + Dim xBrush3 As New Drawing2D.LinearGradientBrush( + New Point(HorizontalPositiontoDisplay(CInt(xnLeft - 0.5 * xColumnWidth), xHS), + NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight)), + New Point(HorizontalPositiontoDisplay(CInt(xnLeft + 1.5 * xColumnWidth), xHS), + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) + vo.kHeight), + GetColumn(sNote.ColumnIndex).getLongBright(xAlpha), + GetColumn(sNote.ColumnIndex).getLongDark(xAlpha)) + + Dim xX As Single = HorizontalPositiontoDisplay(nLeft(Notes(sNote.LNPair).ColumnIndex), xHS) + Dim xWidth As Single = GetColumnWidth(Notes(sNote.LNPair).ColumnIndex) * gxWidth + If sNote.Comment Then + For i = 1 To 4 + xWidth += GetColumnWidth(Notes(sNote.LNPair).ColumnIndex + i) * gxWidth + Next + End If + e.Graphics.FillRectangle(xBrush3, xX + 3, NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight) + 1, + xWidth - 5, NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight) - vo.kHeight - 1) + e.Graphics.DrawRectangle(xPen2, xX + 2, NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight), + xWidth - 4, NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - NoteRowToPanelHeight(Notes(sNote.LNPair).VPosition, xVS, xHeight) - vo.kHeight) + End Sub + + ''' + ''' Draw a note in a buffer under NT mode. + ''' + ''' Note to be drawn. + ''' Buffer. + ''' HS.Value. + ''' VS.Value. + ''' Display height of the panel. (not ClipRectangle.Height) + + Private Sub DrawNoteNT(ByVal sNote As Note, ByVal e As BufferedGraphics, ByVal xHS As Integer, ByVal xVS As Integer, ByVal xHeight As Integer) ', Optional ByVal CheckError As Boolean = True) + If Not nEnabled(sNote.ColumnIndex) Then Exit Sub + Dim xAlpha As Single = 1.0F + If sNote.Hidden Then xAlpha = vo.kOpacity + If sNote.Ghost Then xAlpha *= 0.1F + + Dim xLabel As String = GetNoteLabel(sNote) + + Dim xPen1 As Pen + Dim xBrush As Drawing2D.LinearGradientBrush + Dim xBrush2 As SolidBrush + + Dim p1 As Point + Dim p2 As Point + Dim bright As Color + Dim dark As Color + + Dim xnLeft = nLeft(sNote.ColumnIndex) + Dim xColumnWidth As Integer = GetColumnWidth(sNote.ColumnIndex) + If sNote.Comment Then + For i = 1 To 4 + xColumnWidth += GetColumnWidth(sNote.ColumnIndex + i) + Next + End If + + ' Get Color + Color override + GetColor(sNote, bright, dark, xAlpha) + + If sNote.Length = 0 Then + p1 = New Point(HorizontalPositiontoDisplay(xnLeft, xHS), + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight - 10) + p2 = New Point(HorizontalPositiontoDisplay(xnLeft + xColumnWidth, xHS), + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) + 10) + + xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cText) + Else + p1 = New Point(HorizontalPositiontoDisplay(CInt(xnLeft - 0.5 * xColumnWidth), xHS), + NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight) + p2 = New Point(HorizontalPositiontoDisplay(CInt(xnLeft + 1.5 * xColumnWidth), xHS), + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight)) + + xBrush2 = New SolidBrush(GetColumn(sNote.ColumnIndex).cLText) + End If + + xPen1 = New Pen(bright) + xBrush = New Drawing2D.LinearGradientBrush(p1, p2, bright, dark) + + ' Note gradient + e.Graphics.FillRectangle(xBrush, + HorizontalPositiontoDisplay(xnLeft, xHS) + 1, + NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight + 1, + xColumnWidth * gxWidth - 1, + CInt(sNote.Length * gxHeight) + vo.kHeight - 1) + + ' Outline + e.Graphics.DrawRectangle(xPen1, HorizontalPositiontoDisplay(xnLeft, xHS) + 1, + NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight, + xColumnWidth * gxWidth - 3, CInt(sNote.Length * gxHeight) + vo.kHeight) + + ' Note B36 + e.Graphics.DrawString(xLabel, + vo.kFont, xBrush2, + HorizontalPositiontoDisplay(xnLeft, xHS) + vo.kLabelHShiftL - 2, + NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight + vo.kLabelVShift - CInt(IIf(sNote.Comment, CInt(sNote.Length * gxHeight), 0))) + + ' Draw paired body + If sNote.ColumnIndex < niB Then + If sNote.Length = 0 And sNote.LNPair <> 0 Then + DrawPairedLNBody(sNote, e, xHS, xVS, xHeight, xAlpha) + End If + End If + + + ' Select Box + If sNote.Selected Then + e.Graphics.DrawRectangle(vo.kSelected, + HorizontalPositiontoDisplay(xnLeft, xHS), + NoteRowToPanelHeight(sNote.VPosition + sNote.Length, xVS, xHeight) - vo.kHeight - 1, + xColumnWidth * gxWidth, + CInt(sNote.Length * gxHeight) + vo.kHeight + 2) + End If + + ' Errors + If ErrorCheck AndAlso sNote.HasError Then + Dim ErrorGraphics As Bitmap + Select Case sNote.ErrorType + Case 1 + ErrorGraphics = My.Resources.ImageErrorR + Case Else + ErrorGraphics = My.Resources.ImageError + End Select + e.Graphics.DrawImage(ErrorGraphics, + CInt(HorizontalPositiontoDisplay(CInt(xnLeft + xColumnWidth / 2), xHS) - 12), + CInt(NoteRowToPanelHeight(sNote.VPosition, xVS, xHeight) - vo.kHeight / 2 - 12), + 24, 24) + End If + + 'e.Graphics.DrawString(sNote.TimeOffset.ToString("0.##"), New Font("Verdana", 9), Brushes.Cyan, _ + ' New Point(HorizontalPositiontoDisplay(nLeft(sNote.ColumnIndex + 1), xHS), VerticalPositiontoDisplay(sNote.VPosition, xVS, xHeight) - vo.kHeight - 2)) + + End Sub + + Private Sub GetColor(ByRef sNote As Note, ByRef Bright As Color, ByRef Dark As Color, ByVal xAlpha As Single) + Dim xICO = CInt(sNote.Value / 10000) + If sNote.Landmine Then + Bright = Color.Red + Dark = Color.Red + ElseIf Not IsColumnNumeric(sNote.ColumnIndex) AndAlso COverridesColors(xICO) <> Color.Empty Then + With COverridesColors(xICO) + Bright = Color.FromArgb(Convert.ToByte(Convert.ToInt32(.A) * xAlpha), .R, .G, .B) + End With + Dark = Bright + Else + Bright = GetColumn(sNote.ColumnIndex).getBright(xAlpha) + Dark = GetColumn(sNote.ColumnIndex).getDark(xAlpha) + End If + End Sub + + Private Function InterpolateColorARGB(ColorL As Color, ColorU As Color, Ratio As Double, Optional xAlpha As Single = 1) As Color + Dim A As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.A)) + (Ratio * Convert.ToInt32(ColorU.A)) + Dim R As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.R)) + (Ratio * Convert.ToInt32(ColorU.R)) + Dim G As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.G)) + (Ratio * Convert.ToInt32(ColorU.G)) + Dim B As Double = ((1 - Ratio) * Convert.ToInt32(ColorL.B)) + (Ratio * Convert.ToInt32(ColorU.B)) + Return Color.FromArgb(Convert.ToByte(A * xAlpha), Convert.ToByte(R), Convert.ToByte(G), Convert.ToByte(B)) + End Function + + Private Function InterpolateColorAHSL(ColorL As Color, ColorU As Color, Ratio As Double, Optional xAlpha As Single = 1, Optional Direction As Integer = 1) As Color + Dim HSLL = GetHSL(ColorL) + Dim HSLU = GetHSL(ColorU) + If Direction = 1 AndAlso HSLL(0) > HSLU(0) Then + HSLU(0) += 360 + ElseIf Direction = 0 AndAlso HSLL(0) < HSLU(0) Then + HSLL(0) += 360 + End If + Dim A As Double = Math.Min((1 - Ratio) * Convert.ToInt32(ColorL.A) + (Ratio * Convert.ToInt32(ColorU.A)), 255) + Dim H As Double = ((1 - Ratio) * HSLL(0) + Ratio * HSLU(0)) Mod 360 + Dim S As Double = Math.Min((1 - Ratio) * HSLL(1) + Ratio * HSLU(1), 1000) + Dim L As Double = Math.Min((1 - Ratio) * HSLL(2) + Ratio * HSLU(2), 1000) + + ' Copied from ColorPicker + Dim xxS = S / 1000 + Dim xxB = (L - 500) / 500 + Dim R As Double + Dim G As Double + Dim B As Double + + If H < 60 Then + B = -1 : R = 1 : G = (H - 30) / 30 + ElseIf H < 120 Then + B = -1 : G = 1 : R = (90 - H) / 30 + ElseIf H < 180 Then + R = -1 : G = 1 : B = (H - 150) / 30 + ElseIf H < 240 Then + R = -1 : B = 1 : G = (210 - H) / 30 + ElseIf H < 300 Then + G = -1 : B = 1 : R = (H - 270) / 30 + Else + G = -1 : R = 1 : B = (330 - H) / 30 + End If + + R = (R * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 + G = (G * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 + B = (B * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 + + Return Color.FromArgb(CInt(A * xAlpha), CInt(R), CInt(G), CInt(B)) + End Function + + Private Function GetHSL(ColorI As Color) As Integer() + Dim R As Double = CInt(ColorI.R) / 255 + Dim G As Double = CInt(ColorI.G) / 255 + Dim B As Double = CInt(ColorI.B) / 255 + Console.WriteLine("R: " & R & vbCrLf & "G: " & G & vbCrLf & "B: " & B & vbCrLf) + Dim CMin = Math.Min(Math.Min(R, G), B) + Dim CMax = Math.Max(Math.Max(R, G), B) + Dim Delta = CMax - CMin + Dim H As Double + Dim S As Double + Dim L As Double + Console.WriteLine("CMin: " & CMin & vbCrLf & "CMax: " & CMax & vbCrLf & "Delta: " & Delta & vbCrLf) + If Delta = 0 Then + H = 0 + ElseIf CMax = R Then + H = (6 + ((G - B) / Delta)) Mod 6 + ElseIf CMax = G Then + H = (B - R) / Delta + 2 + Else + H = (R - G) / Delta + 4 + End If + + H = Math.Round(H * 60) + If H < 0 Then H += 360 + + L = (CMax + CMin) / 2 + + If Delta = 0 Then S = 0 Else If L = 1 Then S = 1 Else S = Delta / (1 - Math.Abs(2 * L - 1)) + Console.WriteLine(H & vbCrLf & S & vbCrLf & L & vbCrLf) + S *= 1000 + L *= 1000 + + Return {CInt(H), CInt(S), CInt(L)} + End Function + + Private Function WordWrapConvert(ByVal s As String) As String + If s = "" Then Return "" + Return s.Replace("\n", vbCrLf) + End Function + + Private Function GetNoteLabel(ByVal sNote As Note) As String + + Dim xIC10 As Integer = CInt(sNote.Value \ 10000) + ' If note is a comment note + If sNote.Comment Then + ' If it is an LN and it is the lower note in its LN pair, display nothing + If sNote.LNPair > 0 AndAlso Notes(sNote.LNPair).VPosition > sNote.VPosition Then + GetNoteLabel = "" + Else + GetNoteLabel = WordWrapConvert(hCOM(xIC10)) + End If + ElseIf IsColumnNumeric(sNote.ColumnIndex) Then ' IIf(IsColumnNumeric(sNote.ColumnIndex) AndAlso Not sNote.Comment, sNote.Value / 10000, xLabel) + GetNoteLabel = (sNote.Value / 10000).ToString() + ElseIf ShowFileName AndAlso IsColumnSound(sNote.ColumnIndex) AndAlso hWAV(xIC10) <> "" Then + GetNoteLabel = Path.GetFileNameWithoutExtension(hWAV(xIC10)) + ElseIf ShowFileName AndAlso hBMP(xIC10) <> "" Then + GetNoteLabel = Path.GetFileNameWithoutExtension(hBMP(xIC10)) + Else + GetNoteLabel = C10to36(xIC10) + End If + End Function + + Private Sub DrawPlayLines(e1 As BufferedGraphics, xTHeight As Integer, xTHWidth As Integer, xHS As Integer, xVS As Integer) + If InternalPlayNotes Is Nothing Then Exit Sub + + Dim VPos As Double = GetVPositionFromTime(GetTimeFromVPosition(InternalPlayNotes(0).VPosition) + InternalPlayTimerCount / 1000) + Dim VPosEnd As Double = GetVPositionFromTime(GetTimeFromVPosition(InternalPlayNotes(0).VPosition) + wLWAV(CInt(InternalPlayNotes(0).Value / 10000)).Duration) + ' VPosition to Panel height + Dim xTHTime As Integer = NoteRowToPanelHeight(VPos, xVS, xTHeight) + Dim xTHTimeEnd As Integer = NoteRowToPanelHeight(VPosEnd, xVS, xTHeight) + + ' Moving play line + Dim p = New Pen(Color.SpringGreen) + e1.Graphics.DrawLine(p, 0, xTHTime, xTHWidth, xTHTime) + + ' End line + Dim p2 = New Pen(Color.Red) + e1.Graphics.DrawLine(p2, 0, xTHTimeEnd, xTHWidth, xTHTimeEnd) + + End Sub +End Class diff --git a/iBMSC/PanelEvents.vb b/iBMSC/PanelEvents.vb index 9143af50b..ae33296f4 100644 --- a/iBMSC/PanelEvents.vb +++ b/iBMSC/PanelEvents.vb @@ -1,1716 +1,2143 @@ -Imports iBMSC.Editor - -Partial Public Class MainWindow - - Private Sub PMainInPreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles PMainIn.PreviewKeyDown, PMainInL.PreviewKeyDown, PMainInR.PreviewKeyDown - If e.KeyCode = Keys.ShiftKey Or e.KeyCode = Keys.ControlKey Then - RefreshPanelAll() - POStatusRefresh() - Exit Sub - End If - - If e.KeyCode = 18 Then Exit Sub - - Dim iI As Integer = sender.Tag - Dim xI1 As Integer - Dim xTargetColumn As Integer = -1 - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - ReDim SelectedNotes(-1) - - Select Case e.KeyCode - Case Keys.Up - Dim xVPosition As Double = 192 / gDivide - If My.Computer.Keyboard.CtrlKeyDown Then xVPosition = 1 - - 'Ks cannot be beyond the upper boundary - Dim muVPosition As Double = GetMaxVPosition() - 1 - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected Then - 'K(xI1).VPosition = Math.Floor(K(xI1).VPosition / (192 / gDivide)) * 192 / gDivide - muVPosition = IIf(Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0) + xVPosition > muVPosition, - Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0) + xVPosition, - muVPosition) - End If - Next - muVPosition -= 191999 - - 'xRedo = sCmdKMs(0, xVPosition - muVPosition, True) - Dim xVPos As Double - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xVPos = Notes(xI1).VPosition + xVPosition - muVPosition - Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, xVPos, xUndo, xRedo) - Notes(xI1).VPosition = xVPos - Next - 'xUndo = sCmdKMs(0, -xVPosition + muVPosition, True) - - If xVPosition - muVPosition <> 0 Then AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - - Case Keys.Down - Dim xVPosition As Double = -192 / gDivide - If My.Computer.Keyboard.CtrlKeyDown Then xVPosition = -1 - - 'Ks cannot be beyond the lower boundary - Dim mVPosition As Double = 0 - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected Then - 'K(xI1).VPosition = Math.Ceiling(K(xI1).VPosition / (192 / gDivide)) * 192 / gDivide - mVPosition = IIf(Notes(xI1).VPosition + xVPosition < mVPosition, - Notes(xI1).VPosition + xVPosition, - mVPosition) - End If - Next - - 'xRedo = sCmdKMs(0, xVPosition - mVPosition, True) - Dim xVPos As Double - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xVPos = Notes(xI1).VPosition + xVPosition - mVPosition - Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, xVPos, xUndo, xRedo) - Notes(xI1).VPosition = xVPos - Next - 'xUndo = sCmdKMs(0, -xVPosition + mVPosition, True) - - If xVPosition - mVPosition <> 0 Then AddUndo(xUndo, xBaseRedo.Next) - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - CalculateGreatestVPosition() - RefreshPanelAll() - - Case Keys.Left - 'For xI1 = 1 To UBound(K) - ' If K(xI1).Selected Then K(xI1).ColumnIndex = RealColumnToEnabled(K(xI1).ColumnIndex) - 1 - 'Next - - 'Ks cannot be beyond the left boundary - Dim mLeft As Integer = 0 - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected Then mLeft = IIf(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) - 1 < mLeft, - ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) - 1, - mLeft) - Next - 'xRedo = sCmdKMs(-1 - mLeft, 0, True) - Dim xCol As Integer - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xCol = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) - 1 - mLeft) - Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) - Notes(xI1).ColumnIndex = xCol - Next - 'xUndo = sCmdKMs(1 + mLeft, 0, True) - - If -1 - mLeft <> 0 Then AddUndo(xUndo, xBaseRedo.Next) - UpdatePairing() - CalculateTotalPlayableNotes() - RefreshPanelAll() - - Case Keys.Right - 'xRedo = sCmdKMs(1, 0, True) - Dim xCol As Integer - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xCol = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + 1) - Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) - Notes(xI1).ColumnIndex = xCol - Next - 'xUndo = sCmdKMs(-1, 0, True) - - AddUndo(xUndo, xBaseRedo.Next) - UpdatePairing() - CalculateTotalPlayableNotes() - RefreshPanelAll() - - Case Keys.Delete - mnDelete_Click(mnDelete, New System.EventArgs) - - Case Keys.Home - If PanelFocus = 0 Then LeftPanelScroll.Value = 0 - If PanelFocus = 1 Then MainPanelScroll.Value = 0 - If PanelFocus = 2 Then RightPanelScroll.Value = 0 - - Case Keys.End - If PanelFocus = 0 Then LeftPanelScroll.Value = LeftPanelScroll.Minimum - If PanelFocus = 1 Then MainPanelScroll.Value = MainPanelScroll.Minimum - If PanelFocus = 2 Then RightPanelScroll.Value = RightPanelScroll.Minimum - - Case Keys.PageUp - If PanelFocus = 0 Then LeftPanelScroll.Value = IIf(LeftPanelScroll.Value - gPgUpDn > LeftPanelScroll.Minimum, LeftPanelScroll.Value - gPgUpDn, LeftPanelScroll.Minimum) - If PanelFocus = 1 Then MainPanelScroll.Value = IIf(MainPanelScroll.Value - gPgUpDn > MainPanelScroll.Minimum, MainPanelScroll.Value - gPgUpDn, MainPanelScroll.Minimum) - If PanelFocus = 2 Then RightPanelScroll.Value = IIf(RightPanelScroll.Value - gPgUpDn > RightPanelScroll.Minimum, RightPanelScroll.Value - gPgUpDn, RightPanelScroll.Minimum) - - Case Keys.PageDown - If PanelFocus = 0 Then LeftPanelScroll.Value = IIf(LeftPanelScroll.Value + gPgUpDn < 0, LeftPanelScroll.Value + gPgUpDn, 0) - If PanelFocus = 1 Then MainPanelScroll.Value = IIf(MainPanelScroll.Value + gPgUpDn < 0, MainPanelScroll.Value + gPgUpDn, 0) - If PanelFocus = 2 Then RightPanelScroll.Value = IIf(RightPanelScroll.Value + gPgUpDn < 0, RightPanelScroll.Value + gPgUpDn, 0) - - Case Keys.Oemcomma - If gDivide * 2 <= CGDivide.Maximum Then CGDivide.Value = gDivide * 2 - - Case Keys.OemPeriod - If gDivide \ 2 >= CGDivide.Minimum Then CGDivide.Value = gDivide \ 2 - - Case Keys.OemQuestion - 'Dim xTempSwap As Integer = gSlash - 'gSlash = CGDivide.Value - 'CGDivide.Value = xTempSwap - CGDivide.Value = gSlash - - Case Keys.Oemplus - With CGHeight - .Value += IIf(.Value > .Maximum - .Increment, .Maximum - .Value, .Increment) - End With - - Case Keys.OemMinus - With CGHeight - .Value -= IIf(.Value < .Minimum + .Increment, .Value - .Minimum, .Increment) - End With - - Case Keys.Add - IncreaseCurrentWav() - Case Keys.Subtract - DecreaseCurrentWav() - - Case Keys.G - 'az: don't trigger when we use Go To Measure - If Not My.Computer.Keyboard.CtrlKeyDown Then CGSnap.Checked = Not gSnap - - Case Keys.L - If Not My.Computer.Keyboard.CtrlKeyDown Then POBLong_Click(Nothing, Nothing) - - Case Keys.S - If Not My.Computer.Keyboard.CtrlKeyDown Then POBNormal_Click(Nothing, Nothing) - - Case Keys.D - CGDisableVertical.Checked = Not CGDisableVertical.Checked - - Case Keys.NumPad0, Keys.D0 - MoveToBGM(xUndo, xRedo) - - Case Keys.Oem1, Keys.NumPad1, Keys.D1 : MoveToColumn(niA1, xUndo, xRedo) - Case Keys.Oem2, Keys.NumPad2, Keys.D2 : MoveToColumn(niA2, xUndo, xRedo) - Case Keys.Oem3, Keys.NumPad3, Keys.D3 : MoveToColumn(niA3, xUndo, xRedo) - Case Keys.Oem4, Keys.NumPad4, Keys.D4 : MoveToColumn(niA4, xUndo, xRedo) - Case Keys.Oem5, Keys.NumPad5, Keys.D5 : MoveToColumn(niA5, xUndo, xRedo) - Case Keys.Oem6, Keys.NumPad6, Keys.D6 : MoveToColumn(niA6, xUndo, xRedo) - Case Keys.Oem7, Keys.NumPad7, Keys.D7 : MoveToColumn(niA7, xUndo, xRedo) - Case Keys.Oem8, Keys.NumPad8, Keys.D8 : MoveToColumn(niA8, xUndo, xRedo) - - End Select - - If My.Computer.Keyboard.CtrlKeyDown And (Not My.Computer.Keyboard.AltKeyDown) And (Not My.Computer.Keyboard.ShiftKeyDown) Then - Select Case e.KeyCode - Case Keys.Z : TBUndo_Click(TBUndo, New EventArgs) - Case Keys.Y : TBRedo_Click(TBRedo, New EventArgs) - Case Keys.X : TBCut_Click(TBCut, New EventArgs) - Case Keys.C : TBCopy_Click(TBCopy, New EventArgs) - Case Keys.V : TBPaste_Click(TBPaste, New EventArgs) - Case Keys.A : mnSelectAll_Click(mnSelectAll, New EventArgs) - Case Keys.F : TBFind_Click(TBFind, New EventArgs) - Case Keys.T : TBStatistics_Click(TBStatistics, New EventArgs) - End Select - End If - - If ModifierMultiselectActive() Then - If e.KeyCode = Keys.A And KMouseOver <> -1 Then - SelectAllWithHoveredNoteLabel() - End If - End If - - PMainInMouseMove(sender) - POStatusRefresh() - End Sub - - Private Sub SelectAllWithHoveredNoteLabel() - For xI1 = 0 To UBound(Notes) - Notes(xI1).Selected = IIf(IsLabelMatch(Notes(xI1), KMouseOver), True, Notes(xI1).Selected) - Next - End Sub - - Private Function IsLabelMatch(note As Note, index As Integer) As Boolean - If TBShowFileName.Checked Then - Dim wavidx = Notes(index).Value / 10000 - Dim wav = hWAV(wavidx) - If hWAV(note.Value / 10000) = wav Then - Return True - End If - Else - If note.Value = Notes(index).Value Then - Return True - End If - End If - - Return False - End Function - - Private Sub DecreaseCurrentWav() - If LWAV.SelectedIndex = -1 Then - LWAV.SelectedIndex = 0 - Else - Dim newIndex As Integer = LWAV.SelectedIndex - 1 - If newIndex < 0 Then newIndex = 0 - LWAV.SelectedIndices.Clear() - LWAV.SelectedIndex = newIndex - End If - End Sub - - Private Sub IncreaseCurrentWav() - If LWAV.SelectedIndex = -1 Then - LWAV.SelectedIndex = 0 - Else - Dim newIndex As Integer = LWAV.SelectedIndex + 1 - If newIndex > LWAV.Items.Count - 1 Then newIndex = LWAV.Items.Count - 1 - LWAV.SelectedIndices.Clear() - LWAV.SelectedIndex = newIndex - ValidateWavListView() - End If - End Sub - - Private Sub MoveToBGM(xUndo As UndoRedo.LinkedURCmd, xRedo As UndoRedo.LinkedURCmd) - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI2 As Integer = 1 To UBound(Notes) - If Not Notes(xI2).Selected Then Continue For - - With Notes(xI2) - Dim currentBGMColumn As Integer = niB - - 'TODO: optimize the for loops below - If NTInput Then - For xI0 As Integer = 1 To UBound(Notes) - Dim IntersectA = Notes(xI0).VPosition <= Notes(xI2).VPosition + Notes(xI2).Length - Dim IntersectB = Notes(xI0).VPosition + Notes(xI0).Length >= Notes(xI2).VPosition - If Notes(xI0).ColumnIndex = currentBGMColumn AndAlso IntersectA And IntersectB Then - currentBGMColumn += 1 : xI0 = 1 - End If - Next - Else - For xI0 As Integer = 1 To UBound(Notes) - If Notes(xI0).ColumnIndex = currentBGMColumn AndAlso Notes(xI0).VPosition = Notes(xI2).VPosition Then - currentBGMColumn += 1 : xI0 = 1 - End If - Next - End If - - Me.RedoMoveNote(Notes(xI2), currentBGMColumn, .VPosition, xUndo, xRedo) - .ColumnIndex = currentBGMColumn - End With - Next - AddUndo(xUndo, xBaseRedo.Next) - UpdatePairing() - CalculateTotalPlayableNotes() - RefreshPanelAll() - End Sub - - Private Sub MoveToColumn(xTargetColumn As Integer, xUndo As UndoRedo.LinkedURCmd, xRedo As UndoRedo.LinkedURCmd) - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - If xTargetColumn = -1 Then Return - If Not nEnabled(xTargetColumn) Then Return - Dim bMoveAndDeselectFirstNote = My.Computer.Keyboard.ShiftKeyDown - - For xI2 As Integer = 1 To UBound(Notes) - If Not Notes(xI2).Selected Then Continue For - - RedoMoveNote(Notes(xI2), xTargetColumn, Notes(xI2).VPosition, xUndo, xRedo) - Notes(xI2).ColumnIndex = xTargetColumn - - If bMoveAndDeselectFirstNote Then - Notes(xI2).Selected = False - PanelPreviewNoteIndex(xI2) - - ' az: Add selected notes to undo - ' to preserve selection status - ' this works because the note find - ' does not account for selection status - ' when checking equality! (equalsBMSE, equalsNT) - For xI3 As Integer = 1 To UBound(Notes) - If xI3 = xI2 Then Continue For - If Notes(xI3).Selected Then - RedoMoveNote(Notes(xI3), Notes(xI3).ColumnIndex, Notes(xI3).VPosition, xUndo, xRedo) - End If - Next - - Exit For - End If - Next - AddUndo(xUndo, xBaseRedo.Next) - UpdatePairing() - CalculateTotalPlayableNotes() - RefreshPanelAll() - End Sub - - Private Sub PMainInResize(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.Resize, PMainInL.Resize, PMainInR.Resize - If Not Me.Created Then Exit Sub - - Dim iI As Integer = sender.Tag - PanelWidth(0) = PMainL.Width - PanelWidth(1) = PMain.Width - PanelWidth(2) = PMainR.Width - - Select Case iI - Case 0 - LeftPanelScroll.LargeChange = sender.Height * 0.9 - LeftPanelScroll.Maximum = LeftPanelScroll.LargeChange - 1 - HSL.LargeChange = sender.Width / gxWidth - If HSL.Value > HSL.Maximum - HSL.LargeChange + 1 Then HSL.Value = HSL.Maximum - HSL.LargeChange + 1 - Case 1 - MainPanelScroll.LargeChange = sender.Height * 0.9 - MainPanelScroll.Maximum = MainPanelScroll.LargeChange - 1 - HS.LargeChange = sender.Width / gxWidth - If HS.Value > HS.Maximum - HS.LargeChange + 1 Then HS.Value = HS.Maximum - HS.LargeChange + 1 - Case 2 - RightPanelScroll.LargeChange = sender.Height * 0.9 - RightPanelScroll.Maximum = RightPanelScroll.LargeChange - 1 - HSR.LargeChange = sender.Width / gxWidth - If HSR.Value > HSR.Maximum - HSR.LargeChange + 1 Then HSR.Value = HSR.Maximum - HSR.LargeChange + 1 - End Select - RefreshPanel(iI, sender.DisplayRectangle) - End Sub - - Private Sub PMainInLostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.LostFocus, PMainInL.LostFocus, PMainInR.LostFocus - RefreshPanelAll() - End Sub - - Private Sub PMainInMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PMainIn.MouseDown, PMainInL.MouseDown, PMainInR.MouseDown - tempFirstMouseDown = FirstClickDisabled And Not sender.Focused - - PanelFocus = sender.Tag - sender.Focus() - LastMouseDownLocation = New Point(-1, -1) - VSValue = PanelVScroll(PanelFocus) - - If NTInput Then bAdjustUpper = False : bAdjustLength = False - Me.ctrlPressed = False : Me.DuplicatedSelectedNotes = False - - If MiddleButtonClicked Then MiddleButtonClicked = False : Exit Sub - - Dim xHS As Long = PanelHScroll(PanelFocus) - Dim xVS As Long = PanelVScroll(PanelFocus) - Dim xHeight As Integer = spMain(PanelFocus).Height - - Select Case e.Button - Case Windows.Forms.MouseButtons.Left - If tempFirstMouseDown And Not TBTimeSelect.Checked Then RefreshPanelAll() : Exit Select - - KMouseOver = -1 - 'If K Is Nothing Then pMouseDown = e.Location : Exit Select - - 'Find the clicked K - Dim NoteIndex As Integer = GetClickedNote(e, xHS, xVS, xHeight) - - PanelPreviewNoteIndex(NoteIndex) - - For xI1 = 0 To UBound(Notes) - Notes(xI1).TempMouseDown = False - Next - - HandleCurrentModeOnClick(e, xHS, xVS, xHeight, NoteIndex) - RefreshPanelAll() - POStatusRefresh() - - Case Windows.Forms.MouseButtons.Middle - If MiddleButtonMoveMethod = 1 Then - tempX = e.X - tempY = e.Y - tempV = xVS - tempH = xHS - Else - MiddleButtonLocation = Cursor.Position - MiddleButtonClicked = True - TimerMiddle.Enabled = True - End If - - Case Windows.Forms.MouseButtons.Right - DeselectOrRemove(e, xHS, xVS, xHeight) - End Select - End Sub - - Private Sub DeselectOrRemove(e As MouseEventArgs, xHS As Long, xVS As Long, xHeight As Integer) - KMouseOver = -1 - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - 'If K Is Nothing Then pMouseDown = e.Location : Exit Select - - If Not tempFirstMouseDown Then - - Dim xI1 As Integer - For xI1 = UBound(Notes) To 1 Step -1 - 'If mouse is clicking on a K - If MouseInNote(e, xHS, xVS, xHeight, Notes(xI1)) Then - - If My.Computer.Keyboard.ShiftKeyDown Then - LWAV.SelectedIndices.Clear() - LWAV.SelectedIndex = C36to10(C10to36(Notes(xI1).Value \ 10000)) - 1 - ValidateWavListView() - - Else - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - - Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) - RemoveNote(xI1) - - AddUndo(xUndo, xRedo) - RefreshPanelAll() - End If - - Exit For - End If - Next - - CalculateTotalPlayableNotes() - End If - End Sub - - Private Function GetClickedNote(e As MouseEventArgs, xHS As Long, xVS As Long, xHeight As Integer) As Integer - Dim NoteIndex As Integer = -1 - For xI1 = UBound(Notes) To 0 Step -1 - 'If mouse is clicking on a K - If MouseInNote(e, xHS, xVS, xHeight, Notes(xI1)) Then - ' found it! - NoteIndex = xI1 - deltaVPosition = IIf(NTInput, GetMouseVPosition(False) - Notes(xI1).VPosition, 0) - - If NTInput And My.Computer.Keyboard.ShiftKeyDown Then - bAdjustUpper = e.Y <= NoteRowToPanelHeight(Notes(xI1).VPosition + Notes(xI1).Length, xVS, xHeight) - bAdjustLength = e.Y >= NoteRowToPanelHeight(Notes(xI1).VPosition, xVS, xHeight) - vo.kHeight Or bAdjustUpper - End If - - Exit For - - End If - Next - - Return NoteIndex - End Function - - Private Sub PanelPreviewNoteIndex(NoteIndex As Integer) - 'Play wav - If ClickStopPreview Then PreviewNote("", True) - 'My.Computer.Audio.Stop() - If NoteIndex > 0 And PreviewOnClick AndAlso IsColumnSound(Notes(NoteIndex).ColumnIndex) Then - Dim xI2 As Integer = Notes(NoteIndex).Value \ 10000 - If xI2 <= 0 Then xI2 = 1 - If xI2 >= 1296 Then xI2 = 1295 - - If Not hWAV(xI2) = "" Then ' AndAlso Path.GetExtension(hWAV(xI2)).ToLower = ".wav" Then - Dim xFileLocation As String = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) & "\" & hWAV(xI2) - If Not ClickStopPreview Then PreviewNote("", True) - PreviewNote(xFileLocation, False) - End If - End If - End Sub - - Private Sub HandleCurrentModeOnClick(e As MouseEventArgs, xHS As Long, xVS As Long, xHeight As Integer, ByRef NoteIndex As Integer) - If TBSelect.Checked Then - OnSelectModeLeftClick(e, NoteIndex, xHeight, xVS) - ElseIf NTInput And TBWrite.Checked Then - TempVPosition = -1 - SelectedColumn = -1 - ShouldDrawTempNote = False - - Dim xVPosition = GetMouseVPosition(gSnap) - - If xVPosition < 0 Or xVPosition >= GetMaxVPosition() Then Exit Sub - - Dim xColumn = GetColumnAtEvent(e, xHS) - - For xI2 As Integer = UBound(Notes) To 1 Step -1 - If Notes(xI2).VPosition = xVPosition And Notes(xI2).ColumnIndex = xColumn Then NoteIndex = xI2 : Exit For - Next - - Dim Hidden As Boolean = ModifierHiddenActive() - - If NoteIndex > 0 Then - ReDim SelectedNotes(0) - SelectedNotes(0) = Notes(NoteIndex) - Notes(NoteIndex).TempIndex = 0 - - 'KMouseDown = xITemp - Notes(NoteIndex).TempMouseDown = True - Notes(NoteIndex).Length = xVPosition - Notes(NoteIndex).VPosition - - 'uVPos = K(xITemp).VPosition - bAdjustUpper = True - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - - - Me.RedoLongNoteModify(SelectedNotes(0), Notes(NoteIndex).VPosition, Notes(NoteIndex).Length, xUndo, xRedo) - AddUndo(xUndo, xRedo) - 'With uNote - ' AddUndo(sCmdKL(.ColumnIndex, .VPosition, .Value, K(xITemp).Length, .Hidden, .Length, True, True), _ - ' sCmdKL(.ColumnIndex, .VPosition, .Value, .Length, .Hidden, K(xITemp).Length, True, True)) - 'End With - - ElseIf IsColumnNumeric(xColumn) Then - - Dim xMessage As String = Strings.Messages.PromptEnterNumeric - If xColumn = niBPM Then xMessage = Strings.Messages.PromptEnterBPM - If xColumn = niSTOP Then xMessage = Strings.Messages.PromptEnterSTOP - If xColumn = niSCROLL Then xMessage = Strings.Messages.PromptEnterSCROLL - - Dim valstr As String = InputBox(xMessage, Text) - Dim value As Double = Val(valstr) * 10000 - - If (xColumn = niSCROLL And valstr = "0") Or value <> 0 Then - If xColumn <> niSCROLL And value <= 0 Then value = 1 - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ - RedoRemoveNote(Notes(xI1), xUndo, xRedo) - Next - - Dim n = New Note(xColumn, xVPosition, value, 0, Hidden) - RedoAddNote(n, xUndo, xRedo) - - AddNote(n) - AddUndo(xUndo, xBaseRedo.Next) - End If - - ShouldDrawTempNote = True - - Else - Dim xLbl As Integer = (LWAV.SelectedIndex + 1) * 10000 - - Dim Landmine As Boolean = ModifierLandmineActive() - - ReDim Preserve Notes(UBound(Notes) + 1) - With Notes(UBound(Notes)) - .VPosition = xVPosition - .ColumnIndex = xColumn - .Value = xLbl - .Hidden = Hidden - .Landmine = Landmine - .TempMouseDown = True - End With - - ReDim SelectedNotes(0) - SelectedNotes(0) = Notes(UBound(Notes)) - SelectedNotes(0).LNPair = -1 - - If TBWavIncrease.Checked Then - IncreaseCurrentWav() - End If - - 'KMouseDown = 1 - - 'uNote.Value = 0 - 'uVPos = xVPosition - uAdded = False - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - RedoAddNote(Notes(UBound(Notes)), xUndo, xRedo, TBWavIncrease.Checked) - AddUndo(xUndo, xRedo) - End If - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - - ElseIf TBTimeSelect.Checked Then - - Dim xL1 As Double - If NoteIndex >= 0 Then xL1 = Notes(NoteIndex).VPosition _ - Else xL1 = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight - - vSelAdjust = ModifierLongNoteActive() - - vSelMouseOverLine = 0 - If Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xHeight)) <= vo.PEDeltaMouseOver Then - vSelMouseOverLine = 3 - ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xHeight)) <= vo.PEDeltaMouseOver Then - vSelMouseOverLine = 2 - ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart, xVS, xHeight)) <= vo.PEDeltaMouseOver Then - vSelMouseOverLine = 1 - End If - - If Not vSelAdjust Then - If vSelMouseOverLine = 1 Then - If gSnap And NoteIndex <= 0 Then xL1 = SnapToGrid(xL1) - vSelLength += vSelStart - xL1 - vSelHalf += vSelStart - xL1 - vSelStart = xL1 - - ElseIf vSelMouseOverLine = 2 Then - vSelHalf = xL1 - If gSnap And NoteIndex <= 0 Then vSelHalf = SnapToGrid(vSelHalf) - vSelHalf -= vSelStart - - ElseIf vSelMouseOverLine = 3 Then - vSelLength = xL1 - If gSnap And NoteIndex <= 0 Then vSelLength = SnapToGrid(vSelLength) - vSelLength -= vSelStart - - Else - vSelLength = 0 - vSelStart = xL1 - If gSnap And NoteIndex <= 0 Then vSelStart = SnapToGrid(vSelStart) - End If - ValidateSelection() - - Else - If vSelMouseOverLine = 2 Then - SortByVPositionInsertion() - vSelPStart = vSelStart - vSelPLength = vSelLength - vSelPHalf = vSelHalf - vSelK = Notes - ReDim Preserve vSelK(UBound(vSelK)) - - If gSnap And NoteIndex <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) - AddUndo(New UndoRedo.Void, New UndoRedo.Void) - BPMChangeHalf(xL1 - vSelHalf - vSelStart, , True) - SortByVPositionInsertion() - UpdatePairing() - CalculateGreatestVPosition() - - ElseIf vSelMouseOverLine = 3 Or vSelMouseOverLine = 1 Then - SortByVPositionInsertion() - vSelPStart = vSelStart - vSelPLength = vSelLength - vSelPHalf = vSelHalf - vSelK = Notes - ReDim Preserve vSelK(UBound(vSelK)) - - If gSnap And NoteIndex <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) - AddUndo(New UndoRedo.Void, New UndoRedo.Void) - BPMChangeTop(IIf(vSelMouseOverLine = 3, xL1 - vSelStart, vSelStart + vSelLength - xL1) / vSelLength, , True) - SortByVPositionInsertion() - UpdatePairing() - CalculateGreatestVPosition() - - Else - vSelLength = xL1 - If gSnap And NoteIndex <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) - vSelLength -= vSelStart - End If - - End If - - If vSelLength Then - Dim xVLower As Double = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - Dim xVUpper As Double = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) - If NTInput Then - For xI2 As Integer = 1 To UBound(Notes) - Notes(xI2).Selected = Not Notes(xI2).VPosition >= xVUpper And Not Notes(xI2).VPosition + Notes(xI2).Length < xVLower And nEnabled(Notes(xI2).ColumnIndex) - Next - Else - For xI2 As Integer = 1 To UBound(Notes) - Notes(xI2).Selected = Notes(xI2).VPosition >= xVLower And Notes(xI2).VPosition < xVUpper And nEnabled(Notes(xI2).ColumnIndex) - Next - End If - Else - For xI2 As Integer = 1 To UBound(Notes) - Notes(xI2).Selected = False - Next - End If - - End If - End Sub - - Private Sub OnSelectModeLeftClick(e As MouseEventArgs, NoteIndex As Integer, xTHeight As Integer, xVS As Integer) - If NoteIndex >= 0 And e.Clicks = 2 Then - DoubleClickNoteIndex(NoteIndex) - ElseIf NoteIndex > 0 Then - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - - 'KMouseDown = xITemp - Notes(NoteIndex).TempMouseDown = True - - If My.Computer.Keyboard.CtrlKeyDown And Not ModifierMultiselectActive() Then - 'If Not K(xITemp).Selected Then K(xITemp).Selected = True - ctrlPressed = True - - ElseIf ModifierMultiselectActive() Then - For xI1 = 0 To UBound(Notes) - If IsNoteVisible(xI1, xTHeight, xVS) Then - If IsLabelMatch(Notes(xI1), NoteIndex) Then - Notes(xI1).Selected = Not Notes(xI1).Selected - End If - End If - Next - Else - ' az description: If the clicked note is not selected, select only this one. - 'Otherwise, we clicked an already selected note - 'and we should rebuild the selected note array. - If Not Notes(NoteIndex).Selected Then - For xI1 = 0 To UBound(Notes) - If Notes(xI1).Selected Then Notes(xI1).Selected = False - Next - Notes(NoteIndex).Selected = True - End If - - Dim SelectedCount As Integer = 0 - For xI1 = 0 To UBound(Notes) - If Notes(xI1).Selected Then SelectedCount += 1 - Next - - ' adjustsingle if selectedcount is 1 - bAdjustSingle = SelectedCount = 1 - - ReDim SelectedNotes(SelectedCount) - SelectedNotes(0) = Notes(NoteIndex) - Notes(NoteIndex).TempIndex = 0 - Dim idx = 1 - - ' Add already selected notes including this one - For xI1 = 1 To NoteIndex - 1 - If Notes(xI1).Selected Then - Notes(xI1).TempIndex = idx - SelectedNotes(idx) = Notes(xI1) - idx += 1 - End If - Next - For xI1 = NoteIndex + 1 To UBound(Notes) - If Notes(xI1).Selected Then - Notes(xI1).TempIndex = idx - SelectedNotes(idx) = Notes(xI1) - idx += 1 - End If - Next - - 'uCol = RealColumnToEnabled(K(xITemp).ColumnIndex) - 'uVPos = K(xITemp).VPosition - 'uNote = K(xITemp) - uAdded = False - - End If - - Else - ReDim SelectedNotes(-1) - LastMouseDownLocation = e.Location - If Not My.Computer.Keyboard.CtrlKeyDown Then - For xI1 = 0 To UBound(Notes) - Notes(xI1).Selected = False - Notes(xI1).TempSelected = False - Next - Else - For xI1 = 0 To UBound(Notes) - Notes(xI1).TempSelected = Notes(xI1).Selected - Next - End If - End If - End Sub - - ' Handles a double click on a note in select mode. - Private Sub DoubleClickNoteIndex(NoteIndex As Integer) - Dim Note As Note = Notes(NoteIndex) - Dim NoteColumn As Integer = Note.ColumnIndex - - If IsColumnNumeric(NoteColumn) Then - 'BPM/Stop prompt - Dim xMessage As String = Strings.Messages.PromptEnterNumeric - If NoteColumn = niBPM Then xMessage = Strings.Messages.PromptEnterBPM - If NoteColumn = niSTOP Then xMessage = Strings.Messages.PromptEnterSTOP - If NoteColumn = niSCROLL Then xMessage = Strings.Messages.PromptEnterSCROLL - - - Dim valstr As String = InputBox(xMessage, Me.Text) - Dim PromptValue As Double = Val(valstr) * 10000 - If (NoteColumn = niSCROLL And valstr = "0") Or PromptValue <> 0 Then - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - RedoRelabelNote(Note, PromptValue, xUndo, xRedo) - If NoteIndex = 0 Then - THBPM.Value = PromptValue / 10000 - Else - Notes(NoteIndex).Value = PromptValue - End If - AddUndo(xUndo, xRedo) - End If - Else - 'Label prompt - Dim xStr As String = UCase(Trim(InputBox(Strings.Messages.PromptEnter, Me.Text))) - - If Len(xStr) = 0 Then Return - - If IsBase36(xStr) And Not (xStr = "00" Or xStr = "0") Then - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - RedoRelabelNote(Note, C36to10(xStr) * 10000, xUndo, xRedo) - Notes(NoteIndex).Value = C36to10(xStr) * 10000 - AddUndo(xUndo, xRedo) - Return - Else - MsgBox(Strings.Messages.InvalidLabel, MsgBoxStyle.Critical, Strings.Messages.Err) - End If - - End If - End Sub - - Private Function MouseInNote(e As MouseEventArgs, xHS As Long, xVS As Long, xHeight As Integer, note As Note) As Boolean - Return e.X >= HorizontalPositiontoDisplay(nLeft(note.ColumnIndex), xHS) + 1 And - e.X <= HorizontalPositiontoDisplay(nLeft(note.ColumnIndex) + GetColumnWidth(note.ColumnIndex), xHS) - 1 And - e.Y >= NoteRowToPanelHeight(note.VPosition + IIf(NTInput, note.Length, 0), xVS, xHeight) - vo.kHeight And - e.Y <= NoteRowToPanelHeight(note.VPosition, xVS, xHeight) - End Function - - Private Sub PMainInMouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.MouseEnter, PMainInL.MouseEnter, PMainInR.MouseEnter - spMouseOver = sender.Tag - Dim xPMainIn As Panel = sender - If AutoFocusMouseEnter AndAlso Me.Focused Then xPMainIn.Focus() : PanelFocus = spMouseOver - If FirstMouseEnter Then FirstMouseEnter = False : xPMainIn.Focus() : PanelFocus = spMouseOver - End Sub - - Private Sub PMainInMouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.MouseLeave, PMainInL.MouseLeave, PMainInR.MouseLeave - KMouseOver = -1 - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - TempVPosition = -1 - SelectedColumn = -1 - RefreshPanelAll() - End Sub - - Private Sub PMainInMouseMove(ByVal sender As Panel) - Dim p As Point = sender.PointToClient(Cursor.Position) - PMainInMouseMove(sender, New MouseEventArgs(MouseButtons.None, 0, p.X, p.Y, 0)) - End Sub - - Private Sub PMainInMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PMainIn.MouseMove, PMainInL.MouseMove, PMainInR.MouseMove - MouseMoveStatus = e.Location - - Dim iI As Integer = sender.Tag - - Dim xHS As Long = PanelHScroll(iI) - Dim xVS As Long = PanelVScroll(iI) - Dim xHeight As Integer = spMain(iI).Height - Dim xWidth As Integer = spMain(iI).Width - - Select Case e.Button - Case MouseButtons.None - 'If K Is Nothing Then Exit Select - If MiddleButtonClicked Then Exit Select - - If isFullScreen Then - If e.Y < 5 Then ToolStripContainer1.TopToolStripPanelVisible = True Else ToolStripContainer1.TopToolStripPanelVisible = False - End If - - Dim xMouseRemainInSameRegion As Boolean = False - - Dim noteIndex As Integer - Dim foundNoteIndex As Integer = -1 - For noteIndex = UBound(Notes) To 0 Step -1 - If MouseInNote(e, xHS, xVS, xHeight, Notes(noteIndex)) Then - foundNoteIndex = noteIndex - - xMouseRemainInSameRegion = foundNoteIndex = KMouseOver - If NTInput Then - Dim vy = NoteRowToPanelHeight(Notes(noteIndex).VPosition + Notes(noteIndex).Length, - xVS, xHeight) - - Dim xbAdjustUpper As Boolean = (e.Y <= vy) And ModifierLongNoteActive() - Dim xbAdjustLength As Boolean = (e.Y >= vy - vo.kHeight Or xbAdjustUpper) And ModifierLongNoteActive() - xMouseRemainInSameRegion = xMouseRemainInSameRegion And xbAdjustUpper = bAdjustUpper And xbAdjustLength = bAdjustLength - bAdjustUpper = xbAdjustUpper - bAdjustLength = xbAdjustLength - End If - - Exit For - End If - Next - - Dim xTempbTimeSelectionMode As Boolean = TBTimeSelect.Checked - - If TBSelect.Checked Or xTempbTimeSelectionMode Then - - If xMouseRemainInSameRegion Then Exit Select - If KMouseOver >= 0 Then KMouseOver = -1 - - If xTempbTimeSelectionMode Then - - Dim xMouseOverLine As Integer = vSelMouseOverLine - vSelMouseOverLine = 0 - - If Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xHeight)) <= vo.PEDeltaMouseOver Then - vSelMouseOverLine = 3 - ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xHeight)) <= vo.PEDeltaMouseOver Then - vSelMouseOverLine = 2 - ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart, xVS, xHeight)) <= vo.PEDeltaMouseOver Then - vSelMouseOverLine = 1 - End If - - End If - - ' draw green highlight - If foundNoteIndex > -1 Then - DrawNoteHoverHighlight(iI, xHS, xVS, xHeight, foundNoteIndex) - End If - - KMouseOver = foundNoteIndex - - ElseIf TBWrite.Checked Then - TempVPosition = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight 'VPosition of the mouse - If gSnap Then TempVPosition = SnapToGrid(TempVPosition) - - SelectedColumn = GetColumnAtEvent(e, xHS) 'get the enabled column where mouse is - - TempLength = 0 - If foundNoteIndex > -1 Then TempLength = Notes(foundNoteIndex).Length - - RefreshPanelAll() - End If - - Case MouseButtons.Left - If tempFirstMouseDown And Not TBTimeSelect.Checked Then Exit Select - - tempX = 0 - tempY = 0 - If e.X < 0 Or e.X > xWidth Or e.Y < 0 Or e.Y > xHeight Then - If e.X < 0 Then tempX = e.X - If e.X > xWidth Then tempX = e.X - xWidth - If e.Y < 0 Then tempY = e.Y - If e.Y > xHeight Then tempY = e.Y - xHeight - Timer1.Enabled = True - Else - Timer1.Enabled = False - End If - - If TBSelect.Checked Then - - pMouseMove = e.Location - - 'If K Is Nothing Then RefreshPanelAll() : Exit Select - - If Not LastMouseDownLocation = New Point(-1, -1) Then - UpdateSelectionBox(xHS, xVS, xHeight) - - 'ElseIf Not KMouseDown = -1 Then - ElseIf SelectedNotes.Length <> 0 Then - UpdateSelectedNotes(xHeight, xVS, xHS, e) - - ElseIf ctrlPressed Then - OnDuplicateSelectedNotes(xHeight, xVS, xHS, e) - End If - - ElseIf TBWrite.Checked Then - - If NTInput Then - OnWriteModeMouseMove(xHeight, xVS, e) - - Else - TempVPosition = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight 'VPosition of the mouse - If gSnap Then TempVPosition = SnapToGrid(TempVPosition) - SelectedColumn = GetColumnAtEvent(e, xHS) 'get the enabled column where mouse is - - End If - - ElseIf TBTimeSelect.Checked Then - OnTimeSelectClick(xHeight, xHS, xVS, e) - End If - - Case MouseButtons.Middle - OnPanelMousePan(e) - End Select - Dim col = GetColumnAtEvent(e, xHS) - Dim vps = GetMouseVPosition(gSnap) - If vps <> lastVPos Or col <> lastColumn Then - lastVPos = vps - lastColumn = col - POStatusRefresh() - RefreshPanelAll() 'az: refreshing the line is important now... - End If - - End Sub - - Dim lastVPos = -1 - Dim lastColumn = -1 - - Private Sub UpdateSelectedNotes(xHeight As Double, xvs As Double, xhs As Double, e As MouseEventArgs) - Dim mouseVPosition As Double - - Dim xITemp As Integer - For xI1 = 1 To UBound(Notes) - If Notes(xI1).TempMouseDown Then xITemp = xI1 : Exit For - Next - - mouseVPosition = GetMouseVPosition(gSnap) - - If bAdjustLength And bAdjustSingle Then - If bAdjustUpper AndAlso mouseVPosition < Notes(xITemp).VPosition Then - bAdjustUpper = False - Notes(xITemp).VPosition += Notes(xITemp).Length - Notes(xITemp).Length *= -1 - ElseIf Not bAdjustUpper AndAlso mouseVPosition > Notes(xITemp).VPosition + Notes(xITemp).Length Then - bAdjustUpper = True - Notes(xITemp).VPosition += Notes(xITemp).Length - Notes(xITemp).Length *= -1 - End If - End If - - 'If moving - If Not bAdjustLength Then - OnSelectModeMoveNotes(e, xhs, xITemp) - - ElseIf bAdjustUpper Then 'If adjusting upper end - Dim dVPosition = mouseVPosition - Notes(xITemp).VPosition - Notes(xITemp).Length 'delta Length - '< 0 means shorten, > 0 means lengthen - - OnAdjustUpperEnd(dVPosition) - - Else 'If adjusting lower end - Dim dVPosition = mouseVPosition - Notes(xITemp).VPosition 'delta VPosition - '> 0 means shorten, < 0 means lengthen - - OnAdjustLowerEnd(dVPosition) - End If - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - 'Label1.Text = KInfo(KMouseDown) - End Sub - - Private Sub OnPanelMousePan(e As MouseEventArgs) - If MiddleButtonMoveMethod = 1 Then - Dim xI1 As Integer = tempV + (tempY - e.Y) / gxHeight - Dim xI2 As Integer = tempH + (tempX - e.X) / gxWidth - If xI1 > 0 Then xI1 = 0 - If xI2 < 0 Then xI2 = 0 - - Select Case PanelFocus - Case 0 - If xI1 < LeftPanelScroll.Minimum Then xI1 = LeftPanelScroll.Minimum - LeftPanelScroll.Value = xI1 - - If xI2 > HSL.Maximum - HSL.LargeChange + 1 Then xI2 = HSL.Maximum - HSL.LargeChange + 1 - HSL.Value = xI2 - - Case 1 - If xI1 < MainPanelScroll.Minimum Then xI1 = MainPanelScroll.Minimum - MainPanelScroll.Value = xI1 - - If xI2 > HS.Maximum - HS.LargeChange + 1 Then xI2 = HS.Maximum - HS.LargeChange + 1 - HS.Value = xI2 - - Case 2 - If xI1 < RightPanelScroll.Minimum Then xI1 = RightPanelScroll.Minimum - RightPanelScroll.Value = xI1 - - If xI2 > HSR.Maximum - HSR.LargeChange + 1 Then xI2 = HSR.Maximum - HSR.LargeChange + 1 - HSR.Value = xI2 - - End Select - End If - End Sub - - Private Sub OnTimeSelectClick(xHeight As Double, xHS As Double, xvs As Double, e As MouseEventArgs) - Dim xI1 As Integer - Dim xITemp As Integer = -1 - If Notes IsNot Nothing Then - For xI1 = UBound(Notes) To 0 Step -1 ' az: MouseInNote implied, but I'm not sure yet - If MouseInNote(e, xHS, xvs, xHeight, Notes(xI1)) Then - xITemp = xI1 - Exit For - End If - Next - End If - - If Not vSelAdjust Then - If vSelMouseOverLine = 1 Then - Dim xV As Double = (xHeight - xvs * gxHeight - e.Y - 1) / gxHeight - If xITemp >= 0 Then xV = Notes(xITemp).VPosition - If gSnap And xITemp <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then xV = SnapToGrid(xV) - vSelLength += vSelStart - xV - vSelHalf += vSelStart - xV - vSelStart = xV - - ElseIf vSelMouseOverLine = 2 Then - vSelHalf = (xHeight - xvs * gxHeight - e.Y - 1) / gxHeight - If xITemp >= 0 Then vSelHalf = Notes(xITemp).VPosition - If gSnap And xITemp <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then vSelHalf = SnapToGrid(vSelHalf) - vSelHalf -= vSelStart - - ElseIf vSelMouseOverLine = 3 Then - vSelLength = (xHeight - xvs * gxHeight - e.Y - 1) / gxHeight - If xITemp >= 0 Then vSelLength = Notes(xITemp).VPosition - If gSnap And xITemp <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) - vSelLength -= vSelStart - - Else - If xITemp >= 0 Then - vSelLength = Notes(xITemp).VPosition - Else - vSelLength = (xHeight - xvs * gxHeight - e.Y - 1) / gxHeight - If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) - End If - vSelLength -= vSelStart - vSelHalf = vSelLength / 2 - End If - ValidateSelection() - - Else - Dim xL1 As Double = (xHeight - xvs * gxHeight - e.Y - 1) / gxHeight - - If vSelMouseOverLine = 2 Then - vSelStart = vSelPStart - vSelLength = vSelPLength - vSelHalf = vSelPHalf - Notes = vSelK - ReDim Preserve Notes(UBound(Notes)) - - If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) - BPMChangeHalf(xL1 - vSelHalf - vSelStart, , True) - SortByVPositionInsertion() - UpdatePairing() - CalculateGreatestVPosition() - - ElseIf vSelMouseOverLine = 3 Or vSelMouseOverLine = 1 Then - vSelStart = vSelPStart - vSelLength = vSelPLength - vSelHalf = vSelPHalf - Notes = vSelK - ReDim Preserve Notes(UBound(Notes)) - - If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) - BPMChangeTop(IIf(vSelMouseOverLine = 3, xL1 - vSelStart, vSelStart + vSelLength - xL1) / vSelLength, , True) - SortByVPositionInsertion() - UpdatePairing() - CalculateGreatestVPosition() - - Else - vSelLength = xL1 - If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) - If xITemp >= 0 Then vSelLength = Notes(xITemp).VPosition - vSelLength -= vSelStart - ValidateSelection() - End If - End If - - If vSelLength Then - Dim xVLower As Double = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - Dim xVUpper As Double = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) - If NTInput Then - For xI2 As Integer = 1 To UBound(Notes) - Notes(xI2).Selected = Notes(xI2).VPosition < xVUpper And Notes(xI2).VPosition + Notes(xI2).Length >= xVLower And nEnabled(Notes(xI2).ColumnIndex) - Next - Else - For xI2 As Integer = 1 To UBound(Notes) - Notes(xI2).Selected = Notes(xI2).VPosition >= xVLower And Notes(xI2).VPosition < xVUpper And nEnabled(Notes(xI2).ColumnIndex) - Next - End If - Else - For xI2 As Integer = 1 To UBound(Notes) - Notes(xI2).Selected = False - Next - End If - - End Sub - - Private Sub OnAdjustUpperEnd(dVPosition As Double) - Dim minLength As Double = 0 - Dim maxHeight As Double = 191999 - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - If Notes(xI1).Length + dVPosition < minLength Then minLength = Notes(xI1).Length + dVPosition - If Notes(xI1).Length + Notes(xI1).VPosition + dVPosition > maxHeight Then maxHeight = Notes(xI1).Length + Notes(xI1).VPosition + dVPosition - Next - maxHeight -= 191999 - - 'declare undo variables - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - 'start moving - Dim xLen As Double - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xLen = Notes(xI1).Length + dVPosition - minLength - maxHeight - RedoLongNoteModify(SelectedNotes(Notes(xI1).TempIndex), Notes(xI1).VPosition, xLen, xUndo, xRedo) - - Notes(xI1).Length = xLen - Next - - 'Add undo - If dVPosition - minLength - maxHeight <> 0 Then - AddUndo(xUndo, xBaseRedo.Next, uAdded) - If Not uAdded Then uAdded = True - End If - End Sub - - - Private Sub OnAdjustLowerEnd(dVPosition As Double) - Dim xI1 As Integer - Dim minLength As Double = 0 - Dim minVPosition As Double = 0 - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected AndAlso Notes(xI1).Length - dVPosition < minLength Then - minLength = Notes(xI1).Length - dVPosition - End If - If Notes(xI1).Selected AndAlso Notes(xI1).VPosition + dVPosition < minVPosition Then - minVPosition = Notes(xI1).VPosition + dVPosition - End If - Next - - 'declare undo variables - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - 'start moving - Dim xVPos As Double - Dim xLen As Double - For xI1 = 0 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xVPos = Notes(xI1).VPosition + dVPosition + minLength - minVPosition - xLen = Notes(xI1).Length - dVPosition - minLength + minVPosition - Me.RedoLongNoteModify(SelectedNotes(Notes(xI1).TempIndex), xVPos, xLen, xUndo, xRedo) - - Notes(xI1).VPosition = xVPos - Notes(xI1).Length = xLen - Next - - 'Add undo - If dVPosition + minLength - minVPosition <> 0 Then - AddUndo(xUndo, xBaseRedo.Next, uAdded) - If Not uAdded Then uAdded = True - End If - End Sub - - Private Sub OnDuplicateSelectedNotes(xHeight As Double, xVS As Double, xHS As Double, e As MouseEventArgs) - Dim tempNoteIndex As Integer - For tempNoteIndex = 1 To UBound(Notes) - If Notes(tempNoteIndex).TempMouseDown Then Exit For - Next - - Dim mouseVPosition = GetMouseVPosition(gSnap) - If DisableVerticalMove Then mouseVPosition = Notes(tempNoteIndex).VPosition - - Dim dVPosition As Double = mouseVPosition - Notes(tempNoteIndex).VPosition 'delta VPosition - - Dim currCol = ColumnArrayIndexToEnabledColumnIndex(GetColumnAtEvent(e, xHS)) - Dim noteCol = ColumnArrayIndexToEnabledColumnIndex(Notes(tempNoteIndex).ColumnIndex) - Dim colChange As Integer = currCol - noteCol 'delta Column - - 'Ks cannot be beyond the left, the upper and the lower boundary - Dim dstColumn As Integer = 0 - Dim mVPosition As Double = 0 - Dim muVPosition As Double = 191999 - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - If ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + colChange < dstColumn Then _ - dstColumn = ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + colChange - - If Notes(xI1).VPosition + dVPosition < mVPosition Then _ - mVPosition = Notes(xI1).VPosition + dVPosition - - If Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0) + dVPosition > muVPosition Then _ - muVPosition = Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0) + dVPosition - - Next - muVPosition -= 191999 - - 'If not moving then exit - If (Not DuplicatedSelectedNotes) And colChange - dstColumn = 0 And dVPosition - mVPosition - muVPosition = 0 Then _ - Return - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - If Not DuplicatedSelectedNotes Then 'If uAdded = False - DuplicateSelectedNotes(tempNoteIndex, dVPosition, colChange, dstColumn, mVPosition, muVPosition) - DuplicatedSelectedNotes = True - - Else - For i As Integer = 1 To UBound(Notes) - If Not Notes(i).Selected Then Continue For - - Notes(i).ColumnIndex = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(i).ColumnIndex) + colChange - dstColumn) - Notes(i).VPosition = Notes(i).VPosition + dVPosition - mVPosition - muVPosition - Me.RedoAddNote(Notes(i), xUndo, xRedo) - Next - - AddUndo(xUndo, xBaseRedo.Next, True) - End If - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - End Sub - - - Private Sub OnWriteModeMouseMove(xHeight As Integer, xVS As Long, e As MouseEventArgs) - 'If Not KMouseDown = -1 Then - If SelectedNotes.Length <> 0 Then - - Dim xI1 As Integer - Dim xITemp As Integer - For xI1 = 1 To UBound(Notes) - If Notes(xI1).TempMouseDown Then xITemp = xI1 : Exit For - Next - - Dim mouseVPosition = GetMouseVPosition(gSnap) - - With Notes(xITemp) - If bAdjustUpper AndAlso mouseVPosition < .VPosition Then - bAdjustUpper = False - .VPosition += .Length - .Length *= -1 - ElseIf Not bAdjustUpper AndAlso mouseVPosition > .VPosition + .Length Then - bAdjustUpper = True - .VPosition += .Length - .Length *= -1 - End If - - If bAdjustUpper Then - .Length = mouseVPosition - .VPosition - Else - .Length = .VPosition + .Length - mouseVPosition - .VPosition = mouseVPosition - End If - - If .VPosition < 0 Then .Length += .VPosition : .VPosition = 0 - If .VPosition + .Length >= GetMaxVPosition() Then .Length = GetMaxVPosition() - 1 - .VPosition - - If SelectedNotes(0).LNPair = -1 Then 'If new note - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - Me.RedoAddNote(Notes(xITemp), xUndo, xRedo) - AddUndo(xUndo, xRedo, True) - - Else 'If existing note - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = Nothing - Me.RedoLongNoteModify(SelectedNotes(0), .VPosition, .Length, xUndo, xRedo) - AddUndo(xUndo, xRedo, True) - End If - - SelectedColumn = .ColumnIndex - TempVPosition = mouseVPosition - TempLength = .Length - - End With - - SortByVPositionInsertion() - UpdatePairing() - CalculateTotalPlayableNotes() - - End If - End Sub - - Private Sub OnSelectModeMoveNotes(e As MouseEventArgs, xHS As Long, xITemp As Integer) - Dim mouseVPosition = GetMouseVPosition(gSnap) - If DisableVerticalMove Then mouseVPosition = SelectedNotes(0).VPosition - Dim dVPosition = mouseVPosition - Notes(xITemp).VPosition 'delta VPosition - - Dim mouseColumn As Integer - Dim xI1 = 0 - Dim mLeft As Integer = e.X / gxWidth + xHS 'horizontal position of the mouse - If mLeft >= 0 Then - Do - If mLeft < nLeft(xI1 + 1) Or xI1 >= gColumns Then mouseColumn = ColumnArrayIndexToEnabledColumnIndex(xI1) : Exit Do 'get the column where mouse is - xI1 += 1 - Loop - End If - - Dim dColumn = mouseColumn - ColumnArrayIndexToEnabledColumnIndex(Notes(xITemp).ColumnIndex) 'get the enabled delta column where mouse is - - 'Ks cannot be beyond the left, the upper and the lower boundary - mLeft = 0 - Dim mVPosition As Double = 0 - Dim muVPosition As Double = 191999 - For xI1 = 1 To UBound(Notes) - If Notes(xI1).Selected Then - mLeft = IIf(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + dColumn < mLeft, - ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + dColumn, - mLeft) - mVPosition = IIf(Notes(xI1).VPosition + dVPosition < mVPosition, - Notes(xI1).VPosition + dVPosition, - mVPosition) - muVPosition = IIf(Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0) + dVPosition > muVPosition, - Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0) + dVPosition, - muVPosition) - End If - Next - muVPosition -= 191999 - - Dim xCol As Integer - Dim xVPos As Double - - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - 'start moving - For xI1 = 1 To UBound(Notes) - If Not Notes(xI1).Selected Then Continue For - - xCol = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + dColumn - mLeft) - xVPos = Notes(xI1).VPosition + dVPosition - mVPosition - muVPosition - Me.RedoMoveNote(SelectedNotes(Notes(xI1).TempIndex), xCol, xVPos, xUndo, xRedo) - - Notes(xI1).ColumnIndex = xCol - Notes(xI1).VPosition = xVPos - Next - - 'If mouseColumn - uNotes(0).ColumnIndex - mLeft <> 0 Or mouseVPosition - uNotes(0).VPosition - mVPosition - muVPosition <> 0 Then - AddUndo(xUndo, xBaseRedo.Next, uAdded) - If Not uAdded Then uAdded = True - - 'End If - End Sub - - Private Sub UpdateSelectionBox(xHS As Long, xVS As Long, xHeight As Integer) - Dim SelectionBox As New Rectangle(IIf(pMouseMove.X > LastMouseDownLocation.X, LastMouseDownLocation.X, pMouseMove.X), - IIf(pMouseMove.Y > LastMouseDownLocation.Y, LastMouseDownLocation.Y, pMouseMove.Y), - Math.Abs(pMouseMove.X - LastMouseDownLocation.X), - Math.Abs(pMouseMove.Y - LastMouseDownLocation.Y)) - Dim NoteRect As Rectangle - - Dim xI1 As Integer - For xI1 = 1 To UBound(Notes) - NoteRect = New Rectangle(HorizontalPositiontoDisplay(nLeft(Notes(xI1).ColumnIndex), xHS) + 1, - NoteRowToPanelHeight(Notes(xI1).VPosition + IIf(NTInput, Notes(xI1).Length, 0), xVS, xHeight) - vo.kHeight, - GetColumnWidth(Notes(xI1).ColumnIndex) * gxWidth - 2, - vo.kHeight + IIf(NTInput, Notes(xI1).Length * gxHeight, 0)) - - - If NoteRect.IntersectsWith(SelectionBox) Then - Notes(xI1).Selected = Not Notes(xI1).TempSelected And nEnabled(Notes(xI1).ColumnIndex) - Else - Notes(xI1).Selected = Notes(xI1).TempSelected And nEnabled(Notes(xI1).ColumnIndex) - End If - Next - End Sub - - Private Sub DuplicateSelectedNotes(tempNoteIndex As Integer, dVPosition As Double, dColumn As Integer, mLeft As Integer, mVPosition As Double, muVPosition As Double) - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - Notes(tempNoteIndex).Selected = True - - Dim xSelectedNotesCount As Integer = 0 - For i As Integer = 1 To UBound(Notes) - If Notes(i).Selected Then xSelectedNotesCount += 1 - Next - - Dim xTempNotes(xSelectedNotesCount - 1) As Note - Dim xI2 As Integer = 0 - For i As Integer = 1 To UBound(Notes) - If Not Notes(i).Selected Then Continue For - - xTempNotes(xI2) = Notes(i) - xTempNotes(xI2).ColumnIndex = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(i).ColumnIndex) + dColumn - mLeft) - xTempNotes(xI2).VPosition = Notes(i).VPosition + dVPosition - mVPosition - muVPosition - Me.RedoAddNote(xTempNotes(xI2), xUndo, xRedo) - - Notes(i).Selected = False - xI2 += 1 - Next - Notes(tempNoteIndex).TempMouseDown = False - - 'copy to K - Dim xOrigUBound As Integer = UBound(Notes) - ReDim Preserve Notes(xOrigUBound + xSelectedNotesCount) - xI2 = 0 - For i As Integer = xOrigUBound + 1 To UBound(Notes) - Notes(i) = xTempNotes(xI2) - xI2 += 1 - Next - - AddUndo(xUndo, xBaseRedo.Next) - End Sub - - Private Sub DrawNoteHoverHighlight(iI As Integer, xHS As Long, xVS As Long, xHeight As Integer, foundNoteIndex As Integer) - Dim xDispX As Integer = HorizontalPositiontoDisplay(nLeft(Notes(foundNoteIndex).ColumnIndex), xHS) - Dim xDispY As Integer = IIf(Not NTInput Or (bAdjustLength And Not bAdjustUpper), - NoteRowToPanelHeight(Notes(foundNoteIndex).VPosition, xVS, xHeight) - vo.kHeight - 1, - NoteRowToPanelHeight(Notes(foundNoteIndex).VPosition + Notes(foundNoteIndex).Length, xVS, xHeight) - vo.kHeight - 1) - Dim xDispW As Integer = GetColumnWidth(Notes(foundNoteIndex).ColumnIndex) * gxWidth + 1 - Dim xDispH As Integer = IIf(Not NTInput Or bAdjustLength, - vo.kHeight + 3, - Notes(foundNoteIndex).Length * gxHeight + vo.kHeight + 3) - - Dim e1 As BufferedGraphics = BufferedGraphicsManager.Current.Allocate(spMain(iI).CreateGraphics, New Rectangle(xDispX, xDispY, xDispW, xDispH)) - e1.Graphics.FillRectangle(vo.Bg, New Rectangle(xDispX, xDispY, xDispW, xDispH)) - - If NTInput Then DrawNoteNT(Notes(foundNoteIndex), e1, xHS, xVS, xHeight) Else DrawNote(Notes(foundNoteIndex), e1, xHS, xVS, xHeight) - - e1.Graphics.DrawRectangle(IIf(bAdjustLength, vo.kMouseOverE, vo.kMouseOver), xDispX, xDispY, xDispW - 1, xDispH - 1) - - e1.Render(spMain(iI).CreateGraphics) - e1.Dispose() - End Sub - - Private Function GetColumnAtX(x As Integer, xHS As Integer) As Integer - Dim xI1 As Integer = 0 - Dim mLeft As Integer = x / gxWidth + xHS 'horizontal position of the mouse - Dim xColumn = 0 - If mLeft >= 0 Then - Do - If mLeft < nLeft(xI1 + 1) Or xI1 >= gColumns Then xColumn = xI1 : Exit Do 'get the column where mouse is - xI1 += 1 - Loop - End If - - Return EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(xColumn)) 'get the enabled column where mouse is - End Function - - Private Function GetColumnAtEvent(e As MouseEventArgs, xHS As Integer) - Return GetColumnAtX(e.X, xHS) - End Function - - ' az: Handle zoom in/out. Should work with any of the three splitters. - Private Sub PMain_Scroll(sender As Object, e As MouseEventArgs) Handles PMainIn.MouseWheel, PMainInL.MouseWheel, PMainInR.MouseWheel - If Not My.Computer.Keyboard.CtrlKeyDown Then Exit Sub - Dim dv = Math.Round(CGHeight2.Value + e.Delta / 120) - CGHeight2.Value = Math.Min(CGHeight2.Maximum, Math.Max(CGHeight2.Minimum, dv)) - CGHeight.Value = CGHeight2.Value / 4 - End Sub - - - Private Sub PMainInMouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PMainIn.MouseUp, PMainInL.MouseUp, PMainInR.MouseUp - tempX = 0 - tempY = 0 - tempV = 0 - tempH = 0 - VSValue = -1 - HSValue = -1 - Timer1.Enabled = False - 'KMouseDown = -1 - ReDim SelectedNotes(-1) - - Dim iI As Integer = sender.Tag - - If MiddleButtonClicked AndAlso e.Button = Windows.Forms.MouseButtons.Middle AndAlso - (MiddleButtonLocation.X - Cursor.Position.X) ^ 2 + (MiddleButtonLocation.Y - Cursor.Position.Y) ^ 2 >= vo.MiddleDeltaRelease Then - MiddleButtonClicked = False - End If - - If TBSelect.Checked Then - LastMouseDownLocation = New Point(-1, -1) - pMouseMove = New Point(-1, -1) - - If ctrlPressed And Not DuplicatedSelectedNotes And Not ModifierMultiselectActive() Then - For i As Integer = 1 To UBound(Notes) - If Notes(i).TempMouseDown Then Notes(i).Selected = Not Notes(i).Selected : Exit For - Next - End If - - ctrlPressed = False - DuplicatedSelectedNotes = False - - ElseIf TBWrite.Checked Then - - If Not NTInput And Not tempFirstMouseDown Then - Dim xVPosition As Double - - - xVPosition = (sender.Height - PanelVScroll(iI) * gxHeight - e.Y - 1) / gxHeight 'VPosition of the mouse - If gSnap Then xVPosition = SnapToGrid(xVPosition) - - Dim xColumn = GetColumnAtEvent(e, PanelHScroll(iI)) - - If e.Button = Windows.Forms.MouseButtons.Left Then - Dim HiddenNote As Boolean = ModifierHiddenActive() - Dim LongNote As Boolean = ModifierLongNoteActive() - Dim Landmine As Boolean = ModifierLandmineActive() - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - If IsColumnNumeric(xColumn) Then - Dim xMessage As String = Strings.Messages.PromptEnterNumeric - If xColumn = niBPM Then xMessage = Strings.Messages.PromptEnterBPM - If xColumn = niSTOP Then xMessage = Strings.Messages.PromptEnterSTOP - If xColumn = niSCROLL Then xMessage = Strings.Messages.PromptEnterSCROLL - - Dim valstr As String = InputBox(xMessage, Me.Text) - Dim value As Long = Val(valstr) * 10000 - - If (xColumn = niSCROLL And valstr = "0") Or value <> 0 Then - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ - RedoRemoveNote(Notes(xI1), xUndo, xRedo) - Next - - Dim n = New Note(xColumn, xVPosition, value, LongNote, HiddenNote) - RedoAddNote(n, xUndo, xRedo) - AddNote(n) - - AddUndo(xUndo, xBaseRedo.Next) - End If - - Else - Dim xValue As Integer = (LWAV.SelectedIndex + 1) * 10000 - - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ - RedoRemoveNote(Notes(xI1), xUndo, xRedo) - Next - - Dim n = New Note(xColumn, xVPosition, xValue, - LongNote, HiddenNote, True, Landmine) - - RedoAddNote(n, xUndo, xRedo) - AddNote(n) - - AddUndo(xUndo, xRedo) - End If - End If - End If - - If Not ShouldDrawTempNote Then ShouldDrawTempNote = True - TempVPosition = -1 - SelectedColumn = -1 - End If - CalculateGreatestVPosition() - RefreshPanelAll() - End Sub - - Private Sub PMainInMouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PMainIn.MouseWheel, PMainInL.MouseWheel, PMainInR.MouseWheel - If MiddleButtonClicked Then MiddleButtonClicked = False - - Dim xI1 As Integer - - Select Case spMouseOver - Case 0 - 'xI1 = spV(iI) - Math.Sign(e.Delta) * VSL.SmallChange * 5 / gxHeight - xI1 = PanelVScroll(spMouseOver) - Math.Sign(e.Delta) * gWheel - If xI1 > 0 Then xI1 = 0 - If xI1 < LeftPanelScroll.Minimum Then xI1 = LeftPanelScroll.Minimum - LeftPanelScroll.Value = xI1 - Case 1 - 'xI1 = spV(iI) - Math.Sign(e.Delta) * VS.SmallChange * 5 / gxHeight - xI1 = PanelVScroll(spMouseOver) - Math.Sign(e.Delta) * gWheel - If xI1 > 0 Then xI1 = 0 - If xI1 < MainPanelScroll.Minimum Then xI1 = MainPanelScroll.Minimum - MainPanelScroll.Value = xI1 - Case 2 - 'xI1 = spV(iI) - Math.Sign(e.Delta) * VSR.SmallChange * 5 / gxHeight - xI1 = PanelVScroll(spMouseOver) - Math.Sign(e.Delta) * gWheel - If xI1 > 0 Then xI1 = 0 - If xI1 < RightPanelScroll.Minimum Then xI1 = RightPanelScroll.Minimum - RightPanelScroll.Value = xI1 - End Select - End Sub - - Private Sub PMainInPaint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PMainIn.Paint, PMainInL.Paint, PMainInR.Paint - RefreshPanel(sender.Tag, e.ClipRectangle) - End Sub -End Class +Imports System.Linq +Imports iBMSC.Editor + +Partial Public Class MainWindow + + Private Sub PMainInPreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles PMainIn.PreviewKeyDown, PMainInL.PreviewKeyDown, PMainInR.PreviewKeyDown + If e.KeyCode = Keys.ShiftKey Or e.KeyCode = Keys.ControlKey Or e.KeyCode = 18 Then + RefreshPanelAll() + POStatusRefresh() + Exit Sub + End If + + Dim PanelS As Panel = CType(sender, Panel) + Dim xI1 As Integer + Dim xTargetColumn As Integer = -1 + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + ReDim SelectedNotes(-1) + + ' Turn keycode into string + Dim keyComboEvent(-1) As String + If e.Control Then + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = "Ctrl" + End If + If e.Shift Then + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = "Shift" + End If + If e.Alt Then + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = "Alt" + End If + ReDim Preserve keyComboEvent(keyComboEvent.Length) + keyComboEvent(UBound(keyComboEvent)) = e.KeyCode.ToString() + + ' Determine + Dim KeybindOptionVar As Integer = -1 + Dim KeybindOptionName As String = "" + + Dim HasSelectedNotes As Boolean = False + Dim FirstSelectedNote As Integer + Dim LastSelectedNote As Integer + For xI = 1 To UBound(Notes) + If Notes(xI).Selected Then + HasSelectedNotes = True + + FirstSelectedNote = xI + For xI2 = UBound(Notes) To xI Step -1 + If Notes(xI2).Selected Then + LastSelectedNote = xI2 + Exit For + End If + Next + Exit For + End If + Next + + ' Check for specific categories first + For Each P In KbCategory + ' Check if category should be ignored + Select Case P + Case KbCategorySP + If Not HasSelectedNotes Then Continue For + Case KbCategoryPMS + If Not HasSelectedNotes OrElse gXKeyMode <> "PMS" Then Continue For + Case KbCategoryDP + If Not HasSelectedNotes OrElse gXKeyMode <> "DP" Then Continue For + End Select + + Dim keybindOptions = From k In Keybindings + Where k.Category = P + Select k + + For Each keybind In keybindOptions + Dim keyComboString = Join(keyComboEvent, "+") + ' Category SP/PMS/DP: Account for per-note assignment using shift + If P = KbCategorySP OrElse P = KbCategoryPMS OrElse P = KbCategoryDP OrElse P = KbCategoryBGM Then keyComboString = keyComboString.Replace("Shift+", "") + ' Category AllMod: Ignore modifiers + If P = KbCategoryAllMod Then keyComboString = e.KeyCode.ToString() + + If keybind.Combo.Contains(keyComboString) Then + KeybindOptionVar = keybind.OpVar + KeybindOptionName = keybind.OpName + Exit For + End If + Next + If KeybindOptionVar <> -1 Then Exit For + Next + + Select Case KeybindOptionVar + Case 0 : MoveToColumn(niA2, xUndo, xRedo) + Case 1 : MoveToColumn(niA3, xUndo, xRedo) + Case 2 : MoveToColumn(niA4, xUndo, xRedo) + Case 3 : MoveToColumn(niA5, xUndo, xRedo) + Case 4 : MoveToColumn(niA6, xUndo, xRedo) + Case 5 : MoveToColumn(niA7, xUndo, xRedo) + Case 6 : MoveToColumn(niA8, xUndo, xRedo) + Case 7 : MoveToColumn(niA1, xUndo, xRedo) + + Case 10 : MoveToColumn(niD1, xUndo, xRedo) + Case 11 : MoveToColumn(niD2, xUndo, xRedo) + Case 12 : MoveToColumn(niD3, xUndo, xRedo) + Case 13 : MoveToColumn(niD4, xUndo, xRedo) + Case 14 : MoveToColumn(niD5, xUndo, xRedo) + Case 15 : MoveToColumn(niD6, xUndo, xRedo) + Case 16 : MoveToColumn(niD7, xUndo, xRedo) + Case 17 : MoveToColumn(niD8, xUndo, xRedo) + + Case 20 : MoveToColumn(niA2, xUndo, xRedo) + Case 21 : MoveToColumn(niA3, xUndo, xRedo) + Case 22 : MoveToColumn(niA4, xUndo, xRedo) + Case 23 : MoveToColumn(niA5, xUndo, xRedo) + Case 24 : MoveToColumn(niA6, xUndo, xRedo) + Case 25 : MoveToColumn(niD2, xUndo, xRedo) + Case 26 : MoveToColumn(niD3, xUndo, xRedo) + Case 27 : MoveToColumn(niD4, xUndo, xRedo) + Case 28 : MoveToColumn(niD5, xUndo, xRedo) + + Case 100 : MoveToBGM(xUndo, xRedo) + Case 101 : MoveToTemplatePosition(xUndo, xRedo) + Case 102 : CGDisableVertical.Checked = Not CGDisableVertical.Checked + Case 103 : CGSnap.Checked = Not gSnap + + Case 104 : POBLong_Click(Nothing, Nothing) + Case 105 : POBNormal_Click(Nothing, Nothing) + Case 106 : POBNormalLong_Click(Nothing, Nothing) + Case 107 : POBAutoLongVPosition_Click(Nothing, Nothing) + Case 108 : POBAutoLongColumn_Click(Nothing, Nothing) + + Case 109 : CheckTechnicalError(Nothing, Nothing) + Case 110 : Expand_Load(Nothing, Nothing) + + Case 111 : TBUndo_Click(TBUndo, New EventArgs) + Case 112 : TBRedo_Click(TBRedo, New EventArgs) + Case 113 : TBCut_Click(TBCut, New EventArgs) + Case 114 : TBCopy_Click(TBCopy, New EventArgs) + Case 115 : TBPaste_Click(TBPaste, New EventArgs) + Case 116 : TBPastePattern_Click(mnPastePattern, New EventArgs) + Case 117 : mnSelectAll_Click(mnSelectAll, New EventArgs) + Case 118 : If KMouseOver <> -1 Then SelectAllWithHoveredNoteLabel() + + Case 200 + Dim xVPosition As Double = 192 / gDivide + If My.Computer.Keyboard.CtrlKeyDown Then xVPosition = 1 + + 'Ks cannot be beyond the upper boundary + Dim muVPosition As Double = GetMaxVPosition() - 1 + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected Then + 'K(xI1).VPosition = Math.Floor(K(xI1).VPosition / (192 / gDivide)) * 192 / gDivide + Dim NTLength As Double = CDbl(IIf(NTInput, Notes(xI1).Length, 0)) + muVPosition = CDbl(IIf(Notes(xI1).VPosition + NTLength + xVPosition > muVPosition, + Notes(xI1).VPosition + NTLength + xVPosition, + muVPosition)) + End If + Next + muVPosition -= 191999 + + Dim xVPos As Double + For xI1 = UBound(Notes) To 1 Step -1 + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xVPos = Notes(xI1).VPosition + xVPosition - muVPosition + Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, xVPos, xUndo, xRedo) + Notes(xI1).VPosition = xVPos + ScrollPanelToNote(xVPos, Notes(xI1).Length) + Next + + If xVPosition - muVPosition <> 0 Then AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + RefreshPanelAll() + Case 201 + Dim xVPosition As Double = -192 / gDivide + If My.Computer.Keyboard.CtrlKeyDown Then xVPosition = -1 + + 'Ks cannot be beyond the lower boundary + Dim mVPosition As Double = 0 + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected Then + 'K(xI1).VPosition = Math.Ceiling(K(xI1).VPosition / (192 / gDivide)) * 192 / gDivide + mVPosition = CDbl(IIf(Notes(xI1).VPosition + xVPosition < mVPosition, + Notes(xI1).VPosition + xVPosition, + mVPosition)) + End If + Next + + Dim xVPos As Double + For xI1 = UBound(Notes) To 1 Step -1 + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xVPos = Notes(xI1).VPosition + xVPosition - mVPosition + Me.RedoMoveNote(Notes(xI1), Notes(xI1).ColumnIndex, xVPos, xUndo, xRedo) + Notes(xI1).VPosition = xVPos + ScrollPanelToNote(xVPos, Notes(xI1).Length) + Next + + If xVPosition - mVPosition <> 0 Then AddUndo(xUndo, xBaseRedo.Next) + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + CalculateGreatestVPosition() + RefreshPanelAll() + Case 202 + 'For xI1 = 1 To UBound(K) + ' If K(xI1).Selected Then K(xI1).ColumnIndex = RealColumnToEnabled(K(xI1).ColumnIndex) - 1 + 'Next + + 'Ks cannot be beyond the left boundary + Dim mLeft As Integer = 0 + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected Then mLeft = CInt(IIf(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) - 1 < mLeft, + ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) - 1, + mLeft)) + Next + + Dim xCol As Integer + For xI1 = UBound(Notes) To 1 Step -1 + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xCol = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) - 1 - mLeft) + Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) + Notes(xI1).ColumnIndex = xCol + ScrollPanelToNote(Notes(xI1).VPosition, Notes(xI1).Length) + Next + + If -1 - mLeft <> 0 Then AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + Case 203 + Dim xCol As Integer + For xI1 = UBound(Notes) To 1 Step -1 + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xCol = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + 1) + Me.RedoMoveNote(Notes(xI1), xCol, Notes(xI1).VPosition, xUndo, xRedo) + Notes(xI1).ColumnIndex = xCol + ScrollPanelToNote(Notes(xI1).VPosition, Notes(xI1).Length) + Next + + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + Case 204 + If TBTimeSelect.Checked Then + With My.Computer.Keyboard + If Not .CtrlKeyDown And Not .ShiftKeyDown Then + BDefineMeasure_Click(BDefineMeasure, New System.EventArgs) + ElseIf .CtrlKeyDown And Not .ShiftKeyDown Then + BInsertOrRemoveSpaceM_Click(BInsertOrRemoveSpaceM, New System.EventArgs) + ElseIf Not .CtrlKeyDown And .ShiftKeyDown Then + BInsertOrRemoveSpaceN_Click(BInsertOrRemoveSpaceN, New System.EventArgs) + Else + InsertOrRemoveSpaceMN(sender, New System.EventArgs) + End If + End With + End If + Case 213 + With My.Computer.Keyboard + Dim Modif As Integer = CInt(IIf(.ShiftKeyDown, 3, 2)) + If Not .CtrlKeyDown And Not .AltKeyDown Then ' Divide CGDivide + If CInt(CGDivide.Value) / Modif >= CGDivide.Minimum Then CGDivide.Value = CGDivide.Value / Modif + ElseIf .CtrlKeyDown And Not .AltKeyDown Then ' Decrease CGDivide by 1 + If CGDivide.Value - 1 >= CGDivide.Minimum Then CGDivide.Value -= 1 + ElseIf Not .CtrlKeyDown And .AltKeyDown Then ' Divide CGSub + If CInt(CGSub.Value) / Modif >= CGSub.Minimum Then CGSub.Value = CGSub.Value / Modif + Else ' Decrease CGSub by 1 + If CGSub.Value - 1 >= CGSub.Minimum Then CGSub.Value -= 1 + End If + End With + Case 214 + With My.Computer.Keyboard + Dim Modif As Integer = CInt(IIf(.ShiftKeyDown, 3, 2)) + If Not .CtrlKeyDown And Not .AltKeyDown Then ' Divide CGDivide + If CGDivide.Value * Modif <= CGDivide.Maximum Then CGDivide.Value *= Modif + ElseIf .CtrlKeyDown And Not .AltKeyDown Then ' Decrease CGDivide by 1 + If CGDivide.Value + 1 <= CGDivide.Maximum Then CGDivide.Value += 1 + ElseIf Not .CtrlKeyDown And .AltKeyDown Then ' Divide CGSub + If CGSub.Value * Modif <= CGSub.Maximum Then CGSub.Value *= Modif + Else ' Decrease CGSub by 1 + If CGSub.Value + 1 <= CGSub.Maximum Then CGSub.Value += 1 + End If + End With + + Case 205 + mnDelete_Click(mnDelete, New System.EventArgs) + Case 206 + If PanelFocus = 0 Then LeftPanelScroll.Value = 0 + If PanelFocus = 1 Then MainPanelScroll.Value = 0 + If PanelFocus = 2 Then RightPanelScroll.Value = 0 + Case 207 + If PanelFocus = 0 Then LeftPanelScroll.Value = LeftPanelScroll.Minimum + If PanelFocus = 1 Then MainPanelScroll.Value = MainPanelScroll.Minimum + If PanelFocus = 2 Then RightPanelScroll.Value = RightPanelScroll.Minimum + Case 208 + If PanelFocus = 0 Then LeftPanelScroll.Value = CInt(IIf(LeftPanelScroll.Value - gPgUpDn > LeftPanelScroll.Minimum, LeftPanelScroll.Value - gPgUpDn, LeftPanelScroll.Minimum)) + If PanelFocus = 1 Then MainPanelScroll.Value = CInt(IIf(MainPanelScroll.Value - gPgUpDn > MainPanelScroll.Minimum, MainPanelScroll.Value - gPgUpDn, MainPanelScroll.Minimum)) + If PanelFocus = 2 Then RightPanelScroll.Value = CInt(IIf(RightPanelScroll.Value - gPgUpDn > RightPanelScroll.Minimum, RightPanelScroll.Value - gPgUpDn, RightPanelScroll.Minimum)) + Case 209 + If PanelFocus = 0 Then LeftPanelScroll.Value = CInt(IIf(LeftPanelScroll.Value + gPgUpDn < 0, LeftPanelScroll.Value + gPgUpDn, 0)) + If PanelFocus = 1 Then MainPanelScroll.Value = CInt(IIf(MainPanelScroll.Value + gPgUpDn < 0, MainPanelScroll.Value + gPgUpDn, 0)) + If PanelFocus = 2 Then RightPanelScroll.Value = CInt(IIf(RightPanelScroll.Value + gPgUpDn < 0, RightPanelScroll.Value + gPgUpDn, 0)) + Case 210 ' Same as PageDown + If PanelFocus = 0 Then LeftPanelScroll.Value = CInt(IIf(LeftPanelScroll.Value + gPgUpDn < 0, LeftPanelScroll.Value + gPgUpDn, 0)) + If PanelFocus = 1 Then MainPanelScroll.Value = CInt(IIf(MainPanelScroll.Value + gPgUpDn < 0, MainPanelScroll.Value + gPgUpDn, 0)) + If PanelFocus = 2 Then RightPanelScroll.Value = CInt(IIf(RightPanelScroll.Value + gPgUpDn < 0, RightPanelScroll.Value + gPgUpDn, 0)) + + Case 211 + If e.Control AndAlso Not e.Shift Then + If BMSFileIndex = UBound(BMSFiles) Then Exit Sub + + Dim xIBMS As Integer = BMSFileIndex + 1 + TBTab_Click(BMSFiles(xIBMS).TSB, New EventArgs) + + Else + If BMSFileIndex = 0 Then Exit Sub + + Dim xIBMS As Integer = BMSFileIndex - 1 + TBTab_Click(BMSFiles(xIBMS).TSB, New EventArgs) + + End If + Case 212 + ' Cannot prevent the tab key from focusing on other things so I opted to use the capital key + If Not e.Shift Then + If Not HasSelectedNotes Then + For xIN = 1 To UBound(Notes) + If Notes(xIN).VPosition >= -PanelVScroll(PanelFocus) Then + FirstSelectedNote = xIN - 1 + Exit For + End If + Next + End If + + For xIN = 1 To UBound(Notes) + Notes(xIN).Selected = False + Next + FirstSelectedNote += 1 + Notes(FirstSelectedNote).Selected = True + ScrollPanelToNote(Notes(FirstSelectedNote).VPosition, Notes(FirstSelectedNote).Length) + + Else + If Not HasSelectedNotes Then + For xIN = UBound(Notes) To 1 Step -1 + If Notes(xIN).VPosition >= -PanelVScroll(PanelFocus) Then + LastSelectedNote = xIN + 1 + Exit For + End If + Next + End If + + For xIN = 1 To UBound(Notes) + Notes(xIN).Selected = False + Next + LastSelectedNote -= 1 + Notes(LastSelectedNote).Selected = True + ScrollPanelToNote(Notes(LastSelectedNote).VPosition, Notes(LastSelectedNote).Length) + + End If + + Case 215 + 'Dim xTempSwap As Integer = gSlash + 'gSlash = CGDivide.Value + 'CGDivide.Value = xTempSwap + CGDivide.Value = gSlash + Case 216 + With CGHeight + .Value -= CDec(IIf(.Value < .Minimum + .Increment, .Value - .Minimum, .Increment)) + End With + Case 217 + With CGHeight + .Value += CDec(IIf(.Value > .Maximum - .Increment, .Maximum - .Value, .Increment)) + End With + Case 218 + DecreaseCurrentWAV() + Case 219 + IncreaseCurrentWAV() + Case 220 + TBPreviewHighlighted_Click(sender, New EventArgs) + Case 222 ' "GetVPositionFromTime" ' Currently not accessible + MsgBox("VPosition: " & GetVPositionFromTime(CDbl(InputBox("Enter time")))) + End Select + + PMainInMouseMove(PanelS) + POStatusRefresh() + End Sub + + Private Sub SelectAllWithHoveredNoteLabel() + For xI1 = 0 To UBound(Notes) + Notes(xI1).Selected = CBool(IIf(IsLabelMatch(Notes(xI1), KMouseOver), True, Notes(xI1).Selected)) + Next + End Sub + + Private Function IsLabelMatch(note As Note, index As Integer) As Boolean + If TBShowFileName.Checked Then + Dim wavidx = CInt(Notes(index).Value / 10000) + Dim wav = hWAV(wavidx) + If hWAV(CInt(note.Value / 10000)) = wav Then + Return True + End If + Else + If note.Value = Notes(index).Value Then + Return True + End If + End If + + Return False + End Function + + Private Sub DecreaseCurrentWAV() + If LWAV.SelectedIndex = -1 Then + LWAV.SelectedIndex = 0 + Else + Dim newIndex As Integer = LWAV.SelectedIndex - 1 + If newIndex < 0 Then newIndex = 0 + LWAV.SelectedIndices.Clear() + LWAV.SelectedIndex = newIndex + End If + End Sub + + Private Sub IncreaseCurrentWAV() + If LWAV.SelectedIndex = -1 Then + LWAV.SelectedIndex = 0 + Else + Dim newIndex As Integer = LWAV.SelectedIndex + 1 + If newIndex > LWAV.Items.Count - 1 Then newIndex = LWAV.Items.Count - 1 + LWAV.SelectedIndices.Clear() + LWAV.SelectedIndex = newIndex + ValidateWAVListView() + End If + End Sub + + Private Sub DecreaseCurrentBMP() + If LBMP.SelectedIndex = -1 Then + LBMP.SelectedIndex = 0 + Else + Dim newIndex As Integer = LBMP.SelectedIndex - 1 + If newIndex < 0 Then newIndex = 0 + LBMP.SelectedIndices.Clear() + LBMP.SelectedIndex = newIndex + End If + End Sub + + Private Sub IncreaseCurrentBMP() + If LBMP.SelectedIndex = -1 Then + LBMP.SelectedIndex = 0 + Else + Dim newIndex As Integer = LBMP.SelectedIndex + 1 + If newIndex > LBMP.Items.Count - 1 Then newIndex = LBMP.Items.Count - 1 + LBMP.SelectedIndices.Clear() + LBMP.SelectedIndex = newIndex + ValidateBMPListView() + End If + End Sub + + Private Sub MoveToBGM(xUndo As UndoRedo.LinkedURCmd, xRedo As UndoRedo.LinkedURCmd) + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim bMoveAndDeselectFirstNote = My.Computer.Keyboard.ShiftKeyDown + + For xI2 As Integer = 1 To UBound(Notes) + If Not Notes(xI2).Selected OrElse Not IsColumnSound(Notes(xI2).ColumnIndex) Then Continue For + + With Notes(xI2) + Dim currentBGMColumn As Integer = niB + + 'TODO: optimize the for loops below + If NTInput Then + For xI0 As Integer = 1 To UBound(Notes) + Dim IntersectA = Notes(xI0).VPosition <= Notes(xI2).VPosition + Notes(xI2).Length + Dim IntersectB = Notes(xI0).VPosition + Notes(xI0).Length >= Notes(xI2).VPosition + If Notes(xI0).ColumnIndex = currentBGMColumn AndAlso IntersectA And IntersectB Then + currentBGMColumn += 1 : xI0 = 1 + End If + Next + Else + For xI0 As Integer = 1 To UBound(Notes) + If Notes(xI0).ColumnIndex = currentBGMColumn AndAlso Notes(xI0).VPosition = Notes(xI2).VPosition Then + currentBGMColumn += 1 : xI0 = 1 + End If + Next + End If + + Me.RedoMoveNote(Notes(xI2), currentBGMColumn, .VPosition, xUndo, xRedo) + .ColumnIndex = currentBGMColumn + + If bMoveAndDeselectFirstNote Then + Notes(xI2).Selected = False + PanelPreviewNoteIndex(xI2) + + ' az: Add selected notes to undo + ' to preserve selection status + ' this works because the note find + ' does not account for selection status + ' when checking equality! (equalsBMSE, equalsNT) + For xI3 As Integer = 1 To UBound(Notes) + If xI3 = xI2 Then Continue For + If Notes(xI3).Selected Then + RedoMoveNote(Notes(xI3), Notes(xI3).ColumnIndex, Notes(xI3).VPosition, xUndo, xRedo) + End If + Next + + Exit For + End If + End With + Next + + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + End Sub + + Private Sub MoveToColumn(xTargetColumn As Integer, xUndo As UndoRedo.LinkedURCmd, xRedo As UndoRedo.LinkedURCmd) + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + If xTargetColumn = -1 Then Return + If Not nEnabled(xTargetColumn) Then Return + Dim bMoveAndDeselectFirstNote = My.Computer.Keyboard.ShiftKeyDown + + For xI2 As Integer = 1 To UBound(Notes) + If Not Notes(xI2).Selected Or Notes(xI2).Ghost Then Continue For + + RedoMoveNote(Notes(xI2), xTargetColumn, Notes(xI2).VPosition, xUndo, xRedo) + Notes(xI2).ColumnIndex = xTargetColumn + + If bMoveAndDeselectFirstNote Then + Notes(xI2).Selected = False + PanelPreviewNoteIndex(xI2) + + ' az: Add selected notes to undo + ' to preserve selection status + ' this works because the note find + ' does not account for selection status + ' when checking equality! (equalsBMSE, equalsNT) + For xI3 As Integer = 1 To UBound(Notes) + If xI3 = xI2 Then Continue For + If Notes(xI3).Selected Then + RedoMoveNote(Notes(xI3), Notes(xI3).ColumnIndex, Notes(xI3).VPosition, xUndo, xRedo) + End If + Next + + Exit For + End If + Next + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + End Sub + + Private Sub MoveToTemplatePosition(xUndo As UndoRedo.LinkedURCmd, xRedo As UndoRedo.LinkedURCmd) + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + For xI2 As Integer = 1 To UBound(Notes) + If Not Notes(xI2).Selected Or Notes(xI2).Ghost Then Continue For + Dim xTargetPositions = FindNoteTemplatePosition(Notes(xI2)) + If xTargetPositions Is Nothing Then Continue For + + Dim xTargetColumn = CInt(xTargetPositions(0)) + Dim xTargetVPosition = CInt(IIf(TemplateSnapToVPosition, xTargetPositions(1), Notes(xI2).VPosition)) + RedoMoveNote(Notes(xI2), xTargetColumn, xTargetVPosition, xUndo, xRedo) + Notes(xI2).ColumnIndex = xTargetColumn + Notes(xI2).VPosition = xTargetVPosition + Next + AddUndo(xUndo, xBaseRedo.Next) + UpdatePairing() + CalculateTotalPlayableNotes() + RefreshPanelAll() + End Sub + + Private Function FindNoteTemplatePosition(ByVal Note As Note) As Double() + Dim VPosDiff As Double = 192 * 999 + Dim VPosition As Double + Dim xTargetColumn As Integer = 0 + For xI = 1 To UBound(NotesTemplate) + If NotesTemplate(xI).Value <> Note.Value Then Continue For + + Dim Diff As Double = Math.Abs(NotesTemplate(xI).VPosition - Note.VPosition) + If Diff < VPosDiff Then + VPosDiff = Diff + xTargetColumn = NotesTemplate(xI).ColumnIndex + VPosition = NotesTemplate(xI).VPosition + Else + Return {xTargetColumn, VPosition} + End If + Next + If VPosDiff <> 192 * 999 Then Return {xTargetColumn, VPosition} Else Return Nothing + End Function + + Private Sub PMainInResize(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.Resize, PMainInL.Resize, PMainInR.Resize + If Not Me.Created Then Exit Sub + + Dim PanelS As Panel = CType(sender, Panel) + Dim iI As Integer = CInt(PanelS.Tag) + PanelWidth(0) = PMainL.Width + PanelWidth(1) = PMain.Width + PanelWidth(2) = PMainR.Width + + Select Case iI + Case 0 + LeftPanelScroll.LargeChange = CInt(PanelS.Height * 0.9) + LeftPanelScroll.Maximum = LeftPanelScroll.LargeChange - 1 + HSL.LargeChange = CInt(PanelS.Width / gxWidth) + If HSL.Value > HSL.Maximum - HSL.LargeChange + 1 Then HSL.Value = HSL.Maximum - HSL.LargeChange + 1 + Case 1 + MainPanelScroll.LargeChange = CInt(PanelS.Height * 0.9) + MainPanelScroll.Maximum = MainPanelScroll.LargeChange - 1 + HS.LargeChange = CInt(PanelS.Width / gxWidth) + If HS.Value > HS.Maximum - HS.LargeChange + 1 Then HS.Value = HS.Maximum - HS.LargeChange + 1 + Case 2 + RightPanelScroll.LargeChange = CInt(PanelS.Height * 0.9) + RightPanelScroll.Maximum = RightPanelScroll.LargeChange - 1 + HSR.LargeChange = CInt(PanelS.Width / gxWidth) + If HSR.Value > HSR.Maximum - HSR.LargeChange + 1 Then HSR.Value = HSR.Maximum - HSR.LargeChange + 1 + End Select + RefreshPanel(iI, PanelS.DisplayRectangle) + End Sub + + Private Sub PMainInLostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.LostFocus, PMainInL.LostFocus, PMainInR.LostFocus + RefreshPanelAll() + End Sub + + Private Sub PMainInMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PMainIn.MouseDown, PMainInL.MouseDown, PMainInR.MouseDown + + Dim PanelS As Panel = CType(sender, Panel) + tempFirstMouseDown = FirstClickDisabled And Not PanelS.Focused + + PanelFocus = CInt(PanelS.Tag) + PanelS.Focus() + LastMouseDownLocation = New Point(-1, -1) + VSValue = CInt(PanelVScroll(PanelFocus)) + + If NTInput Then bAdjustUpper = False : bAdjustLength = False + Me.ctrlPressed = False : Me.DuplicatedSelectedNotes = False + + If MiddleButtonClicked Then MiddleButtonClicked = False : Exit Sub + + Dim xHS As Integer = PanelHScroll(PanelFocus) + Dim xVS As Integer = CInt(PanelVScroll(PanelFocus)) + Dim xHeight As Integer = spMain(PanelFocus).Height + + Select Case e.Button + Case Windows.Forms.MouseButtons.Left + If tempFirstMouseDown And Not TBTimeSelect.Checked Then RefreshPanelAll() : Exit Select + + KMouseOver = -1 + 'If K Is Nothing Then pMouseDown = e.Location : Exit Select + + 'Find the clicked K + Dim NoteIndex As Integer = GetClickedNote(e, xHS, xVS, xHeight) + + PanelPreviewNoteIndex(NoteIndex) + + For xI1 = 0 To UBound(Notes) + Notes(xI1).TempMouseDown = False + Next + + HandleCurrentModeOnClick(e, xHS, xVS, xHeight, NoteIndex) + RefreshPanelAll() + POStatusRefresh() + + Case Windows.Forms.MouseButtons.Middle + If MiddleButtonMoveMethod = 1 Then + tempX = e.X + tempY = e.Y + tempV = CInt(xVS) + tempH = CInt(xHS) + Else + MiddleButtonLocation = Cursor.Position + MiddleButtonClicked = True + TimerMiddle.Enabled = True + End If + + Case Windows.Forms.MouseButtons.Right + DeselectOrRemove(e, xHS, xVS, xHeight) + End Select + End Sub + + Private Sub DeselectOrRemove(e As MouseEventArgs, xHS As Integer, xVS As Integer, xHeight As Integer) + KMouseOver = -1 + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + 'If K Is Nothing Then pMouseDown = e.Location : Exit Select + + If Not tempFirstMouseDown Then + + Dim xI1 As Integer + For xI1 = UBound(Notes) To 1 Step -1 + 'If mouse is clicking on a K + If MouseInNote(e, xHS, xVS, xHeight, Notes(xI1)) Then + + If My.Computer.Keyboard.ShiftKeyDown Then + LWAV.SelectedIndices.Clear() + LWAV.SelectedIndex = C36to10(C10to36(Notes(xI1).Value \ 10000)) - 1 + ValidateWAVListView() + + Else + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + + Me.RedoRemoveNote(Notes(xI1), xUndo, xRedo) + RemoveNote(xI1) + + AddUndo(xUndo, xRedo) + RefreshPanelAll() + End If + + Exit For + End If + Next + + CalculateTotalPlayableNotes() + End If + End Sub + + Private Function GetClickedNote(e As MouseEventArgs, xHS As Integer, xVS As Integer, xHeight As Integer) As Integer + Dim NoteIndex As Integer = -1 + For xI1 = UBound(Notes) To 0 Step -1 + 'If mouse is clicking on a K + If MouseInNote(e, xHS, xVS, xHeight, Notes(xI1)) Then + ' found it! + NoteIndex = xI1 + deltaVPosition = CDbl(IIf(NTInput, GetMouseVPosition(False) - Notes(xI1).VPosition, 0)) + + If NTInput And My.Computer.Keyboard.ShiftKeyDown Then + bAdjustUpper = e.Y <= NoteRowToPanelHeight(Notes(xI1).VPosition + Notes(xI1).Length, xVS, xHeight) + bAdjustLength = e.Y >= NoteRowToPanelHeight(Notes(xI1).VPosition, xVS, xHeight) - vo.kHeight Or bAdjustUpper + End If + + Exit For + + End If + Next + + Return NoteIndex + End Function + + Private Sub PanelPreviewNoteIndex(NoteIndex As Integer) + 'Play wav + If ClickStopPreview Then PreviewNote("", True) + 'My.Computer.Audio.Stop() + If NoteIndex > 0 AndAlso PreviewOnClick AndAlso IsColumnSound(Notes(NoteIndex).ColumnIndex) AndAlso Not Notes(NoteIndex).Comment Then + Dim xIW As Integer = CInt(Notes(NoteIndex).Value \ 10000) + If xIW <= 0 Then xIW = 1 + If xIW >= 1296 Then xIW = 1295 + + If Not hWAV(xIW) = "" Then ' AndAlso Path.GetExtension(hWAV(xI2)).ToLower = ".wav" Then + Dim xFileLocation As String = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)).ToString() & "\" & hWAV(xIW) + If Not ClickStopPreview Then PreviewNote("", True) + PreviewNote(xFileLocation, False) + + If AudioLine Then + If wLWAV(xIW).Duration = 0 Then wLWAV(xIW) = LoadDuration(ExcludeFileName(FileName) & "\" & hWAV(xIW)) + TimerPreviewNote.Enabled = True + InternalPlayNotes = New Note() {Notes(NoteIndex)} + InternalPlayTimerStart = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds + InternalPlayTimerEnd = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds + CLng(wLWAV(xIW).Duration * 1000) + End If + End If + End If + End Sub + + Private Sub HandleCurrentModeOnClick(e As MouseEventArgs, xHS As Integer, xVS As Integer, xHeight As Integer, ByRef NoteIndex As Integer) + If TBSelect.Checked Then + OnSelectModeLeftClick(e, NoteIndex, xHeight, xVS) + ElseIf NTInput And TBWrite.Checked Then + TempVPosition = -1 + SelectedColumn = -1 + ShouldDrawTempNote = False + + Dim xVPosition = GetMouseVPosition(gSnap) + + If xVPosition < 0 Or xVPosition >= GetMaxVPosition() Then Exit Sub + + Dim xColumn = GetColumnAtEvent(e, xHS) + + For xI2 As Integer = UBound(Notes) To 1 Step -1 + If Notes(xI2).VPosition = xVPosition And Notes(xI2).ColumnIndex = xColumn Then NoteIndex = xI2 : Exit For + Next + + Dim Hidden As Boolean = ModifierHiddenActive() + + If NoteIndex > 0 Then + ReDim SelectedNotes(0) + SelectedNotes(0) = Notes(NoteIndex) + Notes(NoteIndex).TempIndex = 0 + + 'KMouseDown = xITemp + Notes(NoteIndex).TempMouseDown = True + Notes(NoteIndex).Length = xVPosition - Notes(NoteIndex).VPosition + + 'uVPos = K(xITemp).VPosition + bAdjustUpper = True + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + + + Me.RedoLongNoteModify(SelectedNotes(0), Notes(NoteIndex).VPosition, Notes(NoteIndex).Length, xUndo, xRedo) + AddUndo(xUndo, xRedo) + 'With uNote + ' AddUndo(sCmdKL(.ColumnIndex, .VPosition, .Value, K(xITemp).Length, .Hidden, .Length, True, True), _ + ' sCmdKL(.ColumnIndex, .VPosition, .Value, .Length, .Hidden, K(xITemp).Length, True, True)) + 'End With + + ElseIf IsColumnNumeric(xColumn) Then + + Dim xMessage As String = Strings.Messages.PromptEnterNumeric + If xColumn = niBPM Then xMessage = Strings.Messages.PromptEnterBPM + If xColumn = niSTOP Then xMessage = Strings.Messages.PromptEnterSTOP + If xColumn = niSCROLL Then xMessage = Strings.Messages.PromptEnterSCROLL + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim valstr As String = InputBox(xMessage, Text) + If valstr.StartsWith("-c ") Then ' Input comment notes + If valstr = "-c " Then valstr &= " " + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + Next + Dim valstrcomment As String = Mid(valstr, 4) + AddCommentLine(valstrcomment) + + Dim n = New Note(xColumn, xVPosition, hCOMNum * 10000, 0, Hidden,,,, True) + RedoAddNote(n, xUndo, xRedo) + + AddNote(n) + AddUndo(xUndo, xBaseRedo.Next) + Else + Dim valstrDbl As Double + If Double.TryParse(valstr, valstrDbl) Then + Dim PromptValue As Long = CLng(valstrDbl * 10000) + If (xColumn = niSCROLL And valstr = "0") Or PromptValue <> 0 Then ' Input normal notes + If xColumn <> niSCROLL And PromptValue <= 0 Then PromptValue = 1 + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + Next + + Dim n = New Note(xColumn, xVPosition, PromptValue, 0, Hidden) + RedoAddNote(n, xUndo, xRedo) + + AddNote(n) + AddUndo(xUndo, xBaseRedo.Next) + End If + End If + End If + + ShouldDrawTempNote = True + + ElseIf IsColumnSound(xColumn) Then + Dim xLbl As Integer = (LWAV.SelectedIndex + 1) * 10000 + + Dim Landmine As Boolean = ModifierLandmineActive() + + ReDim Preserve Notes(UBound(Notes) + 1) + With Notes(UBound(Notes)) + .VPosition = xVPosition + .ColumnIndex = xColumn + .Value = xLbl + .Hidden = Hidden + .Landmine = Landmine + .TempMouseDown = True + End With + + ReDim SelectedNotes(0) + SelectedNotes(0) = Notes(UBound(Notes)) + SelectedNotes(0).LNPair = -1 + + If TBWavIncrease.Checked Then + IncreaseCurrentWAV() + End If + + 'KMouseDown = 1 + + 'uNote.Value = 0 + 'uVPos = xVPosition + uAdded = False + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + RedoAddNote(Notes(UBound(Notes)), xUndo, xRedo, TBWavIncrease.Checked) + AddUndo(xUndo, xRedo) + + Else ' Column is image + Dim xLbl As Integer = (LBMP.SelectedIndex + 1) * 10000 + + ReDim Preserve Notes(UBound(Notes) + 1) + With Notes(UBound(Notes)) + .VPosition = xVPosition + .ColumnIndex = xColumn + .Value = xLbl + .Hidden = False + .Landmine = False + .TempMouseDown = True + End With + + ReDim SelectedNotes(0) + SelectedNotes(0) = Notes(UBound(Notes)) + SelectedNotes(0).LNPair = -1 + + ' If TBWavIncrease.Checked Then + ' IncreaseCurrentWAV() + ' End If + uAdded = False + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + RedoAddNote(Notes(UBound(Notes)), xUndo, xRedo, False) + AddUndo(xUndo, xRedo) + End If + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + + ElseIf TBTimeSelect.Checked Then + + Dim xL1 As Double + If NoteIndex >= 0 Then xL1 = Notes(NoteIndex).VPosition _ + Else xL1 = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight + + vSelAdjust = ModifierLongNoteActive() + + vSelMouseOverLine = 0 + If Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xHeight)) <= vo.PEDeltaMouseOver Then + vSelMouseOverLine = 3 + ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xHeight)) <= vo.PEDeltaMouseOver Then + vSelMouseOverLine = 2 + ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart, xVS, xHeight)) <= vo.PEDeltaMouseOver Then + vSelMouseOverLine = 1 + End If + + If Not vSelAdjust Then + If vSelMouseOverLine = 1 Then + If gSnap And NoteIndex <= 0 Then xL1 = SnapToGrid(xL1) + vSelLength += vSelStart - xL1 + vSelHalf += vSelStart - xL1 + vSelStart = xL1 + + ElseIf vSelMouseOverLine = 2 Then + vSelHalf = xL1 + If gSnap And NoteIndex <= 0 Then vSelHalf = SnapToGrid(vSelHalf) + vSelHalf -= vSelStart + + ElseIf vSelMouseOverLine = 3 Then + vSelLength = xL1 + If gSnap And NoteIndex <= 0 Then vSelLength = SnapToGrid(vSelLength) + vSelLength -= vSelStart + + Else + vSelLength = 0 + vSelStart = xL1 + If gSnap And NoteIndex <= 0 Then vSelStart = SnapToGrid(vSelStart) + End If + ValidateSelection() + + Else + If vSelMouseOverLine = 2 Then + SortByVPositionInsertion() + vSelPStart = vSelStart + vSelPLength = vSelLength + vSelPHalf = vSelHalf + vSelK = Notes + ReDim Preserve vSelK(UBound(vSelK)) + + If gSnap And NoteIndex <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) + AddUndo(New UndoRedo.Void, New UndoRedo.Void) + BPMChangeHalf(xL1 - vSelHalf - vSelStart, , True) + SortByVPositionInsertion() + UpdatePairing() + CalculateGreatestVPosition() + + ElseIf vSelMouseOverLine = 3 Or vSelMouseOverLine = 1 Then + SortByVPositionInsertion() + vSelPStart = vSelStart + vSelPLength = vSelLength + vSelPHalf = vSelHalf + vSelK = Notes + ReDim Preserve vSelK(UBound(vSelK)) + + If gSnap And NoteIndex <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) + AddUndo(New UndoRedo.Void, New UndoRedo.Void) + BPMChangeTop(CDbl(IIf(vSelMouseOverLine = 3, xL1 - vSelStart, vSelStart + vSelLength - xL1)) / vSelLength, , True) + SortByVPositionInsertion() + UpdatePairing() + CalculateGreatestVPosition() + + Else + vSelLength = xL1 + If gSnap And NoteIndex <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) + vSelLength -= vSelStart + End If + + End If + + If vSelLength > 0 Then + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + If NTInput Then + For xI2 As Integer = 1 To UBound(Notes) + Notes(xI2).Selected = Not Notes(xI2).VPosition >= xVUpper And Not Notes(xI2).VPosition + Notes(xI2).Length < xVLower And nEnabled(Notes(xI2).ColumnIndex) + Next + Else + For xI2 As Integer = 1 To UBound(Notes) + Notes(xI2).Selected = Notes(xI2).VPosition >= xVLower And Notes(xI2).VPosition < xVUpper And nEnabled(Notes(xI2).ColumnIndex) + Next + End If + Else + For xI2 As Integer = 1 To UBound(Notes) + Notes(xI2).Selected = False + Next + End If + + End If + End Sub + + Private Sub OnSelectModeLeftClick(e As MouseEventArgs, NoteIndex As Integer, xTHeight As Integer, xVS As Integer) + If NoteIndex >= 0 And e.Clicks = 2 Then + DoubleClickNoteIndex(NoteIndex) + ElseIf NoteIndex > 0 Then + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + + 'KMouseDown = xITemp + Notes(NoteIndex).TempMouseDown = True + + If ModifierCtrlOnlyActive() Then + 'If Not K(xITemp).Selected Then K(xITemp).Selected = True + ctrlPressed = True + + ElseIf ModifierMultiselectVisibleActive() Then + For xI1 = 0 To UBound(Notes) + If IsNoteVisible(xI1, xTHeight, xVS) AndAlso IsLabelMatch(Notes(xI1), NoteIndex) Then Notes(xI1).Selected = Not Notes(xI1).Selected + Next + ElseIf ModifierMultiselectNoteActive() Then + For xI1 = 0 To UBound(Notes) + If IsLabelMatch(Notes(xI1), NoteIndex) AndAlso IsColumnSound(Notes(xI1).ColumnIndex) Then Notes(xI1).Selected = Not Notes(xI1).Selected + Next + Else + ' az description: If the clicked note is not selected, select only this one. + 'Otherwise, we clicked an already selected note + 'and we should rebuild the selected note array. + If Not Notes(NoteIndex).Selected Then + For xI1 = 0 To UBound(Notes) + If Notes(xI1).Selected Then Notes(xI1).Selected = False + Next + Notes(NoteIndex).Selected = True + End If + + Dim SelectedCount As Integer = 0 + For xI1 = 0 To UBound(Notes) + If Notes(xI1).Selected Then SelectedCount += 1 + Next + + ' adjustsingle if selectedcount is 1 + bAdjustSingle = SelectedCount = 1 + + ReDim SelectedNotes(SelectedCount) + SelectedNotes(0) = Notes(NoteIndex) + Notes(NoteIndex).TempIndex = 0 + Dim idx = 1 + + ' Add already selected notes including this one + For xI1 = 1 To NoteIndex - 1 + If Notes(xI1).Selected Then + Notes(xI1).TempIndex = idx + SelectedNotes(idx) = Notes(xI1) + idx += 1 + End If + Next + For xI1 = NoteIndex + 1 To UBound(Notes) + If Notes(xI1).Selected Then + Notes(xI1).TempIndex = idx + SelectedNotes(idx) = Notes(xI1) + idx += 1 + End If + Next + + 'uCol = RealColumnToEnabled(K(xITemp).ColumnIndex) + 'uVPos = K(xITemp).VPosition + 'uNote = K(xITemp) + uAdded = False + + End If + + Else + ReDim SelectedNotes(-1) + LastMouseDownLocation = e.Location + If Not My.Computer.Keyboard.CtrlKeyDown Then + For xI1 = 0 To UBound(Notes) + Notes(xI1).Selected = False + Notes(xI1).TempSelected = False + Next + Else + For xI1 = 0 To UBound(Notes) + Notes(xI1).TempSelected = Notes(xI1).Selected + Next + End If + End If + End Sub + + ' Handles a double click on a note in select mode. + Private Sub DoubleClickNoteIndex(NoteIndex As Integer) + Dim Note As Note = Notes(NoteIndex) + Dim NoteColumn As Integer = Note.ColumnIndex + + ' Switch ghost mode if ghost mode = 1 or 2 and double clicked on ghost note + If GhostMode = 1 AndAlso Note.Ghost Then SwapGhostNotes() : GhostMode = 2 : Exit Sub + If GhostMode = 2 AndAlso Note.Ghost Then SwapGhostNotes() : GhostMode = 1 : Exit Sub + If Note.Ghost Then MsgBox("To modify ghost notes, please select only one section from the expansion code.") : Exit Sub + + If Note.Comment Then + ' Edit comment + Dim xMessage As String = Strings.Messages.PromptEnter + Dim valstr As String = InputBox(xMessage, Text, hCOM(CInt(Note.Value / 10000))) + If valstr = "" Then valstr = " " + ' Replace comment + hCOM(CInt(Note.Value / 10000)) = valstr + ElseIf IsColumnNumeric(NoteColumn) Then + 'BPM/Stop prompt + Dim xMessage As String = Strings.Messages.PromptEnterNumeric + If NoteColumn = niBPM Then xMessage = Strings.Messages.PromptEnterBPM + If NoteColumn = niSTOP Then xMessage = Strings.Messages.PromptEnterSTOP + If NoteColumn = niSCROLL Then xMessage = Strings.Messages.PromptEnterSCROLL + + Dim valstr As String = InputBox(xMessage, Me.Text) + Dim valstrDbl As Double + If Double.TryParse(valstr, valstrDbl) Then + Dim PromptValue As Long = CLng(valstrDbl * 10000) + If (NoteColumn = niSCROLL And valstr = "0") Or PromptValue <> 0 Then + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + RedoRelabelNote(Note, PromptValue, xUndo, xRedo) + If NoteIndex = 0 Then + THBPM.Value = CDec(PromptValue / 10000) + Else + Notes(NoteIndex).Value = PromptValue + End If + AddUndo(xUndo, xRedo) + End If + End If + Else + 'Label prompt + Dim xStr As String = UCase(Trim(InputBox(Strings.Messages.PromptEnter, Me.Text))) + + If Len(xStr) = 0 Then Return + + If IsBase36(xStr) And Not (xStr = "00" Or xStr = "0") Then + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + RedoRelabelNote(Note, C36to10(xStr) * 10000, xUndo, xRedo) + Notes(NoteIndex).Value = C36to10(xStr) * 10000 + AddUndo(xUndo, xRedo) + Return + Else + MsgBox(Strings.Messages.InvalidLabel, MsgBoxStyle.Critical, Strings.Messages.Err) + End If + + End If + End Sub + + Private Function MouseInNote(e As MouseEventArgs, xHS As Integer, xVS As Integer, xHeight As Integer, note As Note) As Boolean + Return e.X >= HorizontalPositiontoDisplay(nLeft(note.ColumnIndex), xHS) + 1 And + e.X <= HorizontalPositiontoDisplay(nLeft(note.ColumnIndex) + GetColumnWidth(note.ColumnIndex), xHS) - 1 And + e.Y >= NoteRowToPanelHeight(note.VPosition + CDbl(IIf(NTInput, note.Length, 0)), xVS, xHeight) - vo.kHeight And + e.Y <= NoteRowToPanelHeight(note.VPosition, xVS, xHeight) + End Function + + Private Sub PMainInMouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.MouseEnter, PMainInL.MouseEnter, PMainInR.MouseEnter + Dim PanelS As Panel = CType(sender, Panel) + spMouseOver = CInt(PanelS.Tag) + If AutoFocusMouseEnter AndAlso Me.Focused Then PanelS.Focus() : PanelFocus = spMouseOver + If FirstMouseEnter Then FirstMouseEnter = False : PanelS.Focus() : PanelFocus = spMouseOver + End Sub + + Private Sub PMainInMouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PMainIn.MouseLeave, PMainInL.MouseLeave, PMainInR.MouseLeave + KMouseOver = -1 + 'KMouseDown = -1 + ReDim SelectedNotes(-1) + TempVPosition = -1 + SelectedColumn = -1 + RefreshPanelAll() + End Sub + + Private Sub PMainInMouseMove(ByVal sender As Panel) + Dim p As Point = sender.PointToClient(Cursor.Position) + PMainInMouseMove(sender, New MouseEventArgs(MouseButtons.None, 0, p.X, p.Y, 0)) + End Sub + + Private Sub PMainInMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PMainIn.MouseMove, PMainInL.MouseMove, PMainInR.MouseMove + MouseMoveStatus = e.Location + + Dim PanelS As Panel = CType(sender, Panel) + Dim iI As Integer = CInt(PanelS.Tag) + + Dim xHS As Integer = PanelHScroll(iI) + Dim xVS As Integer = CInt(PanelVScroll(iI)) + Dim xHeight As Integer = spMain(iI).Height + Dim xWidth As Integer = spMain(iI).Width + + Select Case e.Button + Case MouseButtons.None + 'If K Is Nothing Then Exit Select + If MiddleButtonClicked Then Exit Select + + If isFullScreen Then + If e.Y < 5 Then ToolStripContainer1.TopToolStripPanelVisible = True Else ToolStripContainer1.TopToolStripPanelVisible = False + End If + + Dim xMouseRemainInSameRegion As Boolean = False + + Dim noteIndex As Integer + Dim foundNoteIndex As Integer = -1 + For noteIndex = UBound(Notes) To 0 Step -1 + If MouseInNote(e, xHS, xVS, xHeight, Notes(noteIndex)) Then + foundNoteIndex = noteIndex + + xMouseRemainInSameRegion = foundNoteIndex = KMouseOver + If NTInput Then + Dim vy = NoteRowToPanelHeight(Notes(noteIndex).VPosition + Notes(noteIndex).Length, + xVS, xHeight) + + Dim xbAdjustUpper As Boolean = (e.Y <= vy) And ModifierLongNoteActive() + Dim xbAdjustLength As Boolean = (e.Y >= vy - vo.kHeight Or xbAdjustUpper) And ModifierLongNoteActive() + xMouseRemainInSameRegion = xMouseRemainInSameRegion And xbAdjustUpper = bAdjustUpper And xbAdjustLength = bAdjustLength + bAdjustUpper = xbAdjustUpper + bAdjustLength = xbAdjustLength + End If + + Exit For + End If + Next + + Dim xTempbTimeSelectionMode As Boolean = TBTimeSelect.Checked + + If TBSelect.Checked Or xTempbTimeSelectionMode Then + + If xMouseRemainInSameRegion Then Exit Select + If KMouseOver >= 0 Then KMouseOver = -1 + + If xTempbTimeSelectionMode Then + + Dim xMouseOverLine As Integer = vSelMouseOverLine + vSelMouseOverLine = 0 + + If Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelLength, xVS, xHeight)) <= vo.PEDeltaMouseOver Then + vSelMouseOverLine = 3 + ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart + vSelHalf, xVS, xHeight)) <= vo.PEDeltaMouseOver Then + vSelMouseOverLine = 2 + ElseIf Math.Abs(e.Y - NoteRowToPanelHeight(vSelStart, xVS, xHeight)) <= vo.PEDeltaMouseOver Then + vSelMouseOverLine = 1 + End If + + End If + + ' draw green highlight + If foundNoteIndex > -1 Then + DrawNoteHoverHighlight(iI, xHS, xVS, xHeight, foundNoteIndex) + End If + + KMouseOver = foundNoteIndex + + ElseIf TBWrite.Checked Then + TempVPosition = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight 'VPosition of the mouse + If gSnap Then TempVPosition = SnapToGrid(TempVPosition) + + SelectedColumn = GetColumnAtEvent(e, xHS) 'get the enabled column where mouse is + + TempLength = 0 + If foundNoteIndex > -1 Then TempLength = Notes(foundNoteIndex).Length + + RefreshPanelAll() + End If + + Case MouseButtons.Left + If tempFirstMouseDown And Not TBTimeSelect.Checked Then Exit Select + + tempX = 0 + tempY = 0 + If e.X < 0 Or e.X > xWidth Or e.Y < 0 Or e.Y > xHeight Then + If e.X < 0 Then tempX = e.X + If e.X > xWidth Then tempX = e.X - xWidth + If e.Y < 0 Then tempY = e.Y + If e.Y > xHeight Then tempY = e.Y - xHeight + Timer1.Enabled = True + Else + Timer1.Enabled = False + End If + + If TBSelect.Checked Then + + pMouseMove = e.Location + + 'If K Is Nothing Then RefreshPanelAll() : Exit Select + + If Not LastMouseDownLocation = New Point(-1, -1) Then + UpdateSelectionBox(xHS, xVS, xHeight) + + 'ElseIf Not KMouseDown = -1 Then + ' Click and drag notes + ElseIf SelectedNotes.Length <> 0 Then + UpdateSelectedNotes(xHeight, xVS, xHS, e) + + ElseIf ctrlPressed Then + OnDuplicateSelectedNotes(xHeight, xVS, xHS, e) + End If + + ElseIf TBWrite.Checked Then + + If NTInput Then + OnWriteModeMouseMove(xHeight, xVS, e) + + Else + TempVPosition = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight 'VPosition of the mouse + If gSnap Then TempVPosition = SnapToGrid(TempVPosition) + SelectedColumn = GetColumnAtEvent(e, xHS) 'get the enabled column where mouse is + + End If + + ElseIf TBTimeSelect.Checked Then + OnTimeSelectClick(xHeight, xHS, xVS, e) + End If + + Case MouseButtons.Middle + OnPanelMousePan(e) + End Select + Dim col = GetColumnAtEvent(e, xHS) + Dim vps = GetMouseVPosition(gSnap) + If vps <> lastVPos Or col <> lastColumn Then ' Or MouseMoveStatus <> LastMouseDownLocation + lastVPos = vps + lastColumn = col + POStatusRefresh() + RefreshPanelAll() 'az: refreshing the line is important now... + End If + + End Sub + + Dim lastVPos As Double = -1 + Dim lastColumn As Integer = -1 + + Private Sub UpdateSelectedNotes(xHeight As Integer, xVS As Integer, xHS As Integer, e As MouseEventArgs) + Dim mouseVPosition As Double + + Dim xITemp As Integer + For xI1 = 1 To UBound(Notes) + If Notes(xI1).TempMouseDown Then xITemp = xI1 : Exit For + Next + + mouseVPosition = GetMouseVPosition(gSnap) + + If bAdjustLength And bAdjustSingle Then + If bAdjustUpper AndAlso mouseVPosition < Notes(xITemp).VPosition Then + bAdjustUpper = False + Notes(xITemp).VPosition += Notes(xITemp).Length + Notes(xITemp).Length *= -1 + ElseIf Not bAdjustUpper AndAlso mouseVPosition > Notes(xITemp).VPosition + Notes(xITemp).Length Then + bAdjustUpper = True + Notes(xITemp).VPosition += Notes(xITemp).Length + Notes(xITemp).Length *= -1 + End If + End If + + ' + Dim foundNoteIndex As Integer = -1 + For noteIndex = 1 To UBound(Notes) + If MouseInNote(e, xHS, xVS, xHeight, Notes(noteIndex)) Then + foundNoteIndex = noteIndex + Exit For + End If + Next + + 'If moving + If Not bAdjustLength Then + OnSelectModeMoveNotes(e, xHS, xITemp) + + ElseIf bAdjustUpper Then 'If adjusting upper end + Dim dVPosition = mouseVPosition - Notes(xITemp).VPosition - Notes(xITemp).Length 'delta Length + '< 0 means shorten, > 0 means lengthen + If foundNoteIndex > -1 AndAlso foundNoteIndex <> xITemp Then dVPosition = Notes(foundNoteIndex).VPosition - Notes(xITemp).VPosition - Notes(xITemp).Length + + OnAdjustUpperEnd(dVPosition) + + Else 'If adjusting lower end + Dim dVPosition = mouseVPosition - Notes(xITemp).VPosition 'delta VPosition + '> 0 means shorten, < 0 means lengthen + If foundNoteIndex > -1 AndAlso foundNoteIndex <> xITemp Then dVPosition = Notes(foundNoteIndex).VPosition - Notes(xITemp).VPosition + + OnAdjustLowerEnd(dVPosition) + End If + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + 'Label1.Text = KInfo(KMouseDown) + End Sub + + Private Sub OnPanelMousePan(e As MouseEventArgs) + If MiddleButtonMoveMethod = 1 Then + Dim xI1 As Integer = CInt(tempV + (tempY - e.Y) / gxHeight) + Dim xI2 As Integer = CInt(tempH + (tempX - e.X) / gxWidth) + If xI1 > 0 Then xI1 = 0 + If xI2 < 0 Then xI2 = 0 + + Select Case PanelFocus + Case 0 + If xI1 < LeftPanelScroll.Minimum Then xI1 = LeftPanelScroll.Minimum + LeftPanelScroll.Value = xI1 + + If xI2 > HSL.Maximum - HSL.LargeChange + 1 Then xI2 = HSL.Maximum - HSL.LargeChange + 1 + HSL.Value = xI2 + + Case 1 + If xI1 < MainPanelScroll.Minimum Then xI1 = MainPanelScroll.Minimum + MainPanelScroll.Value = xI1 + + If xI2 > HS.Maximum - HS.LargeChange + 1 Then xI2 = HS.Maximum - HS.LargeChange + 1 + HS.Value = xI2 + + Case 2 + If xI1 < RightPanelScroll.Minimum Then xI1 = RightPanelScroll.Minimum + RightPanelScroll.Value = xI1 + + If xI2 > HSR.Maximum - HSR.LargeChange + 1 Then xI2 = HSR.Maximum - HSR.LargeChange + 1 + HSR.Value = xI2 + + End Select + End If + End Sub + + Private Sub OnTimeSelectClick(xHeight As Integer, xHS As Integer, xVS As Integer, e As MouseEventArgs) + Dim xI1 As Integer + Dim xITemp As Integer = -1 + If Notes IsNot Nothing Then + For xI1 = UBound(Notes) To 0 Step -1 ' az: MouseInNote implied, but I'm not sure yet + If MouseInNote(e, xHS, xVS, xHeight, Notes(xI1)) Then + xITemp = xI1 + Exit For + End If + Next + End If + + If Not vSelAdjust Then + If vSelMouseOverLine = 1 Then + Dim xV As Double = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight + If xITemp >= 0 Then xV = Notes(xITemp).VPosition + If gSnap And xITemp <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then xV = SnapToGrid(xV) + vSelLength += vSelStart - xV + vSelHalf += vSelStart - xV + vSelStart = xV + + ElseIf vSelMouseOverLine = 2 Then + vSelHalf = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight + If xITemp >= 0 Then vSelHalf = Notes(xITemp).VPosition + If gSnap And xITemp <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then vSelHalf = SnapToGrid(vSelHalf) + vSelHalf -= vSelStart + + ElseIf vSelMouseOverLine = 3 Then + vSelLength = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight + If xITemp >= 0 Then vSelLength = Notes(xITemp).VPosition + If gSnap And xITemp <= 0 And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) + vSelLength -= vSelStart + + Else + If xITemp >= 0 Then + vSelLength = Notes(xITemp).VPosition + Else + vSelLength = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight + If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) + End If + vSelLength -= vSelStart + vSelHalf = vSelLength / 2 + End If + ValidateSelection() + + Else + Dim xL1 As Double = (xHeight - xVS * gxHeight - e.Y - 1) / gxHeight + + If vSelMouseOverLine = 2 Then + vSelStart = vSelPStart + vSelLength = vSelPLength + vSelHalf = vSelPHalf + Notes = vSelK + ReDim Preserve Notes(UBound(Notes)) + + If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) + BPMChangeHalf(xL1 - vSelHalf - vSelStart, , True) + SortByVPositionInsertion() + UpdatePairing() + CalculateGreatestVPosition() + + ElseIf vSelMouseOverLine = 3 Or vSelMouseOverLine = 1 Then + vSelStart = vSelPStart + vSelLength = vSelPLength + vSelHalf = vSelPHalf + Notes = vSelK + ReDim Preserve Notes(UBound(Notes)) + + If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then xL1 = SnapToGrid(xL1) + BPMChangeTop(CDbl(IIf(vSelMouseOverLine = 3, xL1 - vSelStart, vSelStart + vSelLength - xL1)) / vSelLength, , True) + SortByVPositionInsertion() + UpdatePairing() + CalculateGreatestVPosition() + + Else + vSelLength = xL1 + If gSnap And Not My.Computer.Keyboard.CtrlKeyDown Then vSelLength = SnapToGrid(vSelLength) + If xITemp >= 0 Then vSelLength = Notes(xITemp).VPosition + vSelLength -= vSelStart + ValidateSelection() + End If + End If + + If vSelLength > 0 Then + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + If NTInput Then + For xI2 As Integer = 1 To UBound(Notes) + Notes(xI2).Selected = Notes(xI2).VPosition < xVUpper And Notes(xI2).VPosition + Notes(xI2).Length >= xVLower And nEnabled(Notes(xI2).ColumnIndex) + Next + Else + For xI2 As Integer = 1 To UBound(Notes) + Notes(xI2).Selected = Notes(xI2).VPosition >= xVLower And Notes(xI2).VPosition < xVUpper And nEnabled(Notes(xI2).ColumnIndex) + Next + End If + Else + For xI2 As Integer = 1 To UBound(Notes) + Notes(xI2).Selected = False + Next + End If + + End Sub + + Private Sub OnAdjustUpperEnd(dVPosition As Double) + Dim minLength As Double = 0 + Dim maxHeight As Double = 191999 + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + If Notes(xI1).Length + dVPosition < minLength Then minLength = Notes(xI1).Length + dVPosition + If Notes(xI1).Length + Notes(xI1).VPosition + dVPosition > maxHeight Then maxHeight = Notes(xI1).Length + Notes(xI1).VPosition + dVPosition + Next + maxHeight -= 191999 + + 'declare undo variables + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + 'start moving + Dim xLen As Double + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xLen = Notes(xI1).Length + dVPosition - minLength - maxHeight + RedoLongNoteModify(SelectedNotes(Notes(xI1).TempIndex), Notes(xI1).VPosition, xLen, xUndo, xRedo) + + Notes(xI1).Length = xLen + Next + + 'Add undo + If dVPosition - minLength - maxHeight <> 0 Then + AddUndo(xUndo, xBaseRedo.Next, uAdded) + If Not uAdded Then uAdded = True + End If + End Sub + + + Private Sub OnAdjustLowerEnd(dVPosition As Double) + Dim xI1 As Integer + Dim minLength As Double = 0 + Dim minVPosition As Double = 0 + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected AndAlso Notes(xI1).Length - dVPosition < minLength Then + minLength = Notes(xI1).Length - dVPosition + End If + If Notes(xI1).Selected AndAlso Notes(xI1).VPosition + dVPosition < minVPosition Then + minVPosition = Notes(xI1).VPosition + dVPosition + End If + Next + + 'declare undo variables + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + 'start moving + Dim xVPos As Double + Dim xLen As Double + For xI1 = 0 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xVPos = Notes(xI1).VPosition + dVPosition + minLength - minVPosition + xLen = Notes(xI1).Length - dVPosition - minLength + minVPosition + Me.RedoLongNoteModify(SelectedNotes(Notes(xI1).TempIndex), xVPos, xLen, xUndo, xRedo) + + Notes(xI1).VPosition = xVPos + Notes(xI1).Length = xLen + Next + + 'Add undo + If dVPosition + minLength - minVPosition <> 0 Then + AddUndo(xUndo, xBaseRedo.Next, uAdded) + If Not uAdded Then uAdded = True + End If + End Sub + + Private Sub OnDuplicateSelectedNotes(xHeight As Integer, xVS As Integer, xHS As Integer, e As MouseEventArgs) + Dim tempNoteIndex As Integer + For tempNoteIndex = 1 To UBound(Notes) + If Notes(tempNoteIndex).TempMouseDown Then Exit For + Next + + Dim mouseVPosition = GetMouseVPosition(gSnap) + If DisableVerticalMove Then mouseVPosition = Notes(tempNoteIndex).VPosition + + Dim dVPosition As Double = mouseVPosition - Notes(tempNoteIndex).VPosition 'delta VPosition + + Dim currCol = ColumnArrayIndexToEnabledColumnIndex(GetColumnAtEvent(e, xHS)) + Dim noteCol = ColumnArrayIndexToEnabledColumnIndex(Notes(tempNoteIndex).ColumnIndex) + Dim colChange As Integer = currCol - noteCol 'delta Column + + 'Ks cannot be beyond the left, the upper and the lower boundary + Dim dstColumn As Integer = 0 + Dim mVPosition As Double = 0 + Dim muVPosition As Double = 191999 + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + If ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + colChange < dstColumn Then _ + dstColumn = ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + colChange + + If Notes(xI1).VPosition + dVPosition < mVPosition Then _ + mVPosition = Notes(xI1).VPosition + dVPosition + + Dim NTLength As Double = CDbl(IIf(NTInput, Notes(xI1).Length, 0)) + If Notes(xI1).VPosition + NTLength + dVPosition > muVPosition Then _ + muVPosition = Notes(xI1).VPosition + NTLength + dVPosition + + Next + muVPosition -= 191999 + + 'If not moving then exit + If (Not DuplicatedSelectedNotes) And colChange - dstColumn = 0 And dVPosition - mVPosition - muVPosition = 0 Then _ + Return + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + If Not DuplicatedSelectedNotes Then 'If uAdded = False + DuplicateSelectedNotes(tempNoteIndex, dVPosition, colChange, dstColumn, mVPosition, muVPosition) + DuplicatedSelectedNotes = True + + Else + For i As Integer = 1 To UBound(Notes) + If Not Notes(i).Selected Then Continue For + + Notes(i).ColumnIndex = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(i).ColumnIndex) + colChange - dstColumn) + Notes(i).VPosition = Notes(i).VPosition + dVPosition - mVPosition - muVPosition + Me.RedoAddNote(Notes(i), xUndo, xRedo) + Next + + AddUndo(xUndo, xBaseRedo.Next, True) + End If + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + End Sub + + + Private Sub OnWriteModeMouseMove(xHeight As Integer, xVS As Integer, e As MouseEventArgs) + 'If Not KMouseDown = -1 Then + If SelectedNotes.Length <> 0 Then + + Dim xI1 As Integer + Dim xITemp As Integer + For xI1 = 1 To UBound(Notes) + If Notes(xI1).TempMouseDown Then xITemp = xI1 : Exit For + Next + + Dim mouseVPosition = GetMouseVPosition(gSnap) + + With Notes(xITemp) + If bAdjustUpper AndAlso mouseVPosition < .VPosition Then + bAdjustUpper = False + .VPosition += .Length + .Length *= -1 + ElseIf Not bAdjustUpper AndAlso mouseVPosition > .VPosition + .Length Then + bAdjustUpper = True + .VPosition += .Length + .Length *= -1 + End If + + If bAdjustUpper Then + .Length = mouseVPosition - .VPosition + Else + .Length = .VPosition + .Length - mouseVPosition + .VPosition = mouseVPosition + End If + + If .VPosition < 0 Then .Length += .VPosition : .VPosition = 0 + If .VPosition + .Length >= GetMaxVPosition() Then .Length = GetMaxVPosition() - 1 - .VPosition + + If SelectedNotes(0).LNPair = -1 Then 'If new note + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + Me.RedoAddNote(Notes(xITemp), xUndo, xRedo) + AddUndo(xUndo, xRedo, True) + + Else 'If existing note + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = Nothing + Me.RedoLongNoteModify(SelectedNotes(0), .VPosition, .Length, xUndo, xRedo) + AddUndo(xUndo, xRedo, True) + End If + + SelectedColumn = .ColumnIndex + TempVPosition = mouseVPosition + TempLength = .Length + + End With + + SortByVPositionInsertion() + UpdatePairing() + CalculateTotalPlayableNotes() + + End If + End Sub + + Private Sub OnSelectModeMoveNotes(e As MouseEventArgs, xHS As Integer, xITemp As Integer) + If Notes(xITemp).Ghost Then Exit Sub + Dim mouseVPosition = GetMouseVPosition(gSnap) + If DisableVerticalMove Then mouseVPosition = SelectedNotes(0).VPosition + Dim dVPosition = mouseVPosition - Notes(xITemp).VPosition 'delta VPosition + + Dim mouseColumn As Integer + Dim xI1 = 0 + Dim mLeft As Integer = CInt(e.X / gxWidth + xHS) 'horizontal position of the mouse + If mLeft >= 0 Then + Do + If mLeft < nLeft(xI1 + 1) Or xI1 >= gColumns Then mouseColumn = ColumnArrayIndexToEnabledColumnIndex(xI1) : Exit Do 'get the column where mouse is + xI1 += 1 + Loop + End If + + Dim dColumn = mouseColumn - ColumnArrayIndexToEnabledColumnIndex(Notes(xITemp).ColumnIndex) 'get the enabled delta column where mouse is + + 'Ks cannot be beyond the left, the upper and the lower boundary + mLeft = 0 + Dim mVPosition As Double = 0 + Dim muVPosition As Double = 191999 + For xI1 = 1 To UBound(Notes) + If Notes(xI1).Selected Then + mLeft = CInt(IIf(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + dColumn < mLeft, + ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + dColumn, + mLeft)) + mVPosition = CDbl(IIf(Notes(xI1).VPosition + dVPosition < mVPosition, + Notes(xI1).VPosition + dVPosition, + mVPosition)) + Dim NTLength As Double = CDbl(IIf(NTInput, Notes(xI1).Length, 0)) + muVPosition = CDbl(IIf(Notes(xI1).VPosition + NTLength + dVPosition > muVPosition, + Notes(xI1).VPosition + NTLength + dVPosition, + muVPosition)) + End If + Next + muVPosition -= 191999 + + Dim xCol As Integer + Dim xVPos As Double + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + 'start moving + For xI1 = 1 To UBound(Notes) + If Not Notes(xI1).Selected Or Notes(xI1).Ghost Then Continue For + + xCol = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(xI1).ColumnIndex) + dColumn - mLeft) + xVPos = Notes(xI1).VPosition + dVPosition - mVPosition - muVPosition + Me.RedoMoveNote(SelectedNotes(Notes(xI1).TempIndex), xCol, xVPos, xUndo, xRedo) + + Notes(xI1).ColumnIndex = xCol + Notes(xI1).VPosition = xVPos + Next + + 'If mouseColumn - uNotes(0).ColumnIndex - mLeft <> 0 Or mouseVPosition - uNotes(0).VPosition - mVPosition - muVPosition <> 0 Then + AddUndo(xUndo, xBaseRedo.Next, uAdded) + If Not uAdded Then uAdded = True + + 'End If + End Sub + + Private Sub UpdateSelectionBox(xHS As Integer, xVS As Integer, xHeight As Integer) + Dim SelectionBox As New Rectangle(CInt(IIf(pMouseMove.X > LastMouseDownLocation.X, LastMouseDownLocation.X, pMouseMove.X)), + CInt(IIf(pMouseMove.Y > LastMouseDownLocation.Y, LastMouseDownLocation.Y, pMouseMove.Y)), + CInt(Math.Abs(pMouseMove.X - LastMouseDownLocation.X)), + CInt(Math.Abs(pMouseMove.Y - LastMouseDownLocation.Y))) + Dim NoteRect As Rectangle + + Dim xI1 As Integer + For xI1 = 1 To UBound(Notes) + Dim NTLength As Double = CDbl(IIf(NTInput, Notes(xI1).Length, 0)) + NoteRect = New Rectangle(HorizontalPositiontoDisplay(nLeft(Notes(xI1).ColumnIndex), xHS) + 1, + NoteRowToPanelHeight(Notes(xI1).VPosition + NTLength, xVS, xHeight) - vo.kHeight, + CInt(GetColumnWidth(Notes(xI1).ColumnIndex) * gxWidth - 2), + vo.kHeight + CInt(NTLength * gxHeight)) + + + If NoteRect.IntersectsWith(SelectionBox) Then + Notes(xI1).Selected = Not Notes(xI1).TempSelected And nEnabled(Notes(xI1).ColumnIndex) + Else + Notes(xI1).Selected = Notes(xI1).TempSelected And nEnabled(Notes(xI1).ColumnIndex) + End If + Next + End Sub + + Private Sub DuplicateSelectedNotes(tempNoteIndex As Integer, dVPosition As Double, dColumn As Integer, mLeft As Integer, mVPosition As Double, muVPosition As Double) + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Notes(tempNoteIndex).Selected = True + + Dim xSelectedNotesCount As Integer = 0 + For i As Integer = 1 To UBound(Notes) + If Notes(i).Selected Then xSelectedNotesCount += 1 + Next + + Dim xTempNotes(xSelectedNotesCount - 1) As Note + Dim xI2 As Integer = 0 + For i As Integer = 1 To UBound(Notes) + If Not Notes(i).Selected Then Continue For + + xTempNotes(xI2) = Notes(i) + xTempNotes(xI2).ColumnIndex = EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(Notes(i).ColumnIndex) + dColumn - mLeft) + xTempNotes(xI2).VPosition = Notes(i).VPosition + dVPosition - mVPosition - muVPosition + Me.RedoAddNote(xTempNotes(xI2), xUndo, xRedo) + + Notes(i).Selected = False + xI2 += 1 + Next + Notes(tempNoteIndex).TempMouseDown = False + + 'copy to K + Dim xOrigUBound As Integer = UBound(Notes) + ReDim Preserve Notes(xOrigUBound + xSelectedNotesCount) + xI2 = 0 + For i As Integer = xOrigUBound + 1 To UBound(Notes) + Notes(i) = xTempNotes(xI2) + xI2 += 1 + Next + + AddUndo(xUndo, xBaseRedo.Next) + End Sub + + Private Sub DrawNoteHoverHighlight(iI As Integer, xHS As Integer, xVS As Integer, xHeight As Integer, foundNoteIndex As Integer) + Dim xDispX As Integer = HorizontalPositiontoDisplay(nLeft(Notes(foundNoteIndex).ColumnIndex), xHS) + Dim xDispY As Integer = CInt(IIf(Not NTInput Or (bAdjustLength And Not bAdjustUpper), + NoteRowToPanelHeight(Notes(foundNoteIndex).VPosition, xVS, xHeight) - vo.kHeight - 1, + NoteRowToPanelHeight(Notes(foundNoteIndex).VPosition + Notes(foundNoteIndex).Length, xVS, xHeight) - vo.kHeight - 1)) + Dim xDispW As Integer = CInt(GetColumnWidth(Notes(foundNoteIndex).ColumnIndex) * gxWidth + 1) + Dim xDispH As Integer = CInt(IIf(Not NTInput Or bAdjustLength, + vo.kHeight + 3, + Notes(foundNoteIndex).Length * gxHeight + vo.kHeight + 3)) + + Dim e1 As BufferedGraphics = BufferedGraphicsManager.Current.Allocate(spMain(iI).CreateGraphics, New Rectangle(xDispX, xDispY, xDispW, xDispH)) + e1.Graphics.FillRectangle(vo.Bg, New Rectangle(xDispX, xDispY, xDispW, xDispH)) + + If NTInput Then DrawNoteNT(Notes(foundNoteIndex), e1, xHS, xVS, xHeight) Else DrawNote(Notes(foundNoteIndex), e1, xHS, xVS, xHeight) + + e1.Graphics.DrawRectangle(CType(IIf(bAdjustLength, vo.kMouseOverE, vo.kMouseOver), Pen), xDispX, xDispY, xDispW - 1, xDispH - 1) + + e1.Render(spMain(iI).CreateGraphics) + e1.Dispose() + End Sub + + Private Sub ScrollPanelToNote(xVPos As Double, Optional xLength As Double = 0) + If -PanelVScroll(PanelFocus) > xVPos Then ' If notes are moved lower than the window + PanelVScroll(PanelFocus) = -xVPos + ElseIf -PanelVScroll(PanelFocus) + spMain(PanelFocus).Height / gxHeight * 0.95 < xVPos + xLength Then ' If notes are moved higher than the window + PanelVScroll(PanelFocus) = -xVPos + spMain(PanelFocus).Height / gxHeight * 0.95 - xLength + End If + End Sub + + Private Function GetColumnAtX(x As Integer, xHS As Integer) As Integer + Dim xI1 As Integer = 0 + Dim mLeft As Integer = CInt(x / gxWidth + xHS) 'horizontal position of the mouse + Dim xColumn = 0 + If mLeft >= 0 Then + Do + If mLeft < nLeft(xI1 + 1) Or xI1 >= gColumns Then xColumn = xI1 : Exit Do 'get the column where mouse is + xI1 += 1 + Loop + End If + + Return EnabledColumnIndexToColumnArrayIndex(ColumnArrayIndexToEnabledColumnIndex(xColumn)) 'get the enabled column where mouse is + End Function + + Private Function GetColumnAtEvent(e As MouseEventArgs, xHS As Integer) As Integer + Return GetColumnAtX(e.X, xHS) + End Function + + ' az: Handle zoom in/out. Should work with any of the three splitters. + Private Sub PMain_Scroll(sender As Object, e As MouseEventArgs) Handles PMainIn.MouseWheel, PMainInL.MouseWheel, PMainInR.MouseWheel + + With My.Computer.Keyboard + If .ShiftKeyDown Then + If .CtrlKeyDown Then + If Math.Sign(e.Delta) = -1 Then IncreaseCurrentBMP() Else DecreaseCurrentBMP() + Else + If Math.Sign(e.Delta) = -1 Then IncreaseCurrentWAV() Else DecreaseCurrentWAV() + End If + ElseIf .CtrlKeyDown Then + Dim dv = Math.Round(CGHeight2.Value + e.Delta / 120) + CGHeight2.Value = CInt(Math.Min(CGHeight2.Maximum, Math.Max(CGHeight2.Minimum, dv))) + CGHeight.Value = CDec(CGHeight2.Value / 4) + End If + End With + End Sub + + + Private Sub PMainInMouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PMainIn.MouseUp, PMainInL.MouseUp, PMainInR.MouseUp + tempX = 0 + tempY = 0 + tempV = 0 + tempH = 0 + VSValue = -1 + HSValue = -1 + Timer1.Enabled = False + 'KMouseDown = -1 + + ' Faux Brush Tool for notes + If SelectedNotes.Length = 1 AndAlso IsColumnImage(SelectedNotes(0).ColumnIndex) Then + ' Dim VLen = SelectedNotes(0).Length + ' P: This line above doesn't work so yeah, only way to find it is with the Undo list LOL + Dim VPosStart As Double + Dim VLen As Double + Dim xColumn As Integer + With CType(sRedo(sI), UndoRedo.AddNote).note + VLen = .Length + VPosStart = .VPosition + xColumn = .ColumnIndex + End With + + If VLen <> 0 Then + TBUndo_Click(Nothing, Nothing) + + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + Dim n = New Note(xColumn, VPosStart, (LBMP.SelectedIndices(0) + 1) * 10000, + False, False, True, False) + RedoAddNote(n, xUndo, xRedo) + AddNote(n) + + For xI = 1 To LBMP.SelectedIndices.Count - 1 + n = New Note(xColumn, VPosStart + VLen * xI / (LBMP.SelectedIndices.Count - 1), (LBMP.SelectedIndices(xI) + 1) * 10000, + False, False, True, False) + + RedoAddNote(n, xUndo, xRedo) + AddNote(n) + Next + AddUndo(xUndo, xBaseRedo.Next) + + If Not ShouldDrawTempNote Then ShouldDrawTempNote = True + + CalculateGreatestVPosition() + RefreshPanelAll() + ReDim SelectedNotes(-1) + Exit Sub + End If + End If + + ReDim SelectedNotes(-1) + + Dim PanelS As Panel = CType(sender, Panel) + Dim iI As Integer = CInt(PanelS.Tag) + + If MiddleButtonClicked AndAlso e.Button = Windows.Forms.MouseButtons.Middle AndAlso + (MiddleButtonLocation.X - Cursor.Position.X) ^ 2 + (MiddleButtonLocation.Y - Cursor.Position.Y) ^ 2 >= vo.MiddleDeltaRelease Then + MiddleButtonClicked = False + End If + + If TBSelect.Checked Then + LastMouseDownLocation = New Point(-1, -1) + pMouseMove = New Point(-1, -1) + + If ctrlPressed And Not DuplicatedSelectedNotes And Not ModifierMultiselectVisibleActive() Then + For i As Integer = 1 To UBound(Notes) + If Notes(i).TempMouseDown Then Notes(i).Selected = Not Notes(i).Selected : Exit For + Next + End If + + ctrlPressed = False + DuplicatedSelectedNotes = False + + ElseIf TBWrite.Checked Then + + If Not NTInput And Not tempFirstMouseDown Then + Dim xVPosition As Double + + + xVPosition = (PanelS.Height - PanelVScroll(iI) * gxHeight - e.Y - 1) / gxHeight 'VPosition of the mouse + If gSnap Then xVPosition = SnapToGrid(xVPosition) + + Dim xColumn = GetColumnAtEvent(e, PanelHScroll(iI)) + + If e.Button = Windows.Forms.MouseButtons.Left Then + Dim HiddenNote As Boolean = ModifierHiddenActive() + Dim LongNote As Double = CDbl(IIf(ModifierLongNoteActive(), 1, 0)) + Dim Landmine As Boolean = ModifierLandmineActive() + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo + + If IsColumnNumeric(xColumn) Then + Dim xMessage As String = Strings.Messages.PromptEnterNumeric + If xColumn = niBPM Then xMessage = Strings.Messages.PromptEnterBPM + If xColumn = niSTOP Then xMessage = Strings.Messages.PromptEnterSTOP + If xColumn = niSCROLL Then xMessage = Strings.Messages.PromptEnterSCROLL + + Dim valstr As String = InputBox(xMessage, Me.Text) + If valstr.StartsWith("-c ") Then ' Input comment notes + If valstr = "-c " Then valstr &= " " + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + Next + Dim valstrcomment As String = Mid(valstr, 4) + AddCommentLine(valstrcomment) + + Dim n = New Note(xColumn, xVPosition, hCOMNum * 10000, 0, HiddenNote,,,, True) + RedoAddNote(n, xUndo, xRedo) + + AddNote(n) + AddUndo(xUndo, xBaseRedo.Next) + Else + Dim valstrDbl As Double + If Double.TryParse(valstr, valstrDbl) Then + Dim PromptValue As Long = CLng(valstrDbl * 10000) + + If (xColumn = niSCROLL And valstr = "0") Or PromptValue <> 0 Then + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + Next + + Dim n = New Note(xColumn, xVPosition, PromptValue, LongNote, HiddenNote) + RedoAddNote(n, xUndo, xRedo) + AddNote(n) + + AddUndo(xUndo, xBaseRedo.Next) + End If + End If + End If + + ElseIf IsColumnSound(xColumn) Then + Dim xValue As Integer = (LWAV.SelectedIndex + 1) * 10000 + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + Next + + Dim n = New Note(xColumn, xVPosition, xValue, + LongNote, HiddenNote, True, Landmine) + + RedoAddNote(n, xUndo, xRedo) + AddNote(n) + + AddUndo(xUndo, xRedo) + Else ' Column is image + Dim xValue As Integer = (LBMP.SelectedIndex + 1) * 10000 + + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition = xVPosition AndAlso Notes(xI1).ColumnIndex = xColumn Then _ + RedoRemoveNote(Notes(xI1), xUndo, xRedo) + Next + + Dim n = New Note(xColumn, xVPosition, xValue, + LongNote, False, True, False) + + RedoAddNote(n, xUndo, xRedo) + AddNote(n) + + AddUndo(xUndo, xRedo) + End If + End If + Else + + End If + + If Not ShouldDrawTempNote Then ShouldDrawTempNote = True + TempVPosition = -1 + SelectedColumn = -1 + End If + CalculateGreatestVPosition() + RefreshPanelAll() + End Sub + + Private Sub PMainInMouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PMainIn.MouseWheel, PMainInL.MouseWheel, PMainInR.MouseWheel + If MiddleButtonClicked Then MiddleButtonClicked = False + + Dim xI1 As Integer + + Select Case spMouseOver + Case 0 + 'xI1 = spV(iI) - Math.Sign(e.Delta) * VSL.SmallChange * 5 / gxHeight + xI1 = CInt(PanelVScroll(spMouseOver) - Math.Sign(e.Delta) * gWheel) + If xI1 > 0 Then xI1 = 0 + If xI1 < LeftPanelScroll.Minimum Then xI1 = LeftPanelScroll.Minimum + LeftPanelScroll.Value = xI1 + Case 1 + 'xI1 = spV(iI) - Math.Sign(e.Delta) * VS.SmallChange * 5 / gxHeight + xI1 = CInt(PanelVScroll(spMouseOver) - Math.Sign(e.Delta) * gWheel) + If xI1 > 0 Then xI1 = 0 + If xI1 < MainPanelScroll.Minimum Then xI1 = MainPanelScroll.Minimum + MainPanelScroll.Value = xI1 + Case 2 + 'xI1 = spV(iI) - Math.Sign(e.Delta) * VSR.SmallChange * 5 / gxHeight + xI1 = CInt(PanelVScroll(spMouseOver) - Math.Sign(e.Delta) * gWheel) + If xI1 > 0 Then xI1 = 0 + If xI1 < RightPanelScroll.Minimum Then xI1 = RightPanelScroll.Minimum + RightPanelScroll.Value = xI1 + End Select + End Sub + + Private Sub PMainInPaint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PMainIn.Paint, PMainInL.Paint, PMainInR.Paint + Dim PanelS As Panel = CType(sender, Panel) + RefreshPanel(CInt(PanelS.Tag), e.ClipRectangle) + End Sub +End Class diff --git a/iBMSC/PanelKeyStates.vb b/iBMSC/PanelKeyStates.vb index 740006ec0..3b9e89202 100644 --- a/iBMSC/PanelKeyStates.vb +++ b/iBMSC/PanelKeyStates.vb @@ -1,20 +1,35 @@ Module PanelKeyStates Public Function ModifierLongNoteActive() As Boolean - Return My.Computer.Keyboard.ShiftKeyDown And - Not My.Computer.Keyboard.CtrlKeyDown + With My.Computer.Keyboard + Return .ShiftKeyDown And Not .CtrlKeyDown + End With End Function Public Function ModifierHiddenActive() As Boolean - Return My.Computer.Keyboard.CtrlKeyDown And - Not My.Computer.Keyboard.ShiftKeyDown + With My.Computer.Keyboard + Return .CtrlKeyDown And Not .ShiftKeyDown + End With End Function Public Function ModifierLandmineActive() As Boolean - Return My.Computer.Keyboard.CtrlKeyDown And - My.Computer.Keyboard.ShiftKeyDown + Return ModifierMultiselectVisibleActive() End Function - Public Function ModifierMultiselectActive() As Boolean - Return My.Computer.Keyboard.ShiftKeyDown And My.Computer.Keyboard.CtrlKeyDown + Public Function ModifierMultiselectVisibleActive() As Boolean + With My.Computer.Keyboard + Return .ShiftKeyDown And .CtrlKeyDown + End With + End Function + + Public Function ModifierMultiselectNoteActive() As Boolean + With My.Computer.Keyboard + Return .AltKeyDown And .CtrlKeyDown + End With + End Function + + Public Function ModifierCtrlOnlyActive() As Boolean + With My.Computer.Keyboard + Return .CtrlKeyDown And Not .ShiftKeyDown And Not .AltKeyDown + End With End Function End Module diff --git a/iBMSC/Strings.vb b/iBMSC/Strings.vb index bafeb4620..7447aec5d 100644 --- a/iBMSC/Strings.vb +++ b/iBMSC/Strings.vb @@ -1,221 +1,358 @@ -Public Class Strings - - Public Shared OK As String = "OK" - Public Shared Cancel As String = "Cancel" - Public Shared None As String = "None" - - Public Class StatusBar - Public Shared Length As String = "Length" - Public Shared LongNote As String = "LongNote" - Public Shared Hidden As String = "Hidden" - Public Shared Err As String = "Error" - End Class - - Public Class Messages - Public Shared Err As String = "Error" - Public Shared SaveOnExit As String = "Do you want to save changes?" - Public Shared SaveOnExit1 As String = "You should tell me if you want to save changes before closing the computer. -_,-" - Public Shared SaveOnExit2 As String = "You still need to tell me if you want to save changes even though you are closing the application with task manager. -_,-" - Public Shared PromptEnter As String = "Please enter a label." - Public Shared PromptEnterNumeric As String = "Please enter a value." - Public Shared PromptEnterMeasure As String = "Please enter a measure (0-999)." - Public Shared PromptEnterBPM As String = "Please enter a BPM value." - Public Shared PromptEnterSTOP As String = "Please enter a STOP value." - Public Shared PromptEnterSCROLL As String = "Please enter a SCROLL value." - Public Shared PromptSlashValue As String = "When the slash key (""/"") is pressed, change grid division to:" - Public Shared InvalidLabel As String = "Invalid label." - Public Shared CannotFind As String = "Cannot find file {}." - Public Shared PleaseRespecifyPath As String = "Please respecify path." - Public Shared PlayerNotFound As String = "Player not found" - Public Shared PreviewDelError As String = "There must exist at least one player." - Public Shared NegativeFactorError As String = "Factor must be greater than zero." - Public Shared NegativeDivisorError As String = "Divisor must be greater than zero." - Public Shared PreferencePostpone As String = "The preference will take effect on the next start-up of the program." - Public Shared EraserObsolete As String = "The eraser tool has been replaced by right-clicking on the note." - Public Shared SaveWarning As String = "Warning: " - Public Shared NoteOverlapError As String = "Note operlapping detected. Increasing Maximum Grid Partition will resolve this." - Public Shared BPMOverflowError As String = "Numbers of multi-byte BPMs has exceeded supported maximum: " - Public Shared STOPOverflowError As String = "Numbers of STOPs has exceeded supported maximum: " - Public Shared SCROLLOverflowError As String = "Numbers of multi-byte SCROLLs has exceeded supported maximum: " - Public Shared SavedFileWillContainErrors As String = "The saved file will contain errors." - Public Shared FileAssociationPrompt As String = "Do you want to set iBMSC as default program to all {} files?" - Public Shared FileAssociationError As String = "Error changing file type association:" - Public Shared RestoreDefaultSettings As String = "Restore default settings?" - Public Shared RestoreAutosavedFile As String = "{} autosaved file(s) have been found. Do you want to recover these files?" - End Class - - Public Class FileType - Public Shared _all As String = "All files (*.*)" - - Public Shared _bms As String = "Supported BMS Format (*.bms, *.bme, *.bml, *.pms, *.txt)" - Public Shared BMS As String = "Be-Music Script (*.bms)" - Public Shared BME As String = "Be-Music Extended Format (*.bme)" - Public Shared BML As String = "Be-Music Longnote Format (*.bml)" - Public Shared PMS As String = "Po-Mu Script (*.pms)" - Public Shared TXT As String = "Text document (*.txt)" - - Public Shared SM As String = "StepMania Script (*.sm)" - Public Shared IBMSC As String = "iBMSC Binary Format (*.ibmsc)" - Public Shared XML As String = "Extensible Markup Language (*.xml)" - Public Shared THEME_XML As String = "iBMSC Theme File (*.Theme.xml)" - Public Shared TH As String = "iBMSC 2.x Theme File (*.Theme.xml)" - - Public Shared _audio As String = "Supported Audio Format (*.wav, *.ogg, *.mp3, *.mid)" - Public Shared _wave As String = "Supported Wave Audio Format (*.wav, *.ogg, *.mp3)" - Public Shared WAV As String = "Waveform Audio (*.wav)" - Public Shared OGG As String = "Ogg Vorbis Audio (*.ogg)" - Public Shared MP3 As String = "MPEG Layer-3 Audio (*.mp3)" - Public Shared MID As String = "MIDI (*.mid)" - - Public Shared _image As String = "Supported Image Format (*.png, *.bmp, *.jpg, *.gif)" - Public Shared _movie As String = "Supported Movie Format (*.mpg, *.avi, *.mp4, *.wmv, *.webm)" - Public Shared BMP As String = "Windows bitmap image (*.bmp)" - Public Shared PNG As String = "Portable Network Graphic (*.png)" - Public Shared JPG As String = "Joint Photographic Experts Group (*.jpg)" - Public Shared GIF As String = "Graphics Interchange Format (*.gif)" - Public Shared MPG As String = "Moving Picture Experts Group (*.mpg)" - Public Shared AVI As String = "Audio Video Interleave (*.avi)" - Public Shared MP4 As String = "MPEG phase 4 (*.mp4)" - Public Shared WMV As String = "Windows Media Video (*.wmv)" - Public Shared WEBM As String = "WebM (*.webm)" - - Public Shared EXE As String = "Executable file (*.exe)" - End Class - - Public Class fStatistics - Public Shared Title As String = "Statistics" - Public Shared lBPM As String = "BPM" - Public Shared lSTOP As String = "STOP" - Public Shared lSCROLL As String = "SCROLL" - Public Shared lA As String = "A1-A8" - Public Shared lD As String = "D1-D8" - Public Shared lBGM As String = "BGM" - Public Shared lTotal As String = "Total" - Public Shared lShort As String = "Short" - Public Shared lLong As String = "Long" - Public Shared lLnObj As String = "LnObj" - Public Shared lHidden As String = "Hidden" - Public Shared lErrors As String = "Errors" - End Class - - Public Class fopPlayer - Public Shared Title As String = "Player Arguments Options" - Public Shared Add As String = "Add" - Public Shared Remove As String = "Remove" - Public Shared Path As String = "Path" - Public Shared PlayFromBeginning As String = "Play from beginning" - Public Shared PlayFromHere As String = "Play from current measure" - Public Shared StopPlaying As String = "Stop" - Public Shared References As String = "References (case-sensitive):" - Public Shared DirectoryOfApp As String = "Directory of the application" - Public Shared CurrMeasure As String = "Current measure" - Public Shared FileName As String = "File Name" - Public Shared RestoreDefault As String = "Restore Default" - End Class - - Public Class fopVisual - Public Shared Title As String = "Visual Options" - Public Shared Width As String = "Width" - Public Shared Caption As String = "Caption" - Public Shared Note As String = "Note" - Public Shared Label As String = "Label" - Public Shared LongNote As String = "Long Note" - Public Shared LongNoteLabel As String = "Long Note Label" - Public Shared Bg As String = "Bg" - Public Shared ColumnCaption As String = "Column Caption" - Public Shared ColumnCaptionFont As String = "Column Caption Font" - Public Shared Background As String = "Background" - Public Shared Grid As String = "Grid" - Public Shared SubGrid As String = "Sub" - Public Shared VerticalLine As String = "Vertical Line" - Public Shared MeasureBarLine As String = "Measure BarLine" - Public Shared BGMWaveform As String = "BGM Waveform" - Public Shared NoteHeight As String = "Note Height" - Public Shared NoteLabel As String = "Note Label" - Public Shared MeasureLabel As String = "Measure Label" - Public Shared LabelVerticalShift As String = "Note Label Vertical Shift" - Public Shared LabelHorizontalShift As String = "Note Label Horizontal Shift" - Public Shared LongNoteLabelHorizontalShift As String = "LongNote Label Horizontal Shift" - Public Shared HiddenNoteOpacity As String = "Hidden Note Opacity" - Public Shared NoteBorderOnMouseOver As String = "Note Border on MouseOver" - Public Shared NoteBorderOnSelection As String = "Note Border on Selection" - Public Shared NoteBorderOnAdjustingLength As String = "Note Border on Adjusting Length" - Public Shared SelectionBoxBorder As String = "Selection Box Border" - Public Shared TSCursor As String = "Time Selection Cursor" - Public Shared TSSplitter As String = "Time Selection Splitter" - Public Shared TSCursorSensitivity As String = "Time Selection Cursor Sensitivity" - Public Shared TSMouseOverBorder As String = "Time Selection MouseOver Border" - Public Shared TSFill As String = "Time Selection Fill" - Public Shared TSBPM As String = "Time Selection BPM" - Public Shared TSBPMFont As String = "Time Selection BPM Font" - Public Shared MiddleSensitivity As String = "Middle Button Release Sensitivity" - End Class - - Public Class fopGeneral - Public Shared Title As String = "General Options" - Public Shared MouseWheel As String = "Mouse Wheel" - Public Shared TextEncoding As String = "Text Encoding" - 'Public Shared SortingMethod As String = "Sorting Method" - 'Public Shared sortBubble As String = "One-directional Bubble Sort" - 'Public Shared sortInsertion As String = "Insertion Sort" - 'Public Shared sortQuick As String = "Quick Sort" - 'Public Shared sortQuickD3 As String = "Quick Sort d3" - 'Public Shared sortHeap As String = "Heap Sort" - Public Shared PageUpDown As String = "PageUp / PageDown" - Public Shared MiddleButton As String = "Mouse Middle Button" - Public Shared MiddleButtonAuto As String = "Click and Auto Scroll" - Public Shared MiddleButtonDrag As String = "Click and Drag" - Public Shared AssociateFileType As String = "Associate Filetype" - Public Shared MaxGridPartition As String = "Max Grid Partition in BMS" - Public Shared BeepWhileSaved As String = "Beep while saved" - Public Shared ExtendBPM As String = "Extend number of multi-byte BPMs to 1296" - Public Shared ExtendSTOP As String = "Extend number of STOPs to 1296" - Public Shared AutoFocusOnMouseEnter As String = "Automatically set focus to editing panel on mouse enter" - Public Shared DisableFirstClick As String = "Disable first click if the editing panel is not focused" - Public Shared AutoSave As String = "AutoSave" - Public Shared minutes As String = "minutes" - Public Shared StopPreviewOnClick As String = "Stop preview if clicked on the editing panel" - End Class - - Public Class fFind - Public Shared NoteRange As String = "Note Range" - Public Shared MeasureRange As String = "Measure Range" - Public Shared LabelRange As String = "Label Range" - Public Shared ValueRange As String = "Value Range" - Public Shared to_ As String = "to" - Public Shared Selected As String = "Selected" - Public Shared UnSelected As String = "Unselected" - Public Shared ShortNote As String = "Short" - Public Shared LongNote As String = "Long" - Public Shared Hidden As String = "Hidden" - Public Shared Visible As String = "Visible" - Public Shared Column As String = "Column" - Public Shared SelectAll As String = "Select All" - Public Shared SelectInverse As String = "Select Inverse" - Public Shared UnselectAll As String = "Unselect All" - Public Shared Operation As String = "Operation" - Public Shared ReplaceWithLabel As String = "Replace with Label:" - Public Shared ReplaceWithValue As String = "Replace with Value:" - Public Shared Select_ As String = "Select" - Public Shared Unselect_ As String = "Unselect" - Public Shared Delete_ As String = "Delete" - Public Shared Close_ As String = "Close" - End Class - - Public Class fImportSM - Public Shared Title As String = "Import *.SM file" - Public Shared Difficulty As String = "Difficulty" - Public Shared Note As String = "Please note that bg musics and STOP values will not be imported." - End Class - - Public Class FileAssociation - Public Shared BMS As String = "Be-Music Script" - Public Shared BME As String = "Be-Music Extended Format" - Public Shared BML As String = "Be-Music Longnote Format" - Public Shared PMS As String = "Po-Mu Script" - Public Shared IBMSC As String = "iBMSC Binary Format" - Public Shared Open As String = "Open" - Public Shared Preview As String = "Preview" - Public Shared ViewCode As String = "View Code" - End Class -End Class +Public Class Strings + Public Shared OK As String = "OK" + Public Shared Cancel As String = "Cancel" + Public Shared None As String = "None" + Public Shared Beat As String = "Beat" + Public Shared Beats As String = "Beats" + Public Shared st As String = "st" + Public Shared nd As String = "nd" + Public Shared rd As String = "rd" + Public Shared th As String = "th" + + Public Class StatusBar + Public Shared Length As String = "Length" + Public Shared Note As String = "Note" + Public Shared LongNote As String = "LongNote" + Public Shared Hidden As String = "Hidden" + Public Shared Landmine As String = "Landmine" + Public Shared Comment As String = "Comment" + Public Shared Approximate As String = "Approx." + Public Shared Err As String = "Error" + Public Shared ErrTechnical As String = "Technical Error" + Public Shared RecommendedTotal As String = "Recommended #TOTAL" + End Class + + Public Class OptionsScroll + Public Shared WAVHash As String = "#WAV" + Public Shared BMPHash As String = "#BMP" + End Class + + Public Class Messages + Public Shared Err As String = "Error" + ' Public Shared ErrTechnical As String = "Technical Error" + Public Shared SaveOnExit As String = "Do you want to save changes?" + Public Shared SaveOnExit1 As String = "You should tell me if you want to save changes before closing the computer. -_,-" + Public Shared SaveOnExit2 As String = "You still need to tell me if you want to save changes even though you are closing the application with task manager. -_,-" + Public Shared SaveOnExitOther As String = "There are unsaved files. Discard changes and close the application?" + Public Shared SaveAsDisabled As String = "You cannot save this as a different file." + Public Shared SaveWhileModifyingSection As String = "There are sections in the expansion code opened separately, please close them before closing this file." + Public Shared PromptEnter As String = "Please enter a label." + Public Shared PromptEnterNumeric As String = "Please enter a value." + Public Shared PromptEnterMeasure As String = "Please enter a measure (0-999)." + Public Shared PromptEnterBPM As String = "Please enter a BPM value." + Public Shared PromptEnterSTOP As String = "Please enter a STOP value." + Public Shared PromptEnterSCROLL As String = "Please enter a SCROLL value." + Public Shared PromptSlashValue As String = "When the slash key (""/"") is pressed, change grid division to:" + Public Shared InvalidLabel As String = "Invalid label." + Public Shared CannotFind As String = "Cannot find file {}." + Public Shared PleaseRespecifyPath As String = "Please respecify path." + Public Shared PlayerNotFound As String = "Player not found" + Public Shared PreviewDelError As String = "There must exist at least one player." + Public Shared NegativeFactorError As String = "Factor must be greater than zero." + Public Shared NegativeDivisorError As String = "Divisor must be greater than zero." + Public Shared PreferencePostpone As String = "The preference will take effect on the next start-up of the program." + Public Shared EraserObsolete As String = "The eraser tool has been replaced by right-clicking on the note." + Public Shared SaveWarning As String = "Warning: " + Public Shared NoteOverlapError As String = "Note operlapping detected. Increasing Maximum Grid Partition will resolve this." + Public Shared BPMOverflowError As String = "Numbers of multi-byte BPMs has exceeded supported maximum: " + Public Shared STOPOverflowError As String = "Numbers of STOPs has exceeded supported maximum: " + Public Shared SCROLLOverflowError As String = "Numbers of multi-byte SCROLLs has exceeded supported maximum: " + Public Shared SavedFileWillContainErrors As String = "The saved file will contain errors." + Public Shared FileAssociationPrompt As String = "Do you want to set iBMSC as default program to all {} files?" + Public Shared FileAssociationError As String = "Error changing file type association:" + Public Shared RestoreDefaultSettings As String = "Restore default settings?" + Public Shared RestoreAutosavedFile As String = "{} autosaved file(s) have been found. Do you want to recover these files?" + Public Shared GhostNotesShowMain As String = "The notes in the current section will be changed to ghost notes. Save current section and continue?" + Public Shared GhostNotesModifyExpansion1 As String = "The current ghost notes will become uneditable. Continue?" + Public Shared GhostNotesModifyExpansion2 As String = "There are unsaved changes in the ghost notes. Save current section and continue?" + Public Shared PasteNotesDifferentCount As String = "The clipboard note count is different from the highlighted note count. Continue?" + End Class + + Public Class FileType + Public Shared _all As String = "All files (*.*)" + + Public Shared _bms As String = "Supported BMS Format (*.bms, *.bme, *.bml, *.pms, *.txt)" + Public Shared BMS As String = "Be-Music Script (*.bms)" + Public Shared BME As String = "Be-Music Extended Format (*.bme)" + Public Shared BML As String = "Be-Music Longnote Format (*.bml)" + Public Shared PMS As String = "Po-Mu Script (*.pms)" + Public Shared TXT As String = "Text document (*.txt)" + + Public Shared SM As String = "StepMania Script (*.sm)" + Public Shared IBMSC As String = "iBMSC Binary Format (*.ibmsc)" + Public Shared XML As String = "Extensible Markup Language (*.xml)" + Public Shared THEME_XML As String = "iBMSC Theme File (*.Theme.xml)" + Public Shared TH As String = "iBMSC 2.x Theme File (*.Theme.xml)" + + Public Shared _audio As String = "Supported Audio Format (*.wav, *.ogg, *.mp3, *.mid)" + Public Shared _wave As String = "Supported Wave Audio Format (*.wav, *.ogg, *.mp3)" + Public Shared WAV As String = "Waveform Audio (*.wav)" + Public Shared OGG As String = "Ogg Vorbis Audio (*.ogg)" + Public Shared MP3 As String = "MPEG Layer-3 Audio (*.mp3)" + Public Shared MID As String = "MIDI (*.mid)" + + Public Shared _im As String = "Supported Image and Movie Format (*.png, *.bmp, *.jpg, *.gif, *.mpg, *.mpeg, *.avi, *.m1v, *.m2v, *.m4v, *.mp4, *.webm, *.wmv)" + Public Shared _image As String = "Supported Image Format (*.png, *.bmp, *.jpg, *.gif)" + Public Shared _movie As String = "Supported Movie Format (*.mpg, *.mpeg, *.avi, *.m1v, *.m2v, *.m4v, *.mp4, *.webm, *.wmv)" + + Public Shared EXE As String = "Executable file (*.exe)" + End Class + + Public Class fStatistics + Public Shared Title As String = "Statistics" + Public Shared lBPM As String = "BPM" + Public Shared lSTOP As String = "STOP" + Public Shared lSCROLL As String = "SCROLL" + Public Shared lA As String = "A1-A8" + Public Shared lA1 As String = "A1" + Public Shared lA2 As String = "A2" + Public Shared lA3 As String = "A3" + Public Shared lA4 As String = "A4" + Public Shared lA5 As String = "A5" + Public Shared lA6 As String = "A6" + Public Shared lA7 As String = "A7" + Public Shared lA8 As String = "A8" + Public Shared lD As String = "D1-D8" + Public Shared lD1 As String = "D1" + Public Shared lD2 As String = "D2" + Public Shared lD3 As String = "D3" + Public Shared lD4 As String = "D4" + Public Shared lD5 As String = "D5" + Public Shared lD6 As String = "D6" + Public Shared lD7 As String = "D7" + Public Shared lD8 As String = "D8" + Public Shared lBGA As String = "BGA" + Public Shared lBGM As String = "BGM" + Public Shared lNotes As String = "Notes" + Public Shared lTotal As String = "Total" + Public Shared lShort As String = "Short" + Public Shared lLong As String = "Long" + Public Shared lLnObj As String = "LnObj" + Public Shared lHidden As String = "Hidden" + Public Shared lLandmines As String = "Landmines" + Public Shared lErrors As String = "Errors" + End Class + + Public Class fopPlayer + Public Shared Title As String = "Player Arguments Options" + Public Shared Add As String = "Add" + Public Shared Remove As String = "Remove" + Public Shared Path As String = "Path" + Public Shared PlayFromBeginning As String = "Play from beginning" + Public Shared PlayFromHere As String = "Play from current measure" + Public Shared StopPlaying As String = "Stop" + Public Shared References As String = "References (case-sensitive):" + Public Shared DirectoryOfApp As String = "Directory of the application" + Public Shared CurrMeasure As String = "Current measure" + Public Shared FileName As String = "File Name" + Public Shared FileNameTemplate As String = "File Name of Template" + Public Shared RestoreDefault As String = "Restore Default" + End Class + + Public Class fopVisual + Public Shared Title As String = "Visual Options" + Public Shared Width As String = "Width" + Public Shared Caption As String = "Caption" + Public Shared Note As String = "Note" + Public Shared Label As String = "Label" + Public Shared LongNote As String = "Long Note" + Public Shared LongNoteLabel As String = "Long Note Label" + Public Shared Bg As String = "Bg" + Public Shared ColumnCaption As String = "Column Caption" + Public Shared ColumnCaptionFont As String = "Column Caption Font" + Public Shared Background As String = "Background" + Public Shared Grid As String = "Grid" + Public Shared SubGrid As String = "Sub" + Public Shared VerticalLine As String = "Vertical Line" + Public Shared MeasureBarLine As String = "Measure BarLine" + Public Shared BGMWaveform As String = "BGM Waveform" + Public Shared NoteHeight As String = "Note Height" + Public Shared NoteLabel As String = "Note Label" + Public Shared MeasureLabel As String = "Measure Label" + Public Shared LabelVerticalShift As String = "Note Label Vertical Shift" + Public Shared LabelHorizontalShift As String = "Note Label Horizontal Shift" + Public Shared LongNoteLabelHorizontalShift As String = "LongNote Label Horizontal Shift" + Public Shared HiddenNoteOpacity As String = "Hidden Note Opacity" + Public Shared NoteBorderOnMouseOver As String = "Note Border on MouseOver" + Public Shared NoteBorderOnSelection As String = "Note Border on Selection" + Public Shared NoteBorderOnAdjustingLength As String = "Note Border on Adjusting Length" + Public Shared SelectionBoxBorder As String = "Selection Box Border" + Public Shared TSCursor As String = "Time Selection Cursor" + Public Shared TSSplitter As String = "Time Selection Splitter" + Public Shared TSCursorSensitivity As String = "Time Selection Cursor Sensitivity" + Public Shared TSMouseOverBorder As String = "Time Selection MouseOver Border" + Public Shared TSFill As String = "Time Selection Fill" + Public Shared TSBPM As String = "Time Selection BPM" + Public Shared TSBPMFont As String = "Time Selection BPM Font" + Public Shared MiddleSensitivity As String = "Middle Button Release Sensitivity" + End Class + + Public Class fopGeneral + Public Shared Title As String = "General Options" + Public Shared AssociateFileType As String = "Associate Filetype" + Public Shared MaxGridPartition As String = "Max Grid Partition in BMS" + Public Shared MinimumJackThreshold As String = "Minimum Jack Threshold" + Public Shared AutoLongNoteGap As String = "Auto Long Note Gap" + Public Shared TemporaryBMSFilename As String = "Temporary BMS Filename" + + Public Shared AutoSave As String = "AutoSave" + Public Shared minutes As String = "minutes" + Public Shared BeepWhileSaved As String = "Beep while saved" + Public Shared Preload As String = "Preload all files in the files tab" + Public Shared ExtendBPM As String = "Extend number of multi-byte BPMs to 1296" + Public Shared ExtendSTOP As String = "Extend number of STOPs to 1296" + Public Shared DisplayAudioLines As String = "Display audio lines during note preview" + Public Shared SnapToVerticalPositionTemplate As String = "Snap to vertical position for moving to template position" + Public Shared SnapToVerticalPositionPattern As String = "Snap to vertical position for pasting patterns" + + Public Shared MouseWheel As String = "Mouse Wheel" + Public Shared TextEncoding As String = "Text Encoding" + Public Shared PageUpDown As String = "PageUp / PageDown" + Public Shared MiddleButton As String = "Mouse Middle Button" + Public Shared MiddleButtonAuto As String = "Click and Auto Scroll" + Public Shared MiddleButtonDrag As String = "Click and Drag" + Public Shared AutoFocusOnMouseEnter As String = "Automatically set focus to editing panel on mouse enter" + Public Shared DisableFirstClick As String = "Disable first click if the editing panel is not focused" + Public Shared StopPreviewOnClick As String = "Stop preview if clicked on the editing panel" + + 'Public Shared SortingMethod As String = "Sorting Method" + 'Public Shared sortBubble As String = "One-directional Bubble Sort" + 'Public Shared sortInsertion As String = "Insertion Sort" + 'Public Shared sortQuick As String = "Quick Sort" + 'Public Shared sortQuickD3 As String = "Quick Sort d3" + 'Public Shared sortHeap As String = "Heap Sort" + End Class + + Public Class fopVisualOverride + Public Shared Title As String = "Visual Override Options" + Public Shared Add As String = "Add" + Public Shared Up As String = "Up" + Public Shared Down As String = "Down" + Public Shared Duplicate As String = "Duplicate" + Public Shared Split As String = "Split" + Public Shared SemiAutoAssign As String = "Semi-auto assign" + Public Shared Remove As String = "Remove" + Public Shared LoadSettingsFrom As String = "Load Settings From" + Public Shared SaveSettingsTo As String = "Save Settings To" + Public Shared EnableItem As String = "Enable Item" + Public Shared ColorS As String = "Singular color" + Public Shared ColorG As String = "Color gradient" + Public Shared ColorGHSLU As String = "Color gradient (HSL)" + Public Shared ColorGHSLD As String = "Color gradient (HSL)" + Public Shared OptionName As String = "Option Name" + Public Shared LabelRange As String = "Label Range" + Public Shared ToText As String = "To" + Public Shared NoteColor As String = "Note Color" + Public Shared NoteColorRange As String = "Note Color Range" + Public Shared Preview As String = "Preview" + + Public Shared Chart As String = "Chart" + Public Shared Song As String = "Song" + Public Shared Editor As String = "Editor" + + Public Shared SplitMsgCannot As String = "Warning: Cannot split range." + Public Shared SplitMsgUpper As String = "Please input the upper bound for the first range." + Public Shared SplitMsgNotBetweenRange As String = "Value not between the range. Please input the upper bound for the first range." + + Public Shared SemiAutoMsgAssign As String = "Assign notes with wav filenames beginning with the following:" + Public Shared SemiAutoMsgNone As String = "No notes found." + Public Shared SemiAutoMsgAssignMore As String = "Assign more notes with wav filenames beginning with the following:" + + Public Shared SaveCurrentSettings As String = "Save current settings?" + Public Shared OverwriteExistingSettings As String = "Overwrite existing settings below?" + End Class + + Public Class fopKeybinding + Public Shared Title As String = "Keybinding Options" + Public Shared BindingName As String = "Binding Name" + Public Shared Description As String = "Description" + Public Shared Keybindings As String = "Keybindings" + + Public Shared MoveTo As String = "Move to {}" + Public Shared MoveToDescription As String = "Move note to {1} Lane {2}" + Public Shared MoveToScratchDescription As String = "Move note to {} Scratch Lane" + Public Shared MoveToBGMDescription As String = "Move note to BGM Lane" + Public Shared MoveToTemplate As String = "Move to Template Position" + Public Shared MoveToTemplateDescription As String = "Move note to template position if available" + Public Shared CheckTechnicalError As String = "Check for technical errors such as impossible scratches in DP or impossible chords in PMS" + Public Shared SelectExpansionSection As String = "Select #IF sections in the Expansion field" + Public Shared PastePattern As String = "Apply pattern of the notes on the clipboard to the highlighted notes." + Public Shared SelectHovered As String = "Select all with hovered note label" + + Public Shared ErrorUnavailable As String = "Error: {} is unavailable for custom keybinding." + Public Shared ErrorAssigned As String = "Error: {} has been assigned to other functions." + Public Shared ErrorNoteAssignment As String = "{1} has been assigned to {2}. Remove keybinding for {2}?" + End Class + + Public Class fopExpand + Public Shared Title As String = "#RANDOM Editor" + Public Shared SelectExpansionCode As String = "Select Expansion Code" + Public Shared DisplayGhostNotes As String = "Display Ghost Notes" + Public Shared DisplayGhostNotesAll As String = "Display Ghost Notes (All)" + Public Shared ModifyNotes As String = "Modify Notes" + Public Shared ModifySection As String = "Modify Section" + Public Shared RemoveGhostNotes As String = "Remove Ghost Notes" + Public Shared ErrorEmpty As String = "Error: Expansion code is empty." + Public Shared ErrorNoLineSelected As String = "Error: No line selected." + Public Shared ErrorNotDetected As String = "Error: #IF Section not detected." + End Class + + Public Class fopTOTAL + Public Shared Title As String = "#TOTAL Tool" + Public Shared CalculationOption As String = "#TOTAL Calculation Option" + Public Shared Parameters As String = "Parameters" + Public Shared TOTAL As String = "#TOTAL" + Public Shared CalculationFormula As String = "Calculation Formula" + Public Shared IIDXTOTALSupposition1 As String = "IIDX #TOTAL Supposition 1" + Public Shared IIDXTOTALSupposition2 As String = "IIDX #TOTAL Supposition 2" + Public Shared Multiplier As String = "Multiplier" + Public Shared Notes As String = "Notes" + Public Shared GlobalMultiplier As String = "Global Multiplier" + Public Shared DecimalPlaces As String = "Decimal Places" + Public Shared DisplayValue As String = "Display Value" + Public Shared DisplayRecommendedTOTAL As String = "Display ""{}""" + Public Shared AutofillTOTAL As String = "Autofill #TOTAL" + End Class + + Public Class fFind + Public Shared NoteRange As String = "Note Range" + Public Shared MeasureRange As String = "Measure Range" + Public Shared LabelRange As String = "Label Range" + Public Shared ValueRange As String = "Value Range" + Public Shared to_ As String = "to" + Public Shared Selected As String = "Selected" + Public Shared UnSelected As String = "Unselected" + Public Shared ShortNote As String = "Short" + Public Shared LongNote As String = "Long" + Public Shared Hidden As String = "Hidden" + Public Shared Visible As String = "Visible" + Public Shared Column As String = "Column" + Public Shared SelectAll As String = "Select All" + Public Shared SelectInverse As String = "Select Inverse" + Public Shared UnselectAll As String = "Unselect All" + Public Shared Operation As String = "Operation" + Public Shared ReplaceWithLabel As String = "Replace with Label:" + Public Shared ReplaceWithValue As String = "Replace with Value:" + Public Shared Select_ As String = "Select" + Public Shared Unselect_ As String = "Unselect" + Public Shared Delete_ As String = "Delete" + Public Shared Close_ As String = "Close" + End Class + + Public Class fImportSM + Public Shared Title As String = "Import *.SM file" + Public Shared Difficulty As String = "Difficulty" + Public Shared Note As String = "Please note that bg musics and STOP values will not be imported." + End Class + + Public Class FileAssociation + Public Shared BMS As String = "Be-Music Script" + Public Shared BME As String = "Be-Music Extended Format" + Public Shared BML As String = "Be-Music Longnote Format" + Public Shared PMS As String = "Po-Mu Script" + Public Shared IBMSC As String = "iBMSC Binary Format" + Public Shared Open As String = "Open" + Public Shared Preview As String = "Preview" + Public Shared ViewCode As String = "View Code" + End Class + End Class diff --git a/iBMSC/TimeSelectionOps.vb b/iBMSC/TimeSelectionOps.vb index cf530e88a..69d37a544 100644 --- a/iBMSC/TimeSelectionOps.vb +++ b/iBMSC/TimeSelectionOps.vb @@ -7,7 +7,7 @@ Partial Public Class MainWindow If Not TBTimeSelect.Checked Then Exit Sub SortByVPositionInsertion() - BPMChangeByValue(Val(TVCBPM.Text) * 10000) + BPMChangeByValue(CLng(TVCBPM.Text) * 10000) SortByVPositionInsertion() UpdatePairing() @@ -22,7 +22,7 @@ Partial Public Class MainWindow If Not TBTimeSelect.Checked Then Exit Sub SortByVPositionInsertion() - BPMChangeTop(Val(TVCM.Text) / Val(TVCD.Text)) + BPMChangeTop(CDbl(TVCM.Text) / CDbl(TVCD.Text)) SortByVPositionInsertion() UpdatePairing() @@ -38,373 +38,445 @@ Partial Public Class MainWindow ' Case 2 : PMainInR.Focus() 'End Select End Sub + Private Sub BConvertStop_Click(sender As Object, e As EventArgs) Handles BConvertStop.Click + SortByVPositionInsertion() + ConvertAreaToStop() - Private Sub BPMChangeTop(ByVal xRatio As Double, Optional ByVal bAddUndo As Boolean = True, Optional ByVal bOverWriteUndo As Boolean = False) - 'Dim xUndo As String = vbCrLf - 'Dim xRedo As String = vbCrLf - Dim xUndo As UndoRedo.LinkedURCmd = Nothing - Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void - Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - - If vSelLength = 0 Then GoTo EndofSub - If xRatio = 1 Or xRatio <= 0 Then GoTo EndofSub - - Dim xVLower As Double = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - Dim xVUpper As Double = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) - If xVLower < 0 Then xVLower = 0 - If xVUpper >= GetMaxVPosition() Then xVUpper = GetMaxVPosition() - 1 - - Dim xBPM As Integer = Notes(0).Value - Dim xI1 As Integer - Dim xI2 As Integer - Dim xI3 As Integer - - Dim xValueL As Integer = xBPM - Dim xValueU As Integer = xBPM - - 'Save undo - 'For xI3 = 1 To UBound(K) - ' K(xI3).Selected = True - 'Next - 'xUndo = "KZ" & vbCrLf & _ - ' sCmdKs(False) & vbCrLf & _ - ' "SA_" & vSelStart & "_" & vSelLength & "_" & vSelHalf & "_1" - - Me.RedoRemoveNoteAll(False, xUndo, xRedo) - - 'Start - If Not NTInput Then - 'Below Selection - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition > xVLower Then Exit For - If Notes(xI1).ColumnIndex = niBPM Then xBPM = Notes(xI1).Value - Next - xValueL = xBPM - xI2 = xI1 - - 'Within Selection - For xI1 = xI2 To UBound(Notes) - If Notes(xI1).VPosition > xVUpper Then Exit For - If Notes(xI1).ColumnIndex = niBPM Then - xBPM = Notes(xI1).Value - Notes(xI1).Value = Notes(xI1).Value * xRatio - End If - Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio + xVLower - Next - xValueU = xBPM - xI2 = xI1 + SortByVPositionInsertion() + UpdatePairing() + RefreshPanelAll() + POStatusRefresh() - 'Above Selection - For xI1 = xI2 To UBound(Notes) - Notes(xI1).VPosition += (xRatio - 1) * (xVUpper - xVLower) - Next + Beep() + TVCBPM.Focus() + End Sub - 'Add BPMs - AddNote(New Note(niBPM, xVLower, xValueL * xRatio), False, True, False) - AddNote(New Note(niBPM, xVUpper + (xRatio - 1) * (xVUpper - xVLower), xValueU), False, True, False) + Private Sub BDefineMeasure_Click(sender As Object, e As EventArgs) Handles BDefineMeasure.Click + If Not TBTimeSelect.Checked Then Exit Sub + AddOrRemoveMeasureLine() - Else - Dim xAddBPML As Boolean = True - Dim xAddBPMU As Boolean = True + RefreshPanelAll() + POStatusRefresh() - For xI1 = 1 To UBound(Notes) - 'Modify notes - If Notes(xI1).VPosition <= xVLower Then - 'check BPM - If Notes(xI1).ColumnIndex = niBPM Then - xValueL = Notes(xI1).Value - xValueU = Notes(xI1).Value - If Notes(xI1).VPosition = xVLower Then xAddBPML = False : Notes(xI1).Value = IIf(Notes(xI1).Value * xRatio <= 655359999, Notes(xI1).Value * xRatio, 655359999) - End If + Beep() + TVCBPM.Focus() + End Sub - 'If longnote then adjust length - If Notes(xI1).VPosition + Notes(xI1).Length > xVLower Then - Notes(xI1).Length += (IIf(xVUpper < Notes(xI1).VPosition + Notes(xI1).Length, xVUpper, Notes(xI1).VPosition + Notes(xI1).Length) - xVLower) * (xRatio - 1) - End If + Private Sub BInsertOrRemoveSpaceM_Click(sender As Object, e As EventArgs) Handles BInsertOrRemoveSpaceM.Click + If Not TBTimeSelect.Checked Or vSelLength = 0 Then Exit Sub - ElseIf Notes(xI1).VPosition <= xVUpper Then - 'check BPM - If Notes(xI1).ColumnIndex = niBPM Then - xValueU = Notes(xI1).Value - If Notes(xI1).VPosition = xVUpper Then xAddBPMU = False Else Notes(xI1).Value = IIf(Notes(xI1).Value * xRatio <= 655359999, Notes(xI1).Value * xRatio, 655359999) - End If + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - 'Adjust Length - Notes(xI1).Length += (IIf(xVUpper < Notes(xI1).Length + Notes(xI1).VPosition, xVUpper, Notes(xI1).Length + Notes(xI1).VPosition) - Notes(xI1).VPosition) * (xRatio - 1) + InsertOrRemoveSpaceMeasure(xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) - 'Adjust VPosition - Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio + xVLower + RefreshPanelAll() + POStatusRefresh() + Beep() + TVCBPM.Focus() + End Sub - Else - Notes(xI1).VPosition += (xVUpper - xVLower) * (xRatio - 1) - End If - Next + Private Sub BInsertOrRemoveSpaceN_Click(sender As Object, e As EventArgs) Handles BInsertOrRemoveSpaceN.Click + If Not TBTimeSelect.Checked Or vSelLength = 0 Then Exit Sub - 'Add BPMs - If xAddBPML Then AddNote(New Note(niBPM, xVLower, xValueL * xRatio), False, True, False) - If xAddBPMU Then AddNote(New Note(niBPM, (xVUpper - xVLower) * xRatio + xVLower, xValueU), False, True, False) - End If + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - 'Check BPM Overflow - For xI3 = 1 To UBound(Notes) - If Notes(xI3).ColumnIndex = niBPM AndAlso Notes(xI3).Value < 1 Then Notes(xI3).Value = 1 - Next + InsertOrRemoveSpaceNote(xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) - Me.RedoAddNoteAll(False, xUndo, xRedo) + RefreshPanelAll() + POStatusRefresh() + Beep() + TVCBPM.Focus() + End Sub - 'Restore selection - Dim pSelStart As Double = vSelStart - Dim pSelLength As Double = vSelLength - Dim pSelHalf As Double = vSelHalf - If vSelLength < 0 Then vSelStart += (xRatio - 1) * (xVUpper - xVLower) - vSelLength = vSelLength * xRatio - vSelHalf = vSelHalf * xRatio - ValidateSelection() - Me.RedoChangeTimeSelection(pSelStart, pSelLength, pSelHalf, vSelStart, vSelLength, vSelHalf, True, xUndo, xRedo) + Private Sub InsertOrRemoveSpaceMN(sender As Object, e As EventArgs) Handles BInsertOrRemoveSpaceMN.Click + If Not TBTimeSelect.Checked Or vSelLength = 0 Then Exit Sub - 'Save redo - 'For xI3 = 1 To UBound(K) - ' K(xI3).Selected = True - 'Next - 'xRedo = "KZ" & vbCrLf & _ - ' sCmdKs(False) & vbCrLf & _ - ' "SA_" & vSelStart & "_" & vSelLength & "_" & vSelHalf & "_1" + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - 'Restore note selection - xVLower = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - xVUpper = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) - If Not NTInput Then - For xI3 = 1 To UBound(Notes) - Notes(xI3).Selected = Notes(xI3).VPosition >= xVLower And Notes(xI3).VPosition < xVUpper And nEnabled(Notes(xI3).ColumnIndex) - Next - Else - For xI3 = 1 To UBound(Notes) - Notes(xI3).Selected = Notes(xI3).VPosition < xVUpper And Notes(xI3).VPosition + Notes(xI3).Length >= xVLower And nEnabled(Notes(xI3).ColumnIndex) - Next - End If + InsertOrRemoveSpaceMeasure(xUndo, xRedo) + InsertOrRemoveSpaceNote(xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) -EndofSub: - If bAddUndo Then AddUndo(xUndo, xBaseRedo.Next, bOverWriteUndo) + RefreshPanelAll() + POStatusRefresh() + Beep() + TVCBPM.Focus() End Sub - Private Sub BPMChangeHalf(ByVal dVPosition As Double, Optional ByVal bAddUndo As Boolean = True, Optional ByVal bOverWriteUndo As Boolean = False) + Private Sub BPMChangeTop(ByVal xRatio As Double, Optional ByVal bAddUndo As Boolean = True, Optional ByVal bOverWriteUndo As Boolean = False) 'Dim xUndo As String = vbCrLf 'Dim xRedo As String = vbCrLf Dim xUndo As UndoRedo.LinkedURCmd = Nothing Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - If vSelLength = 0 Then GoTo EndofSub - If dVPosition = 0 Then GoTo EndofSub - - Dim xVLower As Double = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - Dim xVHalf As Double = vSelStart + vSelHalf - Dim xVUpper As Double = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) - If dVPosition + xVHalf <= xVLower Or dVPosition + xVHalf >= xVUpper Then GoTo EndofSub - - If xVLower < 0 Then xVLower = 0 - If xVUpper >= GetMaxVPosition() Then xVUpper = GetMaxVPosition() - 1 - If xVHalf > xVUpper Then xVHalf = xVUpper - If xVHalf < xVLower Then xVHalf = xVLower - - Dim xBPM As Integer = Notes(0).Value - Dim xI1 As Integer - Dim xI2 As Integer - Dim xI3 As Integer - - Dim xValueL As Integer = xBPM - Dim xValueM As Integer = xBPM - Dim xValueU As Integer = xBPM - - Dim xRatio1 As Double = (xVHalf - xVLower + dVPosition) / (xVHalf - xVLower) - Dim xRatio2 As Double = (xVUpper - xVHalf - dVPosition) / (xVUpper - xVHalf) - - 'Save undo - 'For xI3 = 1 To UBound(K) - 'K(xI3).Selected = True - 'Next - 'xUndo = "KZ" & vbCrLf & _ - ' sCmdKs(False) & vbCrLf & _ - ' "SA_" & vSelStart & "_" & vSelLength & "_" & vSelHalf & "_1" + If Not (vSelLength = 0 Or xRatio = 1 Or xRatio <= 0) Then - Me.RedoRemoveNoteAll(False, xUndo, xRedo) + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + If xVLower < 0 Then xVLower = 0 + If xVUpper >= GetMaxVPosition() Then xVUpper = GetMaxVPosition() - 1 - If Not NTInput Then - 'Below Selection - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition > xVLower Then Exit For - If Notes(xI1).ColumnIndex = niBPM Then xBPM = Notes(xI1).Value - Next - xValueL = xBPM - xI2 = xI1 + Dim xBPM As Long = Notes(0).Value + Dim xI1 As Integer + Dim xI2 As Integer + Dim xI3 As Integer - 'Below Half - For xI1 = xI2 To UBound(Notes) - If Notes(xI1).VPosition > xVHalf Then Exit For - If Notes(xI1).ColumnIndex = niBPM Then - xBPM = Notes(xI1).Value - Notes(xI1).Value = Notes(xI1).Value * xRatio1 - End If - Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio1 + xVLower - Next - xValueM = xBPM - xI2 = xI1 - - 'Above Half - For xI1 = xI2 To UBound(Notes) - If Notes(xI1).VPosition > xVUpper Then Exit For - If Notes(xI1).ColumnIndex = niBPM Then - xBPM = Notes(xI1).Value - Notes(xI1).Value = IIf(Notes(xI1).Value * xRatio2 <= 655359999, Notes(xI1).Value * xRatio2, 655359999) - End If - Notes(xI1).VPosition = (Notes(xI1).VPosition - xVHalf) * xRatio2 + xVHalf + dVPosition - Next - xValueU = xBPM - xI2 = xI1 + Dim xValueL As Long = xBPM + Dim xValueU As Long = xBPM - 'Above Selection - 'For xI1 = xI2 To UBound(K) - ' K(xI1).VPosition += (xRatio - 1) * (xVUpper - xVLower) + 'Save undo + 'For xI3 = 1 To UBound(K) + ' K(xI3).Selected = True 'Next + 'xUndo = "KZ" & vbCrLf & _ + ' sCmdKs(False) & vbCrLf & _ + ' "SA_" & vSelStart & "_" & vSelLength & "_" & vSelHalf & "_1" + + Me.RedoRemoveNoteAll(False, xUndo, xRedo) + + 'Start + If Not NTInput Then + 'Below Selection + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition > xVLower Then Exit For + If Notes(xI1).ColumnIndex = niBPM Then xBPM = Notes(xI1).Value + Next + xValueL = xBPM + xI2 = xI1 - 'Add BPMs - ' az: cond. removed; - ' IIf(xVHalf <> xVLower AndAlso xValueL * xRatio1 <= 655359999, xValueL * xRatio1, 655359999) - AddNote(New Note(niBPM, xVLower, xValueL * xRatio1), False, True, False) - ' az: cond removed; - ' IIf(xVHalf <> xVUpper AndAlso xValueM * xRatio2 <= 655359999, xValueM * xRatio2, 655359999) - AddNote(New Note(niBPM, xVHalf + dVPosition, xValueM * xRatio2), False, True, False) - AddNote(New Note(niBPM, xVUpper, xValueU), False, True, False) - - Else - Dim xAddBPML As Boolean = True - Dim xAddBPMM As Boolean = True - Dim xAddBPMU As Boolean = True - - 'Modify notes - For xI1 = 1 To UBound(Notes) - If Notes(xI1).VPosition <= xVLower Then - 'check BPM + 'Within Selection + For xI1 = xI2 To UBound(Notes) + If Notes(xI1).VPosition > xVUpper Then Exit For If Notes(xI1).ColumnIndex = niBPM Then - xValueL = Notes(xI1).Value - xValueM = Notes(xI1).Value - xValueU = Notes(xI1).Value - If Notes(xI1).VPosition = xVLower Then - xAddBPML = False - - ' az: condition removed; - ' IIf(xVHalf <> xVLower AndAlso Notes(xI1).Value * xRatio1 <= 655359999, Notes(xI1).Value * xRatio1, 655359999) - Notes(xI1).Value = Notes(xI1).Value * xRatio1 - End If + xBPM = Notes(xI1).Value + Notes(xI1).Value = CLng(Notes(xI1).Value * xRatio) End If + Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio + xVLower + Next + xValueU = xBPM + xI2 = xI1 - 'If longnote then adjust length - Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length - If xEnd > xVUpper Then - ElseIf xEnd > xVHalf Then - Notes(xI1).Length = (xEnd - xVHalf) * xRatio2 + xVHalf + dVPosition - Notes(xI1).VPosition - ElseIf xEnd > xVLower Then - Notes(xI1).Length = (xEnd - xVLower) * xRatio1 + xVLower - Notes(xI1).VPosition - End If + 'Above Selection + For xI1 = xI2 To UBound(Notes) + Notes(xI1).VPosition += (xRatio - 1) * (xVUpper - xVLower) + Next - ElseIf Notes(xI1).VPosition <= xVHalf Then - 'check BPM - If Notes(xI1).ColumnIndex = niBPM Then - xValueM = Notes(xI1).Value - xValueU = Notes(xI1).Value - If Notes(xI1).VPosition = xVHalf Then - xAddBPMM = False - ' az: cond. remove - ' IIf(xVHalf <> xVUpper AndAlso Notes(xI1).Value * xRatio2 <= 655359999, Notes(xI1).Value * xRatio2, 655359999) - Notes(xI1).Value = Notes(xI1).Value * xRatio2 - Else - ' az: cond. remove - ' IIf(Notes(xI1).Value * xRatio1 <= 655359999, Notes(xI1).Value * xRatio1, 655359999) - Notes(xI1).Value = Notes(xI1).Value * xRatio1 + 'Add BPMs + AddNote(New Note(niBPM, xVLower, CLng(xValueL * xRatio), False), False, True, False) + AddNote(New Note(niBPM, xVUpper + (xRatio - 1) * (xVUpper - xVLower), xValueU, False), False, True, False) + + Else + Dim xAddBPML As Boolean = True + Dim xAddBPMU As Boolean = True + + For xI1 = 1 To UBound(Notes) + 'Modify notes + If Notes(xI1).VPosition <= xVLower Then + 'check BPM + If Notes(xI1).ColumnIndex = niBPM Then + xValueL = Notes(xI1).Value + xValueU = Notes(xI1).Value + If Notes(xI1).VPosition = xVLower Then xAddBPML = False : Notes(xI1).Value = CLng(IIf(Notes(xI1).Value * xRatio <= 655359999, Notes(xI1).Value * xRatio, 655359999)) End If - End If - 'Adjust Length - Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length - If xEnd > xVUpper Then - Notes(xI1).Length = xEnd - xVLower - (Notes(xI1).VPosition - xVLower) * xRatio1 - ElseIf xEnd > xVHalf Then - Notes(xI1).Length = (xVHalf - Notes(xI1).VPosition) * xRatio1 + (xEnd - xVHalf) * xRatio2 - Else - Notes(xI1).Length *= xRatio1 - End If + 'If longnote then adjust length + If Notes(xI1).VPosition + Notes(xI1).Length > xVLower Then + Notes(xI1).Length += (CDbl(IIf(xVUpper < Notes(xI1).VPosition + Notes(xI1).Length, xVUpper, Notes(xI1).VPosition + Notes(xI1).Length)) - xVLower) * (xRatio - 1) + End If - 'Adjust VPosition - Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio1 + xVLower + ElseIf Notes(xI1).VPosition <= xVUpper Then + 'check BPM + If Notes(xI1).ColumnIndex = niBPM Then + xValueU = Notes(xI1).Value + If Notes(xI1).VPosition = xVUpper Then xAddBPMU = False Else Notes(xI1).Value = CLng(IIf(Notes(xI1).Value * xRatio <= 655359999, Notes(xI1).Value * xRatio, 655359999)) + End If - ElseIf Notes(xI1).VPosition <= xVUpper Then - 'check BPM - If Notes(xI1).ColumnIndex = niBPM Then - xValueU = Notes(xI1).Value - If Notes(xI1).VPosition = xVUpper Then xAddBPMU = False Else Notes(xI1).Value = IIf(Notes(xI1).Value * xRatio2 <= 655359999, Notes(xI1).Value * xRatio2, 655359999) - End If + 'Adjust Length + Notes(xI1).Length += (CLng(IIf(xVUpper < Notes(xI1).Length + Notes(xI1).VPosition, xVUpper, Notes(xI1).Length + Notes(xI1).VPosition)) - Notes(xI1).VPosition) * (xRatio - 1) + + 'Adjust VPosition + Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio + xVLower - 'Adjust Length - Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length - If xEnd > xVUpper Then - Notes(xI1).Length = (xVUpper - Notes(xI1).VPosition) * xRatio2 + xEnd - xVUpper Else - Notes(xI1).Length *= xRatio2 + Notes(xI1).VPosition += (xVUpper - xVLower) * (xRatio - 1) End If + Next - 'Adjust VPosition - Notes(xI1).VPosition = (Notes(xI1).VPosition - xVHalf) * xRatio2 + xVHalf + dVPosition + 'Add BPMs + If xAddBPML Then AddNote(New Note(niBPM, xVLower, CLng(xValueL * xRatio), False), False, True, False) + If xAddBPMU Then AddNote(New Note(niBPM, (xVUpper - xVLower) * xRatio + xVLower, xValueU, False), False, True, False) + End If - 'Else - ' K(xI1).VPosition += (xVUpper - xVLower) * (xRatio - 1) - End If + 'Check BPM Overflow + For xI3 = 1 To UBound(Notes) + If Notes(xI3).ColumnIndex = niBPM AndAlso Notes(xI3).Value < 1 Then Notes(xI3).Value = 1 Next - 'Add BPMs - ' IIf(xVHalf <> xVLower AndAlso xValueL * xRatio1 <= 655359999, xValueL * xRatio1, 655359999) - If xAddBPML Then AddNote(New Note(niBPM, xVLower, xValueL * xRatio1), False, True, False) - ' IIf(xVHalf <> xVUpper AndAlso xValueM * xRatio2 <= 655359999, xValueM * xRatio2, 655359999) - If xAddBPMM Then AddNote(New Note(niBPM, xVHalf + dVPosition, xValueM * xRatio2), False, True, False) - If xAddBPMU Then AddNote(New Note(niBPM, xVUpper, xValueU), False, True, False) + Me.RedoAddNoteAll(False, xUndo, xRedo) + + 'Restore selection + Dim pSelStart As Double = vSelStart + Dim pSelLength As Double = vSelLength + Dim pSelHalf As Double = vSelHalf + If vSelLength < 0 Then vSelStart += (xRatio - 1) * (xVUpper - xVLower) + vSelLength *= xRatio + vSelHalf *= xRatio + ValidateSelection() + Me.RedoChangeTimeSelection(pSelStart, pSelLength, pSelHalf, vSelStart, vSelLength, vSelHalf, True, xUndo, xRedo) + + 'Save redo + 'For xI3 = 1 To UBound(K) + ' K(xI3).Selected = True + 'Next + 'xRedo = "KZ" & vbCrLf & _ + ' sCmdKs(False) & vbCrLf & _ + ' "SA_" & vSelStart & "_" & vSelLength & "_" & vSelHalf & "_1" + + 'Restore note selection + xVLower = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + xVUpper = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + If Not NTInput Then + For xI3 = 1 To UBound(Notes) + Notes(xI3).Selected = Notes(xI3).VPosition >= xVLower And Notes(xI3).VPosition < xVUpper And nEnabled(Notes(xI3).ColumnIndex) + Next + Else + For xI3 = 1 To UBound(Notes) + Notes(xI3).Selected = Notes(xI3).VPosition < xVUpper And Notes(xI3).VPosition + Notes(xI3).Length >= xVLower And nEnabled(Notes(xI3).ColumnIndex) + Next + End If End If - 'Check BPM Overflow - 'For xI3 = 1 To UBound(Notes) - ' If Notes(xI3).ColumnIndex = niBPM Then - ' If Notes(xI3).Value > 655359999 Then Notes(xI3).Value = 655359999 - ' If Notes(xI3).Value < 1 Then Notes(xI3).Value = 1 - ' End If - 'Next + If bAddUndo Then AddUndo(xUndo, xBaseRedo.Next, bOverWriteUndo) + End Sub - 'Restore selection - 'If vSelLength < 0 Then vSelStart += (xRatio - 1) * (xVUpper - xVLower) - 'vSelLength = vSelLength * xRatio - Dim pSelHalf As Double = vSelHalf - vSelHalf += dVPosition - ValidateSelection() - Me.RedoChangeTimeSelection(vSelStart, vSelLength, pSelHalf, vSelStart, vSelStart, vSelHalf, True, xUndo, xRedo) + Private Sub BPMChangeHalf(ByVal dVPosition As Double, Optional ByVal bAddUndo As Boolean = True, Optional ByVal bOverWriteUndo As Boolean = False) + 'Dim xUndo As String = vbCrLf + 'Dim xRedo As String = vbCrLf + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - Me.RedoAddNoteAll(False, xUndo, xRedo) + If Not (vSelLength = 0 Or dVPosition = 0) Then + + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVHalf As Double = vSelStart + vSelHalf + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + If Not (dVPosition + xVHalf <= xVLower Or dVPosition + xVHalf >= xVUpper) Then + + If xVLower < 0 Then xVLower = 0 + If xVUpper >= GetMaxVPosition() Then xVUpper = GetMaxVPosition() - 1 + If xVHalf > xVUpper Then xVHalf = xVUpper + If xVHalf < xVLower Then xVHalf = xVLower + + Dim xBPM As Long = Notes(0).Value + Dim xI1 As Integer + Dim xI2 As Integer + Dim xI3 As Integer + + Dim xValueL As Long = xBPM + Dim xValueM As Long = xBPM + Dim xValueU As Long = xBPM + + Dim xRatio1 As Double = (xVHalf - xVLower + dVPosition) / (xVHalf - xVLower) + Dim xRatio2 As Double = (xVUpper - xVHalf - dVPosition) / (xVUpper - xVHalf) + + 'Save undo + 'For xI3 = 1 To UBound(K) + 'K(xI3).Selected = True + 'Next + 'xUndo = "KZ" & vbCrLf & _ + ' sCmdKs(False) & vbCrLf & _ + ' "SA_" & vSelStart & "_" & vSelLength & "_" & vSelHalf & "_1" + + Me.RedoRemoveNoteAll(False, xUndo, xRedo) + + If Not NTInput Then + 'Below Selection + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition > xVLower Then Exit For + If Notes(xI1).ColumnIndex = niBPM Then xBPM = Notes(xI1).Value + Next + xValueL = xBPM + xI2 = xI1 + + 'Below Half + For xI1 = xI2 To UBound(Notes) + If Notes(xI1).VPosition > xVHalf Then Exit For + If Notes(xI1).ColumnIndex = niBPM Then + xBPM = Notes(xI1).Value + Notes(xI1).Value = CLng(Notes(xI1).Value * xRatio1) + End If + Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio1 + xVLower + Next + xValueM = xBPM + xI2 = xI1 + + 'Above Half + For xI1 = xI2 To UBound(Notes) + If Notes(xI1).VPosition > xVUpper Then Exit For + If Notes(xI1).ColumnIndex = niBPM Then + xBPM = Notes(xI1).Value + Notes(xI1).Value = CLng(IIf(Notes(xI1).Value * xRatio2 <= 655359999, Notes(xI1).Value * xRatio2, 655359999)) + End If + Notes(xI1).VPosition = (Notes(xI1).VPosition - xVHalf) * xRatio2 + xVHalf + dVPosition + Next + xValueU = xBPM + xI2 = xI1 + + 'Above Selection + 'For xI1 = xI2 To UBound(K) + ' K(xI1).VPosition += (xRatio - 1) * (xVUpper - xVLower) + 'Next + + 'Add BPMs + ' az: cond. removed; + ' IIf(xVHalf <> xVLower AndAlso xValueL * xRatio1 <= 655359999, xValueL * xRatio1, 655359999) + AddNote(New Note(niBPM, xVLower, CLng(xValueL * xRatio1), False), False, True, False) + ' az: cond removed; + ' IIf(xVHalf <> xVUpper AndAlso xValueM * xRatio2 <= 655359999, xValueM * xRatio2, 655359999) + AddNote(New Note(niBPM, xVHalf + dVPosition, CLng(xValueM * xRatio2), False), False, True, False) + AddNote(New Note(niBPM, xVUpper, xValueU, False), False, True, False) + Else + Dim xAddBPML As Boolean = True + Dim xAddBPMM As Boolean = True + Dim xAddBPMU As Boolean = True + + 'Modify notes + For xI1 = 1 To UBound(Notes) + If Notes(xI1).VPosition <= xVLower Then + 'check BPM + If Notes(xI1).ColumnIndex = niBPM Then + xValueL = Notes(xI1).Value + xValueM = Notes(xI1).Value + xValueU = Notes(xI1).Value + If Notes(xI1).VPosition = xVLower Then + xAddBPML = False + + ' az: condition removed; + ' IIf(xVHalf <> xVLower AndAlso Notes(xI1).Value * xRatio1 <= 655359999, Notes(xI1).Value * xRatio1, 655359999) + Notes(xI1).Value = CLng(Notes(xI1).Value * xRatio1) + End If + End If + + 'If longnote then adjust length + Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length + If xEnd > xVUpper Then + ElseIf xEnd > xVHalf Then + Notes(xI1).Length = (xEnd - xVHalf) * xRatio2 + xVHalf + dVPosition - Notes(xI1).VPosition + ElseIf xEnd > xVLower Then + Notes(xI1).Length = (xEnd - xVLower) * xRatio1 + xVLower - Notes(xI1).VPosition + End If + + ElseIf Notes(xI1).VPosition <= xVHalf Then + 'check BPM + If Notes(xI1).ColumnIndex = niBPM Then + xValueM = Notes(xI1).Value + xValueU = Notes(xI1).Value + If Notes(xI1).VPosition = xVHalf Then + xAddBPMM = False + ' az: cond. remove + ' IIf(xVHalf <> xVUpper AndAlso Notes(xI1).Value * xRatio2 <= 655359999, Notes(xI1).Value * xRatio2, 655359999) + Notes(xI1).Value *= CLng(xRatio2) + Else + ' az: cond. remove + ' IIf(Notes(xI1).Value * xRatio1 <= 655359999, Notes(xI1).Value * xRatio1, 655359999) + Notes(xI1).Value *= CLng(xRatio1) + End If + End If + + 'Adjust Length + Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length + If xEnd > xVUpper Then + Notes(xI1).Length = xEnd - xVLower - (Notes(xI1).VPosition - xVLower) * xRatio1 + ElseIf xEnd > xVHalf Then + Notes(xI1).Length = (xVHalf - Notes(xI1).VPosition) * xRatio1 + (xEnd - xVHalf) * xRatio2 + Else + Notes(xI1).Length *= xRatio1 + End If + + 'Adjust VPosition + Notes(xI1).VPosition = (Notes(xI1).VPosition - xVLower) * xRatio1 + xVLower + + ElseIf Notes(xI1).VPosition <= xVUpper Then + 'check BPM + If Notes(xI1).ColumnIndex = niBPM Then + xValueU = Notes(xI1).Value + If Notes(xI1).VPosition = xVUpper Then xAddBPMU = False Else Notes(xI1).Value = CLng(IIf(Notes(xI1).Value * xRatio2 <= 655359999, Notes(xI1).Value * xRatio2, 655359999)) + End If + + 'Adjust Length + Dim xEnd As Double = Notes(xI1).VPosition + Notes(xI1).Length + If xEnd > xVUpper Then + Notes(xI1).Length = (xVUpper - Notes(xI1).VPosition) * xRatio2 + xEnd - xVUpper + Else + Notes(xI1).Length *= xRatio2 + End If + + 'Adjust VPosition + Notes(xI1).VPosition = (Notes(xI1).VPosition - xVHalf) * xRatio2 + xVHalf + dVPosition + + 'Else + ' K(xI1).VPosition += (xVUpper - xVLower) * (xRatio - 1) + End If + Next - 'Restore note selection - xVLower = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - xVUpper = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) - If Not NTInput Then - For xI3 = 1 To UBound(Notes) - Notes(xI3).Selected = Notes(xI3).VPosition >= xVLower And Notes(xI3).VPosition < xVUpper And nEnabled(Notes(xI3).ColumnIndex) - Next - Else - For xI3 = 1 To UBound(Notes) - Notes(xI3).Selected = Notes(xI3).VPosition < xVUpper And Notes(xI3).VPosition + Notes(xI3).Length >= xVLower And nEnabled(Notes(xI3).ColumnIndex) - Next + 'Add BPMs + ' IIf(xVHalf <> xVLower AndAlso xValueL * xRatio1 <= 655359999, xValueL * xRatio1, 655359999) + If xAddBPML Then AddNote(New Note(niBPM, xVLower, CLng(xValueL * xRatio1), False), False, True, False) + ' IIf(xVHalf <> xVUpper AndAlso xValueM * xRatio2 <= 655359999, xValueM * xRatio2, 655359999) + If xAddBPMM Then AddNote(New Note(niBPM, xVHalf + dVPosition, CLng(xValueM * xRatio2), False), False, True, False) + If xAddBPMU Then AddNote(New Note(niBPM, xVUpper, xValueU, False), False, True, False) + End If + + 'Check BPM Overflow + 'For xI3 = 1 To UBound(Notes) + ' If Notes(xI3).ColumnIndex = niBPM Then + ' If Notes(xI3).Value > 655359999 Then Notes(xI3).Value = 655359999 + ' If Notes(xI3).Value < 1 Then Notes(xI3).Value = 1 + ' End If + 'Next + + 'Restore selection + 'If vSelLength < 0 Then vSelStart += (xRatio - 1) * (xVUpper - xVLower) + 'vSelLength = vSelLength * xRatio + Dim pSelHalf As Double = vSelHalf + vSelHalf += dVPosition + ValidateSelection() + Me.RedoChangeTimeSelection(vSelStart, vSelLength, pSelHalf, vSelStart, vSelStart, vSelHalf, True, xUndo, xRedo) + + Me.RedoAddNoteAll(False, xUndo, xRedo) + + + 'Restore note selection + xVLower = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + xVUpper = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + If Not NTInput Then + For xI3 = 1 To UBound(Notes) + Notes(xI3).Selected = Notes(xI3).VPosition >= xVLower And Notes(xI3).VPosition < xVUpper And nEnabled(Notes(xI3).ColumnIndex) + Next + Else + For xI3 = 1 To UBound(Notes) + Notes(xI3).Selected = Notes(xI3).VPosition < xVUpper And Notes(xI3).VPosition + Notes(xI3).Length >= xVLower And nEnabled(Notes(xI3).ColumnIndex) + Next + End If + + End If End If -EndofSub: If bAddUndo Then AddUndo(xUndo, xBaseRedo.Next, bOverWriteUndo) End Sub - Private Sub BPMChangeByValue(ByVal xValue As Integer) + Private Sub BPMChangeByValue(ByVal xValue As Long) 'Dim xUndo As String = vbCrLf 'Dim xRedo As String = vbCrLf Dim xUndo As UndoRedo.LinkedURCmd = Nothing @@ -413,9 +485,9 @@ EndofSub: If vSelLength = 0 Then Return - Dim xVLower As Double = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) Dim xVHalf As Double = vSelStart + vSelHalf - Dim xVUpper As Double = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) If xVHalf = xVUpper Then xVHalf = xVLower 'If dVPosition + xVHalf <= xVLower Or dVPosition + xVHalf >= xVUpper Then GoTo EndofSub @@ -487,28 +559,29 @@ EndofSub: If Notes(xI1).VPosition > xVLower Then Exit For Next xI2 = xI1 - If xI2 > UBound(Notes) Then GoTo EndOfAdjustment + If xI2 <= UBound(Notes) Then - 'Within Selection - Dim xTempTime As Double - Dim xTempVPos As Double - For xI1 = xI2 To UBound(Notes) - If Notes(xI1).VPosition >= xVUpper Then Exit For - xTempTime = 0 - - xTempVPos = Notes(xI1).VPosition - For xI3 = 0 To xU - If xTempVPos < xVPos(xI3 + 1) Then Exit For - xTempTime += (xVPos(xI3 + 1) - xVPos(xI3)) / xVal(xI3) - Next - xTempTime += (xTempVPos - xVPos(xI3)) / xVal(xI3) + 'Within Selection + Dim xTempTime As Double + Dim xTempVPos As Double + For xI1 = xI2 To UBound(Notes) + If Notes(xI1).VPosition >= xVUpper Then Exit For + xTempTime = 0 - If xTempTime - (xVHalf - xVLower) / xValue > 0 Then - Notes(xI1).VPosition = (xTempTime - (xVHalf - xVLower) / xValue) * xResult + xVHalf - Else - Notes(xI1).VPosition = xTempTime * xValue + xVLower - End If - Next + xTempVPos = Notes(xI1).VPosition + For xI3 = 0 To xU + If xTempVPos < xVPos(xI3 + 1) Then Exit For + xTempTime += (xVPos(xI3 + 1) - xVPos(xI3)) / xVal(xI3) + Next + xTempTime += (xTempVPos - xVPos(xI3)) / xVal(xI3) + + If xTempTime - (xVHalf - xVLower) / xValue > 0 Then + Notes(xI1).VPosition = (xTempTime - (xVHalf - xVLower) / xValue) * xResult + xVHalf + Else + Notes(xI1).VPosition = xTempTime * xValue + xVLower + End If + Next + End If Else Dim xTempTime As Double @@ -516,7 +589,7 @@ EndofSub: Dim xTempEnd As Double For xI1 = 1 To UBound(Notes) - If Notes(xI1).Length Then xTempEnd = Notes(xI1).VPosition + Notes(xI1).Length + If Notes(xI1).Length > 0 Then xTempEnd = Notes(xI1).VPosition + Notes(xI1).Length If Notes(xI1).VPosition > xVLower And Notes(xI1).VPosition < xVUpper Then xTempTime = 0 @@ -535,7 +608,7 @@ EndofSub: End If End If - If Notes(xI1).Length Then + If Notes(xI1).Length > 0 Then If xTempEnd > xVLower And xTempEnd < xVUpper Then xTempTime = 0 @@ -559,7 +632,6 @@ EndofSub: Next End If -EndOfAdjustment: 'Delete BPMs xI1 = 1 @@ -580,7 +652,7 @@ EndOfAdjustment: With Notes(UBound(Notes) - 1) .ColumnIndex = niBPM .VPosition = xVHalf - .Value = xResult + .Value = CLng(xResult) End With With Notes(UBound(Notes)) .ColumnIndex = niBPM @@ -606,8 +678,8 @@ EndOfAdjustment: Me.RedoAddNoteAll(False, xUndo, xRedo) 'Restore note selection - xVLower = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - xVUpper = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) + xVLower = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + xVUpper = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) If Not NTInput Then For xI3 = 1 To UBound(Notes) Notes(xI3).Selected = Notes(xI3).VPosition >= xVLower And Notes(xI3).VPosition < xVUpper And nEnabled(Notes(xI3).ColumnIndex) @@ -629,8 +701,8 @@ EndOfAdjustment: If vSelLength = 0 Then Return - Dim xVLower As Double = IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength) - Dim xVUpper As Double = IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength) + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) Dim notesInRange = From note In Notes Where note.VPosition > xVLower And note.VPosition <= xVUpper @@ -655,7 +727,7 @@ EndOfAdjustment: With Notes(UBound(Notes)) .ColumnIndex = niSTOP .VPosition = xVLower - .Value = vSelLength * 10000 + .Value = CLng(vSelLength * 10000) End With Me.RedoAddNoteAll(False, xUndo, xRedo) @@ -664,17 +736,178 @@ EndOfAdjustment: End Sub - Private Sub BConvertStop_Click(sender As Object, e As EventArgs) Handles BConvertStop.Click - SortByVPositionInsertion() - ConvertAreaToStop() + Private Sub AddOrRemoveMeasureLine() + Dim xUndo As UndoRedo.LinkedURCmd = Nothing + Dim xRedo As UndoRedo.LinkedURCmd = New UndoRedo.Void + Dim xBaseRedo As UndoRedo.LinkedURCmd = xRedo - SortByVPositionInsertion() - UpdatePairing() - RefreshPanelAll() - POStatusRefresh() + Dim xMeasureLengthBefore() As Double = CType(MeasureLength.Clone(), Double()) + ' TODO: Incorporate MeasureAtDisplacement + + If vSelLength = 0 Then + For xIM = 1 To UBound(MeasureLength) + If vSelStart = MeasureBottom(xIM) Then + RemoveMeasureLine(xIM) + Exit For + ElseIf vSelStart < MeasureBottom(xIM) Then + AddMeasureLine(vSelStart) + Exit For + End If + Next + Else + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + Dim xIML As Integer = -1 + Dim xIMU As Integer = -1 + + For xIM = 1 To UBound(MeasureLength) + ' Find the lowest measure higher than or equal to xVLower + If xIML = -1 AndAlso xVLower <= MeasureBottom(xIM) Then xIML = xIM + ' Find the highest measure lower than or equal xVUpper + If xVUpper = MeasureBottom(xIM) Then + xIMU = xIM + Exit For + ElseIf xVUpper < MeasureBottom(xIM) Then + xIMU = xIM - 1 + Exit For + End If + Next - Beep() - TVCBPM.Focus() + ' Remove measure lines inside selection + For i = xIMU To xIML Step -1 + RemoveMeasureLine(i) + Next + + ' Add measure lines at vSelStart and vSelStart + vSelLength + AddMeasureLine(xVLower) + AddMeasureLine(xVUpper) + End If + + RedoChangeMeasure(xMeasureLengthBefore, CType(MeasureLength.Clone(), Double()), xUndo, xRedo) + AddUndo(xUndo, xBaseRedo.Next) + End Sub + + Private Sub AddMeasureLine(ByVal vPos As Double) + For xIM = 1 To UBound(MeasureLength) + If vPos < MeasureBottom(xIM) Then + For xIM2 = UBound(MeasureLength) To xIM + 1 Step -1 + MeasureLength(xIM2) = MeasureLength(xIM2 - 1) + Next + MeasureLength(xIM) = MeasureBottom(xIM) - vPos + MeasureLength(xIM - 1) = vPos - MeasureBottom(xIM - 1) + Exit For + End If + Next + + LBeatRefresh() + UpdateMeasureBottom() + End Sub + + Private Sub RemoveMeasureLine(ByVal xIM As Integer) + MeasureLength(xIM - 1) += MeasureLength(xIM) + For xIM2 = xIM To UBound(MeasureLength) - 1 + MeasureLength(xIM2) = MeasureLength(xIM2 + 1) + Next + MeasureLength(UBound(MeasureLength)) = 192.0R + + LBeatRefresh() + UpdateMeasureBottom() + End Sub + + Private Sub InsertOrRemoveSpaceMeasure(ByRef xUndo As UndoRedo.LinkedURCmd, ByRef xRedo As UndoRedo.LinkedURCmd) + Dim xMeasureLengthBefore() As Double = CType(MeasureLength.Clone(), Double()) + + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xIM As Integer = MeasureAtDisplacement(xVLower) + + MeasureLength(xIM) = Math.Max((MeasureLength(xIM) + vSelLength), 1) + Dim a As Double = MeasureLength(xIM) / 192.0R + Dim xxD As Long = GetDenominator(a) + LBeat.Items(xIM) = Add3Zeros(xIM) & ": " & a & IIf(xxD > 10000, "", " ( " & CLng(a * xxD) & " / " & xxD & " ) ").ToString() + + RedoChangeMeasure(xMeasureLengthBefore, CType(MeasureLength.Clone(), Double()), xUndo, xRedo) + + UpdateMeasureBottom() End Sub + Private Sub InsertOrRemoveSpaceNote(ByRef xUndo As UndoRedo.LinkedURCmd, ByRef xRedo As UndoRedo.LinkedURCmd) + Dim xVLower As Double = CDbl(IIf(vSelLength > 0, vSelStart, vSelStart + vSelLength)) + Dim xVUpper As Double = CDbl(IIf(vSelLength < 0, vSelStart, vSelStart + vSelLength)) + + ' Change to NTInput because easier to code + If Not NTInput Then + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertBMSE2NT() + RedoAddNoteAll(False, xUndo, xRedo) + End If + + If vSelLength < 0 Then ' Remove space + Dim xIN As Integer = 1 + Do While xIN <= UBound(Notes) + + With Notes(xIN) + If .Length = 0 AndAlso .Selected Then ' If not LN and note within selection + RedoRemoveNote(Notes(xIN), xUndo, xRedo) + RemoveNote(xIN) + ElseIf .VPosition >= xVUpper Then ' ElseIf note is above xVLower, move lower + Dim vPos = Notes(xIN).VPosition + vSelLength + RedoMoveNote(Notes(xIN), Notes(xIN).ColumnIndex, vPos, xUndo, xRedo) + Notes(xIN).VPosition = vPos + xIN += 1 + ElseIf .Length <> 0 AndAlso .Selected Then ' ElseIf LN + Dim xNVLower = .VPosition + Dim xNVUpper = .VPosition + .Length + If xNVLower < xVLower Then ' If LN's VPosition is lower than selection, trim accordingly + If xNVUpper <= xVUpper Then + RedoLongNoteModify(Notes(xIN), .VPosition, xVLower - xNVLower, xUndo, xRedo) + .Length = xVLower - xNVLower + Else + RedoLongNoteModify(Notes(xIN), .VPosition, .Length + vSelLength, xUndo, xRedo) + .Length += vSelLength + End If + xIN += 1 + ElseIf xNVUpper <= xVUpper Then ' ElseIf LN is within selection, remove + RedoRemoveNote(Notes(xIN), xUndo, xRedo) + RemoveNote(xIN) + ElseIf xNVLower = xVLower Then + RedoLongNoteModify(Notes(xIN), .VPosition, .Length + vSelLength, xUndo, xRedo) + .Length += vSelLength + xIN += 1 + Else + RedoLongNoteModify(Notes(xIN), xVLower, xNVUpper - xVUpper, xUndo, xRedo) + .Length = xNVUpper - xVUpper + .VPosition = xVLower + xIN += 1 + End If + Else + xIN += 1 + End If + End With + Loop + ElseIf vSelLength > 0 Then ' Insert space + ' TODO: Add upper bound + For xIN = 1 To UBound(Notes) + With Notes(xIN) + If .Length = 0 AndAlso .VPosition >= xVLower Then ' If note is above xVLower, move upper + Dim vPos = Notes(xIN).VPosition + vSelLength + RedoMoveNote(Notes(xIN), .ColumnIndex, vPos, xUndo, xRedo) + .VPosition = vPos + ElseIf .Length <> 0 AndAlso .VPosition <= xVLower Then ' ElseIf LN andalso VPosition is lower than or equal to XVLower + RedoLongNoteModify(Notes(xIN), .VPosition, .Length + vSelLength, xUndo, xRedo) + .Length += vSelLength + ElseIf .Length <> 0 AndAlso .VPosition > xVLower Then + Dim vPos = Notes(xIN).VPosition + vSelLength + RedoMoveNote(Notes(xIN), .ColumnIndex, vPos, xUndo, xRedo) + .VPosition = vPos + End If + End With + Next + End If + + If Not NTInput Then + RedoRemoveNoteAll(False, xUndo, xRedo) + ConvertNT2BMSE() + RedoAddNoteAll(False, xUndo, xRedo) + End If + End Sub End Class diff --git a/iBMSC/UndoRedo.vb b/iBMSC/UndoRedo.vb index 7a69484f7..aec624880 100644 --- a/iBMSC/UndoRedo.vb +++ b/iBMSC/UndoRedo.vb @@ -15,6 +15,7 @@ Public Class UndoRedo Public Const opNT As Byte = 18 'Public Const opChangeVisibleColumns As Byte = 19 Public Const opWavAutoincFlag As Byte = 20 + Public Const opChangeMeasure As Byte = 21 Public Const opNoOperation As Byte = 255 @@ -51,6 +52,7 @@ Public Class UndoRedo Case opNT : Return New NT(b) 'Case opChangeVisibleColumns : Return New ChangeVisibleColumns(b) Case opWavAutoincFlag : Return New WavAutoincFlag(b) + Case opChangeMeasure : Return New ChangeMeasure(b) Case opNoOperation : Return New NoOperation(b) Case Else : Return Nothing End Select @@ -360,7 +362,39 @@ Public Class UndoRedo End Function End Class + Public Class ChangeMeasure : Inherits LinkedURCmd + '1 + 8 * Indices.Length + Public MeasureLength() As Double = {} + Public Overrides Function toBytes() As Byte() + Dim xToBytes() As Byte = {opChangeMeasure} + Dim bitDouble = 8 + ReDim Preserve xToBytes(bitDouble * MeasureLength.Length) + For xI1 As Integer = 1 To UBound(xToBytes) Step bitDouble + Dim xId() As Byte = BitConverter.GetBytes(MeasureLength((xI1 - 1) \ bitDouble)) + For xIb = 0 To bitDouble - 1 + xToBytes(xI1 + xIb) = xId(xIb) + Next + Next + Return xToBytes + End Function + + Public Sub New(ByVal b() As Byte) + Dim bitDouble = 8 + ReDim Preserve MeasureLength(999) + For xI1 As Integer = 0 To UBound(MeasureLength) + MeasureLength(xI1) = BitConverter.ToInt32(b, 1 + xI1 * bitDouble) + Next + End Sub + + Public Sub New(ByVal xMeasureLength() As Double) + MeasureLength = xMeasureLength + End Sub + + Public Overrides Function ofType() As Byte + Return opChangeMeasure + End Function + End Class Public Class ChangeTimeSelection : Inherits LinkedURCmd '1 + 8 + 8 + 8 + 1 = 26 @@ -377,7 +411,7 @@ Public Class UndoRedo xSta(0), xSta(1), xSta(2), xSta(3), xSta(4), xSta(5), xSta(6), xSta(7), xLen(0), xLen(1), xLen(2), xLen(3), xLen(4), xLen(5), xLen(6), xLen(7), xHalf(0), xHalf(1), xHalf(2), xHalf(3), xHalf(4), xHalf(5), xHalf(6), xHalf(7), - IIf(Selected, trueByte, falseByte)} + CType(IIf(Selected, trueByte, falseByte), Byte)} End Function Public Sub New(ByVal b() As Byte) @@ -408,8 +442,8 @@ Public Class UndoRedo Public Overrides Function toBytes() As Byte() toBytes = New Byte() {opNT, - IIf(BecomeNT, trueByte, falseByte), - IIf(AutoConvert, trueByte, falseByte)} + CType(IIf(BecomeNT, trueByte, falseByte), Byte), + CType(IIf(AutoConvert, trueByte, falseByte), Byte)} End Function Public Sub New(ByVal b() As Byte) @@ -435,7 +469,7 @@ Public Class UndoRedo End Sub Public Overrides Function toBytes() As Byte() toBytes = New Byte() {opWavAutoincFlag, - IIf(Checked, trueByte, falseByte)} + CType(IIf(Checked, trueByte, falseByte), Byte)} End Function Public Sub New(ByVal b() As Byte) diff --git a/iBMSC/Utilities.vb b/iBMSC/Utilities.vb index 4b5dbe46b..c5d0960ef 100644 --- a/iBMSC/Utilities.vb +++ b/iBMSC/Utilities.vb @@ -33,13 +33,17 @@ Namespace Editor Public Function C10to36(ByVal xStart As Long) As String If xStart < 1 Then xStart = 1 If xStart > 1295 Then xStart = 1295 - Return C10to36S(xStart \ 36) & C10to36S(xStart Mod 36) + Return C10to36S(CInt(xStart \ 36)) & C10to36S(CInt(xStart Mod 36)) End Function Public Function C36to10(ByVal xStart As String) As Integer xStart = Mid("00" & xStart, Len(xStart) + 1) Return C36to10S(xStart.Chars(0)) * 36 + C36to10S(xStart.Chars(1)) End Function + Public Function C36to10(ByVal xStart As Integer) As Integer + Return C36to10(xStart.ToString()) + End Function + Public Function EncodingToString(TextEncoding As System.Text.Encoding) As String If TextEncoding Is System.Text.Encoding.Default Then Return "System Ansi" If TextEncoding Is System.Text.Encoding.Unicode Then Return "Little Endian UTF16" @@ -64,27 +68,27 @@ Namespace Editor Return Color.FromArgb(0) Else Return Color.FromArgb( - cStart.A * iTransparency, - cStart.R * (100 - Math.Abs(iPercent)) * 0.01 + Math.Abs(CInt(iPercent >= 0) * iPercent) * 2.55, - cStart.G * (100 - Math.Abs(iPercent)) * 0.01 + Math.Abs(CInt(iPercent >= 0) * iPercent) * 2.55, - cStart.B * (100 - Math.Abs(iPercent)) * 0.01 + Math.Abs(CInt(iPercent >= 0) * iPercent) * 2.55) + CInt(cStart.A * iTransparency), + CInt(cStart.R * (100 - Math.Abs(iPercent)) * 0.01 + Math.Abs(CInt(iPercent >= 0) * iPercent) * 2.55), + CInt(cStart.G * (100 - Math.Abs(iPercent)) * 0.01 + Math.Abs(CInt(iPercent >= 0) * iPercent) * 2.55), + CInt(cStart.B * (100 - Math.Abs(iPercent)) * 0.01 + Math.Abs(CInt(iPercent >= 0) * iPercent) * 2.55)) End If End Function Public Function IdentifiertoLongNote(ByVal I As String) As Boolean - Dim xI As Integer = CInt(Val(I)) + Dim xI As Integer = CInt(I) Return xI >= 50 And xI < 90 End Function Public Function IdentifiertoHidden(ByVal I As String) As Boolean - Dim xI As Integer = CInt(Val(I)) + Dim xI As Integer = CInt(I) Return (xI >= 30 And xI < 50) Or (xI >= 70 And xI < 90) End Function Public Function RandomFileName(ByVal extWithDot As String) As String Do Randomize() - RandomFileName = Now.Ticks & Mid(Rnd(), 3) & extWithDot + RandomFileName = Now.Ticks & Mid(Rnd().ToString(), 3) & extWithDot Loop While File.Exists(RandomFileName) Or Directory.Exists(RandomFileName) End Function @@ -120,7 +124,7 @@ Namespace Editor xG = (xG * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 xB = (xB * xxS * (1 - Math.Abs(xxB)) + xxB + 1) * 255 / 2 - Return Color.FromArgb(xA, xR, xG, xB) + Return Color.FromArgb(xA, CInt(xR), CInt(xG), CInt(xB)) End Function Public Function FontToString(ByVal xFont As Font) As String @@ -139,8 +143,8 @@ Namespace Editor Public Function StringToFont(ByVal xStr As String, ByVal xDefault As Font) As Font Dim xLine() As String = Split(xStr, ",") If UBound(xLine) = 2 Then - Dim xFontStyle As System.Drawing.FontStyle = Val(xLine(2)) - Return New Font(xLine(0), CSng(Val(xLine(1))), xFontStyle, GraphicsUnit.Pixel) + Dim xFontStyle As System.Drawing.FontStyle = CType(xLine(2), FontStyle) + Return New Font(xLine(0), CSng(xLine(1)), xFontStyle, GraphicsUnit.Pixel) Else Return xDefault End If @@ -149,7 +153,7 @@ Namespace Editor Public Function ArrayToString(ByVal xInt() As Integer) As String Dim xStr As String = "" For xI1 As Integer = 0 To UBound(xInt) - xStr &= xInt(xI1).ToString & IIf(xI1 = UBound(xInt), "", ",") + xStr &= xInt(xI1).ToString() & IIf(xI1 = UBound(xInt), "", ",").ToString() Next Return xStr End Function @@ -157,7 +161,7 @@ Namespace Editor Public Function ArrayToString(ByVal xBool() As Boolean) As String Dim xStr As String = "" For xI1 As Integer = 0 To UBound(xBool) - xStr &= CInt(xBool(xI1)).ToString & IIf(xI1 = UBound(xBool), "", ",") + xStr &= CInt(xBool(xI1)).ToString() & IIf(xI1 = UBound(xBool), "", ",").ToString() Next Return xStr End Function @@ -165,7 +169,7 @@ Namespace Editor Public Function ArrayToString(ByVal xColor() As Color) As String Dim xStr As String = "" For xI1 As Integer = 0 To UBound(xColor) - xStr &= xColor(xI1).ToArgb.ToString & IIf(xI1 = UBound(xColor), "", ",") + xStr &= xColor(xI1).ToArgb.ToString() & IIf(xI1 = UBound(xColor), "", ",").ToString() Next Return xStr End Function @@ -174,7 +178,7 @@ Namespace Editor Dim xL() As String = Split(xStr, ",") Dim xInt(UBound(xL)) As Integer For xI1 As Integer = 0 To UBound(xInt) - xInt(xI1) = Val(xL(xI1)) + xInt(xI1) = CInt(xL(xI1)) Next Return xInt End Function @@ -183,7 +187,7 @@ Namespace Editor Dim xL() As String = Split(xStr, ",") Dim xBool(UBound(xL)) As Boolean For xI1 As Integer = 0 To UBound(xBool) - xBool(xI1) = CBool(Val(xL(xI1))) + xBool(xI1) = CBool(xL(xI1)) Next Return xBool End Function @@ -194,7 +198,7 @@ Namespace Editor Dim m10 As Long = 0 Dim m11 As Long = 1 Dim x As Double = a - Dim ai As Long = Int(x) + Dim ai As Long = CLng(Int(x)) Do While m10 * ai + m11 <= maxDenom Dim t As Long @@ -209,7 +213,7 @@ Namespace Editor x = 1 / (x - ai) If x > CDbl(&H7FFFFFFFFFFFFFFF) Then Exit Do - ai = Int(x) + ai = CLng(Int(x)) Loop Return m10 diff --git a/iBMSC/VisualSettings.vb b/iBMSC/VisualSettings.vb index df632d730..4847700bb 100644 --- a/iBMSC/VisualSettings.vb +++ b/iBMSC/VisualSettings.vb @@ -70,7 +70,7 @@ ByVal voVLine As Pen, ByVal voMLine As Pen, ByVal voBGMWav As Pen, _ - _ + _ ByVal voSelBox As Pen, ByVal voPECursor As Pen, ByVal voPEHalf As Pen, @@ -80,7 +80,7 @@ ByVal voPEBPM As SolidBrush, ByVal voPEBPMFont As Font, ByVal xMiddleDeltaRelease As Integer, _ - _ + _ ByVal vKHeight As Integer, ByVal vKFont As Font, ByVal vKMFont As Font, diff --git a/iBMSC/Waveform.vb b/iBMSC/Waveform.vb index c123271aa..0080dbf6d 100644 --- a/iBMSC/Waveform.vb +++ b/iBMSC/Waveform.vb @@ -1,7 +1,4 @@ -Imports CSCore.Streams -Imports CSCore.Streams.Effects -Imports CSCore -Imports CSCore.Codecs +Imports CSCore Partial Public Class MainWindow @@ -14,38 +11,21 @@ Partial Public Class MainWindow Dim wPosition As Double = 0 Dim wLeft As Integer = 50 Dim wWidth As Integer = 100 - Dim wPrecision As Integer = 1 + Dim wPrecision As Double = 1 Private Sub BWLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BWLoad.Click Dim xDWAV As New OpenFileDialog xDWAV.Filter = "Wave files (*.wav, *.ogg)" & "|*.wav;*.ogg" xDWAV.DefaultExt = "wav" - xDWAV.InitialDirectory = IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName)) + xDWAV.InitialDirectory = CStr(IIf(ExcludeFileName(FileName) = "", InitPath, ExcludeFileName(FileName))) If xDWAV.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub InitPath = ExcludeFileName(xDWAV.FileName) - Dim src = CSCore.Codecs.CodecFactory.Instance.GetCodec(xDWAV.FileName) - - src.ToStereo() - Dim samples(src.Length) As Single - src.ToSampleSource().Read(samples, 0, src.Length) - - Dim flen = (src.Length - 1) / src.WaveFormat.Channels - - ' Copy interleaved data - ReDim wWavL(flen + 1) - ReDim wWavR(flen + 1) - For i As Integer = 0 To flen - If 2 * i < src.Length Then - wWavL(i) = samples(2 * i) - End If - If 2 * i + 1 < src.Length Then - wWavR(i) = samples(2 * i + 1) - End If - Next - - wSampleRate = src.WaveFormat.SampleRate + Dim w As WavSample = LoadWaveForm(xDWAV.FileName) + wWavL = w.WavL + wWavR = w.WavR + wSampleRate = w.SampleRate RefreshPanelAll() TWFileName.Text = xDWAV.FileName @@ -65,4 +45,51 @@ Partial Public Class MainWindow TWPosition2.Enabled = Not wLock RefreshPanelAll() End Sub + + Private Function LoadWaveForm(ByVal filepath As String) As WavSample + filepath = Audio.CheckFilename(filepath) + If Not System.IO.File.Exists(filepath) Then Return New WavSample({}, {}, 0, 0) + + Dim src = CSCore.Codecs.CodecFactory.Instance.GetCodec(filepath) + + src.ToStereo() + Dim samples(CInt(src.Length)) As Single + src.ToSampleSource().Read(samples, 0, CInt(src.Length)) + + Dim flen = (src.Length - 1) / src.WaveFormat.Channels + + ' Copy interleaved data + ReDim wWavL(CInt(flen) + 1) + ReDim wWavR(CInt(flen) + 1) + For i As Integer = 0 To CInt(flen) + If 2 * i < src.Length Then + wWavL(i) = samples(2 * i) + End If + If 2 * i + 1 < src.Length Then + wWavR(i) = samples(2 * i + 1) + End If + Next + + Dim flenReduced As Integer + For i = UBound(wWavL) To 0 Step -1 + If wWavL(i) = 0 AndAlso wWavR(i) = 0 Then + flenReduced = i + Else + ReDim Preserve wWavL(flenReduced) + ReDim Preserve wWavR(flenReduced) + Exit For + End If + Next + Return New WavSample(wWavL, wWavR, src.WaveFormat.SampleRate, CSng(src.GetMilliseconds(src.Length) / 1000)) + + End Function + + Private Function LoadDuration(ByVal filepath As String) As WavSample + filepath = Audio.CheckFilename(filepath) + If Not System.IO.File.Exists(filepath) Then Return New WavSample({}, {}, 0, 0) + + Dim src = CSCore.Codecs.CodecFactory.Instance.GetCodec(filepath) + + Return New WavSample(Nothing, Nothing, 0, CSng(src.GetMilliseconds(src.Length) / 1000)) + End Function End Class diff --git a/iBMSC/XMLUtil.vb b/iBMSC/XMLUtil.vb index 44f725df7..a80027ecc 100644 --- a/iBMSC/XMLUtil.vb +++ b/iBMSC/XMLUtil.vb @@ -1,7 +1,7 @@ Module XMLUtil Public Sub XMLWriteValue(ByVal w As XmlTextWriter, ByVal local As String, ByVal val As String) w.WriteStartElement(local) - w.WriteAttributeString("Value", Editor.WriteDecimalWithDot(val)) + w.WriteAttributeString("Value", Editor.WriteDecimalWithDot(CDbl(val))) w.WriteEndElement() End Sub @@ -22,7 +22,7 @@ Static nfi As New System.Globalization.NumberFormatInfo() nfi.NumberDecimalSeparator = "." - v = Double.Parse(s, nfi) + v = Single.Parse(s, nfi) End Sub Public Sub XMLLoadAttribute(ByVal s As String, ByRef v As Double) If s.Length = 0 Then Exit Sub diff --git a/iBMSC/app.config b/iBMSC/app.config index 658d764fa..1d1f08676 100644 --- a/iBMSC/app.config +++ b/iBMSC/app.config @@ -1,23 +1,23 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iBMSC/iBMSC.vbproj b/iBMSC/iBMSC.vbproj index 0a72e5412..c019da22f 100644 --- a/iBMSC/iBMSC.vbproj +++ b/iBMSC/iBMSC.vbproj @@ -1,313 +1,401 @@ - - - - - Debug - AnyCPU - {35281D99-2A97-4AA0-AC1E-6CDC78999A3D} - WinExe - iBMSC.My.MyApplication - iBMSC - μBMSC - 512 - WindowsForms - v4.0 - false - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - x86 - true - full - true - true - bin\Debug\ - μBMSC.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 - - - AnyCPU - pdbonly - false - true - true - bin\Release\ - μBMSC.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 - - - On - - - Binary - - - Off - - - On - - - Icon.ico - - - My Project\app.manifest - - - - ..\packages\CSCore.1.2.1.1\lib\net35-client\CSCore.dll - - - ..\packages\NVorbis.0.8.5.0\lib\NVorbis.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - - AboutBox1.vb - - - Form - - - - ColorPicker.vb - - - Form - - - dgImportSM.vb - - - Form - - - dgMyO2.vb - - - Form - - - dgStatistics.vb - - - Form - - - diagFind.vb - - - Form - - - fLoadFileProgress.vb - - - Form - - - SplashScreen1.vb - - - Form - - - Form - - - Form - - - Form - - - - MainWindow.vb - - - Form - - - Form - - - Form - - - Form - - - Form - - - - Form - - - - - - - True - Application.myapp - - - True - True - Resources.resx - - - True - Settings.settings - True - - - OpGeneral.vb - - - Form - - - OpPlayer.vb - - - Form - - - OpVisual.vb - - - Form - - - - - Form - - - - - - AboutBox1.vb - - - ColorPicker.vb - - - dgImportSM.vb - - - dgMyO2.vb - - - dgMyO2.vb - - - dgStatistics.vb - - - diagFind.vb - - - fLoadFileProgress.vb - - - SplashScreen1.vb - - - MainWindow.vb - - - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - My.Resources - Designer - - - OpGeneral.vb - - - OpPlayer.vb - - - OpVisual.vb - - - - - - - MyApplicationCodeGenerator - Application.Designer.vb - - - SettingsSingleFileGenerator - My - Settings.Designer.vb - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - - - - + + + + + Debug + AnyCPU + {35281D99-2A97-4AA0-AC1E-6CDC78999A3D} + WinExe + iBMSC.My.MyApplication + iBMSC + pBMSC + 512 + WindowsForms + v4.8 + false + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + AnyCPU + true + full + true + true + bin\Debug\ + + + + + false + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + AnyCPU + none + false + true + false + bin\pBMSC\ + + + + + false + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + On + + + Binary + + + On + + + On + + + Icon.ico + + + My Project\app.manifest + + + true + bin\test\ + + + true + + + pdbonly + AnyCPU + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + true + + + Always + + + + False + ..\packages\cscore.1.2.1.2\lib\net35-client\CSCore.dll + + + False + ..\packages\nvorbis.0.10.4\lib\net45\NVorbis.dll + + + + + + + ..\packages\system.runtime.compilerservices.unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + + + + + + + + + + + + + + + + + + + + Form + + + Form + + + + Component1.vb + + + Component + + + True + True + Settings.settings + + + + Form + + + AboutBox1.vb + + + Form + + + + ColorPicker.vb + + + Form + + + dgImportSM.vb + + + Form + + + dgMyO2.vb + + + Form + + + dgStatistics.vb + + + Form + + + dgFind.vb + + + Form + + + fLoadFileProgress.vb + + + Form + + + SplashScreen1.vb + + + Form + + + Form + + + Form + + + Form + + + + MainWindow.vb + + + Form + + + Form + + + Form + + + OpTotal.vb + + + Form + + + OpKeybinding.vb + + + Form + + + OpVisual.vb + + + Form + + + OpExpand.vb + + + Form + + + OpVisualOverride.vb + + + Form + + + Form + + + Form + + + + Form + + + + + + + True + Application.myapp + True + + + True + True + Resources.resx + + + OpGeneral.vb + + + Form + + + OpPlayer.vb + + + Form + + + + + Form + + + + + + AboutBox1.vb + + + ColorPicker.vb + + + dgImportSM.vb + + + dgMyO2.vb + + + dgMyO2.vb + + + dgStatistics.vb + + + dgFind.vb + + + fLoadFileProgress.vb + + + SplashScreen1.vb + + + MainWindow.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + OpKeybinding.vb + + + OpExpand.vb + + + OpGeneral.vb + + + OpPlayer.vb + + + OpTotal.vb + + + OpVisualOverride.vb + + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + + if $(ConfigurationName) == Release rmdir /q /s "$(TargetDir)" +del "$(TargetDir)..\$(TargetName).zip" +Xcopy /E /I /Y "$(SolutionDir)\misc\Data\" "$(TargetDir)\Data\" + + + powershell IF('$(ConfigurationName)' -eq 'Release') {Compress-Archive -Path '$(TargetDir)*' -DestinationPath '$(TargetDir)..\$(TargetName).zip'} + + --> \ No newline at end of file diff --git a/iBMSC/packages.config b/iBMSC/packages.config index 8112914c3..8b3357a22 100644 --- a/iBMSC/packages.config +++ b/iBMSC/packages.config @@ -1,5 +1,5 @@ - - - - + + + + \ No newline at end of file diff --git a/misc/Data/chs.Lang.xml b/misc/Data/chs.Lang.xml index ee32b62df..b139836da 100644 Binary files a/misc/Data/chs.Lang.xml and b/misc/Data/chs.Lang.xml differ diff --git a/misc/Data/eng.Lang.xml b/misc/Data/eng.Lang.xml index c3a2cd58a..d5c009810 100644 Binary files a/misc/Data/eng.Lang.xml and b/misc/Data/eng.Lang.xml differ diff --git a/misc/Data/jpn.Lang.xml b/misc/Data/jpn.Lang.xml index 31085f1b5..18868f8a2 100644 Binary files a/misc/Data/jpn.Lang.xml and b/misc/Data/jpn.Lang.xml differ diff --git a/misc/Data/kor.Lang.xml b/misc/Data/kor.Lang.xml index df0b4ed2b..75b7dd7e6 100644 --- a/misc/Data/kor.Lang.xml +++ b/misc/Data/kor.Lang.xml @@ -11,16 +11,25 @@ Ȯ None + Beat + Beats + st + nd + rd + th + (F) (N) (O) + Open &Template .SM .IBMSC (S) ٸ ̸ (A) .IBMSC (E) + &Close ֱ #0 ֱ #1 ֱ #2 @@ -35,23 +44,32 @@ ߶󳻱 (T) (C) ٿֱ (P) + Paste Patter&n (D) (A) + &Go To Measure ã / / ü (F) (T) + Advanced Statistics ð (I) (S) (W) MyO2 ڽ (߱ ) + + View + (O) ճƮ Է¸ - NT/BMSE ˻ (E) ̸ (C) ϸ ǥ (F) + Show Waveform on Notes Ϲ ɼ (G) + Keybinding Options ǥ ɼ (V) + Color Override Options α׷ ɼ (P) (L) ׸ (T) @@ -63,6 +81,12 @@ ݺ (P) (S) + + Tools + Check Technical Error + #TOTAL Tool + MyO2 ڽ (߱ ) + (A) iBMSC ؼ... (A) @@ -77,6 +101,7 @@ ߶󳻱 (Ctrl+X) (Ctrl+C) ٿֱ (Ctrl+V) + Paste Pattern (Ctrl+Shift+V) ˻//ü (Ctrl+F) (Ctrl+T) Ʈ ȯ @@ -84,6 +109,7 @@ ˻ ̸ ϸ ǥ + Show Waveform on Notes (Ctrl+Z) ٽý (Ctrl+Y) ճƮ Է¸ - NoteTool/BMSE @@ -98,6 +124,7 @@ Ϲ ɼ ׸ + Recommended #TOTAL iBMSC ؼ... @@ -109,9 +136,14 @@ ػ ġ + Note ճƮ Ʈ + Landmine + Comment + Approx. + Technical Error ġ @@ -157,12 +189,23 @@ ճƮȭ (L) ϹݳƮȭ (S) ճƮϹݳƮ + LNObj NT Long Note + NT Long Note LNObj + Auto Long Note (By VPosition) + Auto Long Note (By Column) Ʈ (H) Ʈ̱ (V) Ʈ ̱ Ʈȣ (M) ¿ (R) - + Flip + Random + R-Random + S-Random + H-Random + Sort + + ߼ Ʈ @@ -231,20 +274,34 @@ Ʒ + Duplicate + Override Color + + #BMP + + Ʒ + + + Ȯ + #RANDOM Editor Ͱ ˴ϴ. Ͻðڽϱ? ۾ڿ ص + There are unsaved files. Discard changes and close the application?" + You cannot save this as a different file. + There are sections in the expansion code opened separately, please close them before closing this file. ȣ Էϼ. Էϼ. BPM Էϼ. STOP ð Էϼ. + SCROLL ð Էϼ. Ű("/") ڸ ̷ մϴ. ߸ ȣԴϴ. {} ã ϴ. @@ -259,11 +316,16 @@ Ʈ ֽϴ. ڸ ũ ϸ ذ ֽϴ. Ȯ BPM ʹ Ůϴ. : STOP Ʈ ʹ ϴ. : + SCROLL Ʈ ʹ ϴ. : Ͽ ֽϴ. iBMSC {} ⺻ α׷ Ͻðڽϱ? : ʱȭ Ͻðڽϱ? : {} ڵ ֽϴ. ̰ɷ ǵðڽϱ? + The notes in the current section will be changed to ghost notes. Save current section and continue? + The current ghost notes will become uneditable. Continue? + There are unsaved changes in the ghost notes. Save current section and continue? + The clipboard note count is different from the highlighted note count. Continue? <_all> (*.*) @@ -313,6 +375,7 @@ α׷ ġ ϸ + File Name of Template ʱȭ @@ -354,23 +417,114 @@ Ϲ ɼ + Ȯ + BMS ִ ػ + Minimum Jack Threshold + Auto Long Note Gap + Temporary BMS Filename + + ڵ + + ȿ + BPM ִ 1295 ֵ մϴ.(01ZZ) + STOP Ʈ ִ 1295 ֵ մϴ.(01ZZ) + Display audio lines during note preview + Snap to vertical position for moving to template position + Snap to vertical position for pasting patterns + 콺 ũ ڵ PageUp / Down ũ ư ڵ ũ - Ȯ - BMS ִ ػ - ȿ - BPM ִ 1295 ֵ մϴ.(01ZZ) - STOP Ʈ ִ 1295 ֵ մϴ.(01ZZ) 콺  ڵ Ŀ Ŀ Ŭ Ȱȭ մϴ. - ڵ - г Ŭϸ ̸⸦ + + Visual Override Options + ߰ + + Ʒ + Duplicate + Split + Semi-auto assign + + Load Settings From + Save Settings To + Enable Item + Singular color + Color gradient + Color gradient (HSL) + Color gradient (HSL) + Option Name + Label Range + ~ + Note Color + Note Color Range + Preview + Chart + Song + Editor + Warning: Cannot split range. + Please input the upper bound for the first range. + Value not between the range. Please input the upper bound for the first range. + Assign notes with wav filenames beginning with the following: + No notes found. + Assign more notes with wav filenames beginning with the following: + Save current settings? + Overwrite existing settings below? + + + Keybinding Options + Binding Name + Description + Keybindings + + Move to {} + Move note to {1} Lane {2} + Move note to {} Scratch Lane + Move note to BGM Lane + Move to Template Position + Move note to template position if available + Check for technical errors such as impossible scratches in DP or impossible chords in PMS + Select #IF sections in the Expansion field + Apply pattern of the notes on the clipboard to the highlighted notes. + Select all with hovered note label + + Error: {} is unavailable for custom keybinding. + Error: {} has been assigned to other functions. + {1} has been assigned to {2}. Remove keybinding for {2}? + + + #RANDOM Editor + Select Expansion Code: + Display Ghost Notes + Display Ghost Notes (All) + Modify Notes + Modify Section + Remove Ghost Notes + Error: Expansion code is empty. + Error: No line selected. + Error: #IF Section not detected. + + + #TOTAL Tool + #TOTAL Calculation Option + Parameters + #TOTAL + Calculation Formula + IIDX #TOTAL Supposition 1 + IIDX #TOTAL Supposition 2 + Multiplier + Notes + Global Multiplier + Decimal Places + Display Value + Display "{}" + Autofill #TOTAL + Ʈ