You need to sign in or sign up before continuing.
Newer
Older
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;

jacques.grelet_ird.fr
committed
% 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.mat file
% see: Use the form of load that returns a MATLAB structure.
% ---------------------------------------------------------
s = load( 'tsg_platform_info.mat' );
platform_info = s.platform_info;
% 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' );
% Iterate from each element from object nca
% -------------------------------------

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% ------------------------

jacques.grelet_ird.fr
committed
% get all structure for the key

jacques.grelet_ird.fr
committed
% -----------------------------

jacques.grelet_ird.fr
committed
% 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;

jacques.grelet_ird.fr
committed
% display dynamically uicontrol text
% use of char function to prevent error when field is empty [] => ''
% ------------------------------------------------------------------
uicontrol(...
'Parent', hHeaderFig, ...
'Units', 'normalized', ...
'Style', 'Text', ...
'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-2, ...
'HorizontalAlignment', char(s.horizontalAlignment), ...

jacques.grelet_ird.fr
committed
'Position',[left+.11, bottom, s.length, s.height], ...
'String', char(s.string), ...
'Value', s.value, ...
'Tag', key);

jacques.grelet_ird.fr
committed
% display conventions field if exist
% ----------------------------------
uicontrol(...
'Parent', hHeaderFig, ...
'Units', 'normalized', ...
'Style', 'text', ...
'Fontsize', tsg.fontSize-2, ...

jacques.grelet_ird.fr
committed
'HorizontalAlignment', 'left', ...
'Position',[left+.22, bottom, .1, s.height], ...
'String', char(s.conventions) );

jacques.grelet_ird.fr
committed
% 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',...
'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',...
'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
% ---------------------------------------------
% 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)
% Iterate from each element from object nca
% -------------------------------------

jacques.grelet_ird.fr
committed
for ii=1:numel(nca_keys)
% get key, use {} for cell
% ------------------------

jacques.grelet_ird.fr
committed
key = nca_keys{ii};
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
% 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
% set and update pi (platform_info) structure from tsg only with
% corresponding field before save
% --------------------------------------------------------------
if isfield(platform_info, key)
pi.(key) = tsg.(key);
end
end

jacques.grelet_ird.fr
committed
% Save tsg structure
% ------------------
setappdata( hTsgGUI, 'tsg_data', tsg);
% get the uicontrol PLATFORM_NAME value as key, use tag to retrieve
% -----------------------------------------------------------------
key = get(findobj('Tag','PLATFORM_NAME'),'string');
% Update plateform_info object with this key and platform_name
% updated structure
% --------------------------------------------------------------
platform_info = set(platform_info, key, pi);
% save object in mat file, use what to find tsg_nc path
% -----------------------------------------------------
w = what( 'tsg_nc');
save([w.path filesep 'tsg_platform_info.mat'], 'platform_info');
% 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;
% -----------------------------------------------------------------------
% 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;
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
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_name structure from platform_info object (mat file)
% ----------------------------------------------------------------
platform_name = get(platform_info, value);
% if this platform exist, structure not empty
% -------------------------------------------
if ~isempty(platform_name)
% get members list of structure platform_name
% -------------------------------------------
nb = fieldnames(platform_name);
% iterate on all members
% ----------------------

jacques.grelet_ird.fr
committed
for ii=1:numel(nb)
% key member name and use it as a key for tsg structure
% -----------------------------------------------------

jacques.grelet_ird.fr
committed
key = nb{ii};
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
tsg.(key) = platform_name.(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('This PLATFORM NAME is new. Do you want to use and save it ?',...
'Create new PLATFORM NAME ?',...
'Yes', 'No', 'No');
% if yes, continue, create and save new PLATFORM_NAME in mat file
% ---------------------------------------------------------------
if strcmp(selection, 'Yes')
return;
% if not, reset field
% -------------------
else
set(findobj('Tag','PLATFORM_NAME'),'string', '');
end
end