Skip to content
Snippets Groups Projects
offsets.m 4.11 KiB
function [] = offsets(pCallbacks)
%OFFSETDETAILS Creates the offset details window
%   Detailed explanation goes here

global artoaGui artoaWorkspace;

%% Initialize required variables

windowTitle = [ 'ARTOA4 - Float ' num2str(artoaWorkspace.float.floatname) ' - Offsets' ];


availableCallbacks = { ...
    'CloseRequestFcn', ...
    'tableSoundsourceOffsetsSelect', ...
    'tableSoundsourceOffsetsEdit', ...
    'tableSoundspeedEdit', ...
    'buttonCalculateOffsets', ...
    'checkboxUseOffsets', ...
    'buttonCopyFromOptimum', ...
    'buttonCopyFromMeasured', ...
    'buttonUndoLastCopy' ...
};

for i = 1:length(availableCallbacks) % check if a callback is undefined
    if ~isfield(pCallbacks, availableCallbacks{i})
        pCallbacks.(availableCallbacks{i}) = @(~, ~) false;
    end
end

%% Initialize offset details gui

artoaGui.figures.editOffsets = figure( ...
    'Name', windowTitle, ...
    'NumberTitle', 'off', ...
    'MenuBar','none', ...
    'Units', 'characters' ...
);

% adjust width
artoaGui.figures.editOffsets.Position(3) = 120;
artoaGui.figures.editOffsets.Position(4) = 35;

artoaGui.editOffsets = struct();

set( ...
    artoaGui.figures.editOffsets, ...
    'CloseRequestFcn', ...
    @artoa.controller.edit.offsets.close ...
);

%% Setup position variables
left = 0.03;
fullwidth = 1 - (2 * left);

%% Initialize offset table
artoaGui.editOffsets.tableSoundsourceOffsets = uitable( ...
    artoaGui.figures.editOffsets, ...
    'Units', 'normalized', ...
    'Position', [left, 0.45, fullwidth, 0.525], ...
    'ColumnEditable', true, ...
    'CellSelectionCallback', pCallbacks.tableSoundsourceOffsetsSelect, ...
    'CellEditCallback', pCallbacks.tableSoundsourceOffsetsEdit ...
);

%% Initialize soundspeed table
artoaGui.editOffsets.tableSoundspeed = uitable( ...
    artoaGui.figures.editOffsets, ...
    'Units', 'normalized', ...
    'Position', [left, 0.35, fullwidth, 0.1], ...
    'ColumnEditable', true, ...'CellSelectionCallback', pCallbacks.tableSoundsourceOffsetsSelect, ...
    'CellEditCallback', pCallbacks.tableSoundspeedEdit ...
);

%% Optimum offsets frame
artoaGui.editOffsets.frameOptimumOffsets = uipanel( ...
    'Parent', artoaGui.figures.editOffsets, ...
    'Title', 'Offset controls', ...
    'Units', 'normalized', ...
    'BackgroundColor', 'white', ...
    'Position', [left .025 fullwidth .3] ...
);

%% Setup calculate offsets button
artoaGui.editOffsets.buttonCalculateOffsets = uicontrol( ...
    'Parent', artoaGui.editOffsets.frameOptimumOffsets, ...
    'String', 'Calculate offsets', ...
    'Style', 'PushButton', ...
    'FontSize', 8, ...
    'Units', 'normalized', ...
    'Position', [left .25 fullwidth/2 .2], ...
    'CallBack', pCallbacks.buttonCalculateOffsets ...
);

artoaGui.editOffsets.checkboxUseOffsets = uicontrol( ...
    'Parent', artoaGui.editOffsets.frameOptimumOffsets, ...
    'String', 'Use offsets', ...
    'Style', 'checkbox', ...
    'FontSize', 8, ...
    'Units', 'normalized', ...
    'Position', [left .75 fullwidth/2 .2], ...
    'CallBack', pCallbacks.checkboxUseOffsets ...
);

artoaGui.editOffsets.buttonCopyFromMeasured = uicontrol( ...
    'Parent', artoaGui.editOffsets.frameOptimumOffsets, ...
    'String', 'Copy Measured to Empirical', ...
    'Style', 'PushButton', ...
    'FontSize', 8, ...
    'Units', 'normalized', ...
    'Position', [(1.5*left + fullwidth/2) .75 fullwidth/2 .2], ...
    'CallBack', pCallbacks.buttonCopyFromMeasured ...
);

artoaGui.editOffsets.buttonCopyFromOptimum = uicontrol( ...
    'Parent', artoaGui.editOffsets.frameOptimumOffsets, ...
    'String', 'Copy Optimum to Empirical', ...
    'Style', 'PushButton', ...
    'FontSize', 8, ...
    'Units', 'normalized', ...
    'Position', [(1.5*left + fullwidth/2) .5 fullwidth/2 .2], ...
    'CallBack', pCallbacks.buttonCopyFromOptimum ...
);


artoaGui.editOffsets.buttonUndoLastCopy = uicontrol( ...
    'Parent', artoaGui.editOffsets.frameOptimumOffsets, ...
    'String', 'Undo last copy', ...
    'Style', 'PushButton', ...
    'FontSize', 8, ...
    'Units', 'normalized', ...
    'Position', [(1.5*left + fullwidth/2) .25 fullwidth/2 .2], ...
    'CallBack', pCallbacks.buttonUndoLastCopy ...
);

end