function error = headerForm(hTsgGUI) % % Input % ----- % hTsgGUI ............ Handel to the main user interface % % Output % ------ % error .............. 1: OK ; -1 : an error occured % $Id$ error = -1; % Get the data from the application GUI % ------------------------------------- tsg = getappdata(hTsgGUI, 'tsg_data'); % load platform mat file % ---------------------- %load platform.mat; % Define uicontrol start position % ------------------------------- left = .01; bottom = .95; inc_x = 0.5; inc_y = 0.03; % set default uicontrol size % -------------------------- default_height = 0.018; default_length = .1; % get actual date % --------------- date = datestr(now,30); % Get global attributes list from class tsg_nc with file 'tsg_ncattr.csv' % ----------------------------------------------------------------------- nca = tsg_nc('tsg_ncattr.csv'); nca_keys = keys(nca); % Load platform_info object from tsg_platform_info.csv % --------------------------------------------------------- platform_info = tsg_nc('tsg_platform.csv'); % header Uicontrols in a new figure % --------------------------------- hHeaderFig = figure(... 'BackingStore','off',... 'Name', 'TSG GLOBAL ATTRIBUTES', ... 'NumberTitle', 'off', ... 'Resize', 'on', ... 'Menubar','none', ... 'Toolbar', 'none', ... 'Tag', 'GLOBAL_ATTRIBUTES', ... 'Visible','on',... 'WindowStyle', 'modal', ... 'Units', 'normalized',... 'Position',get(hTsgGUI,'Position'), ... 'Color', get(0, 'DefaultUIControlBackgroundColor')); % bg = [0.92549 0.913725 0.847059] = get(0, 'DefaultUIControlBackgroundColor'); % Iterate from each element from object nca % ------------------------------------- for i=1:numel(nca_keys) % get key, use {} for cell % ------------------------ key = nca_keys{i}; % get all structure for the key % ----------------------------- s = get(nca, key); % set tsg.DATE_UPDATE % ------------------- if strcmp(key, 'DATE_UPDATE') tsg.(key) = [date(1:8) date(10:15)]; end % check for empty field and replace them by default value % ------------------------------------------------------- if isempty(s.length), s.length = default_length; end; if isempty(s.height), s.height = default_height; end; % display dynamically uicontrol text % use of char function to prevent error when field is empty [] => '' % ------------------------------------------------------------------ uicontrol(... 'Parent', hHeaderFig, ... 'Units', 'normalized', ... 'Style', 'Text', ... 'Fontsize', tsg.fontSize-1, ... 'HorizontalAlignment', 'left', ... 'Position',[left, bottom, .2, .017], ... 'TooltipString', char(s.comment), ... 'String', char(s.name)); % display dynamically uicontrol % ----------------------------- ui = uicontrol(... 'Parent', hHeaderFig, ... 'Units', 'normalized', ... 'BackgroundColor', 'w', ... 'Style', char(s.uicontrolType), ... 'Fontsize', tsg.fontSize-2, ... 'HorizontalAlignment', char(s.horizontalAlignment), ... 'Position', [left+.11, bottom, s.length, s.height], ... 'String', char(s.string), ... 'Value', s.value, ... 'Tag', key); % display conventions field if exist % ---------------------------------- uicontrol(... 'Parent', hHeaderFig, ... 'Units', 'normalized', ... 'Style', 'text', ... 'Fontsize', tsg.fontSize-2, ... 'HorizontalAlignment', 'left', ... 'Position', [left+.22, bottom, .1, s.height], ... 'String', char(s.conventions)); % set dynamically uicontrol from tsg struct % ----------------------------------------- switch s.uicontrolType case 'popupmenu' str = cellstr(get(ui,'String')); ind = strfind(str,tsg.(key)); for k=1:numel(ind) if ~isempty(ind{k}) set(ui, 'value', k); end end case 'edit' set(ui, 'string', tsg.(key)); case 'checkbox' % not yet implemented !!! end % Check vertical position of last uicontrol and creation new colomn % ----------------------------------------------------------------- bottom = bottom - inc_y; if bottom < .15 bottom = 0.95; left = left + inc_x; end end % set a callback to PLATFORM_NAME uicontrol % ----------------------------------------- %set(findobj('Tag','PLATFORM_NAME'),'Callback', @updateForm); % CONTINUE PUSH BUTTON % -------------------- % The Continue (valid) button uicontrol( ... 'Parent', hHeaderFig, ... 'Style','pushbutton',... 'Fontsize', tsg.fontSize,... 'Units', 'normalized', ... 'Position',[.05, .1, .05, .02],... 'String','Continue',... 'Interruptible','off',... 'BusyAction','cancel',... 'Tag','PUSH_BUTTON',... 'Callback', @continueCallback); % CANCEL PUSH BUTTON % ------------------ % The cancel button uicontrol( ... 'Parent', hHeaderFig, ... 'Style','pushbutton',... 'Fontsize', tsg.fontSize,... 'Units', 'normalized', ... 'Position',[.15, .1, .05, .02],... 'String','Cancel',... 'Interruptible','off',... 'BusyAction','cancel',... 'Tag','PUSH_BUTTON',... 'Callback', @cancelCallback); % Build structure container for graphic handles with tag property defined. % ------------------------------------------------------------------------ data = guihandles(hHeaderFig); % record data struct in application data object % --------------------------------------------- % guidata(hHeaderFig, data); % stop execution until push-button Continue was press % --------------------------------------------------- uiwait(hHeaderFig); %% Nested callback % ----------------------------------------------------------------------- % Continue action, get uicontrol fields and populate tsg structure % ----------------------------------------------------------------------- function continueCallback(obj, event) % get the PLATFORM_NAME value, use tag to retrieve % ------------------------------------------------ value = get(findobj('Tag', 'PLATFORM_NAME'), 'string'); % get platform info structure from hashtable store in platform_info object % ------------------------------------------------------------------------ p_i = get(platform_info, value); % get hashtable describing platform_info structure data type % ---------------------------------------------------------- hdr = header(platform_info); % Iterate from each element from object nca % ------------------------------------- for ii=1:numel(nca_keys) % get key, use {} for cell % ------------------------ key = nca_keys{ii}; % get all structure for the key % ----------------------------- s = get(nca, key); % get the corresponding string from uicontrol using guihandles % data (dynamic) % ------------------------------------------------------------ tsg.(key) = get(data.(key), 'string'); % if uicontrol is a popupmenu, string is cell array with all choices % ------------------------------------------------------------------ if strcmp(s.uicontrolType,'popupmenu') % get the corresponding string from cell array using selected value % ------------------------------------------------------------------ tsg.(key) = deblank(tsg.(key)(get(data.(key), 'value'),:)); end % update p_i structure from tsg only with corresponding field % ----------------------------------------------------------- if isfield(p_i, key) % get data type from platform_info structure % ------------------------------------------ switch hdr.(key) case 'char' p_i.(key) = tsg.(key); case 'byte' p_i.(key) = int8(str2num(tsg.(key))); case 'integer' p_i.(key) = int16(str2num(tsg.(key))); case 'float' p_i.(key) = single(str2double(tsg.(key))); case 'double' p_i.(key) = str2double(tsg.(key)); otherwise % by default, display a warning % ----------------------------- warning('tsgqc:headerForm', ... 'unknow type ''%s'' for ''%s'' attribute.\nCheck your %s file', ... hdr.(key), key, platform_info.file); % and cast to char % ---------------- p_i.(key) = tsg.(key); end end end % Save tsg structure % ------------------ setappdata(hTsgGUI, 'tsg_data', tsg); % test if uicontrol not empty % --------------------------- if isempty(value) warndlg({'PLATFORM NAME is empty';'';'Please, enter a valid PLATFORM name'},... 'Invalid PLATFORM name'); else % Update plateform_info object with this PLATFORM_NAME value and % platform info updated structure % -------------------------------------------------------------- platform_info = set(platform_info, value, p_i); % save object in csv file % ----------------------- save(platform_info); % close windows (replace call to uiresume(hHeaderFig)) % ---------------------------------------------------- close(hHeaderFig); % flushes the event queue and updates the figure window % ----------------------------------------------------- drawnow; % return with no error code (true) % -------------------------------- error = 1; return end end % ----------------------------------------------------------------------- % Cancel button, no action % ----------------------------------------------------------------------- function cancelCallback(obj, event) % close windows % ------------- close(hHeaderFig); % flushes the event queue and updates the figure window % ----------------------------------------------------- drawnow; % return error code (no change) % ----------------------------- error = -1; end % ----------------------------------------------------------------------- % Callback when uicontrol PLATFORM_NAME is modified % ----------------------------------------------------------------------- function updateForm(obj, event) % get the new value, use tag to retrieve % -------------------------------------- value = get(findobj('Tag','PLATFORM_NAME'),'string'); % get platform info structure from hashtable store in platform_info object % ------------------------------------------------------------------------ p_i = get(platform_info, value); % if this platform exist, structure not empty % ------------------------------------------- if ~isempty(p_i) % get members list of structure platform_name % ------------------------------------------- nb = fieldnames(p_i); % iterate on all members % ---------------------- for ii=1:numel(nb) % key member name and use it as a key for tsg structure % ----------------------------------------------------- key = nb{ii}; tsg.(key) = p_i.(key); % update headerform fields with values from mat file % -------------------------------------------------- set(findobj('Tag', key),'string',tsg.(key)); % with different color % -------------------- set(findobj('Tag', key),'foregroundColor', 'r'); end % if user enter a new PLATFORM_NAME, open a question dialog box for % confirmation % ----------------------------------------------------------------- else selection = ... questdlg(['PLATFORM NAME: ' value ' is new. Do you want to use and save it ?'],... 'Create new PLATFORM NAME ?',... 'Yes', 'No', 'No'); % if yes, continue, create and save new hash for PLATFORM_NAME in csv file % ------------------------------------------------------------------------ if strcmp(selection, 'Yes') return; % if not, reset field % ------------------- else set(findobj('Tag','PLATFORM_NAME'),'string', ''); end end end end