forked from ReClassNET/ReClass.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathColorBox.cs
More file actions
130 lines (110 loc) · 2.46 KB
/
Copy pathColorBox.cs
File metadata and controls
130 lines (110 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.ComponentModel;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
namespace ReClassNET.UI
{
public partial class ColorBox : UserControl, ISettingsBindable
{
private const int DefaultWidth = 123;
private const int DefaultHeight = 20;
private PropertyInfo property;
private Settings source;
private bool updateTextBox = true;
private Color color;
public Color Color
{
get => color;
set
{
// Normalize the color because Color.Red != Color.FromArgb(255, 0, 0)
value = Color.FromArgb(value.ToArgb());
if (color != value)
{
color = value;
colorPanel.BackColor = value;
if (updateTextBox)
{
valueTextBox.Text = ColorTranslator.ToHtml(value);
}
WriteSetting();
}
updateTextBox = true;
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string SettingName
{
get => property?.Name;
set { property = typeof(Settings).GetProperty(value); ReadSetting(); }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Settings Source
{
get => source;
set { source = value; ReadSetting(); }
}
public ColorBox()
{
InitializeComponent();
}
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
base.SetBoundsCore(x, y, DefaultWidth, DefaultHeight, specified);
}
private void ReadSetting()
{
if (property != null && source != null)
{
var value = property.GetValue(source);
if (value is Color newColor)
{
Color = newColor;
}
}
}
private void WriteSetting()
{
if (property != null && source != null)
{
property.SetValue(source, Color);
}
}
private void valueTextBox_TextChanged(object sender, EventArgs e)
{
try
{
var str = valueTextBox.Text;
if (!str.StartsWith("#"))
{
str = "#" + str;
}
var newColor = ColorTranslator.FromHtml(str);
updateTextBox = false;
Color = newColor;
}
catch
{
}
}
private void colorPanel_Click(object sender, EventArgs e)
{
using (var cd = new ColorDialog())
{
cd.Color = Color;
if (cd.ShowDialog() == DialogResult.OK)
{
Color = cd.Color;
}
}
}
private void colorPanel_Paint(object sender, PaintEventArgs e)
{
var rect = colorPanel.ClientRectangle;
rect.Width--;
rect.Height--;
e.Graphics.DrawRectangle(Pens.Black, rect);
}
}
}