Matlab - Deployed Program - ButtonDownFcn does not execute

153 Views Asked by At

I'm creating a tool for our engineering team to view data coming off our systems in the field. The underlying data isn't critical to it. Basically, it consists of vectors containing Y data at X time.

I'm plotting a series of vectors using subplot. Each plot has the ButtonDownFcn defined to launch a window that allows for deeper analysis. The problem is that when I click on the axes in the deployed application, nothing happens. There are no error messages or anything. When I click on the axes running it in Matlab, it works exactly as expected.

I'm not sure what's going on once the code is deployed that is preventing it from functioning properly. I'm a little lost on where to go. I've included my code and some sample data.

Test Data:

stats = struct('name','Car 54', ...
    'date', '11-Aug-2014');
stats.SOC = struct('time', linspace(1,24,100)*3600', ...
    'plugdata', [100*ones(20,1); NaN(70,1); (20:4:56)'], ...
    'drivedata', [NaN(20,1); (100:-2:60)'; NaN(10,1); (40:-2:20)'; NaN(20,1); (30:-2:16)'; NaN(10,1)], ...
    'eptodata', [NaN(41,1); (58:-2:40)'; NaN(11,1); (18:-2:5)'; NaN(13,1); NaN(7,1); NaN(11,1)], ...
    'engchargedata', [NaN(69,1); (5:2:30)'; NaN(18,1)], ...
    'otherdata', NaN(100,1));

Code:

function [output] = summarytablepopup(stats)

FH = figure('Name','Summary Table Popup', ...
    'Units', 'normalized', ...
    'Position', [0.05 0.05 0.9 0.8], ...
    'Tag', 'sumTablePU', ...
    'Toolbar', 'none', ...
    'NumberTitle', 'off', ...
    'WindowStyle', 'normal', ...
    'Resize', 'on', ...
    'CloseRequestFcn', @closereq, ...
    'MenuBar', 'none', ...
    'UserData', {});
movegui(FH,'onscreen')

noStats = numel(stats);
screensize = get(0,'ScreenSize');
mapIMG = imread([pwd '\icons\map.jpg']);

noGraphs = 5;
AH = NaN(noStats,1); % axes handles
TT = NaN(noStats,1); % name text handles
MB = NaN(noStats,1); % map button handles
TH = NaN(ceil(noStats/noGraphs),1); % tab handles

warning('off','all')
TGH = uitabgroup('Parent',FH); % tab group handle
for ii = 1:length(TH)
    TH(ii) = uitab('parent',TGH,'title',sprintf('Page %d',ii));
end
warning('on','all')

for ii = 1:noStats
    currentPage = ceil(ii/noGraphs);
    vehiclename = stats(ii).name;
    vehicledate = stats(ii).date;

    if isfield(stats(ii),'SOC') && ~isempty(stats(ii).SOC) && isfield(stats(ii).SOC,'time') && ~isempty(stats(ii).SOC.time)
        SOC = stats(ii).SOC;
        time = SOC.time/3600;
        subplot(5,1,mod(ii-1,noGraphs)+1,'Parent',TH(currentPage))
        HH = plot(time, SOC.plugdata, 'g-x', ...
            time, SOC.eptodata, 'b-x', ...
            time, SOC.engchargedata, 'b-x', ...
            time, SOC.drivedata, 'r-x', ...
            time, SOC.otherdata, 'k-x');
        AH(ii) = get(HH(1),'Parent');
        set(HH,'Marker','.')
        set(HH(3),'Color',[0 0.75 1])
        set(HH(3),'MarkerFaceColor',[0 0.75 1])
    else
        subplot(5,1,mod(ii-1,noGraphs)+1,'Parent',TH(currentPage))
        HH = plot([0 12 24],[NaN NaN NaN]);
        AH(ii) = get(HH(1),'Parent');
        %}
    end
    pos = get(AH(ii),'Position');
    pos(1) = 0.25;
    pos(3) = 0.72;
    set(AH(ii),'Position',pos)
    set(AH(ii),'UserData', ii)
    set(AH(ii),'ButtonDownFcn', @divedeep)
    set(AH(ii),'YLim',[0 100])
    set(AH(ii),'YTick',[0 25 50 75 100])
    set(AH(ii),'YTickLabel',{'0','25','50','75','100'})
    set(AH(ii),'XLim',[0 24])
    set(AH(ii),'XTick',[0 4 8 12 16 20 24])
    set(AH(ii),'XTickLabel',{'0000','0400','0800','1200','1600','2000','2400'})

    mapHeight = 0.1;
    mappos = [0.18 pos(2)+pos(4)/2-mapHeight/2 mapHeight*screensize(4)/screensize(3) mapHeight];
    MB(ii) = uicontrol('Parent', TH(currentPage), 'Style', 'pushbutton', ...
        'Tag', sprintf('mapButton%d',ii), ...
        'String', '', ...
        'Units', 'normalized', ...
        'Position', mappos, ...
        'CData', mapIMG, ...
        'Callback', @mapbutton);
    if isfield(stats(ii),'location') && ~isempty(stats(ii).location) && isfield(stats(ii).location,'time') && ~isempty(stats(ii).location.time)
        set(MB(ii),'Enable','on')
    else
        set(MB(ii),'Enable','off')
    end
    textHeight = 0.05;
    textpos = [0.01 pos(2)+pos(4)/2-textHeight/2 0.15 textHeight];
    TT(ii) = uicontrol('Parent', TH(currentPage), 'Style', 'text', ...
        'Tag', sprintf('text%d',ii), ...
        'String', vehiclename, ...
        'FontSize', 12, ...
        'Units', 'normalized', ...
        'Position', textpos);
end

uiwait(FH)

    function mapbutton(source, event)
        tag = get(source,'Tag');
        splittag = strsplit(tag,'n');
        jj = str2num(splittag{2});
        loc = stats(jj).location;
        if ~isempty(loc)
            len = numel(loc.time);
            map = [linspace(1,0,len)', linspace(0,1,len)', zeros(len,1)];
            MFH = figure;
            MPH = plot(loc.lon, loc.lat, 'r:');
            hold on;
            MSH = scatter(loc.lon, loc.lat, 50, 'o', 'filled', 'CData', map);
            plot_google_map
        else
            msgbox('No location information available for this vehicle. Really should disable this button.')
        end
    end

    function electric(source, event)
        ratio = get(SH,'Value')/100*(0.9-startheight)+0.05;
        set(PH, 'Position', [panpos(1) ratio panpos(3) panpos(4)])
    end

    function divedeep(source, event)
        HEDtimeplot([],stats(get(source,'UserData')));
    end

    function closereq(source,event)

        uiresume(source)
        delete(source)
    end
end
0

There are 0 best solutions below