Mercurial > jwe > octave
changeset 27822:78435ddc9f88
Implement new function "gui_mainfcn" for Matlab compatibility (bug #44282).
* scripts/plot/util/gui_mainfcn.m: New function.
* scripts/plot/util/module.mk: Add function to build system.
* NEWS: Mention new function.
author | Guillaume Flandin |
---|---|
date | Wed, 11 Dec 2019 13:00:31 +0000 |
parents | 9a498cde5bc5 |
children | fa0582694fda |
files | NEWS scripts/plot/util/gui_mainfcn.m scripts/plot/util/module.mk |
diffstat | 3 files changed, 73 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Fri Dec 13 08:54:06 2019 -0800 +++ b/NEWS Wed Dec 11 13:00:31 2019 +0000 @@ -130,6 +130,9 @@ "Superclasslist" for Matlab compatibility. The original name will exist as an alias until Octave version 8.1. +- An undocumented function `gui_mainfcn` has been added, for compatibility + with figures created with Matlab's Guide. + ### Alphabetical list of new functions added in Octave 6 * `commandhistory`
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/plot/util/gui_mainfcn.m Wed Dec 11 13:00:31 2019 +0000 @@ -0,0 +1,69 @@ +## Copyright (C) 2019 Guillaume Flandin +## +## This filename is part of Octave. +## +## Octave is free software: you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the filename COPYING. If not, see +## <https://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {} {[@var{@dots{}}] =} gui_mainfcn (@var{gui_state}, @dots{}) +## Compatibility function for figures created with Matlab's Guide. +## +## This function is undocumented and users should not use it in new code. +## +## @seealso{openfig, hgload, struct2hdl} +## @end deftypefn + +function varargout = gui_mainfcn (gui_state, varargin) + + if (nargin == 1 || isempty (gui_state.gui_Callback)) + ## Open figure + copies = ifelse (gui_state.gui_Singleton, "reuse", "new"); + if (isempty (gui_state.gui_LayoutFcn)) + filename = file_in_loadpath ([gui_state.gui_Name ".fig"]); + H = openfig (filename, copies, "invisible"); + else + H = feval (gui_LayoutFcn, copies); + endif + + ## Set figure properties from input + for i = 1:2:numel (varargin) + try + set (H, varargin{i}, varargin{i+1}); + catch + break; + end_try_catch + endfor + + ## Store graphics handles in guidata + handles = guihandles (H); + guidata (H, handles); + + ## Execute opening function + ## FIXME: According to comments in auto-generated examples, the opening + ## function may block (with "uiwait"). But also the opening function should + ## execute just before the figure is made visible. How is this supposed to + ## work? + feval (gui_state.gui_OpeningFcn, H, [], handles, varargin{:}); + set (H, "visible", "on"); + handles = guidata (H); + + ## Execute output function + varargout{1} = feval (gui_state.gui_OutputFcn, H, [], handles); + else + [varargout{1:nargout}] = feval (gui_state.gui_Callback, varargin{2:end}); + endif + +endfunction
--- a/scripts/plot/util/module.mk Fri Dec 13 08:54:06 2019 -0800 +++ b/scripts/plot/util/module.mk Wed Dec 11 13:00:31 2019 +0000 @@ -53,6 +53,7 @@ %reldir%/ginput.m \ %reldir%/graphics_toolkit.m \ %reldir%/groot.m \ + %reldir%/gui_mainfcn.m \ %reldir%/hdl2struct.m \ %reldir%/hggroup.m \ %reldir%/hgload.m \