%-----------------------------------------------------------------
% GUI - Program pro vyhodnocení únavy z EMG dat
% Jakub Vostatek
% 1 - spus� GUI_1
% 2 - zadej hodnoty vzorkovací frekvence, doby mìøení a úsekù, které chceš sledovat
% 3 - Naèti Signál
% 3 - Zkontroluj a klikni na výpoèet
% 4 - Klikni na tlaèítko výpis výsledkù a vyber Výpis_výsledkù.txt
% 5 - Tlaèítko uložit a konec
%------------------------------------------------------------------
function GUI_1(vstpar)
if nargin==0;
   %----------------------------------------------    
   %--- vlastni GUI, podoba grafickych objektu ---
   %----------------------------------------------
F=figure('units','norm','position',[0.01 0.05 0.99 0.90],...
         'color',[0.9 0.75 0.61],'menubar','none','name','Program',...
         'numbertitle','off','tag','figure1'); % hlavní okno Figure
   A1=axes('units','norm','position',[0.5 0.7 0.48 0.25],...
           'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
           'tag','axes1');  % kreslici platno 1
      xlabel('Èas [s]','fontsize',10)
      ylabel('Napìtí (aktivace) [mV]','fontsize',10)
      title('EMG signál','fontsize',12,'fontweight','bold') % 'normal'
%------
TL1=uicontrol('units','norm','position',[0.945 0.015 0.05 0.04],...
              'style','push','backgroundcolor','y','string','Konec',...
              'fontsize',14,'foregroundcolor','r','tag','konec',...
              'callback','GUI_1 konec'); % tlaèítko Konec
          
TL5=uicontrol('units','norm','position',[0.845 0.015 0.05 0.04],...
              'style','push','backgroundcolor','g','string','Uložit',...
              'fontsize',14,'foregroundcolor','b','tag','save',...
              'callback','GUI_1 save'); % tlaèítko Konec                     
%------ uipanel uzvatele ------
Uip1=uipanel('title','Uživatel','fontsize',14,'position',[0.01 0.73 0.2 0.25],...
             'backgroundcolor',[0.7 0.7 0.7],'foregroundcolor','k');
   Ed1=uicontrol('parent',Uip1,'units','norm','position',[0.1 0.40 0.3 0.15],...
                 'style','edit','backgroundcolor',[0.6 0.6 1],'string','1000',...
                 'fontsize',16,'foregroundcolor','k','tag','edit_sample'); % pole pro zadani Sample_rate
   Tx1=uicontrol('parent',Uip1,'units','norm','position',[0.01 0.55 0.5 0.10],...
                 'style','text','backgroundcolor',[0.7 0.7 0.7],'string','Vzorkovací frekvence [Hz]',...
                 'fontsize',10,'foregroundcolor','k','tag','text_sample'); % text nad Smaple_rate
   Ed2=uicontrol('parent',Uip1,'units','norm','position',[0.1 0.05 0.3 0.15],...
                 'style','edit','backgroundcolor',[0.6 0.6 1],'string','100',...
                 'fontsize',16,'foregroundcolor','k','tag','edit_doba'); % pole pro zadani doba_mereni
   Tx2=uicontrol('parent',Uip1,'units','norm','position',[0.05 0.2 0.4 0.10],...
                 'style','text','backgroundcolor',[0.7 0.7 0.7],'string','Doba mìøení [s]',...
                 'fontsize',10,'foregroundcolor','k','tag','text_doba'); % text nad doba_mereni
   Tl1=uicontrol('parent',Uip1,'units','norm','position',[0.08 0.75 0.34 0.15],...
                 'style','push','backgroundcolor',[1 0.6 0.6],'string','Naèti signál',...
                 'fontsize',14,'foregroundcolor','k','tag','push_nacti',...
                 'callback','GUI_1 push_nacti'); % tlacitko pro nacteni signalu             
 Ed3=uicontrol('parent',Uip1,'units','norm','position',[0.68 0.01 0.3 0.15],...
                 'style','edit','backgroundcolor',[0.6 0.6 1],'string','20',...
                 'fontsize',16,'foregroundcolor','k','tag','edit_delka_useku'); % pole pro zadani délky úseku
 Ed4=uicontrol('parent',Uip1,'units','norm','position',[0.68 0.26 0.3 0.15],...
                 'style','edit','backgroundcolor',[0.6 0.6 1],'string','79',...
                 'fontsize',16,'foregroundcolor','k','tag','edit_konec'); % pole pro zadani konec
 Ed5=uicontrol('parent',Uip1,'units','norm','position',[0.68 0.52 0.3 0.15],...
                 'style','edit','backgroundcolor',[0.6 0.6 1],'string','40',...
                 'fontsize',16,'foregroundcolor','k','tag','edit_stred'); % pole pro zadani stred
 Ed6=uicontrol('parent',Uip1,'units','norm','position',[0.68 0.77 0.3 0.15],...
                 'style','edit','backgroundcolor',[0.6 0.6 1],'string','1',...
                 'fontsize',16,'foregroundcolor','k','tag','edit_zacatek'); % pole pro zadani zacatek
 Tx5=uicontrol('parent',Uip1,'units','norm','position',[0.73 0.15 0.2 0.10],...
                 'style','text','backgroundcolor',[0.7 0.7 0.7],'string','Délka úseku',...
                 'fontsize',10,'foregroundcolor','k','tag','text_delka_useku'); % text nad délky úseku
 Tx6=uicontrol('parent',Uip1,'units','norm','position',[0.73 0.4 0.2 0.10],...
                 'style','text','backgroundcolor',[0.7 0.7 0.7],'string','Konec',...
                 'fontsize',10,'foregroundcolor','k','tag','text_konec'); % text nad délky úseku
 Tx7=uicontrol('parent',Uip1,'units','norm','position',[0.73 0.67 0.2 0.08],...
                 'style','text','backgroundcolor',[0.7 0.7 0.7],'string','Støed',...
                 'fontsize',10,'foregroundcolor','k','tag','text_sted'); % text nad délky úseku
 Tx8=uicontrol('parent',Uip1,'units','norm','position',[0.73 0.92 0.2 0.08],...
                 'style','text','backgroundcolor',[0.7 0.7 0.7],'string','Zaèátek',...
                 'fontsize',10,'foregroundcolor','k','tag','text_zacatek'); % text nad délky konec
%------
Tl2=uicontrol('units','norm','position',[0.36 0.7 0.06 0.04],...
                 'style','push','backgroundcolor',[1 0.6 0.6],'string','Výpoèet',...
                 'fontsize',14,'foregroundcolor','k','tag','push_vypocet',...
                 'callback','GUI_1 push_vypocet'); % tlacitko pro vypocet
Me1=uicontrol('units','norm','position',[0.37 0.91 0.09 0.04],...
                 'style','popup','backgroundcolor',[1 0.6 0.6],'string',' ',...
                 'fontsize',14,'foregroundcolor','k','tag','menu_signaly',...
                 'callback','GUI_1 menu_signaly'); % menu se seznamem signalu
Tx3=uicontrol('units','norm','position',[0.375 0.955 0.075 0.025],...
              'style','text','backgroundcolor',get(gcf,'color'),'string','Seznam signálù',...
              'fontsize',14,'foregroundcolor','k','tag','text_menu_signaly'); % text nad menu se signaly
Li1=uicontrol('units','norm','position',[0.252 0.70 0.1 0.25],...
                 'style','list','backgroundcolor',[1 0.6 0.6],'string',' ',...
                 'fontsize',14,'foregroundcolor','k','tag','list_signaly',...
                 'callback','GUI_1 menu_signaly'); % pole pro vypis hodnot signalu
Tx4=uicontrol('units','norm','position',[0.258 0.955 0.075 0.025],...
              'style','text','backgroundcolor',get(gcf,'color'),'string','Výpis hodnot',...
              'fontsize',14,'foregroundcolor','k','tag','text_list'); % text nad vypisem hodnot signalu     
%-------
Tl3=uicontrol('units','norm','position',[0.32 0.05 0.06 0.04],...
                 'style','push','backgroundcolor',[1 0.6 0.6],'string','Výpis výsledkù',...
                 'fontsize',12,'foregroundcolor','k','tag','push_vysledek',...
                 'callback','GUI_1 push_vysledek'); % tlacitko pro vypocet
Li2=uicontrol('units','norm','position',[0.4 0.05 0.4 0.13],...
                 'style','list','backgroundcolor',[1 0.6 0.6],'string',' ',...
                 'fontsize',10,'foregroundcolor','k','tag','list_vysledek',...
                 'callback','GUI_1 vysledek'); % pole pro vypis hodnot signalu             
%---axes dalsich 11 grafu ---
A2=axes('units','norm','position',[0.04 0.48 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes2');  % kreslici platno 2
A3=axes('units','norm','position',[0.235 0.48 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes3');  % kreslici platno 3
A4=axes('units','norm','position',[0.43 0.48 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes4');  % kreslici platno 4
A5=axes('units','norm','position',[0.625 0.48 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes5');  % kreslici platno 5
A6=axes('units','norm','position',[0.82 0.48 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes6');  % kreslici platno 6
%---
A7=axes('units','norm','position',[0.04 0.26 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes7');  % kreslici platno 7
A8=axes('units','norm','position',[0.235 0.26 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes8');  % kreslici platno 8
A9=axes('units','norm','position',[0.43 0.26 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes9');  % kreslici platno 9
A10=axes('units','norm','position',[0.625 0.26 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes10');  % kreslici platno 10
A11=axes('units','norm','position',[0.82 0.26 0.15 0.16],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes11');  % kreslici platno 11
A12=axes('units','norm','position',[0.04 0.05 0.25 0.13],...
        'color',[0.7 0.7 0.7],'xgrid','on','ygrid','on',...
        'tag','axes12');  % kreslici platno 12
AAA=[A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12]; 
set(0,'userdata',AAA) % handle vsech axes do uschovy v root
%---------------------------
else % od if nargin
   %----------------------------------------------------- 
   %--- programovani udalosti, reakce na aktivaci GUI ---
   %-----------------------------------------------------
    switch(vstpar)
        case('konec') % tlaèítko konec
           delete(get(0,'children'))
        case('push_nacti') % tlacitko pro nacetni sinalu
           [jmeno,cesta] = uigetfile('*.txt','Select the MATLAB code file');
           soubor=[cesta jmeno]; % kompletni cesta k souboru vcetne jmena
           data=load(soubor,'-ascii');
           data1=data'; % na radkovy vektor
                      %--- kresleni do axes1 ---
           Sample_Rate=get(findobj('tag','edit_sample'),'string');
             Sample_Rate=str2num(Sample_Rate);
           doba_mereni=get(findobj('tag','edit_doba'),'string');
             doba_mereni=str2num(doba_mereni);
           fvz=Sample_Rate/4; % vzork. frekvence [Hz]
           T=length(data1);   % délka signálu
           time=doba_mereni/T:doba_mereni/T:doba_mereni; % èasový vektor
           delete(get(findobj('tag','axes1'),'children')) % mazani stareho prubehu z axes1
           L1=line(time,data1,'color','k','parent',findobj('tag','axes1')); % kresleni cas. prubehu do axes1
             set(findobj('tag','list_signaly'),'string',data) % vepise hodoty signalu do list
             menu=get(findobj('tag','axes1'),'userdata'); % z uschovy pro urceni seznamu v menu
             M=length(menu);
             %---
             if isempty(menu)==0 % uz existuje polozka signalu v menu
                st=strfind(menu,jmeno) % zda je jmeno signalu uz v menu
                if isempty(st{1})==1 % menu zatim neobsahuje nazev vybraneho signalu
                   menu(M+1)={jmeno};
                end
             else
                menu=cell(1); % obsah menu jako CellArray
                menu(1)={jmeno};
             end
             %---
             set(findobj('tag','menu_signaly'),'string',menu); % vepise jmeno signalu do menu
             set(findobj('tag','axes1'),'userdata',menu); % do uschovy
             set(findobj('tag','figure1'),'userdata',data1); % do uschovy hodnoty signalu
        case('menu_signaly') % aktivace menu se signaly
            polozka_menu=get(findobj('tag','menu_signaly'),'value'); % ktera polozka menu byla vybrana
              %c=get(findobj('tag','menu_signaly'),'string')
              %dd=c{polozka_menu}
              %whos dd
           %if polozka_menu==1
           %end
        case('push_vypocet') % tlacitko pro vypocet
            Sample_Rate=get(findobj('tag','edit_sample'),'string');
             Sample_Rate=str2num(Sample_Rate);
           doba_mereni=get(findobj('tag','edit_doba'),'string');
             doba_mereni=str2num(doba_mereni);
            zacatek=get(findobj('tag','edit_zacatek'),'string');
            zacatek=str2num(zacatek);
          stred=get(findobj('tag','edit_stred'),'string');
             stred=str2num(stred);
          konec=get(findobj('tag','edit_konec'),'string');
             konec=str2num(konec);
          delka_useku=get(findobj('tag','edit_delka_useku'),'string');
             delka_useku=str2num(delka_useku);                        
          data1=get(findobj('tag','figure1'),'userdata'); % data z uschovy
            signal=data1;           
        if (exist('Výpis_výsledkù.txt'));
            delete('Výpis_výsledkù.txt');
        end
%--- volani kodu ---
AAA=get(0,'userdata'); % handle vsech axes z uschovy v root
Kod_1(Sample_Rate,doba_mereni,zacatek,stred,konec,delka_useku,signal,AAA) % volani externi funkce
%------------------- 
        case('push_vysledek') % tlacitko pro nacetni sinalu
           [jmeno,cesta] = uigetfile('*.txt','Select the MATLAB code file');
           soubor2=[cesta jmeno]; % kompletni cesta k souboru vcetne jmena
           data2=fileread(soubor2); 
           set(findobj('tag','list_vysledek'),'string',data2) % vepise hodoty signalu do list
        case('save') % tlaèítko konec
             set (gcf, 'InvertHardCopy', 'off');        
             saveas(gcf,'výsledek','png')
             saveas(gcf,'výsledek','fig')
           end % od switch
end % od if nargin
%--------------------------------------------------------