function varargout = mainAutoReg(varargin)
% Inicializace kódu 
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @mainAutoReg_OpeningFcn, ...
                   'gui_OutputFcn',  @mainAutoReg_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% Konec inicializace kódu
% --- Vykonáno předtím, než je GUI viditelné.
function mainAutoReg_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
rbNewton_Callback([],[],handles)

function varargout = mainAutoReg_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;

% --- Vykonání po stisknutí tlačítka rbNewton.
function rbNewton_Callback(hObject, eventdata, handles)
valuePanelNewton=get(handles.rbNewton,'Value');                %hodnota je získana z radiobuttonu v grafickém rozhraní, nabývá hodnot 0 a 1
if get(handles.rbNewton,'Value')==0                            %pokud je hodnota 0
    set(handles.rbNewton,'Value',1)                            %je po stisknutí nastavena na hodnotu 1, 
    return
end
if valuePanelNewton==1                                         %pokud je získaná binární hodnota z radiobuttonu 0 pak
    set(handles.NewtonPanel,'Visible','on')                    %se panel stane viditelným
    set(handles.FireflyPanel,'Visible','off')                  %ostatní panely jsem zneviditelněny
    set(handles.GeneticPanel,'Visible','off')                  %ostatní panely jsem zneviditelněny
    set(handles.rbFirefly,'Value',0);                          %hodnota dalších radiobuttonu je nastavena na 0, ale nebylo více panelů aktivních zároveň
    set(handles.rbGenetic,'Value',0);                          %hodnota dalších radiobuttonu je nastavena na 0, ale nebylo více panelů aktivních zároveň    
else
    set(handles.NewtonPanel,'Visible','off')                   %pokud hodnota radiobuttonu rovna jedné není, není panel viditelný
end
% --- Vykonání po stisknutí tlačítka rbGenetic.
function rbGenetic_Callback(hObject, eventdata, handles)
valuePanelGenetic=get(handles.rbGenetic,'Value');              %hodnota je získana z radiobuttonu v grafickém rozhraní, nabývá hodnot 0 a 1

if get(handles.rbGenetic,'Value')==0;                          %pokud je získaná binární hodnota z radiobuttonu 0 pak
    set(handles.rbGenetic,'Value',1) ;                         %je po stisknutí nastavena na 1
    return
end
if valuePanelGenetic==1                                        %pokud je získaná binární hodnota z radiobuttonu 0 pak
      set(handles.GeneticPanel,'Visible','on')                 %se panel stane viditelným
      set(handles.FireflyPanel,'Visible','off')                %ostatní panely jsem zneviditelněny
      set(handles.NewtonPanel,'Visible','off')                 %ostatní panely jsem zneviditelněny
      set(handles.rbFirefly,'Value',0);                        %hodnota dalších radiobuttonu je nastavena na 0, ale nebylo více panelů aktivních zároveň
      set(handles.rbNewton,'Value',0);                         %hodnota dalších radiobuttonu je nastavena na 0, ale nebylo více panelů aktivních zároveň
else
    set(handles.GeneticPanel,'Visible','off')                  %pokud hodnota radiobuttonu rovna jedné není, není panel viditelný
end
% --- Vykonání po stisknutí tlačítka rbFirefly.
function rbFirefly_Callback(hObject, eventdata, handles)
valuePanelFirefly=get(handles.rbFirefly,'Value');              %hodnota je získana z radiobuttonu v grafickém rozhraní, nabývá hodnot 0 a 1

if get(handles.rbFirefly,'Value')==0;                          %pokud je získaná binární hodnota z radiobuttonu 0 pak
    set(handles.rbFirefly,'Value',1)                           %je po stisknutí nastavena na 1
    return
end
if valuePanelFirefly==1                                        %pokud je získaná binární hodnota z radiobuttonu 0 pak
    set(handles.FireflyPanel,'Visible','on')                   %se panel stane viditelným
    set(handles.GeneticPanel,'Visible','off')                  %ostatní panely jsem zneviditelněny
    set(handles.NewtonPanel,'Visible','off')                   %ostatní panely jsem zneviditelněny
    set(handles.rbGenetic,'Value',0);                          %hodnota dalších radiobuttonu je nastavena na 0, ale nebylo více panelů aktivních zároveň
    set(handles.rbNewton,'Value',0);                           %hodnota dalších radiobuttonu je nastavena na 0, ale nebylo více panelů aktivních zároveň
else
    set(handles.FireflyPanel,'Visible','off')                  %pokud hodnota radiobuttonu rovna jedné není, není panel viditelný
end
% --- Je vykonáno po stisknutí BrowseButton.
function BrowseButton_Callback(hObject, eventdata, handles)
global sekvence                                                %globální proměnná nesoucí registrovanou sekvenci
[FileName,PathName] = uigetfile({'*.mat'},'Výběr sekvence');   %do proměnných v hranaté závorce se uloží cesta a název souboru
if FileName==0
    return
end
fullPathName = strcat(PathName,FileName);                      %vytvořené celé cesty k souboru
sekvence=load(fullPathName);                                   %nahrání sekvence
sekvence.PathName = PathName;                                  %uložení cesty do proměnné, která je přiřazena ke globální proměnné
set(handles.namePath,'string',PathName)                        %zobrazení cesty v grafickém rorzhraní
set(handles.nameSequence,'string',FileName)                    %zobrazení názvu souboru
set(hObject,'UserData',1);

%% Newtovova optimalizační metoda
% --- Je provedeno po označení radiobuttonu Odchylka kvadrátů.
function SSD_Callback(hObject, eventdata, handles)           %radiobutton pro odchylku kvadrátů
set(handles.SSD,'Value',1);                                  %aktivace radiobuttonu odchylka kvadrátů
set(handles.Korelace,'Value',0);                             %deaktivace ostatních radiobuttonů
set(handles.Cosinove,'Value',0);                             %deaktivace ostatních radiobuttonů
    
% --- Je provedeno po označení radiobuttonu Korelace.
function Korelace_Callback(hObject, eventdata, handles)
set(handles.SSD,'Value',0);                                  %deaktivace ostatních radiobuttonů
set(handles.Korelace,'Value',1);                             %aktivace radiobuttonu korelace
set(handles.Cosinove,'Value',0);                             %deaktivace ostatních radiobuttonů
% --- Je provedeno po označení radiobuttonu Kosinové kritérium.
function Cosinove_Callback(hObject, eventdata, handles)
set(handles.SSD,'Value',0);                                  %deaktivace ostatních radiobuttonů
set(handles.Korelace,'Value',0);                             %deaktivace ostatních radiobuttonů
set(handles.Cosinove,'Value',1);                             %aktivace radiobutton kosinové kritérium
% --- Je provedeno po stisknutí tlačítka Spustit v panelu Newtonova metoda.
function RunNewton_Callback(hObject, eventdata, handles)
global sekvence sekvenceNewton                               %proměnné, které budou použity jako globální
set(handles.nameOfFile,'string','') 
set(handles.final_name,'string','')  
if ~isempty(sekvence)                                        %pokud není proměnná sekvence prázdná tak...
if get(handles.SSD,'Value')==1;                              %pokud se hodnota radiobuttonu SSD rovna 1
        mod=1;                                               %proměnná mód nabude hodnoty 1
    elseif get(handles.Korelace,'Value')==1;                 %pokud se hodnota radiobuttonu Korelace rovna 1
        mod=2;                                               %proměnná mód nabude hodnoty 2
    elseif get(handles.Cosinove,'Value')==1;                 %pokud se hodnota radiobuttonu Kosinové krit. rovna 1      
        mod=3;                                               %proměnná mód nabude hodnoty 3
    else                                                     %pokud není zvolena žádná kriteriální funkce  
        disp('Zvolte kriteriální funkci')                    %konzole vypíše hlášku 
end
snimek1=sekvence.data1{1,1};                                 %volba referenčního snímku
snimekADouble=double(snimek1);                               %převod snímku do formátu double
[sekvenceNewton]=NewtonOptimization(snimekADouble,sekvence,mod);%volání funkce newtonova optimalizace s danými vstupními proměnnými
else 
end
% --- Executes on selection change in popup_pocet_jedincu.
function popup_pocet_jedincu_Callback(hObject, eventdata, handles)  %tento kód byl generován při vytvoření rolovacího menu
function popup_pocet_jedincu_CreateFcn(hObject, eventdata, handles) %tento kód byl generován při vytvoření rolovacího menu
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))%nastavené barev, generováno automaticky
    set(hObject,'BackgroundColor','white');                         %generováno automaticky                             
end
function popup_replikace_Callback(hObject, eventdata, handles)      %tento kód byl generován při vytvoření rolovacího menu
function popup_replikace_CreateFcn(hObject, eventdata, handles)     %tento kód byl generován při vytvoření rolovacího menu
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))%nastavené barev, generováno automaticky
    set(hObject,'BackgroundColor','white');
end
function popup_mutace_Callback(hObject, eventdata, handles)         %tento kód byl generován při vytvoření rolovacího menu     
function popup_mutace_CreateFcn(hObject, eventdata, handles)        %tento kód byl generován při vytvoření rolovacího menu
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))%nastavené barev, generováno automaticky
    set(hObject,'BackgroundColor','white');
end
%%GENETICKY ALGORITMUS
% --- Je vykonáno po stisknutí tlačítka Spustit v panelu genetického algoritmu
function RunGenetic_Callback(hObject, eventdata, handles)
global sekvence sekvenceGenetic                                     %globální proměnné
set(handles.nameOfFile,'string','') 
set(handles.final_name,'string','')  
if ~isempty(sekvence)                                               %pokud není proměnná sekvence prázdná
    valPocetJedincu=get(handles.popup_pocet_jedincu,'value');       %do proměnné je uložna získaná hodnota z rolovacího menu
    pocetjedincu=7;                                                 %definování proměnné 
    switch valPocetJedincu                                          %pokud má hodnota z rolovacího menu danou hodnotu je přiřazena proměnná daná hodnota
        case 1                                                       %pokud je vzata první hodnota
            pocetjedincu=5;                                         %proměnné pocetjedincu je přiřazena daná hodnota
        case 2                                                      %pokud je vzata druhá hodnota 
            pocetjedincu=7;                                         %proměnné pocetjedincu je přiřazena daná hodnota
        case 3                                                       %pokud je vzata třetí hodnota
            pocetjedincu=15;                                        %proměnné pocetjedincu je přiřazena daná hodnota
        case 4                                                      %pokud je vzata čtvrtá hodnota    
            pocetjedincu=20;                                        %proměnné pocetjedincu je přiřazena daná hodnota     
    end
    valReplikace=get(handles.popup_replikace,'value');              %do proměnné je uložna získaná hodnota z rolovacího menu
    pocetreplikaci=1;                                               %definování proměnné 
    switch valReplikace                                             %pokud má hodnota z rolovacího menu danou hodnotu je přiřazena proměnná daná hodnota
        case 1                                                      %pokud je vzata první hodnota
            pocetreplikaci=1;                                       %je do proměnné uložena hodnota
        case 2                                                      %pokud je vzata druhá hodnota  
            pocetreplikaci=2;                                       %je do proměnné uložena hodnota
        case 3                                                      %pokud je vzata třetí hodnota
            pocetreplikaci=3;                                       %je do proměnné uložena hodnota
        case 4                                                      %pokud je vzata čtvrtá hodnota    
            pocetreplikaci=4;                                       %je do proměnné uložena hodnota
        case 5                                                      %pokud je vzata pátá hodnota                     
            pocetreplikaci=5;
    end
    valMutace=get(handles.popup_mutace,'value');                    %do proměnné je uložna získaná hodnota z rolovacího menu
    pstmutace=0.8;                                                  %definování proměnné          
    switch valMutace                                                %pokud má hodnota z rolovacího menu danou hodnotu je přiřazena proměnná daná hodnota      
        case 1                                                      %pokud je vzata první hodnota
            pstmutace=0.9;                                          %je do proměnné uložena hodnota
        case 2                                                      %pokud je vzata druhá hodnota 
            pstmutace=0.8;                                          %je do proměnné uložena hodnota   
        case 3                                                      %pokud je vzata třetí hodnota
            pstmutace=0.7;                                          %je do proměnné uložena hodnota
        case 4                                                      %pokud je vzata čtvrtá hodnota    
            pstmutace=0.6;                                          %atd...
        case 5
            pstmutace=0.5;
        case 6
            pstmutace=0.4;
        case 7
            pstmutace=0.3;
        case 8
            pstmutace=0.2;
        case 9
            pstmutace=0.1;
    end
    if get(handles.SSD,'Value')==1;                                %pokud se hodnota radiobuttonu SSD rovna 1
            mod=1;                                                 %nabude proměnná hodnoty 1 
        elseif get(handles.Korelace,'Value')==1;                   %pokud se hodnota radiobuttonu Korelace rovna 1
            mod=2;                                                 %nabude proměnná hodnoty 1 
        elseif get(handles.Cosinove,'Value')==1;                   %pokud se hodnota radiobuttonu Kosinové kritérium rovna 1    
            mod=3;                                                 %nabude proměnná hodnoty 1 
        else
            disp('Zvolte kriteriální funkci')                      %pokud ne, je vyspána hláška
    end
    snimek1=sekvence.data1{1,1};                                   %volba referenčního snímku
    snimekADouble=double(snimek1);                                 %převod do formátu double
    [sekvenceGenetic]=GeneticOptimization(snimekADouble,sekvence,mod,pocetjedincu,pocetreplikaci,pstmutace);%volání funkce genetická optimalizace
end
% --- Rolovací menu, generováno po vytvoření v gui.
function popu_gamma_Callback(hObject, eventdata, handles)          %generováno automaticky
function popu_gamma_CreateFcn(hObject, eventdata, handles)         %generováno automaticky
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');                        %generováno automaticky
end
function popup_alpha_Callback(hObject, eventdata, handles)         %generováno automaticky
function popup_alpha_CreateFcn(hObject, eventdata, handles)        %generováno automaticky
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
% --- Vykonáno po stisknutít tlačítka spustit v panel Světlušky.
function RunFirefly_Callback(hObject, eventdata, handles)
global sekvence sekvenceFirefly                                    %globální proměnné
set(handles.nameOfFile,'string','') 
set(handles.final_name,'string','')  
if ~isempty(sekvence)                                              %pokud není proměnná sekvence prázdná
if get(handles.SSD,'Value')==1;                                    %volba módu, viz popis na řádcích 190 - 197
        mod=1;
    elseif get(handles.Korelace,'Value')==1;
        mod=2;
    elseif get(handles.Cosinove,'Value')==1;
        mod=3;
    else
        disp('Zvolte kriteriální funkci')
end
valAlpha=get(handles.popup_alpha,'value');                      
alpha=5;                                                            %definování proměnné alpha
    switch valAlpha                                                 %stejný princip jako na řádcích 148 - 189
         case 1
             alpha=1;
          case 2
             alpha=2;
          case 3
             alpha=3;
          case 4
             alpha=4;
         case 5
             alpha=5;
          case 6
             alpha=6;
          case 7
             alpha=7;
          case 8
             alpha=8;
          case 9
             alpha=9;
    end
valGamma=get(handles.popu_gamma,'value');                           %získání proměnné z rolovacího menu
gamma=0.1;                                                          %definování proměnné gamma
    switch valGamma                                                 %stejný princip jako na řádcích 148 - 189        
        case 1
            gamma=0.1;
        case 2
            gamma=0.2;
        case 3
            gamma=0.3;
        case 4
            gamma=0.4;
        case 5
            gamma=0.5;
        case 6
            gamma=0.6;
        case 7
            gamma=0.7;
        case 8
            gamma=0.8;
        case 9
            gamma=0.9;
    end
valBeta=get(handles.pop_upBeta,'value');                              %získání hodnoty beta z rolovacího menu      
beta0=5;                                                              %definování hodnoty beta
    switch valBeta                                                    %stejný princip jako na řádcích 148 - 189
         case 1
            beta0=1;
         case 2
            beta0=2;
         case 3
            beta0=3;
         case 4
            beta0=4;
         case 5
            beta0=5;
         case 6
            beta0=6;
         case 7
            beta0=7;
         case 8
            beta0=8;
         case 9
            beta0=9;
    end
pocetSvetlusek=get(handles.popupPocetSvet,'value');                  %získání hodnoty počet světlušek
n_ff=20;                                                             %definování proměnné počet světlušek
    switch pocetSvetlusek                                            %stejný princip jako na řádcích 148 - 189
         case 1
            n_ff=4;
        case 2
            n_ff=5;
        case 3
            n_ff=8;
        case 4
            n_ff=10;
        case 5
            n_ff=15;
        case 6
            n_ff=20;
        case 7
            n_ff=25;    
    end 
delta=0.97;                                                          %promenna pro vahovani vahy nahodneho pohybu, vliv mám její součit s alpha, která se volí
snimek1=sekvence.data1{1,1};                                         %volba referenčního snímku
snimekADouble=double(snimek1);                                       %převod do formátu double
[sekvenceFirefly]=fireflyOptimization(snimekADouble,sekvence,mod,n_ff,gamma,alpha,delta,beta0);%volání funkce optimalizace světlušky
end
% --- Vykonáno po stisknutí tlačítka Uložit.
function ulozitButton_Callback(hObject, eventdata, handles)
global sekvenceFirefly sekvenceNewton sekvence sekvenceGenetic        %globální proměnné
if get(handles.BrowseButton,'UserData')==1
if get(handles.rbFirefly,'Value')==1;                                 %pokud je oznčen radiobutton Světlušky
[vyska,~]=size(sekvenceFirefly);                                      %je určen počet snímků v sekvenci
vyslednaStruktura=cell(1,4);                                          %definice matice
vyslednaStruktura2=cell(1,4);                                         %definice matice
shift_hor=zeros(4,1);                                                 %definice matice
shift_ver=zeros(4,1);                                                 %definice matice  
hWait = waitbar(0,'Posun a ukládání snímků...');  
    for i=1:(vyska)                                                   %pro všechny snímky v sekvence              
        vyslednaStruktura{1,i}=posunuti_snimku(sekvence.data1{1,sekvenceFirefly(i,1)},sekvenceFirefly(i,2),sekvenceFirefly(i,3)); %je volána funkce posunutí snímku, první parametrem je snímek, který má bát posunut, dalšími o kolik pixelů v obou směrech
        vyslednaStruktura2{1,i}=posunuti_snimku(sekvence.data2{1,sekvenceFirefly(i,1)},sekvenceFirefly(i,2),sekvenceFirefly(i,3)); %posun snímku s kontrastní látkou  
        shift_hor(i,1)=sekvenceFirefly(i,2);                          %uložení získaného horizontálního posunu
        shift_ver(i,1)=sekvenceFirefly(i,3);                          %uložení získaného vertikálního posunu   
        waitbar(i/vyska) 
    end
    data1 = vyslednaStruktura;                                        %přepis lícované sekvence do proměnné 
    data2 = vyslednaStruktura2;                                       %přepis lícované sekvence do proměnné 
    info = sekvence.info;                                             %uložení informací o sekvenci
    info.autreg.shift_hor = -shift_hor;                               %uložení posunu do informací, záporné znaménko je zde pro korekci, aby posun v osách svou orientaci odpovídal softwaru pro manuální registraci, který slouží jako vzor
    info.autreg.shift_ver = -shift_ver;                               %uložení posunu do informací, záporné znaménko je zde pro korekci, aby posun v osách svou orientaci odpovídal softwaru pro manuální registraci, který slouží jako vzor  
    info.codewords{1,size(info.codewords,2)+1}='reg';                 %možnost klíčového slova - přejato z komplexního programu registace uzv snímků, do něj byl měl být 
    filename_new=name_file(info);                                     %zjisti jak se bude jmenovat soubor po ulozeni
    save([sekvence.PathName filename_new], 'data1','data2','info');   %uložení do výsledného matice
    set(handles.nameOfFile,'string',filename_new)
    set(handles.final_name,'string','Název:')  
    close(hWait) 
elseif get(handles.rbNewton,'Value')==1;                              %pokud je označen radiobutton Newtonova opt.metoda
[vyska,~]=size(sekvenceNewton);                                       %je provedeno to co na řádcích 303 až 312   
vyslednaStruktura=cell(1,4);
vyslednaStruktura2=cell(1,4);
shift_hor=zeros(4,1);
shift_ver=zeros(4,1);
hWait = waitbar(0,'Posun a ukládání snímků...');                                     %ukazatel stavu probíhajícího procesu   
    for i=1:(vyska)
        vyslednaStruktura{1,i}=posunuti_snimku(sekvence.data1{1,sekvenceNewton(i,1)},sekvenceNewton(i,2),sekvenceNewton(i,3));
        vyslednaStruktura2{1,i}=posunuti_snimku(sekvence.data2{1,sekvenceNewton(i,1)},sekvenceNewton(i,2),sekvenceNewton(i,3));   
        shift_hor(i,1)=sekvenceNewton(i,2);
        shift_ver(i,1)=sekvenceNewton(i,3);
        waitbar(i/vyska)    
    end
    data1 = vyslednaStruktura;
    data2 = vyslednaStruktura2;
    info = sekvence.info;
    info.autreg.shift_hor = -shift_hor;
    info.autreg.shift_ver = -shift_ver;
    info.codewords{1,size(info.codewords,2)+1}='reg';   
    filename_new=name_file(info);                
    save([sekvence.PathName filename_new], 'data1','data2','info'); 
    set(handles.nameOfFile,'string',filename_new)  
    set(handles.final_name,'string','Název:')  
    close(hWait) 
elseif get(handles.rbGenetic,'Value')==1;                                   %pokud je označen radiobutton genetický algoritmus   
    [vyska,~]=size(sekvenceGenetic);                                        %je provedeno to co na řádcích 303 až 312   
    vyslednaStruktura=cell(1,4);
    vyslednaStruktura2=cell(1,4);
    shift_hor=zeros(4,1);
    shift_ver=zeros(4,1);
    hWait = waitbar(0,'Posun a ukládání snímků...'); 
    for i=1:(vyska)
        vyslednaStruktura{1,i}=posunuti_snimku(sekvence.data1{1,sekvenceGenetic(i,1)},sekvenceGenetic(i,2),sekvenceGenetic(i,3));
        vyslednaStruktura2{1,i}=posunuti_snimku(sekvence.data2{1,sekvenceGenetic(i,1)},sekvenceGenetic(i,2),sekvenceGenetic(i,3));   
        shift_hor(i,1)=sekvenceGenetic(i,2);
        shift_ver(i,1)=sekvenceGenetic(i,3);
        waitbar(i/vyska)   
    end
    data1 = vyslednaStruktura;
    data2 = vyslednaStruktura2;
    info = sekvence.info;
    info.autreg.shift_hor = -shift_hor;
    info.autreg.shift_ver = -shift_ver;
    info.codewords{1,size(info.codewords,2)+1}='reg';   
    filename_new=name_file(info);              
    save([sekvence.PathName filename_new], 'data1','data2','info'); 
    set(handles.nameOfFile,'string',filename_new) 
    set(handles.final_name,'string','Název:')  
    close(hWait) 
else
end
end
% --- Je vykonáno po zavření grafického rozhraní
function figure1_CloseRequestFcn(hObject, eventdata, handles)
delete(hObject);                                                             %vymazání objektových proměnných, generováno automaticky                                            
clear global all    
%vymazání globálních proměnných
function pop_upBeta_Callback(hObject, eventdata, handles)                    %generováno automaticky
function pop_upBeta_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function popupPocetSvet_Callback(hObject, eventdata, handles)
function popupPocetSvet_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
