Nitin Katiyar wrote:
> Hi.
> I wish to convert a GUI procedure writtern in IDL ,to its equilvalent
> function so that I am
> able to return values back to the calling procedure. Since the
> procedure doesnt return the values , I need the function to do the
> same.
>
> I am posting the procedure listing along with this mail.Kindly someone
> please
> tell me the way to convert it to a correspondidng function so that I
> can return
> the input variable back to calling procedure.
>
> TIA
> -shishir
Hi
you have to declare the procedure wid_input as function.
The return statement must be behind the XMANAGER.
The return value must be defined outside of the GET_UVALUE structure of
the base, because this is destroyed at the moment the XMANAGER is killed.
I prefer pointer, here is a small example
PRO wid5_event,event
WIDGET_CONTROL,event.top,GET_UVALUE=x
cmd=WIDGET_INFO(event.id,/UNAME)
CASE cmd OF
'QUIT' : WIDGET_CONTROL,event.top,/DESTROY
'PRINT': BEGIN
id=WIDGET_INFO(event.top,FIND_BY_UNAME='TEXT')
WIDGET_CONTROL,id,SET_VALUE=(*x).value
(*x).value='Goodby'
END
ELSE:
ENDCASE
END
function wid5
x={value:'Hello'}
x=PTR_NEW(x,/NO_COPY)
id_base=WIDGET_BASE(ROW=3)
id_PRINT=WIDGET_BUTTON(id_base,VALUE='PRINT',UNAME='PRINT')
id_quit=WIDGET_BUTTON(id_base,VALUE='QUIT',UNAME='QUIT')
id_text=WIDGET_TEXT(id_base,VALUE='',UNAME='TEXT')
WIDGET_CONTROL,id_base,/REALIZE,SET_UVALUE=x
XMANAGER,'wid5',id_base
result=*x
ptr_free,x
return,result
END
regards
Reimar
>
>
> *---------Listing of wid_input.pro--------------*
>
> pro wid_input_event, ev
> WIDGET_CONTROL, ev.id, GET_VALUE=input
> if(input eq 'OK') then $
> WIDGET_CONTROL, ev.top, /DESTROY $
> else if(input eq 'Cancel') then $
> Result = DIALOG_MESSAGE('You have not entered the Discharge Value',
> /INFORMATION , $
> TITLE='Warning')$
> else WIDGET_CONTROL, ev.id, SET_VALUE=''
> end
>
> pro wid_input,type ;basically type is passed as a parameter to this
> procedure
> type='injection' ;here i have taken a default value to run it alone.
> ;type='pumping'
>
> case type of
> 'pumping':begin
> base = WIDGET_BASE(XOFFSET=5 ,YOFFSET=5 ,SCR_XSIZE=180 ,SCR_YSIZE=100
> $
> ,TITLE='Discharge Input' ,SPACE=3 ,XPAD=3 ,YPAD=3
> ,TLB_FRAME_ATTR=1)
> field = CW_FIELD(base, TITLE = "Enter the Discharge Value",
> /FRAME,/RETURN_EVENTS,XSIZE=4)
> button1 = WIDGET_BUTTON(base, VALUE='OK', UVALUE='Ok',XOFFSET=20
> ,YOFFSET=40 ,SCR_XSIZE=60 $
> ,SCR_YSIZE=20,/ALIGN_CENTER)
> button2 = WIDGET_BUTTON(base, VALUE='Cancel',
> UVALUE='CANCEL',XOFFSET=90 ,YOFFSET=40 $
> ,SCR_XSIZE=60 ,SCR_YSIZE=20,/ALIGN_CENTER)
> end
> 'injection':begin
> base = WIDGET_BASE(XOFFSET=5 ,YOFFSET=5 ,SCR_XSIZE=320 ,SCR_YSIZE=140
> $
> ,TITLE='Injection Well Input' ,SPACE=3 ,XPAD=3 ,YPAD=3
> ,TLB_FRAME_ATTR=1,/COLUMN)
> field1 = CW_FIELD(base, TITLE = "Enter the Discharge Value",
> /FRAME,/RETURN_EVENTS,XSIZE=4)
> field2 = CW_FIELD(base, TITLE = "Enter the Concentration Value",
> /FRAME,/RETURN_EVENTS,XSIZE=4)
> Bbase = WIDGET_BASE(base,XOFFSET=5 ,YOFFSET=80 ,SCR_XSIZE=320
> ,SCR_YSIZE=30 $
> ,SPACE=3 ,XPAD=3 ,YPAD=3 ,TLB_FRAME_ATTR=1)
> button1 = WIDGET_BUTTON(Bbase, VALUE='OK', UVALUE='Ok',XOFFSET=70
> ,YOFFSET=5 ,SCR_XSIZE=60 $
> ,SCR_YSIZE=20,/ALIGN_CENTER)
> button2 = WIDGET_BUTTON(Bbase, VALUE='Cancel',
> UVALUE='CANCEL',XOFFSET=140 ,YOFFSET=5 $
> ,SCR_XSIZE=60 ,SCR_YSIZE=20,/ALIGN_CENTER)
> end
> ENDCASE
> WIDGET_CONTROL, base, SET_UVALUE=field
> ;WIDGET_CONTROL, field, SET_VALUE=''
> WIDGET_CONTROL, base, /REALIZE
> XMANAGER, 'wid_input', base,/JUST_REG
> end
--
Reimar Bauer
Institut fuer Stratosphaerische Chemie (ICG-I)
Forschungszentrum Juelich
email: R.Bauer@fz-juelich.de
------------------------------------------------------------ -------
a IDL library at ForschungsZentrum Juelich
http://www.fz-juelich.de/icg/icg-i/idl_icglib/idl_lib_intro. html
============================================================ =======
|