function calc_gui

global calc_var     % Globale Varibale: der Inhalt ist auch in Subfunktionen bekannt

% GUI-Komponenten spezifizieren
figure('Units','pixel','Position',[300 300 490 60],'MenuBar','none','NumberTitle','off','Name','calc_gui');

% Uicontrols mit unterschiedlichem 'Style': 
% - edit: Eingabefeld für Text
% - popmenu: pop-up-Menü für auswahl aus einer vordefinierten Menge von Alternativen
% - pushbutton: Taste
% - text: Bereich zur Wiedergabe von Text
% Weitere uicontrols, siehe doc uicontrol
%
% Für uicontrols (wie für alle grafischen Elemente) können Callbacks spezifiziert werden
% Callbacks sind Funktionen, die unter bestimmten Bedingungen (z.B. Drücken der Taste bei pushbutton,
% oder Fokus auf oder weg vom Objekt) ausgeführt werden.
% Verweisen Callbacks auf Funktionen im selben File, so müssen diese als
% Funktionshandle (..'Callback',@fcnname,..) aufgerufen werden,  ansonsten geht das auch als string (..'Callback','fcnname')
calc_var.edit_a = uicontrol('Style','edit','Position',[50 20 50 20],'Tag','edit_a','String','0');
calc_var.popm_fcn = uicontrol('Style','popupmenu','Position',[120 20 50 20],'Tag','popmenu_fcn','String',{'+','-'},'Value',1);
calc_var.edit_b = uicontrol('Style','edit','Position',[190 20 50 20],'Tag','edit_b','String','0');
calc_var.butt_compute = uicontrol('Style','pushbutton','Position',[260 20 50 20],'String','=','Callback',@compute_result);
calc_var.text_result = uicontrol('Style','text','Position',[330 20 50 20],'Tag','text_result','String','0');
calc_var.reset_button = uicontrol('Style','pushbutton','Position',[400 20 50 20],'String','Reset','Callback', @compute_result);

function compute_result(scr, evnt)     % Subfunktion: Berechnung von fcn(a,b) und Ergbnis ausgeben
% Wenn die funktion als figure-handle (@fcn) aufgerufen wird,
% dann müssen zwei Standardargumente (hier scr, evnt) mitgeführt werden                                        

global calc_var     % Die globale Variable wird definiert, um auf ihren Inhalt zugreifen zu können

% Werte der beiden Eingabefelder und des popup-Menüs auslesen
a_txt = get(calc_var.edit_a,'String');
b_txt = get(calc_var.edit_b,'String');
fcn = get(calc_var.popm_fcn,'Value');   % Numerischer Wert, der die aktuelle Auswahl wiedergibt

% Umwandeln von String in numerisch
a = str2double(a_txt);
b = str2double(b_txt);

% Berechnung in Abhängigkeit von der gewählten Funktion: + oder -
if fcn == 1   
    result = a + b;
    
else    
    result = a - b;
    
end

get(calc_var.reset_button,'String')

if fcn == 1
   set(calc_var.edit_a, string', '')
   set(calc_var.edit_b, string', '')
end
result_txt = num2str(result);   %Eregbnis in Text umwandeln

set(calc_var.text_result,'String',result_txt);  % Ergebnis in Ergebnis-Textfeld eintragen



% Ergänzende Info:
% Mit folgenden Anweisungen könnte auch ohne globale Variable Zugriff auf die
% entsprechenden uicontrols gewonnen werden:
%
%ch = get(gcf,'Children');
%edit_a = ch(strcmp(get(ch,'Tag'),'edit_a'))
%popm_fcn = ch(strcmp(get(ch,'Tag'),'popm_fcn'))
%edit_b = ch(strcmp(get(ch,'Tag'),'edit_b'))
%text_result = ch(strcmp(get(ch,'Tag'),'text_result'))
