function taskViewer(txt)
% taskViewer(txt)
%   txt: parametro opzionale (stringa) che viene visualizzato nella casella
%   di testo History

% funzione per aggiornamento dell'interfaccia grafica.
% Usa drawenvironment.m per creare l'immagine la prima volta ed aggiorna
% gli handlers degli elementi grafici in accordo con pool e X


global X pool t;
persistent H oldPool messageCounter;

if isempty(H)
    H = drawEnvironment;
    for n = 1:8, refreshCam(n); end
    refreshPool;
    messageCounter = [];
    set(H.historybox,'String',['START' char(10)]);
    oldPool = pool;
    drawnow;
    return;
end

if nargin == 1, showTxt(txt); end
if length(pool) == length(oldPool) &&...
        all([pool.ID]==[oldPool.ID]) &&...
        all([pool.a]==[oldPool.a])
    return;
end
for n = 1:8, refreshCam(n); end
refreshPool;

    function refreshCam(camID)
        if isempty(X(camID).tsk), type = 'IDLE';
        else type = X(camID).tsk.type;
        end
        switch type
            case 'IDLE', camCol = [.9 .9 .9];
            case 'pat', camCol = [0 .67 .67];
            case 'str', camCol = [.67 .67 1];
            case 'trk', camCol = [.67 0 0];
            case 'op', camCol = [0 0 1];
        end
        set(H.view(camID),'FaceColor',camCol,'EdgeColor',camCol);
        set(H.cam(camID),'FaceColor',camCol);
    end

    function refreshPool
        messagePool = [];
        for i = 1 : length(pool)
            if pool(i).a == 0
                messagePool = [messagePool ' ' pool(i).type num2str(pool(i).loc)];
            end
        end
        set(H.poolbox,'String',messagePool);
        for h = 1:4
            pos = get(H.bar(h),'Position');
            pos(3) = sum( ([pool.pr]==h/4) & ([pool.a]==0) )+0.05;
            set(H.bar(h),'Position',pos);
        end
        
    end

    function showTxt(txt)
        messageCounter = [messageCounter length(txt)+1];
        newMessage = [get(H.historybox,'string') txt char(10)];
        while length(messageCounter)>9
            messageCounter = messageCounter(2:end);
        end
        newMessage = newMessage(end+1-sum(messageCounter):end);
        set(H.historybox,'string',newMessage);
    end

oldPool = pool;
drawnow;
% pause(1/15);
% waitforbuttonpress;
end