Language > Widgets > About Property Sheet Widgets > Multiple Properties Example

# Multiple Properties Example

The following example shows how to create a property sheet for multiple components.

Enter the following text in the IDL Editor:

; ExMultiSheet.pro

;

; Provides an example of a property sheet that is

; associated with more than one object. In this case,

; multiple IDLitVisAxis objects are used, with random

; colors and hidden cells, just for fun.

PRO PropertyEvent, event

IF (event.type EQ 0) THEN BEGIN ; Value changed.

PRINT, 'Changed: ', event.component

PRINT, ' ', event.identifier, ': ', $

WIDGET_INFO(event.id, COMPONENT = event.component, $

PROPERTY_VALUE = event.identifier)

ENDIF ELSE BEGIN ; Selection changed.

PRINT, 'Selected: ' + event.identifier

ENDELSE

END

PRO CleanupEvent, baseID

WIDGET_CONTROL, baseID, GET_UVALUE = objects

FOR i = 0, (N_ELEMENTS(objects) - 1) DO $

OBJ_DESTROY, objects[i]

END

PRO ExMultiSheet_event, event

ps = WIDGET_INFO(event.id, $

FIND_BY_UNAME = 'PropSheet')

geo_tlb = WIDGET_INFO(event.id, /GEOMETRY)

WIDGET_CONTROL, ps, $

SCR_XSIZE = geo_tlb.xsize - (2*geo_tlb.xpad), $

SCR_YSIZE = geo_tlb.ysize - (2*geo_tlb.ypad)

END

PRO ExMultiSheet

tlb = WIDGET_BASE(/COLUMN, /TLB_SIZE_EVENTS, $

KILL_NOTIFY = 'CleanupEvent')

; Create some columns.

oComp1 = OBJ_NEW('IDLitVisAxis', $

COLOR = RANDOMU(s1, 3)*256, $

TEXT_COLOR = RANDOMU(s7, 3)*256)

oComp2 = OBJ_NEW('IDLitVisAxis', $

COLOR = RANDOMU(s2, 3)*256, $

TEXT_COLOR = RANDOMU(s8, 3)*256)

oComp3 = OBJ_NEW('IDLitVisAxis', $

COLOR = RANDOMU(s3, 3)*256, $

TEXT_COLOR = RANDOMU(s9, 3)*256)

oComp4 = OBJ_NEW('IDLitVisAxis', $

COLOR = RANDOMU(s4, 3)*256, $

TEXT_COLOR = RANDOMU(s10, 3)*256)

oComp5 = OBJ_NEW('IDLitVisAxis', $

COLOR = RANDOMU(s5, 3)*256, $

TEXT_COLOR = RANDOMU(s11, 3)*256)

oComp6 = OBJ_NEW('IDLitVisAxis', $

COLOR = RANDOMU(s6, 3)*256, $

TEXT_COLOR = RANDOMU(s12, 3)*256)

oComps = [oComp1, oComp2, oComp3, $

oComp4, oComp5, oComp6]

WIDGET_CONTROL, tlb, SET_UVALUE = oComps

; Hide some properties.

oComp2->SetPropertyAttribute, 'color', /HIDE

oComp2->SetPropertyAttribute, 'ticklen', /HIDE

oComp5->SetPropertyAttribute, 'ticklen', /HIDE

; Create the property sheet.

prop = WIDGET_PROPERTYSHEET(tlb, $

UNAME = 'PropSheet', $

VALUE = oComps, $

FONT = 'Courier New*16', $

XSIZE = 100, YSIZE = 24, $

/FRAME, EVENT_PRO = 'PropertyEvent')

; Activate the widgets.

WIDGET_CONTROL, tlb, /REALIZE

XMANAGER, 'ExMultiSheet', tlb, /NO_BLOCK

END

Save the program as `ExMultiSheet.pro`, then compile and run it. A property sheet displaying the properties of six axes is displayed:

The gray boxes indicate properties that have been hidden. To remove the gray boxes, comment out the code after the following comment:

; Hide some properties.

The text is displayed at 16 points in the Courier New font. To view the property sheet with the text displayed in the default size and font, comment out the following segment of the property sheet creation code:

FONT = "Courier New*16", $

To see the text displayed in a font and size of your choosing, edit the same segment to include a different font name and size.