338 lines
14 KiB
C#
338 lines
14 KiB
C#
|
using System;
|
||
|
using System.IO;
|
||
|
using System.Windows.Forms;
|
||
|
using System.Drawing;
|
||
|
|
||
|
namespace DualScreenDemo
|
||
|
{
|
||
|
public partial class PrimaryForm
|
||
|
{
|
||
|
private Button btnTurnOn;
|
||
|
private Button btnTurnOff;
|
||
|
private Button btnBright;
|
||
|
private Button btnRomantic;
|
||
|
private Button btnAuto;
|
||
|
private Button btnColorTuning;
|
||
|
private Button btnSoft;
|
||
|
private Button btnDynamic;
|
||
|
private Button btnDeskLamp;
|
||
|
private Button btnStageLight;
|
||
|
private Button btnShelfLight;
|
||
|
private Button btnWallLight;
|
||
|
private Button btnBrightnessUp1;
|
||
|
private Button btnBrightnessDown1;
|
||
|
private Button btnBrightnessUp2;
|
||
|
private Button btnBrightnessDown2;
|
||
|
|
||
|
private PictureBox pictureBoxToggleLight;
|
||
|
|
||
|
private void InitializeButtonsForPictureBoxToggleLight()
|
||
|
{
|
||
|
btnTurnOn = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnTurnOn, 604, 410, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnTurnOn.Click += (sender, e) =>
|
||
|
{
|
||
|
|
||
|
if (SerialPortManager.mySerialPort != null && SerialPortManager.mySerialPort.IsOpen)
|
||
|
{
|
||
|
|
||
|
byte[] commandBytes = new byte[] { 0xA2, 0xDB, 0xA4 };
|
||
|
|
||
|
|
||
|
SerialPortManager.mySerialPort.Write(commandBytes, 0, commandBytes.Length);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("Serial port is not open. Cannot send track correction command.");
|
||
|
}
|
||
|
};
|
||
|
btnTurnOff = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnTurnOff, 753, 411, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnTurnOff.Click += (sender, e) =>
|
||
|
{
|
||
|
SendCommandThroughSerialPort("a2 dc a4");
|
||
|
};
|
||
|
|
||
|
btnBright = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnBright, 901, 411, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnBright.Click += (sender, e) =>
|
||
|
{
|
||
|
|
||
|
if (SerialPortManager.mySerialPort != null && SerialPortManager.mySerialPort.IsOpen)
|
||
|
{
|
||
|
|
||
|
byte[] commandBytes = new byte[] { 0xA2, 0xD5, 0xA4 };
|
||
|
|
||
|
|
||
|
SerialPortManager.mySerialPort.Write(commandBytes, 0, commandBytes.Length);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageBox.Show("Serial port is not open. Cannot send track correction command.");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
btnRomantic = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnRomantic, 1049, 411, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 d7 a4"));
|
||
|
|
||
|
btnAuto = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnAuto, 1049, 494, 123, 63,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnColorTuning = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnColorTuning, 1049, 579, 123, 63,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 75 a4"));
|
||
|
|
||
|
btnSoft = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnSoft, 901, 495, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 d6 a4"));
|
||
|
|
||
|
btnDynamic = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnDynamic, 901, 579, 123, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 d8 a4"));
|
||
|
|
||
|
btnDeskLamp = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnDeskLamp, 1048, 662, 124, 64,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 fb a4"));
|
||
|
|
||
|
btnStageLight = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnStageLight, 900, 662, 124, 64,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 fa a4"));
|
||
|
|
||
|
btnShelfLight = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnShelfLight, 752, 662, 124, 64,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 f9 a4"));
|
||
|
|
||
|
btnWallLight = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnWallLight, 604, 662, 124, 64,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
(sender, e) => SendCommandThroughSerialPort("a2 f8 a4"));
|
||
|
|
||
|
btnBrightnessUp1 = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnBrightnessUp1, 603, 495, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
|
||
|
btnBrightnessUp1.MouseDown += (sender, e) =>
|
||
|
{
|
||
|
lightControlTimer.Tag = "a2 d9 a4";
|
||
|
lightControlTimer.Start();
|
||
|
};
|
||
|
|
||
|
|
||
|
btnBrightnessUp1.MouseUp += (sender, e) =>
|
||
|
{
|
||
|
lightControlTimer.Stop();
|
||
|
};
|
||
|
btnBrightnessDown1 = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnBrightnessDown1, 605, 579, 122, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnBrightnessDown1.MouseDown += (sender, e) => { lightControlTimer.Tag = "a2 da a4"; lightControlTimer.Start(); };
|
||
|
btnBrightnessDown1.MouseUp += (sender, e) => { lightControlTimer.Stop(); };
|
||
|
btnBrightnessUp2 = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnBrightnessUp2, 753, 495, 123, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnBrightnessUp2.MouseDown += (sender, e) => { lightControlTimer.Tag = "a2 f6 a4"; lightControlTimer.Start(); };
|
||
|
btnBrightnessUp2.MouseUp += (sender, e) => { lightControlTimer.Stop(); };
|
||
|
btnBrightnessDown2 = new Button{ Text = "" };
|
||
|
|
||
|
|
||
|
ConfigureButton(btnBrightnessDown2, 753, 579, 123, 62,
|
||
|
resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl, resizedNormalStateImageForLightControl,
|
||
|
null);
|
||
|
btnBrightnessDown2.MouseDown += (sender, e) => { lightControlTimer.Tag = "a2 f7 a4"; lightControlTimer.Start(); };
|
||
|
btnBrightnessDown2.MouseUp += (sender, e) => { lightControlTimer.Stop(); };
|
||
|
|
||
|
|
||
|
this.Controls.Add(btnTurnOn);
|
||
|
this.Controls.Add(btnTurnOff);
|
||
|
this.Controls.Add(btnBright);
|
||
|
this.Controls.Add(btnRomantic);
|
||
|
this.Controls.Add(btnAuto);
|
||
|
this.Controls.Add(btnColorTuning);
|
||
|
this.Controls.Add(btnSoft);
|
||
|
this.Controls.Add(btnDynamic);
|
||
|
this.Controls.Add(btnDeskLamp);
|
||
|
this.Controls.Add(btnStageLight);
|
||
|
this.Controls.Add(btnShelfLight);
|
||
|
this.Controls.Add(btnWallLight);
|
||
|
this.Controls.Add(btnBrightnessUp1);
|
||
|
this.Controls.Add(btnBrightnessDown1);
|
||
|
this.Controls.Add(btnBrightnessUp2);
|
||
|
this.Controls.Add(btnBrightnessDown2);
|
||
|
}
|
||
|
|
||
|
|
||
|
private void ToggleLightButton_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
|
||
|
SetHotSongButtonsVisibility(false);
|
||
|
SetNewSongButtonsVisibility(false);
|
||
|
SetSingerSearchButtonsVisibility(false);
|
||
|
SetSongSearchButtonsVisibility(false);
|
||
|
|
||
|
|
||
|
if (!pictureBoxToggleLight.Visible)
|
||
|
{
|
||
|
|
||
|
ShowImageOnPictureBoxToggleLight(Path.Combine(Application.StartupPath, @"themes\superstar\選單內介面_燈光控制.jpg"));
|
||
|
SetPictureBoxToggleLightAndButtonsVisibility(true);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
|
||
|
TogglePictureBoxToggleLightButtonsVisibility();
|
||
|
}
|
||
|
|
||
|
|
||
|
if (pictureBoxQRCode != null)
|
||
|
{
|
||
|
pictureBoxQRCode.Visible = false;
|
||
|
closeQRCodeButton.Visible = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void ShowImageOnPictureBoxToggleLight(string imagePath)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if (!File.Exists(imagePath))
|
||
|
{
|
||
|
MessageBox.Show($"找不到圖片文件: {imagePath}");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
using (var stream = new MemoryStream(File.ReadAllBytes(imagePath)))
|
||
|
{
|
||
|
var originalImage = new Bitmap(stream);
|
||
|
Rectangle cropArea = new Rectangle(570, 359, 630, 379);
|
||
|
|
||
|
using (var croppedImage = new Bitmap(cropArea.Width, cropArea.Height))
|
||
|
{
|
||
|
using (var g = Graphics.FromImage(croppedImage))
|
||
|
{
|
||
|
g.DrawImage(originalImage,
|
||
|
new Rectangle(0, 0, cropArea.Width, cropArea.Height),
|
||
|
cropArea,
|
||
|
GraphicsUnit.Pixel);
|
||
|
}
|
||
|
|
||
|
pictureBoxToggleLight.Image?.Dispose();
|
||
|
pictureBoxToggleLight.Image = new Bitmap(croppedImage);
|
||
|
}
|
||
|
|
||
|
ResizeAndPositionPictureBox(pictureBoxToggleLight, cropArea.X, cropArea.Y, cropArea.Width, cropArea.Height);
|
||
|
pictureBoxToggleLight.Visible = true;
|
||
|
pictureBoxToggleLight.BringToFront();
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
MessageBox.Show($"載入燈光控制圖片時發生錯誤: {ex.Message}\n路徑: {imagePath}");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void TogglePictureBoxToggleLightButtonsVisibility()
|
||
|
{
|
||
|
|
||
|
bool areButtonsVisible = pictureBoxToggleLight.Visible;
|
||
|
|
||
|
|
||
|
SetPictureBoxToggleLightAndButtonsVisibility(!areButtonsVisible);
|
||
|
}
|
||
|
|
||
|
private void SetPictureBoxToggleLightAndButtonsVisibility(bool isVisible)
|
||
|
{
|
||
|
|
||
|
pictureBoxToggleLight.Visible = isVisible;
|
||
|
|
||
|
|
||
|
btnTurnOn.Visible = isVisible;
|
||
|
btnTurnOff.Visible = isVisible;
|
||
|
btnBright.Visible = isVisible;
|
||
|
btnRomantic.Visible = isVisible;
|
||
|
btnAuto.Visible = isVisible;
|
||
|
btnColorTuning.Visible = isVisible;
|
||
|
btnSoft.Visible = isVisible;
|
||
|
btnDynamic.Visible = isVisible;
|
||
|
btnDeskLamp.Visible = isVisible;
|
||
|
btnStageLight.Visible = isVisible;
|
||
|
btnShelfLight.Visible = isVisible;
|
||
|
btnWallLight.Visible = isVisible;
|
||
|
btnBrightnessUp1.Visible = isVisible;
|
||
|
btnBrightnessDown1.Visible = isVisible;
|
||
|
btnBrightnessUp2.Visible = isVisible;
|
||
|
btnBrightnessDown2.Visible = isVisible;
|
||
|
|
||
|
if (isVisible)
|
||
|
{
|
||
|
|
||
|
pictureBoxToggleLight.BringToFront();
|
||
|
|
||
|
|
||
|
btnTurnOn.BringToFront();
|
||
|
btnTurnOff.BringToFront();
|
||
|
btnBright.BringToFront();
|
||
|
btnRomantic.BringToFront();
|
||
|
btnAuto.BringToFront();
|
||
|
btnColorTuning.BringToFront();
|
||
|
btnSoft.BringToFront();
|
||
|
btnDynamic.BringToFront();
|
||
|
btnDeskLamp.BringToFront();
|
||
|
btnStageLight.BringToFront();
|
||
|
btnShelfLight.BringToFront();
|
||
|
btnWallLight.BringToFront();
|
||
|
btnBrightnessUp1.BringToFront();
|
||
|
btnBrightnessDown1.BringToFront();
|
||
|
btnBrightnessUp2.BringToFront();
|
||
|
btnBrightnessDown2.BringToFront();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|