www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/+cageview/+optimoutput/RetainOutputView.m

    classdef RetainOutputView < mbcgui.multiview.View
    %RetainOutputView
    
    properties (SetAccess=private)
        PreservedSwitchCard
    end
    
    methods
        function obj = RetainOutputView(varargin)
        
        obj@mbcgui.multiview.View(varargin{:});
        
        % Preserved indicator items
        RetainPanel = mbcgui.container.layoutpanel(...
            'Parent', obj.Parent, ...
            'BorderType', 'beveledout');
        hPreservedControl = mbcgui.widget.IconText('Parent', RetainPanel, ...
            'Style', 'item', ...
            'String', 'Retained', ...
            'TooltipString', sprintf('%s\n%s', ...
            'This optimization output is being retained and will not ', ...
            'be overwritten when the optimization is re-run'), ...
            'ImageFile', 'cglock.bmp');
        set(RetainPanel, 'LayoutComponent', {hPreservedControl});
        obj.PreservedSwitchCard = xregcardlayout(obj.Parent, ...
            'numcards', 2);
        attach(obj.PreservedSwitchCard, RetainPanel, 2);
        
        obj.ContentHandle = RetainPanel;
        addMessageServiceListener(obj, [event.listener(obj.MessageService, 'PreserveChanged',@obj.onCheckRetainState);...
            event.listener(obj.MessageService, 'ObjectChanged',@obj.onCheckRetainState)])
        
        end
    end
    
    methods (Access=private)
        function onCheckRetainState(obj,~,~)
        %onCheckRetainState display the RetainOutput icon 
        ms = obj.MessageService;
        pNode = ms.Pointer;
        if pNode.isPreserved
            % Can't "preserve" an already preserved node
            PresIndSize = 60;
            PresCard = 2;
        else
            PresIndSize = 0;
            PresCard = 1;
        end
        
        % needs to be in framework or Indexer
        set(obj.PreservedSwitchCard, 'CurrentCard', PresCard);
        CS = get(obj.TopFrameGrid, 'colsizes');
        CS(end) = PresIndSize;
        set(obj.TopFrameGrid, 'colsizes', CS);
        end
    end
    
end