Files
staxrip/Source/Forms/StreamDemuxForm.vb

211 lines
7.7 KiB
VB.net

Imports System.Globalization
Imports StaxRip.UI
Public Class StreamDemuxForm
Private _audioStreams As New List(Of AudioStream)
Private _subtitles As New List(Of Subtitle)
ReadOnly Property AudioStreams As List(Of AudioStream)
Get
Return lvAudio.Items.OfType(Of ListViewItem).Where(Function(x) x.Checked).Select(Function(x) DirectCast(x.Tag, AudioStream)).ToList()
End Get
End Property
ReadOnly Property Subtitles As List(Of Subtitle)
Get
Return lvSubtitles.Items.OfType(Of ListViewItem).Where(Function(x) x.Checked).Select(Function(x) DirectCast(x.Tag, Subtitle)).ToList()
End Get
End Property
Sub New(sourceFile As String, attachments As List(Of Attachment))
InitializeComponent()
ScaleClientSize(42, 30)
Owner = g.MainForm
StartPosition = FormStartPosition.CenterParent
lvAudio.View = View.Details
lvAudio.Columns.Add("")
lvAudio.CheckBoxes = True
lvAudio.HeaderStyle = ColumnHeaderStyle.None
lvAudio.ShowItemToolTips = True
lvAudio.FullRowSelect = True
lvAudio.MultiSelect = False
lvAudio.HideFocusRectange()
lvAudio.AutoCheckMode = AutoCheckMode.SingleClick
lvAudio.OwnerDraw = False
lvSubtitles.View = View.SmallIcon
lvSubtitles.CheckBoxes = True
lvSubtitles.HeaderStyle = ColumnHeaderStyle.None
lvSubtitles.AutoCheckMode = AutoCheckMode.SingleClick
lvSubtitles.OwnerDraw = False
lvAttachments.View = View.SmallIcon
lvAttachments.CheckBoxes = True
lvAttachments.HeaderStyle = ColumnHeaderStyle.None
lvAttachments.AutoCheckMode = AutoCheckMode.SingleClick
lvAttachments.OwnerDraw = False
AddHandler Load, Sub() lvAudio.Columns(0).Width = lvAudio.ClientSize.Width
_audioStreams = MediaInfo.GetAudioStreams(sourceFile)
_subtitles = MediaInfo.GetSubtitles(sourceFile)
bnAudioEnglish.Enabled = _audioStreams.Where(Function(stream) stream.Language.TwoLetterCode = "en").Count > 0
bnAudioNative.Visible = CultureInfo.CurrentCulture.TwoLetterISOLanguageName <> "en"
bnAudioNative.Text = CultureInfo.CurrentCulture.NeutralCulture.EnglishName
bnAudioNative.Enabled = _audioStreams.Where(Function(stream) stream.Language.TwoLetterCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName).Count > 0
bnSubtitleEnglish.Enabled = _subtitles.Where(Function(stream) stream.Language.TwoLetterCode = "en").Count > 0
bnSubtitleNative.Visible = CultureInfo.CurrentCulture.TwoLetterISOLanguageName <> "en"
bnSubtitleNative.Text = CultureInfo.CurrentCulture.NeutralCulture.EnglishName
bnSubtitleNative.Enabled = _subtitles.Where(Function(stream) stream.Language.TwoLetterCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName).Count > 0
For Each audioStream In _audioStreams
Dim item = lvAudio.Items.Add(audioStream.Name)
item.Tag = audioStream
item.Checked = audioStream.Enabled
Next
For Each subtitle In _subtitles
Dim text = subtitle.Language.ToString + " (" + subtitle.TypeName + ")" + If(subtitle.Title <> "", " - " + subtitle.Title, "")
Dim item = lvSubtitles.Items.Add(text)
item.Tag = subtitle
item.Checked = subtitle.Enabled
Next
If attachments IsNot Nothing Then
For Each attachment In attachments
Dim item = lvAttachments.Items.Add(attachment.Name)
item.Tag = attachment
item.Checked = attachment.Enabled
Next
End If
cbDemuxChapters.Checked = p.DemuxChapters
cbDemuxVideo.Checked = p.DemuxVideo
ApplyTheme()
AddHandler ThemeManager.CurrentThemeChanged, AddressOf OnThemeChanged
End Sub
Protected Overrides Sub Dispose(disposing As Boolean)
RemoveHandler ThemeManager.CurrentThemeChanged, AddressOf OnThemeChanged
components?.Dispose()
MyBase.Dispose(disposing)
End Sub
Sub OnThemeChanged(theme As Theme)
ApplyTheme(theme)
End Sub
Sub ApplyTheme()
ApplyTheme(ThemeManager.CurrentTheme)
End Sub
Sub ApplyTheme(theme As Theme)
If DesignHelp.IsDesignMode Then
Exit Sub
End If
BackColor = theme.General.BackColor
End Sub
Sub lvAudio_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lvAudio.ItemChecked
If Visible Then
DirectCast(e.Item.Tag, AudioStream).Enabled = e.Item.Checked
End If
End Sub
Sub lvSubtitles_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lvSubtitles.ItemChecked
If Visible Then
DirectCast(e.Item.Tag, Subtitle).Enabled = e.Item.Checked
End If
End Sub
Sub lvAttachments_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lvAttachments.ItemChecked
If Visible Then
DirectCast(e.Item.Tag, Attachment).Enabled = e.Item.Checked
End If
End Sub
Sub bnAudioAll_Click(sender As Object, e As EventArgs) Handles bnAudioAll.Click
For Each item As ListViewItem In lvAudio.Items
item.Checked = True
Next
End Sub
Sub bnAudioNone_Click(sender As Object, e As EventArgs) Handles bnAudioNone.Click
For Each item As ListViewItem In lvAudio.Items
item.Checked = False
Next
End Sub
Sub bnAudioEnglish_Click(sender As Object, e As EventArgs) Handles bnAudioEnglish.Click
For Each item As ListViewItem In lvAudio.Items
Dim stream = DirectCast(item.Tag, AudioStream)
If stream.Language.TwoLetterCode = "en" Then
item.Checked = True
End If
Next
End Sub
Sub bnAudioNative_Click(sender As Object, e As EventArgs) Handles bnAudioNative.Click
For Each item As ListViewItem In lvAudio.Items
Dim stream = DirectCast(item.Tag, AudioStream)
If stream.Language.TwoLetterCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName Then
item.Checked = True
End If
Next
End Sub
Sub bnSubtitleAll_Click(sender As Object, e As EventArgs) Handles bnSubtitleAll.Click
For Each item As ListViewItem In lvSubtitles.Items
item.Checked = True
Next
End Sub
Sub bnSubtitleNone_Click(sender As Object, e As EventArgs) Handles bnSubtitleNone.Click
For Each item As ListViewItem In lvSubtitles.Items
item.Checked = False
Next
End Sub
Sub bnSubtitleEnglish_Click(sender As Object, e As EventArgs) Handles bnSubtitleEnglish.Click
For Each item As ListViewItem In lvSubtitles.Items
Dim stream = DirectCast(item.Tag, Subtitle)
If stream.Language.TwoLetterCode = "en" Then
item.Checked = True
End If
Next
End Sub
Sub bnSubtitleNative_Click(sender As Object, e As EventArgs) Handles bnSubtitleNative.Click
For Each item As ListViewItem In lvSubtitles.Items
Dim stream = DirectCast(item.Tag, Subtitle)
If stream.Language.TwoLetterCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName Then
item.Checked = True
End If
Next
End Sub
Sub bnAllAttachments_Click(sender As Object, e As EventArgs) Handles bnAllAttachments.Click
For Each item As ListViewItem In lvAttachments.Items
item.Checked = True
Next
End Sub
Sub bnNoneAttachments_Click(sender As Object, e As EventArgs) Handles bnNoneAttachments.Click
For Each item As ListViewItem In lvAttachments.Items
item.Checked = False
Next
End Sub
End Class