New Color Picker in IDL
			
			
		
		
		
			
			
				
				Anonym
				
			
		
			IDL 8.5 has a new color picker, which is not only used in the Widget Property Sheet, it is can also be called by the user for an easy way to programmatically call a dialog to pick a color.
Here is an example of an object that gets placed into a propertysheet that will pick a color:
pro propsheet_color::SetProperty, BASE_COLOR=baseColor, OUTLINE_COLOR=outlineColor, _REF_EXTRA=extra
  if N_Elements(baseColor) eq 3 then begin
    self.baseColor = baseColor
  endif
  
  if N_Elements(outlineColor) eq 3 then begin
    self.outlineColor = outlineColor
  endif
  
  if N_Elements(extra) gt 0 then begin
    self.IDLitComponent::SetProperty, _EXTRA=extra
  endif
end
pro propsheet_color::GetProperty, BASE_COLOR=baseColor, OUTLINE_COLOR=outlineColor, _REF_EXTRA=extra
  
  if Arg_Present(baseColor) then begin
    baseColor = self.baseColor
  endif
  
  if Arg_Present(outlineColor) then begin
    outlineColor = self.outlineColor
  endif
  
  if N_Elements(extra) gt 0 then begin
    self.IDLitComponent::GetProperty, _EXTRA=extra
  endif
  
end
pro propsheet_color__Define
  
  !null = {propsheet_color, $
           inherits IDLitComponent, $
           baseColor:[0b,0b,0b], $
           outlineColor:[0b,0b,0b]}
  
end
To create a widget with this object, call this code (this is very basic; the propertysheet could be embedded into a much fancier widget):
o = Obj_New('propsheet_color')
o.RegisterProperty, 'BASE_COLOR', /COLOR, NAME='Base Color'
o.RegisterProperty, 'OUTLINE_COLOR', /COLOR, NAME='Outline Color'
base = Widget_Base()
propsheet = Widget_Propertysheet(base, VALUE=o)
Widget_Control, base, /REALIZE
This is what the widget looks like when the user clicks on one of the colors:

You can also call the color picker directly from the IDL command line or from code:
result = dialog_colorpicker(TITLE='Pick Fill')

This function comes with a number of keywords to control size, custom colors, add a callback object, etc. 
The return value will be a 3-element byte array representing the Red, Green, and Blue values, respectively.
Go ahead, give it a try next time you need a color!