function BioSigKitPanel(obj)
%% ================= Sets up BioSigKit GUI ====================== %%
%% ============== Licensce ========================================== %%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
% OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
% SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
% TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
% PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
% LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
% NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
% Author :
% Hooman Sedghamiz, Feb, 2018
% MSc. Biomedical Engineering, Linkoping University
% Email : Hooman.sedghamiz@gmail.com
%% ============= Main P ======================= %%
screensize = get(0,'ScreenSize');
obj.panel = figure('pos',[screensize(1)*0.8,screensize(2)*0.8,...
screensize(3)*0.8,screensize(4)*0.8],...
'Resize','off',...
'numbertitle', 'off',...
'name','BioSigKit V1.0',...
'MenuBar','none',...
'renderer','zbuffer',...
'tag','SteadyStateWin',...
'CreateFcn','movegui(''center'')',...
'color',[0 0.3 0.6],...
'toolbar','figure',...
'resize','on',...
'busyaction','queue',...
'doublebuffer','on',...
'handlevisibility', 'callback', ...
'interruptible', 'on', ...
'visible', 'off', ...
'defaultaxesunits', 'pixels', ...
'defaulttextfontunits', 'pixels', ...
'defaulttextfontname', 'Verdana', ...
'defaulttextfontsize', 12, ...
'defaultuicontrolfontunits', 'pixels', ...
'defaultuicontrolfontsize' , 10, ...
'Resize','off',...
'defaultuicontrolfontname', 'Verdana', ...
'defaultuicontrolinterruptible', 'off');
%------------------------ Customize Toolbar --------------------%
ToolBarS = {'Insert Legend','Insert Colorbar',...
'Data Cursor','Rotate 3D','Edit Plot','Show Plot Tools',...
'Hide Plot Tools','Print Figure','Save Figure','Open File',...
'New Figure','Brush/Select Data','Link Plot',...
'Show Plot Tools and Dock Figure'};
for i =1: length(ToolBarS)
ttmp = findall(obj.panel,'ToolTipString', ToolBarS{i});
if ~isempty(ttmp)
set(ttmp,'Visible','off');
end
end
% ------------------------ Main Panel --------------------- %
updateOpt = uix.BoxPanel('Parent',obj.panel,'BorderType','etchedin','title',...
'Main Panel','BorderWidth',3,'FontWeight','bold');
SetupPanel = uix.VBox('Parent', updateOpt, 'Spacing', 15 );
% ------------------------ Import Sig ----------------------- %
ImportP = uix.Panel('Parent',SetupPanel,'BorderType','etchedin','title',...
'Import','BorderWidth',3,'FontWeight','bold');
SpliterImportB = uix.HBox( 'Parent', ImportP, 'Spacing', 15 );
obj.LoadedSig = uicontrol('Style','edit', 'String',pwd,...
'parent',SpliterImportB,'tag','Loader','HorizontalAlignment','left');
uicontrol('Style','pushbutton','callback',@(varargin)ImportSig(obj),...
'Parent', SpliterImportB, 'String', 'Import', 'tag','Importsig');
% ------------------------ Axis Panel ---------------------- %
SigViewPanel1 = uix.Panel('Parent',SetupPanel,'BorderType','etchedin','title',...
'Signal','BorderWidth',3,'FontWeight','bold');
%-------- Sig Axis ------------%
obj.SigView = axes('parent', SigViewPanel1,'XGrid','on',...
'YGrid','on','XMinorGrid','on','YMinorGrid','on','Color',[0,0,0],...
'YColor',[1,1,1],'XColor',[1,1,1]);
obj.SigView.Position(1:2) = [1 1];
% --------------------------- Control Panel -----------------------------%
SigViewPanel2 = uix.Panel('Parent',SetupPanel,'BorderType',...
'etchedin','title',...
'Control','BorderWidth',3,'FontWeight','bold');
DividStatControl = uix.HBox( 'Parent', SigViewPanel2, 'Spacing', 15 );
AlgFreq = uix.VBox( 'Parent', DividStatControl, 'Spacing', 15 );
%------------ Type of Algorithm --------------%
Run_Fs = uix.HBox( 'Parent', AlgFreq, 'Spacing', 15 );
AlgType = uix.BoxPanel('Parent',Run_Fs,'BorderType','etchedin','title',...
'Algorithm','BorderWidth',3,'FontWeight','bold');
obj.Alg = uicontrol('Style', 'popup','tag','solverType',...
'String', {'QRS Pan-Tompkins','QRS PhaseSpace',...
'RST State-Machine','QRS Filter-Bank','QRST MTEO',...
'AMPD PeakDetector'},...
'parent', AlgType);
% ------------------------------ Sample Freq ---------------------------- %
FreqP = uix.BoxPanel('Parent',Run_Fs,'BorderType','etchedin','title',...
'Sample Freq(Hz)','BorderWidth',3,'FontWeight','bold');
obj.FreqValHolder = uicontrol('Style','edit', 'String','250',...
'parent',FreqP,'tag','SampleFreq');
%---------------------- Run and load Button ----------------------------- %
uicontrol('Style','pushbutton','callback',@(varargin)RunAlg(obj),...
'Parent', AlgFreq, 'String', 'Run', 'tag','RUN_Agg'); % Run Button
%------------------------------- Loading bar -----------------------------%
iconsClassName = 'com.mathworks.widgets.BusyAffordance$AffordanceSize';
iconsSizeEnums = javaMethod('values',iconsClassName);
SIZE_32x32 = iconsSizeEnums(2);
obj.Status = com.mathworks.widgets.BusyAffordance(SIZE_32x32, 'running...');
javacomponent( obj.Status.getComponent, [10,10,80,80], AlgFreq);
%% ------------- Add summerizing panel for stats --------------------- %%
StatP = uix.BoxPanel('Parent',DividStatControl,'BorderType','etchedin','title',...
'Stats','BorderWidth',3,'FontWeight','bold');
obj.statsC = axes('parent', StatP,...
'YColor',[1 1 1],'YTickLabel',{},...
'XColor',[1 1 1],'XTickLabel',{});
obj.statsC.Position(1:2) = [1 1];
FS = 16;
% -------------------- Horizontal Lines ----------------------- %
line([0 1],[.95 .95],'Parent',obj.statsC,'Color','black');
line([0 1],[.85 .85],'Parent',obj.statsC,'Color','black');
line([0 1],[0.01 0.01],'Parent',obj.statsC,'Color','black');
% -------------------- Col Headers ---------------------------- %
text(0.01,0.90,'\bf WaveType','Parent',obj.statsC, ...
'Units','normalized', 'fontweight','bold','FontSize',FS,...
'Interpreter','latex');
text(0.2,0.90,'\bf Nr','Parent',obj.statsC, ...
'Units','normalized', 'fontweight','bold','FontSize',FS,...
'Interpreter','latex');
text(0.4,0.90,'\bf Mean Interval(S)','Parent',obj.statsC, ...
'Units','normalized', 'fontweight','bold','FontSize',FS,...
'Interpreter','latex');
text(0.7,0.90,'\bf Max Interval(S)','Parent',obj.statsC, ...
'Units','normalized', 'fontweight','bold','FontSize',FS,...
'Interpreter','latex');
% -------------------- Row Headers ---------------------------- %
y = linspace(0.8,0.05,5);
x = [0.01,0.2,0.4,0.7];
R_labels = {'$$ \bf R $$','$$ \bf P $$',...
'$$ \bf Q $$','$$ \bf S $$','$$ \bf T $$'};
for j = 1: 4
for i = 1: 5
if j == 1
text(x(j),y(i),R_labels{i},'Parent',obj.statsC, ...
'Units','normalized', 'fontweight','bold','FontSize',FS,...
'Interpreter','latex');
else
text(x(j),y(i),'\bf --','Parent',obj.statsC, ...
'Units','normalized', 'fontweight','bold','FontSize',FS-2,...
'Interpreter','latex');
end
end
end
%% ===================== Setup sizes =================== %%
set(AlgFreq, 'Heights',[-1 30 150]);
set(SpliterImportB,'Widths',[-1 120]);
set(SetupPanel,'Heights',[-1 400 280]);
set(obj.panel,'Visible','on');
end