From a52db6996d1155c92ebc775b9a2fa75f825d2202 Mon Sep 17 00:00:00 2001 From: Robyn Jackey Date: Wed, 13 Aug 2025 12:07:08 -0400 Subject: [PATCH 1/4] fixes to BaseInternalDialog and ListSelection dialog --- widgets/+wt/+abstract/BaseInternalDialog.m | 247 ++++++++++----------- widgets/+wt/+dialog/ListSelection.m | 2 +- 2 files changed, 118 insertions(+), 131 deletions(-) diff --git a/widgets/+wt/+abstract/BaseInternalDialog.m b/widgets/+wt/+abstract/BaseInternalDialog.m index 30c36c2..3f786e5 100644 --- a/widgets/+wt/+abstract/BaseInternalDialog.m +++ b/widgets/+wt/+abstract/BaseInternalDialog.m @@ -31,35 +31,12 @@ % Modal (block other figure interaction) Modal (1,1) logical = false - end %properties - - - properties (AbortSet, Dependent, Access = public) - % Dialog Title - Title + Title (1,1) string = "" end %properties - % Accessors - methods - - function set.Modal(obj, value) - obj.Modal = value; - obj.updateModalImage(); - end - - function value = get.Title(obj) - value = string(obj.OuterPanel.Title); - end - function set.Title(obj, value) - obj.OuterPanel.Title = value; - end - - end %methods - - %% Dialog Button Properties % The dialog subclass can change these values properties (Dependent) @@ -149,6 +126,17 @@ %% Internal Properties + properties (Hidden) + + % Minimum allowable size before cropping + MinimumSize (1,2) double {mustBePositive} = [30 20]; + + % Buffer border space required on each side when sizing in figure + Buffer (1,1) double {mustBeNonnegative} = 0 + + end %properties + + properties (Transient, NonCopyable, Hidden, SetAccess = private) % Outer grid to enable the panel to fill the component @@ -187,6 +175,49 @@ end %properties + %% Constructor + methods + + function obj = BaseInternalDialog(fig, varargin) + + arguments + fig matlab.ui.Figure + end + + arguments(Repeating) + varargin + end + + % Get the figure size + posF = getpixelposition(fig); + szFig = posF(3:4); + + % Add modal image + modalImage = uiimage(fig); + modalImage.ImageSource = "overlay_gray.png"; + modalImage.ScaleMethod = "stretch"; + modalImage.Visible = "off"; + modalImage.Position = [1 1 szFig]; + modalImage.Tag = "ModalImage"; + + % Call superclass constructor + obj = obj@wt.abstract.BaseWidget(fig, varargin{:}); + + % Store the modal background image + obj.ModalImage = modalImage; + + % Update the modal image positioning + obj.updateModalImage(); + + % Listen to resizing of OuterPanel + % (non needed until we make the dialog resizable by user) + % obj.OuterPanel.ResizeFcn = @(~,~)onOuterPanelResize(obj); + + end %function + + end %methods + + %% Destructor methods function delete(obj) @@ -384,14 +415,8 @@ function assignOutput(~) function setup(obj) % Configure the dialog - % Disable warning - warnState = warning('off','MATLAB:ui:components:noPositionSetWhenInLayoutContainer'); - - % Defaults - obj.Position(3:4) = obj.Size; - - % Restore warning - warning(warnState) + % Store the figure + obj.Figure = ancestor(obj,'figure'); % Outer grid to enable the dialog panel to fill the component obj.OuterGrid = uigridlayout(obj,[1 1]); @@ -404,7 +429,6 @@ function setup(obj) obj.OuterPanel.FontWeight = "bold"; %obj.OuterPanel.BorderWidth = 1; obj.OuterPanel.AutoResizeChildren = false; - obj.OuterPanel.ResizeFcn = @(~,~)onOuterPanelResize(obj); obj.OuterPanel.ButtonDownFcn = @(~,evt)onTitleButtonDown(obj,evt); % Close Button @@ -452,17 +476,9 @@ function setup(obj) obj.applyCloseButtonColor() % Listen to figure size changes - obj.Figure = ancestor(obj,'figure'); obj.FigureResizeListener = listener(obj.Figure,"SizeChanged",... @(~,evt)onFigureResized(obj,evt)); - % Add modal image - obj.ModalImage = uiimage(obj.Figure); - obj.ModalImage.ImageSource = "overlay_gray.png"; - obj.ModalImage.ScaleMethod = "stretch"; - obj.ModalImage.Visible = "off"; - obj.ModalImage.Position = [1 1 1 1]; - % Add lower buttons obj.DialogButtons = wt.ButtonGrid(obj.InnerGrid,"Text",[],"Icon",[]); obj.DialogButtons.Layout.Row = 2; @@ -471,41 +487,34 @@ function setup(obj) obj.DialogButtons.ButtonPushedFcn = ... @(src,evt)onDialogButtonPushed(obj,evt); + % Update component lists + obj.ButtonColorableComponents = [obj.DialogButtons]; + obj.TitleFontStyledComponents = [obj.OuterPanel]; + obj.FontStyledComponents = [obj.DialogButtons]; + % Ensure it fits in the figure obj.resizeToFitFigure(); - % Reposition the close button - obj.repositionCloseButton(); - % Position over figure by default if isscalar(obj.Figure) && isvalid(obj.Figure) obj.positionOver(obj.Figure) end - % Update component lists - obj.ButtonColorableComponents = [obj.DialogButtons]; - obj.TitleFontStyledComponents = [obj.OuterPanel]; - obj.FontStyledComponents = [obj.DialogButtons]; - - end %function - - - function postSetup(obj) - - % Update modal image now - obj.updateModalImage(); - end %function function update(obj) + % Update title + if strlength(obj.Title) + obj.OuterPanel.Title = obj.Title; + else + obj.OuterPanel.Title = " "; + end + % Ensure it fits in the figure obj.resizeToFitFigure(); - % Reposition the close button - obj.repositionCloseButton(); - end %function @@ -569,42 +578,51 @@ function checkDeletionCriteria(obj) %% Private methods methods (Access = private) - function updateModalImage(obj) - % Triggered when the Modal property is changed + function resizeToFitFigure(obj) + % Triggered on figure resize - % Setup must be complete to run this code - if ~obj.SetupFinished - return - end + % Update modal image + obj.updateModalImage(); - % If toggled on, do the following - if obj.Modal - - % Bring the dialog above the modal image - if isMATLABReleaseOlderThan("R2025a") - isDlg = obj.Figure.Children == obj; - isModalImage = obj.Figure.Children == obj.ModalImage; - otherChild = obj.Figure.Children(~isDlg & ~isModalImage); - obj.Figure.Children = vertcat(obj, obj.ModalImage, otherChild); - else - uistack(obj,"top"); % Works in 25a but not earlier - end + % Get the current positioning + posD = obj.Position; + szRequest = obj.Size; + posLowerLeft = posD(1:2); - % Set position to match the figure - posF = getpixelposition(obj.Figure); - szF = posF(3:4); - obj.ModalImage.Position = [1 1 szF]; + % Get figure size + posFig = getpixelposition(obj.Figure); + szFig = posFig(3:4); + maxSize = szFig - (2 * obj.Buffer); - end %if + % Size is the smaller of requested size and figure size with + % buffer space + szDlg = min(szRequest, maxSize); + + % Restrict a minimum size also + szDlg = max(szDlg, obj.MinimumSize); + + % Calculate fit within figure + posUpperRight = posLowerLeft + szDlg; + if any(posUpperRight > szFig) + posAdjust = szFig - posUpperRight; + posLowerLeft = posLowerLeft + posAdjust; + end + + % Don't go below 1 + posLowerLeft = max(posLowerLeft, 1); + + % Update dialog position + posNew = [posLowerLeft szDlg]; + set(obj,"Position",posNew); - % Toggle visibility - obj.ModalImage.Visible = obj.Modal; + % Reposition the close button + obj.repositionCloseButton(); end %function function repositionCloseButton(obj) - % Triggered on figure resize + % Called at end of resize % Outer panel inner/outer position outerPos = obj.OuterPanel.OuterPosition; @@ -631,46 +649,21 @@ function repositionCloseButton(obj) end %function - function resizeToFitFigure(obj) - % Triggered on figure resize - - % Get the current positioning - posD = obj.Position; - szRequest = obj.Size; - posLowerLeft = posD(1:2); - - % Get figure size - posF = getpixelposition(obj.Figure); - szF = posF(3:4); - buffer = [20 20]; - maxSize = szF - buffer; - - % Size is the smaller of requested size and figure size with - % buffer space - szD = min(szRequest, maxSize); + function updateModalImage(obj) + % Update modal image size and visibility - % Restrict a minimum size also - minSize = [30 20]; - szD = max(szD, minSize); + % Only run if ModalImage exists + if isscalar(obj.ModalImage) && isvalid(obj.ModalImage) - % Calculate fit within figure - posUpperRight = posLowerLeft + szD; - if any(posUpperRight > szF) - posAdjust = szF - posUpperRight; - posLowerLeft = posLowerLeft + posAdjust; - end - - % Don't go below 1 - posLowerLeft = max(posLowerLeft, 1); + % Set modal image position to match the figure + posF = getpixelposition(obj.Figure); + szFig = posF(3:4); + obj.ModalImage.Position = [1 1 szFig]; - % Update modal image position - if obj.Modal - set(obj.ModalImage,"Position",[1 1 szF]); - end + % Toggle visibility + obj.ModalImage.Visible = obj.Modal; - % Update dialog position - posNew = [posLowerLeft szD]; - set(obj,"Position",posNew); + end %if end %function @@ -754,20 +747,14 @@ function onFigureResized(obj,~) % Ensure it fits in the figure obj.resizeToFitFigure(); - % Reposition the close button - obj.repositionCloseButton(); - end %function - function onOuterPanelResize(obj) + function onOuterPanelResize(~) % Triggered when the dialog window is resized % Ensure it fits in the figure - obj.resizeToFitFigure(); - - % Reposition the close button - obj.repositionCloseButton(); + %obj.resizeToFitFigure(); end %function diff --git a/widgets/+wt/+dialog/ListSelection.m b/widgets/+wt/+dialog/ListSelection.m index 02da59d..d3a99a2 100644 --- a/widgets/+wt/+dialog/ListSelection.m +++ b/widgets/+wt/+dialog/ListSelection.m @@ -132,7 +132,7 @@ function setup(obj) obj.Grid.ColumnWidth = {'1x'}; % Set title - obj.Title = " "; + obj.Title = ""; % Add controls obj.PromptLabel = uilabel(obj.Grid); From ebe36be483757d388eda169aef97fbe4eb04aa7c Mon Sep 17 00:00:00 2001 From: Robyn Jackey Date: Wed, 13 Aug 2025 13:16:45 -0400 Subject: [PATCH 2/4] add documentation for dialogs --- .../X-gwN0u9Qo3fWErumQYWrvHW6b4d.xml | 6 ++++++ .../X-gwN0u9Qo3fWErumQYWrvHW6b4p.xml | 2 ++ widgets/+wt/+dialog/ListSelection.m | 3 +++ widgets/+wt/+dialog/Login.m | 3 +++ widgets/doc/DialogsList.mlx | Bin 0 -> 23110 bytes widgets/doc/GettingStarted.mlx | Bin 21759 -> 21774 bytes widgets/doc/MainPage.mlx | Bin 21721 -> 21747 bytes widgets/doc/UserGuide.mlx | Bin 4137 -> 4165 bytes .../examples/ListSelectionDialogExample.mlx | Bin 11138 -> 11892 bytes widgets/examples/LoginDialogExample.mlx | Bin 19157 -> 19143 bytes widgets/wtExamplesList.m | 12 ++++++++++++ 11 files changed, 26 insertions(+) create mode 100644 resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4d.xml create mode 100644 resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4p.xml create mode 100644 widgets/doc/DialogsList.mlx diff --git a/resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4d.xml b/resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4d.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4d.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4p.xml b/resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4p.xml new file mode 100644 index 0000000..7b2a11a --- /dev/null +++ b/resources/project/-NvNmnLN-CTaezFjMPFOnb8gLqY/X-gwN0u9Qo3fWErumQYWrvHW6b4p.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/widgets/+wt/+dialog/ListSelection.m b/widgets/+wt/+dialog/ListSelection.m index d3a99a2..da8277b 100644 --- a/widgets/+wt/+dialog/ListSelection.m +++ b/widgets/+wt/+dialog/ListSelection.m @@ -153,6 +153,9 @@ function setup(obj) function update(obj) + % Call superclass method + obj.update@wt.abstract.BaseInternalDialog; + % Configure list obj.ListBox.Items = obj.Items; obj.ListBox.ItemsData = obj.ItemsData; diff --git a/widgets/+wt/+dialog/Login.m b/widgets/+wt/+dialog/Login.m index 8d73abb..1055a3d 100644 --- a/widgets/+wt/+dialog/Login.m +++ b/widgets/+wt/+dialog/Login.m @@ -23,6 +23,9 @@ function setup(obj) % Defaults obj.Size = [300,140]; + % This is normally a modal dialog + obj.Modal = true; + % Configure which actions close the dialog obj.DeleteActions = ["close","login","cancel"]; diff --git a/widgets/doc/DialogsList.mlx b/widgets/doc/DialogsList.mlx new file mode 100644 index 0000000000000000000000000000000000000000..cdd8db9c501d2fc4f907e977a825fd36edc35815 GIT binary patch literal 23110 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 Hf6o33pmt(r literal 0 HcmV?d00001 diff --git a/widgets/doc/GettingStarted.mlx b/widgets/doc/GettingStarted.mlx index 05deffa7ed1856810df971b374d27c3c8afe8db1..e700b94328b1261eea5c614af3d432ab5deb7d19 100644 GIT binary patch delta 1926 zcmV;12YLAasR53v0kFpd3hMWH>nQ{P0EiQl(E}uZbOR#Gaj+sV>J*-{WC4;Ph@G|H z3W_>QTqsf_Da-!%J5n!xiQ7163e>>9$d+_G-t*iG@ATp0G8be4+HfUD!D+7_5RgnI zT&APoads7+2Olp!RKrBEG6!i1%1bk>MnPt6F^nR^GRUdvsRAUvn=74Di?=$BDy5S` zD+b1Ypt@W{gMR;glv6GPr!rQ_%KaApaK6Hny|@NzaUU|ZR9i?$#cf7D@gxOn$V@2_tEF3I{aRgXc)oO9Ps4X+h6_DN==h$=!H%JN}(enUHZ&kV`N;m7sea z8m97?OCYf1#$#qmTCD_`my%g@B^BIqRAv>*XY~e(2&z-iCqzSOXe{8wDaw`HTDHPP zgfa#KG_}wg?47UXB-OOYIHO|M@E-XgmZK>`k|AJsR4mr*t38NJ9Fq-Q7Xij zs`lNNhQMAS(>*IS2O<{g!2rjOYMVW`m#xTZ<7zmKbABv z1ehP<>}*wlMoyoIuQ<1g`He>b))Ya13j~IH_B~PH2*<8H)HRw#%wW7FI z+uS|RO{ai(4ZAox6Sh$0Y&aGe=@K(yg1NS?ggHB;6y{Vvl|_i@Rv@C7yFBydFz~u3 znc@t{1N>WZ4Q3QP4Em?%aqyBK2QN_?b;|udR~U#fWl!H5AJLYsXb(Gk>Y|H(o=Z-J zN?#j1w^-%wsir=4YTIO)*OK_>CTRuR9O>S^MX)vYJ0qTjo4vSgDlnGD8_7hOU`cOQ z92QzXCFaIYufY5j&;FlIZ=Fu#wsFALK=9gs*dla?^ikzj3kI=lK-d# zQQ{%IX^EmtP-C#Edd|c{)4Y*?O*w+uLH@)F8%|ULj-+F*K96o*xI-Y~Zw}R@?rpIh zoqUxPFC04Qa4k;8nq}Mqv!#Z&50uyTQV*`R!w7Ct`l#~s4u`gT?78<)zuQ`cWUFaB zrZ98|kHM3ts;V9mkl_IPWO{hYL^T}@L1`+YITrv+mQk5PbbfX=I1ihD?mo0N3t_z= zq(u=X&G_bzD*oLqYi$B6xT zFyZX6z!t(pIJKKnxK_&N)mA}Ue*&2Dy!0DPI&m^>R2(BAhXg}}b1>k1ZMIK7|BU>l z>~|u6#dn=%gycH|#u4T z{{gcE2--yi3k#pzlj2P`e?!{tLbEGPOsvs(N9ftsSSSIs+rO99wN72)C3&Co zeb5d10O#x0}bSiWu-=? zeRoYSs1$_;G??HiPdNQ%bsdftu1*Z$1s%X?e--YNkv#Z%q`Iz4x@phF{W*QPzkBSz zN@{bul>%H$5X#PWp&ZBn6^ah=wcC(9Pj7C^4K7l~7lbVdpOt(j<_nRguNnO{|HG+c zMceuxX*wrtMfkMjB1^$mg7XXMAc$4cKV24+Pf$w(1QY-O00;m803iV0Wi1(#IZru% zJ&fVFw1b|yF-rCTsx2B*TQ;_7m$#qCE=_LYNB@VA-2HgR?wGO-H1JK^afYOWv2-2y z_jr7HLc~-oW>z7}1D{HXZ$e}}p@-ahDAOaPTW)pm zB7(lb6-D1|da>+t)i5S?pn_D!Iii9;7@gHn>Sf|i=83A4gG&_+O7UD-5yxbajGI5f zqx#s7r~QGwuS<)iKj2?KqeIB3&VAQ!FH$VirUt7AsOA@wFi`yjk(yd(lQB_2e`#67 zKvK)in-}BbNGenz@=A-wpKmKlym*`aW_EUY_G}w?C~fM#Tl-$(NmY0syY46HqI-RDRe!!N5o+$<)~oA=`Ve!EEij;0TZw#u}wJQ ztfErI&D>iNMXNZ(7}JE)8G4-ld;SHJCsNi5>i2o;DFgrjh!c|sQ&9mElUY+f0sfPi zQzHZm3!mJRzf%?h-%XS3O&yazR1h29Wi1)b0000@0RR9U00000000010000005+2! zR7wIrP?I238V*pR2!4p MR38R5QUCw|0MYAuyZ`_I delta 1907 zcmV-(2aNcRssaD00kFpd3bx4U#u@|w0EiNk(E}uZv;!i^aj+sV>J*;4WC4;Qh@G|H z3W_>QTqsf_Da-!%J5sXz61Q>C6sUoHkuB+XynFcEo8Es|6oSk_8?NLqIE{J%0m)R# zWi|{RrkCM)@ZsWpJxCR+3XqndyflM)806NLgE%%Uhk}|&l_2rmOzDDJywzD;E1i~F zF)#*y)fFP{_j>Q*f^r!+m5EB1?zi-pJMDiab}4|=gEDhW;JR5CQPGN1{U7W9mNB2@U7+>WLM;IhhCReV8~)&n%jnK2A_K{E)pUN_RzT8)B# zk`{mr1)k+LSm{3N^_uOrgleAJd@b{CpA5!_buNzto_Py+%_Vb208?9_R;5~V_X zt(&v^+5#ArGTXCKgP`stOwP;ev{Rt3)6*80EsrO%WqPJe8}-rM8}`R9Tb zr2z9&4m)3#pb^tY;xo>TVt(UcfH_5f&}86}%-c6n{D9QEs(1=fZVU0|x1cjwH;R%* zZF~1LHk|_EHSGG)nXu(m!3HCNOqUoDV~n+RCM?(?sj#5>u_{9hw-P-{xQjEN4g;@y zoGZ?N+{3>W*I0tQ+_YI2)8VybqDnE1f5XfF>Gaxk z8m$T^mPWyw^TQI^6{(}**~%I8Wy6I%l-u-r)7yi(oc$#HH32EhNrj?JP-C#Ec#6b* z+q{rXIfBta{=)hcj#UZ{qyr;=@s|YQ!S&0x=!p26Lp^SKJ8Z|s-vq@AhfX?Ni<6ON zIk&)UrQ!97^3q=7-nBN!;5MX>Do$^4Xt~3la}V^ptwl(-nxP8Ap{+;Y2`?(Y!MGDAlUBts0&)l$Vw?j3=S#C)`TR5TN!cIt`~}}N+7XKH3{+!P zF0~u4Nx#?cg?Ra$OmiR?x9HJl=h2C4jiWtDK3;wKiPvA1F8%|v6A0Qx1fk`AmXq;K zH-A*pb{CpmX<}lH#ydjKHe#U!&~E=;R$ZOC#7pu%=gHx`#d2p_^bS7g&X$;G3?s0r zYqZ^z__1D*ON>I4wvlaTp~QO#7%i(wp`1{ihkM^S@KHlR$z+32uEg6IouD+REf^WH zMA#IrJ8xu6Prso~s#m!InlrYb2BK_alz;RfByKd~FJ+@frF--3AZQeY77W-JD9{G(*B%2-`ze8UnSZeZlwTM6NHK{yHFlv zga##t_}uN7JWa1}>J_eX#utQL5I(E9%1A89@(EGO)$<|1=3 zWyyOYJql8l^iP-7;@nxO9V_wlYfg0Gcft zQ(HE+X`8pN$1Y87;z$37klfw9V^>Vs1{(OL?Knfy!B{#E{AWD8Y&pvX$bbuk1D`Q- zwo{GtHysjwrw}m}i5^L=yojJLa7NL0n_evYTs4eI z9jG9cagL}UKSpOYlzN%Cl6j))ubaFi?{(R2!3(R2>|( t<^Bf30000t0RR9f00000000010000003T74FH{?o=~N#ECsF_a002`~gtq_y diff --git a/widgets/doc/MainPage.mlx b/widgets/doc/MainPage.mlx index afccfa267b9ca0bc0131812feb3c39a8e0ee1bb5..e22aefa991e81fcc8404a710e02e6910791b96f2 100644 GIT binary patch delta 2140 zcmY*a2|U!>7oRaPW#7g&k!8p-3?<8JL9)&mV@S)`v%Y7|lC{a62I2QaY3$436@zD) zBq1TZ!IOkAmLv^D_Nh1C|Nr^)y7zNG=iak?&$;KE`?=$l;PpyyZ8wDb<=8`-=phg& zRS2L%;6&$u2_3=js?etm5Z_*lT6xW7QKvdF@Nkj2Lr4I`gp6nut<3!0gSaQH(n~$5 zOA>Fm?d)#TdiouUiDGR|Rb|y)xRz*Nzl6xYaO=)T48=_>#;NsKf!V6YyT%dBdinW< zTT9vG#(GM~<9wx*1x5S*Zknk{RErKQxIx=wnD{F&Y8u>duj}FoeKO`90w$vRMc$VD zh!r3$Q-IlS3H~jGj?KXg${&B&rTiK0yt8KG#@ugm?-Z3`GDtn#A!1@zU)j~T@UGL6 z)EbI$-nS}w7ssc#m7Fp1y4AnNi%~px2Z3Sm&FBkwx=e z6|ElK{x!Vb{9`SNPCo(o(uP_L{I@v)*%No$l9TZ+DktJ%#I5^8DYG?{_HL7fXyM?mFwrq7qd8GjPp*AvO1y#Ab|hu zBe?m5#+h$fGbFCUaC({$d%~GRV~d9vWa?i@f(yif?BJp0F5P z64CB1W)qc(B=6o_-@W)Sy1ajfj=TAyta`rMx!9~Pz9P|ZpWZd#gPNXsr(Dw|0|e|2 zTc6sw8Z^EgIU0PFIuMf};}ZPWXJnp$CFRo)!`#+KGZxuQ3s{W;O-q(EniDI((u8H) zr|KO7y;-dULNe^@{4==g`LSO@n)kFcmPS9CHBXH6emDY=0#SAfBP^sgV|ieq`cjF7 z_xevi=(grc>oGAp`B&_&%yK7TI_pEfQ?_{Q;0@cJ={Tfg{M*Jf6|yC5J-S|tk8Y9U z@DQnqQMy^)39C@4YoFg=Ss`xhQ%z4LZCwy}w#D1PRCr$}asyKqZAdA6OD~0JOXDmI ziqagtw&!xA4-2OcZ4%9(R`O^gAm+UBQ@_$x=OVhlLT%{m6OoG|{LPaYosKAm1USM{ z6QP}_z_%9$2PT;C{i3Op>IQ{R@|cbxr&)bteUX0qj!;Uzb@#@$6iiI9!>n$J)Z{(? zJ~L*k-hF#Zq2;^R0^?ZyH1v(hA>NYfoWK(+6{3-Kr>sQM>K-g1il^bePU$E92V`w6 zs_9%BJwTd@YtkC{)0|b|#MFZgFq8hF@Zn+-24(_XF* zQec@9aNhlFQSxM@@`yqy!9R3OKCbOK%w*axlDZN+s;LxO7-!e5UmRyFK_0~|doZwz zDOEr`8pdb&+2M-NOZUvwJcH*YyKnARuwtLqph;y0GtLGj#yyn5n6Us99ywCZRSl&q ziXYqxIA$jWAaK)snGdddb+E6e3kHFd0Xf`J0BIvgOh*gEX$mH+?%&Cd^10Gwh<`PZ zCq6f4u4*Uu#gf!r5TIt+8lK1U3=50c^o55j`z^N-_FUVeagIYdp*I}&l37WJn@VTe zWDlj=axXK7Kia2b37iCd`wFLN-j$5mFTAHmm3>47-E_TlzdQ6!wXK1+p@$u~Bx*sn zsh2y<^;p+)hHP_ktMplegKF6-A!nP-x?GhPC@wEPpkgYJ;)F`DNUb8(N{{hJG5*EC zBtgieTCYoDBw<7{^5M6rZ=5(Zm;(d?pm>7=5(Jh4-0;!|+gQ8|7z`BR)#N~+AGQ7Q zd4fP9>~tIqFtCD`Juu<7m62nohdo$O5XjFp#Mjjg6%ZN{7#gAx?&te|S5~$NgGF|y z_<6YdxT1XgT)jNBGy?s-{wMz7>fqtQ*>I96T8L!=@7CLa{|zD>r{xd|cKzRZy?_cF4`TkGl{ z-j3ugu*KbU(A7sY3c2Brzl?<&BD`+A6fLH_IBI?az?$auvyIl8u2>#OoA7M%FU^~( zJGdA-SC?;6Q}*rIZRCw&u^eJ$Z@qEL)-x2oKoFR1n2ej@ zVtt<4QqLQZ;^XSz*@?@(!H0nX!^i@3z-&us*hN*PHmx{lwpeP6;gmVd89M3?hgD)% zW=P0H<@O%vJ@kH%kWS5xQCZgtbqB;vFr56YuMX=8?l7~j?V0{P5GsdEW>r5_DBvX1 zIzR1cB@d|jCS)nJw`M6(@R2d$(4dTD0*xxp!o$x=K?qz4{7|mAbOY9JI!!h!VLewa zKC;aSooKgoAqDe#xhnQ(%fQ6Qh*nG&cnzdsA6wETvg~QDPq4!D(k9E5u*!0X$(=e( z+3_|t6xrKVu(Dp_WP5rB-4kwJUX-$$4D?)hpSnh;+3Z2w6}IGQ7rDm1=(}u3?QN>J zEz3J-AfZPauoL)L!?`bCZ!>hgCuha@((()3sV}h7*-UVhP5$oWOjaas2Xa%})imA2 z^U4Oo$?L7X^0mjVSw^ev+4q=zCZ>y_VFLoy-XE6NFr=KWgZfb+R%gDG8N>4wpFXnk z{XsZ+9GCc`-RQ#CXYvm(47&_)si7t^QhEW-((@-C8`jQ@UFtU}fVR1-os+Fo;0&Cf z!&IJOb12=nq_OXa9ubH$n{w)UqOnSDZ zB;OVH$9gnFc-U>>!%B<6169%!PV%ibhuY0IFRcBq==)|l`O-q`B;M%y z7mXh#Er`E&E@LVNHo%e_3)v2WGnm%&{#`WVai+gxK%>QK+p4Zxv~76(c;lS&+VQgN z;nAcijk3aH9p6?Jl@Khu>N$rhU%@|be_Yo(n#9|j`B|BeLIrRR0)jOlk)cC^>MkR_ z^jA*$RIYQ|E}26sn_}Gc_B32sg^p(o6D)c|OJ+YekD>I$`&CjcH4W;k*T2JIq0kJ% zL*?urEDHZ*y~1D_Jy3}~9`(m!DJ!klz@4OUulCWuBE%IZY@Yj`;@Q7T_+asReIhmu z0=7p&6M_^cI_3mn*8Z(s>AI}a!0~Hv?}#-?>ScU$x1@~oJOU#_HZ0Z=_L@b)f8rT_ zc&6!_)VLF}bI)T^W2*`>F1?(48Xg$-R;93Cwn>ySg~{vk?3c$%*c?!R=PXlZek?6} zZTOWgPMr`7w6H1Ls1|=`ec0C}=sIuwCWml2YOo@(SN|?0ixTppDshsiuu-DZGE3cy za(d|dXbXng9X5mDnIX%{!oX?te|LaXG;M901^Ix0WtxO5IX9Z8C9Y?(1U4x z%v}|64d_)$Ek{AeYJ122^v*$=elFg!IkL1g@x-w7qJU)NU|0cco@8`K_~#yt(~N?5 zV4vqZSh2iZv$68SYxz>5Erjd2Gv!?n@EVyZ71=Wh{$pAok6U9vpL*(4bH5hvM<(Cr`A)PU%d~!mkj|tbY#P z>O1hVggv17sq$_=%!l~k*}@rX8hLbx^c@&B2k1JuP08;~d6^yjYaIjufF9ivr$+B1 zN>fAAETrRh$s~nGvpJ{5C|bEgOtaivmFdnSkiFS@>{{QAAB?zm_TpNTX1HR?$>4Zh zRrmS`4Wx@2c)t3PUsPf8`grEMse?jiSt@D~%0p{Iw-1L#hsjqQ4>x1X`gx^bO2rr< zaI&aMFvkUzgi7Rb0V@fsvycY1?5uvDlbpf^x4HA1XLY60#`?0`A%^kyaZPR0Bq7n| z75h*@LMv7BZp?I0i7`py8PCl8GyZDP7eCEZ#{r2w1+%A+t0DreTbt98I0q0IB}Rwg zEw`u3AP7AYufDy^$7_H9IumaQLy7$=?62<;0Oa{O`Ag_R1g&iskO)NlzZd|#p*s;& zw&4#VkfXogE`EpjlYP#6q0jq!QOKB`fdQ1iN&Jek{otVdY^#C+0Qw(S{+2K0^lpN- z-v2V%ZnZwX#))sB{+A5^{B67GOt->8>1d+JHVZSN4p<1sNA!&TKioeG{Es8PZ#zKw M_0|*u;kPya2GwMahyVZp diff --git a/widgets/doc/UserGuide.mlx b/widgets/doc/UserGuide.mlx index 6e3679b230aa69a0343cc89c66780b3c4651db35..84511f29aa3ca389ee969a5b31398304a74cd67d 100644 GIT binary patch delta 2396 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 Date: Wed, 13 Aug 2025 13:19:56 -0400 Subject: [PATCH 3/4] Update BaseInternalDialog to position over figure at the end of constructor, so that initial sizing has been complete. --- widgets/+wt/+abstract/BaseInternalDialog.m | 10 +++++----- widgets/doc/MainPage.mlx | Bin 21747 -> 21746 bytes .../examples/ListSelectionDialogExample.mlx | Bin 11892 -> 11892 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/widgets/+wt/+abstract/BaseInternalDialog.m b/widgets/+wt/+abstract/BaseInternalDialog.m index 3f786e5..883bd37 100644 --- a/widgets/+wt/+abstract/BaseInternalDialog.m +++ b/widgets/+wt/+abstract/BaseInternalDialog.m @@ -213,6 +213,11 @@ % (non needed until we make the dialog resizable by user) % obj.OuterPanel.ResizeFcn = @(~,~)onOuterPanelResize(obj); + % Position over figure by default + if isscalar(obj.Figure) && isvalid(obj.Figure) + obj.positionOver(obj.Figure) + end + end %function end %methods @@ -495,11 +500,6 @@ function setup(obj) % Ensure it fits in the figure obj.resizeToFitFigure(); - % Position over figure by default - if isscalar(obj.Figure) && isvalid(obj.Figure) - obj.positionOver(obj.Figure) - end - end %function diff --git a/widgets/doc/MainPage.mlx b/widgets/doc/MainPage.mlx index e22aefa991e81fcc8404a710e02e6910791b96f2..4b6c19d07979ef8b589fe6727aac68a853b469cb 100644 GIT binary patch delta 344 zcmV-e0jK`+sR8n-0kG9g1tmHAkQ$TPO*MZ}8`5?M%}$z_SflYq=(mnoC;_zFzn9gm zZn}d<@;={_kMAv)Tiv5ia9$0j!Yrj2fssS2OjqIOW|b5e`5;Uy`oTbjci=Hv){9bF zE(ZsXZm{5j0*|7}crI;)Hz8O~h?g7C!l#iiF9l&XS5uTEn+MqVH8pQf)S%It3?0oMzJ%7dLt2O>a=qJw|$c1&LK+q-6k>x^bs3C$8(G_2qm z<$3m2l3(*@P8};+tA9v~gyjvp;n5A7vlHo25UV7Ax~vypvl~y81O+8I`;Z!wv{POJ q8c&lzP#cpkR4xJ|P?JDVD3ga&DgqKwlR!`#lg?Bh1{zWT0001nWtI^D delta 340 zcmV-a0jvJN;u}0&K&~F{FPy%STe=nZm{5j0*|7}crI;)w;@a(E-UQy&@WdXhnYz zMqcjk9;dG+${cPb0oMzJ%A=i22O>a=qJw|!c1oV}o7-lM>x^d0gk}jX8dmU( z@;rMj$*=hzP8}=SsDDU{gyjvp=ClsrOLitb31XGxPnY%L6SEpmlmrC~qjCisle1G^ m0vk`0KTsQ!E>tc8Bv6w-P$-jzR4M@zld)7g1{+cU0001+8qk>w`NK#JA$N7$iE3lUdAe%%e*Utt<;FU>KVSK6ot<92!N z+J!4JrkBQ;krmmI_yUBhY3dA=n>!wpJ>-r?*znT_Z=SWiUv@N@6oFlTT|{PrIfo6E zWm(2Yp$^JoXdjABQ|veX?uTf?Kvx}LZw9Sel}Wrn@YQ9pfPv+N58>2Oy)2=_*X+&a~K<&CKM_`ztvOunN`c; zJ_MCs3nMcT2!@ZN2qYeV)ZOh`Ex&2BerS+0!~(U@E6geh%*Vm&Zn^0}xDk{4JpW<4 zGIX?&1@qTiPNVV5wBlCpEUH+c(Ja-^xr*QODr@_HSK_NTKTqVx9V^}s zB+{{}qqJL{UYBkf*aC)Ab6oGVo~Ri+82R_`z1Q(e?R&{ z)VeELRrI4ALTR~`glFy|=DJO2IkSYv`r1VEv?>-GKBndqEqFXnylE?=9Iv6ss|`k_ zHv{L4N;|7EnpT~E)d;J{=PdF>b}NCuuQZdzjfODy4vl(X7}D#M{n}c+3$-G$1KLJ) z3yEfLc-@7^IUibjFt@S@D5LG)b~t16`v{rz^|kb8D}abCy-AnN{8 z^I`|MV9oZ=ZIi4b@vgEwu`Po*NxtV$)8aVh`S*Q#f7aN;(*^ib_0-yBTxb@;;}ov9 zAVc8%1}F<|nr4`#t&0YpQlbzvj3e=Qs5H!fOm(LQ@~bmUXqFwz*>|oPahP!?^OAjj%Wv zoAbv%t|~}Bez<@dd^|;2VzTZiO44)+{%{+hq-zw>R1$Po+z0CLm@~NMH zwkdAHFvGz2T;8uGakevRnCWo$2;_jGa8y7%Y2)a=`9TS?bK*<8X`RSP z4aRy_8Vm9VDzon|9K>Re93eu=;8HAIW3l=qmx?;T|2fX)j(*`j47|3jW?w(AP4p-H4DLJDT~Rdy=`5;&$^6%FtoByV0xEvpz0o+ul6umuGdQx$I08eyVUAJ z(~(LvKsY4NbL&Z8SPSPi?IP|>b^&;MOt1UZG8AilfO=cCp%{-VN_9(|-VckX6G~pS zc_W+B%wpdsmD`}Gd|B>90Rn7{{tbp#{KMoDs6PtD*8zM3%5`t?Xg$vGna)9fCIS%3 z&h%1ukO_Ph@?i#!v2?-kd$0G6k}L;Vd;*mJ)*ie@_=;k1zGB5aq%TBJ$<@6;BQ}QM ze7bx-45d@BZ&3Bcxlp+cP4*d&*N=7}?Z%1GEA_65493FC^9#?TV=vndqVoW&*CSbc zeV-!_5SFt#EYdx(44llo_0D{M959@l30hbaAv;gm(ke5DkNW((;WDe36z-WiwSp1F zgX_VZlY}3~VU@P+l=7fJD-F?$KlZ@gcj5`KbiaC)s8+jl3^=CO!6Wr6=Ni>cHq`@# zKcP(@9Glu~A+%41mf;J1fZWFeqHrl0$W-c27bMv*0Ez(S+8aMa0^Fs4V2=iin}cKp zlea$EYE~yNvnb?7&Ipwlx7&aUFOt?#96w2u8~bPeQ9*Q?y3Ftxy1yCp?L8@oWl5Tt zhgRoQ91n8CeiTnIo;6Iy3HpI4?m>ob(xgKJ_)m|3_LYU_L>7$yMoxP;VfOu6A@u#e z>SCGrBJhYD0@cFw6dv$@NN0%d8&h)^p0Ds7LGU_`C*YKUCt74MRbY;d8_hr}z}-#u zn{+I^1@m5akQW-YN-iY;$~(GsiGo-%N;(=3vGVT%h0K$2{B{ zQBY<*f-AR7++2|3UT)0Y0fyC9f$F~hnCpQf#5;7^R*nu#jvF{2tQJlyiiy)Yu;IFb z;e?Lc1cBgo*F+M3bOBimXbRrp!N8>JWeuFT1K4K)&lkEu0LO)K0ppIbh%+nJYm|aL zunWN{e~*`O#tjRxTngA^;g(_Xhig;0dN42!xqF=&6DMzX|KWKU1RT@Y96(P9qqwAq z=oWzZ0H_5-5s<}bPq#CVw)Z_TeLx+!O#riMC_QD|n#zG+!7P6`g8X|{S2il$s|T-o8_nyF|8TGIsLCuz0jRdpCp zM@|3A@F$Xg-uB3T80AR>krdmRLu+IhK69?17q$oK;49z*29 z^<6cIn~Uic5wU=9>HMQ$q%8-@44eB1dlDeCzg*Gwx`_qCq5wR~j}i*R^`I1Bp2cEz zhxkoS>}`UHqnv_>xRQNrYRIc8vKY;JRu6p?UV+JfY(By_;s80IJCZ2_IM6F40gJ?Z z9fmPN_2xxnHI_fN&B{-W2(Kh$BvkKEsgylAL*rh$Z53=7#)8ivcaW!?E23P>4md24 z;Cc-xtMW{i*6OGD_6)`=qSvwUJ^-VsXalt6xF|^TDqz%k9AV8s;}OAz(|wrZ2%UYL zVUiSoTWFvgCbdt+&~eR+77FFne2K=0Kdm5X6C_l{=wiKlDxuqi26>JK>Bpj$dH|8l zBSs4{wRA~M-W`NAYJf?P4B8oir!{e zF-Cw3l05p1Q^3*9|d$FDwK&Kg<_fhKd7r`FJv!W}{?uK4^R zx1|JYUxCkV26y<;HO;w{v)hN|^*5X}@=K>|0@Xz;hYTPtr1Iv)O`;C?{u(lDLHBQe zF?arLVmD3KU{ou@LlI&;0PVZbA5Rd)r{i2xezQcgFvcks0f;E#y*KZ)ANb-E0FP=D za86wKjUZZw4AT;!Qlsj7k{)OX&|C))Pvt-${}ay`t?$fwKrjL%E{+2JvR5JSTW}cy zqfm~D&sThSq%V`LLzy4Q#Gwyh2GVVRR;7TuBD`OOp4U|2csn6Hvuu0oN|g`Q)b~(R zH<5I(-;>&Q?k)DliBZk zK{yjrKM6vXGwa!N0G|2E#~xZx*u-U^F%}M{bp<)UZa1i9&3?U;AfSg~=K4`I?+>zH za=GK;o&tWbM%yUHBMZc_`V7^7q*Zpz+l{L0qXi)J-aF$H@05CKUi$>Z2bsbUgy91S zXZb+sZ4tLw_0TeiByx%0@DkuF)SlV)a%F_8=008b;nJ5$2brJ_mfNjXcod^qGIhlV z666|xAMgxs$WK9?OI(%{>lBmaR(5K``Jiwu%0>a;*jkEzpO%ZkuxdhoJ?`D0jJ5=u zAI9t$gOYiOo7N_If2)3{CF;rVZfFN9q}uv%l#*tYF#2qUFbMaf-@SJ47o zHA7Ok(ay`OAivlGbMIAu3_yZ>yW#t`(r_MMA{bhR@zGVl8`S_4OA>G+>GE7(yZiRl z2FS4%rB9{uyjoXw9f6pK)`0?X7lyl|j%O+|lEl(; zz(qj8-z1cd8CqSAd+~W-v}wVhO7c4SG|j{~OiR$r%SH*NsFb?nx~drLj}5x(NC)v& zg6VA>6x00DDl}PtL=IxKcur@)2^Qq(Pavfa7=X^ck1=MYkZZBrKvD!cbzw0mh1hIh z-9h6^0k~WpUs`*y z{0*-+cIe1Z!q~fMvQ{^%sYmU8;+8bwJ=%)JYrQ?*&n66i@EYaBgonX+80MAsBR~>w z6}+x%L&6(Z^4Db;wohk@!PpuIE%Wsy8C33~$STJvSF^ll(kEat!F)IcbXV-xxjq~; zm-27cG`gJ2(1ruPa|9EXnXpL}yJttU)Y>!vy5c~3PSPd7IRIt;zJ6%t>omc#-M%S6 z*mfp2OsPJ9HBKUBQYU=6(Bu}N^!8D#KOd4L`PC*&9q3jOWtbGAlB=Y;L*sypT2n=LA~EZYcsQy!9yC2Jd>S^|L%3aWA55VS zWZ@emro#X5#Z|_$Pnp?!wv)*Uq{1!Qal3z^G||0(+S%MA4NHy8Z^`x69!k{>S}pHq z9`o_KEHgllipf_Cpi`TjAWV}y&)x8214Jv&VHgN+aK72QQTZ@L;P|AO==FzSrQW8& z{K)r@=UoMPQl*1pjYgpI zlgL4TY=(9Zz%myJpzUcLH{ahn3+ASOyRVSn07*a2zBr!4Zn4%+B*3(4esl0#QsqG0BgA&Ibr=?qj=?kz1Xw4(D!o3+7=D+&BZF zY~DmiFhp!QV1QEkQ>`16>g{CX?*ePa*j{y++EmKb=Rtg#VA12=SB-O_qY5^un-W~KuZFD zY1d-Zs%{JbZ-`(b9ic+t?I@j|3pdRtiaMNMYKMEZgkWt|NxOt7%%4s~lvf|Q{lP5c zscFlnu-DqC9}j%Gch=?!M?+?QZD1OwBXVmYGBbeCUg8pHk_4qMjAXXVo=>Dp| z9?-Q396;Siq2;(|9%Jk}Dan>Zfb0o>)n((9;sWNSxZHs(Dwmm^-_z%%@tw&#Kx5pD zqv!athKkqJFpJxUC<~c<`HjTGKp&Yc37xu&tq-o|-zk3&%pOF$Z=cKGzClZCr|_I$ z-aelXOy?@iz~%GONo|#7&nJO8|H6WhOcRhxGdY)Kx z88ei8>s&NR1i87Mfj$RF0C*Paj@on3r&#*Tv4=8K3UqT!!Z{6K$C^Dle}nM@#}rUY zF$J|fxx7v;tpkV|bC7NZrIo1`*m6K9w!-cEy#tPDJE$H4{x`gm9;ng#CBV=HK8d3r zv(@&nr;wX2*AvSx*1CNpo5bFK1#%Melb;Bc1OiL0$u$M@40vJ{yzlac1l}F(&oy8qRV`vveWN#0)9xqi zUW9l|Ks;@Pam?|!R@bY40;bN1YAqH_{0@`{-LET*V$BWdD#qL68KDN&i{9tJhd^#@ zlOog|kp6%_0ldZIds6|ubAzCmD=+f7ZYyRRc~OkA^KSL0!|GJ8*bGkrKfhiN&2E|V zS%>gqO(51}A!s3x+<^u)e1~n{4Dv38qF2&4;E!f!KBq`}lWhEd)(!LHdzh|be1_Lroc>^TJNy%QMR$iWl zi}!NEK3tow)zzbaZVGwE;hF3&kLa>Nw=Ek1VQg`lonAF5OhERB`h#Dt0XgtmWSiSv zzV{)<-=F_Rf4SvOXr^;>zH2uBu3-=3b}0(`!?=&$a+?%Af6&UZ%S^)*HO%{VK8u_| z0G`T8JxHJ<_?}>g0=99Mm`4%`xaHXA-u{vFe+Mbx6 zb}67Bhq`F$?}1r!tF~&#?LpkGiVUD&(y-h}Z!RiWH;{ks8qk+w@M=^Go2OWRQ2G&I zM?c}}PAqmwQV83IR(KU_u1WbY!pg&+D8GMC#|zPK&j-PB_ETQe3iAgL;7#q*bH{ay zBLX1s%5LC)_t&>|j^-3b(!wpXbg@w$HQar1x20y18YP;@-ciKlX;WueraOR81bo}a z(w3xzXGILkEJ-5}eF6K(rH_Hco?_&(Fys;yvz~~iYQpB@fX#Ed&dl<1Q{P3+9$MEJ zXR958UK+H$RNJ;X=K%sIW)SniDf=qwQaT@4jny z^xL)(1CvMeHdI2EP-II6&VD*QNXh^K0B>%)1RR;14|N6-9+GIY-B(a#t}q5s})2#EZgnwT(Le{pwp2?kA#P;B7zq>N3SXfu+tx!m3~;KJ>|bQCdzGd zPu#|r%QqdO(h#)Fg^k@RN4lPC!-ANGx^eS=2Uiu^LSKx-3sknWkz(uq+J8h!i<^y7 zx?b9x7HiWrP4JLJB(Zvlxph14Dk3)D_LYN|DPcb>VeO@Gc?}a!0W6)Udf*L1=XE-=X)7czZtV;rL8t~fa46b%)_4yLZDCNfE)80Kr5RM}IB&+}Z zJ(i%hLqNuN6_6t1!&JE3@}5#DTVb%^hvETRT~u)U;LyAJk9x-+C`EqHUr=G{5bOW3kP}# zK&g=qNeU|AUh#|dyF6Q}k~N>mFMJv3`~?dpM^U2(0{9ILxD8FS6nn1kE->{x*LN9M z-ASzmYX1#{91_*cVM!oXBoPpQme5b*3D%F$fw2Y0RCmE#G4%K~{s4S7!B4|Sl&1Zd zz69u`_p?8u#GI3l)m&*J*rn?ZIlFJ@`{F%S`x^tG3?MKz%=<(^3GjJKF=5}NFj%1z z;g}o1928CQ94OOGiw`e40B^U%=9Se*;#qa(xUKp+?d;fV=Mf(%z?y!4NYN#w*Yu>M zCxquC3~%!FVh^d^G}!G@q5$XLEkGk0%(oqSch40cvYdaQ93cL_FY9WkX!e>F3%E>h zuFnGI4F`cP5usPqJr{6STo$?^nj%fgRrGuoey;2e!!pJg(M{}&nRT(6+$TW3X=+~A zRI9aPbfXdRO3g+XAO0+VZ?Rh&LX$3!qVo6MjZf}+_Q`zG=HZ}|RvBAypK(GH_>5VT}ql$7zYhk>rE&w;qlJ=gv_P1I>kd6dtn} z1(-rkwil@)H zYffht%eLtVon0J$est~L=pY69 zHWfZy#JscG~*~`0-K$q2rzJPyybmoNHm<#@9)@zmk0J11N`2vkT%?ySJUs z(N#M~%#Ir_qTB8t0zO}9g`MX5IM<02DccV2d=`qu^A^y5Vq37|on|5G)NG&I?E>n; z_soCR=Bmty6rjube5rT`hm2KQ@f$oec-o;tAmK)oYAQWl{Q18+9zIhu05NVi%0Ey@1`y%#vhY98 zV_XfX&6M-F?%Q*xzk_4^@8Bu_Fm`c4dp%$8d#>Dw5HfK352zF8kWce?@zVm&) z>HW(~-&S>G|DD&(2?Y59|MlJTAD6=aTFcija|uedF3rA1%iMi||MmFGm=#sm>dQOM z#_7M)-j7;Ce^7?~pbY;}Pk&HG{-BKdK^gs98-LgNuV1>cDylYWp1&zRJO9J-U%wUj z{)T>kQ?=Q@KM4OX82sxF^V>oAP1nEv;M(usCalp|MRAi^^H{aTkG@d=*p+?#UhoC} zcJSr=CL{a$)2~1GJpA)dKTBiOXFvakzZS`DntlHK6Y(Fuz~ArqGLK7}eEXV1Zu9Qz zmo1v???qXvRjCSk{56l7DfAou2aT|1U|`EbsPP!LPgjqh81UpPFfZ zVCl>y=Scm2wtwzkKmWfskN;Q375>eKKffl*fA=e(vfm};Gl7l2Ph7vWGe_gMK|52>L(1Fpq=N&!2Tda1fLmyzB>~)E0 zoL~f6^o`VQiJ$6qw8Y4Ht{dL<8cMtehtaB<6~ZvlTX?X&0qZ3=6inJNVM@I9-Y`O( z*n;9N4ulTjrnidw@U$&4T)goXNSY)$QQ&#Qe?2D$VPqyFJ}MhADb2g>MnNM8bf7?c zM`%pRH>;%I8@M=e3eRW{R=JDtm`vo($%z_@a)0+Yel?Q%a4P}0njusi z?MztU9vT!J>}$7E@|@k=)@xj)NqQ9}%P3jY^qQqPo2Rb@`8EH;sX|2?`7bHWYPw)_ y63OQIne-$GRgynlRIt3g79a$8iaU!PvM8sMCCjyQ0KSdcD|0&0lgpOl| zM3Iwo21f@U3>Lk#gWR*h24Deyczw!GkG~^Oo)7cPQdDlf_p6~kI!D)S2OUw0OlPTj zs?tr^7}Fo!87Gs@_3S|`i7Yp922!l1Kf(@WT8Ov`^6PHc{tDA*dufi@ywXNJ7`Mx7 z*DhR>+nF!iJwdc=N37{j#IMqzLSP>LM}|%sFhR zEXy)J3UyExL;Fy4nqt54cRxfE2D;J+AzzgWiO&HJhE!|b)~lBV1WSv+5OkfTJIbgZ z%ZQ_BGhMh%7b+!s_p{O3+f>>;1C6=kKl%;MVKRr|!M_^Hn#0)GG@(!l`mLVI&#YP& z_aUhCS{Rv$Krnn9MIiBipzdzhYWYp0^+SW4Ar`2GUSU>AU_K6Bcgsx=!i|{R=lKuY zm7$}JESSIEavF_arWLn(XHmrpjb^ES)+Iud5_5@;?&Hfh4+HLkq*Cd6;@+AtLmq6z z*uGT*pNjOcS!0Yf@iI@|*I>CbB6TPB!ggiCgb&AgUY}YSP+8l5zY<@)`FSEg?pX1D zAd!w$9i`ps^zuaVnHb+%M5N|NGGw zqSjr}s-hp|5K7CfBs_B$G1qNE%b6uS*4HMQr&Y1o@G&)?Xu;!o;!Rr_<#-K6UTrWc zy%{)XRN7gU(X{G+tVUQpK4+09vReuKeWjT!ZZw3scWBfD!;oI5?AO-nU8oh29ndza zTSzo}!|N_Q&iT;NgSnMOKpAcSw!;~l-$%%#ug8@~_agU>`|Bv59ID$MFG0_X9WoGX zB`|c_9-y8gd)HF0XSQS#ADY&SKd8>NSFFA}VQM6_09HJ@QzZ;olFKQ%@$VAJ)ATs6m_z^r-Zd^jg-JxiF!aTNT?3HZ^qat3cx?f;O>Yu!g1t!tP9pLj z=hL^%;(G9cgCOU?ZSCt4L8eqEQpU9x`rYp)_SWyh^?xxR%h6DzeuVXd*NkD0?D4#~ z1c+ZF*59aNA@dk}NXqt#RCX~3_qrWn>(~(tgw4Kxn}#@>LUiH*Z&aQZX+WH3r?f4# z^y8fW4DU}@p{~HkN}fw^PlPpXd>>p0?^2KjwU$IVzPKn&6g*yKIPJkJRDeIKFDq~B zJ=9tUy<2Cw?6XrORq`UmkH_=9i}OMzApgwBt*NrT_T%y(L0D(a1>Phw^9NZ(NvMFYk42;jKO6(Ta@9zQT;0z@|wP1PLs22T}K* znio631#7l{ZkuEkiFcLdiESCgN%B31nij_~&%f`}`?JO#o-V+js;Aa2<3h6#9;a}< z1sMY8H$Yi%(=@{@ZCy0*loExYVH}CaL#1JVW~#&8y4Er>xGG35+hZ56E}HwFVDiQN z6CnB+c@6(KxrH9vuzXKeet)6lkWc-8 zv`ujnh8YIF=kk6niL;$i!%T;}M<53jg`)!ENgGG^%@0bDofBW$P3ye2ddj%c4;NQa zX)xBa(pZo`P?>#y;UE@! zSbPuVM(<~xtyu^*OIb`t?QQG&eb!}vgrSvv0@J&U16B9ne6@$ka=l)nI8NTy-KAC+ znvPVW0m319o?B1)!df`DX%}&4vJ1f5V|v}MmZ4bd1Jv894aIm|QL03J_pp^lvb{;vXiLK>blDz7F6UP_BE6N9%Eh&vXudG7*4K zcBYrQgG}J7kPkC(jHL^P-+R4plw>)`;uE0!xAx#Q!dDc7^A#)ZA$=i&O0Mn&8nH11 z=hNl$VJMw~eS@km&V|ZtXtK|EyneI;X*W)cUa5CgWH1(9o?mz#9ede!5S<5Dy&lQp z>-!vefUum^VUg~MW#DAyt#{^s4y&|nr<4Z;T4{)0{ILh_z7tP?rTf*ZM77$bW56-J4j!prIoGImvZ)>@ z{0VLP;Mmk=3!!~7v1$#7D+#Dn; zn7sALR=$@vLDoPS6ibaSt+dlO`P+z<+uKw682YC$eDtH*(s;3A69l3Zd`! zRTs;|7lB9Q5U3WWr|^J(M><1v-NPRRn0yAp@ zk}I?BKwbyjnB$E^J>#vGD+Rz`yR*7(@;I>sX+`pRu&TmGv#!N|_Ga+ichq?svOI4( zS@Tv;mGg_^-YvP#_j0+XkD->YYFWMOEdn6&-cbGUnmLBy`es6OGzT+|-~#;)Kjz`y zh=MZf5nQ=t;^u-J_i|(I4lt~?3RL&~$6OB_A>N_OwsLe}a@@cHVYP5tQB0iHfeqIc z3@3ElCI|$#yC#xV3%3l5KU|y2)q{a?$ldGIm^gX6`w!2zJ(Z4wyIcRDWORiJ!-1=P9H!iIno2EQAdl)L+N zp7eRy)=hr+W_MTbpc~AqZ7D#J*OXnX2BW*cIX4u?E*pmR6{pE_b*G()C76sr@ew0ukt_P(6^DGv# zJH&5tVs8^n9OV>5#Fgx0Q$t=&k;Q1%vwG;G@CroANFsy8nptFipCZB~A2M0h13BcXbSN~P?{85;M}ZL46zFcy3Uxr03AToL73cEDkY z1lMaoS(Rt9v{paGw`VY35xtI$_W>A9MH`?k$3;P!R{^8W;|Oa88jlDzobJOMN9gS1 z43ngP*g^x{FsXeihK_4qv`{Fo=1Vk2{AmSAn;@YoMi=YdQwiNBG{|!_NIw>})B}iY z9x+;wsii9-b% zDqmYaVstncXuku?js!QGp}pMd^3*LJzixI`C-1;GE^L}%g2++G#ed5WBg6S zA6DRq#4Re$y6$|W-eW;~Egx)Q(dEMQ45x33Qf=Hm^JMw(llwp(1na&h0>^DFaK+~j zxh*AF`wDz^Gq}T#u4&GtoZUVwufO4>kzYDx6R0j)Ib;BFA(b~TZW49C_t%hN3%Y-Q zi@Eb}6T4};2BTUL9*Pj-0chWa{&<2YJ{{+p@|z`^g)vUC2tY&;@4b1a{lFKW0C-fJ zfOF!)Zv@dgWSEu+l^Rvwlk`ACfaW@Ycq#`1`JZ^kXnkka1A-ACad8yzm%R#s--62! z7=?0Fe7@qtBYl}{9m@PbCJuc7Gmvh7vnmDL72*9N^t`4D$J+_vnPuBsSE_udroM-o zx~asMa5Qc0&?wX!j>CC8%2MZh6>xYkcZPU9ZA$xIV*v{X!=gBfOagS@KM{?)r0ZIq znVcvlQ-0*%}$BZquLIVjc{ykOKmS4m&Ji|&Wbb5w>woW{8LnUamJnaqCQ z3&NS0`biM7oLSGF1MtjOKK9Up!X_>Qjj?brtt-g+b-O_=Yxe7%1OYt^GuMxzd4G`o zlFJ-cdu-tC7!lM|?lBp{` zkRaFi`+#S7Lw*YCT;j5vSf`jQx3W_k&Ig5SQ8o$y$JSE(`?OpPhE)@P>T&M|Wwa&O z{4i$67?jLI+_W~y8xN-IHOo^!2Oj6URN8=gSmfFid&Xcf``({Vk`3)gbZTqX%wU+s zM>gq<73|Rfc?!lXUjoMWj4gMFoyKkY4$pr>d?D--g4G&>#j=a=vQY&(KEZcRfg_duBCn2B!HZX0$Ov57z zjhgIUio9_^Lx6ZClUDZLd_N+{+rd6ld<7wm&M}4p-sm}qH0AT9xG>xubv#p%ktCL$ z116fxqfHA2Rg%}qr)eg}VOoM_UN%ZFMWxgo*Hy(}e{9fQM>>eN z5=?L7pqS>DR-ws%B61L;#dA6XPOukb-U3c%&+05gCnoiJy~grZZ8<3*DC^7d4BozivcWOCN-mim0Ts&9U2E*)S4=~6Ny=G#KTd=@u2B(;nT3u9>VR4`(O%v zAPe6hF%|xYFRn74eag(>xKM6W*tEA=)F z=10DNJnt&VlPVn)YcxWoQjj@dQnpynCr(oc$tbcH>+i~2`mml%90!aELya3yv$u6w zoJ0#P?Fot?O0qd(RyM-afTG=slA+6kHP-C#%9`NcodX>9+Q^ zO|!Kp9GVv)_fa;cVRoMPfCi0a5Qt*>iAjEcbUr{}b06ECjNIycbvSp!TQCoM;KmsU zW%DLFf+1qd0RxoMpK9HpRBtC6e-~IY#`em4&84E%1nj3{oq=C^E%Wote2KvZsN$AvFY<+Mw|4#XPVD=!|efwPg_6=HEJB8;2 z^Y;0CU^-W61~xY^ekaw9{2lVqtVE0_#<^r0(FuMB^vpcM$W+Ntt^x6MzUwi6)bqrm z%b20$Tj!!lBFN444D>lb0>HCSchsJPKE={!jy;r_QlOh-63%G=JJ#&c`5TNMIHrJF ziYch=$>nu&X&pe!n1ggPD6LGjz?K6-u@!FL?;UVN+d=gZ@W0`e^gxZ?F9C)w@JSr~ zn60*lJ%!wKxt>^lvDWP)*(COVE|8O$pZr9qBoJ6~CGTbvpDS;uZaLlKapsR^KUY;y za3#QI#(imv-;j@2xr)@fL!NaDL4HMb+c}WzVC?LA6KDk23*J`ZBUi-pnus0%>8Ri2 zI}RoOTzzv~F)j19xgM_ANAF221P;+vYZ}k>SBXhN?o$eP;_8Cw^=~DA7{OVo=DcK9 zz}k!ftzP5j8wX54Os*-IXTTGy;C+`jB=GKNf35)|scI1;E4lBEyLTUho90e8V$gqo zQAp2exT1XZhW(_6*D&ZJUi3Z(J_K@O zn-rn$fb<9a3E(Xr-op-B09ag7$#b$U4`1$pEXm-n- z&pLz`YXY$*3qcEkmW{`I&6upwZ0e>_*^EpM*n`GmEw{Dmp-@|kjBVYRE zaZWSx8iULI0o|%F@jM)Z{2TcYwOjN21CA+3b|H_<-5NVDO~J%uLRep(CNUFc^m;LZ zMXFf@pRNsvRET9Q@Qd9Ow%g@H0Ah6TZ8>mSB#fJ`$_TsyHyDs%${Qd#PD=J7wes>b zT)dYP_Tk!et*#z_byLVQ4$owNc|?~Dx^3AA2xE)W?DVQhVFI#0)F1qE4akAlBHP^V z^1Tl+{{H+o`pYeMLNlG4^Ify~cMW?Ow@XpjAI5$3mfNK0`GZ!LU1l1lsA1l>^I7B! z0`OE$>Ole>!S@6^6tIo6#5|Hnz%4hA5~>e*ku|0jn3Jb}J)*||h;icqj@9W()b_;m zv`Ya6In+f{e-F%>TeVd?ZV%#iRb&7KlZNF+dUH|1x`F(2*MPnhgIA+k*gVDhgVK)x zJNgM%cVe+il0w)vw8E=cb4|*J5mp}lMEU)DI$nr=dp-!3v!C*!R+vA40B>rao;$8v z91#G4S9Sw`zrVh%b2O(gk``{6rHhU7sNwF5yDc@7)F{zJ_KqSZPn$Z+GTi}$BH-IT zmbN4%JS$>QW=R@>=nL3KE`1Cn_7o$Rg&~)ynDs<7RTDNJ2W+0xb!L{AoBA$l_RzY< zI9u%y^wOa1rP{XDIS&xcd&x4>Ul9C$yS+F%MYrUAt1^&Z_}52%*Cz8><_#Kp<8ko<4ZT4E_6(f= z58l6j_}}*q2X_II^b*D=&R_ox&dc&&`MmtcYqo;0aeF2FVIB3WkW$0-S9o+0ErMag zS+56VGmaqgS*;+_VcBkX=Zf{w0-cUDdL%q#6%oA9IeJw=fSvx(tn|Y=?J57gF;Q-t zd*U{}T)ycLm4={YE^O>pInwo98y3Vg)Qy{eKe(#U7W!fwUZAq2jTBq=*Zw0?THI`u z()H5jv{;+2X@Z9&B8k;Y%&psTR}r!Kwyzw#ObPp832QHf%WIf;5^zniu(xaQq&tRK z28j{|KsjF`Y$-%n>V?HzXBYQ{~rJ7vay|H{_}0g2~ddCyj7pI28H zdz$BSo8XsSl37RzysVK6S%pOMWL*+~(}34TXK=MctIwBMMkzNQpZ4x4f^ZbsCt3aP z@39269Rf1GtAG?4AEv_PmiLrO*$RUNKNJtp;%bKo<)(9TW0z-)_{AtbuK_22)j*yw zP~MU!=LMvcxN+2q?jS>YBp$w_HwNKeKH6cd`Qj%{;Azgs)Gm@_u^ITb=f{!1UpUZ1 z07{K?NK#M<_ljSv-{sj-m8|(he&NeN=Py_=If@!R5WsI}z-?%nrPyP~7kQ2TEnDB8h;1u!MdZPq2Q34vZ~0rn(E}ilN7^@dx0u34R(rqBQNt z^d&$iy`TLNCFY!btmaA+!7g2Q$k}~E-xu$x+TR!eWdMP(VcsVSN`TK>iV6EBg~1A) z2*=z2=AdYb=RlcmT6}oX0eHJ5Hm|Hk63?nL$8FWuX=le?JCFEC0oL??Ly9gby{0E6 zJs~_FVR)0T7kfzUronEP5(PN_ZUGw6V7~3pyL+zqkmdXXL|srx^j*1v&%{$*YG8L43gXY09Oo91xXZ^;r-i`oi*{u);VcJuTPWIPpm zc|MCmzdX^X)388ujOA{*Glih0Abg4^M}Zl1_dP`_Ij~hS9nc6(J$H_Z7-%lsqwtu; zD8LkQvek&2gwC;(8MpftcAKZOh}!~q^^oQlGQU!7LfLBVgmoMpyL_dU5Tyr|JShh_^=k+22p#WyhYIjkE0tq*wR8#5c>JO;Z*nM~0b~ULIF&N}g z;AqCbe(oF47}4|u@|AsmG+X-+^=%uu_h0j$<;=<_U~;MFEehn@Ve-ry@CfVE9xpB2 z-RjKKw*@4B?*>2DU?>WLagghC-7J%{?Q^YZ2Kg1n4FiImb}hDhW#-jeYgL=Xe~`EUO@}?!_O1iTGqOy=Tn0@`TDp@$i|N0f=$CQT~BKGJpt=mxcd% z9^-0AZKj;Zb>E&l{T&?Re+N(bhpA(&VQ1Rq4z+ta|TziGJ4q7=;aKQ;5e zL_d{dmjC7FcQiLq{O2-jdb8`7{y+Zn1nx@afBsKD|CBV*H2vl0?{}TUVuNA&`JamU zU%p>+)&oc9@lRVdmp|oI)}+&)zreq=^JVO|>GYIu|9?rkW_h>Y3Vz-FAN4x+|I|!> z150NvIY;XEv;A}T`uYF8dHlaJuJCU@{P{Ie{<~iRCEqgYlzki4@1_7lfT6!D`jWM& zkz3!3ejSS6mHjR$p9yUIed7A1ojDr64ceJ<{`KIj{@2o9cYm4wZ-JWqJy{<9-3>o< zwjUV#i!J|4)}nuCE%8HZiGN6Iu|Kqbmi(c$ zX)XDO)}qJ{%{`0%0qv#!*k1I<_M-og_R@cBFZN@5v42Q=nLoCd`mw##|De5pBrN_< zjlp+n^6v}*`^Q7@<9v<&eF+=>9ohN~zdFnR<`eS&22e`_1QY-O00;m803iSb4()!} zljSEie?n5MBppDVKtdvjip_FfTZ`DSY(v_=#|=#=(1Fpq=N&!2TP*jgMIT_D>~x7~ zoL~f6bdA*85-|j90(o4O=lJN;c2(TaPh{sK++`1hyu?Wf9^Rs3L`Ta@k!Z;Non3~I|v#?5 y5{%LOOgaiemE=#C)$9{cO9KRxZ!H?LMJcQU1RUQON|W_0I|L5xe%P}#EkFVGbjiQ~ From 63b78c497fc940effd9d71d5710720bcb2cdcb54 Mon Sep 17 00:00:00 2001 From: Robyn Jackey Date: Wed, 13 Aug 2025 17:38:34 -0400 Subject: [PATCH 4/4] fixes to BaseInternalDialog for resizing and adjusting the close button position --- widgets/+wt/+abstract/BaseInternalDialog.m | 186 ++++++++++++--------- 1 file changed, 103 insertions(+), 83 deletions(-) diff --git a/widgets/+wt/+abstract/BaseInternalDialog.m b/widgets/+wt/+abstract/BaseInternalDialog.m index 883bd37..beb9c17 100644 --- a/widgets/+wt/+abstract/BaseInternalDialog.m +++ b/widgets/+wt/+abstract/BaseInternalDialog.m @@ -7,6 +7,9 @@ % window. The dialog's lifecycle is tied to the app that launched it. % % This enables compatibility with web apps. + % + % The dialog may flicker when resizing the figure if + % AutoResizeChildren is on. Disabling this is recommended. % ** This is a prototype component that may change in the future. @@ -132,7 +135,7 @@ MinimumSize (1,2) double {mustBePositive} = [30 20]; % Buffer border space required on each side when sizing in figure - Buffer (1,1) double {mustBeNonnegative} = 0 + % Buffer (1,1) double {mustBeNonnegative} = 0 end %properties @@ -181,10 +184,12 @@ function obj = BaseInternalDialog(fig, varargin) arguments - fig matlab.ui.Figure + % Figure parent - Create a figure if not provided + fig (1,1) matlab.ui.Figure = uifigure("AutoResizeChildren","off"); end - arguments(Repeating) + arguments (Repeating) + % Property-value pairs varargin end @@ -209,15 +214,6 @@ % Update the modal image positioning obj.updateModalImage(); - % Listen to resizing of OuterPanel - % (non needed until we make the dialog resizable by user) - % obj.OuterPanel.ResizeFcn = @(~,~)onOuterPanelResize(obj); - - % Position over figure by default - if isscalar(obj.Figure) && isvalid(obj.Figure) - obj.positionOver(obj.Figure) - end - end %function end %methods @@ -247,58 +243,28 @@ function positionOver(obj, refComp) % Reference component size and position refPos = getpixelposition(refComp, true); - refSize = refPos(3:4); + % refSize = refPos(3:4); % Lower left corner depends if it's a figure if isa(refComp, "matlab.ui.Figure") - refCornerA = [1 1]; + % refCornerA = [1 1]; + refPos(1:2) = [1 1]; else - refCornerA = refPos(1:2); + % refCornerA = refPos(1:2); end - % Dialog size - dlgPos = getpixelposition(obj); - dlgSize = dlgPos(3:4); - - % Does it fit entirely within the reference component? - if all(refSize >= dlgSize) - % Yes - center it over the component - - % Calculate lower-left corner - dlgPos = floor((refSize - dlgSize) / 2) + refCornerA; - - else - % NO - position within the figure - - % Get the corners of the figure (bottom left and top right) - figPos = getpixelposition(obj.Parent); - figSize = figPos(3:4); - - % Start with dialog position in lower-left of widget - dlgPos = refCornerA; - dlgCornerB = dlgPos + dlgSize; - - % Move left and down as needed to fit in figure - adj = figSize - dlgCornerB; - adj(adj>0) = 0; - dlgPos = max(dlgPos + adj, [1 1]); - dlgCornerB = dlgPos + dlgSize; - - % If it doesn't fit in the figure, shrink it - adj = figSize - dlgCornerB; - adj(adj>0) = 0; - dlgSize = dlgSize + adj; + % Dialog position + posNew = obj.Position; - end %if - - % Disable warning - warnState = warning('off','MATLAB:ui:components:noPositionSetWhenInLayoutContainer'); + % Calculate the dialog position + % Request to center over refPos + posNew = calculatePositionWithinBounds(obj, posNew, refPos); - % Set final position - obj.Position = [dlgPos dlgSize]; - - % Restore warning - warning(warnState) + % Update dialog position + if ~isequal(obj.Position, posNew) + fprintf(" Change position: posOld = %f posNew = %f\n", obj.Position, posNew); + obj.Position = posNew; + end end %function @@ -497,9 +463,16 @@ function setup(obj) obj.TitleFontStyledComponents = [obj.OuterPanel]; obj.FontStyledComponents = [obj.DialogButtons]; + % Listen to resizing of OuterPanel + % This enables the close button to stay in the correct spot + obj.OuterPanel.ResizeFcn = @(~,~)onOuterPanelResize(obj); + % Ensure it fits in the figure obj.resizeToFitFigure(); + % Reposition the close button + repositionCloseButton(obj) + end %function @@ -513,7 +486,10 @@ function update(obj) end % Ensure it fits in the figure - obj.resizeToFitFigure(); + % This is only needed if AutoResizeChildren is on + if obj.Figure.AutoResizeChildren + obj.resizeToFitFigure(); + end end %function @@ -585,38 +561,76 @@ function resizeToFitFigure(obj) obj.updateModalImage(); % Get the current positioning - posD = obj.Position; - szRequest = obj.Size; - posLowerLeft = posD(1:2); + posNew = obj.Position; + % posLowerLeft = posOld(1:2); + + % Calculate the dialog size + szDlg = calculateDialogSize(obj); + posNew(3:4) = szDlg; + + % Calculate the dialog position + if obj.SetupFinished + posNew = calculatePositionWithinBounds(obj, posNew); + else + % Try to center over figure by default + posFig = getpixelposition(obj.Figure); + posFig(1:2) = 1; + posNew = calculatePositionWithinBounds(obj, posNew, posFig); + end + + % Update dialog position + if ~isequal(obj.Position, posNew) + obj.Position = posNew; + end + + end %function + + + function szDlg = calculateDialogSize(obj) + % Calculate the dialog size to use, given the set Size and + % figure constraints % Get figure size posFig = getpixelposition(obj.Figure); - szFig = posFig(3:4); - maxSize = szFig - (2 * obj.Buffer); - % Size is the smaller of requested size and figure size with - % buffer space - szDlg = min(szRequest, maxSize); + % Calculate allowed dialog size + szDlg = max( min(obj.Size, posFig(3:4)), obj.MinimumSize); + + end %function + - % Restrict a minimum size also - szDlg = max(szDlg, obj.MinimumSize); + function posOut = calculatePositionWithinBounds(obj, posIn, posCenter) + % Confirm and verify the position is within the figure bounds - % Calculate fit within figure - posUpperRight = posLowerLeft + szDlg; - if any(posUpperRight > szFig) - posAdjust = szFig - posUpperRight; - posLowerLeft = posLowerLeft + posAdjust; + arguments + obj (1,1) wt.abstract.BaseInternalDialog + posIn (1,4) double {mustBeFinite} %requested [x,y,w,h] location + posCenter (1,4) double = nan(1,4) %optional - center over this [x,y,w,h] end - % Don't go below 1 - posLowerLeft = max(posLowerLeft, 1); + % Default output + posOut = posIn; - % Update dialog position - posNew = [posLowerLeft szDlg]; - set(obj,"Position",posNew); + % Get figure size + figPos = getpixelposition(obj.Figure); + figSize = figPos(3:4); - % Reposition the close button - obj.repositionCloseButton(); + % Center over a component? (optional posCenter) + if ~any(ismissing(posCenter)) + centerPoint = floor(posCenter(1:2) + posCenter(3:4)/2); + posOut(1:2) = floor(centerPoint - posOut(3:4)/2); + end + + % Ensure upper right corner is within the figure + dlgUpperRight = posOut(1:2) + posOut(3:4) - [1 1]; + if any(dlgUpperRight > figSize) + dlgAdjust = dlgUpperRight - figSize; + dlgAdjust(dlgAdjust < 0) = 0; + posOut(1:2) = posOut(1:2) - dlgAdjust; + end + + % Ensure lower left corner is within the figure + posOut(1:2) = max(posOut(1:2), [1 1]); end %function @@ -624,6 +638,9 @@ function resizeToFitFigure(obj) function repositionCloseButton(obj) % Called at end of resize + % Get current position + oldPos = obj.CloseButton.Position; + % Outer panel inner/outer position outerPos = obj.OuterPanel.OuterPosition; wO = outerPos(3); @@ -642,9 +659,12 @@ function repositionCloseButton(obj) yB = hO - 2*wBorder - hB - 1; wB = hB; xB = wO - 2*wBorder - wB - 1; + newPos = floor([xB yB wB hB]); % Move the close button - set(obj.CloseButton,"Position",[xB yB wB hB]); + if ~isequal(oldPos, newPos) + obj.CloseButton.Position = newPos; + end end %function @@ -750,11 +770,11 @@ function onFigureResized(obj,~) end %function - function onOuterPanelResize(~) + function onOuterPanelResize(obj) % Triggered when the dialog window is resized - % Ensure it fits in the figure - %obj.resizeToFitFigure(); + % Reposition the close button + repositionCloseButton(obj) end %function