using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Projector { public partial class FrmPreview : Form { private List imagesList = new List(); private int index = 0; private FourChannelToStereoSampleProvider? _mixer = null; private FrmProjector frmProjector = new FrmProjector(); private bool secondScreenEnabled = false; public FrmPreview() { InitializeComponent(); Screen[] screens = Screen.AllScreens; if (screens.Length > 1) { secondScreenEnabled = true; Screen targetScreen = screens[1]; frmProjector.StartPosition = FormStartPosition.Manual; frmProjector.Location = targetScreen.Bounds.Location; } } public void SetImages(string[] images, FourChannelToStereoSampleProvider mixer) { if (secondScreenEnabled && !frmProjector.Visible) { frmProjector.Show(); } _mixer = mixer; mixer.VoiceVolume = TkVoice.Value / 10f; imagesList.Clear(); imagesList.AddRange(images); index = 0; ShowImage(index); } public void Clear() { imagesList.Clear(); PbShow.ImageLocation = null; } private void ShowImage(int index) { if (index >= 0 && index < imagesList.Count) { frmProjector.SetImage(imagesList[index]); PbShow.ImageLocation = imagesList[index]; this.Text = $"Preview - {System.IO.Path.GetFileName(imagesList[index])}"; if (index + 1 < imagesList.Count) { TsbNext.Image = Image.FromFile(imagesList[index + 1]); } else { TsbNext.Image = null; // No next image } if (index > 0) { TsbPrevious.Image = Image.FromFile(imagesList[index - 1]); } else { TsbPrevious.Image = null; // No previous image } } else if (index == imagesList.Count) { frmProjector.SetImage(null); PbShow.ImageLocation = null; this.Text = $"Preview - End"; TsbNext.Image = null; TsbPrevious.Image = Image.FromFile(imagesList[index - 1]); } else { frmProjector.SetImage(null); PbShow.ImageLocation = null; TsbNext.Image = null; TsbPrevious.Image = null; } } private void TsbPrevious_Click(object sender, EventArgs e) { if (index > 0) { index--; ShowImage(index); } } private void TsbNext_Click(object sender, EventArgs e) { if (index < imagesList.Count) { index++; ShowImage(index); } } private void FrmPreview_Load(object sender, EventArgs e) { } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Left) { // Handle Left arrow key press TsbPrevious_Click(sender: null, e: null); // Simulate click on Previous button return true; // Indicate that the key press has been handled and prevent default behavior } else if (keyData == Keys.Right) { // Handle Right arrow key press TsbNext_Click(sender: null, e: null); // Simulate click on Next button return true; } else if (keyData == Keys.Escape) { // Close the form when Escape is pressed this.Close(); } return base.ProcessCmdKey(ref msg, keyData); // Allow default processing if not an arrow key } private void TkVoice_Scroll(object sender, EventArgs e) { _mixer.VoiceVolume = TkVoice.Value / 10f; } private void FrmPreview_FormClosed(object sender, FormClosedEventArgs e) { frmProjector.SetImage(null); //frmProjector.Close(); } } }