2025-07-09 21:35:58 -07:00

157 lines
4.6 KiB
C#

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<string> imagesList = new List<string>();
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();
}
}
}