www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wmemtool.m

    function varargout = wmemtool(option,varargin)
%WMEMTOOL Manage memory tool.
%
% GENERAL BUFFER OPTIONS
%-----------------------
%   'handle' , 'create' , 'close', 'empty' ,
%   'put', 'get', 'del', 'find'.
%  
%   HDL = WMEMTOOL('handle')
%   HDL = WMEMTOOL('create')
%   WMEMTOOL('close')
%   WMEMTOOL('empty')
%   WMEMTOOL('put',NAME,VAL) or wmemtool('put',NAME,VAL,STRINFO)
%   creates if buffer is not found.
%
%   VAL = WMEMTOOL('get',NAME,STRINFO)
%   returns [] if variable named "NAME" is not found.
%
%   WMEMTOOL('del',NAME,VAL) or WMEMTOOL('del',NAME,VAL,STRINFO)
%
%   REP = WMEMTOOL('find') returns 1 if buffer exists else
%   0 is returned.
%
%  BUFFER IN A FIGURE OPTIONS
%----------------------------
%   T = WMEMTOOL('ini',FIG,BLOCNAME,NBVAL)
%   T = WMEMTOOL('hmb',FIG,BLOCNAME)
%   T is the handle of the text which contains the MemBloc.
%
%   WMEMTOOL('wmb',FIG,BLOCNAME,IND1,V1,...,IND12,V12),
%   [V1,..V12] = WMEMTOOL('rmb',FIG,BLOCNAME,IND1,...,IND12),
%   with : Vj = jth value and INDj = jth index in the MemBloc.
%
%   WMEMTOOL('dmb',FIG,BLOCNAME) deletes the MemBloc.

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-May-96.
%   Last Revision 04-Jul-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
% $Revision: 1.14.4.7 $

% Tag for GENERAL BUFFER.
%------------------------
tag_fig_mem = 'Fig_Mem_Buffer';
tag_axe_mem = 'Axe_Mem_Buffer';

% Show Buffers.
%--------------
old_show = get(0,'ShowHiddenHandles');
set(0,'ShowHiddenHandles','on');

option = option(1:3);

%-----------------------------%
%                             %
%  BUFFER IN A FIGURE OPTIONS %
%                             %
%-----------------------------%

switch option
    case 'rmb'
        %******************************************%
        %** OPTION = 'rmb' - reading in MemBloc. **%
        %******************************************%
        % win_handle = in2
        % bloc_name  = in3
        % if nargin>3
        %    in(k+3) index and out(k) value.
        %-----------------------------------
        varargout{1} = [];
        fig = varargin{1};
        [okFig,axe_mem] = bufferInFig(fig,tag_axe_mem);
        if okFig && ~isempty(axe_mem)
            t = findobj(axe_mem,'Type','text','Tag',varargin{2});
            if ~isempty(t)
                bloc = get(t,'UserData');
                if length(varargin{3})>1
                    indices = varargin{3};
                else
                    indices = cat(1,varargin{3:end});
                end
                varargout = bloc(indices);
            end
        else
            nbout = nargout;
            varargout = cell(1,nbout);
        end

    case 'wmb'
        %******************************************%
        %** OPTION = 'wmb' - writing in MemBloc. **%
        %******************************************%
        % win_handle = in2
        % bloc_name  = in3
        %    in(2k+2) index and in(2k+3) value
        %
        % out(1) = text handle.
        %--------------------------------------
        fig = varargin{1};
        [okFig,axe_mem] = bufferInFig(fig,tag_axe_mem);
        if okFig
            if ~isempty(axe_mem)
                t = findobj(axe_mem,'Type','text','Tag',varargin{2});
                ok_bloc = ~isempty(t);
            else
                ok_bloc = 0;
            end
            if ~ok_bloc
                nbval = fix((length(varargin)-2)/2);
                if nbval<0 , nbval = 0; end
                t = wmemtool('ini',fig,varargin{2},nbval);
            end
            bloc    = get(t,'UserData');
            indvar  = 3:2:length(varargin)-1;
            indices = cat(1,varargin{indvar});
            bloc(indices) = varargin(indvar+1);
            set(t,'UserData',bloc);
            varargout{1} = t;
        else
            varargout{1} = [];
        end

    case 'hmb'
        %*****************************************%
        %** OPTION = 'hmb' - handle of MemBloc. **%
        %*****************************************%
        % win_handle = in2
        % bloc_name  = in3
        %------------------
        fig = varargin{1};
        [okFig,axe_mem] = bufferInFig(fig,tag_axe_mem);
        if okFig && ~isempty(axe_mem)
            varargout{1} = findobj(axe_mem,'Type','text','Tag',varargin{2});
        else
            varargout{1} = [];
        end

    case 'ini'
        %******************************************%
        %** OPTION = 'ini' - creating a MemBloc. **%
        %******************************************%
        % win_handle = in2
        % bloc_name  = in3
        % nbval = in4
        %-------------------
        fig = varargin{1};
        [okFig,axe_mem] = bufferInFig(fig,tag_axe_mem);
        if okFig 
            if isempty(axe_mem)
                axe_mem = axes(...
                               'Parent',fig,                   ...
                               'HandleVisibility','off',       ...
                               'Visible','off',                ...
                               'Position',[-1 -1 0.001 0.001], ...
                               'Tag',tag_axe_mem               ...
                               );
            end
            t = findobj(axe_mem,'Type','text','Tag',varargin{2});
            if isempty(t)
                t = text('Parent',axe_mem,'Visible','off','Tag',varargin{2});
            end
            set(t,'UserData',cell(1,varargin{3}));
            varargout{1} = t;
        else
            varargout{1} = [];
        end

    case 'dmb'
        %***********************%
        %** OPTION = 'dmb' -  **%
        %***********************%
        % fig = in2             %
        % bloc_name = in3 , ... %
        %-----------------------%
        fig = varargin{1};
        [okFig,axe_mem] = bufferInFig(fig,tag_axe_mem);
        if okFig && ~isempty(axe_mem)
            t = [];
            txt_handles = findobj(axe_mem,'Type','text');
            if ~isempty(txt_handles)
                for k = 2:length(varargin)
                    t = [t;findobj(txt_handles,'Tag',varargin{k})]; %#ok<AGROW>
                end
            end
            if ~isempty(t) , delete(t); end
        end

%------------------------%
%                        %
% GENERAL BUFFER OPTIONS %
%                        %
%------------------------%
    case 'han'
        %***************************************************%
        %** OPTION = 'handle' - get handle of fig buffer  **%
        %***************************************************%
        varargout{1} = findobj(0,'Type','figure','Tag',tag_fig_mem);

    case 'cre'
        %********************************************%
        %** OPTION = 'create' - create fig buffer  **%
        %********************************************%
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        if isempty(fig)
            fig = colordef('new','none');
            set(fig,'HandleVisibility','Off','Tag',tag_fig_mem);
        end
        varargout{1} = fig;

    case 'put'
        %************************%
        %** OPTION = 'put' -   **%
        %************************%
        %------------------------------------
        % bloc_name = in2
        % bloc_set:  k = 1 , ...
        %   in(2k+1) index and in(2k+2) value
        %------------------------------------
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        if isempty(fig) , fig = wmemtool('create'); end
        varargout{1} = wmemtool('wmb',fig,varargin{:});
        varargout{2} = fig;

    case 'get'
        %************************%
        %** OPTION = 'get' -   **%
        %************************%
        %------------------------------%
        % name = in2                   %
        % in3 optional string value    %
        %------------------------------%
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        if ~isempty(fig)
            [varargout{1:length(varargin)-1}] = wmemtool('rmb',fig,varargin{:});
        else
            varargout{1} = [] ;
        end

    case 'del'
        %*************************%
        %** OPTION = 'del' -    **%
        %*************************%
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        if ~isempty(fig), wmemtool('dmb',fig,varargin{:}); end
        
    case 'emp'
        %**************************%
        %** OPTION = 'empty' -   **%
        %**************************%
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        if ~isempty(fig) , delete(findobj(fig,'Type','text')); end

    case 'fin'
        %************************%
        %** OPTION = 'find' -  **%
        %************************%
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        varargout{1} = 1-isempty(fig);

    case 'clo'
        %******************************************%
        %** OPTION = 'close' - close fig buffer  **%
        %******************************************%
        fig = findobj(0,'Type','figure','Tag',tag_fig_mem);
        if ~isempty(fig)
            Str_Yes = getWavMSG('Wavelet:commongui:Str_Yes');
            Str_No =  getWavMSG('Wavelet:commongui:Str_No');
            Str_Can =  getWavMSG('Wavelet:commongui:Str_Cancel');
            answer = questdlg(...
                            getWavMSG('Wavelet:moreMSGRF:Del_GLB_Buffer'),...
                            getWavMSG('Wavelet:moreMSGRF:Main_MEM_BUF'), ...
                            Str_Yes,Str_No,Str_Can,Str_No);
            if strcmp(answer,Str_Yes), delete(fig); end
        end

    otherwise
        %********************%
        %** UNKNOWN OPTION **%
        %********************%
        errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg');
        error(message('Wavelet:FunctionArgVal:Invalid_ArgVal'));
end

% Hide Buffers.
%--------------
set(0,'ShowHiddenHandles',old_show);


%=============================================================================%
% INTERNAL FUNCTIONS
%=============================================================================%
%-----------------------------------------------------------------------------%
function  [okFig,axe] = bufferInFig(fig,tagAxe)
% bufferInFig returns the handle of the axes Buffer

okFig = ishandle(fig);
if ~okFig , axe = []; return; end
axe = findobj(get(fig,'Children'),'flat','Type','axes','Tag',tagAxe);
%-----------------------------------------------------------------------------%
%=============================================================================%