Viewing contents of file '../idllib/contrib/tappin/graffer/graff_two.pro'
pro Graff_two, pdefs, base, group=group, xsize=xsize, ysize=ysize

;+
; GRAFF_TWO
;	Define a more compact screen for graffer.
;
; Usage:
;	(May not be called directly by the user)
;	graff_two, pdefs, group=group, xsize=xsize, ysize=ysize
;
; Argument:
;	pdefs	struct	in/out	A GRAFFER control structure as
;				returned by the graff_init
;				procedure.
;	base	long	output	The ID of the base to be managed by
;				XMANAGER
;
; Keywords:
;	group	long	input	The group leader of the widget tree.
;	xsize	int	input	The x dimension of the draw widget
;	ysize	int	input	The y dimension of the draw widget
;
; Restrictions:
;	May not be called directly by the user. This routine uses much
;	of the startup code and the same event handler as the normal
;	GRAFFER procedure. Therefore it checks and gives a fatal error
;	if its caller isn't GRAFFER (Of course you CAN trick it but as
;	the saying is you can make software foolproof, but you can't
;	make it damnfoolproof).
;
; History:
;	Original (derived from GRAFFER): 5/6/96; SJT
;	Add CDF, & Autoscale options to the pulldowns: 9/8/96; SJT
;	Add options for "Origin" axes and polar plots: 12/8/96; SJT
;	Add extra Dataset buttons: 13/9/96; SJT
;	Start to farm out menu panels to procedures: 29/11/96; SJT
;	More farming and put the plot window in an independent base as
;	per the suggestion of Phil Williams (Childrens Hospital
;	Medical Center Cincinnati): 6/12/96; SJT
;	Make top-level base "tracking" to allow auto-pop. Also ensure
;	that the two windows are reasonably well-separated: 17/1/97; SJT
;	Add "changed" indicator and solve problem of making menu
;	window auto-pop: 29/1/97; SJT
;	Made unique in 8.3: 11/2/97; SJT
;-

common Gr_psym_maps, psym_bm

help, calls = cstack
ltpos = strpos(cstack(1), '<')
caller = strmid(cstack(1), 0, ltpos-1)

if (caller ne 'GRAFFER') then message, 'May only be called from ' + $
  'GRAFFER'

pdefs.ids.graffer = widget_base(title = 'Graffer ' + $
                                'V'+string(pdefs.version, $
                                           format = "(I0,'.',I2.2)"), $
                                /row, xpad = 1, ypad = 1, space = 1, $
                                resource = 'Graffer', kill_notify = $
                                'gr_state')

base = widget_base(pdefs.ids.graffer, /column, xpad = 1, ypad = 1, $
                   space = 1, /track)

ccbase =  widget_base(base, /row, xpad = 1, ypad = 1, space = 1)
cbase = widget_base(ccbase, /column, xpad = 1, ypad = 1, space = 1)

                                ; Exit etc.

           
tjb = widget_base(cbase, /row, xpad = 1, ypad = 1, space = 1)

gr_control_menu, tjb

jb = widget_base(tjb, /row, xpad = 1, ypad = 1, space = 1)
pdefs.ids.xcp = graff_enter(jb, /float, /display, xsize = 10, value = $
                            0., label = 'X:', format = "(g10.3)") 
pdefs.ids.ycp = graff_enter(jb, /float, /display, xsize = 10, value = $
                            0., label = 'Y:', format = "(g10.3)") 

                                ; A box to show if the plot is changed
                                ; since the last save.

pdefs.ids.chtick = widget_base(ccbase, /column, xpad = 1, ypad = 1, $
                               space = 1, /align_center, map = 0)
cbm = gr_check_box(nx, ny)
junk = widget_button(pdefs.ids.chtick, value = cbm, uvalue = 'QSAVE', $
                     /track)

tjb = widget_base(cbase, /row, xpad = 1, ypad = 1, space = 1)
pdefs.ids.name = graff_enter(tjb, /display, /text, value = $
                             pdefs.name, xsize = 30, label = "Name:")

pdefs.ids.dir = graff_enter(tjb, /display, value = pdefs.dir, $
                            xsize = 30, label = 'Directory:')


tcbase = widget_base(base, /column, xpad = 1, ypad = 1, $
                                  space = 1)

tdbase = widget_base(tcbase, /row, xpad = 1, ypad = 1, space = 1)

                                ; Plot Title/Subtitle

gr_mk_plmenus, tdbase, pdefs

                                ; Change Data Set

tjb = widget_base(tdbase, /column, /frame, xpad = 1, ypad = 1, space = 1)

junk = widget_label(tjb, value = 'Data Set Operations')

jb = widget_base(tjb, /row, xpad = 1, ypad = 1, space = 1)

gr_ds_pulldown, jb

pdefs.ids.cset = graff_enter(jb, /int, /display, xsize = 3, value = 0, $
                             format = '(I0)', label = 'Current', /column)

pdefs.ids.descr = graff_enter(tjb, /all, xsize = 25, value = $
                              '', format = $
                              "(A)", label = 'DS Name:', $
                              uvalue = 'DESC', /track, /capture)

                                ; Current cursor position

junk = cw_bbselector(tjb, ['Disabled', 'Enabled'], set_value = 1, uvalue $
                    = 'MOTION', label_left = 'Cursor tracing:', /track)



                                ; X & Y Axis controls

xybase = widget_base(tcbase, /row, xpad = 1, ypad = 1, space = 1)

gr_axis_menu, 'X', xybase, pdefs
gr_axis_menu, 'Y', xybase, pdefs

                                ; Setting the properties for the
                                ; current data set

                                ; Plotting symbols

tjb = widget_base(tcbase, /column, /frame, xpad = 1, ypad $
                  = 1, space = 1)

jb = widget_base(tjb, /row, xpad = 1, ypad = 1, space = 1)


optbb = widget_base(jb, xpad = 1, ypad = 1, space = 1)

gr_ds_menus, optbb, pdefs
gr_z_menus, optbb, pdefs


jjb = widget_base(jb, /column, xpad = 1, ypad = 1, space = 1)


                                ; Add a text string

junk = cw_bbselector(jjb, ['Draw', 'Text'], uvalue = 'TEXT', set_value $
                    = 0, label_left = 'Draw/Text Mode:', /track)


                                ; Plot a function or read data

gr_ds_create, jjb

                                ; Message box, only put it here
                                ; because there's some space, give it
                                ; a UVALUE so that we can use it with
                                ; a timer event to control the autosave

pdefs.ids.message = graff_enter(tjb, /display, xsize = 80, ysize = 2, $
                                value = '', label = 'Messages:', $
                                uvalue = 'AUTOSAVE', /track)

pdefs.ids.hlptxt = graff_enter(tjb, /display, xsize = 80, ysize = 1, $
                               value = '', label = 'Function:')

                                ; The draw screen

pdefs.ids.graffer2 = widget_base(xpad = 1, ypad = 1, space = 1, $
                                 resource = 'Graffer', $
                                 title = 'Graffer V'+ $
                                 string(pdefs.version, format = $
                                        "(I0,'.',I2.2)"), uvalue = $
                                 'SHOWD', /track) 

dbase = widget_base(pdefs.ids.graffer2, /column, xpad = 10, ypad = 10, $
                    space = 1, uvalue = pdefs.ids.graffer)

if (not keyword_set(xsize)) then xwsize = 600 $
else xwsize = xsize ;> 600

if (not keyword_set(ysize)) then ywsize = 600 $
else ywsize = ysize ;> 600
pdefs.ids.draw = widget_draw(dbase, xsize = xwsize, /frame, $
                             ysize = ywsize, uvalue = 'DRAW', $
                             /button_event, /motion_event, /track)
  

                                ;Realize widgets and get necessary
                                ;information on the draw widget.

widget_control, pdefs.ids.graffer, /real
widget_control, pdefs.ids.graffer2, /real, event_pro = 'graff_event', $
  group = pdefs.ids.graffer
widget_control, pdefs.ids.graffer, group = pdefs.ids.graffer2
if (keyword_set(group)) then begin
    widget_control, pdefs.ids.graffer, group = group
    widget_control, pdefs.ids.graffer2, group = group
endif
gr_place_winds, pdefs


end