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!