157 lines
4.6 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|