function varargout = Mapa_GUI(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Mapa_GUI_OpeningFcn, ...
                   'gui_OutputFcn',  @Mapa_GUI_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



% --- Executes just before Mapa_GUI is made visible.
function Mapa_GUI_OpeningFcn(hObject, eventdata, handles, varargin)

% NASTAVOVÁNÍ POZICE OKNA
set( handles.figure1,'Units', 'pixels' );
rozliseni = get(0, 'ScreenSize');
pozice_okna = get( handles.figure1,'Position' );
pozice_okna(1) = (rozliseni(3)-pozice_okna(3))/2;
pozice_okna(2) = (rozliseni(4)-pozice_okna(4))/2;
set( handles.figure1,'Position', pozice_okna);

% Choose default command line output for Mapa_GUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

%% zakazani tlacitek pri spusteni
set(handles.MAPA,'Enable','off')
set(handles.NACTI,'Enable','off')
set(handles.Zhodnot,'Enable','off')
set(handles.ULOZ,'Enable','off')
set(handles.export,'Enable','off')
set(handles.ukaz,'Visible','off')
% UIWAIT makes Mapa_GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Mapa_GUI_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;
handles.myvalue = [];
guidata(hObject,handles);




% Tlačítko vyber složku (výběr mozku 1 až 8 a příslušný mat soubor)
function SLOZKA_Callback(hObject, eventdata, handles)

handles.kdejsem = pwd; % kde je spusten program
set(handles.ULOZ,'Enable','off')
set(handles.Zhodnot,'Enable','off')
%% nacteni dat do uzivatelskeho prostredi
handles.kdedata=uigetdir('C:'); % kde jsou data
cd(handles.kdedata); % bez do slozky s daty
listing = dir('*.mat');
cd(handles.kdejsem); % zpet do slozky, kde je program

for i= 1:length(listing)
    hh{i}=listing(i).name;
end
set(handles.listbox1,'String',hh)
%% povoleni a zakazani tlacitek
set(handles.NACTI,'Enable','on')
set(handles.MAPA,'Enable','off')
guidata(hObject,handles); % aktualizuj data pro gui


function listbox1_Callback(hObject, eventdata, handles)
function SLOZKA_DeleteFcn(hObject, eventdata, handles)

function listbox1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% Tlačítko načti data a vyber oblast zájmu, kde se vypočítá mapa
function NACTI_Callback(hObject, eventdata, handles)

set(handles.SLOZKA,'Enable','off')
set(handles.NACTI,'Enable','off') 
mat_jmeno=get(handles.listbox1,'Value');
jmeno=get(handles.listbox1,'String');

cd(handles.kdedata);
load (jmeno{mat_jmeno});
cd(handles.kdejsem);

zvetseny = obr(:,:,8);
axes(handles.axes1);
set(handles.axes1, 'Units', 'Normalized','Position', [0.39 0.27 0.48 0.6969]);
imshow(zvetseny,[]);
B = roipoly(mat2gray(zvetseny)); % vyber ROI 
set(handles.figure1,'UserData',B); % ulozeni dat pro dalsi pouziti
set(handles.MAPA,'Enable','on')
set(handles.SLOZKA,'Enable','on')
guidata(hObject,handles);

function MAPA_Callback(hObject, eventdata, handles)
cd(handles.kdejsem);
mat_jmeno = get(handles.listbox1,'Value');
jmeno = get(handles.listbox1,'String');
cd(handles.kdedata);
load (jmeno{mat_jmeno});
cd(handles.kdejsem);
pormap = get(handles.figure1,'UserData');
set(handles.MAPA,'Enable','off')
[d]=Tjednicka(obr,pormap);
zvetseny2 = d;
axes(handles.axes1);
set(handles.axes1, 'Units', 'Normalized','Position', [0.39 0.27 0.48 0.6969]); %[320 150 384 384]);
imshow(zvetseny2,[]);
colormap('jet');
caxis([500 2500])
k = colorbar;
ylabel(k, 'Relaxační čas T1 [ms]');
set(k,'FontSize',9);
set(handles.figure1,'UserData',zvetseny2);
set(handles.Zhodnot,'Enable','on');
set(handles.ULOZ,'Enable','on');
guidata(hObject,handles);


function Zhodnot_Callback(hObject, eventdata, handles)

cd(handles.kdejsem);
%% Pocitadlo kliknuti na tlacitko Zhodnot - pro radky v tabulce
zacatekpo = str2double(get(handles.ukaz, 'String'));
novahodnota = sprintf('%d', int16(zacatekpo + 1));
set(handles.ukaz, 'String', novahodnota );
klik = str2double(novahodnota);
%% statistika
prostat = get(handles.figure1,'UserData');
imshow(prostat,[]);
set(handles.Zhodnot,'Enable','off')
set(handles.SLOZKA,'Enable','off')
B = roipoly(mat2gray(prostat));
set(handles.Zhodnot,'Enable','on')
set(handles.SLOZKA,'Enable','on')
smerodch = round(std(prostat(B)));
prumer = round(mean(prostat(B)));
medianek = median(prostat(B));
maximum = max(prostat(B));
minimum = min(prostat(B));
%% nastavení tabulky a vkladaní dat
handles.myvalue(klik,1:5) = [maximum minimum prumer medianek smerodch];
guidata(hObject,handles);
sloupjmeno = {'Maximum [ms]','Minimum [ms]','Průměr [ms]','Medián [ms]',...
    'Směrodatná odchylka [ms]'};
t = uitable('Units', 'Normalized','Position', [0.32 0.03 0.67 0.2],...
    'ColumnName',sloupjmeno);
set(t,'data',handles.myvalue(:,:));
set(handles.export,'Enable','on')
guidata(hObject,handles);


function ULOZ_Callback(hObject, eventdata, handles)
cd(handles.kdejsem);
obraz = get(handles.figure1,'UserData'); % ulozena mapa
figure(2)
imshow(obraz,[]);
colormap('jet');
caxis([500 2500])
k = colorbar;
xlabel(k, 'Relaxační čas T1 [ms]'); % popisek barevne mapy
set(k,'FontSize',9,'location','Northoutside'); % pozice popisku
mat_jmeno=get(handles.listbox1,'Value'); % ktery mozek vybran
jmeno=get(handles.listbox1,'String'); % jmeno pro ulozeni
konec = jmeno{mat_jmeno,:}; 
konec = konec(1:15); % bereme jen cast jmena
handles.prouloz=uigetdir('C:'); % kam ulozit
a = cd(handles.prouloz);
saveas(gcf,[konec],'png'); % ulozeni ve formatu png
save([konec(8:15) konec(1:7) '.mat'], 'obraz'); % ulozeni jako mat soubor
close(figure(2));
cd(handles.kdejsem);


function export_Callback(hObject, eventdata, handles)
cd(handles.kdejsem);
filename = 'StatDATA.xlsx';
databun=num2cell(handles.myvalue(:,:)); % prevod do bunek hodnot v tabulce
sloupec={'Maximum [ms]','Minimum [ms]','Průměr [ms]',...
    'Medián [ms]','Směrodatná odchylka [ms]'};
kam = get(handles.ukaz, 'String');
kam2 = str2double(kam);
radek(1:kam2,1)={'Měření'};
spojeni=[{' '} sloupec; radek databun];
path_search=uigetdir('C:');
cd(path_search);
xlswrite(filename,spojeni); % ulozeni do Excelu
cd(handles.kdejsem);
