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'); % 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); % 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',... 'Units', 'normalized',... 'Position',get(hTsgGUI,'Position'), ... 'Color', get( 0, 'DefaultUIControlBackgroundColor' )); % bg = [0.92549 0.913725 0.847059] = get( 0, 'DefaultUIControlBackgroundColor' ); % Display fields from class % ------------------------- 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, ... 'HorizontalAlignment', 'left', ... 'Position',[left, bottom, .13, .0135], ... '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-1, ... '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-1, ... '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 % 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 % ----------------------------------------------------------------------- function continueCallback(obj, event) % get uicontrol fields and populate tsg structure % ------------------------------------------------ % for text only % ------------- tsg.CYCLE_MESURE = get(data.CYCLE_MESURE, 'string'); tsg.PLATFORM_NAME = get(data.PLATFORM_NAME, 'string'); tsg.SHIP_CALL_SIGN = get(data.SHIP_CALL_SIGN, 'string'); tsg.SHIP_MMSI = get(data.SHIP_MMSI, 'string'); tsg.TSG_TYPE = get(data.TSG_TYPE, 'string'); tsg.TSG_NUMBER = get(data.TSG_NUMBER, 'string'); tsg.TINT_TYPE = get(data.TINT_TYPE, 'string'); tsg.TINT_NUMBER = get(data.TINT_NUMBER, 'string'); tsg.DATA_TYPE = get(data.DATA_TYPE, 'string'); tsg.DATA_MODE = get(data.DATA_MODE, 'string'); tsg.SAMPLING_PERIOD = get(data.SAMPLING_PERIOD, 'string'); tsg.DATE_START = get(data.DATE_START, 'string'); tsg.DATE_END = get(data.DATE_END, 'string'); tsg.SOUTH_LATX = get(data.SOUTH_LATX, 'string'); tsg.NORTH_LATX = get(data.NORTH_LATX, 'string'); tsg.WEST_LONX = get(data.WEST_LONX, 'string'); tsg.EAST_LONX = get(data.EAST_LONX, 'string'); tsg.FORMAT_VERSION = get(data.FORMAT_VERSION, 'string'); tsg.DATE_CREATION = get(data.DATE_CREATION, 'string'); tsg.DATE_UPDATE = get(data.DATE_UPDATE, 'string'); tsg.DATA_RESTRICTIONS = get(data.DATA_RESTRICTIONS, 'string'); tsg.COMMENT = get(data.COMMENT, 'string'); tsg.PROJECT_NAME = get(data.PROJECT_NAME, 'string'); tsg.PI_NAME = get(data.PI_NAME, 'string'); tsg.DATA_CENTRE = get(data.DATA_CENTRE, 'string'); tsg.DATA_ACQUISITION = get(data.DATA_ACQUISITION, 'string'); tsg.PROCESSING_CENTRE = get(data.PROCESSING_CENTRE, 'string'); tsg.PROCESSING_STATES = get(data.PROCESSING_STATES, 'string'); % for popupmenu only, deblank remove all trailling whitespace char % ---------------------------------------------------------------- tsg.TSG_TYPE = deblank(tsg.TSG_TYPE(get(data.TSG_TYPE, 'value'),:)); tsg.TINT_TYPE = deblank(tsg.TINT_TYPE(get(data.TINT_TYPE, 'value'),:)); tsg.DATA_MODE = deblank(tsg.DATA_MODE(get(data.DATA_MODE, 'value'),:)); tsg.PI_NAME = deblank(tsg.PI_NAME(get(data.PI_NAME, 'value'),:)); tsg.DATA_ACQUISITION = deblank(tsg.DATA_ACQUISITION(get(data.DATA_ACQUISITION, 'value'),:)); tsg.PROCESSING_CENTRE = deblank(tsg.PROCESSING_CENTRE(get(data.PROCESSING_CENTRE, 'value'),:)); tsg.PROCESSING_STATES = deblank(tsg.PROCESSING_STATES(get(data.PROCESSING_STATES, 'value'),:)); % Save tsg structure % ------------------ setappdata( hTsgGUI, 'tsg_data', tsg); % close windows (replace call to uiresume(hHeaderFig)) % ---------------------------------------------------- close(hHeaderFig); % flushes the event queue and updates the figure window % ----------------------------------------------------- drawnow; % return no error code (true) % --------------------------- error = 1; end % ----------------------------------------------------------------------- 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 end