function obj = pr_basic_ui(imgs, dispf)
% GUI to request parameters for slover routine
% FORMAT obj = pr_basic_ui(imgs, dispf)
%
% GUI requests choices while accepting many defaults
%
% imgs  - string or cell array of image names to display
%         (defaults to GUI select if no arguments passed)
% dispf - optional flag: if set, displays overlay (default = 1)
%__________________________________________________________________________

% Matthew Brett
% $Id: pr_basic_ui.m 6623 2015-12-03 18:38:08Z guillaume $

if nargin < 1
    imgs = '';
end
if isempty(imgs)
    [imgs, sts] = spm_select([1 Inf], 'image', 'Image(s) to display');
    if ~sts, obj=[]; return; end
end
if ischar(imgs)
    imgs = cellstr(imgs);
end
if nargin < 2
    dispf = 1;
end

spm_input('!SetNextPos', 1);

% load images
nimgs = size(imgs);

% process names
nchars = 20;
imgns = spm_str_manip(imgs, ['rck' num2str(nchars)]);

% Get new default object
obj = slover;

% identify image types
cscale = [];
deftype = 1;
obj.cbar = [];
for i = 1:nimgs
    obj.img(i).vol = spm_vol(imgs{i});
    options = {'Structural','Truecolour', ...
        'Blobs','Negative blobs','Contours'};
    % if there are SPM results in the workspace, add this option
    [XYZ,Z,M] = pr_get_spm_results;
    if ~isempty(XYZ)
        options = {'Structural with SPM blobs', options{:}};
    end
    itype = spm_input(sprintf('Img %d: %s - image type?', i, imgns{i}), '+1', ...
        'm', char(options),options, deftype);
    imgns(i) = {sprintf('Img %d (%s)',i,itype{1})};
    [mx,mn] = slover('volmaxmin', obj.img(i).vol);
    if ~isempty(strmatch('Structural', itype))
        obj.img(i).type = 'truecolour';
        obj.img(i).cmap = gray;
        obj.img(i).range = [mn mx];
        deftype = 2;
        cscale = [cscale i];
        if strcmp(itype,'Structural with SPM blobs')
            obj = add_spm(obj);
        end
    else
        cprompt = ['Colormap: ' imgns{i}];
        switch itype{1}
            case 'Truecolour'
                obj.img(i).type = 'truecolour';
                dcmap = 'flow.lut';
                drange = [mn mx];
                cscale = [cscale i];
                obj.cbar = [obj.cbar i];
            case 'Blobs'
                obj.img(i).type = 'split';
                dcmap = 'hot';
                drange = [0 mx];
                obj.img(i).prop = 1;
                obj.cbar = [obj.cbar i];
            case 'Negative blobs'
                obj.img(i).type = 'split';
                dcmap = 'winter';
                drange = [0 mn];
                obj.img(i).prop = 1;
                obj.cbar = [obj.cbar i];
            case 'Contours'
                obj.img(i).type = 'contour';
                dcmap = 'white';
                drange = [mn mx];
                obj.img(i).prop = 1;
        end
        obj.img(i).cmap = sf_return_cmap(cprompt, dcmap);
        obj.img(i).range = spm_input('Img val range for colormap','+1', 'e', drange, 2);
    end
end
ncmaps=length(cscale);
if ncmaps == 1
    obj.img(cscale).prop = 1;
else
    remcol=1;
    for i = 1:ncmaps
        ino = cscale(i);
        obj.img(ino).prop = spm_input(sprintf('%s intensity',imgns{ino}),...
            '+1', 'e', ...
            remcol/(ncmaps-i+1),1);
        remcol = remcol - obj.img(ino).prop;
    end
end

obj.transform = deblank(spm_input('Image orientation', '+1', ['Axial|' ...
    ' Coronal|Sagittal'], strvcat('axial','coronal','sagittal'), ...
    1));

% use SPM figure window
obj.figure = spm_figure('GetWin', 'Graphics');

% slices for display
obj = fill_defaults(obj);
slices = obj.slices;
dist   = mean(diff(slices));
prec   = ceil(-min(log10(dist), 0));
obj.slices = spm_input('Slices to display (mm)', '+1', 'e', ...
    sprintf('%0.*f:%0.*f:%0.*f',...
    prec, slices(1),...
    prec, dist,...
    prec, slices(end))...
    );

% and do the display
if dispf, obj = paint(obj); end


%==========================================================================
function cmap = sf_return_cmap(prompt,defmapn)
cmap = [];
while isempty(cmap)
    [cmap,w]= slover('getcmap', spm_input(prompt,'+1','s', defmapn));
    if isempty(cmap), disp(w);end
end
