;+
; NAME:
;	SMEI_RESTORE
;
;
; PURPOSE:
;	Restores a SMEI sequence from a save file and clears anything
;	that would have been lost.
;
;
; CATEGORY:
;	CLI
;
;
; CALLING SEQUENCE:
;	smei_restore, seqref, file
;
;
; OPTIONAL INPUTS:
;	file	string	The IDL SAVE file from which to restore, if
;			not given then a dialogue box is used to
;			select.
;
;
; KEYWORD PARAMETERS:
;	/menu	If set, then go straight into the menu.
;
;
; OUTPUTS:
;	seqref	objref	The object reference of the restored smei
;			sequence. (optional iff /menu is given).
;
;
; MODIFICATION HISTORY:
;	Original: 17/12/02; SJT
;	Add calls to structure definers to ensure latest are used:
;	18/12/02; SJT
;	Renamed as SMEI_RESTORE: 9/8/04; SJT
;-

pro smei_restore, seqref, file, menu = menu, help = help

smei_sequence__define
smei_image__define

if keyword_set(help) then begin
    self_help
    return
endif

if not arg_present(seqref) and not keyword_set(menu) then begin
    smei_msg, /alert, ['SMEI_RESTORE requires either a writable', $
                       'output argment or the menu keyword to be set']
    return
endif

if n_params() le 1 then begin
    rfile = dialog_pickfile(dialog_parent = group,  $
                            filter = "*.sav*", $
                            /must_exist, $
                            title = "Select file from which to restore")
    if rfile eq '' then return
endif else rfile = file

restore, rfile, /relaxed

if not obj_valid(seqref) then begin
    smei_msg, /alert, ['SAVE file: '+rfile, $
                       'does not contain a valid SMEI sequence']
    return
endif
if not obj_isa(seqref, 'SMEI_SEQUENCE') then begin
    smei_msg, /alert, ['SAVE file: '+rfile, $
                       'does not contain a valid SMEI sequence']
    return
endif

seqref -> set_file, rfile
seqref -> mk_pixmap, /destroy

if keyword_set(menu) then seqref -> menu
 
if not arg_present(seqref) then obj_destroy, seqref ; Prevent a memory
                                ; leak.

end
