1; this file is part of GDL 2; 30. Oct 2020 Gilles Duvert 3; test ? most of all and every widget available and some functionalities. 4; 5function myBitmap 6 return,[ $ 7 [000B, 000B, 000B, 000B], $ 8 [000B, 000B, 000B, 000B], $ 9 [000B, 000B, 000B, 000B], $ 10 [128B, 255B, 001B, 000B], $ 11 [224B, 255B, 007B, 000B], $ 12 [240B, 000B, 015B, 000B], $ 13 [056B, 000B, 028B, 000B], $ 14 [024B, 000B, 024B, 000B], $ 15 [028B, 000B, 056B, 000B], $ 16 [012B, 000B, 048B, 000B], $ 17 [012B, 000B, 048B, 000B], $ 18 [012B, 000B, 048B, 000B], $ 19 [012B, 000B, 048B, 000B], $ 20 [012B, 000B, 240B, 031B], $ 21 [012B, 000B, 240B, 031B], $ 22 [012B, 000B, 112B, 029B], $ 23 [028B, 000B, 184B, 026B], $ 24 [024B, 000B, 088B, 029B], $ 25 [056B, 000B, 188B, 026B], $ 26 [240B, 000B, 095B, 029B], $ 27 [224B, 255B, 175B, 026B], $ 28 [128B, 255B, 085B, 029B], $ 29 [000B, 176B, 170B, 026B], $ 30 [000B, 112B, 085B, 029B], $ 31 [000B, 176B, 170B, 026B], $ 32 [000B, 112B, 085B, 029B], $ 33 [000B, 176B, 170B, 026B], $ 34 [000B, 240B, 255B, 031B], $ 35 [000B, 240B, 255B, 031B], $ 36 [000B, 000B, 000B, 000B], $ 37 [000B, 000B, 000B, 000B], $ 38 [000B, 000B, 000B, 000B] $ 39 ] 40end 41pro myplot,tr,x,y,b,conn,poly,tag=tag, list=list 42 if n_elements(poly) eq 0 then poly=0 43 if n_elements(conn) gt 0 then doconn=1 else doconn=0 44 if n_elements(b) gt 0 then dob=1 else dob=0 45; colors 46 n=n_elements(tr)/3 47 48 p=randomu(seed,n,/long) 49 50 PLOT, x, y,psym=1,/NODATA,/iso,xst=1,yst=1 51 52 for i=0,n-1 do polyfill,[x[tr[0,i]],x[tr[1,i]],x[tr[2,i]],x[tr[0,i]]],[y[tr[0,i]],y[tr[1,i]],y[tr[2,i]],y[tr[0,i]]],color=p[i] 53 54 if (dob) then begin plots, x[b],y[b],thick=4 & plots, x[b[0]],y[b[0]],thick=4,/cont & end 55 56 if (doconn) then begin 57 i=poly ;,n_elements(x)-(n_elements(r)/2)-1 do begin 58 sub=conn[conn[i] : conn[i+1]-1] 59 polyfill,x[sub],y[sub],color=0,/line_fill,spacing=0.2,ori=33,thick=2 60 endif 61 62 nn=n_elements(x) 63 if (keyword_set(list)) then begin 64 for i=0,nn-1 do begin 65 print,i 66 sub=conn[conn[i] : conn[i+1]-1] 67 ns=n_elements(sub) 68 for j=0,ns-3 do begin 69 print,sub[0],sub[(j+1) mod ns],sub[(j+2) mod ns] 70 endfor 71 endfor 72 73 endif 74 75 if (keyword_set(tag)) then for i=0,n_elements(x)-1 do xyouts,x[i],y[i],i,ali=1,chars=2 76 77end 78 79 80pro exit_gui,ev 81 widget_control,ev.top,/DESTROY 82end 83pro cleanup_xmanager, id 84 print,"Cleaning up called by xmanager..." 85 widget_control,id,/DESTROY 86end 87pro cleanup, id 88 print,"Cleaning up called by base widget..." 89 widget_control,id,/DESTROY 90end 91pro cleanup_control, id 92 print,"Cleaning up called by widget_control..." 93 widget_control,id,/DESTROY 94end 95pro i_am_realized, id 96 print,"Widget "+string(id)+" is realized now." 97end 98pro base_event_base, id 99 print,"event in bases base" 100 help,id 101end 102pro base_event, id 103 print,"event in top base" 104 help,id 105end 106pro slider_killed,id 107 print,"slider "+string(id)+" was killed" 108end 109pro button_killed,id 110; print,"button "+string(id)+" was killed" 111end 112pro draw_context,ev 113 contextBase = WIDGET_INFO(ev.TOP, FIND_BY_UNAME = 'drawContext') 114 print,contextbase,ev.top,ev.id,ev.x,ev.y 115 ; Display the context menu. 116 WIDGET_DISPLAYCONTEXTMENU, ev.ID, ev.X, ev.Y, contextBase 117 end 118pro deletedraw,ev 119 tobedeleted = WIDGET_INFO(ev.TOP, FIND_BY_UNAME = 'drawToBeDeleted') 120 widget_control,tobedeleted,/destroy 121end 122 123pro list_event,event 124toto=["A","list","created","with","WIDGET_LIST","YSIZE=3"] 125print,toto[event.index] 126end 127pro handle_Event,ev 128common mycount,count 129help,ev,/str 130if tag_names(ev, /structure_name) eq 'WIDGET_KILL_REQUEST' then begin 131 acceptance=dialog_message(dialog_parent=ev.id,"I Do want to close the window", /CANCEL, /DEFAULT_NO,/QUESTION) ; +strtrim(ev.id,2)) 132 if acceptance eq "Yes" then begin 133 widget_control,ev.id,tlb_kill_request_events=0 ; remove blocking kill 134 widget_control,ev.id,/destroy 135 endif 136 137endif 138 139widget_control,ev.id,get_uvalue=uv 140 widget_control,ev.top,get_uvalue=topuv 141 if n_elements(uv) gt 0 then begin 142 if (strlen(tag_names(ev,/structure_name)) le 1) then begin 143 print,"unhandled compound widget event" 144 return 145 endif 146 if ~ISA(uv,"STRUCT") then begin 147 print,"currently unhandled event" 148 return 149 endif 150 151 print,"uvalue.type=",uv.type 152 case uv.type of 153 'file': begin 154 widget_control,ev.id,get_value=value ;& print,value 155 case value of 156 "Y": widget_control,ev.id,set_value="N" 157 "N": widget_control,ev.id,set_value="Y" 158 else: return 159 endcase 160 end 161 'data': begin 162 widget_control,ev.id,get_value=value 163 widget_control,topuv[0],set_value=value 164 widget_control,topuv[1],set_value=value 165 end 166 'test_check': begin 167 check=widget_info(ev.id,/button_set) 168 if (check) then begin 169 print,"unsetting checkmark..." 170 widget_control,ev.id,set_button=0 171 widget_control,ev.id,set_value="entry 3 (unchecked)" 172 endif else begin 173 print,"setting checkmark..." 174 widget_control,ev.id,set_button=1 175 widget_control,ev.id,set_value="entry 3 (checked)" 176 endelse 177 end 178 'quit': widget_control,ev.top,/DESTROY 179 else: begin 180 print, "(other, not treated, event: ok)" 181 return 182 end 183 184 endcase 185 endif 186 print, "(unhandled event: ok)" 187end 188pro doMbar,mbar,fontname 189 menu = widget_button(mbar,VALUE="Simple Menu",font=fontname,tooltip='TOOOLTIP!') ; 3 190ex = widget_button(menu,VALUE="Exit",EVENT_PRO="exit_gui") ; 4 191siz= widget_button(menu,VALUE="Resize (error)",EVENT_PRO="resize_gui") ; 5 192;buttons as menu buttons 193 fileID = Widget_Button(mbar, Value='Complicated Menu') ; 6 194 saveID = Widget_Button(fileID, Value='submenu 1', /MENU,font=fontname,xsize=100) 195 button = Widget_Button(saveID, Value='entry 1 (inactive)', UNAME='POSTSCRIPT',sensitive=0,font=fontname) 196 button = Widget_Button(saveID, Value='entry 2', UNAME='PDF') 197 raster = Widget_Button(saveID, Value='submenu 2', /MENU) 198 199 button = Widget_Button(raster, Value='entry 1', UNAME='RASTER_BMP') 200 button = Widget_Button(raster, Value='entry 2', UNAME='RASTER_GIF') 201 button = Widget_Button(raster, Value='entry 3', UNAME='RASTER_JPEG') 202 button = Widget_Button(raster, Value='entry 4', UNAME='RASTER_PNG') 203 button = Widget_Button(raster, Value='entry 5', UNAME='RASTER_TIFF') 204 imraster = Widget_Button(saveID, Value='submenu 3', /MENU) 205 button = Widget_Button(imraster, Value='entry 1',UNAME='IMAGEMAGICK_BMP') 206 button = Widget_Button(imraster, Value='entry 2',UNAME='IMAGEMAGICK_GIF') 207 button = Widget_Button(imraster, Value='entry 3',UNAME='IMAGEMAGICK_JPEG') 208 button = Widget_Button(imraster, Value='entry 4',UNAME='IMAGEMAGICK_PNG') 209 button = Widget_Button(imraster, Value='entry 5', UNAME='IMAGEMAGICK_TIFF') 210 button = Widget_Button(fileID, Value='entry 1', /Separator, UNAME='SAVECOMMANDS') 211 button = Widget_Button(fileID, Value='entry 2', UNAME='RESTORECOMMANDS') 212 button = Widget_Button(fileID, Value='entry 3 (unchecked)', /Separator, /check ,UVALUE={vEv,'test_check',[0,0]}) 213 bitmap = Widget_Button(mbar, Value='bitmap menus') 214 ;; this one is allowed by IDL only on WINDOWS but possible with GDL 215 ;;button = Widget_Button(bitmap, Value='a bitmap', image=myBitmap(), UNAME='BUT',/menu) 216 button = Widget_Button(bitmap, Value=myBitmap(), UNAME='BUT',/menu) 217 button = Widget_Button(button, Value=myBitmap(), UNAME='BUT') 218 end 219 220pro test_widgets,table,help=help,nocanvas=nocanvas,notree=notree,block=block,fontname=fontname,present=present,_extra=extra 221 common mycount,count 222 if (n_elements(present) eq 0) then present=['TEXT','LIST','DRAW','SLIDER','BUTTON','TABLE','TREE','LABEL','DROPLIST','COMBOBOX','BASE'] 223count=0 224title='GDL Widget Examples' 225DEFSYSV, '!gdl', exists=isGDL 226if ~keyword_set(fontname) then begin 227 fontname=(isgdl)?"Die Nasty Bold 10":'-altsys-die nasty-bold-r-normal--0-100-94-0-p-0-ascii-0' 228 title+=' (Using Fixed Font Monospace)' 229endif else title+=' (Using '+fontname+')' 230if ~keyword_set(block) then block=0 231if keyword_set(help) then begin 232print,"useage: test_widgets[,table][,/help][,/nocanvas][,/notree]" 233print,"Will display some examples of currently available widgets" 234print,"if table is passed as argument and is a structure, TABLE tab will show the" 235print,"elements of the structure as buttons in a scrolled panel" 236print,"options: /nocanvas removes the widget_draw" 237print," /notree remove the tree widget" 238print," fontname=""Helvetica Narrow 32"" to change a test text font." 239print," present=[XXX,YYY] where XXX and YY are one or more of the panel types below:" 240print," 'TEXT','LIST','DRAW','SLIDER','BUTTON','TABLE','TREE','LABEL','DROPLIST','COMBOBOX','BASE' " 241return 242endif 243 244;base for listing contents of tables and to show selected files 245nrows=n_elements(table) ; passed table 246if ( n_elements(table) eq 0 or size(table,/type) ne 8 ) then begin 247 tbltemplate={table2,string:'a very very very long string ',real:33.33,double:8.0080808D,another:'another',yanother:'very long string'} 248; make a long table of nrows 249 nrows=50 250 table=replicate(tbltemplate,nrows) 251endif 252 253ev = {vEv,type:'',pos:[0,0]} 254 255 256;Create a base widget. 257 258base = WIDGET_BASE(/col,MBAR=mbar,title=title,event_pro='base_event_nok',kill_notify='cleanup',/tlb_kill_request_events,/tlb_size_events) ; ---> PROBLEM: ,/tlb_size_events) ;,/scroll) 259doMbar,mbar,fontname 260;mysize=widget_info(base,string_size='012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234') 261 262; define a tabbed base that contains everything: 263label=widget_label(base,value='to best mimic IDL`s widgets, call GDL with option "--widget-compat" ',/align_left) 264label=widget_label(base,value='Test calling me with options like "test_widgets,/col,font="Arial 32",/base_align_right" ',/align_left) 265label=widget_label(base,value=' or like "test_widgets,/col,x_scroll=400,y_scroll=400" ',/align_left) 266label=widget_label(base,value=' or like "test_widgets,/col,select="TEXT" (see test_widgets,/help) ',/align_left) 267 268tabbed_base = widget_tab( base, frame=12) ;, scr_xsize=400, scr_ysize=400);, multiline=6) 269 270offy=0 271; TEST: empty base to play with. use with option " present='test' " 272if total(strcmp('TEST',present,/fold)) then begin 273 test_base = widget_base( tabbed_base, TITLE="TEST",xsize=1500,ysize=1500,x_scroll=500,y_scroll=500,_extra=extra) & offy=0 274endif 275 276;TEXT 277if total(strcmp('TEXT',present,/fold)) then begin 278 text_base = widget_base( tabbed_base, TITLE="TEXT",_extra=extra) & offy=0 279 label=widget_label(yoff=offy,text_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=20 ; 280 label=widget_label(yoff=offy,text_base,/align_center,value='Various Sizes, no event should be issued') & offy+=20 ; 281 text1=widget_text(yoff=offy,text_base,VALUE=["xsize=30,/scroll, (no ysize), follow base alignment","Line 2","line 3","line 4","line 5"],/scroll, xsize=30) & offy+=30 ; 282 text1=widget_text(yoff=offy,text_base,VALUE=["xsize=20, no ysize, follow base alignment","Line 2","line 3","line 4","line 5"],XSIZE=20) & offy+=30 ; 283 text1=widget_text(yoff=offy,text_base,VALUE=["ysize=3, fancyFont, follow base alignment","Line 2","line 3","line 4","line 5"],$ 284 font=fontname, ysize=3) & offy+=30 ; 285 text1=widget_text(yoff=offy,text_base,VALUE=["xsize=20, ysize=3,/scroll, follow base alignment","Line 2","line 3","line 4","line 5"],$ 286 xsize=20, ysize=3,/scroll) & offy+=30 ; 287 text1=widget_text(yoff=offy,text_base,VALUE=["idem but with scr_xsize=200,scr_ysize=50"," a non editable LONG line using /wrap option..."],$ 288 scr_xsize=200,scr_ysize=50,/wrap) & offy+=20 ; 289 label=widget_label(yoff=offy,text_base,/align_center,value='Various Positioning, no event should be issued') & offy+=20 ; 290 text3=widget_text(yoff=offy,text_base,VALUE=["Caractères Accentués ça ü û, frame=10,left"],frame=10,/align_left) & offy+=50 ; 291 text3=widget_text(yoff=offy,text_base,VALUE=["fancy center aligned, frame=10"],/align_center,frame=10,font=fontname) & offy+=50 ; 292 text3=widget_text(yoff=offy,text_base,VALUE=["follows alignment, frame=10"],frame=10) & offy+=50 ; 293 294 label=widget_label(yoff=offy,text_base,/align_center,value='EVENTS') & offy+=20 ; 295 text1=widget_text(yoff=offy,text_base,VALUE=["a non editable LONG line using /wrap option in a restricted xsize=20,ysize=5 panel (sizes guaranteed only if an alignment has been defined), this is not finished there is still text below...","a non editable LONG line using /wrap option in a restricted xsize=20,ysize=5 panel (sizes guaranteed only if an alignment has been defined), this is not finished there is still text below...","a non editable LONG line using /wrap option in a restricted xsize=20,ysize=5 panel (sizes guaranteed only if an alignment has been defined), this is not finished there is still text below..."],$ 296 xsize=20, ysize=5,/wrap,/all_events) & offy+=50 ; 297 label=widget_label(yoff=offy,text_base,value='Is EDITABLE + ALL_EVENTS: input change widget content and events are generated') & offy+=20 ; 298 text1=widget_text(yoff=offy,text_base,VALUE=["EDITABLE, all_events","Line 2","line 3","line 4","line 5"],/EDITABLE,/ALL_EVENTS) & offy+=30 ; 299 label=widget_label(yoff=offy,text_base,value='Is NOT EDITABLE + ALL_EVENTS: no change but events are generated') & offy+=20 ; 300 text1=widget_text(yoff=offy,text_base,VALUE=["NOT EDITABLE, all_events","Line 2","line 3","line 4","line 5"],EDITABLE=0,/ALL_EVENTS) & offy+=30 ; 301 label=widget_label(yoff=offy,text_base,value='Is only EDITABLE: input change widget content and <Return> generates an event.') & offy+=20 ; 302 text1=widget_text(yoff=offy,text_base,VALUE=["EDITABLE","Line 2","line 3","line 4","line 5"],/EDITABLE,ALL_EVENTS=0) & offy+=30 ; 303endif 304 305 if total(strcmp('LIST',present,/fold)) then begin 306;LIST 307 list_base = widget_base( tabbed_base, TITLE="LISTs",_extra=extra) & offy=0 ; 308 label=widget_label(yoff=offy,list_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 309 label=widget_label(yoff=offy,list_base,value='3 lines, placement inherited') & offy+=10 ; 310 list=widget_list(yoff=offy,list_base,value=["Simple rather long text of widget_list, ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST", "ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST", "ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST"],/multiple,YSIZE=3) & offy+=100 ; 311 label=widget_label(yoff=offy,list_base,value='idem,fancy,framed(32 pix)') & offy+=10 ; 312 list=widget_list(yoff=offy,list_base,value=["FANCY FONT long text widget_list, ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST", "ysize=3","created","with","WIDGET_LIST","widget_list, ysize=3","created","with","WIDGET_LIST"],/multiple,YSIZE=3,frame=32,font=fontname) & offy+=200 ; 313 label=widget_label(yoff=offy,list_base,value='3 lines, placement inherited, xsize=12 chars (scroll)') & offy+=10 ; 314 list=widget_list(yoff=offy,list_base,value=["widget_list, ysize=3","created","with","WIDGET_LIST"],/multiple,YSIZE=3,xsize=12) & offy+=150 ; 315 label=widget_label(yoff=offy,list_base,value='1 line, placement inherited, xsize=2 chars (scroll)') & offy+=10 ; 316 list=widget_list(yoff=offy,list_base,value=["widget_list, ysize=3","created","with","WIDGET_LIST"],/multiple,xsize=2) & offy+=150 ; 317 label=widget_label(yoff=offy,list_base,value='no size,fancy,framed(32 pix)') & offy+=10 ; 318 list=widget_list(yoff=offy,list_base,value=["widget_list","(no YSIZE, frame=32)"],frame=32,font=fontname) & offy+=50 ; 319 label=widget_label(yoff=offy,list_base,value='centered,frame=1',/align_center) & offy+=10 ; 320 list=widget_list(yoff=offy,list_base,value=["(centered)"," frame=1"],/align_center,frame=1) & offy+=50 ; 321 label=widget_label(yoff=offy,list_base,value='basic') & offy+=10 ; 322 list=widget_list(yoff=offy,list_base,value=["default"," basic"]) & offy+=50 ; 323 label=widget_label(yoff=offy,list_base,value='centered,basic',/align_center) & offy+=10 ; 324 list=widget_list(yoff=offy,list_base,value=["(centered)","basic"],/align_center) & offy+=10 ; 325 endif 326 327 if total(strcmp('DRAW',present,/fold)) then begin 328;DRAW_BASE: Attach 256 x 256 draw widgets. Offsets 256 pix 329 draw_base = widget_base( tabbed_base, TITLE="DRAW",_extra=extra) & offy=0 ;,YSIZE=1000,XSIZE=1000,Y_SCROLL=300);XPAD=25,YPAD=50,SPACE=30) 330 label=widget_label(yoff=offy,draw_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 331; populate 332 if ~keyword_set(nocanvas) then begin 333 draw = WIDGET_DRAW(yoff=offy,draw_base, XSIZE = 1800, YSIZE = 600,x_scroll_size=256,y_scroll_size=256,frame=20) & offy+=300 ; 334 draw2 = WIDGET_DRAW(yoff=offy,draw_base, xoff=100, xsize=400,ysize=400,x_scroll_size=200,y_scroll_size=200,/button_events,keyboard_events=1,/motion_events) & offy+=250 ; 335 tmp=widget_label(xoff=200,yoff=offy,draw_base,value="below, has tooltip and has a popup") & offy+=10 ; 336 337 draw3 = WIDGET_DRAW(xoff=200,yoff=offy,draw_base,/BUTTON_EVENTS, xsize=100,ysize=100,tooltip="WIGDET_DRAW",EVENT_PRO = 'draw_context',uname='drawToBeDeleted') & offy+=100 ; 338 contextBase = WIDGET_BASE(yoff=offy,draw3, /CONTEXT_MENU,col=2,TITLE="ZZZZZZZZZZZZZZ",UNAME = 'drawContext') & offy+=10; 339 b1 = WIDGET_BUTTON(yoff=offy,contextBase, VALUE = 'Delete this draw widget', /SEPARATOR, EVENT_PRO = 'DeleteDraw') 340 b2 = WIDGET_BUTTON(contextBase, VALUE = 'just an entry') & offy+=10; 341 b2 = WIDGET_BUTTON(contextBase, VALUE = 'just an entry, checked', /check) & offy+=10 ; 342 widget_control,b2,/set_button 343 b2 = WIDGET_BUTTON(contextBase, VALUE = 'just an entry') & offy+=10; 344 b3 = WIDGET_BUTTON(contextBase, VALUE = 'a menu', /menu) & offy+=10; 345 b4 = WIDGET_BUTTON(b3 , VALUE = 'an item.') & offy+=10; 346 b5 = WIDGET_BUTTON(b3 , VALUE = 'Delete this draw widget (again)', /SEPARATOR, EVENT_PRO = 'DeleteDraw') 347 348 tmp=widget_label(yoff=offy,draw_base,value="below, is centered, has tooltip and popup") & offy+=10 ; 349 draw4 = WIDGET_DRAW(yoff=offy,draw_base,/BUTTON_EVENTS, xsize=100,ysize=100,tooltip="Centered WIGDET_DRAW",/align_center,EVENT_PRO = 'draw_context',uname='drawToBeDeleted2') & offy+=10 ; 350 end else begin 351 dummy=widget_label(yoff=offy,draw_base, value="WIDGET_DRAW not shown, (/NOCANVAS option)", font=fontname) 352 endelse 353 endif 354 if total(strcmp('SLIDER',present,/fold)) then begin 355; SLIDER_BASE: 356 slider_baseh = widget_base( tabbed_base, TITLE="H_SLIDER",_extra=extra) & offy=0 ; 357 label=widget_label(yoff=offy,slider_baseh,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 358;SLIDERs 359 tmp=widget_label(xoff=150,yoff=offy,slider_baseh,value="fancy, framed, horizontal, align:inherit") & offy+=10 ; 360 sl1=widget_slider(xoff=150,yoff=offy,slider_baseh,MIN=0,MAX=100,TITLE="FRAME=100+DRAG+HORIZONTAL+FANCY",kill_notify='slider_killed',/DRAG,FRAME=100,font=fontname) & offy+=200 ; 361 tmp=widget_label(yoff=offy,slider_baseh,value="fancy, simple, horizontal, align:inherit") & offy+=10 ; 362 sl3=widget_slider(yoff=offy,slider_baseh,MIN=0,MAX=1000,TITLE="SIMPLE,HORIZONTAL",font=fontname) & offy+=100 ; 363 tmp=widget_label(yoff=offy,slider_baseh,value="no label, horizontal, align:inherit") & offy+=10 ; 364 sl3=widget_slider(yoff=offy,slider_baseh,MIN=0,MAX=1000) & offy+=30 ; 365 tmp=widget_label(yoff=offy,slider_baseh,value="except the following no label slider, centered",/align_center) & offy+=10 ; 366 sl3=widget_slider(yoff=offy,slider_baseh,MIN=0,MAX=1000,/align_center) & offy+=10 ; 367 368 369 slider_basev = widget_base( tabbed_base, TITLE="V_SLIDER",_extra=extra) & offy=0 370 label=widget_label(yoff=offy,slider_basev,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 371;SLIDERs 372 sl=widget_slider(yoff=offy,slider_basev,MIN=0,MAX=100,TITLE="FRAME=100+VERTICAL",kill_notify='slider_killed',ysize=300,xsize=200,FRAME=20,/VERT,font=fontname) & offy+=400 ; 373 sl3=widget_slider(yoff=offy,slider_basev,MIN=0,MAX=1000,TITLE="SIMPLE,VERTICAL",font=fontname,/vert) & offy+=200 ; 374 tmp=widget_label(yoff=offy,slider_basev,value="except the following no label slider, centered",/align_center) & offy+=10 ; 375 sl3=widget_slider(yoff=offy,slider_basev,MIN=0,MAX=1000,/vert,/align_center) & offy+=10 ; 376 377 endif 378 if total(strcmp('BUTTON',present,/fold)) then begin 379; BUTTON_BASE: 380 button_base00 = widget_base( tabbed_base, TITLE="BUTTONs", COL=2, SPACE=20) & offy=10 381 ; label=widget_label(yoff=offy,button_base00,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 382 button_base01 = widget_base(button_base00, TITLE="BUTTONs",_extra=extra) & offy=10 383 button_base02 = widget_base(button_base00, TITLE="BUTTONs",_extra=extra) & offy=10 384; BUTTONs 385 tmp=widget_label(yoff=offy,button_base01,value="Simple Button") & offy+=10 ; 386 tmp=widget_button(yoff=offy,button_base01,value="Simple Button") & offy+=10 ; 387 tmp=widget_label(yoff=offy,button_base01,value="Framed Simple Button") & offy+=10 ; 388 tmp=widget_button(yoff=offy,button_base01,value="Framed 10 px Simple Button",frame=10) & offy+=10 ; 389 tmp=widget_label(yoff=offy,button_base01,value="Bitmap Simple Button") & offy+=10 ; 390 tmp=widget_button(yoff=offy,button_base01,value=myBitmap()) & offy+=10 ; 391 tmp=widget_label(yoff=offy,button_base01,value="Fancy Simple Button") & offy+=10 ; 392 tmp=widget_button(yoff=offy,button_base01,value="Fancy Button",font=fontname) & offy+=10 ; 393 tmp=widget_label(yoff=offy,button_base01,value="Exclusive base, framed 30") & offy+=10 ; 394 radio=widget_base(yoff=offy,button_base01,/EXCLUSIVE,COL=1,frame=30) & offy+=150 ; 395 rb1=widget_button(radio,VALUE="button in EXCLUSIVE base 1",uvalue={vEv,'rb1',[8,0]}, font=fontname) 396 rb2=widget_button(radio,VALUE="button in EXCLUSIVE base 2",uvalue={vEv,'rb2',[9,0]}) 397 398 tmp=widget_label(yoff=offy,button_base01,value="Non-Exclusive base,simple look") & offy+=10 ; 399 400 check=widget_base(yoff=offy,button_base01,/NONEXCLUSIVE,COL=1) & offy+=100 ; 401 cb1=widget_button(check,VALUE="button in NONEXCLUSIVE base 1",uvalue={vEv,'cb1',[81,0]}, font=fontname) 402 cb2=widget_button(check,VALUE="button in NONEXCLUSIVE base 2",uvalue={vEv,'cb2',[12,0]}) 403 404 tmp=widget_label(yoff=offy,button_base01,value='2 CW_BGROUP /COL in a framed base') & offy+=10 ; 405 406 bg=widget_base(yoff=offy,button_base01,/ROW,Frame=10) & offy+=300 ; 407 values = ['One', 'Two', 'Three', 'Four', 'Five','Six'] 408 409 bgroup1 = CW_BGROUP(yoff=offy,bg, values, /COLUMN, /EXCLUSIVE, $ 410 LABEL_TOP='Exclusive', FRAME=10,SET_VALUE=3) 411 bgroup2 = CW_BGROUP(yoff=offy,bg, values, /COLUMN, /NONEXCLUSIVE, $ 412 LABEL_TOP='Nonexclusive', FRAME=10, SET_VALUE=[1,0,1,0,1]) 413 414 tmp=widget_label(yoff=offy,button_base02,value="A menu button frame 10") & offy+=10 ; 415 menu=widget_button(yoff=offy,button_base02,value="Menu",/menu,frame=10) & offy+=100 ; 416 entry1=widget_button(menu,value="entry 1") 417 entry2=widget_button(menu,value="entry 2") 418 419 tmp=widget_label(yoff=offy,button_base02,value="A menu button with Bitmap, frame 30") & offy+=10 ; 420 menu=widget_button(yoff=offy,button_base02,value=myBitmap(),/menu,frame=30,tooltip='A TOOOOOLTIP!!!') & offy+=100 ; 421 entry1b=widget_button(menu,value=myBitmap(),/menu) 422 entry1=widget_button(menu,value='submenu',/menu) 423 entry2b=widget_button(entry1b,value=myBitmap(),/menu) 424 entry2=widget_button(entry1,value="submenu",/menu) 425 entry3b=widget_button(entry2b,value=myBitmap()) 426 entry3=widget_button(entry2,value='entry') 427 428 tmp=widget_label(yoff=offy,button_base02,value="A fancy menu button") & offy+=10 ; 429 menu=widget_button(yoff=offy,button_base02,value="Menu",/menu,font=fontname) & offy+=100 ; 430 entry1=widget_button(menu,value="entry 1",font=fontname) 431 entry2=widget_button(menu,value="entry 2") 432 433 tmp=widget_label(yoff=offy,button_base02,value="ALIGNMENTS",/align_center,/fram) & offy+=10 ; 434 base1=widget_base(yoff=offy,button_base02,/COL,/fram,xsize=400) & offy+=10 ; 435 tmp=widget_label(yoff=offy,base1,value="Row Base 1") 436 base11=widget_base(yoff=offy,base1,/ROW,/fram) 437 tmp=widget_label(base11,value="inherited") 438 but=widget_button(base11,value="some button, no align",xsize=200) 439 tmp=widget_label(yoff=offy,base1,value="Row Base 2") & offy+=10 ; 440 base12=widget_base(yoff=offy,base1,/ROW,/fram) & offy+=10 ; 441 tmp=widget_label(base12,value="/align_left",/align_left) & offy+=10 ; 442 but=widget_button(base12,value="some button, left-aligned",xsize=200,/align_left) & offy+=10 ; 443 tmp=widget_label(yoff=offy,base1,value="Row Base 3") 444 base13=widget_base(yoff=offy,base1,/ROW,/fram) 445 tmp=widget_label(base13,value="/align_right") & offy+=10 ; 446 but=widget_button(base13,value="some button, right-aligned",xsize=200,/align_right) & offy+=10 ; 447 base2=widget_base(yoff=offy,button_base02,/COL,/fram) & offy+=10 ; 448 tmp=widget_label(base2,value="Column Base") & offy+=10 ; 449 tmp=widget_label(base2,value="A Button inheriting base orientation: text centered") & offy+=10 ; 450 but=widget_button(base2,value="some button, no align",xsize=200) & offy+=10 ; 451 tmp=widget_label(base2,value="A left-aligned button",/align_left) & offy+=10 ; 452 but=widget_button(base2,value="some button, left-aligned",xsize=300,/align_left) & offy+=10 ; 453 tmp=widget_label(base2,value="A right-aligned button") & offy+=10 ; 454 but=widget_button(base2,value="some button, right-aligned",xsize=200,/align_right) & offy+=10 ; 455endif 456 457if total(strcmp('TABLE',present,/fold)) then begin 458; TABLE 459 table_base = widget_base( tabbed_base, TITLE="TABLEs",_extra=extra) & offy=0 460 label=widget_label(yoff=offy,table_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 461; 462 mytable1=widget_table(yoff=offy,table_base,value=dist(7),xsize=5,ysize=5,/editable,/all_events,font=fontname,frame=30) & offy+=200 ; 463;to be implemented! ;widget_control,mytable1,/editable,use_table_sel=[1,1,4,4] 464 widget_control,mytable1,edit_cell=[0,0] 465 widget_control,mytable1,background_color=[255,255,0],use_table_sel=[1,1,4,4] 466 nrows=n_elements(table) 467 subsize=nrows < 6 468 mytable2=widget_table(yoff=offy,table_base,value=table[0:subsize-1],/row_major,row_labels='',column_labels=tags,column_width=60,/resizeable_columns,y_scroll_size=40,/disjoint,/all_events,alignment=2,frame=50) & offy+=10 ; 469endif 470 471if total(strcmp('TREE',present,/fold)) then begin 472; TREE 473 tree_base = widget_base( tabbed_base, TITLE="TREE",_extra=extra) & offy=0 474 label=widget_label(yoff=offy,tree_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 475 if ~keyword_set(notree) then begin 476 racine = widget_tree(yoff=offy,tree_base,ysize=100) & offy+=90 ; 477 wtRoot = widget_tree(racine, VALUE='GDL', /folder, /draggable, /drop_events,ysize=200) 478 feuille_11 = WIDGET_TREE(wtRoot, VALUE='is', $ 479 UVALUE='LEAF') 480 branche_12 = WIDGET_TREE(wtRoot, VALUE='...', $ 481 /FOLDER, /EXPANDED) 482 feuille_121 = WIDGET_TREE(branche_12, VALUE='with', $ 483 UVALUE='LEAF',/CHECKBOX,CHECKED=1,/NO_COPY, TOOLTIP='an unuseful tootip...') 484 feuille_122 = WIDGET_TREE(branche_12, VALUE='a lot of', $ 485 UVALUE='LEAF') 486 feuille_13 = WIDGET_TREE(wtRoot, VALUE='widgets', $ 487 UVALUE='LEAF') 488 feuille_14 = WIDGET_TREE(wtRoot, VALUE='now', $ 489 UVALUE='LEAF') 490 racine = widget_tree(yoff=offy,tree_base,frame=50) & offy+=10 ; 491 wtRoot = widget_tree(racine, VALUE='GDL', /folder, /draggable, /drop_events) 492 feuille_11 = WIDGET_TREE(wtRoot, VALUE='is', $ 493 UVALUE='LEAF') 494 branche_12 = WIDGET_TREE(wtRoot, VALUE='...', $ 495 /FOLDER, /EXPANDED) 496 feuille_121 = WIDGET_TREE(branche_12, VALUE='with', $ 497 UVALUE='LEAF') 498 feuille_122 = WIDGET_TREE(branche_12, VALUE='a lot of', $ 499 UVALUE='LEAF') 500 feuille_13 = WIDGET_TREE(wtRoot, VALUE='widgets', $ 501 UVALUE='LEAF') 502 feuille_14 = WIDGET_TREE(wtRoot, VALUE='now', $ 503 UVALUE='LEAF') 504 endif 505endif 506 507 508 509 510if total(strcmp('LABEL',present,/fold)) then begin 511; LABEL 512 label_base = widget_base( tabbed_base, TITLE="LABELs",_extra=extra) & offy=0 513 label=widget_label(yoff=offy,label_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 514; 515 label1=widget_label(yoff=offy,label_base,VALUE="Sunken-frame label, inherits centering",/align_center) & offy+=10 ; 516 label1=widget_label(yoff=offy,label_base,VALUE="Sunken-frame label",uvalue={vEv,'lll',[1,-1]},/sunken_frame,frame=33) & offy+=10 ; 517 label2=widget_label(yoff=offy,label_base,VALUE="Framed 33 pix Fancy label, inherits centering",/align_center) & offy+=100 ; 518 label2=widget_label(yoff=offy,label_base,VALUE="Framed Fancy label",uvalue={vEv,'lll',[1,-1]},font=fontname,frame=33) & offy+=100 ; 519 label2=widget_label(yoff=offy,label_base,VALUE="frame=1 xsize=100 of a long FANCY text herits centering",/align_center) & offy+=100 ; 520 label2=widget_label(yoff=offy,xsize=100,label_base,VALUE="xSIZE=100 of a long FANCY text",uvalue={vEv,'lll',[1,-1]},font=fontname,/frame) & offy+=100 ; 521 label3=widget_label(yoff=offy,label_base,VALUE="simple label, herits centering",uvalue={vEv,'lll',[1,-1]}) & offy+=10 ; 522 label3=widget_label(yoff=offy,label_base,VALUE="simple label, centered",/align_center,uvalue={vEv,'lll',[1,-1]}) & offy+=10 ; 523 524 label3=widget_label(yoff=offy,label_base,VALUE='500 pixels wide, herits centering',/align_center) & offy+=10 ; 525 label3=widget_label(yoff=offy,xsize=500,label_base,VALUE='I herit centering but am 300 pix long',uvalue={vEv,'lll',[1,-1]}) & offy+=10 ; 526 label3=widget_label(yoff=offy,label_base,VALUE='same, framed 1',/align_center) & offy+=10 ; 527 label3=widget_label(yoff=offy,xsize=500,label_base,VALUE='my frame herits centering but I am centered in my xsize=500',/frame,uvalue={vEv,'lll',[1,-1]}) & offy+=10 ; 528 529 label3=widget_label(yoff=offy,label_base,VALUE='500 pixels wide, right-centered',/align_center) & offy+=10 ; 530 label3=widget_label(yoff=offy,xsize=500,label_base,VALUE='I am right-aligned',/align_right) & offy+=10 ; 531 label3=widget_label(yoff=offy,label_base,VALUE='same, framed 1',/align_center) & offy+=10 ; 532 label3=widget_label(yoff=offy,xsize=500,label_base,VALUE='I am right-aligned in my xsize=500',/align_right,/frame) & offy+=10 ; 533 534endif 535 536if total(strcmp('DROPLIST',present,/fold)) then begin 537; DROPLIST 538 droplist_base = widget_base( tabbed_base, TITLE="DROPLISTs",_extra=extra) & offy=0 539 label=widget_label(yoff=offy,droplist_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10 ; 540; 541 droplist=widget_droplist(yoff=offy,droplist_base,VALUE=["droplist","created","with","WIDGET_DROPLIST","(no YSIZE)"],title="A fancy droplist (framed)",font=fontname,frame=10) & offy+=50 ; 542 droplist=widget_droplist(yoff=offy,droplist_base,VALUE=["droplist","created","with","WIDGET_DROPLIST","(no YSIZE)"],title="A fancy droplist",font=fontname) & offy+=50 ; 543 droplist=widget_droplist(yoff=offy,droplist_base,VALUE=["A","B","C"],title="A 1 char droplist") & offy+=20 ; 544 droplist=widget_droplist(yoff=offy,droplist_base,VALUE=["droplist","no Title","created","with","WIDGET_DROPLIST","(no YSIZE)"]) & offy+=30 ; 545 droplist=widget_droplist(yoff=offy,droplist_base,VALUE=["Centered droplist","no Title","created","with","WIDGET_DROPLIST","(no YSIZE)"],/align_center) & offy+=30 ; 546endif 547if total(strcmp('COMBOBOX',present,/fold)) then begin 548;COMBO 549combobox_base = widget_base( tabbed_base, TITLE="COMBOBOXs",_extra=extra) & offy=0 550label=widget_label(yoff=offy,combobox_base,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10; 551; 552combo=widget_combobox(xoff=100,yoff=offy,combobox_base,VALUE=["A fancy combobox (framed)","not editable","created","with","WIDGET_COMBOBOX"],frame=30,font=fontname) & offy+=100; 553combo=widget_combobox(yoff=offy,combobox_base,VALUE=["A combobox","editable","created","with","WIDGET_COMBOBOX"],/editable) & offy+=30; 554combo=widget_combobox(yoff=offy,combobox_base,VALUE=["A ysize=100 combobox","editable","created","with","WIDGET_COMBOBOX"],YSIZE=100) & offy+=120; 555combo=widget_combobox(yoff=offy,combobox_base,VALUE=["Same, centered combobox","editable","created","with","WIDGET_COMBOBOX"],YSIZE=100,/align_center) & offy+=10; 556endif 557if total(strcmp('BASE',present,/fold)) then begin 558 ;MISC. BASES 559 bases_base0 = widget_base( tabbed_base , TITLE="BASEs",event_pro='base_event_base',_extra=extra) & offy=0 560 label=widget_label(yoff=offy,bases_base0,value='0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789') & offy+=10; 561 tmp=widget_label(yoff=offy,bases_base0,value="below a tab-based base with frame=30",font=fontname) & offy+=10; 562 tmp=widget_label(yoff=offy,bases_base0,value="containing a base, frame=100, with 2 buttons; ",font=fontname) & offy+=10; 563 tmp=widget_label(yoff=offy,bases_base0,value="another with a label and a text; ",font=fontname) & offy+=10; 564 tmp=widget_label(yoff=offy,bases_base0,value="another a /scroll ,frame=100, space=50",font=fontname) & offy+=10; 565 bases_base = widget_base(yoff=offy, bases_base0,/COL,frame=30) & offy+=10; 566 charpix = 8.5 567 butSize = 7*charpix 568 569actionBase=widget_base(bases_base,/ROW,frame=100) & offy+=10; 570 571quitButton = widget_button(actionBase,value='WILL QUIT',uvalue={vEv,'quit',[5,0]}, font=fontnam) 572downButton = widget_button(actionBase,value='A 300 px Button..', /dynamic_resize) 573selectBase=widget_base(bases_base,/ROW,frame=1) 574;a label that can be updated by pushing buttons 575labeltoupdate = widget_label(selectBase, value='Label xsize=100(pixels),ysize=30(pixels)',xsize=100,ysize=30) 576;show last button clicked value 577statusLabel = widget_text(selectBase,value=['012345678901234567890123456789012','text, xsize=32(characters),ysize=10(chars)','3','4','5','6','7','8','9','10'], $ 578 xsize=32,ysize=10) 579 ;pass label to top (avoid using a common) 580widget_control,base,set_uvalue=[statusLabel,labeltoupdate] 581 582;names of columns 583tags = tag_names(table) 584; nb of colums=nb tags 585ncols=n_tags(table) 586nrows=n_elements(table) ; check... 587;set max size (chars) of displayed button/label for each column 588maxSize = intarr(nCols) 589for icol = 0, nCols-1 do maxSize[icol] = 1 + MAX(strlen(strtrim(table.(icol),2))) 590 591;buttons containing header keyword values 592buttons = lonarr(nCols,nRows) 593;buttons containing column labels 594tagButtons=lonarr(nCols) 595fileButtons = lonarr(nRows) 596fileNumbers = lonarr(nRows) 597;base for listing contents of tables and to show selected files 598; fileBase=widget_base(bases_base,/scroll,frame=3) 599;base to contain column labels and cells with table values and selected files 600dummy = widget_label(bases_base,value=' ') 601listentries=widget_base(bases_base,row=nRows+1,/scroll,space=50, x_scroll=300,frame=10,y_scroll=300) 602widget_control,dummy,set_value='Scrolled Base below has ID='+string(listentries) 603;create column labels 604dummy = widget_label(listentries,value=' ', xsize=30) 605dummy1 = widget_label(listentries,value=' ',xsize=30) 606for icol =0, nCols-1 do tagButtons[icol]=widget_label(listentries,value=tags[icol], xsize=charpix*maxSize[icol],/align_left) 607for iRow=0,nRows-1 do begin 608 fileNumbers[iRow]=widget_label(listentries, value=string(iRow), xsize=30, ysize=25) 609 fileButtons[iRow]=widget_button(listentries, value="*", uvalue={vEv,'file',[iRow,-1]}, xsize=30, ysize=25) 610 for icol=0,nCols-1 do buttons[icol, iRow] = widget_button(listentries, value=strtrim((table[iRow].(icol)),2), uvalue={vEv,'data',[icol,iRow]}, ysize=25, xsize=charpix*maxSize[iCol],/align_left,kill_notify='button_killed') 611endfor 612;;overwrite label: 613;print,"label to update id="+string(labeltoupdate) 614widget_control, labeltoupdate, set_value="Text2 has been replaced with widget_control" 615 616; overwrite buttons; 617 for iRow=0,nRows-1 do widget_control,fileButtons[iRow], set_value="Y" 618;; 619 620 621endif 622 623 624;tests for /notify_realize and /kill_notify 625; 626widget_control,base,notify_realize='i_am_realized' 627;Realize the widgets. 628WIDGET_CONTROL, /REALIZE, base 629 630;;Obtain the window index. 631if ~keyword_set(nocanvas) and total(strcmp('DRAW',present,/fold)) then begin 632print,"Draw widgets:",draw,draw2 633 WIDGET_CONTROL, draw, GET_VALUE = index 634 WIDGET_CONTROL, draw2, GET_VALUE = index2 635 636 ;; 637 ;; Set the new widget to be the current graphics window 638 print,"window indexes",index,index2 639 image=dist(128) 640 WSET,index 641 n=100 & x=randomu(seed,n)& y=randomu(seed,n) &p=randomu(seed,10)*n & x[p]=x[3] &y[p]=y[22]& TRIANGULATE, x, y, tr,b,rep=r,conn=conn &myplot,tr,x,y,b,conn,1 642 643 ;; 644 WSET, index2 645 f=findgen(1000)/100. 646 contour,cos(dist(100,100)/10.) 647 tv,image,10,10,/data; ,/true 648endif 649 650xmanager,"handle",base,cleanup="cleanup_xmanager",no_block=~block 651end 652