Option Strict Off
Option Explicit On
Imports System.Windows.Forms
'------------------------------------ 2023/11/09 ------------------------------------
Public Class frmDlgSoundKana

#Region "宣言"
    Private mMe_gmDlgID As Integer = 0
    Private mLoading As Boolean = False
    Private mサウンドフォルダ前回使用 As String = ""
    Private mpサウンドあたり As String = ""
    Private mpサウンドハズレ As String = ""
    Private mpサウンドを鳴らす As Boolean
    '**************************************************************************************************************************************
    Private WithEvents イベントgAppEventMaker As 五clsEventMaker
    '**************************************************************************************************************************************
    Event ダイアログの初期化をしてください(ByRef wIsOK As Boolean, ByRef wMe_gmDlgID As Integer)
    Event 現在のプロパティデーターをください(ByRef wサウンドを鳴らす As Boolean, ByRef wサウンドを鳴らすDEF As Boolean, ByRef wサウンドあたり As String, ByRef wサウンドあたりDEF As String, ByRef wサウンドハズレ As String, ByRef wサウンドハズレDEF As String)
    Event 現在のサウンドファイルリストをください(ByRef wFileAry() As String)
    Event 新しいプロパティデーターを設定しなさい(ByVal r設定code_000 As String, ByVal rサウンドを鳴らす As Boolean, ByVal rサウンドあたり As String, ByVal rサウンドハズレ As String)
    Event 新しいサウンドファイルリストを設定しなさい(ByRef rFileAry() As String)
    Event 他のウインドウが表示あるいは非表示になりました(ByVal rMe_gmDlgID As Integer, ByVal r表示変更ウインドウID As Integer, ByVal r表示True消去False As Boolean, ByRef wRet_rMe_gmDlgIDウインドウを消去しなさい As Boolean)
#End Region

#Region "AppIniFileOp"
    Private Function zzAppIniFileOp(ByVal Load_0_QueryUnload_1_Resize_2_DoIniSave_3 As Long) As Boolean
        '読出し時に　INI ファイルが存在しない場合は　False　を返します。
        If gggAppIniFile Is Nothing Then Return False
        Return gggAppIniFile.aaAppIniFileOp_フォームサイズと位置だけ_共通処理(Load_0_QueryUnload_1_Resize_2_DoIniSave_3, Me, "95781")
    End Function
#End Region

#Region "フォームイベント"

    Private Sub mnu閉じる_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnu閉じる.Click
        Me.Close()
    End Sub
    Private Sub frmDlgSoundKana_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        RaiseEvent 新しいプロパティデーターを設定しなさい("111", CBool(chk音を鳴らす.Checked), CStr(lblあたり.Text), CStr(lblハズレ.Text))
        Dim rwFileAry() As String = {""}
        gggint = Ⅹリストボックスから_文配列にリストを入れる(lst音, rwFileAry)
        RaiseEvent 新しいサウンドファイルリストを設定しなさい(rwFileAry)
        If Me.Visible Then gggint = zzAppIniFileOp(2)
        gggint = zzAppIniFileOp(1)
        If イベントgAppEventMaker Is Nothing Then
            イベントgAppEventMaker = gAppEventMaker
        End If
        gggbol = イベントgAppEventMaker.MakeEventフォームの表示消去(mMe_gmDlgID, False)
    End Sub
    Private Sub frmDlgSoundKana_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
        qqqqq("frmDlgSoundKana_Disposed")
        Call gmアプリ固有クラス.aaサウンド設定Dlg_Load_1_Disposed_2(2, Nothing)
    End Sub
    Private Sub frmDlgSoundKana_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        '---------------------------------------------------
        イベントgAppEventMaker = gAppEventMaker
        '---------------------------------------------------
        mLoading = True
        Dim wIsOK As Boolean = False
        RaiseEvent ダイアログの初期化をしてください(wIsOK, mMe_gmDlgID)
        If Not wIsOK Then GoTo EXIT_ON_ERROR
        '---------------------------------------------------
        Call zzコントロールすべてにデーター設定()
        Dim bbb As Boolean, ss1 As String = "", ss2 As String = ""
        RaiseEvent 現在のプロパティデーターをください(mpサウンドを鳴らす, bbb, mpサウンドあたり, ss1, mpサウンドハズレ, ss2)
        '---------------------------------------------------
        If lst音.Items.Count > 0 Then lst音.SelectedIndex = 0 Else lst音.SelectedIndex = -1
        mLoading = False
        gggbol = zzEnabledSet()
        '---------------------------------------------------
        gggbol = ⅩForm_OwnerSet_IconSet_TextSet(Me, "サウンド設定", Me.Owner)
        If Not zzAppIniFileOp(0) Then gggint = ⅩFormMove(gcoフォームをスクリーン中心に移動, Me) 'INI ファイルが存在しない場合に、このフォームを画面のセンターに表示するコード。
        gggbol = イベントgAppEventMaker.MakeEventフォームの表示消去(mMe_gmDlgID, True)
        lst音.AllowDrop = True
        Exit Sub
        '---------------------------------------------------
EXIT_ON_ERROR:
        Call ⅩMsgBox_OK_情報("frmDlgGameCardSize_Load() 内でエラーが発生しました。")
        Me.Close()
    End Sub

#End Region

#Region "コントロール　イベント"
    Private Sub lst音_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lst音.DragOver
        gggbol = ⅩOLEDragDropファイルイベント_Drag_Is_指定EXT_IN(e, "WAV")
    End Sub
    Private Sub lst音_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lst音.DragDrop
        Dim wFolders_0_Ubound() As String = {""}, wFiles() As String = {""} : Dim wDrpX_inControl, wDrpY_inControl As Integer
        If ⅩOLEDragDropファイルイベント(3, lst音, e, wFolders_0_Ubound, wFiles, wDrpX_inControl, wDrpY_inControl) Then
            'Dim a As Integer
            'qqqqq("wFolders_0_Ubound") : For a = 0 To UBound(wFolders_0_Ubound) : qqqqq(wFolders_0_Ubound(a)) : Next
            'qqqqq("wFiles_0_Ubound") : For a = 0 To UBound(wFiles) : qqqqq(wFiles(a)) : Next
            Dim ff As String = zzAdd_Wav_Files_Into_lst音(wFiles)
        End If
    End Sub

    Private Sub lst音_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lst音.SelectedIndexChanged
        If mLoading Then Return
        gggbol = zzEnabledSet()
    End Sub
    Private Sub lst音_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lst音.DoubleClick
        If mLoading Then Return
        If lst音.SelectedItem Is Nothing Then Return
        Call btnテスト演奏_Click(Nothing, Nothing)
    End Sub

    Private Function zzAdd_Wav_Files_Into_lst音(ByVal rFullNames() As String) As String
        Dim a As Integer : Dim ff As String = "", Retff As String = "" : Dim c As Integer = 0
        For a = 0 To UBound(rFullNames)
            If c >= 100 Then
                Call ⅩMsgBox_OK_情報("一度に追加できるファイル数は、１００枚までです。")
                Exit For
            End If
            ff = rFullNames(a)
            If Ⅹファイルは存在(ff) Then
                Dim ext As String = LCase(Ⅹファイル拡張子(ff, True))
                If ext = ".wav" Then
                    If -1 = lst音.FindString(ff) Then
                        lst音.Items.Add(ff)
                        Retff = ff
                        c = c + 1
                    End If
                End If
            End If
        Next
        If Retff <> "" Then
            lst音.SelectedIndex = lst音.FindString(Retff)
            mサウンドフォルダ前回使用 = Ⅹフルパス名からフォルダパス名あるいは親フォルダパス名を得る(Retff)
            'gggbol = zzSaveData()
            gggbol = zzEnabledSet()
            Return Retff
        Else
            Call ⅩMsgBox_OK_情報("追加できる  .WAV  ファイルはありません")
        End If
        Return ""
    End Function
    Private Sub btn音_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn音.Click
        '新規にファイルを開く
        Dim FD As New 五clsFileDlgPathMenu : Dim wPath As String = "" : Dim wFullNames() As String = {""}
        If FD.ファイルダイアログ表示してファイルを選択(2, "複数の　サウンドファイルを選択", "サウンドファイル (*.wav)|*.wav", mサウンドフォルダ前回使用, wPath, wFullNames) Then
            Dim ff As String = zzAdd_Wav_Files_Into_lst音(wFullNames)
        End If
    End Sub

    Private Sub btnテスト演奏_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnテスト演奏.Click
        If mLoading Then Return
        If lst音.SelectedItem Is Nothing Then Return
        Call zzテスト演奏_COM(lst音.SelectedItem.ToString)
    End Sub

    Private Sub btnリスト削除_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnリスト削除.Click
        If mLoading Then Return
        If lst音.SelectedItem Is Nothing Then Return
        Try
            If Not zz現在使用されている(lst音.SelectedItem.ToString) Then
                Dim a As Integer
                a = lst音.SelectedIndex()
                lst音.Items.RemoveAt(a)
                a = Math.Min(lst音.Items.Count - 1, a)
                lst音.SelectedIndex = a
            End If
            gggbol = zzEnabledSet()
        Catch
        End Try
    End Sub

    Private Sub btnあたり音設定_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnあたり音設定.Click
        gggbol = zzあたり音設定_ハズレ音設定_COM(lblあたり)
    End Sub
    Private Sub btnハズレ音設定_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnハズレ音設定.Click
        gggbol = zzあたり音設定_ハズレ音設定_COM(lblハズレ)
    End Sub
    Private Function zzあたり音設定_ハズレ音設定_COM(ByVal lbl As Label) As Boolean
        If mLoading Then Return False
        If lst音.SelectedItem Is Nothing Then Return False
        Dim ff As String = lst音.SelectedItem.ToString
        If Ⅹファイルは存在(ff) Then
            lbl.Text = ff
        Else
            Call ⅩMsgBox_OK_注意(ff & vbCrLf & "このファイルは、現在のシステムには存在しません")
        End If
        Dim r設定code_000 As String = IIf(lbl Is lblあたり, "010", "001")
        RaiseEvent 新しいプロパティデーターを設定しなさい(r設定code_000, True, ff, ff)
        Return zzEnabledSet()
    End Function
    Private Sub lblあたり_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblあたり.DoubleClick
        Dim a As Integer = lst音.FindString(lblあたり.Text)
        If a >= 0 Then lst音.SelectedIndex = a
        Call zzテスト演奏_COM(lblあたり.Text)
    End Sub
    Private Sub lblハズレ_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblハズレ.DoubleClick
        Dim a As Integer = lst音.FindString(lblハズレ.Text)
        If a >= 0 Then lst音.SelectedIndex = a
        Call zzテスト演奏_COM(lblハズレ.Text)
    End Sub
    Private Sub chk音を鳴らす_CheckStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles chk音を鳴らす.CheckStateChanged
        If mLoading Then Exit Sub
        Dim rサウンドを鳴らす As Boolean = chk音を鳴らす.Checked : Dim rサウンドあたり As String = "", rサウンドハズレ As String = ""
        RaiseEvent 新しいプロパティデーターを設定しなさい("100", rサウンドを鳴らす, rサウンドあたり, rサウンドハズレ)
        gggbol = zzEnabledSet()
    End Sub

#End Region

#Region "メニューイベント"

    Private Sub mnuすべて元に戻す_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuすべて元に戻す.Click
        gggbol = zzResEtData(True)
    End Sub
    Private Sub mnu規定値にリセット_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnu規定値にリセット.Click
        gggbol = zzResEtData(False)
    End Sub

#End Region

#Region "ローカルヘルパー"

    Private Function zzテスト演奏_COM(ByVal ff As String) As Boolean
        If mLoading Then Return False
        If lst音.SelectedItem Is Nothing Then Return False
        Try
            Dim b As Boolean = False
            mnuすべて元に戻す.Enabled = b
            mnu規定値にリセット.Enabled = b
            btnテスト演奏.Enabled = b : btn音.Enabled = b : btnリスト削除.Enabled = b : lst音.Enabled = b : Me.Cursor = Cursors.WaitCursor
            chk音を鳴らす.Enabled = b : btnあたり音設定.Enabled = b : btnハズレ音設定.Enabled = b
            Me.Refresh()
            If Ⅹファイルは存在(ff) Then
                My.Computer.Audio.Play(ff, AudioPlayMode.WaitToComplete)
            Else
                MsgBox(ff + gggCR2 + "このファイルは存在しません")
            End If
            b = True
            btnテスト演奏.Enabled = b : btn音.Enabled = b : btnリスト削除.Enabled = b : lst音.Enabled = b : Me.Cursor = Cursors.Default
            chk音を鳴らす.Enabled = b : btnあたり音設定.Enabled = b : btnハズレ音設定.Enabled = b
        Catch
        End Try
        Return zzEnabledSet()
    End Function

    Private Function zz現在使用されている(ByVal ff As String) As Boolean
        Dim fff As String = UCase(ff)
        Return ((UCase(lblあたり.Text) = fff) Or (UCase(lblハズレ.Text) = fff))
    End Function

    Private Function zzコントロールすべてにデーター設定() As Boolean
        Dim wサウンドを鳴らす As Boolean, wサウンドあたり As String = "", wサウンドハズレ As String = "", bb1 As Boolean, ss1 As String = "", ss2 As String = ""
        RaiseEvent 現在のプロパティデーターをください(wサウンドを鳴らす, bb1, wサウンドあたり, ss1, wサウンドハズレ, ss2)
        chk音を鳴らす.Checked = wサウンドを鳴らす
        lblあたり.Text = wサウンドあたり
        lblハズレ.Text = wサウンドハズレ
        Dim wFileAry() As String = {""}
        RaiseEvent 現在のサウンドファイルリストをください(wFileAry)
        gggint = Ⅹリストボックスに_文配列からリストを入れる(lst音, wFileAry, True)
        Return True
    End Function

    Private Function zzResEtData(ByVal 元に戻す_True_規定値にリセット_False As Boolean) As Boolean
        Dim bol As Boolean = 元に戻す_True_規定値にリセット_False
        mLoading = True
        Dim bb1 As Boolean, wサウンドを鳴らすDEF As Boolean, ss1 As String = "", wサウンドあたりDEF As String = "", ss2 As String = "", wサウンドハズレDEF As String = ""
        RaiseEvent 現在のプロパティデーターをください(bb1, wサウンドを鳴らすDEF, ss1, wサウンドあたりDEF, ss2, wサウンドハズレDEF)
        RaiseEvent 新しいプロパティデーターを設定しなさい("111", IIf(bol, mpサウンドを鳴らす, wサウンドを鳴らすDEF), IIf(bol, mpサウンドあたり, wサウンドあたりDEF), IIf(bol, mpサウンドハズレ, wサウンドハズレDEF))
        gggbol = zzコントロールすべてにデーター設定()
        gggbol = zzEnabledSet()
        mLoading = False
    End Function

    Private Function zzEnabledSet() As Boolean
        Dim wサウンドを鳴らす As Boolean, wサウンドを鳴らすDEF As Boolean, wサウンドあたり As String = "", wサウンドあたりDEF As String = "", wサウンドハズレ As String = "", wサウンドハズレDEF As String = ""
        RaiseEvent 現在のプロパティデーターをください(wサウンドを鳴らす, wサウンドを鳴らすDEF, wサウンドあたり, wサウンドあたりDEF, wサウンドハズレ, wサウンドハズレDEF)
        mnuすべて元に戻す.Enabled = Not (mpサウンドを鳴らす = wサウンドを鳴らす And mpサウンドあたり = wサウンドあたり And mpサウンドハズレ = wサウンドハズレ)
        mnu規定値にリセット.Enabled = Not (wサウンドを鳴らす = wサウンドを鳴らすDEF And wサウンドあたり = wサウンドあたりDEF And wサウンドハズレ = wサウンドハズレDEF)
        If lst音.SelectedItem IsNot Nothing Then
            Dim fff As String = UCase(lst音.SelectedItem.ToString)
            Dim eee As Boolean = Not zz現在使用されている(fff)
            btnリスト削除.Enabled = eee And (fff <> UCase(wサウンドあたりDEF)) And (fff <> UCase(wサウンドハズレDEF))
            btnあたり音設定.Enabled = Not (UCase(lblあたり.Text) = fff)
            btnハズレ音設定.Enabled = Not (UCase(lblハズレ.Text) = fff)
            btnテスト演奏.Enabled = True
        Else
            btnリスト削除.Enabled = False
            btnあたり音設定.Enabled = False
            btnハズレ音設定.Enabled = False
            btnテスト演奏.Enabled = False
        End If
        Return True
    End Function

#End Region

#Region "イベントfrom gAppEventMaker"

    Private Sub イベントgAppEventMaker_カードショー開始と停止(ByVal r開始true停止false As Boolean) Handles イベントgAppEventMaker.カードショー開始と停止
        If Me.Visible Then
            If r開始true停止false Then
                Call mnu閉じる_Click(Nothing, Nothing)
            End If
        End If
    End Sub
    Private Sub イベントgAppEventMaker_スイスイとユラユラ開始と停止() Handles イベントgAppEventMaker.スイスイとユラユラ開始と停止
        If ppスイスイフラフラ_いずれかあるいは両方_を実行中 And Me.Visible Then Call mnu閉じる_Click(Nothing, Nothing)
    End Sub
    Private Sub イベントgAppEventMaker_フォームの表示と消去(ByVal rフォーム名ID As Integer, ByVal r表示True消去False As Boolean) Handles イベントgAppEventMaker.フォームの表示と消去
        Dim wRet_rMe_gmDlgIDウインドウを消去しなさい As Boolean
        RaiseEvent 他のウインドウが表示あるいは非表示になりました(mMe_gmDlgID, rフォーム名ID, r表示True消去False, wRet_rMe_gmDlgIDウインドウを消去しなさい)
        If wRet_rMe_gmDlgIDウインドウを消去しなさい Then Call mnu閉じる_Click(Nothing, Nothing)
    End Sub
    Private Sub イベントgAppEventMaker_サウンドファイルの実行を開始します(ByVal rサウンドファイル As String) Handles イベントgAppEventMaker.サウンドファイルの実行を開始します
        If Me.Visible = False Then Return
        mLoading = True
        lst音.SelectedIndex = lst音.FindString(rサウンドファイル)
        mLoading = False
    End Sub

#End Region


End Class