MATLAB: Lock first app if second is running

app designerlock appp

Hello,
how can i lock first app if secod is running.
I have the main app and one app which ask some input data from oprator. And i would like to lock main app during time when operator write some data to second one app. It should be locked, visibility is not solutions….
Thanks.
Tomas

Best Answer

You can use waitfor in the main function and provide the handle of the uifigure.
[EDITED] I assume, that https://www.mathworks.com/matlabcentral/fileexchange/15895-enable-disable-entire-figure-window works with figures only, not with uifigures. I did not test https://www.mathworks.com/matlabcentral/fileexchange/31437-windowapi with uifigures also, and it would run under Windows only:
% [EDITED: works with uifigure also, tested in R2018b]
H = uifigure;
WindowAPI(H, 'enable', 0);
pause(10)
WindowAPI(H, 'enable', 1);
You can disable all elements of the uifigure manually: Store a collection of all handles you want to disable in aa variable. Then set the 'Enable' property to 'off' and add a message, that the window is locked until the other is finished.
Actually using uiwait should work suffciently, if the other window is 'modal'. Unfortunately I do not see a way to create a modal uifigure. But if the 2nd GUI is opened through a callback of the 1st GUI, setting teh 'Interruptible' property of the 1st GUI to 'off' and the 'BusyAction' to 'cancel' should ignore all interactions with the 1st GUI, when it waits to waitfor inside the callback.
Another idea is to set a flag in the GUI's UserData, which is checked in each callback, as long as the 2nd GUI is open:
function CallbackOf1StGUI(H, EventData)
GUI1 = ancestor(H, 'uifigure'); % Does this work?
if GUI1.UserData.Locked
return;
end
GUI2 = OpenGUI2();
GUI1.UserData.Locked = true;
waitfor(GUI2);
GUI1.UserData.Locked = false;
end
Add the test of the locked GUI in each callback.