From ce6283e8cb60180d4829d3f6a08ea781a6fddc7e Mon Sep 17 00:00:00 2001 From: from Date: Sun, 7 Nov 2010 08:59:07 +0000 Subject: [PATCH 1/1] =?utf8?q?=E3=83=BB=20=E3=80=8CDTXCreator=E3=83=97?= =?utf8?q?=E3=83=AD=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=80=8D=E3=81=A8?= =?utf8?q?=E3=80=8C=E5=AE=9F=E8=A1=8C=E6=99=82=E3=83=95=E3=82=A9=E3=83=AB?= =?utf8?q?=E3=83=80(DTXCreator)=E3=80=8D=E3=82=92=20trunk/=20=E3=81=AB?= =?utf8?q?=E8=BF=BD=E5=8A=A0=E3=80=82=20=E3=83=BB=20FDK.dll=20=E3=81=AB?= =?utf8?q?=E3=81=A4=E3=81=84=E3=81=A6=E3=80=81=E3=83=93=E3=83=AB=E3=83=89?= =?utf8?q?=E6=88=90=E5=8A=9F=E5=BE=8C=E3=81=AB=E3=80=8C=E5=AE=9F=E8=A1=8C?= =?utf8?q?=E6=99=82=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80(DTXCreator)?= =?utf8?q?=E3=80=8D=E3=81=AB=E3=82=82=E3=82=B3=E3=83=94=E3=83=BC=E3=81=99?= =?utf8?q?=E3=82=8B=E3=82=88=E3=81=86=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD?= =?utf8?q?=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@14 16f42ceb-6dc6-49c8-ba94-f2d53467949d --- .../DTXCreator.exe.x86.manifest | 8 + .../DTXCreatorソリューション.sln | 26 + .../DTXCreatorプロジェクト.csproj | 256 ++ .../DTXCreatorプロジェクト.csproj.user | 8 + .../Properties/AssemblyInfo.cs | 38 + .../Properties/Resources.Designer.cs | 583 +++ .../Properties/Resources.resx | 313 ++ .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + DTXCreatorプロジェクト/app.config | 3 + .../コード/00.全体/AppSetting.cs | 371 ++ .../コード/00.全体/CDTX入出力.cs | 2068 +++++++++ .../00.全体/Cバージョン情報.Designer.cs | 60 + .../コード/00.全体/Cバージョン情報.cs | 42 + .../00.全体/Cメインフォーム.Designer.cs | 2164 +++++++++ .../コード/00.全体/Cメインフォーム.cs | 4590 ++++++++++++++++++++ .../00.全体/Cメインフォーム.resx | 570 +++ .../コード/00.全体/Program.cs | 17 + .../コード/01.UndoRedo/CUndoRedoセル.cs | 48 + .../コード/01.UndoRedo/CUndoRedoセル仮想.cs | 38 + .../01.UndoRedo/CUndoRedoディレクトリ.cs | 59 + .../コード/01.UndoRedo/CUndoRedo管理.cs | 123 + .../コード/02.WAV_BMP_AVI/CAVI.cs | 62 + .../02.WAV_BMP_AVI/CAVIキャッシュ.cs | 83 + .../02.WAV_BMP_AVI/CAVIリスト管理.cs | 274 ++ .../コード/02.WAV_BMP_AVI/CBMP.cs | 66 + .../02.WAV_BMP_AVI/CBMPキャッシュ.cs | 83 + .../02.WAV_BMP_AVI/CBMPリスト管理.cs | 277 ++ .../コード/02.WAV_BMP_AVI/CWAV.cs | 96 + .../02.WAV_BMP_AVI/CWAVキャッシュ.cs | 88 + .../02.WAV_BMP_AVI/CWAVリスト管理.cs | 337 ++ ...ƒ³ãƒ‰ãƒ—ロパティダイアログ.Designer.cs | 400 ++ .../Cサウンドプロパティダイアログ.cs | 218 + ...サウンドプロパティダイアログ.resx | 123 + ...‹•ç”»ãƒ—ロパティダイアログ.Designer.cs | 218 + .../C動画プロパティダイアログ.cs | 123 + .../C動画プロパティダイアログ.resx | 123 + ...”»åƒãƒ—ロパティダイアログ.Designer.cs | 233 + .../C画像プロパティダイアログ.cs | 133 + .../C画像プロパティダイアログ.resx | 123 + .../Cオプションダイアログ.Designer.cs | 203 + .../Cオプションダイアログ.cs | 16 + .../Cオプションダイアログ.resx | 120 + .../Cオプション管理.cs | 39 + .../Cチップパレット.Designer.cs | 252 ++ .../Cチップパレット.cs | 206 + .../Cチップパレット.resx | 240 + ...チップパレット向けDragDropデータ.cs | 17 + .../コード/05.譜面/Cクリップセル.cs | 15 + .../コード/05.譜面/Cクリップボード.cs | 127 + .../コード/05.譜面/Cチップ.cs | 225 + .../05.譜面/Cチップ位置用UndoRedo.cs | 22 + .../05.譜面/Cチップ配置用UndoRedo.cs | 18 + .../コード/05.譜面/Cレーン.cs | 49 + .../05.譜面/Cレーン割付用UndoRedo.cs | 20 + .../コード/05.譜面/C小節.cs | 100 + .../コード/05.譜面/C小節用UndoRedo.cs | 18 + .../C小節長変更ダイアログ.Designer.cs | 160 + .../05.譜面/C小節長変更ダイアログ.cs | 64 + .../05.譜面/C小節長変更ダイアログ.resx | 120 + .../C数値入力ダイアログ.Designer.cs | 126 + .../05.譜面/C数値入力ダイアログ.cs | 44 + .../05.譜面/C数値入力ダイアログ.resx | 120 + .../05.譜面/C検索ダイアログ.Designer.cs | 229 + .../コード/05.譜面/C検索ダイアログ.cs | 452 ++ .../05.譜面/C検索ダイアログ.ja-JP.resx | 126 + .../05.譜面/C検索ダイアログ.resx | 622 +++ .../コード/05.譜面/C編集モード管理.cs | 315 ++ .../05.譜面/C置換ダイアログ.Designer.cs | 170 + .../コード/05.譜面/C置換ダイアログ.cs | 136 + .../05.譜面/C置換ダイアログ.resx | 120 + .../コード/05.譜面/C譜面管理.cs | 1255 ++++++ .../コード/05.譜面/C選択モード管理.cs | 797 ++++ .../Cファイル選択・パス変換.cs | 53 + .../Cメッセージポップアップ.Designer.cs | 79 + .../Cメッセージポップアップ.cs | 42 + .../Cメッセージポップアップ.resx | 120 + .../コード/99.リソース/AudioHS.png | Bin 0 -> 729 bytes .../コード/99.リソース/CopyHS.png | Bin 0 -> 643 bytes .../コード/99.リソース/CutHS.png | Bin 0 -> 628 bytes .../コード/99.リソース/DTXC.ico | Bin 0 -> 25214 bytes .../99.リソース/DataContainer_MoveNextHS.png | Bin 0 -> 441 bytes .../99.リソース/DataContainer_NewRecordHS.png | Bin 0 -> 590 bytes .../コード/99.リソース/DocumentHS.png | Bin 0 -> 390 bytes .../99.リソース/EditInformationHS.png | Bin 0 -> 621 bytes .../コード/99.リソース/Edit_RedoHS.png | Bin 0 -> 672 bytes .../コード/99.リソース/Edit_UndoHS.png | Bin 0 -> 685 bytes .../コード/99.リソース/Help.png | Bin 0 -> 3403 bytes .../コード/99.リソース/MoveDown.png | Bin 0 -> 3108 bytes .../コード/99.リソース/MoveUp.png | Bin 0 -> 477 bytes .../コード/99.リソース/MusicDoc.PNG | Bin 0 -> 1456 bytes .../コード/99.リソース/PasteHS.png | Bin 0 -> 730 bytes .../コード/99.リソース/PauseHS.png | Bin 0 -> 297 bytes .../コード/99.リソース/PicDoc.PNG | Bin 0 -> 1452 bytes .../コード/99.リソース/PointerHS.png | Bin 0 -> 541 bytes .../コード/99.リソース/StopHS.png | Bin 0 -> 410 bytes .../コード/99.リソース/VideoDoc.PNG | Bin 0 -> 1421 bytes .../コード/99.リソース/deleteHS.png | Bin 0 -> 380 bytes .../コード/99.リソース/openHS.png | Bin 0 -> 743 bytes .../コード/99.リソース/pencil.gif | Bin 0 -> 357 bytes .../コード/99.リソース/saveHS.png | Bin 0 -> 595 bytes .../コード/99.リソース/りらちょー.png | Bin 0 -> 4291 bytes .../99.リソース/バージョン情報.png | Bin 0 -> 81622 bytes .../99.リソース/最初から再生.png | Bin 0 -> 591 bytes .../コード/99.リソース/表示形式.png | Bin 0 -> 760 bytes 105 files changed, 21315 insertions(+) create mode 100644 DTXCreatorプロジェクト/DTXCreator.exe.x86.manifest create mode 100644 DTXCreatorプロジェクト/DTXCreatorソリューション.sln create mode 100644 DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj create mode 100644 DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj.user create mode 100644 DTXCreatorプロジェクト/Properties/AssemblyInfo.cs create mode 100644 DTXCreatorプロジェクト/Properties/Resources.Designer.cs create mode 100644 DTXCreatorプロジェクト/Properties/Resources.resx create mode 100644 DTXCreatorプロジェクト/Properties/Settings.Designer.cs create mode 100644 DTXCreatorプロジェクト/Properties/Settings.settings create mode 100644 DTXCreatorプロジェクト/app.config create mode 100644 DTXCreatorプロジェクト/コード/00.全体/AppSetting.cs create mode 100644 DTXCreatorプロジェクト/コード/00.全体/CDTX入出力.cs create mode 100644 DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.cs create mode 100644 DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs create mode 100644 DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.resx create mode 100644 DTXCreatorプロジェクト/コード/00.全体/Program.cs create mode 100644 DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル.cs create mode 100644 DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル仮想.cs create mode 100644 DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoディレクトリ.cs create mode 100644 DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedo管理.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVI.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIキャッシュ.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIリスト管理.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMP.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPキャッシュ.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPリスト管理.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAV.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVキャッシュ.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVリスト管理.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/03.オプション関連/Cオプション管理.cs create mode 100644 DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.cs create mode 100644 DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.resx create mode 100644 DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット向けDragDropデータ.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cクリップセル.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cクリップボード.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cチップ.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cチップ位置用UndoRedo.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cチップ配置用UndoRedo.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cレーン.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/Cレーン割付用UndoRedo.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C小節.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C小節用UndoRedo.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.ja-JP.resx create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C編集モード管理.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.resx create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C譜面管理.cs create mode 100644 DTXCreatorプロジェクト/コード/05.譜面/C選択モード管理.cs create mode 100644 DTXCreatorプロジェクト/コード/06.汎用/Cファイル選択・パス変換.cs create mode 100644 DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.Designer.cs create mode 100644 DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.cs create mode 100644 DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.resx create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/AudioHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/CopyHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/CutHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/DTXC.ico create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/DataContainer_MoveNextHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/DataContainer_NewRecordHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/DocumentHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/EditInformationHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/Edit_RedoHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/Edit_UndoHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/Help.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/MoveDown.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/MoveUp.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/MusicDoc.PNG create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/PasteHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/PauseHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/PicDoc.PNG create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/PointerHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/StopHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/VideoDoc.PNG create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/deleteHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/openHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/pencil.gif create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/saveHS.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/りらちょー.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/バージョン情報.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/最初から再生.png create mode 100644 DTXCreatorプロジェクト/コード/99.リソース/表示形式.png diff --git a/DTXCreatorプロジェクト/DTXCreator.exe.x86.manifest b/DTXCreatorプロジェクト/DTXCreator.exe.x86.manifest new file mode 100644 index 00000000..205f004a --- /dev/null +++ b/DTXCreatorプロジェクト/DTXCreator.exe.x86.manifest @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/DTXCreatorプロジェクト/DTXCreatorソリューション.sln b/DTXCreatorプロジェクト/DTXCreatorソリューション.sln new file mode 100644 index 00000000..36a7e752 --- /dev/null +++ b/DTXCreatorプロジェクト/DTXCreatorソリューション.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C# Express 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTXCreatorプロジェクト", "DTXCreatorプロジェクト.csproj", "{BAC81BCC-5689-4600-91A0-7427667500D6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FDK17", "..\FDK17プロジェクト\FDK17.csproj", "{BCD40908-F3E2-4707-BFAA-1DD99DF6357D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BAC81BCC-5689-4600-91A0-7427667500D6}.Debug|x86.ActiveCfg = Debug|x86 + {BAC81BCC-5689-4600-91A0-7427667500D6}.Debug|x86.Build.0 = Debug|x86 + {BAC81BCC-5689-4600-91A0-7427667500D6}.Release|x86.ActiveCfg = Release|x86 + {BAC81BCC-5689-4600-91A0-7427667500D6}.Release|x86.Build.0 = Release|x86 + {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Debug|x86.ActiveCfg = Debug|x86 + {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Debug|x86.Build.0 = Debug|x86 + {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Release|x86.ActiveCfg = Release|x86 + {BCD40908-F3E2-4707-BFAA-1DD99DF6357D}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj b/DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj new file mode 100644 index 00000000..0269ecd4 --- /dev/null +++ b/DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj @@ -0,0 +1,256 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {BAC81BCC-5689-4600-91A0-7427667500D6} + WinExe + Properties + DTXCreator + DTXCreator + v2.0 + 512 + + + コード\99.リソース\DTXC.ico + DTXCreator.exe.x86.manifest + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + 0219 + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + 0219 + + + + + + + + + + + + + Form + + + Cバージョン情報.cs + + + Form + + + Cメインフォーム.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Cメインフォーム.cs + + + Cサウンドプロパティダイアログ.cs + + + C動画プロパティダイアログ.cs + + + C画像プロパティダイアログ.cs + + + Cオプションダイアログ.cs + + + Cチップパレット.cs + + + C小節長変更ダイアログ.cs + + + C数値入力ダイアログ.cs + + + C検索ダイアログ.cs + + + C検索ダイアログ.cs + + + C置換ダイアログ.cs + + + Cメッセージポップアップ.cs + + + True + Resources.resx + True + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + Form + + + Cサウンドプロパティダイアログ.cs + + + Form + + + C動画プロパティダイアログ.cs + + + Form + + + C画像プロパティダイアログ.cs + + + Form + + + Cオプションダイアログ.cs + + + + Form + + + Cチップパレット.cs + + + + + + + + + + + + + Form + + + C小節長変更ダイアログ.cs + + + Form + + + C数値入力ダイアログ.cs + + + Form + + + C検索ダイアログ.cs + + + + Form + + + C置換ダイアログ.cs + + + + + + Form + + + Cメッセージポップアップ.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {BCD40908-F3E2-4707-BFAA-1DD99DF6357D} + FDK17 + + + + + + copy /Y "$(TargetPath)" "$(SolutionDir)..\実行時フォルダ(DTXCreator)" + + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj.user b/DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj.user new file mode 100644 index 00000000..6e1d3e51 --- /dev/null +++ b/DTXCreatorプロジェクト/DTXCreatorプロジェクト.csproj.user @@ -0,0 +1,8 @@ + + + ProjectFiles + + + C:\Users\Kenji\HOME\作業場\開発\@DTXMania\SFリポジトリ\trunk\実行時フォルダ(DTXCreator)\ + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/Properties/AssemblyInfo.cs b/DTXCreatorプロジェクト/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..fea6e4e3 --- /dev/null +++ b/DTXCreatorプロジェクト/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Resources; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle( "DTXCreator" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "" )] +[assembly: AssemblyProduct( "DTXCreator" )] +[assembly: AssemblyCopyright( "Copyright (C) 2000 2010 DTXMania Group" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible( false )] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid( "53dad953-6fae-41eb-8f96-eef5dff8d16c" )] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "21.0.0.0" )] +[assembly: AssemblyFileVersion( "21.0.0.0" )] +[assembly: NeutralResourcesLanguageAttribute( "ja-JP" )] diff --git a/DTXCreatorプロジェクト/Properties/Resources.Designer.cs b/DTXCreatorプロジェクト/Properties/Resources.Designer.cs new file mode 100644 index 00000000..384d4c67 --- /dev/null +++ b/DTXCreatorプロジェクト/Properties/Resources.Designer.cs @@ -0,0 +1,583 @@ +//------------------------------------------------------------------------------ +// +// このコードはツールによって生成されました。 +// ランタイム バージョン:2.0.50727.4952 +// +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします。 +// +//------------------------------------------------------------------------------ + +namespace DTXCreator.Properties { + using System; + + + /// + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 + /// + // このクラスは StronglyTypedResourceBuilder クラスが ResGen + // または Visual Studio のようなツールを使用して自動生成されました。 + // メンバを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に + // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DTXCreator.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、 + /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap BGMのみ再生 { + get { + object obj = ResourceManager.GetObject("BGMのみ再生", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 021 に類似しているローカライズされた文字列を検索します。 + /// + internal static string DTXC_VERSION { + get { + return ResourceManager.GetString("DTXC_VERSION", resourceCulture); + } + } + + internal static System.Drawing.Icon dtxcreator { + get { + object obj = ResourceManager.GetObject("dtxcreator", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Bitmap Redo { + get { + object obj = ResourceManager.GetObject("Redo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// BPM値を設定して下さい。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strBPM選択ダイアログの説明文 { + get { + return ResourceManager.GetString("strBPM選択ダイアログの説明文", resourceCulture); + } + } + + /// + /// DTXファイルではありません。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strDTXファイルではありませんMSG { + get { + return ResourceManager.GetString("strDTXファイルではありませんMSG", resourceCulture); + } + } + + /// + /// 読み込むDTXファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strDTXファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("strDTXファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// DTXファイル (*.dtx;*.gda;*.g2d;*.bms;*.bme)|*.dtx;*.gda;*.g2d;*.bms;*.bme|すべてのファイル(*.*)|*.* に類似しているローカライズされた文字列を検索します。 + /// + internal static string strDTXファイル選択ダイアログのフィルタ { + get { + return ResourceManager.GetString("strDTXファイル選択ダイアログのフィルタ", resourceCulture); + } + } + + /// + /// エラー に類似しているローカライズされた文字列を検索します。 + /// + internal static string strエラーダイアログのタイトル { + get { + return ResourceManager.GetString("strエラーダイアログのタイトル", resourceCulture); + } + } + + /// + /// DTXCreator.config の読み込みに失敗しました。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strコンフィグ読み込み失敗エラーMSG { + get { + return ResourceManager.GetString("strコンフィグ読み込み失敗エラーMSG", resourceCulture); + } + } + + /// + /// サウンドファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strサウンドファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("strサウンドファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// サウンドファイル(*.wav;*.ogg;*.mp3;*.xa)|*.wav;*.ogg;*.mp3;*.xa|すべてのファイル(*.*)|*.* に類似しているローカライズされた文字列を検索します。 + /// + internal static string strサウンドファイル選択ダイアログのフィルタ { + get { + return ResourceManager.GetString("strサウンドファイル選択ダイアログのフィルタ", resourceCulture); + } + } + + /// + /// しばらくお待ち下さい。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strしばらくお待ち下さいMSG { + get { + return ResourceManager.GetString("strしばらくお待ち下さいMSG", resourceCulture); + } + } + + /// + /// Loadingファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strステージ画像ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("strステージ画像ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// チップ番号に誤りがあります。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strチップ番号に誤りがありますMSG { + get { + return ResourceManager.GetString("strチップ番号に誤りがありますMSG", resourceCulture); + } + } + + /// + /// 新規 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strデフォルトウィンドウタイトル { + get { + return ResourceManager.GetString("strデフォルトウィンドウタイトル", resourceCulture); + } + } + + /// + /// ファイルが存在しません。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strファイルが存在しませんMSG { + get { + return ResourceManager.GetString("strファイルが存在しませんMSG", resourceCulture); + } + } + + /// + /// 選曲画像ファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strプレビュー画像ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("strプレビュー画像ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// プレビュー音ファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strプレビュー音ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("strプレビュー音ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// プロセスの起動に失敗しました。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string strプロセスの起動に失敗しましたMSG { + get { + return ResourceManager.GetString("strプロセスの起動に失敗しましたMSG", resourceCulture); + } + } + + /// + /// 保存中です。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str保存中ですMSG { + get { + return ResourceManager.GetString("str保存中ですMSG", resourceCulture); + } + } + + /// + /// 個のチップが選択されました。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str個のチップが選択されましたMSG { + get { + return ResourceManager.GetString("str個のチップが選択されましたMSG", resourceCulture); + } + } + + /// + /// 個のチップを置換しました。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str個のチップを置換しましたMSG { + get { + return ResourceManager.GetString("str個のチップを置換しましたMSG", resourceCulture); + } + } + + /// + /// 初期化中です。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str初期化中ですMSG { + get { + return ResourceManager.GetString("str初期化中ですMSG", resourceCulture); + } + } + + /// + /// 動画ファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str動画ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("str動画ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 動画ファイル(*.avi)|*.avi|すべてのファイル(*.*)|*.* に類似しているローカライズされた文字列を検索します。 + /// + internal static string str動画ファイル選択ダイアログのフィルタ { + get { + return ResourceManager.GetString("str動画ファイル選択ダイアログのフィルタ", resourceCulture); + } + } + + /// + /// 名前を付けて保存 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str名前を付けて保存ダイアログのタイトル { + get { + return ResourceManager.GetString("str名前を付けて保存ダイアログのタイトル", resourceCulture); + } + } + + /// + /// DTXファイル(*.dtx)|*.dtx に類似しているローカライズされた文字列を検索します。 + /// + internal static string str名前を付けて保存ダイアログのフィルタ { + get { + return ResourceManager.GetString("str名前を付けて保存ダイアログのフィルタ", resourceCulture); + } + } + + /// + /// 小節番号に誤りがあります。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str小節番号に誤りがありますMSG { + get { + return ResourceManager.GetString("str小節番号に誤りがありますMSG", resourceCulture); + } + } + + /// + /// 検索結果 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str検索結果ダイアログのタイトル { + get { + return ResourceManager.GetString("str検索結果ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 画像ファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str画像ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("str画像ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 画像ファイル(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|すべてのファイル(*.*)|*.* に類似しているローカライズされた文字列を検索します。 + /// + internal static string str画像ファイル選択ダイアログのフィルタ { + get { + return ResourceManager.GetString("str画像ファイル選択ダイアログのフィルタ", resourceCulture); + } + } + + /// + /// 確認 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str確認ダイアログのタイトル { + get { + return ResourceManager.GetString("str確認ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 結果画像ファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str結果画像ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("str結果画像ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 編集中のデータを保存しますか? に類似しているローカライズされた文字列を検索します。 + /// + internal static string str編集中のデータを保存しますかMSG { + get { + return ResourceManager.GetString("str編集中のデータを保存しますかMSG", resourceCulture); + } + } + + /// + /// 置換結果 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str置換結果ダイアログのタイトル { + get { + return ResourceManager.GetString("str置換結果ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 背景画像ファイルの選択 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str背景画像ファイル選択ダイアログのタイトル { + get { + return ResourceManager.GetString("str背景画像ファイル選択ダイアログのタイトル", resourceCulture); + } + } + + /// + /// 該当するチップはありませんでした。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str該当するチップはありませんでしたMSG { + get { + return ResourceManager.GetString("str該当するチップはありませんでしたMSG", resourceCulture); + } + } + + /// + /// 読み込み中です。 に類似しているローカライズされた文字列を検索します。 + /// + internal static string str読み込み中ですMSG { + get { + return ResourceManager.GetString("str読み込み中ですMSG", resourceCulture); + } + } + + internal static System.Drawing.Bitmap Undo { + get { + object obj = ResourceManager.GetObject("Undo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap コピー { + get { + object obj = ResourceManager.GetObject("コピー", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap スピーカー { + get { + object obj = ResourceManager.GetObject("スピーカー", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap チップパレット { + get { + object obj = ResourceManager.GetObject("チップパレット", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap バージョン情報 { + get { + object obj = ResourceManager.GetObject("バージョン情報", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap ヘルプ { + get { + object obj = ResourceManager.GetObject("ヘルプ", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap りらちょー { + get { + object obj = ResourceManager.GetObject("りらちょー", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 上移動 { + get { + object obj = ResourceManager.GetObject("上移動", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 下移動 { + get { + object obj = ResourceManager.GetObject("下移動", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 保存 { + get { + object obj = ResourceManager.GetObject("保存", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 再生 { + get { + object obj = ResourceManager.GetObject("再生", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 再生一時停止 { + get { + object obj = ResourceManager.GetObject("再生一時停止", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 再生停止 { + get { + object obj = ResourceManager.GetObject("再生停止", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 切り取り { + get { + object obj = ResourceManager.GetObject("切り取り", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 削除 { + get { + object obj = ResourceManager.GetObject("削除", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 動画ドキュメント { + get { + object obj = ResourceManager.GetObject("動画ドキュメント", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 新規作成 { + get { + object obj = ResourceManager.GetObject("新規作成", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 最初から再生 { + get { + object obj = ResourceManager.GetObject("最初から再生", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 画像ドキュメント { + get { + object obj = ResourceManager.GetObject("画像ドキュメント", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 矢印ポインタ { + get { + object obj = ResourceManager.GetObject("矢印ポインタ", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 表示形式選択 { + get { + object obj = ResourceManager.GetObject("表示形式選択", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 貼り付け { + get { + object obj = ResourceManager.GetObject("貼り付け", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 鉛筆 { + get { + object obj = ResourceManager.GetObject("鉛筆", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 開く { + get { + object obj = ResourceManager.GetObject("開く", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap 音楽ドキュメント { + get { + object obj = ResourceManager.GetObject("音楽ドキュメント", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/DTXCreatorプロジェクト/Properties/Resources.resx b/DTXCreatorプロジェクト/Properties/Resources.resx new file mode 100644 index 00000000..59c97a83 --- /dev/null +++ b/DTXCreatorプロジェクト/Properties/Resources.resx @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\コード\99.リソース\datacontainer_newrecordhs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\DTXC.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + 021 + + + ..\コード\99.リソース\edit_redohs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + BPM値を設定して下さい。 + + + DTXファイルではありません。 + + + 読み込むDTXファイルの選択 + + + DTXファイル (*.dtx;*.gda;*.g2d;*.bms;*.bme)|*.dtx;*.gda;*.g2d;*.bms;*.bme|すべてのファイル(*.*)|*.* + + + しばらくお待ち下さい。 + + + エラー + + + DTXCreator.config の読み込みに失敗しました。 + + + サウンドファイルの選択 + + + サウンドファイル(*.wav;*.ogg;*.mp3;*.xa)|*.wav;*.ogg;*.mp3;*.xa|すべてのファイル(*.*)|*.* + + + Loadingファイルの選択 + + + チップ番号に誤りがあります。 + + + 新規 + + + ファイルが存在しません。 + + + 選曲画像ファイルの選択 + + + プレビュー音ファイルの選択 + + + プロセスの起動に失敗しました。 + + + 保存中です。 + + + 個のチップが選択されました。 + + + 個のチップを置換しました。 + + + 初期化中です。 + + + 動画ファイルの選択 + + + 動画ファイル(*.avi)|*.avi|すべてのファイル(*.*)|*.* + + + 名前を付けて保存 + + + DTXファイル(*.dtx)|*.dtx + + + 小節番号に誤りがあります。 + + + 検索結果 + + + 画像ファイルの選択 + + + 画像ファイル(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|すべてのファイル(*.*)|*.* + + + 確認 + + + 結果画像ファイルの選択 + + + 編集中のデータを保存しますか? + + + 置換結果 + + + 背景画像ファイルの選択 + + + 該当するチップはありませんでした。 + + + 読み込み中です。 + + + ..\コード\99.リソース\edit_undohs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\りらちょー.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\copyhs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\audiohs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\バージョン情報.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\moveup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\movedown.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\savehs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\datacontainer_movenexths.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\pausehs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\stophs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\cuths.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\deletehs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\videodoc.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\documenths.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\最初から再生.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\picdoc.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\pointerhs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\表示形式.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\pastehs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\pencil.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\openhs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\musicdoc.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\コード\99.リソース\editinformationhs.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/Properties/Settings.Designer.cs b/DTXCreatorプロジェクト/Properties/Settings.Designer.cs new file mode 100644 index 00000000..b2fbfa4c --- /dev/null +++ b/DTXCreatorプロジェクト/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// このコードはツールによって生成されました。 +// ランタイム バージョン:2.0.50727.4952 +// +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします。 +// +//------------------------------------------------------------------------------ + +namespace DTXCreator.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/DTXCreatorプロジェクト/Properties/Settings.settings b/DTXCreatorプロジェクト/Properties/Settings.settings new file mode 100644 index 00000000..abf36c5d --- /dev/null +++ b/DTXCreatorプロジェクト/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/DTXCreatorプロジェクト/app.config b/DTXCreatorプロジェクト/app.config new file mode 100644 index 00000000..b7db2817 --- /dev/null +++ b/DTXCreatorプロジェクト/app.config @@ -0,0 +1,3 @@ + + + diff --git a/DTXCreatorプロジェクト/コード/00.全体/AppSetting.cs b/DTXCreatorプロジェクト/コード/00.全体/AppSetting.cs new file mode 100644 index 00000000..a25eff46 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/AppSetting.cs @@ -0,0 +1,371 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace DTXCreator +{ + // 使い方 + // + // 保存方法: + //  var xmlsl = new System.Xml.Serialization.XmlSerializer(typeof(AppSetting)); + //  FileStream fs = new FileStream(設定ファイル名, FileMode.Create); + //  xmlsl.Serialize(fs, this.アプリ設定); + //  fs.Close(); + // + // 読み込み方法: + // try + // { + // var xmlsl = new System.Xml.Serialization.XmlSerializer(typeof(AppSetting)); + // FileStream fs = new FileStream(設定ファイル名, FileMode.Open); + // this.アプリ設定 = (AppSetting)xmlsl.Deserialize(fs); + // fs.Close(); + // } + // catch (Exception) + // { + // Debug.WriteLine("アプリ設定ファイルの読み込みに失敗しました。"); + // return; + // } + + public class AppSetting + { + #region [ コンストラクタ ] + //----------------- + public AppSetting() + { + this._SoundListColumnWidth[ 0 ] = 80; + this._SoundListColumnWidth[ 1 ] = 28; + this._SoundListColumnWidth[ 2 ] = 80; + this._SoundListColumnWidth[ 3 ] = 40; + this._SoundListColumnWidth[ 4 ] = 60; + this._GraphicListColumnWidth[ 0 ] = 34; + this._GraphicListColumnWidth[ 1 ] = 127; + this._GraphicListColumnWidth[ 2 ] = 28; + this._GraphicListColumnWidth[ 3 ] = 120; + this._MovieListColumnWidth[ 0 ] = 127; + this._MovieListColumnWidth[ 1 ] = 28; + this._MovieListColumnWidth[ 2 ] = 120; + this._LastWorkFolder = Directory.GetCurrentDirectory(); + this._ViewerInfo = new Viewer(); + } + //----------------- + #endregion + + // プロパティ(1) オプション項目関連 + + #region [ List RecentUsedFile - 最近使ったファイル名のリスト ] + //----------------- + public List RecentUsedFile + { + get; + set; + } + private List _RecentUsedFile = new List(); + //----------------- + #endregion + + public void AddRecentUsedFile( string fileName ) + { + for( int i = 0; i < this._RecentUsedFile.Count; i++ ) + { + if( this._RecentUsedFile[ i ].Equals( fileName ) ) + { + this._RecentUsedFile.RemoveAt( i ); + break; + } + } + this._RecentUsedFile.Insert( 0, fileName ); + if( this._RecentUsedFile.Count > 10 ) + { + int num2 = this._RecentUsedFile.Count - 10; + for( int j = 0; j < num2; j++ ) + { + this._RecentUsedFile.RemoveAt( 10 + j ); + } + } + } + public bool bSameVersion() + { + return ( this._ConfigVersion == _ConfigSchemaVersion ); + } + public void Confirm() + { + if( this._RecentFilesNum <= 0 ) + { + this._RecentFilesNum = 5; + this._ShowRecentFiles = false; + } + else if( this._RecentFilesNum > 10 ) + { + this._RecentFilesNum = 10; + } + } + + public bool AutoFocus + { + get + { + return this._AutoFocus; + } + set + { + this._AutoFocus = value; + } + } + public int ConfigVersion + { + get + { + return this._ConfigVersion; + } + set + { + this._ConfigVersion = value; + } + } + public int[] GraphicListColumnWidth + { + get + { + return this._GraphicListColumnWidth; + } + set + { + this._GraphicListColumnWidth = value; + } + } + public int GuideIndex + { + get + { + return this._GuideIndex; + } + set + { + this._GuideIndex = value; + if( this._GuideIndex < 0 ) + { + this._GuideIndex = 0; + } + else if( this._GuideIndex > 8 ) + { + this._GuideIndex = 8; + } + } + } + public int Height + { + get + { + return this._Height; + } + set + { + this._Height = value; + if( this._Height < 0 ) + { + this._Height = 10; + } + } + } + public int HViewScaleIndex + { + get + { + return this._HViewScaleIndex; + } + set + { + this._HViewScaleIndex = value; + if( this._HViewScaleIndex < 0 ) + { + this._HViewScaleIndex = 0; + } + else if( this._HViewScaleIndex > 9 ) + { + this._HViewScaleIndex = 9; + } + } + } + public string LastWorkFolder + { + get + { + return this._LastWorkFolder; + } + set + { + this._LastWorkFolder = value; + } + } + public bool Maximized + { + get + { + return this._Maximized; + } + set + { + this._Maximized = value; + } + } + public int[] MovieListColumnWidth + { + get + { + return this._MovieListColumnWidth; + } + set + { + this._MovieListColumnWidth = value; + } + } + public bool NoPreviewBGM + { + get + { + return this._NoPreviewBGM; + } + set + { + this._NoPreviewBGM = value; + } + } + public bool PlaySoundOnWAVChipAllocated + { + get + { + return this._PlaySoundOnWAVChipAllocated; + } + set + { + this._PlaySoundOnWAVChipAllocated = value; + } + } + public int RecentFilesNum + { + get + { + return this._RecentFilesNum; + } + set + { + this._RecentFilesNum = value; + } + } + public bool ShowRecentFiles + { + get + { + return this._ShowRecentFiles; + } + set + { + this._ShowRecentFiles = value; + } + } + public int[] SoundListColumnWidth + { + get + { + return this._SoundListColumnWidth; + } + set + { + this._SoundListColumnWidth = value; + } + } + public int SplitterDistance + { + get + { + return this._SplitterDistance; + } + set + { + this._SplitterDistance = value; + } + } + public Viewer ViewerInfo + { + get + { + return this._ViewerInfo; + } + set + { + this._ViewerInfo = value; + } + } + public int Width + { + get + { + return this._Width; + } + set + { + this._Width = value; + if( this._Width < 0 ) + { + this._Width = 10; + } + } + } + public int X + { + get + { + return this._X; + } + set + { + this._X = value; + } + } + public int Y + { + get + { + return this._Y; + } + set + { + this._Y = value; + } + } + + public class Viewer + { + public string Path = "DTXV.exe"; + public string PlayStartFromOption = "-N"; + public string PlayStartOption = "-N-1"; + public string PlayStopOption = "-S"; + } + + #region [ private ] + //----------------- + private bool _AutoFocus = true; + private static int _ConfigSchemaVersion = 0x69; + private int _ConfigVersion = _ConfigSchemaVersion; + private int[] _GraphicListColumnWidth = new int[ 4 ]; + private int _GuideIndex = 3; + private int _Height = 0x1db; + private int _HViewScaleIndex; + private string _LastWorkFolder = ""; + private bool _Maximized; + private int[] _MovieListColumnWidth = new int[ 3 ]; + private bool _NoPreviewBGM = true; + private bool _PlaySoundOnWAVChipAllocated = true; + private int _RecentFilesNum = 5; + private bool _ShowRecentFiles = true; + private int[] _SoundListColumnWidth = new int[ 5 ]; + private int _SplitterDistance = 0x128; + private Viewer _ViewerInfo; + private int _Width = 600; + private int _X; + private int _Y; + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/00.全体/CDTX入出力.cs b/DTXCreatorプロジェクト/コード/00.全体/CDTX入出力.cs new file mode 100644 index 00000000..91333bff --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/CDTX入出力.cs @@ -0,0 +1,2068 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Windows.Forms; +using System.Drawing; +using DTXCreator.Properties; +using DTXCreator.譜面; +using DTXCreator.UndoRedo; +using DTXCreator.WAV_BMP_AVI; +using FDK; + +namespace DTXCreator +{ + internal class CDTX入出力 + { + internal CDTX入出力( Cメインフォーム mf ) + { + this._Form = mf; + } + public void tDTX出力( StreamWriter sw ) + { + this.tDTX出力( sw, false ); + } + public void tDTX出力( StreamWriter sw, bool bBGMのみ出力 ) + { + sw.WriteLine( "; Created by DTXCreator " + Resources.DTXC_VERSION ); + this.tDTX出力・タイトルと製作者とコメントその他( sw ); + this.tDTX出力・自由入力欄( sw ); + this.tDTX出力・WAVリスト( sw, bBGMのみ出力 ); + this.tDTX出力・BMPリスト( sw ); + this.tDTX出力・AVIリスト( sw ); + this.tDTX出力・小節長倍率( sw ); + this.tDTX出力・BPxリスト( sw ); + this.tDTX出力・全チップ( sw ); + sw.WriteLine(); + this.tDTX出力・レーン割付チップ( sw ); + this.tDTX出力・WAVリスト色設定( sw ); + this.tDTX出力・BMPリスト色設定( sw ); + this.tDTX出力・AVIリスト色設定( sw ); + this.tDTX出力・チップパレット( sw ); + } + public void tDTX入力( E種別 e種別, ref string str全入力文字列 ) + { + this.e種別 = e種別; + if( str全入力文字列.Length != 0 ) + { + this.dic小節長倍率 = new Dictionary(); + this.listチップパレット = new List(); + this.nBGMWAV番号 = -1; + this._Form.listViewWAVリスト.BeginUpdate(); + this._Form.listViewBMPリスト.BeginUpdate(); + this._Form.listViewAVIリスト.BeginUpdate(); + str全入力文字列 = str全入力文字列.Replace( Environment.NewLine, "\n" ); + str全入力文字列 = str全入力文字列.Replace( '\t', ' ' ); + StringBuilder builder = new StringBuilder(); + CharEnumerator ce = str全入力文字列.GetEnumerator(); + if( ce.MoveNext() ) + { + do + { + if( !this.tDTX入力・空白と改行をスキップする( ref ce ) ) + { + break; + } + if( ce.Current == '#' ) + { + if( ce.MoveNext() ) + { + StringBuilder builder2 = new StringBuilder( 0x20 ); + if( this.tDTX入力・コマンド文字列を抜き出す( ref ce, ref builder2 ) ) + { + StringBuilder builder3 = new StringBuilder( 0x400 ); + if( this.tDTX入力・パラメータ文字列を抜き出す( ref ce, ref builder3 ) ) + { + StringBuilder builder4 = new StringBuilder( 0x400 ); + if( this.tDTX入力・コメント文字列を抜き出す( ref ce, ref builder4 ) ) + { + if( !this.tDTX入力・行解析( ref builder2, ref builder3, ref builder4 ) ) + { + builder.Append( string.Concat( new object[] { "#", builder2, ": ", builder3 } ) ); + if( builder4.Length > 0 ) + { + builder.Append( "\t;" + builder4 ); + } + builder.Append( Environment.NewLine ); + } + continue; + } + } + } + } + break; + } + } + while( this.tDTX入力・コメントをスキップする( ref ce ) ); + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBox自由入力欄.Text = this._Form.textBox自由入力欄.Text + builder.ToString(); + this.tDTX入力・小節内のチップリストを発声位置でソートする(); + this.tDTX入力・小節長倍率配列を昇順ソート済みの小節リストに適用する(); + this.tDTX入力・BPMチップにBPx数値をバインドする(); + this.tDTX入力・キャッシュからListViewを一括構築する(); + this.tDTX入力・チップパレットのListViewを一括構築する(); + if( this.nBGMWAV番号 >= 0 ) + { + this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( this.nBGMWAV番号 ).bBGMとして使用 = true; + } + this._Form.listViewWAVリスト.EndUpdate(); + this._Form.listViewBMPリスト.EndUpdate(); + this._Form.listViewAVIリスト.EndUpdate(); + } + } + } + + public enum E種別 + { + DTX, + GDA, + G2D, + BMS, + BME + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private int[] arr素数リスト = new int[] { + 2, 3, 5, 7, 11, 13, 0x11, 0x13, 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35, + 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83, + 0x89, 0x8b, 0x95, 0x97, 0x9d, 0xa3, 0xa7, 0xad, 0xb3, 0xb5, 0xbf, 0xc1, 0xc5, 0xc7, 0xd3, 0xdf, + 0xe3, 0xe5, 0xe9, 0xef, 0xf1, 0xfb, 0x101, 0x107, 0x10d, 0x10f, 0x115, 0x119, 0x11b, 0x125, 0x133, 0x137, + 0x139, 0x13d, 0x14b, 0x151, 0x15b, 0x15d, 0x161, 0x167, 0x16f, 0x175, 0x17b, 0x17f + }; + private Dictionary dic小節長倍率; + private E種別 e種別; + private List listチップパレット; + private int nBGMWAV番号 = -1; + + private void tDTX入力・BPMチップにBPx数値をバインドする() + { + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + float num2 = 0f; + if( ( cチップ.nチャンネル番号00toFF == 8 ) && this._Form.mgr譜面管理者.dicBPx.TryGetValue( cチップ.n値・整数1to1295, out num2 ) ) + { + cチップ.f値・浮動小数 = num2; + } + if( cチップ.nチャンネル番号00toFF == 3 ) + { + cチップ.nチャンネル番号00toFF = 8; + cチップ.f値・浮動小数 = cチップ.n値・整数1to1295; + cチップ.b裏 = false; + for( int j = 1; j <= 0x50f; j++ ) + { + if( !this._Form.mgr譜面管理者.dicBPx.ContainsKey( j ) ) + { + this._Form.mgr譜面管理者.dicBPx.Add( j, cチップ.f値・浮動小数 ); + cチップ.n値・整数1to1295 = j; + break; + } + } + } + } + } + } + private void tDTX入力・キャッシュからListViewを一括構築する() + { + for( int i = 1; i <= 0x50f; i++ ) + { + CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i ); + if( cwav != null ) + { + cwav.tコピーto( this._Form.listViewWAVリスト.Items[ i - 1 ] ); + } + CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i ); + if( cbmp != null ) + { + cbmp.tコピーto( this._Form.listViewBMPリスト.Items[ i - 1 ] ); + } + CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i ); + if( cavi != null ) + { + cavi.tコピーto( this._Form.listViewAVIリスト.Items[ i - 1 ] ); + } + } + } + private bool tDTX入力・コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 ) + { + if( this.tDTX入力・空白をスキップする( ref ce ) ) + { + while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) ) + { + sb文字列.Append( ce.Current ); + if( !ce.MoveNext() ) + { + return false; + } + } + if( ce.Current == ':' ) + { + if( !ce.MoveNext() ) + { + return false; + } + if( !this.tDTX入力・空白をスキップする( ref ce ) ) + { + return false; + } + } + return true; + } + return false; + } + private bool tDTX入力・コメントをスキップする( ref CharEnumerator ce ) + { + while( ce.Current != '\n' ) + { + if( !ce.MoveNext() ) + { + return false; + } + } + return ce.MoveNext(); + } + private bool tDTX入力・コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 ) + { + if( ce.Current != ';' ) + { + return true; + } + if( ce.MoveNext() ) + { + while( ce.Current != '\n' ) + { + sb文字列.Append( ce.Current ); + if( !ce.MoveNext() ) + { + return false; + } + } + return true; + } + return false; + } + private void tDTX入力・チップパレットのListViewを一括構築する() + { + for( int i = 0; i < ( this.listチップパレット.Count / 2 ); i += 2 ) + { + int num2 = this.listチップパレット[ i * 2 ]; + int num3 = this.listチップパレット[ ( i * 2 ) + 1 ]; + string[] items = new string[ 3 ]; + switch( num2 ) + { + case 0: + { + CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( num3 ); + if( cwav != null ) + { + items[ 0 ] = cwav.strラベル名; + items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 ); + items[ 2 ] = cwav.strファイル名; + ListViewItem item = new ListViewItem( items ); + item.ImageIndex = num2; + item.ForeColor = cwav.col文字色; + item.BackColor = cwav.col背景色; + this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item ); + } + break; + } + case 1: + { + CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( num3 ); + if( cbmp != null ) + { + items[ 0 ] = cbmp.strラベル名; + items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 ); + items[ 2 ] = cbmp.strファイル名; + ListViewItem item2 = new ListViewItem( items ); + item2.ImageIndex = num2; + item2.ForeColor = cbmp.col文字色; + item2.BackColor = cbmp.col背景色; + this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item2 ); + } + break; + } + case 2: + { + CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( num3 ); + if( cavi != null ) + { + items[ 0 ] = cavi.strラベル名; + items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 ); + items[ 2 ] = cavi.strファイル名; + ListViewItem item3 = new ListViewItem( items ); + item3.ImageIndex = num2; + item3.ForeColor = cavi.col文字色; + item3.BackColor = cavi.col背景色; + this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item3 ); + } + break; + } + } + } + } + private bool tDTX入力・パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 ) + { + if( this.tDTX入力・空白をスキップする( ref ce ) ) + { + while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) ) + { + sb文字列.Append( ce.Current ); + if( !ce.MoveNext() ) + { + return false; + } + } + return true; + } + return false; + } + private bool tDTX入力・空白と改行をスキップする( ref CharEnumerator ce ) + { + while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) ) + { + if( !ce.MoveNext() ) + { + return false; + } + } + return true; + } + private bool tDTX入力・空白をスキップする( ref CharEnumerator ce ) + { + while( ce.Current == ' ' ) + { + if( !ce.MoveNext() ) + { + return false; + } + } + return true; + } + private bool tDTX入力・行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント ) + { + string str = sbコマンド.ToString(); + string str2 = sbパラメータ.ToString().Trim(); + string str3 = sbコメント.ToString(); + return ( this.tDTX入力・行解析・TITLE_ARTIST_COMMENT_その他( str, str2, str3 ) || ( this.tDTX入力・行解析・WAVVOL_VOLUME( str, str2, str3 ) || ( this.tDTX入力・行解析・WAVPAN_PAN( str, str2, str3 ) || ( this.tDTX入力・行解析・WAV( str, str2, str3 ) || ( this.tDTX入力・行解析・BGMWAV( str, str2, str3 ) || ( this.tDTX入力・行解析・BMPTEX( str, str2, str3 ) || ( this.tDTX入力・行解析・BMP( str, str2, str3 ) || ( this.tDTX入力・行解析・AVI_AVIPAN( str, str2, str3 ) || ( this.tDTX入力・行解析・BPx( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_LANEBINDEDCHIP( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_WAVFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_WAVBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_BMPFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_BMPBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_AVIFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_AVIBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_CHIPPALETTE( str, str2, str3 ) || this.tDTX入力・行解析・チャンネル( str, str2, str3 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ); + } + private bool tDTX入力・行解析・AVI_AVIPAN( string strコマンド, string strパラメータ, string strコメント ) + { + if( !strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) && strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 3 ); + } + else + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( ( num < 1 ) || ( num > 0x50f ) ) + { + return false; + } + CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( num ); + cavi.strラベル名 = strコメント; + cavi.strファイル名 = strパラメータ; + return true; + } + private bool tDTX入力・行解析・BGMWAV( string strコマンド, string strパラメータ, string strコメント ) + { + if( strコマンド.StartsWith( "bgmwav", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 6 ); + } + else + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 0, 2 ) ); + if( ( num < 1 ) || ( num > 0x50f ) ) + { + return false; + } + this.nBGMWAV番号 = num; + return true; + } + private bool tDTX入力・行解析・BMP( string strコマンド, string strパラメータ, string strコメント ) + { + if( ( strコマンド.Length > 3 ) && strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 3 ); + } + else + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( ( num < 1 ) || ( num > 0x50f ) ) + { + return false; + } + CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num ); + cbmp.strラベル名 = strコメント; + cbmp.strファイル名 = strパラメータ; + cbmp.bテクスチャ = false; + return true; + } + private bool tDTX入力・行解析・BMPTEX( string strコマンド, string strパラメータ, string strコメント ) + { + if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 6 ); + } + else + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( ( num < 1 ) || ( num > 0x50f ) ) + { + return false; + } + CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num ); + cbmp.strラベル名 = strコメント; + cbmp.strファイル名 = strパラメータ; + cbmp.bテクスチャ = true; + return true; + } + private bool tDTX入力・行解析・BPx( string strコマンド, string strパラメータ, string strコメント ) + { + if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 3 ); + } + else + { + return false; + } + int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( ( key < 1 ) || ( key > 0x50f ) ) + { + return false; + } + float result = 0f; + if( ( !float.TryParse( strパラメータ, out result ) || ( result < 0f ) ) || ( result > 1000f ) ) + { + return false; + } + this._Form.mgr譜面管理者.dicBPx.Add( key, result ); + return true; + } + private bool tDTX入力・行解析・DTXC_AVIBACKCOLOR( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + if( !strコマンド.Equals( "DTXC_AVIBACKCOLOR", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } ); + if( strArray.Length < 2 ) + { + return false; + } + if( !int.TryParse( strArray[ 0 ], out num ) ) + { + return false; + } + if( ( num < 0 ) || ( num > 0x50e ) ) + { + return false; + } + Color color = ColorTranslator.FromHtml( strArray[ 1 ] ); + if( ( num >= 0 ) && ( num <= 0x50e ) ) + { + this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( num + 1 ).col背景色 = color; + } + return true; + } + private bool tDTX入力・行解析・DTXC_AVIFORECOLOR( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + if( !strコマンド.Equals( "DTXC_AVIFORECOLOR", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } ); + if( strArray.Length < 2 ) + { + return false; + } + if( !int.TryParse( strArray[ 0 ], out num ) ) + { + return false; + } + if( ( num < 0 ) || ( num > 0x50e ) ) + { + return false; + } + Color color = ColorTranslator.FromHtml( strArray[ 1 ] ); + if( ( num >= 0 ) && ( num <= 0x50e ) ) + { + this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( num + 1 ).col文字色 = color; + } + return true; + } + private bool tDTX入力・行解析・DTXC_BMPBACKCOLOR( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + if( !strコマンド.Equals( "DTXC_BMPBACKCOLOR", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } ); + if( strArray.Length < 2 ) + { + return false; + } + if( !int.TryParse( strArray[ 0 ], out num ) ) + { + return false; + } + if( ( num < 0 ) || ( num > 0x50e ) ) + { + return false; + } + Color color = ColorTranslator.FromHtml( strArray[ 1 ] ); + if( ( num >= 0 ) && ( num <= 0x50e ) ) + { + this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num + 1 ).col背景色 = color; + } + return true; + } + private bool tDTX入力・行解析・DTXC_BMPFORECOLOR( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + if( !strコマンド.Equals( "DTXC_BMPFORECOLOR", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } ); + if( strArray.Length < 2 ) + { + return false; + } + if( !int.TryParse( strArray[ 0 ], out num ) ) + { + return false; + } + if( ( num < 0 ) || ( num > 0x50e ) ) + { + return false; + } + Color color = ColorTranslator.FromHtml( strArray[ 1 ] ); + if( ( num >= 0 ) && ( num <= 0x50e ) ) + { + this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num + 1 ).col文字色 = color; + } + return true; + } + private bool tDTX入力・行解析・DTXC_CHIPPALETTE( string strコマンド, string strパラメータ, string strコメント ) + { + if( !strコマンド.Equals( "DTXC_CHIPPALETTE", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + foreach( string str in strパラメータ.Split( new char[] { ' ' } ) ) + { + int num; + string[] strArray2 = str.Split( new char[] { ',' } ); + if( ( ( strArray2.Length == 2 ) && int.TryParse( strArray2[ 0 ], out num ) ) && ( ( num >= 0 ) && ( num <= 2 ) ) ) + { + int item = C変換.n36進数2桁の文字列を数値に変換して返す( strArray2[ 1 ] ); + if( ( item >= 1 ) && ( item <= 0x50f ) ) + { + this.listチップパレット.Add( num ); + this.listチップパレット.Add( item ); + } + } + } + return true; + } + private bool tDTX入力・行解析・DTXC_LANEBINDEDCHIP( string strコマンド, string strパラメータ, string strコメント ) + { + if( strコマンド.Equals( "DTXC_LANEBINDEDCHIP", StringComparison.OrdinalIgnoreCase ) && ( strパラメータ.Length == 8 ) ) + { + int num; + if( !int.TryParse( strパラメータ.Substring( 0, 2 ), out num ) ) + { + return false; + } + int num2 = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 3, 2 ) ); + if( ( num2 < 0 ) || ( num2 > 0x50f ) ) + { + return false; + } + int num3 = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 6, 2 ) ); + if( ( num3 < 0 ) || ( num3 > 0x50f ) ) + { + return false; + } + if( ( num >= 0 ) && ( num < this._Form.mgr譜面管理者.listレーン.Count ) ) + { + if( num2 != 0 ) + { + this._Form.mgr譜面管理者.listレーン[ num ].nレーン割付チップ・表0or1to1295 = num2; + } + if( num3 != 0 ) + { + this._Form.mgr譜面管理者.listレーン[ num ].nレーン割付チップ・裏0or1to1295 = num3; + } + return true; + } + } + return false; + } + private bool tDTX入力・行解析・DTXC_WAVBACKCOLOR( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + if( !strコマンド.Equals( "DTXC_WAVBACKCOLOR", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } ); + if( strArray.Length < 2 ) + { + return false; + } + if( !int.TryParse( strArray[ 0 ], out num ) ) + { + return false; + } + if( ( num < 0 ) || ( num > 0x50e ) ) + { + return false; + } + Color color = ColorTranslator.FromHtml( strArray[ 1 ] ); + if( ( num >= 0 ) && ( num <= 0x50e ) ) + { + this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( num + 1 ).col背景色 = color; + } + return true; + } + private bool tDTX入力・行解析・DTXC_WAVFORECOLOR( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + if( !strコマンド.Equals( "DTXC_WAVFORECOLOR", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } ); + if( strArray.Length < 2 ) + { + return false; + } + if( !int.TryParse( strArray[ 0 ], out num ) ) + { + return false; + } + if( ( num < 0 ) || ( num > 0x50e ) ) + { + return false; + } + Color color = ColorTranslator.FromHtml( strArray[ 1 ] ); + if( ( num >= 0 ) && ( num <= 0x50e ) ) + { + this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( num + 1 ).col文字色 = color; + } + return true; + } + private bool tDTX入力・行解析・TITLE_ARTIST_COMMENT_その他( string strコマンド, string strパラメータ, string strコメント ) + { + float num5; + if( strコマンド.Equals( "TITLE", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBox曲名.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "ARTIST", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBox製作者.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "COMMENT", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxコメント.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "PANEL", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxパネル.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "PREVIEW", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxPREVIEW.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxPREIMAGE.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxSTAGEFILE.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || strコマンド.Equals( "WALL", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxBACKGROUND.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxRESULTIMAGE.Text = strパラメータ.Trim(); + return true; + } + if( strコマンド.Equals( "BPM", StringComparison.OrdinalIgnoreCase ) ) + { + decimal num; + if( !decimal.TryParse( strパラメータ, out num ) ) + { + num = 120.0M; + } + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.numericUpDownBPM.Value = num; + return true; + } + if( strコマンド.Equals( "DLEVEL", StringComparison.OrdinalIgnoreCase ) ) + { + int num2; + if( !int.TryParse( strパラメータ, out num2 ) ) + { + num2 = 0; + } + else if( num2 < 0 ) + { + num2 = 0; + } + else if( num2 > 100 ) + { + num2 = 100; + } + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.hScrollBarDLEVEL.Value = num2; + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxDLEVEL.Text = num2.ToString(); + return true; + } + if( strコマンド.Equals( "GLEVEL", StringComparison.OrdinalIgnoreCase ) ) + { + int num3; + if( !int.TryParse( strパラメータ, out num3 ) ) + { + num3 = 0; + } + else if( num3 < 0 ) + { + num3 = 0; + } + else if( num3 > 100 ) + { + num3 = 100; + } + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.hScrollBarGLEVEL.Value = num3; + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxGLEVEL.Text = num3.ToString(); + return true; + } + if( strコマンド.Equals( "BLEVEL", StringComparison.OrdinalIgnoreCase ) ) + { + int num4; + if( !int.TryParse( strパラメータ, out num4 ) ) + { + num4 = 0; + } + else if( num4 < 0 ) + { + num4 = 0; + } + else if( num4 > 100 ) + { + num4 = 100; + } + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.hScrollBarBLEVEL.Value = num4; + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBoxBLEVEL.Text = num4.ToString(); + return true; + } + if( !strコマンド.Equals( "DTXVPLAYSPEED", StringComparison.OrdinalIgnoreCase ) ) + { + return false; + } + if( !float.TryParse( strパラメータ, out num5 ) ) + { + num5 = 0f; + } + else if( num5 < 0.5f ) + { + num5 = 0.5f; + } + else if( num5 > 1.5f ) + { + num5 = 1.5f; + } + float num6 = ( 1.5f - num5 ) * 10f; + int num7 = (int) num6; + if( num7 < 0 ) + { + num7 = 0; + } + else if( num7 > 10 ) + { + num7 = 10; + } + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.toolStripComboBox演奏速度.SelectedIndex = num7; + return true; + } + private bool tDTX入力・行解析・WAV( string strコマンド, string strパラメータ, string strコメント ) + { + if( strコマンド.StartsWith( "wav", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 3 ); + } + else + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( ( num < 1 ) || ( num > 0x50f ) ) + { + return false; + } + CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( num ); + cwav.strラベル名 = strコメント; + cwav.strファイル名 = strパラメータ; + return true; + } + private bool tDTX入力・行解析・WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント ) + { + int num2; + if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 6 ); + } + else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 3 ); + } + else + { + return false; + } + if( strコマンド.Length < 2 ) + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( int.TryParse( strパラメータ, out num2 ) ) + { + if( num2 < -100 ) + { + num2 = -100; + } + else if( num2 >= 100 ) + { + num2 = 100; + } + this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( num ).n位置_100to100 = num2; + } + return true; + } + private bool tDTX入力・行解析・WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント ) + { + int num2; + if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 6 ); + } + else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) ) + { + strコマンド = strコマンド.Substring( 6 ); + } + else + { + return false; + } + if( strコマンド.Length < 2 ) + { + return false; + } + int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) ); + if( int.TryParse( strパラメータ, out num2 ) ) + { + if( num2 < 0 ) + { + num2 = 0; + } + else if( num2 >= 100 ) + { + num2 = 100; + } + this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( num ).n音量0to100 = num2; + } + return true; + } + private bool tDTX入力・行解析・チャンネル( string strコマンド, string strパラメータ, string strコメント ) + { + int num; + int num2; + if( !this.tDTX入力・行解析・チャンネル・コマンドから小節番号とチャンネル番号を抜き出す( strコマンド, out num, out num2 ) ) + { + return false; + } + if( num2 == 2 ) + { + float num3; + if( !float.TryParse( strパラメータ, out num3 ) ) + { + num3 = 1f; + } + this.dic小節長倍率.Add( num, num3 ); + return true; + } + if( ( num2 >= 0x20 ) && ( num2 <= 0x27 ) ) + { + C小節 c小節 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( num ); + int startIndex = 0; + while( ( startIndex = strパラメータ.IndexOf( '_' ) ) != -1 ) + { + strパラメータ = strパラメータ.Remove( startIndex, 1 ); + } + int num5 = strパラメータ.Length / 2; + for( int i = 0; i < num5; i++ ) + { + int num7 = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) ); + if( num7 != 0 ) + { + int num8 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtV" ); + int num9 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtR" ); + int num10 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtG" ); + int num11 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtB" ); + Cチップ item = new Cチップ(); + item.nレーン番号0to = num8; + item.n位置grid = i; + item.n値・整数1to1295 = num7; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + switch( num2 ) + { + case 0x20: + item = new Cチップ(); + item.nレーン番号0to = num9; + item.n位置grid = i; + item.n値・整数1to1295 = 2; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x21: + item = new Cチップ(); + item.nレーン番号0to = num11; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x22: + item = new Cチップ(); + item.nレーン番号0to = num10; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x23: + item = new Cチップ(); + item.nレーン番号0to = num10; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + item = new Cチップ(); + item.nレーン番号0to = num11; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x24: + item = new Cチップ(); + item.nレーン番号0to = num9; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x25: + item = new Cチップ(); + item.nレーン番号0to = num9; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + item = new Cチップ(); + item.nレーン番号0to = num11; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x26: + item = new Cチップ(); + item.nレーン番号0to = num9; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + item = new Cチップ(); + item.nレーン番号0to = num10; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + + case 0x27: + item = new Cチップ(); + item.nレーン番号0to = num9; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + item = new Cチップ(); + item.nレーン番号0to = num10; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + item = new Cチップ(); + item.nレーン番号0to = num11; + item.n位置grid = i; + item.n値・整数1to1295 = 1; + item.n読み込み時の解像度 = num5; + c小節.listチップ.Add( item ); + break; + } + } + } + return true; + } + if( ( num2 >= 160 ) && ( num2 <= 0xa7 ) ) + { + C小節 c小節2 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( num ); + int num12 = 0; + while( ( num12 = strパラメータ.IndexOf( '_' ) ) != -1 ) + { + strパラメータ = strパラメータ.Remove( num12, 1 ); + } + int num13 = strパラメータ.Length / 2; + for( int j = 0; j < num13; j++ ) + { + int num15 = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( j * 2, 2 ) ); + if( num15 != 0 ) + { + int num16 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsV" ); + int num17 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsR" ); + int num18 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsG" ); + int num19 = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsB" ); + Cチップ cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num16; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = num15; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + switch( num2 ) + { + case 160: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num17; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 2; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa1: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num19; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa2: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num18; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa3: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num18; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num19; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa4: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num17; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa5: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num17; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num19; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa6: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num17; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num18; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + + case 0xa7: + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num17; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num18; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + cチップ2 = new Cチップ(); + cチップ2.nレーン番号0to = num19; + cチップ2.n位置grid = j; + cチップ2.n値・整数1to1295 = 1; + cチップ2.n読み込み時の解像度 = num13; + c小節2.listチップ.Add( cチップ2 ); + break; + } + } + } + return true; + } + int num20 = -1; + bool flag = false; + if( this.tDTX入力・行解析・チャンネル・チャンネルに該当するレーン番号を返す( num2, out num20, out flag ) ) + { + C小節 c小節3 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( num ); + int num21 = 0; + while( ( num21 = strパラメータ.IndexOf( '_' ) ) != -1 ) + { + strパラメータ = strパラメータ.Remove( num21, 1 ); + } + int num22 = strパラメータ.Length / 2; + for( int k = 0; k < num22; k++ ) + { + int num24 = ( num2 == 3 ) ? C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( k * 2, 2 ) ) : C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( k * 2, 2 ) ); + if( num24 > 0 ) + { + Cチップ cチップ3 = new Cチップ(); + cチップ3.nチャンネル番号00toFF = num2; + cチップ3.nレーン番号0to = num20; + cチップ3.n位置grid = k; + cチップ3.n読み込み時の解像度 = num22; + cチップ3.n値・整数1to1295 = num24; + cチップ3.b裏 = flag; + c小節3.listチップ.Add( cチップ3 ); + } + } + return true; + } + StringBuilder builder = new StringBuilder( 0x400 ); + builder.Append( "#" + C変換.str小節番号を文字列3桁に変換して返す( num ) + C変換.str数値を16進数2桁に変換して返す( num2 ) + ": " + strパラメータ ); + if( strコメント.Length > 0 ) + { + builder.Append( " ;" + strコメント ); + } + builder.Append( Environment.NewLine ); + CUndoRedo管理.bUndoRedoした直後 = true; + this._Form.textBox自由入力欄.AppendText( builder.ToString() ); + return true; + } + private int tDTX入力・行解析・チャンネル・GDAチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁 ) + { + if( strチャンネル文字列2桁.Length == 2 ) + { + switch( strチャンネル文字列2桁.ToUpper() ) + { + case "TC": + return 3; + + case "BL": + return 2; + + case "GS": + return 0x29; + + case "DS": + return 0x30; + + case "FI": + return 0x53; + + case "HH": + return 0x11; + + case "SD": + return 0x12; + + case "BD": + return 0x13; + + case "HT": + return 20; + + case "LT": + return 0x15; + + case "CY": + return 0x16; + + case "G1": + return 0x21; + + case "G2": + return 0x22; + + case "G3": + return 0x23; + + case "G4": + return 0x24; + + case "G5": + return 0x25; + + case "G6": + return 0x26; + + case "G7": + return 0x27; + + case "GW": + return 40; + + case "01": + return 0x61; + + case "02": + return 0x62; + + case "03": + return 0x63; + + case "04": + return 100; + + case "05": + return 0x65; + + case "06": + return 0x66; + + case "07": + return 0x67; + + case "08": + return 0x68; + + case "09": + return 0x69; + + case "0A": + return 0x70; + + case "0B": + return 0x71; + + case "0C": + return 0x72; + + case "0D": + return 0x73; + + case "0E": + return 0x74; + + case "0F": + return 0x75; + + case "10": + return 0x76; + + case "11": + return 0x77; + + case "12": + return 120; + + case "13": + return 0x79; + + case "14": + return 0x80; + + case "15": + return 0x81; + + case "16": + return 130; + + case "17": + return 0x83; + + case "18": + return 0x84; + + case "19": + return 0x85; + + case "1A": + return 0x86; + + case "1B": + return 0x87; + + case "1C": + return 0x88; + + case "1D": + return 0x89; + + case "1E": + return 0x90; + + case "1F": + return 0x91; + + case "20": + return 0x92; + + case "B1": + return 0xa1; + + case "B2": + return 0xa2; + + case "B3": + return 0xa3; + + case "B4": + return 0xa4; + + case "B5": + return 0xa5; + + case "B6": + return 0xa6; + + case "B7": + return 0xa7; + + case "BW": + return 0xa8; + + case "G0": + return 0x20; + + case "B0": + return 160; + } + } + return -1; + } + private bool tDTX入力・行解析・チャンネル・コマンドから小節番号とチャンネル番号を抜き出す( string strコマンド, out int n小節番号, out int nチャンネル番号 ) + { + if( strコマンド.Length >= 5 ) + { + n小節番号 = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) ); + if( ( this.e種別 == E種別.GDA ) || ( this.e種別 == E種別.G2D ) ) + { + nチャンネル番号 = this.tDTX入力・行解析・チャンネル・GDAチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ) ); + } + else + { + nチャンネル番号 = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) ); + } + return ( ( n小節番号 >= 0 ) && ( nチャンネル番号 > 0 ) ); + } + n小節番号 = -1; + nチャンネル番号 = -1; + return false; + } + private bool tDTX入力・行解析・チャンネル・チャンネルに該当するレーン番号を返す( int nチャンネル番号, out int nレーン番号, out bool b裏 ) + { + nレーン番号 = -1; + b裏 = false; + for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ ) + { + Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ]; + if( cレーン.nチャンネル番号・表00toFF == nチャンネル番号 ) + { + nレーン番号 = i; + b裏 = false; + return true; + } + if( cレーン.nチャンネル番号・裏00toFF == nチャンネル番号 ) + { + nレーン番号 = i; + b裏 = true; + return true; + } + } + return false; + } + private C小節 tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( int n小節番号 ) + { + C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( n小節番号 ); + if( c小節 == null ) + { + if( n小節番号 > this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() ) + { + for( int i = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() + 1; i <= n小節番号; i++ ) + { + c小節 = new C小節( i ); + this._Form.mgr譜面管理者.dic小節.Add( i, c小節 ); + } + return c小節; + } + c小節 = new C小節( n小節番号 ); + this._Form.mgr譜面管理者.dic小節.Add( n小節番号, c小節 ); + } + return c小節; + } + private void tDTX入力・小節長倍率配列を昇順ソート済みの小節リストに適用する() + { + float num = 1f; + for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ ) + { + C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ]; + foreach( KeyValuePair pair in this.dic小節長倍率 ) + { + if( c小節.n小節番号0to3599 == pair.Key ) + { + num = pair.Value; + } + } + c小節.f小節長倍率 = num; + for( int j = 0; j < c小節.listチップ.Count; j++ ) + { + c小節.listチップ[ j ].n位置grid = ( c小節.listチップ[ j ].n位置grid * c小節.n小節長倍率を考慮した現在の小節の高さgrid ) / c小節.listチップ[ j ].n読み込み時の解像度; + } + } + } + private void tDTX入力・小節内のチップリストを発声位置でソートする() + { + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + pair.Value.listチップ.Sort(); + } + } + + private void tDTX出力・AVIリスト( StreamWriter sw ) + { + sw.WriteLine(); + for( int i = 1; i <= 0x50f; i++ ) + { + CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i ); + if( ( cavi != null ) && ( cavi.strファイル名.Length > 0 ) ) + { + string str = C変換.str数値を36進数2桁に変換して返す( cavi.nAVI番号1to1295 ); + sw.Write( "#AVI{0}: {1}", str, cavi.strファイル名 ); + if( cavi.strラベル名.Length > 0 ) + { + sw.Write( "\t;{0}", cavi.strラベル名 ); + } + sw.WriteLine(); + } + } + } + private void tDTX出力・AVIリスト色設定( StreamWriter sw ) + { + Color color = ColorTranslator.FromHtml( "window" ); + Color color2 = ColorTranslator.FromHtml( "windowtext" ); + for( int i = 1; i <= 0x50f; i++ ) + { + CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i ); + if( cavi != null ) + { + if( cavi.col文字色 != color2 ) + { + sw.WriteLine( "#DTXC_AVIFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col文字色 ) ); + } + if( cavi.col背景色 != color ) + { + sw.WriteLine( "#DTXC_AVIBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col背景色 ) ); + } + } + } + } + private void tDTX出力・BMPリスト( StreamWriter sw ) + { + sw.WriteLine(); + for( int i = 1; i <= 0x50f; i++ ) + { + CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i ); + if( ( cbmp != null ) && ( cbmp.strファイル名.Length > 0 ) ) + { + string str = C変換.str数値を36進数2桁に変換して返す( cbmp.nBMP番号1to1295 ); + if( !cbmp.bテクスチャ ) + { + sw.Write( "#BMP{0}: {1}", str, cbmp.strファイル名 ); + if( cbmp.strラベル名.Length > 0 ) + { + sw.Write( "\t;{0}", cbmp.strラベル名 ); + } + sw.WriteLine(); + } + else + { + sw.Write( "#BMPTEX{0}: {1}", str, cbmp.strファイル名 ); + if( cbmp.strラベル名.Length > 0 ) + { + sw.Write( "\t;{0}", cbmp.strラベル名 ); + } + sw.WriteLine(); + } + } + } + } + private void tDTX出力・BMPリスト色設定( StreamWriter sw ) + { + Color color = ColorTranslator.FromHtml( "window" ); + Color color2 = ColorTranslator.FromHtml( "windowtext" ); + for( int i = 1; i <= 0x50f; i++ ) + { + CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i ); + if( cbmp != null ) + { + if( cbmp.col文字色 != color2 ) + { + sw.WriteLine( "#DTXC_BMPFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col文字色 ) ); + } + if( cbmp.col背景色 != color ) + { + sw.WriteLine( "#DTXC_BMPBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col背景色 ) ); + } + } + } + } + private void tDTX出力・BPxリスト( StreamWriter sw ) + { + sw.WriteLine(); + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dicBPx ) + { + sw.WriteLine( "#BPM{0}: {1}", C変換.str数値を36進数2桁に変換して返す( pair.Key ), pair.Value ); + } + } + private void tDTX出力・WAVリスト( StreamWriter sw, bool bBGMのみ出力 ) + { + sw.WriteLine(); + for( int i = 1; i <= 0x50f; i++ ) + { + CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i ); + if( ( ( cwav != null ) && ( cwav.strファイル名.Length > 0 ) ) && ( !bBGMのみ出力 || cwav.bBGMとして使用 ) ) + { + string str = C変換.str数値を36進数2桁に変換して返す( cwav.nWAV番号1to1295 ); + sw.Write( "#WAV{0}: {1}", str, cwav.strファイル名 ); + if( cwav.strラベル名.Length > 0 ) + { + sw.Write( "\t;{0}", cwav.strラベル名 ); + } + sw.WriteLine(); + if( cwav.n音量0to100 != 100 ) + { + sw.WriteLine( "#VOLUME{0}: {1}", str, cwav.n音量0to100.ToString() ); + } + if( cwav.n位置_100to100 != 0 ) + { + sw.WriteLine( "#PAN{0}: {1}", str, cwav.n位置_100to100.ToString() ); + } + if( cwav.bBGMとして使用 ) + { + sw.WriteLine( "#BGMWAV: {0}", str ); + } + } + } + } + private void tDTX出力・WAVリスト色設定( StreamWriter sw ) + { + Color color = ColorTranslator.FromHtml( "window" ); + Color color2 = ColorTranslator.FromHtml( "windowtext" ); + for( int i = 1; i <= 0x50f; i++ ) + { + CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i ); + if( cwav != null ) + { + if( cwav.col文字色 != color2 ) + { + sw.WriteLine( "#DTXC_WAVFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col文字色 ) ); + } + if( cwav.col背景色 != color ) + { + sw.WriteLine( "#DTXC_WAVBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col背景色 ) ); + } + } + } + } + private void tDTX出力・タイトルと製作者とコメントその他( StreamWriter sw ) + { + sw.WriteLine(); + if( this._Form.textBox曲名.Text.Length == 0 ) + { + sw.WriteLine( "#TITLE: (no title)" ); + } + else + { + sw.WriteLine( "#TITLE: " + this._Form.textBox曲名.Text ); + } + if( this._Form.textBox製作者.Text.Length > 0 ) + { + sw.WriteLine( "#ARTIST: " + this._Form.textBox製作者.Text ); + } + if( this._Form.textBoxコメント.Text.Length > 0 ) + { + sw.WriteLine( "#COMMENT: " + this._Form.textBoxコメント.Text ); + } + if( this._Form.textBoxパネル.Text.Length > 0 ) + { + sw.WriteLine( "#PANEL: " + this._Form.textBoxパネル.Text ); + } + if( this._Form.textBoxPREVIEW.Text.Length > 0 ) + { + sw.WriteLine( "#PREVIEW: " + this._Form.textBoxPREVIEW.Text ); + } + if( this._Form.textBoxPREIMAGE.Text.Length > 0 ) + { + sw.WriteLine( "#PREIMAGE: " + this._Form.textBoxPREIMAGE.Text ); + } + if( this._Form.textBoxSTAGEFILE.Text.Length > 0 ) + { + sw.WriteLine( "#STAGEFILE: " + this._Form.textBoxSTAGEFILE.Text ); + } + if( this._Form.textBoxBACKGROUND.Text.Length > 0 ) + { + sw.WriteLine( "#BACKGROUND: " + this._Form.textBoxBACKGROUND.Text ); + } + if( this._Form.textBoxRESULTIMAGE.Text.Length > 0 ) + { + sw.WriteLine( "#RESULTIMAGE: " + this._Form.textBoxRESULTIMAGE.Text ); + } + if( this._Form.numericUpDownBPM.Value != 0M ) + { + sw.WriteLine( "#BPM: " + this._Form.numericUpDownBPM.Value ); + } + if( this._Form.hScrollBarDLEVEL.Value != 0 ) + { + sw.WriteLine( "#DLEVEL: " + this._Form.hScrollBarDLEVEL.Value ); + } + if( this._Form.hScrollBarGLEVEL.Value != 0 ) + { + sw.WriteLine( "#GLEVEL: " + this._Form.hScrollBarGLEVEL.Value ); + } + if( this._Form.hScrollBarBLEVEL.Value != 0 ) + { + sw.WriteLine( "#BLEVEL: " + this._Form.hScrollBarBLEVEL.Value ); + } + if( this._Form.mgr譜面管理者.strPATH_WAV.Length != 0 ) + { + sw.WriteLine( "#PATH_WAV: " + this._Form.mgr譜面管理者.strPATH_WAV ); + } + if( this._Form.toolStripComboBox演奏速度.SelectedIndex != 5 ) + { + sw.WriteLine( "#DTXVPLAYSPEED: " + ( 1.5f - ( this._Form.toolStripComboBox演奏速度.SelectedIndex * 0.1f ) ) ); + } + } + private void tDTX出力・チップパレット( StreamWriter sw ) + { + sw.Write( "#DTXC_CHIPPALETTE: " ); + foreach( ListViewItem item in this._Form.dlgチップパレット.listViewチップリスト.Items ) + { + sw.Write( " {0},{1}", item.ImageIndex, item.SubItems[ 1 ].Text ); + } + sw.WriteLine(); + } + private void tDTX出力・レーン割付チップ( StreamWriter sw ) + { + sw.WriteLine(); + for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ ) + { + Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ]; + if( ( cレーン.nレーン割付チップ・表0or1to1295 > 0 ) || ( cレーン.nレーン割付チップ・裏0or1to1295 > 0 ) ) + { + sw.WriteLine( "#DTXC_LANEBINDEDCHIP: {0} {1} {2}", i.ToString( "00" ), C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 ), C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 ) ); + } + } + } + private void tDTX出力・自由入力欄( StreamWriter sw ) + { + sw.WriteLine(); + if( this._Form.textBox自由入力欄.Text.Length > 0 ) + { + sw.WriteLine(); + sw.Write( this._Form.textBox自由入力欄.Text ); + sw.WriteLine(); + } + } + private void tDTX出力・小節長倍率( StreamWriter sw ) + { + sw.WriteLine(); + float num = 1f; + for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ ) + { + C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ]; + if( c小節.f小節長倍率 != num ) + { + num = c小節.f小節長倍率; + sw.WriteLine( "#{0}02: {1}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), num ); + } + } + } + private void tDTX出力・全チップ( StreamWriter sw ) + { + sw.WriteLine(); + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + List list = new List(); + foreach( Cチップ cチップ in c小節.listチップ ) + { + if( list.IndexOf( cチップ.nチャンネル番号00toFF ) < 0 ) + { + list.Add( cチップ.nチャンネル番号00toFF ); + } + } + int[,] numArray = new int[ c小節.n小節長倍率を考慮した現在の小節の高さgrid, 2 ]; + foreach( int num in list ) + { + if( num != 0 ) + { + for( int num2 = 0; num2 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num2++ ) + { + numArray[ num2, 0 ] = numArray[ num2, 1 ] = 0; + } + foreach( Cチップ cチップ2 in c小節.listチップ ) + { + if( cチップ2.nチャンネル番号00toFF == num ) + { + numArray[ cチップ2.n位置grid, 0 ] = cチップ2.n値・整数1to1295; + } + } + int num3 = 0; + for( int num4 = 0; num4 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num4++ ) + { + num3 += numArray[ num4, 0 ]; + } + if( num3 != 0 ) + { + int num5 = c小節.n小節長倍率を考慮した現在の小節の高さgrid; + foreach( int num6 in this.arr素数リスト ) + { + while( this.tDTX出力・全チップ・解像度をN分の1にできる( num6, ref numArray, num5 ) ) + { + num5 /= num6; + for( int num7 = 0; num7 < num5; num7++ ) + { + numArray[ num7, 0 ] = numArray[ num7 * num6, 0 ]; + } + } + } + StringBuilder builder = new StringBuilder(); + for( int num8 = 0; num8 < num5; num8++ ) + { + if( num == 3 ) + { + builder.Append( C変換.str数値を16進数2桁に変換して返す( numArray[ num8, 0 ] ) ); + } + else + { + builder.Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num8, 0 ] ) ); + } + } + sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( num ), builder.ToString() ); + } + } + } + for( int i = 0; i < c小節.n小節長倍率を考慮した現在の小節の高さgrid; i++ ) + { + numArray[ i, 0 ] = numArray[ i, 1 ] = 0; + } + foreach( Cチップ cチップ3 in c小節.listチップ ) + { + Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ cチップ3.nレーン番号0to ]; + switch( cレーン.eレーン種別 ) + { + case Cレーン.E種別.GtV: + { + numArray[ cチップ3.n位置grid, 0 ] = cチップ3.n値・整数1to1295; + continue; + } + case Cレーン.E種別.GtR: + { + numArray[ cチップ3.n位置grid, 1 ] |= ( cチップ3.n値・整数1to1295 == 1 ) ? 0x04 : 0xFF; // OPEN = 0xFF + continue; + } + case Cレーン.E種別.GtG: + { + numArray[ cチップ3.n位置grid, 1 ] |= 0x02; + continue; + } + case Cレーン.E種別.GtB: + { + numArray[ cチップ3.n位置grid, 1 ] |= 0x01; + continue; + } + } + } + for( int j = 0; j < c小節.n小節長倍率を考慮した現在の小節の高さgrid; j++ ) + { + if( ( numArray[ j, 0 ] == 0 ) || ( numArray[ j, 1 ] == 0 ) ) + { + numArray[ j, 0 ] = 0; + numArray[ j, 1 ] = 0; + } + } + int num11 = c小節.n小節長倍率を考慮した現在の小節の高さgrid; + foreach( int num12 in this.arr素数リスト ) + { + while( this.tDTX出力・全チップ・解像度をN分の1にできる( num12, ref numArray, num11 ) ) + { + num11 /= num12; + for( int num13 = 0; num13 < num11; num13++ ) + { + numArray[ num13, 0 ] = numArray[ num13 * num12, 0 ]; + numArray[ num13, 1 ] = numArray[ num13 * num12, 1 ]; + } + } + } + bool[] flagArray = new bool[ 8 ]; + for( int k = 0; k < 8; k++ ) + { + flagArray[ k ] = false; + } + for( int m = 0; m < num11; m++ ) + { + if( numArray[ m, 1 ] == 0xff ) + { + flagArray[ 0 ] = true; + } + else if( numArray[ m, 1 ] != 0 ) + { + flagArray[ numArray[ m, 1 ] ] = true; + } + } + StringBuilder[] builderArray = new StringBuilder[ 8 ]; + for( int n = 0; n < 8; n++ ) + { + builderArray[ n ] = new StringBuilder(); + } + for( int num17 = 0; num17 < num11; num17++ ) + { + int num18 = ( numArray[ num17, 1 ] == 0xff ) ? 0x20 : ( numArray[ num17, 1 ] + 0x20 ); + for( int num19 = 0; num19 < 8; num19++ ) + { + if( flagArray[ num19 ] ) + { + if( num19 == ( num18 - 0x20 ) ) + { + builderArray[ num19 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num17, 0 ] ) ); + } + else + { + builderArray[ num19 ].Append( "00" ); + } + } + } + } + for( int num20 = 0; num20 < 8; num20++ ) + { + if( builderArray[ num20 ].Length != 0 ) + { + sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 0x20 + num20 ), builderArray[ num20 ].ToString() ); + } + } + for( int num21 = 0; num21 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num21++ ) + { + numArray[ num21, 0 ] = numArray[ num21, 1 ] = 0; + } + foreach( Cチップ cチップ4 in c小節.listチップ ) + { + Cレーン cレーン2 = this._Form.mgr譜面管理者.listレーン[ cチップ4.nレーン番号0to ]; + switch( cレーン2.eレーン種別 ) + { + case Cレーン.E種別.BsV: + { + numArray[ cチップ4.n位置grid, 0 ] = cチップ4.n値・整数1to1295; + continue; + } + case Cレーン.E種別.BsR: + { + numArray[ cチップ4.n位置grid, 1 ] |= ( cチップ4.n値・整数1to1295 == 1 ) ? 4 : 0xff; // OPEN = 0xFF + continue; + } + case Cレーン.E種別.BsG: + { + numArray[ cチップ4.n位置grid, 1 ] |= 0x02; + continue; + } + case Cレーン.E種別.BsB: + { + numArray[ cチップ4.n位置grid, 1 ] |= 0x01; + continue; + } + } + } + for( int num22 = 0; num22 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num22++ ) + { + if( ( numArray[ num22, 0 ] == 0 ) || ( numArray[ num22, 1 ] == 0 ) ) + { + numArray[ num22, 0 ] = 0; + numArray[ num22, 1 ] = 0; + } + } + int num23 = c小節.n小節長倍率を考慮した現在の小節の高さgrid; + foreach( int num24 in this.arr素数リスト ) + { + while( this.tDTX出力・全チップ・解像度をN分の1にできる( num24, ref numArray, num23 ) ) + { + num23 /= num24; + for( int num25 = 0; num25 < num23; num25++ ) + { + numArray[ num25, 0 ] = numArray[ num25 * num24, 0 ]; + numArray[ num25, 1 ] = numArray[ num25 * num24, 1 ]; + } + } + } + bool[] flagArray2 = new bool[ 8 ]; + for( int num26 = 0; num26 < 8; num26++ ) + { + flagArray2[ num26 ] = false; + } + for( int num27 = 0; num27 < num23; num27++ ) + { + if( numArray[ num27, 1 ] == 0xff ) + { + flagArray2[ 0 ] = true; + } + else if( numArray[ num27, 1 ] != 0 ) + { + flagArray2[ numArray[ num27, 1 ] ] = true; + } + } + StringBuilder[] builderArray2 = new StringBuilder[ 8 ]; + for( int num28 = 0; num28 < 8; num28++ ) + { + builderArray2[ num28 ] = new StringBuilder(); + } + for( int num29 = 0; num29 < num23; num29++ ) + { + int num30 = ( numArray[ num29, 1 ] == 0xff ) ? 160 : ( numArray[ num29, 1 ] + 160 ); + for( int num31 = 0; num31 < 8; num31++ ) + { + if( flagArray2[ num31 ] ) + { + if( num31 == ( num30 - 160 ) ) + { + builderArray2[ num31 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num29, 0 ] ) ); + } + else + { + builderArray2[ num31 ].Append( "00" ); + } + } + } + } + for( int num32 = 0; num32 < 8; num32++ ) + { + if( builderArray2[ num32 ].Length != 0 ) + { + sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 160 + num32 ), builderArray2[ num32 ].ToString() ); + } + } + } + } + private bool tDTX出力・全チップ・解像度をN分の1にできる( int N, ref int[ , ] arrチップ配列, int n現在の解像度 ) + { + if( ( n現在の解像度 % N ) != 0 ) + { + return false; + } + for( int i = 0; i < ( n現在の解像度 / N ); i++ ) + { + for( int j = 1; j < N; j++ ) + { + if( arrチップ配列[ ( i * N ) + j, 0 ] != 0 ) + { + return false; + } + } + } + return true; + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.Designer.cs b/DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.Designer.cs new file mode 100644 index 00000000..fd6f8627 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.Designer.cs @@ -0,0 +1,60 @@ + +namespace DTXCreator +{ + partial class Cバージョン情報 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + /// + protected override void Dispose( bool disposing ) + { + if( disposing && ( this.components != null ) ) + { + this.components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + base.SuspendLayout(); + // + // Cバージョン情報 + // + base.AutoScaleDimensions = new System.Drawing.SizeF( 6f, 12f ); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::DTXCreator.Properties.Resources.バージョン情報; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + base.ClientSize = new System.Drawing.Size( 450, 250 ); + base.ControlBox = false; + base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "Cバージョン情報"; + base.Padding = new System.Windows.Forms.Padding( 8 ); + base.ShowIcon = false; + base.ShowInTaskbar = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + base.Paint += new System.Windows.Forms.PaintEventHandler( this.Cバージョン情報_Paint ); + base.Click += new System.EventHandler( this.Cバージョン情報_Click ); + base.KeyDown += new System.Windows.Forms.KeyEventHandler( this.Cバージョン情報_KeyDown ); + base.ResumeLayout( false ); + + } + + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.cs b/DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.cs new file mode 100644 index 00000000..02510b77 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/Cバージョン情報.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using DTXCreator.Properties; + +namespace DTXCreator +{ + public partial class Cバージョン情報 : Form + { + public Cバージョン情報() + { + this.InitializeComponent(); + } + + #region [ private ] + //----------------- + private void Cバージョン情報_Click( object sender, EventArgs e ) + { + base.Close(); + } + private void Cバージョン情報_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + base.Close(); + } + } + private void Cバージョン情報_Paint( object sender, PaintEventArgs e ) + { + System.Drawing.Font font = new System.Drawing.Font( "MS US Gothic", 12f, FontStyle.Regular ); + Brush brush = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) ); + Rectangle layoutRectangle = new Rectangle( 330, 220, 150, 20 ); + e.Graphics.DrawString( "Release " + Resources.DTXC_VERSION, font, brush, layoutRectangle ); + font.Dispose(); + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.Designer.cs b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.Designer.cs new file mode 100644 index 00000000..ee8f92ee --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.Designer.cs @@ -0,0 +1,2164 @@ +namespace DTXCreator +{ + partial class Cメインフォーム + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager( typeof( Cメインフォーム ) ); + this.statusStripステータスバー = new System.Windows.Forms.StatusStrip(); + this.menuStripメニューバー = new System.Windows.Forms.MenuStrip(); + this.toolStripMenuItemファイル = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem新規 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem開く = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem上書き保存 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem名前を付けて保存 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem終了 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem編集 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemアンドゥ = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemリドゥ = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem切り取り = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemコピー = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem貼り付け = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem削除 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItemすべて選択 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem選択モード = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem編集モード = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemモード切替 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem検索 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem置換 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem表示 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemチップパレット = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔4分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔8分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔12分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔16分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔24分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔32分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔48分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔64分 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔フリー = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItemガイド間隔拡大 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemガイド間隔縮小 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem再生 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem先頭から再生 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem現在位置から再生 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem現在位置からBGMのみ再生 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem再生停止 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemツール = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemオプション = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemヘルプ = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemDTXCreaterマニュアル = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemバージョン = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripツールバー = new System.Windows.Forms.ToolStrip(); + this.toolStripButton新規作成 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton開く = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton上書き保存 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton切り取り = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonコピー = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton貼り付け = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton削除 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonアンドゥ = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonリドゥ = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonチップパレット = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripComboBox譜面拡大率 = new System.Windows.Forms.ToolStripComboBox(); + this.toolStripComboBoxガイド間隔 = new System.Windows.Forms.ToolStripComboBox(); + this.toolStripButton選択モード = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton編集モード = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton先頭から再生 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton現在位置から再生 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton現在位置からBGMのみ再生 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton再生停止 = new System.Windows.Forms.ToolStripButton(); + this.toolStripComboBox演奏速度 = new System.Windows.Forms.ToolStripComboBox(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.vScrollBar譜面用垂直スクロールバー = new System.Windows.Forms.VScrollBar(); + this.splitContainerタブと譜面を分割 = new System.Windows.Forms.SplitContainer(); + this.tabControl情報パネル = new System.Windows.Forms.TabControl(); + this.tabPage基本情報 = new System.Windows.Forms.TabPage(); + this.buttonRESULTIMAGE参照 = new System.Windows.Forms.Button(); + this.buttonBACKGROUND参照 = new System.Windows.Forms.Button(); + this.buttonSTAGEFILE参照 = new System.Windows.Forms.Button(); + this.buttonPREIMAGE参照 = new System.Windows.Forms.Button(); + this.buttonPREVIEW参照 = new System.Windows.Forms.Button(); + this.labeRESULTIMAGE = new System.Windows.Forms.Label(); + this.labelBACKGROUND = new System.Windows.Forms.Label(); + this.labelSTAGEFILE = new System.Windows.Forms.Label(); + this.labelPREIMAGE = new System.Windows.Forms.Label(); + this.labelPREVIEW = new System.Windows.Forms.Label(); + this.textBoxRESULTIMAGE = new System.Windows.Forms.TextBox(); + this.textBoxBACKGROUND = new System.Windows.Forms.TextBox(); + this.textBoxSTAGEFILE = new System.Windows.Forms.TextBox(); + this.textBoxPREIMAGE = new System.Windows.Forms.TextBox(); + this.textBoxPREVIEW = new System.Windows.Forms.TextBox(); + this.textBoxパネル = new System.Windows.Forms.TextBox(); + this.labelパネル = new System.Windows.Forms.Label(); + this.labelBLEVEL = new System.Windows.Forms.Label(); + this.textBoxBLEVEL = new System.Windows.Forms.TextBox(); + this.hScrollBarBLEVEL = new System.Windows.Forms.HScrollBar(); + this.labelGLEVEL = new System.Windows.Forms.Label(); + this.textBoxGLEVEL = new System.Windows.Forms.TextBox(); + this.hScrollBarGLEVEL = new System.Windows.Forms.HScrollBar(); + this.labelDLEVEL = new System.Windows.Forms.Label(); + this.textBoxDLEVEL = new System.Windows.Forms.TextBox(); + this.hScrollBarDLEVEL = new System.Windows.Forms.HScrollBar(); + this.labelBPM = new System.Windows.Forms.Label(); + this.labelコメント = new System.Windows.Forms.Label(); + this.label製作者 = new System.Windows.Forms.Label(); + this.label曲名 = new System.Windows.Forms.Label(); + this.numericUpDownBPM = new System.Windows.Forms.NumericUpDown(); + this.textBoxコメント = new System.Windows.Forms.TextBox(); + this.textBox製作者 = new System.Windows.Forms.TextBox(); + this.textBox曲名 = new System.Windows.Forms.TextBox(); + this.tabPageWAV = new System.Windows.Forms.TabPage(); + this.listViewWAVリスト = new System.Windows.Forms.ListView(); + this.columnHeaderWAV_ラベル = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderWAV_番号 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderWAV_ファイル名 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderWAV_音量 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderWAV_位置 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderWAV_BGM = new System.Windows.Forms.ColumnHeader(); + this.toolStripWAVツールバー = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonWAVリスト上移動 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonWAVリスト下移動 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonWAVリストプレビュー再生開始 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonWAVリストプレビュー再生停止 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonWAVリストプレビュースイッチ = new System.Windows.Forms.ToolStripButton(); + this.tabPageBMP = new System.Windows.Forms.TabPage(); + this.listViewBMPリスト = new System.Windows.Forms.ListView(); + this.columnHeaderBMP_TEX = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderBMP_ラベル = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderBMP_BMP番号 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderBMP_ファイル名 = new System.Windows.Forms.ColumnHeader(); + this.toolStripBMPツールバー = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonBMPリスト上移動 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonBMPリスト下移動 = new System.Windows.Forms.ToolStripButton(); + this.tabPageAVI = new System.Windows.Forms.TabPage(); + this.listViewAVIリスト = new System.Windows.Forms.ListView(); + this.columnHeaderAVI_ラベル = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderAVI_AVI番号 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderAVI_ファイル名 = new System.Windows.Forms.ColumnHeader(); + this.toolStripAVIツールバー = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonAVIリスト上移動 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonAVIリスト下移動 = new System.Windows.Forms.ToolStripButton(); + this.tabPage自由入力 = new System.Windows.Forms.TabPage(); + this.textBox自由入力欄 = new System.Windows.Forms.TextBox(); + this.pictureBox譜面パネル = new System.Windows.Forms.PictureBox(); + this.hScrollBar譜面用水平スクロールバー = new System.Windows.Forms.HScrollBar(); + this.toolTipツールチップ = new System.Windows.Forms.ToolTip( this.components ); + this.contextMenuStrip譜面右メニュー = new System.Windows.Forms.ContextMenuStrip( this.components ); + this.toolStripMenuItem選択チップの切り取り = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem選択チップのコピー = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem選択チップの貼り付け = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem選択チップの削除 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItemすべてのチップの選択 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem小節長変更 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem小節の挿入 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem小節の削除 = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStripメニューバー.SuspendLayout(); + this.toolStripツールバー.SuspendLayout(); + this.splitContainerタブと譜面を分割.Panel1.SuspendLayout(); + this.splitContainerタブと譜面を分割.Panel2.SuspendLayout(); + this.splitContainerタブと譜面を分割.SuspendLayout(); + this.tabControl情報パネル.SuspendLayout(); + this.tabPage基本情報.SuspendLayout(); + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDownBPM ) ).BeginInit(); + this.tabPageWAV.SuspendLayout(); + this.toolStripWAVツールバー.SuspendLayout(); + this.tabPageBMP.SuspendLayout(); + this.toolStripBMPツールバー.SuspendLayout(); + this.tabPageAVI.SuspendLayout(); + this.toolStripAVIツールバー.SuspendLayout(); + this.tabPage自由入力.SuspendLayout(); + ( (System.ComponentModel.ISupportInitialize) ( this.pictureBox譜面パネル ) ).BeginInit(); + this.contextMenuStrip譜面右メニュー.SuspendLayout(); + this.SuspendLayout(); + // + // statusStripステータスバー + // + this.statusStripステータスバー.Location = new System.Drawing.Point( 0, 493 ); + this.statusStripステータスバー.Name = "statusStripステータスバー"; + this.statusStripステータスバー.Size = new System.Drawing.Size( 731, 22 ); + this.statusStripステータスバー.TabIndex = 0; + this.statusStripステータスバー.Text = "ステータスバー"; + // + // menuStripメニューバー + // + this.menuStripメニューバー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemファイル, + this.toolStripMenuItem編集, + this.toolStripMenuItem表示, + this.toolStripMenuItem再生, + this.toolStripMenuItemツール, + this.toolStripMenuItemヘルプ} ); + this.menuStripメニューバー.Location = new System.Drawing.Point( 0, 0 ); + this.menuStripメニューバー.Name = "menuStripメニューバー"; + this.menuStripメニューバー.Size = new System.Drawing.Size( 731, 26 ); + this.menuStripメニューバー.TabIndex = 1; + this.menuStripメニューバー.Text = "メニューバー"; + // + // toolStripMenuItemファイル + // + this.toolStripMenuItemファイル.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem新規, + this.toolStripMenuItem開く, + this.toolStripMenuItem上書き保存, + this.toolStripMenuItem名前を付けて保存, + this.toolStripSeparator1, + this.toolStripMenuItem終了} ); + this.toolStripMenuItemファイル.Name = "toolStripMenuItemファイル"; + this.toolStripMenuItemファイル.Size = new System.Drawing.Size( 85, 22 ); + this.toolStripMenuItemファイル.Text = "ファイル(&F)"; + // + // toolStripMenuItem新規 + // + this.toolStripMenuItem新規.Image = global::DTXCreator.Properties.Resources.新規作成; + this.toolStripMenuItem新規.Name = "toolStripMenuItem新規"; + this.toolStripMenuItem新規.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem新規.Text = "新規(&N)"; + this.toolStripMenuItem新規.Click += new System.EventHandler( this.toolStripMenuItem新規_Click ); + // + // toolStripMenuItem開く + // + this.toolStripMenuItem開く.Image = global::DTXCreator.Properties.Resources.開く; + this.toolStripMenuItem開く.Name = "toolStripMenuItem開く"; + this.toolStripMenuItem開く.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O ) ) ); + this.toolStripMenuItem開く.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem開く.Text = "開く(&O)"; + this.toolStripMenuItem開く.Click += new System.EventHandler( this.toolStripMenuItem開く_Click ); + // + // toolStripMenuItem上書き保存 + // + this.toolStripMenuItem上書き保存.Image = global::DTXCreator.Properties.Resources.保存; + this.toolStripMenuItem上書き保存.Name = "toolStripMenuItem上書き保存"; + this.toolStripMenuItem上書き保存.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S ) ) ); + this.toolStripMenuItem上書き保存.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem上書き保存.Text = "上書き保存(&S)"; + this.toolStripMenuItem上書き保存.Click += new System.EventHandler( this.toolStripMenuItem上書き保存_Click ); + // + // toolStripMenuItem名前を付けて保存 + // + this.toolStripMenuItem名前を付けて保存.Name = "toolStripMenuItem名前を付けて保存"; + this.toolStripMenuItem名前を付けて保存.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem名前を付けて保存.Text = "名前を付けて保存(&A)"; + this.toolStripMenuItem名前を付けて保存.Click += new System.EventHandler( this.toolStripMenuItem名前を付けて保存_Click ); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size( 198, 6 ); + // + // toolStripMenuItem終了 + // + this.toolStripMenuItem終了.Name = "toolStripMenuItem終了"; + this.toolStripMenuItem終了.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem終了.Text = "終了(&X)"; + this.toolStripMenuItem終了.Click += new System.EventHandler( this.toolStripMenuItem終了_Click ); + // + // toolStripMenuItem編集 + // + this.toolStripMenuItem編集.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemアンドゥ, + this.toolStripMenuItemリドゥ, + this.toolStripSeparator2, + this.toolStripMenuItem切り取り, + this.toolStripMenuItemコピー, + this.toolStripMenuItem貼り付け, + this.toolStripMenuItem削除, + this.toolStripSeparator3, + this.toolStripMenuItemすべて選択, + this.toolStripSeparator4, + this.toolStripMenuItem選択モード, + this.toolStripMenuItem編集モード, + this.toolStripMenuItemモード切替, + this.toolStripSeparator5, + this.toolStripMenuItem検索, + this.toolStripMenuItem置換} ); + this.toolStripMenuItem編集.Name = "toolStripMenuItem編集"; + this.toolStripMenuItem編集.Size = new System.Drawing.Size( 61, 22 ); + this.toolStripMenuItem編集.Text = "編集(&E)"; + // + // toolStripMenuItemアンドゥ + // + this.toolStripMenuItemアンドゥ.Image = global::DTXCreator.Properties.Resources.Undo; + this.toolStripMenuItemアンドゥ.Name = "toolStripMenuItemアンドゥ"; + this.toolStripMenuItemアンドゥ.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z ) ) ); + this.toolStripMenuItemアンドゥ.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItemアンドゥ.Text = "元に戻す(&U)"; + this.toolStripMenuItemアンドゥ.Click += new System.EventHandler( this.toolStripMenuItemアンドゥ_Click ); + // + // toolStripMenuItemリドゥ + // + this.toolStripMenuItemリドゥ.Image = global::DTXCreator.Properties.Resources.Redo; + this.toolStripMenuItemリドゥ.Name = "toolStripMenuItemリドゥ"; + this.toolStripMenuItemリドゥ.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y ) ) ); + this.toolStripMenuItemリドゥ.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItemリドゥ.Text = "やり直す(&R)"; + this.toolStripMenuItemリドゥ.Click += new System.EventHandler( this.toolStripMenuItemリドゥ_Click ); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size( 198, 6 ); + // + // toolStripMenuItem切り取り + // + this.toolStripMenuItem切り取り.Enabled = false; + this.toolStripMenuItem切り取り.Image = global::DTXCreator.Properties.Resources.切り取り; + this.toolStripMenuItem切り取り.Name = "toolStripMenuItem切り取り"; + this.toolStripMenuItem切り取り.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X ) ) ); + this.toolStripMenuItem切り取り.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem切り取り.Text = "切り取り(&T)"; + this.toolStripMenuItem切り取り.Click += new System.EventHandler( this.toolStripMenuItem切り取り_Click ); + // + // toolStripMenuItemコピー + // + this.toolStripMenuItemコピー.Enabled = false; + this.toolStripMenuItemコピー.Image = global::DTXCreator.Properties.Resources.コピー; + this.toolStripMenuItemコピー.Name = "toolStripMenuItemコピー"; + this.toolStripMenuItemコピー.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C ) ) ); + this.toolStripMenuItemコピー.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItemコピー.Text = "コピー(&C)"; + this.toolStripMenuItemコピー.Click += new System.EventHandler( this.toolStripMenuItemコピー_Click ); + // + // toolStripMenuItem貼り付け + // + this.toolStripMenuItem貼り付け.Enabled = false; + this.toolStripMenuItem貼り付け.Image = global::DTXCreator.Properties.Resources.貼り付け; + this.toolStripMenuItem貼り付け.Name = "toolStripMenuItem貼り付け"; + this.toolStripMenuItem貼り付け.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V ) ) ); + this.toolStripMenuItem貼り付け.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem貼り付け.Text = "貼り付け(&P)"; + this.toolStripMenuItem貼り付け.Click += new System.EventHandler( this.toolStripMenuItem貼り付け_Click ); + // + // toolStripMenuItem削除 + // + this.toolStripMenuItem削除.Enabled = false; + this.toolStripMenuItem削除.Image = global::DTXCreator.Properties.Resources.削除; + this.toolStripMenuItem削除.Name = "toolStripMenuItem削除"; + this.toolStripMenuItem削除.ShortcutKeys = System.Windows.Forms.Keys.Delete; + this.toolStripMenuItem削除.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem削除.Text = "削除(&D)"; + this.toolStripMenuItem削除.Click += new System.EventHandler( this.toolStripMenuItem削除_Click ); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size( 198, 6 ); + // + // toolStripMenuItemすべて選択 + // + this.toolStripMenuItemすべて選択.Name = "toolStripMenuItemすべて選択"; + this.toolStripMenuItemすべて選択.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A ) ) ); + this.toolStripMenuItemすべて選択.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItemすべて選択.Text = "すべて選択(&A)"; + this.toolStripMenuItemすべて選択.Click += new System.EventHandler( this.toolStripMenuItemすべて選択_Click ); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size( 198, 6 ); + // + // toolStripMenuItem選択モード + // + this.toolStripMenuItem選択モード.Image = global::DTXCreator.Properties.Resources.矢印ポインタ; + this.toolStripMenuItem選択モード.Name = "toolStripMenuItem選択モード"; + this.toolStripMenuItem選択モード.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem選択モード.Text = "選択モード(&S)"; + this.toolStripMenuItem選択モード.Click += new System.EventHandler( this.toolStripMenuItem選択モード_Click ); + // + // toolStripMenuItem編集モード + // + this.toolStripMenuItem編集モード.Image = global::DTXCreator.Properties.Resources.鉛筆; + this.toolStripMenuItem編集モード.Name = "toolStripMenuItem編集モード"; + this.toolStripMenuItem編集モード.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem編集モード.Text = "編集モード(&E)"; + this.toolStripMenuItem編集モード.Click += new System.EventHandler( this.toolStripMenuItem編集モード_Click ); + // + // toolStripMenuItemモード切替 + // + this.toolStripMenuItemモード切替.Name = "toolStripMenuItemモード切替"; + this.toolStripMenuItemモード切替.ShortcutKeys = System.Windows.Forms.Keys.F8; + this.toolStripMenuItemモード切替.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItemモード切替.Text = "モード切替(&M)"; + this.toolStripMenuItemモード切替.Click += new System.EventHandler( this.toolStripMenuItemモード切替_Click ); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size( 198, 6 ); + // + // toolStripMenuItem検索 + // + this.toolStripMenuItem検索.Name = "toolStripMenuItem検索"; + this.toolStripMenuItem検索.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F ) ) ); + this.toolStripMenuItem検索.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem検索.Text = "検索(&F)"; + this.toolStripMenuItem検索.Click += new System.EventHandler( this.toolStripMenuItem検索_Click ); + // + // toolStripMenuItem置換 + // + this.toolStripMenuItem置換.Name = "toolStripMenuItem置換"; + this.toolStripMenuItem置換.ShortcutKeys = ( (System.Windows.Forms.Keys) ( ( System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.H ) ) ); + this.toolStripMenuItem置換.Size = new System.Drawing.Size( 201, 22 ); + this.toolStripMenuItem置換.Text = "置換(&Q)"; + this.toolStripMenuItem置換.Click += new System.EventHandler( this.toolStripMenuItem置換_Click ); + // + // toolStripMenuItem表示 + // + this.toolStripMenuItem表示.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemチップパレット, + this.toolStripMenuItemガイド間隔} ); + this.toolStripMenuItem表示.Name = "toolStripMenuItem表示"; + this.toolStripMenuItem表示.Size = new System.Drawing.Size( 62, 22 ); + this.toolStripMenuItem表示.Text = "表示(&V)"; + // + // toolStripMenuItemチップパレット + // + this.toolStripMenuItemチップパレット.CheckOnClick = true; + this.toolStripMenuItemチップパレット.Image = global::DTXCreator.Properties.Resources.チップパレット; + this.toolStripMenuItemチップパレット.Name = "toolStripMenuItemチップパレット"; + this.toolStripMenuItemチップパレット.Size = new System.Drawing.Size( 177, 22 ); + this.toolStripMenuItemチップパレット.Text = "チップパレット(&P)"; + this.toolStripMenuItemチップパレット.Click += new System.EventHandler( this.toolStripMenuItemチップパレット_Click ); + // + // toolStripMenuItemガイド間隔 + // + this.toolStripMenuItemガイド間隔.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemガイド間隔4分, + this.toolStripMenuItemガイド間隔8分, + this.toolStripMenuItemガイド間隔12分, + this.toolStripMenuItemガイド間隔16分, + this.toolStripMenuItemガイド間隔24分, + this.toolStripMenuItemガイド間隔32分, + this.toolStripMenuItemガイド間隔48分, + this.toolStripMenuItemガイド間隔64分, + this.toolStripMenuItemガイド間隔フリー, + this.toolStripSeparator6, + this.toolStripMenuItemガイド間隔拡大, + this.toolStripMenuItemガイド間隔縮小} ); + this.toolStripMenuItemガイド間隔.Name = "toolStripMenuItemガイド間隔"; + this.toolStripMenuItemガイド間隔.Size = new System.Drawing.Size( 177, 22 ); + this.toolStripMenuItemガイド間隔.Text = "ガイド間隔(&G)"; + // + // toolStripMenuItemガイド間隔4分 + // + this.toolStripMenuItemガイド間隔4分.Name = "toolStripMenuItemガイド間隔4分"; + this.toolStripMenuItemガイド間隔4分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔4分.Text = "1/4"; + this.toolStripMenuItemガイド間隔4分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔4分_Click ); + // + // toolStripMenuItemガイド間隔8分 + // + this.toolStripMenuItemガイド間隔8分.Name = "toolStripMenuItemガイド間隔8分"; + this.toolStripMenuItemガイド間隔8分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔8分.Text = "1/8"; + this.toolStripMenuItemガイド間隔8分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔8分_Click ); + // + // toolStripMenuItemガイド間隔12分 + // + this.toolStripMenuItemガイド間隔12分.Name = "toolStripMenuItemガイド間隔12分"; + this.toolStripMenuItemガイド間隔12分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔12分.Text = "1/12"; + this.toolStripMenuItemガイド間隔12分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔12分_Click ); + // + // toolStripMenuItemガイド間隔16分 + // + this.toolStripMenuItemガイド間隔16分.Name = "toolStripMenuItemガイド間隔16分"; + this.toolStripMenuItemガイド間隔16分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔16分.Text = "1/16"; + this.toolStripMenuItemガイド間隔16分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔16分_Click ); + // + // toolStripMenuItemガイド間隔24分 + // + this.toolStripMenuItemガイド間隔24分.Name = "toolStripMenuItemガイド間隔24分"; + this.toolStripMenuItemガイド間隔24分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔24分.Text = "1/24"; + this.toolStripMenuItemガイド間隔24分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔24分_Click ); + // + // toolStripMenuItemガイド間隔32分 + // + this.toolStripMenuItemガイド間隔32分.Name = "toolStripMenuItemガイド間隔32分"; + this.toolStripMenuItemガイド間隔32分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔32分.Text = "1/32"; + this.toolStripMenuItemガイド間隔32分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔32分_Click ); + // + // toolStripMenuItemガイド間隔48分 + // + this.toolStripMenuItemガイド間隔48分.Name = "toolStripMenuItemガイド間隔48分"; + this.toolStripMenuItemガイド間隔48分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔48分.Text = "1/48"; + this.toolStripMenuItemガイド間隔48分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔48分_Click ); + // + // toolStripMenuItemガイド間隔64分 + // + this.toolStripMenuItemガイド間隔64分.Name = "toolStripMenuItemガイド間隔64分"; + this.toolStripMenuItemガイド間隔64分.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔64分.Text = "1/64"; + this.toolStripMenuItemガイド間隔64分.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔64分_Click ); + // + // toolStripMenuItemガイド間隔フリー + // + this.toolStripMenuItemガイド間隔フリー.Name = "toolStripMenuItemガイド間隔フリー"; + this.toolStripMenuItemガイド間隔フリー.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔フリー.Text = "フリー"; + this.toolStripMenuItemガイド間隔フリー.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔フリー_Click ); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size( 141, 6 ); + // + // toolStripMenuItemガイド間隔拡大 + // + this.toolStripMenuItemガイド間隔拡大.Name = "toolStripMenuItemガイド間隔拡大"; + this.toolStripMenuItemガイド間隔拡大.ShortcutKeys = System.Windows.Forms.Keys.F3; + this.toolStripMenuItemガイド間隔拡大.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔拡大.Text = "拡大(&W)"; + this.toolStripMenuItemガイド間隔拡大.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔拡大_Click ); + // + // toolStripMenuItemガイド間隔縮小 + // + this.toolStripMenuItemガイド間隔縮小.Name = "toolStripMenuItemガイド間隔縮小"; + this.toolStripMenuItemガイド間隔縮小.ShortcutKeys = System.Windows.Forms.Keys.F4; + this.toolStripMenuItemガイド間隔縮小.Size = new System.Drawing.Size( 144, 22 ); + this.toolStripMenuItemガイド間隔縮小.Text = "縮小(&N)"; + this.toolStripMenuItemガイド間隔縮小.Click += new System.EventHandler( this.toolStripMenuItemガイド間隔縮小_Click ); + // + // toolStripMenuItem再生 + // + this.toolStripMenuItem再生.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem先頭から再生, + this.toolStripMenuItem現在位置から再生, + this.toolStripMenuItem現在位置からBGMのみ再生, + this.toolStripMenuItem再生停止} ); + this.toolStripMenuItem再生.Name = "toolStripMenuItem再生"; + this.toolStripMenuItem再生.Size = new System.Drawing.Size( 61, 22 ); + this.toolStripMenuItem再生.Text = "再生(&P)"; + // + // toolStripMenuItem先頭から再生 + // + this.toolStripMenuItem先頭から再生.Image = global::DTXCreator.Properties.Resources.最初から再生; + this.toolStripMenuItem先頭から再生.Name = "toolStripMenuItem先頭から再生"; + this.toolStripMenuItem先頭から再生.ShortcutKeys = System.Windows.Forms.Keys.F5; + this.toolStripMenuItem先頭から再生.Size = new System.Drawing.Size( 253, 22 ); + this.toolStripMenuItem先頭から再生.Text = "先頭から再生(&T)"; + this.toolStripMenuItem先頭から再生.Click += new System.EventHandler( this.toolStripMenuItem先頭から再生_Click ); + // + // toolStripMenuItem現在位置から再生 + // + this.toolStripMenuItem現在位置から再生.Image = global::DTXCreator.Properties.Resources.再生; + this.toolStripMenuItem現在位置から再生.Name = "toolStripMenuItem現在位置から再生"; + this.toolStripMenuItem現在位置から再生.ShortcutKeys = System.Windows.Forms.Keys.F6; + this.toolStripMenuItem現在位置から再生.Size = new System.Drawing.Size( 253, 22 ); + this.toolStripMenuItem現在位置から再生.Text = "現在の位置から再生(&P)"; + this.toolStripMenuItem現在位置から再生.Click += new System.EventHandler( this.toolStripMenuItem現在位置から再生_Click ); + // + // toolStripMenuItem現在位置からBGMのみ再生 + // + this.toolStripMenuItem現在位置からBGMのみ再生.Image = global::DTXCreator.Properties.Resources.BGMのみ再生; + this.toolStripMenuItem現在位置からBGMのみ再生.Name = "toolStripMenuItem現在位置からBGMのみ再生"; + this.toolStripMenuItem現在位置からBGMのみ再生.Size = new System.Drawing.Size( 253, 22 ); + this.toolStripMenuItem現在位置からBGMのみ再生.Text = "現在の位置からBGMのみ再生(&B)"; + this.toolStripMenuItem現在位置からBGMのみ再生.Click += new System.EventHandler( this.toolStripMenuItem現在位置からBGMのみ再生_Click ); + // + // toolStripMenuItem再生停止 + // + this.toolStripMenuItem再生停止.Image = global::DTXCreator.Properties.Resources.再生停止; + this.toolStripMenuItem再生停止.Name = "toolStripMenuItem再生停止"; + this.toolStripMenuItem再生停止.ShortcutKeys = System.Windows.Forms.Keys.F7; + this.toolStripMenuItem再生停止.Size = new System.Drawing.Size( 253, 22 ); + this.toolStripMenuItem再生停止.Text = "再生停止(&S)"; + this.toolStripMenuItem再生停止.Click += new System.EventHandler( this.toolStripMenuItem再生停止_Click ); + // + // toolStripMenuItemツール + // + this.toolStripMenuItemツール.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemオプション} ); + this.toolStripMenuItemツール.Name = "toolStripMenuItemツール"; + this.toolStripMenuItemツール.Size = new System.Drawing.Size( 74, 22 ); + this.toolStripMenuItemツール.Text = "ツール(&T)"; + // + // toolStripMenuItemオプション + // + this.toolStripMenuItemオプション.Name = "toolStripMenuItemオプション"; + this.toolStripMenuItemオプション.Size = new System.Drawing.Size( 155, 22 ); + this.toolStripMenuItemオプション.Text = "オプション(&O)"; + this.toolStripMenuItemオプション.Click += new System.EventHandler( this.toolStripMenuItemオプション_Click ); + // + // toolStripMenuItemヘルプ + // + this.toolStripMenuItemヘルプ.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemDTXCreaterマニュアル, + this.toolStripMenuItemバージョン} ); + this.toolStripMenuItemヘルプ.Name = "toolStripMenuItemヘルプ"; + this.toolStripMenuItemヘルプ.Size = new System.Drawing.Size( 75, 22 ); + this.toolStripMenuItemヘルプ.Text = "ヘルプ(&H)"; + // + // toolStripMenuItemDTXCreaterマニュアル + // + this.toolStripMenuItemDTXCreaterマニュアル.Image = global::DTXCreator.Properties.Resources.ヘルプ; + this.toolStripMenuItemDTXCreaterマニュアル.Name = "toolStripMenuItemDTXCreaterマニュアル"; + this.toolStripMenuItemDTXCreaterマニュアル.ShortcutKeys = System.Windows.Forms.Keys.F1; + this.toolStripMenuItemDTXCreaterマニュアル.Size = new System.Drawing.Size( 251, 22 ); + this.toolStripMenuItemDTXCreaterマニュアル.Text = "DTXCreator マニュアル(&M)"; + this.toolStripMenuItemDTXCreaterマニュアル.Click += new System.EventHandler( this.toolStripMenuItemDTXCreaterマニュアル_Click ); + // + // toolStripMenuItemバージョン + // + this.toolStripMenuItemバージョン.Name = "toolStripMenuItemバージョン"; + this.toolStripMenuItemバージョン.Size = new System.Drawing.Size( 251, 22 ); + this.toolStripMenuItemバージョン.Text = "バージョン情報(&V)"; + this.toolStripMenuItemバージョン.Click += new System.EventHandler( this.toolStripMenuItemバージョン_Click ); + // + // toolStripツールバー + // + this.toolStripツールバー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton新規作成, + this.toolStripButton開く, + this.toolStripButton上書き保存, + this.toolStripSeparator7, + this.toolStripButton切り取り, + this.toolStripButtonコピー, + this.toolStripButton貼り付け, + this.toolStripButton削除, + this.toolStripSeparator8, + this.toolStripButtonアンドゥ, + this.toolStripButtonリドゥ, + this.toolStripSeparator9, + this.toolStripButtonチップパレット, + this.toolStripSeparator10, + this.toolStripComboBox譜面拡大率, + this.toolStripComboBoxガイド間隔, + this.toolStripButton選択モード, + this.toolStripButton編集モード, + this.toolStripSeparator11, + this.toolStripButton先頭から再生, + this.toolStripButton現在位置から再生, + this.toolStripButton現在位置からBGMのみ再生, + this.toolStripButton再生停止, + this.toolStripComboBox演奏速度, + this.toolStripSeparator12} ); + this.toolStripツールバー.Location = new System.Drawing.Point( 0, 26 ); + this.toolStripツールバー.Name = "toolStripツールバー"; + this.toolStripツールバー.Size = new System.Drawing.Size( 731, 26 ); + this.toolStripツールバー.TabIndex = 2; + this.toolStripツールバー.Text = "toolStrip1"; + // + // toolStripButton新規作成 + // + this.toolStripButton新規作成.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton新規作成.Image = global::DTXCreator.Properties.Resources.新規作成; + this.toolStripButton新規作成.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton新規作成.Name = "toolStripButton新規作成"; + this.toolStripButton新規作成.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton新規作成.Text = "toolStripButton1"; + this.toolStripButton新規作成.ToolTipText = "新しい譜面を作成します。\r\n"; + this.toolStripButton新規作成.Click += new System.EventHandler( this.toolStripButton新規作成_Click ); + // + // toolStripButton開く + // + this.toolStripButton開く.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton開く.Image = global::DTXCreator.Properties.Resources.開く; + this.toolStripButton開く.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton開く.Name = "toolStripButton開く"; + this.toolStripButton開く.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton開く.Text = "toolStripButton1"; + this.toolStripButton開く.ToolTipText = "新しいDTXファイルを開きます。\r\n"; + this.toolStripButton開く.Click += new System.EventHandler( this.toolStripButton開く_Click ); + // + // toolStripButton上書き保存 + // + this.toolStripButton上書き保存.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton上書き保存.Image = global::DTXCreator.Properties.Resources.保存; + this.toolStripButton上書き保存.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton上書き保存.Name = "toolStripButton上書き保存"; + this.toolStripButton上書き保存.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton上書き保存.Text = "toolStripButton1"; + this.toolStripButton上書き保存.ToolTipText = "上書き保存します。\r\n"; + this.toolStripButton上書き保存.Click += new System.EventHandler( this.toolStripButton上書き保存_Click ); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size( 6, 26 ); + // + // toolStripButton切り取り + // + this.toolStripButton切り取り.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton切り取り.Enabled = false; + this.toolStripButton切り取り.Image = global::DTXCreator.Properties.Resources.切り取り; + this.toolStripButton切り取り.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton切り取り.Name = "toolStripButton切り取り"; + this.toolStripButton切り取り.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton切り取り.Text = "toolStripButton1"; + this.toolStripButton切り取り.ToolTipText = "選択されているチップをクリップボードへ切り取ります。\r\n"; + this.toolStripButton切り取り.Click += new System.EventHandler( this.toolStripButton切り取り_Click ); + // + // toolStripButtonコピー + // + this.toolStripButtonコピー.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonコピー.Enabled = false; + this.toolStripButtonコピー.Image = global::DTXCreator.Properties.Resources.コピー; + this.toolStripButtonコピー.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonコピー.Name = "toolStripButtonコピー"; + this.toolStripButtonコピー.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButtonコピー.Text = "toolStripButton1"; + this.toolStripButtonコピー.ToolTipText = "選択されているチップをクリップボードにコピーします。\r\n"; + this.toolStripButtonコピー.Click += new System.EventHandler( this.toolStripButtonコピー_Click ); + // + // toolStripButton貼り付け + // + this.toolStripButton貼り付け.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton貼り付け.Enabled = false; + this.toolStripButton貼り付け.Image = global::DTXCreator.Properties.Resources.貼り付け; + this.toolStripButton貼り付け.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton貼り付け.Name = "toolStripButton貼り付け"; + this.toolStripButton貼り付け.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton貼り付け.Text = "toolStripButton1"; + this.toolStripButton貼り付け.ToolTipText = "クリップボードのチップを譜面に貼り付けます。\r\n"; + this.toolStripButton貼り付け.Click += new System.EventHandler( this.toolStripButton貼り付け_Click ); + // + // toolStripButton削除 + // + this.toolStripButton削除.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton削除.Enabled = false; + this.toolStripButton削除.Image = global::DTXCreator.Properties.Resources.削除; + this.toolStripButton削除.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton削除.Name = "toolStripButton削除"; + this.toolStripButton削除.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton削除.Text = "toolStripButton1"; + this.toolStripButton削除.ToolTipText = "選択されているチップを削除します。\r\n"; + this.toolStripButton削除.Click += new System.EventHandler( this.toolStripButton削除_Click ); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size( 6, 26 ); + // + // toolStripButtonアンドゥ + // + this.toolStripButtonアンドゥ.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonアンドゥ.Enabled = false; + this.toolStripButtonアンドゥ.Image = global::DTXCreator.Properties.Resources.Undo; + this.toolStripButtonアンドゥ.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonアンドゥ.Name = "toolStripButtonアンドゥ"; + this.toolStripButtonアンドゥ.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButtonアンドゥ.Text = "toolStripButton1"; + this.toolStripButtonアンドゥ.ToolTipText = "作業を1つ元に戻します。"; + this.toolStripButtonアンドゥ.Click += new System.EventHandler( this.toolStripButtonアンドゥ_Click ); + // + // toolStripButtonリドゥ + // + this.toolStripButtonリドゥ.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonリドゥ.Enabled = false; + this.toolStripButtonリドゥ.Image = global::DTXCreator.Properties.Resources.Redo; + this.toolStripButtonリドゥ.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonリドゥ.Name = "toolStripButtonリドゥ"; + this.toolStripButtonリドゥ.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButtonリドゥ.Text = "toolStripButton1"; + this.toolStripButtonリドゥ.ToolTipText = "作業を1つやり直します。\r\n"; + this.toolStripButtonリドゥ.Click += new System.EventHandler( this.toolStripButtonリドゥ_Click ); + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Name = "toolStripSeparator9"; + this.toolStripSeparator9.Size = new System.Drawing.Size( 6, 26 ); + // + // toolStripButtonチップパレット + // + this.toolStripButtonチップパレット.CheckOnClick = true; + this.toolStripButtonチップパレット.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonチップパレット.Image = global::DTXCreator.Properties.Resources.チップパレット; + this.toolStripButtonチップパレット.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonチップパレット.Name = "toolStripButtonチップパレット"; + this.toolStripButtonチップパレット.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButtonチップパレット.Text = "toolStripButton1"; + this.toolStripButtonチップパレット.ToolTipText = "チップパレットを表示します。"; + this.toolStripButtonチップパレット.Click += new System.EventHandler( this.toolStripButtonチップパレット_Click ); + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size( 6, 26 ); + // + // toolStripComboBox譜面拡大率 + // + this.toolStripComboBox譜面拡大率.DropDownHeight = 200; + this.toolStripComboBox譜面拡大率.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.toolStripComboBox譜面拡大率.IntegralHeight = false; + this.toolStripComboBox譜面拡大率.Items.AddRange( new object[] { + "標準", + "x2", + "x3", + "x4", + "x5", + "x6", + "x7", + "x8", + "x9", + "x10"} ); + this.toolStripComboBox譜面拡大率.Name = "toolStripComboBox譜面拡大率"; + this.toolStripComboBox譜面拡大率.Size = new System.Drawing.Size( 75, 26 ); + this.toolStripComboBox譜面拡大率.ToolTipText = "譜面の縦方向の表示倍率を指定します。"; + this.toolStripComboBox譜面拡大率.SelectedIndexChanged += new System.EventHandler( this.toolStripComboBox譜面拡大率_SelectedIndexChanged ); + // + // toolStripComboBoxガイド間隔 + // + this.toolStripComboBoxガイド間隔.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.toolStripComboBoxガイド間隔.Items.AddRange( new object[] { + "1/4", + "1/8", + "1/12", + "1/16", + "1/24", + "1/32", + "1/48", + "1/64", + "フリー"} ); + this.toolStripComboBoxガイド間隔.MaxDropDownItems = 20; + this.toolStripComboBoxガイド間隔.Name = "toolStripComboBoxガイド間隔"; + this.toolStripComboBoxガイド間隔.Size = new System.Drawing.Size( 75, 26 ); + this.toolStripComboBoxガイド間隔.ToolTipText = "ガイド線の間隔を指定します。"; + this.toolStripComboBoxガイド間隔.SelectedIndexChanged += new System.EventHandler( this.toolStripComboBoxガイド間隔_SelectedIndexChanged ); + // + // toolStripButton選択モード + // + this.toolStripButton選択モード.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton選択モード.Image = global::DTXCreator.Properties.Resources.矢印ポインタ; + this.toolStripButton選択モード.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton選択モード.Name = "toolStripButton選択モード"; + this.toolStripButton選択モード.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton選択モード.Text = "toolStripButton1"; + this.toolStripButton選択モード.ToolTipText = "選択モードに切り替えます。\r\n"; + this.toolStripButton選択モード.Click += new System.EventHandler( this.toolStripButton選択モード_Click ); + // + // toolStripButton編集モード + // + this.toolStripButton編集モード.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton編集モード.Image = global::DTXCreator.Properties.Resources.鉛筆; + this.toolStripButton編集モード.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton編集モード.Name = "toolStripButton編集モード"; + this.toolStripButton編集モード.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton編集モード.Text = "toolStripButton1"; + this.toolStripButton編集モード.ToolTipText = "編集モードに切り替えます。\r\n"; + this.toolStripButton編集モード.Click += new System.EventHandler( this.toolStripButton編集モード_Click ); + // + // toolStripSeparator11 + // + this.toolStripSeparator11.Name = "toolStripSeparator11"; + this.toolStripSeparator11.Size = new System.Drawing.Size( 6, 26 ); + // + // toolStripButton先頭から再生 + // + this.toolStripButton先頭から再生.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton先頭から再生.Image = global::DTXCreator.Properties.Resources.最初から再生; + this.toolStripButton先頭から再生.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton先頭から再生.Name = "toolStripButton先頭から再生"; + this.toolStripButton先頭から再生.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton先頭から再生.Text = "toolStripButton1"; + this.toolStripButton先頭から再生.ToolTipText = "Viewerで先頭から再生します。\r\n"; + this.toolStripButton先頭から再生.Click += new System.EventHandler( this.toolStripButton先頭から再生_Click ); + // + // toolStripButton現在位置から再生 + // + this.toolStripButton現在位置から再生.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton現在位置から再生.Image = global::DTXCreator.Properties.Resources.再生; + this.toolStripButton現在位置から再生.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton現在位置から再生.Name = "toolStripButton現在位置から再生"; + this.toolStripButton現在位置から再生.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton現在位置から再生.Text = "toolStripButton1"; + this.toolStripButton現在位置から再生.ToolTipText = "Viewer で現在の位置から再生します。\r\n"; + this.toolStripButton現在位置から再生.Click += new System.EventHandler( this.toolStripButton現在位置から再生_Click ); + // + // toolStripButton現在位置からBGMのみ再生 + // + this.toolStripButton現在位置からBGMのみ再生.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton現在位置からBGMのみ再生.Image = global::DTXCreator.Properties.Resources.BGMのみ再生; + this.toolStripButton現在位置からBGMのみ再生.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton現在位置からBGMのみ再生.Name = "toolStripButton現在位置からBGMのみ再生"; + this.toolStripButton現在位置からBGMのみ再生.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton現在位置からBGMのみ再生.Text = "toolStripButton1"; + this.toolStripButton現在位置からBGMのみ再生.ToolTipText = "Viewer で現在の位置からBGMのみ再生します。\r\n"; + this.toolStripButton現在位置からBGMのみ再生.Click += new System.EventHandler( this.toolStripButton現在位置からBGMのみ再生_Click ); + // + // toolStripButton再生停止 + // + this.toolStripButton再生停止.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton再生停止.Image = global::DTXCreator.Properties.Resources.再生停止; + this.toolStripButton再生停止.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton再生停止.Name = "toolStripButton再生停止"; + this.toolStripButton再生停止.Size = new System.Drawing.Size( 23, 23 ); + this.toolStripButton再生停止.Text = "toolStripButton1"; + this.toolStripButton再生停止.ToolTipText = "Viewer での再生を停止します。\r\n"; + this.toolStripButton再生停止.Click += new System.EventHandler( this.toolStripButton再生停止_Click ); + // + // toolStripComboBox演奏速度 + // + this.toolStripComboBox演奏速度.DropDownHeight = 150; + this.toolStripComboBox演奏速度.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.toolStripComboBox演奏速度.DropDownWidth = 35; + this.toolStripComboBox演奏速度.IntegralHeight = false; + this.toolStripComboBox演奏速度.Items.AddRange( new object[] { + "x1.5", + "x1.4", + "x1.3", + "x1.2", + "x1.1", + "x1.0", + "x0.9", + "x0.8", + "x0.7", + "x0.6", + "x0.5"} ); + this.toolStripComboBox演奏速度.Name = "toolStripComboBox演奏速度"; + this.toolStripComboBox演奏速度.Size = new System.Drawing.Size( 75, 26 ); + this.toolStripComboBox演奏速度.ToolTipText = "Viewer での再生速度を指定します。(#DTXVPLAYSPEED)"; + // + // toolStripSeparator12 + // + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size( 6, 26 ); + // + // vScrollBar譜面用垂直スクロールバー + // + this.vScrollBar譜面用垂直スクロールバー.Dock = System.Windows.Forms.DockStyle.Right; + this.vScrollBar譜面用垂直スクロールバー.LargeChange = 64; + this.vScrollBar譜面用垂直スクロールバー.Location = new System.Drawing.Point( 714, 52 ); + this.vScrollBar譜面用垂直スクロールバー.Name = "vScrollBar譜面用垂直スクロールバー"; + this.vScrollBar譜面用垂直スクロールバー.Size = new System.Drawing.Size( 17, 441 ); + this.vScrollBar譜面用垂直スクロールバー.SmallChange = 4; + this.vScrollBar譜面用垂直スクロールバー.TabIndex = 3; + this.vScrollBar譜面用垂直スクロールバー.ValueChanged += new System.EventHandler( this.vScrollBar譜面用垂直スクロールバー_ValueChanged ); + // + // splitContainerタブと譜面を分割 + // + this.splitContainerタブと譜面を分割.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainerタブと譜面を分割.Location = new System.Drawing.Point( 0, 52 ); + this.splitContainerタブと譜面を分割.Name = "splitContainerタブと譜面を分割"; + // + // splitContainerタブと譜面を分割.Panel1 + // + this.splitContainerタブと譜面を分割.Panel1.Controls.Add( this.tabControl情報パネル ); + // + // splitContainerタブと譜面を分割.Panel2 + // + this.splitContainerタブと譜面を分割.Panel2.Controls.Add( this.pictureBox譜面パネル ); + this.splitContainerタブと譜面を分割.Panel2.Controls.Add( this.hScrollBar譜面用水平スクロールバー ); + this.splitContainerタブと譜面を分割.Panel2.SizeChanged += new System.EventHandler( this.splitContainerタブと譜面を分割_Panel2_SizeChanged ); + this.splitContainerタブと譜面を分割.Size = new System.Drawing.Size( 714, 441 ); + this.splitContainerタブと譜面を分割.SplitterDistance = 286; + this.splitContainerタブと譜面を分割.TabIndex = 4; + // + // tabControl情報パネル + // + this.tabControl情報パネル.Controls.Add( this.tabPage基本情報 ); + this.tabControl情報パネル.Controls.Add( this.tabPageWAV ); + this.tabControl情報パネル.Controls.Add( this.tabPageBMP ); + this.tabControl情報パネル.Controls.Add( this.tabPageAVI ); + this.tabControl情報パネル.Controls.Add( this.tabPage自由入力 ); + this.tabControl情報パネル.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl情報パネル.Location = new System.Drawing.Point( 0, 0 ); + this.tabControl情報パネル.Name = "tabControl情報パネル"; + this.tabControl情報パネル.SelectedIndex = 0; + this.tabControl情報パネル.Size = new System.Drawing.Size( 286, 441 ); + this.tabControl情報パネル.TabIndex = 0; + // + // tabPage基本情報 + // + this.tabPage基本情報.BackColor = System.Drawing.SystemColors.Window; + this.tabPage基本情報.Controls.Add( this.buttonRESULTIMAGE参照 ); + this.tabPage基本情報.Controls.Add( this.buttonBACKGROUND参照 ); + this.tabPage基本情報.Controls.Add( this.buttonSTAGEFILE参照 ); + this.tabPage基本情報.Controls.Add( this.buttonPREIMAGE参照 ); + this.tabPage基本情報.Controls.Add( this.buttonPREVIEW参照 ); + this.tabPage基本情報.Controls.Add( this.labeRESULTIMAGE ); + this.tabPage基本情報.Controls.Add( this.labelBACKGROUND ); + this.tabPage基本情報.Controls.Add( this.labelSTAGEFILE ); + this.tabPage基本情報.Controls.Add( this.labelPREIMAGE ); + this.tabPage基本情報.Controls.Add( this.labelPREVIEW ); + this.tabPage基本情報.Controls.Add( this.textBoxRESULTIMAGE ); + this.tabPage基本情報.Controls.Add( this.textBoxBACKGROUND ); + this.tabPage基本情報.Controls.Add( this.textBoxSTAGEFILE ); + this.tabPage基本情報.Controls.Add( this.textBoxPREIMAGE ); + this.tabPage基本情報.Controls.Add( this.textBoxPREVIEW ); + this.tabPage基本情報.Controls.Add( this.textBoxパネル ); + this.tabPage基本情報.Controls.Add( this.labelパネル ); + this.tabPage基本情報.Controls.Add( this.labelBLEVEL ); + this.tabPage基本情報.Controls.Add( this.textBoxBLEVEL ); + this.tabPage基本情報.Controls.Add( this.hScrollBarBLEVEL ); + this.tabPage基本情報.Controls.Add( this.labelGLEVEL ); + this.tabPage基本情報.Controls.Add( this.textBoxGLEVEL ); + this.tabPage基本情報.Controls.Add( this.hScrollBarGLEVEL ); + this.tabPage基本情報.Controls.Add( this.labelDLEVEL ); + this.tabPage基本情報.Controls.Add( this.textBoxDLEVEL ); + this.tabPage基本情報.Controls.Add( this.hScrollBarDLEVEL ); + this.tabPage基本情報.Controls.Add( this.labelBPM ); + this.tabPage基本情報.Controls.Add( this.labelコメント ); + this.tabPage基本情報.Controls.Add( this.label製作者 ); + this.tabPage基本情報.Controls.Add( this.label曲名 ); + this.tabPage基本情報.Controls.Add( this.numericUpDownBPM ); + this.tabPage基本情報.Controls.Add( this.textBoxコメント ); + this.tabPage基本情報.Controls.Add( this.textBox製作者 ); + this.tabPage基本情報.Controls.Add( this.textBox曲名 ); + this.tabPage基本情報.Location = new System.Drawing.Point( 4, 22 ); + this.tabPage基本情報.Name = "tabPage基本情報"; + this.tabPage基本情報.Padding = new System.Windows.Forms.Padding( 3 ); + this.tabPage基本情報.Size = new System.Drawing.Size( 278, 415 ); + this.tabPage基本情報.TabIndex = 0; + this.tabPage基本情報.Text = "基本情報"; + // + // buttonRESULTIMAGE参照 + // + this.buttonRESULTIMAGE参照.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonRESULTIMAGE参照.Location = new System.Drawing.Point( 247, 308 ); + this.buttonRESULTIMAGE参照.Name = "buttonRESULTIMAGE参照"; + this.buttonRESULTIMAGE参照.Size = new System.Drawing.Size( 25, 23 ); + this.buttonRESULTIMAGE参照.TabIndex = 25; + this.buttonRESULTIMAGE参照.Text = "..."; + this.toolTipツールチップ.SetToolTip( this.buttonRESULTIMAGE参照, "ファイルをダイアログから選択します。\r\n" ); + this.buttonRESULTIMAGE参照.UseVisualStyleBackColor = true; + this.buttonRESULTIMAGE参照.Click += new System.EventHandler( this.buttonRESULTIMAGE参照_Click ); + // + // buttonBACKGROUND参照 + // + this.buttonBACKGROUND参照.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonBACKGROUND参照.Location = new System.Drawing.Point( 247, 283 ); + this.buttonBACKGROUND参照.Name = "buttonBACKGROUND参照"; + this.buttonBACKGROUND参照.Size = new System.Drawing.Size( 25, 23 ); + this.buttonBACKGROUND参照.TabIndex = 23; + this.buttonBACKGROUND参照.Text = "..."; + this.toolTipツールチップ.SetToolTip( this.buttonBACKGROUND参照, "ファイルをダイアログから選択します。" ); + this.buttonBACKGROUND参照.UseVisualStyleBackColor = true; + this.buttonBACKGROUND参照.Click += new System.EventHandler( this.buttonBACKGROUND参照_Click ); + // + // buttonSTAGEFILE参照 + // + this.buttonSTAGEFILE参照.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonSTAGEFILE参照.Location = new System.Drawing.Point( 247, 258 ); + this.buttonSTAGEFILE参照.Name = "buttonSTAGEFILE参照"; + this.buttonSTAGEFILE参照.Size = new System.Drawing.Size( 25, 23 ); + this.buttonSTAGEFILE参照.TabIndex = 21; + this.buttonSTAGEFILE参照.Text = "..."; + this.buttonSTAGEFILE参照.UseVisualStyleBackColor = true; + this.buttonSTAGEFILE参照.Click += new System.EventHandler( this.buttonSTAGEFILE参照_Click ); + // + // buttonPREIMAGE参照 + // + this.buttonPREIMAGE参照.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonPREIMAGE参照.Location = new System.Drawing.Point( 247, 233 ); + this.buttonPREIMAGE参照.Name = "buttonPREIMAGE参照"; + this.buttonPREIMAGE参照.Size = new System.Drawing.Size( 25, 23 ); + this.buttonPREIMAGE参照.TabIndex = 19; + this.buttonPREIMAGE参照.Text = "..."; + this.toolTipツールチップ.SetToolTip( this.buttonPREIMAGE参照, "ファイルをダイアログから選択します。" ); + this.buttonPREIMAGE参照.UseVisualStyleBackColor = true; + this.buttonPREIMAGE参照.Click += new System.EventHandler( this.buttonPREIMAGE参照_Click ); + // + // buttonPREVIEW参照 + // + this.buttonPREVIEW参照.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonPREVIEW参照.Location = new System.Drawing.Point( 247, 208 ); + this.buttonPREVIEW参照.Name = "buttonPREVIEW参照"; + this.buttonPREVIEW参照.Size = new System.Drawing.Size( 25, 23 ); + this.buttonPREVIEW参照.TabIndex = 17; + this.buttonPREVIEW参照.Text = "...\r\n"; + this.toolTipツールチップ.SetToolTip( this.buttonPREVIEW参照, "ファイルをダイアログから選択します。\r\n" ); + this.buttonPREVIEW参照.UseVisualStyleBackColor = true; + this.buttonPREVIEW参照.Click += new System.EventHandler( this.buttonPREVIEW参照_Click ); + // + // labeRESULTIMAGE + // + this.labeRESULTIMAGE.AutoSize = true; + this.labeRESULTIMAGE.Location = new System.Drawing.Point( 26, 311 ); + this.labeRESULTIMAGE.Name = "labeRESULTIMAGE"; + this.labeRESULTIMAGE.Size = new System.Drawing.Size( 53, 12 ); + this.labeRESULTIMAGE.TabIndex = 27; + this.labeRESULTIMAGE.Text = "結果画像\r\n"; + this.labeRESULTIMAGE.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labeRESULTIMAGE, "リザルト画像を設定します。\r\n" ); + // + // labelBACKGROUND + // + this.labelBACKGROUND.AutoSize = true; + this.labelBACKGROUND.Location = new System.Drawing.Point( 26, 286 ); + this.labelBACKGROUND.Name = "labelBACKGROUND"; + this.labelBACKGROUND.Size = new System.Drawing.Size( 53, 12 ); + this.labelBACKGROUND.TabIndex = 29; + this.labelBACKGROUND.Text = "背景画像\r\n"; + this.labelBACKGROUND.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelBACKGROUND, "背景画像を設定します。\r\n" ); + // + // labelSTAGEFILE + // + this.labelSTAGEFILE.AutoSize = true; + this.labelSTAGEFILE.Location = new System.Drawing.Point( 11, 261 ); + this.labelSTAGEFILE.Name = "labelSTAGEFILE"; + this.labelSTAGEFILE.Size = new System.Drawing.Size( 68, 12 ); + this.labelSTAGEFILE.TabIndex = 28; + this.labelSTAGEFILE.Text = "Loading画像\r\n"; + this.labelSTAGEFILE.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelSTAGEFILE, "STAGEFILEを設定します。\r\n" ); + // + // labelPREIMAGE + // + this.labelPREIMAGE.AutoSize = true; + this.labelPREIMAGE.Location = new System.Drawing.Point( 26, 236 ); + this.labelPREIMAGE.Name = "labelPREIMAGE"; + this.labelPREIMAGE.Size = new System.Drawing.Size( 53, 12 ); + this.labelPREIMAGE.TabIndex = 27; + this.labelPREIMAGE.Text = "選曲画像\r\n"; + this.labelPREIMAGE.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelPREIMAGE, "選曲画像を指定します。\r\n" ); + // + // labelPREVIEW + // + this.labelPREVIEW.AutoSize = true; + this.labelPREVIEW.Location = new System.Drawing.Point( 18, 211 ); + this.labelPREVIEW.Name = "labelPREVIEW"; + this.labelPREVIEW.Size = new System.Drawing.Size( 61, 12 ); + this.labelPREVIEW.TabIndex = 26; + this.labelPREVIEW.Text = "プレビュー音\r\n"; + this.labelPREVIEW.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelPREVIEW, "プレビューサウンドを設定します。\r\n" ); + // + // textBoxRESULTIMAGE + // + this.textBoxRESULTIMAGE.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxRESULTIMAGE.Location = new System.Drawing.Point( 85, 308 ); + this.textBoxRESULTIMAGE.Name = "textBoxRESULTIMAGE"; + this.textBoxRESULTIMAGE.Size = new System.Drawing.Size( 156, 19 ); + this.textBoxRESULTIMAGE.TabIndex = 24; + this.toolTipツールチップ.SetToolTip( this.textBoxRESULTIMAGE, "リザルト画像を設定します。" ); + this.textBoxRESULTIMAGE.TextChanged += new System.EventHandler( this.textBoxRESULTIMAGE_TextChanged ); + this.textBoxRESULTIMAGE.Leave += new System.EventHandler( this.textBoxRESULTIMAGE_Leave ); + // + // textBoxBACKGROUND + // + this.textBoxBACKGROUND.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxBACKGROUND.Location = new System.Drawing.Point( 85, 283 ); + this.textBoxBACKGROUND.Name = "textBoxBACKGROUND"; + this.textBoxBACKGROUND.Size = new System.Drawing.Size( 156, 19 ); + this.textBoxBACKGROUND.TabIndex = 22; + this.toolTipツールチップ.SetToolTip( this.textBoxBACKGROUND, "背景画像を設定します。" ); + this.textBoxBACKGROUND.TextChanged += new System.EventHandler( this.textBoxBACKGROUND_TextChanged ); + this.textBoxBACKGROUND.Leave += new System.EventHandler( this.textBoxBACKGROUND_Leave ); + // + // textBoxSTAGEFILE + // + this.textBoxSTAGEFILE.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxSTAGEFILE.Location = new System.Drawing.Point( 85, 258 ); + this.textBoxSTAGEFILE.Name = "textBoxSTAGEFILE"; + this.textBoxSTAGEFILE.Size = new System.Drawing.Size( 156, 19 ); + this.textBoxSTAGEFILE.TabIndex = 20; + this.toolTipツールチップ.SetToolTip( this.textBoxSTAGEFILE, "STAGEFILEを設定します。" ); + this.textBoxSTAGEFILE.TextChanged += new System.EventHandler( this.textBoxSTAGEFILE_TextChanged ); + this.textBoxSTAGEFILE.Leave += new System.EventHandler( this.textBoxSTAGEFILE_Leave ); + // + // textBoxPREIMAGE + // + this.textBoxPREIMAGE.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxPREIMAGE.Location = new System.Drawing.Point( 85, 233 ); + this.textBoxPREIMAGE.Name = "textBoxPREIMAGE"; + this.textBoxPREIMAGE.Size = new System.Drawing.Size( 156, 19 ); + this.textBoxPREIMAGE.TabIndex = 18; + this.toolTipツールチップ.SetToolTip( this.textBoxPREIMAGE, "選曲画像を指定します。\r\n" ); + this.textBoxPREIMAGE.TextChanged += new System.EventHandler( this.textBoxPREIMAGE_TextChanged ); + this.textBoxPREIMAGE.Leave += new System.EventHandler( this.textBoxPREIMAGE_Leave ); + // + // textBoxPREVIEW + // + this.textBoxPREVIEW.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxPREVIEW.Location = new System.Drawing.Point( 85, 208 ); + this.textBoxPREVIEW.Name = "textBoxPREVIEW"; + this.textBoxPREVIEW.Size = new System.Drawing.Size( 156, 19 ); + this.textBoxPREVIEW.TabIndex = 16; + this.toolTipツールチップ.SetToolTip( this.textBoxPREVIEW, "プレビューサウンドを設定します。\r\n" ); + this.textBoxPREVIEW.TextChanged += new System.EventHandler( this.textBoxPREVIEW_TextChanged ); + this.textBoxPREVIEW.Leave += new System.EventHandler( this.textBoxPREVIEW_Leave ); + // + // textBoxパネル + // + this.textBoxパネル.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxパネル.Location = new System.Drawing.Point( 85, 182 ); + this.textBoxパネル.Name = "textBoxパネル"; + this.textBoxパネル.Size = new System.Drawing.Size( 187, 19 ); + this.textBoxパネル.TabIndex = 14; + this.toolTipツールチップ.SetToolTip( this.textBoxパネル, "パネル文を設定します。\r\n" ); + this.textBoxパネル.TextChanged += new System.EventHandler( this.textBoxパネル_TextChanged ); + this.textBoxパネル.Leave += new System.EventHandler( this.textBoxパネル_Leave ); + // + // labelパネル + // + this.labelパネル.AutoSize = true; + this.labelパネル.Location = new System.Drawing.Point( 32, 185 ); + this.labelパネル.Name = "labelパネル"; + this.labelパネル.Size = new System.Drawing.Size( 47, 12 ); + this.labelパネル.TabIndex = 15; + this.labelパネル.Text = "パネル文"; + this.labelパネル.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelパネル, "パネル文を設定します。" ); + // + // labelBLEVEL + // + this.labelBLEVEL.AutoSize = true; + this.labelBLEVEL.Location = new System.Drawing.Point( 34, 157 ); + this.labelBLEVEL.Name = "labelBLEVEL"; + this.labelBLEVEL.Size = new System.Drawing.Size( 45, 12 ); + this.labelBLEVEL.TabIndex = 13; + this.labelBLEVEL.Text = "BassLv."; + this.labelBLEVEL.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelBLEVEL, "ベースの難易度を、(易)1~100(難)で設定します。" ); + // + // textBoxBLEVEL + // + this.textBoxBLEVEL.Location = new System.Drawing.Point( 85, 154 ); + this.textBoxBLEVEL.Name = "textBoxBLEVEL"; + this.textBoxBLEVEL.Size = new System.Drawing.Size( 36, 19 ); + this.textBoxBLEVEL.TabIndex = 9; + this.textBoxBLEVEL.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.toolTipツールチップ.SetToolTip( this.textBoxBLEVEL, "ベースの難易度を、(易)1~100(難)で設定します。\r\n" ); + this.textBoxBLEVEL.TextChanged += new System.EventHandler( this.textBoxBLEVEL_TextChanged ); + this.textBoxBLEVEL.Leave += new System.EventHandler( this.textBoxBLEVEL_Leave ); + // + // hScrollBarBLEVEL + // + this.hScrollBarBLEVEL.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.hScrollBarBLEVEL.Location = new System.Drawing.Point( 124, 154 ); + this.hScrollBarBLEVEL.Maximum = 109; + this.hScrollBarBLEVEL.Name = "hScrollBarBLEVEL"; + this.hScrollBarBLEVEL.Size = new System.Drawing.Size( 148, 17 ); + this.hScrollBarBLEVEL.TabIndex = 10; + this.toolTipツールチップ.SetToolTip( this.hScrollBarBLEVEL, "ベースの難易度を、(易)1~100(難)で設定します。\r\n" ); + this.hScrollBarBLEVEL.ValueChanged += new System.EventHandler( this.hScrollBarBLEVEL_ValueChanged ); + // + // labelGLEVEL + // + this.labelGLEVEL.AutoSize = true; + this.labelGLEVEL.Location = new System.Drawing.Point( 29, 136 ); + this.labelGLEVEL.Name = "labelGLEVEL"; + this.labelGLEVEL.Size = new System.Drawing.Size( 50, 12 ); + this.labelGLEVEL.TabIndex = 12; + this.labelGLEVEL.Text = "GuitarLv.\r\n"; + this.labelGLEVEL.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelGLEVEL, "ギターの難易度を、(易)1~100(難)で設定します。\r\n" ); + // + // textBoxGLEVEL + // + this.textBoxGLEVEL.Location = new System.Drawing.Point( 85, 133 ); + this.textBoxGLEVEL.Name = "textBoxGLEVEL"; + this.textBoxGLEVEL.Size = new System.Drawing.Size( 36, 19 ); + this.textBoxGLEVEL.TabIndex = 7; + this.textBoxGLEVEL.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.toolTipツールチップ.SetToolTip( this.textBoxGLEVEL, "ギターの難易度を、(易)1~100(難)で設定します。\r\n" ); + this.textBoxGLEVEL.TextChanged += new System.EventHandler( this.textBoxGLEVEL_TextChanged ); + this.textBoxGLEVEL.Leave += new System.EventHandler( this.textBoxGLEVEL_Leave ); + // + // hScrollBarGLEVEL + // + this.hScrollBarGLEVEL.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.hScrollBarGLEVEL.Location = new System.Drawing.Point( 124, 133 ); + this.hScrollBarGLEVEL.Maximum = 109; + this.hScrollBarGLEVEL.Name = "hScrollBarGLEVEL"; + this.hScrollBarGLEVEL.Size = new System.Drawing.Size( 148, 17 ); + this.hScrollBarGLEVEL.TabIndex = 8; + this.toolTipツールチップ.SetToolTip( this.hScrollBarGLEVEL, "ギターの難易度を、(易)1~100(難)で設定します。\r\n" ); + this.hScrollBarGLEVEL.ValueChanged += new System.EventHandler( this.hScrollBarGLEVEL_ValueChanged ); + // + // labelDLEVEL + // + this.labelDLEVEL.AutoSize = true; + this.labelDLEVEL.Location = new System.Drawing.Point( 33, 115 ); + this.labelDLEVEL.Name = "labelDLEVEL"; + this.labelDLEVEL.Size = new System.Drawing.Size( 46, 12 ); + this.labelDLEVEL.TabIndex = 11; + this.labelDLEVEL.Text = "DrumLv."; + this.labelDLEVEL.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelDLEVEL, "ドラムの難易度を、(易)1~100(難)で設定します。\r\n" ); + // + // textBoxDLEVEL + // + this.textBoxDLEVEL.Location = new System.Drawing.Point( 85, 112 ); + this.textBoxDLEVEL.Name = "textBoxDLEVEL"; + this.textBoxDLEVEL.Size = new System.Drawing.Size( 36, 19 ); + this.textBoxDLEVEL.TabIndex = 5; + this.textBoxDLEVEL.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.toolTipツールチップ.SetToolTip( this.textBoxDLEVEL, "ドラムの難易度を、(易)1~100(難)で設定します。" ); + this.textBoxDLEVEL.TextChanged += new System.EventHandler( this.textBoxDLEVEL_TextChanged ); + this.textBoxDLEVEL.Leave += new System.EventHandler( this.textBoxDLEVEL_Leave ); + // + // hScrollBarDLEVEL + // + this.hScrollBarDLEVEL.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.hScrollBarDLEVEL.Location = new System.Drawing.Point( 124, 112 ); + this.hScrollBarDLEVEL.Maximum = 109; + this.hScrollBarDLEVEL.Name = "hScrollBarDLEVEL"; + this.hScrollBarDLEVEL.Size = new System.Drawing.Size( 148, 17 ); + this.hScrollBarDLEVEL.TabIndex = 6; + this.toolTipツールチップ.SetToolTip( this.hScrollBarDLEVEL, "ドラムの難易度を、(易)1~100(難)で設定します。" ); + this.hScrollBarDLEVEL.ValueChanged += new System.EventHandler( this.hScrollBarDLEVEL_ValueChanged ); + // + // labelBPM + // + this.labelBPM.AutoSize = true; + this.labelBPM.Location = new System.Drawing.Point( 50, 83 ); + this.labelBPM.Name = "labelBPM"; + this.labelBPM.Size = new System.Drawing.Size( 29, 12 ); + this.labelBPM.TabIndex = 8; + this.labelBPM.Text = "BPM"; + this.labelBPM.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelBPM, "曲の速さを BPM (Beats / Minute)で指定します。" ); + // + // labelコメント + // + this.labelコメント.AutoSize = true; + this.labelコメント.Location = new System.Drawing.Point( 41, 59 ); + this.labelコメント.Name = "labelコメント"; + this.labelコメント.Size = new System.Drawing.Size( 38, 12 ); + this.labelコメント.TabIndex = 7; + this.labelコメント.Text = "コメント"; + this.labelコメント.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.labelコメント, "演奏データに対するコメント文を設定します。" ); + // + // label製作者 + // + this.label製作者.AutoSize = true; + this.label製作者.Location = new System.Drawing.Point( 38, 34 ); + this.label製作者.Name = "label製作者"; + this.label製作者.Size = new System.Drawing.Size( 41, 12 ); + this.label製作者.TabIndex = 6; + this.label製作者.Text = "製作者"; + this.label製作者.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.label製作者, "データの製作者名を設定します。" ); + // + // label曲名 + // + this.label曲名.AutoSize = true; + this.label曲名.Location = new System.Drawing.Point( 50, 9 ); + this.label曲名.Name = "label曲名"; + this.label曲名.Size = new System.Drawing.Size( 29, 12 ); + this.label曲名.TabIndex = 5; + this.label曲名.Text = "曲名"; + this.label曲名.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTipツールチップ.SetToolTip( this.label曲名, "演奏データのタイトルを設定します。" ); + // + // numericUpDownBPM + // + this.numericUpDownBPM.DecimalPlaces = 2; + this.numericUpDownBPM.Location = new System.Drawing.Point( 85, 81 ); + this.numericUpDownBPM.Maximum = new decimal( new int[] { + 9999, + 0, + 0, + 0} ); + this.numericUpDownBPM.Name = "numericUpDownBPM"; + this.numericUpDownBPM.Size = new System.Drawing.Size( 68, 19 ); + this.numericUpDownBPM.TabIndex = 4; + this.numericUpDownBPM.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.toolTipツールチップ.SetToolTip( this.numericUpDownBPM, "曲の速さを BPM (Beats / Minute)で指定します。" ); + this.numericUpDownBPM.Value = new decimal( new int[] { + 120, + 0, + 0, + 0} ); + this.numericUpDownBPM.ValueChanged += new System.EventHandler( this.numericUpDownBPM_ValueChanged ); + this.numericUpDownBPM.Leave += new System.EventHandler( this.numericUpDownBPM_Leave ); + // + // textBoxコメント + // + this.textBoxコメント.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBoxコメント.Location = new System.Drawing.Point( 85, 56 ); + this.textBoxコメント.Name = "textBoxコメント"; + this.textBoxコメント.Size = new System.Drawing.Size( 187, 19 ); + this.textBoxコメント.TabIndex = 3; + this.toolTipツールチップ.SetToolTip( this.textBoxコメント, "演奏データに対するコメント文を設定します。" ); + this.textBoxコメント.TextChanged += new System.EventHandler( this.textBoxコメント_TextChanged ); + this.textBoxコメント.Leave += new System.EventHandler( this.textBoxコメント_Leave ); + // + // textBox製作者 + // + this.textBox製作者.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBox製作者.Location = new System.Drawing.Point( 85, 31 ); + this.textBox製作者.Name = "textBox製作者"; + this.textBox製作者.Size = new System.Drawing.Size( 187, 19 ); + this.textBox製作者.TabIndex = 2; + this.toolTipツールチップ.SetToolTip( this.textBox製作者, "データの製作者名を設定します。\r\n" ); + this.textBox製作者.TextChanged += new System.EventHandler( this.textBox製作者_TextChanged ); + this.textBox製作者.Leave += new System.EventHandler( this.textBox製作者_Leave ); + // + // textBox曲名 + // + this.textBox曲名.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.textBox曲名.Location = new System.Drawing.Point( 85, 6 ); + this.textBox曲名.MinimumSize = new System.Drawing.Size( 10, 19 ); + this.textBox曲名.Name = "textBox曲名"; + this.textBox曲名.Size = new System.Drawing.Size( 187, 19 ); + this.textBox曲名.TabIndex = 1; + this.toolTipツールチップ.SetToolTip( this.textBox曲名, "演奏データのタイトルを設定します。" ); + this.textBox曲名.TextChanged += new System.EventHandler( this.textBox曲名_TextChanged ); + this.textBox曲名.Leave += new System.EventHandler( this.textBox曲名_Leave ); + // + // tabPageWAV + // + this.tabPageWAV.Controls.Add( this.listViewWAVリスト ); + this.tabPageWAV.Controls.Add( this.toolStripWAVツールバー ); + this.tabPageWAV.Location = new System.Drawing.Point( 4, 22 ); + this.tabPageWAV.Name = "tabPageWAV"; + this.tabPageWAV.Padding = new System.Windows.Forms.Padding( 3 ); + this.tabPageWAV.Size = new System.Drawing.Size( 266, 339 ); + this.tabPageWAV.TabIndex = 1; + this.tabPageWAV.Text = "WAV"; + this.tabPageWAV.UseVisualStyleBackColor = true; + // + // listViewWAVリスト + // + this.listViewWAVリスト.Columns.AddRange( new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderWAV_ラベル, + this.columnHeaderWAV_番号, + this.columnHeaderWAV_ファイル名, + this.columnHeaderWAV_音量, + this.columnHeaderWAV_位置, + this.columnHeaderWAV_BGM} ); + this.listViewWAVリスト.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewWAVリスト.Font = new System.Drawing.Font( "ï¼­ï¼³ ゴシック", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (byte) ( 128 ) ) ); + this.listViewWAVリスト.FullRowSelect = true; + this.listViewWAVリスト.GridLines = true; + this.listViewWAVリスト.HideSelection = false; + this.listViewWAVリスト.Location = new System.Drawing.Point( 3, 3 ); + this.listViewWAVリスト.MultiSelect = false; + this.listViewWAVリスト.Name = "listViewWAVリスト"; + this.listViewWAVリスト.Size = new System.Drawing.Size( 260, 308 ); + this.listViewWAVリスト.TabIndex = 0; + this.listViewWAVリスト.UseCompatibleStateImageBehavior = false; + this.listViewWAVリスト.View = System.Windows.Forms.View.Details; + this.listViewWAVリスト.VirtualListSize = 1295; + this.listViewWAVリスト.VirtualMode = true; + this.listViewWAVリスト.SelectedIndexChanged += new System.EventHandler( this.listViewWAVリスト_SelectedIndexChanged ); + this.listViewWAVリスト.DoubleClick += new System.EventHandler( this.listViewWAVリスト_DoubleClick ); + this.listViewWAVリスト.MouseEnter += new System.EventHandler( this.listViewWAVリスト_MouseEnter ); + this.listViewWAVリスト.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler( this.listViewWAVリスト_RetrieveVirtualItem ); + this.listViewWAVリスト.KeyPress += new System.Windows.Forms.KeyPressEventHandler( this.listViewWAVリスト_KeyPress ); + this.listViewWAVリスト.ItemDrag += new System.Windows.Forms.ItemDragEventHandler( this.listViewWAVリスト_ItemDrag ); + this.listViewWAVリスト.Click += new System.EventHandler( this.listViewWAVリスト_Click ); + // + // columnHeaderWAV_ラベル + // + this.columnHeaderWAV_ラベル.Text = "ラベル"; + this.columnHeaderWAV_ラベル.Width = 80; + // + // columnHeaderWAV_番号 + // + this.columnHeaderWAV_番号.Text = "No"; + this.columnHeaderWAV_番号.Width = 28; + // + // columnHeaderWAV_ファイル名 + // + this.columnHeaderWAV_ファイル名.Text = "ファイル"; + this.columnHeaderWAV_ファイル名.Width = 80; + // + // columnHeaderWAV_音量 + // + this.columnHeaderWAV_音量.Text = "音量"; + this.columnHeaderWAV_音量.Width = 40; + // + // columnHeaderWAV_位置 + // + this.columnHeaderWAV_位置.Text = "位置"; + this.columnHeaderWAV_位置.Width = 40; + // + // columnHeaderWAV_BGM + // + this.columnHeaderWAV_BGM.Text = "BPM"; + this.columnHeaderWAV_BGM.Width = 34; + // + // toolStripWAVツールバー + // + this.toolStripWAVツールバー.Dock = System.Windows.Forms.DockStyle.Bottom; + this.toolStripWAVツールバー.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStripWAVツールバー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripButtonWAVリスト上移動, + this.toolStripButtonWAVリスト下移動, + this.toolStripSeparator13, + this.toolStripButtonWAVリストプレビュー再生開始, + this.toolStripButtonWAVリストプレビュー再生停止, + this.toolStripSeparator14, + this.toolStripButtonWAVリストプレビュースイッチ} ); + this.toolStripWAVツールバー.Location = new System.Drawing.Point( 3, 311 ); + this.toolStripWAVツールバー.Name = "toolStripWAVツールバー"; + this.toolStripWAVツールバー.Size = new System.Drawing.Size( 260, 25 ); + this.toolStripWAVツールバー.TabIndex = 0; + this.toolStripWAVツールバー.Text = "WAVリストパネル\r\n"; + // + // toolStripButtonWAVリスト上移動 + // + this.toolStripButtonWAVリスト上移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonWAVリスト上移動.Image = global::DTXCreator.Properties.Resources.上移動; + this.toolStripButtonWAVリスト上移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonWAVリスト上移動.Name = "toolStripButtonWAVリスト上移動"; + this.toolStripButtonWAVリスト上移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonWAVリスト上移動.Text = "toolStripButton1"; + this.toolStripButtonWAVリスト上移動.ToolTipText = "選択行を1つ上に移動します。\r\n"; + this.toolStripButtonWAVリスト上移動.Click += new System.EventHandler( this.toolStripButtonWAVリスト上移動_Click ); + // + // toolStripButtonWAVリスト下移動 + // + this.toolStripButtonWAVリスト下移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonWAVリスト下移動.Image = global::DTXCreator.Properties.Resources.下移動; + this.toolStripButtonWAVリスト下移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonWAVリスト下移動.Name = "toolStripButtonWAVリスト下移動"; + this.toolStripButtonWAVリスト下移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonWAVリスト下移動.Text = "toolStripButton1"; + this.toolStripButtonWAVリスト下移動.ToolTipText = "選択行を1つ下へ移動します。\r\n"; + this.toolStripButtonWAVリスト下移動.Click += new System.EventHandler( this.toolStripButtonWAVリスト下移動_Click ); + // + // toolStripSeparator13 + // + this.toolStripSeparator13.Name = "toolStripSeparator13"; + this.toolStripSeparator13.Size = new System.Drawing.Size( 6, 25 ); + // + // toolStripButtonWAVリストプレビュー再生開始 + // + this.toolStripButtonWAVリストプレビュー再生開始.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonWAVリストプレビュー再生開始.Image = global::DTXCreator.Properties.Resources.再生; + this.toolStripButtonWAVリストプレビュー再生開始.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonWAVリストプレビュー再生開始.Name = "toolStripButtonWAVリストプレビュー再生開始"; + this.toolStripButtonWAVリストプレビュー再生開始.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonWAVリストプレビュー再生開始.Text = "toolStripButton1"; + this.toolStripButtonWAVリストプレビュー再生開始.ToolTipText = "選択されている行のプレビュー音を再生します。\r\n"; + this.toolStripButtonWAVリストプレビュー再生開始.Click += new System.EventHandler( this.toolStripButtonWAVリストプレビュー再生開始_Click ); + // + // toolStripButtonWAVリストプレビュー再生停止 + // + this.toolStripButtonWAVリストプレビュー再生停止.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonWAVリストプレビュー再生停止.Image = global::DTXCreator.Properties.Resources.再生停止; + this.toolStripButtonWAVリストプレビュー再生停止.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonWAVリストプレビュー再生停止.Name = "toolStripButtonWAVリストプレビュー再生停止"; + this.toolStripButtonWAVリストプレビュー再生停止.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonWAVリストプレビュー再生停止.Text = "toolStripButton1"; + this.toolStripButtonWAVリストプレビュー再生停止.ToolTipText = "プレビュー音の再生を停止します。\r\n"; + this.toolStripButtonWAVリストプレビュー再生停止.Click += new System.EventHandler( this.toolStripButtonWAVリストプレビュー再生停止_Click ); + // + // toolStripSeparator14 + // + this.toolStripSeparator14.Name = "toolStripSeparator14"; + this.toolStripSeparator14.Size = new System.Drawing.Size( 6, 25 ); + // + // toolStripButtonWAVリストプレビュースイッチ + // + this.toolStripButtonWAVリストプレビュースイッチ.Checked = true; + this.toolStripButtonWAVリストプレビュースイッチ.CheckOnClick = true; + this.toolStripButtonWAVリストプレビュースイッチ.CheckState = System.Windows.Forms.CheckState.Checked; + this.toolStripButtonWAVリストプレビュースイッチ.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonWAVリストプレビュースイッチ.Image = global::DTXCreator.Properties.Resources.スピーカー; + this.toolStripButtonWAVリストプレビュースイッチ.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonWAVリストプレビュースイッチ.Name = "toolStripButtonWAVリストプレビュースイッチ"; + this.toolStripButtonWAVリストプレビュースイッチ.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonWAVリストプレビュースイッチ.Text = "toolStripButton1"; + this.toolStripButtonWAVリストプレビュースイッチ.ToolTipText = "行をクリックしたときにプレビュー音を再生します。\r\n"; + this.toolStripButtonWAVリストプレビュースイッチ.CheckStateChanged += new System.EventHandler( this.toolStripButtonWAVリストプレビュースイッチ_CheckStateChanged ); + // + // tabPageBMP + // + this.tabPageBMP.Controls.Add( this.listViewBMPリスト ); + this.tabPageBMP.Controls.Add( this.toolStripBMPツールバー ); + this.tabPageBMP.Location = new System.Drawing.Point( 4, 22 ); + this.tabPageBMP.Name = "tabPageBMP"; + this.tabPageBMP.Padding = new System.Windows.Forms.Padding( 3 ); + this.tabPageBMP.Size = new System.Drawing.Size( 266, 339 ); + this.tabPageBMP.TabIndex = 2; + this.tabPageBMP.Text = "BMP"; + this.tabPageBMP.UseVisualStyleBackColor = true; + // + // listViewBMPリスト + // + this.listViewBMPリスト.Columns.AddRange( new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderBMP_TEX, + this.columnHeaderBMP_ラベル, + this.columnHeaderBMP_BMP番号, + this.columnHeaderBMP_ファイル名} ); + this.listViewBMPリスト.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewBMPリスト.Font = new System.Drawing.Font( "ï¼­ï¼³ ゴシック", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (byte) ( 128 ) ) ); + this.listViewBMPリスト.FullRowSelect = true; + this.listViewBMPリスト.GridLines = true; + this.listViewBMPリスト.HideSelection = false; + this.listViewBMPリスト.Location = new System.Drawing.Point( 3, 3 ); + this.listViewBMPリスト.MultiSelect = false; + this.listViewBMPリスト.Name = "listViewBMPリスト"; + this.listViewBMPリスト.Size = new System.Drawing.Size( 260, 308 ); + this.listViewBMPリスト.TabIndex = 1; + this.listViewBMPリスト.UseCompatibleStateImageBehavior = false; + this.listViewBMPリスト.View = System.Windows.Forms.View.Details; + this.listViewBMPリスト.VirtualListSize = 1295; + this.listViewBMPリスト.VirtualMode = true; + this.listViewBMPリスト.SelectedIndexChanged += new System.EventHandler( this.listViewBMPリスト_SelectedIndexChanged ); + this.listViewBMPリスト.DoubleClick += new System.EventHandler( this.listViewBMPリスト_DoubleClick ); + this.listViewBMPリスト.MouseEnter += new System.EventHandler( this.listViewBMPリスト_MouseEnter ); + this.listViewBMPリスト.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler( this.listViewBMPリスト_RetrieveVirtualItem ); + this.listViewBMPリスト.KeyPress += new System.Windows.Forms.KeyPressEventHandler( this.listViewBMPリスト_KeyPress ); + this.listViewBMPリスト.ItemDrag += new System.Windows.Forms.ItemDragEventHandler( this.listViewBMPリスト_ItemDrag ); + this.listViewBMPリスト.Click += new System.EventHandler( this.listViewBMPリスト_Click ); + // + // columnHeaderBMP_TEX + // + this.columnHeaderBMP_TEX.Text = "Tex"; + this.columnHeaderBMP_TEX.Width = 34; + // + // columnHeaderBMP_ラベル + // + this.columnHeaderBMP_ラベル.Text = "ラベル"; + this.columnHeaderBMP_ラベル.Width = 127; + // + // columnHeaderBMP_BMP番号 + // + this.columnHeaderBMP_BMP番号.Text = "No"; + this.columnHeaderBMP_BMP番号.Width = 28; + // + // columnHeaderBMP_ファイル名 + // + this.columnHeaderBMP_ファイル名.Text = "ファイル"; + this.columnHeaderBMP_ファイル名.Width = 120; + // + // toolStripBMPツールバー + // + this.toolStripBMPツールバー.Dock = System.Windows.Forms.DockStyle.Bottom; + this.toolStripBMPツールバー.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStripBMPツールバー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripButtonBMPリスト上移動, + this.toolStripButtonBMPリスト下移動} ); + this.toolStripBMPツールバー.Location = new System.Drawing.Point( 3, 311 ); + this.toolStripBMPツールバー.Name = "toolStripBMPツールバー"; + this.toolStripBMPツールバー.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.toolStripBMPツールバー.Size = new System.Drawing.Size( 260, 25 ); + this.toolStripBMPツールバー.TabIndex = 2; + this.toolStripBMPツールバー.Text = "BMPリストツールバー\r\n"; + // + // toolStripButtonBMPリスト上移動 + // + this.toolStripButtonBMPリスト上移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonBMPリスト上移動.Image = global::DTXCreator.Properties.Resources.上移動; + this.toolStripButtonBMPリスト上移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonBMPリスト上移動.Name = "toolStripButtonBMPリスト上移動"; + this.toolStripButtonBMPリスト上移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonBMPリスト上移動.Text = "toolStripButton1"; + this.toolStripButtonBMPリスト上移動.Click += new System.EventHandler( this.toolStripButtonBMPリスト上移動_Click ); + // + // toolStripButtonBMPリスト下移動 + // + this.toolStripButtonBMPリスト下移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonBMPリスト下移動.Image = global::DTXCreator.Properties.Resources.下移動; + this.toolStripButtonBMPリスト下移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonBMPリスト下移動.Name = "toolStripButtonBMPリスト下移動"; + this.toolStripButtonBMPリスト下移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonBMPリスト下移動.Text = "toolStripButton1"; + this.toolStripButtonBMPリスト下移動.Click += new System.EventHandler( this.toolStripButtonBMPリスト下移動_Click ); + // + // tabPageAVI + // + this.tabPageAVI.Controls.Add( this.listViewAVIリスト ); + this.tabPageAVI.Controls.Add( this.toolStripAVIツールバー ); + this.tabPageAVI.Location = new System.Drawing.Point( 4, 22 ); + this.tabPageAVI.Name = "tabPageAVI"; + this.tabPageAVI.Padding = new System.Windows.Forms.Padding( 3 ); + this.tabPageAVI.Size = new System.Drawing.Size( 266, 339 ); + this.tabPageAVI.TabIndex = 3; + this.tabPageAVI.Text = "AVI"; + this.tabPageAVI.UseVisualStyleBackColor = true; + // + // listViewAVIリスト + // + this.listViewAVIリスト.Columns.AddRange( new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderAVI_ラベル, + this.columnHeaderAVI_AVI番号, + this.columnHeaderAVI_ファイル名} ); + this.listViewAVIリスト.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewAVIリスト.Font = new System.Drawing.Font( "ï¼­ï¼³ ゴシック", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (byte) ( 128 ) ) ); + this.listViewAVIリスト.FullRowSelect = true; + this.listViewAVIリスト.GridLines = true; + this.listViewAVIリスト.HideSelection = false; + this.listViewAVIリスト.Location = new System.Drawing.Point( 3, 3 ); + this.listViewAVIリスト.MultiSelect = false; + this.listViewAVIリスト.Name = "listViewAVIリスト"; + this.listViewAVIリスト.Size = new System.Drawing.Size( 260, 308 ); + this.listViewAVIリスト.TabIndex = 1; + this.listViewAVIリスト.UseCompatibleStateImageBehavior = false; + this.listViewAVIリスト.View = System.Windows.Forms.View.Details; + this.listViewAVIリスト.VirtualListSize = 1295; + this.listViewAVIリスト.VirtualMode = true; + this.listViewAVIリスト.SelectedIndexChanged += new System.EventHandler( this.listViewAVIリスト_SelectedIndexChanged ); + this.listViewAVIリスト.DoubleClick += new System.EventHandler( this.listViewAVIリスト_DoubleClick ); + this.listViewAVIリスト.MouseEnter += new System.EventHandler( this.listViewAVIリスト_MouseEnter ); + this.listViewAVIリスト.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler( this.listViewAVIリスト_RetrieveVirtualItem ); + this.listViewAVIリスト.KeyPress += new System.Windows.Forms.KeyPressEventHandler( this.listViewAVIリスト_KeyPress ); + this.listViewAVIリスト.ItemDrag += new System.Windows.Forms.ItemDragEventHandler( this.listViewAVIリスト_ItemDrag ); + this.listViewAVIリスト.Click += new System.EventHandler( this.listViewAVIリスト_Click ); + // + // columnHeaderAVI_ラベル + // + this.columnHeaderAVI_ラベル.Text = "ラベル"; + this.columnHeaderAVI_ラベル.Width = 127; + // + // columnHeaderAVI_AVI番号 + // + this.columnHeaderAVI_AVI番号.Text = "No"; + this.columnHeaderAVI_AVI番号.Width = 28; + // + // columnHeaderAVI_ファイル名 + // + this.columnHeaderAVI_ファイル名.Text = "ファイル"; + this.columnHeaderAVI_ファイル名.Width = 120; + // + // toolStripAVIツールバー + // + this.toolStripAVIツールバー.Dock = System.Windows.Forms.DockStyle.Bottom; + this.toolStripAVIツールバー.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStripAVIツールバー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripButtonAVIリスト上移動, + this.toolStripButtonAVIリスト下移動} ); + this.toolStripAVIツールバー.Location = new System.Drawing.Point( 3, 311 ); + this.toolStripAVIツールバー.Name = "toolStripAVIツールバー"; + this.toolStripAVIツールバー.Size = new System.Drawing.Size( 260, 25 ); + this.toolStripAVIツールバー.TabIndex = 0; + this.toolStripAVIツールバー.Text = "toolStrip1"; + // + // toolStripButtonAVIリスト上移動 + // + this.toolStripButtonAVIリスト上移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonAVIリスト上移動.Image = global::DTXCreator.Properties.Resources.上移動; + this.toolStripButtonAVIリスト上移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonAVIリスト上移動.Name = "toolStripButtonAVIリスト上移動"; + this.toolStripButtonAVIリスト上移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonAVIリスト上移動.Text = "toolStripButton1"; + this.toolStripButtonAVIリスト上移動.ToolTipText = "選択行を1つ上に移動します。\r\n"; + this.toolStripButtonAVIリスト上移動.Click += new System.EventHandler( this.toolStripButtonAVIリスト上移動_Click ); + // + // toolStripButtonAVIリスト下移動 + // + this.toolStripButtonAVIリスト下移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonAVIリスト下移動.Image = global::DTXCreator.Properties.Resources.下移動; + this.toolStripButtonAVIリスト下移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonAVIリスト下移動.Name = "toolStripButtonAVIリスト下移動"; + this.toolStripButtonAVIリスト下移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButtonAVIリスト下移動.Text = "toolStripButton1"; + this.toolStripButtonAVIリスト下移動.ToolTipText = "選択行を1つ下へ移動します。\r\n"; + this.toolStripButtonAVIリスト下移動.Click += new System.EventHandler( this.toolStripButtonAVIリスト下移動_Click ); + // + // tabPage自由入力 + // + this.tabPage自由入力.Controls.Add( this.textBox自由入力欄 ); + this.tabPage自由入力.Location = new System.Drawing.Point( 4, 22 ); + this.tabPage自由入力.Name = "tabPage自由入力"; + this.tabPage自由入力.Padding = new System.Windows.Forms.Padding( 3 ); + this.tabPage自由入力.Size = new System.Drawing.Size( 266, 339 ); + this.tabPage自由入力.TabIndex = 4; + this.tabPage自由入力.Text = "自由入力"; + this.tabPage自由入力.UseVisualStyleBackColor = true; + // + // textBox自由入力欄 + // + this.textBox自由入力欄.AcceptsReturn = true; + this.textBox自由入力欄.AcceptsTab = true; + this.textBox自由入力欄.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox自由入力欄.Location = new System.Drawing.Point( 3, 3 ); + this.textBox自由入力欄.Margin = new System.Windows.Forms.Padding( 10 ); + this.textBox自由入力欄.Multiline = true; + this.textBox自由入力欄.Name = "textBox自由入力欄"; + this.textBox自由入力欄.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox自由入力欄.Size = new System.Drawing.Size( 260, 333 ); + this.textBox自由入力欄.TabIndex = 0; + this.textBox自由入力欄.TextChanged += new System.EventHandler( this.textBox自由入力欄_TextChanged ); + this.textBox自由入力欄.Leave += new System.EventHandler( this.textBox自由入力欄_Leave ); + // + // pictureBox譜面パネル + // + this.pictureBox譜面パネル.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom ) + | System.Windows.Forms.AnchorStyles.Left ) ) ); + this.pictureBox譜面パネル.BackColor = System.Drawing.Color.Black; + this.pictureBox譜面パネル.Location = new System.Drawing.Point( 0, 0 ); + this.pictureBox譜面パネル.Margin = new System.Windows.Forms.Padding( 0 ); + this.pictureBox譜面パネル.Name = "pictureBox譜面パネル"; + this.pictureBox譜面パネル.Size = new System.Drawing.Size( 184, 424 ); + this.pictureBox譜面パネル.TabIndex = 1; + this.pictureBox譜面パネル.TabStop = false; + this.pictureBox譜面パネル.MouseLeave += new System.EventHandler( this.pictureBox譜面パネル_MouseLeave ); + this.pictureBox譜面パネル.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler( this.pictureBox譜面パネル_PreviewKeyDown ); + this.pictureBox譜面パネル.MouseMove += new System.Windows.Forms.MouseEventHandler( this.pictureBox譜面パネル_MouseMove ); + this.pictureBox譜面パネル.MouseClick += new System.Windows.Forms.MouseEventHandler( this.pictureBox譜面パネル_MouseClick ); + this.pictureBox譜面パネル.MouseDown += new System.Windows.Forms.MouseEventHandler( this.pictureBox譜面パネル_MouseDown ); + this.pictureBox譜面パネル.Paint += new System.Windows.Forms.PaintEventHandler( this.pictureBox譜面パネル_Paint ); + this.pictureBox譜面パネル.MouseEnter += new System.EventHandler( this.pictureBox譜面パネル_MouseEnter ); + // + // hScrollBar譜面用水平スクロールバー + // + this.hScrollBar譜面用水平スクロールバー.Dock = System.Windows.Forms.DockStyle.Bottom; + this.hScrollBar譜面用水平スクロールバー.Location = new System.Drawing.Point( 0, 424 ); + this.hScrollBar譜面用水平スクロールバー.Name = "hScrollBar譜面用水平スクロールバー"; + this.hScrollBar譜面用水平スクロールバー.Size = new System.Drawing.Size( 424, 17 ); + this.hScrollBar譜面用水平スクロールバー.SmallChange = 5; + this.hScrollBar譜面用水平スクロールバー.TabIndex = 0; + this.hScrollBar譜面用水平スクロールバー.ValueChanged += new System.EventHandler( this.hScrollBar譜面用水平スクロールバー_ValueChanged ); + // + // contextMenuStrip譜面右メニュー + // + this.contextMenuStrip譜面右メニュー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem選択チップの切り取り, + this.toolStripMenuItem選択チップのコピー, + this.toolStripMenuItem選択チップの貼り付け, + this.toolStripMenuItem選択チップの削除, + this.toolStripSeparator15, + this.toolStripMenuItemすべてのチップの選択, + this.toolStripSeparator16, + this.toolStripMenuItem小節長変更, + this.toolStripSeparator17, + this.toolStripMenuItem小節の挿入, + this.toolStripMenuItem小節の削除} ); + this.contextMenuStrip譜面右メニュー.Name = "contextMenuStrip譜面右メニュー"; + this.contextMenuStrip譜面右メニュー.Size = new System.Drawing.Size( 215, 198 ); + // + // toolStripMenuItem選択チップの切り取り + // + this.toolStripMenuItem選択チップの切り取り.Image = global::DTXCreator.Properties.Resources.切り取り; + this.toolStripMenuItem選択チップの切り取り.Name = "toolStripMenuItem選択チップの切り取り"; + this.toolStripMenuItem選択チップの切り取り.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem選択チップの切り取り.Text = "選択チップの切り取り(&T)"; + this.toolStripMenuItem選択チップの切り取り.Click += new System.EventHandler( this.toolStripMenuItem選択チップの切り取り_Click ); + // + // toolStripMenuItem選択チップのコピー + // + this.toolStripMenuItem選択チップのコピー.Image = global::DTXCreator.Properties.Resources.コピー; + this.toolStripMenuItem選択チップのコピー.Name = "toolStripMenuItem選択チップのコピー"; + this.toolStripMenuItem選択チップのコピー.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem選択チップのコピー.Text = "選択チップのコピー(&C)"; + this.toolStripMenuItem選択チップのコピー.Click += new System.EventHandler( this.toolStripMenuItem選択チップのコピー_Click ); + // + // toolStripMenuItem選択チップの貼り付け + // + this.toolStripMenuItem選択チップの貼り付け.Image = global::DTXCreator.Properties.Resources.貼り付け; + this.toolStripMenuItem選択チップの貼り付け.Name = "toolStripMenuItem選択チップの貼り付け"; + this.toolStripMenuItem選択チップの貼り付け.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem選択チップの貼り付け.Text = "選択チップの貼り付け(&P)"; + this.toolStripMenuItem選択チップの貼り付け.Click += new System.EventHandler( this.toolStripMenuItem選択チップの貼り付け_Click ); + // + // toolStripMenuItem選択チップの削除 + // + this.toolStripMenuItem選択チップの削除.Image = global::DTXCreator.Properties.Resources.削除; + this.toolStripMenuItem選択チップの削除.Name = "toolStripMenuItem選択チップの削除"; + this.toolStripMenuItem選択チップの削除.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem選択チップの削除.Text = "選択チップの削除(&D)"; + this.toolStripMenuItem選択チップの削除.Click += new System.EventHandler( this.toolStripMenuItem選択チップの削除_Click ); + // + // toolStripSeparator15 + // + this.toolStripSeparator15.Name = "toolStripSeparator15"; + this.toolStripSeparator15.Size = new System.Drawing.Size( 211, 6 ); + // + // toolStripMenuItemすべてのチップの選択 + // + this.toolStripMenuItemすべてのチップの選択.Name = "toolStripMenuItemすべてのチップの選択"; + this.toolStripMenuItemすべてのチップの選択.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItemすべてのチップの選択.Text = "すべてのチップの選択(&A)"; + this.toolStripMenuItemすべてのチップの選択.Click += new System.EventHandler( this.toolStripMenuItemすべてのチップの選択_Click ); + // + // toolStripSeparator16 + // + this.toolStripSeparator16.Name = "toolStripSeparator16"; + this.toolStripSeparator16.Size = new System.Drawing.Size( 211, 6 ); + // + // toolStripMenuItem小節長変更 + // + this.toolStripMenuItem小節長変更.Name = "toolStripMenuItem小節長変更"; + this.toolStripMenuItem小節長変更.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem小節長変更.Text = "小節長の変更(&B)"; + this.toolStripMenuItem小節長変更.Click += new System.EventHandler( this.toolStripMenuItem小節長変更_Click ); + // + // toolStripSeparator17 + // + this.toolStripSeparator17.Name = "toolStripSeparator17"; + this.toolStripSeparator17.Size = new System.Drawing.Size( 211, 6 ); + // + // toolStripMenuItem小節の挿入 + // + this.toolStripMenuItem小節の挿入.Name = "toolStripMenuItem小節の挿入"; + this.toolStripMenuItem小節の挿入.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem小節の挿入.Text = "小節の挿入(&I)"; + this.toolStripMenuItem小節の挿入.Click += new System.EventHandler( this.toolStripMenuItem小節の挿入_Click ); + // + // toolStripMenuItem小節の削除 + // + this.toolStripMenuItem小節の削除.Name = "toolStripMenuItem小節の削除"; + this.toolStripMenuItem小節の削除.Size = new System.Drawing.Size( 214, 22 ); + this.toolStripMenuItem小節の削除.Text = "小節の削除(&E)"; + this.toolStripMenuItem小節の削除.Click += new System.EventHandler( this.toolStripMenuItem小節の削除_Click ); + // + // Cメインフォーム + // + this.AllowDrop = true; + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 731, 515 ); + this.Controls.Add( this.splitContainerタブと譜面を分割 ); + this.Controls.Add( this.vScrollBar譜面用垂直スクロールバー ); + this.Controls.Add( this.toolStripツールバー ); + this.Controls.Add( this.statusStripステータスバー ); + this.Controls.Add( this.menuStripメニューバー ); + this.Icon = ( (System.Drawing.Icon) ( resources.GetObject( "$this.Icon" ) ) ); + this.MainMenuStrip = this.menuStripメニューバー; + this.MinimumSize = new System.Drawing.Size( 16, 38 ); + this.Name = "Cメインフォーム"; + this.Text = "DTXCreator"; + this.Load += new System.EventHandler( this.Cメインフォーム_Load ); + this.DragDrop += new System.Windows.Forms.DragEventHandler( this.Cメインフォーム_DragDrop ); + this.DragEnter += new System.Windows.Forms.DragEventHandler( this.Cメインフォーム_DragEnter ); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler( this.Cメインフォーム_FormClosing ); + this.menuStripメニューバー.ResumeLayout( false ); + this.menuStripメニューバー.PerformLayout(); + this.toolStripツールバー.ResumeLayout( false ); + this.toolStripツールバー.PerformLayout(); + this.splitContainerタブと譜面を分割.Panel1.ResumeLayout( false ); + this.splitContainerタブと譜面を分割.Panel2.ResumeLayout( false ); + this.splitContainerタブと譜面を分割.ResumeLayout( false ); + this.tabControl情報パネル.ResumeLayout( false ); + this.tabPage基本情報.ResumeLayout( false ); + this.tabPage基本情報.PerformLayout(); + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDownBPM ) ).EndInit(); + this.tabPageWAV.ResumeLayout( false ); + this.tabPageWAV.PerformLayout(); + this.toolStripWAVツールバー.ResumeLayout( false ); + this.toolStripWAVツールバー.PerformLayout(); + this.tabPageBMP.ResumeLayout( false ); + this.tabPageBMP.PerformLayout(); + this.toolStripBMPツールバー.ResumeLayout( false ); + this.toolStripBMPツールバー.PerformLayout(); + this.tabPageAVI.ResumeLayout( false ); + this.tabPageAVI.PerformLayout(); + this.toolStripAVIツールバー.ResumeLayout( false ); + this.toolStripAVIツールバー.PerformLayout(); + this.tabPage自由入力.ResumeLayout( false ); + this.tabPage自由入力.PerformLayout(); + ( (System.ComponentModel.ISupportInitialize) ( this.pictureBox譜面パネル ) ).EndInit(); + this.contextMenuStrip譜面右メニュー.ResumeLayout( false ); + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip statusStripステータスバー; + private System.Windows.Forms.MenuStrip menuStripメニューバー; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemファイル; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem編集; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem表示; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem再生; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemツール; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemヘルプ; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem新規; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem開く; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem上書き保存; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem名前を付けて保存; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem終了; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemアンドゥ; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemリドゥ; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem切り取り; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemコピー; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem貼り付け; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem削除; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemすべて選択; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem選択モード; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem編集モード; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemモード切替; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem検索; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem置換; + internal System.Windows.Forms.ToolStripMenuItem toolStripMenuItemチップパレット; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔4分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔8分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔12分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔16分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔24分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔32分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔48分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔64分; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔フリー; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔拡大; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemガイド間隔縮小; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem先頭から再生; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem現在位置から再生; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem現在位置からBGMのみ再生; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem再生停止; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemオプション; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemDTXCreaterマニュアル; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemバージョン; + private System.Windows.Forms.ToolStrip toolStripツールバー; + private System.Windows.Forms.ToolStripButton toolStripButton新規作成; + private System.Windows.Forms.ToolStripButton toolStripButton開く; + private System.Windows.Forms.ToolStripButton toolStripButton上書き保存; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripButton toolStripButton切り取り; + private System.Windows.Forms.ToolStripButton toolStripButtonコピー; + private System.Windows.Forms.ToolStripButton toolStripButton貼り付け; + private System.Windows.Forms.ToolStripButton toolStripButton削除; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripButton toolStripButtonアンドゥ; + private System.Windows.Forms.ToolStripButton toolStripButtonリドゥ; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + internal System.Windows.Forms.ToolStripButton toolStripButtonチップパレット; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; + private System.Windows.Forms.ToolStripComboBox toolStripComboBox譜面拡大率; + private System.Windows.Forms.ToolStripComboBox toolStripComboBoxガイド間隔; + private System.Windows.Forms.ToolStripButton toolStripButton選択モード; + private System.Windows.Forms.ToolStripButton toolStripButton編集モード; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; + private System.Windows.Forms.ToolStripButton toolStripButton先頭から再生; + private System.Windows.Forms.ToolStripButton toolStripButton現在位置から再生; + private System.Windows.Forms.ToolStripButton toolStripButton現在位置からBGMのみ再生; + private System.Windows.Forms.ToolStripButton toolStripButton再生停止; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; + internal System.Windows.Forms.ToolStripComboBox toolStripComboBox演奏速度; + internal System.Windows.Forms.VScrollBar vScrollBar譜面用垂直スクロールバー; + internal System.Windows.Forms.SplitContainer splitContainerタブと譜面を分割; + private System.Windows.Forms.TabControl tabControl情報パネル; + private System.Windows.Forms.TabPage tabPage基本情報; + private System.Windows.Forms.TabPage tabPageWAV; + internal System.Windows.Forms.HScrollBar hScrollBar譜面用水平スクロールバー; + internal System.Windows.Forms.PictureBox pictureBox譜面パネル; + private System.Windows.Forms.TabPage tabPageBMP; + private System.Windows.Forms.TabPage tabPageAVI; + private System.Windows.Forms.TabPage tabPage自由入力; + internal System.Windows.Forms.TextBox textBox曲名; + private System.Windows.Forms.ToolTip toolTipツールチップ; + internal System.Windows.Forms.TextBox textBox製作者; + internal System.Windows.Forms.TextBox textBoxコメント; + internal System.Windows.Forms.NumericUpDown numericUpDownBPM; + private System.Windows.Forms.Label label曲名; + private System.Windows.Forms.Label label製作者; + private System.Windows.Forms.Label labelコメント; + private System.Windows.Forms.Label labelBPM; + internal System.Windows.Forms.HScrollBar hScrollBarDLEVEL; + internal System.Windows.Forms.TextBox textBoxDLEVEL; + private System.Windows.Forms.Label labelDLEVEL; + internal System.Windows.Forms.HScrollBar hScrollBarGLEVEL; + internal System.Windows.Forms.TextBox textBoxGLEVEL; + private System.Windows.Forms.Label labelGLEVEL; + internal System.Windows.Forms.HScrollBar hScrollBarBLEVEL; + internal System.Windows.Forms.TextBox textBoxBLEVEL; + private System.Windows.Forms.Label labelBLEVEL; + private System.Windows.Forms.Label labelパネル; + internal System.Windows.Forms.TextBox textBoxパネル; + internal System.Windows.Forms.TextBox textBoxPREVIEW; + internal System.Windows.Forms.TextBox textBoxPREIMAGE; + internal System.Windows.Forms.TextBox textBoxSTAGEFILE; + internal System.Windows.Forms.TextBox textBoxBACKGROUND; + internal System.Windows.Forms.TextBox textBoxRESULTIMAGE; + private System.Windows.Forms.Label labelPREVIEW; + private System.Windows.Forms.Label labelPREIMAGE; + private System.Windows.Forms.Label labelSTAGEFILE; + private System.Windows.Forms.Label labelBACKGROUND; + private System.Windows.Forms.Label labeRESULTIMAGE; + private System.Windows.Forms.Button buttonPREVIEW参照; + private System.Windows.Forms.Button buttonPREIMAGE参照; + private System.Windows.Forms.Button buttonSTAGEFILE参照; + private System.Windows.Forms.Button buttonBACKGROUND参照; + private System.Windows.Forms.Button buttonRESULTIMAGE参照; + private System.Windows.Forms.ToolStrip toolStripWAVツールバー; + private System.Windows.Forms.ToolStripButton toolStripButtonWAVリスト上移動; + private System.Windows.Forms.ToolStripButton toolStripButtonWAVリスト下移動; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; + private System.Windows.Forms.ToolStripButton toolStripButtonWAVリストプレビュー再生開始; + private System.Windows.Forms.ToolStripButton toolStripButtonWAVリストプレビュー再生停止; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator14; + private System.Windows.Forms.ToolStripButton toolStripButtonWAVリストプレビュースイッチ; + internal System.Windows.Forms.ListView listViewWAVリスト; + private System.Windows.Forms.ColumnHeader columnHeaderWAV_ラベル; + private System.Windows.Forms.ColumnHeader columnHeaderWAV_番号; + private System.Windows.Forms.ColumnHeader columnHeaderWAV_ファイル名; + private System.Windows.Forms.ColumnHeader columnHeaderWAV_音量; + private System.Windows.Forms.ColumnHeader columnHeaderWAV_位置; + private System.Windows.Forms.ColumnHeader columnHeaderWAV_BGM; + private System.Windows.Forms.ToolStrip toolStripBMPツールバー; + private System.Windows.Forms.ToolStripButton toolStripButtonBMPリスト上移動; + private System.Windows.Forms.ToolStripButton toolStripButtonBMPリスト下移動; + internal System.Windows.Forms.ListView listViewBMPリスト; + private System.Windows.Forms.ColumnHeader columnHeaderBMP_TEX; + private System.Windows.Forms.ColumnHeader columnHeaderBMP_ラベル; + private System.Windows.Forms.ColumnHeader columnHeaderBMP_BMP番号; + private System.Windows.Forms.ColumnHeader columnHeaderBMP_ファイル名; + private System.Windows.Forms.ToolStrip toolStripAVIツールバー; + private System.Windows.Forms.ToolStripButton toolStripButtonAVIリスト上移動; + private System.Windows.Forms.ToolStripButton toolStripButtonAVIリスト下移動; + internal System.Windows.Forms.ListView listViewAVIリスト; + private System.Windows.Forms.ColumnHeader columnHeaderAVI_ラベル; + private System.Windows.Forms.ColumnHeader columnHeaderAVI_AVI番号; + private System.Windows.Forms.ColumnHeader columnHeaderAVI_ファイル名; + internal System.Windows.Forms.TextBox textBox自由入力欄; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip譜面右メニュー; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem選択チップの切り取り; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem選択チップのコピー; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem選択チップの貼り付け; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem選択チップの削除; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator15; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemすべてのチップの選択; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator16; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem小節長変更; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator17; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem小節の挿入; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem小節の削除; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs new file mode 100644 index 00000000..615f665b --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs @@ -0,0 +1,4590 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Drawing; +using System.ComponentModel; +using System.IO; +using System.Text; +using System.Diagnostics; +using System.Xml.Serialization; +using DTXCreator.チップパレット関連; +using DTXCreator.譜面; +using DTXCreator.WAV_BMP_AVI; +using DTXCreator.UndoRedo; +using DTXCreator.オプション関連; +using DTXCreator.汎用; +using DTXCreator.Properties; +using FDK; + +namespace DTXCreator +{ + public partial class Cメインフォーム : Form + { + // コンストラクタ + + #region [ コンストラクタ ] + //----------------- + public Cメインフォーム() + { + this.InitializeComponent(); + } + //----------------- + #endregion + + + // プロパティ + + #region [ プロパティ ] + //----------------- + + public AppSetting appアプリ設定; + public Cチップパレット dlgチップパレット; + private Cオプション管理 mgrオプション管理者 = null; + private C選択モード管理 mgr選択モード管理者 = null; + private C編集モード管理 mgr編集モード管理者 = null; + internal C譜面管理 mgr譜面管理者 = null; + internal CWAVリスト管理 mgrWAVリスト管理者 = null; + internal CBMPリスト管理 mgrBMPリスト管理者 = null; + internal CAVIリスト管理 mgrAVIリスト管理者 = null; + internal CUndoRedo管理 mgrUndoRedo管理者 = null; + internal Cクリップボード cbクリップボード = null; + + public bool b選択モードである + { + get + { + if( this.toolStripButton選択モード.CheckState != CheckState.Checked ) + { + return false; + } + return true; + } + } + public bool b編集モードである + { + get + { + if( this.toolStripButton編集モード.CheckState != CheckState.Checked ) + { + return false; + } + return true; + } + } + public decimal dc現在のBPM + { + get + { + return this.numericUpDownBPM.Value; + } + } + internal int n現在選択中のWAV・BMP・AVIリストの行番号0to1294; + + /// + /// DTXC.exe のあるフォルダの絶対パス。 + /// + public string strDTXCのあるフォルダ名; + + /// + /// 各種ファイル(WAVなど)の相対パスの基点となるフォルダの絶対パス。 + /// + public string str作業フォルダ名; + + /// + /// 現在作成中のDTXファイル名。パスは含まない。(例:"test.dtx") + /// + public string strDTXファイル名; + + /// + /// 未保存の場合にtrueとなり、ウィンドウタイトルに[*]が加えられる。 + /// + internal bool b未保存 + { + get + { + return this._b未保存; + } + set + { + // 現状と値が違うときだけ更新する。 + + if( this._b未保存 != value ) + { + // タイトル文字列を取得。 + + string strタイトル = Resources.strデフォルトウィンドウタイトル; + + if( this.strDTXファイル名.Length > 0 ) + strタイトル = this.strDTXファイル名; + + + // タイトル文字列を修正。 + + if( this._b未保存 ) + { + // 変更ありかつ未保存なら「*」を付ける + + this.Text = "DTXC* [" + strタイトル + "]"; + this.toolStripMenuItem上書き保存.Enabled = true; + this.toolStripButton上書き保存.Enabled = true; + } + else + { + // 保存後変更がないなら「*」なない + + this.Text = "DTXC [" + strタイトル + "]"; + this.toolStripMenuItem上書き保存.Enabled = false; + this.toolStripButton上書き保存.Enabled = false; + } + + this._b未保存 = value; + } + } + } + + //----------------- + #endregion + + + // シナリオ + + #region [ アプリの起動・初期化、終了 ] + //----------------- + private void tアプリ起動時に一度だけ行う初期化処理() + { + // 初期化 + + #region [ アプリ設定オブジェクトを生成する。] + //----------------- + this.appアプリ設定 = new AppSetting(); + //----------------- + #endregion + + #region [ DTXCreator.exe の存在するフォルダを取得する。 ] + //----------------- + this.strDTXCのあるフォルダ名 = Directory.GetCurrentDirectory() + @"\"; + //----------------- + #endregion + #region [ 作業フォルダを取得する。] + //----------------- + this.str作業フォルダ名 = this.strDTXCのあるフォルダ名; + //----------------- + #endregion + + #region [ デザイナで設定できないイベントを実装する。] + //----------------- + this.splitContainerタブと譜面を分割.MouseWheel += new MouseEventHandler( this.splitContainerタブと譜面を分割_MouseWheel ); + //----------------- + #endregion + + #region [ 全体を通して必要な管理者オブジェクトを生成する。] + //----------------- + this.mgrオプション管理者 = new Cオプション管理( this ); + //----------------- + #endregion + + #region [ クリップボードオブジェクトを生成する。 ] + //----------------- + this.cbクリップボード = new Cクリップボード( this ); + //----------------- + #endregion + + #region [ 譜面を初期化する。] + //----------------- + this.t譜面を初期化する(); + //----------------- + #endregion + + #region [ アプリ設定ファイル (DTXCreatorSetting.config) を読み込む。] + //----------------- + this.tアプリ設定の読み込み(); // 譜面の生成後に行うこと。(GUIイベント発生時にmgr各種が使われるため。) + //----------------- + #endregion + + #region [ チップパレットウィンドウの初期位置を変更する。(読み込んだアプリ設定に合わせる。)] + //----------------- + this.dlgチップパレット.Left = this.Left + ( ( this.Width - this.dlgチップパレット.Width ) / 2 ); + this.dlgチップパレット.Top = this.Top + ( ( this.Height - this.dlgチップパレット.Height ) / 2 ); + //----------------- + #endregion + + #region [ [ファイル]メニューに、最近使ったファイルを追加する。] + //----------------- + this.t最近使ったファイルをFileメニューへ追加する(); + //----------------- + #endregion + + + // ファイル指定があればそれを開く。 + + #region [ コマンドライン引数にファイルの指定があるならそれを開く。 ] + //----------------- + string[] commandLineArgs = Environment.GetCommandLineArgs(); + if( ( commandLineArgs.Length > 1 ) && File.Exists( commandLineArgs[ 1 ] ) ) + this.t演奏ファイルを開いて読み込む( commandLineArgs[ 1 ] ); + //----------------- + #endregion + } + private void tアプリ終了時に行う終了処理() + { + #region [ アプリ設定ファイル (DTXCreatorSetting.config) を保存する。] + //----------------- + this.tアプリ設定の保存(); + //----------------- + #endregion + + #region [ 各管理者で必要な終了処理を行う。] + //----------------- + this.mgrWAVリスト管理者.tDirectSoundの解放(); + //----------------- + #endregion + } + private void tアプリ設定の読み込み() + { + string str設定ファイル名 = + this.strDTXCのあるフォルダ名 + @"DTXCreatorSetting.config"; + + + // 読み込む。 + + #region [ アプリ設定ファイルを読み込む。 → 失敗したら内容リセットして継続する。] + //----------------- + if( File.Exists( str設定ファイル名 ) ) + { + try + { + // アプリ設定ファイル(XML形式)を this.appアプリ設定 に読み込む。 + + var serializer = new XmlSerializer( typeof( AppSetting ) ); + var stream = new FileStream( str設定ファイル名, FileMode.Open ); + this.appアプリ設定 = (AppSetting) serializer.Deserialize( stream ); + stream.Close(); + } + catch( Exception ) + { + // 失敗時:内容をリセットして継続する。 + + this.appアプリ設定 = new AppSetting(); + } + + + // 反復要素とか足りなかったりしてもリセットする。 + + if( this.appアプリ設定.SoundListColumnWidth.Length != 5 + || this.appアプリ設定.GraphicListColumnWidth.Length != 4 + || this.appアプリ設定.MovieListColumnWidth.Length != 3 + || !this.appアプリ設定.bSameVersion() ) + { + this.appアプリ設定 = new AppSetting(); + } + + + // 内容の妥当性を確認する。 + + this.appアプリ設定.Confirm(); + } + //----------------- + #endregion + + + // 読み込んだアプリ設定を DTXCreator に反映する。 + + #region [ ウィンドウの位置とサイズ ] + //----------------- + this.SetDesktopBounds( this.appアプリ設定.X, this.appアプリ設定.Y, this.appアプリ設定.Width, this.appアプリ設定.Height ); + //----------------- + #endregion + #region [ 最大化 ] + //----------------- + if( this.appアプリ設定.Maximized ) + this.WindowState = FormWindowState.Maximized; + //----------------- + #endregion + #region [ タブ(左側)と譜面(右側)の表示幅の割合 ] + //----------------- + this.splitContainerタブと譜面を分割.SplitterDistance = + this.appアプリ設定.SplitterDistance; + //----------------- + #endregion + #region [ WAV・BMP・AVIリストの各列の幅 ] + //----------------- + for( int i = 0; i < 5; i++ ) + this.listViewWAVリスト.Columns[ i ].Width = this.appアプリ設定.SoundListColumnWidth[ i ]; + + for( int i = 0; i < 4; i++ ) + this.listViewBMPリスト.Columns[ i ].Width = this.appアプリ設定.GraphicListColumnWidth[ i ]; + + for( int i = 0; i < 3; i++ ) + this.listViewAVIリスト.Columns[ i ].Width = this.appアプリ設定.MovieListColumnWidth[ i ]; + //----------------- + #endregion + #region [ 譜面拡大率 ] + //----------------- + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.toolStripComboBox譜面拡大率.SelectedIndex = + this.appアプリ設定.HViewScaleIndex; + //----------------- + #endregion + #region [ ガイド間隔 ] + //----------------- + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.toolStripComboBoxガイド間隔.SelectedIndex = + this.appアプリ設定.GuideIndex; + //----------------- + #endregion + #region [ 演奏速度 ] + //----------------- + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.toolStripComboBox演奏速度.SelectedIndex = 5; + //----------------- + #endregion + #region [ 作業フォルダ ] + //----------------- + this.str作業フォルダ名 = + this.appアプリ設定.LastWorkFolder; + + if( Directory.Exists( this.str作業フォルダ名 ) ) + { + Directory.SetCurrentDirectory( this.str作業フォルダ名 ); + } + else + { + // 作業フォルダが既になくなってる場合はカレントフォルダを適用。 + + this.str作業フォルダ名 = Directory.GetCurrentDirectory(); + } + //----------------- + #endregion + } + private void tアプリ設定の保存() + { + string str設定ファイル名 = + this.strDTXCのあるフォルダ名 + @"DTXCreatorSetting.config"; + + + // DTXCreator から保存すべきアプリ設定を取得する。 + + #region [ ウィンドウの位置とサイズ ] + //----------------- + this.appアプリ設定.X = this.Location.X; + this.appアプリ設定.Y = this.Location.Y; + this.appアプリ設定.Width = this.Width; + this.appアプリ設定.Height = this.Height; + //----------------- + #endregion + #region [ 最大化 ] + //----------------- + this.appアプリ設定.Maximized = + ( this.WindowState == FormWindowState.Maximized ) ? true : false; + //----------------- + #endregion + #region [ タブ(左側)と譜面(右側)の表示幅の割合 ] + //----------------- + this.appアプリ設定.SplitterDistance = + this.splitContainerタブと譜面を分割.SplitterDistance; + //----------------- + #endregion + #region [ WAV・BMP・AVIリストの各列の幅 ] + //----------------- + for( int i = 0; i < 5; i++ ) + this.appアプリ設定.SoundListColumnWidth[ i ] = this.listViewWAVリスト.Columns[ i ].Width; + + for( int i = 0; i < 4; i++ ) + this.appアプリ設定.GraphicListColumnWidth[ i ] = this.listViewBMPリスト.Columns[ i ].Width; + + for( int i = 0; i < 3; i++ ) + this.appアプリ設定.MovieListColumnWidth[ i ] = this.listViewAVIリスト.Columns[ i ].Width; + //----------------- + #endregion + #region [ 譜面拡大率 ] + //----------------- + this.appアプリ設定.HViewScaleIndex = + this.toolStripComboBox譜面拡大率.SelectedIndex; + //----------------- + #endregion + #region [ ガイド間隔 ] + //----------------- + this.appアプリ設定.GuideIndex = + this.toolStripComboBoxガイド間隔.SelectedIndex; + //----------------- + #endregion + #region [ 作業フォルダ ] + //----------------- + this.appアプリ設定.LastWorkFolder = + this.str作業フォルダ名; + //----------------- + #endregion + + + // 保存する。 + + #region [ アプリ設定をXML形式ファイルで出力する。 ] + //----------------- + var serializer = new XmlSerializer( typeof( AppSetting ) ); + var stream = new FileStream( str設定ファイル名, FileMode.Create ); + serializer.Serialize( (Stream) stream, this.appアプリ設定 ); + stream.Close(); + //----------------- + #endregion + } + //----------------- + #endregion + #region [ 新規作成 ] + //----------------- + private void tシナリオ・新規作成() + { + // 作成前の保存確認。 + + #region [ 未保存なら保存する。→ キャンセルされた場合はここで中断。] + //----------------- + if( this.t未保存なら保存する() == DialogResult.Cancel ) + return; // 中断 + //----------------- + #endregion + + + // 新規作成。 + + #region [「初期化中です」ポップアップを表示する。] + //----------------- + this.dlgチップパレット.t一時的に隠蔽する(); + + Cメッセージポップアップ msg + = new Cメッセージポップアップ( Resources.str初期化中ですMSG + Environment.NewLine + Resources.strしばらくお待ち下さいMSG ); + msg.Owner = this; + msg.Show(); + msg.Refresh(); + //----------------- + #endregion + + this.t譜面を初期化する(); + + #region [「初期化中です」ポップアップを閉じる。] + //----------------- + msg.Close(); + this.dlgチップパレット.t一時的な隠蔽を解除する(); + + this.Refresh(); // リスト内容等を消すために再描画 + //----------------- + #endregion + } + private void t譜面を初期化する() + { + this.strDTXファイル名 = ""; + + // 画面項目の初期化。 + + #region [ 基本情報タブの初期化 ] + //----------------- + CUndoRedo管理.bUndoRedoした直後 = true; this.textBox曲名.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBox製作者.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxコメント.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.numericUpDownBPM.Value = 120.0M; + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxDLEVEL.Text = "50"; + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxGLEVEL.Text = "0"; + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxBLEVEL.Text = "0"; + CUndoRedo管理.bUndoRedoした直後 = true; this.hScrollBarDLEVEL.Value = 50; + CUndoRedo管理.bUndoRedoした直後 = true; this.hScrollBarGLEVEL.Value = 0; + CUndoRedo管理.bUndoRedoした直後 = true; this.hScrollBarBLEVEL.Value = 0; + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxパネル.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxPREVIEW.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxPREIMAGE.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxSTAGEFILE.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxBACKGROUND.Clear(); + CUndoRedo管理.bUndoRedoした直後 = true; this.textBoxRESULTIMAGE.Clear(); + //----------------- + #endregion + + #region [ WAVタブ・BMPタブ・AVIタブの初期化 ] + //----------------- + this.listViewWAVリスト.Items.Clear(); + this.mgrWAVリスト管理者 = new CWAVリスト管理( this, this.listViewWAVリスト ); + + this.listViewBMPリスト.Items.Clear(); + this.mgrBMPリスト管理者 = new CBMPリスト管理( this, this.listViewBMPリスト ); + + this.listViewAVIリスト.Items.Clear(); + this.mgrAVIリスト管理者 = new CAVIリスト管理( this, this.listViewAVIリスト ); + + this.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( 0 ); + //----------------- + #endregion + + #region [ 自由入力タブの初期化 ] + //----------------- + CUndoRedo管理.bUndoRedoした直後 = true; this.textBox自由入力欄.Clear(); + //----------------- + #endregion + + #region [ チップパレットの初期化 ] + //----------------- + if( this.dlgチップパレット != null ) + this.dlgチップパレット.Close(); + + this.dlgチップパレット = new Cチップパレット( this ); + this.dlgチップパレット.Left = this.Left + ( this.Width - this.dlgチップパレット.Width ) / 2; + this.dlgチップパレット.Top = this.Top + ( this.Height - this.dlgチップパレット.Height ) / 2; + this.dlgチップパレット.Owner = this; + + if( this.toolStripButtonチップパレット.CheckState == CheckState.Checked ) + this.dlgチップパレット.t表示する(); + //----------------- + #endregion + + #region [ 譜面の生成・初期化 ] + //----------------- + this.mgr譜面管理者 = new C譜面管理( this ); + this.mgr譜面管理者.t初期化(); + //----------------- + #endregion + + #region [ DTXViewer 関連 GUI の初期化 ] + //----------------- + this.tDTXV演奏関連のボタンとメニューのEnabledの設定(); + //----------------- + #endregion + + #region [ ガイド間隔の初期値を設定する。] + //----------------- + this.tガイド間隔を変更する( 16 ); + //----------------- + #endregion + + + // 内部処理の初期化。 + + #region [ Undo/Redoリストのリセット ] + //----------------- + this.mgrUndoRedo管理者 = new CUndoRedo管理(); + + CUndoRedo管理.bUndoRedoした直後 = false; + this.tUndoRedo用GUIの有効・無効を設定する(); + //----------------- + #endregion + + #region [ 「2大モード」の管理者を生成、初期は編集モードにする。] + //----------------- + this.mgr選択モード管理者 = new C選択モード管理( this ); + this.mgr編集モード管理者 = new C編集モード管理( this ); + + this.t編集モードにする(); + //----------------- + #endregion + + + // 上記のプロパティ変更操作により未保存フラグがtrueになってしまってるので、元に戻す。 + + #region [ 未保存フラグをクリアする。] + //----------------- + this.b未保存 = false; + //----------------- + #endregion + } + //----------------- + #endregion + #region [ 開く ] + //----------------- + private void tシナリオ・開く() + { + // 作成前の保存確認。 + + #region [ 未保存なら保存する。→ キャンセルされた場合はここで中断。] + //----------------- + if( this.t未保存なら保存する() == DialogResult.Cancel ) + return; // 中断 + //----------------- + #endregion + + + // 開くファイルを選択させる。 + + #region [ 「ファイルを開く」ダイアログでファイルを選択する。 ] + //----------------- + this.dlgチップパレット.t一時的に隠蔽する(); + + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Title = Resources.strDTXファイル選択ダイアログのタイトル; + dialog.Filter = Resources.strDTXファイル選択ダイアログのフィルタ; + dialog.FilterIndex = 1; + dialog.InitialDirectory = this.str作業フォルダ名; + DialogResult result = dialog.ShowDialog(); + + this.dlgチップパレット.t一時的な隠蔽を解除する(); + this.Refresh(); // メインフォームを再描画してダイアログを完全に消す + + if( result != DialogResult.OK ) + return; + //----------------- + #endregion + + + // 選択されたファイルを読み込む。 + + #region [ ファイルを読み込む。] + //----------------- + this.t演奏ファイルを開いて読み込む( dialog.FileName ); + //----------------- + #endregion + } + private void tシナリオ・DragDropされたファイルを開く( string[] DropFiles ) + { + // 開くファイルを決定する。 + + #region [ Dropされたファイルが複数個ある → 先頭のファイルだけを有効とする。 ] + //----------------- + string strファイル名 = DropFiles[ 0 ]; + //----------------- + #endregion + + + // 開く前の保存確認。 + + #region [ 未保存なら保存する。→ キャンセルされた場合はここで中断。] + //----------------- + if( this.t未保存なら保存する() == DialogResult.Cancel ) + return; // 中断 + //----------------- + #endregion + + + // Drop されたファイルを読み込む。 + + #region [ ファイルを読み込む。] + //----------------- + this.t演奏ファイルを開いて読み込む( strファイル名 ); + //----------------- + #endregion + } + private void t演奏ファイルを開いて読み込む( string strファイル名 ) + { + // 前処理。 + + #region [ ファイルの存在を確認する。なかったらその旨を表示して中断する。] + //----------------- + if( !File.Exists( strファイル名 ) ) + { + MessageBox.Show( + Resources.strファイルが存在しませんMSG, + Resources.str確認ダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1 ); + + return; // 中断 + } + //----------------- + #endregion + + #region [ 拡張子からデータ種別を判定する。] + //----------------- + + CDTX入出力.E種別 e種別 = CDTX入出力.E種別.DTX; + + string str拡張子 = Path.GetExtension( strファイル名 ); + + if( str拡張子.Equals( ".dtx", StringComparison.OrdinalIgnoreCase ) ) + { + e種別 = CDTX入出力.E種別.DTX; + } + else if( str拡張子.Equals( ".gda", StringComparison.OrdinalIgnoreCase ) ) + { + e種別 = CDTX入出力.E種別.GDA; + } + else if( str拡張子.Equals( ".g2d", StringComparison.OrdinalIgnoreCase ) ) + { + e種別 = CDTX入出力.E種別.G2D; + } + else if( str拡張子.Equals( ".bms", StringComparison.OrdinalIgnoreCase ) ) + { + e種別 = CDTX入出力.E種別.BMS; + } + else if( str拡張子.Equals( ".bme", StringComparison.OrdinalIgnoreCase ) ) + { + e種別 = CDTX入出力.E種別.BME; + } + else + { + MessageBox.Show( + Resources.strDTXファイルではありませんMSG, + Resources.str確認ダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + + return; // 中断 + } + //----------------- + #endregion + + this.dlgチップパレット.t一時的に隠蔽する(); + + #region [「読み込み中です」ポップアップを表示する。] + //----------------- + Cメッセージポップアップ msg + = new Cメッセージポップアップ( Resources.str読み込み中ですMSG + Environment.NewLine + Resources.strしばらくお待ち下さいMSG ); + msg.Owner = this; + msg.Show(); + msg.Refresh(); + //----------------- + #endregion + + + // 読み込む。 + + + this.t譜面を初期化する(); + + #region [ DTXファイルを読み込む。] + //----------------- + + // 全部を1つの string として読み込む。 + + StreamReader reader = new StreamReader( strファイル名, Encoding.GetEncoding( 932/*Shift-JIS*/ ) ); + string str全入力文字列 = reader.ReadToEnd(); + reader.Close(); + + + // その string から DTX データを読み込む。 + + new CDTX入出力( this ).tDTX入力( e種別, ref str全入力文字列 ); + + + // ファイル名、作業フォルダ名を更新する。 + + this.strDTXファイル名 = Path.ChangeExtension( Path.GetFileName( strファイル名 ), ".dtx" ); // 拡張子は強制的に .dtx に変更。 + this.str作業フォルダ名 = Path.GetDirectoryName( strファイル名 ) + @"\"; // 読み込み後、カレントフォルダは、作業ファイルのあるフォルダに移動する。 + + //----------------- + #endregion + + #region [ 読み込んだファイルを [ファイル]メニューの最近使ったファイル一覧に追加する。] + //----------------- + this.appアプリ設定.AddRecentUsedFile( this.str作業フォルダ名 + this.strDTXファイル名 ); + this.t最近使ったファイルをFileメニューへ追加する(); + //----------------- + #endregion + + #region [ DTX以外を読み込んだ場合は、(DTXに変換されているので)最初から未保存フラグを立てる。] + //----------------- + if( e種別 != CDTX入出力.E種別.DTX ) + this.b未保存 = true; + //----------------- + #endregion + + + #region [「読み込み中です」ポップアップを閉じる。 ] + //----------------- + msg.Close(); + this.Refresh(); // リスト内容等を消すために再描画する。 + //----------------- + #endregion + + #region [ 未保存フラグをクリアする。] + //----------------- + this.b未保存 = true; // ウィンドウタイトルを書き換えるため、一度未保存フラグをtrueにして b未保存の setter を作動させる。 + this.b未保存 = false; + //----------------- + #endregion + } + //----------------- + #endregion + #region [ 上書き保存/名前をつけて保存 ] + //----------------- + private void tシナリオ・上書き保存() + { + // 前処理。 + + this.dlgチップパレット.t一時的に隠蔽する(); + + #region [「保存中です」ポップアップを表示する。 ] + //----------------- + var msg = new Cメッセージポップアップ( Resources.str保存中ですMSG + Environment.NewLine + Resources.strしばらくお待ち下さいMSG ); + msg.Owner = this; + msg.Show(); + msg.Refresh(); + //----------------- + #endregion + + #region [ ファイル名がない → 初めての保存と見なし、ファイル保存ダイアログで保存ファイル名を指定させる。 ] + //----------------- + if( string.IsNullOrEmpty( this.strDTXファイル名 ) ) + { + // ダイアログでファイル名を取得する。 + + string str絶対パスファイル名 = this.tファイル保存ダイアログを開いてファイル名を取得する(); + + if( string.IsNullOrEmpty( str絶対パスファイル名 ) ) + return; // ファイル保存ダイアログがキャンセルされたのならここで打ち切り。 + + this.str作業フォルダ名 = Directory.GetCurrentDirectory() + @"\"; // ダイアログでディレクトリを変更した場合、カレントディレクトリも変更されている。 + this.strDTXファイル名 = Path.GetFileName( str絶対パスファイル名 ); + + + // WAV・BMP・AVIリストにあるすべてのファイル名を、作業フォルダに対する相対パスに変換する。 + + this.mgrWAVリスト管理者.tファイル名の相対パス化( this.str作業フォルダ名 ); + this.mgrBMPリスト管理者.tファイル名の相対パス化( this.str作業フォルダ名 ); + this.mgrAVIリスト管理者.tファイル名の相対パス化( this.str作業フォルダ名 ); + } + //----------------- + #endregion + + + // DTXファイルへ出力。 + + + #region [ 選択モードだったなら選択を解除する。] + //----------------- + if( this.b選択モードである ) + this.mgr選択モード管理者.t全チップの選択を解除する(); + //----------------- + #endregion + + #region [ DTXファイルを出力する。] + //----------------- + var sw = new StreamWriter( this.str作業フォルダ名 + this.strDTXファイル名, false, Encoding.GetEncoding( 932/*Shift-JIS*/ ) ); + new CDTX入出力( this ).tDTX出力( sw ); + sw.Close(); + //----------------- + #endregion + + #region [ 出力したファイルのパスを、[ファイル]メニューの最近使ったファイル一覧に追加する。 ] + //----------------- + this.appアプリ設定.AddRecentUsedFile( this.str作業フォルダ名 + this.strDTXファイル名 ); + this.t最近使ったファイルをFileメニューへ追加する(); + //----------------- + #endregion + + + // 後処理。 + + #region [「保存中です」ポップアップを閉じる。] + //----------------- + msg.Close(); + this.Refresh(); // リスト内容等を消すために再描画する。 + //----------------- + #endregion + + this.dlgチップパレット.t一時的な隠蔽を解除する(); + this.b未保存 = false; + } + private void tシナリオ・名前をつけて保存() + { + // 前処理。 + + #region [ ユーザに保存ファイル名を入力させる。] + //----------------- + + // ファイル保存ダイアログを表示し、出力するファイル名を指定させる。キャンセルされたらここで中断。 + + string str絶対パスファイル名 = this.tファイル保存ダイアログを開いてファイル名を取得する(); + if( string.IsNullOrEmpty( str絶対パスファイル名 ) ) + return; // 中断 + + + // フォルダ名とファイル名を更新。 + + this.str作業フォルダ名 = Directory.GetCurrentDirectory() + @"\"; // ダイアログでディレクトリを変更した場合は、カレントディレクトリも変更されている。 + this.strDTXファイル名 = Path.GetFileName( str絶対パスファイル名 ); + //----------------- + #endregion + + #region [ WAV・BMP・AVIリストにあるすべてのファイル名を、作業フォルダに対する相対パスに変換する。 ] + //----------------- + this.mgrWAVリスト管理者.tファイル名の相対パス化( this.str作業フォルダ名 ); + this.mgrBMPリスト管理者.tファイル名の相対パス化( this.str作業フォルダ名 ); + this.mgrAVIリスト管理者.tファイル名の相対パス化( this.str作業フォルダ名 ); + //----------------- + #endregion + + + // 保存する。 + + this.tシナリオ・上書き保存(); + + + // 後処理。 + + this.b未保存 = true; // ウィンドウタイトルに表示されているファイル名を変更するため一度 true にする。 + this.b未保存 = false; + } + private string tファイル保存ダイアログを開いてファイル名を取得する() + { + // ダイアログでファイル名を取得。 + + this.dlgチップパレット.t一時的に隠蔽する(); + + var dialog = new SaveFileDialog() { + Title = "名前をつけて保存", + Filter = "DTXファイル(*.dtx)|*.dtx", + FilterIndex = 1, + InitialDirectory = this.str作業フォルダ名 + }; + DialogResult result = dialog.ShowDialog(); + + this.dlgチップパレット.t一時的な隠蔽を解除する(); + + + // 画面を再描画。 + + this.Refresh(); + + + // キャンセルされたら "" を返す。 + + if( result != DialogResult.OK ) + return ""; + + + // ファイルの拡張子を .dtx に変更。 + + string fileName = dialog.FileName; + if( Path.GetExtension( fileName ).Length == 0 ) + fileName = Path.ChangeExtension( fileName, ".dtx" ); + + return fileName; + } + //----------------- + #endregion + #region [ 終了 ] + //----------------- + private void tシナリオ・終了() + { + // ウィンドウを閉じる。 + + this.Close(); + } + //----------------- + #endregion + #region [ 検索/置換 ] + //----------------- + private void tシナリオ・検索() + { + this.mgr選択モード管理者.t検索する(); // モードによらず、検索はすべて選択モード管理者が行う。 + } + private void tシナリオ・置換() + { + this.mgr選択モード管理者.t置換する(); // モードによらず、置換はすべて選択モード管理者が行う。 + } + //----------------- + #endregion + #region [ 小節長変更/小節の挿入/小節の削除 ] + //----------------- + private void tシナリオ・小節長を変更する( C小節 cs ) + { + // 前処理。 + + #region [ 小節長をユーザに入力させる。] + //----------------- + + // 小節長ダイアログを表示し、小節長を取得する。 + + this.dlgチップパレット.t一時的に隠蔽する(); + + var dlg = new C小節長変更ダイアログ( cs.n小節番号0to3599 ); + dlg.f倍率 = cs.f小節長倍率; + dlg.b後続変更 = false; + + this.dlgチップパレット.t一時的な隠蔽を解除する(); + + + // キャンセルされたらここで中断。 + if( dlg.ShowDialog() != DialogResult.OK ) + return; + + //----------------- + #endregion + + + // 小節長を変更。 + + #region [ 小節長を変更する。] + //----------------- + int n変更開始小節番号 = cs.n小節番号0to3599; + int n変更終了小節番号 = ( dlg.b後続変更 ) ? this.mgr譜面管理者.n現在の最大の小節番号を返す() : cs.n小節番号0to3599; + + for( int i = n変更開始小節番号; i <= n変更終了小節番号; i++ ) + this.t小節長を変更する・小節単位( i, dlg.f倍率 ); + + //----------------- + #endregion + + + // 後処理。 + + this.b未保存 = true; + } + private void t小節長を変更する・小節単位( int n小節番号, float f倍率 ) + { + // 対象の小節を取得。 + + #region [ 小節番号から小節オブジェクトを取得する。→ 指定された小節が存在しない場合はここで中断。] + //----------------- + + C小節 c小節 = this.mgr譜面管理者.p小節を返す( n小節番号 ); + + if( c小節 == null ) + return; // 中断 + + //----------------- + #endregion + + + // 作業記録開始。 + + this.mgrUndoRedo管理者.tトランザクション記録を開始する(); + + #region [ UndoRedo リストにこの操作(小節長変更)を記録する。 ] + //----------------- + var ur変更前 = new C小節用UndoRedo( c小節.n小節番号0to3599, c小節.f小節長倍率 ); + var ur変更後 = new C小節用UndoRedo( c小節.n小節番号0to3599, f倍率 ); + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + null, + new DGUndoを実行する( this.mgr譜面管理者.t小節長変更のUndo ), + new DGRedoを実行する( this.mgr譜面管理者.t小節長変更のRedo ), + ur変更前, ur変更後 ) ); + //----------------- + #endregion + + + // 小節長倍率を変更。 + + #region [ 小節長倍率を変更する。] + //----------------- + c小節.f小節長倍率 = f倍率; + //----------------- + #endregion + + #region [ 小節からはみ出したチップを削除する。チップの削除操作は Undo/Redo に記録する。] + //----------------- + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + + if( cチップ.n位置grid >= c小節.n小節長倍率を考慮した現在の小節の高さgrid ) + { + + #region [ UndoRedo リストにこの操作(チップ削除)を記録する。] + //----------------- + var cc = new Cチップ(); + cc.tコピーfrom( cチップ ); + + var ur = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc ); + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + null, + new DGUndoを実行する( this.mgr譜面管理者.tチップ削除のUndo ), + new DGRedoを実行する( this.mgr譜面管理者.tチップ削除のRedo ), + ur, ur ) ); + //----------------- + #endregion + + + // チップを小節のチップリストから削除する。 + + c小節.listチップ.RemoveAt( i ); + + + // リストが更新されたので、最初のチップから見直す。 + + i = -1; + } + } + //----------------- + #endregion + + + // 作業記録終了。 + + this.mgrUndoRedo管理者.tトランザクション記録を終了する(); + + + // 画面を再描画。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + private void tシナリオ・小節を挿入する( int n挿入位置の小節番号 ) + { + // 作業を記録。 + + #region [ UndoRedo リストにこの操作(小節挿入)を記録する。] + //----------------- + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + null, + new DGUndoを実行する( this.mgr譜面管理者.t小節挿入のUndo ), + new DGRedoを実行する( this.mgr譜面管理者.t小節挿入のRedo ), + n挿入位置の小節番号, n挿入位置の小節番号 ) ); + //----------------- + #endregion + + + // 小節を挿入。 + + #region [ 挿入位置以降の小節を1つずつ後ろにずらす(小節番号を +1 していく)。 ] + //----------------- + for( int i = this.mgr譜面管理者.n現在の最大の小節番号を返す(); i >= n挿入位置の小節番号; i-- ) + { + // ずらす小節オブジェクトを取得する。 + + C小節 cずらす小節 = this.mgr譜面管理者.p小節を返す( i ); + if( cずらす小節 == null ) + continue; + + + // 小節番号を+1する。 + + this.mgr譜面管理者.dic小節.Remove( i ); // 小節番号は Dictionary のキー値であるため、番号が変われば再登録が必要。 + cずらす小節.n小節番号0to3599 = i + 1; + this.mgr譜面管理者.dic小節.Add( cずらす小節.n小節番号0to3599, cずらす小節 ); + } + //----------------- + #endregion + + #region [ 新しい小節を作成し、譜面の持つ小節リストに追加する。 ] + //----------------- + + // 小節を該当位置に追加する。 + + this.mgr譜面管理者.dic小節.Add( n挿入位置の小節番号, new C小節( n挿入位置の小節番号 ) ); + + + // 譜面を再描画する。 + + this.pictureBox譜面パネル.Refresh(); + + //----------------- + #endregion + + + // 後処理。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + this.b未保存 = true; + } + private void tシナリオ・小節を削除する( int n削除位置の小節番号 ) + { + // 作業記録開始。 + + this.mgrUndoRedo管理者.tトランザクション記録を開始する(); + + + // 小節を削除。 + + #region [ 最大小節番号を取得する。] + //----------------- + int n最大小節番号 = this.mgr譜面管理者.n現在の最大の小節番号を返す(); // 小節を削除すると数が変わるので、削除前に取得する。 + //----------------- + #endregion + #region [ 削除する小節オブジェクトを取得する。] + //----------------- + C小節 c削除する小節 = this.mgr譜面管理者.p小節を返す( n削除位置の小節番号 ); + //----------------- + #endregion + + #region [ その小節が持っているチップを全て削除する。チップの削除作業は、Undo/Redoリストに記録する。] + //----------------- + + while( c削除する小節.listチップ.Count > 0 ) + { + #region [ UndoRedo リストにこの操作(チップ削除)を記録する。] + //----------------- + var cc = new Cチップ(); + cc.tコピーfrom( c削除する小節.listチップ[ 0 ] ); + var redo = new Cチップ配置用UndoRedo( c削除する小節.n小節番号0to3599, cc ); + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + null, + new DGUndoを実行する( this.mgr譜面管理者.tチップ削除のUndo ), + new DGRedoを実行する( this.mgr譜面管理者.tチップ削除のRedo ), + redo, redo ) ); + //----------------- + #endregion + + // 小節からチップを削除する。 + + c削除する小節.listチップ.RemoveAt( 0 ); + } + + //----------------- + #endregion + + #region [ UndoRedo リストにこの操作(小節削除)を記録する。] + //----------------- + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + null, + new DGUndoを実行する( this.mgr譜面管理者.t小節削除のUndo ), + new DGRedoを実行する( this.mgr譜面管理者.t小節削除のRedo ), + n削除位置の小節番号, n削除位置の小節番号 ) ); + //----------------- + #endregion + #region [ 該当小節を譜面の小節リストから削除する。] + //----------------- + this.mgr譜面管理者.dic小節.Remove( n削除位置の小節番号 ); + //----------------- + #endregion + #region [ 削除した小節より後方にある小節を1つずつ前にずらす。(小節番号を -1 していく)] + //----------------- + + for( int i = n削除位置の小節番号 + 1; i <= n最大小節番号; i++ ) + { + // 小節オブジェクトを取得する。 + + C小節 cずらす小節 = this.mgr譜面管理者.p小節を返す( i ); + if( cずらす小節 == null ) + continue; + + // 小節番号を-1する。 + + this.mgr譜面管理者.dic小節.Remove( i ); // 小節番号は Dictionary のキー値であるため、番号が変われば再登録が必要。 + cずらす小節.n小節番号0to3599--; + this.mgr譜面管理者.dic小節.Add( cずらす小節.n小節番号0to3599, cずらす小節 ); + } + + // 譜面内の小節が全部無くなったらさすがにまずいので、最低1個の小節は残す。 + + if( this.mgr譜面管理者.dic小節.Count == 0 ) + this.mgr譜面管理者.dic小節.Add( 0, new C小節( 0 ) ); + + //----------------- + #endregion + + + // 作業記録終了。 + + this.mgrUndoRedo管理者.tトランザクション記録を終了する(); + + + // 後処理。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + this.pictureBox譜面パネル.Refresh(); + this.b未保存 = true; + } + //----------------- + #endregion + #region [ 選択チップの切り取り/コピー/貼り付け/削除 ] + //----------------- + private void tシナリオ・切り取り() + { + // 事前チェック。 + + #region [ 譜面にフォーカスが来てないなら何もしない。 ] + //----------------- + if( !this.pictureBox譜面パネル.Focused ) + return; + //----------------- + #endregion + + + // 切り取り。 + + #region [ 切り取り = コピー + 削除 ] + //----------------- + this.tシナリオ・コピー(); + this.tシナリオ・削除(); + //----------------- + #endregion + } + private void tシナリオ・コピー() + { + // 事前チェック。 + + #region [ 譜面にフォーカスが来てないなら何もしない。 ] + //----------------- + if( !this.pictureBox譜面パネル.Focused ) + return; + //----------------- + #endregion + + + // コピー。 + + this.cbクリップボード.t現在選択されているチップをボードにコピーする(); + + + // 画面を再描画。 + + #region [ 画面を再描画する。] + //----------------- + this.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + this.pictureBox譜面パネル.Refresh(); + //----------------- + #endregion + } + private void tシナリオ・貼り付け( int n譜面先頭からの位置grid ) + { + // 事前チェック。 + + #region [ 譜面にフォーカスが来てないなら何もしない。 ] + //----------------- + if( !this.pictureBox譜面パネル.Focused ) + return; + //----------------- + #endregion + + + // 貼り付け。 + + #region [ 貼り付け先の小節と貼り付け開始位置を取得する。] + //----------------- + C小節 c小節 = this.mgr譜面管理者.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + if( c小節 == null ) + return; // 中断 + + int n小節先頭からの位置grid = + n譜面先頭からの位置grid - this.mgr譜面管理者.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + //----------------- + #endregion + + #region [ クリップボードからチップを貼り付ける。] + //----------------- + this.cbクリップボード.tチップを指定位置から貼り付ける( c小節, n小節先頭からの位置grid ); + //----------------- + #endregion + + + // 画面の再描画。 + + #region [ 画面を再描画する。] + //----------------- + this.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + this.pictureBox譜面パネル.Refresh(); + //----------------- + #endregion + } + private void tシナリオ・削除() + { + // 事前チェック。 + + #region [ 譜面にフォーカスが来てないなら何もしない。 ] + //----------------- + if( !this.pictureBox譜面パネル.Focused ) + return; + //----------------- + #endregion + + + // 操作記録開始。 + + this.mgrUndoRedo管理者.tトランザクション記録を開始する(); + + + // チップを削除。 + + #region [ 譜面が持つすべての小節について、選択されているチップがあれば削除する。] + //----------------- + foreach( KeyValuePair pair in this.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + + bool b削除されたチップがある = false; + bool b削除完了 = false; + + while( !b削除完了 ) + { + #region [ 小節の持つチップのうち、選択されているチップがあれば削除してループする。なくなったら抜ける。] + //----------------- + + b削除完了 = true; + + // 小節が持つすべてのチップについて…… + foreach( Cチップ cチップ in c小節.listチップ ) + { + if( cチップ.b確定選択中 ) + { + #region [ UndoRedo リストにこの操作(チップ削除)を記録する。] + //----------------- + var cc = new Cチップ(); + cc.tコピーfrom( cチップ ); + var redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc ); + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + null, + new DGUndoを実行する( this.mgr譜面管理者.tチップ削除のUndo ), + new DGRedoを実行する( this.mgr譜面管理者.tチップ削除のRedo ), + redo, redo ) ); + //----------------- + #endregion + + + // チップオブジェクトを削除する。 + + c小節.listチップ.Remove( cチップ ); + + + // フラグを設定してループする。 + + b削除完了 = false; // まだ終わらんよ + b削除されたチップがある = true; + break; + } + } + //----------------- + #endregion + } + + #region [ 1つでもチップを削除したなら、未保存フラグを立てる。 ] + //----------------- + if( b削除されたチップがある ) + this.b未保存 = true; + //----------------- + #endregion + } + //----------------- + #endregion + + + // 操作記録終了。 + + this.mgrUndoRedo管理者.tトランザクション記録を終了する(); + + + // 画面を再描画する。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + this.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + this.pictureBox譜面パネル.Refresh(); + } + //----------------- + #endregion + #region [ DTXViewer での再生・停止 ] + //----------------- + private void tシナリオ・Viewerで最初から再生する() + { + this.tViewer用の一時ファイルを出力する( false ); + + #region [ 再生開始オプション引数に一時ファイルを指定して DTXViewer プロセスを起動する。] + //----------------- + try + { + string strDTXViewerのパス = this.strDTXCのあるフォルダ名 + this.appアプリ設定.ViewerInfo.Path; + + #region [ DTXViewer が起動していなければ起動する。] + //----------------- + Process.Start( strDTXViewerのパス ).WaitForInputIdle( 20 * 1000 ); // 起動完了まで最大20秒待つ + //----------------- + #endregion + + #region [ 実行中の DTXViewer に再生オプションを渡す。 ] + //----------------- + Process.Start( strDTXViewerのパス, + this.appアプリ設定.ViewerInfo.PlayStartOption + " " + this.strViewer演奏用一時ファイル名 ); + //----------------- + #endregion + } + catch( Exception ) + { + #region [ 失敗ダイアログを表示する。] + //----------------- + MessageBox.Show( + Resources.strプロセスの起動に失敗しましたMSG, + Resources.strエラーダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + //----------------- + #endregion + } + //----------------- + #endregion + } + private void tシナリオ・Viewerで現在位置から再生する() + { + this.tViewer用の一時ファイルを出力する( false ); + + try + { + string strDTXViewerのパス = this.strDTXCのあるフォルダ名 + this.appアプリ設定.ViewerInfo.Path; + + #region [ DTXViewer が起動していなければ起動する。] + //----------------- + + Process.Start( strDTXViewerのパス ).WaitForInputIdle( 20 * 1000 ); // 起動完了まで最大20秒待つ + + //----------------- + #endregion + + #region [ 実行中の DTXViewer に再生オプションを渡す。 ] + //----------------- + + C小節 c小節 = + this.mgr譜面管理者.p譜面先頭からの位置gridを含む小節を返す( this.mgr譜面管理者.n現在の譜面表示下辺の譜面先頭からの位置grid ); + + Process.Start( strDTXViewerのパス, + this.appアプリ設定.ViewerInfo.PlayStartFromOption + c小節.n小節番号0to3599 + " " + this.strViewer演奏用一時ファイル名 ); + + //----------------- + #endregion + } + catch( Exception ) + { + #region [ 失敗ダイアログを表示する。] + //----------------- + MessageBox.Show( + Resources.strプロセスの起動に失敗しましたMSG, + Resources.strエラーダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + //----------------- + #endregion + } + } + private void tシナリオ・Viewerで現在位置からBGMのみ再生する() + { + #region [ DTXViewer 用の一時ファイルを出力する。] + //----------------- + this.tViewer用の一時ファイルを出力する( true ); + //----------------- + #endregion + + try + { + string strDTXViewerのパス = this.strDTXCのあるフォルダ名 + this.appアプリ設定.ViewerInfo.Path; + + #region [ DTXViewer が起動していなければ起動する。] + //----------------- + Process.Start( strDTXViewerのパス ).WaitForInputIdle( 20 * 1000 ); // 起動完了まで最大20秒待つ + //----------------- + #endregion + + #region [ 実行中の DTXViewer に再生オプションを渡す。 ] + //----------------- + C小節 c小節 = this.mgr譜面管理者.p譜面先頭からの位置gridを含む小節を返す( this.mgr譜面管理者.n現在の譜面表示下辺の譜面先頭からの位置grid ); + Process.Start( strDTXViewerのパス, + this.appアプリ設定.ViewerInfo.PlayStartFromOption + c小節.n小節番号0to3599 + " " + this.strViewer演奏用一時ファイル名 ); + //----------------- + #endregion + } + catch( Exception ) + { + #region [ 失敗ダイアログを表示する。] + //----------------- + MessageBox.Show( + Resources.strプロセスの起動に失敗しましたMSG, + Resources.strエラーダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + //----------------- + #endregion + } + } + private void tシナリオ・Viewerを再生停止する() + { + try + { + string strViewerのパス = this.strDTXCのあるフォルダ名 + this.appアプリ設定.ViewerInfo.Path; + + #region [ 実行中の DTXViewer に再生停止オプションを渡す。 ] + //----------------- + + // 停止のときは1回のプロセス起動で完結(BMSV仕様) + + Process.Start( strViewerのパス, this.appアプリ設定.ViewerInfo.PlayStopOption ); + + //----------------- + #endregion + + } + catch( Exception ) + { + #region [ 失敗ダイアログを表示する。] + //----------------- + MessageBox.Show( + Resources.strプロセスの起動に失敗しましたMSG, + Resources.strエラーダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + //----------------- + #endregion + } + } + + private string strViewer演奏用一時ファイル名 = ""; + private void tViewer用の一時ファイルを出力する( bool bBGMのみ出力 ) + { + // 一時ファイル名を自動生成。 + + this.strViewer演奏用一時ファイル名 = Path.GetTempFileName(); + + + // 一時ファイルにDTXを出力。 + + this.mgr譜面管理者.strPATH_WAV = this.str作業フォルダ名; + + try + { + #region [ 一時ファイルにDTXを出力する。 ] + //----------------- + StreamWriter sw = new StreamWriter( this.strViewer演奏用一時ファイル名, false, Encoding.GetEncoding( 0x3a4 ) ); + new CDTX入出力( this ).tDTX出力( sw, bBGMのみ出力 ); + sw.Close(); + //----------------- + #endregion + } + finally + { + this.mgr譜面管理者.strPATH_WAV = ""; + } + } + //----------------- + #endregion + #region [ Undo / Redo ] + //----------------- + private void tシナリオ・Undoする() + { + // Undo を実行する。 + + #region [ Undo する対象を Undo/Redo リストから取得する。] + //----------------- + + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す(); + + if( oセル仮想 == null ) + return; // なければ中断 + + //----------------- + #endregion + + oセル仮想.tUndoを実行する(); + + + // GUIを再描画する。 + + #region [ GUI を再描画する。] + //----------------- + this.tUndoRedo用GUIの有効・無効を設定する(); + this.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + this.pictureBox譜面パネル.Refresh(); + //----------------- + #endregion + } + private void tシナリオ・Redoする() + { + // Redo を実行する。 + + #region [ Redo する対象を Undo/Redo リストから取得する。] + //----------------- + + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tRedoするノードを取得して返す(); + + if( oセル仮想 == null ) + return; // なければ中断 + + //----------------- + #endregion + + oセル仮想.tRedoを実行する(); + + + // GUI を再描画する。 + + #region [ GUI を再描画する。] + //----------------- + this.tUndoRedo用GUIの有効・無効を設定する(); + this.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + this.pictureBox譜面パネル.Refresh(); + //----------------- + #endregion + } + //----------------- + #endregion + + + // メソッド + + public enum Eタブ種別 : int + { + 基本情報 = 0, + WAV = 1, + BMP = 2, + AVI = 3, + 自由入力 = 4 + } + + public void t選択モードにする() + { + this.toolStripButton選択モード.CheckState = CheckState.Checked; + this.toolStripButton編集モード.CheckState = CheckState.Unchecked; + this.toolStripMenuItem選択モード.CheckState = CheckState.Checked; + this.toolStripMenuItem編集モード.CheckState = CheckState.Unchecked; + } + public void t編集モードにする() + { + this.mgr選択モード管理者.t全チップの選択を解除する(); + this.pictureBox譜面パネル.Refresh(); + this.toolStripButton選択モード.CheckState = CheckState.Unchecked; + this.toolStripButton編集モード.CheckState = CheckState.Checked; + this.toolStripMenuItem選択モード.CheckState = CheckState.Unchecked; + this.toolStripMenuItem編集モード.CheckState = CheckState.Checked; + } + public void t選択チップの有無に応じて編集用GUIの有効・無効を設定する() + { + bool b譜面上に選択チップがある = this.b選択チップがある; + bool bクリップボードに選択チップがある = ( this.cbクリップボード != null ) && ( this.cbクリップボード.nセル数 > 0 ); + + + // 編集メニュー + + this.toolStripMenuItemコピー.Enabled = b譜面上に選択チップがある; + this.toolStripMenuItem切り取り.Enabled = b譜面上に選択チップがある; + this.toolStripMenuItem貼り付け.Enabled = bクリップボードに選択チップがある; + this.toolStripMenuItem削除.Enabled = b譜面上に選択チップがある; + + + // ツールバー + + this.toolStripButtonコピー.Enabled = b譜面上に選択チップがある; + this.toolStripButton切り取り.Enabled = b譜面上に選択チップがある; + this.toolStripButton貼り付け.Enabled = bクリップボードに選択チップがある; + this.toolStripButton削除.Enabled = b譜面上に選択チップがある; + + + // 右メニュー + + this.toolStripMenuItem選択チップのコピー.Enabled = b譜面上に選択チップがある; + this.toolStripMenuItem選択チップの切り取り.Enabled = b譜面上に選択チップがある; + this.toolStripMenuItem選択チップの貼り付け.Enabled = bクリップボードに選択チップがある; + this.toolStripMenuItem選択チップの削除.Enabled = b譜面上に選択チップがある; + } + public void t選択モードのコンテクストメニューを表示する( int x, int y ) + { + // メニューを表示。 + + this.contextMenuStrip譜面右メニュー.Show( this.pictureBox譜面パネル, x, y ); + + + // メニューの左上隅座標を控えておく。 + + this.pt選択モードのコンテクストメニューを開いたときのマウスの位置 = new Point( x, y ); + } + public void t最近使ったファイルをFileメニューへ追加する() + { + #region [ [ファイル] メニューから、最近使ったファイルの一覧をクリアする。] + //----------------- + for( int i = 0; i < this.toolStripMenuItemファイル.DropDownItems.Count; i++ ) + { + ToolStripItem item = this.toolStripMenuItemファイル.DropDownItems[ i ]; + + // ↓削除したくないサブメニューの一覧。これ以外のサブメニュー項目はすべて削除する。 + if( item != this.toolStripMenuItem新規 && + item != this.toolStripMenuItem開く && + item != this.toolStripMenuItem上書き保存 && + item != this.toolStripMenuItem名前を付けて保存 && + item != this.toolStripSeparator1 && + item != this.toolStripMenuItem終了 ) + { + this.toolStripMenuItemファイル.DropDownItems.Remove( item ); + i = -1; // 要素数が変わったので列挙しなおし + } + } + //----------------- + #endregion + + #region [ 表示しないオプション設定であるか、履歴が0件ならここで終了する。] + //----------------- + if( !this.appアプリ設定.ShowRecentFiles || this.appアプリ設定.RecentUsedFile.Count == 0 ) + return; + //----------------- + #endregion + + #region [ アプリ設定が持つ履歴にそって、[ファイル] メニューにサブメニュー項目リストを追加する(ただし最大表示数まで)。 ] + //----------------- + + // [ファイル] のサブメニューリストに項目が1つでもある場合は、履歴サブメニュー項目の追加の前に「終了」の下にセパレータを入れる。手動で。 + + bool bセパレータの追加がまだ = true; + + + // すべての「最近使ったファイル」について... + + for( int i = 0; i < this.appアプリ設定.RecentUsedFile.Count; i++ ) + { + #region [ 最大表示数を越えたらここで終了。 ] + //----------------- + if( i >= this.appアプリ設定.RecentFilesNum ) + return; + //----------------- + #endregion + + #region [ ファイル名を、サブメニュー項目として [ファイル] メニューに追加する。 ] + //----------------- + string path = this.appアプリ設定.RecentUsedFile[ i ]; + + if( path.Length == 0 ) + continue; + + #region [ セパレータの追加がまだなら追加する。] + //----------------- + if( bセパレータの追加がまだ ) + { + var separator = new ToolStripSeparator(); + separator.Size = this.toolStripSeparator1.Size; + this.toolStripMenuItemファイル.DropDownItems.Add( separator ); + bセパレータの追加がまだ = false; + } + //----------------- + #endregion + + #region [ ToolStripMenuItem を手動で作って [ファイル] のサブメニューリストに追加する。] + //----------------- + var item2 = new ToolStripMenuItem() { + Name = "最近使ったファイル" + i, + Size = this.toolStripMenuItem終了.Size, + Text = "&" + i + " " + path, + }; + item2.Click += new EventHandler( this.toolStripMenuItem最近使ったファイル_Click ); + this.toolStripMenuItemファイル.DropDownItems.Add( item2 ); + //----------------- + #endregion + + #region [ 追加したファイルが既に存在していないなら項目を無効化(グレー表示)する。] + //----------------- + if( !File.Exists( path ) ) + item2.Enabled = false; + //----------------- + #endregion + + //----------------- + #endregion + } + //----------------- + #endregion + } + public void tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( int nIndex番号0to1294 ) + { + if( nIndex番号0to1294 >= 0 && nIndex番号0to1294 <= 1294 ) + { + this.mgrWAVリスト管理者.tItemを選択する( nIndex番号0to1294 ); + this.mgrBMPリスト管理者.tItemを選択する( nIndex番号0to1294 ); + this.mgrAVIリスト管理者.tItemを選択する( nIndex番号0to1294 ); + + this.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 = nIndex番号0to1294; + } + } + public string strファイルの存在するディレクトリを絶対パスで返す( string strファイル ) + { + string strファイルの絶対パス = strファイル; + + try + { + // ファイルが絶対パスかどうかを判定する。(new Uri() は絶対パスを指定されると例外が発生するので、それを利用する。) + + new Uri( strファイル ); + } + catch + { + // 例外が発生したので相対パスとみなし、絶対パスに直す。 + + strファイルの絶対パス = this.str作業フォルダ名 + strファイル; + } + + return strファイルの絶対パス; + } + public Point pt現在のマウス位置を譜面の可視領域相対の座標dotで返す() + { + Point p = new Point( Cursor.Position.X, Cursor.Position.Y ); + return this.splitContainerタブと譜面を分割.Panel2.PointToClient( p ); + } + public Size sz譜面の可視領域の大きさdotを返す() + { + return new Size( this.splitContainerタブと譜面を分割.Panel2.Width, this.pictureBox譜面パネル.Height ); + } + public void tUndoRedo用GUIの有効・無効を設定する() + { + this.toolStripMenuItemアンドゥ.Enabled = this.mgrUndoRedo管理者.nUndo可能な回数 > 0; + this.toolStripMenuItemリドゥ.Enabled = this.mgrUndoRedo管理者.nRedo可能な回数 > 0; + this.toolStripButtonアンドゥ.Enabled = this.mgrUndoRedo管理者.nUndo可能な回数 > 0; + this.toolStripButtonリドゥ.Enabled = this.mgrUndoRedo管理者.nRedo可能な回数 > 0; + } + public void tタブを選択する( Eタブ種別 eタブ種別 ) + { + this.tabControl情報パネル.SelectedIndex = (int) eタブ種別; + } + + + // その他 + + #region [ private ] + //----------------- + private bool _b未保存 = true; + private Point pt選択モードのコンテクストメニューを開いたときのマウスの位置; + private int n現在のガイド間隔4to64or0 = 16; // 初期は16分間隔 + private bool b選択チップがある + { + get + { + foreach( KeyValuePair pair in this.mgr譜面管理者.dic小節 ) + { + foreach( Cチップ cチップ in pair.Value.listチップ ) + { + if( cチップ.b確定選択中 ) + return true; + } + } + return false; + } + } + + private void tDTXV演奏関連のボタンとメニューのEnabledの設定() + { + if( File.Exists( this.strDTXCのあるフォルダ名 + this.appアプリ設定.ViewerInfo.Path ) ) + { + // DTXViewer が存在するなら Enable + + this.toolStripButton先頭から再生.Enabled = true; + this.toolStripButton現在位置から再生.Enabled = true; + this.toolStripButton現在位置からBGMのみ再生.Enabled = true; + this.toolStripButton再生停止.Enabled = true; + this.toolStripMenuItem先頭から再生.Enabled = true; + this.toolStripMenuItem現在位置から再生.Enabled = true; + this.toolStripMenuItem現在位置からBGMのみ再生.Enabled = true; + this.toolStripMenuItem再生停止.Enabled = true; + } + else + { + // DTXViewer が存在しないなら Disable + + this.toolStripButton先頭から再生.Enabled = false; + this.toolStripButton現在位置から再生.Enabled = false; + this.toolStripButton現在位置からBGMのみ再生.Enabled = false; + this.toolStripButton再生停止.Enabled = false; + this.toolStripMenuItem先頭から再生.Enabled = false; + this.toolStripMenuItem現在位置から再生.Enabled = false; + this.toolStripMenuItem現在位置からBGMのみ再生.Enabled = false; + this.toolStripMenuItem再生停止.Enabled = false; + } + } + private string tファイル選択ダイアログでファイルを選択し相対パスにして返す( string strタイトル, string strフィルタ, string str初期フォルダ ) + { + string str相対ファイル名 = ""; + + this.dlgチップパレット.t一時的に隠蔽する(); + + var dialog = new OpenFileDialog() { + Title = strタイトル, + Filter = strフィルタ, + FilterIndex = 1, + InitialDirectory = str初期フォルダ, + }; + if( dialog.ShowDialog() == DialogResult.OK ) + { + str相対ファイル名 = Cファイル選択・パス変換.str基点からの相対パスに変換して返す( dialog.FileName, this.str作業フォルダ名 ); + str相対ファイル名.Replace( '/', '\\' ); + } + else + str相対ファイル名 = ""; + + this.dlgチップパレット.t一時的な隠蔽を解除する(); + + return str相対ファイル名; + } + private DialogResult t未保存なら保存する() + { + var result = DialogResult.OK; + + if( this.b未保存 ) + { + // ダイアログで保存可否を確認。 + + this.dlgチップパレット.t一時的に隠蔽する(); + result = MessageBox.Show( Resources.str編集中のデータを保存しますかMSG, Resources.str確認ダイアログのタイトル, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1 ); + this.dlgチップパレット.t一時的な隠蔽を解除する(); + + + // YES なら上書き保存。 + + if( result == DialogResult.Yes ) + this.tシナリオ・上書き保存(); + + + // 画面を再描画。 + + this.Refresh(); + } + return result; + } + private void t次のプロパティ変更処理がUndoRedoリストに載らないようにする() + { + CUndoRedo管理.bUndoRedoした直後 = true; + } + private void t次のプロパティ変更処理がUndoRedoリストに載るようにする() + { + CUndoRedo管理.bUndoRedoした直後 = false; + } + + /// + /// n分 … 4分間隔なら 4、8分間隔なら 8 など、フリー間隔なら 0 を指定する。 + /// + private void tガイド間隔を変更する( int n分 ) + { + // 新しいガイド間隔を設定。 + + #region [ 新しいガイド間隔を設定。 ] + //----------------- + + this.n現在のガイド間隔4to64or0 = n分; + + this.mgr譜面管理者.n現在のガイド幅grid = + ( n分 == 0 ) ? 1 : ( C小節.n基準の高さgrid / n分 ); + + //----------------- + #endregion + + + // ガイド間隔メニュー GUI を更新。 + + #region [ 一度すべてのガイド間隔メニューのチェックをはずし、制定された分数のメニューのみチェックする。 ] + //----------------- + this.toolStripMenuItemガイド間隔4分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔8分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔12分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔16分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔24分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔32分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔48分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔64分.CheckState = CheckState.Unchecked; + this.toolStripMenuItemガイド間隔フリー.CheckState = CheckState.Unchecked; + + switch( n分 ) + { + case 8: + this.toolStripMenuItemガイド間隔8分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 1; + break; + + case 12: + this.toolStripMenuItemガイド間隔12分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 2; + break; + + case 0: + this.toolStripMenuItemガイド間隔フリー.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 8; + break; + + case 4: + this.toolStripMenuItemガイド間隔4分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 0; + break; + + case 0x10: + this.toolStripMenuItemガイド間隔16分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 3; + break; + + case 0x18: + this.toolStripMenuItemガイド間隔24分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 4; + break; + + case 0x20: + this.toolStripMenuItemガイド間隔32分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 5; + break; + + case 0x30: + this.toolStripMenuItemガイド間隔48分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 6; + break; + + case 0x40: + this.toolStripMenuItemガイド間隔64分.CheckState = CheckState.Checked; + this.toolStripComboBoxガイド間隔.SelectedIndex = 7; + break; + } + //----------------- + #endregion + + + // 画面を再描画。 + + #region [ 画面を再描画する。] + //----------------- + this.pictureBox譜面パネル.Invalidate(); + //----------------- + #endregion + } + + + // GUI イベント + + #region [ GUIイベント:メインフォーム ] + //----------------- + private void Cメインフォーム_DragDrop( object sender, DragEventArgs e ) + { + string[] data = (string[]) e.Data.GetData( DataFormats.FileDrop ); + if( data.Length >= 1 ) + { + this.tシナリオ・DragDropされたファイルを開く( data ); + } + } + private void Cメインフォーム_DragEnter( object sender, DragEventArgs e ) + { + if( e.Data.GetDataPresent( DataFormats.FileDrop ) ) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + private void Cメインフォーム_FormClosing( object sender, FormClosingEventArgs e ) + { + if( this.t未保存なら保存する() == DialogResult.Cancel ) + { + e.Cancel = true; + } + else + { + this.tアプリ終了時に行う終了処理(); + } + } + private void Cメインフォーム_Load( object sender, EventArgs e ) + { + this.tアプリ起動時に一度だけ行う初期化処理(); + this.t譜面を初期化する(); + } + //----------------- + #endregion + #region [ GUIイベント:pictureBox譜面パネル、Panel2、スクロールバー関連 ] + //----------------- + private void pictureBox譜面パネル_MouseClick( object sender, MouseEventArgs e ) + { + // フォーカスを得る。 + + this.pictureBox譜面パネル.Focus(); + + + // 選択・編集のいずれかの管理者へ処理を引き継ぐ。 + + if( this.b選択モードである ) + { + this.mgr選択モード管理者.MouseClick( e ); + } + else + { + this.mgr編集モード管理者.MouseClick( e ); + } + } + private void pictureBox譜面パネル_MouseDown( object sender, MouseEventArgs e ) + { + if( this.b選択モードである ) + this.mgr選択モード管理者.MouseDown( e ); + } + private void pictureBox譜面パネル_MouseEnter( object sender, EventArgs e ) + { + #region [ オートフォーカスが有効の場合、譜面にマウスが入ったら譜面がフォーカスを得る。 ] + //----------------- + if( this.appアプリ設定.AutoFocus ) + this.pictureBox譜面パネル.Focus(); + //----------------- + #endregion + } + private void pictureBox譜面パネル_MouseLeave( object sender, EventArgs e ) + { + if( this.b編集モードである ) + this.mgr編集モード管理者.MouseLeave( e ); + } + private void pictureBox譜面パネル_MouseMove( object sender, MouseEventArgs e ) + { + // 選択・編集のいずれかの管理者へ処理を引き継ぐ。 + + if( this.b選択モードである ) + { + this.mgr選択モード管理者.MouseMove( e ); + } + else + { + this.mgr編集モード管理者.MouseMove( e ); + } + } + private void pictureBox譜面パネル_Paint( object sender, PaintEventArgs e ) + { + if( this.mgr譜面管理者 == null ) + return; // まだ初期化が終わってないうちに Paint が呼び出される場合がある。 + + #region [ 小節数が変わってたら、スクロールバーの値域を調整する。] + //----------------- + int n全譜面の高さgrid = this.mgr譜面管理者.n全小節の高さgridの合計を返す(); + + if( this.vScrollBar譜面用垂直スクロールバー.Maximum != n全譜面の高さgrid - 1 ) // 小節数が変わっている + { + // 譜面の高さ(grid)がどれだけ変わったか? + + int n増加分grid = ( n全譜面の高さgrid - 1 ) - this.vScrollBar譜面用垂直スクロールバー.Maximum; + + + // スクロールバーを調整。 + + #region [ スクロールバーの状態を新しい譜面の高さに合わせる。] + //----------------- + this.vScrollBar譜面用垂直スクロールバー.Maximum = n全譜面の高さgrid - 1; + + if( ( this.vScrollBar譜面用垂直スクロールバー.Value + n増加分grid ) < 0 ) + { + this.vScrollBar譜面用垂直スクロールバー.Value = 0; + } + else + { + this.vScrollBar譜面用垂直スクロールバー.Value += n増加分grid; + } + //----------------- + #endregion + + + // 譜面表示下辺の位置を更新。 + + #region [ 譜面表示下辺の位置を更新する。 ] + //----------------- + this.mgr譜面管理者.n現在の譜面表示下辺の譜面先頭からの位置grid = + ( ( this.vScrollBar譜面用垂直スクロールバー.Maximum - this.vScrollBar譜面用垂直スクロールバー.LargeChange ) + 1 ) - this.vScrollBar譜面用垂直スクロールバー.Value; + //----------------- + #endregion + } + //----------------- + #endregion + + #region [ 譜面を描画する。] + //----------------- + int nPicBoxの幅 = this.pictureBox譜面パネル.ClientSize.Width; + int nPanel2の幅 = this.splitContainerタブと譜面を分割.Panel2.Width; + + var rc可視領域 = new Rectangle() { + X = -this.pictureBox譜面パネル.Location.X, + Y = 0, + Width = ( nPanel2の幅 > nPicBoxの幅 ) ? nPicBoxの幅 : nPanel2の幅, + Height = this.pictureBox譜面パネル.ClientSize.Height, + }; + + this.mgr譜面管理者.t譜面を描画する( e.Graphics, this.pictureBox譜面パネル.ClientSize, rc可視領域 ); + //----------------- + #endregion + + #region [ 現在のモード管理者の Paint() を呼び出す。] + //----------------- + if( this.b選択モードである ) + { + if( this.mgr選択モード管理者 != null ) + this.mgr選択モード管理者.Paint( e ); + } + else + { + if( this.mgr編集モード管理者 != null ) + this.mgr編集モード管理者.Paint( e ); + } + //----------------- + #endregion + } + private void pictureBox譜面パネル_PreviewKeyDown( object sender, PreviewKeyDownEventArgs e ) + { + if( e.KeyCode == Keys.Prior ) + { + #region [ PageUp → 移動量に対応する grid だけ垂直つまみを移動させる。あとはこの移動で生じる ChangedValue イベントで処理。] + //----------------- + int n移動すべき数grid = -C小節.n基準の高さgrid; + int n新しい位置 = this.vScrollBar譜面用垂直スクロールバー.Value + n移動すべき数grid; + int n最小値 = this.vScrollBar譜面用垂直スクロールバー.Minimum; + int n最大値 = ( this.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this.vScrollBar譜面用垂直スクロールバー.LargeChange; + + if( n新しい位置 < n最小値 ) + { + n新しい位置 = n最小値; + } + else if( n新しい位置 > n最大値 ) + { + n新しい位置 = n最大値; + } + + this.vScrollBar譜面用垂直スクロールバー.Value = n新しい位置; + //----------------- + #endregion + } + else if( e.KeyCode == Keys.Next ) + { + #region [ PageDown → 移動量に対応する grid だけ垂直つまみを移動させる。あとはこの移動で生じる ChangedValue イベントで処理。] + //----------------- + int n移動すべき数grid = C小節.n基準の高さgrid; + int n新しい位置 = this.vScrollBar譜面用垂直スクロールバー.Value + n移動すべき数grid; + int n最小値 = this.vScrollBar譜面用垂直スクロールバー.Minimum; + int n最大値 = ( this.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this.vScrollBar譜面用垂直スクロールバー.LargeChange; + + if( n新しい位置 < n最小値 ) + { + n新しい位置 = n最小値; + } + else if( n新しい位置 > n最大値 ) + { + n新しい位置 = n最大値; + } + + this.vScrollBar譜面用垂直スクロールバー.Value = n新しい位置; + //----------------- + #endregion + } + } + + private void splitContainerタブと譜面を分割_MouseWheel( object sender, MouseEventArgs e ) + { + #region [ 移動量に対応する grid だけ垂直つまみを移動させる。あとはこの移動で生じる ChangedValue イベントで処理する。] + //----------------- + if( e.Delta == 0 ) + return; // 移動量なし + + + // e.Delta は、スクロールバーを下へ動かしたいときに負、上へ動かしたいときに正となる。 + + int n移動すべき行数 = ( -e.Delta * SystemInformation.MouseWheelScrollLines ) / 120; + + + // 1行=1拍(64/4=16グリッド)とする。 + + int n移動すべき数grid = n移動すべき行数 * 16; + + + // スクロールバーのつまみを移動。 + + int n新しい位置 = this.vScrollBar譜面用垂直スクロールバー.Value + n移動すべき数grid; + int n最小値 = this.vScrollBar譜面用垂直スクロールバー.Minimum; + int n最大値 = ( this.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this.vScrollBar譜面用垂直スクロールバー.LargeChange; + + if( n新しい位置 < n最小値 ) + { + n新しい位置 = n最小値; + } + else if( n新しい位置 > n最大値 ) + { + n新しい位置 = n最大値; + } + + this.vScrollBar譜面用垂直スクロールバー.Value = n新しい位置; + //----------------- + #endregion + } + private void splitContainerタブと譜面を分割_Panel2_SizeChanged( object sender, EventArgs e ) + { + if( this.mgr譜面管理者 != null ) // 初期化前に呼び出されることがある。 + { + this.mgr譜面管理者.t水平スクロールバーと譜面パネル左右位置の調整(); + this.mgr譜面管理者.t垂直スクロールバーと譜面可視領域の上下位置の調整(); + } + } + + private void hScrollBar譜面用水平スクロールバー_ValueChanged( object sender, EventArgs e ) + { + if( this.mgr譜面管理者 != null ) + this.mgr譜面管理者.t水平スクロールバーと譜面パネル左右位置の調整(); + } + private void vScrollBar譜面用垂直スクロールバー_ValueChanged( object sender, EventArgs e ) + { + if( mgr譜面管理者 != null ) + this.mgr譜面管理者.t垂直スクロールバーと譜面可視領域の上下位置の調整(); + } + //----------------- + #endregion + #region [ GUIイベント:譜面右メニュー関連 ] + //----------------- + private void toolStripMenuItem選択チップの切り取り_Click( object sender, EventArgs e ) + { + this.tシナリオ・切り取り(); + } + private void toolStripMenuItem選択チップのコピー_Click( object sender, EventArgs e ) + { + this.tシナリオ・コピー(); + } + private void toolStripMenuItem選択チップの貼り付け_Click( object sender, EventArgs e ) + { + // クリックされた座標を取得。 + + Point ptMenu = new Point( this.contextMenuStrip譜面右メニュー.Left, this.contextMenuStrip譜面右メニュー.Top ); + Point ptMenuClient = this.contextMenuStrip譜面右メニュー.SourceControl.PointToClient( ptMenu ); + + + // Y座標から位置gridを得て、そこへ貼り付ける。 + + this.tシナリオ・貼り付け( this.mgr譜面管理者.nY座標dotが位置するgridを返す・ガイド幅単位( ptMenuClient.Y ) ); + } + private void toolStripMenuItem選択チップの削除_Click( object sender, EventArgs e ) + { + this.tシナリオ・削除(); + } + + private void toolStripMenuItemすべてのチップの選択_Click( object sender, EventArgs e ) + { + // 編集モードなら強制的に選択モードにする。 + + if( this.b編集モードである ) + this.t選択モードにする(); + + + // 全チップを選択。 + + this.mgr選択モード管理者.t全チップを選択する(); + } + + private void toolStripMenuItem小節長変更_Click( object sender, EventArgs e ) + { + // メニューが開かれたときのマウスの座標を取得。 + // ※メニューは必ずマウス位置を左上にして表示されるとは限らないため、 + //  メニューの表示位置からは取得しないこと。 + + Point ptマウス位置 = this.pt選択モードのコンテクストメニューを開いたときのマウスの位置; + + + // 小節の小節長を変更。 + + #region [ クリックされた小節を取得する。] + //----------------- + if( this.mgr譜面管理者.nX座標dotが位置するレーン番号を返す( ptマウス位置.X ) < 0 ) + return; // クリックされた箇所にレーンがないなら無視。 + + int n譜面先頭からの位置grid = this.mgr譜面管理者.nY座標dotが位置するgridを返す・ガイド幅単位( ptマウス位置.Y ); + C小節 csクリックされた小節 = this.mgr譜面管理者.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + //----------------- + #endregion + + #region [ 取得した小節の小節長を変更する。] + //----------------- + if( csクリックされた小節 != null ) + this.tシナリオ・小節長を変更する( csクリックされた小節 ); + //----------------- + #endregion + } + private void toolStripMenuItem小節の挿入_Click( object sender, EventArgs e ) + { + // メニューが開かれたときのマウスの座標を取得。 + // ※メニューは必ずマウス位置を左上にして表示されるとは限らないため、 + //  メニューの表示位置からは取得しないこと。 + + Point ptマウスの位置 = this.pt選択モードのコンテクストメニューを開いたときのマウスの位置; + + + // マウス位置に小節を挿入。 + + #region [ クリックされた箇所の小節を取得する。] + //----------------- + if( this.mgr譜面管理者.nX座標dotが位置するレーン番号を返す( ptマウスの位置.X ) < 0 ) + return; // クリックされた箇所にレーンがない + + int n譜面先頭からの位置grid = this.mgr譜面管理者.nY座標dotが位置するgridを返す・ガイド幅単位( ptマウスの位置.Y ); + C小節 csクリックされた小節 = this.mgr譜面管理者.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + //----------------- + #endregion + + #region [ 該当小節の下へ新しい小節を挿入する。] + //----------------- + if( csクリックされた小節 != null ) + this.tシナリオ・小節を挿入する( csクリックされた小節.n小節番号0to3599 ); + //----------------- + #endregion + } + private void toolStripMenuItem小節の削除_Click( object sender, EventArgs e ) + { + // メニューが開かれたときのマウスの座標を取得。 + // ※メニューは必ずマウス位置を左上にして表示されるとは限らないため、 + //  メニューの表示位置からは取得しないこと。 + + Point ptマウス位置 = this.pt選択モードのコンテクストメニューを開いたときのマウスの位置; + + + // マウス位置にある小節を削除。 + + #region [ クリックされた箇所の小節を取得する。 ] + //----------------- + if( this.mgr譜面管理者.nX座標dotが位置するレーン番号を返す( ptマウス位置.X ) < 0 ) + return; // クリックされた箇所にレーンがないなら無視。 + + int n譜面先頭からの位置grid = this.mgr譜面管理者.nY座標dotが位置するgridを返す・ガイド幅単位( ptマウス位置.Y ); + C小節 cs削除する小節 = this.mgr譜面管理者.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + //----------------- + #endregion + + #region [ 該当小節を削除する。] + //----------------- + if( cs削除する小節 != null ) + this.tシナリオ・小節を削除する( cs削除する小節.n小節番号0to3599 ); + //----------------- + #endregion + } + //----------------- + #endregion + + #region [ GUIイベント:基本情報関連 ] + //----------------- + private string textBox曲名_以前の値 = ""; + private void textBox曲名_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正する。 + + #region [ Undo/Redo リストを修正。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBox曲名 ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBox曲名.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBox曲名, + new DGUndoを実行する( this.textBox曲名_Undo ), + new DGRedoを実行する( this.textBox曲名_Redo ), + this.textBox曲名_以前の値, this.textBox曲名.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBox曲名_以前の値 = this.textBox曲名.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBox曲名_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBox曲名 ); + } + private void textBox曲名_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBox曲名.Text = str変更前; + + this.textBox曲名.Focus(); + } + private void textBox曲名_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBox曲名.Text = str変更後; + + this.textBox曲名.Focus(); + } + + private string textBox製作者_以前の値 = ""; + private void textBox製作者_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正する。 + + #region [ Undo/Redo リストを修正。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBox製作者 ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBox製作者.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBox製作者, + new DGUndoを実行する( this.textBox製作者_Undo ), + new DGRedoを実行する( this.textBox製作者_Redo ), + this.textBox製作者_以前の値, this.textBox製作者.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBox製作者_以前の値 = this.textBox製作者.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBox製作者_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBox製作者 ); + } + private void textBox製作者_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBox製作者.Text = str変更前; + + this.textBox製作者.Focus(); + } + private void textBox製作者_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBox製作者.Text = str変更後; + + this.textBox製作者.Focus(); + } + + private string textBoxコメント_以前の値 = ""; + private void textBoxコメント_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正する。 + + #region [ Undo/Redo リストを修正。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxコメント ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxコメント.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxコメント, + new DGUndoを実行する( this.textBoxコメント_Undo ), + new DGRedoを実行する( this.textBoxコメント_Redo ), + this.textBoxコメント_以前の値, this.textBoxコメント.Text ) ); + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBoxコメント_以前の値 = this.textBoxコメント.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxコメント_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxコメント ); + } + private void textBoxコメント_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxコメント.Text = str変更前; + + this.textBoxコメント.Focus(); + } + private void textBoxコメント_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxコメント.Text = str変更後; + + this.textBoxコメント.Focus(); + } + + private decimal numericUpDownBPM_以前の値 = 120.0M; + private void numericUpDownBPM_ValueChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正する。 + + #region [ Undo/Redo リストの修正。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.numericUpDownBPM ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.numericUpDownBPM.Value; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.numericUpDownBPM, + new DGUndoを実行する( this.numericUpDownBPM_Undo ), + new DGRedoを実行する( this.numericUpDownBPM_Redo ), + this.numericUpDownBPM_以前の値, this.numericUpDownBPM.Value ) ); + + + // Undoボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.numericUpDownBPM_以前の値 = this.numericUpDownBPM.Value; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void numericUpDownBPM_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.numericUpDownBPM ); + } + private void numericUpDownBPM_Undo( decimal dec変更前, decimal dec変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.numericUpDownBPM.Value = dec変更前; + + this.numericUpDownBPM.Focus(); + } + private void numericUpDownBPM_Redo( decimal dec変更前, decimal dec変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.numericUpDownBPM.Value = dec変更後; + + this.numericUpDownBPM.Focus(); + } + + private int nDLEVEL_以前の値 = 50; + private void textBoxDLEVEL_TextChanged( object sender, EventArgs e ) + { + // 何もしない。→ 数字以外が入力されていることもあるため、Leaveまで待つ。 + } + private void textBoxDLEVEL_Leave( object sender, EventArgs e ) + { + if( this.textBoxDLEVEL.Text.Length > 0 ) + { + // 数値チェック。 + + int n値; + if( !int.TryParse( this.textBoxDLEVEL.Text, out n値 ) ) + { + n値 = 0; + } + else if( n値 < 0 ) + { + n値 = 0; + } + else if( n値 > 100 ) + { + n値 = 100; + } + + + // 値を水平スクロールバーにも反映。 + + if( this.hScrollBarDLEVEL.Value != n値 ) + { + this.t次のプロパティ変更処理がUndoRedoリストに載るようにする(); + this.hScrollBarDLEVEL.Value = n値; // ここで hScrollBarDLEVEL_ValueChanged が発動 → UndoRedo処理はそちらで。 + } + } + } + private void hScrollBarDLEVEL_ValueChanged( object sender, EventArgs e ) + { + // 値をテキストボックスにも反映。 + + this.textBoxDLEVEL.Text = this.hScrollBarDLEVEL.Value.ToString(); + + + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null && oセル仮想.b所有権がある( this.hScrollBarDLEVEL ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.hScrollBarDLEVEL.Value; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.hScrollBarDLEVEL, + new DGUndoを実行する( this.nDLEVEL_Undo ), + new DGRedoを実行する( this.nDLEVEL_Redo ), + this.nDLEVEL_以前の値, this.hScrollBarDLEVEL.Value ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.nDLEVEL_以前の値 = this.hScrollBarDLEVEL.Value; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void nDLEVEL_Undo( int n変更前, int n変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxDLEVEL.Text = n変更前.ToString(); + + this.textBoxDLEVEL.Focus(); + + + // 値を水平スクロールバーにも反映。 + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.hScrollBarDLEVEL.Value = n変更前; + } + private void nDLEVEL_Redo( int n変更前, int n変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxDLEVEL.Text = n変更後.ToString(); + + this.textBoxDLEVEL.Focus(); + + + // 値を水平スクロールバーにも反映。 + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.hScrollBarDLEVEL.Value = n変更後; + } + + private int nGLEVEL_以前の値; + private void textBoxGLEVEL_TextChanged( object sender, EventArgs e ) + { + // 何もしない。→ 数字以外が入力されていることもあるため、Leaveまで待つ。 + } + private void textBoxGLEVEL_Leave( object sender, EventArgs e ) + { + if( this.textBoxGLEVEL.Text.Length > 0 ) + { + // 数値チェック。 + + int n値; + if( !int.TryParse( this.textBoxGLEVEL.Text, out n値 ) ) + { + n値 = 0; + } + else if( n値 < 0 ) + { + n値 = 0; + } + else if( n値 > 100 ) + { + n値 = 100; + } + + + // 値を水平スクロールバーにも反映。 + + if( this.hScrollBarGLEVEL.Value != n値 ) + { + this.t次のプロパティ変更処理がUndoRedoリストに載るようにする(); + this.hScrollBarGLEVEL.Value = n値; // ここで hScrollBarGLEVEL_ValueChanged が発動 → UndoRedo処理はそちらで。 + } + } + } + private void hScrollBarGLEVEL_ValueChanged( object sender, EventArgs e ) + { + // 値をテキストボックスにも反映。 + + this.textBoxGLEVEL.Text = this.hScrollBarGLEVEL.Value.ToString(); + + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.hScrollBarGLEVEL ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.hScrollBarGLEVEL.Value; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.hScrollBarGLEVEL, + new DGUndoを実行する( this.nGLEVEL_Undo ), + new DGRedoを実行する( this.nGLEVEL_Redo ), + this.nGLEVEL_以前の値, this.hScrollBarGLEVEL.Value ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.nGLEVEL_以前の値 = this.hScrollBarGLEVEL.Value; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void nGLEVEL_Undo( int n変更前, int n変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxGLEVEL.Text = n変更前.ToString(); + + this.textBoxGLEVEL.Focus(); + + + // 値を水平スクロールバーにも反映する。 + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.hScrollBarGLEVEL.Value = n変更前; + } + private void nGLEVEL_Redo( int n変更前, int n変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxGLEVEL.Text = n変更後.ToString(); + + this.textBoxGLEVEL.Focus(); + + + // 値を水平スクロールバーにも反映する。 + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.hScrollBarGLEVEL.Value = n変更後; + } + + private int nBLEVEL_以前の値; + private void textBoxBLEVEL_TextChanged( object sender, EventArgs e ) + { + // 何もしない。→ 数字以外が入力されていることもあるため、Leaveまで待つ。 + } + private void textBoxBLEVEL_Leave( object sender, EventArgs e ) + { + if( this.textBoxBLEVEL.Text.Length > 0 ) + { + // 数値チェック。 + + int n値; + if( !int.TryParse( this.textBoxBLEVEL.Text, out n値 ) ) + { + n値 = 0; + } + else if( n値 < 0 ) + { + n値 = 0; + } + else if( n値 > 100 ) + { + n値 = 100; + } + + + // 値を水平スクロールバーにも反映。 + + if( this.hScrollBarBLEVEL.Value != n値 ) + { + this.t次のプロパティ変更処理がUndoRedoリストに載るようにする(); + this.hScrollBarBLEVEL.Value = n値; // ここで hScrollBarBLEVEL_ValueChanged が発動 → UndoRedo処理はそちらで。 + } + } + } + private void hScrollBarBLEVEL_ValueChanged( object sender, EventArgs e ) + { + // 値をテキストボックスにも反映。 + + this.textBoxBLEVEL.Text = this.hScrollBarBLEVEL.Value.ToString(); + + + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.hScrollBarBLEVEL ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.hScrollBarBLEVEL.Value; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.hScrollBarBLEVEL, + new DGUndoを実行する( this.nBLEVEL_Undo ), + new DGRedoを実行する( this.nBLEVEL_Redo ), + this.nBLEVEL_以前の値, this.hScrollBarBLEVEL.Value ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.nBLEVEL_以前の値 = this.hScrollBarBLEVEL.Value; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void nBLEVEL_Undo( int n変更前, int n変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxBLEVEL.Text = n変更前.ToString(); + + this.textBoxBLEVEL.Focus(); + + + // 値を水平スクロールバーにも反映。 + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.hScrollBarBLEVEL.Value = n変更前; + } + private void nBLEVEL_Redo( int n変更前, int n変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxBLEVEL.Text = n変更後.ToString(); + + this.textBoxBLEVEL.Focus(); + + + // 値を水平スクロールバーにも反映。 + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.hScrollBarBLEVEL.Value = n変更後; + } + + private string textBoxパネル_以前の値 = ""; + private void textBoxパネル_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxパネル ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxパネル.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxパネル, + new DGUndoを実行する( this.textBoxパネル_Undo ), + new DGRedoを実行する( this.textBoxパネル_Redo ), + this.textBoxパネル_以前の値, this.textBoxパネル.Text ) ); + + + // Undoボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBoxパネル_以前の値 = this.textBoxパネル.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxパネル_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxパネル ); + } + private void textBoxパネル_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxパネル.Text = str変更前; + + this.textBoxパネル.Focus(); + } + private void textBoxパネル_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxパネル.Text = str変更後; + + this.textBoxパネル.Focus(); + } + + private string textBoxPREVIEW_以前の値 = ""; + private void textBoxPREVIEW_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxPREVIEW ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxPREVIEW.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxPREVIEW, + new DGUndoを実行する( this.textBoxPREVIEW_Undo ), + new DGRedoを実行する( this.textBoxPREVIEW_Redo ), + this.textBoxPREVIEW_以前の値, this.textBoxPREVIEW.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBoxPREVIEW_以前の値 = this.textBoxPREVIEW.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxPREVIEW_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxPREVIEW ); + } + private void textBoxPREVIEW_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxPREVIEW.Text = str変更前; + + this.textBoxPREVIEW.Focus(); + } + private void textBoxPREVIEW_Redo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxPREVIEW.Text = str変更後; + + this.textBoxPREVIEW.Focus(); + } + + private string textBoxPREIMAGE_以前の値 = ""; + private void textBoxPREIMAGE_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxPREIMAGE ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxPREIMAGE.Text; + } + else + { + // 新規のセルを作成。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxPREIMAGE, + new DGUndoを実行する( this.textBoxPREIMAGE_Undo ), + new DGRedoを実行する( this.textBoxPREIMAGE_Redo ), + this.textBoxPREIMAGE_以前の値, this.textBoxPREIMAGE.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo用に値を保管しておく。] + + this.textBoxPREIMAGE_以前の値 = this.textBoxPREIMAGE.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxPREIMAGE_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxPREIMAGE ); + } + private void textBoxPREIMAGE_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxPREIMAGE.Text = str変更前; + + this.textBoxPREIMAGE.Focus(); + } + private void textBoxPREIMAGE_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxPREIMAGE.Text = str変更後; + + this.textBoxPREIMAGE.Focus(); + } + + private string textBoxSTAGEFILE_以前の値 = ""; + private void textBoxSTAGEFILE_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxSTAGEFILE ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxSTAGEFILE.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxSTAGEFILE, + new DGUndoを実行する( this.textBoxSTAGEFILE_Undo ), + new DGRedoを実行する( this.textBoxSTAGEFILE_Redo ), + this.textBoxSTAGEFILE_以前の値, this.textBoxSTAGEFILE.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBoxSTAGEFILE_以前の値 = this.textBoxSTAGEFILE.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxSTAGEFILE_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxSTAGEFILE ); + } + private void textBoxSTAGEFILE_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxSTAGEFILE.Text = str変更前; + + this.textBoxSTAGEFILE.Focus(); + } + private void textBoxSTAGEFILE_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxSTAGEFILE.Text = str変更後; + + this.textBoxSTAGEFILE.Focus(); + } + + private string textBoxBACKGROUND_以前の値 = ""; + private void textBoxBACKGROUND_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxBACKGROUND ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxBACKGROUND.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxBACKGROUND, + new DGUndoを実行する( this.textBoxBACKGROUND_Undo ), + new DGRedoを実行する( this.textBoxBACKGROUND_Redo ), + this.textBoxBACKGROUND_以前の値, this.textBoxBACKGROUND.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用の値を保管しておく。 + + this.textBoxBACKGROUND_以前の値 = this.textBoxBACKGROUND.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxBACKGROUND_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxBACKGROUND ); + } + private void textBoxBACKGROUND_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxBACKGROUND.Text = str変更前; + + this.textBoxBACKGROUND.Focus(); + } + private void textBoxBACKGROUND_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxBACKGROUND.Text = str変更後; + + this.textBoxBACKGROUND.Focus(); + } + + private string textBoxRESULTIMAGE_以前の値 = ""; + private void textBoxRESULTIMAGE_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBoxRESULTIMAGE ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBoxRESULTIMAGE.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBoxRESULTIMAGE, + new DGUndoを実行する( this.textBoxRESULTIMAGE_Undo ), + new DGRedoを実行する( this.textBoxRESULTIMAGE_Redo ), + this.textBoxRESULTIMAGE_以前の値, this.textBoxRESULTIMAGE.Text ) ); + + + // Undo ボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBoxRESULTIMAGE_以前の値 = this.textBoxRESULTIMAGE.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBoxRESULTIMAGE_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBoxRESULTIMAGE ); + } + private void textBoxRESULTIMAGE_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxRESULTIMAGE.Text = str変更前; + + this.textBoxRESULTIMAGE.Focus(); + } + private void textBoxRESULTIMAGE_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.基本情報 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBoxRESULTIMAGE.Text = str変更後; + + this.textBoxRESULTIMAGE.Focus(); + } + + private void buttonPREVIEW参照_Click( object sender, EventArgs e ) + { + string str初期フォルダ名 = this.str作業フォルダ名; + + if( this.textBoxPREVIEW.Text.Length > 0 ) + str初期フォルダ名 = this.strファイルの存在するディレクトリを絶対パスで返す( this.textBoxPREVIEW.Text ); + + string strファイル名 = this.tファイル選択ダイアログでファイルを選択し相対パスにして返す( + Resources.strプレビュー音ファイル選択ダイアログのタイトル, + Resources.strサウンドファイル選択ダイアログのフィルタ, + str初期フォルダ名 ); + + if( strファイル名.Length > 0 ) + { + this.textBoxPREVIEW.Text = strファイル名; + this.b未保存 = true; + } + } + private void buttonPREIMAGE参照_Click( object sender, EventArgs e ) + { + string str初期フォルダ名 = this.str作業フォルダ名; + + if( this.textBoxPREIMAGE.Text.Length > 0 ) + str初期フォルダ名 = this.strファイルの存在するディレクトリを絶対パスで返す( this.textBoxPREIMAGE.Text ); + + string strファイル名 = this.tファイル選択ダイアログでファイルを選択し相対パスにして返す( + Resources.strプレビュー画像ファイル選択ダイアログのタイトル, + Resources.str画像ファイル選択ダイアログのフィルタ, + str初期フォルダ名 ); + + if( strファイル名.Length > 0 ) + { + this.textBoxPREIMAGE.Text = strファイル名; + this.b未保存 = true; + } + } + private void buttonSTAGEFILE参照_Click( object sender, EventArgs e ) + { + string str初期フォルダ名 = this.str作業フォルダ名; + + if( this.textBoxSTAGEFILE.Text.Length > 0 ) + str初期フォルダ名 = this.strファイルの存在するディレクトリを絶対パスで返す( this.textBoxSTAGEFILE.Text ); + + string strファイル名 = this.tファイル選択ダイアログでファイルを選択し相対パスにして返す( + Resources.strステージ画像ファイル選択ダイアログのタイトル, + Resources.str画像ファイル選択ダイアログのフィルタ, + str初期フォルダ名 ); + + if( strファイル名.Length > 0 ) + { + this.textBoxSTAGEFILE.Text = strファイル名; + this.b未保存 = true; + } + } + private void buttonBACKGROUND参照_Click( object sender, EventArgs e ) + { + string str初期フォルダ名 = this.str作業フォルダ名; + + if( this.textBoxBACKGROUND.Text.Length > 0 ) + str初期フォルダ名 = this.strファイルの存在するディレクトリを絶対パスで返す( this.textBoxBACKGROUND.Text ); + + string strファイル名 = this.tファイル選択ダイアログでファイルを選択し相対パスにして返す( + Resources.str背景画像ファイル選択ダイアログのタイトル, + Resources.str画像ファイル選択ダイアログのフィルタ, + str初期フォルダ名 ); + + if( strファイル名.Length > 0 ) + { + this.textBoxBACKGROUND.Text = strファイル名; + this.b未保存 = true; + } + } + private void buttonRESULTIMAGE参照_Click( object sender, EventArgs e ) + { + string str初期フォルダ名 = this.str作業フォルダ名; + + if( this.textBoxRESULTIMAGE.Text.Length > 0 ) + str初期フォルダ名 = this.strファイルの存在するディレクトリを絶対パスで返す( this.textBoxRESULTIMAGE.Text ); + + string strファイル名 = this.tファイル選択ダイアログでファイルを選択し相対パスにして返す( + Resources.str結果画像ファイル選択ダイアログのタイトル, + Resources.str画像ファイル選択ダイアログのフィルタ, + str初期フォルダ名 ); + + if( strファイル名.Length > 0 ) + { + this.textBoxRESULTIMAGE.Text = strファイル名; + this.b未保存 = true; + } + } + //----------------- + #endregion + #region [ GUIイベント:WAVリスト関連 ] + //----------------- + private void listViewWAVリスト_Click( object sender, EventArgs e ) + { + #region [ プレビュー音を再生する。] + //----------------- + if( this.listViewWAVリスト.SelectedIndices.Count > 0 && this.toolStripButtonWAVリストプレビュースイッチ.Checked ) + { + ListViewItem item = this.listViewWAVリスト.Items[ this.listViewWAVリスト.SelectedIndices[ 0 ] ]; + this.mgrWAVリスト管理者.tプレビュー音を再生する( C変換.n36進数2桁の文字列を数値に変換して返す( item.SubItems[ 1 ].Text ) ); + } + //----------------- + #endregion + } + private void listViewWAVリスト_DoubleClick( object sender, EventArgs e ) + { + #region [ サウンドプロパティを開いて編集する。] + //----------------- + if( this.mgrWAVリスト管理者.n現在選択中のItem番号0to1294 < 0 ) + return; // 選択されていない + + this.mgrWAVリスト管理者.tサウンドプロパティを開いて編集する( this.mgrWAVリスト管理者.n現在選択中のItem番号0to1294 + 1, this.str作業フォルダ名 ); + //----------------- + #endregion + } + private void listViewWAVリスト_ItemDrag( object sender, ItemDragEventArgs e ) + { + #region [ CWAVデータをDragDrop用データに格納し、DoDragDrop()を呼び出す。] + //----------------- + var item = (ListViewItem) e.Item; + + var data = new Cチップパレット向けDragDropデータ() { + n種類 = 0, + strラベル名 = item.SubItems[ 0 ].Text, + n番号1to1295 = C変換.n36進数2桁の文字列を数値に変換して返す( item.SubItems[ 1 ].Text ), + strファイル名 = item.SubItems[ 2 ].Text, + col文字色 = item.ForeColor, + col背景色 = item.BackColor, + }; + + this.DoDragDrop( data, DragDropEffects.Copy ); + + //----------------- + #endregion + } + private void listViewWAVリスト_KeyPress( object sender, KeyPressEventArgs e ) + { + #region [ ENTER が押下されたら、サウンドプロパティを開いて編集する。] + //----------------- + if( e.KeyChar == (char) Keys.Return ) + { + if( this.mgrWAVリスト管理者.n現在選択中のItem番号0to1294 < 0 ) + return; // 選択されていない + + this.mgrWAVリスト管理者.tサウンドプロパティを開いて編集する( this.mgrWAVリスト管理者.n現在選択中のItem番号0to1294 + 1, this.str作業フォルダ名 ); + } + //----------------- + #endregion + } + private void listViewWAVリスト_MouseEnter( object sender, EventArgs e ) + { + #region [ WAVリストにフォーカスを移動する。] + //----------------- + if( this.appアプリ設定.AutoFocus ) + this.mgrWAVリスト管理者.tWAVリストにフォーカスを当てる(); + //----------------- + #endregion + } + private void listViewWAVリスト_RetrieveVirtualItem( object sender, RetrieveVirtualItemEventArgs e ) + { + e.Item = this.mgrWAVリスト管理者.tCWAVとListViewItemを生成して返す( e.ItemIndex + 1 ); + } + private void listViewWAVリスト_SelectedIndexChanged( object sender, EventArgs e ) + { + #region [ WAV, BMP, AVI のカーソルを、選択された行に全部合わせる。] + //----------------- + if( this.listViewWAVリスト.SelectedIndices.Count > 0 ) + this.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( this.listViewWAVリスト.SelectedIndices[ 0 ] ); + //----------------- + #endregion + } + + private void toolStripButtonWAVリストプレビュースイッチ_CheckStateChanged( object sender, EventArgs e ) + { + #region [ 再生ボタンと停止ボタンの有効・無効を設定する。] + //----------------- + bool b再生有効 = ( this.toolStripButtonWAVリストプレビュースイッチ.CheckState == CheckState.Checked ) ? true : false; + this.toolStripButtonWAVリストプレビュー再生開始.Enabled = b再生有効; + this.toolStripButtonWAVリストプレビュー再生停止.Enabled = b再生有効; + //----------------- + #endregion + + #region [ 無効かつ再生中ならプレビュー音を停止する。] + //----------------- + if( !b再生有効 ) + this.mgrWAVリスト管理者.tプレビュー音を停止する(); + //----------------- + #endregion + } + private void toolStripButtonWAVリストプレビュー再生開始_Click( object sender, EventArgs e ) + { + #region [ 現在選択中のWAVのプレビュー音を再生する。] + //----------------- + if( this.listViewWAVリスト.SelectedIndices.Count <= 0 ) + return; // 選択されてない + + bool b再生有効 = ( this.toolStripButtonWAVリストプレビュースイッチ.CheckState == CheckState.Checked ) ? true : false; + + if (b再生有効) + { + int nWAV番号1to1295 = this.mgrWAVリスト管理者.n現在選択中のItem番号0to1294 + 1; + this.mgrWAVリスト管理者.tプレビュー音を再生する( nWAV番号1to1295 ); + } + //----------------- + #endregion + } + private void toolStripButtonWAVリストプレビュー再生停止_Click( object sender, EventArgs e ) + { + this.mgrWAVリスト管理者.tプレビュー音を停止する(); + } + private void toolStripButtonWAVリスト上移動_Click( object sender, EventArgs e ) + { + #region [ 上の行とWAVを交換する。] + //----------------- + if( this.listViewWAVリスト.SelectedIndices.Count <= 0 ) + return; // 選択されていない + + int n選択されたItem番号0to1294 = this.listViewWAVリスト.SelectedIndices[ 0 ]; + + if( n選択されたItem番号0to1294 == 0 ) + return; // 最上行なので無視 + + this.mgrWAVリスト管理者.tItemを交換する( n選択されたItem番号0to1294, n選択されたItem番号0to1294 - 1 ); + //----------------- + #endregion + } + private void toolStripButtonWAVリスト下移動_Click( object sender, EventArgs e ) + { + if( this.listViewWAVリスト.SelectedIndices.Count <= 0 ) + return; // 選択されていない + + int n選択されたItem番号0to1294 = this.listViewWAVリスト.SelectedIndices[ 0 ]; + + if( n選択されたItem番号0to1294 >= 1294 ) + return; // 最下行なので無視 + + this.mgrWAVリスト管理者.tItemを交換する( n選択されたItem番号0to1294, n選択されたItem番号0to1294 + 1 ); + } + //----------------- + #endregion + #region [ GUIイベント:BMPリスト関連 ] + //----------------- + private void listViewBMPリスト_Click( object sender, EventArgs e ) + { + // 何もしない + } + private void listViewBMPリスト_DoubleClick( object sender, EventArgs e ) + { + #region [ 画像プロパティを開いて編集する。] + //----------------- + if( this.mgrBMPリスト管理者.n現在選択中のItem番号0to1294 < 0 ) + return; // 選択されていない + + this.mgrBMPリスト管理者.t画像プロパティを開いて編集する( this.mgrBMPリスト管理者.n現在選択中のItem番号0to1294 + 1, this.str作業フォルダ名 ); + //----------------- + #endregion + } + private void listViewBMPリスト_ItemDrag( object sender, ItemDragEventArgs e ) + { + #region [ CBMPデータをDragDrop用データに格納し、DoDragDrop()を呼び出す。] + //----------------- + var item = (ListViewItem) e.Item; + + var data = new Cチップパレット向けDragDropデータ() { + n種類 = 1, + strラベル名 = item.SubItems[ 1 ].Text, + n番号1to1295 = C変換.n36進数2桁の文字列を数値に変換して返す( item.SubItems[ 2 ].Text ), + strファイル名 = item.SubItems[ 3 ].Text, + col文字色 = item.ForeColor, + col背景色 = item.BackColor, + }; + + this.DoDragDrop( data, DragDropEffects.Copy ); + //----------------- + #endregion + } + private void listViewBMPリスト_KeyPress( object sender, KeyPressEventArgs e ) + { + #region [ ENTER が押下されたら、画像プロパティを開いて編集する。] + //----------------- + if( e.KeyChar == (char) Keys.Return ) + { + if( this.mgrBMPリスト管理者.n現在選択中のItem番号0to1294 < 0 ) + return; // 選択されていない + + this.mgrBMPリスト管理者.t画像プロパティを開いて編集する( this.mgrBMPリスト管理者.n現在選択中のItem番号0to1294 + 1, this.str作業フォルダ名 ); + } + //----------------- + #endregion + } + private void listViewBMPリスト_MouseEnter( object sender, EventArgs e ) + { + #region [ BMPリストにフォーカスを移動する。] + //----------------- + if( this.appアプリ設定.AutoFocus ) + this.mgrBMPリスト管理者.tBMPリストにフォーカスを当てる(); + //----------------- + #endregion + } + private void listViewBMPリスト_RetrieveVirtualItem( object sender, RetrieveVirtualItemEventArgs e ) + { + e.Item = this.mgrBMPリスト管理者.tCBMPとListViewItemを生成して返す( e.ItemIndex + 1 ); + } + private void listViewBMPリスト_SelectedIndexChanged( object sender, EventArgs e ) + { + #region [ WAV, BMP, AVI のカーソルを、選択された行に全部合わせる。] + //----------------- + if( this.listViewBMPリスト.SelectedIndices.Count > 0 ) + this.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( this.listViewBMPリスト.SelectedIndices[ 0 ] ); + //----------------- + #endregion + } + + private void toolStripButtonBMPリスト上移動_Click( object sender, EventArgs e ) + { + #region [ 上の行とBMPを交換する。] + //----------------- + if( this.listViewBMPリスト.SelectedIndices.Count <= 0 ) + return; // 選択されていない + + int n選択されたItem番号0to1294 = this.listViewBMPリスト.SelectedIndices[ 0 ]; + + if( n選択されたItem番号0to1294 != 0 ) + this.mgrBMPリスト管理者.tItemを交換する( n選択されたItem番号0to1294, n選択されたItem番号0to1294 - 1 ); + //----------------- + #endregion + } + private void toolStripButtonBMPリスト下移動_Click( object sender, EventArgs e ) + { + #region [ 下の行とBMPを交換する。] + //----------------- + if( this.listViewBMPリスト.SelectedIndices.Count <= 0 ) + return; // 選択されていない + + int n選択されたItem番号0to1294 = this.listViewBMPリスト.SelectedIndices[ 0 ]; + + if( n選択されたItem番号0to1294 >= 1294 ) + return; // 最下行なので無視 + + this.mgrBMPリスト管理者.tItemを交換する( n選択されたItem番号0to1294, n選択されたItem番号0to1294 + 1 ); + //----------------- + #endregion + } + //----------------- + #endregion + #region [ GUIイベント:AVIリスト関連 ] + //----------------- + private void listViewAVIリスト_Click( object sender, EventArgs e ) + { + // 何もしない + } + private void listViewAVIリスト_DoubleClick( object sender, EventArgs e ) + { + #region [ 動画プロパティを開いて編集する。] + //----------------- + if( this.mgrAVIリスト管理者.n現在選択中のItem番号0to1294 < 0 ) + return; // 選択されていない + + this.mgrAVIリスト管理者.t動画プロパティを開いて編集する( this.mgrAVIリスト管理者.n現在選択中のItem番号0to1294 + 1, this.str作業フォルダ名 ); + //----------------- + #endregion + } + private void listViewAVIリスト_ItemDrag( object sender, ItemDragEventArgs e ) + { + #region [ CAVIデータをDragDrop用データに格納してDoDragDrop()を呼び出す。] + //----------------- + var item = (ListViewItem) e.Item; + + var data = new Cチップパレット向けDragDropデータ() { + n種類 = 2, + strラベル名 = item.SubItems[ 0 ].Text, + n番号1to1295 = C変換.n36進数2桁の文字列を数値に変換して返す( item.SubItems[ 1 ].Text ), + strファイル名 = item.SubItems[ 2 ].Text, + col文字色 = item.ForeColor, + col背景色 = item.BackColor, + }; + + this.DoDragDrop( data, DragDropEffects.Copy ); + //----------------- + #endregion + } + private void listViewAVIリスト_KeyPress( object sender, KeyPressEventArgs e ) + { + #region [ ENTER が押下されたら、動画プロパティを開いて編集する。] + //----------------- + if( e.KeyChar == (char) Keys.Return ) + { + if( this.mgrAVIリスト管理者.n現在選択中のItem番号0to1294 < 0 ) + return; // 選択されてない + + this.mgrAVIリスト管理者.t動画プロパティを開いて編集する( this.mgrAVIリスト管理者.n現在選択中のItem番号0to1294 + 1, this.str作業フォルダ名 ); + } + //----------------- + #endregion + } + private void listViewAVIリスト_MouseEnter( object sender, EventArgs e ) + { + #region [ AVIリストにフォーカスを移動する。] + //----------------- + if( this.appアプリ設定.AutoFocus ) + this.mgrAVIリスト管理者.tAVIリストにフォーカスを当てる(); + //----------------- + #endregion + } + private void listViewAVIリスト_RetrieveVirtualItem( object sender, RetrieveVirtualItemEventArgs e ) + { + e.Item = this.mgrAVIリスト管理者.tCAVIとListViewItemを生成して返す( e.ItemIndex + 1 ); + } + private void listViewAVIリスト_SelectedIndexChanged( object sender, EventArgs e ) + { + #region [ WAV, BMP, AVI のカーソルを、選択された行に全部合わせる。] + //----------------- + if( this.listViewAVIリスト.SelectedIndices.Count > 0 ) + this.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( this.listViewAVIリスト.SelectedIndices[ 0 ] ); + //----------------- + #endregion + } + + private void toolStripButtonAVIリスト上移動_Click( object sender, EventArgs e ) + { + #region [ 上の行とAVIを交換する。] + //----------------- + if( this.listViewAVIリスト.SelectedIndices.Count <= 0 ) + return; // 選択されていない + + int n選択されたItem番号0to1294 = this.listViewAVIリスト.SelectedIndices[ 0 ]; + + if( n選択されたItem番号0to1294 == 0 ) + return; // 最上行なので無視 + + this.mgrAVIリスト管理者.tItemを交換する( n選択されたItem番号0to1294, n選択されたItem番号0to1294 - 1 ); + //----------------- + #endregion + } + private void toolStripButtonAVIリスト下移動_Click( object sender, EventArgs e ) + { + #region [ 下の行とAVIを交換する。] + //----------------- + if( this.listViewAVIリスト.SelectedIndices.Count <= 0 ) + return; // 選択されていない + + int n選択されたItem番号0to1294 = this.listViewAVIリスト.SelectedIndices[ 0 ]; + + if( n選択されたItem番号0to1294 >= 1294 ) + return; // 最下行なので無視 + + this.mgrAVIリスト管理者.tItemを交換する( n選択されたItem番号0to1294, n選択されたItem番号0to1294 + 1 ); + //----------------- + #endregion + } + //----------------- + #endregion + #region [ GUIイベント:自由入力関連 ] + //----------------- + private string textBox自由入力欄_以前の値 = ""; + private void textBox自由入力欄_TextChanged( object sender, EventArgs e ) + { + // Undo/Redo リストを修正。 + + #region [ Undo/Redo リストを修正する。] + //----------------- + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( ( oセル仮想 != null ) && oセル仮想.b所有権がある( this.textBox自由入力欄 ) ) + { + // 既存のセルの値を更新。 + + ( (CUndoRedoセル) oセル仮想 ).変更後の値 = this.textBox自由入力欄.Text; + } + else + { + // 新しいセルを追加。 + + this.mgrUndoRedo管理者.tノードを追加する( + new CUndoRedoセル( + this.textBox自由入力欄, + new DGUndoを実行する( this.textBox自由入力欄_Undo ), + new DGRedoを実行する( this.textBox自由入力欄_Redo ), + this.textBox自由入力欄_以前の値, this.textBox自由入力欄.Text ) ); + + + // Undoボタンを有効にする。 + + this.tUndoRedo用GUIの有効・無効を設定する(); + } + } + //----------------- + #endregion + + + // Undo 用に値を保管しておく。 + + this.textBox自由入力欄_以前の値 = this.textBox自由入力欄.Text; + + + // 完了。 + + CUndoRedo管理.bUndoRedoした直後 = false; + this.b未保存 = true; + } + private void textBox自由入力欄_Leave( object sender, EventArgs e ) + { + CUndoRedoセル仮想 oセル仮想 = this.mgrUndoRedo管理者.tUndoするノードを取得して返す・見るだけ(); + + if( oセル仮想 != null ) + oセル仮想.t所有権の放棄( this.textBox自由入力欄 ); + } + private void textBox自由入力欄_Undo( string str変更前, string str変更後 ) + { + // 変更前の値に戻す。 + + this.tタブを選択する( Eタブ種別.自由入力 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBox自由入力欄.Text = str変更前; + + this.textBox自由入力欄.Focus(); + } + private void textBox自由入力欄_Redo( string str変更前, string str変更後 ) + { + // 変更後の値に戻す。 + + this.tタブを選択する( Eタブ種別.自由入力 ); + + this.t次のプロパティ変更処理がUndoRedoリストに載らないようにする(); + this.textBox自由入力欄.Text = str変更後; + + this.textBox自由入力欄.Focus(); + } + //----------------- + #endregion + + #region [ GUIイベント:メニューバー [ファイル] ] + //----------------- + private void toolStripMenuItem新規_Click( object sender, EventArgs e ) + { + this.tシナリオ・新規作成(); + } + private void toolStripMenuItem開く_Click( object sender, EventArgs e ) + { + this.tシナリオ・開く(); + } + private void toolStripMenuItem上書き保存_Click( object sender, EventArgs e ) + { + this.tシナリオ・上書き保存(); + } + private void toolStripMenuItem名前を付けて保存_Click( object sender, EventArgs e ) + { + this.tシナリオ・名前をつけて保存(); + } + private void toolStripMenuItem終了_Click( object sender, EventArgs e ) + { + this.tシナリオ・終了(); + } + private void toolStripMenuItem最近使ったファイル_Click( object sender, EventArgs e ) + { + // ※このイベントハンドラに対応する「toolStripMenuItem最近使ったファイル」というアイテムはデザイナにはないので注意。 + // this.t最近使ったファイルをFileメニューへ追加する() の中で、手動で作って追加したアイテムに対するハンドラである。 + + if( this.t未保存なら保存する() == DialogResult.Cancel ) + return; + + this.t演奏ファイルを開いて読み込む( ( (ToolStripMenuItem) sender ).Text.Substring( 3 ) ); + } + //----------------- + #endregion + #region [ GUIイベント:メニューバー [編集] ] + //----------------- + private void toolStripMenuItemアンドゥ_Click( object sender, EventArgs e ) + { + this.tシナリオ・Undoする(); + } + private void toolStripMenuItemリドゥ_Click( object sender, EventArgs e ) + { + this.tシナリオ・Redoする(); + } + private void toolStripMenuItem切り取り_Click( object sender, EventArgs e ) + { + this.tシナリオ・切り取り(); + } + private void toolStripMenuItemコピー_Click( object sender, EventArgs e ) + { + this.tシナリオ・コピー(); + } + private void toolStripMenuItem貼り付け_Click( object sender, EventArgs e ) + { + // マウスが譜面上にあるならそこから貼り付ける。 + + Point ptマウス位置 = this.pt現在のマウス位置を譜面の可視領域相対の座標dotで返す(); + Size sz譜面の可視サイズ = this.sz譜面の可視領域の大きさdotを返す(); + + + if( ( ( ptマウス位置.X < 0 ) || ( ptマウス位置.Y < 0 ) ) || ( ( ptマウス位置.X > sz譜面の可視サイズ.Width ) || ( ptマウス位置.Y > sz譜面の可視サイズ.Height ) ) ) + { + // マウスが譜面上になかった → 表示領域下辺から貼り付ける + + this.tシナリオ・貼り付け( this.mgr譜面管理者.n現在の譜面表示下辺の譜面先頭からの位置grid ); + } + else + { + // マウスが譜面上にあった + + this.tシナリオ・貼り付け( this.mgr譜面管理者.nY座標dotが位置するgridを返す・ガイド幅単位( ptマウス位置.Y ) ); + } + } + private void toolStripMenuItem削除_Click( object sender, EventArgs e ) + { + this.tシナリオ・削除(); + } + private void toolStripMenuItemすべて選択_Click( object sender, EventArgs e ) + { + // 編集モードなら強制的に選択モードにする。 + + if( this.b編集モードである ) + this.t選択モードにする(); + + + // 全チップを選択する。 + + this.mgr選択モード管理者.t全チップを選択する(); + } + private void toolStripMenuItem選択モード_Click( object sender, EventArgs e ) + { + this.t選択モードにする(); + } + private void toolStripMenuItem編集モード_Click( object sender, EventArgs e ) + { + this.t編集モードにする(); + } + private void toolStripMenuItemモード切替_Click( object sender, EventArgs e ) + { + if( this.b選択モードである ) + { + this.t編集モードにする(); + } + else + { + this.t選択モードにする(); + } + } + private void toolStripMenuItem検索_Click( object sender, EventArgs e ) + { + this.tシナリオ・検索(); + } + private void toolStripMenuItem置換_Click( object sender, EventArgs e ) + { + this.tシナリオ・置換(); + } + //----------------- + #endregion + #region [ GUIイベント:メニューバー [表示] ] + //----------------- + private void toolStripMenuItemチップパレット_Click( object sender, EventArgs e ) + { + if( this.toolStripMenuItemチップパレット.CheckState == CheckState.Checked ) + { + this.dlgチップパレット.t表示する(); + } + else + { + this.dlgチップパレット.t隠す(); + } + } + private void toolStripMenuItemガイド間隔4分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 4 ); + } + private void toolStripMenuItemガイド間隔8分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 8 ); + } + private void toolStripMenuItemガイド間隔12分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 12 ); + } + private void toolStripMenuItemガイド間隔16分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 0x10 ); + } + private void toolStripMenuItemガイド間隔24分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 0x18 ); + } + private void toolStripMenuItemガイド間隔32分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 0x20 ); + } + private void toolStripMenuItemガイド間隔48分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 0x30 ); + } + private void toolStripMenuItemガイド間隔64分_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 0x40 ); + } + private void toolStripMenuItemガイド間隔フリー_Click( object sender, EventArgs e ) + { + this.tガイド間隔を変更する( 0 ); + } + private void toolStripMenuItemガイド間隔拡大_Click( object sender, EventArgs e ) + { + switch( this.n現在のガイド間隔4to64or0 ) + { + case 4: break; + case 8: this.tガイド間隔を変更する( 4 ); break; + case 12: this.tガイド間隔を変更する( 8 ); break; + case 16: this.tガイド間隔を変更する( 12 ); break; + case 24: this.tガイド間隔を変更する( 16 ); break; + case 32: this.tガイド間隔を変更する( 24 ); break; + case 48: this.tガイド間隔を変更する( 32 ); break; + case 64: this.tガイド間隔を変更する( 48 ); break; + case 0: this.tガイド間隔を変更する( 64 ); break; + } + } + private void toolStripMenuItemガイド間隔縮小_Click( object sender, EventArgs e ) + { + switch( this.n現在のガイド間隔4to64or0 ) + { + case 4: this.tガイド間隔を変更する( 8 ); break; + case 8: this.tガイド間隔を変更する( 12 ); break; + case 12: this.tガイド間隔を変更する( 16 ); break; + case 16: this.tガイド間隔を変更する( 24 ); break; + case 24: this.tガイド間隔を変更する( 32 ); break; + case 32: this.tガイド間隔を変更する( 48 ); break; + case 48: this.tガイド間隔を変更する( 64 ); break; + case 64: this.tガイド間隔を変更する( 0 ); break; + case 0: break; + } + } + //----------------- + #endregion + #region [ GUIイベント:メニューバー [再生] ] + //----------------- + private void toolStripMenuItem先頭から再生_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerで最初から再生する(); + } + private void toolStripMenuItem現在位置から再生_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerで現在位置から再生する(); + } + private void toolStripMenuItem現在位置からBGMのみ再生_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerで現在位置からBGMのみ再生する(); + } + private void toolStripMenuItem再生停止_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerを再生停止する(); + } + //----------------- + #endregion + #region [ GUIイベント:メニューバー [ツール] ] + //----------------- + private void toolStripMenuItemオプション_Click( object sender, EventArgs e ) + { + this.mgrオプション管理者.tオプションダイアログを開いて編集し結果をアプリ設定に格納する(); + } + //----------------- + #endregion + #region [ GUIイベント:メニューバー [ヘルプ] ] + //----------------- + private void toolStripMenuItemDTXCreaterマニュアル_Click( object sender, EventArgs e ) + { + try + { + // マニュアルを別プロセスとして開く。 + + Process.Start( this.strDTXCのあるフォルダ名 + @"\Manual.chm" ); + } + catch + { + this.toolStripMenuItemDTXCreaterマニュアル.Enabled = false; + } + } + private void toolStripMenuItemバージョン_Click( object sender, EventArgs e ) + { + this.dlgチップパレット.t一時的に隠蔽する(); + + Cバージョン情報 cバージョン情報 = new Cバージョン情報(); + cバージョン情報.ShowDialog(); + cバージョン情報.Dispose(); + + this.dlgチップパレット.t一時的な隠蔽を解除する(); + } + //----------------- + #endregion + + #region [ GUIイベント:ツールバー ] + //----------------- + private void toolStripButton新規作成_Click( object sender, EventArgs e ) + { + this.tシナリオ・新規作成(); + } + private void toolStripButton開く_Click( object sender, EventArgs e ) + { + this.tシナリオ・開く(); + } + private void toolStripButton上書き保存_Click( object sender, EventArgs e ) + { + this.tシナリオ・上書き保存(); + } + private void toolStripButton切り取り_Click( object sender, EventArgs e ) + { + this.tシナリオ・切り取り(); + } + private void toolStripButtonコピー_Click( object sender, EventArgs e ) + { + this.tシナリオ・コピー(); + } + private void toolStripButton貼り付け_Click( object sender, EventArgs e ) + { + // マウスが譜面上にあるならそこから貼り付ける。 + + Point ptマウスの位置 = this.pt現在のマウス位置を譜面の可視領域相対の座標dotで返す(); + Size sz譜面の可視サイズ = this.sz譜面の可視領域の大きさdotを返す(); + + + if( ( ( ptマウスの位置.X < 0 ) || ( ptマウスの位置.Y < 0 ) ) || ( ( ptマウスの位置.X > sz譜面の可視サイズ.Width ) || ( ptマウスの位置.Y > sz譜面の可視サイズ.Height ) ) ) + { + // マウスが譜面上になかった → 表示領域下辺から貼り付ける + + this.tシナリオ・貼り付け( this.mgr譜面管理者.n現在の譜面表示下辺の譜面先頭からの位置grid ); + } + else + { + // マウスが譜面上にあった + + this.tシナリオ・貼り付け( this.mgr譜面管理者.nY座標dotが位置するgridを返す・ガイド幅単位( ptマウスの位置.Y ) ); + } + } + private void toolStripButton削除_Click( object sender, EventArgs e ) + { + this.tシナリオ・削除(); + } + private void toolStripButtonアンドゥ_Click( object sender, EventArgs e ) + { + this.tシナリオ・Undoする(); + } + private void toolStripButtonリドゥ_Click( object sender, EventArgs e ) + { + this.tシナリオ・Redoする(); + } + private void toolStripButtonチップパレット_Click( object sender, EventArgs e ) + { + if( this.toolStripButtonチップパレット.CheckState == CheckState.Checked ) + { + this.dlgチップパレット.t表示する(); + } + else + { + this.dlgチップパレット.t隠す(); + } + } + private void toolStripComboBox譜面拡大率_SelectedIndexChanged( object sender, EventArgs e ) + { + C小節.n基準の高さdot = 192 * ( this.toolStripComboBox譜面拡大率.SelectedIndex + 1 ); + + this.pictureBox譜面パネル.Refresh(); + } + private void toolStripComboBoxガイド間隔_SelectedIndexChanged( object sender, EventArgs e ) + { + switch( this.toolStripComboBoxガイド間隔.SelectedIndex ) + { + case 0: + this.tガイド間隔を変更する( 4 ); + return; + + case 1: + this.tガイド間隔を変更する( 8 ); + return; + + case 2: + this.tガイド間隔を変更する( 12 ); + return; + + case 3: + this.tガイド間隔を変更する( 16 ); + return; + + case 4: + this.tガイド間隔を変更する( 24 ); + return; + + case 5: + this.tガイド間隔を変更する( 32 ); + return; + + case 6: + this.tガイド間隔を変更する( 48 ); + return; + + case 7: + this.tガイド間隔を変更する( 64 ); + return; + + case 8: + this.tガイド間隔を変更する( 0 ); + return; + } + } + private void toolStripButton選択モード_Click( object sender, EventArgs e ) + { + this.t選択モードにする(); + } + private void toolStripButton編集モード_Click( object sender, EventArgs e ) + { + this.t編集モードにする(); + } + private void toolStripButton先頭から再生_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerで最初から再生する(); + } + private void toolStripButton現在位置から再生_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerで現在位置から再生する(); + } + private void toolStripButton現在位置からBGMのみ再生_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerで現在位置からBGMのみ再生する(); + } + private void toolStripButton再生停止_Click( object sender, EventArgs e ) + { + this.tシナリオ・Viewerを再生停止する(); + } + //----------------- + #endregion + + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.resx b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.resx new file mode 100644 index 00000000..539660df --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.resx @@ -0,0 +1,570 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 220, 17 + + + 408, 17 + + + 572, 17 + + + 739, 17 + + + 932, 17 + + + 17, 39 + + + 203, 39 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAABgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A+vr6APjDxQDyjo8A4Q8PAHIICADvUFEAfmlpAPHn5wDKxsYAnZqaACrp + 7wB58PQAyvn7AP///wAREREREREREREREiEhERERERERERERERERERERERIiIiERIi4iEiERERERERER + EREREREhESIiIiLu7d3u4iIREREiIiIRERERISIiLu7d3e3dzMzM3e7u7u4iIiIhIhESLu7t7dzMzMzM + zMzMzN3d3d3d3e7iIhEiLu3dzMzMzMzMzMzMzMzMzMzM3N3d4iERLu3czMzMzMzM3buM3d3d3d3d3d3e + 4iEREi7t3MzMzMzd6riKru7u7u7u7u7uIhERERIu7u7u7u7umoaKqRERIREhIRERERERERERESEpkpKS + pIZoqZIRERERERERERERERERERk5ozmaSGZmizIREREREREREREREREREZk3RLOkZmZmaLqRERERERER + EREREREREpl1Z3RGVmZmYIqZERERERERERERERERIpN1VYd2ZmZmZmipIhERERERERERERERKTRFVVdl + ZWZmZmaqmqqpmSERERERERERmTRHVVZVZmZmZma0uIu6qZkhEREREREikzR0VVVWVWZmZmiIZgYIi6qS + IRERIpOTNHdVVVVlZlVmZmZgYGBgAIuikRESKTNEdVVVVVVVVWZWZmZmZgYAYAi6mRESk3d1dVVVVVVV + ZWVmVmZmYGYGAGBoopERmTR3VVVVVVVVVlZWZmZmZmBgYAAAipESKZNFdVVVVVVVVVVlZWZmZgYGBgBg + C6ERIiNHdXVVVVVVVWVWVmZmZmZmBgYACKERESk3dVVVVVVVVXVlZWVmZmZgYAAACKIREik3d3VVVVVV + d3R3ZWZmZmZmZmZoupERESmUd3V1VVVVczREREt4eIiIi7uqqZERESKUd3dVVVVVczM0QzMzo6OqOpmZ + mSERERKTR3d1VVVXQ5mTOZKSmSKSkpGRkREREREpNEd3VVVXQ5kpkpGRkpkZkREREREREREpk0d3dVVX + Q5kpERESIRIREiIiEREREREpNHR3dXVUQ5kiIiIiIiIiIikiIhERERIpNEd3d1d0qpkimZkimZkpKZmZ + kiERERKZRER3d1VLq6qZmamqmqqqqqqqmSIRESKTRERHd3eLi7qqqqqqu7u6uru7qSIRERKTNERHR3iI + iIuqq7qruIi7u4i7upIRERKTREREd3oimou7mrupqLqripmrqpIRESKTM0RER0kiIqu7IruiKCK4kiIq + qpIRESKTMzREREkqgiiLIruyKS6LIooiqpIRERKTMzQ0RKkriiq7Iou6IiiKKouqqpIRERIjMzNEQ6kr + ixqIIou7IpiKKoi7upIRERGZMzM0Oakqiiq7IoiLIii5KriqqpIRERIpkzMzmZkqsiu7Iou5Iiq6Kbsi + qZIREREpk5MzkpIiIpoiIimiKhKqIpIpqSEREREimTOZIiIiKZkiIiKSmZKZkiKZkiEREREimTmSIRIi + IiIikpKSIiIiIiIiIRERERESKZkiIRERERERERERERERERERERERERERIiIhERERERERERERERERERER + EREREREREREREREREREREREREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAA + AAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD6+voA9Ly+APKMjgDhEBEAdQ0NAO1R + UgDu5OQAf3p6AKmmpgDR0NAAOenvAIjz9wDP+vsA////ABERERERESIiEhERERERERERERERIiIu7eIR + EREREREREiEi7d3d3MzN3u7u7iIhERLt3czMzMzMzM3c3d3d7iEe7czMzMzMyZzMzMzNzd4hES7c3MzM + 25ab7u7u7u7iERERIu67uIRmaYIREREREREREREjekuWZmabIREREREREREShFV0VmZmaoIiESERERER + IoRVVlZmZma+u7giERERERg0dVVWVmZplmaauBEREog0dVVVZWZmZmYGAGq4IihHd1VVVVVWZmZgYGAA + myEoN1VVVVVWVWVmZmYGAAmyIiN1VVVVVVZWZmZgYAYAkhEjd1VVVVVVZmZmZmBgAKIRI0d1VVVXRHd3 + ZmZmmZqyESJHd1VVVIhDizszu7iIIhEShEdXVXSIiIIogigiIiERESNHdVV0u4iIiIi4uIgiERKER3dV + dLu4i7u7u7u7ghEihER3d6qqqqq6qqqqq7gREjREd3eqmZqqqZmZmaq4ERgzREd6i6mbqbubqbuquxEi + M0RESygqkrmyspIhGrgRIjMzRDgpK5G5kiiRqbu4ERKDM0OIKiiRuZgroZqquBESiDM4iCsrooqiKKK7 + K4gREYgziCIiKCIigYGyIiiCERIoiCESIigoKIiIKCKCIhERIoIhEREREiIiIiIiERERERERERERERER + ERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAA////AAD/ + /wD/AP8AAAD/AP//AAAA/wAA/wAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGcAAAAAAAYGd2AAAAAABnZ2cHAAAABmZmdnZ3AABmZmZ2d3dwAGZmZmZ2 + d3AABmZgAAAAAAAAZmAAAAAAAAZgAAAAAAAABgYAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////APr6 + +gBoZ2gA//z9AP319wD/+/wA/vr7APLu7wD76u0ATEZHAPrn6gD99vcA8uvsAPvh5AD7294A++XnAP/1 + 9gD+9PUA/fP0APvHygD5ztEA+9fZAP/v8AD87u8A+Z6hAPuusQD7ur0A+b/CAPvCxQD019gA+uHiAP7m + 5wD96OkA/uvsAPlUVgD6b3EA+nd5AO9zdQD6fH4A121uAPqChQD6hogA+ouOAPqOkQD7kpQA+paZAPqb + nQD6pacA+bO1APq2uAD7zM0A+9LTAPkGBgD2BgYA8QYGAOsGBgDkBgYA+gcHANoGBgDSBgYAywYGAMQG + BgC8BgYAtAYGAKwGBgCkBgYAnAYGAPoKCgCTBgYAjAYGAIQGBgD6DA0AewYGAHIGBgBqBgYA4Q4OAGIG + BgD6EBAA2w4OANcODgBaBgYAyw8PAL8ODgBSBgYA+hUVAEcGBgCbDg4APAYGAPkaGgDpGRkAgg4OAHoO + DgA0BgYA2BoaAPohIgDHGhoAaw4OAO4gIAAsBgYAuhsbAKgZGQD6KCgAkhcXAPInJwBWDg4A3iYnACMG + BgD6LCwA+i8wAPAuLwD6MzQA+js7AOY4OQDOMzMAeB4eAPpAQQD1Pz8AZRsbABkHBwD6SEkATxcXAL44 + OAD4T1AAzkVGAOZPTwD4Xl8A3VRUAEYbGwD6Z2gA62hpAIs/PwCkT08AcTs7APKEhAA2Hh4A84iIAIhP + TwC6bW0ATi8vAN6IiADxlJQA0YiIAPGengCUaGgA3J6eAPO1tQDzwMAAq4iIAJZ6egDbtrYA8czMALmd + nQD209MA68zMAP7f3wBeU1MA/eLiAP7k5ADItrYA3cvLAPTi4gB0bGwA/u7uAPjo6AD66+sA49XVALes + rAD+8fEA3dPTAPvx8QD57+8Avra2AP/39wD27u4A//j4AOfg4ADo4uIA/vn5APDt7QDPzMwAoqCgAI2L + iwDV09MA//7+AK+urgAdExIAKiAfAPP+/gD6//8A/f//AP7//wAK5+8ADejwABHo8AAU2+EAGenwACXq + 8QAj3OIAJcLIADHr8gA67PIARe3zAFbv9ABm8fYAbvH2AGfi5gB58vYAiPT3AGasrgCX9fgAq/f6ALPq + 7ADD+fsAyfr7AM77/ADH7O0A1fv8AN38/QDT7O0A4/z9AHTi5wBpxckAvPj7AOv9/gC30dMA+P7/AP39 + /QD7+/sA+Pj4APf39wD09PQA8fHxAPDw8ADv7+8A7OzsAOrq6gDn5+cA5OTkAOHh4QDb29sA1dXVANLS + 0gDQ0NAAysrKAMXFxQDAwMAAurq6ALW1tQCpqakAm5ubAJKSkgCGhoYAgICAAHl5eQD///8AAQEBAQEB + AQEBAQEBAQEBAQEBAQG/vr6+vr8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAb++vr6+vr6+ + vr284Nra4Ly9vr8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAb+/v76+vbzg3Nrc3ODg2tff0tDS09XZ3ODi + vb29vb29vb6+vr++AQEBAQEBAb++4uK8vLzg2tfT0tLS0tPS0M3LycjIyszP0t/X2dnZ2dnZ2trc4ODi + vb6+vwEBvr3g2tnW39PT0s/LysjIycrJyMXEwcDBw8TFycvNz8/Pzc/P0NDS0tPf19rg4r4Bvbzc1tPQ + zMvKyMXEwsDAwMHBwcTFxcbHx8bGxcjJycnJycnJysrKy8vN0NPX4L2/vr283NXSzMnFxMLBwMDAwMDC + xcrO3d7RCt7Ozc3NzczMzM3Nzc3Nz8/Q0tPW4L2/Ab++4uDZ09DMy8rKysrKysrLzNLU4bWFouHh2NfX + 19fX19fX19fX2dnZ2drg4r4BAQG/v77i4NrX1dXf39/f39/V1tvvn5RUiZ+36r29vb3ivb29vb29vb29 + vb6+vwEBAQEBAQG/vr694uLi4g0ICAji6+ugmINNdpCfsQgBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEYmZeXl5qhoZqRhEpLTXaJrKkIAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARgfkiiMkYya + lo5nR0pKTVFRiZipCAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAR+Xgj1gfCiRjmVFR0dKSk1RVIWf + 7wgBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBF50zgjw9U3x8ekNDRkdJSktNUWmQoLG/CL8BAQEBAQEB + AQEBAQEBAQEBAQEBAQGjozSPiF48PXJ8ZEFDQ0ZHSUpLTVGFn6mpt6C0t+7p6QEBAQEBAQEBAQEBAQEB + AQEXnTOIiH1QPT1gZEFCQ0VGR0lKS012lJ+YkKK2mKy0t+/qAQEBAQEBAQEBAQEBARedMzIqgoJxPD1S + U0BBQkNFRklJSmGJkIV5WF1jh5yitfjy6QEBAQEBAQEBqCAWFjMyL4F1Wm5aTzxSPj9AQUJDRkZJXHNz + UVRWWFhdY2trh6K19OrqAQEBARESmxQaLi0kXzU2Nzg5TDs8PT4/QEFCQ0VHW1xLTVFUVlZYXWNrd7oK + trTv6gEBAREiM4F7cHBmTkQ1Njc4OTs7PD4+P0BCQkVGR0lKS01RVFZYWF1ja3d3uwO06uoBAQGjmzMs + dGxfWU5ENTc3ODk7Ozw9Pz9AQkNFRkdJSktNUVRWWF1dY2t3d7oDtO8BAa2to5sbJ3BsX1VOOjY3Nzg5 + Ozw8Pj8/QUJDRUZHSkpNTVRUVlhdY2trd3e6tfIBAQGtERGbLXRvZl9VSDo2Nzg4OTs8PT4/QEFCQ0VG + R0lKS1FUVlZYXWNra3d3nPIBAQEBARGeGnt0b2ZZVUg1Njc4OTk7XnJgU0BBQkNFR0lKS01RVFZWWF1j + a2t3orQBAQEBra0gHYF4cG1mWU5ENTY3ODlxgoIoKHJ6ZWVXRUZJSktNUVFWeYCAi5y2rO8BAQEBAa0X + NCojeHBtX1lORDY2N1qCkpKPjIyMjI6OioSEhISEkJCQlJiYrKy07+oBAQEBAa2onjCBI3hwbF9VTjo1 + N2KCMzSZlyiPl5eampqWlpagoKCgoKmxsLEICAgBAQEBAQGvITMrfnt0dGxfVUg6NnWIMx8fH5mZoaur + q6urrq6urq6urggBCAEIAQEBAQEBAQEBrSAUMCuBeHBmX1VINXsqMZ0YGBgfGBgBqwGrq66uAa6uAQEB + AQEBAQEBAQEBAQEBr6gWGy1+eHRvZllOVYEqMZ2joxgBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + siI0GSSBI3hwbV9ZaIaNl6Sl4+Pj5ALkAgICAgICAgICAuXm5gLjuAEBAQEBAQGyEp0aKiUkfiN4cG5i + f5GWoKbr5+fn6urq6uvs7e3t7Ovr7O7v7+3p5uMBAQEBAQEHqDQuLCklgX57dHFqjpinp5/w7u3u8PDw + 8PDy9PT087e38/X29rTw6+bjAQEBAQatITMZLispJYF+e3FyipX9trX38/K09vb19fa5tbW1+fj4ubX6 + +rn17+nkAQEBAQESnhswGS0rJySBI3yKlaKiov21+Pf3+fn4+Ln7/f79tvr6tvz9/Pr48uwCAQEBAQQS + IRwaMC8tiCckfn+gAgLp+P62tfnu8vr58+74A/ny+Pz89Ozv9vr48+3lAQEBAQQREB0yGhkvLCongiiw + AgICAvH8+voCAvv58wLknAIC+/3vAgICArf38u3lAQEBAQStDhQcMRoZLiwpJpGwArn+AgL9tvsCAvy1 + +QIC7gLuorUCAv33AgL2t+3lAQEBAQSyIhUUGzEwGS4rjZbuArkD8gL4tvwCAv62+vUCAgL9ovIC9v22 + 9vP38u3lAQEBAQSyqBYzHRsxMBkuk6DtArkD+QL3tvwCAqL8+/sCAu4D/vAC9/39trX48+3lAQEBAbgE + Ew+ZMx0bGjAdHqnsAvgD8QL2+/wCAqL9/LUCAgL+tvAC9vz9+PX48uwCAQEBAbgEDBAWNBQcMjEPpLGz + AvX6AgL5+foCAv22++8CAgL1+fMC7Pq1AgL18OnkAQEBAQEErQkPFhUUHA8gqg3nAgICAuv0AgICAgLr + 9gIC8QIC9PICAugCAu7w6+bjAQEBAbi4BxMODx4VFiCosgLmAgLl6+/uAgICAgLn7ALo7+cC6+zr5gIC + 6+7q5uMBAQEBAQG4BgUJHw8WIhMGAePk5ufn5+bl5efn6Ono6Ofn5ubm5uXl5ebn5+Xk4wEBAQEBAQEB + uAcTCw4YDLIGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAeMHsgyyBwQGAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAbjjBAQEAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAIAAAA + AACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A+vr6AP/6+wD++foA++nrAP309QD07O0A+trdAPmw + tAD5w8cA+8fKAPrO0QD8290A+9/hAP3t7gD5naAA+qOmAPm1uAD6vsEA+dLUAP3k5QDr2NkAXRITAPpO + UAD1WVsA+l9hAPl0dgD6f4IA1G5vAPSFhgD7i40A+I+QAPuTlQDhhIUA+ZWYAPqanAD7qKoA/Le5APzM + zQDzBgYA7AYGAOMGBgD5BwcA2wYGANMGBgDOBgYAxgYGAOYICAC7BgYAsgYGAKsGBgCkBgYAnQYGAJMG + BgCMBgYAywkJAIQGBgD6DAwA6QsLALYJCQB5BgYAdQYGAG4GBgDwDg4ArAoKAGkGBgDRDQ0AYQYGAF0G + BgB/CQkAUwYGAPoTEwDHDw8AuQ8PAEwGBgDaExMARAYGAFkICADDExMAOwYGAPobGwDhGBgA8xsbADIG + BgCOEhIA+iIjAC0GBgDpIyQA+igpAPImJgAmBgYAVg4OAKgcHADxKSoA+i0tAMonJwD6NDUA5TExAPI1 + NQD6PT4AchwcABoHBwCNJycA+UhJAOJERAD6VVYA+lpbAMNNTQB0Li4A+WprAN5eXgDsZmYAJBQUAHxJ + SQDxl5cATTExAPCdnQDilZUAxoyMAOmsrACZdHQAnn19AMuhoQB5YGAA9MPDANy0tACrkJAA/tfXAOfF + xQD+3t4A8dLSAPrc3AD03NwA3MnJAP3o6AD25OQAzMHBAKyjowD98fEA39XVAJyVlQD/9fUAkIqKAP/2 + 9gDm3t4A//j4AIB8fAD48vIA6uXlAMzIyAD08PAA//39AP78/AD59/cA9fPzAO3r6wDn5eUA//7+AP38 + /AD29fUA7+7uAOfm5gDh4OAA2djYAM7NzQCPjo4AIwgHAGtqaQDt/v4A9f7+APT9/QD2/v4A+f//APv/ + /wD8//8ABOfvAA7c4wAQ5+8AFr/FAB3p8QAc4+sAFrK3ACbr8QA36/EAQO7zAE7u9ABR7/UAUO3yAE3h + 5gBU7/UATd3iAFfw9QBa7/QAZvH1AHLx9gBQpqkAgvP3AIft7wCW9fgAp/f5AML5+wDO/P0Az/r7ANX8 + /QDO9PUAt9bXANr8/QBb7fMAXe/1ALf4+wDJ+fsAzfr8ANL7/QDl/P0A2+ztAPL+/wD3/v8A1tncANna + 3ABUVFUA+/v7APn5+QD4+PgA9vb2APX19QDy8vIA8PDwAOzs7ADo6OgA5OTkAOPj4wDe3t4A29vbANbW + 1gDU1NQA0dHRAMrKygDIyMgAx8fHAMHBwQC+vr4Au7u7ALi4uACxsbEAra2tAKqqqgClpaUAoaGhAJyc + nACUlJQAioqKAISEhAB6enoAc3NzAP///wABAQEBAQEBAQEBAQEBAa6uAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAa+s2KutqqnP0tLMqa0BAQEBAQEBAQEBAQEBAa6srKqpz9LHx8jIxdG4uNDFyNTPzMzMz9apqq8B + AQGt1tPIx8XCube0t7e0srG2s7W4vtHBwdHCw8XH0s/ZAa3WycW5tLKwsLCwsLe9xNzEvby+u7q8vsDR + wsPHyakBAa/Y1MfCwLu6vLzBxs56F4/OzcvK1MrLy8vVzM/WrQEBAQGv2NbW19rq2tfpe2dEZX+R3wEB + AQEBAQEBAQEBAQEBAQEBAYt9byJ2gXdVPT9EF3mM3gEBAQEBAQEBAQEBAQEBAQGZh3VDSWwdXTY5PUJF + XH+Vn58BAQEBAQEBAQEBAQEBmIsMc2IuYGBBNTY5PkJFcoaMiaXooeEBAQEBAQEBAQGSFRMccEwuTzwz + NTc5PkJyenJ0dHyN8KOfAQEBnpAVgAsQa1pYUi04MTI0NTdGZWVOS01UV6d0puninwGQgh9ua1krKCkw + LC0vMTI0NjdGP0RHS1BUW2ZxqOygnwMVJhpfUUgrKCkqLC0vMTM0Njk9P0RHTVBUW2Zm3OvgA44PJWRZ + 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 + ZDxjfQEBAQEBAQEBeVZUXDA2PWB9AQEBAQEBAWhZJk4qMjc+bWcDhAEBZltTIkAtKCszTT9FSIKGgxJQ + RB8jJScpLDQ4QUZLVYV4GU9CICQ6Si4vNTtDR4FxdB0UTDkhV2FaYl5fZWtzfgEIHBNJMVhub4ABensB + AQEBCgsWUlFpAQEBAQEBAQEBARAMGBUbAQEBAQEBAQEBAX8RDhoXagEBAQEBAQEBAQF/BwkNHnQBAQEB + AQEBAQEBAQIGD3ABAQEBAQEBAQEBAQF8BAV/AQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAAAwAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAwAAAAIAAAACAAAAAgAAAAMAAAAGAOvrDQDf + 6hgA6PAhAO73HgDk8hMA5uYKAAAABQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAQA5uYKAObyFADl7R0A5u8fAO3tHADg6xkA5/MVAOn0FwDo + 8CEA6e8vBOXwRQPl7WEC5+52AujvcAPn8FUA5u48AObzKQDs9hsA3+8QAAAABwAAAAQAAAAEAAAABAAA + AAQAAAAEAAAABAAAAAMAAAADAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAcAAAAJAObmCgDo6AsA7e0OAObyFADm7x8A5vAyAOjyTgLp8GgC6PFwAujvbQPo + 8GQD6e5bA+fvYQLl7nYC6PGOAufwqAPm7sMC5+/TAubuzwHm7rkC6O+eAubwhALn7mkD5O5LAObwMgDm + 7CkA5vMpAOftKwDn8ysA5/MqAObsKADj6iUA6PAhAOXtHQDp9BcA4fARAOjoCwAAAAYAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAIAAAAGAN/vEADe7x8A6O4sAOjxNwTn70ED6O5MA+jxWgLo724C5u6HAubupQPn + 778D5/DMAubvzgPn8McB5+/AAejuxQLn7tMC5+/fAufv6QLn7vIC5u73Aubu9gXZ3/AC6O/lAubv2QPn + 7sYC5u+qAubvjwLm7oUC6PCGAufuigLn7osC5+6JAubuhALn730C5+52AuXvbQPn72EA5u9SAOfvQQDq + 7zAA5+8gAOPjEgAAAAcAAAACAAAAAAAAAAQA6OgLAOPsGwDm6zQA5u1TAufwdwLo8JgB5u+wAefwwALn + 784C5+/bAufu5gLo7+8C5+72Aufv+ALm7vcC5+/0Aufu9QLn7vMC5/DqAufv4QLn790H19/gD7vB5g29 + wukG19/lBdff4gLo79oC5+7RAefuyAHo78UB5+7HAefvyQHn78kB5+7HAebuxAHn78AB5++8AefwtgHo + 764C5u6jAubvkQLo7ngD6PBXAOrvMQDm8hQAAAAFAAAAAQAAAAIAAAAGAO3tDgDm7h4A5e06AubwZwLo + 8J0D5+7HAufv3QLn7+oC5+/xAufv9ALm7vYC5u73Aubv+ALm7/gC5+/2Aufu8ALn79sD6O+6DNHYoA3N + 1JIcn6OhIYeKsDYzNeARq7KpB87VmwLn7pIC6O+RAufvkwLp8JUC5/CXAubumQLo7pgC5/CVAufvkwLo + 75IC5u+RAufvjQLn8IkC5u6FAujxfALm728D5/BWAObrNADo6BYAAAAFAAAAAQAAAAAAAAABAAAAAwAA + AAcA4/ESAOfzKgPp71EC6PB6AujwmALn8KoB5+61AejwuQHm77sB5++8AejvvAHo77wB5u+7AebvsALn + 7pQC5+5sFb3EUzRxdlZHNzh+TRITz0EgIbAlaG1dGIiOSA6srzsA6e4uAOTvMADq7zEA6/AyAOvwMwDm + 8DMA6u8xAOrvMADk7zAA6e8vAOPuLgDo8ywA5+0rAOftKgDl6ycA5+cgAObmFAAAAAgAAAACAAAAAAAA + AAAAAAAAAAAAAQAAAAEAAAADAAAACADm8hQA4/EkAOXvMQTl7ToE5+8/BOfvQQTo8EIE5OxDBOTwQwTk + 8EME6PBCBOfvQADo7TgpoKU0SF9fMGIZGVJgCwx9WQYG/1AJCbZEExZQOxoaMis1NRUAAAAFAAAABQAA + AAUAAAAFAAAABgAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAQAAAAEAAAABAAAAAQAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAHAAAABwAA + AAeDRE4YfUROGHdEThhwRE4YAAAACFpXVxleREQYdg8PNnEJCWRpBgbFYAYG/1gGBudPBgabRwYGTD8G + Bh44BgYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzgYGEMYGBi2/BgY1tgYGNK4GBjSmBgY0nQYGHo8ODh+LBgY0ggYGY3kGBrRwBgb/aAYG/18G + Bv9WBgbvTQYGtEUGBks+BgYtNgYGEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADbBgYQ1AYGHswGBkzFBgabvgYGerUGBmOtBgZ6pAYGNJsGBkuTBgZ6igYG7oEG + Bv94Bgb/bwYG/2UGBv9dBgb/VQYG/0wGBrNEBgZjPAYGLTQGBhEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgBgYf2gYGNNMGBpvLBgb/xAYG77wGBrSzBgaarAYGY6IG + BnqaBgbmkAYG/4gGBv9/Bgb/dgYG/20GBv9kBgb/XAYG/1MGBv9KBgbFQwYGTDoGBh80BgYQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOsGBhDlBgYe3wYGNNkGBpvRBgb/ygYG/8IG + Bu+6BgbEsgYGtKkGBsWhBgb/mAYG/48GBv+GBgb/fQYG/3UGBv9rBgb/YgYG/1oGBv9RBgb3SQYGm0EG + BjU6BgYeAAAAACsGBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AYGEe8GBhHqBgYt5AYGY94G + BnrYBgbv0AYG/8gGBv/BBgbVuAYGxLAGBuaoBgb/nwYG/5cGBv+OBgb/hAYG/3sGBv9zBgb/aQYG/2EG + Bv9YBgb/UAYG1UgGBktABgYtOAYGLTEGBi0pBgY1IwcHNB0HBy0XBwceEQgHEA0ICBAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AYGEPMG + Bh7uBgY06QYGeuMGBnrcBga01gYG988GBv/HBgb/vwYG57cGBu6vBgb/pgYG/54GBv+VBgb/iwYG/4IG + Bv96Bgb/cQYG/2gGBv9gBgb/VwYG5k4GBnpHBgZLPgYGYzYGBpsvBgaaKAYGeiIGBmMcBgdLFgcHNBEH + CC0NCAceCAgIEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD6DQ4Q+gcHHvcGBjXyBgZL7QYGeugGBpriBgab3AYG1NQGBv/OBgb/xgYG9r0GBve2Bgb/rQYG/6UG + Bv+cBgb/lAYG/4oGBv+BBgb/eAYG/3AGBv9mBgb3XgYGs1UGBptMBgbFRAYG7jwGBv81Bgb/LQYG/ycG + BucgBwe0GgcHmhUHB2MQBwhLCwgILQgICBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPpB + QhH6NDUe+ikpLfodHi36FBQ0+gwMS/oGBmP3Bgab8gYGxewGBu/nBgbV4QYG5toGBvfTBgb/zAYG98QG + Bv+9Bgb/tAYG/6wGBv+jBgb/mwYG/5EGBv+IBgb/fwYG/3cGBvduBgbmZQYG5l0GBv9UBgb/SwYG/0MG + Bv87Bgb/NAYG/ywGBv8mBgb/IAcG/xoHB+cUCAeaDwgIYwsICDUJCAgRDQgIEQAAAAAAAAAAAAAAAAAA + AAD6ZWcQ+llaEfpLTS36P0BL+jIzY/omJ3r6HB16+hMTm/oLC+b5Bgb/9QYG//EGBv/sBgb/5gYG/+AG + BvfZBgb/0gYG/8oGBv/CBgb/uwYG/7MGBv+qBgb/ogYG/5kGBv+QBgb/hwYG/34GBvd1Bgb3bAYG/2MG + Bv9aBgb/UgYG/0oGBv9CBgb/OgYG/zMGBv8rBgb/JAYG/x4HB/8YBwf2EwgIxQ4ICHoKCAg0CggIHg4I + CBEAAAAAAAAAAAAAAAD6b3IR+mNkH/pWV0v6SUrV+js95vowMO/6JSbn+hoa7voREv/6Cgr/+QYG//UG + Bv/wBgb/6gYG/+QGBv/eBgb/2AYG/9EGBv/JBgb/wgYG/7kGBv+yBgb/qQYG/6AGBv+XBgb/jgYG/4YG + Bv98Bgb/dAYG/2sGBv9hBgb/WQYG/1AGBv9IBgb/QAYG/zkGBv8xBgb/KgYG/yMGBv8eBgf/FwcH/xMI + B+YNCAiaCQgINAsICBEPBwcRAAAAAAAAAAAAAAAA+m1vHvpgYjT6U1VM+kZIm/o5O/f6Li7/+iMj//oY + GP/6EA//+gkJ//gGBv/zBgb/7gYG/+kGBv/kBgb/3QYG/9cGBv/QBgb/yAYG/78GBv+4Bgb/sAYG/6cG + Bv+eBgb/lgYG/4wGBv+EBgb/ewYG/3EGBv9pBgb/YAYG/1cGBv9PBgb/RwYG/z8GBv83Bgb/MAYG/ykG + Bv8jBgb/HAcH/xYHCP8RCAf2DAcImgkICDQLCAgeAAAAAAAAAAD6g4YR+nd6EPpqbR76XWA0+lFTY/pE + RbP6ODj/+iwt//ogIf/6Fxf/+g8P//oIB//3Bgb/8wYG/+4GBv/oBgb/4gYG/9wGBv/VBgb/zgYG/8YG + Bv++Bgb/twYG/64GBv+lBgb/nQYG/5QGBv+LBgb/ggYG/3kGBv9wBgb/ZwYG/18GBv9WBgb/TgYG/0UG + Bv89Bgb/NQYG/y8GBv8nBgb/IQYH/xsHB/8VBwf/EAgH7wwICGMICAgtAAAAAAAAAAAAAAAA+oGDEPp1 + dxD6aGoQ+lxeNPpOUJv6QkP/+jU3//opKv/6Hx//+hUV//oNDf/6Bgf/9wYG//IGBv/tBgb/6AYG/+EG + Bv/aBgb/1AYG/80GBv/FBgb/vQYG/7UGBv+sBgb/pAYG/5sGBv+SBgb/iQYG/4AGBv94Bgb/bwYG/2YG + Bv9dBgb/VQYG/0wGBv9EBgb/PAYG/zQGBv8tBgb/JgYG/yAGB/8aBwf/FQgH/w8ICLMLCAgtAAAAAAAA + AAAAAAAAAAAAAAAAAAD6c3UQ+mZoLfpZW3r6TU32+j9A//ozNP/6Jyj/+h0d//oUFP/6Cwz/+QYG//UG + Bv/xBgb/7AYG/+cGBv/gBgb/2gYG/9IGBufLBgbVxAYG5rwGBvezBgb/qwYG/6IGBv+aBgb/kQYG/4cG + Bv9/Bgb/dQYG/2wGBv9kBgb/WwYG/1MGBv9KBgb/QgYG/zsGBv8zBgb/LAYG/yUHBv8fBwf/GQcH/xQI + CJoPCAg0AAAAAAAAAAAAAAAAAAAAAPmIixH6fX8Q+nFyLfpkZWP6V1nu+kpL//o9P//6MTL/+iYm//ob + G//6ERL/+goK//kGBv/1Bgb/8AYG/+sGBv/lBgb/3wYGxdgGBpvRBgaayQYGmsIGBpq6BgbFsgYG1KkG + Bu6gBgbumAYG948GBv+GBgb/fQYG/3QGBv9sBgb/YwYG/1oGBv9SBgb/SQYG/0EGBu85BgbmMgYG7isG + BtUjBga0HgYGehgHB0sSCAceAAAAAAAAAAAAAAAAAAAAAAAAAAD6hokR+np9HvpucEv6YmTE+lVW//pH + Sf/6Ozz/+i8w//ojJP/6GRr/+hAR//oJCf/4Bgb/9AYG//AGBv/qBgbu5AYGm94GBkvYBgZM0AYGY8kG + BnrBBgZ6uAYGerEGBnqnBgZ7nwYGepcGBpqNBgazhAYGtHsGBrNyBga0aQYGtGEGBptYBgabUAYGmkcG + BnpABgZjOAYGYzAGBksqBgZMIwYGNBwHBx8XCAgRAAAAAAAAAAAAAAAAAAAAAAAAAAD5jpIR+oOGHvp4 + ejT6bG6b+l9h9/pSVP/6RUf/+jg6//osLf/6ISL/+hgY//oOD//6Bwj/+AYG//MGBv/uBgbm6QYGmuMG + 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 + AGwAAAB4+vr6//r6+v8AAACRAAAAggAAAHdCQkKC+vr6//r6+v/6+vr/AAAAhgAAAHXR0dHM+vr6/6en + p7MAAAB7AAAAf5KSkq6tra2sAAAASQAAACwAAAAVAAAABgAAAAAAAAAAAAAAAAAAAAD66OwQ+uXpHvri + 5Uv63eDE+tfa//nQ1P/6yMz/+cDD//m3uv/5rbHu+aOnY9qGiTJfNzkm6ujozPr6+v+pqamwPz8/iPr6 + +v/6+vr/AAAAWAAAAFQAAABi+vr6//r6+v8AAAB9AAAAcwAAAGrc3NzV+vr6//r6+v/6+vr/rKysrQAA + AFmtra2U+vr6/+bm5t0AAABjQ0NDf/r6+v/6+vr/AAAAOwAAACIAAAAPAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAA+ujrHvrk6Ev64eWz+tzf//rW2f/5z9P/+sfL//m/wv/5tbh6+aquS+GSlCGHUlQc8PDww/r6 + +v/6+vr/+vr6//r6+v/l5eXMAAAANfr6+v/6+vr/+vr6//r6+v/6+vr/6enp21lZWV/6+vr/+vr6/7S0 + tI36+vr/+vr6/wAAADUAAAAu+vr6//r6+v/x8fHl+vr6//r6+v/T09OhAAAAJAAAABQAAAAIAAAAAgAA + AAAAAAAAAAAAAAAAAAD66+4R+untEPrn6zX65Od6+uDj9/nb3v/51Nj/+c7R//nGybT5vcBj+bO2Leqe + ohEAAAAG8PDwn/r6+v/6+vr/9/f38eDg4JgAAAAeAAAAGvr6+v/6+vr/+vr6//r6+v/6+vr/8PDw1N3d + 3Zr6+vr/6+vrtQAAACDw8PDD+vr6/9jY2HYAAAAWoaGhNff39+D6+vr/+vr6/+Dg4JgAAAAbAAAAEQAA + AAgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+uvuEPrp7C355upj+ePnxfrf4v/52t3/+dPX5/nM + 0GP5xMg0+bu+EAAAAAAAAAACAAAABAAAAAgAAAALAAAADAAAAAoAAAAIAAAABwAAAAcAAAAKAAAADAAA + AA4AAAAPAAAADgAAAA0AAAALAAAACgAAAAkAAAAJAAAACQAAAAgAAAAHAAAABwAAAAcAAAAJAAAACgAA + AAoAAAAHAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPrq7hH56ew0+ebpe/ni + 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 + AACH/wAAh/8AAI//AAA= + + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/00.全体/Program.cs b/DTXCreatorプロジェクト/コード/00.全体/Program.cs new file mode 100644 index 00000000..d779c3f0 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/00.全体/Program.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace DTXCreator +{ + internal static class Program + { + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault( false ); + Application.Run( new Cメインフォーム() ); + } + } +} diff --git a/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル.cs b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル.cs new file mode 100644 index 00000000..81857e62 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.UndoRedo +{ + internal class CUndoRedoセル : CUndoRedoセル仮想 + { + public T 変更後の値; + public T 変更前の値; + + // Methods + public CUndoRedoセル( object 所有者objectID, DGUndoを実行する undoメソッド, DGRedoを実行する redoメソッド, T 変更前の値, T 変更後の値 ) + { + base.所有者ID = 所有者objectID; + this.undoデリゲート = undoメソッド; + this.redoデリゲート = redoメソッド; + this.変更前の値 = 変更前の値; + this.変更後の値 = 変更後の値; + } + public override void tRedoを実行する() + { + if( this.redoデリゲート == null ) + { + throw new Exception( "Redoデリゲートが未設定です。" ); + } + base.所有者ID = null; + this.redoデリゲート( this.変更前の値, this.変更後の値 ); + } + public override void tUndoを実行する() + { + if( this.undoデリゲート == null ) + { + throw new Exception( "Undoデリゲートが未設定です。" ); + } + base.所有者ID = null; + this.undoデリゲート( this.変更前の値, this.変更後の値 ); + } + + #region [ private ] + //----------------- + private DGRedoを実行する redoデリゲート; + private DGUndoを実行する undoデリゲート; + //----------------- + #endregion + + } +} diff --git a/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル仮想.cs b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル仮想.cs new file mode 100644 index 00000000..02a3d329 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoセル仮想.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.UndoRedo +{ + internal abstract class CUndoRedoセル仮想 + { + public E種別 eノード種別; + public enum E種別 + { + 単独, + リスト + } + protected object 所有者ID; + + protected CUndoRedoセル仮想() + { + } + public bool b所有権がある( object 所有者候補 ) + { + if( this.所有者ID != 所有者候補 ) + { + return false; + } + return true; + } + public void t所有権の放棄( object 現所有者 ) + { + if( this.所有者ID == 現所有者 ) + { + this.所有者ID = null; + } + } + public abstract void tRedoを実行する(); + public abstract void tUndoを実行する(); + } +} diff --git a/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoディレクトリ.cs b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoディレクトリ.cs new file mode 100644 index 00000000..f37fa6b4 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedoディレクトリ.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.UndoRedo +{ + internal class CUndoRedoディレクトリ : CUndoRedoセル仮想 + { + public List listノード; + public int n次にノードが追加される位置0to; + public CUndoRedoディレクトリ urd親ノード; + public int nRedo可能な回数 + { + get + { + return ( this.n現在の総ノード数 - this.nUndo可能な回数 ); + } + } + public int nUndo可能な回数 + { + get + { + return this.n次にノードが追加される位置0to; + } + } + public int n現在の総ノード数 + { + get + { + if( this.listノード == null ) + { + return 0; + } + return this.listノード.Count; + } + } + + public CUndoRedoディレクトリ( CUndoRedoディレクトリ urd親ノード ) + { + this.urd親ノード = urd親ノード; + this.listノード = new List(); + this.n次にノードが追加される位置0to = 0; + } + public override void tRedoを実行する() + { + foreach( CUndoRedoセル仮想 oセル仮想 in this.listノード ) + { + oセル仮想.tRedoを実行する(); + } + } + public override void tUndoを実行する() + { + for( int i = this.listノード.Count - 1; i >= 0; i-- ) + { + this.listノード[ i ].tUndoを実行する(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedo管理.cs b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedo管理.cs new file mode 100644 index 00000000..0f948557 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/01.UndoRedo/CUndoRedo管理.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.UndoRedo +{ + public delegate void DGRedoを実行する( T 変更前の値, T 変更後の値 ); + public delegate void DGUndoを実行する( T 変更前の値, T 変更後の値 ); + + internal class CUndoRedo管理 + { + public static bool bUndoRedoした直後; + + public CUndoRedo管理() + { + this.urd現在のリストノード = this.root; + } + public CUndoRedoセル仮想 tRedoするノードを取得して返す() + { + this.urd現在のリストノード = this.root; + if( this.root.nRedo可能な回数 <= 0 ) + { + return null; + } + this.root.n次にノードが追加される位置0to++; + return this.root.listノード[ this.root.n次にノードが追加される位置0to - 1 ]; + } + public CUndoRedoセル仮想 tUndoするノードを取得して返す() + { + this.urd現在のリストノード = this.root; + if( this.root.nUndo可能な回数 <= 0 ) + { + return null; + } + this.root.n次にノードが追加される位置0to--; + return this.root.listノード[ this.root.n次にノードが追加される位置0to ]; + } + public CUndoRedoセル仮想 tUndoするノードを取得して返す・見るだけ() + { + this.urd現在のリストノード = this.root; + if( this.root.nUndo可能な回数 <= 0 ) + { + return null; + } + return this.root.listノード[ this.root.n次にノードが追加される位置0to - 1 ]; + } + public void tノードを追加する( CUndoRedoセル仮想 ur単独ノード ) + { + int index = this.urd現在のリストノード.n次にノードが追加される位置0to; + int count = this.urd現在のリストノード.n現在の総ノード数 - this.urd現在のリストノード.n次にノードが追加される位置0to; + if( count > 0 ) + { + this.urd現在のリストノード.listノード.RemoveRange( index, count ); + } + this.urd現在のリストノード.listノード.Add( ur単独ノード ); + this.urd現在のリストノード.n次にノードが追加される位置0to++; + } + public void tトランザクション記録を開始する() + { + // リストノードを追加して開く。 + + int index = this.urd現在のリストノード.n次にノードが追加される位置0to; + int count = this.urd現在のリストノード.n現在の総ノード数 - this.urd現在のリストノード.n次にノードが追加される位置0to; + if( count > 0 ) + { + this.urd現在のリストノード.listノード.RemoveRange( index, count ); + } + CUndoRedoディレクトリ item = new CUndoRedoディレクトリ( this.urd現在のリストノード ); + this.urd現在のリストノード.listノード.Add( item ); + this.urd現在のリストノード.n次にノードが追加される位置0to++; + this.urd現在のリストノード = item; + } + public void tトランザクション記録を終了する() + { + // リストノードを閉じる。 + + if( this.urd現在のリストノード.urd親ノード != null ) + { + CUndoRedoディレクトリ item = this.urd現在のリストノード; + this.urd現在のリストノード = this.urd現在のリストノード.urd親ノード; + if( item.listノード.Count == 0 ) + { + this.urd現在のリストノード.listノード.Remove( item ); + this.urd現在のリストノード.n次にノードが追加される位置0to--; + } + } + } + public void t空にする() + { + this.root = new CUndoRedoディレクトリ( null ); + this.urd現在のリストノード = this.root; + } + + public int nRedo可能な回数 + { + get + { + return ( this.n現在の総ノード数 - this.nUndo可能な回数 ); + } + } + public int nUndo可能な回数 + { + get + { + return this.root.nUndo可能な回数; + } + } + public int n現在の総ノード数 + { + get + { + return this.root.n現在の総ノード数; + } + } + + #region [ private ] + //----------------- + private CUndoRedoディレクトリ root = new CUndoRedoディレクトリ( null ); + private CUndoRedoディレクトリ urd現在のリストノード; + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVI.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVI.cs new file mode 100644 index 00000000..b228448e --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVI.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Windows.Forms; +using FDK; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CAVI + { + public Color col背景色 = SystemColors.Window; + public Color col文字色 = SystemColors.WindowText; + public int nAVI番号1to1295 = 1; + public string strファイル名 = ""; + public string strラベル名 = ""; + + public bool b内容が同じ・AVI番号を除くwith( CAVI ac ) + { + return ( ( this.strラベル名.Equals( ac.strラベル名 ) && this.strファイル名.Equals( ac.strファイル名 ) ) && ( ( this.col文字色 == ac.col文字色 ) && ( this.col背景色 == ac.col背景色 ) ) ); + } + public bool b内容が同じwith( CAVI ac ) + { + return ( ( this.strラベル名.Equals( ac.strラベル名 ) && ( this.nAVI番号1to1295 == ac.nAVI番号1to1295 ) ) && ( ( this.strファイル名.Equals( ac.strファイル名 ) && ( this.col文字色 == ac.col文字色 ) ) && ( this.col背景色 == ac.col背景色 ) ) ); + } + public void tコピーfrom( CAVI ac ) + { + this.strラベル名 = ac.strラベル名; + if( ( ac.nAVI番号1to1295 < 1 ) || ( ac.nAVI番号1to1295 > 0x50f ) ) + { + throw new Exception( "AVI番号が範囲を超えています。-> [" + this.nAVI番号1to1295 + "]" ); + } + this.nAVI番号1to1295 = ac.nAVI番号1to1295; + this.strファイル名 = ac.strファイル名; + this.col背景色 = ac.col背景色; + this.col文字色 = ac.col文字色; + } + public void tコピーfrom( ListViewItem lvi ) + { + this.strラベル名 = lvi.SubItems[ 0 ].Text; + this.nAVI番号1to1295 = C変換.n36進数2桁の文字列を数値に変換して返す( lvi.SubItems[ 1 ].Text ); + this.strファイル名 = lvi.SubItems[ 2 ].Text; + this.col背景色 = lvi.BackColor; + this.col文字色 = lvi.ForeColor; + } + public void tコピーto( ListViewItem lvi ) + { + lvi.SubItems[ 0 ].Text = this.strラベル名; + lvi.SubItems[ 1 ].Text = C変換.str数値を36進数2桁に変換して返す( this.nAVI番号1to1295 ); + lvi.SubItems[ 2 ].Text = this.strファイル名; + lvi.ForeColor = this.col文字色; + lvi.BackColor = this.col背景色; + } + public ListViewItem t現在の内容から新しいListViewItemを作成して返す() + { + ListViewItem item = new ListViewItem( new string[] { this.strラベル名, C変換.str数値を36進数2桁に変換して返す( this.nAVI番号1to1295 ), this.strファイル名 } ); + item.ForeColor = this.col文字色; + item.BackColor = this.col背景色; + return item; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIキャッシュ.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIキャッシュ.cs new file mode 100644 index 00000000..9a1e4153 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIキャッシュ.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CAVIキャッシュ + { + public Dictionary dicAVIディクショナリ = new Dictionary(); + public int n現在のキャッシュアイテム数 + { + get + { + if( this.dicAVIディクショナリ == null ) + { + return 0; + } + return this.dicAVIディクショナリ.Count; + } + } + + public CAVI tAVIをキャッシュから検索して返す( int nAVI番号1to1295 ) + { + CAVI cavi; + if( ( nAVI番号1to1295 < 1 ) || ( nAVI番号1to1295 > 0x50f ) ) + { + throw new Exception( "AVI番号が範囲を超えています。-> [" + nAVI番号1to1295 + "]" ); + } + if( this.dicAVIディクショナリ.TryGetValue( nAVI番号1to1295, out cavi ) ) + { + return cavi; + } + return null; + } + public CAVI tAVIをキャッシュから検索して返す・なければ新規生成する( int nAVI番号1to1295 ) + { + if( ( nAVI番号1to1295 < 1 ) || ( nAVI番号1to1295 > 0x50f ) ) + { + throw new Exception( "AVI番号が範囲を超えています。-> [" + nAVI番号1to1295 + "]" ); + } + CAVI cavi = null; + if( !this.dicAVIディクショナリ.TryGetValue( nAVI番号1to1295, out cavi ) ) + { + cavi = new CAVI(); + cavi.nAVI番号1to1295 = nAVI番号1to1295; + this.tキャッシュに追加する( cavi ); + } + return cavi; + } + public void tAVIをキャッシュから削除する( int nAVI番号1to1295 ) + { + if( ( nAVI番号1to1295 < 1 ) || ( nAVI番号1to1295 > 0x50f ) ) + { + throw new Exception( "AVI番号が範囲を超えています。-> [" + nAVI番号1to1295 + "]" ); + } + CAVI cavi = null; + if( this.dicAVIディクショナリ.TryGetValue( nAVI番号1to1295, out cavi ) ) + { + this.dicAVIディクショナリ.Remove( nAVI番号1to1295 ); + } + } + public void tキャッシュに追加する( CAVI ac追加するAVI ) + { + CAVI cavi; + if( this.dicAVIディクショナリ.TryGetValue( ac追加するAVI.nAVI番号1to1295, out cavi ) ) + { + this.dicAVIディクショナリ.Remove( ac追加するAVI.nAVI番号1to1295 ); + } + this.dicAVIディクショナリ.Add( ac追加するAVI.nAVI番号1to1295, ac追加するAVI ); + } + public void tキャッシュに追加する( ListViewItem lvi ) + { + CAVI cavi = new CAVI(); + cavi.tコピーfrom( lvi ); + this.tキャッシュに追加する( cavi ); + } + public void t空にする() + { + this.dicAVIディクショナリ.Clear(); + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIリスト管理.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIリスト管理.cs new file mode 100644 index 00000000..474313f9 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CAVIリスト管理.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.IO; +using DTXCreator.譜面; +using DTXCreator.UndoRedo; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CAVIリスト管理 + { + public int n現在選択中のItem番号0to1294 = -1; + + public CAVIリスト管理( Cメインフォーム pメインフォーム, ListView pListViewAVIリスト ) + { + this._Form = pメインフォーム; + this.listViewAVIリスト = pListViewAVIリスト; + } + public void tAVIリストにフォーカスを当てる() + { + this.listViewAVIリスト.Focus(); + } + public CAVI tAVIをキャッシュから検索して返す( int nAVI番号1to1295 ) + { + return this.AVIキャッシュ.tAVIをキャッシュから検索して返す( nAVI番号1to1295 ); + } + public CAVI tAVIをキャッシュから検索して返す・なければ新規生成する( int nAVI番号1to1295 ) + { + return this.AVIキャッシュ.tAVIをキャッシュから検索して返す・なければ新規生成する( nAVI番号1to1295 ); + } + public ListViewItem tAVI番号に対応するListViewItemを返す( int nAVI番号1to1295 ) + { + if( ( nAVI番号1to1295 < 1 ) || ( nAVI番号1to1295 > 0x50f ) ) + { + throw new Exception( "AVI番号が範囲外です。--->[" + nAVI番号1to1295 + "]" ); + } + return this.listViewAVIリスト.Items[ nAVI番号1to1295 - 1 ]; + } + public void tAVI編集のRedo( CAVI ac変更前, CAVI ac変更後 ) + { + int num = ac変更後.nAVI番号1to1295; + CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num ); + cavi.tコピーfrom( ac変更後 ); + cavi.tコピーto( this.listViewAVIリスト.Items[ num - 1 ] ); + this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cavi.nAVI番号1to1295 - 1 ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI ); + this.listViewAVIリスト.Refresh(); + } + public void tAVI編集のUndo( CAVI ac変更前, CAVI ac変更後 ) + { + int num = ac変更前.nAVI番号1to1295; + CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num ); + cavi.tコピーfrom( ac変更前 ); + cavi.tコピーto( this.listViewAVIリスト.Items[ num - 1 ] ); + this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cavi.nAVI番号1to1295 - 1 ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI ); + this.listViewAVIリスト.Refresh(); + } + public ListViewItem tCAVIとListViewItemを生成して返す( int n行番号1to1295 ) + { + return this.tAVIをキャッシュから検索して返す・なければ新規生成する( n行番号1to1295 ).t現在の内容から新しいListViewItemを作成して返す(); + } + public void tItemを交換する( int nItem番号1, int nItem番号2 ) + { + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.t行交換のUndo ), new DGRedoを実行する( this.t行交換のRedo ), nItem番号1, nItem番号2 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + } + CUndoRedo管理.bUndoRedoした直後 = false; + this.tItemを交換する・ListViewItem( nItem番号1, nItem番号2 ); + this.tItemを交換する・AVIキャッシュ( nItem番号1, nItem番号2 ); + this.tItemを交換する・チップパレット( nItem番号1, nItem番号2 ); + this.tItemを交換する・譜面上のチップ( nItem番号1, nItem番号2 ); + this.tItemを交換する・レーン割付チップ( nItem番号1, nItem番号2 ); + this.tItemを交換する・カーソル移動( nItem番号1, nItem番号2 ); + this._Form.listViewAVIリスト.Refresh(); + this._Form.pictureBox譜面パネル.Refresh(); + this._Form.b未保存 = true; + } + public void tItemを選択する( int nItem番号0to1294 ) + { + this.n現在選択中のItem番号0to1294 = nItem番号0to1294; + this.listViewAVIリスト.Items[ nItem番号0to1294 ].Selected = true; + this.listViewAVIリスト.Items[ nItem番号0to1294 ].Focused = true; + } + public void tファイル名の相対パス化( string str基本フォルダ名 ) + { + for( int i = 1; i <= 0x50f; i++ ) + { + CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( i ); + if( ( cavi != null ) && ( cavi.strファイル名.Length > 0 ) ) + { + try + { + Uri uri = new Uri( str基本フォルダ名 ); + cavi.strファイル名 = Uri.UnescapeDataString( uri.MakeRelativeUri( new Uri( cavi.strファイル名 ) ).ToString() ).Replace( '/', '\\' ); + } + catch( UriFormatException ) + { + } + } + } + } + public void t行交換のRedo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 ); + } + public void t行交換のUndo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 ); + } + public void t新規生成のRedo( CAVI ac生成前はNull, CAVI ac生成されたAVIの複製 ) + { + int num = ac生成されたAVIの複製.nAVI番号1to1295; + CAVI cavi = this.AVIキャッシュ.tAVIをキャッシュから検索して返す・なければ新規生成する( num ); + cavi.tコピーfrom( ac生成されたAVIの複製 ); + cavi.tコピーto( this.listViewAVIリスト.Items[ num - 1 ] ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI ); + this.listViewAVIリスト.Refresh(); + } + public void t新規生成のUndo( CAVI ac生成前はNull, CAVI ac生成されたAVIの複製 ) + { + int num = ac生成されたAVIの複製.nAVI番号1to1295; + new CAVI().tコピーto( this.listViewAVIリスト.Items[ num - 1 ] ); + this.AVIキャッシュ.tAVIをキャッシュから削除する( num ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.AVI ); + this.listViewAVIリスト.Refresh(); + } + public void t動画プロパティを開いて編集する( int nAVI番号1to1295, string str相対パスの基本フォルダ ) + { + this._Form.dlgチップパレット.t一時的に隠蔽する(); + CAVI cavi = this.tAVIをキャッシュから検索して返す・なければ新規生成する( nAVI番号1to1295 ); + ListViewItem item = cavi.t現在の内容から新しいListViewItemを作成して返す(); + string directoryName = ""; + if( item.SubItems[ 2 ].Text.Length > 0 ) + { + directoryName = Path.GetDirectoryName( this._Form.strファイルの存在するディレクトリを絶対パスで返す( item.SubItems[ 2 ].Text ) ); + } + C動画プロパティダイアログ c動画プロパティダイアログ = new C動画プロパティダイアログ( str相対パスの基本フォルダ, directoryName ); + c動画プロパティダイアログ.avi = cavi; + c動画プロパティダイアログ.textBoxラベル.Text = item.SubItems[ 0 ].Text; + c動画プロパティダイアログ.textBoxAVI番号.Text = item.SubItems[ 1 ].Text; + c動画プロパティダイアログ.textBoxファイル.Text = item.SubItems[ 2 ].Text; + c動画プロパティダイアログ.textBoxAVI番号.ForeColor = item.ForeColor; + c動画プロパティダイアログ.textBoxAVI番号.BackColor = item.BackColor; + if( c動画プロパティダイアログ.ShowDialog() == DialogResult.OK ) + { + CAVI avi = c動画プロパティダイアログ.avi; + CAVI cavi3 = new CAVI(); + cavi3.nAVI番号1to1295 = c動画プロパティダイアログ.avi.nAVI番号1to1295; + cavi3.strラベル名 = c動画プロパティダイアログ.textBoxラベル.Text; + cavi3.strファイル名 = c動画プロパティダイアログ.textBoxファイル.Text; + cavi3.col文字色 = c動画プロパティダイアログ.textBoxAVI番号.ForeColor; + cavi3.col背景色 = c動画プロパティダイアログ.textBoxAVI番号.BackColor; + if( !cavi3.b内容が同じwith( avi ) ) + { + avi = new CAVI(); + avi.tコピーfrom( c動画プロパティダイアログ.avi ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tAVI編集のUndo ), new DGRedoを実行する( this.tAVI編集のRedo ), avi, cavi3 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + c動画プロパティダイアログ.avi.tコピーfrom( cavi3 ); + if( this.tAVI番号に対応するListViewItemを返す( nAVI番号1to1295 ) != null ) + { + ListViewItem item2 = c動画プロパティダイアログ.avi.t現在の内容から新しいListViewItemを作成して返す(); + item = this.tAVI番号に対応するListViewItemを返す( nAVI番号1to1295 ); + item.SubItems[ 0 ].Text = item2.SubItems[ 0 ].Text; + item.SubItems[ 1 ].Text = item2.SubItems[ 1 ].Text; + item.SubItems[ 2 ].Text = item2.SubItems[ 2 ].Text; + item.ForeColor = item2.ForeColor; + item.BackColor = item2.BackColor; + } + this.listViewAVIリスト.Refresh(); + this._Form.b未保存 = true; + } + } + this._Form.dlgチップパレット.t一時的な隠蔽を解除する(); + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private CAVIキャッシュ AVIキャッシュ = new CAVIキャッシュ(); + private ListView listViewAVIリスト; + + private void tItemを交換する・AVIキャッシュ( int nItem番号1, int nItem番号2 ) + { + int num = nItem番号1 + 1; + int num2 = nItem番号2 + 1; + CAVI ac = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num ); + CAVI cavi2 = this.AVIキャッシュ.tAVIをキャッシュから検索して返す( num2 ); + CAVI cavi3 = new CAVI(); + cavi3.tコピーfrom( ac ); + ac.tコピーfrom( cavi2 ); + ac.nAVI番号1to1295 = num; + cavi2.tコピーfrom( cavi3 ); + cavi2.nAVI番号1to1295 = num2; + } + private void tItemを交換する・ListViewItem( int nItem番号1, int nItem番号2 ) + { + int num = nItem番号1 + 1; + int num2 = nItem番号2 + 1; + CAVI cavi = new CAVI(); + cavi.tコピーfrom( this.listViewAVIリスト.Items[ nItem番号1 ] ); + cavi.nAVI番号1to1295 = num2; + CAVI cavi2 = new CAVI(); + cavi2.tコピーfrom( this.listViewAVIリスト.Items[ nItem番号2 ] ); + cavi2.nAVI番号1to1295 = num; + cavi2.tコピーto( this.listViewAVIリスト.Items[ nItem番号1 ] ); + cavi.tコピーto( this.listViewAVIリスト.Items[ nItem番号2 ] ); + } + private void tItemを交換する・カーソル移動( int nItem番号1, int nItem番号2 ) + { + this.tItemを選択する( nItem番号2 ); + } + private void tItemを交換する・チップパレット( int nItem番号1, int nItem番号2 ) + { + this._Form.dlgチップパレット.tパレットセルの番号を置換する( 2, nItem番号1 + 1, nItem番号2 + 1 ); + } + private void tItemを交換する・レーン割付チップ( int nItem番号1, int nItem番号2 ) + { + for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ ) + { + Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ]; + if( cレーン.eレーン種別 == Cレーン.E種別.AVI ) + { + if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号1 + 1 ) ) + { + cレーン.nレーン割付チップ・表0or1to1295 = nItem番号2 + 1; + } + else if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号2 + 1 ) ) + { + cレーン.nレーン割付チップ・表0or1to1295 = nItem番号1 + 1; + } + if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号1 + 1 ) ) + { + cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号2 + 1; + } + else if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号2 + 1 ) ) + { + cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号1 + 1; + } + } + } + } + private void tItemを交換する・譜面上のチップ( int nItem番号1, int nItem番号2 ) + { + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.AVI ) + { + if( cチップ.n値・整数1to1295 == ( nItem番号1 + 1 ) ) + { + cチップ.n値・整数1to1295 = nItem番号2 + 1; + } + else if( cチップ.n値・整数1to1295 == ( nItem番号2 + 1 ) ) + { + cチップ.n値・整数1to1295 = nItem番号1 + 1; + } + } + } + } + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMP.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMP.cs new file mode 100644 index 00000000..25d72501 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMP.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Windows.Forms; +using FDK; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CBMP + { + public bool bテクスチャ; + public Color col背景色 = SystemColors.Window; + public Color col文字色 = SystemColors.WindowText; + public int nBMP番号1to1295 = 1; + public string strファイル名 = ""; + public string strラベル名 = ""; + + public bool b内容が同じ・BMP番号を除くwith( CBMP bc ) + { + return ( ( this.strラベル名.Equals( bc.strラベル名 ) && this.strファイル名.Equals( bc.strファイル名 ) ) && ( ( ( this.bテクスチャ == bc.bテクスチャ ) && ( this.col文字色 == bc.col文字色 ) ) && ( this.col背景色 == bc.col背景色 ) ) ); + } + public bool b内容が同じwith( CBMP bc ) + { + return ( ( ( this.strラベル名.Equals( bc.strラベル名 ) && ( this.nBMP番号1to1295 == bc.nBMP番号1to1295 ) ) && ( this.strファイル名.Equals( bc.strファイル名 ) && ( this.bテクスチャ == bc.bテクスチャ ) ) ) && ( ( this.col文字色 == bc.col文字色 ) && ( this.col背景色 == bc.col背景色 ) ) ); + } + public void tコピーfrom( CBMP bc ) + { + this.bテクスチャ = bc.bテクスチャ; + this.strラベル名 = bc.strラベル名; + if( ( bc.nBMP番号1to1295 < 1 ) || ( bc.nBMP番号1to1295 > 0x50f ) ) + { + throw new Exception( "BMP番号が範囲を超えています。-> [" + this.nBMP番号1to1295 + "]" ); + } + this.nBMP番号1to1295 = bc.nBMP番号1to1295; + this.strファイル名 = bc.strファイル名; + this.col背景色 = bc.col背景色; + this.col文字色 = bc.col文字色; + } + public void tコピーfrom( ListViewItem lvi ) + { + this.bテクスチャ = lvi.SubItems[ 0 ].Text.Equals( "o" ); + this.strラベル名 = lvi.SubItems[ 1 ].Text; + this.nBMP番号1to1295 = C変換.n36進数2桁の文字列を数値に変換して返す( lvi.SubItems[ 2 ].Text ); + this.strファイル名 = lvi.SubItems[ 3 ].Text; + this.col背景色 = lvi.BackColor; + this.col文字色 = lvi.ForeColor; + } + public void tコピーto( ListViewItem lvi ) + { + lvi.SubItems[ 0 ].Text = this.bテクスチャ ? "o" : ""; + lvi.SubItems[ 1 ].Text = this.strラベル名; + lvi.SubItems[ 2 ].Text = C変換.str数値を36進数2桁に変換して返す( this.nBMP番号1to1295 ); + lvi.SubItems[ 3 ].Text = this.strファイル名; + lvi.ForeColor = this.col文字色; + lvi.BackColor = this.col背景色; + } + public ListViewItem t現在の内容から新しいListViewItemを作成して返す() + { + ListViewItem item = new ListViewItem( new string[] { this.bテクスチャ ? "o" : "", this.strラベル名, C変換.str数値を36進数2桁に変換して返す( this.nBMP番号1to1295 ), this.strファイル名 } ); + item.ForeColor = this.col文字色; + item.BackColor = this.col背景色; + return item; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPキャッシュ.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPキャッシュ.cs new file mode 100644 index 00000000..456fda8e --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPキャッシュ.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CBMPキャッシュ + { + public Dictionary dicBMPディクショナリ = new Dictionary(); + public int n現在のキャッシュアイテム数 + { + get + { + if( this.dicBMPディクショナリ == null ) + { + return 0; + } + return this.dicBMPディクショナリ.Count; + } + } + + public CBMP tBMPをキャッシュから検索して返す( int nBMP番号1to1295 ) + { + CBMP cbmp; + if( ( nBMP番号1to1295 < 1 ) || ( nBMP番号1to1295 > 0x50f ) ) + { + throw new Exception( "BMP番号が範囲を超えています。-> [" + nBMP番号1to1295 + "]" ); + } + if( this.dicBMPディクショナリ.TryGetValue( nBMP番号1to1295, out cbmp ) ) + { + return cbmp; + } + return null; + } + public CBMP tBMPをキャッシュから検索して返す・なければ新規生成する( int nBMP番号1to1295 ) + { + if( ( nBMP番号1to1295 < 1 ) || ( nBMP番号1to1295 > 0x50f ) ) + { + throw new Exception( "BMP番号が範囲を超えています。-> [" + nBMP番号1to1295 + "]" ); + } + CBMP cbmp = null; + if( !this.dicBMPディクショナリ.TryGetValue( nBMP番号1to1295, out cbmp ) ) + { + cbmp = new CBMP(); + cbmp.nBMP番号1to1295 = nBMP番号1to1295; + this.tキャッシュに追加する( cbmp ); + } + return cbmp; + } + public void tBMPをキャッシュから削除する( int nBMP番号1to1295 ) + { + if( ( nBMP番号1to1295 < 1 ) || ( nBMP番号1to1295 > 0x50f ) ) + { + throw new Exception( "BMP番号が範囲を超えています。-> [" + nBMP番号1to1295 + "]" ); + } + CBMP cbmp = null; + if( this.dicBMPディクショナリ.TryGetValue( nBMP番号1to1295, out cbmp ) ) + { + this.dicBMPディクショナリ.Remove( nBMP番号1to1295 ); + } + } + public void tキャッシュに追加する( CBMP bc追加するBMP ) + { + CBMP cbmp; + if( this.dicBMPディクショナリ.TryGetValue( bc追加するBMP.nBMP番号1to1295, out cbmp ) ) + { + this.dicBMPディクショナリ.Remove( bc追加するBMP.nBMP番号1to1295 ); + } + this.dicBMPディクショナリ.Add( bc追加するBMP.nBMP番号1to1295, bc追加するBMP ); + } + public void tキャッシュに追加する( ListViewItem lvi ) + { + CBMP cbmp = new CBMP(); + cbmp.tコピーfrom( lvi ); + this.tキャッシュに追加する( cbmp ); + } + public void t空にする() + { + this.dicBMPディクショナリ.Clear(); + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPリスト管理.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPリスト管理.cs new file mode 100644 index 00000000..1972b230 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CBMPリスト管理.cs @@ -0,0 +1,277 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.IO; +using DTXCreator.譜面; +using DTXCreator.UndoRedo; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CBMPリスト管理 + { + public int n現在選択中のItem番号0to1294 = -1; + + public CBMPリスト管理( Cメインフォーム sメインフォーム, ListView pListViewBMPリスト ) + { + this._Form = sメインフォーム; + this.listViewBMPリスト = pListViewBMPリスト; + } + public void tBMPリストにフォーカスを当てる() + { + this.listViewBMPリスト.Focus(); + } + public CBMP tBMPをキャッシュから検索して返す( int nBMP番号1to1295 ) + { + return this.BMPキャッシュ.tBMPをキャッシュから検索して返す( nBMP番号1to1295 ); + } + public CBMP tBMPをキャッシュから検索して返す・なければ新規生成する( int nBMP番号1to1295 ) + { + return this.BMPキャッシュ.tBMPをキャッシュから検索して返す・なければ新規生成する( nBMP番号1to1295 ); + } + public ListViewItem tBMP番号に対応するListViewItemを返す( int nBMP番号1to1295 ) + { + if( ( nBMP番号1to1295 < 1 ) || ( nBMP番号1to1295 > 0x50f ) ) + { + throw new Exception( "BMP番号が範囲外です。--->[" + nBMP番号1to1295 + "]" ); + } + return this.listViewBMPリスト.Items[ nBMP番号1to1295 - 1 ]; + } + public void tBMP編集のRedo( CBMP bc変更前, CBMP bc変更後 ) + { + int num = bc変更後.nBMP番号1to1295; + CBMP cbmp = this.BMPキャッシュ.tBMPをキャッシュから検索して返す( num ); + cbmp.tコピーfrom( bc変更後 ); + cbmp.tコピーto( this.listViewBMPリスト.Items[ num - 1 ] ); + this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cbmp.nBMP番号1to1295 - 1 ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.BMP ); + this.listViewBMPリスト.Refresh(); + } + public void tBMP編集のUndo( CBMP bc変更前, CBMP bc変更後 ) + { + int num = bc変更前.nBMP番号1to1295; + CBMP cbmp = this.BMPキャッシュ.tBMPをキャッシュから検索して返す( num ); + cbmp.tコピーfrom( bc変更前 ); + cbmp.tコピーto( this.listViewBMPリスト.Items[ num - 1 ] ); + this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cbmp.nBMP番号1to1295 - 1 ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.BMP ); + this.listViewBMPリスト.Refresh(); + } + public ListViewItem tCBMPとListViewItemを生成して返す( int n行番号1to1295 ) + { + return this.tBMPをキャッシュから検索して返す・なければ新規生成する( n行番号1to1295 ).t現在の内容から新しいListViewItemを作成して返す(); + } + public void tItemを交換する( int nItem番号1, int nItem番号2 ) + { + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.t行交換のUndo ), new DGRedoを実行する( this.t行交換のRedo ), nItem番号1, nItem番号2 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + } + CUndoRedo管理.bUndoRedoした直後 = false; + this.tItemを交換する・ListViewItem( nItem番号1, nItem番号2 ); + this.tItemを交換する・BMPキャッシュ( nItem番号1, nItem番号2 ); + this.tItemを交換する・チップパレット( nItem番号1, nItem番号2 ); + this.tItemを交換する・譜面上のチップ( nItem番号1, nItem番号2 ); + this.tItemを交換する・レーン割付チップ( nItem番号1, nItem番号2 ); + this.tItemを交換する・カーソル移動( nItem番号1, nItem番号2 ); + this._Form.listViewBMPリスト.Refresh(); + this._Form.pictureBox譜面パネル.Refresh(); + this._Form.b未保存 = true; + } + public void tItemを選択する( int nItem番号0to1294 ) + { + this.n現在選択中のItem番号0to1294 = nItem番号0to1294; + this.listViewBMPリスト.Items[ nItem番号0to1294 ].Selected = true; + this.listViewBMPリスト.Items[ nItem番号0to1294 ].Focused = true; + } + public void tファイル名の相対パス化( string str基本フォルダ名 ) + { + for( int i = 1; i <= 0x50f; i++ ) + { + CBMP cbmp = this.BMPキャッシュ.tBMPをキャッシュから検索して返す( i ); + if( ( cbmp != null ) && ( cbmp.strファイル名.Length > 0 ) ) + { + try + { + Uri uri = new Uri( str基本フォルダ名 ); + cbmp.strファイル名 = Uri.UnescapeDataString( uri.MakeRelativeUri( new Uri( cbmp.strファイル名 ) ).ToString() ).Replace( '/', '\\' ); + } + catch( UriFormatException ) + { + } + } + } + } + public void t画像プロパティを開いて編集する( int nBMP番号1to1295, string str相対パスの基本フォルダ ) + { + this._Form.dlgチップパレット.t一時的に隠蔽する(); + CBMP cbmp = this.tBMPをキャッシュから検索して返す・なければ新規生成する( nBMP番号1to1295 ); + ListViewItem item = cbmp.t現在の内容から新しいListViewItemを作成して返す(); + string directoryName = ""; + if( item.SubItems[ 3 ].Text.Length > 0 ) + { + directoryName = Path.GetDirectoryName( this._Form.strファイルの存在するディレクトリを絶対パスで返す( item.SubItems[ 3 ].Text ) ); + } + C画像プロパティダイアログ c画像プロパティダイアログ = new C画像プロパティダイアログ( str相対パスの基本フォルダ, directoryName ); + c画像プロパティダイアログ.bmp = cbmp; + c画像プロパティダイアログ.textBoxBMP番号.Text = item.SubItems[ 2 ].Text; + c画像プロパティダイアログ.textBoxラベル.Text = item.SubItems[ 1 ].Text; + c画像プロパティダイアログ.textBoxファイル.Text = item.SubItems[ 3 ].Text; + c画像プロパティダイアログ.checkBoxBMPTEX.CheckState = c画像プロパティダイアログ.bmp.bテクスチャ ? CheckState.Checked : CheckState.Unchecked; + c画像プロパティダイアログ.textBoxBMP番号.ForeColor = item.ForeColor; + c画像プロパティダイアログ.textBoxBMP番号.BackColor = item.BackColor; + if( c画像プロパティダイアログ.ShowDialog() == DialogResult.OK ) + { + CBMP bmp = c画像プロパティダイアログ.bmp; + CBMP cbmp3 = new CBMP(); + cbmp3.nBMP番号1to1295 = c画像プロパティダイアログ.bmp.nBMP番号1to1295; + cbmp3.strラベル名 = c画像プロパティダイアログ.textBoxラベル.Text; + cbmp3.strファイル名 = c画像プロパティダイアログ.textBoxファイル.Text; + cbmp3.bテクスチャ = c画像プロパティダイアログ.checkBoxBMPTEX.Checked; + cbmp3.col文字色 = c画像プロパティダイアログ.textBoxBMP番号.ForeColor; + cbmp3.col背景色 = c画像プロパティダイアログ.textBoxBMP番号.BackColor; + if( !cbmp3.b内容が同じwith( bmp ) ) + { + bmp = new CBMP(); + bmp.tコピーfrom( c画像プロパティダイアログ.bmp ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tBMP編集のUndo ), new DGRedoを実行する( this.tBMP編集のRedo ), bmp, cbmp3 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + c画像プロパティダイアログ.bmp.tコピーfrom( cbmp3 ); + if( this.tBMP番号に対応するListViewItemを返す( nBMP番号1to1295 ) != null ) + { + ListViewItem item2 = c画像プロパティダイアログ.bmp.t現在の内容から新しいListViewItemを作成して返す(); + item = this.tBMP番号に対応するListViewItemを返す( nBMP番号1to1295 ); + item.SubItems[ 0 ].Text = item2.SubItems[ 0 ].Text; + item.SubItems[ 1 ].Text = item2.SubItems[ 1 ].Text; + item.SubItems[ 2 ].Text = item2.SubItems[ 2 ].Text; + item.SubItems[ 3 ].Text = item2.SubItems[ 3 ].Text; + item.ForeColor = item2.ForeColor; + item.BackColor = item2.BackColor; + } + this.listViewBMPリスト.Refresh(); + this._Form.b未保存 = true; + } + } + this._Form.dlgチップパレット.t一時的な隠蔽を解除する(); + } + public void t行交換のRedo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 ); + } + public void t行交換のUndo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 ); + } + public void t新規生成のRedo( CBMP bc生成前はNull, CBMP bc生成されたBMPの複製 ) + { + int num = bc生成されたBMPの複製.nBMP番号1to1295; + CBMP cbmp = this.BMPキャッシュ.tBMPをキャッシュから検索して返す・なければ新規生成する( num ); + cbmp.tコピーfrom( bc生成されたBMPの複製 ); + cbmp.tコピーto( this.listViewBMPリスト.Items[ num - 1 ] ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.BMP ); + this.listViewBMPリスト.Refresh(); + } + public void t新規生成のUndo( CBMP bc生成前はNull, CBMP bc生成されたBMPの複製 ) + { + int num = bc生成されたBMPの複製.nBMP番号1to1295; + new CBMP().tコピーto( this.listViewBMPリスト.Items[ num - 1 ] ); + this.BMPキャッシュ.tBMPをキャッシュから削除する( num ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.BMP ); + this.listViewBMPリスト.Refresh(); + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private CBMPキャッシュ BMPキャッシュ = new CBMPキャッシュ(); + private ListView listViewBMPリスト; + + private void tItemを交換する・BMPキャッシュ( int nItem番号1, int nItem番号2 ) + { + int num = nItem番号1 + 1; + int num2 = nItem番号2 + 1; + CBMP bc = this.BMPキャッシュ.tBMPをキャッシュから検索して返す( num ); + CBMP cbmp2 = this.BMPキャッシュ.tBMPをキャッシュから検索して返す( num2 ); + CBMP cbmp3 = new CBMP(); + cbmp3.tコピーfrom( bc ); + bc.tコピーfrom( cbmp2 ); + bc.nBMP番号1to1295 = num; + cbmp2.tコピーfrom( cbmp3 ); + cbmp2.nBMP番号1to1295 = num2; + } + private void tItemを交換する・ListViewItem( int nItem番号1, int nItem番号2 ) + { + int num = nItem番号1 + 1; + int num2 = nItem番号2 + 1; + CBMP cbmp = new CBMP(); + cbmp.tコピーfrom( this.listViewBMPリスト.Items[ nItem番号1 ] ); + cbmp.nBMP番号1to1295 = num2; + CBMP cbmp2 = new CBMP(); + cbmp2.tコピーfrom( this.listViewBMPリスト.Items[ nItem番号2 ] ); + cbmp2.nBMP番号1to1295 = num; + cbmp2.tコピーto( this.listViewBMPリスト.Items[ nItem番号1 ] ); + cbmp.tコピーto( this.listViewBMPリスト.Items[ nItem番号2 ] ); + } + private void tItemを交換する・カーソル移動( int nItem番号1, int nItem番号2 ) + { + this.tItemを選択する( nItem番号2 ); + } + private void tItemを交換する・チップパレット( int nItem番号1, int nItem番号2 ) + { + this._Form.dlgチップパレット.tパレットセルの番号を置換する( 1, nItem番号1 + 1, nItem番号2 + 1 ); + } + private void tItemを交換する・レーン割付チップ( int nItem番号1, int nItem番号2 ) + { + for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ ) + { + Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ]; + if( cレーン.eレーン種別 == Cレーン.E種別.BMP ) + { + if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号1 + 1 ) ) + { + cレーン.nレーン割付チップ・表0or1to1295 = nItem番号2 + 1; + } + else if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号2 + 1 ) ) + { + cレーン.nレーン割付チップ・表0or1to1295 = nItem番号1 + 1; + } + if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号1 + 1 ) ) + { + cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号2 + 1; + } + else if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号2 + 1 ) ) + { + cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号1 + 1; + } + } + } + } + private void tItemを交換する・譜面上のチップ( int nItem番号1, int nItem番号2 ) + { + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BMP ) + { + if( cチップ.n値・整数1to1295 == ( nItem番号1 + 1 ) ) + { + cチップ.n値・整数1to1295 = nItem番号2 + 1; + } + else if( cチップ.n値・整数1to1295 == ( nItem番号2 + 1 ) ) + { + cチップ.n値・整数1to1295 = nItem番号1 + 1; + } + } + } + } + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAV.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAV.cs new file mode 100644 index 00000000..ec5b9acf --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAV.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Windows.Forms; +using FDK; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CWAV + { + public bool bBGMとして使用; + public Color col背景色 = SystemColors.Window; + public Color col文字色 = SystemColors.WindowText; + public int nWAV番号1to1295 = 1; + public int n位置_100to100; + public int n音量0to100 = 100; + public string strファイル名 = ""; + public string strラベル名 = ""; + + public bool b内容が同じ・WAV番号を除くwith( CWAV wc ) + { + return ( ( ( this.strラベル名.Equals( wc.strラベル名 ) && this.strファイル名.Equals( wc.strファイル名 ) ) && ( ( this.n音量0to100 == wc.n音量0to100 ) && ( this.n位置_100to100 == wc.n位置_100to100 ) ) ) && ( ( ( this.bBGMとして使用 == wc.bBGMとして使用 ) && ( this.col文字色 == wc.col文字色 ) ) && ( this.col背景色 == wc.col背景色 ) ) ); + } + public bool b内容が同じwith( CWAV wc ) + { + return ( ( ( this.strラベル名.Equals( wc.strラベル名 ) && ( this.nWAV番号1to1295 == wc.nWAV番号1to1295 ) ) && ( this.strファイル名.Equals( wc.strファイル名 ) && ( this.n音量0to100 == wc.n音量0to100 ) ) ) && ( ( ( this.n位置_100to100 == wc.n位置_100to100 ) && ( this.bBGMとして使用 == wc.bBGMとして使用 ) ) && ( ( this.col文字色 == wc.col文字色 ) && ( this.col背景色 == wc.col背景色 ) ) ) ); + } + public void tコピーfrom( CWAV wc ) + { + this.strラベル名 = wc.strラベル名; + if( ( wc.nWAV番号1to1295 < 1 ) || ( wc.nWAV番号1to1295 > 0x50f ) ) + { + throw new Exception( "WAV番号が範囲を超えています。-> [" + this.nWAV番号1to1295 + "]" ); + } + this.nWAV番号1to1295 = wc.nWAV番号1to1295; + this.strファイル名 = wc.strファイル名; + if( ( wc.n音量0to100 < 0 ) || ( wc.n音量0to100 > 100 ) ) + { + throw new Exception( "音量が範囲を超えています。-> [" + this.n音量0to100 + "]" ); + } + this.n音量0to100 = wc.n音量0to100; + if( ( wc.n位置_100to100 < -100 ) || ( wc.n位置_100to100 > 100 ) ) + { + throw new Exception( "位置が範囲を超えています。-> [" + this.n位置_100to100 + "]" ); + } + this.n位置_100to100 = wc.n位置_100to100; + this.bBGMとして使用 = wc.bBGMとして使用; + this.col文字色 = wc.col文字色; + this.col背景色 = wc.col背景色; + } + public void tコピーfrom( ListViewItem lvi ) + { + this.strラベル名 = lvi.SubItems[ 0 ].Text; + this.nWAV番号1to1295 = C変換.n36進数2桁の文字列を数値に変換して返す( lvi.SubItems[ 1 ].Text ); + this.strファイル名 = lvi.SubItems[ 2 ].Text; + if( !int.TryParse( lvi.SubItems[ 3 ].Text, out this.n音量0to100 ) ) + { + this.n音量0to100 = 100; + } + if( ( this.n音量0to100 < 0 ) || ( this.n音量0to100 > 100 ) ) + { + throw new Exception( "音量の値が範囲を超えています。-> [" + this.n音量0to100 + "]" ); + } + if( !int.TryParse( lvi.SubItems[ 4 ].Text, out this.n位置_100to100 ) ) + { + this.n位置_100to100 = 0; + } + if( ( this.n位置_100to100 < -100 ) || ( this.n位置_100to100 > 100 ) ) + { + throw new Exception( "位置の値が範囲を超えています。-> [" + this.n音量0to100 + "]" ); + } + this.bBGMとして使用 = lvi.SubItems[ 5 ].Text.Equals( "o" ); + this.col文字色 = lvi.ForeColor; + this.col背景色 = lvi.BackColor; + } + public void tコピーto( ListViewItem lvi ) + { + lvi.SubItems[ 0 ].Text = this.strラベル名; + lvi.SubItems[ 1 ].Text = C変換.str数値を36進数2桁に変換して返す( this.nWAV番号1to1295 ); + lvi.SubItems[ 2 ].Text = this.strファイル名; + lvi.SubItems[ 3 ].Text = this.n音量0to100.ToString(); + lvi.SubItems[ 4 ].Text = this.n位置_100to100.ToString(); + lvi.SubItems[ 5 ].Text = this.bBGMとして使用 ? "o" : ""; + lvi.ForeColor = this.col文字色; + lvi.BackColor = this.col背景色; + } + public ListViewItem t現在の内容から新しいListViewItemを作成して返す() + { + ListViewItem item = new ListViewItem( new string[] { this.strラベル名, C変換.str数値を36進数2桁に変換して返す( this.nWAV番号1to1295 ), this.strファイル名, this.n音量0to100.ToString(), this.n位置_100to100.ToString(), this.bBGMとして使用 ? "o" : "" } ); + item.ForeColor = this.col文字色; + item.BackColor = this.col背景色; + return item; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVキャッシュ.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVキャッシュ.cs new file mode 100644 index 00000000..5645fe3a --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVキャッシュ.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CWAVキャッシュ + { + public Dictionary dicWAVディクショナリ = new Dictionary(); + public int n現在のキャッシュアイテム数 + { + get + { + if( this.dicWAVディクショナリ == null ) + { + return 0; + } + return this.dicWAVディクショナリ.Count; + } + } + + public CWAV tWAVをキャッシュから検索して返す( int nWAV番号1to1295 ) + { + CWAV cwav; + if( ( nWAV番号1to1295 < 1 ) || ( nWAV番号1to1295 > 0x50f ) ) + { + throw new Exception( "WAV番号が範囲を超えています。-> [" + nWAV番号1to1295 + "]" ); + } + if( this.dicWAVディクショナリ.TryGetValue( nWAV番号1to1295, out cwav ) ) + { + return cwav; + } + return null; + } + public CWAV tWAVをキャッシュから検索して返す・なければ新規生成する( int nWAV番号1to1295 ) + { + if( ( nWAV番号1to1295 < 1 ) || ( nWAV番号1to1295 > 0x50f ) ) + { + throw new Exception( "WAV番号が範囲を超えています。-> [" + nWAV番号1to1295 + "]" ); + } + CWAV cwav = null; + if( !this.dicWAVディクショナリ.TryGetValue( nWAV番号1to1295, out cwav ) ) + { + cwav = new CWAV(); + cwav.strラベル名 = ""; + cwav.nWAV番号1to1295 = nWAV番号1to1295; + cwav.strファイル名 = ""; + cwav.n音量0to100 = 100; + cwav.n位置_100to100 = 0; + cwav.bBGMとして使用 = false; + this.tキャッシュに追加する( cwav ); + } + return cwav; + } + public void tWAVをキャッシュから削除する( int nWAV番号1to1295 ) + { + if( ( nWAV番号1to1295 < 1 ) || ( nWAV番号1to1295 > 0x50f ) ) + { + throw new Exception( "WAV番号が範囲を超えています。-> [" + nWAV番号1to1295 + "]" ); + } + CWAV cwav = null; + if( this.dicWAVディクショナリ.TryGetValue( nWAV番号1to1295, out cwav ) ) + { + this.dicWAVディクショナリ.Remove( nWAV番号1to1295 ); + } + } + public void tキャッシュに追加する( CWAV 追加するセル ) + { + CWAV cwav; + if( this.dicWAVディクショナリ.TryGetValue( 追加するセル.nWAV番号1to1295, out cwav ) ) + { + this.dicWAVディクショナリ.Remove( 追加するセル.nWAV番号1to1295 ); + } + this.dicWAVディクショナリ.Add( 追加するセル.nWAV番号1to1295, 追加するセル ); + } + public void tキャッシュに追加する( ListViewItem 追加するLVI ) + { + CWAV cwav = new CWAV(); + cwav.tコピーfrom( 追加するLVI ); + this.tキャッシュに追加する( cwav ); + } + public void t空にする() + { + this.dicWAVディクショナリ.Clear(); + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVリスト管理.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVリスト管理.cs new file mode 100644 index 00000000..1147de8d --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/CWAVリスト管理.cs @@ -0,0 +1,337 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.IO; +using DTXCreator.UndoRedo; +using DTXCreator.譜面; +using FDK; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal class CWAVリスト管理 + { + public int n現在選択中のItem番号0to1294 = -1; + + internal delegate void DGサウンドを再生する( int nWAV番号1to1295 ); + + public CWAVリスト管理( Cメインフォーム pメインフォーム, ListView pListViewWAVリスト ) + { + this._Form = pメインフォーム; + this.listViewWAVリスト = pListViewWAVリスト; + this.sound管理 = new CSound管理( this._Form.Handle ); + this.soundPreview = null; + } + public ListViewItem tCWAVとListViewItemを生成して返す( int n行番号1to1295 ) + { + return this.tWAVをキャッシュから検索して返す・なければ新規生成する( n行番号1to1295 ).t現在の内容から新しいListViewItemを作成して返す(); + } + public void tDirectSoundの解放() + { + if( this.soundPreview != null ) + { + this.soundPreview.Dispose(); + } + if( this.sound管理 != null ) + { + this.sound管理.Dispose(); + } + } + public void tItemを交換する( int nItem番号1, int nItem番号2 ) + { + if( !CUndoRedo管理.bUndoRedoした直後 ) + { + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.t行交換のUndo ), new DGRedoを実行する( this.t行交換のRedo ), nItem番号1, nItem番号2 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + } + CUndoRedo管理.bUndoRedoした直後 = false; + this.tItemを交換する・ListViewItem( nItem番号1, nItem番号2 ); + this.tItemを交換する・WAVキャッシュ( nItem番号1, nItem番号2 ); + this.tItemを交換する・チップパレット( nItem番号1, nItem番号2 ); + this.tItemを交換する・譜面上のチップ( nItem番号1, nItem番号2 ); + this.tItemを交換する・レーン割付チップ( nItem番号1, nItem番号2 ); + this.tItemを交換する・カーソル移動( nItem番号1, nItem番号2 ); + this._Form.listViewWAVリスト.Refresh(); + this._Form.pictureBox譜面パネル.Refresh(); + this._Form.b未保存 = true; + } + public void tItemを選択する( int nItem番号0to1294 ) + { + this.n現在選択中のItem番号0to1294 = nItem番号0to1294; + this.listViewWAVリスト.Items[ nItem番号0to1294 ].Selected = true; + this.listViewWAVリスト.Items[ nItem番号0to1294 ].Focused = true; + } + public void tWAVリストにフォーカスを当てる() + { + this.listViewWAVリスト.Focus(); + } + public CWAV tWAVをキャッシュから検索して返す( int nWAV番号1to1295 ) + { + return this.WAVキャッシュ.tWAVをキャッシュから検索して返す( nWAV番号1to1295 ); + } + public CWAV tWAVをキャッシュから検索して返す・なければ新規生成する( int nWAV番号1to1295 ) + { + return this.WAVキャッシュ.tWAVをキャッシュから検索して返す・なければ新規生成する( nWAV番号1to1295 ); + } + public ListViewItem tWAV番号に対応するListViewItemを返す( int nWAV番号1to1295 ) + { + if( ( nWAV番号1to1295 < 1 ) || ( nWAV番号1to1295 > 0x50f ) ) + { + throw new Exception( "WAV番号が範囲外です。--->[" + nWAV番号1to1295 + "]" ); + } + return this.listViewWAVリスト.Items[ nWAV番号1to1295 - 1 ]; + } + public void tWAV編集のRedo( CWAV wc変更前, CWAV wc変更後 ) + { + int num = wc変更後.nWAV番号1to1295; + CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( num ); + cwav.tコピーfrom( wc変更後 ); + cwav.tコピーto( this.listViewWAVリスト.Items[ num - 1 ] ); + this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cwav.nWAV番号1to1295 - 1 ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV ); + this.listViewWAVリスト.Refresh(); + } + public void tWAV編集のUndo( CWAV wc変更前, CWAV wc変更後 ) + { + int num = wc変更前.nWAV番号1to1295; + CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( num ); + cwav.tコピーfrom( wc変更前 ); + cwav.tコピーto( this.listViewWAVリスト.Items[ num - 1 ] ); + this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cwav.nWAV番号1to1295 - 1 ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV ); + this.listViewWAVリスト.Refresh(); + } + public void tサウンドプロパティを開いて編集する( int nWAV番号1to1295, string str相対パスの基本フォルダ ) + { + this._Form.dlgチップパレット.t一時的に隠蔽する(); + CWAV cwav = this.tWAVをキャッシュから検索して返す・なければ新規生成する( nWAV番号1to1295 ); + ListViewItem item = cwav.t現在の内容から新しいListViewItemを作成して返す(); + string directoryName = ""; + if( item.SubItems[ 2 ].Text.Length > 0 ) + { + directoryName = Path.GetDirectoryName( this._Form.strファイルの存在するディレクトリを絶対パスで返す( item.SubItems[ 2 ].Text ) ); + } + Cサウンドプロパティダイアログ cサウンドプロパティダイアログ = new Cサウンドプロパティダイアログ( str相対パスの基本フォルダ, directoryName, new DGサウンドを再生する( this.tプレビュー音を再生する ) ); + cサウンドプロパティダイアログ.wav = cwav; + cサウンドプロパティダイアログ.textBoxラベル.Text = item.SubItems[ 0 ].Text; + cサウンドプロパティダイアログ.textBoxWAV番号.Text = item.SubItems[ 1 ].Text; + cサウンドプロパティダイアログ.textBoxファイル.Text = item.SubItems[ 2 ].Text; + cサウンドプロパティダイアログ.textBox音量.Text = item.SubItems[ 3 ].Text; + cサウンドプロパティダイアログ.textBox位置.Text = item.SubItems[ 4 ].Text; + cサウンドプロパティダイアログ.hScrollBar音量.Value = cサウンドプロパティダイアログ.wav.n音量0to100; + cサウンドプロパティダイアログ.hScrollBar位置.Value = cサウンドプロパティダイアログ.wav.n位置_100to100 + 100; + cサウンドプロパティダイアログ.checkBoxBGM.CheckState = cサウンドプロパティダイアログ.wav.bBGMとして使用 ? CheckState.Checked : CheckState.Unchecked; + cサウンドプロパティダイアログ.textBoxWAV番号.ForeColor = item.ForeColor; + cサウンドプロパティダイアログ.textBoxWAV番号.BackColor = item.BackColor; + if( cサウンドプロパティダイアログ.ShowDialog() == DialogResult.OK ) + { + CWAV wav = cサウンドプロパティダイアログ.wav; + CWAV cwav3 = new CWAV(); + cwav3.nWAV番号1to1295 = cサウンドプロパティダイアログ.wav.nWAV番号1to1295; + cwav3.strラベル名 = cサウンドプロパティダイアログ.textBoxラベル.Text; + cwav3.strファイル名 = cサウンドプロパティダイアログ.textBoxファイル.Text; + cwav3.n音量0to100 = cサウンドプロパティダイアログ.hScrollBar音量.Value; + cwav3.n位置_100to100 = cサウンドプロパティダイアログ.hScrollBar位置.Value - 100; + cwav3.bBGMとして使用 = cサウンドプロパティダイアログ.checkBoxBGM.Checked; + cwav3.col文字色 = cサウンドプロパティダイアログ.textBoxWAV番号.ForeColor; + cwav3.col背景色 = cサウンドプロパティダイアログ.textBoxWAV番号.BackColor; + if( !cwav3.b内容が同じwith( wav ) ) + { + wav = new CWAV(); + wav.tコピーfrom( cサウンドプロパティダイアログ.wav ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tWAV編集のUndo ), new DGRedoを実行する( this.tWAV編集のRedo ), wav, cwav3 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + cサウンドプロパティダイアログ.wav.tコピーfrom( cwav3 ); + if( this.tWAV番号に対応するListViewItemを返す( nWAV番号1to1295 ) != null ) + { + ListViewItem item2 = cサウンドプロパティダイアログ.wav.t現在の内容から新しいListViewItemを作成して返す(); + item = this.tWAV番号に対応するListViewItemを返す( nWAV番号1to1295 ); + item.SubItems[ 0 ].Text = item2.SubItems[ 0 ].Text; + item.SubItems[ 1 ].Text = item2.SubItems[ 1 ].Text; + item.SubItems[ 2 ].Text = item2.SubItems[ 2 ].Text; + item.SubItems[ 3 ].Text = item2.SubItems[ 3 ].Text; + item.SubItems[ 4 ].Text = item2.SubItems[ 4 ].Text; + item.SubItems[ 5 ].Text = item2.SubItems[ 5 ].Text; + item.ForeColor = item2.ForeColor; + item.BackColor = item2.BackColor; + } + this.listViewWAVリスト.Refresh(); + this._Form.b未保存 = true; + } + } + this._Form.dlgチップパレット.t一時的な隠蔽を解除する(); + } + public void tファイル名の相対パス化( string str基本フォルダ名 ) + { + for( int i = 1; i <= 0x50f; i++ ) + { + CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( i ); + if( ( cwav != null ) && ( cwav.strファイル名.Length > 0 ) ) + { + try + { + Uri uri = new Uri( str基本フォルダ名 ); + cwav.strファイル名 = Uri.UnescapeDataString( uri.MakeRelativeUri( new Uri( cwav.strファイル名 ) ).ToString() ).Replace( '/', '\\' ); + } + catch( UriFormatException ) + { + } + } + } + } + public void tプレビュー音を再生する( CWAV wc ) + { + if( ( wc != null ) && ( wc.strファイル名.Length != 0 ) ) + { + string str = this._Form.strファイルの存在するディレクトリを絶対パスで返す( wc.strファイル名 ); + try + { + this.tプレビュー音を停止する(); + this.soundPreview = this.sound管理.tサウンドを生成する( str ); + this.soundPreview.n音量 = wc.n音量0to100; + this.soundPreview.n位置 = wc.n位置_100to100; + this.soundPreview.t再生を開始する(); + } + catch + { + } + } + } + public void tプレビュー音を再生する( int nWAV番号1to1295 ) + { + CWAV wc = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( nWAV番号1to1295 ); + this.tプレビュー音を再生する( wc ); + } + public void tプレビュー音を停止する() + { + if( this.soundPreview != null ) + { + this.soundPreview.t再生を停止する(); + } + } + public void t行交換のRedo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 ); + } + public void t行交換のUndo( int n変更前のItem番号0to1294, int n変更後のItem番号0to1294 ) + { + CUndoRedo管理.bUndoRedoした直後 = true; + this.tItemを交換する( n変更前のItem番号0to1294, n変更後のItem番号0to1294 ); + } + public void t新規生成のRedo( CWAV wc生成前はNull, CWAV wc生成されたWAVの複製 ) + { + int num = wc生成されたWAVの複製.nWAV番号1to1295; + CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す・なければ新規生成する( num ); + cwav.tコピーfrom( wc生成されたWAVの複製 ); + cwav.tコピーto( this.listViewWAVリスト.Items[ num - 1 ] ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV ); + this.listViewWAVリスト.Refresh(); + } + public void t新規生成のUndo( CWAV wc生成前はNull, CWAV wc生成されたWAVの複製 ) + { + int num = wc生成されたWAVの複製.nWAV番号1to1295; + new CWAV().tコピーto( this.listViewWAVリスト.Items[ num - 1 ] ); + this.WAVキャッシュ.tWAVをキャッシュから削除する( num ); + this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV ); + this.listViewWAVリスト.Refresh(); + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private ListView listViewWAVリスト; + private CSound soundPreview; + private CSound管理 sound管理; + private CWAVキャッシュ WAVキャッシュ = new CWAVキャッシュ(); + + private void tItemを交換する・ListViewItem( int nItem番号1, int nItem番号2 ) + { + int num = nItem番号1 + 1; + int num2 = nItem番号2 + 1; + CWAV cwav = new CWAV(); + cwav.tコピーfrom( this.listViewWAVリスト.Items[ nItem番号1 ] ); + cwav.nWAV番号1to1295 = num2; + CWAV cwav2 = new CWAV(); + cwav2.tコピーfrom( this.listViewWAVリスト.Items[ nItem番号2 ] ); + cwav2.nWAV番号1to1295 = num; + cwav2.tコピーto( this.listViewWAVリスト.Items[ nItem番号1 ] ); + cwav.tコピーto( this.listViewWAVリスト.Items[ nItem番号2 ] ); + } + private void tItemを交換する・WAVキャッシュ( int nItem番号1, int nItem番号2 ) + { + int num = nItem番号1 + 1; + int num2 = nItem番号2 + 1; + CWAV wc = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( num ); + CWAV cwav2 = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( num2 ); + CWAV cwav3 = new CWAV(); + cwav3.tコピーfrom( wc ); + wc.tコピーfrom( cwav2 ); + wc.nWAV番号1to1295 = num; + cwav2.tコピーfrom( cwav3 ); + cwav2.nWAV番号1to1295 = num2; + } + private void tItemを交換する・カーソル移動( int nItem番号1, int nItem番号2 ) + { + this.tItemを選択する( nItem番号2 ); + } + private void tItemを交換する・チップパレット( int nItem番号1, int nItem番号2 ) + { + this._Form.dlgチップパレット.tパレットセルの番号を置換する( 0, nItem番号1 + 1, nItem番号2 + 1 ); + } + private void tItemを交換する・レーン割付チップ( int nItem番号1, int nItem番号2 ) + { + for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ ) + { + Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ]; + if( ( ( cレーン.eレーン種別 == Cレーン.E種別.WAV ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtV ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsV ) ) + { + if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号1 + 1 ) ) + { + cレーン.nレーン割付チップ・表0or1to1295 = nItem番号2 + 1; + } + else if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号2 + 1 ) ) + { + cレーン.nレーン割付チップ・表0or1to1295 = nItem番号1 + 1; + } + if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号1 + 1 ) ) + { + cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号2 + 1; + } + else if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号2 + 1 ) ) + { + cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号1 + 1; + } + } + } + } + private void tItemを交換する・譜面上のチップ( int nItem番号1, int nItem番号2 ) + { + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + switch( this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].eレーン種別 ) + { + case Cレーン.E種別.WAV: + case Cレーン.E種別.GtV: + case Cレーン.E種別.BsV: + if( cチップ.n値・整数1to1295 == ( nItem番号1 + 1 ) ) + { + cチップ.n値・整数1to1295 = nItem番号2 + 1; + } + else if( cチップ.n値・整数1to1295 == ( nItem番号2 + 1 ) ) + { + cチップ.n値・整数1to1295 = nItem番号1 + 1; + } + break; + } + } + } + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.Designer.cs new file mode 100644 index 00000000..042f36ec --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.Designer.cs @@ -0,0 +1,400 @@ +namespace DTXCreator.WAV_BMP_AVI +{ + partial class Cサウンドプロパティダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.toolTip1 = new System.Windows.Forms.ToolTip( this.components ); + this.textBoxラベル = new System.Windows.Forms.TextBox(); + this.labelラベル = new System.Windows.Forms.Label(); + this.textBoxファイル = new System.Windows.Forms.TextBox(); + this.labelファイル = new System.Windows.Forms.Label(); + this.label音量 = new System.Windows.Forms.Label(); + this.label位置 = new System.Windows.Forms.Label(); + this.button参照 = new System.Windows.Forms.Button(); + this.hScrollBar音量 = new System.Windows.Forms.HScrollBar(); + this.textBox音量 = new System.Windows.Forms.TextBox(); + this.textBox位置 = new System.Windows.Forms.TextBox(); + this.hScrollBar位置 = new System.Windows.Forms.HScrollBar(); + this.button背景色 = new System.Windows.Forms.Button(); + this.button文字色 = new System.Windows.Forms.Button(); + this.button標準色に戻す = new System.Windows.Forms.Button(); + this.button試聴 = new System.Windows.Forms.Button(); + this.checkBoxBGM = new System.Windows.Forms.CheckBox(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.textBoxWAV番号 = new System.Windows.Forms.TextBox(); + this.labelWAV番号 = new System.Windows.Forms.Label(); + this.label音量無音 = new System.Windows.Forms.Label(); + this.label位置左 = new System.Windows.Forms.Label(); + this.labe音量原音 = new System.Windows.Forms.Label(); + this.label位置右 = new System.Windows.Forms.Label(); + this.label位置中央 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // textBoxラベル + // + this.textBoxラベル.Location = new System.Drawing.Point( 69, 40 ); + this.textBoxラベル.Name = "textBoxラベル"; + this.textBoxラベル.Size = new System.Drawing.Size( 294, 19 ); + this.textBoxラベル.TabIndex = 0; + this.toolTip1.SetToolTip( this.textBoxラベル, "サウンドファイルに名前を自由に設定できます。\r\n" ); + this.textBoxラベル.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxラベル_KeyDown ); + // + // labelラベル + // + this.labelラベル.AutoSize = true; + this.labelラベル.Location = new System.Drawing.Point( 9, 43 ); + this.labelラベル.Name = "labelラベル"; + this.labelラベル.Size = new System.Drawing.Size( 33, 12 ); + this.labelラベル.TabIndex = 16; + this.labelラベル.Text = "ラベル\r\n"; + this.toolTip1.SetToolTip( this.labelラベル, "サウンドファイルに名前を自由に設定できます。\r\n" ); + // + // textBoxファイル + // + this.textBoxファイル.Location = new System.Drawing.Point( 69, 65 ); + this.textBoxファイル.Name = "textBoxファイル"; + this.textBoxファイル.Size = new System.Drawing.Size( 217, 19 ); + this.textBoxファイル.TabIndex = 1; + this.toolTip1.SetToolTip( this.textBoxファイル, "サウンドファイル名。\r\n" ); + this.textBoxファイル.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxファイル_KeyDown ); + // + // labelファイル + // + this.labelファイル.AutoSize = true; + this.labelファイル.Location = new System.Drawing.Point( 9, 68 ); + this.labelファイル.Name = "labelファイル"; + this.labelファイル.Size = new System.Drawing.Size( 51, 12 ); + this.labelファイル.TabIndex = 17; + this.labelファイル.Text = "ファイル名\r\n"; + this.toolTip1.SetToolTip( this.labelファイル, "サウンドファイル名。\r\n" ); + // + // label音量 + // + this.label音量.AutoSize = true; + this.label音量.Location = new System.Drawing.Point( 9, 123 ); + this.label音量.Name = "label音量"; + this.label音量.Size = new System.Drawing.Size( 29, 12 ); + this.label音量.TabIndex = 18; + this.label音量.Text = "音量"; + this.toolTip1.SetToolTip( this.label音量, "サウンドの音量を設定します。\r\n" ); + // + // label位置 + // + this.label位置.AutoSize = true; + this.label位置.Location = new System.Drawing.Point( 9, 159 ); + this.label位置.Name = "label位置"; + this.label位置.Size = new System.Drawing.Size( 29, 12 ); + this.label位置.TabIndex = 19; + this.label位置.Text = "位置"; + this.toolTip1.SetToolTip( this.label位置, "サウンドの位置を設定します。" ); + // + // button参照 + // + this.button参照.Location = new System.Drawing.Point( 292, 61 ); + this.button参照.Name = "button参照"; + this.button参照.Size = new System.Drawing.Size( 71, 23 ); + this.button参照.TabIndex = 2; + this.button参照.Text = "参照...\r\n"; + this.toolTip1.SetToolTip( this.button参照, "サウンドファイルをダイアログから選択します。\r\n" ); + this.button参照.UseVisualStyleBackColor = true; + this.button参照.Click += new System.EventHandler( this.button参照_Click ); + this.button参照.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button参照_KeyDown ); + // + // hScrollBar音量 + // + this.hScrollBar音量.Location = new System.Drawing.Point( 130, 120 ); + this.hScrollBar音量.Maximum = 109; + this.hScrollBar音量.Name = "hScrollBar音量"; + this.hScrollBar音量.Size = new System.Drawing.Size( 182, 17 ); + this.hScrollBar音量.TabIndex = 5; + this.toolTip1.SetToolTip( this.hScrollBar音量, "サウンドの音量を設定します。\r\n" ); + this.hScrollBar音量.Value = 100; + this.hScrollBar音量.ValueChanged += new System.EventHandler( this.hScrollBar音量_ValueChanged ); + // + // textBox音量 + // + this.textBox音量.Location = new System.Drawing.Point( 69, 120 ); + this.textBox音量.MaxLength = 3; + this.textBox音量.Name = "textBox音量"; + this.textBox音量.Size = new System.Drawing.Size( 58, 19 ); + this.textBox音量.TabIndex = 4; + this.textBox音量.Text = "100"; + this.textBox音量.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.toolTip1.SetToolTip( this.textBox音量, "サウンドの音量を設定します。\r\n" ); + this.textBox音量.WordWrap = false; + this.textBox音量.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBox音量_KeyDown ); + this.textBox音量.Leave += new System.EventHandler( this.textBox音量_Leave ); + // + // textBox位置 + // + this.textBox位置.Location = new System.Drawing.Point( 69, 156 ); + this.textBox位置.MaxLength = 4; + this.textBox位置.Name = "textBox位置"; + this.textBox位置.Size = new System.Drawing.Size( 58, 19 ); + this.textBox位置.TabIndex = 6; + this.textBox位置.Text = "0"; + this.textBox位置.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.toolTip1.SetToolTip( this.textBox位置, "サウンドの位置を設定します。\r\n" ); + this.textBox位置.WordWrap = false; + this.textBox位置.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBox位置_KeyDown ); + this.textBox位置.Leave += new System.EventHandler( this.textBox位置_Leave ); + // + // hScrollBar位置 + // + this.hScrollBar位置.Location = new System.Drawing.Point( 130, 158 ); + this.hScrollBar位置.Maximum = 209; + this.hScrollBar位置.Name = "hScrollBar位置"; + this.hScrollBar位置.Size = new System.Drawing.Size( 182, 17 ); + this.hScrollBar位置.TabIndex = 7; + this.toolTip1.SetToolTip( this.hScrollBar位置, "サウンドの位置を設定します。\r\n" ); + this.hScrollBar位置.Value = 100; + this.hScrollBar位置.ValueChanged += new System.EventHandler( this.hScrollBar位置_ValueChanged ); + // + // button背景色 + // + this.button背景色.Location = new System.Drawing.Point( 133, 9 ); + this.button背景色.Name = "button背景色"; + this.button背景色.Size = new System.Drawing.Size( 51, 23 ); + this.button背景色.TabIndex = 11; + this.button背景色.Text = "背景色"; + this.toolTip1.SetToolTip( this.button背景色, "WAVリスト行の背景色を設定します。\r\n" ); + this.button背景色.UseVisualStyleBackColor = true; + this.button背景色.Click += new System.EventHandler( this.button背景色_Click ); + this.button背景色.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button背景色_KeyDown ); + // + // button文字色 + // + this.button文字色.Location = new System.Drawing.Point( 190, 9 ); + this.button文字色.Name = "button文字色"; + this.button文字色.Size = new System.Drawing.Size( 51, 23 ); + this.button文字色.TabIndex = 12; + this.button文字色.Text = "文字色\r\n"; + this.toolTip1.SetToolTip( this.button文字色, "WAVリスト行の文字色を設定します。\r\n" ); + this.button文字色.UseVisualStyleBackColor = true; + this.button文字色.Click += new System.EventHandler( this.button文字色_Click ); + this.button文字色.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button文字色_KeyDown ); + // + // button標準色に戻す + // + this.button標準色に戻す.Location = new System.Drawing.Point( 247, 9 ); + this.button標準色に戻す.Name = "button標準色に戻す"; + this.button標準色に戻す.Size = new System.Drawing.Size( 92, 23 ); + this.button標準色に戻す.TabIndex = 13; + this.button標準色に戻す.Text = "標準色に戻す\r\n"; + this.toolTip1.SetToolTip( this.button標準色に戻す, "WAVリスト行の背景色と文字色を標準色に戻します。\r\n" ); + this.button標準色に戻す.UseVisualStyleBackColor = true; + this.button標準色に戻す.Click += new System.EventHandler( this.button標準色に戻す_Click ); + this.button標準色に戻す.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button標準色に戻す_KeyDown ); + // + // button試聴 + // + this.button試聴.Location = new System.Drawing.Point( 65, 202 ); + this.button試聴.Name = "button試聴"; + this.button試聴.Size = new System.Drawing.Size( 75, 23 ); + this.button試聴.TabIndex = 10; + this.button試聴.Text = "試聴"; + this.toolTip1.SetToolTip( this.button試聴, "現在のサウンドファイルを試聴します。\r\n" ); + this.button試聴.UseVisualStyleBackColor = true; + this.button試聴.Click += new System.EventHandler( this.button試聴_Click ); + this.button試聴.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button試聴_KeyDown ); + // + // checkBoxBGM + // + this.checkBoxBGM.AutoSize = true; + this.checkBoxBGM.Location = new System.Drawing.Point( 69, 90 ); + this.checkBoxBGM.Name = "checkBoxBGM"; + this.checkBoxBGM.Size = new System.Drawing.Size( 182, 16 ); + this.checkBoxBGM.TabIndex = 3; + this.checkBoxBGM.Text = "このサウンドをBGMとして使用する\r\n"; + this.toolTip1.SetToolTip( this.checkBoxBGM, "このサウンドをBGMサウンドとして使用する場合にオンにします。\r\n" ); + this.checkBoxBGM.UseVisualStyleBackColor = true; + // + // buttonOK + // + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point( 207, 202 ); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size( 75, 23 ); + this.buttonOK.TabIndex = 8; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // buttonキャンセル + // + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonキャンセル.Location = new System.Drawing.Point( 288, 202 ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.Size = new System.Drawing.Size( 75, 23 ); + this.buttonキャンセル.TabIndex = 9; + this.buttonキャンセル.Text = "キャンセル\r\n"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // textBoxWAV番号 + // + this.textBoxWAV番号.Location = new System.Drawing.Point( 69, 11 ); + this.textBoxWAV番号.Name = "textBoxWAV番号"; + this.textBoxWAV番号.ReadOnly = true; + this.textBoxWAV番号.Size = new System.Drawing.Size( 58, 19 ); + this.textBoxWAV番号.TabIndex = 14; + this.textBoxWAV番号.TabStop = false; + this.textBoxWAV番号.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // labelWAV番号 + // + this.labelWAV番号.AutoSize = true; + this.labelWAV番号.Location = new System.Drawing.Point( 9, 14 ); + this.labelWAV番号.Name = "labelWAV番号"; + this.labelWAV番号.Size = new System.Drawing.Size( 54, 12 ); + this.labelWAV番号.TabIndex = 15; + this.labelWAV番号.Text = "WAV番号\r\n"; + // + // label音量無音 + // + this.label音量無音.AutoSize = true; + this.label音量無音.Location = new System.Drawing.Point( 128, 108 ); + this.label音量無音.Name = "label音量無音"; + this.label音量無音.Size = new System.Drawing.Size( 29, 12 ); + this.label音量無音.TabIndex = 20; + this.label音量無音.Text = "無音"; + this.label音量無音.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label位置左 + // + this.label位置左.AutoSize = true; + this.label位置左.Location = new System.Drawing.Point( 128, 142 ); + this.label位置左.Name = "label位置左"; + this.label位置左.Size = new System.Drawing.Size( 17, 12 ); + this.label位置左.TabIndex = 22; + this.label位置左.Text = "å·¦"; + this.label位置左.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labe音量原音 + // + this.labe音量原音.AutoSize = true; + this.labe音量原音.Location = new System.Drawing.Point( 283, 108 ); + this.labe音量原音.Name = "labe音量原音"; + this.labe音量原音.Size = new System.Drawing.Size( 29, 12 ); + this.labe音量原音.TabIndex = 21; + this.labe音量原音.Text = "原音\r\n"; + this.labe音量原音.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label位置右 + // + this.label位置右.AutoSize = true; + this.label位置右.Location = new System.Drawing.Point( 295, 142 ); + this.label位置右.Name = "label位置右"; + this.label位置右.Size = new System.Drawing.Size( 17, 12 ); + this.label位置右.TabIndex = 24; + this.label位置右.Text = "右"; + this.label位置右.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label位置中央 + // + this.label位置中央.AutoSize = true; + this.label位置中央.Location = new System.Drawing.Point( 208, 142 ); + this.label位置中央.Name = "label位置中央"; + this.label位置中央.Size = new System.Drawing.Size( 29, 12 ); + this.label位置中央.TabIndex = 23; + this.label位置中央.Text = "中央"; + this.label位置中央.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // Cサウンドプロパティダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 378, 237 ); + this.ControlBox = false; + this.Controls.Add( this.checkBoxBGM ); + this.Controls.Add( this.button試聴 ); + this.Controls.Add( this.button標準色に戻す ); + this.Controls.Add( this.button文字色 ); + this.Controls.Add( this.button背景色 ); + this.Controls.Add( this.label位置中央 ); + this.Controls.Add( this.label位置右 ); + this.Controls.Add( this.labe音量原音 ); + this.Controls.Add( this.hScrollBar位置 ); + this.Controls.Add( this.textBox位置 ); + this.Controls.Add( this.textBox音量 ); + this.Controls.Add( this.hScrollBar音量 ); + this.Controls.Add( this.label位置左 ); + this.Controls.Add( this.label音量無音 ); + this.Controls.Add( this.button参照 ); + this.Controls.Add( this.labelWAV番号 ); + this.Controls.Add( this.textBoxWAV番号 ); + this.Controls.Add( this.label位置 ); + this.Controls.Add( this.label音量 ); + this.Controls.Add( this.labelファイル ); + this.Controls.Add( this.textBoxファイル ); + this.Controls.Add( this.labelラベル ); + this.Controls.Add( this.textBoxラベル ); + this.Controls.Add( this.buttonキャンセル ); + this.Controls.Add( this.buttonOK ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Cサウンドプロパティダイアログ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "サウンドプロパティ"; + this.TopMost = true; + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonキャンセル; + internal System.Windows.Forms.TextBox textBoxラベル; + private System.Windows.Forms.Label labelラベル; + internal System.Windows.Forms.TextBox textBoxファイル; + private System.Windows.Forms.Label labelファイル; + private System.Windows.Forms.Label label音量; + private System.Windows.Forms.Label label位置; + public System.Windows.Forms.TextBox textBoxWAV番号; + private System.Windows.Forms.Label labelWAV番号; + private System.Windows.Forms.Button button参照; + private System.Windows.Forms.Label label音量無音; + private System.Windows.Forms.Label label位置左; + public System.Windows.Forms.HScrollBar hScrollBar音量; + internal System.Windows.Forms.TextBox textBox音量; + internal System.Windows.Forms.TextBox textBox位置; + public System.Windows.Forms.HScrollBar hScrollBar位置; + private System.Windows.Forms.Label labe音量原音; + private System.Windows.Forms.Label label位置右; + private System.Windows.Forms.Label label位置中央; + private System.Windows.Forms.Button button背景色; + private System.Windows.Forms.Button button文字色; + private System.Windows.Forms.Button button標準色に戻す; + private System.Windows.Forms.Button button試聴; + internal System.Windows.Forms.CheckBox checkBoxBGM; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.cs new file mode 100644 index 00000000..f8191785 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using DTXCreator.汎用; +using DTXCreator.Properties; +using FDK; + +namespace DTXCreator.WAV_BMP_AVI +{ + internal partial class Cサウンドプロパティダイアログ : Form + { + internal CWAV wav; + + public Cサウンドプロパティダイアログ( string str相対パスの基点フォルダ, string str初期フォルダ, CWAVリスト管理.DGサウンドを再生する dgサウンドを再生する ) + { + this.str相対パスの基点フォルダ = str相対パスの基点フォルダ; + this.str初期フォルダ = str初期フォルダ; + this.dgサウンドを再生する = dgサウンドを再生する; + + this.InitializeComponent(); + } + public void t位置testBoxの値を範囲修正したのちtextBox位置とhScrollBar位置へ反映させる() + { + int num; + if( this.textBox位置.Text.Length == 0 ) + { + num = 0; + } + else if( !int.TryParse( this.textBox位置.Text, out num ) ) + { + num = 0; + } + else + { + num = C変換.n値を範囲内に丸めて返す( num, -100, 100 ); + } + this.textBox位置.Text = num.ToString(); + this.hScrollBar位置.Value = num + 100; + } + public void t音量textBoxの値を範囲修正したのちtextBox音量とhScrollBar音量へ反映させる() + { + int num; + if( this.textBox音量.Text.Length == 0 ) + { + num = 0; + } + else if( !int.TryParse( this.textBox音量.Text, out num ) ) + { + num = 0; + } + else + { + num = C変換.n値を範囲内に丸めて返す( num, 0, 100 ); + } + this.textBox音量.Text = num.ToString(); + this.hScrollBar音量.Value = num; + } + + private CWAVリスト管理.DGサウンドを再生する dgサウンドを再生する; + private string str初期フォルダ = ""; + private string str相対パスの基点フォルダ = ""; + private static int[] カスタムカラー; + + private void textBoxラベル_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBoxファイル_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button参照_Click( object sender, EventArgs e ) + { + var dialog = new OpenFileDialog() { + Title = Resources.strサウンドファイル選択ダイアログのタイトル, + Filter = Resources.strサウンドファイル選択ダイアログのフィルタ, + FilterIndex = 1, + InitialDirectory = this.str初期フォルダ, + }; + if( dialog.ShowDialog() == DialogResult.OK ) + { + string str = Cファイル選択・パス変換.str基点からの相対パスに変換して返す( dialog.FileName, this.str相対パスの基点フォルダ ); + str.Replace( '/', '\\' ); + this.textBoxファイル.Text = str; + } + } + private void button参照_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void hScrollBar音量_ValueChanged( object sender, EventArgs e ) + { + this.textBox音量.Text = C変換.n値を範囲内に丸めて返す( this.hScrollBar音量.Value, 0, 100 ).ToString(); + } + private void textBox音量_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.t音量textBoxの値を範囲修正したのちtextBox音量とhScrollBar音量へ反映させる(); + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBox音量_Leave( object sender, EventArgs e ) + { + this.t音量textBoxの値を範囲修正したのちtextBox音量とhScrollBar音量へ反映させる(); + } + private void textBox位置_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.t位置testBoxの値を範囲修正したのちtextBox位置とhScrollBar位置へ反映させる(); + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBox位置_Leave( object sender, EventArgs e ) + { + this.t位置testBoxの値を範囲修正したのちtextBox位置とhScrollBar位置へ反映させる(); + } + private void hScrollBar位置_ValueChanged( object sender, EventArgs e ) + { + this.textBox位置.Text = ( C変換.n値を範囲内に丸めて返す( this.hScrollBar位置.Value, 0, 200 ) - 100 ).ToString(); + } + private void button背景色_Click( object sender, EventArgs e ) + { + var dialog = new ColorDialog() { + AllowFullOpen = true, + FullOpen = true, + Color = this.textBoxWAV番号.BackColor, + CustomColors = カスタムカラー, + }; + if( dialog.ShowDialog() == DialogResult.OK ) + { + this.textBoxWAV番号.BackColor = dialog.Color; + カスタムカラー = dialog.CustomColors; + } + } + private void button背景色_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button文字色_Click( object sender, EventArgs e ) + { + var dialog = new ColorDialog() { + AllowFullOpen = true, + FullOpen = true, + Color = this.textBoxWAV番号.ForeColor, + CustomColors = カスタムカラー, + }; + if( dialog.ShowDialog() == DialogResult.OK ) + { + this.textBoxWAV番号.ForeColor = dialog.Color; + カスタムカラー = dialog.CustomColors; + } + } + private void button文字色_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button標準色に戻す_Click( object sender, EventArgs e ) + { + this.textBoxWAV番号.ForeColor = SystemColors.WindowText; + this.textBoxWAV番号.BackColor = SystemColors.Window; + } + private void button標準色に戻す_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button試聴_Click( object sender, EventArgs e ) + { + int num = C変換.n36進数2桁の文字列を数値に変換して返す( this.textBoxWAV番号.Text ); + this.dgサウンドを再生する( num ); + } + private void button試聴_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.resx b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.resx new file mode 100644 index 00000000..7ce03af8 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/Cサウンドプロパティダイアログ.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.Designer.cs new file mode 100644 index 00000000..82736b88 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.Designer.cs @@ -0,0 +1,218 @@ +namespace DTXCreator.WAV_BMP_AVI +{ + partial class C動画プロパティダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.textBoxAVI番号 = new System.Windows.Forms.TextBox(); + this.labelAVI番号 = new System.Windows.Forms.Label(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.textBoxラベル = new System.Windows.Forms.TextBox(); + this.toolTip1 = new System.Windows.Forms.ToolTip( this.components ); + this.labelラベル = new System.Windows.Forms.Label(); + this.textBoxファイル = new System.Windows.Forms.TextBox(); + this.labelファイル = new System.Windows.Forms.Label(); + this.button参照 = new System.Windows.Forms.Button(); + this.button背景色 = new System.Windows.Forms.Button(); + this.button文字色 = new System.Windows.Forms.Button(); + this.button標準色に戻す = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxAVI番号 + // + this.textBoxAVI番号.Location = new System.Drawing.Point( 70, 11 ); + this.textBoxAVI番号.Name = "textBoxAVI番号"; + this.textBoxAVI番号.ReadOnly = true; + this.textBoxAVI番号.Size = new System.Drawing.Size( 58, 19 ); + this.textBoxAVI番号.TabIndex = 1; + this.textBoxAVI番号.TabStop = false; + this.textBoxAVI番号.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // labelAVI番号 + // + this.labelAVI番号.AutoSize = true; + this.labelAVI番号.Location = new System.Drawing.Point( 10, 14 ); + this.labelAVI番号.Name = "labelAVI番号"; + this.labelAVI番号.Size = new System.Drawing.Size( 48, 12 ); + this.labelAVI番号.TabIndex = 0; + this.labelAVI番号.Text = "AVI番号\r\n"; + // + // buttonOK + // + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point( 208, 98 ); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size( 75, 23 ); + this.buttonOK.TabIndex = 7; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // buttonキャンセル + // + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonキャンセル.Location = new System.Drawing.Point( 289, 98 ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.Size = new System.Drawing.Size( 75, 23 ); + this.buttonキャンセル.TabIndex = 8; + this.buttonキャンセル.Text = "キャンセル\r\n"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // textBoxラベル + // + this.textBoxラベル.Location = new System.Drawing.Point( 70, 36 ); + this.textBoxラベル.Name = "textBoxラベル"; + this.textBoxラベル.Size = new System.Drawing.Size( 294, 19 ); + this.textBoxラベル.TabIndex = 3; + this.toolTip1.SetToolTip( this.textBoxラベル, "動画ファイルに名前を自由に設定できます。" ); + this.textBoxラベル.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxラベル_KeyDown ); + // + // labelラベル + // + this.labelラベル.AutoSize = true; + this.labelラベル.Location = new System.Drawing.Point( 10, 39 ); + this.labelラベル.Name = "labelラベル"; + this.labelラベル.Size = new System.Drawing.Size( 33, 12 ); + this.labelラベル.TabIndex = 2; + this.labelラベル.Text = "ラベル"; + this.toolTip1.SetToolTip( this.labelラベル, "動画ファイルに名前を自由に設定できます。\r\n" ); + // + // textBoxファイル + // + this.textBoxファイル.Location = new System.Drawing.Point( 70, 61 ); + this.textBoxファイル.Name = "textBoxファイル"; + this.textBoxファイル.Size = new System.Drawing.Size( 217, 19 ); + this.textBoxファイル.TabIndex = 5; + this.toolTip1.SetToolTip( this.textBoxファイル, "画像ファイル名。\r\n" ); + this.textBoxファイル.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxファイル_KeyDown ); + // + // labelファイル + // + this.labelファイル.AutoSize = true; + this.labelファイル.Location = new System.Drawing.Point( 10, 64 ); + this.labelファイル.Name = "labelファイル"; + this.labelファイル.Size = new System.Drawing.Size( 51, 12 ); + this.labelファイル.TabIndex = 4; + this.labelファイル.Text = "ファイル名\r\n"; + this.toolTip1.SetToolTip( this.labelファイル, "動画ファイル名。\r\n" ); + // + // button参照 + // + this.button参照.Location = new System.Drawing.Point( 293, 57 ); + this.button参照.Name = "button参照"; + this.button参照.Size = new System.Drawing.Size( 71, 23 ); + this.button参照.TabIndex = 6; + this.button参照.Text = "参照...\r\n"; + this.toolTip1.SetToolTip( this.button参照, "動画ファイルをダイアログから選択します。\r\n" ); + this.button参照.UseVisualStyleBackColor = true; + this.button参照.Click += new System.EventHandler( this.button参照_Click ); + this.button参照.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button参照_KeyDown ); + // + // button背景色 + // + this.button背景色.Location = new System.Drawing.Point( 134, 9 ); + this.button背景色.Name = "button背景色"; + this.button背景色.Size = new System.Drawing.Size( 51, 23 ); + this.button背景色.TabIndex = 9; + this.button背景色.Text = "背景色\r\n"; + this.toolTip1.SetToolTip( this.button背景色, "AVIリスト行の背景色を設定します。\r\n" ); + this.button背景色.UseVisualStyleBackColor = true; + this.button背景色.Click += new System.EventHandler( this.button背景色_Click ); + this.button背景色.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button背景色_KeyDown ); + // + // button文字色 + // + this.button文字色.Location = new System.Drawing.Point( 191, 9 ); + this.button文字色.Name = "button文字色"; + this.button文字色.Size = new System.Drawing.Size( 51, 23 ); + this.button文字色.TabIndex = 10; + this.button文字色.Text = "文字色\r\n"; + this.toolTip1.SetToolTip( this.button文字色, "AVIリスト行の文字色を設定します。\r\n" ); + this.button文字色.UseVisualStyleBackColor = true; + this.button文字色.Click += new System.EventHandler( this.button文字色_Click ); + this.button文字色.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button文字色_KeyDown ); + // + // button標準色に戻す + // + this.button標準色に戻す.Location = new System.Drawing.Point( 248, 9 ); + this.button標準色に戻す.Name = "button標準色に戻す"; + this.button標準色に戻す.Size = new System.Drawing.Size( 92, 23 ); + this.button標準色に戻す.TabIndex = 11; + this.button標準色に戻す.Text = "標準色に戻す\r\n"; + this.toolTip1.SetToolTip( this.button標準色に戻す, "AVIリスト行の背景色と文字色を標準色に戻します。\r\n" ); + this.button標準色に戻す.UseVisualStyleBackColor = true; + this.button標準色に戻す.Click += new System.EventHandler( this.button標準色に戻す_Click ); + this.button標準色に戻す.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button標準色に戻す_KeyDown ); + // + // C動画プロパティダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 368, 135 ); + this.ControlBox = false; + this.Controls.Add( this.button標準色に戻す ); + this.Controls.Add( this.button文字色 ); + this.Controls.Add( this.button背景色 ); + this.Controls.Add( this.button参照 ); + this.Controls.Add( this.labelファイル ); + this.Controls.Add( this.textBoxファイル ); + this.Controls.Add( this.labelラベル ); + this.Controls.Add( this.textBoxラベル ); + this.Controls.Add( this.buttonキャンセル ); + this.Controls.Add( this.buttonOK ); + this.Controls.Add( this.labelAVI番号 ); + this.Controls.Add( this.textBoxAVI番号 ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "C動画プロパティダイアログ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "動画プロパティ"; + this.TopMost = true; + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + public System.Windows.Forms.TextBox textBoxAVI番号; + private System.Windows.Forms.Label labelAVI番号; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonキャンセル; + public System.Windows.Forms.TextBox textBoxラベル; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label labelラベル; + public System.Windows.Forms.TextBox textBoxファイル; + private System.Windows.Forms.Label labelファイル; + private System.Windows.Forms.Button button参照; + private System.Windows.Forms.Button button背景色; + private System.Windows.Forms.Button button文字色; + private System.Windows.Forms.Button button標準色に戻す; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.cs new file mode 100644 index 00000000..51b84dc5 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using DTXCreator.汎用; +using DTXCreator.Properties; + +namespace DTXCreator.WAV_BMP_AVI +{ + public partial class C動画プロパティダイアログ : Form + { + internal CAVI avi; + private string str初期フォルダ = ""; + private string str相対パスの基点フォルダ = ""; + private static int[] カスタムカラー; + + public C動画プロパティダイアログ( string str相対パスの基点フォルダ, string str初期フォルダ ) + { + this.str相対パスの基点フォルダ = str相対パスの基点フォルダ; + this.str初期フォルダ = str初期フォルダ; + + this.InitializeComponent(); + } + + private void textBoxラベル_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBoxファイル_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button参照_Click( object sender, EventArgs e ) + { + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Title = Resources.str動画ファイル選択ダイアログのタイトル; + dialog.Filter = Resources.str動画ファイル選択ダイアログのフィルタ; + dialog.FilterIndex = 1; + dialog.InitialDirectory = this.str初期フォルダ; + if( dialog.ShowDialog() == DialogResult.OK ) + { + string str = Cファイル選択・パス変換.str基点からの相対パスに変換して返す( dialog.FileName, this.str相対パスの基点フォルダ ); + str.Replace( '/', '\\' ); + this.textBoxファイル.Text = str; + } + } + private void button参照_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button背景色_Click( object sender, EventArgs e ) + { + ColorDialog dialog = new ColorDialog(); + dialog.AllowFullOpen = true; + dialog.FullOpen = true; + dialog.Color = this.textBoxAVI番号.BackColor; + dialog.CustomColors = カスタムカラー; + if( dialog.ShowDialog() == DialogResult.OK ) + { + this.textBoxAVI番号.BackColor = dialog.Color; + カスタムカラー = dialog.CustomColors; + } + } + private void button背景色_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button文字色_Click( object sender, EventArgs e ) + { + ColorDialog dialog = new ColorDialog(); + dialog.AllowFullOpen = true; + dialog.FullOpen = true; + dialog.Color = this.textBoxAVI番号.ForeColor; + dialog.CustomColors = カスタムカラー; + if( dialog.ShowDialog() == DialogResult.OK ) + { + this.textBoxAVI番号.ForeColor = dialog.Color; + カスタムカラー = dialog.CustomColors; + } + } + private void button文字色_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button標準色に戻す_Click( object sender, EventArgs e ) + { + this.textBoxAVI番号.ForeColor = SystemColors.WindowText; + this.textBoxAVI番号.BackColor = SystemColors.Window; + } + private void button標準色に戻す_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.resx b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.resx new file mode 100644 index 00000000..7ce03af8 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C動画プロパティダイアログ.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.Designer.cs new file mode 100644 index 00000000..686ab4c8 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.Designer.cs @@ -0,0 +1,233 @@ +namespace DTXCreator.WAV_BMP_AVI +{ + partial class C画像プロパティダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.toolTip1 = new System.Windows.Forms.ToolTip( this.components ); + this.textBoxラベル = new System.Windows.Forms.TextBox(); + this.labelラベル = new System.Windows.Forms.Label(); + this.textBoxファイル = new System.Windows.Forms.TextBox(); + this.labelファイル = new System.Windows.Forms.Label(); + this.button参照 = new System.Windows.Forms.Button(); + this.button背景色 = new System.Windows.Forms.Button(); + this.button文字色 = new System.Windows.Forms.Button(); + this.button標準色に戻す = new System.Windows.Forms.Button(); + this.checkBoxBMPTEX = new System.Windows.Forms.CheckBox(); + this.textBoxBMP番号 = new System.Windows.Forms.TextBox(); + this.labelBMP番号 = new System.Windows.Forms.Label(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxラベル + // + this.textBoxラベル.Location = new System.Drawing.Point( 71, 37 ); + this.textBoxラベル.Name = "textBoxラベル"; + this.textBoxラベル.Size = new System.Drawing.Size( 294, 19 ); + this.textBoxラベル.TabIndex = 3; + this.toolTip1.SetToolTip( this.textBoxラベル, "画像ファイルに名前を自由に設定できます。\r\n" ); + this.textBoxラベル.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxラベル_KeyDown ); + // + // labelラベル + // + this.labelラベル.AutoSize = true; + this.labelラベル.Location = new System.Drawing.Point( 11, 40 ); + this.labelラベル.Name = "labelラベル"; + this.labelラベル.Size = new System.Drawing.Size( 33, 12 ); + this.labelラベル.TabIndex = 2; + this.labelラベル.Text = "ラベル\r\n"; + this.toolTip1.SetToolTip( this.labelラベル, "画像ファイルに名前を自由に設定できます。\r\n" ); + // + // textBoxファイル + // + this.textBoxファイル.Location = new System.Drawing.Point( 71, 62 ); + this.textBoxファイル.Name = "textBoxファイル"; + this.textBoxファイル.Size = new System.Drawing.Size( 217, 19 ); + this.textBoxファイル.TabIndex = 5; + this.toolTip1.SetToolTip( this.textBoxファイル, "画像ファイル名。\r\n" ); + this.textBoxファイル.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxファイル_KeyDown ); + // + // labelファイル + // + this.labelファイル.AutoSize = true; + this.labelファイル.Location = new System.Drawing.Point( 11, 65 ); + this.labelファイル.Name = "labelファイル"; + this.labelファイル.Size = new System.Drawing.Size( 51, 12 ); + this.labelファイル.TabIndex = 4; + this.labelファイル.Text = "ファイル名\r\n"; + this.toolTip1.SetToolTip( this.labelファイル, "画像ファイル名。\r\n" ); + // + // button参照 + // + this.button参照.Location = new System.Drawing.Point( 292, 58 ); + this.button参照.Name = "button参照"; + this.button参照.Size = new System.Drawing.Size( 71, 23 ); + this.button参照.TabIndex = 6; + this.button参照.Text = "参照...\r\n"; + this.toolTip1.SetToolTip( this.button参照, "画像ファイルをダイアログから選択します。\r\n" ); + this.button参照.UseVisualStyleBackColor = true; + this.button参照.Click += new System.EventHandler( this.button参照_Click ); + this.button参照.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button参照_KeyDown ); + // + // button背景色 + // + this.button背景色.Location = new System.Drawing.Point( 135, 10 ); + this.button背景色.Name = "button背景色"; + this.button背景色.Size = new System.Drawing.Size( 51, 23 ); + this.button背景色.TabIndex = 10; + this.button背景色.Text = "背景色\r\n"; + this.toolTip1.SetToolTip( this.button背景色, "BMPリスト行の背景色を設定します。\r\n" ); + this.button背景色.UseVisualStyleBackColor = true; + this.button背景色.Click += new System.EventHandler( this.button背景色_Click ); + this.button背景色.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button背景色_KeyDown ); + // + // button文字色 + // + this.button文字色.Location = new System.Drawing.Point( 192, 10 ); + this.button文字色.Name = "button文字色"; + this.button文字色.Size = new System.Drawing.Size( 51, 23 ); + this.button文字色.TabIndex = 11; + this.button文字色.Text = "文字色\r\n"; + this.toolTip1.SetToolTip( this.button文字色, "BMPリスト行の文字色を設定します。\r\n" ); + this.button文字色.UseVisualStyleBackColor = true; + this.button文字色.Click += new System.EventHandler( this.button文字色_Click ); + this.button文字色.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button文字色_KeyDown ); + // + // button標準色に戻す + // + this.button標準色に戻す.Location = new System.Drawing.Point( 249, 10 ); + this.button標準色に戻す.Name = "button標準色に戻す"; + this.button標準色に戻す.Size = new System.Drawing.Size( 92, 23 ); + this.button標準色に戻す.TabIndex = 12; + this.button標準色に戻す.Text = "標準色に戻す\r\n"; + this.toolTip1.SetToolTip( this.button標準色に戻す, "ToolTip=BMPリスト行の背景色と文字色を標準色に戻します。\r\n" ); + this.button標準色に戻す.UseVisualStyleBackColor = true; + this.button標準色に戻す.Click += new System.EventHandler( this.button標準色に戻す_Click ); + this.button標準色に戻す.KeyDown += new System.Windows.Forms.KeyEventHandler( this.button標準色に戻す_KeyDown ); + // + // checkBoxBMPTEX + // + this.checkBoxBMPTEX.AutoSize = true; + this.checkBoxBMPTEX.Location = new System.Drawing.Point( 71, 87 ); + this.checkBoxBMPTEX.Name = "checkBoxBMPTEX"; + this.checkBoxBMPTEX.Size = new System.Drawing.Size( 67, 16 ); + this.checkBoxBMPTEX.TabIndex = 7; + this.checkBoxBMPTEX.Text = "テクスチャ"; + this.toolTip1.SetToolTip( this.checkBoxBMPTEX, "画像をポリゴンテクスチャとして表示します。\r\n" ); + this.checkBoxBMPTEX.UseVisualStyleBackColor = true; + this.checkBoxBMPTEX.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBoxBMPTEX_KeyDown ); + // + // textBoxBMP番号 + // + this.textBoxBMP番号.Location = new System.Drawing.Point( 71, 12 ); + this.textBoxBMP番号.Name = "textBoxBMP番号"; + this.textBoxBMP番号.ReadOnly = true; + this.textBoxBMP番号.Size = new System.Drawing.Size( 58, 19 ); + this.textBoxBMP番号.TabIndex = 1; + this.textBoxBMP番号.TabStop = false; + this.textBoxBMP番号.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // labelBMP番号 + // + this.labelBMP番号.AutoSize = true; + this.labelBMP番号.Location = new System.Drawing.Point( 11, 15 ); + this.labelBMP番号.Name = "labelBMP番号"; + this.labelBMP番号.Size = new System.Drawing.Size( 53, 12 ); + this.labelBMP番号.TabIndex = 0; + this.labelBMP番号.Text = "BMP番号\r\n"; + // + // buttonOK + // + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point( 209, 99 ); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size( 75, 23 ); + this.buttonOK.TabIndex = 8; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // buttonキャンセル + // + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonキャンセル.Location = new System.Drawing.Point( 290, 99 ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.Size = new System.Drawing.Size( 75, 23 ); + this.buttonキャンセル.TabIndex = 9; + this.buttonキャンセル.Text = "キャンセル"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // C画像プロパティダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 378, 136 ); + this.ControlBox = false; + this.Controls.Add( this.checkBoxBMPTEX ); + this.Controls.Add( this.button標準色に戻す ); + this.Controls.Add( this.button文字色 ); + this.Controls.Add( this.button背景色 ); + this.Controls.Add( this.button参照 ); + this.Controls.Add( this.labelファイル ); + this.Controls.Add( this.textBoxファイル ); + this.Controls.Add( this.labelラベル ); + this.Controls.Add( this.textBoxラベル ); + this.Controls.Add( this.buttonキャンセル ); + this.Controls.Add( this.buttonOK ); + this.Controls.Add( this.labelBMP番号 ); + this.Controls.Add( this.textBoxBMP番号 ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "C画像プロパティダイアログ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "画像プロパティ"; + this.TopMost = true; + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolTip toolTip1; + public System.Windows.Forms.TextBox textBoxBMP番号; + private System.Windows.Forms.Label labelBMP番号; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonキャンセル; + public System.Windows.Forms.TextBox textBoxラベル; + private System.Windows.Forms.Label labelラベル; + public System.Windows.Forms.TextBox textBoxファイル; + private System.Windows.Forms.Label labelファイル; + private System.Windows.Forms.Button button参照; + private System.Windows.Forms.Button button背景色; + private System.Windows.Forms.Button button文字色; + private System.Windows.Forms.Button button標準色に戻す; + public System.Windows.Forms.CheckBox checkBoxBMPTEX; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.cs b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.cs new file mode 100644 index 00000000..e1ec5d68 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using DTXCreator.汎用; +using DTXCreator.Properties; + +namespace DTXCreator.WAV_BMP_AVI +{ + public partial class C画像プロパティダイアログ : Form + { + internal CBMP bmp; + private string str初期フォルダ = ""; + private string str相対パスの基点フォルダ = ""; + private static int[] カスタムカラー; + + public C画像プロパティダイアログ( string str相対パスの基点フォルダ, string str初期フォルダ ) + { + this.str相対パスの基点フォルダ = str相対パスの基点フォルダ; + this.str初期フォルダ = str初期フォルダ; + this.InitializeComponent(); + } + + private void textBoxラベル_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBoxファイル_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button参照_Click( object sender, EventArgs e ) + { + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Title = Resources.str画像ファイル選択ダイアログのタイトル; + dialog.Filter = Resources.str画像ファイル選択ダイアログのフィルタ; + dialog.FilterIndex = 1; + dialog.InitialDirectory = this.str初期フォルダ; + if( dialog.ShowDialog() == DialogResult.OK ) + { + string str = Cファイル選択・パス変換.str基点からの相対パスに変換して返す( dialog.FileName, this.str相対パスの基点フォルダ ); + str.Replace( '/', '\\' ); + this.textBoxファイル.Text = str; + } + } + private void button参照_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button背景色_Click( object sender, EventArgs e ) + { + ColorDialog dialog = new ColorDialog(); + dialog.AllowFullOpen = true; + dialog.FullOpen = true; + dialog.Color = this.textBoxBMP番号.BackColor; + dialog.CustomColors = カスタムカラー; + if( dialog.ShowDialog() == DialogResult.OK ) + { + this.textBoxBMP番号.BackColor = dialog.Color; + カスタムカラー = dialog.CustomColors; + } + } + private void button背景色_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button文字色_Click( object sender, EventArgs e ) + { + ColorDialog dialog = new ColorDialog(); + dialog.AllowFullOpen = true; + dialog.FullOpen = true; + dialog.Color = this.textBoxBMP番号.ForeColor; + dialog.CustomColors = カスタムカラー; + if( dialog.ShowDialog() == DialogResult.OK ) + { + this.textBoxBMP番号.ForeColor = dialog.Color; + カスタムカラー = dialog.CustomColors; + } + } + private void button文字色_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void button標準色に戻す_Click( object sender, EventArgs e ) + { + this.textBoxBMP番号.ForeColor = SystemColors.WindowText; + this.textBoxBMP番号.BackColor = SystemColors.Window; + } + private void button標準色に戻す_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBoxBMPTEX_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.resx b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.resx new file mode 100644 index 00000000..7ce03af8 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/02.WAV_BMP_AVI/C画像プロパティダイアログ.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.Designer.cs new file mode 100644 index 00000000..ca991649 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.Designer.cs @@ -0,0 +1,203 @@ +namespace DTXCreator.オプション関連 +{ + partial class Cオプションダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.tabPage全般 = new System.Windows.Forms.TabPage(); + this.checkBoxPlaySoundOnChip = new System.Windows.Forms.CheckBox(); + this.checkBoxPreviewBGM = new System.Windows.Forms.CheckBox(); + this.checkBoxオートフォーカス = new System.Windows.Forms.CheckBox(); + this.label個まで表示する = new System.Windows.Forms.Label(); + this.checkBox最近使用したファイル = new System.Windows.Forms.CheckBox(); + this.numericUpDown最近使用したファイルの最大表示個数 = new System.Windows.Forms.NumericUpDown(); + this.tabControlオプション = new System.Windows.Forms.TabControl(); + this.button1 = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + this.tabPage全般.SuspendLayout(); + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDown最近使用したファイルの最大表示個数 ) ).BeginInit(); + this.tabControlオプション.SuspendLayout(); + this.SuspendLayout(); + // + // tabPage全般 + // + this.tabPage全般.Controls.Add( this.checkBoxPlaySoundOnChip ); + this.tabPage全般.Controls.Add( this.checkBoxPreviewBGM ); + this.tabPage全般.Controls.Add( this.checkBoxオートフォーカス ); + this.tabPage全般.Controls.Add( this.label個まで表示する ); + this.tabPage全般.Controls.Add( this.checkBox最近使用したファイル ); + this.tabPage全般.Controls.Add( this.numericUpDown最近使用したファイルの最大表示個数 ); + this.tabPage全般.Location = new System.Drawing.Point( 4, 22 ); + this.tabPage全般.Name = "tabPage全般"; + this.tabPage全般.Padding = new System.Windows.Forms.Padding( 3 ); + this.tabPage全般.Size = new System.Drawing.Size( 359, 144 ); + this.tabPage全般.TabIndex = 0; + this.tabPage全般.Text = "全般\r\n"; + this.tabPage全般.UseVisualStyleBackColor = true; + // + // checkBoxPlaySoundOnChip + // + this.checkBoxPlaySoundOnChip.AutoSize = true; + this.checkBoxPlaySoundOnChip.Location = new System.Drawing.Point( 6, 73 ); + this.checkBoxPlaySoundOnChip.Name = "checkBoxPlaySoundOnChip"; + this.checkBoxPlaySoundOnChip.Size = new System.Drawing.Size( 298, 16 ); + this.checkBoxPlaySoundOnChip.TabIndex = 5; + this.checkBoxPlaySoundOnChip.Text = "WAVチップを譜面に配置したときにチップの音を再生する(&S)\r\n"; + this.checkBoxPlaySoundOnChip.UseVisualStyleBackColor = true; + // + // checkBoxPreviewBGM + // + this.checkBoxPreviewBGM.AutoSize = true; + this.checkBoxPreviewBGM.Location = new System.Drawing.Point( 6, 50 ); + this.checkBoxPreviewBGM.Name = "checkBoxPreviewBGM"; + this.checkBoxPreviewBGM.Size = new System.Drawing.Size( 243, 16 ); + this.checkBoxPreviewBGM.TabIndex = 4; + this.checkBoxPreviewBGM.Text = "BGMサウンドのプレビューは自動再生しない(&B)\r\n"; + this.checkBoxPreviewBGM.UseVisualStyleBackColor = true; + // + // checkBoxオートフォーカス + // + this.checkBoxオートフォーカス.AutoSize = true; + this.checkBoxオートフォーカス.Location = new System.Drawing.Point( 6, 6 ); + this.checkBoxオートフォーカス.Name = "checkBoxオートフォーカス"; + this.checkBoxオートフォーカス.Size = new System.Drawing.Size( 110, 16 ); + this.checkBoxオートフォーカス.TabIndex = 0; + this.checkBoxオートフォーカス.Text = "オートフォーカス(&F)\r\n"; + this.checkBoxオートフォーカス.UseVisualStyleBackColor = true; + // + // label個まで表示する + // + this.label個まで表示する.AutoSize = true; + this.label個まで表示する.Location = new System.Drawing.Point( 250, 29 ); + this.label個まで表示する.Name = "label個まで表示する"; + this.label個まで表示する.Size = new System.Drawing.Size( 94, 12 ); + this.label個まで表示する.TabIndex = 3; + this.label個まで表示する.Text = "個まで表示する(&T)\r\n"; + // + // checkBox最近使用したファイル + // + this.checkBox最近使用したファイル.AutoSize = true; + this.checkBox最近使用したファイル.Location = new System.Drawing.Point( 6, 28 ); + this.checkBox最近使用したファイル.Name = "checkBox最近使用したファイル"; + this.checkBox最近使用したファイル.Size = new System.Drawing.Size( 176, 16 ); + this.checkBox最近使用したファイル.TabIndex = 1; + this.checkBox最近使用したファイル.Text = "最近使用したファイルの一覧(&R):\r\n"; + this.checkBox最近使用したファイル.UseVisualStyleBackColor = true; + // + // numericUpDown最近使用したファイルの最大表示個数 + // + this.numericUpDown最近使用したファイルの最大表示個数.Location = new System.Drawing.Point( 188, 25 ); + this.numericUpDown最近使用したファイルの最大表示個数.Maximum = new decimal( new int[] { + 10, + 0, + 0, + 0} ); + this.numericUpDown最近使用したファイルの最大表示個数.Minimum = new decimal( new int[] { + 1, + 0, + 0, + 0} ); + this.numericUpDown最近使用したファイルの最大表示個数.Name = "numericUpDown最近使用したファイルの最大表示個数"; + this.numericUpDown最近使用したファイルの最大表示個数.Size = new System.Drawing.Size( 56, 19 ); + this.numericUpDown最近使用したファイルの最大表示個数.TabIndex = 2; + this.numericUpDown最近使用したファイルの最大表示個数.Value = new decimal( new int[] { + 1, + 0, + 0, + 0} ); + // + // tabControlオプション + // + this.tabControlオプション.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( ( ( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom ) + | System.Windows.Forms.AnchorStyles.Left ) + | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.tabControlオプション.Controls.Add( this.tabPage全般 ); + this.tabControlオプション.Location = new System.Drawing.Point( 12, 12 ); + this.tabControlオプション.Name = "tabControlオプション"; + this.tabControlオプション.SelectedIndex = 0; + this.tabControlオプション.Size = new System.Drawing.Size( 367, 170 ); + this.tabControlオプション.TabIndex = 3; + // + // button1 + // + this.button1.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.button1.Location = new System.Drawing.Point( 300, 192 ); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size( 75, 23 ); + this.button1.TabIndex = 5; + this.button1.Text = "キャンセル\r\n"; + this.button1.UseVisualStyleBackColor = true; + // + // buttonOK + // + this.buttonOK.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point( 219, 192 ); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size( 75, 23 ); + this.buttonOK.TabIndex = 4; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // Cオプションダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 391, 227 ); + this.ControlBox = false; + this.Controls.Add( this.buttonOK ); + this.Controls.Add( this.button1 ); + this.Controls.Add( this.tabControlオプション ); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Cオプションダイアログ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "オプション"; + this.tabPage全般.ResumeLayout( false ); + this.tabPage全般.PerformLayout(); + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDown最近使用したファイルの最大表示個数 ) ).EndInit(); + this.tabControlオプション.ResumeLayout( false ); + this.ResumeLayout( false ); + + } + + #endregion + + private System.Windows.Forms.TabPage tabPage全般; + internal System.Windows.Forms.CheckBox checkBoxオートフォーカス; + private System.Windows.Forms.Label label個まで表示する; + internal System.Windows.Forms.CheckBox checkBox最近使用したファイル; + internal System.Windows.Forms.NumericUpDown numericUpDown最近使用したファイルの最大表示個数; + private System.Windows.Forms.TabControl tabControlオプション; + internal System.Windows.Forms.CheckBox checkBoxPreviewBGM; + internal System.Windows.Forms.CheckBox checkBoxPlaySoundOnChip; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button buttonOK; + + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.cs b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.cs new file mode 100644 index 00000000..43e857bc --- /dev/null +++ b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; + +namespace DTXCreator.オプション関連 +{ + public partial class Cオプションダイアログ : Form + { + public Cオプションダイアログ() + { + InitializeComponent(); + } + } +} diff --git a/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.resx b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプションダイアログ.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプション管理.cs b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプション管理.cs new file mode 100644 index 00000000..9d592cdf --- /dev/null +++ b/DTXCreatorプロジェクト/コード/03.オプション関連/Cオプション管理.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace DTXCreator.オプション関連 +{ + internal class Cオプション管理 + { + public Cオプション管理( Cメインフォーム pメインフォーム ) + { + this.formメインフォーム = pメインフォーム; + } + public void tオプションダイアログを開いて編集し結果をアプリ設定に格納する() + { + Cオプションダイアログ cオプションダイアログ = new Cオプションダイアログ(); + cオプションダイアログ.checkBoxオートフォーカス.CheckState = this.formメインフォーム.appアプリ設定.AutoFocus ? CheckState.Checked : CheckState.Unchecked; + cオプションダイアログ.checkBox最近使用したファイル.CheckState = this.formメインフォーム.appアプリ設定.ShowRecentFiles ? CheckState.Checked : CheckState.Unchecked; + cオプションダイアログ.numericUpDown最近使用したファイルの最大表示個数.Value = this.formメインフォーム.appアプリ設定.RecentFilesNum; + cオプションダイアログ.checkBoxPreviewBGM.CheckState = this.formメインフォーム.appアプリ設定.NoPreviewBGM ? CheckState.Checked : CheckState.Unchecked; + cオプションダイアログ.checkBoxPlaySoundOnChip.CheckState = this.formメインフォーム.appアプリ設定.PlaySoundOnWAVChipAllocated ? CheckState.Checked : CheckState.Unchecked; + if( cオプションダイアログ.ShowDialog() == DialogResult.OK ) + { + this.formメインフォーム.appアプリ設定.AutoFocus = cオプションダイアログ.checkBoxオートフォーカス.Checked; + this.formメインフォーム.appアプリ設定.ShowRecentFiles = cオプションダイアログ.checkBox最近使用したファイル.Checked; + this.formメインフォーム.appアプリ設定.RecentFilesNum = (int) cオプションダイアログ.numericUpDown最近使用したファイルの最大表示個数.Value; + this.formメインフォーム.appアプリ設定.NoPreviewBGM = cオプションダイアログ.checkBoxPreviewBGM.Checked; + this.formメインフォーム.appアプリ設定.PlaySoundOnWAVChipAllocated = cオプションダイアログ.checkBoxPlaySoundOnChip.Checked; + this.formメインフォーム.t最近使ったファイルをFileメニューへ追加する(); + } + } + + #region [ private ] + //----------------- + private Cメインフォーム formメインフォーム; + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.Designer.cs b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.Designer.cs new file mode 100644 index 00000000..5f592ab8 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.Designer.cs @@ -0,0 +1,252 @@ +namespace DTXCreator.チップパレット関連 +{ + partial class Cチップパレット + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager( typeof( Cチップパレット ) ); + this.toolStripツールバー = new System.Windows.Forms.ToolStrip(); + this.toolStripSplitButton表示形式 = new System.Windows.Forms.ToolStripSplitButton(); + this.toolStripMenuItem大きなアイコン = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem小さなアイコン = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem一覧 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem詳細 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton上移動 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton下移動 = new System.Windows.Forms.ToolStripButton(); + this.listViewチップリスト = new System.Windows.Forms.ListView(); + this.columnHeaderラベル = new System.Windows.Forms.ColumnHeader(); + this.columnHeader番号 = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderファイル = new System.Windows.Forms.ColumnHeader(); + this.imageList大きなアイコン = new System.Windows.Forms.ImageList( this.components ); + this.imageList小さなアイコン = new System.Windows.Forms.ImageList( this.components ); + this.contextMenuStripリスト用 = new System.Windows.Forms.ContextMenuStrip( this.components ); + this.toolStripMenuItemパレットから削除する = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripツールバー.SuspendLayout(); + this.contextMenuStripリスト用.SuspendLayout(); + this.SuspendLayout(); + // + // toolStripツールバー + // + this.toolStripツールバー.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStripツールバー.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripSplitButton表示形式, + this.toolStripSeparator1, + this.toolStripButton上移動, + this.toolStripButton下移動} ); + this.toolStripツールバー.Location = new System.Drawing.Point( 0, 0 ); + this.toolStripツールバー.Name = "toolStripツールバー"; + this.toolStripツールバー.Size = new System.Drawing.Size( 284, 25 ); + this.toolStripツールバー.TabIndex = 0; + this.toolStripツールバー.Text = "toolStrip1"; + // + // toolStripSplitButton表示形式 + // + this.toolStripSplitButton表示形式.DropDownItems.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem大きなアイコン, + this.toolStripMenuItem小さなアイコン, + this.toolStripMenuItem一覧, + this.toolStripMenuItem詳細} ); + this.toolStripSplitButton表示形式.Image = global::DTXCreator.Properties.Resources.表示形式選択; + this.toolStripSplitButton表示形式.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripSplitButton表示形式.Name = "toolStripSplitButton表示形式"; + this.toolStripSplitButton表示形式.Size = new System.Drawing.Size( 106, 22 ); + this.toolStripSplitButton表示形式.Text = "表示形式(&V)"; + this.toolStripSplitButton表示形式.ToolTipText = "表示形式を変更します。\r\n"; + this.toolStripSplitButton表示形式.ButtonClick += new System.EventHandler( this.toolStripSplitButton表示形式_ButtonClick ); + // + // toolStripMenuItem大きなアイコン + // + this.toolStripMenuItem大きなアイコン.Name = "toolStripMenuItem大きなアイコン"; + this.toolStripMenuItem大きなアイコン.Size = new System.Drawing.Size( 179, 22 ); + this.toolStripMenuItem大きなアイコン.Text = "大きなアイコン(&N)"; + this.toolStripMenuItem大きなアイコン.Click += new System.EventHandler( this.toolStripMenuItem大きなアイコン_Click ); + // + // toolStripMenuItem小さなアイコン + // + this.toolStripMenuItem小さなアイコン.Name = "toolStripMenuItem小さなアイコン"; + this.toolStripMenuItem小さなアイコン.Size = new System.Drawing.Size( 179, 22 ); + this.toolStripMenuItem小さなアイコン.Text = "小さなアイコン(&S)"; + this.toolStripMenuItem小さなアイコン.Click += new System.EventHandler( this.toolStripMenuItem小さなアイコン_Click ); + // + // toolStripMenuItem一覧 + // + this.toolStripMenuItem一覧.Name = "toolStripMenuItem一覧"; + this.toolStripMenuItem一覧.Size = new System.Drawing.Size( 179, 22 ); + this.toolStripMenuItem一覧.Text = "一覧(&L)"; + this.toolStripMenuItem一覧.Click += new System.EventHandler( this.toolStripMenuItem一覧_Click ); + // + // toolStripMenuItem詳細 + // + this.toolStripMenuItem詳細.Name = "toolStripMenuItem詳細"; + this.toolStripMenuItem詳細.Size = new System.Drawing.Size( 179, 22 ); + this.toolStripMenuItem詳細.Text = "詳細(&D)"; + this.toolStripMenuItem詳細.Click += new System.EventHandler( this.toolStripMenuItem詳細_Click ); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size( 6, 25 ); + // + // toolStripButton上移動 + // + this.toolStripButton上移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton上移動.Image = global::DTXCreator.Properties.Resources.上移動; + this.toolStripButton上移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton上移動.Name = "toolStripButton上移動"; + this.toolStripButton上移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButton上移動.Text = "toolStripButton1"; + this.toolStripButton上移動.ToolTipText = "行を1つ上に移動します。\r\n"; + this.toolStripButton上移動.Click += new System.EventHandler( this.toolStripButton上移動_Click ); + // + // toolStripButton下移動 + // + this.toolStripButton下移動.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton下移動.Image = global::DTXCreator.Properties.Resources.下移動; + this.toolStripButton下移動.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton下移動.Name = "toolStripButton下移動"; + this.toolStripButton下移動.Size = new System.Drawing.Size( 23, 22 ); + this.toolStripButton下移動.Text = "toolStripButton1"; + this.toolStripButton下移動.ToolTipText = "行を1つ下に移動します。\r\n"; + this.toolStripButton下移動.Click += new System.EventHandler( this.toolStripButton下移動_Click ); + // + // listViewチップリスト + // + this.listViewチップリスト.Columns.AddRange( new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderラベル, + this.columnHeader番号, + this.columnHeaderファイル} ); + this.listViewチップリスト.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewチップリスト.Font = new System.Drawing.Font( "ï¼­ï¼³ ゴシック", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (byte) ( 128 ) ) ); + this.listViewチップリスト.FullRowSelect = true; + this.listViewチップリスト.GridLines = true; + this.listViewチップリスト.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewチップリスト.HideSelection = false; + this.listViewチップリスト.LargeImageList = this.imageList大きなアイコン; + this.listViewチップリスト.Location = new System.Drawing.Point( 0, 25 ); + this.listViewチップリスト.MultiSelect = false; + this.listViewチップリスト.Name = "listViewチップリスト"; + this.listViewチップリスト.Size = new System.Drawing.Size( 284, 237 ); + this.listViewチップリスト.SmallImageList = this.imageList小さなアイコン; + this.listViewチップリスト.TabIndex = 6; + this.listViewチップリスト.UseCompatibleStateImageBehavior = false; + this.listViewチップリスト.View = System.Windows.Forms.View.Details; + this.listViewチップリスト.SelectedIndexChanged += new System.EventHandler( this.listViewチップリスト_SelectedIndexChanged ); + // + // columnHeaderラベル + // + this.columnHeaderラベル.Text = "ラベル"; + this.columnHeaderラベル.Width = 100; + // + // columnHeader番号 + // + this.columnHeader番号.Text = "No"; + this.columnHeader番号.Width = 28; + // + // columnHeaderファイル + // + this.columnHeaderファイル.Text = "ファイル"; + this.columnHeaderファイル.Width = 150; + // + // imageList大きなアイコン + // + this.imageList大きなアイコン.ImageStream = ( (System.Windows.Forms.ImageListStreamer) ( resources.GetObject( "imageList大きなアイコン.ImageStream" ) ) ); + this.imageList大きなアイコン.TransparentColor = System.Drawing.Color.Transparent; + this.imageList大きなアイコン.Images.SetKeyName( 0, "" ); + this.imageList大きなアイコン.Images.SetKeyName( 1, "" ); + this.imageList大きなアイコン.Images.SetKeyName( 2, "" ); + // + // imageList小さなアイコン + // + this.imageList小さなアイコン.ImageStream = ( (System.Windows.Forms.ImageListStreamer) ( resources.GetObject( "imageList小さなアイコン.ImageStream" ) ) ); + this.imageList小さなアイコン.TransparentColor = System.Drawing.Color.Transparent; + this.imageList小さなアイコン.Images.SetKeyName( 0, "MusicDoc.PNG" ); + this.imageList小さなアイコン.Images.SetKeyName( 1, "PicDoc.PNG" ); + this.imageList小さなアイコン.Images.SetKeyName( 2, "VideoDoc.PNG" ); + // + // contextMenuStripリスト用 + // + this.contextMenuStripリスト用.Items.AddRange( new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemパレットから削除する} ); + this.contextMenuStripリスト用.Name = "contextMenuStripリスト用"; + this.contextMenuStripリスト用.Size = new System.Drawing.Size( 192, 26 ); + // + // toolStripMenuItemパレットから削除する + // + this.toolStripMenuItemパレットから削除する.Name = "toolStripMenuItemパレットから削除する"; + this.toolStripMenuItemパレットから削除する.Size = new System.Drawing.Size( 191, 22 ); + this.toolStripMenuItemパレットから削除する.Text = "パレットから削除(&D)"; + this.toolStripMenuItemパレットから削除する.Click += new System.EventHandler( this.toolStripMenuItemパレットから削除する_Click ); + // + // Cチップパレット + // + this.AllowDrop = true; + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 284, 262 ); + this.ControlBox = false; + this.Controls.Add( this.listViewチップリスト ); + this.Controls.Add( this.toolStripツールバー ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Name = "Cチップパレット"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Text = "Cチップパレット"; + this.TopMost = true; + this.DragDrop += new System.Windows.Forms.DragEventHandler( this.Cチップパレット_DragDrop ); + this.DragEnter += new System.Windows.Forms.DragEventHandler( this.Cチップパレット_DragEnter ); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler( this.Cチップパレット_FormClosing ); + this.toolStripツールバー.ResumeLayout( false ); + this.toolStripツールバー.PerformLayout(); + this.contextMenuStripリスト用.ResumeLayout( false ); + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStripツールバー; + internal System.Windows.Forms.ListView listViewチップリスト; + private System.Windows.Forms.ImageList imageList小さなアイコン; + private System.Windows.Forms.ImageList imageList大きなアイコン; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton表示形式; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem大きなアイコン; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem小さなアイコン; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem一覧; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem詳細; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripButton toolStripButton上移動; + private System.Windows.Forms.ToolStripButton toolStripButton下移動; + private System.Windows.Forms.ColumnHeader columnHeaderラベル; + private System.Windows.Forms.ColumnHeader columnHeader番号; + private System.Windows.Forms.ColumnHeader columnHeaderファイル; + private System.Windows.Forms.ContextMenuStrip contextMenuStripリスト用; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemパレットから削除する; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.cs b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.cs new file mode 100644 index 00000000..5cd88fa2 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using DTXCreator.Properties; +using FDK; + +namespace DTXCreator.チップパレット関連 +{ + public partial class Cチップパレット : Form + { + public bool b表示ON + { + get + { + return this._b表示ON; + } + } + + public Cチップパレット( Cメインフォーム formメインフォーム ) + { + this.InitializeComponent(); + this.formメインフォーム = formメインフォーム; + this.toolStripMenuItem詳細.CheckState = CheckState.Checked; + } + public void tパレットセルの番号を置換する( int nImageIndex, int n置換番号1, int n置換番号2 ) + { + for( int i = 0; i < this.listViewチップリスト.Items.Count; i++ ) + { + ListViewItem item = this.listViewチップリスト.Items[ i ]; + if( item.ImageIndex == nImageIndex ) + { + int num2 = C変換.n36進数2桁の文字列を数値に変換して返す( item.SubItems[ 1 ].Text ); + if( num2 == n置換番号1 ) + { + item.SubItems[ 1 ].Text = C変換.str数値を36進数2桁に変換して返す( n置換番号2 ); + } + else if( num2 == n置換番号2 ) + { + item.SubItems[ 1 ].Text = C変換.str数値を36進数2桁に変換して返す( n置換番号1 ); + } + } + } + } + public void t一時的な隠蔽を解除する() + { + if( this._b表示ON ) + { + base.Show(); + } + } + public void t一時的に隠蔽する() + { + if( this._b表示ON ) + { + base.Hide(); + } + } + public void t隠す() + { + this._b表示ON = false; + base.Hide(); + this.formメインフォーム.toolStripButtonチップパレット.CheckState = CheckState.Unchecked; + this.formメインフォーム.toolStripMenuItemチップパレット.CheckState = CheckState.Unchecked; + } + public void t表示する() + { + this._b表示ON = true; + base.Show(); + this.formメインフォーム.toolStripButtonチップパレット.CheckState = CheckState.Checked; + this.formメインフォーム.toolStripMenuItemチップパレット.CheckState = CheckState.Checked; + } + + private bool _b表示ON; + private Cメインフォーム formメインフォーム; + + private void tチップの行交換( int n移動元Index0to1294, int n移動先Index0to1294 ) + { + ListViewItem item = this.listViewチップリスト.Items[ n移動元Index0to1294 ]; + ListViewItem item2 = this.listViewチップリスト.Items[ n移動先Index0to1294 ]; + for( int i = 0; i < 3; i++ ) + { + string text = item.SubItems[ i ].Text; + item.SubItems[ i ].Text = item2.SubItems[ i ].Text; + item2.SubItems[ i ].Text = text; + } + Color backColor = item.BackColor; + item.BackColor = item2.BackColor; + item2.BackColor = backColor; + backColor = item.ForeColor; + item.ForeColor = item2.ForeColor; + item2.ForeColor = backColor; + int imageIndex = item.ImageIndex; + item.ImageIndex = item2.ImageIndex; + item2.ImageIndex = imageIndex; + item2.Selected = true; + item2.Focused = true; + this.formメインフォーム.b未保存 = true; + } + private void t表示形式メニューのアイコンのチェック( bool b大きなアイコン, bool b小さなアイコン, bool b一覧, bool b詳細 ) + { + this.toolStripMenuItem大きなアイコン.CheckState = b大きなアイコン ? CheckState.Checked : CheckState.Unchecked; + this.toolStripMenuItem小さなアイコン.CheckState = b小さなアイコン ? CheckState.Checked : CheckState.Unchecked; + this.toolStripMenuItem一覧.CheckState = b一覧 ? CheckState.Checked : CheckState.Unchecked; + this.toolStripMenuItem詳細.CheckState = b詳細 ? CheckState.Checked : CheckState.Unchecked; + } + + private void Cチップパレット_DragDrop( object sender, DragEventArgs e ) + { + if( e.Data.GetDataPresent( typeof( Cチップパレット向けDragDropデータ ) ) ) + { + Cチップパレット向けDragDropデータ data = (Cチップパレット向けDragDropデータ) e.Data.GetData( typeof( Cチップパレット向けDragDropデータ ) ); + ListViewItem item = new ListViewItem( new string[] { data.strラベル名, C変換.str数値を36進数2桁に変換して返す( data.n番号1to1295 ), data.strファイル名 } ); + item.ImageIndex = data.n種類; + item.ForeColor = data.col文字色; + item.BackColor = data.col背景色; + this.listViewチップリスト.Items.Add( item ); + } + } + private void Cチップパレット_FormClosing( object sender, FormClosingEventArgs e ) + { + if( e.CloseReason == CloseReason.UserClosing ) + { + this.t隠す(); + e.Cancel = true; + } + } + private void Cチップパレット_DragEnter( object sender, DragEventArgs e ) + { + if( e.Data.GetDataPresent( typeof( Cチップパレット向けDragDropデータ ) ) ) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + private void toolStripSplitButton表示形式_ButtonClick( object sender, EventArgs e ) + { + this.toolStripSplitButton表示形式.ShowDropDown(); + } + private void toolStripMenuItem大きなアイコン_Click( object sender, EventArgs e ) + { + this.listViewチップリスト.View = View.LargeIcon; + this.t表示形式メニューのアイコンのチェック( true, false, false, false ); + } + private void toolStripMenuItem小さなアイコン_Click( object sender, EventArgs e ) + { + this.listViewチップリスト.View = View.SmallIcon; + this.t表示形式メニューのアイコンのチェック( false, true, false, false ); + } + private void toolStripMenuItem一覧_Click( object sender, EventArgs e ) + { + this.listViewチップリスト.View = View.List; + this.t表示形式メニューのアイコンのチェック( false, false, true, false ); + } + private void toolStripMenuItem詳細_Click( object sender, EventArgs e ) + { + this.listViewチップリスト.View = View.Details; + this.t表示形式メニューのアイコンのチェック( false, false, false, true ); + } + private void toolStripButton上移動_Click( object sender, EventArgs e ) + { + if( this.listViewチップリスト.SelectedIndices.Count > 0 ) + { + int num = this.listViewチップリスト.SelectedIndices[ 0 ]; + if( num != 0 ) + { + this.tチップの行交換( num, num - 1 ); + } + } + } + private void toolStripButton下移動_Click( object sender, EventArgs e ) + { + if( this.listViewチップリスト.SelectedIndices.Count > 0 ) + { + int num = this.listViewチップリスト.SelectedIndices[ 0 ]; + if( num < ( this.listViewチップリスト.Items.Count - 1 ) ) + { + this.tチップの行交換( num, num + 1 ); + } + } + } + private void listViewチップリスト_SelectedIndexChanged( object sender, EventArgs e ) + { + if( this.listViewチップリスト.SelectedIndices.Count != 0 ) + { + ListViewItem item = this.listViewチップリスト.Items[ this.listViewチップリスト.SelectedIndices[ 0 ] ]; + int num = C変換.n36進数2桁の文字列を数値に変換して返す( item.SubItems[ 1 ].Text ); + this.formメインフォーム.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( num - 1 ); + this.formメインフォーム.tタブを選択する( (Cメインフォーム.Eタブ種別) ( item.ImageIndex + 1 ) ); + } + } + private void toolStripMenuItemパレットから削除する_Click( object sender, EventArgs e ) + { + if( this.listViewチップリスト.SelectedIndices.Count != 0 ) + { + int index = this.listViewチップリスト.SelectedIndices[ 0 ]; + this.listViewチップリスト.Items.RemoveAt( index ); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.resx b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.resx new file mode 100644 index 00000000..08edf58c --- /dev/null +++ b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット.resx @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 377, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg + CAAAAk1TRnQBSQFMAgEBAwEAASABAAEgAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEYBgABDBgAD/gD/h4AD/gD/h4AD/gD/ksAA/cD7APWBtID1wPrA/cYAAP3A+wD1gbS + A9cD6wP3GAAD9wPsA9YG0gPXA+sD90gAAywBWAGQAawBTQGFAaEBRAF8AZgBRAF8AZgDjwOqA9UD/RUA + AywBWAGQAawBTQGFAaEBRAF8AZgBRAF8AZgDjwOqA9UD/RUAAywBWAGQAawBTQGFAaEBRAF8AZgBRAF8 + AZgDjwOqA9UD/UUAARcBXQGBAYYBzgH/AUIBtQH/AUIBtQH/ASsBgwGIARsBWwERA2UDpAPUA/wSAAEX + AV0BgQGGAc4B/wFCAbUB/wFCAbUB/wErAYMBiAEbAVsBEQNlA6QD1AP8EgABFwFdAYEBhgHOAf8BQgG1 + Af8BQgG1Af8BKwGDAYgBGwFbAREDZQOkA9QD/EIAARQBcQGhAZwB1gH/AZoB1QH/ASsBgwGIAQYBeAIA + AZQBAAESAVMBBQNdA6ID0wP0DwABFAFxAaEBnAHWAf8BmgHVAf8BKwGDAYgBBgF4AgABlAEAARIBUwEF + A10DogPTA/QPAAEUAXEBoQGcAdYB/wGaAdUB/wErAYMBiAEGAXgCAAGUAQABEgFTAQUDXQOiA9MD9D8A + ARQBcQGhAZwB1gH/AVwBngGLAQAB3gIAAd4BAAEFAYACAAGUAQABDgFTAQADXgOhA9ID9gP9CQABFAFx + AaEBnAHWAf8BXAGeAYsBAAHeAgAB3gEAAQUBgAIAAZQBAAEOAVMBAANeA6ED0gP2A/0JAAEUAXEBoQGc + AdYB/wFcAZ4BiwEAAd4CAAHeAQABBQGAAgABlAEAAQ4BUwEAA14DoQPSA/YD/TkAARQBcQGhAWIBoAGO + ASQBlAEcAQAB3gIAAd4CAAHeAQABBgF9AgABlAEAARIBYAEIA2IDoAPRA/QD/AYAARQBcQGhAWIBoAGO + ASQBlAEcAQAB3gIAAd4CAAHeAQABBgF9AgABlAEAARIBYAEIA2IDoAPRA/QD/AYAARQBcQGhAWIBoAGO + ASQBlAEcAQAB3gIAAd4CAAHeAQABBgF9AgABlAEAARIBYAEIA2IDoAPRA/QD/DYAA/QBXgG7AVgBjAH/ + AYwBKwGdASMBAAHeAgAB3gIAAd4BAAEIAW8CAAGUAQABFAFoAQwDYgOfA9AD9AYAA/QBXgG7AVgBjAH/ + AYwBKwGdASMBAAHeAgAB3gIAAd4BAAEIAW8CAAGUAQABFAFoAQwDYgOfA9AD9AYAA/QBXgG7AVgBjAH/ + AYwBKwGdASMBAAHeAgAB3gIAAd4BAAEIAW8CAAGUAQABFAFoAQwDYgOfA9AD9DkAA/QBVwGxAVABjAH/ + AYwBLQGWASQBAAHeAgAB3gIAAd4BAAEKAWcCAAGUAQABEgFsAQsDbwOxA+ED+gYAA/QBVwGxAVABjAH/ + AYwBLQGWASQBAAHeAgAB3gIAAd4BAAEKAWcCAAGUAQABEgFsAQsDbwOxA+ED+gYAA/QBVwGxAVABjAH/ + AYwBLQGWASQBAAHeAgAB3gIAAd4BAAEKAWcCAAGUAQABEgFsAQsDbwOxA+ED+jkAA/QBVgGwAU8BjAH/ + AYwBKgF/AR8BAAHeAgAB3gIAAdwBAAELAWQCAAGUAQABDgFrAQYDkwPXA/oJAAP0AVYBsAFPAYwB/wGM + ASoBfwEfAQAB3gIAAd4CAAHcAQABCwFkAgABlAEAAQ4BawEGA5MD1wP6CQAD9AFWAbABTwGMAf8BjAEq + AX8BHwEAAd4CAAHeAgAB3AEAAQsBZAIAAZQBAAEOAWsBBgOTA9cD+jwAA/QBXwG4AVgBjAH/AYwBJwFr + ARoBAAHeAgAB3gIAAd4BAAEKAWoCAAGUAQABCgFmAQAD2wP6DAAD9AFfAbgBWAGMAf8BjAEnAWsBGgEA + Ad4CAAHeAgAB3gEAAQoBagIAAZQBAAEKAWYBAAPbA/oMAAP0AV8BuAFYAYwB/wGMAScBawEaAQAB3gIA + Ad4CAAHeAQABCgFqAgABlAEAAQoBZgEAA9sD+j8AA/QBZAG7AV4BjAH/AYwBLwF3ASMBAAHeAgAB3gIA + Ad4BAAEIAXgBAAGbAawBlwPzEgAD9AFkAbsBXgGMAf8BjAEvAXcBIwEAAd4CAAHeAgAB3gEAAQgBeAEA + AZsBrAGXA/MSAAP0AWQBuwFeAYwB/wGMAS8BdwEjAQAB3gIAAd4CAAHeAQABCAF4AQABmwGsAZcD80UA + A/QBWgGtAVMBjAH/AYwBPwGaATYBAAHeAQABAwHGAQABnAGsAZgD8gP6FQAD9AFaAa0BUwGMAf8BjAE/ + AZoBNgEAAd4BAAEDAcYBAAGcAawBmAPyA/oVAAP0AVoBrQFTAYwB/wGMAT8BmgE2AQAB3gEAAQMBxgEA + AZwBrAGYA/ID+kgAA/UBPwGOATUBjAH/AYwBSQGtAUIBpQGzAaED8wP6GwAD9QE/AY4BNQGMAf8BjAFJ + Aa0BQgGlAbMBoQPzA/obAAP1AT8BjgE1AYwB/wGMAUkBrQFCAaUBswGhA/MD+k4AA/gBJwFsARoB1QHe + AdMD9gP7IQAD+AEnAWwBGgHVAd4B0wP2A/shAAP4AScBbAEaAdUB3gHTA/YD+/kAAUIBTQE+BwABPgMA + ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAHAAf8BwAH/AcAB/wIAAYABfwGAAX8BgAF/AgABgAE/ + AYABPwGAAT8CAAGAAR8BgAEfAYABHwIAAYABDwGAAQ8BgAEPAgABgAEDAYABAwGAAQMCAAGAAQEBgAEB + AYABAQIAAYABAQGAAQEBgAEBAgABwAEAAcABAAHAAwAB4AEAAeABAAHgAwAB8AEAAfABAAHwAwAB+AEB + AfgBAQH4AQECAAH8AQEB/AEBAfwBAQIAAf4BAwH+AQMB/gEDAgAB/wEHAf8BBwH/AQcCAAb/AgAL + + + + 181, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAW + DQAAAk1TRnQBSQFMAgEBAwEAASABAAEgAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEYBgABDBsAA1geQANYDAADWB5AA1gMAANYHkADWDkAAccBtQG3AdkByAHHAdcBxgHE + AdUBxQHCAbQBnwGgAa8BmwGdAcYBtgGzAc4BvgG6AcwBvQG4AcoBuwG2AckBugG0AawBmwGTA1gJAAHE + AbEBswHZAccBxgHVAcMBwgHTAcIBvwHQAcABvgHOAb0BvAHMAb0BugHLAbsBuAHJAboBtgHIAbgBtAHJ + AboBtAGnAZUBjQNYCQABxAGxAbQBpwGVAY0BpwGVAY0BpwGVAY0BpwGVAY0BpwGVAY0BpwGVAY0BpwGV + AY0BpwGVAY0BpwGVAY0BpwGVAY0BpwGVAY0DWDkAAccBtQG3AfYB7wHlAfUB7QHiAakBkAGOAZsBgQGC + AbUBnAGdAa4ClgHAAbABpAHwAeIB0AHvAeEBzAHvAd8CyQG6AbQDWAkAAcQBsQGzAfwB9gHqAfkB8QHl + AfkB7wHhAfgB7gHeAfcB7AHbAfYB6gHYAfUB5wHTAfMB5QHRAfMB5QHNAfYB5QHMAckBuQG0A1gJAAHE + AbEBtAH8AfYB6wH6AfMB5gH6AfAB4wH4Ae8B4AH3AewB3AH2AeoB2QH1AegB1AH0AeYB0gH0AeYBzwH2 + AeYBzQGnAZUBjQNYOQABxwG1AbcB9wHxAegB4wHSAcsBcgFbAV0BegFjAWUBbwFZAVsBggFrAW0BsQKY + Ad4B0AHAAfAB4wHQAe8B4QHMAcoBuwG2A1gJAAHEAbEBswH9AfoB9RH/Af4C/wH+Av8B/QH7AfIB5QHH + AbgBtANYCQABxAGxAbQB/QH3Ae0B/AH1AeoB+wHyAecB+gHwAeMB+AHuAd8B9gHrAdsB9QHoAdgB9AHm + AdQB8wHmAdIB9AHmAc8BpwGVAY0DWDkAAccBtQG3AfkB8wHrAegB1gHQAcICqwHdAskBvwKkAXMBXQFf + AaMBigGLAc0BvgGyAfEB5QHTAfAB4wHQAcwBvQG4A1gJAAHEAbEBswHsAe0B7AHvAdgBtQHzAdsBtgHL + AbwBogGzAagBlgGyAacBlgHjAc8BrgHwAdkBtwH0AeMBywH+AfgB7gHJAbkBtQNYCQABxAGxAbQB/wH6 + AfIBigGHAYQBawFqAWcBgwF/AXkBpwGgAZcB+QHvAeAB+AHsAd0B9wHqAdoB9gHqAdcB9wHqAdQBpwGV + AY0DWDkAAccBtQG3AfkB9AHuAfkB8wHrAeIBywHJAfUC8AHcAcMBwgGGAW8BcQGJAXEBcwHQAcEBtgHy + AeYB1gHxAeUB0wHOAb4BugNYCQABxAGxAbMB6gLsAfMB1AGmAbEBqgGgAUIBagHUAXgBmAHzAVMBfwHz + AakBsAG6AcABrgGVAfUB3wG/Af4B+gHyAcsBugG3A1gJAAHEAbEBtAH/AfwB9wHqAegB4gHtAe8B7gP/ + AZQBlgGZAi0BLgFWAlUBiwGHAYMBegFzAWoB0wHIAbgBpwGVAY0DWDkAAccBtQG3AfsB9gHxAfkB9ALu + Ad8C2QG8AboBxQKjAYUBaAFqAacCjwH0AeoB3AHzAegB2QHzAeYB1gHQAcABvQNYCQABxAGxAbMB6gHs + Ae0ByQGxAYsBUgF6AdcBoQG9AfwB6wHyAf4BbAGbAfcBnwG9AfgBtgG0Aa4B9QHbAbMB/wH6AfMBzQG9 + AbsDWAkAAcQBsQG0Af8B+wHzAe4BzAGQAUsBQgEzAfIB4AG/AfUB7AHZAdQBzwHFAv4B+AP/AdwB3wHh + AbQBswGvAacBlQGNA1g5AAHHAbUBtwH7AfgB9AH7AfYB8QH5AfQB7gH5AfMB6wH3AfEB6AHFAbYBsQG7 + AagBpQH1AewB3wH0AeoB3AHzAegB2QHSAcIBvwNYCQABxAGxAbMB6AHrAewBrwGbAXsBjwG0Af8BvAHU + Af8B0wHkAf8BugHSAf0BqwHJAf4BpQG3AdoB3QHFAaEB/wH8AfYB0AG/Ab0DWAkAAcQBsQG0AfMB2wGr + AdABlQEfAYUBYgEbAegBswFKAdoBsAFgAccBogFZAe8BzQGTAYQBdwFiAaIBlQF9AfgB7wHcAacBlQGN + A1g5AAHHAbUBtwH8AfoB9wH7AfgB9AH7AfYB8QH5AfQB7wH5AfMB6wHPAbkBtwHOAb8BugHsAeMB2AH1 + AewB4AH0AeoB3AHTAcMBwQNYCQABxAGxAbMB5AHoAe4BvAGgAXEB+AH6AfgBwwHbAf8B1wHoBP8BzQHi + Af8BeQGdAd8B7AHMAZUB/wH+AfgB0QHAAb8DWAkAAcQBsQG0Ac8BvwGkAbkBjwFIAY4BXgELAdEBjwEX + AaQBcQESAZUBagEWAeEBpAEoAVoBQwESAdIBoAE6AfoB7QHaAacBlQGNA1g5AAHHAbUBtwH9AfwB+gH8 + AfoB+AH7AfgB9AH7AfYB8QH5AfUB7wHVAboBuQHXAccBwQGpAZoBlgHDAbcBsAH1AewB4AHVAcUBwwNY + CQABxAGxAbMB4QHmAe4B4wGzAVoBrAGqAaUB7wH7Af8B8wH7BP8BtQHVAf8BrAGhAY0B8QHKAYUC/wH8 + AdMCwgNYCQABxAGxAbQBtwG5AbwBKwEsAS4BYgFkAWkB3gHZAdUB6wHiAdUBoQGKAWYB3wGyAWQBmwFu + ASUBygGQAScB/AH2Ae4BpwGVAY0DWDkAAccBtQG3A/4B/QH8AfoB/AH6AfgB+wH4AfQB4wHZAdYBzwKz + AcwBsAGsAXwBXAFdAasBmwGXAfYB7gHjAdYBxAHCA1gJAAHEAbEBswHdAeQB7AHpAa8BQAHjAawBRAGt + AZoBcwG3Aa8BngG8AboBsAGzAZsBagHpAa8BQAHvAcQBcgL/Af4B1ALBA1gJAAHEAbEBtAn/A2sDIQFV + AVYBWAFfAWABYwFiAWQBaAJ2AXcB/QH3Ae0BpwGVAY0DWDkAAccBtQG3A/8D/gH9AfwB+wH8AfoB+AHK + AcABvgG2AZ0BngGnAnkBnwJ0AdABwgG8AfcB8AHmAdYBwAG+A1oJAAHEAbEBswHZAd8B5gG+AbYBnwHF + AbwBpgHJAcABqAHNAcMBqQHRAccBrQHVAcsBswHYAdABuAHjAd4BzgP/AdQBvQG+A1oJAAHEAbEBtAj/ + Af4B/wH+Af0B/wH+AfoB/wH9AfkB/wH7AfYB/wH5AfQB/AH4AfEB/QH4Ae8BpwGVAY0DWDkAAccBtQG3 + Bv8D/gH9AfwB+wHQAcEBwAGLAXcBeAGBAWABYQHYAcEBvQHzAe8B6QHxAekB3QHWAb0BtgN6CQABxAGx + AbMY/wH6Af0B/wH7AfkB9gHWAb4BuwN6CQABxAGxAbQJ/wH+Av0B/gH8AfoB/QH7AfcB/QH5AfUB/AH5 + AfQB9gH1AfIB9gHyAekBpwGVAY0DcDkAAccBtQG3Cf8D/gHdAs4BrAKbAekB4wHgAfsB9wHyAdsBtwGE + AdsBpwFGAbQBiAFRAcsBrwGOCQABxAGxAbMN/wP+AfwB+wH+AfwB+QH/AfwB+gHYAa8BdAHcAaEBLQG4 + AYMBPAHEAbEBswkAAcQBsQG0DP8B/gH9AfwB/QH7AfkB/gH7AfgB/gH8AfkB2AGvAXQB3AGhAS0BpwGV + AY0DcDkAAccBtQG3Df8C/gH9AfwB+wH8AfsB+AH8AfkB9QHhAc0BugHLAa8BjgHLAa8BjgwAAcQBsQGz + FP8B/AL/Af4B4gHOAbsB1QG2AY4BxAGxAbMMAAHEAbEBtBH/Af4C/wH8Av8B/gHiAc4BuwHWAbYBjgGn + AZUBjTwAAd4BzQHGAd4BzQHGAd4BzQHGAd4BzQHGAd4BzQHGAd4BzQHGAd4BzQHGAd4BzQHGAd4BzQHG + Ad4BzQHGAcsBrwGODwABxAGxAbMBxAGxAbMBxAGxAbMBxAGxAbMBxAGxAbMBxAGxAbMBxAGxAbMBxAGx + AbMBxAGxAbMB2QHHAcEBxAGxAbMPAAHEAbEBtAHEAbEBtAHEAbEBtAHEAbEBtAHEAbEBtAHEAbEBtAHE + AbEBtAHEAbEBtAHEAbEBtAHZAccBwQGnAZUBjTkAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEB + BQABgBcAA/8BAAHgAQEB4AEBAeABAQIAAcABAQHAAQEBwAEBAgABwAEBAcABAQHAAQECAAHAAQEBwAEB + AcABAQIAAcABAQHAAQEBwAEBAgABwAEBAcABAQHAAQECAAHAAQEBwAEBAcABAQIAAcABAQHAAQEBwAEB + AgABwAEBAcABAQHAAQECAAHAAQEBwAEBAcABAQIAAcABAQHAAQEBwAEBAgABwAEBAcABAQHAAQECAAHA + AQEBwAEBAcABAQIAAcABAQHAAQEBwAEBAgABwAEDAcABAwHAAQMCAAHAAQcBwAEHAcABBwIACw== + + + + 573, 17 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット向けDragDropデータ.cs b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット向けDragDropデータ.cs new file mode 100644 index 00000000..690d3bf2 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/04.チップパレット関連/Cチップパレット向けDragDropデータ.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace DTXCreator.チップパレット関連 +{ + internal class Cチップパレット向けDragDropデータ + { + public Color col背景色 = SystemColors.Window; + public Color col文字色 = SystemColors.WindowText; + public int n種類; + public int n番号1to1295; + public string strファイル名 = ""; + public string strラベル名 = ""; + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cクリップセル.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cクリップセル.cs new file mode 100644 index 00000000..fb09093c --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cクリップセル.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.譜面 +{ + internal class Cクリップセル + { + public bool b貼り付け済; + public int nグループID; + public int nレーン番号 = -1; + public int n位置grid; + public Cチップ pチップ; + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cクリップボード.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cクリップボード.cs new file mode 100644 index 00000000..f392386e --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cクリップボード.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Text; +using DTXCreator.UndoRedo; + +namespace DTXCreator.譜面 +{ + internal class Cクリップボード + { + public int nセル数 + { + get + { + return this.cbボード.Count; + } + } + + public Cクリップボード( Cメインフォーム form ) + { + this._Form = form; + } + public void tクリアする() + { + this.cbボード.Clear(); + } + public void tチップを指定位置から貼り付ける( C小節 cs配置開始小節, int n貼り付け先頭grid ) + { + if( this.cbボード.Count != 0 ) + { + List list = new List(); + foreach( Cクリップセル cクリップセル in this.cbボード ) + { + Cクリップセル item = new Cクリップセル(); + item.pチップ = new Cチップ(); + item.pチップ.tコピーfrom( cクリップセル.pチップ ); + item.nレーン番号 = cクリップセル.nレーン番号; + item.n位置grid = cクリップセル.n位置grid; + item.b貼り付け済 = false; + list.Add( item ); + } + int num = list[ 0 ].n位置grid; + foreach( Cクリップセル cクリップセル3 in list ) + { + if( cクリップセル3.n位置grid < num ) + { + num = cクリップセル3.n位置grid; + } + } + for( int i = 0; i < list.Count; i++ ) + { + Cクリップセル local1 = list[ i ]; + local1.n位置grid -= num; + Cクリップセル local2 = list[ i ]; + local2.n位置grid += n貼り付け先頭grid; + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + C小節 c小節 = cs配置開始小節; + for( int j = 0; j < list.Count; j++ ) + { + int num4 = list[ j ].n位置grid; + if( ( num4 >= 0 ) && ( num4 < c小節.n小節長倍率を考慮した現在の小節の高さgrid ) ) + { + Cチップ cチップ = new Cチップ(); + cチップ.tコピーfrom( list[ j ].pチップ ); + cチップ.n位置grid = num4; + cチップ.bドラッグで選択中 = false; + cチップ.b確定選択中 = true; + c小節.listチップ.Add( cチップ ); + Cチップ cc = new Cチップ(); + cc.tコピーfrom( cチップ ); + Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this._Form.mgr譜面管理者.tチップ配置のUndo ), new DGRedoを実行する( this._Form.mgr譜面管理者.tチップ配置のRedo ), redo, redo ) ); + c小節 = cs配置開始小節; + } + else + { + Cクリップセル local3 = list[ j ]; + local3.n位置grid -= c小節.n小節長倍率を考慮した現在の小節の高さgrid; + int num5 = c小節.n小節番号0to3599 + 1; + c小節 = this._Form.mgr譜面管理者.p小節を返す( num5 ); + if( c小節 == null ) + { + c小節 = new C小節( num5 ); + this._Form.mgr譜面管理者.dic小節.Add( num5, c小節 ); + } + j--; + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + list.Clear(); + } + } + public void tチップを追加する( Cチップ cc, int nレーン番号, int n位置grid ) + { + Cクリップセル item = new Cクリップセル(); + item.pチップ = new Cチップ(); + item.pチップ.tコピーfrom( cc ); + item.nレーン番号 = nレーン番号; + item.n位置grid = n位置grid; + this.cbボード.Add( item ); + } + public void t現在選択されているチップをボードにコピーする() + { + this.tクリアする(); + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + int num = this._Form.mgr譜面管理者.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + foreach( Cチップ cチップ in c小節.listチップ ) + { + if( cチップ.b確定選択中 ) + { + this.tチップを追加する( cチップ, cチップ.nレーン番号0to, num + cチップ.n位置grid ); + } + } + } + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private List cbボード = new List(); + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cチップ.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cチップ.cs new file mode 100644 index 00000000..82e909bb --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cチップ.cs @@ -0,0 +1,225 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using FDK; + +namespace DTXCreator.譜面 +{ + public class Cチップ : IComparable + { + public bool bドラッグで選択中; + public bool b移動済; + public bool b確定選択中; + public bool b裏; + public float f値・浮動小数; + public int n移動開始時のレーン番号0to; + public int n移動開始時の小節内の位置grid; + public int n移動開始時の小節番号0to; + public int n読み込み時の解像度 = 0xc0; + public int n枠外レーン数; + public int nチャンネル番号00toFF + { + get + { + return this._nチャンネル番号00toFF; + } + set + { + if( ( value < 0 ) || ( value > 0xff ) ) + { + throw new Exception( "値が範囲(0~255)を超えています。-->[" + value + "]" ); + } + this._nチャンネル番号00toFF = value; + } + } + public int nレーン番号0to + { + get + { + return this._nレーン番号0to; + } + set + { + if( value < 0 ) + { + throw new Exception( "値が範囲を超えています。-->[" + value + "]" ); + } + this._nレーン番号0to = value; + } + } + public int n位置grid + { + get + { + return this._n位置grid; + } + set + { + this._n位置grid = value; + } + } + public int n値・整数1to1295 + { + get + { + return this._n値・整数1to1295; + } + set + { + if( ( value < 0 ) || ( value > 0x50f ) ) + { + throw new Exception( "値が範囲(0~1295)を超えています。-->[" + value + "]" ); + } + this._n値・整数1to1295 = value; + } + } + public static readonly int nチップの高さdot = 9; + + public int CompareTo( Cチップ other ) + { + return ( this.n位置grid - other.n位置grid ); + } + public static void tOPENチップを描画する( Graphics g, Rectangle rcチップ描画領域 ) + { + t表チップを描画する・本体( g, rcチップ描画領域, Color.White ); + string str = "O P E N"; + t表チップを描画する・番号( g, rcチップ描画領域, str ); + } + public void tコピーfrom( Cチップ ccコピー元 ) + { + this._nチャンネル番号00toFF = ccコピー元._nチャンネル番号00toFF; + this._nレーン番号0to = ccコピー元._nレーン番号0to; + this._n値・整数1to1295 = ccコピー元._n値・整数1to1295; + this.f値・浮動小数 = ccコピー元.f値・浮動小数; + this._n位置grid = ccコピー元._n位置grid; + this.b裏 = ccコピー元.b裏; + this.bドラッグで選択中 = ccコピー元.bドラッグで選択中; + this.b確定選択中 = ccコピー元.b確定選択中; + this.n読み込み時の解像度 = ccコピー元.n読み込み時の解像度; + this.b移動済 = ccコピー元.b移動済; + this.n枠外レーン数 = ccコピー元.n枠外レーン数; + this.n移動開始時の小節番号0to = ccコピー元.n移動開始時の小節番号0to; + this.n移動開始時のレーン番号0to = ccコピー元.n移動開始時のレーン番号0to; + this.n移動開始時の小節内の位置grid = ccコピー元.n移動開始時の小節内の位置grid; + } + public static void tチップの周囲の太枠を描画する( Graphics g, Rectangle rcチップ描画領域 ) + { + Pen pen = new Pen( Color.White, 2f ); + g.DrawRectangle( pen, rcチップ描画領域 ); + pen.Dispose(); + } + public static void t表チップを描画する( Graphics g, Rectangle rcチップ描画領域, int nチップ番号, Color col色 ) + { + t表チップを描画する・本体( g, rcチップ描画領域, col色 ); + if( nチップ番号 >= 0 ) + { + string str = C変換.str数値を36進数2桁に変換して返す( nチップ番号 ); + str = str[ 0 ] + " " + str[ 1 ]; + t表チップを描画する・番号( g, rcチップ描画領域, str ); + } + } + public static void t表チップを描画する( Graphics g, Rectangle rcチップ描画領域, float fチップ数値, Color col色 ) + { + t表チップを描画する・本体( g, rcチップ描画領域, col色 ); + if( fチップ数値 >= 0f ) + { + string str = fチップ数値.ToString(); + t表チップを描画する・番号( g, rcチップ描画領域, str ); + } + } + public static void t裏チップを描画する( Graphics g, Rectangle rcチップ描画領域, int nチップ番号, Color col色 ) + { + t裏チップを描画する・本体( g, rcチップ描画領域, col色 ); + if( nチップ番号 >= 0 ) + { + string str = C変換.str数値を36進数2桁に変換して返す( nチップ番号 ); + str = str[ 0 ] + " " + str[ 1 ]; + t裏チップを描画する・番号( g, rcチップ描画領域, str ); + } + } + public static void t裏チップを描画する( Graphics g, Rectangle rcチップ描画領域, float fチップ数値, Color col色 ) + { + t裏チップを描画する・本体( g, rcチップ描画領域, col色 ); + if( fチップ数値 >= 0f ) + { + string str = fチップ数値.ToString(); + t裏チップを描画する・番号( g, rcチップ描画領域, str ); + } + } + + protected static Font ftチップ文字用フォント = new Font( "MS Gothic", 8f, FontStyle.Bold ); + + #region [ private ] + //----------------- + private int _nチャンネル番号00toFF; + private int _nレーン番号0to; + private int _n位置grid; + private int _n値・整数1to1295; + + private static void t表チップを描画する・番号( Graphics g, Rectangle rcチップ描画領域, string str番号文字列 ) + { + StringFormat format = new StringFormat(); + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Near; + RectangleF layoutRectangle = new RectangleF(); + layoutRectangle.X = rcチップ描画領域.X; + layoutRectangle.Y = rcチップ描画領域.Y + 1; + layoutRectangle.Width = rcチップ描画領域.Width; + layoutRectangle.Height = rcチップ描画領域.Height; + g.DrawString( str番号文字列, ftチップ文字用フォント, Brushes.Black, layoutRectangle, format ); + layoutRectangle.X--; + layoutRectangle.Y--; + g.DrawString( str番号文字列, ftチップ文字用フォント, Brushes.White, layoutRectangle, format ); + } + private static void t表チップを描画する・本体( Graphics g, Rectangle rcチップ描画領域, Color col色 ) + { + SolidBrush brush = new SolidBrush( Color.FromArgb( 0x80, col色.R, col色.G, col色.B ) ); + Pen pen = new Pen( Color.FromArgb( 0xff, col色.R, col色.G, col色.B ) ); + Pen pen2 = new Pen( Color.FromArgb( 0x40, col色.R, col色.G, col色.B ) ); + g.FillRectangle( brush, rcチップ描画領域 ); + g.DrawLine( pen, rcチップ描画領域.X, rcチップ描画領域.Y, rcチップ描画領域.Right, rcチップ描画領域.Y ); + g.DrawLine( pen, rcチップ描画領域.X, rcチップ描画領域.Y, rcチップ描画領域.X, rcチップ描画領域.Bottom ); + g.DrawLine( pen2, rcチップ描画領域.X, rcチップ描画領域.Bottom, rcチップ描画領域.Right, rcチップ描画領域.Bottom ); + g.DrawLine( pen2, rcチップ描画領域.Right, rcチップ描画領域.Bottom, rcチップ描画領域.Right, rcチップ描画領域.Y ); + brush.Dispose(); + pen.Dispose(); + pen2.Dispose(); + } + private static void t裏チップを描画する・番号( Graphics g, Rectangle rcチップ描画領域, string str番号文字列 ) + { + StringFormat format = new StringFormat(); + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Near; + RectangleF layoutRectangle = new RectangleF(); + layoutRectangle.X = rcチップ描画領域.X; + layoutRectangle.Y = rcチップ描画領域.Y + 1; + layoutRectangle.Width = rcチップ描画領域.Width; + layoutRectangle.Height = rcチップ描画領域.Height; + g.DrawString( str番号文字列, ftチップ文字用フォント, Brushes.Black, layoutRectangle, format ); + layoutRectangle.X--; + layoutRectangle.Y--; + g.DrawString( str番号文字列, ftチップ文字用フォント, Brushes.White, layoutRectangle, format ); + } + private static void t裏チップを描画する・本体( Graphics g, Rectangle rcチップ描画領域, Color col色 ) + { + rcチップ描画領域.Width -= 8; + rcチップ描画領域.Height -= 2; + rcチップ描画領域.X += 4; + rcチップ描画領域.Y++; + SolidBrush brush = new SolidBrush( Color.FromArgb( 80, col色.R, col色.G, col色.B ) ); + Pen pen = new Pen( Color.FromArgb( 180, col色.R, col色.G, col色.B ) ); + Pen pen2 = new Pen( Color.FromArgb( 0x2c, col色.R, col色.G, col色.B ) ); + g.FillRectangle( brush, rcチップ描画領域 ); + g.DrawLine( pen, rcチップ描画領域.X, rcチップ描画領域.Y, rcチップ描画領域.Right, rcチップ描画領域.Y ); + g.DrawLine( pen, rcチップ描画領域.X, rcチップ描画領域.Y, rcチップ描画領域.X, rcチップ描画領域.Bottom ); + g.DrawLine( pen2, rcチップ描画領域.X, rcチップ描画領域.Bottom, rcチップ描画領域.Right, rcチップ描画領域.Bottom ); + g.DrawLine( pen2, rcチップ描画領域.Right, rcチップ描画領域.Bottom, rcチップ描画領域.Right, rcチップ描画領域.Y ); + brush.Dispose(); + pen.Dispose(); + pen2.Dispose(); + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cチップ位置用UndoRedo.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cチップ位置用UndoRedo.cs new file mode 100644 index 00000000..4a2201ca --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cチップ位置用UndoRedo.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.譜面 +{ + public class Cチップ位置用UndoRedo + { + public int nレーン番号0to; + public int n位置grid; + public int n小節番号0to; + public int n値・整数1to1295; + + public Cチップ位置用UndoRedo( int n小節番号0to, int nレーン番号0to, int n位置grid, int n値・整数0to1295 ) + { + this.n小節番号0to = n小節番号0to; + this.nレーン番号0to = nレーン番号0to; + this.n位置grid = n位置grid; + this.n値・整数1to1295 = n値・整数0to1295; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cチップ配置用UndoRedo.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cチップ配置用UndoRedo.cs new file mode 100644 index 00000000..70939e47 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cチップ配置用UndoRedo.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.譜面 +{ + public class Cチップ配置用UndoRedo + { + public Cチップ cc; + public int n小節番号0to; + + public Cチップ配置用UndoRedo( int n小節番号0to, Cチップ cc ) + { + this.n小節番号0to = n小節番号0to; + this.cc = cc; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cレーン.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cレーン.cs new file mode 100644 index 00000000..89094859 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cレーン.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace DTXCreator.譜面 +{ + public class Cレーン + { + public enum E種別 + { + BPM, + WAV, + BMP, + AVI, + FI, + GtV, + GtR, + GtG, + GtB, + GtW, + BsV, + BsR, + BsG, + BsB, + BsW + } + + public bool b右側の線が太線; + public Color col背景色 = Color.Black; + public E種別 eレーン種別 = E種別.WAV; + public int nチャンネル番号・表00toFF; + public int nチャンネル番号・裏00toFF; + public int nレーン割付チップ・表0or1to1295; + public int nレーン割付チップ・裏0or1to1295; + public int n位置Xdot; + public int n幅dot = 30; + public string strレーン名 = ""; + + public bool bパターンレーンである() + { + if( ( ( ( this.eレーン種別 != E種別.GtR ) && ( this.eレーン種別 != E種別.GtG ) ) && ( ( this.eレーン種別 != E種別.GtB ) && ( this.eレーン種別 != E種別.BsR ) ) ) && ( ( this.eレーン種別 != E種別.BsG ) && ( this.eレーン種別 != E種別.BsB ) ) ) + { + return false; + } + return true; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/Cレーン割付用UndoRedo.cs b/DTXCreatorプロジェクト/コード/05.譜面/Cレーン割付用UndoRedo.cs new file mode 100644 index 00000000..30c16e06 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/Cレーン割付用UndoRedo.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.譜面 +{ + public class Cレーン割付用UndoRedo + { + public bool b裏; + public Cレーン lc; + public int n番号0or1to1295; + + public Cレーン割付用UndoRedo( Cレーン lc, int n番号0or1to1295, bool b裏 ) + { + this.lc = lc; + this.n番号0or1to1295 = n番号0or1to1295; + this.b裏 = b裏; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C小節.cs b/DTXCreatorプロジェクト/コード/05.譜面/C小節.cs new file mode 100644 index 00000000..57a35d49 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C小節.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.譜面 +{ + public class C小節 : IComparable + { + public float f小節長倍率 = 1f; + public List listチップ = new List(); + public static int n基準の高さdot = 0xc0; + public static readonly int n基準の高さgrid = 0xc0; + public static int n1グリッドの高さdot + { + get + { + return ( n基準の高さdot / n基準の高さgrid ); + } + } + public int n小節長倍率を考慮した現在の小節の高さdot + { + get + { + return (int) ( n基準の高さdot * this.f小節長倍率 ); + } + } + public int n小節長倍率を考慮した現在の小節の高さgrid + { + get + { + return (int) ( n基準の高さgrid * this.f小節長倍率 ); + } + } + public int n小節番号0to3599 + { + get + { + return this._n小節番号0to3599; + } + set + { + if( ( value < 0 ) || ( value > 0xe0f ) ) + { + throw new Exception( "値が範囲(0~3599)を超えています。-->[" + value + "]" ); + } + this._n小節番号0to3599 = value; + } + } + + public C小節( int n小節番号0to3599 ) + { + this._n小節番号0to3599 = n小節番号0to3599; + } + public int CompareTo( C小節 other ) + { + return ( this._n小節番号0to3599 - other._n小節番号0to3599 ); + } + public int n位置変換count2grid( int nCount ) + { + return (int) ( ( ( n基準の高さgrid * this.f小節長倍率 ) * nCount ) / 384f ); + } + public static int n位置変換dot2grid( int nDot ) + { + return ( ( nDot * n基準の高さgrid ) / n基準の高さdot ); + } + public int n位置変換grid2count( int nGrid ) + { + return (int) ( ( nGrid * 384f ) / ( n基準の高さgrid * this.f小節長倍率 ) ); + } + public static int n位置変換grid2dot( int nGrid ) + { + return ( ( nGrid * n基準の高さdot ) / n基準の高さgrid ); + } + public void t小節内の全チップの移動済フラグをリセットする() + { + for( int i = 0; i < this.listチップ.Count; i++ ) + { + this.listチップ[ i ].b移動済 = false; + } + } + public void t小節内の全チップの選択を解除する() + { + for( int i = 0; i < this.listチップ.Count; i++ ) + { + Cチップ cチップ = this.listチップ[ i ]; + if( cチップ.b確定選択中 ) + { + this.listチップ[ i ].bドラッグで選択中 = false; + this.listチップ[ i ].b確定選択中 = false; + } + } + } + + #region [ private ] + //----------------- + private int _n小節番号0to3599; + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C小節用UndoRedo.cs b/DTXCreatorプロジェクト/コード/05.譜面/C小節用UndoRedo.cs new file mode 100644 index 00000000..3d219590 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C小節用UndoRedo.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DTXCreator.譜面 +{ + public class C小節用UndoRedo + { + public float f倍率; + public int n小節番号0to; + + public C小節用UndoRedo( int n小節番号0to, float f倍率 ) + { + this.n小節番号0to = n小節番号0to; + this.f倍率 = f倍率; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.Designer.cs new file mode 100644 index 00000000..acce4ea9 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.Designer.cs @@ -0,0 +1,160 @@ +namespace DTXCreator.譜面 +{ + partial class C小節長変更ダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.numericUpDown小節長の倍率 = new System.Windows.Forms.NumericUpDown(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.textBox小節番号 = new System.Windows.Forms.TextBox(); + this.checkBox後続設定 = new System.Windows.Forms.CheckBox(); + this.label小節長倍率 = new System.Windows.Forms.Label(); + this.label小節番号 = new System.Windows.Forms.Label(); + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDown小節長の倍率 ) ).BeginInit(); + this.SuspendLayout(); + // + // numericUpDown小節長の倍率 + // + this.numericUpDown小節長の倍率.DecimalPlaces = 3; + this.numericUpDown小節長の倍率.Font = new System.Drawing.Font( "MS UI Gothic", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (byte) ( 128 ) ) ); + this.numericUpDown小節長の倍率.Increment = new decimal( new int[] { + 5, + 0, + 0, + 131072} ); + this.numericUpDown小節長の倍率.Location = new System.Drawing.Point( 109, 35 ); + this.numericUpDown小節長の倍率.Minimum = new decimal( new int[] { + 1, + 0, + 0, + 196608} ); + this.numericUpDown小節長の倍率.Name = "numericUpDown小節長の倍率"; + this.numericUpDown小節長の倍率.Size = new System.Drawing.Size( 85, 26 ); + this.numericUpDown小節長の倍率.TabIndex = 0; + this.numericUpDown小節長の倍率.Value = new decimal( new int[] { + 1, + 0, + 0, + 0} ); + this.numericUpDown小節長の倍率.KeyDown += new System.Windows.Forms.KeyEventHandler( this.numericUpDown小節長の倍率_KeyDown ); + // + // buttonOK + // + this.buttonOK.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point( 172, 97 ); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size( 75, 23 ); + this.buttonOK.TabIndex = 2; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // buttonキャンセル + // + this.buttonキャンセル.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonキャンセル.Location = new System.Drawing.Point( 253, 97 ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.Size = new System.Drawing.Size( 75, 23 ); + this.buttonキャンセル.TabIndex = 3; + this.buttonキャンセル.Text = "キャンセル"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // textBox小節番号 + // + this.textBox小節番号.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox小節番号.Location = new System.Drawing.Point( 86, 14 ); + this.textBox小節番号.Name = "textBox小節番号"; + this.textBox小節番号.ReadOnly = true; + this.textBox小節番号.Size = new System.Drawing.Size( 53, 12 ); + this.textBox小節番号.TabIndex = 5; + // + // checkBox後続設定 + // + this.checkBox後続設定.AutoSize = true; + this.checkBox後続設定.Location = new System.Drawing.Point( 109, 67 ); + this.checkBox後続設定.Name = "checkBox後続設定"; + this.checkBox後続設定.Size = new System.Drawing.Size( 212, 16 ); + this.checkBox後続設定.TabIndex = 1; + this.checkBox後続設定.Text = "後続の小節の倍率もすべて変更する(&F)"; + this.checkBox後続設定.UseVisualStyleBackColor = true; + this.checkBox後続設定.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBox後続設定_KeyDown ); + // + // label小節長倍率 + // + this.label小節長倍率.AutoSize = true; + this.label小節長倍率.Location = new System.Drawing.Point( 13, 43 ); + this.label小節長倍率.Name = "label小節長倍率"; + this.label小節長倍率.Size = new System.Drawing.Size( 91, 12 ); + this.label小節長倍率.TabIndex = 6; + this.label小節長倍率.Text = "小節長の倍率(&R)\r\n"; + // + // label小節番号 + // + this.label小節番号.AutoSize = true; + this.label小節番号.Location = new System.Drawing.Point( 13, 14 ); + this.label小節番号.Name = "label小節番号"; + this.label小節番号.Size = new System.Drawing.Size( 53, 12 ); + this.label小節番号.TabIndex = 4; + this.label小節番号.Text = "小節番号"; + // + // C小節長変更ダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 340, 132 ); + this.ControlBox = false; + this.Controls.Add( this.label小節番号 ); + this.Controls.Add( this.label小節長倍率 ); + this.Controls.Add( this.checkBox後続設定 ); + this.Controls.Add( this.textBox小節番号 ); + this.Controls.Add( this.buttonキャンセル ); + this.Controls.Add( this.buttonOK ); + this.Controls.Add( this.numericUpDown小節長の倍率 ); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "C小節長変更ダイアログ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "小節長変更"; + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDown小節長の倍率 ) ).EndInit(); + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.NumericUpDown numericUpDown小節長の倍率; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonキャンセル; + private System.Windows.Forms.TextBox textBox小節番号; + private System.Windows.Forms.CheckBox checkBox後続設定; + private System.Windows.Forms.Label label小節長倍率; + private System.Windows.Forms.Label label小節番号; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.cs b/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.cs new file mode 100644 index 00000000..3d39083c --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using FDK; + +namespace DTXCreator.譜面 +{ + public partial class C小節長変更ダイアログ : Form + { + public bool b後続変更 + { + get + { + return this.checkBox後続設定.Checked; + } + set + { + this.checkBox後続設定.CheckState = value ? CheckState.Checked : CheckState.Unchecked; + } + } + public float f倍率 + { + get + { + return (float) this.numericUpDown小節長の倍率.Value; + } + set + { + this.numericUpDown小節長の倍率.Value = (decimal) value; + } + } + + public C小節長変更ダイアログ( int n小節番号 ) + { + this.InitializeComponent(); + this.textBox小節番号.Text = C変換.str小節番号を文字列3桁に変換して返す( n小節番号 ); + } + + private void numericUpDown小節長の倍率_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBox後続設定_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.resx b/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C小節長変更ダイアログ.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.Designer.cs new file mode 100644 index 00000000..ffc128f0 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.Designer.cs @@ -0,0 +1,126 @@ +namespace DTXCreator.譜面 +{ + partial class C数値入力ダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.numericUpDown数値 = new System.Windows.Forms.NumericUpDown(); + this.labelメッセージ = new System.Windows.Forms.Label(); + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDown数値 ) ).BeginInit(); + this.SuspendLayout(); + // + // numericUpDown数値 + // + this.numericUpDown数値.DecimalPlaces = 4; + this.numericUpDown数値.Font = new System.Drawing.Font( "MS UI Gothic", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (byte) ( 128 ) ) ); + this.numericUpDown数値.Location = new System.Drawing.Point( 16, 45 ); + this.numericUpDown数値.Maximum = new decimal( new int[] { + 1000, + 0, + 0, + 0} ); + this.numericUpDown数値.Minimum = new decimal( new int[] { + 1, + 0, + 0, + 262144} ); + this.numericUpDown数値.Name = "numericUpDown数値"; + this.numericUpDown数値.Size = new System.Drawing.Size( 120, 26 ); + this.numericUpDown数値.TabIndex = 1; + this.numericUpDown数値.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown数値.Value = new decimal( new int[] { + 1, + 0, + 0, + 262144} ); + this.numericUpDown数値.KeyDown += new System.Windows.Forms.KeyEventHandler( this.numericUpDown数値_KeyDown ); + // + // labelメッセージ + // + this.labelメッセージ.AutoSize = true; + this.labelメッセージ.Location = new System.Drawing.Point( 14, 11 ); + this.labelメッセージ.Name = "labelメッセージ"; + this.labelメッセージ.Size = new System.Drawing.Size( 121, 12 ); + this.labelメッセージ.TabIndex = 0; + this.labelメッセージ.Text = "数値を入力してください。\r\n"; + // + // buttonキャンセル + // + this.buttonキャンセル.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonキャンセル.Location = new System.Drawing.Point( 92, 90 ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.Size = new System.Drawing.Size( 75, 23 ); + this.buttonキャンセル.TabIndex = 3; + this.buttonキャンセル.Text = "キャンセル"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // buttonOK + // + this.buttonOK.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point( 11, 90 ); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size( 75, 23 ); + this.buttonOK.TabIndex = 2; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // C数値入力ダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 179, 125 ); + this.ControlBox = false; + this.Controls.Add( this.buttonOK ); + this.Controls.Add( this.buttonキャンセル ); + this.Controls.Add( this.labelメッセージ ); + this.Controls.Add( this.numericUpDown数値 ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "C数値入力ダイアログ"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "数値入力"; + ( (System.ComponentModel.ISupportInitialize) ( this.numericUpDown数値 ) ).EndInit(); + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.NumericUpDown numericUpDown数値; + private System.Windows.Forms.Label labelメッセージ; + private System.Windows.Forms.Button buttonキャンセル; + private System.Windows.Forms.Button buttonOK; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.cs b/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.cs new file mode 100644 index 00000000..2c2f2fce --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; + +namespace DTXCreator.譜面 +{ + public partial class C数値入力ダイアログ : Form + { + public decimal dc数値 + { + get + { + return this.numericUpDown数値.Value; + } + } + + public C数値入力ダイアログ() + { + this.InitializeComponent(); + } + public C数値入力ダイアログ( decimal dc開始値, decimal dc最小値, decimal dc最大値, string strメッセージ ) + { + this.InitializeComponent(); + this.labelメッセージ.Text = strメッセージ; + this.numericUpDown数値.Value = dc開始値; + this.numericUpDown数値.Minimum = dc最小値; + this.numericUpDown数値.Maximum = dc最大値; + } + + private void numericUpDown数値_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.resx b/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C数値入力ダイアログ.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.Designer.cs new file mode 100644 index 00000000..8d4bbefc --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.Designer.cs @@ -0,0 +1,229 @@ +namespace DTXCreator.譜面 +{ + partial class C検索ダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager( typeof( C検索ダイアログ ) ); + this.toolTip1 = new System.Windows.Forms.ToolTip( this.components ); + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxチップ範囲開始 = new System.Windows.Forms.TextBox(); + this.textBoxチップ範囲終了 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox小節範囲開始 = new System.Windows.Forms.TextBox(); + this.textBox小節範囲終了 = new System.Windows.Forms.TextBox(); + this.label説明 = new System.Windows.Forms.Label(); + this.checkBox小節範囲指定 = new System.Windows.Forms.CheckBox(); + this.checkBoxチップ範囲指定 = new System.Windows.Forms.CheckBox(); + this.checkBoxレーン指定 = new System.Windows.Forms.CheckBox(); + this.checkedListBoxレーン選択リスト = new System.Windows.Forms.CheckedListBox(); + this.checkBox表チップ = new System.Windows.Forms.CheckBox(); + this.checkBox裏チップ = new System.Windows.Forms.CheckBox(); + this.buttonNONE = new System.Windows.Forms.Button(); + this.buttonALL = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // buttonキャンセル + // + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources( this.buttonキャンセル, "buttonキャンセル" ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // buttonOK + // + resources.ApplyResources( this.buttonOK, "buttonOK" ); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Name = "buttonOK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // label1 + // + resources.ApplyResources( this.label1, "label1" ); + this.label1.Name = "label1"; + // + // textBoxチップ範囲開始 + // + resources.ApplyResources( this.textBoxチップ範囲開始, "textBoxチップ範囲開始" ); + this.textBoxチップ範囲開始.Name = "textBoxチップ範囲開始"; + this.textBoxチップ範囲開始.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxチップ範囲開始_KeyDown ); + // + // textBoxチップ範囲終了 + // + resources.ApplyResources( this.textBoxチップ範囲終了, "textBoxチップ範囲終了" ); + this.textBoxチップ範囲終了.Name = "textBoxチップ範囲終了"; + this.textBoxチップ範囲終了.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBoxチップ範囲終了_KeyDown ); + // + // label2 + // + resources.ApplyResources( this.label2, "label2" ); + this.label2.Name = "label2"; + // + // textBox小節範囲開始 + // + resources.ApplyResources( this.textBox小節範囲開始, "textBox小節範囲開始" ); + this.textBox小節範囲開始.Name = "textBox小節範囲開始"; + this.textBox小節範囲開始.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBox小節範囲開始_KeyDown ); + // + // textBox小節範囲終了 + // + resources.ApplyResources( this.textBox小節範囲終了, "textBox小節範囲終了" ); + this.textBox小節範囲終了.Name = "textBox小節範囲終了"; + this.textBox小節範囲終了.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBox小節範囲終了_KeyDown ); + // + // label説明 + // + resources.ApplyResources( this.label説明, "label説明" ); + this.label説明.Name = "label説明"; + // + // checkBox小節範囲指定 + // + resources.ApplyResources( this.checkBox小節範囲指定, "checkBox小節範囲指定" ); + this.checkBox小節範囲指定.Name = "checkBox小節範囲指定"; + this.toolTip1.SetToolTip( this.checkBox小節範囲指定, resources.GetString( "checkBox小節範囲指定.ToolTip" ) ); + this.checkBox小節範囲指定.UseVisualStyleBackColor = true; + this.checkBox小節範囲指定.CheckStateChanged += new System.EventHandler( this.checkBox小節範囲指定_CheckStateChanged ); + this.checkBox小節範囲指定.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBox小節範囲指定_KeyDown ); + // + // checkBoxチップ範囲指定 + // + resources.ApplyResources( this.checkBoxチップ範囲指定, "checkBoxチップ範囲指定" ); + this.checkBoxチップ範囲指定.Name = "checkBoxチップ範囲指定"; + this.toolTip1.SetToolTip( this.checkBoxチップ範囲指定, resources.GetString( "checkBoxチップ範囲指定.ToolTip" ) ); + this.checkBoxチップ範囲指定.UseVisualStyleBackColor = true; + this.checkBoxチップ範囲指定.CheckStateChanged += new System.EventHandler( this.checkBoxチップ範囲指定_CheckStateChanged ); + this.checkBoxチップ範囲指定.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBoxチップ範囲指定_KeyDown ); + // + // checkBoxレーン指定 + // + resources.ApplyResources( this.checkBoxレーン指定, "checkBoxレーン指定" ); + this.checkBoxレーン指定.Name = "checkBoxレーン指定"; + this.toolTip1.SetToolTip( this.checkBoxレーン指定, resources.GetString( "checkBoxレーン指定.ToolTip" ) ); + this.checkBoxレーン指定.UseVisualStyleBackColor = true; + this.checkBoxレーン指定.CheckStateChanged += new System.EventHandler( this.checkBoxレーン指定_CheckStateChanged ); + this.checkBoxレーン指定.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBoxレーン指定_KeyDown ); + // + // checkedListBoxレーン選択リスト + // + resources.ApplyResources( this.checkedListBoxレーン選択リスト, "checkedListBoxレーン選択リスト" ); + this.checkedListBoxレーン選択リスト.FormattingEnabled = true; + this.checkedListBoxレーン選択リスト.Name = "checkedListBoxレーン選択リスト"; + this.toolTip1.SetToolTip( this.checkedListBoxレーン選択リスト, resources.GetString( "checkedListBoxレーン選択リスト.ToolTip" ) ); + this.checkedListBoxレーン選択リスト.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkedListBoxレーン選択リスト_KeyDown ); + // + // checkBox表チップ + // + resources.ApplyResources( this.checkBox表チップ, "checkBox表チップ" ); + this.checkBox表チップ.Name = "checkBox表チップ"; + this.toolTip1.SetToolTip( this.checkBox表チップ, resources.GetString( "checkBox表チップ.ToolTip" ) ); + this.checkBox表チップ.UseVisualStyleBackColor = true; + this.checkBox表チップ.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBox表チップ_KeyDown ); + // + // checkBox裏チップ + // + resources.ApplyResources( this.checkBox裏チップ, "checkBox裏チップ" ); + this.checkBox裏チップ.Name = "checkBox裏チップ"; + this.toolTip1.SetToolTip( this.checkBox裏チップ, resources.GetString( "checkBox裏チップ.ToolTip" ) ); + this.checkBox裏チップ.UseVisualStyleBackColor = true; + this.checkBox裏チップ.KeyDown += new System.Windows.Forms.KeyEventHandler( this.checkBox裏チップ_KeyDown ); + // + // buttonNONE + // + resources.ApplyResources( this.buttonNONE, "buttonNONE" ); + this.buttonNONE.Name = "buttonNONE"; + this.toolTip1.SetToolTip( this.buttonNONE, resources.GetString( "buttonNONE.ToolTip" ) ); + this.buttonNONE.UseVisualStyleBackColor = true; + this.buttonNONE.Click += new System.EventHandler( this.buttonNONE_Click ); + this.buttonNONE.KeyDown += new System.Windows.Forms.KeyEventHandler( this.buttonNONE_KeyDown ); + // + // buttonALL + // + resources.ApplyResources( this.buttonALL, "buttonALL" ); + this.buttonALL.Name = "buttonALL"; + this.toolTip1.SetToolTip( this.buttonALL, resources.GetString( "buttonALL.ToolTip" ) ); + this.buttonALL.UseVisualStyleBackColor = true; + this.buttonALL.Click += new System.EventHandler( this.buttonALL_Click ); + this.buttonALL.KeyDown += new System.Windows.Forms.KeyEventHandler( this.buttonALL_KeyDown ); + // + // C検索ダイアログ + // + resources.ApplyResources( this, "$this" ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ControlBox = false; + this.Controls.Add( this.buttonALL ); + this.Controls.Add( this.buttonNONE ); + this.Controls.Add( this.checkBox裏チップ ); + this.Controls.Add( this.checkBox表チップ ); + this.Controls.Add( this.checkedListBoxレーン選択リスト ); + this.Controls.Add( this.checkBoxレーン指定 ); + this.Controls.Add( this.checkBoxチップ範囲指定 ); + this.Controls.Add( this.checkBox小節範囲指定 ); + this.Controls.Add( this.label説明 ); + this.Controls.Add( this.textBox小節範囲終了 ); + this.Controls.Add( this.textBox小節範囲開始 ); + this.Controls.Add( this.label2 ); + this.Controls.Add( this.textBoxチップ範囲終了 ); + this.Controls.Add( this.textBoxチップ範囲開始 ); + this.Controls.Add( this.label1 ); + this.Controls.Add( this.buttonOK ); + this.Controls.Add( this.buttonキャンセル ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "C検索ダイアログ"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler( this.C検索ダイアログ_FormClosing ); + this.KeyDown += new System.Windows.Forms.KeyEventHandler( this.C検索ダイアログ_KeyDown ); + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Button buttonキャンセル; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxチップ範囲開始; + private System.Windows.Forms.TextBox textBoxチップ範囲終了; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox小節範囲開始; + private System.Windows.Forms.TextBox textBox小節範囲終了; + private System.Windows.Forms.Label label説明; + private System.Windows.Forms.CheckBox checkBox小節範囲指定; + private System.Windows.Forms.CheckBox checkBoxチップ範囲指定; + private System.Windows.Forms.CheckBox checkBoxレーン指定; + private System.Windows.Forms.CheckedListBox checkedListBoxレーン選択リスト; + private System.Windows.Forms.CheckBox checkBox表チップ; + private System.Windows.Forms.CheckBox checkBox裏チップ; + private System.Windows.Forms.Button buttonNONE; + private System.Windows.Forms.Button buttonALL; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.cs b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.cs new file mode 100644 index 00000000..1d08494d --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.cs @@ -0,0 +1,452 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using DTXCreator.Properties; +using FDK; + +namespace DTXCreator.譜面 +{ + public partial class C検索ダイアログ : Form + { + public static bool b前回値_チップ範囲指定 = true; + public static bool[] b前回値_レーンリストチェック = null; + public static bool b前回値_レーン指定 = false; + public static bool b前回値_小節範囲指定 = false; + public static bool b前回値_表チップ = true; + public static bool b前回値_裏チップ = true; + public static string[] str前回値_レーンリスト = null; + + public bool bチップ範囲指定CheckBoxがチェックされている + { + get + { + return this.checkBoxチップ範囲指定.Checked; + } + } + public bool bレーンリストの内訳が生成済みである + { + get + { + if( str前回値_レーンリスト == null ) + { + return false; + } + return true; + } + } + public bool bレーン指定CheckBoxがチェックされている + { + get + { + return this.checkBoxレーン指定.Checked; + } + } + public bool b小節範囲指定CheckBoxがチェックされている + { + get + { + return this.checkBox小節範囲指定.Checked; + } + } + public bool b表チップCheckBoxがチェックされている + { + get + { + return this.checkBox表チップ.Checked; + } + } + public bool b裏チップCheckBoxがチェックされている + { + get + { + return this.checkBox裏チップ.Checked; + } + } + public int nチップ範囲開始番号 + { + get + { + if( this.textBoxチップ範囲開始.Text.Length > 0 ) + { + string num = this.textBoxチップ範囲開始.Text; + if( num.Length == 1 ) + { + num = "0" + num; + } + return C変換.n36進数2桁の文字列を数値に変換して返す( num ); + } + if( this.textBoxチップ範囲終了.Text.Length <= 0 ) + { + return -1; + } + string text = this.textBoxチップ範囲終了.Text; + if( text.Length == 1 ) + { + text = "0" + text; + } + return C変換.n36進数2桁の文字列を数値に変換して返す( text ); + } + } + public int nチップ範囲終了番号 + { + get + { + if( this.textBoxチップ範囲終了.Text.Length > 0 ) + { + string num = this.textBoxチップ範囲終了.Text; + if( num.Length == 1 ) + { + num = "0" + num; + } + return C変換.n36進数2桁の文字列を数値に変換して返す( num ); + } + if( this.textBoxチップ範囲開始.Text.Length <= 0 ) + { + return -1; + } + string text = this.textBoxチップ範囲開始.Text; + if( text.Length == 1 ) + { + text = "0" + text; + } + return C変換.n36進数2桁の文字列を数値に変換して返す( text ); + } + } + public int n小節範囲開始番号 + { + get + { + int num2; + if( this.textBox小節範囲開始.Text.Length > 0 ) + { + int num; + if( !int.TryParse( this.textBox小節範囲開始.Text, out num ) ) + { + num = -1; + } + return num; + } + if( this.textBox小節範囲終了.Text.Length <= 0 ) + { + return -1; + } + if( !int.TryParse( this.textBox小節範囲終了.Text, out num2 ) ) + { + num2 = -1; + } + return num2; + } + } + public int n小節範囲終了番号 + { + get + { + int num2; + if( this.textBox小節範囲終了.Text.Length > 0 ) + { + int num; + if( !int.TryParse( this.textBox小節範囲終了.Text, out num ) ) + { + num = -1; + } + return num; + } + if( this.textBox小節範囲開始.Text.Length <= 0 ) + { + return -1; + } + if( !int.TryParse( this.textBox小節範囲開始.Text, out num2 ) ) + { + num2 = -1; + } + return num2; + } + } + + public C検索ダイアログ() + { + this.InitializeComponent(); + this.checkBoxレーン指定.CheckState = b前回値_レーン指定 ? CheckState.Checked : CheckState.Unchecked; + this.checkBoxチップ範囲指定.CheckState = b前回値_チップ範囲指定 ? CheckState.Checked : CheckState.Unchecked; + this.checkBox小節範囲指定.CheckState = b前回値_小節範囲指定 ? CheckState.Checked : CheckState.Unchecked; + this.checkBox表チップ.CheckState = b前回値_表チップ ? CheckState.Checked : CheckState.Unchecked; + this.checkBox裏チップ.CheckState = b前回値_裏チップ ? CheckState.Checked : CheckState.Unchecked; + if( ( str前回値_レーンリスト != null ) && ( str前回値_レーンリスト.Length > 0 ) ) + { + for( int i = 0; i < str前回値_レーンリスト.Length; i++ ) + { + this.checkedListBoxレーン選択リスト.Items.Add( str前回値_レーンリスト[ i ], b前回値_レーンリストチェック[ i ] ); + } + } + this.tチェックに連動して有効・無効が決まるパーツについてEnabledを設定する(); + } + public bool bレーンが検索対象である( int nレーン番号 ) + { + if( ( nレーン番号 < 0 ) || ( nレーン番号 >= this.checkedListBoxレーン選択リスト.Items.Count ) ) + { + return false; + } + if( this.checkedListBoxレーン選択リスト.GetItemCheckState( nレーン番号 ) != CheckState.Checked ) + { + return false; + } + return true; + } + public void tレーンリストの内訳を生成する( string[] strリスト要素 ) + { + b前回値_レーンリストチェック = new bool[ strリスト要素.Length ]; + for( int i = 0; i < strリスト要素.Length; i++ ) + { + this.checkedListBoxレーン選択リスト.Items.Add( strリスト要素[ i ] ); + b前回値_レーンリストチェック[ i ] = false; + } + str前回値_レーンリスト = strリスト要素; + } + + private void tチェックに連動して有効・無効が決まるパーツについてEnabledを設定する() + { + bool flag = this.checkBoxレーン指定.Checked; + this.buttonALL.Enabled = flag; + this.buttonNONE.Enabled = flag; + this.checkedListBoxレーン選択リスト.Enabled = flag; + flag = this.checkBoxチップ範囲指定.Checked; + this.textBoxチップ範囲開始.Enabled = flag; + this.textBoxチップ範囲終了.Enabled = flag; + flag = this.checkBox小節範囲指定.Checked; + this.textBox小節範囲開始.Enabled = flag; + this.textBox小節範囲終了.Enabled = flag; + } + + private void C検索ダイアログ_FormClosing( object sender, FormClosingEventArgs e ) + { + if( base.DialogResult == DialogResult.OK ) + { + string text = this.textBoxチップ範囲開始.Text; + if( text.Length == 1 ) + { + text = "0" + text; + } + if( ( text.Length > 0 ) && ( ( text.Length > 2 ) || ( C変換.n36進数2桁の文字列を数値に変換して返す( text ) == -1 ) ) ) + { + MessageBox.Show( Resources.strチップ番号に誤りがありますMSG + Environment.NewLine + "'" + text + "'", Resources.strエラーダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + this.textBoxチップ範囲開始.Focus(); + this.textBoxチップ範囲開始.SelectAll(); + e.Cancel = true; + } + else + { + text = this.textBoxチップ範囲終了.Text; + if( text.Length == 1 ) + { + text = "0" + text; + } + if( ( text.Length > 0 ) && ( ( text.Length > 2 ) || ( C変換.n36進数2桁の文字列を数値に変換して返す( text ) == -1 ) ) ) + { + MessageBox.Show( Resources.strチップ番号に誤りがありますMSG + Environment.NewLine + "'" + text + "'", Resources.strエラーダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + this.textBoxチップ範囲終了.Focus(); + this.textBoxチップ範囲終了.SelectAll(); + e.Cancel = true; + } + else + { + int num; + text = this.textBox小節範囲開始.Text; + if( ( text.Length > 0 ) && ( !int.TryParse( text, out num ) || ( num < 0 ) ) ) + { + MessageBox.Show( Resources.str小節番号に誤りがありますMSG + Environment.NewLine + "'" + text + "'", Resources.strエラーダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + this.textBox小節範囲開始.Focus(); + this.textBox小節範囲開始.SelectAll(); + e.Cancel = true; + } + else + { + text = this.textBox小節範囲終了.Text; + if( ( text.Length > 0 ) && ( !int.TryParse( text, out num ) || ( num < 0 ) ) ) + { + MessageBox.Show( Resources.str小節番号に誤りがありますMSG + Environment.NewLine + "'" + text + "'", Resources.strエラーダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + this.textBox小節範囲終了.Focus(); + this.textBox小節範囲終了.SelectAll(); + e.Cancel = true; + } + else + { + b前回値_レーン指定 = this.checkBoxレーン指定.Checked; + b前回値_チップ範囲指定 = this.checkBoxチップ範囲指定.Checked; + b前回値_小節範囲指定 = this.checkBox小節範囲指定.Checked; + b前回値_表チップ = this.checkBox表チップ.Checked; + b前回値_裏チップ = this.checkBox裏チップ.Checked; + for( int i = 0; i < this.checkedListBoxレーン選択リスト.Items.Count; i++ ) + { + b前回値_レーンリストチェック[ i ] = this.checkedListBoxレーン選択リスト.GetItemCheckState( i ) == CheckState.Checked; + } + } + } + } + } + } + } + private void C検索ダイアログ_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBoxチップ範囲開始_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBoxチップ範囲終了_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBox小節範囲開始_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBox小節範囲終了_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBox小節範囲指定_CheckStateChanged( object sender, EventArgs e ) + { + this.tチェックに連動して有効・無効が決まるパーツについてEnabledを設定する(); + } + private void checkBox小節範囲指定_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBoxチップ範囲指定_CheckStateChanged( object sender, EventArgs e ) + { + this.tチェックに連動して有効・無効が決まるパーツについてEnabledを設定する(); + } + private void checkBoxチップ範囲指定_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBoxレーン指定_CheckStateChanged( object sender, EventArgs e ) + { + this.tチェックに連動して有効・無効が決まるパーツについてEnabledを設定する(); + } + private void checkBoxレーン指定_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkedListBoxレーン選択リスト_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBox表チップ_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void checkBox裏チップ_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.buttonOK.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void buttonNONE_Click( object sender, EventArgs e ) + { + for( int i = 0; i < this.checkedListBoxレーン選択リスト.Items.Count; i++ ) + { + this.checkedListBoxレーン選択リスト.SetItemCheckState( i, CheckState.Unchecked ); + } + } + private void buttonNONE_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void buttonALL_Click( object sender, EventArgs e ) + { + for( int i = 0; i < this.checkedListBoxレーン選択リスト.Items.Count; i++ ) + { + this.checkedListBoxレーン選択リスト.SetItemChecked( i, true ); + } + } + private void buttonALL_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.ja-JP.resx b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.ja-JP.resx new file mode 100644 index 00000000..6e395b56 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.ja-JP.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.resx b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.resx new file mode 100644 index 00000000..19c7418d --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C検索ダイアログ.resx @@ -0,0 +1,622 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + 307, 165 + + + 75, 23 + + + + 13 + + + キャンセル + + + + buttonキャンセル + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 16 + + + + Bottom, Right + + + 226, 165 + + + 75, 23 + + + 12 + + + 検索 + + + buttonOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 15 + + + True + + + 313, 39 + + + 17, 12 + + + 15 + + + ~ + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + 257, 36 + + + 50, 19 + + + 0 + + + textBoxチップ範囲開始 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + 336, 36 + + + 50, 19 + + + 1 + + + textBoxチップ範囲終了 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + True + + + 313, 106 + + + 17, 12 + + + 16 + + + ~ + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + 257, 103 + + + 50, 19 + + + 6 + + + textBox小節範囲開始 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + 336, 103 + + + 50, 19 + + + 7 + + + textBox小節範囲終了 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + True + + + 12, 11 + + + 185, 12 + + + 14 + + + 以下の条件に合うチップを選択します。 + + + + label説明 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + True + + + 139, 105 + + + 111, 16 + + + 5 + + + 小節範囲指定(&S) + + + 検索したい小節を範囲指定します。 + + + + checkBox小節範囲指定 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + True + + + 139, 38 + + + 113, 16 + + + 2 + + + チップ範囲指定(&C) + + + 検索したいチップの番号を範囲指定します。 + + + + checkBoxチップ範囲指定 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + True + + + 12, 38 + + + 90, 16 + + + 8 + + + レーン指定(&L) + + + + 指定したレーンのみ検索します。 + + + + checkBoxレーン指定 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Top, Bottom, Left + + + 12, 83 + + + 100, 102 + + + 11 + + + 検索したいレーンにチェックを入れます。 + + + + checkedListBoxレーン選択リスト + + + System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + 139, 61 + + + 137, 16 + + + 3 + + + 表チップから選択する(&F) + + + 表チップだけを検索対象にします。 + + + + checkBox表チップ + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + 139, 83 + + + 138, 16 + + + 4 + + + 裏チップから選択する(&B) + + + 裏チップだけを検索対象にします。 + + + checkBox裏チップ + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Popup + + + ï¼­ï¼³ ゴシック, 8.25pt + + + 70, 61 + + + 42, 19 + + + 10 + + + None + + + 全レーンのチェックをはずします。 + + + + buttonNONE + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Popup + + + ï¼­ï¼³ ゴシック, 8.25pt + + + 29, 61 + + + 42, 19 + + + 9 + + + All + + + 全レーンにチェックを付けます。 + + + + buttonALL + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 12 + + + 394, 200 + + + CenterParent + + + 検索 + + + toolTip1 + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + C検索ダイアログ + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C編集モード管理.cs b/DTXCreatorプロジェクト/コード/05.譜面/C編集モード管理.cs new file mode 100644 index 00000000..45613988 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C編集モード管理.cs @@ -0,0 +1,315 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Windows.Forms; +using DTXCreator.UndoRedo; +using DTXCreator.WAV_BMP_AVI; +using DTXCreator.Properties; + +namespace DTXCreator.譜面 +{ + public class C編集モード管理 + { + public C編集モード管理( Cメインフォーム formメインフォーム ) + { + this._Form = formメインフォーム; + this.mgr譜面管理者ref = formメインフォーム.mgr譜面管理者; + } + internal void MouseClick( MouseEventArgs e ) + { + if( e.Y < ( C譜面管理.nレーン割付チップ番号表示高さdot + 10 ) ) + { + Cレーン lc = this.mgr譜面管理者ref.listレーン[ this.n現在のチップカーソルがあるレーン番号0to ]; + if( ( ( ( lc.eレーン種別 == Cレーン.E種別.GtR ) || ( lc.eレーン種別 == Cレーン.E種別.GtG ) ) || ( ( lc.eレーン種別 == Cレーン.E種別.GtB ) || ( lc.eレーン種別 == Cレーン.E種別.BsR ) ) ) || ( ( lc.eレーン種別 == Cレーン.E種別.BsG ) || ( lc.eレーン種別 == Cレーン.E種別.BsB ) ) ) + { + return; + } + if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control ) + { + int num = ( e.Button == MouseButtons.Left ) ? ( this._Form.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 + 1 ) : 0; + if( num != lc.nレーン割付チップ・表0or1to1295 ) + { + Cレーン割付用UndoRedo redo = new Cレーン割付用UndoRedo( lc, lc.nレーン割付チップ・表0or1to1295, false ); + Cレーン割付用UndoRedo redo2 = new Cレーン割付用UndoRedo( lc, num, false ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tレーン割付のUndo ), new DGRedoを実行する( this.tレーン割付のRedo ), redo, redo2 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + lc.nレーン割付チップ・表0or1to1295 = num; + } + } + else + { + int num2 = ( e.Button == MouseButtons.Left ) ? ( this._Form.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 + 1 ) : 0; + if( num2 != lc.nレーン割付チップ・裏0or1to1295 ) + { + Cレーン割付用UndoRedo redo3 = new Cレーン割付用UndoRedo( lc, lc.nレーン割付チップ・裏0or1to1295, true ); + Cレーン割付用UndoRedo redo4 = new Cレーン割付用UndoRedo( lc, num2, true ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tレーン割付のUndo ), new DGRedoを実行する( this.tレーン割付のRedo ), redo3, redo4 ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + lc.nレーン割付チップ・裏0or1to1295 = num2; + } + } + } + else + { + this.tチップの配置または削除( e ); + } + this._Form.pictureBox譜面パネル.Refresh(); + } + internal void MouseLeave( EventArgs e ) + { + this.rc現在のチップカーソル領域.X = 0; + this.rc現在のチップカーソル領域.Y = 0; + this.rc現在のチップカーソル領域.Width = 0; + this.rc現在のチップカーソル領域.Height = 0; + this._Form.pictureBox譜面パネル.Refresh(); + } + internal void MouseMove( MouseEventArgs e ) + { + Rectangle rectangle = new Rectangle( this.rc現在のチップカーソル領域.Location, this.rc現在のチップカーソル領域.Size ); + this.n現在のチップカーソルがあるレーン番号0to = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( e.X ); + this.n現在のチップカーソルの譜面先頭からの位置grid = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( e.Y ); + if( e.Y < ( C譜面管理.nレーン割付チップ番号表示高さdot + 10 ) ) + { + this.rc現在のチップカーソル領域 = new Rectangle( 0, 0, 0, 0 ); + } + else + { + this.rc現在のチップカーソル領域 = new Rectangle( this.mgr譜面管理者ref.nレーンの左端X座標dotを返す( this.n現在のチップカーソルがあるレーン番号0to ), this.mgr譜面管理者ref.n譜面先頭からの位置gridから描画領域内のY座標dotを返す( this.n現在のチップカーソルの譜面先頭からの位置grid, this._Form.pictureBox譜面パネル.ClientSize ) - Cチップ.nチップの高さdot, this.mgr譜面管理者ref.listレーン[ this.n現在のチップカーソルがあるレーン番号0to ].n幅dot, Cチップ.nチップの高さdot ); + } + if( !rectangle.Equals( this.rc現在のチップカーソル領域 ) ) + { + this._Form.pictureBox譜面パネル.Refresh(); + } + } + internal void Paint( PaintEventArgs e ) + { + this.tチップカーソルを描画する( e.Graphics ); + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private C譜面管理 mgr譜面管理者ref; + private int n現在のチップカーソルがあるレーン番号0to; + private int n現在のチップカーソルの譜面先頭からの位置grid; + private Rectangle rc現在のチップカーソル領域 = new Rectangle( 0, 0, 0, 0 ); + + private bool b指定位置にRGBチップがひとつもない( int n譜面先頭からの位置grid, int nRレーン番号0to, int nGレーン番号0to, int nBレーン番号0to ) + { + C小節 c小節 = this.mgr譜面管理者ref.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + if( c小節 == null ) + { + return false; + } + int num = this.mgr譜面管理者ref.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + foreach( Cチップ cチップ in c小節.listチップ ) + { + if( ( ( num + cチップ.n位置grid ) == n譜面先頭からの位置grid ) && ( ( ( cチップ.nレーン番号0to == nRレーン番号0to ) || ( cチップ.nレーン番号0to == nGレーン番号0to ) ) || ( cチップ.nレーン番号0to == nBレーン番号0to ) ) ) + { + return false; + } + } + return true; + } + private void tチップカーソルを描画する( Graphics g ) + { + if( ( this.rc現在のチップカーソル領域.Width > 0 ) && ( this.rc現在のチップカーソル領域.Height > 0 ) ) + { + Cレーン cレーン = this.mgr譜面管理者ref.listレーン[ this.n現在のチップカーソルがあるレーン番号0to ]; + bool flag = ( Control.ModifierKeys & Keys.Control ) == Keys.Control; + int num = -1; + switch( cレーン.eレーン種別 ) + { + case Cレーン.E種別.GtR: + case Cレーン.E種別.GtG: + case Cレーン.E種別.GtB: + case Cレーン.E種別.BsR: + case Cレーン.E種別.BsG: + case Cレーン.E種別.BsB: + case Cレーン.E種別.BPM: + num = -1; + break; + + default: + num = this._Form.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 + 1; + if( ( Control.ModifierKeys & Keys.Shift ) != Keys.Shift ) + { + int num2 = flag ? cレーン.nレーン割付チップ・裏0or1to1295 : cレーン.nレーン割付チップ・表0or1to1295; + if( num2 != 0 ) + { + num = num2; + } + } + break; + } + if( !flag ) + { + Cチップ.t表チップを描画する( g, this.rc現在のチップカーソル領域, num, cレーン.col背景色 ); + } + else + { + Cチップ.t裏チップを描画する( g, this.rc現在のチップカーソル領域, num, cレーン.col背景色 ); + } + Cチップ.tチップの周囲の太枠を描画する( g, this.rc現在のチップカーソル領域 ); + } + } + private void tチップの配置または削除( MouseEventArgs e ) + { + if( ( this.rc現在のチップカーソル領域.Width > 0 ) && ( this.rc現在のチップカーソル領域.Height > 0 ) ) + { + if( e.Button == MouseButtons.Left ) + { + bool flag = ( Control.ModifierKeys & Keys.Control ) == Keys.Control; + bool flag2 = ( Control.ModifierKeys & Keys.Shift ) == Keys.Shift; + Cレーン cレーン = this.mgr譜面管理者ref.listレーン[ this.n現在のチップカーソルがあるレーン番号0to ]; + if( cレーン.eレーン種別 != Cレーン.E種別.BPM ) + { + if( ( cレーン.eレーン種別 == Cレーン.E種別.GtV ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsV ) ) + { + int num5 = flag ? cレーン.nレーン割付チップ・裏0or1to1295 : cレーン.nレーン割付チップ・表0or1to1295; + if( ( num5 == 0 ) || flag2 ) + { + num5 = this._Form.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 + 1; + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + this.mgr譜面管理者ref.tチップを配置または置換する( this.n現在のチップカーソルがあるレーン番号0to, this.n現在のチップカーソルの譜面先頭からの位置grid, num5, 0f, flag ); + if( this.b指定位置にRGBチップがひとつもない( this.n現在のチップカーソルの譜面先頭からの位置grid, this.n現在のチップカーソルがあるレーン番号0to + 1, this.n現在のチップカーソルがあるレーン番号0to + 2, this.n現在のチップカーソルがあるレーン番号0to + 3 ) ) + { + this.mgr譜面管理者ref.tチップを配置または置換する( this.n現在のチップカーソルがあるレーン番号0to + 1, this.n現在のチップカーソルの譜面先頭からの位置grid, 2, 0f, false ); + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + } + else if( ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB ) ) + { + if( flag ) + { + for( int i = 0; i < this.mgr譜面管理者ref.listレーン.Count; i++ ) + { + Cレーン cレーン2 = this.mgr譜面管理者ref.listレーン[ i ]; + if( cレーン2.eレーン種別 == Cレーン.E種別.GtR ) + { + this.mgr譜面管理者ref.tチップを配置または置換する( i, this.n現在のチップカーソルの譜面先頭からの位置grid, 2, 0f, false ); + break; + } + } + } + else + { + this.mgr譜面管理者ref.tチップを配置または置換する( this.n現在のチップカーソルがあるレーン番号0to, this.n現在のチップカーソルの譜面先頭からの位置grid, 1, 0f, false ); + } + } + else if( ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB ) ) + { + if( flag ) + { + for( int j = 0; j < this.mgr譜面管理者ref.listレーン.Count; j++ ) + { + Cレーン cレーン3 = this.mgr譜面管理者ref.listレーン[ j ]; + if( cレーン3.eレーン種別 == Cレーン.E種別.BsR ) + { + this.mgr譜面管理者ref.tチップを配置または置換する( j, this.n現在のチップカーソルの譜面先頭からの位置grid, 2, 0f, false ); + break; + } + } + } + else + { + this.mgr譜面管理者ref.tチップを配置または置換する( this.n現在のチップカーソルがあるレーン番号0to, this.n現在のチップカーソルの譜面先頭からの位置grid, 1, 0f, false ); + } + } + else + { + int num8 = flag ? cレーン.nレーン割付チップ・裏0or1to1295 : cレーン.nレーン割付チップ・表0or1to1295; + if( ( num8 == 0 ) || flag2 ) + { + num8 = this._Form.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 + 1; + } + this.mgr譜面管理者ref.tチップを配置または置換する( this.n現在のチップカーソルがあるレーン番号0to, this.n現在のチップカーソルの譜面先頭からの位置grid, num8, 0f, flag ); + } + } + else + { + this._Form.dlgチップパレット.t一時的に隠蔽する(); + C数値入力ダイアログ c数値入力ダイアログ = new C数値入力ダイアログ( this.mgr譜面管理者ref.dc譜面先頭からの位置gridにおけるBPMを返す( this.n現在のチップカーソルの譜面先頭からの位置grid ), 0.0001M, 1000M, Resources.strBPM選択ダイアログの説明文 ); + Point point = this._Form.pictureBox譜面パネル.PointToScreen( new Point( e.X, e.Y ) ); + c数値入力ダイアログ.Left = point.X - ( c数値入力ダイアログ.Width / 2 ); + c数値入力ダイアログ.Top = point.Y + 4; + DialogResult result = c数値入力ダイアログ.ShowDialog(); + this._Form.dlgチップパレット.t一時的な隠蔽を解除する(); + if( result != DialogResult.OK ) + { + return; + } + float num = (float) c数値入力ダイアログ.dc数値; + int key = -1; + foreach( KeyValuePair pair in this.mgr譜面管理者ref.dicBPx ) + { + if( pair.Value == num ) + { + key = pair.Key; + break; + } + } + if( key == -1 ) + { + for( int k = 1; k < 0x510; k++ ) + { + if( !this.mgr譜面管理者ref.dicBPx.ContainsKey( k ) ) + { + this.mgr譜面管理者ref.dicBPx.Add( k, num ); + key = k; + break; + } + } + } + this.mgr譜面管理者ref.tチップを配置または置換する( this.n現在のチップカーソルがあるレーン番号0to, this.n現在のチップカーソルの譜面先頭からの位置grid, key, num, false ); + } + if( this._Form.appアプリ設定.PlaySoundOnWAVChipAllocated && ( ( ( cレーン.eレーン種別 == Cレーン.E種別.WAV ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtV ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsV ) ) ) + { + int num9 = flag ? cレーン.nレーン割付チップ・裏0or1to1295 : cレーン.nレーン割付チップ・表0or1to1295; + if( ( num9 == 0 ) || flag2 ) + { + num9 = this._Form.n現在選択中のWAV・BMP・AVIリストの行番号0to1294 + 1; + } + CWAV wc = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( num9 ); + if( ( wc != null ) && ( !this._Form.appアプリ設定.NoPreviewBGM || !wc.bBGMとして使用 ) ) + { + this._Form.mgrWAVリスト管理者.tプレビュー音を再生する( wc ); + } + } + } + if( e.Button == MouseButtons.Right ) + { + this.mgr譜面管理者ref.tチップを削除する( this.n現在のチップカーソルがあるレーン番号0to, this.n現在のチップカーソルの譜面先頭からの位置grid ); + } + } + } + private void tレーン割付のRedo( Cレーン割付用UndoRedo lur変更前, Cレーン割付用UndoRedo lur変更後 ) + { + if( !lur変更前.b裏 ) + { + lur変更前.lc.nレーン割付チップ・表0or1to1295 = lur変更後.n番号0or1to1295; + } + else + { + lur変更前.lc.nレーン割付チップ・裏0or1to1295 = lur変更後.n番号0or1to1295; + } + this._Form.pictureBox譜面パネル.Refresh(); + } + private void tレーン割付のUndo( Cレーン割付用UndoRedo lur変更前, Cレーン割付用UndoRedo lur変更後 ) + { + if( !lur変更前.b裏 ) + { + lur変更前.lc.nレーン割付チップ・表0or1to1295 = lur変更前.n番号0or1to1295; + } + else + { + lur変更前.lc.nレーン割付チップ・裏0or1to1295 = lur変更前.n番号0or1to1295; + } + this._Form.pictureBox譜面パネル.Refresh(); + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.Designer.cs b/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.Designer.cs new file mode 100644 index 00000000..20de73e7 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.Designer.cs @@ -0,0 +1,170 @@ +namespace DTXCreator.譜面 +{ + partial class C置換ダイアログ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.buttonキャンセル = new System.Windows.Forms.Button(); + this.button置換 = new System.Windows.Forms.Button(); + this.label説明 = new System.Windows.Forms.Label(); + this.radioButton表裏反転 = new System.Windows.Forms.RadioButton(); + this.radioButton単純置換 = new System.Windows.Forms.RadioButton(); + this.textBox元番号 = new System.Windows.Forms.TextBox(); + this.textBox先番号 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // buttonキャンセル + // + this.buttonキャンセル.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.buttonキャンセル.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonキャンセル.Location = new System.Drawing.Point( 305, 97 ); + this.buttonキャンセル.Name = "buttonキャンセル"; + this.buttonキャンセル.Size = new System.Drawing.Size( 75, 23 ); + this.buttonキャンセル.TabIndex = 4; + this.buttonキャンセル.Text = "キャンセル"; + this.buttonキャンセル.UseVisualStyleBackColor = true; + // + // button置換 + // + this.button置換.Anchor = ( (System.Windows.Forms.AnchorStyles) ( ( System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right ) ) ); + this.button置換.DialogResult = System.Windows.Forms.DialogResult.OK; + this.button置換.Location = new System.Drawing.Point( 224, 97 ); + this.button置換.Name = "button置換"; + this.button置換.Size = new System.Drawing.Size( 75, 23 ); + this.button置換.TabIndex = 3; + this.button置換.Text = "置換"; + this.button置換.UseVisualStyleBackColor = true; + // + // label説明 + // + this.label説明.AutoSize = true; + this.label説明.Location = new System.Drawing.Point( 12, 11 ); + this.label説明.Name = "label説明"; + this.label説明.Size = new System.Drawing.Size( 224, 12 ); + this.label説明.TabIndex = 5; + this.label説明.Text = "現在選択中のチップを対象に置換を行います。\r\n"; + // + // radioButton表裏反転 + // + this.radioButton表裏反転.AutoSize = true; + this.radioButton表裏反転.Location = new System.Drawing.Point( 12, 82 ); + this.radioButton表裏反転.Name = "radioButton表裏反転"; + this.radioButton表裏反転.Size = new System.Drawing.Size( 131, 16 ); + this.radioButton表裏反転.TabIndex = 2; + this.radioButton表裏反転.TabStop = true; + this.radioButton表裏反転.Text = "チップの表裏を反転(&A)\r\n"; + this.radioButton表裏反転.UseVisualStyleBackColor = true; + this.radioButton表裏反転.KeyDown += new System.Windows.Forms.KeyEventHandler( this.radioButton表裏反転_KeyDown ); + // + // radioButton単純置換 + // + this.radioButton単純置換.AutoSize = true; + this.radioButton単純置換.Location = new System.Drawing.Point( 12, 35 ); + this.radioButton単純置換.Name = "radioButton単純置換"; + this.radioButton単純置換.Size = new System.Drawing.Size( 116, 16 ); + this.radioButton単純置換.TabIndex = 6; + this.radioButton単純置換.TabStop = true; + this.radioButton単純置換.Text = "チップの置き換え(&R)"; + this.radioButton単純置換.UseVisualStyleBackColor = true; + this.radioButton単純置換.KeyDown += new System.Windows.Forms.KeyEventHandler( this.radioButton単純置換_KeyDown ); + // + // textBox元番号 + // + this.textBox元番号.Location = new System.Drawing.Point( 44, 57 ); + this.textBox元番号.Name = "textBox元番号"; + this.textBox元番号.Size = new System.Drawing.Size( 50, 19 ); + this.textBox元番号.TabIndex = 0; + this.textBox元番号.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBox元番号_KeyDown ); + // + // textBox先番号 + // + this.textBox先番号.Location = new System.Drawing.Point( 123, 57 ); + this.textBox先番号.Name = "textBox先番号"; + this.textBox先番号.Size = new System.Drawing.Size( 50, 19 ); + this.textBox先番号.TabIndex = 1; + this.textBox先番号.KeyDown += new System.Windows.Forms.KeyEventHandler( this.textBox先番号_KeyDown ); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point( 100, 60 ); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size( 14, 12 ); + this.label1.TabIndex = 8; + this.label1.Text = "を"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point( 179, 60 ); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size( 65, 12 ); + this.label2.TabIndex = 7; + this.label2.Text = "に置き換える"; + // + // C置換ダイアログ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size( 392, 132 ); + this.ControlBox = false; + this.Controls.Add( this.label2 ); + this.Controls.Add( this.label1 ); + this.Controls.Add( this.textBox先番号 ); + this.Controls.Add( this.textBox元番号 ); + this.Controls.Add( this.radioButton単純置換 ); + this.Controls.Add( this.radioButton表裏反転 ); + this.Controls.Add( this.label説明 ); + this.Controls.Add( this.button置換 ); + this.Controls.Add( this.buttonキャンセル ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "C置換ダイアログ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "置換"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler( this.C置換ダイアログ_FormClosing ); + this.ResumeLayout( false ); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonキャンセル; + private System.Windows.Forms.Button button置換; + private System.Windows.Forms.Label label説明; + private System.Windows.Forms.RadioButton radioButton表裏反転; + private System.Windows.Forms.RadioButton radioButton単純置換; + private System.Windows.Forms.TextBox textBox元番号; + private System.Windows.Forms.TextBox textBox先番号; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.cs b/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.cs new file mode 100644 index 00000000..54899352 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using DTXCreator.Properties; +using FDK; + +namespace DTXCreator.譜面 +{ + public partial class C置換ダイアログ : Form + { + public bool b単純置換RadioButtonがチェックされている + { + get + { + return this.radioButton単純置換.Checked; + } + } + public bool b表裏反転RadioButtonがチェックされている + { + get + { + return this.radioButton表裏反転.Checked; + } + } + public int n元番号 + { + get + { + if( ( this.textBox元番号.Text.Length != 1 ) && ( this.textBox元番号.Text.Length != 2 ) ) + { + return -1; + } + string text = this.textBox元番号.Text; + if( text.Length == 1 ) + { + text = "0" + text; + } + return C変換.n36進数2桁の文字列を数値に変換して返す( text ); + } + set + { + this.textBox元番号.Text = C変換.str数値を36進数2桁に変換して返す( value ); + } + } + public int n先番号 + { + get + { + if( ( this.textBox先番号.Text.Length != 1 ) && ( this.textBox先番号.Text.Length != 2 ) ) + { + return -1; + } + string text = this.textBox先番号.Text; + if( text.Length == 1 ) + { + text = "0" + text; + } + return C変換.n36進数2桁の文字列を数値に変換して返す( text ); + } + } + + public C置換ダイアログ() + { + this.InitializeComponent(); + this.radioButton単純置換.Select(); + this.textBox元番号.Focus(); + } + + private void C置換ダイアログ_FormClosing( object sender, FormClosingEventArgs e ) + { + if( ( base.DialogResult == DialogResult.OK ) && this.b単純置換RadioButtonがチェックされている ) + { + if( this.n元番号 < 0 ) + { + MessageBox.Show( Resources.strチップ番号に誤りがありますMSG + Environment.NewLine + "'" + this.textBox元番号.Text + "'", Resources.strエラーダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + this.textBox元番号.Focus(); + this.textBox元番号.SelectAll(); + e.Cancel = true; + } + else if( this.n先番号 < 0 ) + { + MessageBox.Show( Resources.strチップ番号に誤りがありますMSG + Environment.NewLine + "'" + this.textBox先番号.Text + "'", Resources.strエラーダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + this.textBox先番号.Focus(); + this.textBox先番号.SelectAll(); + e.Cancel = true; + } + } + } + private void radioButton単純置換_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.button置換.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void radioButton表裏反転_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.button置換.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBox元番号_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.button置換.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + private void textBox先番号_KeyDown( object sender, KeyEventArgs e ) + { + if( e.KeyCode == Keys.Return ) + { + this.button置換.PerformClick(); + } + else if( e.KeyCode == Keys.Escape ) + { + this.buttonキャンセル.PerformClick(); + } + } + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.resx b/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C置換ダイアログ.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C譜面管理.cs b/DTXCreatorプロジェクト/コード/05.譜面/C譜面管理.cs new file mode 100644 index 00000000..42b77a13 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C譜面管理.cs @@ -0,0 +1,1255 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +using DTXCreator.UndoRedo; +using FDK; + +namespace DTXCreator.譜面 +{ + internal class C譜面管理 + { + public Bitmap bmp背景画像; + public Dictionary dicBPx = new Dictionary(); + public Dictionary dic小節 = new Dictionary(); + public List listレーン = new List(); + public static readonly int nレーン割付チップ番号表示高さdot = 10; + public static readonly int nレーン番号表示高さdot = 0x20; + public int n現在のガイド幅grid = ( C小節.n基準の高さgrid / 0x10 ); + public int n現在の譜面表示下辺の譜面先頭からの位置grid; + public string strPATH_WAV = ""; + + public C譜面管理( Cメインフォーム cm ) + { + this._Form = cm; + } + public bool bOPENチップである( Cチップ cc ) + { + Cレーン cレーン = this.listレーン[ cc.nレーン番号0to ]; + return ( ( cc.n値・整数1to1295 == 2 ) && ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) ) ); + } + public bool b確定選択中のチップがある() + { + foreach( KeyValuePair pair in this.dic小節 ) + { + foreach( Cチップ cチップ in pair.Value.listチップ ) + { + if( cチップ.b確定選択中 || cチップ.bドラッグで選択中 ) + { + return true; + } + } + } + return false; + } + public decimal dc譜面先頭からの位置gridにおけるBPMを返す( int n譜面先頭からの位置grid ) + { + decimal num = this._Form.dc現在のBPM; + C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + if( c小節 != null ) + { + for( int i = 0; i <= c小節.n小節番号0to3599; i++ ) + { + C小節 c小節2 = this.p小節を返す( i ); + if( c小節2 != null ) + { + int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( i ); + foreach( Cチップ cチップ in c小節2.listチップ ) + { + if( ( cチップ.nチャンネル番号00toFF == 8 ) && ( ( num3 + cチップ.n位置grid ) <= n譜面先頭からの位置grid ) ) + { + num = (decimal) cチップ.f値・浮動小数; + } + } + } + } + } + return num; + } + public int nX座標dotが位置するレーン番号を返す( int nXdot ) + { + if( nXdot >= 0 ) + { + int num = 0; + int num2 = 0; + foreach( Cレーン cレーン in this.listレーン ) + { + num += cレーン.n幅dot; + if( nXdot < num ) + { + return num2; + } + num2++; + } + } + return -1; + } + public int nY座標dotが位置するgridを返す・ガイド幅単位( int nY ) + { + int num = this.nY座標dotが位置するgridを返す・最高解像度( nY ); + C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num ); + if( c小節 == null ) + { + c小節 = this.p小節を返す( this.n現在の最大の小節番号を返す() ); + } + int num2 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + int num3 = ( ( num - num2 ) / this.n現在のガイド幅grid ) * this.n現在のガイド幅grid; + return ( num2 + num3 ); + } + public int nY座標dotが位置するgridを返す・最高解像度( int nY ) + { + int num = this._Form.pictureBox譜面パネル.ClientSize.Height - nY; + return ( ( num / C小節.n1グリッドの高さdot ) + this.n現在の譜面表示下辺の譜面先頭からの位置grid ); + } + public int nレーンの左端X座標dotを返す( int nレーン番号0to ) + { + if( ( nレーン番号0to >= 0 ) && ( nレーン番号0to < this.listレーン.Count ) ) + { + return this.listレーン[ nレーン番号0to ].n位置Xdot; + } + return -1; + } + public int nレーン名に対応するレーン番号を返す( string strレーン名 ) + { + int num = 0; + foreach( Cレーン cレーン in this.listレーン ) + { + if( cレーン.strレーン名.Equals( strレーン名 ) ) + { + return num; + } + num++; + } + return -1; + } + public int n現在の最大の小節番号を返す() + { + int num = -1; + foreach( KeyValuePair pair in this.dic小節 ) + { + C小節 c小節 = pair.Value; + if( c小節.n小節番号0to3599 > num ) + { + num = c小節.n小節番号0to3599; + } + } + return num; + } + public int n全小節の高さdotの合計を返す() + { + int num = 0; + foreach( KeyValuePair pair in this.dic小節 ) + { + num += pair.Value.n小節長倍率を考慮した現在の小節の高さdot; + } + return num; + } + public int n全小節の高さgridの合計を返す() + { + int num = 0; + foreach( KeyValuePair pair in this.dic小節 ) + { + num += pair.Value.n小節長倍率を考慮した現在の小節の高さgrid; + } + return num; + } + public int n譜面先頭からの位置gridから描画領域内のY座標dotを返す( int n譜面先頭からの位置grid, Size sz描画領域dot ) + { + int num = n譜面先頭からの位置grid - this.n現在の譜面表示下辺の譜面先頭からの位置grid; + return ( sz描画領域dot.Height - ( num * C小節.n1グリッドの高さdot ) ); + } + public int n譜面先頭からみた小節先頭の位置gridを返す( int n小節番号0to3599 ) + { + if( ( n小節番号0to3599 < 0 ) || ( n小節番号0to3599 > this.n現在の最大の小節番号を返す() ) ) + { + return -1; + } + int num = 0; + for( int i = 0; i < n小節番号0to3599; i++ ) + { + C小節 c小節 = this.p小節を返す( i ); + if( c小節 != null ) + { + num += c小節.n小節長倍率を考慮した現在の小節の高さgrid; + } + } + return num; + } + public C小節 pチップの存在する小節を返す( Cチップ cc ) + { + foreach( KeyValuePair pair in this.dic小節 ) + { + C小節 c小節 = pair.Value; + if( c小節.listチップ.Contains( cc ) ) + { + return c小節; + } + } + return null; + } + public Cチップ p指定された座標dotにあるチップを返す( int x, int y ) + { + int num = this.nX座標dotが位置するレーン番号を返す( x ); + if( num >= 0 ) + { + int num2 = this.nY座標dotが位置するgridを返す・最高解像度( y ); + C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num2 ); + if( c小節 == null ) + { + return null; + } + int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + foreach( Cチップ cチップ in c小節.listチップ ) + { + int num4 = num3 + cチップ.n位置grid; + int num5 = C小節.n位置変換dot2grid( Cチップ.nチップの高さdot ); + if( ( ( cチップ.nレーン番号0to == num ) && ( num4 <= num2 ) ) && ( num2 <= ( num4 + num5 ) ) ) + { + return cチップ; + } + } + } + return null; + } + public Cチップ p指定位置にあるチップを返す( int n小節番号0to, int nレーン番号0to, int n小節内の位置grid ) + { + C小節 c小節 = this.p小節を返す( n小節番号0to ); + if( c小節 != null ) + { + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( ( cチップ.n位置grid == n小節内の位置grid ) && ( cチップ.nレーン番号0to == nレーン番号0to ) ) + { + return cチップ; + } + } + } + return null; + } + public C小節 p小節を返す( int n小節番号0to3599 ) + { + C小節 c小節 = null; + if( this.dic小節.TryGetValue( n小節番号0to3599, out c小節 ) ) + { + return c小節; + } + return null; + } + public C小節 p譜面先頭からの位置gridを含む小節を返す( int n譜面先頭からの位置grid ) + { + int num = 0; + int num2 = this.n現在の最大の小節番号を返す(); + for( int i = 0; i <= num2; i++ ) + { + C小節 c小節 = this.p小節を返す( i ); + if( c小節 != null ) + { + num += c小節.n小節長倍率を考慮した現在の小節の高さgrid; + if( n譜面先頭からの位置grid < num ) + { + return c小節; + } + } + } + return null; + } + public void tチップを削除する( int nレーン番号0to, int n譜面先頭からの位置grid ) + { + C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + if( c小節 != null ) + { + bool flag3; + int num = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + do + { + Cレーン cレーン = this.listレーン[ nレーン番号0to ]; + bool flag = ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB ); + bool flag2 = ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB ); + flag3 = true; + foreach( Cチップ cチップ in c小節.listチップ ) + { + if( cチップ.n位置grid == num ) + { + if( cチップ.nレーン番号0to == nレーン番号0to ) + { + Cチップ cc = new Cチップ(); + cc.tコピーfrom( cチップ ); + Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tチップ削除のUndo ), new DGRedoを実行する( this.tチップ削除のRedo ), redo, redo ) ); + c小節.listチップ.Remove( cチップ ); + flag3 = false; + this._Form.b未保存 = true; + break; + } + if( ( flag && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) ) && ( cチップ.n値・整数1to1295 == 2 ) ) + { + Cチップ cチップ3 = new Cチップ(); + cチップ3.tコピーfrom( cチップ ); + Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ3 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tチップ削除のUndo ), new DGRedoを実行する( this.tチップ削除のRedo ), redo2, redo2 ) ); + c小節.listチップ.Remove( cチップ ); + flag3 = false; + this._Form.b未保存 = true; + break; + } + if( ( flag2 && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( cチップ.n値・整数1to1295 == 2 ) ) + { + Cチップ cチップ4 = new Cチップ(); + cチップ4.tコピーfrom( cチップ ); + Cチップ配置用UndoRedo redo3 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ4 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tチップ削除のUndo ), new DGRedoを実行する( this.tチップ削除のRedo ), redo3, redo3 ) ); + c小節.listチップ.Remove( cチップ ); + flag3 = false; + this._Form.b未保存 = true; + break; + } + } + } + } + while( !flag3 ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + } + } + public void tチップを配置または置換する( int nレーン番号0to, int n譜面先頭からの位置grid, int nチップ値・整数, float fチップ値・浮動小数, bool b裏として配置 ) + { + C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid ); + if( c小節 != null ) + { + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + this.tチップを削除する( nレーン番号0to, n譜面先頭からの位置grid ); + if( ( ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) || ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( nチップ値・整数 == 2 ) ) + { + this.tチップを削除する( nレーン番号0to + 1, n譜面先頭からの位置grid ); + this.tチップを削除する( nレーン番号0to + 2, n譜面先頭からの位置grid ); + } + Cレーン cレーン = this.listレーン[ nレーン番号0to ]; + Cチップ item = new Cチップ(); + item.nチャンネル番号00toFF = b裏として配置 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF; + item.nレーン番号0to = nレーン番号0to; + item.n位置grid = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 ); + item.n値・整数1to1295 = nチップ値・整数; + item.f値・浮動小数 = fチップ値・浮動小数; + item.b裏 = b裏として配置; + c小節.listチップ.Add( item ); + Cチップ cc = new Cチップ(); + cc.tコピーfrom( item ); + Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tチップ配置のUndo ), new DGRedoを実行する( this.tチップ配置のRedo ), redo, redo ) ); + int num = this.n現在の最大の小節番号を返す(); + if( c小節.n小節番号0to3599 == num ) + { + for( int i = num + 1; i <= ( num + 4 ); i++ ) + { + this.dic小節.Add( i, new C小節( i ) ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.t小節挿入のUndo ), new DGRedoを実行する( this.t小節挿入のRedo ), i, i ) ); + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + this._Form.b未保存 = true; + } + } + public void tチップ削除のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 ) + { + C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to ); + if( c小節 != null ) + { + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) ) + { + c小節.listチップ.RemoveAt( i ); + this._Form.b未保存 = true; + return; + } + } + } + } + public void tチップ削除のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 ) + { + C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to ); + if( c小節 != null ) + { + Cチップ item = new Cチップ(); + item.tコピーfrom( ur変更前.cc ); + c小節.listチップ.Add( item ); + this._Form.b未保存 = true; + } + } + public void tチップ選択のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + cチップ.b確定選択中 = true; + } + } + public void tチップ選択のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + cチップ.b確定選択中 = false; + } + } + public void tチップ選択解除のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + cチップ.b確定選択中 = false; + } + } + public void tチップ選択解除のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + cチップ.b確定選択中 = true; + } + } + public void tチップ配置のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 ) + { + C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to ); + if( c小節 != null ) + { + Cチップ item = new Cチップ(); + item.tコピーfrom( ur変更前.cc ); + c小節.listチップ.Add( item ); + this._Form.b未保存 = true; + } + } + public void tチップ配置のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 ) + { + C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to ); + if( c小節 != null ) + { + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) ) + { + c小節.listチップ.RemoveAt( i ); + this._Form.b未保存 = true; + return; + } + } + } + } + public void tチップ番号置換のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + cチップ.n値・整数1to1295 = ur変更後.n値・整数1to1295; + this._Form.b未保存 = true; + } + } + public void tチップ番号置換のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更後.n小節番号0to, ur変更後.nレーン番号0to, ur変更後.n位置grid ); + if( cチップ != null ) + { + cチップ.n値・整数1to1295 = ur変更前.n値・整数1to1295; + this._Form.b未保存 = true; + } + } + public void tチップ表裏反転のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + if( cチップ.b裏 ) + { + cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF; + cチップ.b裏 = false; + } + else + { + cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF; + cチップ.b裏 = true; + } + this._Form.b未保存 = true; + } + } + public void tチップ表裏反転のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid ); + if( cチップ != null ) + { + if( cチップ.b裏 ) + { + cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF; + cチップ.b裏 = false; + } + else + { + cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF; + cチップ.b裏 = true; + } + this._Form.b未保存 = true; + } + } + public void t初期化() + { + this.t初期化・listレーンの生成(); + this.t初期化・小節を10個まで作成する(); + this.t初期化・背景画像を生成する(); + this.t初期化・スクロールバーを初期設定する(); + } + public void t小節削除のRedo( int nダミー, int n削除する小節番号0to ) + { + this.dic小節.Remove( n削除する小節番号0to ); + int num = this.n現在の最大の小節番号を返す(); + for( int i = n削除する小節番号0to + 1; i <= num; i++ ) + { + C小節 c小節 = this.p小節を返す( i ); + if( c小節 != null ) + { + this.dic小節.Remove( i ); + c小節.n小節番号0to3599 = i - 1; + this.dic小節.Add( c小節.n小節番号0to3599, c小節 ); + } + } + this._Form.b未保存 = true; + } + public void t小節削除のUndo( int n削除された小節番号0to, int nダミー ) + { + for( int i = this.n現在の最大の小節番号を返す(); i >= n削除された小節番号0to; i-- ) + { + C小節 c小節 = this.p小節を返す( i ); + if( c小節 != null ) + { + this.dic小節.Remove( i ); + c小節.n小節番号0to3599 = i + 1; + this.dic小節.Add( c小節.n小節番号0to3599, c小節 ); + } + } + this.dic小節.Add( n削除された小節番号0to, new C小節( n削除された小節番号0to ) ); + this._Form.b未保存 = true; + } + public void t小節挿入のRedo( int nダミー, int n挿入する小節番号0to ) + { + for( int i = this.n現在の最大の小節番号を返す(); i >= n挿入する小節番号0to; i-- ) + { + C小節 c小節 = this.p小節を返す( i ); + if( c小節 != null ) + { + this.dic小節.Remove( i ); + c小節.n小節番号0to3599 = i + 1; + this.dic小節.Add( c小節.n小節番号0to3599, c小節 ); + } + } + this.dic小節.Add( n挿入する小節番号0to, new C小節( n挿入する小節番号0to ) ); + this._Form.b未保存 = true; + } + public void t小節挿入のUndo( int n挿入された小節番号0to, int nダミー ) + { + this.dic小節.Remove( n挿入された小節番号0to ); + int num = this.n現在の最大の小節番号を返す(); + for( int i = n挿入された小節番号0to + 1; i <= num; i++ ) + { + C小節 c小節 = this.p小節を返す( i ); + if( c小節 != null ) + { + this.dic小節.Remove( i ); + c小節.n小節番号0to3599 = i - 1; + this.dic小節.Add( c小節.n小節番号0to3599, c小節 ); + } + } + this._Form.b未保存 = true; + } + public void t小節長変更のRedo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 ) + { + C小節 c小節 = this.p小節を返す( ur変更後.n小節番号0to ); + if( c小節 != null ) + { + c小節.f小節長倍率 = ur変更後.f倍率; + this._Form.b未保存 = true; + } + } + public void t小節長変更のUndo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 ) + { + C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to ); + if( c小節 != null ) + { + c小節.f小節長倍率 = ur変更前.f倍率; + this._Form.b未保存 = true; + } + } + public void t垂直スクロールバーと譜面可視領域の上下位置の調整() + { + VScrollBar bar = this._Form.vScrollBar譜面用垂直スクロールバー; + PictureBox box = this._Form.pictureBox譜面パネル; + bar.Minimum = 0; + bar.Maximum = this.n全小節の高さgridの合計を返す() - 1; + bar.SmallChange = C小節.n基準の高さgrid / 0x10; + bar.LargeChange = C小節.n基準の高さgrid; + bar.Enabled = bar.Maximum > bar.LargeChange; + if( bar.Enabled ) + { + this.n現在の譜面表示下辺の譜面先頭からの位置grid = ( ( bar.Maximum + 1 ) - bar.LargeChange ) - bar.Value; + box.Refresh(); + } + } + public void t水平スクロールバーと譜面パネル左右位置の調整() + { + HScrollBar bar = this._Form.hScrollBar譜面用水平スクロールバー; + SplitContainer container = this._Form.splitContainerタブと譜面を分割; + PictureBox box = this._Form.pictureBox譜面パネル; + bar.Minimum = 0; + bar.Maximum = box.Width - 1; + bar.SmallChange = 5; + bar.LargeChange = container.Panel2.Width; + bar.Enabled = bar.Maximum > bar.LargeChange; + if( bar.Enabled ) + { + int num = bar.Value; + if( ( num + bar.LargeChange ) > bar.Maximum ) + { + num = ( bar.Maximum - bar.LargeChange ) + 1; + } + bar.Value = num; + box.Location = new Point( -num, 0 ); + box.Refresh(); + } + } + public void t譜面を描画する( Graphics g, Size sz描画対象サイズdot, Rectangle rc可視領域dot ) + { + this.strfmt小節番号文字フォーマット.LineAlignment = StringAlignment.Center; + this.strfmt小節番号文字フォーマット.Alignment = StringAlignment.Center; + this.strfmtレーン名文字フォーマット.LineAlignment = StringAlignment.Near; + this.strfmtレーン名文字フォーマット.Alignment = StringAlignment.Center; + this.strfmtレーン割付チップ番号文字フォーマット.LineAlignment = StringAlignment.Near; + this.strfmtレーン割付チップ番号文字フォーマット.Alignment = StringAlignment.Near; + int num = 0; + int num2 = 0; + int num3 = this.n現在の譜面表示下辺の譜面先頭からの位置grid * C小節.n1グリッドの高さdot; + int num4 = num3 + rc可視領域dot.Height; + int num5 = this.n現在の最大の小節番号を返す(); + int num6 = 0; + while( num6 <= num5 ) + { + C小節 cs = this.p小節を返す( num6 ); + if( cs != null ) + { + num2 = num + cs.n小節長倍率を考慮した現在の小節の高さdot; + if( num >= num4 ) + { + break; + } + if( num2 > num3 ) + { + Rectangle rectangle = new Rectangle(); + rectangle.X = 0; + rectangle.Y = sz描画対象サイズdot.Height - ( num2 - num3 ); + rectangle.Width = sz描画対象サイズdot.Width; + rectangle.Height = num2 - num; + Rectangle rectangle2 = new Rectangle(); + rectangle2.X = rc可視領域dot.X; + rectangle2.Y = rectangle.Y; + rectangle2.Width = rc可視領域dot.Width; + rectangle2.Height = rectangle.Height; + this.t譜面を描画する・1小節を描画する( g, cs, rectangle, rectangle2 ); + } + } + num6++; + num = num2; + } + Rectangle rectangle3 = new Rectangle(); + rectangle3.X = 0; + rectangle3.Y = 0; + rectangle3.Width = sz描画対象サイズdot.Width; + rectangle3.Height = nレーン割付チップ番号表示高さdot; + this.t譜面を描画する・レーン割付チップを描画する( g, rectangle3 ); + rectangle3.X = 0; + rectangle3.Y = 10; + rectangle3.Width = sz描画対象サイズdot.Width; + rectangle3.Height = nレーン番号表示高さdot; + this.t譜面を描画する・レーン名を描画する( g, rectangle3 ); + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private Brush brレーン割付番号文字ブラシ = new SolidBrush( Color.White ); + private Brush brレーン割付番号文字ブラシ影 = new SolidBrush( Color.Black ); + private Brush brレーン名文字ブラシ = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) ); + private Brush brレーン名文字ブラシ影 = new SolidBrush( Color.Black ); + private Brush br小節番号文字ブラシ = new SolidBrush( Color.FromArgb( 80, 0xff, 0xff, 0xff ) ); + private Font ftレーン割付チップ番号文字フォント = new Font( "MS UI Gothic", 7f, FontStyle.Regular ); + private Font ftレーン番号文字フォント = new Font( "MS US Gothic", 8f, FontStyle.Regular ); + private Font ft小節番号文字フォント = new Font( "MS UI Gothic", 50f, FontStyle.Regular ); + private Pen penガイド線ペン = new Pen( Color.FromArgb( 50, 50, 50 ) ); + private Pen penレーン区分線ペン細 = new Pen( Color.Gray ); + private Pen penレーン区分線ペン太 = new Pen( Color.White, 2f ); + private Pen pen小節線ペン = new Pen( Color.White, 2f ); + private Pen pen拍線ペン = new Pen( Color.Gray ); + private StringFormat strfmtレーン割付チップ番号文字フォーマット = new StringFormat(); + private StringFormat strfmtレーン名文字フォーマット = new StringFormat(); + private StringFormat strfmt小節番号文字フォーマット = new StringFormat(); + + private void t初期化・listレーンの生成() + { + this.listレーン.Clear(); + int num = 0; + int num2 = 30; + int alpha = 0x19; + Cレーン item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BPM; + item.strレーン名 = "BPM"; + item.nチャンネル番号・表00toFF = 8; + item.nチャンネル番号・裏00toFF = 3; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "LC"; + item.nチャンネル番号・表00toFF = 0x1a; + item.nチャンネル番号・裏00toFF = 0x1a; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "HH"; + item.nチャンネル番号・表00toFF = 0x11; + item.nチャンネル番号・裏00toFF = 0x18; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "SD"; + item.nチャンネル番号・表00toFF = 0x12; + item.nチャンネル番号・裏00toFF = 0x12; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0xff, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "BD"; + item.nチャンネル番号・表00toFF = 0x13; + item.nチャンネル番号・裏00toFF = 0x13; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0x7f, 0x7f ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "HT"; + item.nチャンネル番号・表00toFF = 20; + item.nチャンネル番号・裏00toFF = 20; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "LT"; + item.nチャンネル番号・表00toFF = 0x15; + item.nチャンネル番号・裏00toFF = 0x15; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "FT"; + item.nチャンネル番号・表00toFF = 0x17; + item.nチャンネル番号・裏00toFF = 0x17; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0xff ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "CY"; + item.nチャンネル番号・表00toFF = 0x16; + item.nチャンネル番号・裏00toFF = 0x19; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.FI; + item.strレーン名 = "FI"; + item.nチャンネル番号・表00toFF = 0x53; + item.nチャンネル番号・裏00toFF = 0x53; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0xff, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "BGM"; + item.nチャンネル番号・表00toFF = 1; + item.nチャンネル番号・裏00toFF = 1; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "SE1"; + item.nチャンネル番号・表00toFF = 0x61; + item.nチャンネル番号・裏00toFF = 0x61; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "SE2"; + item.nチャンネル番号・表00toFF = 0x62; + item.nチャンネル番号・裏00toFF = 0x62; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "SE3"; + item.nチャンネル番号・表00toFF = 0x63; + item.nチャンネル番号・裏00toFF = 0x63; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "SE4"; + item.nチャンネル番号・表00toFF = 100; + item.nチャンネル番号・裏00toFF = 100; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.WAV; + item.strレーン名 = "SE5"; + item.nチャンネル番号・表00toFF = 0x65; + item.nチャンネル番号・裏00toFF = 0x65; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.GtV; + item.strレーン名 = "GtV"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.GtR; + item.strレーン名 = "GtR"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.GtG; + item.strレーン名 = "GtG"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.GtB; + item.strレーン名 = "GtB"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0x80, 0xff ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.GtW; + item.strレーン名 = "GtW"; + item.nチャンネル番号・表00toFF = 40; + item.nチャンネル番号・裏00toFF = 40; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BsV; + item.strレーン名 = "BsV"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BsR; + item.strレーン名 = "BsR"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BsG; + item.strレーン名 = "BsG"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BsB; + item.strレーン名 = "BsB"; + item.nチャンネル番号・表00toFF = 0; + item.nチャンネル番号・裏00toFF = 0; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 0, 0x80, 0xff ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BsW; + item.strレーン名 = "BsW"; + item.nチャンネル番号・表00toFF = 0xa8; + item.nチャンネル番号・裏00toFF = 0xa8; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.AVI; + item.strレーン名 = "AVI"; + item.nチャンネル番号・表00toFF = 0x54; + item.nチャンネル番号・裏00toFF = 0x54; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BMP; + item.strレーン名 = "BG1"; + item.nチャンネル番号・表00toFF = 4; + item.nチャンネル番号・裏00toFF = 0xc4; + item.b右側の線が太線 = true; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BMP; + item.strレーン名 = "BG2"; + item.nチャンネル番号・表00toFF = 7; + item.nチャンネル番号・裏00toFF = 0xc7; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BMP; + item.strレーン名 = "BG3"; + item.nチャンネル番号・表00toFF = 0x55; + item.nチャンネル番号・裏00toFF = 0xd5; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BMP; + item.strレーン名 = "BG4"; + item.nチャンネル番号・表00toFF = 0x56; + item.nチャンネル番号・裏00toFF = 0xd6; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + item = new Cレーン(); + item.eレーン種別 = Cレーン.E種別.BMP; + item.strレーン名 = "BG5"; + item.nチャンネル番号・表00toFF = 0x57; + item.nチャンネル番号・裏00toFF = 0xd7; + item.b右側の線が太線 = false; + item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 ); + item.n位置Xdot = num; + item.n幅dot = num2; + this.listレーン.Add( item ); + num += item.n幅dot; + } + private void t初期化・スクロールバーを初期設定する() + { + this._Form.hScrollBar譜面用水平スクロールバー.Value = 0; + this._Form.vScrollBar譜面用垂直スクロールバー.Value = 0; + this.t水平スクロールバーと譜面パネル左右位置の調整(); + this.t垂直スクロールバーと譜面可視領域の上下位置の調整(); + this._Form.vScrollBar譜面用垂直スクロールバー.Value = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange; + } + private void t初期化・小節を10個まで作成する() + { + for( int i = 0; i < 10; i++ ) + { + this.dic小節.Add( i, new C小節( i ) ); + } + } + private void t初期化・背景画像を生成する() + { + int width = 0; + foreach( Cレーン cレーン in this.listレーン ) + { + width += cレーン.n幅dot; + } + this.bmp背景画像 = new Bitmap( width, 1 ); + Graphics graphics = Graphics.FromImage( this.bmp背景画像 ); + int x = 0; + foreach( Cレーン cレーン2 in this.listレーン ) + { + graphics.FillRectangle( new SolidBrush( cレーン2.col背景色 ), x, 0, cレーン2.n幅dot, this.bmp背景画像.Height ); + x += cレーン2.n幅dot; + } + graphics.Dispose(); + this._Form.pictureBox譜面パネル.Width = this.bmp背景画像.Width; + this._Form.pictureBox譜面パネル.BackgroundImage = this.bmp背景画像; + this._Form.pictureBox譜面パネル.BackgroundImageLayout = ImageLayout.Tile; + } + private void t譜面を描画する・1小節を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域, Rectangle rc小節のPicBox内可視領域 ) + { + this.t譜面を描画する・1小節を描画する・小節番号を描画する( g, cs, rc小節のPicBox内可視領域 ); + this.t譜面を描画する・1小節を描画する・ガイド線を描画する( g, cs, rc小節のPicBox内描画領域 ); + this.t譜面を描画する・1小節を描画する・拍線を描画する( g, cs, rc小節のPicBox内描画領域 ); + this.t譜面を描画する・1小節を描画する・レーン区分線を描画する( g, cs, rc小節のPicBox内描画領域 ); + this.t譜面を描画する・1小節を描画する・小節線を描画する( g, cs, rc小節のPicBox内描画領域 ); + this.t譜面を描画する・1小節を描画する・チップを描画する( g, cs, rc小節のPicBox内描画領域 ); + } + private void t譜面を描画する・1小節を描画する・ガイド線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 ) + { + if( this.n現在のガイド幅grid > 1 ) + { + int num = cs.n小節長倍率を考慮した現在の小節の高さgrid; + for( int i = 0; i < num; i += this.n現在のガイド幅grid ) + { + int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot ); + g.DrawLine( this.penガイド線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 ); + } + } + } + private void t譜面を描画する・1小節を描画する・チップを描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 ) + { + cs.listチップ.Sort(); + Rectangle rectangle = new Rectangle( 0, 0, 0, 0 ); + foreach( Cチップ cチップ in cs.listチップ ) + { + if( cチップ.n枠外レーン数 != 0 ) + { + continue; + } + int num = cチップ.n位置grid; + Cレーン cレーン = this.listレーン[ cチップ.nレーン番号0to ]; + rectangle.X = cレーン.n位置Xdot; + rectangle.Y = ( rc小節のPicBox内描画領域.Bottom - ( num * C小節.n1グリッドの高さdot ) ) - Cチップ.nチップの高さdot; + rectangle.Width = cレーン.n幅dot; + rectangle.Height = Cチップ.nチップの高さdot; + if( !cチップ.b裏 ) + { + switch( cレーン.eレーン種別 ) + { + case Cレーン.E種別.GtR: + case Cレーン.E種別.GtG: + case Cレーン.E種別.GtB: + case Cレーン.E種別.BsR: + case Cレーン.E種別.BsG: + case Cレーン.E種別.BsB: + if( ( ( cレーン.eレーン種別 != Cレーン.E種別.GtR ) || ( cチップ.n値・整数1to1295 != 2 ) ) && ( ( cレーン.eレーン種別 != Cレーン.E種別.BsR ) || ( cチップ.n値・整数1to1295 != 2 ) ) ) + { + break; + } + rectangle.Width = cレーン.n幅dot * 3; + Cチップ.tOPENチップを描画する( g, rectangle ); + goto Label_0188; + + case Cレーン.E種別.BPM: + Cチップ.t表チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 ); + goto Label_0188; + + default: + Cチップ.t表チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 ); + goto Label_0188; + } + Cチップ.t表チップを描画する( g, rectangle, -1, cレーン.col背景色 ); + } + else if( cレーン.eレーン種別 == Cレーン.E種別.BPM ) + { + Cチップ.t裏チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 ); + } + else + { + Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 ); + } + Label_0188: + if( cチップ.bドラッグで選択中 || cチップ.b確定選択中 ) + { + Cチップ.tチップの周囲の太枠を描画する( g, rectangle ); + } + } + } + private void t譜面を描画する・1小節を描画する・レーン区分線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 ) + { + int num = 0; + foreach( Cレーン cレーン in this.listレーン ) + { + Pen pen = cレーン.b右側の線が太線 ? this.penレーン区分線ペン太 : this.penレーン区分線ペン細; + g.DrawLine( pen, num, rc小節のPicBox内描画領域.Top, num, rc小節のPicBox内描画領域.Bottom ); + num += cレーン.n幅dot; + } + } + private void t譜面を描画する・1小節を描画する・小節線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 ) + { + Rectangle rectangle = rc小節のPicBox内描画領域; + g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Bottom, rectangle.Right, rectangle.Bottom ); + g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Top, rectangle.Right, rectangle.Top ); + } + private void t譜面を描画する・1小節を描画する・小節番号を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内可視領域 ) + { + g.DrawString( C変換.str小節番号を文字列3桁に変換して返す( cs.n小節番号0to3599 ), this.ft小節番号文字フォント, this.br小節番号文字ブラシ, rc小節のPicBox内可視領域, this.strfmt小節番号文字フォーマット ); + } + private void t譜面を描画する・1小節を描画する・拍線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 ) + { + int num = cs.n小節長倍率を考慮した現在の小節の高さgrid; + for( int i = 0; i < num; i += C小節.n基準の高さgrid / 4 ) + { + int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot ); + g.DrawLine( this.pen拍線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 ); + } + } + private void t譜面を描画する・レーン割付チップを描画する( Graphics g, Rectangle rc小節のPicBox内描画領域 ) + { + LinearGradientBrush brush = new LinearGradientBrush( rc小節のPicBox内描画領域, Color.FromArgb( 0xff, 0, 0, 100 ), Color.FromArgb( 0xff, 100, 100, 0xff ), LinearGradientMode.Vertical ); + g.FillRectangle( brush, rc小節のPicBox内描画領域 ); + brush.Dispose(); + Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 ); + foreach( Cレーン cレーン in this.listレーン ) + { + layoutRectangle.X = ( rc小節のPicBox内描画領域.X + cレーン.n位置Xdot ) + 1; + layoutRectangle.Y = rc小節のPicBox内描画領域.Y + 1; + layoutRectangle.Width = cレーン.n幅dot; + layoutRectangle.Height = rc小節のPicBox内描画領域.Height; + if( cレーン.nレーン割付チップ・表0or1to1295 > 0 ) + { + string s = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 ); + g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット ); + layoutRectangle.X--; + layoutRectangle.Y--; + g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット ); + layoutRectangle.X++; + layoutRectangle.Y++; + } + layoutRectangle.X += cレーン.n幅dot / 2; + if( cレーン.nレーン割付チップ・裏0or1to1295 > 0 ) + { + string str2 = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 ); + g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット ); + layoutRectangle.X--; + layoutRectangle.Y--; + g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット ); + } + } + } + private void t譜面を描画する・レーン名を描画する( Graphics g, Rectangle rcレーン名のPicBox内描画領域 ) + { + LinearGradientBrush brush = new LinearGradientBrush( rcレーン名のPicBox内描画領域, Color.FromArgb( 0xff, 100, 100, 0xff ), Color.FromArgb( 0, 0, 0, 0xff ), LinearGradientMode.Vertical ); + g.FillRectangle( brush, rcレーン名のPicBox内描画領域 ); + brush.Dispose(); + Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 ); + foreach( Cレーン cレーン in this.listレーン ) + { + layoutRectangle.X = ( rcレーン名のPicBox内描画領域.X + cレーン.n位置Xdot ) + 2; + layoutRectangle.Y = rcレーン名のPicBox内描画領域.Y + 2; + layoutRectangle.Width = cレーン.n幅dot; + layoutRectangle.Height = 0x18; + g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ影, layoutRectangle, this.strfmtレーン名文字フォーマット ); + layoutRectangle.X -= 2; + layoutRectangle.Y -= 2; + g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ, layoutRectangle, this.strfmtレーン名文字フォーマット ); + } + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/05.譜面/C選択モード管理.cs b/DTXCreatorプロジェクト/コード/05.譜面/C選択モード管理.cs new file mode 100644 index 00000000..ce90fd2c --- /dev/null +++ b/DTXCreatorプロジェクト/コード/05.譜面/C選択モード管理.cs @@ -0,0 +1,797 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Drawing; +using DTXCreator.UndoRedo; +using DTXCreator.Properties; + +namespace DTXCreator.譜面 +{ + public class C選択モード管理 + { + public C選択モード管理( Cメインフォーム formメインフォーム ) + { + this._Form = formメインフォーム; + this.mgr譜面管理者ref = formメインフォーム.mgr譜面管理者; + } + public void t検索する() + { + this._Form.dlgチップパレット.t一時的に隠蔽する(); + this.t検索する・メイン(); + this._Form.dlgチップパレット.t一時的な隠蔽を解除する(); + } + public void t個別選択解除( Cチップ cc ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( this.mgr譜面管理者ref.pチップの存在する小節を返す( cc ).n小節番号0to3599, cc.nレーン番号0to, cc.n位置grid, cc.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ選択解除のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ選択解除のRedo ), redo, redo ) ); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + cc.b確定選択中 = false; + } + public void t全チップの選択を解除する() + { + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + foreach( KeyValuePair pair in this.mgr譜面管理者ref.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int j = 0; j < c小節.listチップ.Count; j++ ) + { + Cチップ cチップ = c小節.listチップ[ j ]; + if( cチップ.n枠外レーン数 != 0 ) + { + Cチップ cc = new Cチップ(); + cc.tコピーfrom( cチップ ); + Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ削除のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ削除のRedo ), redo, redo ) ); + c小節.listチップ.Remove( cチップ ); + j = -1; + } + } + } + for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ ) + { + C小節 c小節2 = this.mgr譜面管理者ref.dic小節[ i ]; + for( int k = 0; k < c小節2.listチップ.Count; k++ ) + { + Cチップ cチップ3 = c小節2.listチップ[ k ]; + if( cチップ3.b確定選択中 || cチップ3.bドラッグで選択中 ) + { + this.mgr譜面管理者ref.bOPENチップである( cチップ3 ); + for( int m = 0; m < c小節2.listチップ.Count; m++ ) + { + Cチップ cチップ4 = c小節2.listチップ[ m ]; + if( ( ( k != m ) && ( cチップ3.nレーン番号0to == cチップ4.nレーン番号0to ) ) && ( ( cチップ3.n位置grid == cチップ4.n位置grid ) && !cチップ4.b確定選択中 ) ) + { + Cチップ cチップ5 = new Cチップ(); + cチップ5.tコピーfrom( cチップ4 ); + Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節2.n小節番号0to3599, cチップ5 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ削除のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ削除のRedo ), redo2, redo2 ) ); + c小節2.listチップ.RemoveAt( m ); + k = -1; + break; + } + } + } + } + } + foreach( KeyValuePair pair2 in this.mgr譜面管理者ref.dic小節 ) + { + C小節 c小節3 = pair2.Value; + for( int n = 0; n < c小節3.listチップ.Count; n++ ) + { + Cチップ cチップ6 = c小節3.listチップ[ n ]; + if( cチップ6.b確定選択中 ) + { + Cチップ位置用UndoRedo redo3 = new Cチップ位置用UndoRedo( c小節3.n小節番号0to3599, cチップ6.nレーン番号0to, cチップ6.n位置grid, cチップ6.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ選択解除のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ選択解除のRedo ), redo3, redo3 ) ); + cチップ6.b移動済 = false; + cチップ6.bドラッグで選択中 = false; + cチップ6.b確定選択中 = false; + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + } + public void t全チップを選択する() + { + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + foreach( KeyValuePair pair in this.mgr譜面管理者ref.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( !cチップ.b確定選択中 ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ選択のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ選択のRedo ), redo, redo ) ); + cチップ.bドラッグで選択中 = false; + cチップ.b確定選択中 = true; + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + this._Form.pictureBox譜面パネル.Refresh(); + } + public void t置換する() + { + this._Form.dlgチップパレット.t一時的に隠蔽する(); + this.t置換する・メイン(); + this._Form.dlgチップパレット.t一時的な隠蔽を解除する(); + } + internal void MouseClick( MouseEventArgs e ) + { + if( e.Button == MouseButtons.Right ) + { + this._Form.t選択モードのコンテクストメニューを表示する( e.X, e.Y ); + } + } + internal void MouseDown( MouseEventArgs e ) + { + if( e.Button == MouseButtons.Left ) + { + Cチップ cc = this.mgr譜面管理者ref.p指定された座標dotにあるチップを返す( e.X, e.Y ); + if( ( cc == null ) || !cc.b確定選択中 ) + { + this.t範囲選択開始処理( e ); + } + else if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control ) + { + this.t移動開始処理( e ); + } + else + { + this.t個別選択解除( cc ); + } + } + } + internal void MouseMove( MouseEventArgs e ) + { + if( e.Button == MouseButtons.Left ) + { + if( this.b範囲選択のためにドラッグ中 ) + { + this.t範囲選択継続処理( e ); + } + if( this.b移動のためにドラッグ中 ) + { + this.t移動継続処理( e ); + } + } + else + { + if( this.b範囲選択のためにドラッグ中 ) + { + this.t範囲選択終了処理( e ); + } + if( this.b移動のためにドラッグ中 ) + { + this.t移動終了処理( e ); + } + } + this._Form.pictureBox譜面パネル.Refresh(); + } + internal void Paint( PaintEventArgs e ) + { + if( this.b範囲選択のためにドラッグ中 ) + { + this.t現在の選択範囲を描画する( e.Graphics ); + } + } + + #region [ private ] + //----------------- + private Cメインフォーム _Form; + private SolidBrush br選択領域ブラシ = new SolidBrush( Color.FromArgb( 80, 0x37, 0x37, 0xff ) ); + private bool b移動のためにドラッグ中; + private bool b範囲選択のためにドラッグ中; + private C譜面管理 mgr譜面管理者ref; + private Point pt現在のドラッグ開始位置dot = new Point(); + private Point pt現在のドラッグ終了位置dot = new Point(); + private Point pt前回の位置LaneGrid = new Point(); + + private void tチップを横に移動する( Cチップ cc, int n移動量lane ) + { + int num2; + int count = this.mgr譜面管理者ref.listレーン.Count; + if( cc.n枠外レーン数 < 0 ) + { + num2 = cc.n枠外レーン数 + n移動量lane; + } + else if( cc.n枠外レーン数 > 0 ) + { + num2 = ( ( count - 1 ) + cc.n枠外レーン数 ) + n移動量lane; + } + else + { + num2 = cc.nレーン番号0to + n移動量lane; + } + if( num2 < 0 ) + { + cc.n枠外レーン数 = num2; + } + else if( num2 >= count ) + { + cc.n枠外レーン数 = num2 - ( count - 1 ); + } + else + { + cc.nレーン番号0to = num2; + cc.n枠外レーン数 = 0; + } + cc.b移動済 = true; + this._Form.b未保存 = true; + } + private void tチップを縦に移動する( Cチップ cc, int n移動量grid, C小節 csチップのある小節 ) + { + cc.b移動済 = true; + int num = cc.n位置grid + n移動量grid; + if( num < 0 ) + { + int num2 = csチップのある小節.n小節番号0to3599; + C小節 c小節 = null; + while( num < 0 ) + { + num2--; + c小節 = this.mgr譜面管理者ref.p小節を返す( num2 ); + if( c小節 == null ) + { + return; + } + num += c小節.n小節長倍率を考慮した現在の小節の高さgrid; + } + Cチップ item = new Cチップ(); + item.tコピーfrom( cc ); + item.n位置grid = num; + csチップのある小節.listチップ.Remove( cc ); + c小節.listチップ.Add( item ); + } + else if( num >= csチップのある小節.n小節長倍率を考慮した現在の小節の高さgrid ) + { + int num3 = csチップのある小節.n小節番号0to3599; + C小節 c小節2 = csチップのある小節; + while( num >= c小節2.n小節長倍率を考慮した現在の小節の高さgrid ) + { + num -= c小節2.n小節長倍率を考慮した現在の小節の高さgrid; + num3++; + c小節2 = this.mgr譜面管理者ref.p小節を返す( num3 ); + if( c小節2 == null ) + { + c小節2 = new C小節( num3 ); + this.mgr譜面管理者ref.dic小節.Add( num3, c小節2 ); + } + } + Cチップ cチップ2 = new Cチップ(); + cチップ2.tコピーfrom( cc ); + cチップ2.n位置grid = num; + csチップのある小節.listチップ.Remove( cc ); + c小節2.listチップ.Add( cチップ2 ); + } + else + { + cc.n位置grid = num; + } + this._Form.b未保存 = true; + } + private void tチップ移動のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to ); + if( c小節 != null ) + { + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ item = c小節.listチップ[ i ]; + if( ( item.b確定選択中 && ( item.n位置grid == ur変更前.n位置grid ) ) && ( item.nレーン番号0to == ur変更前.nレーン番号0to ) ) + { + C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to ); + if( c小節2 != null ) + { + c小節.listチップ.RemoveAt( i ); + item.nレーン番号0to = ur変更後.nレーン番号0to; + item.n位置grid = ur変更後.n位置grid; + c小節2.listチップ.Add( item ); + break; + } + } + } + this._Form.pictureBox譜面パネル.Refresh(); + } + } + private void tチップ移動のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 ) + { + C小節 c小節 = this.mgr譜面管理者ref.p小節を返す( ur変更後.n小節番号0to ); + if( c小節 != null ) + { + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ item = c小節.listチップ[ i ]; + if( ( item.b確定選択中 && ( item.n位置grid == ur変更後.n位置grid ) ) && ( item.nレーン番号0to == ur変更後.nレーン番号0to ) ) + { + C小節 c小節2 = this.mgr譜面管理者ref.p小節を返す( ur変更前.n小節番号0to ); + if( c小節2 != null ) + { + c小節.listチップ.RemoveAt( i ); + item.nレーン番号0to = ur変更前.nレーン番号0to; + item.n位置grid = ur変更前.n位置grid; + c小節2.listチップ.Add( item ); + break; + } + } + } + this._Form.pictureBox譜面パネル.Refresh(); + } + } + private void tドラッグ範囲中のチップを選択する() + { + Rectangle rectangle = new Rectangle(); + rectangle.X = Math.Min( this.pt現在のドラッグ開始位置dot.X, this.pt現在のドラッグ終了位置dot.X ); + rectangle.Y = Math.Min( this.pt現在のドラッグ開始位置dot.Y, this.pt現在のドラッグ終了位置dot.Y ); + rectangle.Width = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.X - this.pt現在のドラッグ終了位置dot.X ) ); + rectangle.Height = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.Y - this.pt現在のドラッグ終了位置dot.Y ) ); + Rectangle rectangle2 = new Rectangle(); + rectangle2.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( rectangle.X ); + rectangle2.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・最高解像度( rectangle.Y ); + rectangle2.Width = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( rectangle.Right ) - rectangle2.X; + rectangle2.Height = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・最高解像度( rectangle.Bottom ) - rectangle2.Y; + int num = 0; + for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ ) + { + C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ]; + int num3 = c小節.n小節長倍率を考慮した現在の小節の高さgrid; + for( int j = 0; j < c小節.listチップ.Count; j++ ) + { + int num5; + Cチップ cc = c小節.listチップ[ j ]; + if( this.mgr譜面管理者ref.bOPENチップである( cc ) ) + { + if( ( ( cc.nレーン番号0to + 2 ) >= rectangle2.X ) && ( rectangle2.Right >= cc.nレーン番号0to ) ) + { + goto Label_01B0; + } + cc.bドラッグで選択中 = false; + continue; + } + if( ( cc.nレーン番号0to < rectangle2.X ) || ( rectangle2.Right < cc.nレーン番号0to ) ) + { + cc.bドラッグで選択中 = false; + continue; + } + Label_01B0: + num5 = num + cc.n位置grid; + int num6 = num5 + C小節.n位置変換dot2grid( Cチップ.nチップの高さdot ); + if( ( num6 < rectangle2.Bottom ) || ( rectangle2.Top < num5 ) ) + { + cc.bドラッグで選択中 = false; + } + else + { + cc.bドラッグで選択中 = true; + } + } + num += num3; + } + } + private void t移動開始処理( MouseEventArgs e ) + { + this.b移動のためにドラッグ中 = true; + this.pt現在のドラッグ開始位置dot.X = this.pt現在のドラッグ終了位置dot.X = e.X; + this.pt現在のドラッグ開始位置dot.Y = this.pt現在のドラッグ終了位置dot.Y = e.Y; + this.pt前回の位置LaneGrid.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( e.X ); + this.pt前回の位置LaneGrid.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( e.Y ); + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( cチップ.b確定選択中 ) + { + cチップ.n移動開始時の小節番号0to = c小節.n小節番号0to3599; + cチップ.n移動開始時のレーン番号0to = cチップ.nレーン番号0to; + cチップ.n移動開始時の小節内の位置grid = cチップ.n位置grid; + } + } + } + } + private void t移動継続処理( MouseEventArgs e ) + { + this.pt現在のドラッグ終了位置dot.X = e.X; + this.pt現在のドラッグ終了位置dot.Y = e.Y; + this.t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( e ); + this.t確定選択中のチップを移動する(); + } + private void t移動終了処理( MouseEventArgs e ) + { + this.b移動のためにドラッグ中 = false; + foreach( KeyValuePair pair in this.mgr譜面管理者ref.dic小節 ) + { + for( int i = 0; i < pair.Value.listチップ.Count; i++ ) + { + Cチップ cチップ = pair.Value.listチップ[ i ]; + if( cチップ.b確定選択中 && ( cチップ.n枠外レーン数 == 0 ) ) + { + Cレーン cレーン = this.mgr譜面管理者ref.listレーン[ cチップ.nレーン番号0to ]; + cチップ.nチャンネル番号00toFF = cチップ.b裏 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF; + if( ( cレーン.bパターンレーンである() && ( cチップ.n値・整数1to1295 != 1 ) ) && ( cチップ.n値・整数1to1295 != 2 ) ) + { + cチップ.n値・整数1to1295 = 1; + } + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + foreach( KeyValuePair pair2 in this.mgr譜面管理者ref.dic小節 ) + { + C小節 c小節 = pair2.Value; + for( int j = 0; j < pair2.Value.listチップ.Count; j++ ) + { + Cチップ cチップ2 = c小節.listチップ[ j ]; + if( cチップ2.b確定選択中 && ( ( ( cチップ2.n移動開始時の小節番号0to != c小節.n小節番号0to3599 ) || ( cチップ2.n移動開始時のレーン番号0to != cチップ2.nレーン番号0to ) ) || ( cチップ2.n移動開始時の小節内の位置grid != cチップ2.n位置grid ) ) ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( cチップ2.n移動開始時の小節番号0to, cチップ2.n移動開始時のレーン番号0to, cチップ2.n移動開始時の小節内の位置grid, cチップ2.n値・整数1to1295 ); + Cチップ位置用UndoRedo redo2 = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ2.nレーン番号0to, cチップ2.n位置grid, cチップ2.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.tチップ移動のUndo ), new DGRedoを実行する( this.tチップ移動のRedo ), redo, redo2 ) ); + } + } + } + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + } + private void t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( MouseEventArgs e ) + { + if( e.Y < 70 ) + { + int nGrid = -( 70 - e.Y ) / 2; + int num2 = this._Form.vScrollBar譜面用垂直スクロールバー.Value; + int num3 = this._Form.vScrollBar譜面用垂直スクロールバー.Value + nGrid; + int minimum = this._Form.vScrollBar譜面用垂直スクロールバー.Minimum; + int num5 = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange; + if( num3 < minimum ) + { + num3 = minimum; + } + else if( num3 > num5 ) + { + num3 = num5; + } + this._Form.vScrollBar譜面用垂直スクロールバー.Value = num3; + nGrid = num3 - num2; + this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( nGrid ); + } + else if( e.Y > ( this._Form.pictureBox譜面パネル.Height - 50 ) ) + { + int num6 = ( ( e.Y - this._Form.pictureBox譜面パネル.Height ) + 50 ) / 2; + int num7 = this._Form.vScrollBar譜面用垂直スクロールバー.Value; + int num8 = this._Form.vScrollBar譜面用垂直スクロールバー.Value + num6; + int num9 = this._Form.vScrollBar譜面用垂直スクロールバー.Minimum; + int num10 = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange; + if( num8 < num9 ) + { + num8 = num9; + } + else if( num8 > num10 ) + { + num8 = num10; + } + this._Form.vScrollBar譜面用垂直スクロールバー.Value = num8; + num6 = num8 - num7; + this.pt現在のドラッグ開始位置dot.Y -= C小節.n位置変換grid2dot( num6 ); + } + } + private void t確定選択中のチップを移動する() + { + Point point = new Point(); + point.X = this.mgr譜面管理者ref.nX座標dotが位置するレーン番号を返す( this.pt現在のドラッグ終了位置dot.X ); + point.Y = this.mgr譜面管理者ref.nY座標dotが位置するgridを返す・ガイド幅単位( this.pt現在のドラッグ終了位置dot.Y ); + Point point2 = new Point(); + point2.X = point.X - this.pt前回の位置LaneGrid.X; + point2.Y = point.Y - this.pt前回の位置LaneGrid.Y; + if( ( point2.X != 0 ) || ( point2.Y != 0 ) ) + { + foreach( KeyValuePair pair in this.mgr譜面管理者ref.dic小節 ) + { + pair.Value.t小節内の全チップの移動済フラグをリセットする(); + } + for( int i = 0; i < this.mgr譜面管理者ref.dic小節.Count; i++ ) + { + C小節 c小節 = this.mgr譜面管理者ref.dic小節[ i ]; + for( int j = 0; j < c小節.listチップ.Count; j++ ) + { + Cチップ cc = c小節.listチップ[ j ]; + if( cc.b確定選択中 && !cc.b移動済 ) + { + if( point2.X != 0 ) + { + this.tチップを横に移動する( cc, point2.X ); + } + if( point2.Y != 0 ) + { + this.tチップを縦に移動する( cc, point2.Y, c小節 ); + i = -1; + break; + } + } + } + } + this.pt前回の位置LaneGrid.X = point.X; + this.pt前回の位置LaneGrid.Y = point.Y; + } + } + private void t検索する・メイン() + { + C検索ダイアログ c検索ダイアログ = new C検索ダイアログ(); + if( !c検索ダイアログ.bレーンリストの内訳が生成済みである ) + { + int count = this._Form.mgr譜面管理者.listレーン.Count; + string[] strArray = new string[ count ]; + for( int i = 0; i < count; i++ ) + { + strArray[ i ] = this._Form.mgr譜面管理者.listレーン[ i ].strレーン名; + } + c検索ダイアログ.tレーンリストの内訳を生成する( strArray ); + } + if( c検索ダイアログ.ShowDialog() == DialogResult.OK ) + { + int num3 = c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている ? c検索ダイアログ.nチップ範囲開始番号 : 0; + int num4 = c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている ? c検索ダイアログ.nチップ範囲終了番号 : 0x50f; + if( ( c検索ダイアログ.bチップ範囲指定CheckBoxがチェックされている && ( num3 < 0 ) ) && ( num4 < 0 ) ) + { + num3 = 0; + num4 = 0x50f; + } + int num5 = c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている ? c検索ダイアログ.n小節範囲開始番号 : 0; + int num6 = c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている ? c検索ダイアログ.n小節範囲終了番号 : this._Form.mgr譜面管理者.n現在の最大の小節番号を返す(); + if( ( c検索ダイアログ.b小節範囲指定CheckBoxがチェックされている && ( num5 < 0 ) ) && ( num6 < 0 ) ) + { + num5 = 0; + num6 = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す(); + } + if( ( ( num5 >= 0 ) && ( num6 >= 0 ) ) && ( ( num3 >= 0 ) && ( num4 >= 0 ) ) ) + { + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + int num7 = 0; + for( int j = num5; j <= num6; j++ ) + { + C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( j ); + if( c小節 != null ) + { + for( int k = 0; k < c小節.listチップ.Count; k++ ) + { + Cチップ cチップ = c小節.listチップ[ k ]; + if( ( ( !c検索ダイアログ.bレーン指定CheckBoxがチェックされている || c検索ダイアログ.bレーンが検索対象である( cチップ.nレーン番号0to ) ) && ( ( cチップ.n値・整数1to1295 >= num3 ) && ( cチップ.n値・整数1to1295 <= num4 ) ) ) && ( ( c検索ダイアログ.b表チップCheckBoxがチェックされている && !cチップ.b裏 ) || ( c検索ダイアログ.b裏チップCheckBoxがチェックされている && cチップ.b裏 ) ) ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ選択のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ選択のRedo ), redo, redo ) ); + cチップ.b確定選択中 = true; + num7++; + } + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + this._Form.pictureBox譜面パネル.Refresh(); + if( num7 > 0 ) + { + this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + MessageBox.Show( num7 + Resources.str個のチップが選択されましたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 ); + } + else + { + MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str検索結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 ); + } + } + } + } + private void t現在の選択範囲を描画する( Graphics g ) + { + Rectangle rect = new Rectangle(); + rect.X = Math.Min( this.pt現在のドラッグ開始位置dot.X, this.pt現在のドラッグ終了位置dot.X ); + rect.Y = Math.Min( this.pt現在のドラッグ開始位置dot.Y, this.pt現在のドラッグ終了位置dot.Y ); + rect.Width = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.X - this.pt現在のドラッグ終了位置dot.X ) ); + rect.Height = Math.Abs( (int) ( this.pt現在のドラッグ開始位置dot.Y - this.pt現在のドラッグ終了位置dot.Y ) ); + if( rect.Width < 0 ) + { + rect.X = this.pt現在のドラッグ開始位置dot.X; + rect.Width = this.pt現在のドラッグ開始位置dot.X - rect.X; + } + if( rect.Height < 0 ) + { + rect.Y = this.pt現在のドラッグ開始位置dot.Y; + rect.Height = this.pt現在のドラッグ開始位置dot.Y - rect.Y; + } + if( ( rect.Width != 0 ) && ( rect.Height != 0 ) ) + { + g.FillRectangle( this.br選択領域ブラシ, rect ); + g.DrawRectangle( Pens.LightBlue, rect ); + } + } + private void t選択チップを単純置換する( int n元番号, int n先番号 ) + { + if( ( n元番号 < 0 ) || ( n先番号 < 0 ) ) + { + MessageBox.Show( Resources.strチップ番号に誤りがありますMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + } + else + { + int num = 0; + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( cチップ.b確定選択中 && ( cチップ.n値・整数1to1295 == n元番号 ) ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 ); + Cチップ位置用UndoRedo redo2 = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, n先番号 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ番号置換のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ番号置換のRedo ), redo, redo2 ) ); + cチップ.n値・整数1to1295 = n先番号; + num++; + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + if( num > 0 ) + { + this._Form.b未保存 = true; + this._Form.pictureBox譜面パネル.Refresh(); + MessageBox.Show( num + Resources.str個のチップを置換しましたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 ); + } + else + { + MessageBox.Show( Resources.str該当するチップはありませんでしたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 ); + } + } + } + private void t選択チップを表裏反転置換する() + { + int num = 0; + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( cチップ.b確定選択中 ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ表裏反転のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ表裏反転のRedo ), redo, redo ) ); + if( cチップ.b裏 ) + { + cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF; + cチップ.b裏 = false; + } + else + { + cチップ.nチャンネル番号00toFF = this._Form.mgr譜面管理者.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF; + cチップ.b裏 = true; + } + num++; + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + if( num > 0 ) + { + this._Form.b未保存 = true; + this._Form.pictureBox譜面パネル.Refresh(); + MessageBox.Show( num + Resources.str個のチップを置換しましたMSG, Resources.str置換結果ダイアログのタイトル, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1 ); + } + } + private void t置換する・メイン() + { + C置換ダイアログ c置換ダイアログ = new C置換ダイアログ(); + bool flag = false; + if( !this._Form.mgr譜面管理者.b確定選択中のチップがある() ) + { + this.t全チップを選択する(); + flag = true; + } + int num = -1; + bool flag2 = true; + foreach( KeyValuePair pair in this._Form.mgr譜面管理者.dic小節 ) + { + foreach( Cチップ cチップ in pair.Value.listチップ ) + { + if( cチップ.b確定選択中 ) + { + if( num < 0 ) + { + num = cチップ.n値・整数1to1295; + } + else if( num != cチップ.n値・整数1to1295 ) + { + flag2 = false; + break; + } + } + } + if( !flag2 ) + { + break; + } + } + if( flag2 ) + { + c置換ダイアログ.n元番号 = num; + } + if( c置換ダイアログ.ShowDialog() == DialogResult.OK ) + { + if( c置換ダイアログ.b表裏反転RadioButtonがチェックされている ) + { + this.t選択チップを表裏反転置換する(); + } + else if( c置換ダイアログ.b単純置換RadioButtonがチェックされている ) + { + this.t選択チップを単純置換する( c置換ダイアログ.n元番号, c置換ダイアログ.n先番号 ); + } + } + else if( flag ) + { + this.t全チップの選択を解除する(); + } + } + private void t範囲選択開始処理( MouseEventArgs e ) + { + this.b範囲選択のためにドラッグ中 = true; + this.pt現在のドラッグ開始位置dot.X = this.pt現在のドラッグ終了位置dot.X = e.X; + this.pt現在のドラッグ開始位置dot.Y = this.pt現在のドラッグ終了位置dot.Y = e.Y; + if( ( Control.ModifierKeys & Keys.Control ) != Keys.Control ) + { + this.t全チップの選択を解除する(); + } + this.tドラッグ範囲中のチップを選択する(); + } + private void t範囲選択継続処理( MouseEventArgs e ) + { + this.pt現在のドラッグ終了位置dot.X = e.X; + this.pt現在のドラッグ終了位置dot.Y = e.Y; + this.t画面上下にマウスカーソルがあるなら譜面を縦スクロールする( e ); + this.tドラッグ範囲中のチップを選択する(); + } + private void t範囲選択終了処理( MouseEventArgs e ) + { + this.b範囲選択のためにドラッグ中 = false; + this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する(); + foreach( KeyValuePair pair in this.mgr譜面管理者ref.dic小節 ) + { + C小節 c小節 = pair.Value; + for( int i = 0; i < c小節.listチップ.Count; i++ ) + { + Cチップ cチップ = c小節.listチップ[ i ]; + if( cチップ.bドラッグで選択中 && !cチップ.b確定選択中 ) + { + Cチップ位置用UndoRedo redo = new Cチップ位置用UndoRedo( c小節.n小節番号0to3599, cチップ.nレーン番号0to, cチップ.n位置grid, cチップ.n値・整数1to1295 ); + this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル( null, new DGUndoを実行する( this.mgr譜面管理者ref.tチップ選択のUndo ), new DGRedoを実行する( this.mgr譜面管理者ref.tチップ選択のRedo ), redo, redo ) ); + } + } + } + this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する(); + this._Form.tUndoRedo用GUIの有効・無効を設定する(); + foreach( KeyValuePair pair2 in this.mgr譜面管理者ref.dic小節 ) + { + C小節 c小節2 = pair2.Value; + for( int j = 0; j < c小節2.listチップ.Count; j++ ) + { + Cチップ cチップ2 = c小節2.listチップ[ j ]; + if( cチップ2.bドラッグで選択中 ) + { + cチップ2.bドラッグで選択中 = false; + cチップ2.b確定選択中 = true; + } + } + } + this._Form.t選択チップの有無に応じて編集用GUIの有効・無効を設定する(); + } + //----------------- + #endregion + } +} diff --git a/DTXCreatorプロジェクト/コード/06.汎用/Cファイル選択・パス変換.cs b/DTXCreatorプロジェクト/コード/06.汎用/Cファイル選択・パス変換.cs new file mode 100644 index 00000000..13ad6f37 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/06.汎用/Cファイル選択・パス変換.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace DTXCreator.汎用 +{ + public class Cファイル選択・パス変換 + { + public static bool b絶対パスである( string strパス ) + { + try + { + new Uri( strパス ); + } + catch + { + return false; + } + return true; + } + public static string str基点からの相対パスに変換して返す( string str変換対象の絶対パス, string str基点となる絶対パス ) + { + if( str基点となる絶対パス == "" ) + { + return str変換対象の絶対パス; + } + if( str変換対象の絶対パス == "" ) + { + return ""; + } + Uri uri = new Uri( str基点となる絶対パス ); + return Uri.UnescapeDataString( uri.MakeRelativeUri( new Uri( str変換対象の絶対パス ) ).ToString() ).Replace( '/', '\\' ); + } + public static string str指定されたファイルの存在するフォルダを絶対パスで返す( string strファイルのパス, string strパスが相対の場合の基点絶対パス ) + { + if( !b絶対パスである( strファイルのパス ) ) + { + strファイルのパス = strパスが相対の場合の基点絶対パス + strファイルのパス; + } + string directoryName = Path.GetDirectoryName( strファイルのパス ); + if( directoryName == null ) + { + return @"\"; + } + if( !directoryName.EndsWith( @"\" ) ) + { + directoryName = directoryName + @"\"; + } + return directoryName; + } + } +} diff --git a/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.Designer.cs b/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.Designer.cs new file mode 100644 index 00000000..7c94fac7 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.Designer.cs @@ -0,0 +1,79 @@ +namespace DTXCreator.汎用 +{ + partial class Cメッセージポップアップ + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose( bool disposing ) + { + if( disposing && ( components != null ) ) + { + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.panelメッセージ = new System.Windows.Forms.Panel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ( (System.ComponentModel.ISupportInitialize) ( this.pictureBox1 ) ).BeginInit(); + this.SuspendLayout(); + // + // panelメッセージ + // + this.panelメッセージ.Location = new System.Drawing.Point( 113, 12 ); + this.panelメッセージ.Name = "panelメッセージ"; + this.panelメッセージ.Size = new System.Drawing.Size( 212, 86 ); + this.panelメッセージ.TabIndex = 1; + this.panelメッセージ.Paint += new System.Windows.Forms.PaintEventHandler( this.panelメッセージ_Paint ); + // + // pictureBox1 + // + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox1.Image = global::DTXCreator.Properties.Resources.りらちょー; + this.pictureBox1.Location = new System.Drawing.Point( 12, 12 ); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size( 95, 80 ); + this.pictureBox1.TabIndex = 2; + this.pictureBox1.TabStop = false; + // + // Cメッセージポップアップ + // + this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F ); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size( 337, 110 ); + this.ControlBox = false; + this.Controls.Add( this.pictureBox1 ); + this.Controls.Add( this.panelメッセージ ); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "Cメッセージポップアップ"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Cメッセージポップアップ"; + this.Load += new System.EventHandler( this.Cメッセージポップアップ_Load ); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler( this.Cメッセージポップアップ_FormClosing ); + ( (System.ComponentModel.ISupportInitialize) ( this.pictureBox1 ) ).EndInit(); + this.ResumeLayout( false ); + + } + + #endregion + + private System.Windows.Forms.Panel panelメッセージ; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.cs b/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.cs new file mode 100644 index 00000000..3b9a94e5 --- /dev/null +++ b/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using DTXCreator.Properties; + +namespace DTXCreator.汎用 +{ + public partial class Cメッセージポップアップ : Form + { + public Cメッセージポップアップ( string strメッセージ ) + { + this.InitializeComponent(); + this.strメッセージ = strメッセージ; + this.ftフォント = new Font( "MS PGothic", 10f ); + } + + private string strメッセージ; + private Font ftフォント; + + private void Cメッセージポップアップ_FormClosing( object sender, FormClosingEventArgs e ) + { + this.ftフォント.Dispose(); + } + private void Cメッセージポップアップ_Load( object sender, EventArgs e ) + { + base.Location = new Point( base.Owner.Location.X + ( ( base.Owner.Width - base.Width ) / 2 ), base.Owner.Location.Y + ( ( base.Owner.Height - base.Height ) / 2 ) ); + } + private void panelメッセージ_Paint( object sender, PaintEventArgs e ) + { + SolidBrush brush = new SolidBrush( Color.Black ); + RectangleF layoutRectangle = new RectangleF( 0f, 0f, (float) this.panelメッセージ.ClientSize.Width, (float) this.panelメッセージ.ClientSize.Height ); + StringFormat format = new StringFormat(); + format.LineAlignment = StringAlignment.Center; + format.Alignment = StringAlignment.Near; + e.Graphics.DrawString( this.strメッセージ, this.ftフォント, brush, layoutRectangle, format ); + brush.Dispose(); + } + } +} diff --git a/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.resx b/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/DTXCreatorプロジェクト/コード/06.汎用/Cメッセージポップアップ.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DTXCreatorプロジェクト/コード/99.リソース/AudioHS.png b/DTXCreatorプロジェクト/コード/99.リソース/AudioHS.png new file mode 100644 index 0000000000000000000000000000000000000000..aec03b788de6b5ac78f409db173ee6808b80c1b6 GIT binary patch literal 729 zcmV;~0w(>5P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;Pf0{URCwB?(?4hvaTEve?_HDJCAp**ucjty73m)l zYZV-`*C{S_hpJhtSY!t4aUZw9@?RnWUGy zq-oOJ<#IpQ4oMVz>wE9RgZCaq2*Lk^saEpS=q(;7Uu4+&aY-rOu?VNedae#{?5?4! zHUF6EZ{-EMzeI84!No8_OEZt7fzKn;^DE6Y0rA@dD)?crz21Fj;ds|j8_hOB&Pq6c z)(g9Hr{DMHUPo16c5?7wR!I$89kxJY%LTK=+6YNf(00U$)1A%eII+)M2klZ-falp| zGp#D3 z0XeY&wU|a(jld`-Ajv9Tzw&{ittb{~7=|uayo1E=ZP@5vaB)s-#NzO{7{JWI<+Px? z%Z8r5>qw^3FfnYg;smT+7@3~kK_r@l@5>Bwav1v7I^2yc_P3k_O*4=ZB6J-}MWDOy z$wR?&>;}U&_;T4yY4Q6S)>lPvb~83pTTqk)LZJvWRrOb0WADK8QNbk)Ic&Dcuk%?g z5D>vw2tv!75aSYlF2yxfGv3v_#A~--EHGC0z-p}gY;H+MIIJQPmGE}L4^d2i%;$@X zyX&cH-+1$K2kUSN-Re&Eu2w=P3^GY5>QNmz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-`AI}URCwB?lRaotQ5c4w+r}yux;P1r6#`Xkk?K-^ zK#FZes31X*fvP`c`_A!1ghrBhmi;0C#u@;$iizWx9}BsGGwFj9|0RsS`7D3u?$a4L zap}J77)W=D2&x3W-IJ|Ego0A>0I}cU^#a^i&%{_Q5NtL#u&7=Tz#IyFDbM(#9EWw&ZO{AL1euw}Vc^I%<2v`bBgp~>a{T&XhUIFx` zPS*ME?mq>=MI6ectd;UmYNG<*fi5zwxzp^Y83W z3gXO4gMXzML{wtO-u3_yhd76bt-e6#5T{oM_@QF^(MJF{6XA@)8I3rFSdF;qcDzP^ dV-pSL*8r9tU~{m$x5NMd002ovPDHLkV1oE^7W@DJ literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/CutHS.png b/DTXCreatorプロジェクト/コード/99.リソース/CutHS.png new file mode 100644 index 0000000000000000000000000000000000000000..51449ba37ccda6146a010fbb004ae788a7cf008f GIT binary patch literal 628 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 literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/DataContainer_MoveNextHS.png b/DTXCreatorプロジェクト/コード/99.リソース/DataContainer_MoveNextHS.png new file mode 100644 index 0000000000000000000000000000000000000000..f4eaa4614a3e0600659eca228fc8ce58df52b6ed GIT binary patch literal 441 zcmV;q0Y?6bP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-FG)l}RCwB?)4fZ>Ko|z_r%g%IMG#z6fDadNQ#kNr1X9Ri`?QmUg)!9@&yB~6Z&G!-SE&FgGuO7mb>SE9NZm<2>Eew zX-V8XH_G5M-)P!JYrn#lW@n@is@Ce0AZ#HeLMa@YS*5z#Xxh@Bfg~a9ZK(M2y;}g= z;}8}IL&As%TbnC$T`}kY*eOC-Aj&dCA<*-Ih2=FozlnAc!k-`_41;gj>m`(`SaUlyGv7#PW+NsWU zSs;oCy}k!ov=A%muBDyb72N_4qy+KQLL@Kl+haBt0!cbTtke%}?d0ZPFVV9fk3gwD j$zLcD5vEBQQ|4y?r9rmFZh46?00000NkvXXu0mjfegdm2 literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/DataContainer_NewRecordHS.png b/DTXCreatorプロジェクト/コード/99.リソース/DataContainer_NewRecordHS.png new file mode 100644 index 0000000000000000000000000000000000000000..f64bc584b9549182996c057b64c20a5f61a772b4 GIT binary patch literal 590 zcmV-U0z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-#7RU!RCwCV(@#i~aU93-_p_GIoEKdSY_&h3OmrPm zksvdq1w!7Uy41x(A>Qhk&?)HTExJfY>((S;7%>}*Iz3Vl3)hxD8{6Za%C?nrdmiQa zb!v@nZI?dqJ$_$&`F{CILI~Q4jW%NgxU*QCm{};;S_TT4Y{Ih3!I_1^p_Txb&&zK4 z`)lCr-$;6SaH*n%AM$m6H52LIN5B1YFFAcby*zlY0T>3H8S8gzdMN>%YeoV?1IhAE zX%5*n<#3PL=?q-_lFQ%q^qrLd0G7pW4gA3&GFd&|j2!L>o%fI5lyHvI-FFq7qXZ^q zrLNxL(WVIml`3Sn4b)O6AJ!9bRnu<(e2OoHb4rZrP7$XkOs!lYr^G0{U%dce2dLF8 zHZ_xEN~J@OQgrw)D^Eru0Kv)YG2~-Y$lX-+S9Bfe#Wyku#=u%*f<4nBm)GdfqnHlw zbbjSZ8B`V2H;bZLe7D{J>UE2ssR*XS8_KU-i#A_jE4kt8 zal0Pb4!*@CBV}T4zc_m0_yg_pmH~heg5kOJbI+xxr-cywYaxW-)UAzBE6qX(r2pfY c+R3j005_ly;dJ+_+yDRo07*qoM6N<$f{T6y9{>OV literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/DocumentHS.png b/DTXCreatorプロジェクト/コード/99.リソース/DocumentHS.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5c2c34533cf456d4d56d500c41fdc51ae7f890 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hVx@pN$vskpTyc(L2OAmBY3`nIW?z`Kj}lWFn=qrp_h(kQZwzKg zp5e)#@2!34^OM7uitZlU{N8Veyb`C&swj=imhEAm`Su?C@bGEv#k2EOD|fnnxc7MD zUlxWJylvkvN^%q{9?X5Kb=rM>@SG(F&N!@D5vI4fc1nZlx`v~NCnouRWIDM|?25FE z_O&GiOV~M-bPe+5tR@|1xqV;bRsHJIg}O)Bp1;VK@tq(avu)G6?@kW&CjaNpWKht( i?q8PtGRFEp4+GcBOO>JGcP0YEfx*+&&t;ucLK6VG=9mfq literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/EditInformationHS.png b/DTXCreatorプロジェクト/コード/99.リソース/EditInformationHS.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4614c90bad3fde45b496242c60f33d6feca4ca GIT binary patch literal 621 zcmV-z0+RiSP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-<4Ht8RCwBylRt=4K@i4&FL|YP8U;n$2tq8h5e@_k z3qcE8tCU(q5X8=ZRX8}i*a#|u!V&MVusnoR2{y@DC~5*%9ablJ+1Z(~*q6Knqu|1_ zv&($ne*5iA=I;F0xRN`-V4^fWdX}%h+jD@dQpL=$7>g-b6k-rG2vGtLkL<#kI}ElS z&G~XS=ho$808}dwEln{95rV=r!il#X_%?>|h{nlNw7o_H$W0Y1*dD(eu2g+bdUG%b zL)u=Wwb{!^1d*sI@%HsP4rrl36l!le@bx=PM(}e)+iUDK?v_tb5v1^OAOK{Ugx1XMH#)0mu|jZUY-;Nn@>9?;%;Mr*SNKvb{@7R%&3iV$?!^=7jP z%_ab?8_oH-7zC+cstX>3DTfOL5B~C%km|!6T;n2v%;jHNt78V9fg7kNkUFTQZ;c8X zmlTvH?tB>jvkgu+>X`rGL0~FrbMAZ{92_u`TrFgqCl9Ky?7=KJYM)Vq5Gw?6f@WBR zL#ZUNLUl#s<|ab->8rGJ$FpKJ!`(48+znU7EfvtBg5LuGpqE6&%i}C200000NkvXX Hu0mjfh))NQ literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/Edit_RedoHS.png b/DTXCreatorプロジェクト/コード/99.リソース/Edit_RedoHS.png new file mode 100644 index 0000000000000000000000000000000000000000..90dd179418f83fb327f11b764508af1f378cba78 GIT binary patch literal 672 zcmV;R0$=@!P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;7D+@wRCwB?lgn!pQ543%dy|ftr0FZR+CW=^R;Vr5 zwU0kQs)%TX2tE*(qS&Qw#6>|NVwXM;EL5ct#iff7HK;UH)M7;~+9r_NCT1p+WbS0{ zWOCgYX&Y&Ud~o2vIp+t5^Bp3DKs|C+lW>grg}|i>FlcaeD@AcNo5#fHNsqA}fCwQF zjxj%gF9icyG9ygt#3m<&Stwx(0Y*kocI{_hj0C^}fX9)<3^z1z zrh@AVcu9lJ^;$qzXWJMn^J~SfT~yZ=_X2nh0MSq%3CEbca_6<805EdM&2yQB3(alq zwADXwePzRX!+(7M0R4yWlHUG3OOXAWwamh)?w+1E_b;~m*vQJXn#?{uE9Pcj_uBgM zyOxe^x6;{S;J=h}OAOC+qLPC-ln0000z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;BS}O-RCwB?lS^n5Q51&%J9)I3F(ysTLv5lKL@gDp z8>tXP>c*9#O+g5_apgu3Tw6C5q*w}FyC_tUfW?L4ricVA#)xsDrD>BiwYIT&%uF6L zlbOj}SE)&T74q*6=brEW{P$c!DMcqT|EoFkQVxUCFxQO%n-%K}kRSvPLqT@4d4~MW z!PE=sHGoSE19?fMx}l>UaFZ^(4GsV&n~)s`laV|<9N>m-oMRJ{^U_nZiHv;BDncfm zJRsM2qH7J!={u!fyWmrMIJ^OH0st5Qh(sluq*5pf=Ek2%;}$a+`?MmO*3!$ps#2k< zQu|Miq8ONuxG$_ zv3ktm?tfAjGFpCfdGyQtt+v%={s(ZmoSv$%F;UE=`r>n;SG)V9)8ELTL;V~83!(At TjO(%z00000NkvXXu0mjfqrN87 literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/Help.png b/DTXCreatorプロジェクト/コード/99.リソース/Help.png new file mode 100644 index 0000000000000000000000000000000000000000..a78b1cc1754e1cb86ecda4fff1ef290ab9e4b50b GIT binary patch literal 3403 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 R6~L%q@O1TaS?83{1OU~byfpv- literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/MusicDoc.PNG b/DTXCreatorプロジェクト/コード/99.リソース/MusicDoc.PNG new file mode 100644 index 0000000000000000000000000000000000000000..523e6037531a9cff5a34a3b838cce11e345ff0fa GIT binary patch literal 1456 zcmeHF{WBYO9R3PoQ*L9e;&hzbxz)6FJ9TPI7(%@awIXQaRCS{hi(W{xiOh;p*^PN= zDD^V+a`B#2BIE_}5^3rsI7P^qcuPp)Es-q!FZRPechBd!=eg&n=bnPFP`IhFwJ`v| zG%&z7LdPG!#|Kc|x0P!XbfkxlfcpS4-$tSn2Fczb-T-tGm(b=od5AR+_+tOEe} zTmVjW7Jd_eN6r9jApvl&0N^63iWcqxfIbKdj`Y(7sJ-0y*q>r!(vlLfcjM6yQwZqv zg7mZ})ui?x9{fhgAr(HY&%_kIsHRj`_14z(#K++hkU3ddO&J+A_4UII4TBXGokU_& zSsA&z`%P;rn?!0G8(ZS@mt-=fMx*Vc&9XV~xT6cjzcEY388HQ)G(-c1=9WKS`e0`~Ci0CT*Y)JhxRQy9Xs=gqIMC8W?zV<@YrnqF>mzQL{j6Z1GJ?prVaPvrl%1IendX=uiLCX-Z^&W( zUq(UJ*J`IFzqI>UjH1r!45=7>+oJRS@GF*9mBWr4`&(@VDjOH;5GtN|u_4)vJVO$h zd+Z#B@D}R?%ebdh=oiPh3p{J1Uc}Os*T&^7A?I_UWs*zBK6Jq#>DNgK_iZ!CM#5vl zwm%C(HRjl^L#rl8wVvra`%UIJ83R(29UB81cR&s3CkI`3iqONI_7ftFLhnt;oMXo! zR-p|CwNalqS3)vT*^udJi_4YFxW7!w%fGW29a{~s9aTQ&> zTVnnI6Bh%+-tTj2yA54Mncwd=qV{kqa7pYaOfVs4AU}=#std2MSy+3yYs+TP-4!dA z%=$cWMP*EGxo4?pGhJ_H{7ILnAz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;P)S5VRCwB?lTAoeVHAd+JL(uNB`Hg2RYYPDSX7G& z35m=Sgci9fQi{lkh@cjc5J4#Y5VTW>j21}}LNOsF2(~bapoLMQiKdP^dgspfd+&TL z)X2(OcvgqQ;o+PY9?v<)N-Fnn!``l&&X|z2FL~YbvHVV3*SqBa-qT07F9OYrgY-l{ zHFbx`LohQv$NjqriZ_%I&&wyY7ND~6%B@$6`!S%o>Tn6w)$6IMT0>63TH?7OP1m|U z1+!Dc<8daw^iaEdl)CL53=Rw=e!U-RWv;;MVzcEg(on2<>N#DXCZ z-*IXJJ(oo3`IFn8^#WjxVNZD}QfbcBALn50N%yj&)yp;35=ns?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hVB_jGX#skn7zvLP3fBaiEUz3i3d9|Yzdu8z1-DR^}EjonMx12;?!oOwn?c=p;h z53y|m_1~E)YnU=aM1wCSCDrM_cy;h!NQg_p-n)kjcgI|LVA(}vqxPHE=AV?m)AH&em` ny4udZ`!Myj$^ZX8^BEZw?Iy7=J8=Iw(5Vcbu6{1-oD!M<@=R)V literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/PicDoc.PNG b/DTXCreatorプロジェクト/コード/99.リソース/PicDoc.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1487feef7a9bd00fe91a4ce727734e3ff7d8fcdb GIT binary patch literal 1452 zcmeH_`#0Nn7{@;w+D=bKZ{}J~YgV0Zi_7M=bFk!~b&1Q-H06x4ZpX%nONaDAtMuq7 zt>aczqDUzr5<%qRR+$8K7g91JL>g35kG{m0o zADChFPS6=+4AyuLbC%gV-oqH}q;XmOQ(Zk=8e^oRdzjMoHEX0t7$%EVRm1N1DMyAs4X`qy+Ezes!$=sO+`s@0p z<`(uuV?jF4Ff-i3!RSlk!Oa<%hMqU!r^cj3t6}?%$lLSK4eaH!2?K27M z)^7<8TIid*MJkMqT&%Hk@LMW(k7kAcv*T0bvgi_Idv^2Uh0|2#eByQ{DCw z?}s0-HsFMR1*yW|$xmfP)r-hGSgUo7v&zkSspWjhb&DRSX}z|eufd~+N*`y4K8HL0 z5)&tbrC5`BbD72*?W&h;%uWKz3Y9<&e|06p9m$DjCg;x_LmfVe$dx^SQMs`1jU;gw zed~_892YbV${mm4vCQ0#vh1|GH%bre=_^$~GEEchABGtUu{mvS*=J-on`^CSga7nE jF$tkj<^^l4)QCJ5VAW@4aGzJBKK`daG6+HRiN5zQ-8ohC literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/PointerHS.png b/DTXCreatorプロジェクト/コード/99.リソース/PointerHS.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1e455c451ec43f2451a73f981f4ac9e80ce481 GIT binary patch literal 541 zcmV+&0^z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-lSxEDRCwB?lEF(Qk-YuKFTTcJmYgHF$R$dMUfMos0~SO8#}?#7PbHA*C#3vK#%;06}nM z*nP2+^vHFTQacYbi^-M%Ap#7bLxWTyfz({?xx|CJ!$_%0x9?9iIf)$w2&B|#ZBSu| z(jgNwFZf!i5R1idYs{fQb!r4(2zDz! zcsjd8yJPe1=P$-bhp1Nnyoq!~Aq3gw0>1B$1JkdIE?u2n?0FukM>AI=9dUDg&id%C zZviz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-5J^NqRCwCdletktK@dcrR1%)ZKtT`(nJ5?vObCDo zAOcds5heX=&)J>%i;ICILk2~A?Y!!qnqIWlxJFB^)ZYVEKh4A2+{_F$rB*|$Qfo!c zP*vu+xu@Os_9Vc}xW8M{7Hg)s!i5`(fhdeYd3<@_u-l$apr))>YlZ;FsS$Ex@H1jY z9QI_%=PT4|h^`s@%oG~EuZ*D)k}!21$@%;dwJITklZML;pBo`nT&V27I&!|4pyFi4 zN62D~-sqh$P7&uLlI1)=&F}&)8=Vte6h`L>!Bb17lyU)}%IFIH;gkN5IQEXd@5m{W zqDNKF1LnE8=hu%-DTS00F+^evq?izqUmt1l|Ht$_09nM~YeKRm(EtDd07*qoM6N<$ Eg22G13IG5A literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/VideoDoc.PNG b/DTXCreatorプロジェクト/コード/99.リソース/VideoDoc.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c600aa10d3c13a0e16ccd3214c1e9b1e1796048 GIT binary patch literal 1421 zcmeHG=~Gj86#WS;XaH@|ilsmRt7eK&YGHJswS+}TWl4Y_p&iOrNTKb-veLS=A1cmKb*PuCO$IM z4&{gf0NCNef};_9=S}aoLMB=XCnK;gJ32HFbj~>KAmptKYy=j7Zn_PW{5HZ}Q^TSo z0LVWHKv6LO21F_n1CZ+tfFub3zZw7>DD@8sp8;SA@Zqr`h=JWbP9(;eOy*IJ@K#l; zN)Imz*N0}dZzgyf=HE_o&RiCcekPS z`76Vo2GSVeoUY}0k!nR|82FnnlxS9^nzdc+rd+?Vr(4{XQh&Xnhs-B_tV^dgrd%oJ ziZnctYC)`?7b%w{8i^WG7+{;kN(cJfsoPUw^ue?T8@HeCF}U(i122wjDwrd@1qrfE zC)GeQtx2vkz1Bfm2v+GK`^(IunN{ejSqyXQgOn1_#x=i&`7e9KNq?@8nmG4Ym4#JJ zBBf!1x1cn_dK0WQn(TuTguCiBxo$_H$;iyw7E2UrO;-=wV1{*OGX%qC7~Yf1wl>yk ztA86F?DsnDK~77Fk0XAUmXezEjhCnAmApI{hA9+ER#sMge0)GafSa2eq9DQkU;q6C z<_W&G$WOtzU~KHUs9TKB$uWc@96sr5lwcHlru=$KMP1BnNKPcqnLWN8YGL2b#*_zn zl+b>_-YdWOm4&lYM_*e=V?|R~9XY%gcMo@bye6t}r+`YOPV$UR&OX#$hlB8Rp%xx0 z%bv;Vfk@f(#0TAH`7&q!(-qf>ntA+Zf*cNDC*)pktMFD)T_?p1`kE@@>=y!5!;&Pn z!*`(r|7fPU_Py^J-BwSeYO|f*0e?6>qGrm%^-?D5QqG5@tsy3aPGWjMWcOl+W*T@B zMQm*oID%IGAl1r+Zhe1|)-yf2^G8g*H20I)ji|@N2R0|57{5ciFNX()o%CZrotdt^ zgUd&AgxOo?3pg9m_#CAzWP`1&-B_%^&xbIo7=mSlf$S|g7g9@ z+0!L8J#WSdfAlaTJOgt?Y4_J7|Nb4ekaF(fF{j7ZhU6&T`c-f1Fh^TEIz=GcQuJc? zBEuP&I9+|r&Gf0OQ<&nC-}~msgbM=wNuu5mbUYDH;(o+pemmBl8`y4-ZEPuGkqI44 z-=_x%toY9G@t=txaEx4YH+tk$_Y2qe(S42);JMc4pe)Z=onraQ=3_y^i~Uv7(l-Z- M3yBQw3{1NIFASa>9{>OV literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/deleteHS.png b/DTXCreatorプロジェクト/コード/99.リソース/deleteHS.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8fd0cb53c1aa87e87b66f72a6705b5fe3d892c GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>?NMQuI$%1nE06(RxkLR4ipkE zag8Vm&QB{TPb^AhaQATm8lzB_TBKmCXHwX@!lvI6-pJzX3_D&{07NW?v;ul!M_P{(z|>WS0_wvPXdALSLcIZQsy{D}F8 z#3X)GhLivs0b}NmXaBP@&i|KQbwlX&qy&Y3yhrRCq~8DcFaQ0+{$N<2$@?e2cmF$I z@c+O4xo7|X8z`q=GD)wJ_|w1j-#7b!_wVb~f9|iZDf#z*`_u<2e#RG82K4^_cl-2~ zf7?a4|13E4=YR5!yY-KF3MT&lc0c05`+C!5^Z)C*{BTIxKUGqyzr*NHz500r*8OSW zu7L}V-Iu>&`7fTcz-8mdbv%a;iZb#1=h*Eq{qFxZqwD|wYw@_fC~^>Q5q{dckd>ij Wes%M&c)OjT!0>eSb6Mw<&;$S^z@XOv literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/openHS.png b/DTXCreatorプロジェクト/コード/99.リソース/openHS.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc670e2c0dfd658b8e064e6ec5e5ace236bd8aa GIT binary patch literal 743 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 literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/バージョン情報.png b/DTXCreatorプロジェクト/コード/99.リソース/バージョン情報.png new file mode 100644 index 0000000000000000000000000000000000000000..7f50f04fbaa17d463f4496e4c71083caf0b0559e GIT binary patch literal 81622 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 literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/最初から再生.png b/DTXCreatorプロジェクト/コード/99.リソース/最初から再生.png new file mode 100644 index 0000000000000000000000000000000000000000..3799ca9f9e23cbad84c4b43db67e8a70d11d6c71 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx-l>?9`$r_45_%4^yB}3duF{k7e2S}&bQ%UW)To(u3Iqw#_uVt^O+hLoD3IaeCz(- z`#Jtk*Xx=uY)8bOB-?$RKlifKd_@MvmZSsn3np*5Vi8gQ_rE^RW8;56Djvvl@0PwG zV3xziz#`DaxWE2?`j3Cz6Ca*GpI@+VZl})S>HP1_n0Kzc!NbU*Ai`Yt=g0XEUvJm9 z+3&AE__Mxooq>61V%4`#e?=Aqu9UlplXzv(Nc2e4^%WW22*&XZOQ% zho=iWwkf;@niL}b=g;{MA5Yu2#Ro7S`13wq@?K3+!j78n)`$O=&*7PVUTzjgiL0Cs zzXQXl65uz8T(lU{)@LeoxXhb z;M^TSN;6p`}@|-))9$+%Kg`GW11Xlyl)SKfJ4s$8COmQ4h1zfE=Gq2Mh3?u WfqiOe-af#{XYh3Ob6Mw<&;$T}XZDo< literal 0 HcmV?d00001 diff --git a/DTXCreatorプロジェクト/コード/99.リソース/表示形式.png b/DTXCreatorプロジェクト/コード/99.リソース/表示形式.png new file mode 100644 index 0000000000000000000000000000000000000000..29e0cd2d8cf99339acf13e37fd6fdbf1fa8578b5 GIT binary patch literal 760 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;Zb?KzRCwBA{Qv(y10?_;fLK68&+6AGru_cH!0_|; ze}?bB{xf|03B*YBk6#Q7KY((-|NLh-)+@^h5I`(2P2v)w41fOtCI0?r_yd&u1;ji+ zg&>1|g80Ax0WpXTvfv-XnG3gox?~vu0tjxv%NMV~G)TiYpe)Jdj6b&;phGyDU3=g+U(3_ow>G5q=YfdS}hhRY9rFf88l zf#K(m4{(bB0*DC`Xb|T-eDs~+#Ob>XJNMoP8olZ5ngM1#CA8yUU@c7DZ z6t4mV5DT&wOijcXjEr2swt+PKVUuBCak>Lk0E(S|3=+be3|l4#Gkp8<7H$AQ0D%qo z`}Z#cC_VkSa*^Th;|C1?xOf@tvIm;l7NmB9w;8c8s`eftW<0Du63CnTUR z82%|JFbFN%#PAE~|Mwq0Fo-j0GGrLe0&9N%=@WyTsvtvNO)xM;{(u_*5I}GP>;u!t q%1i(O#7Jpw1PCA|1_}W{fB^vKbUu#hA9C3M0000