
;+ ***********************************************************************
; NAME:
;	CW_SELFIELD
;
; PURPOSE:
;	COUMPOUND WIDGET de selection d'une region
;
; CATEGORY:
;	COMPOUND WIDGET
;
; CALLING SEQUENCE:
;       CW_SELFIELD, Data, Info, Limit
;
; INPUTS:
;       DATA	Tableau 2dimensions contenant l'image 
;       INFO	Structure d'information d'image definie par STR_IMAGE
;       LIMIT   contient les limites existantes en pixels
;		structure type STYR_LIM. elles sont affichees dans le Widget
;
; OUTPUTS:
;      LIMIT  	Nouvelles limites retournees
;
; KEYWORD;
;	SIZE	Dimension de l'image
;
; PROCEDURE:
;	CE COMPOUND WIDGET utilise cw_region pour definir les coordonnees
; d'une region
;      Il visualise en premier l'image puis permet la selection de la region
; EXAMPLE:
;     CW_FIELD,im,str_image, str_limite
;
; MODIFICATION HISTORY:
;	Ecrit par: J Bonmartin le 10/06/98 (bonmartin@obspm.fr)
;			derive de cw_selreg.pro
;	20/11/98	Remplace WINDOW par WIDGET_DRAW et gestion de
;			FIND_DRAW_WIDGET (C Renie@obspm.fr)
;	10/03/99  Wdelete de Id_draw3 (JB), supprime le 28/03/99
;-*******************************************************************

PRO CW_SELFIELD_EVENT, event

COMMON CW_FIELD, Base, Cfile, Dim, Idr, Idd, LIM

ON_ERROR, 2

       If EVENT.ID EQ Idr THEN BEGIN
              Lim.xd= event.xd
              Lim.xf= event.xf
              Lim.yd= event.yd
              Lim.yf= event.yf
		IF Lim.xd GT Lim.xf THEN BEGIN
			TEMP = Lim.xd
			Lim.xd = Lim.xf
			Lim.xf = Temp
		END
		IF Lim.yd GT Lim.yf THEN BEGIN
			TEMP = Lim.yd
			Lim.yd = Lim.yf
			Lim.yf = Temp
		END
              END

	if EVENT.ID EQ IDD THEN WIDGET_CONTROL, base,/DESTROY

END



PRO CW_SELFIELD, Data, Info, Str, GROUP = group, SIZE = Size

; gestion des images 2D/3D (true images)  nov 2008
COMMON CW_FIELD, Base, Cfile, Dim, Idr, Idd, Lim
;***************************************************************
; COMMON find_draw_widget_cache pris dans FIND_DRAW_WIDGET pour assurer
; une gestion correcte de WIDGET_DRAW dans ce fichier
COMMON find_draw_widget_cache,widgets,windows,lastcheck,topbase
;*************************************************************
LIM= Str

	DIM = 256
	IF KEYWORD_SET(SIZE) THEN DIM= Size

	SZ = size(Data)
;		IF sz(1) LE 1 OR sz(2) LE 1 THEN BEGIN
		IF sz(0) ne 2 and sz(0) ne 3 THEN BEGIN
		  r= WIDGET_MESSAGE('Not a 2/3 dimensions ARRAY')
			RETURN & END
        if sz(0) eq 2 then begin
		RAP = FLOAT(Dim)/Sz(1)
	        IM= congrid(Data, Dim, FIX(Sz(2)*Rap),/cubic)
                ysize = FIX(dim*(FLOAT(sz(2))/Sz(1)))
            end else begin
		RAP = FLOAT(Dim)/Sz(2)
	        IM= congrid(Data, 3, Dim, FIX(Sz(3)*Rap),/cubic)
                ysize = FIX(dim*(FLOAT(sz(3))/Sz(2)))
        endelse

If N_ELEMENTS (GROUP) EQ 0 THEN group = 0

Base = WIDGET_BASE (GROUP_LEADER = group, /Column,/align_center, $
		 TITLE='REGION SELECT')
        idr= CW_REGION(base, Data, Dim, Info, Lim)
	idd= WIDGET_BUTTON(base,Value='Done',Uvalue='DONE')

	;affichage de l'image
	MYDEV = !D.name
	SET_PLOT,GETENV('NRH_DEV')
	MULTI = !P.multi
	WDRAW3 = WIDGET_DRAW( base, $
      	RETAIN=2, $
      	UVALUE='WDRAW3', $
	/MOTION_EVENTS, $
	/BUTTON_EVENTS, $
;	Xsize=dim,Ysize=FIX(dim*(FLOAT(sz(2))/Sz(1))) $
	Xsize=dim,Ysize=ysize $
	)
	
WIDGET_CONTROL, base, /REALIZE

	WIDGET_CONTROL, WDRAW3, GET_VALUE=Id_WDRAW3
	WSET, Id_WDRAW3

        if sz(0) eq 2 then TVSCL,im
        if sz(0) eq 3 then TVSCL,im,true=1

	XCEN = FIX(Info.crpixx * Rap)
	YCEN = FIX(Info.crpixy * Rap)
	RAY = FIX(Info.ray * Rap)
	TVCIRCLE,Ray,Xcen,Ycen

XMANAGER, 'CW_SELFIELD', base
;        WDELETE, Id_wdraw3
	SET_PLOT,Mydev
	!P.multi = Multi
	STR = LIM

	WINDOWS = 0	;gestion de FIND_DRAW_WIDGET

END
