Skip to content
Snippets Groups Projects
user_pass_input.m 2.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • function [user, pw] = user_pass_input
    %user_pw_input
    %   UI window to obtain user name and pwword for openBIS
    
    % check if Java is available (Matlab not started with -nojvm flag)
    if ~usejava('awt') 
        error('This function requires Java. Start Matlab with Java enabled.')
    end
    
    % default values
    user = ''; pw = '';
    
    % Setup figure for UI window
    sz = get(0, 'ScreenSize');
    dlgName = 'openBIS Credentials';
    
    % setup figure window
    hFig  = figure(WindowStyle='modal', Position=[(sz(3:4)-[350 100])/2 350 100], Name=dlgName, ...
        Resize='off', NumberTitle='off', Menubar='none', Color=[0.9 0.9 0.9], CloseRequestFcn=@(~,~)uiresume);
    
    % setup text field for user name
    hUser = uicontrol(hFig, Style='edit', Position=[80 70 250 20], KeyPressFcn=@userKeyPress, ...
        FontSize=10, BackGroundColor='w', String=user);
    
    % setup text field for password
    hPw = uicontrol(hFig, Style='edit', Position=[80 40 250 20], KeyPressFcn=@pwKeyPress, ...
        FontSize=10, BackGroundColor='w', String='');
    
    % labels for text fields
    annotation(hFig, 'textbox', Units='pixels', Position=[00 70 80 20], String='Username', ...
        EdgeColor='n', VerticalAlignment='middle', HorizontalAlignment='right')
    annotation(hFig, 'textbox', Units='pixels', Position=[00 40 80 20], String='Password', ...
        EdgeColor='n', VerticalAlignment='middle', HorizontalAlignment='right')
    
    % OK / cancel buttons
    hOK = uicontrol(hFig, Style="pushbutton", Position=[140 7 50 20], Callback=@okClick, String='OK');
    hCancel = uicontrol(hFig, Style="pushbutton", Position=[215 7 50 20], Callback=@cancelClick, String='Cancel');
    
    uicontrol(hUser) % give focuse to username field
    uiwait % wait for uiresume command
    drawnow
    
    user = hUser.String;
    delete(hFig)
    
    
        function userKeyPress(~, event)
            if event.Key == "return"
                uiresume, return %done
            elseif event.Key == "escape"
                hUser.String = ''; pw = '';
                uiresume, return %abort
            end
        end
    
        function pwKeyPress(~, event)
            if event.Key == "backspace"
                pw = pw(1:end-1); %shorten pwword
            elseif event.Key == "return"
                uiresume, return %done
            elseif event.Key == "escape"
                hUser.String = ''; pw = '';
                uiresume, return %abort
            elseif contains(event.Character,num2cell(char(32:126)))
                pw(end+1) = event.Character; % append key to password
            end
            redrawPassField(pw)
        end
    
        function redrawPassField(pw)
            % redraw the entire password text field with the entered value
            % hidden
            hPw = uicontrol(hFig, Style='edit', Position=[80 40 250 20], KeyPressFcn=@pwKeyPress, ...
                FontSize=10, BackGroundColor='w', String=repmat(char(8226),size(pw)));
        end
    
        function okClick(source, event)
            uiresume, return
        end
    
        function cancelClick(source, event)
            % default values
            hUser.String = ''; pw = '';
            uiresume, return
        end
    
    end