305 lines
12 KiB
C#
305 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;
|
|
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
|
|
// 更新多頁面面板的內容
|
|
multiPagePanel.currentPageIndex = 0;
|
|
multiPagePanel.LoadSongs(searchResults);
|
|
|
|
|
|
}
|
|
}
|
|
} |