superstar_v2/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.PinyinSearch.cs

382 lines
15 KiB
C#

using System.IO;
using IniParser;
using IniParser.Model;
namespace DualScreenDemo
{
public partial class PrimaryForm
{
private PictureBox pictureBoxPinYinSingers;
private Button[] letterButtonsForPinYinSingers;
private Button modifyButtonPinYinSingers;
private Button clearButtonPinYinSingers;
private Button closeButtonPinYinSingers;
private (int X, int Y, int Width, int Height) modifyButtonPinYinCoords;
private (int X, int Y, int Width, int Height) clearButtonPinYinCoords;
private (int X, int Y, int Width, int Height) closeButtonPinYinCoords;
private RichTextBox inputBoxPinYinSingers;
private void PinyinSingerSearchButton_Click(object sender, EventArgs e)
{
zhuyinSearchButton.BackgroundImage = zhuyinSearchNormalBackground;
englishSearchButton.BackgroundImage = englishSearchNormalBackground;
pinyinSearchButton.BackgroundImage = pinyinSearchActiveBackground;
wordCountSearchButton.BackgroundImage = wordCountSearchNormalBackground;
handWritingSearchButton.BackgroundImage = handWritingSearchNormalBackground;
var configData = LoadConfigData();
string pinyinImagePath = Path.Combine(Application.StartupPath, configData["ImagePaths"]["PinYinSingers"]);
ShowImageOnPictureBoxPinYinSingers(Path.Combine(Application.StartupPath, pinyinImagePath));
SetZhuYinSingersAndButtonsVisibility(false); // 隱藏注音搜尋相關控件
SetEnglishSingersAndButtonsVisibility(false); // 隱藏英文搜尋相關控件
SetWordCountSingersAndButtonsVisibility(false); // 隱藏字數搜尋相關控件
SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件
SetPinYinSingersAndButtonsVisibility(true);
//SetPictureBoxArtistSearchAndButtonsVisibility(false);
pictureBoxPinYinSingers.Visible = true;
}
private void InitializeLetterButtonsForPinYinSingers()
{
var data = LoadConfigData();
var buttonImages = LoadButtonImages(data, "PinYinLetterButtonImages", 26);
string qwertyLayout = "QWERTYUIOPASDFGHJKLZXCVBNM";
letterButtonsForPinYinSingers = new Button[26];
for (int i = 0; i < 26; i++)
{
var coords = data["PinYinLetterButtonCoordinates"][$"button{i}"].Split(',');
letterButtonsForPinYinSingers[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,
LetterButtonPinYinSingers_Click
);
letterButtonsForPinYinSingers[i].Tag = qwertyLayout[i];
this.Controls.Add(letterButtonsForPinYinSingers[i]);
}
}
private void LetterButtonPinYinSingers_Click(object sender, EventArgs e)
{
var button = sender as Button;
if (button != null && button.Tag != null)
{
if (inputBoxPinYinSingers.Visible)
{
inputBoxPinYinSingers.Text += button.Tag.ToString();
}
}
}
private void InitializeButtonsForPinYinSingers()
{
InitializeLetterButtonsForPinYinSingers();
InitializeSpecialButtonsForPinYinSingers();
InitializeInputBoxPinYinSingers();
}
private void InitializeSpecialButtonsForPinYinSingers()
{
InitializeModifyButtonPinYinSingers();
InitializeClearButtonPinYinSingers();
InitializeCloseButtonPinYinSingers();
}
private void InitializeModifyButtonPinYinSingers()
{
var data = LoadConfigData();
modifyButtonPinYinCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "modifyButtonPinYinSingers");
var buttonImages = LoadButtonImages(data, "ModifyButtonImagesPinYin");
modifyButtonPinYinSingers = CreateSpecialButton(
"btnModifyPinYinSingers",
modifyButtonPinYinCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
ModifyButtonPinYinSingers_Click
);
}
private void ModifyButtonPinYinSingers_Click(object sender, EventArgs e)
{
if (this.Controls.Contains(inputBoxPinYinSingers) && inputBoxPinYinSingers.Text.Length > 0)
{
inputBoxPinYinSingers.Text = inputBoxPinYinSingers.Text.Substring(0, inputBoxPinYinSingers.Text.Length - 1);
}
}
private void InitializeClearButtonPinYinSingers()
{
var data = LoadConfigData();
clearButtonPinYinCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "clearButtonPinYinSingers");
var buttonImages = LoadButtonImages(data, "ClearButtonImagesPinYin");
clearButtonPinYinSingers = CreateSpecialButton(
"btnClearPinYinSingers",
clearButtonPinYinCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
ClearButtonPinYinSingers_Click
);
}
private void ClearButtonPinYinSingers_Click(object sender, EventArgs e)
{
if (this.Controls.Contains(inputBoxPinYinSingers) && inputBoxPinYinSingers.Text.Length > 0)
{
inputBoxPinYinSingers.Text = "";
}
}
private void InitializeCloseButtonPinYinSingers()
{
var data = LoadConfigData();
closeButtonPinYinCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "closeButtonPinYinSingers");
var buttonImages = LoadButtonImages(data, "CloseButtonImagesPinYin");
closeButtonPinYinSingers = CreateSpecialButton(
"btnClosePinYinSingers",
closeButtonPinYinCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
CloseButtonPinYinSingers_Click
);
}
private void CloseButtonPinYinSingers_Click(object sender, EventArgs e)
{
pictureBoxPinYinSingers.Visible = false;
pinyinSearchButton.BackgroundImage = pinyinSearchNormalBackground;
FindPinYinSingers();
SetPinYinSingersAndButtonsVisibility(false);
}
private void FindPinYinSingers(){
string searchText = inputBoxPinYinSingers.Text;
// 在這裡添加搜尋歌曲的邏輯
// 例如:根據輸入框的內容搜尋歌曲
string query = string.IsNullOrWhiteSpace(searchText)
? "SELECT * FROM artists; LIMIT 50"
: $"SELECT * FROM artists WHERE `pinyin_abbr` LIKE '{searchText}%';";
//string query = $"SELECT * FROM SongLibrary WHERE `歌星A拼音` LIKE '{searchText}%' OR `歌星B拼音` LIKE '{searchText}%' ";
var searchResults = SearchSingers_Mysql(query);
// 重置分頁
currentPage = 0;
currentArtistList = searchResults;
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
multiPagePanel.currentPageIndex = 0;
multiPagePanel.LoadSingers(currentArtistList);
}
private void InitializeInputBoxPinYinSingers()
{
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["InputBoxPinYinSingers"]["X"]);
int y = int.Parse(data["InputBoxPinYinSingers"]["Y"]);
int width = int.Parse(data["InputBoxPinYinSingers"]["Width"]);
int height = int.Parse(data["InputBoxPinYinSingers"]["Height"]);
string fontName = data["InputBoxPinYinSingers"]["FontName"];
float fontSize = float.Parse(data["InputBoxPinYinSingers"]["FontSize"]);
FontStyle fontStyle = (FontStyle)Enum.Parse(typeof(FontStyle), data["InputBoxPinYinSingers"]["FontStyle"]);
Color foreColor = Color.FromName(data["InputBoxPinYinSingers"]["ForeColor"]);
inputBoxPinYinSingers = new RichTextBox
{
Visible = false,
Name = "inputBoxPinYinSingers",
ForeColor = foreColor,
Font = new Font(fontName, fontSize / 900 * Screen.PrimaryScreen.Bounds.Height, fontStyle)
};
ResizeAndPositionControl(inputBoxPinYinSingers, x, y, width, height);
/*inputBoxPinYinSingers.TextChanged += (sender, e) =>
{
string searchText = inputBoxPinYinSingers.Text;
var searchResults = allSongs.Where(song => song.ArtistAPinyin.Replace(" ", "").StartsWith(searchText))
.Union(allSongs.Where(song => song.ArtistBPinyin.Replace(" ", "").StartsWith(searchText)))
.ToList();
currentPage = 0;
currentSongList = searchResults;
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
multiPagePanel.currentPageIndex = 0;
multiPagePanel.LoadSongs(currentSongList);
};*/
this.Controls.Add(inputBoxPinYinSingers);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
private (int X, int Y, int Width, int Height) pictureBoxPinYinSingerCoords;
private void LoadPictureBoxPinYinSingerCoordsFromConfig()
{
var parser = new FileIniDataParser();
IniData data = parser.ReadFile("config.ini");
var coords = data["PictureBoxPinYinSingers"];
pictureBoxPinYinSingerCoords = (
int.Parse(coords["X"]),
int.Parse(coords["Y"]),
int.Parse(coords["Width"]),
int.Parse(coords["Height"])
);
}
private void ShowImageOnPictureBoxPinYinSingers(string imagePath)
{
LoadPictureBoxPinYinSingerCoordsFromConfig();
Bitmap originalImage = new Bitmap(imagePath);
Rectangle displayArea = new Rectangle(pictureBoxPinYinSingerCoords.X, pictureBoxPinYinSingerCoords.Y, pictureBoxPinYinSingerCoords.Width, pictureBoxPinYinSingerCoords.Height);
pictureBoxPinYinSingers.Image = originalImage;
ResizeAndPositionPictureBox(pictureBoxPinYinSingers, displayArea.X, displayArea.Y, displayArea.Width, displayArea.Height);
pictureBoxPinYinSingers.Visible = true;
}
private void SetPinYinSingersAndButtonsVisibility(bool isVisible)
{
System.Action action = () =>
{
SuspendLayout();
if (pictureBoxPinYinSingers == null)
{
Console.WriteLine("pictureBoxPinYinSingers is null");
}
else
{
pictureBoxPinYinSingers.Visible = isVisible;
if (isVisible) pictureBoxPinYinSingers.BringToFront();
pictureBoxPinYinSingers.Refresh();
}
if (letterButtonsForPinYinSingers == null)
{
Console.WriteLine("letterButtonsForPinYinSingers is null");
}
else
{
foreach (var button in letterButtonsForPinYinSingers)
{
if (button == null)
{
Console.WriteLine("A button in letterButtonsForPinYinSingers is null");
}
else
{
button.Visible = isVisible;
if (isVisible) button.BringToFront();
button.Refresh();
}
}
}
if (modifyButtonPinYinSingers == null)
{
Console.WriteLine("modifyButtonPinYinSingers is null");
}
else
{
modifyButtonPinYinSingers.Visible = isVisible;
if (isVisible) modifyButtonPinYinSingers.BringToFront();
modifyButtonPinYinSingers.Refresh();
}
if (clearButtonPinYinSingers == null)
{
Console.WriteLine("clearButtonPinYinSingers is null");
}
else
{
clearButtonPinYinSingers.Visible = isVisible;
if (isVisible) clearButtonPinYinSingers.BringToFront();
clearButtonPinYinSingers.Refresh();
}
if (closeButtonPinYinSingers == null)
{
Console.WriteLine("closeButtonPinYinSingers is null");
}
else
{
closeButtonPinYinSingers.Visible = isVisible;
if (isVisible) closeButtonPinYinSingers.BringToFront();
closeButtonPinYinSingers.Refresh();
}
if (inputBoxPinYinSingers == null)
{
Console.WriteLine("inputBoxPinYinSingers is null");
}
else
{
inputBoxPinYinSingers.Visible = isVisible;
if (isVisible) inputBoxPinYinSingers.BringToFront();
inputBoxPinYinSingers.Refresh();
}
ResumeLayout();
PerformLayout();
};
if (this.InvokeRequired)
{
this.Invoke(action);
}
else
{
action();
}
}
}
}