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