gusucode.com > vision工具箱matlab源码程序 > vision/+vision/+internal/+ocr/+tool/BoxLabelDialog.m

    % A dialog for providing a box label.

classdef BoxLabelDialog < vision.internal.uitools.AbstractDlg
    properties
        OkButton;
        CancelButton;
        IsCanceled = true;
        Label;
        EditBox;
        EditBoxFont;
    end
    
    properties(Access=private)
        ButtonSize = [80, 20];
        ButtonHalfSpace = 10;
    end
    
    methods
        function this = BoxLabelDialog(groupName, font)
            this = this@vision.internal.uitools.AbstractDlg(...
                groupName, ...
                vision.getMessage('vision:ocrTrainer:BoxEditLabelDialogTitle'));
            this.DlgSize = [300 172];
            this.EditBoxFont = font;
            createDialog(this);
            
            % give focus to the edit box by default.
            uicontrol(this.EditBox);
        end
        
        %------------------------------------------------------------------
        function createDialog(this)
            createDialog@vision.internal.uitools.AbstractDlg(this);
            addOK(this);
            addLabelAsUnknown(this);            
            addEditBox(this);
        end
    end
       
    methods(Access=protected)                    
        
        %------------------------------------------------------------------
        function addEditBox(this)
            
            uicontrol('Parent', this.Dlg, 'Style', 'text',...
                'Position', [18 107 256 37],...
                'String', 'Enter a character label. Select "Unknown" if you are not sure.',...
                'HorizontalAlignment', 'left');
            
            uicontrol('Parent', this.Dlg, 'Style', 'text',...
                'Position', [26 69 52 13],...
                'String', 'Label:',...
                'HorizontalAlignment', 'left');
            
            this.EditBox = uicontrol('Parent', this.Dlg, 'Style', 'edit',...
                'Position', [86 63 117 23],...
                'FontName', this.EditBoxFont,...
                'Callback', @(varargin)onOK(this));
            
        end
        %------------------------------------------------------------------
        function addOK(this)
            x = this.DlgSize(1) / 2 - this.ButtonSize(1) - this.ButtonHalfSpace;
            this.OkButton = uicontrol('Parent', this.Dlg, 'Callback', @this.onOK,...
                'Position', [x, 10, this.ButtonSize], ...
                'FontUnits', 'normalized', 'FontSize', 0.6,'String',...
                getString(message('MATLAB:uistring:popupdialogs:OK')));
        end
        
        %------------------------------------------------------------------
        function addLabelAsUnknown(this)
            x = this.DlgSize(1) / 2 + this.ButtonHalfSpace;
            this.CancelButton = uicontrol('Parent', this.Dlg, ...
                'Callback', @this.onCancel,...
                'Position',[x, 10, this.ButtonSize], ...
                'FontUnits', 'normalized', 'FontSize', 0.6, ...
                'String', 'Unknown');
        end
        
        %------------------------------------------------------------------
        function onOK(this, ~, ~)
            
            isValid = validateLabel(this.EditBox.String);
            
            if isValid
                this.IsCanceled = false;
                this.Label = deblank(this.EditBox.String);
                close(this);
            end
            
            %----------------------------------
            function isValid = validateLabel(str)
                % Label must be a single char
                
                str = deblank(str);
                
                % check length of string if ascii. unicode strings can have
                % more than one char.
                isAscii = ~isempty(str) && str(1) <= 127;
                
                if isempty(str) || (numel(str) ~= 1 && isAscii) || any(isspace(str))
                    msg   = vision.getMessage('vision:ocrTrainer:BoxLabelError');
                    title = vision.getMessage('vision:ocrTrainer:BoxLabelErrorTitle');
                    errordlg(msg,title,'modal');
                    isValid = false;
                else
                    isValid = true;
                end
            end
        end
        
        %------------------------------------------------------------------
        function onCancel(this, ~, ~)  
            this.IsCanceled = true;
            close(this);
        end
        
        %------------------------------------------------------------------
        function onKeyPress(this, ~, evd)
            switch(evd.Key)
                case {'return','space'}
                    onOK(this);
                case {'escape'}
                    onCancel(this);
            end
        end
        
    end
end