Switch to side-by-side view

--- a
+++ b/functions/adminfunc/plugin_uiupdate.m
@@ -0,0 +1,90 @@
+% PLUGUIN_UIUPDATE - support function for plugin_menu
+
+% Copyright (C) 2019 Arnaud Delorme
+%
+% This file is part of EEGLAB, see http://www.eeglab.org
+% for the documentation and details.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions are met:
+%
+% 1. Redistributions of source code must retain the above copyright notice,
+% this list of conditions and the following disclaimer.
+%
+% 2. Redistributions in binary form must reproduce the above copyright notice,
+% this list of conditions and the following disclaimer in the documentation
+% and/or other materials provided with the distribution.
+%
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+% THE POSSIBILITY OF SUCH DAMAGE.
+
+function plugin_uiupdate(fig)
+
+tmpobj = get(fig, 'userdata');
+listboxVal = get(findobj(fig, 'tag', 'pluginlist'), 'value');
+
+allPlugins = tmpobj.allplugins;
+selectedPlugins = tmpobj.selectedplugins;
+selection       = tmpobj.selection;
+if length(listboxVal) == 1
+    lastSelect = listboxVal;
+else
+    lastSelect = setdiff(listboxVal, selection);
+    
+    % check if selection is consistent
+    if ~all([selectedPlugins([ listboxVal ]).installed]) && ~all(~[selectedPlugins([ listboxVal ]).installed] )
+        listboxVal = lastSelect(1);
+        set(findobj(fig, 'tag', 'pluginlist'), 'value', listboxVal);
+    end
+end
+if isempty(lastSelect), lastSelect = listboxVal(1); end
+if length(lastSelect) > 1, lastSelect = lastSelect(1); end
+
+tmpstr = selectedPlugins(lastSelect).description; 
+
+% set text
+hDescription = findobj(fig, 'tag', 'description');
+hTags        = findobj(fig, 'tag', 'tags');
+hStatus      = findobj(fig, 'tag', 'status');
+hSize        = findobj(fig, 'tag', 'size');
+tmpstr = textwrap(hDescription, {tmpstr}); 
+set(hDescription, 'string', tmpstr);
+set(hTags       , 'string', selectedPlugins(lastSelect).rawtags );
+set(hSize       , 'string', [num2str(ceil(selectedPlugins(lastSelect).size/100)/10) ' MB'] );
+
+% installed status
+if selectedPlugins(lastSelect).installed
+    if selectedPlugins(lastSelect).installorupdate
+        set(hStatus, 'string', ['version ' selectedPlugins(lastSelect).currentversion ' installed - an update is available'] );
+    else
+        set(hStatus , 'string', 'installed' );
+    end
+else
+    set(hStatus, 'string', 'not installed');
+end
+
+% set buttons
+set(findobj(fig, 'tag', 'install'), 'enable', 'on');
+if selectedPlugins(lastSelect).installed
+    set(findobj(fig, 'tag', 'rmbut'), 'enable', 'on');
+else
+    set(findobj(fig, 'tag', 'rmbut'), 'enable', 'off');
+end
+if ~isempty(selectedPlugins(lastSelect).webdoc)
+    set(findobj(fig, 'tag', 'documentation'), 'enable', 'on', 'callback', ['web(''' selectedPlugins(lastSelect).webdoc ''', ''-browser'');' ]);
+else
+    set(findobj(fig, 'tag', 'documentation'), 'enable', 'off')
+end
+set(findobj(fig, 'tag', 'rating'),  'callback', ['web(''' selectedPlugins(lastSelect).webrating ''', ''-browser'');' ]);
+
+tmpobj.selection = listboxVal;
+set(fig, 'userdata', tmpobj);