304 lines
12 KiB
C#
304 lines
12 KiB
C#
|
using System.IO;
|
||
|
using Microsoft.Ink;
|
||
|
|
||
|
namespace DualScreenDemo
|
||
|
{
|
||
|
public partial class PrimaryForm
|
||
|
{
|
||
|
private PictureBox pictureBoxHandWritingSingers;
|
||
|
|
||
|
private Button refillButtonHandWritingSingers;
|
||
|
private Button clearButtonHandWritingSingers;
|
||
|
private Button closeButtonForSingers;
|
||
|
|
||
|
private (int X, int Y, int Width, int Height) refillButtonHandWritingCoords;
|
||
|
private (int X, int Y, int Width, int Height) clearButtonHandWritingCoords;
|
||
|
private (int X, int Y, int Width, int Height) closeButtonHandWritingCoords;
|
||
|
|
||
|
private void HandWritingSearchButtonForSingers_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
this.SuspendLayout();
|
||
|
|
||
|
zhuyinSearchButton.BackgroundImage = zhuyinSearchNormalBackground;
|
||
|
englishSearchButton.BackgroundImage = englishSearchNormalBackground;
|
||
|
pinyinSearchButton.BackgroundImage = pinyinSearchNormalBackground;
|
||
|
wordCountSearchButton.BackgroundImage = wordCountSearchNormalBackground;
|
||
|
handWritingSearchButton.BackgroundImage = handWritingSearchActiveBackground;
|
||
|
|
||
|
|
||
|
EnableDoubleBuffering(handWritingPanelForSingers);
|
||
|
EnableDoubleBuffering(handwritingInputBoxForSingers);
|
||
|
EnableDoubleBuffering(candidateListBoxForSingers);
|
||
|
EnableDoubleBuffering(pictureBoxHandWritingSingers);
|
||
|
EnableDoubleBuffering(refillButtonHandWritingSingers);
|
||
|
EnableDoubleBuffering(closeButtonForSingers);
|
||
|
|
||
|
|
||
|
var configData = LoadConfigData();
|
||
|
string handWritingImagePath = Path.Combine(Application.StartupPath, configData["ImagePaths"]["HandWritingSingers"]);
|
||
|
|
||
|
ShowImageOnPictureBoxHandWritingSingers(Path.Combine(Application.StartupPath, handWritingImagePath));
|
||
|
SetZhuYinSingersAndButtonsVisibility(false);
|
||
|
SetEnglishSingersAndButtonsVisibility(false);
|
||
|
SetPinYinSingersAndButtonsVisibility(false);
|
||
|
SetWordCountSingersAndButtonsVisibility(false); // 隱藏字數搜尋相關控件
|
||
|
//SetPictureBoxArtistSearchAndButtonsVisibility(false);
|
||
|
SetHandWritingForSingersAndButtonsVisibility(true);
|
||
|
|
||
|
ResetinputBox();
|
||
|
this.ResumeLayout();
|
||
|
}
|
||
|
|
||
|
private Panel handWritingPanelForSingers;
|
||
|
private InkOverlay inkOverlayForSingers;
|
||
|
private RichTextBox handwritingInputBoxForSingers;
|
||
|
private ListBox candidateListBoxForSingers;
|
||
|
|
||
|
|
||
|
private void InitializeHandWritingForSingers()
|
||
|
{
|
||
|
InitializeHandWritingPanelForSingers();
|
||
|
InitializeInkOverlayForSingers();
|
||
|
InitializeHandwritingInputBoxForSingers();
|
||
|
InitializeCandidateListBoxForSingers();
|
||
|
InitializeSpecialButtonsForHandWritingSingers();
|
||
|
}
|
||
|
|
||
|
private void InitializeHandWritingPanelForSingers()
|
||
|
{
|
||
|
|
||
|
handWritingPanelForSingers = new Panel
|
||
|
{
|
||
|
BorderStyle = BorderStyle.FixedSingle,
|
||
|
Visible = false
|
||
|
};
|
||
|
|
||
|
|
||
|
ResizeAndPositionControl(handWritingPanelForSingers, 366, 448, 650, 260);
|
||
|
|
||
|
|
||
|
this.Controls.Add(handWritingPanelForSingers);
|
||
|
}
|
||
|
|
||
|
private void InitializeInkOverlayForSingers()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
|
||
|
inkOverlayForSingers = new InkOverlay(handWritingPanelForSingers);
|
||
|
inkOverlayForSingers.Enabled = false;
|
||
|
inkOverlayForSingers.Ink = new Ink();
|
||
|
inkOverlayForSingers.DefaultDrawingAttributes.Color = Color.Black;
|
||
|
inkOverlayForSingers.DefaultDrawingAttributes.Width = 100;
|
||
|
inkOverlayForSingers.Stroke += new InkCollectorStrokeEventHandler(InkOverlayForSingers_Stroke);
|
||
|
|
||
|
|
||
|
inkOverlayForSingers.Enabled = true;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
Console.WriteLine("Failed to initialize ink overlay for singers: " + ex.Message);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void InkOverlayForSingers_Stroke(object sender, InkCollectorStrokeEventArgs e)
|
||
|
{
|
||
|
|
||
|
RecognizeInk(inkOverlayForSingers, candidateListBoxForSingers);
|
||
|
}
|
||
|
|
||
|
private void InitializeHandwritingInputBoxForSingers()
|
||
|
{
|
||
|
|
||
|
handwritingInputBoxForSingers = new RichTextBox
|
||
|
{
|
||
|
Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular),
|
||
|
Visible = false
|
||
|
};
|
||
|
ResizeAndPositionControl(handwritingInputBoxForSingers, 366, 373, 541, 62);
|
||
|
this.Controls.Add(handwritingInputBoxForSingers);
|
||
|
|
||
|
handwritingInputBoxForSingers.TextChanged += (sender, e) =>
|
||
|
{
|
||
|
string searchText = handwritingInputBoxForSingers.Text;
|
||
|
|
||
|
|
||
|
var searchResults = allArtists.Where(artist => artist.Name.StartsWith(searchText)).ToList();
|
||
|
|
||
|
currentPage = 0;
|
||
|
currentArtistList = searchResults;
|
||
|
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
|
||
|
|
||
|
multiPagePanel.currentPageIndex = 0;
|
||
|
multiPagePanel.LoadSingers(currentArtistList);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
private void InitializeCandidateListBoxForSingers()
|
||
|
{
|
||
|
|
||
|
candidateListBoxForSingers = new ListBox
|
||
|
{
|
||
|
Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular),
|
||
|
Visible = false
|
||
|
};
|
||
|
ResizeAndPositionControl(candidateListBoxForSingers, 350 + 679, 448, 115, 260);
|
||
|
candidateListBoxForSingers.SelectedIndexChanged += CandidateListBoxForSingers_SelectedIndexChanged;
|
||
|
this.Controls.Add(candidateListBoxForSingers);
|
||
|
}
|
||
|
|
||
|
private void CandidateListBoxForSingers_SelectedIndexChanged(object sender, EventArgs e)
|
||
|
{
|
||
|
if (candidateListBoxForSingers.SelectedIndex != -1)
|
||
|
{
|
||
|
string selectedWord = candidateListBoxForSingers.SelectedItem.ToString();
|
||
|
handwritingInputBoxForSingers.Text += selectedWord;
|
||
|
candidateListBoxForSingers.Visible = false;
|
||
|
|
||
|
|
||
|
if (inkOverlayForSingers != null)
|
||
|
{
|
||
|
inkOverlayForSingers.Ink.DeleteStrokes();
|
||
|
handWritingPanelForSingers.Invalidate();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void ShowImageOnPictureBoxHandWritingSingers(string imagePath)
|
||
|
{
|
||
|
|
||
|
Bitmap originalImage = new Bitmap(imagePath);
|
||
|
|
||
|
|
||
|
Rectangle displayArea = new Rectangle(350, 360, 810, 360);
|
||
|
|
||
|
|
||
|
pictureBoxHandWritingSingers.Image = originalImage;
|
||
|
|
||
|
|
||
|
ResizeAndPositionPictureBox(pictureBoxHandWritingSingers, displayArea.X, displayArea.Y, displayArea.Width, displayArea.Height);
|
||
|
|
||
|
pictureBoxHandWritingSingers.Visible = true;
|
||
|
}
|
||
|
|
||
|
private void SetHandWritingForSingersAndButtonsVisibility(bool isVisible)
|
||
|
{
|
||
|
|
||
|
EnableDoubleBuffering(handWritingPanelForSingers);
|
||
|
EnableDoubleBuffering(handwritingInputBoxForSingers);
|
||
|
EnableDoubleBuffering(candidateListBoxForSingers);
|
||
|
EnableDoubleBuffering(pictureBoxHandWritingSingers);
|
||
|
EnableDoubleBuffering(refillButtonHandWritingSingers);
|
||
|
EnableDoubleBuffering(clearButtonHandWritingSingers);
|
||
|
EnableDoubleBuffering(closeButtonForSingers);
|
||
|
|
||
|
|
||
|
handWritingPanelForSingers.Visible = isVisible;
|
||
|
handwritingInputBoxForSingers.Visible = isVisible;
|
||
|
inkOverlayForSingers.Enabled = isVisible;
|
||
|
candidateListBoxForSingers.Visible = isVisible;
|
||
|
pictureBoxHandWritingSingers.Visible = isVisible;
|
||
|
refillButtonHandWritingSingers.Visible = isVisible;
|
||
|
clearButtonHandWritingSingers.Visible = isVisible;
|
||
|
closeButtonForSingers.Visible = isVisible;
|
||
|
|
||
|
if (isVisible)
|
||
|
{
|
||
|
|
||
|
pictureBoxHandWritingSingers.BringToFront();
|
||
|
handWritingPanelForSingers.BringToFront();
|
||
|
handwritingInputBoxForSingers.BringToFront();
|
||
|
candidateListBoxForSingers.BringToFront();
|
||
|
refillButtonHandWritingSingers.BringToFront();
|
||
|
clearButtonHandWritingSingers.BringToFront();
|
||
|
closeButtonForSingers.BringToFront();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void InitializeSpecialButtonsForHandWritingSingers()
|
||
|
{
|
||
|
|
||
|
InitializeRefillButtonHandwritingSingers();
|
||
|
|
||
|
|
||
|
InitializeClearButtonHandWritingSingers();
|
||
|
|
||
|
|
||
|
InitializeCloseButtonForSingers();
|
||
|
}
|
||
|
|
||
|
private void InitializeRefillButtonHandwritingSingers()
|
||
|
{
|
||
|
var data = LoadConfigData();
|
||
|
refillButtonHandWritingCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "refillButtonHandWritingSingers");
|
||
|
var buttonImages = LoadButtonImages(data, "RefillButtonImagesHandWriting");
|
||
|
|
||
|
refillButtonHandWritingSingers = CreateSpecialButton(
|
||
|
"refillButtonHandWritingSingers",
|
||
|
refillButtonHandWritingCoords,
|
||
|
buttonImages.normal,
|
||
|
buttonImages.mouseOver,
|
||
|
buttonImages.mouseDown,
|
||
|
RefillButtonHandWritingSingers_Click
|
||
|
);
|
||
|
}
|
||
|
|
||
|
private void RefillButtonHandWritingSingers_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
handwritingInputBoxForSingers.Text = "";
|
||
|
}
|
||
|
|
||
|
private void InitializeClearButtonHandWritingSingers()
|
||
|
{
|
||
|
var data = LoadConfigData();
|
||
|
clearButtonHandWritingCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "clearButtonHandWritingSingers");
|
||
|
var buttonImages = LoadButtonImages(data, "ClearButtonImagesHandWriting");
|
||
|
|
||
|
clearButtonHandWritingSingers = CreateSpecialButton(
|
||
|
"clearButtonHandWritingSingers",
|
||
|
clearButtonHandWritingCoords,
|
||
|
buttonImages.normal,
|
||
|
buttonImages.mouseOver,
|
||
|
buttonImages.mouseDown,
|
||
|
|
||
|
ClearButtonHandWritingSingers_Click
|
||
|
);
|
||
|
}
|
||
|
|
||
|
private void ClearButtonHandWritingSingers_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
if (this.Controls.Contains(handWritingPanelForSingers) && inkOverlayForSingers != null)
|
||
|
{
|
||
|
inkOverlayForSingers.Ink.DeleteStrokes();
|
||
|
handWritingPanelForSingers.Invalidate();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void InitializeCloseButtonForSingers()
|
||
|
{
|
||
|
var data = LoadConfigData();
|
||
|
closeButtonHandWritingCoords = LoadSpecialButtonCoordinates(data, "SpecialButtonCoordinates", "closeButtonForSingers");
|
||
|
var buttonImages = LoadButtonImages(data, "CloseButtonImagesHandWriting");
|
||
|
|
||
|
closeButtonForSingers = CreateSpecialButton(
|
||
|
"closeButtonForSingers",
|
||
|
closeButtonHandWritingCoords,
|
||
|
buttonImages.normal,
|
||
|
buttonImages.mouseOver,
|
||
|
buttonImages.mouseDown,
|
||
|
CloseButtonForSingers_Click
|
||
|
);
|
||
|
}
|
||
|
|
||
|
private void CloseButtonForSingers_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
|
||
|
this.SuspendLayout();
|
||
|
|
||
|
SetHandWritingForSingersAndButtonsVisibility(false);
|
||
|
handWritingSearchButton.BackgroundImage = handWritingSearchNormalBackground;
|
||
|
|
||
|
this.ResumeLayout();
|
||
|
}
|
||
|
}
|
||
|
}
|