This repository has been archived on 2025-06-24. You can view files and clone it, but cannot push or open issues or pull requests.
superstar/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.PinyinSearch.cs
2025-03-18 11:35:10 +08:00

321 lines
12 KiB
C#

using System;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using IniParser;
using IniParser.Model;
namespace DualScreenDemo
{
public partial class PrimaryForm
{
private PictureBox pictureBoxPinYinSongs;
private Button[] letterButtonsForPinYinSongs;
private Button modifyButtonPinYinSongs;
private Button clearButtonPinYinSongs;
private Button closeButtonPinYinSongs;
private RichTextBox inputBoxPinYinSongs;
private void PinyinSearchSongsButton_Click(object sender, EventArgs e)
{
zhuyinSearchSongButton.BackgroundImage = zhuyinSearchSongNormalBackground;
englishSearchSongButton.BackgroundImage = englishSearchSongNormalBackground;
pinyinSearchSongButton.BackgroundImage = pinyinSearchSongActiveBackground;
wordCountSearchSongButton.BackgroundImage = wordCountSearchSongNormalBackground;
handWritingSearchSongButton.BackgroundImage = handWritingSearchSongNormalBackground;
numberSearchSongButton.BackgroundImage = numberSearchSongNormalBackground;
var configData = LoadConfigData();
string pinyinImagePath = Path.Combine(Application.StartupPath, configData["ImagePaths"]["PinYinSongs"]);
ShowImageOnPictureBoxPinYinSongs(Path.Combine(Application.StartupPath, pinyinImagePath));
SetZhuYinSingersAndButtonsVisibility(false);
SetEnglishSingersAndButtonsVisibility(false);
SetPinYinSingersAndButtonsVisibility(false);
SetPinYinSongsAndButtonsVisibility(true);
pictureBoxPinYinSongs.Visible = true;
}
private void InitializeLetterButtonsForPinYinSongs()
{
var data = LoadConfigData();
var buttonImages = LoadButtonImages(data, "PinYinLetterButtonImages", 26);
string qwertyLayout = "QWERTYUIOPASDFGHJKLZXCVBNM";
letterButtonsForPinYinSongs = new Button[26];
for (int i = 0; i < 26; i++)
{
var coords = data["PinYinLetterButtonCoordinates"][$"button{i}"].Split(',');
letterButtonsForPinYinSongs[i] = CreateButton(
$"letterButton_{qwertyLayout[i]}",
(int.Parse(coords[0]), int.Parse(coords[1]), int.Parse(coords[2]), int.Parse(coords[3])),
buttonImages[$"button{i}"].normal,
buttonImages[$"button{i}"].mouseDown,
buttonImages[$"button{i}"].mouseOver,
LetterButtonPinYinSongs_Click
);
letterButtonsForPinYinSongs[i].Tag = qwertyLayout[i];
this.Controls.Add(letterButtonsForPinYinSongs[i]);
}
}
private void LetterButtonPinYinSongs_Click(object sender, EventArgs e)
{
var button = sender as Button;
if (button != null && button.Tag != null)
{
if (inputBoxPinYinSongs.Visible)
{
inputBoxPinYinSongs.Text += button.Tag.ToString();
}
}
}
private void InitializeButtonsForPinYinSongs()
{
InitializeLetterButtonsForPinYinSongs();
InitializeSpecialButtonsForPinYinSongs();
InitializeInputBoxPinYinSongs();
}
private void InitializeSpecialButtonsForPinYinSongs()
{
InitializeModifyButtonPinYinSongs();
InitializeClearButtonPinYinSongs();
InitializeCloseButtonPinYinSongs();
}
private void InitializeModifyButtonPinYinSongs()
{
var data = LoadConfigData();
modifyButtonPinYinCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "modifyButtonPinYinSongs");
var buttonImages = LoadButtonImages(data, "ModifyButtonImagesPinYin");
modifyButtonPinYinSongs = CreateSpecialButton(
"btnModifyPinYinSongs",
modifyButtonPinYinCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
ModifyButtonPinYinSongs_Click
);
}
private void ModifyButtonPinYinSongs_Click(object sender, EventArgs e)
{
if (this.Controls.Contains(inputBoxPinYinSongs) && inputBoxPinYinSongs.Text.Length > 0)
{
inputBoxPinYinSongs.Text = inputBoxPinYinSongs.Text.Substring(0, inputBoxPinYinSongs.Text.Length - 1);
}
}
private void InitializeClearButtonPinYinSongs()
{
var data = LoadConfigData();
clearButtonPinYinCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "clearButtonPinYinSongs");
var buttonImages = LoadButtonImages(data, "ClearButtonImagesPinYin");
clearButtonPinYinSongs = CreateSpecialButton(
"btnClearPinYinSongs",
clearButtonPinYinCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
ClearButtonPinYinSongs_Click
);
}
private void ClearButtonPinYinSongs_Click(object sender, EventArgs e)
{
if (this.Controls.Contains(inputBoxPinYinSongs) && inputBoxPinYinSongs.Text.Length > 0)
{
inputBoxPinYinSongs.Text = "";
}
}
private void InitializeCloseButtonPinYinSongs()
{
var data = LoadConfigData();
closeButtonPinYinCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "closeButtonPinYinSongs");
var buttonImages = LoadButtonImages(data, "CloseButtonImagesPinYin");
closeButtonPinYinSongs = CreateSpecialButton(
"btnClosePinYinSongs",
closeButtonPinYinCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
CloseButtonPinYinSongs_Click
);
}
private void CloseButtonPinYinSongs_Click(object sender, EventArgs e)
{
pictureBoxPinYinSongs.Visible = false;
SetPinYinSongsAndButtonsVisibility(false);
}
private void InitializeInputBoxPinYinSongs()
{
try
{
var parser = new FileIniDataParser();
parser.Parser.Configuration.AssigmentSpacer = "";
parser.Parser.Configuration.CommentString = "#";
parser.Parser.Configuration.CaseInsensitive = true;
IniData data;
using (var reader = new StreamReader("config.ini", System.Text.Encoding.UTF8))
{
data = parser.ReadData(reader);
}
int x = int.Parse(data["InputBoxPinYinSongs"]["X"]);
int y = int.Parse(data["InputBoxPinYinSongs"]["Y"]);
int width = int.Parse(data["InputBoxPinYinSongs"]["Width"]);
int height = int.Parse(data["InputBoxPinYinSongs"]["Height"]);
string fontName = data["InputBoxPinYinSongs"]["FontName"];
float fontSize = float.Parse(data["InputBoxPinYinSongs"]["FontSize"]);
FontStyle fontStyle = (FontStyle)Enum.Parse(typeof(FontStyle), data["InputBoxPinYinSongs"]["FontStyle"]);
Color foreColor = Color.FromName(data["InputBoxPinYinSongs"]["ForeColor"]);
inputBoxPinYinSongs = new RichTextBox
{
Visible = false,
Name = "inputBoxPinYinSongs",
ForeColor = foreColor,
Font = new Font(fontName, fontSize / 900 * Screen.PrimaryScreen.Bounds.Height, fontStyle)
};
ResizeAndPositionControl(inputBoxPinYinSongs, x, y, width, height);
inputBoxPinYinSongs.TextChanged += (sender, e) =>
{
string searchText = inputBoxPinYinSongs.Text;
var searchResults = allSongs.Where(song => song.PinyinNotation.StartsWith(searchText)).ToList();
currentPage = 0;
currentSongList = searchResults;
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
multiPagePanel.currentPageIndex = 0;
multiPagePanel.LoadSongs(currentSongList);
};
this.Controls.Add(inputBoxPinYinSongs);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
private (int X, int Y, int Width, int Height) pictureBoxPinYinSongCoords;
private void LoadPictureBoxPinYinSongCoordsFromConfig()
{
var parser = new FileIniDataParser();
IniData data = parser.ReadFile("config.ini");
var coords = data["PictureBoxPinYinSongs"];
pictureBoxPinYinSongCoords = (
int.Parse(coords["X"]),
int.Parse(coords["Y"]),
int.Parse(coords["Width"]),
int.Parse(coords["Height"])
);
}
private void ShowImageOnPictureBoxPinYinSongs(string imagePath)
{
LoadPictureBoxPinYinSongCoordsFromConfig();
Bitmap originalImage = new Bitmap(imagePath);
Rectangle displayArea = new Rectangle(pictureBoxPinYinSongCoords.X, pictureBoxPinYinSongCoords.Y, pictureBoxPinYinSongCoords.Width, pictureBoxPinYinSongCoords.Height);
pictureBoxPinYinSongs.Image = originalImage;
ResizeAndPositionPictureBox(pictureBoxPinYinSongs, displayArea.X, displayArea.Y, displayArea.Width, displayArea.Height);
pictureBoxPinYinSongs.Visible = true;
}
private void SetPinYinSongsAndButtonsVisibility(bool isVisible)
{
System.Action action = () =>
{
SuspendLayout();
pictureBoxPinYinSongs.Visible = isVisible;
if (isVisible) pictureBoxPinYinSongs.BringToFront();
foreach (var button in letterButtonsForPinYinSongs)
{
button.Visible = isVisible;
if (isVisible) button.BringToFront();
}
if (modifyButtonPinYinSongs != null)
{
modifyButtonPinYinSongs.Visible = isVisible;
if (isVisible) modifyButtonPinYinSongs.BringToFront();
}
if (clearButtonPinYinSongs != null)
{
clearButtonPinYinSongs.Visible = isVisible;
if (isVisible) clearButtonPinYinSongs.BringToFront();
}
closeButtonPinYinSongs.Visible = isVisible;
if (isVisible) closeButtonPinYinSongs.BringToFront();
inputBoxPinYinSongs.Visible = isVisible;
if (isVisible) inputBoxPinYinSongs.BringToFront();
ResumeLayout();
PerformLayout();
pictureBoxPinYinSongs.Refresh();
foreach (var button in letterButtonsForPinYinSongs)
{
button.Refresh();
}
modifyButtonPinYinSongs.Refresh();
clearButtonPinYinSongs.Refresh();
closeButtonPinYinSongs.Refresh();
inputBoxPinYinSongs.Refresh();
};
if (this.InvokeRequired)
{
this.Invoke(action);
}
else
{
action();
}
}
}
}