MATLAB: How to add minimize tool button in GUI

guiminimize object

I have a GUI which has several charts/graphs to display. But I would like to add an GUI object whose function is to minimize /maximize or restore the graph/plot within the GUI using a button. How can I do it? I have seen the list of GUI components, none of them are relevant to what I am looking for. Is it possible to import new functionality from other development environments like Microsoft .Net /Visual Studio or JAVA to MATLAB.

Best Answer

function main
Gui.FigH = figure;
Gui.AxesH = axes;
Gui.ButtonH = uicontrol('Style', 'ToggleButton', 'Value', 1, ...
'String', 'Show axes', ...
'Units', 'pixels', ...
'Position', [5, 5, 80, 25], ...
'Callback', @ButtonCB);
plot(rand(10));
Gui.ButtonH.Units = 'normalized';
Gui.ButtonPos = Gui.ButtonH.Position;
Gui.ButtonH.Units = 'pixels';
Gui.AxesPos = Gui.AxesH.Position;
guidata(Gui.FigH, Gui);
end
function ButtonCB(ButtonH, EventData)
Gui = guidata(ButtonH);
if ButtonH.Value
state = 'on';
else
state = 'off';
end
set(Gui.AxesH, 'Visible', state);
set(allchild(Gui.AxesH), 'Visible', state);
end
This is a kind of "minimizing" already and really cheap to implement. You can write a zooming or moving out of the visible area easily also. Change the callback to:
function ButtonCB(ButtonH, EventData)
Gui = guidata(ButtonH);
if ButtonH.Value
ini = Gui.ButtonPos;
fin = Gui.AxesPos;
state = 'on';
else
ini = Gui.AxesPos;
fin = Gui.ButtonPos;
state = 'off';
end
% Make axes visible and move it to or from the button position:
set(Gui.AxesH, 'Visible', 'on');
set(allchild(Gui.AxesH), 'Visible', 'on');
n = 20;
step = (fin - ini) / n;
for k = 1:n
set(Gui.AxesH, 'Position', ini + k * step);
drawnow;
end
set(Gui.AxesH, 'Visible', state);
set(allchild(Gui.AxesH), 'Visible', state);
end
In this example the axes is moved to or from the position of the button. Other effects are easy to implement also: Moving above the top of the window, shrinking inplace until they vanish, etc. Of course there are many ways to overdue the effects...