Routines (alphabetical) > Routines: C > CW_PALETTE_EDITOR

# CW_PALETTE_EDITOR

The CW_PALETTE_EDITOR function creates a compound widget to display and edit color palettes. The palette editor is a base that contains a drawable area to display the color palette, a set of vectors that represent the palette and an optional histogram.

Note: Two routines associated with the CW_PALETTE_EDITOR compound widget — CW_PALETTE_EDITOR_GET and CW_PALETTE_EDITOR_SET — do not create compound widgets themselves, but act on an existing CW_PALETTE_EDITOR widget.

## Syntax

Result = CW_PALETTE_EDITOR (Parent [, DATA=array] [, FRAME=width] [, HISTOGRAM=vector] [, /HORIZONTAL] [, SELECTION=[start, end]] [, TAB_MODE=value] [, UNAME=string] [, UVALUE=value] [, XSIZE=width] [, YSIZE=height] )

## Return Value

This function returns the widget ID of the newly created palette editor.

## Arguments

### Parent

The widget ID of the parent widget for the new palette editor.

## Keywords

### DATA

A 3x256 byte array containing the initial color values for Red, Green and Blue channels. The value supplied can also be a 4x256 byte array containing the initial color values and the optional Alpha channel. The value supplied can also be an IDLgrPalette object reference. If an IDLgrPalette object reference is supplied it is used internally and is not destroyed on exit. If an object reference is supplied the ALPHA keyword to the CW_PALETTE_EDITOR_SET routine can be used to supply the data for the optional Alpha channel.

### FRAME

The value of this keyword specifies the width of a frame (in pixels) to be drawn around the borders of the widget. Note that this keyword is only a “hint” to the toolkit, and may be ignored in some instances. The default is no frame.

### HISTOGRAM

A 256 element byte vector containing the values for the optional histogram curve.

### HORIZONTAL

Set this keyword for a horizontal layout for the compound widget. This consists of the controls to the right of the display area. The default is a vertical layout with the controls below the display area.

### SELECTION

The selection is a two element vector defining the starting and ending point of the selection region of color indexes. The default is [0,255].

### TAB_MODE

Set this keyword to one of the values shown in the table below to determine how the widget hierarchy can be navigated using the Tab key. The TAB_MODE setting is inherited by lower-level bases and child widgets unless it is explicitly set on an individual widget.

Note: It is not possible to tab to disabled (SENSITIVE=0) or hidden (MAP=0) widgets.

Valid settings are:

Value | Description
0 | Disable navigation onto or off of the widget. This is the default. Child widgets automatically inherit the tab mode of the parent base as described in Inheriting the TAB_MODE Value.
1 | Enable navigation onto and off of the widget.
2 | Navigate only onto the widget.
3 | Navigate only off of the widget.

Note: In widget applications on the UNIX platform, the Motif library controls what widgets are brought into and released from focus using tabbing. The TAB_MODE keyword value is always zero, and any attempt to change it is ignored when running a widget application on the UNIX platform. Tabbing behavior may vary significantly between UNIX platforms; do not rely on a particular behavior being duplicated on all UNIX systems.

### UNAME

Set this keyword to a string that can be used to identify the widget. You can associate a name with each widget in a specific hierarchy, and then use that name to query the widget hierarchy and get the correct widget ID.

To query the widget hierarchy, use the WIDGET_INFO function with the FIND_BY_UNAME keyword. The UNAME should be unique to the widget hierarchy because the FIND_BY_UNAME keyword returns the ID of the first widget with the specified name.

### UVALUE

The ‘user value’ to be assigned to the widget. Each widget can contain a user-specified value of any data type and organization. This value is not used by the widget in any way, but exists entirely for the convenience of the IDL programmer. This keyword allows you to set this value when the widget is first created. If UVALUE is not present, the widget's initial user value is undefined.

### XSIZE

The width of the drawable area in pixels. The default width is 256.

### YSIZE

The height of the drawable area in pixels. The default height is 256.

## WIDGET_CONTROL Keywords for Palette Editor

The widget ID returned by this compound widget is actually the ID of the compound widget's base widget. This means that many keywords to the WIDGET_CONTROL and WIDGET_INFO routines that affect or return information on base widgets can be used with this compound widget (e.g., UNAME, UVALUE).

### GET_VALUE

Set this keyword to a named variable to contain the current value of the widget. A 3xn (RGB) or 4xn (i.e., RGB and ALPHA) array containing the palette is returned.

The value of a widget can be set with the SET_VALUE keyword to this routine.

### SET_VALUE

Sets the value of the specified palette editor compound widget. This widget accepts a 3xn (RGB) or 4xn (i.e., RGB and ALPHA) array representing the value of the palette to be set. Another type of argument accepted is an IDLgrPalette object reference. If an IDLgrPalette object reference is supplied it is used internally and is not destroyed on exit.

## Widget Events Returned by the CW_PALETTE_EDITOR Widget

CW_PALETTE_EDITOR generates events when the selection region is changed and when the color palette has been modified. There are variations of the palette editor event structure depending on the specific event being reported. All of these structures contain the standard three fields (ID, TOP, and HANDLER). The different palette editor event structures are described below.

#### Selection Moved

This is the type of structure returned when one of the vertical bars that define the selection region is moved by a user.

{ CW_PALETTE_EDITOR_SM, ID:0L, TOP:0L, HANDLER:0L, SELECTION:[0,255]}

SELECTION indicates a two element vector defining the starting and ending point of the selection region of color indexes.

#### Palette Edited

This is the type of structure returned when the user has modified the color palette.

{ CW_PALETTE_EDITOR_PM, ID:0L, TOP:0L, HANDLER:0L}

The value of the palette editor will need to be retrieved (i.e., WIDGET_CONTROL, GET_VALUE) in order to determine the extent of the actual user modification.

## Using the CW_PALETTE_EDITOR

### Graphics Area Components

#### Reference Color bar

A gray scale color bar is displayed at the top of the graphics area for reference purposes.

#### Palette Colorbar

A color bar containing a display of the current palette is displayed below the reference color bar.

#### Channel and Histogram Display

The palette channel vectors are displayed below the palette colorbar. The Red channel is displayed in red, the Green channel in green, the Blue channel in blue, and the optional Alpha channel in purple. The optional Histogram vector is displayed in Cyan.

An area with a white background represents the current selection, with gray background representing the area outside of the current selection. Yellow drag handles are an additional indicator of the selection endpoints. These selection endpoints represent the range for some editing operations. In addition, cursor X,Y values and channel pixel values at the cursor location are displayed in a status area below the graphics area.

### Interactive Capabilities

#### Color Space

A droplist allows selection of RGB, HSV or HLS color spaces. RGB is the default color space.

Note: Regardless of the color space in use, the color vectors retrieved with the GET_VALUE keyword to widget control are always in the RGB color space.

#### Editing Mode

A droplist allows selection of the editing mode. Freehand is the default editing mode.

Note: Unless noted below, editing operations apply only to the channel vectors currently selected for editing and apply only to the portion of the vectors within the selection indicators.

Editing Mode | Description
Freehand | The user can click and drag in the graphics area to draw a new curve. Editable channel vectors will be modified to use the new curve for that part of the X range within the selection that was drawn in Freehand mode.
Line Segment | A click, drag and release operation defines the start point and end point of a line segment. Editable channel vectors will be modified to use the new curve for that part of the X range within the selection that was drawn in Line Segment mode.
Barrel Shift | Click and drag operations in the horizontal direction cause the editable curves to be shifted right or left, with the portion which is shifted off the end of selection area wrapping around to appear on the other side of the selection area. Only the horizontal component of drag movement is used.
Slide | Click and drag operations in the horizontal direction cause the editable curves to be shifted right or left. Unlike the Barrel Shift mode, the portion of the curves shifted off the end of the selection area does not wrap around. Only the horizontal component of drag movement is used.
Stretch | Click and drag operations in the horizontal direction cause the editable curves to be compressed or expanded. Only the horizontal component of drag movement is used.

The following table describes the buttons that provide editing operations but do not require cursor input:

Button | Operation
Ramp | Causes the selected part of the editable curves to be replaced with a linear ramp from 0 to 255.
Smooth | Causes the selected part of the editable curves to be smoothed.
Posterize | Causes the selected part of the editable curves to be replaced with a series of steps.
Reverse | Causes the selected part of the editable curves to be reversed in the horizontal direction.
Invert | Causes the selected part of the editable curves to be flipped in the vertical direction.
Duplicate | Causes the selected part of the editable curves to be compressed by 50% and duplicated to produce two contiguous copies of the channel vectors within the initial selection.
Load PreDefined | Leads to additional choices of pre-defined palettes. Loading a pre-defined palette replaces only the selected portion of the editable color channels, respecting of the settings of the selection endpoints and editable checkboxes. This allows loading only a single channel or only a portion of a pre-defined palette.

#### Channel Display and Edit

A row of checkboxes allows the user to indicate which channels of Red, Green, Blue and the optional Alpha channel should be displayed. A second row of checkboxes allows the user to indicate which channels should be edited by the current editing operation. The checkboxes for the Alpha channel will be sensitive only if an Alpha channel is loaded.

#### Zoom

Four buttons allow the user to zoom the display of the palette:

Button | Description
| | | Zooms to show the current selection.
+ | Zooms in 50%
- | Zooms out 100%
1:1 | Returns the display to the full palette

#### Scrolling of the Palette Window

When the palette is zoomed to a scale greater than 1:1 the scroll bar at the bottom of the graphics area can be used to view a different part of the palette.

## Version History

5.3 | Introduced
6.1 | Added TAB_MODE keyword

## See Also

CW_PALETTE_EDITOR_GET, CW_PALETTE_EDITOR_SET, IDLgrPalette