private IWindowsFormsEditorService editorService;
private Color selected_color;
private bool color_chosen;
+ private Control editor_control = null;
public ColorEditor()
{
if (context != null && provider != null) {
editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (editorService != null) {
- // Create the UI editor control
-
- TabControl tab_control = new TabControl();
- tab_control.Dock = DockStyle.Fill;
- TabPage custom_tab = new TabPage("Custom");
- TabPage web_tab = new TabPage("Web");
- TabPage system_tab = new TabPage("System");
-
- ColorListBox web_listbox = new ColorListBox();
- ColorListBox system_listbox = new ColorListBox();
- web_listbox.Dock = DockStyle.Fill;
- system_listbox.Dock = DockStyle.Fill;
+ if (editor_control == null)
+ editor_control = GetEditorControl (value);
+ editorService.DropDownControl(editor_control);
+ if (color_chosen)
+ return selected_color;
+ else
+ return null;
+ }
+ }
+ return base.EditValue(context, provider, value);
+ }
- web_tab.Controls.Add(web_listbox);
- system_tab.Controls.Add(system_listbox);
+ private Control GetEditorControl (object value)
+ {
+ TabControl tab_control = new TabControl();
+ tab_control.Dock = DockStyle.Fill;
+ TabPage custom_tab = new TabPage("Custom");
+ TabPage web_tab = new TabPage("Web");
+ TabPage system_tab = new TabPage("System");
- SystemColorCompare system_compare = new SystemColorCompare();
- System.Collections.ArrayList color_list = new System.Collections.ArrayList();
- foreach (System.Reflection.PropertyInfo property in typeof(SystemColors).GetProperties(System.Reflection.BindingFlags.Public |System.Reflection.BindingFlags.Static)) {
- Color clr = (Color)property.GetValue(null,null);
- color_list.Add(clr);
- }
- color_list.Sort(system_compare);
- system_listbox.Items.AddRange(color_list.ToArray());
- system_listbox.MouseUp+=new MouseEventHandler(HandleMouseUp);
- system_listbox.SelectedValueChanged+=new EventHandler(HandleChange);
+ ColorListBox web_listbox = new ColorListBox();
+ ColorListBox system_listbox = new ColorListBox();
+ web_listbox.Dock = DockStyle.Fill;
+ system_listbox.Dock = DockStyle.Fill;
- WebColorCompare web_compare = new WebColorCompare();
- color_list = new System.Collections.ArrayList();
- foreach (KnownColor known_color in Enum.GetValues(typeof(KnownColor)))
- {
- Color color = Color.FromKnownColor(known_color);
- if (color.IsSystemColor)
- continue;
- color_list.Add(color);
- }
- color_list.Sort(web_compare);
- web_listbox.Items.AddRange(color_list.ToArray());
- web_listbox.MouseUp+=new MouseEventHandler(HandleMouseUp);
- web_listbox.SelectedValueChanged+=new EventHandler(HandleChange);\r
+ web_tab.Controls.Add(web_listbox);
+ system_tab.Controls.Add(system_listbox);
- CustomColorPicker custom_picker = new CustomColorPicker ();\r
- custom_picker.Dock = DockStyle.Fill;\r
- custom_picker.ColorChanged += new EventHandler (CustomColorPicked);\r
- custom_tab.Controls.Add (custom_picker);
+ SystemColorCompare system_compare = new SystemColorCompare();
+ System.Collections.ArrayList color_list = new System.Collections.ArrayList();
+ foreach (System.Reflection.PropertyInfo property in typeof(SystemColors).GetProperties(System.Reflection.BindingFlags.Public |System.Reflection.BindingFlags.Static)) {
+ Color clr = (Color)property.GetValue(null,null);
+ color_list.Add(clr);
+ }
+ color_list.Sort(system_compare);
+ system_listbox.Items.AddRange(color_list.ToArray());
+ system_listbox.MouseUp+=new MouseEventHandler(HandleMouseUp);
+ system_listbox.SelectedValueChanged+=new EventHandler(HandleChange);
- tab_control.TabPages.Add(custom_tab);
- tab_control.TabPages.Add(web_tab);
- tab_control.TabPages.Add(system_tab);
+ WebColorCompare web_compare = new WebColorCompare();
+ color_list = new System.Collections.ArrayList();
+ foreach (KnownColor known_color in Enum.GetValues(typeof(KnownColor)))
+ {
+ Color color = Color.FromKnownColor(known_color);
+ if (color.IsSystemColor)
+ continue;
+ color_list.Add(color);
+ }
+ color_list.Sort(web_compare);
+ web_listbox.Items.AddRange(color_list.ToArray());
+ web_listbox.MouseUp+=new MouseEventHandler(HandleMouseUp);
+ web_listbox.SelectedValueChanged+=new EventHandler(HandleChange);\r
- if (value != null) {
- Color current_color = (Color)value;
- if (current_color.IsSystemColor)
- {
- system_listbox.SelectedValue = current_color;
- tab_control.SelectedTab = system_tab;
- }
- else if (current_color.IsKnownColor)
- {
- web_listbox.SelectedValue = current_color;
- tab_control.SelectedTab = web_tab;
- }
- selected_color = current_color;
- color_chosen = true;
- }
+ CustomColorPicker custom_picker = new CustomColorPicker ();\r
+ custom_picker.Dock = DockStyle.Fill;\r
+ custom_picker.ColorChanged += new EventHandler (CustomColorPicked);\r
+ custom_tab.Controls.Add (custom_picker);
+ tab_control.TabPages.Add(custom_tab);
+ tab_control.TabPages.Add(web_tab);
+ tab_control.TabPages.Add(system_tab);
- editorService.DropDownControl(tab_control);
- if (color_chosen) {
- return selected_color;
- }
- else {
- return null;
- }
+ if (value != null) {
+ Color current_color = (Color)value;
+ if (current_color.IsSystemColor)
+ {
+ system_listbox.SelectedValue = current_color;
+ tab_control.SelectedTab = system_tab;
}
+ else if (current_color.IsKnownColor)
+ {
+ web_listbox.SelectedValue = current_color;
+ tab_control.SelectedTab = web_tab;
+ }
+ selected_color = current_color;
+ color_chosen = true;
}
- return base.EditValue(context, provider, value);
+
+ tab_control.Height = 216; // the height of the custom colors tab
+ return tab_control;
}
private void HandleChange(object sender, EventArgs e)
\r
protected override void OnMouseUp (MouseEventArgs e)\r
{\r
- if (highlighting) {\r
+ if (highlighting && this.ClientRectangle.Contains (e.X, e.Y)) {\r
if (ColorChanged != null)\r
ColorChanged (colors[y / 24, x / 24], EventArgs.Empty);\r
highlighting = false;\r