superstar_v2/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.HandwritingSearch.cs

306 lines
12 KiB
C#

using System.IO;
using Microsoft.Ink;
namespace DualScreenDemo
{
public partial class PrimaryForm
{
private PictureBox pictureBoxHandWritingSongs;
private Button refillButtonHandWritingSongs;
private Button clearButtonHandWritingSongs;
private Button closeButtonForSongs;
private void HandWritingSearchButtonForSongs_Click(object sender, EventArgs e)
{
this.SuspendLayout();
zhuyinSearchSongButton.BackgroundImage = zhuyinSearchSongNormalBackground;
englishSearchSongButton.BackgroundImage = englishSearchSongNormalBackground;
pinyinSearchSongButton.BackgroundImage = pinyinSearchSongNormalBackground;
wordCountSearchSongButton.BackgroundImage = wordCountSearchSongNormalBackground;
handWritingSearchSongButton.BackgroundImage = handWritingSearchSongActiveBackground;
numberSearchSongButton.BackgroundImage = numberSearchSongNormalBackground;
EnableDoubleBuffering(handWritingPanelForSongs);
EnableDoubleBuffering(handwritingInputBoxForSongs);
EnableDoubleBuffering(candidateListBoxForSongs);
EnableDoubleBuffering(pictureBoxHandWritingSongs);
EnableDoubleBuffering(refillButtonHandWritingSongs);
EnableDoubleBuffering(closeButtonForSongs);
var configData = LoadConfigData();
string handWritingImagePath = Path.Combine(Application.StartupPath, configData["ImagePaths"]["HandWritingSongs"]);
ShowImageOnPictureBoxHandWritingSongs(Path.Combine(Application.StartupPath, handWritingImagePath));
// 鍵盤UI介面顯示設定
SetWordCountSongsAndButtonsVisibility(false);
SetEnglishSongsAndButtonsVisibility(false);
SetPinYinSongsAndButtonsVisibility(false);
SetHandWritingForSongsAndButtonsVisibility(true);
SetSongIDSearchAndButtonsVisibility(false);
SetZhuYinSongsAndButtonsVisibility(false);
ResetinputBox();
this.ResumeLayout();
}
private Panel handWritingPanelForSongs;
private InkOverlay inkOverlayForSongs;
private RichTextBox handwritingInputBoxForSongs;
private ListBox candidateListBoxForSongs;
private void InitializeHandWritingForSongs()
{
InitializeHandWritingPanelForSongs();
InitializeInkOverlayForSongs();
InitializeHandwritingInputBoxForSongs();
InitializeCandidateListBoxForSongs();
InitializeSpecialButtonsForHandWritingSongs();
}
private void InitializeHandWritingPanelForSongs()
{
handWritingPanelForSongs = new Panel
{
BorderStyle = BorderStyle.FixedSingle,
Visible = false
};
ResizeAndPositionControl(handWritingPanelForSongs, 366, 448, 650, 260);
this.Controls.Add(handWritingPanelForSongs);
}
private void InitializeInkOverlayForSongs()
{
try
{
inkOverlayForSongs = new InkOverlay(handWritingPanelForSongs);
inkOverlayForSongs.Enabled = false;
inkOverlayForSongs.Ink = new Ink();
inkOverlayForSongs.DefaultDrawingAttributes.Color = Color.Black;
inkOverlayForSongs.DefaultDrawingAttributes.Width = 100;
inkOverlayForSongs.Stroke += new InkCollectorStrokeEventHandler(InkOverlayForSongs_Stroke);
inkOverlayForSongs.Enabled = true;
}
catch (Exception ex)
{
Console.WriteLine("Failed to initialize ink overlay for singers: " + ex.Message);
}
}
private void InkOverlayForSongs_Stroke(object sender, InkCollectorStrokeEventArgs e)
{
RecognizeInk(inkOverlayForSongs, candidateListBoxForSongs);
}
private void InitializeHandwritingInputBoxForSongs()
{
handwritingInputBoxForSongs = new RichTextBox
{
Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular),
Visible = false
};
ResizeAndPositionControl(handwritingInputBoxForSongs, 366, 373, 541, 62);
this.Controls.Add(handwritingInputBoxForSongs);
}
private void InitializeCandidateListBoxForSongs()
{
candidateListBoxForSongs = new ListBox
{
Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular),
Visible = false
};
ResizeAndPositionControl(candidateListBoxForSongs, 350 + 679, 448, 115, 260);
candidateListBoxForSongs.SelectedIndexChanged += CandidateListBoxForSongs_SelectedIndexChanged;
this.Controls.Add(candidateListBoxForSongs);
}
private void CandidateListBoxForSongs_SelectedIndexChanged(object sender, EventArgs e)
{
if (candidateListBoxForSongs.SelectedIndex != -1)
{
string selectedWord = candidateListBoxForSongs.SelectedItem.ToString();
handwritingInputBoxForSongs.Text += selectedWord;
candidateListBoxForSongs.Visible = false;
if (inkOverlayForSongs != null)
{
inkOverlayForSongs.Ink.DeleteStrokes();
handWritingPanelForSongs.Invalidate();
}
}
}
private void ShowImageOnPictureBoxHandWritingSongs(string imagePath)
{
Bitmap originalImage = new Bitmap(imagePath);
Rectangle displayArea = new Rectangle(350, 360, 810, 360);
pictureBoxHandWritingSongs.Image = originalImage;
ResizeAndPositionPictureBox(pictureBoxHandWritingSongs, displayArea.X, displayArea.Y, displayArea.Width, displayArea.Height);
pictureBoxHandWritingSongs.Visible = true;
}
private void SetHandWritingForSongsAndButtonsVisibility(bool isVisible)
{
EnableDoubleBuffering(handWritingPanelForSongs);
EnableDoubleBuffering(handwritingInputBoxForSongs);
EnableDoubleBuffering(candidateListBoxForSongs);
EnableDoubleBuffering(pictureBoxHandWritingSongs);
EnableDoubleBuffering(refillButtonHandWritingSongs);
EnableDoubleBuffering(clearButtonHandWritingSongs);
EnableDoubleBuffering(closeButtonForSongs);
handWritingPanelForSongs.Visible = isVisible;
handwritingInputBoxForSongs.Visible = isVisible;
inkOverlayForSongs.Enabled = isVisible;
candidateListBoxForSongs.Visible = isVisible;
pictureBoxHandWritingSongs.Visible = isVisible;
refillButtonHandWritingSongs.Visible = isVisible;
clearButtonHandWritingSongs.Visible = isVisible;
closeButtonForSongs.Visible = isVisible;
if (isVisible)
{
pictureBoxHandWritingSongs.BringToFront();
handWritingPanelForSongs.BringToFront();
handwritingInputBoxForSongs.BringToFront();
candidateListBoxForSongs.BringToFront();
refillButtonHandWritingSongs.BringToFront();
clearButtonHandWritingSongs.BringToFront();
closeButtonForSongs.BringToFront();
}
}
private void InitializeSpecialButtonsForHandWritingSongs()
{
InitializeRefillButtonHandwritingSongs();
InitializeClearButtonHandWritingSongs();
InitializeCloseButtonForSongs();
}
private void InitializeRefillButtonHandwritingSongs()
{
var data = LoadConfigData();
refillButtonHandWritingCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "refillButtonHandWritingSongs");
var buttonImages = LoadButtonImages(data, "RefillButtonImagesHandWriting");
refillButtonHandWritingSongs = CreateSpecialButton(
"refillButtonHandWritingSongs",
refillButtonHandWritingCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
RefillButtonHandWritingSongs_Click
);
}
private void RefillButtonHandWritingSongs_Click(object sender, EventArgs e)
{
handwritingInputBoxForSongs.Text = "";
}
private void InitializeClearButtonHandWritingSongs()
{
var data = LoadConfigData();
clearButtonHandWritingCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "clearButtonHandWritingSongs");
var buttonImages = LoadButtonImages(data, "ClearButtonImagesHandWriting");
clearButtonHandWritingSongs = CreateSpecialButton(
"clearButtonHandWritingSongs",
clearButtonHandWritingCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
ClearButtonHandWritingSongs_Click
);
}
private void ClearButtonHandWritingSongs_Click(object sender, EventArgs e)
{
if (this.Controls.Contains(handWritingPanelForSongs) && inkOverlayForSongs != null)
{
inkOverlayForSongs.Ink.DeleteStrokes();
handWritingPanelForSongs.Invalidate();
}
}
private void InitializeCloseButtonForSongs()
{
var data = LoadConfigData();
closeButtonHandWritingCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "closeButtonForSongs");
var buttonImages = LoadButtonImages(data, "CloseButtonImagesHandWriting");
closeButtonForSongs = CreateSpecialButton(
"closeButtonForSongs",
closeButtonHandWritingCoords,
buttonImages.normal,
buttonImages.mouseOver,
buttonImages.mouseDown,
CloseButtonForSongs_Click
);
}
private void CloseButtonForSongs_Click(object sender, EventArgs e)
{
this.SuspendLayout();
handWritingSearchSongButton.BackgroundImage = handWritingSearchSongNormalBackground;
SetHandWritingForSongsAndButtonsVisibility(false);
FindHandwritingSongs();
this.ResumeLayout();
}
private void FindHandwritingSongs(){
string searchText = handwritingInputBoxForSongs.Text;
// 在這裡添加搜尋歌曲的邏輯
// 例如:根據輸入框的內容搜尋歌曲
string query = string.IsNullOrWhiteSpace(searchText)
? "SELECT * FROM song_library_cache ORDER BY song_id DESC LIMIT 200;"
: $"SELECT * FROM song_library_cache WHERE song_name LIKE '{searchText}%' ORDER BY song_id DESC;";
var searchResults = SearchSongs_Mysql(query);
// 重置分頁
currentPage = 0;
currentSongList = searchResults;
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
// 更新多頁面面板的內容
multiPagePanel.currentPageIndex = 0;
multiPagePanel.LoadSongs(currentSongList);
}
}
}