This repository has been archived by the owner on Sep 11, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ColorSelectorControl.cs
116 lines (103 loc) · 4.32 KB
/
ColorSelectorControl.cs
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
using System;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.ColorPick.Picker;
using DevExpress.XtraEditors.Popup;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraTab;
namespace DXSample {
public partial class ColorSelectorControl : XtraUserControl {
Color selectedColor;
public ColorSelectorControl() {
this.selectedColor = Color.Black;
InitializeComponent();
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
InitControls();
}
public Color SelectedColor {
get { return selectedColor; }
set {
Color old = value;
if(SelectedColor == value)
return;
selectedColor = value;
OnSelectedColorChanged(old, SelectedColor);
}
}
protected override void OnMouseWheel(MouseEventArgs e) {
base.OnMouseWheel(e);
InnerColorPickControlBase current = GetCurrentSelector();
if(current != null) current.DoMouseWheel(e);
}
protected InnerColorPickControlBase GetCurrentSelector() {
XtraTabPage page = this.xtraTabControl.SelectedTabPage;
if(page == null || page.Controls.Count == 0) return null;
return page.Controls[0] as InnerColorPickControlBase;
}
void OnSelectedColorChanged(Color oldColor, Color newColor) {
if(SelectedColorChanged != null) SelectedColorChanged(this, new InnerColorPickControlSelectedColorChangedEventArgs(new ColorItem(oldColor), new ColorItem(newColor)));
}
void InitControls() {
InitializeSystemColors();
InitializeWebColors();
SubscribeEvents();
}
void InitializeSystemColors() {
this.systemColorListControl.Colors.AddColorRange(ColorListBoxViewInfo.SystemColors);
}
void InitializeWebColors() {
this.webColorListControl.Colors.AddColorRange(ColorListBoxViewInfo.WebColors);
}
void SubscribeEvents() {
this.colorPickControl.SelectedColorChanged += OnSelectedColorChanged;
this.colorPickControl.MoreButtonClick += OnMoreButtonClick;
this.systemColorListControl.SelectedColorChanged += OnSelectedColorChanged;
this.webColorListControl.SelectedColorChanged += OnSelectedColorChanged;
}
public event EventHandler MoreButtonClick;
void OnMoreButtonClick(object sender, EventArgs e) {
if(MoreButtonClick != null) MoreButtonClick(this, EventArgs.Empty);
DoShowColorDialog();
}
RepositoryItemColorPickEdit properties = null;
RepositoryItemColorPickEdit Properties {
get {
if(properties == null) properties = new RepositoryItemColorPickEdit();
return properties;
}
}
protected virtual void DoShowColorDialog() {
using(FrmColorPicker frm = new FrmColorPicker(Properties)) {
frm.StartPosition = FormStartPosition.CenterScreen;
frm.SelectedColor = this.selectedColor;
if(frm.ShowDialog(GetOwner()) == DialogResult.OK) {
Color color = frm.SelectedColor;
DoSaveColor(color);
}
}
}
protected virtual IWin32Window GetOwner() {
return null;
}
protected virtual void DoSaveColor(Color color) {
Properties.RecentColors.InsertColor(color, 0);
this.colorPickControl.RecentColors.Insert(0, new ColorItem(color));
SelectedColor = color;
}
public Size CalcBestSize() {
Size sz = new Size(Width, CalcBestHeight());
return this.xtraTabControl.CalcSizeByPageClient(sz);
}
const int BorderSize = 2;
protected int CalcBestHeight() {
return this.colorPickControl.CalcBestHeight(10) + 2 * BorderSize;
}
void OnSelectedColorChanged(object sender, InnerColorPickControlSelectedColorChangedEventArgs e) {
SelectedColor = e.NewColor;
}
public event InnerColorPickControlSelectedColorChangedEventHandler SelectedColorChanged;
}
}