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

;+
; GRAFF_ONE
;	Define a full-sized screen for graffer.
;
; Usage:
;	(May not be called directly by the user)
;	graff_one, 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 (extracted from GRAFFER): 23/1/97; SJT
;	Add "changed" indicator: 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)

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

                                ; Exit etc.
gr_control_menu, cbase


pdefs.ids.name = graff_enter(cbase, /display, /text, value = $
                             pdefs.name, xsize = 30, label = "Name:")

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

                                ; Plot Title/Subtitle

gr_mk_plmenus, cbase, pdefs

                                ; X Axis controls

gr_axis_menu, 'X', cbase, pdefs

                                ; Y Axis controls

gr_axis_menu, 'Y', cbase, pdefs

                                ; The draw screen and the plot type
                                ; selections.

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

if (not keyword_set(ysize)) then ywsize = 600 $
else ywsize = ysize > 600

if ((xwsize >  ywsize) gt 600) then $
  pdefs.ids.draw = widget_draw(cdbase, xsize = xwsize, x_scroll_size = $
                               600, ysize = ywsize, y_scroll_size = 600, $
                               uvalue = 'DRAW', /button_event, $
                               /motion_event, /track, /frame) $
else $
  pdefs.ids.draw = widget_draw(cdbase, xsize = xwsize, ysize = ywsize, $
                               uvalue = 'DRAW', /button_event, $
                               /motion_event, /track, /frame)
  


                                ; Setting the properties for the
                                ; current data set

dsbase = widget_base(base, /row, /frame, xpad = 1, ypad = 1, space = 1)

                                ; Change Data Set

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

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

gr_ds_pulldown, tjb


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

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

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

                                ; Current cursor position

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

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)") 


                                ; Plotting symbols etc.

tjb = widget_base(dsbase, /column, 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

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

pdefs.ids.chtick = widget_base(jb, /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)

                                ; 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 = 75, ysize = 2, $
                                value = '', label = 'Messages:', $
                                uvalue = 'AUTOSAVE', /track)

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

widget_control, pdefs.ids.graffer, /real
if (keyword_set(group)) then $
    widget_control, pdefs.ids.graffer, group = group

end