154 lines
5.6 KiB
C#
154 lines
5.6 KiB
C#
|
using System.Collections.ObjectModel;
|
||
|
using Eto.Forms;
|
||
|
using SixLabors.Fonts;
|
||
|
|
||
|
namespace ClockExtension
|
||
|
{
|
||
|
public class ClockDialog : Dialog
|
||
|
{
|
||
|
public ClockDialog(ClockData data,FontCollection collection,string extPath)
|
||
|
{
|
||
|
Button changeColor = new Button {Text="Change Color"};
|
||
|
changeColor.Click+=(sender,e)=>{
|
||
|
using(var ccd = new ColorDialog())
|
||
|
{
|
||
|
ccd.Color = data.ForeColor;
|
||
|
ccd.ColorChanged+=(sender,e)=>{
|
||
|
data.ForeColor=ccd.Color;
|
||
|
};
|
||
|
ccd.ShowDialog(this);
|
||
|
}
|
||
|
};
|
||
|
Button saveBtn = new Button {Text="Save"};
|
||
|
saveBtn.Click +=(sender,e)=>{
|
||
|
data.Save();
|
||
|
this.Close();
|
||
|
};
|
||
|
CheckBox enabled=new CheckBox{Text="Enable Clock"};
|
||
|
enabled.Checked = data.EnableClock;
|
||
|
enabled.CheckedChanged+=(sender,e)=>{
|
||
|
data.EnableClock=enabled.Checked.GetValueOrDefault();
|
||
|
};
|
||
|
NumericStepper fontSize=new NumericStepper{MinValue=6,MaxValue=65535,Value = data.FontSize,DecimalPlaces=2};
|
||
|
|
||
|
|
||
|
|
||
|
fontSize.ValueChanged+= (sender,e)=>{
|
||
|
data.FontSize = (float)fontSize.Value;
|
||
|
};
|
||
|
NumericStepper x=new NumericStepper {MinValue=0,MaxValue=65535,Value=data.X};
|
||
|
x.ValueChanged +=(sender,e)=>{
|
||
|
data.X=(int)x.Value;
|
||
|
};
|
||
|
NumericStepper y=new NumericStepper {MinValue=0,MaxValue=65535,Value=data.Y};
|
||
|
y.ValueChanged +=(sender,e)=>{
|
||
|
data.Y=(int)y.Value;
|
||
|
};
|
||
|
|
||
|
GroupBox gbox=new GroupBox{Text="Clock Position"};
|
||
|
DynamicLayout lytg=new DynamicLayout();
|
||
|
lytg.BeginVertical();
|
||
|
lytg.BeginHorizontal();
|
||
|
lytg.Add(x,true);
|
||
|
lytg.Add(y,true);
|
||
|
lytg.EndHorizontal();
|
||
|
lytg.EndVertical();
|
||
|
|
||
|
gbox.Content=lytg;
|
||
|
ObservableCollection<string> fonts = new ObservableCollection<string>();
|
||
|
Title="Clock Settings";
|
||
|
TextBox timeFormat=new TextBox();
|
||
|
timeFormat.PlaceholderText="yyyy/MM/dd HH:mm:ss";
|
||
|
timeFormat.Text=data.DateFormat;
|
||
|
timeFormat.TextChanged+=(sender,e)=>{
|
||
|
if(string.IsNullOrWhiteSpace(timeFormat.Text))
|
||
|
{
|
||
|
data.DateFormat=timeFormat.PlaceholderText;
|
||
|
}else{
|
||
|
data.DateFormat=timeFormat.Text;
|
||
|
}
|
||
|
};
|
||
|
DropDown down = new DropDown();
|
||
|
down.Tag = data;
|
||
|
down.DataStore = fonts;
|
||
|
Button browseFont=new Button {Text="Add Font"};
|
||
|
browseFont.Click +=(sender,e)=>{
|
||
|
using(var ofd=new OpenFileDialog())
|
||
|
{
|
||
|
ofd.MultiSelect=true;
|
||
|
ofd.Filters.Add(new FileFilter("True Type Font",".ttf"));
|
||
|
if(ofd.ShowDialog(this)==DialogResult.Ok)
|
||
|
{
|
||
|
foreach(var fname in ofd.Filenames){
|
||
|
string fontDir = Path.Combine(extPath,"Fonts");
|
||
|
Directory.CreateDirectory(fontDir);
|
||
|
string fontPath=Path.Combine(fontDir,Path.GetFileName(fname));
|
||
|
File.Copy(fname,fontPath);
|
||
|
collection.Add(fontPath);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
DropDownRefresh(collection,fonts,down);
|
||
|
};
|
||
|
DynamicLayout lyt=new DynamicLayout();
|
||
|
lyt.BeginVertical();
|
||
|
lyt.BeginHorizontal();
|
||
|
lyt.Add(enabled);
|
||
|
lyt.EndHorizontal();
|
||
|
lyt.EndBeginVertical();
|
||
|
lyt.BeginHorizontal();
|
||
|
lyt.Add(down,true);
|
||
|
DropDownRefresh(collection,fonts,down);
|
||
|
if(data.FontIndex < fonts.Count)
|
||
|
{
|
||
|
down.SelectedIndex=data.FontIndex;
|
||
|
}else{
|
||
|
down.SelectedIndex=0;
|
||
|
}
|
||
|
lyt.Add(fontSize);
|
||
|
lyt.Add(browseFont);
|
||
|
|
||
|
lyt.EndHorizontal();
|
||
|
lyt.EndBeginVertical();
|
||
|
lyt.BeginHorizontal();
|
||
|
lyt.Add(timeFormat,true);
|
||
|
lyt.EndHorizontal();
|
||
|
lyt.EndBeginVertical();
|
||
|
lyt.BeginHorizontal();
|
||
|
lyt.Add(gbox,true);
|
||
|
lyt.EndHorizontal();
|
||
|
lyt.EndBeginVertical();
|
||
|
lyt.BeginHorizontal();
|
||
|
lyt.Add(changeColor,true);
|
||
|
lyt.Add(saveBtn,true);
|
||
|
lyt.EndHorizontal();
|
||
|
lyt.EndVertical();
|
||
|
this.Content=lyt;
|
||
|
this.Resizable=true;
|
||
|
}
|
||
|
public void SelectFont(object? sender,EventArgs e)
|
||
|
{
|
||
|
if(sender ==null)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
var dd=(DropDown)sender;
|
||
|
var coll=(ObservableCollection<string>)dd.DataStore;
|
||
|
var selectedFont=(ClockData)dd.Tag;
|
||
|
if(dd.SelectedIndex > -1){
|
||
|
selectedFont.FontName = coll[dd.SelectedIndex];
|
||
|
selectedFont.FontIndex=dd.SelectedIndex;
|
||
|
}
|
||
|
}
|
||
|
public void DropDownRefresh(FontCollection collection,ObservableCollection<string> fonts,DropDown dd)
|
||
|
{
|
||
|
dd.SelectedIndexChanged-=SelectFont;
|
||
|
fonts.Clear();
|
||
|
foreach(var font in collection.Families)
|
||
|
{
|
||
|
fonts.Add(font.Name);
|
||
|
}
|
||
|
dd.SelectedIndexChanged+=SelectFont;
|
||
|
}
|
||
|
}
|
||
|
}
|