diff --git a/NeuroBits.mltbx b/NeuroBits.mltbx
new file mode 100644
index 0000000..46e8494
Binary files /dev/null and b/NeuroBits.mltbx differ
diff --git a/NeuroBits.prj b/NeuroBits.prj
new file mode 100644
index 0000000..0e3030a
--- /dev/null
+++ b/NeuroBits.prj
@@ -0,0 +1,110 @@
+
+
+ NeuroBits
+ Georgi Tushev
+ scic@brain.mpg.de
+ MPI Brain
+ user-guided neuronal segmentation
+
+ /Users/tushevg/Desktop/imgdb/BatchProcessed/160517_UTRProject_Colocalization-CDS-UTR_Calm3_Channel2UTR_Channel3CDS_Dish01-OME_TIFF-Export-01_s2.ome_maxProjection_neuroTree_17Nov2017.png
+ 1.0
+ ${PROJECT_ROOT}/NeuroBits.mltbx
+
+
+
+
+ 814464a1-b7ae-498b-8670-bdeacb3a334a
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /Users/tushevg/Developer/Projects/MPIBR-Projects/NeuroBits
+
+
+ ${PROJECT_ROOT}/.DS_Store
+ ${PROJECT_ROOT}/.git
+ ${PROJECT_ROOT}/.gitignore
+ ${PROJECT_ROOT}/.gitmodules
+ ${PROJECT_ROOT}/LICENSE
+ ${PROJECT_ROOT}/NeuroBits.m
+ ${PROJECT_ROOT}/NeuroBitsTest.m
+ ${PROJECT_ROOT}/README.md
+ ${PROJECT_ROOT}/widgets
+
+
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uiextras/HBoxFlex.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uiextras/VBoxFlex.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/+mixin/Container.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/+mixin/Flex.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/+mixin/Panel.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/Box.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/ButtonBox.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/ChildEvent.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/ChildObserver.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/Container.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/Divider.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/Empty.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/FigureData.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/FigureObserver.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/HBox.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/HBoxFlex.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/HButtonBox.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/Node.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/Panel.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/PointerManager.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/SelectionData.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/TabPanel.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/VBox.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/VBoxFlex.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/calcPixelSizes.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/loadIcon.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/setPosition.m
+ /Users/tushevg/Documents/MATLAB/Add-Ons/Toolboxes/GUI Layout Toolbox/code/layout/+uix/tracking.m
+
+
+
+
+ /Users/tushevg/Developer/Projects/MPIBR-Projects/NeuroBits/NeuroBits.mltbx
+
+
+
+ /Applications/MATLAB_R2016b.app
+
+
+
+ true
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ 10.10.5
+ false
+ true
+ maci64
+ true
+
+
+
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/BoxPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/BoxPanel.m
new file mode 100644
index 0000000..2a330e2
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/BoxPanel.m
@@ -0,0 +1,139 @@
+classdef BoxPanel < uix.BoxPanel
+ %uiextras.BoxPanel Show one element inside a box panel
+ %
+ % obj = uiextras.BoxPanel() creates a box-styled panel object with
+ % automatic management of the contained widget or layout. The
+ % properties available are largely the same as the builtin UIPANEL
+ % object. Where more than one child is added, the currently visible
+ % child is determined using the SelectedChild property.
+ %
+ % obj = uiextras.BoxPanel(param,value,...) also sets one or more
+ % property values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> p = uiextras.BoxPanel( 'Parent', f, 'Title', 'A BoxPanel', 'Padding', 5 );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'r' )
+ %
+ % >> f = figure();
+ % >> p = uiextras.BoxPanel( 'Parent', f, 'Title', 'A BoxPanel', 'Padding', 5 );
+ % >> b = uiextras.HBox( 'Parent', p, 'Spacing', 5 );
+ % >> uicontrol( 'Style', 'listbox', 'Parent', b, 'String', {'Item 1','Item 2'} );
+ % >> uicontrol( 'Style', 'frame', 'Parent', b, 'Background', 'b' );
+ % >> set( b, 'Sizes', [100 -1] );
+ % >> p.FontSize = 12;
+ % >> p.FontWeight = 'bold';
+ % >> p.HelpFcn = @(x,y) disp('Help me!');
+ %
+ % See also: uiextras.Panel
+ % uiextras.TabPanel
+ % uiextras.HBoxFlex
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ IsDocked
+ IsMinimized
+ SelectedChild % deprecated
+ end
+
+ methods
+
+ function obj = BoxPanel( varargin )
+
+ % Call uix constructor
+ obj@uix.BoxPanel( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.IsDocked( obj )
+
+ % Get
+ value = obj.Docked;
+
+ end % get.IsDocked
+
+ function set.IsDocked( obj, value )
+
+ % Get
+ obj.Docked = value;
+
+ end % set.IsDocked
+
+ function value = get.IsMinimized( obj )
+
+ % Get
+ value = obj.Minimized;
+
+ end % get.IsMinimized
+
+ function set.IsMinimized( obj, value )
+
+ % Get
+ obj.Minimized = value;
+
+ end % set.IsMinimized
+
+ function value = get.SelectedChild( obj )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''SelectedChild'' will be removed in a future release.' )
+
+ % Get
+ if isempty( obj.Contents_ )
+ value = [];
+ else
+ value = 1;
+ end
+
+ end % get.SelectedChild
+
+ function set.SelectedChild( ~, ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''SelectedChild'' will be removed in a future release.' )
+
+ end % set.SelectedChild
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/CardPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/CardPanel.m
new file mode 100644
index 0000000..d0024e0
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/CardPanel.m
@@ -0,0 +1,93 @@
+classdef CardPanel < uix.CardPanel
+ %uiextras.CardPanel Show one element (card) from a list
+ %
+ % obj = uiextras.CardPanel() creates a new card panel which allows
+ % selection between the different child objects contained, making the
+ % selected child fill the space available and all other children
+ % invisible. This is commonly used for creating wizards or quick
+ % switching between different views of a single data-set.
+ %
+ % obj = uiextras.CardPanel(param,value,...) also sets one or more
+ % property values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> p = uiextras.CardPanel( 'Parent', f, 'Padding', 5 );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'r' );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'b' );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'g' );
+ % >> p.SelectedChild = 2;
+ %
+ % See also: uiextras.Panel
+ % uiextras.BoxPanel
+ % uiextras.TabPanel
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ SelectedChild
+ end
+
+ methods
+
+ function obj = CardPanel( varargin )
+
+ % Call uix constructor
+ obj@uix.CardPanel( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.SelectedChild( obj )
+
+ % Get
+ value = obj.Selection;
+
+ end % get.SelectedChild
+
+ function set.SelectedChild( obj, value )
+
+ % Set
+ obj.Selection = value;
+
+ end % set.SelectedChild
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Empty.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Empty.m
new file mode 100644
index 0000000..e7851d8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Empty.m
@@ -0,0 +1,30 @@
+function obj = Empty( varargin )
+%uiextras.Empty Create an empty space
+%
+% obj = uiextras.Empty() creates an empty space that can be used to add
+% gaps between elements in layouts.
+%
+% obj = uiextras.Empty(param,value,...) also sets one or more property
+% values.
+%
+% See the documentation for more detail and the list of properties.
+%
+% Examples:
+% >> f = figure();
+% >> box = uiextras.HBox( 'Parent', f );
+% >> uicontrol( 'Parent', box, 'Background', 'r' )
+% >> uiextras.Empty( 'Parent', box )
+% >> uicontrol( 'Parent', box, 'Background', 'b' )
+
+% Copyright 2009-2014 The MathWorks, Inc.
+% $Revision: 1115 $ $Date: 2015-05-28 15:16:22 +0100 (Thu, 28 May 2015) $
+
+% Call uix construction function
+obj = uix.Empty( varargin{:} );
+
+% Auto-parent
+if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+end
+
+end % uiextras.Empty
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Grid.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Grid.m
new file mode 100644
index 0000000..15bb841
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Grid.m
@@ -0,0 +1,143 @@
+classdef Grid < uix.Grid
+ %uiextras.Grid Container with contents arranged in a grid
+ %
+ % obj = uiextras.Grid() creates a new new grid layout with all
+ % properties set to defaults. The number of rows and columns to use
+ % is determined from the number of elements in the RowSizes and
+ % ColumnSizes properties respectively. Child elements are arranged
+ % down column one first, then column two etc. If there are
+ % insufficient columns then a new one is added. The output is a new
+ % layout object that can be used as the parent for other
+ % user-interface components. The output is a new layout object that
+ % can be used as the parent for other user-interface components.
+ %
+ % obj = uiextras.Grid(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> g = uiextras.Grid( 'Parent', f, 'Spacing', 5 );
+ % >> uicontrol( 'Style', 'frame', 'Parent', g, 'Background', 'r' )
+ % >> uicontrol( 'Style', 'frame', 'Parent', g, 'Background', 'b' )
+ % >> uicontrol( 'Style', 'frame', 'Parent', g, 'Background', 'g' )
+ % >> uiextras.Empty( 'Parent', g )
+ % >> uicontrol( 'Style', 'frame', 'Parent', g, 'Background', 'c' )
+ % >> uicontrol( 'Style', 'frame', 'Parent', g, 'Background', 'y' )
+ % >> set( g, 'ColumnSizes', [-1 100 -2], 'RowSizes', [-1 100] );
+ %
+ % See also: uiextras.GridFlex
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 1077 $ $Date: 2015-03-19 16:44:14 +0000 (Thu, 19 Mar 2015) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ RowSizes % heights of contents, in pixels and/or weights
+ MinimumRowSizes % minimum heights of contents, in pixels
+ ColumnSizes % widths of contents, in pixels and/or weights
+ MinimumColumnSizes % minimum widths of contents, in pixels
+ end
+
+ methods
+
+ function obj = Grid( varargin )
+
+ % Call uix constructor
+ obj@uix.Grid( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.RowSizes( obj )
+
+ % Get
+ value = obj.Heights;
+
+ end % get.RowSizes
+
+ function set.RowSizes( obj, value )
+
+ % Set
+ obj.Heights = value;
+
+ end % set.RowSizes
+
+ function value = get.MinimumRowSizes( obj )
+
+ % Get
+ value = obj.MinimumHeights;
+
+ end % get.MinimumRowSizes
+
+ function set.MinimumRowSizes( obj, value )
+
+ % Set
+ obj.MinimumHeights = value;
+
+ end % set.MinimumRowSizes
+
+ function value = get.ColumnSizes( obj )
+
+ % Get
+ value = obj.Widths;
+
+ end % get.ColumnSizes
+
+ function set.ColumnSizes( obj, value )
+
+ % Get
+ obj.Widths = value;
+
+ end % set.ColumnSizes
+
+ function value = get.MinimumColumnSizes( obj )
+
+ % Get
+ value = obj.MinimumWidths;
+
+ end % get.MinimumColumnSizes
+
+ function set.MinimumColumnSizes( obj, value )
+
+ % Get
+ obj.MinimumWidths = value;
+
+ end % set.MinimumColumnSizes
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/GridFlex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/GridFlex.m
new file mode 100644
index 0000000..62617cd
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/GridFlex.m
@@ -0,0 +1,161 @@
+classdef GridFlex < uix.GridFlex
+ %uiextras.GridFlex Container with contents arranged in a resizable grid
+ %
+ % obj = uiextras.GridFlex() creates a new new grid layout with
+ % draggable dividers between elements. The number of rows and columns
+ % to use is determined from the number of elements in the RowSizes
+ % and ColumnSizes properties respectively. Child elements are
+ % arranged down column one first, then column two etc. If there are
+ % insufficient columns then a new one is added. The output is a new
+ % layout object that can be used as the parent for other
+ % user-interface components. The output is a new layout object that
+ % can be used as the parent for other user-interface components.
+ %
+ % obj = uiextras.GridFlex(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> g = uiextras.GridFlex( 'Parent', f, 'Spacing', 5 );
+ % >> uicontrol( 'Parent', g, 'Background', 'r' )
+ % >> uicontrol( 'Parent', g, 'Background', 'b' )
+ % >> uicontrol( 'Parent', g, 'Background', 'g' )
+ % >> uiextras.Empty( 'Parent', g )
+ % >> uicontrol( 'Parent', g, 'Background', 'c' )
+ % >> uicontrol( 'Parent', g, 'Background', 'y' )
+ % >> set( g, 'ColumnSizes', [-1 100 -2], 'RowSizes', [-1 -2] );
+ %
+ % See also: uiextras.Grid
+ % uiextras.HBoxFlex
+ % uiextras.VBoxFlex
+ % uiextras.Empty
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 1062 $ $Date: 2014-10-30 13:30:17 +0000 (Thu, 30 Oct 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ RowSizes % heights of contents, in pixels and/or weights
+ MinimumRowSizes % minimum heights of contents, in pixels
+ ColumnSizes % widths of contents, in pixels and/or weights
+ MinimumColumnSizes % minimum widths of contents, in pixels
+ ShowMarkings
+ end
+
+ methods
+
+ function obj = GridFlex( varargin )
+
+ % Call uix constructor
+ obj@uix.GridFlex( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.RowSizes( obj )
+
+ % Get
+ value = obj.Heights;
+
+ end % get.RowSizes
+
+ function set.RowSizes( obj, value )
+
+ % Set
+ obj.Heights = value;
+
+ end % set.RowSizes
+
+ function value = get.MinimumRowSizes( obj )
+
+ % Get
+ value = obj.MinimumHeights;
+
+ end % get.MinimumRowSizes
+
+ function set.MinimumRowSizes( obj, value )
+
+ % Set
+ obj.MinimumHeights = value;
+
+ end % set.MinimumRowSizes
+
+ function value = get.ColumnSizes( obj )
+
+ % Get
+ value = obj.Widths;
+
+ end % get.ColumnSizes
+
+ function set.ColumnSizes( obj, value )
+
+ % Get
+ obj.Widths = value;
+
+ end % set.ColumnSizes
+
+ function value = get.MinimumColumnSizes( obj )
+
+ % Get
+ value = obj.MinimumWidths;
+
+ end % get.MinimumColumnSizes
+
+ function set.MinimumColumnSizes( obj, value )
+
+ % Get
+ obj.MinimumWidths = value;
+
+ end % set.MinimumColumnSizes
+
+ function value = get.ShowMarkings( obj )
+
+ % Get
+ value = obj.DividerMarkings;
+
+ end % get.ShowMarkings
+
+ function set.ShowMarkings( obj, value )
+
+ % Set
+ obj.DividerMarkings = value;
+
+ end % set.ShowMarkings
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HBox.m
new file mode 100644
index 0000000..26a0d78
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HBox.m
@@ -0,0 +1,114 @@
+classdef HBox < uix.HBox
+ %uiextras.HBox Arrange elements in a single horizontal row
+ %
+ % obj = uiextras.HBox() creates a new horizontal box layout with
+ % all parameters set to defaults. The output is a new layout object
+ % that can be used as the parent for other user-interface components.
+ %
+ % obj = uiextras.HBox(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> b = uiextras.HBox( 'Parent', f );
+ % >> uicontrol( 'Parent', b, 'Background', 'r' )
+ % >> uicontrol( 'Parent', b, 'Background', 'b' )
+ % >> uicontrol( 'Parent', b, 'Background', 'g' )
+ % >> set( b, 'Sizes', [-1 100 -2], 'Spacing', 5 );
+ %
+ % >> f = figure();
+ % >> b1 = uiextras.VBox( 'Parent', f );
+ % >> b2 = uiextras.HBox( 'Parent', b1, 'Padding', 5, 'Spacing', 5 );
+ % >> uicontrol( 'Style', 'frame', 'Parent', b1, 'Background', 'r' )
+ % >> uicontrol( 'Parent', b2, 'String', 'Button1' )
+ % >> uicontrol( 'Parent', b2, 'String', 'Button2' )
+ % >> set( b1, 'Sizes', [30 -1] );
+ %
+ % See also: uiextras.VBox
+ % uiextras.HBoxFlex
+ % uiextras.Grid
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 1077 $ $Date: 2015-03-19 16:44:14 +0000 (Thu, 19 Mar 2015) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ Sizes
+ MinimumSizes
+ end
+
+ methods
+
+ function obj = HBox( varargin )
+
+ % Call uix constructor
+ obj@uix.HBox( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.Sizes( obj )
+
+ % Get
+ value = transpose( obj.Widths );
+
+ end % get.Sizes
+
+ function set.Sizes( obj, value )
+
+ % Set
+ obj.Widths = value;
+
+ end % set.Sizes
+
+ function value = get.MinimumSizes( obj )
+
+ % Get
+ value = transpose( obj.MinimumWidths );
+
+ end % get.MinimumSizes
+
+ function set.MinimumSizes( obj, value )
+
+ % Get
+ obj.MinimumWidths = value;
+
+ end % set.MinimumSizes
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HBoxFlex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HBoxFlex.m
new file mode 100644
index 0000000..2038c85
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HBoxFlex.m
@@ -0,0 +1,123 @@
+classdef HBoxFlex < uix.HBoxFlex
+ %uiextras.HBoxFlex A dynamically resizable horizontal layout
+ %
+ % obj = uiextras.HBoxFlex() creates a new dynamically resizable
+ % horizontal box layout with all parameters set to defaults. The
+ % output is a new layout object that can be used as the parent for
+ % other user-interface components.
+ %
+ % obj = uiextras.HBoxFlex(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure( 'Name', 'uiextras.HBoxFlex example' );
+ % >> b = uiextras.HBoxFlex( 'Parent', f );
+ % >> uicontrol( 'Parent', b, 'Background', 'r' )
+ % >> uicontrol( 'Parent', b, 'Background', 'b' )
+ % >> uicontrol( 'Parent', b, 'Background', 'g' )
+ % >> uicontrol( 'Parent', b, 'Background', 'y' )
+ % >> set( b, 'Sizes', [-1 100 -2 -1], 'Spacing', 5 );
+ %
+ % See also: uiextras.VBoxFlex
+ % uiextras.HBox
+ % uiextras.Grid
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ Sizes
+ MinimumSizes
+ ShowMarkings
+ end
+
+ methods
+
+ function obj = HBoxFlex( varargin )
+
+ % Call uix constructor
+ obj@uix.HBoxFlex( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.Sizes( obj )
+
+ % Get
+ value = transpose( obj.Widths );
+
+ end % get.Sizes
+
+ function set.Sizes( obj, value )
+
+ % Set
+ obj.Widths = value;
+
+ end % set.Sizes
+
+ function value = get.MinimumSizes( obj )
+
+ % Get
+ value = transpose( obj.MinimumWidths );
+
+ end % get.MinimumSizes
+
+ function set.MinimumSizes( obj, value )
+
+ % Get
+ obj.MinimumWidths = value;
+
+ end % set.MinimumSizes
+
+ function value = get.ShowMarkings( obj )
+
+ % Get
+ value = obj.DividerMarkings;
+
+ end % get.ShowMarkings
+
+ function set.ShowMarkings( obj, value )
+
+ % Set
+ obj.DividerMarkings = value;
+
+ end % set.ShowMarkings
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HButtonBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HButtonBox.m
new file mode 100644
index 0000000..87ab447
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/HButtonBox.m
@@ -0,0 +1,46 @@
+classdef HButtonBox < uix.HButtonBox
+ %uiextras.HButtonBox Arrange buttons horizontally in a single row
+ %
+ % obj = uiextras.HButtonBox() is a type of HBox specialised for
+ % arranging a row of buttons, check-boxes or similar graphical
+ % elements. All buttons are given equal size and by default are
+ % centered in the drawing area. The justification can be changed as
+ % required.
+ %
+ % obj = uiextras.HButtonBox(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> b = uiextras.HButtonBox( 'Parent', f );
+ % >> uicontrol( 'Parent', b, 'String', 'One' );
+ % >> uicontrol( 'Parent', b, 'String', 'Two' );
+ % >> uicontrol( 'Parent', b, 'String', 'Three' );
+ % >> set( b, 'ButtonSize', [130 35], 'Spacing', 5 );
+ %
+ % See also: uiextras.VButtonBox
+ % uiextras.HBox
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 1077 $ $Date: 2015-03-19 16:44:14 +0000 (Thu, 19 Mar 2015) $
+
+ methods
+
+ function obj = HButtonBox( varargin )
+ %uiextras.HButtonBox Create a new horizontal button box
+
+ % Call uix constructor
+ obj@uix.HButtonBox( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Panel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Panel.m
new file mode 100644
index 0000000..80069b8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/Panel.m
@@ -0,0 +1,106 @@
+classdef Panel < uix.Panel
+ %uiextras.Panel Show one element inside a panel
+ %
+ % obj = uiextras.Panel() creates a standard UIPANEL object but with
+ % automatic management of the contained widget or layout. The
+ % properties available are largely the same as the builtin UIPANEL
+ % object. Where more than one child is added, the currently visible
+ % child is determined using the SelectedChild property.
+ %
+ % obj = uiextras.Panel(param,value,...) also sets one or more
+ % property values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> p = uiextras.Panel( 'Parent', f, 'Title', 'A Panel', 'Padding', 5 );
+ % >> uicontrol( 'Parent', p, 'Background', 'r' )
+ %
+ % >> f = figure();
+ % >> p = uiextras.Panel( 'Parent', f, 'Title', 'A Panel', 'Padding', 5 );
+ % >> b = uiextras.HBox( 'Parent', p, 'Spacing', 5 );
+ % >> uicontrol( 'Style', 'listbox', 'Parent', b, 'String', {'Item 1','Item 2'} );
+ % >> uicontrol( 'Parent', b, 'Background', 'b' );
+ % >> set( b, 'Sizes', [100 -1] );
+ %
+ % See also: uipanel
+ % uiextras.BoxPanel
+ % uiextras.HBox
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ SelectedChild
+ end
+
+ methods
+
+ function obj = Panel( varargin )
+
+ % Call uix constructor
+ obj@uix.Panel( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.SelectedChild( obj )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''SelectedChild'' will be removed in a future release.' )
+
+ % Get
+ if isempty( obj.Contents_ )
+ value = [];
+ else
+ value = 1;
+ end
+
+ end % get.SelectedChild
+
+ function set.SelectedChild( ~, ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''SelectedChild'' will be removed in a future release.' )
+
+ end % set.SelectedChild
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/TabPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/TabPanel.m
new file mode 100644
index 0000000..0c30414
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/TabPanel.m
@@ -0,0 +1,224 @@
+classdef TabPanel < uix.TabPanel
+ %TabPanel Show one element inside a tabbed panel
+ %
+ % obj = uiextras.TabPanel() creates a panel with tabs along one edge
+ % to allow selection between the different child objects contained.
+ %
+ % obj = uiextras.TabPanel(param,value,...) also sets one or more
+ % property values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> p = uiextras.TabPanel( 'Parent', f, 'Padding', 5 );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'r' );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'b' );
+ % >> uicontrol( 'Style', 'frame', 'Parent', p, 'Background', 'g' );
+ % >> p.TabNames = {'Red', 'Blue', 'Green'};
+ % >> p.SelectedChild = 2;
+ %
+ % See also: uiextras.Panel
+ % uiextras.BoxPanel
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Callback
+ end
+
+ properties( Access = private )
+ Callback_ = '' % backing for Callback
+ end
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ SelectedChild
+ TabEnable
+ TabNames
+ TabPosition
+ TabSize
+ end
+
+ properties( Access = private )
+ SelectionChangedListener % listener
+ end
+
+ methods
+
+ function obj = TabPanel( varargin )
+
+ % Call uix constructor
+ obj@uix.TabPanel( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ % Create listeners
+ selectionChangedListener = event.listener( obj, ...
+ 'SelectionChanged', @obj.onSelectionChanged );
+
+ % Store properties
+ obj.SelectionChangedListener = selectionChangedListener;
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.Callback( obj )
+
+ % Get
+ value = obj.Callback_;
+
+ end % get.Callback
+
+ function set.Callback( obj, value )
+
+ % Check
+ if ischar( value ) % string
+ % OK
+ elseif isa( value, 'function_handle' ) && ...
+ isequal( size( value ), [1 1] ) % function handle
+ % OK
+ elseif iscell( value ) && ndims( value ) == 2 && ...
+ size( value, 1 ) == 1 && size( value, 2 ) > 0 && ...
+ isa( value{1}, 'function_handle' ) && ...
+ isequal( size( value{1} ), [1 1] ) %#ok % cell callback
+ % OK
+ else
+ error( 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Callback'' must be a valid callback.' )
+ end
+
+ % Set
+ obj.Callback_ = value;
+
+ end % set.Callback
+
+ function value = get.SelectedChild( obj )
+
+ % Get
+ value = obj.Selection;
+
+ end % get.SelectedChild
+
+ function set.SelectedChild( obj, value )
+
+ % Set
+ obj.Selection = value;
+
+ end % set.SelectedChild
+
+ function value = get.TabEnable( obj )
+
+ % Get
+ value = transpose( obj.TabEnables );
+
+ end % get.TabEnable
+
+ function set.TabEnable( obj, value )
+
+ % Set
+ obj.TabEnables = value;
+
+ end % set.TabEnable
+
+ function value = get.TabNames( obj )
+
+ % Get
+ value = transpose( obj.TabTitles );
+
+ end % get.TabNames
+
+ function set.TabNames( obj, value )
+
+ % Set
+ obj.TabTitles = value;
+
+ end % set.TabNames
+
+ function value = get.TabPosition( obj )
+
+ % Get
+ value = obj.TabLocation;
+
+ end % get.TabPosition
+
+ function set.TabPosition( obj, value )
+
+ % Set
+ obj.TabLocation = value;
+
+ end % set.TabPosition
+
+ function value = get.TabSize( obj )
+
+ % Get
+ value = obj.TabWidth;
+
+ end % get.TabSize
+
+ function set.TabSize( obj, value )
+
+ % Set
+ obj.TabWidth = value;
+
+ end % set.TabSize
+
+ end % accessors
+
+ methods( Access = private )
+
+ function onSelectionChanged( obj, source, eventData )
+
+ % Create legacy event data structure
+ oldEventData = struct( 'Source', eventData.Source, ...
+ 'PreviousChild', eventData.OldValue, ...
+ 'SelectedChild', eventData.NewValue );
+
+ % Call callback
+ callback = obj.Callback_;
+ if ischar( callback ) && isequal( callback, '' )
+ % do nothing
+ elseif ischar( callback )
+ feval( callback, source, oldEventData )
+ elseif isa( callback, 'function_handle' )
+ callback( source, oldEventData )
+ elseif iscell( callback )
+ feval( callback{1}, source, oldEventData, callback{2:end} )
+ end
+
+ end % onSelectionChanged
+
+ end % event handlers
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VBox.m
new file mode 100644
index 0000000..4e90ab7
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VBox.m
@@ -0,0 +1,114 @@
+classdef VBox < uix.VBox
+ %uiextras.VBox Arrange elements vertically in a single column
+ %
+ % obj = uiextras.VBox() creates a new vertical box layout with all
+ % parameters set to defaults. The output is a new layout object that
+ % can be used as the parent for other user-interface components.
+ %
+ % obj = uiextras.VBox(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> b = uiextras.VBox( 'Parent', f );
+ % >> uicontrol( 'Parent', b, 'Background', 'r' )
+ % >> uicontrol( 'Parent', b, 'Background', 'b' )
+ % >> uicontrol( 'Parent', b, 'Background', 'g' )
+ % >> set( b, 'Sizes', [-1 100 -2], 'Spacing', 5 );
+ %
+ % >> f = figure();
+ % >> b1 = uiextras.VBox( 'Parent', f );
+ % >> b2 = uiextras.HBox( 'Parent', b1, 'Padding', 5, 'Spacing', 5 );
+ % >> uicontrol( 'Style', 'frame', 'Parent', b1, 'Background', 'r' )
+ % >> uicontrol( 'Parent', b2, 'String', 'Button1' )
+ % >> uicontrol( 'Parent', b2, 'String', 'Button2' )
+ % >> set( b1, 'Sizes', [30 -1] );
+ %
+ % See also: uiextras.HBox
+ % uiextras.VBoxFlex
+ % uiextras.Grid
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 1077 $ $Date: 2015-03-19 16:44:14 +0000 (Thu, 19 Mar 2015) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ Sizes
+ MinimumSizes
+ end
+
+ methods
+
+ function obj = VBox( varargin )
+
+ % Call uix constructor
+ obj@uix.VBox( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.Sizes( obj )
+
+ % Get
+ value = transpose( obj.Heights );
+
+ end % get.Sizes
+
+ function set.Sizes( obj, value )
+
+ % Set
+ obj.Heights = value;
+
+ end % set.Sizes
+
+ function value = get.MinimumSizes( obj )
+
+ % Get
+ value = transpose( obj.MinimumHeights );
+
+ end % get.MinimumSizes
+
+ function set.MinimumSizes( obj, value )
+
+ % Get
+ obj.MinimumHeights = value;
+
+ end % set.MinimumSizes
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VBoxFlex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VBoxFlex.m
new file mode 100644
index 0000000..01a3f46
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VBoxFlex.m
@@ -0,0 +1,123 @@
+classdef VBoxFlex < uix.VBoxFlex
+ %uiextras.VBoxFlex A dynamically resizable vertical layout
+ %
+ % obj = uiextras.VBoxFlex() creates a new dynamically resizable
+ % vertical box layout with all parameters set to defaults. The output
+ % is a new layout object that can be used as the parent for other
+ % user-interface components.
+ %
+ % obj = uiextras.VBoxFlex(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure( 'Name', 'uiextras.VBoxFlex example' );
+ % >> b = uiextras.VBoxFlex( 'Parent', f );
+ % >> uicontrol( 'Parent', b, 'Background', 'r' )
+ % >> uicontrol( 'Parent', b, 'Background', 'b' )
+ % >> uicontrol( 'Parent', b, 'Background', 'g' )
+ % >> uicontrol( 'Parent', b, 'Background', 'y' )
+ % >> set( b, 'Sizes', [-1 100 -2 -1], 'Spacing', 5 );
+ %
+ % See also: uiextras.HBoxFlex
+ % uiextras.VBox
+ % uiextras.Grid
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+ properties( Hidden, Access = public, Dependent )
+ Enable % deprecated
+ Sizes
+ MinimumSizes
+ ShowMarkings
+ end
+
+ methods
+
+ function obj = VBoxFlex( varargin )
+
+ % Call uix constructor
+ obj@uix.VBoxFlex( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Enable( ~ )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ % Return
+ value = 'on';
+
+ end % get.Enable
+
+ function set.Enable( ~, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uiextras:InvalidPropertyValue', ...
+ 'Property ''Enable'' must be ''on'' or ''off''.' )
+
+ % Warn
+ % warning( 'uiextras:Deprecated', ...
+ % 'Property ''Enable'' will be removed in a future release.' )
+
+ end % set.Enable
+
+ function value = get.Sizes( obj )
+
+ % Get
+ value = transpose( obj.Heights );
+
+ end % get.Sizes
+
+ function set.Sizes( obj, value )
+
+ % Set
+ obj.Heights = value;
+
+ end % set.Sizes
+
+ function value = get.MinimumSizes( obj )
+
+ % Get
+ value = transpose( obj.MinimumHeights );
+
+ end % get.MinimumSizes
+
+ function set.MinimumSizes( obj, value )
+
+ % Get
+ obj.MinimumHeights = value;
+
+ end % set.MinimumSizes
+
+ function value = get.ShowMarkings( obj )
+
+ % Get
+ value = obj.DividerMarkings;
+
+ end % get.ShowMarkings
+
+ function set.ShowMarkings( obj, value )
+
+ % Set
+ obj.DividerMarkings = value;
+
+ end % set.ShowMarkings
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VButtonBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VButtonBox.m
new file mode 100644
index 0000000..40618cd
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/VButtonBox.m
@@ -0,0 +1,46 @@
+classdef VButtonBox < uix.VButtonBox
+ %uiextras.VButtonBox Arrange buttons vertically in a single column
+ %
+ % obj = uiextras.VButtonBox() is a type of VBox specialised for
+ % arranging a column of buttons, check-boxes or similar graphical
+ % elements. All buttons are given equal size and by default are
+ % centered in the drawing area. The justification can be changed as
+ % required.
+ %
+ % obj = uiextras.VButtonBox(param,value,...) also sets one or more
+ % parameter values.
+ %
+ % See the documentation for more detail and the list of properties.
+ %
+ % Examples:
+ % >> f = figure();
+ % >> b = uiextras.VButtonBox( 'Parent', f );
+ % >> uicontrol( 'Parent', b, 'String', 'One' );
+ % >> uicontrol( 'Parent', b, 'String', 'Two' );
+ % >> uicontrol( 'Parent', b, 'String', 'Three' );
+ % >> set( b, 'ButtonSize', [130 35], 'Spacing', 5 );
+ %
+ % See also: uiextras.HButtonBox
+ % uiextras.VBox
+
+ % Copyright 2009-2014 The MathWorks, Inc.
+ % $Revision: 1077 $ $Date: 2015-03-19 16:44:14 +0000 (Thu, 19 Mar 2015) $
+
+ methods
+
+ function obj = VButtonBox( varargin )
+ %uiextras.VButtonBox Create a new horizontal button box
+
+ % Call uix constructor
+ obj@uix.VButtonBox( varargin{:} )
+
+ % Auto-parent
+ if ~ismember( 'Parent', varargin(1:2:end) )
+ obj.Parent = gcf();
+ end
+
+ end % constructor
+
+ end % structor
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/get.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/get.m
new file mode 100644
index 0000000..03f9f98
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/get.m
@@ -0,0 +1,15 @@
+function varargout = get( ~, ~ ) %#ok
+%uiextras.get Retrieve a default property value from a parent object
+%
+% This functionality has been removed.
+
+% Copyright 2009-2014 The MathWorks, Inc.
+% $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+% Check inputs
+narginchk( 2, 2 )
+
+% Error
+error( 'uiextras:Deprecated', 'uiextras.get has been removed.' )
+
+end % uiextras.get
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/set.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/set.m
new file mode 100644
index 0000000..353a779
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/set.m
@@ -0,0 +1,15 @@
+function set( ~, ~, ~ )
+%uiextras.set Store a default property value in a parent object
+%
+% This functionality has been removed.
+
+% Copyright 2009-2014 The MathWorks, Inc.
+% $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+% Check inputs
+narginchk( 3, 3 )
+
+% Warn
+warning( 'uiextras:Deprecated', 'uiextras.set has been removed.' )
+
+end % uiextras.set
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/unset.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/unset.m
new file mode 100644
index 0000000..a8c31d8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uiextras/unset.m
@@ -0,0 +1,15 @@
+function unset( ~, ~, ~ )
+%uiextras.unset Clear a default property value from a parent object
+%
+% This functionality has been removed.
+
+% Copyright 2009-2014 The MathWorks, Inc.
+% $Revision: 979 $ $Date: 2014-09-28 14:26:12 -0400 (Sun, 28 Sep 2014) $
+
+% Check inputs
+narginchk( 2, 2 )
+
+% Warn
+warning( 'uiextras:Deprecated', 'uiextras.unset has been removed.' )
+
+end % uiextras.unset
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Container.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Container.m
new file mode 100644
index 0000000..b721984
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Container.m
@@ -0,0 +1,297 @@
+classdef Container < handle
+ %uix.mixin.Container Container mixin
+ %
+ % uix.mixin.Container is a mixin class used by containers to provide
+ % various properties and template methods.
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1358 $ $Date: 2016-09-14 11:34:17 +0100 (Wed, 14 Sep 2016) $
+
+ properties( Dependent, Access = public )
+ Contents % contents in layout order
+ end
+
+ properties( Access = public, Dependent, AbortSet )
+ Padding % space around contents, in pixels
+ end
+
+ properties( Access = protected )
+ Contents_ = gobjects( [0 1] ) % backing for Contents
+ Padding_ = 0 % backing for Padding
+ end
+
+ properties( Dependent, Access = protected )
+ Dirty % needs redraw
+ end
+
+ properties( Access = private )
+ Dirty_ = false % backing for Dirty
+ FigureObserver % observer
+ FigureListener % listener
+ ChildObserver % observer
+ ChildAddedListener % listener
+ ChildRemovedListener % listener
+ SizeChangedListener % listener
+ ActivePositionPropertyListeners = cell( [0 1] ) % listeners
+ end
+
+ methods
+
+ function obj = Container()
+ %uix.mixin.Container Initialize
+ %
+ % c@uix.mixin.Container() initializes the container c.
+
+ % Create observers and listeners
+ figureObserver = uix.FigureObserver( obj );
+ figureListener = event.listener( figureObserver, ...
+ 'FigureChanged', @obj.onFigureChanged );
+ childObserver = uix.ChildObserver( obj );
+ childAddedListener = event.listener( ...
+ childObserver, 'ChildAdded', @obj.onChildAdded );
+ childRemovedListener = event.listener( ...
+ childObserver, 'ChildRemoved', @obj.onChildRemoved );
+ sizeChangedListener = event.listener( ...
+ obj, 'SizeChanged', @obj.onSizeChanged );
+
+ % Store observers and listeners
+ obj.FigureObserver = figureObserver;
+ obj.FigureListener = figureListener;
+ obj.ChildObserver = childObserver;
+ obj.ChildAddedListener = childAddedListener;
+ obj.ChildRemovedListener = childRemovedListener;
+ obj.SizeChangedListener = sizeChangedListener;
+
+ % Track usage
+ obj.track()
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Contents( obj )
+
+ value = obj.Contents_;
+
+ end % get.Contents
+
+ function set.Contents( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ [tf, indices] = ismember( value, obj.Contents_ );
+ assert( isequal( size( obj.Contents_ ), size( value ) ) && ...
+ numel( value ) == numel( unique( value ) ) && all( tf ), ...
+ 'uix:InvalidOperation', ...
+ 'Property ''Contents'' may only be set to a permutation of itself.' )
+
+ % Call reorder
+ obj.reorder( indices )
+
+ end % set.Contents
+
+ function value = get.Padding( obj )
+
+ value = obj.Padding_;
+
+ end % get.Padding
+
+ function set.Padding( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ) && isscalar( value ) && ...
+ isreal( value ) && ~isinf( value ) && ...
+ ~isnan( value ) && value >= 0, ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''Padding'' must be a non-negative scalar.' )
+
+ % Set
+ obj.Padding_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Padding
+
+ function value = get.Dirty( obj )
+
+ value = obj.Dirty_;
+
+ end % get.Dirty
+
+ function set.Dirty( obj, value )
+
+ if value
+ if obj.isDrawable() % drawable
+ obj.redraw() % redraw now
+ else % not drawable
+ obj.Dirty_ = true; % flag for future redraw
+ end
+ end
+
+ end % set.Dirty
+
+ end % accessors
+
+ methods( Access = private, Sealed )
+
+ function onFigureChanged( obj, ~, eventData )
+ %onFigureChanged Event handler
+
+ % Call template method
+ obj.reparent( eventData.OldFigure, eventData.NewFigure )
+
+ % Redraw if possible and if dirty
+ if obj.Dirty_ && obj.isDrawable()
+ obj.redraw()
+ obj.Dirty_ = false;
+ end
+
+ end % onFigureChanged
+
+ function onChildAdded( obj, ~, eventData )
+ %onChildAdded Event handler
+
+ % Call template method
+ obj.addChild( eventData.Child )
+
+ end % onChildAdded
+
+ function onChildRemoved( obj, ~, eventData )
+ %onChildRemoved Event handler
+
+ % Do nothing if container is being deleted
+ if strcmp( obj.BeingDeleted, 'on' ), return, end
+
+ % Call template method
+ obj.removeChild( eventData.Child )
+
+ end % onChildRemoved
+
+ function onSizeChanged( obj, ~, ~ )
+ %onSizeChanged Event handler
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onSizeChanged
+
+ function onActivePositionPropertyChanged( obj, ~, ~ )
+ %onActivePositionPropertyChanged Event handler
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onActivePositionPropertyChanged
+
+ end % event handlers
+
+ methods( Abstract, Access = protected )
+
+ redraw( obj )
+
+ end % abstract template methods
+
+ methods( Access = protected )
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % c.addChild(d) adds the child d to the container c.
+
+ % Add to contents
+ obj.Contents_(end+1,:) = child;
+
+ % Add listeners
+ if isa( child, 'matlab.graphics.axis.Axes' )
+ obj.ActivePositionPropertyListeners{end+1,:} = ...
+ event.proplistener( child, ...
+ findprop( child, 'ActivePositionProperty' ), ...
+ 'PostSet', @obj.onActivePositionPropertyChanged );
+ else
+ obj.ActivePositionPropertyListeners{end+1,:} = [];
+ end
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % c.removeChild(d) removes the child d from the container c.
+
+ % Remove from contents
+ contents = obj.Contents_;
+ tf = contents == child;
+ obj.Contents_(tf,:) = [];
+
+ % Remove listeners
+ obj.ActivePositionPropertyListeners(tf,:) = [];
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % removeChild
+
+ function reparent( obj, oldFigure, newFigure ) %#ok
+ %reparent Reparent container
+ %
+ % c.reparent(a,b) reparents the container c from the figure a
+ % to the figure b.
+
+ end % reparent
+
+ function reorder( obj, indices )
+ %reorder Reorder contents
+ %
+ % c.reorder(i) reorders the container contents using indices
+ % i, c.Contents = c.Contents(i).
+
+ % Reorder contents
+ obj.Contents_ = obj.Contents_(indices,:);
+
+ % Reorder listeners
+ obj.ActivePositionPropertyListeners = ...
+ obj.ActivePositionPropertyListeners(indices,:);
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % reorder
+
+ function tf = isDrawable( obj )
+ %isDrawable Test for drawability
+ %
+ % c.isDrawable() is true if the container c is drawable, and
+ % false otherwise. To be drawable, a container must be
+ % rooted.
+
+ tf = ~isempty( obj.FigureObserver.Figure );
+
+ end % isDrawable
+
+ function track( obj )
+ %track Track usage
+
+ persistent TRACKED % single shot
+ if isempty( TRACKED )
+ v = ver( 'layout' );
+ try %#ok
+ uix.tracking( 'UA-82270656-2', v(1).Version, class( obj ) )
+ end
+ TRACKED = true;
+ end
+
+ end % track
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Flex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Flex.m
new file mode 100644
index 0000000..6085aa5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Flex.m
@@ -0,0 +1,71 @@
+classdef Flex < handle
+ %uix.mixin.Flex Flex mixin
+ %
+ % uix.mixin.Flex is a mixin class used by flex containers to provide
+ % various properties and helper methods.
+
+ % Copyright 2016 The MathWorks, Inc.
+ % $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+ properties( GetAccess = protected, SetAccess = private )
+ Pointer = 'unset' % mouse pointer
+ end
+
+ properties( Access = private )
+ Figure = gobjects( 0 ); % mouse pointer figure
+ Token = -1 % mouse pointer token
+ end
+
+ methods
+
+ function delete( obj )
+ %delete Destructor
+
+ % Clean up
+ if ~strcmp( obj.Pointer, 'unset' )
+ obj.unsetPointer()
+ end
+
+ end % destructor
+
+ end % structors
+
+ methods( Access = protected )
+
+ function setPointer( obj, figure, pointer )
+ %setPointer Set pointer
+ %
+ % c.setPointer(f,p) sets the pointer for the figure f to p.
+
+ % If set, unset
+ if obj.Token ~= -1
+ obj.unsetPointer()
+ end
+
+ % Set
+ obj.Token = uix.PointerManager.setPointer( figure, pointer );
+ obj.Figure = figure;
+ obj.Pointer = pointer;
+
+ end % setPointer
+
+ function unsetPointer( obj )
+ %unsetPointer Unset pointer
+ %
+ % c.unsetPointer() undoes the previous pointer set.
+
+ % Check
+ assert( obj.Token ~= -1, 'uix:InvalidOperation', ...
+ 'Pointer is already unset.' )
+
+ % Unset
+ uix.PointerManager.unsetPointer( obj.Figure, obj.Token );
+ obj.Figure = gobjects( 0 );
+ obj.Pointer = 'unset';
+ obj.Token = -1;
+
+ end % unsetPointer
+
+ end % helper methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Panel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Panel.m
new file mode 100644
index 0000000..f9031a9
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/+mixin/Panel.m
@@ -0,0 +1,188 @@
+classdef Panel < uix.mixin.Container
+ %uix.mixin.Panel Panel mixin
+ %
+ % uix.mixin.Panel is a mixin class used by panels to provide various
+ % properties and template methods.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ Selection % selected contents
+ end
+
+ properties( Access = protected )
+ Selection_ = 0 % backing for Selection
+ end
+
+ properties( Access = protected )
+ G1218142 = false % bug flag
+ end
+
+ events( NotifyAccess = protected )
+ SelectionChanged % selection changed
+ end
+
+ methods
+
+ function value = get.Selection( obj )
+
+ value = obj.Selection_;
+
+ end % get.Selection
+
+ function set.Selection( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Selection'' must be of type double.' )
+ assert( isequal( size( value ), [1 1] ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''Selection'' must be scalar.' )
+ assert( isreal( value ) && rem( value, 1 ) == 0, ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''Selection'' must be an integer.' )
+ n = numel( obj.Contents_ );
+ if n == 0
+ assert( value == 0, 'uix:InvalidPropertyValue', ...
+ 'Property ''Selection'' must be 0 for a container with no children.' )
+ else
+ assert( value >= 1 && value <= n, 'uix:InvalidPropertyValue', ...
+ 'Property ''Selection'' must be between 1 and the number of children.' )
+ end
+
+ % Set
+ oldSelection = obj.Selection_;
+ newSelection = value;
+ obj.Selection_ = newSelection;
+
+ % Show selected child
+ obj.showSelection()
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ % Raise event
+ notify( obj, 'SelectionChanged', ...
+ uix.SelectionData( oldSelection, newSelection ) )
+
+ end % set.Selection
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function addChild( obj, child )
+
+ % Check for bug
+ if verLessThan( 'MATLAB', '8.5' ) && strcmp( child.Visible, 'off' )
+ obj.G1218142 = true;
+ end
+
+ % Select new content
+ oldSelection = obj.Selection_;
+ newSelection = numel( obj.Contents_ ) + 1;
+ obj.Selection_ = newSelection;
+
+ % Call superclass method
+ addChild@uix.mixin.Container( obj, child )
+
+ % Show selected child
+ obj.showSelection()
+
+ % Notify selection change
+ obj.notify( 'SelectionChanged', ...
+ uix.SelectionData( oldSelection, newSelection ) )
+
+ end % addChild
+
+ function removeChild( obj, child )
+
+ % Adjust selection if required
+ contents = obj.Contents_;
+ index = find( contents == child );
+ oldSelection = obj.Selection_;
+ if index < oldSelection
+ newSelection = oldSelection - 1;
+ elseif index == oldSelection
+ newSelection = min( oldSelection, numel( contents ) - 1 );
+ else % index > oldSelection
+ newSelection = oldSelection;
+ end
+ obj.Selection_ = newSelection;
+
+ % Call superclass method
+ removeChild@uix.mixin.Container( obj, child )
+
+ % Show selected child
+ obj.showSelection()
+
+ % Notify selection change
+ if oldSelection ~= newSelection
+ obj.notify( 'SelectionChanged', ...
+ uix.SelectionData( oldSelection, newSelection ) )
+ end
+
+ end % removeChild
+
+ function reorder( obj, indices )
+ %reorder Reorder contents
+ %
+ % c.reorder(i) reorders the container contents using indices
+ % i, c.Contents = c.Contents(i).
+
+ % Reorder
+ selection = obj.Selection_;
+ if selection ~= 0
+ obj.Selection_ = find( indices == selection );
+ end
+
+ % Call superclass method
+ reorder@uix.mixin.Container( obj, indices )
+
+ end % reorder
+
+ function showSelection( obj )
+ %showSelection Show selected child, hide the others
+ %
+ % c.showSelection() shows the selected child of the container
+ % c, and hides the others.
+
+ % Set positions and visibility
+ selection = obj.Selection_;
+ children = obj.Contents_;
+ for ii = 1:numel( children )
+ child = children(ii);
+ if ii == selection
+ if obj.G1218142
+ warning( 'uix:G1218142', ...
+ 'Selected child of %s is not visible due to bug G1218142. The child will become visible at the next redraw.', ...
+ class( obj ) )
+ obj.G1218142 = false;
+ else
+ child.Visible = 'on';
+ end
+ if isa( child, 'matlab.graphics.axis.Axes' )
+ child.ContentsVisible = 'on';
+ end
+ else
+ child.Visible = 'off';
+ if isa( child, 'matlab.graphics.axis.Axes' )
+ child.ContentsVisible = 'off';
+ end
+ % As a remedy for g1100294, move off-screen too
+ margin = 1000;
+ if isa( child, 'matlab.graphics.axis.Axes' ) ...
+ && strcmp(child.ActivePositionProperty, 'outerposition' )
+ child.OuterPosition(1) = -child.OuterPosition(3)-margin;
+ else
+ child.Position(1) = -child.Position(3)-margin;
+ end
+ end
+ end
+
+ end % showSelection
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Box.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Box.m
new file mode 100644
index 0000000..9eff645
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Box.m
@@ -0,0 +1,45 @@
+classdef Box < uix.Container & uix.mixin.Container
+ %uix.Box Box and grid base class
+ %
+ % uix.Box is a base class for containers with spacing between
+ % contents.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1165 $ $Date: 2015-12-06 03:09:17 -0500 (Sun, 06 Dec 2015) $
+
+ properties( Access = public, Dependent, AbortSet )
+ Spacing = 0 % space between contents, in pixels
+ end
+
+ properties( Access = protected )
+ Spacing_ = 0 % backing for Spacing
+ end
+
+ methods
+
+ function value = get.Spacing( obj )
+
+ value = obj.Spacing_;
+
+ end % get.Spacing
+
+ function set.Spacing( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ) && isscalar( value ) && ...
+ isreal( value ) && ~isinf( value ) && ...
+ ~isnan( value ) && value >= 0, ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''Spacing'' must be a non-negative scalar.' )
+
+ % Set
+ obj.Spacing_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Spacing
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/BoxPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/BoxPanel.m
new file mode 100644
index 0000000..4430403
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/BoxPanel.m
@@ -0,0 +1,551 @@
+classdef BoxPanel < uix.Panel & uix.mixin.Panel
+ %uix.BoxPanel Box panel
+ %
+ % p = uix.BoxPanel(p1,v1,p2,v2,...) constructs a box panel and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A box panel is a decorated container with a title box, border, and
+ % buttons to dock and undock, minimize, get help, and close. A box
+ % panel shows one of its contents and hides the others.
+ %
+ % See also: uix.Panel, uipanel, uix.CardPanel
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Dependent )
+ TitleColor % title background color [RGB]
+ Minimized % minimized [true|false]
+ MinimizeFcn % minimize callback
+ Docked % docked [true|false]
+ DockFcn % dock callback
+ HelpFcn % help callback
+ CloseRequestFcn % close request callback
+ end
+
+ properties( Dependent, SetAccess = private )
+ TitleHeight % title panel height [pixels]
+ end
+
+ properties( Access = private )
+ TitleBox % title bar box
+ TitleText % title text label
+ EmptyTitle = '' % title when empty, [] otherwise
+ TitleAccess = 'public' % 'private' when getting or setting Title, 'public' otherwise
+ TitleHeight_ = -1 % cache of title text height (-1 denotes stale cache)
+ MinimizeButton % title button
+ DockButton % title button
+ HelpButton % title button
+ CloseButton % title button
+ Docked_ = true % backing for Docked
+ Minimized_ = false % backing for Minimized
+ end
+
+ properties( Constant, Access = private )
+ NullTitle = char.empty( [2 0] ) % an obscure empty string, the actual panel Title
+ BlankTitle = ' ' % a non-empty blank string, the empty uicontrol String
+ end
+
+ methods
+
+ function obj = BoxPanel( varargin )
+ %uix.BoxPanel Box panel constructor
+ %
+ % p = uix.BoxPanel() constructs a box panel.
+ %
+ % p = uix.BoxPanel(p1,v1,p2,v2,...) sets parameter p1 to value
+ % v1, etc.
+
+ % Define default colors
+ foregroundColor = [1 1 1];
+ backgroundColor = [0.05 0.25 0.5];
+
+ % Set default colors
+ obj.ForegroundColor = foregroundColor;
+
+ % Create panels and decorations
+ titleBox = uix.HBox( 'Internal', true, 'Parent', obj, ...
+ 'Units', 'pixels', 'BackgroundColor', backgroundColor );
+ titleText = uix.Text( 'Parent', titleBox, ...
+ 'ForegroundColor', foregroundColor, ...
+ 'BackgroundColor', backgroundColor, ...
+ 'String', obj.BlankTitle, 'HorizontalAlignment', 'left' );
+
+ % Create buttons
+ minimizeButton = uix.Text( ...
+ 'ForegroundColor', foregroundColor, ...
+ 'BackgroundColor', backgroundColor, ...
+ 'FontWeight', 'bold', 'Enable', 'on' );
+ dockButton = uix.Text( ...
+ 'ForegroundColor', foregroundColor, ...
+ 'BackgroundColor', backgroundColor, ...
+ 'FontWeight', 'bold', 'Enable', 'on' );
+ helpButton = uix.Text( ...
+ 'ForegroundColor', foregroundColor, ...
+ 'BackgroundColor', backgroundColor, ...
+ 'FontWeight', 'bold', 'String', '?', ...
+ 'TooltipString', 'Get help on this panel', 'Enable', 'on' );
+ closeButton = uix.Text( ...
+ 'ForegroundColor', foregroundColor, ...
+ 'BackgroundColor', backgroundColor, ...
+ 'FontWeight', 'bold', 'String', char( 215 ), ...
+ 'TooltipString', 'Close this panel', 'Enable', 'on' );
+
+ % Store properties
+ obj.Title = obj.NullTitle;
+ obj.TitleBox = titleBox;
+ obj.TitleText = titleText;
+ obj.MinimizeButton = minimizeButton;
+ obj.DockButton = dockButton;
+ obj.HelpButton = helpButton;
+ obj.CloseButton = closeButton;
+
+ % Create listeners
+ addlistener( obj, 'BorderWidth', 'PostSet', ...
+ @obj.onBorderWidthChanged );
+ addlistener( obj, 'BorderType', 'PostSet', ...
+ @obj.onBorderTypeChanged );
+ addlistener( obj, 'FontAngle', 'PostSet', ...
+ @obj.onFontAngleChanged );
+ addlistener( obj, 'FontName', 'PostSet', ...
+ @obj.onFontNameChanged );
+ addlistener( obj, 'FontSize', 'PostSet', ...
+ @obj.onFontSizeChanged );
+ addlistener( obj, 'FontUnits', 'PostSet', ...
+ @obj.onFontUnitsChanged );
+ addlistener( obj, 'FontWeight', 'PostSet', ...
+ @obj.onFontWeightChanged );
+ addlistener( obj, 'ForegroundColor', 'PostSet', ...
+ @obj.onForegroundColorChanged );
+ addlistener( obj, 'Title', 'PreGet', ...
+ @obj.onTitleReturning );
+ addlistener( obj, 'Title', 'PostGet', ...
+ @obj.onTitleReturned );
+ addlistener( obj, 'Title', 'PostSet', ...
+ @obj.onTitleChanged );
+
+ % Draw buttons
+ obj.redrawButtons()
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.TitleColor( obj )
+
+ value = obj.TitleBox.BackgroundColor;
+
+ end % get.TitleColor
+
+ function set.TitleColor( obj, value )
+
+ % Set
+ obj.TitleBox.BackgroundColor = value;
+ obj.TitleText.BackgroundColor = value;
+ obj.MinimizeButton.BackgroundColor = value;
+ obj.DockButton.BackgroundColor = value;
+ obj.HelpButton.BackgroundColor = value;
+ obj.CloseButton.BackgroundColor = value;
+
+ end % set.TitleColor
+
+ function value = get.CloseRequestFcn( obj )
+
+ value = obj.CloseButton.Callback;
+
+ end % get.CloseRequestFcn
+
+ function set.CloseRequestFcn( obj, value )
+
+ % Set
+ obj.CloseButton.Callback = value;
+
+ % Mark as dirty
+ obj.redrawButtons()
+
+ end % set.CloseRequestFcn
+
+ function value = get.DockFcn( obj )
+
+ value = obj.DockButton.Callback;
+
+ end % get.DockFcn
+
+ function set.DockFcn( obj, value )
+
+ % Set
+ obj.DockButton.Callback = value;
+
+ % Mark as dirty
+ obj.redrawButtons()
+
+ end % set.DockFcn
+
+ function value = get.HelpFcn( obj )
+
+ value = obj.HelpButton.Callback;
+
+ end % get.HelpFcn
+
+ function set.HelpFcn( obj, value )
+
+ % Set
+ obj.HelpButton.Callback = value;
+
+ % Mark as dirty
+ obj.redrawButtons()
+
+ end % set.HelpFcn
+
+ function value = get.MinimizeFcn( obj )
+
+ value = obj.MinimizeButton.Callback;
+
+ end % get.MinimizeFcn
+
+ function set.MinimizeFcn( obj, value )
+
+ % Set
+ obj.MinimizeButton.Callback = value;
+ obj.TitleText.Callback = value;
+ if isempty( value )
+ obj.TitleText.Enable = 'inactive';
+ else
+ obj.TitleText.Enable = 'on';
+ end
+
+ % Mark as dirty
+ obj.redrawButtons()
+
+ end % set.MinimizeFcn
+
+ function value = get.Docked( obj )
+
+ value = obj.Docked_;
+
+ end % get.Docked
+
+ function set.Docked( obj, value )
+
+ % Check
+ assert( islogical( value ) && isequal( size( value ), [1 1] ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''Docked'' must be true or false.' )
+
+ % Set
+ obj.Docked_ = value;
+
+ % Mark as dirty
+ obj.redrawButtons()
+
+ end % set.Docked
+
+ function value = get.Minimized( obj )
+
+ value = obj.Minimized_;
+
+ end % get.Minimized
+
+ function set.Minimized( obj, value )
+
+ % Check
+ assert( islogical( value ) && isequal( size( value ), [1 1] ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''Minimized'' must be true or false.' )
+
+ % Set
+ obj.Minimized_ = value;
+
+ % Show selected child
+ obj.showSelection()
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Minimized
+
+ function value = get.TitleHeight( obj )
+
+ value = obj.TitleBox.Position(4);
+
+ end % get.TitleHeight
+
+ end % accessors
+
+ methods( Access = private )
+
+ function onBorderWidthChanged( obj, ~, ~ )
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onBorderWidthChanged
+
+ function onBorderTypeChanged( obj, ~, ~ )
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onBorderTypeChanged
+
+ function onFontAngleChanged( obj, ~, ~ )
+
+ obj.TitleText.FontAngle = obj.FontAngle;
+
+ end % onFontAngleChanged
+
+ function onFontNameChanged( obj, ~, ~ )
+
+ % Set
+ obj.TitleText.FontName = obj.FontName;
+
+ % Mark as dirty
+ obj.TitleHeight_ = -1;
+ obj.Dirty = true;
+
+ end % onFontNameChanged
+
+ function onFontSizeChanged( obj, ~, ~ )
+
+ % Set
+ fontSize = obj.FontSize;
+ obj.TitleText.FontSize = fontSize;
+ obj.HelpButton.FontSize = fontSize;
+ obj.CloseButton.FontSize = fontSize;
+ obj.DockButton.FontSize = fontSize;
+ obj.MinimizeButton.FontSize = fontSize;
+
+ % Mark as dirty
+ obj.TitleHeight_ = -1;
+ obj.Dirty = true;
+
+ end % onFontSizeChanged
+
+ function onFontUnitsChanged( obj, ~, ~ )
+
+ fontUnits = obj.FontUnits;
+ obj.TitleText.FontUnits = fontUnits;
+ obj.HelpButton.FontUnits = fontUnits;
+ obj.CloseButton.FontUnits = fontUnits;
+ obj.DockButton.FontUnits = fontUnits;
+ obj.MinimizeButton.FontUnits = fontUnits;
+
+ end % onFontUnitsChanged
+
+ function onFontWeightChanged( obj, ~, ~ )
+
+ obj.TitleText.FontWeight = obj.FontWeight;
+
+ end % onFontWeightChanged
+
+ function onForegroundColorChanged( obj, ~, ~ )
+
+ foregroundColor = obj.ForegroundColor;
+ obj.TitleText.ForegroundColor = foregroundColor;
+ obj.MinimizeButton.ForegroundColor = foregroundColor;
+ obj.DockButton.ForegroundColor = foregroundColor;
+ obj.HelpButton.ForegroundColor = foregroundColor;
+ obj.CloseButton.ForegroundColor = foregroundColor;
+
+ end % onForegroundColorChanged
+
+ function onTitleReturning( obj, ~, ~ )
+
+ if strcmp( obj.TitleAccess, 'public' )
+
+ obj.TitleAccess = 'private'; % start
+ if ischar( obj.EmptyTitle )
+ obj.Title = obj.EmptyTitle;
+ else
+ obj.Title = obj.TitleText.String;
+ end
+
+ end
+
+ end % onTitleReturning
+
+ function onTitleReturned( obj, ~, ~ )
+
+ obj.Title = obj.NullTitle; % unset Title
+ obj.TitleAccess = 'public'; % finish
+
+ end % onTitleReturned
+
+ function onTitleChanged( obj, ~, ~ )
+
+ if strcmp( obj.TitleAccess, 'public' )
+
+ % Set
+ obj.TitleAccess = 'private'; % start
+ title = obj.Title;
+ if isempty( title )
+ obj.EmptyTitle = title; % store
+ obj.TitleText.String = obj.BlankTitle; % set String to blank
+ else
+ obj.EmptyTitle = []; % not empty
+ obj.TitleText.String = title; % set String to title
+ end
+ obj.Title = obj.NullTitle; % unset Title
+ obj.TitleAccess = 'public'; % finish
+
+ % Mark as dirty
+ obj.TitleHeight_ = -1;
+ obj.Dirty = true;
+
+ end
+
+ end % onTitleChanged
+
+ end % property event handlers
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw
+ %
+ % p.redraw() redraws the panel.
+ %
+ % See also: redrawButtons
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ tX = 1;
+ tW = max( bounds(3), 1 );
+ tH = obj.TitleHeight_; % title height
+ if tH == -1 % cache stale, refresh
+ tH = ceil( obj.TitleText.Extent(4) );
+ obj.TitleHeight_ = tH; % store
+ end
+ tY = 1 + bounds(4) - tH;
+ p = obj.Padding_;
+ cX = 1 + p;
+ cW = max( bounds(3) - 2 * p, 1 );
+ cH = max( bounds(4) - tH - 2 * p, 1 );
+ cY = tY - p - cH;
+ contentsPosition = [cX cY cW cH];
+
+ % Redraw contents
+ selection = obj.Selection_;
+ if selection ~= 0
+ uix.setPosition( obj.Contents_(selection), contentsPosition, 'pixels' )
+ end
+ obj.TitleBox.Position = [tX tY tW tH];
+ obj.redrawButtons()
+
+ end % redraw
+
+ function showSelection( obj )
+ %showSelection Show selected child, hide the others
+ %
+ % c.showSelection() shows the selected child of the container
+ % c, and hides the others.
+
+ % Call superclass method
+ showSelection@uix.mixin.Panel( obj )
+
+ % If minimized, hide selected contents too
+ selection = obj.Selection_;
+ if selection ~= 0 && obj.Minimized_
+ child = obj.Contents_(selection);
+ child.Visible = 'off';
+ if isa( child, 'matlab.graphics.axis.Axes' )
+ child.ContentsVisible = 'off';
+ end
+ % As a remedy for g1100294, move off-screen too
+ margin = 1000;
+ if isa( child, 'matlab.graphics.axis.Axes' ) ...
+ && strcmp(child.ActivePositionProperty, 'outerposition' )
+ child.OuterPosition(1) = -child.OuterPosition(3)-margin;
+ else
+ child.Position(1) = -child.Position(3)-margin;
+ end
+ end
+
+ end % showSelection
+
+ end % template methods
+
+ methods( Access = private )
+
+ function redrawButtons( obj )
+ %redrawButtons Redraw buttons
+ %
+ % p.redrawButtons() redraws the titlebar buttons.
+ %
+ % Buttons use unicode arrow symbols:
+ % https://en.wikipedia.org/wiki/Arrow_%28symbol%29#Arrows_in_Unicode
+
+ % Retrieve button box and buttons
+ box = obj.TitleBox;
+ titleText = obj.TitleText;
+ minimizeButton = obj.MinimizeButton;
+ dockButton = obj.DockButton;
+ helpButton = obj.HelpButton;
+ closeButton = obj.CloseButton;
+
+ % Detach all buttons
+ titleText.Parent = [];
+ minimizeButton.Parent = [];
+ dockButton.Parent = [];
+ helpButton.Parent = [];
+ closeButton.Parent = [];
+
+ % Attach active buttons
+ titleText.Parent = box;
+ minimize = ~isempty( obj.MinimizeFcn );
+ if minimize
+ minimizeButton.Parent = box;
+ box.Widths(end) = minimizeButton.Extent(3);
+ end
+ dock = ~isempty( obj.DockFcn );
+ if dock
+ dockButton.Parent = box;
+ box.Widths(end) = dockButton.Extent(3);
+ end
+ help = ~isempty( obj.HelpFcn );
+ if help
+ helpButton.Parent = box;
+ box.Widths(end) = helpButton.Extent(3);
+ end
+ close = ~isempty( obj.CloseRequestFcn );
+ if close
+ closeButton.Parent = box;
+ box.Widths(end) = closeButton.Extent(3);
+ end
+
+ % Update icons
+ if obj.Minimized_
+ minimizeButton.String = char( 9662 );
+ minimizeButton.TooltipString = 'Expand this panel';
+ else
+ minimizeButton.String = char( 9652 );
+ minimizeButton.TooltipString = 'Collapse this panel';
+ end
+ if obj.Docked_
+ dockButton.String = char( 8599 );
+ dockButton.TooltipString = 'Undock this panel';
+ else
+ dockButton.String = char( 8600 );
+ dockButton.TooltipString = 'Dock this panel';
+ end
+
+ end % redrawButtons
+
+ end % helper methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ButtonBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ButtonBox.m
new file mode 100644
index 0000000..dd0e4f5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ButtonBox.m
@@ -0,0 +1,96 @@
+classdef ButtonBox < uix.Box
+ %uix.ButtonBox Button box base class
+ %
+ % uix.ButtonBox is a base class for containers that lay out buttons.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1165 $ $Date: 2015-12-06 03:09:17 -0500 (Sun, 06 Dec 2015) $
+
+ properties( Access = public, Dependent, AbortSet )
+ ButtonSize % button size, in pixels
+ HorizontalAlignment % horizontal alignment [left|center|right]
+ VerticalAlignment % vertical alignment [top|middle|bottom]
+ end
+
+ properties( Access = protected )
+ ButtonSize_ = [60 20] % backing for ButtonSize
+ HorizontalAlignment_ = 'center' % backing for HorizontalAlignment
+ VerticalAlignment_ = 'middle' % backing for VerticalAlignment
+ end
+
+ methods
+
+ function value = get.ButtonSize( obj )
+
+ value = obj.ButtonSize_;
+
+ end % get.ButtonSize
+
+ function set.ButtonSize( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''ButtonSize'' must be of type double.' )
+ assert( isequal( size( value ), [1 2] ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''ButtonSize'' must by 1-by-2.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ) && ~any( value <= 0 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''ButtonSize'' must be real, finite and positive.' )
+
+ % Set
+ obj.ButtonSize_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.ButtonSize
+
+ function value = get.HorizontalAlignment( obj )
+
+ value = obj.HorizontalAlignment_;
+
+ end % get.HorizontalAlignment
+
+ function set.HorizontalAlignment( obj, value )
+
+ % Check
+ assert( ischar( value ), 'uix:InvalidPropertyValue', ...
+ 'Property ''HorizontalAlignment'' must be a string.' )
+ assert( any( strcmp( value, {'left';'center';'right'} ) ), ...
+ 'Property ''HorizontalAlignment'' must be ''left'', ''center'' or ''right''.' )
+
+ % Set
+ obj.HorizontalAlignment_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.HorizontalAlignment
+
+ function value = get.VerticalAlignment( obj )
+
+ value = obj.VerticalAlignment_;
+
+ end % get.VerticalAlignment
+
+ function set.VerticalAlignment( obj, value )
+
+ % Check
+ assert( ischar( value ), 'uix:InvalidPropertyValue', ...
+ 'Property ''VerticalAlignment'' must be a string.' )
+ assert( any( strcmp( value, {'top';'middle';'bottom'} ) ), ...
+ 'Property ''VerticalAlignment'' must be ''top'', ''middle'' or ''bottom''.' )
+
+ % Set
+ obj.VerticalAlignment_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.VerticalAlignment
+
+ end % accessors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/CardPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/CardPanel.m
new file mode 100644
index 0000000..c97e757
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/CardPanel.m
@@ -0,0 +1,64 @@
+classdef CardPanel < uix.Container & uix.mixin.Panel
+ %uix.CardPanel Card panel
+ %
+ % b = uix.CardPanel(p1,v1,p2,v2,...) constructs a card panel and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A card panel is a standard container (uicontainer) that shows one
+ % its contents and hides the others.
+ %
+ % See also: uix.Panel, uix.BoxPanel, uix.TabPanel, uicontainer
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ methods
+
+ function obj = CardPanel( varargin )
+ %uix.CardPanel Card panel constructor
+ %
+ % p = uix.CardPanel() constructs a card panel.
+ %
+ % p = uix.CardPanel(p1,v1,p2,v2,...) sets parameter p1 to
+ % value v1, etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ padding = obj.Padding_;
+ xSizes = uix.calcPixelSizes( bounds(3), -1, 1, padding, 0 );
+ ySizes = uix.calcPixelSizes( bounds(4), -1, 1, padding, 0 );
+ position = [padding+1 padding+1 xSizes ySizes];
+
+ % Redraw contents
+ selection = obj.Selection_;
+ if selection ~= 0
+ uix.setPosition( obj.Contents_(selection), position, 'pixels' )
+ end
+
+ end % redraw
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ChildEvent.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ChildEvent.m
new file mode 100644
index 0000000..b9f5eb5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ChildEvent.m
@@ -0,0 +1,28 @@
+classdef( Hidden, Sealed ) ChildEvent < event.EventData
+ %uix.ChildEvent Event data for child event
+ %
+ % e = uix.ChildEvent(c) creates event data including the child c.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1165 $ $Date: 2015-12-06 03:09:17 -0500 (Sun, 06 Dec 2015) $
+
+ properties( SetAccess = private )
+ Child % child
+ end
+
+ methods
+
+ function obj = ChildEvent( child )
+ %uix.ChildEvent Event data for child event
+ %
+ % e = uix.ChildEvent(c) creates event data including the child
+ % c.
+
+ % Set properties
+ obj.Child = child;
+
+ end % constructor
+
+ end % structors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ChildObserver.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ChildObserver.m
new file mode 100644
index 0000000..5dbd876
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ChildObserver.m
@@ -0,0 +1,220 @@
+classdef ( Hidden, Sealed ) ChildObserver < handle
+ %uix.ChildObserver Child observer
+ %
+ % co = uix.ChildObserver(o) creates a child observer for the graphics
+ % object o. A child observer raises events when objects are added to
+ % and removed from the property Children of o.
+ %
+ % See also: uix.Node
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = private )
+ Root % root node
+ end
+
+ events( NotifyAccess = private )
+ ChildAdded % child added
+ ChildRemoved % child removed
+ end
+
+ methods
+
+ function obj = ChildObserver( oRoot )
+ %uix.ChildObserver Child observer
+ %
+ % co = uix.ChildObserver(o) creates a child observer for the
+ % graphics object o. A child observer raises events when
+ % objects are added to and removed from the property Children
+ % of o.
+
+ % Check
+ assert( iscontent( oRoot ) && ...
+ isequal( size( oRoot ), [1 1] ), 'uix.InvalidArgument', ...
+ 'Object must be a graphics object.' )
+
+ % Create root node
+ nRoot = uix.Node( oRoot );
+ childAddedListener = event.listener( oRoot, ...
+ 'ObjectChildAdded', ...
+ @(~,e)obj.addChild(nRoot,e.Child) );
+ childAddedListener.Recursive = true;
+ nRoot.addprop( 'ChildAddedListener' );
+ nRoot.ChildAddedListener = childAddedListener;
+ childRemovedListener = event.listener( oRoot, ...
+ 'ObjectChildRemoved', ...
+ @(~,e)obj.removeChild(nRoot,e.Child) );
+ childRemovedListener.Recursive = true;
+ nRoot.addprop( 'ChildRemovedListener' );
+ nRoot.ChildRemovedListener = childRemovedListener;
+
+ % Add children
+ oChildren = hgGetTrueChildren( oRoot );
+ for ii = 1:numel( oChildren )
+ obj.addChild( nRoot, oChildren(ii) )
+ end
+
+ % Store properties
+ obj.Root = nRoot;
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = private )
+
+ function addChild( obj, nParent, oChild )
+ %addChild Add child object to parent node
+ %
+ % co.addChild(np,oc) adds the child object oc to the parent
+ % node np, either as part of construction of the child
+ % observer co, or in response to an ObjectChildAdded event on
+ % an object of interest to co. This may lead to ChildAdded
+ % events being raised on co.
+
+ % Create child node
+ nChild = uix.Node( oChild );
+ nParent.addChild( nChild )
+ if iscontent( oChild )
+ % Add Internal PreSet property listener
+ internalPreSetListener = event.proplistener( oChild, ...
+ findprop( oChild, 'Internal' ), 'PreSet', ...
+ @(~,~)obj.preSetInternal(nChild) );
+ nChild.addprop( 'InternalPreSetListener' );
+ nChild.InternalPreSetListener = internalPreSetListener;
+ % Add Internal PostSet property listener
+ internalPostSetListener = event.proplistener( oChild, ...
+ findprop( oChild, 'Internal' ), 'PostSet', ...
+ @(~,~)obj.postSetInternal(nChild) );
+ nChild.addprop( 'InternalPostSetListener' );
+ nChild.InternalPostSetListener = internalPostSetListener;
+ else
+ % Add ObjectChildAdded listener
+ childAddedListener = event.listener( oChild, ...
+ 'ObjectChildAdded', ...
+ @(~,e)obj.addChild(nChild,e.Child) );
+ nChild.addprop( 'ChildAddedListener' );
+ nChild.ChildAddedListener = childAddedListener;
+ % Add ObjectChildRemoved listener
+ childRemovedListener = event.listener( oChild, ...
+ 'ObjectChildRemoved', ...
+ @(~,e)obj.removeChild(nChild,e.Child) );
+ nChild.addprop( 'ChildRemovedListener' );
+ nChild.ChildRemovedListener = childRemovedListener;
+ end
+
+ % Raise ChildAdded event
+ if iscontent( oChild ) && oChild.Internal == false
+ notify( obj, 'ChildAdded', uix.ChildEvent( oChild ) )
+ end
+
+ % Add grandchildren
+ if ~iscontent( oChild )
+ oGrandchildren = hgGetTrueChildren( oChild );
+ for ii = 1:numel( oGrandchildren )
+ obj.addChild( nChild, oGrandchildren(ii) )
+ end
+ end
+
+ end % addChild
+
+ function removeChild( obj, nParent, oChild )
+ %removeChild Remove child object from parent node
+ %
+ % co.removeChild(np,oc) removes the child object oc from the
+ % parent node np, in response to an ObjectChildRemoved event
+ % on an object of interest to co. This may lead to
+ % ChildRemoved events being raised on co.
+
+ % Get child node
+ nChildren = nParent.Children;
+ tf = oChild == [nChildren.Object];
+ nChild = nChildren(tf);
+
+ % Raise ChildRemoved event(s)
+ notifyChildRemoved( nChild )
+
+ % Delete child node
+ delete( nChild )
+
+ function notifyChildRemoved( nc )
+
+ % Process child nodes
+ ngc = nc.Children;
+ for ii = 1:numel( ngc )
+ notifyChildRemoved( ngc(ii) )
+ end
+
+ % Process this node
+ oc = nc.Object;
+ if iscontent( oc ) && oc.Internal == false
+ notify( obj, 'ChildRemoved', uix.ChildEvent( oc ) )
+ end
+
+ end % notifyChildRemoved
+
+ end % removeChild
+
+ function preSetInternal( ~, nChild )
+ %preSetInternal Perform property PreSet tasks
+ %
+ % co.preSetInternal(n) caches the previous value of the
+ % property Internal of the object referenced by the node n, to
+ % enable PostSet tasks to identify whether the value changed.
+ % This is necessary since Internal AbortSet is false.
+
+ oldInternal = nChild.Object.Internal;
+ nChild.addprop( 'OldInternal' );
+ nChild.OldInternal = oldInternal;
+
+ end % preSetInternal
+
+ function postSetInternal( obj, nChild )
+ %postSetInternal Perform property PostSet tasks
+ %
+ % co.postSetInternal(n) raises a ChildAdded or ChildRemoved
+ % event on the child observer co in response to a change of
+ % the value of the property Internal of the object referenced
+ % by the node n.
+
+ % Retrieve old and new values
+ oChild = nChild.Object;
+ newInternal = oChild.Internal;
+ oldInternal = nChild.OldInternal;
+
+ % Clean up node
+ delete( findprop( nChild, 'OldInternal' ) )
+
+ % Raise event
+ switch newInternal
+ case oldInternal % no change
+ % no event
+ case true % false to true
+ notify( obj, 'ChildRemoved', uix.ChildEvent( oChild ) )
+ case false % true to false
+ notify( obj, 'ChildAdded', uix.ChildEvent( oChild ) )
+ end
+
+ end % postSetInternal
+
+ end % event handlers
+
+end % classdef
+
+function tf = iscontent( o )
+%iscontent True for graphics that can be Contents (and can be Children)
+%
+% uix.ChildObserver needs to determine which objects can be Contents,
+% which is equivalent to can be Children if HandleVisibility is 'on' and
+% Internal is false. Prior to R2016a, this condition could be checked
+% using isgraphics. From R2016a, isgraphics returns true for a wider
+% range of objects, including some that can never by Contents, e.g.,
+% JavaCanvas. Therefore this function checks whether an object is of type
+% matlab.graphics.internal.GraphicsBaseFunctions, which is what isgraphics
+% did prior to R2016a.
+
+tf = isa( o, 'matlab.graphics.internal.GraphicsBaseFunctions' ) &&...
+ isprop( o, 'Position' );
+
+end % iscontent
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Container.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Container.m
new file mode 100644
index 0000000..c78e6e2
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Container.m
@@ -0,0 +1,9 @@
+classdef Container < matlab.ui.container.internal.UIContainer
+ %uix.Container Container base class
+ %
+ % uix.Container is base class for containers that extend uicontainer.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1137 $ $Date: 2015-05-29 21:48:21 +0100 (Fri, 29 May 2015) $
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Divider.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Divider.m
new file mode 100644
index 0000000..f193678
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Divider.m
@@ -0,0 +1,344 @@
+classdef Divider < matlab.mixin.SetGet
+ %uix.Divider Draggable divider
+ %
+ % d = uix.Divider() creates a divider.
+ %
+ % d = uix.Divider(p1,v1,p2,v2,...) creates a divider and sets
+ % specified property p1 to value v1, etc.
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Dependent )
+ Parent % parent
+ Units % units [inches|centimeters|characters|normalized|points|pixels]
+ Position % position
+ Visible % visible [on|off]
+ BackgroundColor % background color [RGB]
+ HighlightColor % border highlight color [RGB]
+ ShadowColor % border shadow color [RGB]
+ Orientation % orientation [vertical|horizontal]
+ Markings % markings [pixels]
+ end
+
+ properties( Access = private )
+ Control % uicontrol
+ BackgroundColor_ = get( 0, 'DefaultUicontrolBackgroundColor' ) % backing for BackgroundColor
+ HighlightColor_ = [1 1 1] % backing for HighlightColor
+ ShadowColor_ = [0.7 0.7 0.7] % backing for ShadowColor
+ Orientation_ = 'vertical' % backing for Orientation
+ Markings_ = zeros( [0 1] ) % backing for Markings
+ SizeChangedListener % listener
+ end
+
+ methods
+
+ function obj = Divider( varargin )
+ %uix.Divider Draggable divider
+ %
+ % d = uix.Divider() creates a divider.
+ %
+ % d = uix.Divider(p1,v1,p2,v2,...) creates a dividerand sets
+ % specified property p1 to value v1, etc.
+
+ % Create control
+ control = matlab.ui.control.UIControl( ...
+ 'Style', 'checkbox', 'Internal', true, ...
+ 'Enable', 'inactive', 'DeleteFcn', @obj.onDeleted,...
+ 'Tag', 'uix.Divider' );
+
+ % Store control
+ obj.Control = control;
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ % Force update
+ obj.update()
+
+ % Create listener
+ sizeChangedListener = event.listener( control, 'SizeChanged', ...
+ @obj.onSizeChanged );
+
+ % Store listener
+ obj.SizeChangedListener = sizeChangedListener;
+
+ end % constructor
+
+ function delete( obj )
+ %delete Destructor
+
+ control = obj.Control;
+ if isgraphics( control ) && strcmp( control.BeingDeleted, 'off' )
+ delete( control )
+ end
+
+ end % destructor
+
+ end % structors
+
+ methods
+
+ function value = get.Parent( obj )
+
+ value = obj.Control.Parent;
+
+ end % get.Parent
+
+ function set.Parent( obj, value )
+
+ obj.Control.Parent = value;
+
+ end % set.Parent
+
+ function value = get.Units( obj )
+
+ value = obj.Control.Units;
+
+ end % get.Units
+
+ function set.Units( obj, value )
+
+ obj.Control.Units = value;
+
+ end % set.Units
+
+ function value = get.Position( obj )
+
+ value = obj.Control.Position;
+
+ end % get.Position
+
+ function set.Position( obj, value )
+
+ obj.Control.Position = value;
+
+ end % set.Position
+
+ function value = get.Visible( obj )
+
+ value = obj.Control.Visible;
+
+ end % get.Visible
+
+ function set.Visible( obj, value )
+
+ obj.Control.Visible = value;
+
+ end % set.Visible
+
+ function value = get.BackgroundColor( obj )
+
+ value = obj.BackgroundColor_;
+
+ end % get.BackgroundColor
+
+ function set.BackgroundColor( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ) && ...
+ isequal( size( value ), [1 3] ) && ...
+ all( value >= 0 ) && all( value <= 1 ), ...
+ 'uix:InvalidArgument', ...
+ 'Property ''BackgroundColor'' must be a valid colorspec.' )
+
+ % Set
+ obj.BackgroundColor_ = value;
+
+ % Update
+ obj.update()
+
+ end % set.BackgroundColor
+
+ function value = get.HighlightColor( obj )
+
+ value = obj.HighlightColor_;
+
+ end % get.HighlightColor
+
+ function set.HighlightColor( obj, value )
+
+ % Check
+ assert( isnumeric( value ) && isequal( size( value ), [1 3] ) && ...
+ all( isreal( value ) ) && all( value >= 0 ) && all( value <= 1 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''HighlightColor'' must be an RGB triple.' )
+
+ % Set
+ obj.HighlightColor_ = value;
+
+ % Update
+ obj.update()
+
+ end % set.HighlightColor
+
+ function value = get.ShadowColor( obj )
+
+ value = obj.ShadowColor_;
+
+ end % get.ShadowColor
+
+ function set.ShadowColor( obj, value )
+
+ % Check
+ assert( isnumeric( value ) && isequal( size( value ), [1 3] ) && ...
+ all( isreal( value ) ) && all( value >= 0 ) && all( value <= 1 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''ShadowColor'' must be an RGB triple.' )
+
+ % Set
+ obj.ShadowColor_ = value;
+
+ % Update
+ obj.update()
+
+ end % set.ShadowColor
+
+ function value = get.Orientation( obj )
+
+ value = obj.Orientation_;
+
+ end % get.Orientation
+
+ function set.Orientation( obj, value )
+
+ % Check
+ assert( ischar( value ) && ismember( value, ...
+ {'horizontal','vertical'} ) )
+
+ % Set
+ obj.Orientation_ = value;
+
+ % Update
+ obj.update()
+
+ end % set.Orientation
+
+ function value = get.Markings( obj )
+
+ value = obj.Markings_;
+
+ end % get.Markings
+
+ function set.Markings( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ) && ndims( value ) == 2 && ...
+ size( value, 2 ) == 1 && all( isreal( value ) ) && ...
+ all( ~isinf( value ) ) && all( ~isnan( value ) ) && ...
+ all( value > 0 ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Markings'' must be a vector of positive values.' ) %#ok
+
+ % Set
+ obj.Markings_ = value;
+
+ % Update
+ obj.update()
+
+ end % set.Markings
+
+ end % accessors
+
+ methods
+
+ function tf = isMouseOver( obj, eventData )
+ %isMouseOver Test for mouse over
+ %
+ % tf = d.isMouseOver(wmd) tests whether the WindowMouseData
+ % wmd is consistent with the mouse pointer being over the
+ % divider d.
+
+ tf = reshape( [obj.Control] == eventData.HitObject, size( obj ) );
+
+ end % isMouseOver
+
+ end % methods
+
+ methods( Access = private )
+
+ function onDeleted( obj, ~, ~ )
+ %onDeleted Event handler
+
+ % Call destructor
+ obj.delete()
+
+ end % onDeleted
+
+ function onSizeChanged( obj, ~, ~ )
+ %onSizeChanged Event handler
+
+ % Update
+ obj.update()
+
+ end % onSizeChanged
+
+ end % event handlers
+
+ methods( Access = private )
+
+ function update( obj )
+ %update Update divider
+ %
+ % d.update() updates the divider markings.
+
+ % Get properties
+ control = obj.Control;
+ position = control.Position;
+ backgroundColor = obj.BackgroundColor;
+ highlightColor = obj.HighlightColor;
+ shadowColor = obj.ShadowColor;
+ orientation = obj.Orientation;
+ markings = obj.Markings;
+
+ % Assemble mask
+ mask = zeros( floor( position([4 3]) ) - [1 1] ); % initialize
+ switch orientation
+ case 'vertical'
+ markings(markings < 4) = [];
+ markings(markings > position(4)-6) = [];
+ for ii = 1:numel( markings )
+ marking = markings(ii);
+ mask(floor( marking ) + [-3 0 3],1:end-1) = 1;
+ mask(floor( marking ) + [-2 1 4],1:end-1) = 2;
+ end
+ case 'horizontal'
+ markings(markings < 4) = [];
+ markings(markings > position(3)-6) = [];
+ for ii = 1:numel( markings )
+ marking = markings(ii);
+ mask(2:end,floor( marking ) + [-3 0 3]) = 1;
+ mask(2:end,floor( marking ) + [-2 1 4]) = 2;
+ end
+ end
+
+ % Assemble color data
+ cData1 = repmat( backgroundColor(1), size( mask ) );
+ cData1(mask==1) = highlightColor(1);
+ cData1(mask==2) = shadowColor(1);
+ cData2 = repmat( backgroundColor(2), size( mask ) );
+ cData2(mask==1) = highlightColor(2);
+ cData2(mask==2) = shadowColor(2);
+ cData3 = repmat( backgroundColor(3), size( mask ) );
+ cData3(mask==1) = highlightColor(3);
+ cData3(mask==2) = shadowColor(3);
+ cData = cat( 3, cData1, cData2, cData3 );
+
+ % Set properties
+ control.ForegroundColor = backgroundColor;
+ control.BackgroundColor = backgroundColor;
+ control.CData = cData;
+
+ end % update
+
+ end % methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Empty.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Empty.m
new file mode 100644
index 0000000..e83a916
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Empty.m
@@ -0,0 +1,102 @@
+function obj = Empty( varargin )
+%uix.Empty Create an empty space
+%
+% obj = uix.Empty() creates an empty space that can be used to add gaps
+% between elements in layouts.
+%
+% obj = uix.Empty(param,value,...) also sets one or more property
+% values.
+%
+% See the documentation for more detail and the list of properties.
+%
+% Examples:
+% >> f = figure();
+% >> box = uix.HBox( 'Parent', f );
+% >> uicontrol( 'Parent', box, 'Background', 'r' )
+% >> uix.Empty( 'Parent', box )
+% >> uicontrol( 'Parent', box, 'Background', 'b' )
+
+% Copyright 2009-2016 The MathWorks, Inc.
+% $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+% Create uicontainer
+obj = matlab.ui.container.internal.UIContainer( 'Tag', 'empty', varargin{:} );
+
+% Create property for Parent listener
+p = addprop( obj, 'ParentListener' );
+p.Hidden = true;
+
+% Create Parent listener
+obj.ParentListener = event.proplistener( obj, ...
+ findprop( obj, 'Parent' ), 'PostSet', @(~,~)onParentChanged(obj) );
+
+% Create property for Parent color listener
+p = addprop( obj, 'ParentColorListener' );
+p.Hidden = true;
+
+% Initialize color and listener
+updateColor( obj )
+updateListener( obj )
+
+end % uix.Empty
+
+function onParentChanged( obj )
+%onParentColorChanged Event handler
+
+% Update color and listener
+updateColor( obj )
+updateListener( obj )
+
+end % onParentChanged
+
+function onParentColorChanged( obj )
+%onParentColorChanged Event handler
+
+% Update color
+updateColor( obj )
+
+end % onParentColorChanged
+
+function name = getColorProperty( obj )
+%getColorProperty Get color property
+
+names = {'Color','BackgroundColor'}; % possible names
+for ii = 1:numel( names ) % loop over possible names
+ name = names{ii};
+ if isprop( obj, name )
+ return
+ end
+end
+error( 'Cannot find color property for %s.', class( obj ) )
+
+end % getColorProperty
+
+function updateColor( obj )
+%updateColor Set uicontainer BackgroundColor to match Parent
+
+parent = obj.Parent;
+if isempty( parent ), return, end
+property = getColorProperty( parent );
+color = parent.( property );
+try
+ obj.BackgroundColor = color;
+catch e
+ warning( e.identifier, e.message ) % rethrow as warning
+end
+
+end % updateColor
+
+function updateListener( obj )
+%updateListener Create listener to parent color property
+
+parent = obj.Parent;
+if isempty( parent )
+ obj.ParentColorListener = [];
+else
+ property = getColorProperty( parent );
+ obj.ParentColorListener = event.proplistener( parent, ...
+ findprop( parent, property ), 'PostSet', ...
+ @(~,~)onParentColorChanged(obj) );
+end
+
+end % updateListener
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/FigureData.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/FigureData.m
new file mode 100644
index 0000000..1ce4fa6
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/FigureData.m
@@ -0,0 +1,26 @@
+classdef ( Hidden, Sealed ) FigureData < event.EventData
+ %uix.FigureData Event data for FigureChanged on uix.FigureObserver
+
+ % Copyright 2014-2015 The MathWorks, Inc.
+ % $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+ properties( SetAccess = private )
+ OldFigure % old figure
+ NewFigure % new figure
+ end
+
+ methods( Access = ?uix.FigureObserver )
+
+ function obj = FigureData( oldFigure, newFigure )
+ %uix.FigureData Create event data
+ %
+ % d = uix.FigureData(oldFigure,newFigure)
+
+ obj.OldFigure = oldFigure;
+ obj.NewFigure = newFigure;
+
+ end % constructor
+
+ end % methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/FigureObserver.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/FigureObserver.m
new file mode 100644
index 0000000..7106357
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/FigureObserver.m
@@ -0,0 +1,98 @@
+classdef ( Hidden, Sealed ) FigureObserver < handle
+ %uix.FigureObserver Figure observer
+ %
+ % A figure observer raises an event FigureChanged when the figure
+ % ancestor of a subject changes.
+
+ % Copyright 2014-2015 The MathWorks, Inc.
+ % $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+ properties( SetAccess = private )
+ Subject % subject
+ Figure % figure ancestor
+ end
+
+ properties( Access = private )
+ PreSetListeners % listeners to Parent PreGet
+ PostSetListeners % listeners to Parent PreGet
+ OldFigure = gobjects( 0 ) % previous figure ancestor
+ end
+
+ events( NotifyAccess = private )
+ FigureChanged
+ end
+
+ methods
+
+ function obj = FigureObserver( subject )
+ %uix.FigureObserver Create figure observer
+ %
+ % o = uix.FigureObserver(s) creates a figure observer for the
+ % subject s.
+
+ % Check
+ validateattributes( subject, {'matlab.graphics.Graphics'}, ...
+ {'scalar'}, '', 'subject' )
+
+ % Store subject
+ obj.Subject = subject;
+
+ % Set up object
+ obj.update()
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = private )
+
+ function update( obj )
+ %update Update listeners and Figure property
+
+ % Create fresh listeners
+ obj.PreSetListeners = event.proplistener.empty( [1 0] ); % clear
+ obj.PostSetListeners = event.proplistener.empty( [1 0] ); % clear
+ o = obj.Subject;
+ while ~isempty( o ) && ~isa( o, 'matlab.ui.Figure' )
+ obj.PreSetListeners(end+1) = event.proplistener( o, ...
+ findprop( o, 'Parent' ), 'PreSet', @obj.onParentPreSet );
+ obj.PostSetListeners(end+1) = event.proplistener( o, ...
+ findprop( o, 'Parent' ), 'PostSet', @obj.onParentPostSet );
+ o = o.Parent;
+ end
+
+ % Store figure
+ obj.Figure = o;
+
+ end % update
+
+ function onParentPreSet( obj, ~, ~ )
+ %onParentPreSet Event handler
+
+ % Store old figure
+ obj.OldFigure = obj.Figure;
+
+ end % onParentPreSet
+
+ function onParentPostSet( obj, ~, ~ )
+ %onParentPostSet Event handler
+
+ % Update object
+ obj.update()
+
+ % Raise event
+ oldFigure = obj.OldFigure;
+ newFigure = obj.Figure;
+ if ~isequal( oldFigure, newFigure )
+ notify( obj, 'FigureChanged', ...
+ uix.FigureData( oldFigure, newFigure ) )
+ end
+
+ % Clear old figure
+ obj.OldFigure = gobjects( 0 );
+
+ end % onParentPostSet
+
+ end % private methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Grid.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Grid.m
new file mode 100644
index 0000000..029476a
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Grid.m
@@ -0,0 +1,321 @@
+classdef Grid < uix.Box
+ %uix.Grid Grid
+ %
+ % b = uix.Grid(p1,v1,p2,v2,...) constructs a grid and sets parameter
+ % p1 to value v1, etc.
+ %
+ % A grid lays out contents from top to bottom and left to right.
+ %
+ % See also: uix.HBox, uix.VBox, uix.GridFlex
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ Widths % widths of contents, in pixels and/or weights
+ MinimumWidths % minimum widths of contents, in pixels
+ Heights % heights of contents, in pixels and/or weights
+ MinimumHeights % minimum heights of contents, in pixels
+ end
+
+ properties( Access = protected )
+ Widths_ = zeros( [0 1] ) % backing for Widths
+ MinimumWidths_ = zeros( [0 1] ) % backing for MinimumWidths
+ Heights_ = zeros( [0 1] ) % backing for Heights
+ MinimumHeights_ = zeros( [0 1] ) % backing for MinimumHeights
+ end
+
+ methods
+
+ function obj = Grid( varargin )
+ %uix.Grid Grid constructor
+ %
+ % b = uix.Grid() constructs a grid.
+ %
+ % b = uix.Grid(p1,v1,p2,v2,...) sets parameter p1 to value v1,
+ % etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Widths( obj )
+
+ value = obj.Widths_;
+
+ end % get.Widths
+
+ function set.Widths( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Widths'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''Widths'' must be real and finite.' )
+ n = numel( obj.Contents_ );
+ b = numel( obj.Widths_ );
+ q = numel( obj.Heights_ );
+ c = numel( value );
+ r = ceil( n / c );
+ if c < min( [1 n] )
+ error( 'uix:InvalidPropertyValue' , ...
+ 'Property ''Widths'' must be non-empty for non-empty contents.' )
+ elseif ceil( n / r ) < c
+ error( 'uix:InvalidPropertyValue' , ...
+ 'Size of property ''Widths'' must not lead to empty columns.' )
+ elseif c > n
+ error( 'uix:InvalidPropertyValue' , ...
+ 'Size of property ''Widths'' must be no larger than size of contents.' )
+ end
+
+ % Set
+ obj.Widths_ = value;
+ if c < b % number of columns decreasing
+ obj.MinimumWidths_(c+1:end,:) = [];
+ if r > q % number of rows increasing
+ obj.Heights_(end+1:r,:) = -1;
+ obj.MinimumHeights_(end+1:r,:) = 1;
+ end
+ elseif c > b % number of columns increasing
+ obj.MinimumWidths_(end+1:c,:) = -1;
+ if r < q % number of rows decreasing
+ obj.Heights_(r+1:end,:) = [];
+ obj.MinimumHeights_(r+1:end,:) = [];
+ end
+ end
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Widths
+
+ function value = get.MinimumWidths( obj )
+
+ value = obj.MinimumWidths_;
+
+ end % get.MinimumWidths
+
+ function set.MinimumWidths( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''MinimumWidths'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ all( value >= 0 ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''MinimumWidths'' must be non-negative.' )
+ assert( isequal( size( value ), size( obj.Widths_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''MinimumWidths'' must match size of contents.' )
+
+ % Set
+ obj.MinimumWidths_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.MinimumWidths
+
+ function value = get.Heights( obj )
+
+ value = obj.Heights_;
+
+ end % get.Heights
+
+ function set.Heights( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Heights'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''Heights'' must be real and finite.' )
+ n = numel( obj.Contents_ );
+ b = numel( obj.Widths_ );
+ q = numel( obj.Heights_ );
+ r = numel( value );
+ c = ceil( n / r );
+ if r < min( [1 n] )
+ error( 'uix:InvalidPropertyValue' , ...
+ 'Property ''Heights'' must be non-empty for non-empty contents.' )
+ elseif r > n
+ error( 'uix:InvalidPropertyValue' , ...
+ 'Size of property ''Heights'' must be no larger than size of contents.' )
+ end
+
+ % Set
+ obj.Heights_ = value;
+ if r < q % number of rows decreasing
+ obj.MinimumHeights_(r+1:end,:) = [];
+ if c > b % number of columns increasing
+ obj.Widths_(end+1:c,:) = -1;
+ obj.MinimumWidths_(end+1:c,:) = 1;
+ end
+ elseif r > q % number of rows increasing
+ obj.MinimumHeights_(end+1:r,:) = 1;
+ if c < b % number of columns decreasing
+ obj.Widths_(c+1:end,:) = [];
+ obj.MinimumWidths_(c+1:end,:) = [];
+ end
+ end
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Heights
+
+ function value = get.MinimumHeights( obj )
+
+ value = obj.MinimumHeights_;
+
+ end % get.MinimumHeights
+
+ function set.MinimumHeights( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''MinimumHeights'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ all( value >= 0 ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''MinimumHeights'' must be non-negative.' )
+ assert( isequal( size( value ), size( obj.Heights_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''MinimumHeights'' must match size of contents.' )
+
+ % Set
+ obj.MinimumHeights_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.MinimumHeights
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw
+ %
+ % c.redraw() redraws the container c.
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ widths = obj.Widths_;
+ minimumWidths = obj.MinimumWidths_;
+ heights = obj.Heights_;
+ minimumHeights = obj.MinimumHeights_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+ c = numel( widths );
+ r = numel( heights );
+ n = numel( obj.Contents_ );
+ xSizes = uix.calcPixelSizes( bounds(3), widths, ...
+ minimumWidths, padding, spacing );
+ xPositions = [cumsum( [0; xSizes(1:end-1,:)] ) + padding + ...
+ spacing * transpose( 0:c-1 ) + 1, xSizes];
+ ySizes = uix.calcPixelSizes( bounds(4), heights, ...
+ minimumHeights, padding, spacing );
+ yPositions = [bounds(4) - cumsum( ySizes ) - padding - ...
+ spacing * transpose( 0:r-1 ) + 1, ySizes];
+ [iy, ix] = ind2sub( [r c], transpose( 1:n ) );
+ positions = [xPositions(ix,1), yPositions(iy,1), ...
+ xPositions(ix,2), yPositions(iy,2)];
+
+ % Set positions
+ children = obj.Contents_;
+ for ii = 1:numel( children )
+ uix.setPosition( children(ii), positions(ii,:), 'pixels' )
+ end
+
+ end % redraw
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % c.addChild(d) adds the child d to the container c.
+
+ % Add column and even a row if necessary
+ n = numel( obj.Contents_ );
+ c = numel( obj.Widths_ );
+ r = numel( obj.Heights_ );
+ if n == 0
+ obj.Widths_(end+1,:) = -1;
+ obj.MinimumWidths_(end+1,:) = 1;
+ obj.Heights_(end+1,:) = -1;
+ obj.MinimumHeights_(end+1,:) = 1;
+ elseif ceil( (n+1)/r ) > c
+ obj.Widths_(end+1,:) = -1;
+ obj.MinimumWidths_(end+1,:) = 1;
+ end
+
+ % Call superclass method
+ addChild@uix.Box( obj, child )
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % c.removeChild(d) removes the child d from the container c.
+
+ % Remove column and even row if necessary
+ n = numel( obj.Contents_ );
+ c = numel( obj.Widths_ );
+ r = numel( obj.Heights_ );
+ if n == 1
+ obj.Widths_(end,:) = [];
+ obj.MinimumWidths_(end,:) = [];
+ obj.Heights_(end,:) = [];
+ obj.MinimumHeights_(end,:) = [];
+ elseif c == 1
+ obj.Heights_(end,:) = [];
+ obj.MinimumHeights_(end,:) = [];
+ elseif ceil( (n-1)/r ) < c
+ obj.Widths_(end,:) = [];
+ obj.MinimumWidths_(end,:) = [];
+ end
+
+ % Call superclass method
+ removeChild@uix.Box( obj, child )
+
+ end % removeChild
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/GridFlex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/GridFlex.m
new file mode 100644
index 0000000..fac87de
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/GridFlex.m
@@ -0,0 +1,467 @@
+classdef GridFlex < uix.Grid & uix.mixin.Flex
+ %uix.GridFlex Flexible grid
+ %
+ % b = uix.GridFlex(p1,v1,p2,v2,...) constructs a flexible grid and
+ % sets parameter p1 to value v1, etc.
+ %
+ % A grid lays out contents from top to bottom and left to right.
+ % Users can resize contents by dragging the dividers.
+ %
+ % See also: uix.HBoxFlex, uix.VBoxFlex, uix.Grid
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ DividerMarkings % divider markings [on|off]
+ end
+
+ properties( Access = private )
+ RowDividers = uix.Divider.empty( [0 1] )
+ ColumnDividers = uix.Divider.empty( [0 1] )
+ FrontDivider % front divider
+ DividerMarkings_ = 'on' % backing for DividerMarkings
+ MousePressListener = event.listener.empty( [0 0] ) % mouse press listener
+ MouseReleaseListener = event.listener.empty( [0 0] ) % mouse release listener
+ MouseMotionListener = event.listener.empty( [0 0] ) % mouse motion listener
+ ActiveDivider = 0 % active divider index
+ ActiveDividerPosition = [NaN NaN NaN NaN] % active divider position
+ MousePressLocation = [NaN NaN] % mouse press location
+ BackgroundColorListener % background color listener
+ end
+
+ methods
+
+ function obj = GridFlex( varargin )
+ %uix.GridFlex Flexible grid constructor
+ %
+ % b = uix.GridFlex() constructs a flexible grid.
+ %
+ % b = uix.GridFlex(p1,v1,p2,v2,...) sets parameter p1 to value
+ % v1, etc.
+
+ % Create front divider
+ frontDivider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'vertical', ...
+ 'BackgroundColor', obj.BackgroundColor * 0.75, ...
+ 'Visible', 'off' );
+
+ % Create listeners
+ backgroundColorListener = event.proplistener( obj, ...
+ findprop( obj, 'BackgroundColor' ), 'PostSet', ...
+ @obj.onBackgroundColorChange );
+
+ % Store properties
+ obj.FrontDivider = frontDivider;
+ obj.BackgroundColorListener = backgroundColorListener;
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.DividerMarkings( obj )
+
+ value = obj.DividerMarkings_;
+
+ end % get.DividerMarkings
+
+ function set.DividerMarkings( obj, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uix:InvalidArgument', ...
+ 'Property ''DividerMarkings'' must be ''on'' or ''off'.' )
+
+ % Set
+ obj.DividerMarkings_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.DividerMarkings
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function onMousePress( obj, source, eventData )
+ %onMousePress Handler for WindowMousePress events
+
+ % Check whether mouse is over a divider
+ locr = find( obj.RowDividers.isMouseOver( eventData ) );
+ locc = find( obj.ColumnDividers.isMouseOver( eventData ) );
+ if ~isempty( locr )
+ loc = locr;
+ divider = obj.RowDividers(locr);
+ elseif ~isempty( locc )
+ loc = -locc;
+ divider = obj.ColumnDividers(locc);
+ else
+ return
+ end
+
+ % Capture state at button down
+ obj.ActiveDivider = loc;
+ obj.ActiveDividerPosition = divider.Position;
+ root = groot();
+ obj.MousePressLocation = root.PointerLocation;
+
+ % Make sure the pointer is appropriate
+ obj.updateMousePointer( source, eventData );
+
+ % Activate divider
+ frontDivider = obj.FrontDivider;
+ frontDivider.Position = divider.Position;
+ frontDivider.Orientation = divider.Orientation;
+ divider.Visible = 'off';
+ frontDivider.Parent = [];
+ frontDivider.Parent = obj;
+ frontDivider.Visible = 'on';
+
+ end % onMousePress
+
+ function onMouseRelease( obj, ~, ~ )
+ %onMousePress Handler for WindowMouseRelease events
+
+ % Compute new positions
+ loc = obj.ActiveDivider;
+ if loc > 0
+ root = groot();
+ delta = root.PointerLocation(2) - obj.MousePressLocation(2);
+ ih = loc;
+ jh = loc + 1;
+ ic = loc;
+ jc = loc + 1;
+ divider = obj.RowDividers(loc);
+ contents = obj.Contents_;
+ oldPixelHeights = [contents(ic).Position(4); contents(jc).Position(4)];
+ minimumHeights = obj.MinimumHeights_(ih:jh,:);
+ if delta < 0 % limit to minimum distance from lower neighbor
+ delta = max( delta, minimumHeights(2) - oldPixelHeights(2) );
+ else % limit to minimum distance from upper neighbor
+ delta = min( delta, oldPixelHeights(1) - minimumHeights(1) );
+ end
+ oldHeights = obj.Heights_(loc:loc+1);
+ newPixelHeights = oldPixelHeights - delta * [1;-1];
+ if oldHeights(1) < 0 && oldHeights(2) < 0 % weight, weight
+ newHeights = oldHeights .* newPixelHeights ./ oldPixelHeights;
+ elseif oldHeights(1) < 0 && oldHeights(2) >= 0 % weight, pixels
+ newHeights = [oldHeights(1) * newPixelHeights(1) / ...
+ oldPixelHeights(1); newPixelHeights(2)];
+ elseif oldHeights(1) >= 0 && oldHeights(2) < 0 % pixels, weight
+ newHeights = [newPixelHeights(1); oldHeights(2) * ...
+ newPixelHeights(2) / oldPixelHeights(2)];
+ else % sizes(1) >= 0 && sizes(2) >= 0 % pixels, pixels
+ newHeights = newPixelHeights;
+ end
+ obj.Heights_(loc:loc+1) = newHeights;
+ elseif loc < 0
+ root = groot();
+ delta = root.PointerLocation(1) - obj.MousePressLocation(1);
+ iw = -loc;
+ jw = -loc + 1;
+ r = numel( obj.Heights_ );
+ ic = r * (-loc-1) + 1;
+ jc = r * -loc + 1;
+ divider = obj.ColumnDividers(iw);
+ contents = obj.Contents_;
+ oldPixelWidths = [contents(ic).Position(3); contents(jc).Position(3)];
+ minimumWidths = obj.MinimumWidths_(iw:jw,:);
+ if delta < 0 % limit to minimum distance from left neighbor
+ delta = max( delta, minimumWidths(1) - oldPixelWidths(1) );
+ else % limit to minimum distance from right neighbor
+ delta = min( delta, oldPixelWidths(2) - minimumWidths(2) );
+ end
+ oldWidths = obj.Widths_(iw:jw);
+ newPixelWidths = oldPixelWidths + delta * [1;-1];
+ if oldWidths(1) < 0 && oldWidths(2) < 0 % weight, weight
+ newWidths = oldWidths .* newPixelWidths ./ oldPixelWidths;
+ elseif oldWidths(1) < 0 && oldWidths(2) >= 0 % weight, pixels
+ newWidths = [oldWidths(1) * newPixelWidths(1) / ...
+ oldPixelWidths(1); newPixelWidths(2)];
+ elseif oldWidths(1) >= 0 && oldWidths(2) < 0 % pixels, weight
+ newWidths = [newPixelWidths(1); oldWidths(2) * ...
+ newPixelWidths(2) / oldPixelWidths(2)];
+ else % sizes(1) >= 0 && sizes(2) >= 0 % pixels, pixels
+ newWidths = newPixelWidths;
+ end
+ obj.Widths_(iw:jw) = newWidths;
+ else
+ return
+ end
+
+ % Deactivate divider
+ obj.FrontDivider.Visible = 'off';
+ divider.Visible = 'on';
+
+ % Reset state at button down
+ obj.ActiveDivider = 0;
+ obj.ActiveDividerPosition = [NaN NaN NaN NaN];
+ obj.MousePressLocation = [NaN NaN];
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onMouseRelease
+
+ function onMouseMotion( obj, source, eventData )
+ %onMouseMotion Handler for WindowMouseMotion events
+
+ loc = obj.ActiveDivider;
+ if loc == 0 % hovering, update pointer
+ obj.updateMousePointer( source, eventData );
+ elseif loc > 0 % dragging row divider
+ root = groot();
+ delta = root.PointerLocation(2) - obj.MousePressLocation(2);
+ ih = loc;
+ jh = loc + 1;
+ ic = loc;
+ jc = loc + 1;
+ contents = obj.Contents_;
+ oldPixelHeights = [contents(ic).Position(4); contents(jc).Position(4)];
+ minimumHeights = obj.MinimumHeights_(ih:jh,:);
+ if delta < 0 % limit to minimum distance from lower neighbor
+ delta = max( delta, minimumHeights(2) - oldPixelHeights(2) );
+ else % limit to minimum distance from upper neighbor
+ delta = min( delta, oldPixelHeights(1) - minimumHeights(1) );
+ end
+ obj.FrontDivider.Position = ...
+ obj.ActiveDividerPosition + [0 delta 0 0];
+ else % loc < 0, dragging column divider
+ root = groot();
+ delta = root.PointerLocation(1) - obj.MousePressLocation(1);
+ iw = -loc;
+ jw = -loc + 1;
+ r = numel( obj.Heights_ );
+ ic = r * (-loc-1) + 1;
+ jc = r * -loc + 1;
+ contents = obj.Contents_;
+ oldPixelWidths = [contents(ic).Position(3); contents(jc).Position(3)];
+ minimumWidths = obj.MinimumWidths_(iw:jw,:);
+ if delta < 0 % limit to minimum distance from left neighbor
+ delta = max( delta, minimumWidths(1) - oldPixelWidths(1) );
+ else % limit to minimum distance from right neighbor
+ delta = min( delta, oldPixelWidths(2) - minimumWidths(2) );
+ end
+ obj.FrontDivider.Position = ...
+ obj.ActiveDividerPosition + [delta 0 0 0];
+ end
+
+ end % onMouseMotion
+
+ function onBackgroundColorChange( obj, ~, ~ )
+ %onBackgroundColorChange Handler for BackgroundColor changes
+
+ backgroundColor = obj.BackgroundColor;
+ highlightColor = min( [backgroundColor / 0.75; 1 1 1] );
+ shadowColor = max( [backgroundColor * 0.75; 0 0 0] );
+ rowDividers = obj.RowDividers;
+ for ii = 1:numel( rowDividers )
+ rowDivider = rowDividers(ii);
+ rowDivider.BackgroundColor = backgroundColor;
+ rowDivider.HighlightColor = highlightColor;
+ rowDivider.ShadowColor = shadowColor;
+ end
+ columnDividers = obj.ColumnDividers;
+ for jj = 1:numel( columnDividers )
+ columnDivider = columnDividers(jj);
+ columnDivider.BackgroundColor = backgroundColor;
+ columnDivider.HighlightColor = highlightColor;
+ columnDivider.ShadowColor = shadowColor;
+ end
+ frontDivider = obj.FrontDivider;
+ frontDivider.BackgroundColor = shadowColor;
+
+ end % onBackgroundColorChange
+
+ end % event handlers
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw contents
+ %
+ % c.redraw() redraws the container c.
+
+ % Call superclass method
+ redraw@uix.Grid( obj )
+
+ % Create or destroy column dividers
+ b = numel( obj.ColumnDividers ); % current number of dividers
+ c = max( [numel( obj.Widths_ )-1 0] ); % required number of dividers
+ if b < c % create
+ for ii = b+1:c
+ columnDivider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'vertical', ...
+ 'BackgroundColor', obj.BackgroundColor );
+ obj.ColumnDividers(ii,:) = columnDivider;
+ end
+ elseif b > c % destroy
+ % Destroy dividers
+ delete( obj.ColumnDividers(c+1:b,:) )
+ obj.ColumnDividers(c+1:b,:) = [];
+ % Update pointer
+ if c == 0 && strcmp( obj.Pointer, 'left' )
+ obj.unsetPointer()
+ end
+ end
+
+ % Create or destroy row dividers
+ q = numel( obj.RowDividers ); % current number of dividers
+ r = max( [numel( obj.Heights_ )-1 0] ); % required number of dividers
+ if q < r % create
+ for ii = q+1:r
+ columnDivider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'horizontal', ...
+ 'BackgroundColor', obj.BackgroundColor );
+ obj.RowDividers(ii,:) = columnDivider;
+ end
+ % Bring front divider to the front
+ frontDivider = obj.FrontDivider;
+ frontDivider.Parent = [];
+ frontDivider.Parent = obj;
+ elseif q > r % destroy
+ % Destroy dividers
+ delete( obj.RowDividers(r+1:q,:) )
+ obj.RowDividers(r+1:q,:) = [];
+ % Update pointer
+ if r == 0 && strcmp( obj.Pointer, 'top' )
+ obj.unsetPointer()
+ end
+ end
+
+ % Compute container bounds
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+
+ % Retrieve size properties
+ widths = obj.Widths_;
+ minimumWidths = obj.MinimumWidths_;
+ heights = obj.Heights_;
+ minimumHeights = obj.MinimumHeights_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+
+ % Compute row divider positions
+ xRowPositions = [padding + 1, max( bounds(3) - 2 * padding, 1 )];
+ xRowPositions = repmat( xRowPositions, [r 1] );
+ yRowSizes = uix.calcPixelSizes( bounds(4), heights, ...
+ minimumHeights, padding, spacing );
+ yRowPositions = [bounds(4) - cumsum( yRowSizes(1:r,:) ) - padding - ...
+ spacing * transpose( 1:r ) + 1, repmat( spacing, [r 1] )];
+ rowPositions = [xRowPositions(:,1), yRowPositions(:,1), ...
+ xRowPositions(:,2), yRowPositions(:,2)];
+
+ % Compute column divider positions
+ xColumnSizes = uix.calcPixelSizes( bounds(3), widths, ...
+ minimumWidths, padding, spacing );
+ xColumnPositions = [cumsum( xColumnSizes(1:c,:) ) + padding + ...
+ spacing * transpose( 0:c-1 ) + 1, repmat( spacing, [c 1] )];
+ yColumnPositions = [padding + 1, max( bounds(4) - 2 * padding, 1 )];
+ yColumnPositions = repmat( yColumnPositions, [c 1] );
+ columnPositions = [xColumnPositions(:,1), yColumnPositions(:,1), ...
+ xColumnPositions(:,2), yColumnPositions(:,2)];
+
+ % Position row dividers
+ for ii = 1:r
+ rowDivider = obj.RowDividers(ii);
+ rowDivider.Position = rowPositions(ii,:);
+ switch obj.DividerMarkings_
+ case 'on'
+ rowDivider.Markings = cumsum( xColumnSizes ) + ...
+ spacing * transpose( 0:c ) - xColumnSizes / 2;
+ case 'off'
+ rowDivider.Markings = zeros( [0 1] );
+ end
+ end
+
+ % Position column dividers
+ for ii = 1:c
+ columnDivider = obj.ColumnDividers(ii);
+ columnDivider.Position = columnPositions(ii,:);
+ switch obj.DividerMarkings_
+ case 'on'
+ columnDivider.Markings = cumsum( yRowSizes ) + ...
+ spacing * transpose( 0:r ) - yRowSizes / 2;
+ case 'off'
+ columnDivider.Markings = zeros( [0 1] );
+ end
+ end
+
+ end % redraw
+
+ function reparent( obj, oldFigure, newFigure )
+ %reparent Reparent container
+ %
+ % c.reparent(a,b) reparents the container c from the figure a
+ % to the figure b.
+
+ % Update listeners
+ if isempty( newFigure )
+ mousePressListener = event.listener.empty( [0 0] );
+ mouseReleaseListener = event.listener.empty( [0 0] );
+ mouseMotionListener = event.listener.empty( [0 0] );
+ else
+ mousePressListener = event.listener( newFigure, ...
+ 'WindowMousePress', @obj.onMousePress );
+ mouseReleaseListener = event.listener( newFigure, ...
+ 'WindowMouseRelease', @obj.onMouseRelease );
+ mouseMotionListener = event.listener( newFigure, ...
+ 'WindowMouseMotion', @obj.onMouseMotion );
+ end
+ obj.MousePressListener = mousePressListener;
+ obj.MouseReleaseListener = mouseReleaseListener;
+ obj.MouseMotionListener = mouseMotionListener;
+
+ % Call superclass method
+ reparent@uix.Grid( obj, oldFigure, newFigure )
+
+ % Update pointer
+ if ~isempty( oldFigure ) && ~strcmp( obj.Pointer, 'unset' )
+ obj.unsetPointer()
+ end
+
+ end % reparent
+
+ end % template methods
+
+ methods( Access = protected )
+
+ function updateMousePointer ( obj, source, eventData )
+
+ oldPointer = obj.Pointer;
+ if any( obj.RowDividers.isMouseOver( eventData ) )
+ newPointer = 'top';
+ elseif any( obj.ColumnDividers.isMouseOver( eventData ) )
+ newPointer = 'left';
+ else
+ newPointer = 'unset';
+ end
+ switch newPointer
+ case oldPointer % no change
+ % do nothing
+ case 'unset' % change, unset
+ obj.unsetPointer()
+ otherwise % change, set
+ obj.setPointer( source, newPointer )
+ end
+
+ end % updateMousePointer
+
+ end % helpers methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HBox.m
new file mode 100644
index 0000000..32ba6f1
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HBox.m
@@ -0,0 +1,194 @@
+classdef HBox < uix.Box
+ %uix.HBox Horizontal box
+ %
+ % b = uix.HBox(p1,v1,p2,v2,...) constructs a horizontal box and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A horizontal box lays out contents from left to right.
+ %
+ % See also: uix.VBox, uix.Grid, uix.HButtonBox, uix.HBoxFlex
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ Widths % widths of contents, in pixels and/or weights
+ MinimumWidths % minimum widths of contents, in pixels
+ end
+
+ properties( Access = protected )
+ Widths_ = zeros( [0 1] ) % backing for Widths
+ MinimumWidths_ = zeros( [0 1] ) % backing for MinimumWidths
+ end
+
+ methods
+
+ function obj = HBox( varargin )
+ %uix.HBox Horizontal box constructor
+ %
+ % b = uix.HBox() constructs a horizontal box.
+ %
+ % b = uix.HBox(p1,v1,p2,v2,...) sets parameter p1 to value v1,
+ % etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Widths( obj )
+
+ value = obj.Widths_;
+
+ end % get.Widths
+
+ function set.Widths( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Widths'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''Widths'' must be real and finite.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''Widths'' must match size of contents.' )
+
+ % Set
+ obj.Widths_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Widths
+
+ function value = get.MinimumWidths( obj )
+
+ value = obj.MinimumWidths_;
+
+ end % get.MinimumWidths
+
+ function set.MinimumWidths( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''MinimumWidths'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ all( value >= 0 ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''MinimumWidths'' must be non-negative.' )
+ assert( isequal( size( value ), size( obj.Widths_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''MinimumWidths'' must match size of contents.' )
+
+ % Set
+ obj.MinimumWidths_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.MinimumWidths
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw
+ %
+ % c.redraw() redraws the container c.
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ widths = obj.Widths_;
+ minimumWidths = obj.MinimumWidths_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+ c = numel( widths );
+ xSizes = uix.calcPixelSizes( bounds(3), widths, ...
+ minimumWidths, padding, spacing );
+ xPositions = [cumsum( [0; xSizes(1:c-1,:)] ) + padding + ...
+ spacing * transpose( 0:c-1 ) + 1, xSizes];
+ yPositions = [padding + 1, max( bounds(4) - 2 * padding, 1 )];
+ yPositions = repmat( yPositions, [c 1] );
+ positions = [xPositions(:,1), yPositions(:,1), ...
+ xPositions(:,2), yPositions(:,2)];
+
+ % Set positions
+ children = obj.Contents_;
+ for ii = 1:numel( children )
+ uix.setPosition( children(ii), positions(ii,:), 'pixels' )
+ end
+
+ end % redraw
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % c.addChild(d) adds the child d to the container c.
+
+ % Add to sizes
+ obj.Widths_(end+1,:) = -1;
+ obj.MinimumWidths_(end+1,:) = 1;
+
+ % Call superclass method
+ addChild@uix.Box( obj, child )
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % c.removeChild(d) removes the child d from the container c.
+
+ % Remove from sizes
+ tf = obj.Contents_ == child;
+ obj.Widths_(tf,:) = [];
+ obj.MinimumWidths_(tf,:) = [];
+
+ % Call superclass method
+ removeChild@uix.Box( obj, child )
+
+ end % removeChild
+
+ function reorder( obj, indices )
+ %reorder Reorder contents
+ %
+ % c.reorder(i) reorders the container contents using indices
+ % i, c.Contents = c.Contents(i).
+
+ % Reorder
+ obj.Widths_ = obj.Widths_(indices,:);
+ obj.MinimumWidths_ = obj.MinimumWidths_(indices,:);
+
+ % Call superclass method
+ reorder@uix.Box( obj, indices )
+
+ end % reorder
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HBoxFlex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HBoxFlex.m
new file mode 100644
index 0000000..29955b3
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HBoxFlex.m
@@ -0,0 +1,349 @@
+classdef HBoxFlex < uix.HBox & uix.mixin.Flex
+ %uix.HBoxFlex Flexible horizontal box
+ %
+ % b = uix.HBoxFlex(p1,v1,p2,v2,...) constructs a flexible horizontal
+ % box and sets parameter p1 to value v1, etc.
+ %
+ % A horizontal box lays out contents from left to right. Users can
+ % resize contents by dragging the dividers.
+ %
+ % See also: uix.VBoxFlex, uix.GridFlex, uix.HBox, uix.HButtonBox
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ DividerMarkings % divider markings [on|off]
+ end
+
+ properties( Access = private )
+ ColumnDividers = uix.Divider.empty( [0 1] ) % column dividers
+ FrontDivider % front divider
+ DividerMarkings_ = 'on' % backing for DividerMarkings
+ MousePressListener = event.listener.empty( [0 0] ) % mouse press listener
+ MouseReleaseListener = event.listener.empty( [0 0] ) % mouse release listener
+ MouseMotionListener = event.listener.empty( [0 0] ) % mouse motion listener
+ ActiveDivider = 0 % active divider index
+ ActiveDividerPosition = [NaN NaN NaN NaN] % active divider position
+ MousePressLocation = [NaN NaN] % mouse press location
+ BackgroundColorListener % background color listener
+ end
+
+ methods
+
+ function obj = HBoxFlex( varargin )
+ %uix.HBoxFlex Flexible horizontal box constructor
+ %
+ % b = uix.HBoxFlex() constructs a flexible horizontal box.
+ %
+ % b = uix.HBoxFlex(p1,v1,p2,v2,...) sets parameter p1 to value
+ % v1, etc.
+
+ % Create front divider
+ frontDivider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'vertical', ...
+ 'BackgroundColor', obj.BackgroundColor * 0.75, ...
+ 'Visible', 'off' );
+
+ % Create listeners
+ backgroundColorListener = event.proplistener( obj, ...
+ findprop( obj, 'BackgroundColor' ), 'PostSet', ...
+ @obj.onBackgroundColorChange );
+
+ % Store properties
+ obj.FrontDivider = frontDivider;
+ obj.BackgroundColorListener = backgroundColorListener;
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.DividerMarkings( obj )
+
+ value = obj.DividerMarkings_;
+
+ end % get.DividerMarkings
+
+ function set.DividerMarkings( obj, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uix:InvalidArgument', ...
+ 'Property ''DividerMarkings'' must be ''on'' or ''off'.' )
+
+ % Set
+ obj.DividerMarkings_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.DividerMarkings
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function onMousePress( obj, source, eventData )
+ %onMousePress Handler for WindowMousePress events
+
+ % Check whether mouse is over a divider
+ loc = find( obj.ColumnDividers.isMouseOver( eventData ) );
+ if isempty( loc ), return, end
+
+ % Capture state at button down
+ divider = obj.ColumnDividers(loc);
+ obj.ActiveDivider = loc;
+ obj.ActiveDividerPosition = divider.Position;
+ root = groot();
+ obj.MousePressLocation = root.PointerLocation;
+
+ % Make sure the pointer is appropriate
+ obj.updateMousePointer( source, eventData );
+
+ % Activate divider
+ frontDivider = obj.FrontDivider;
+ frontDivider.Position = divider.Position;
+ divider.Visible = 'off';
+ frontDivider.Parent = [];
+ frontDivider.Parent = obj;
+ frontDivider.Visible = 'on';
+
+ end % onMousePress
+
+ function onMouseRelease( obj, ~, ~ )
+ %onMousePress Handler for WindowMouseRelease events
+
+ % Compute new positions
+ loc = obj.ActiveDivider;
+ if loc > 0
+ root = groot();
+ delta = root.PointerLocation(1) - obj.MousePressLocation(1);
+ iw = loc;
+ jw = loc + 1;
+ ic = loc;
+ jc = loc + 1;
+ divider = obj.ColumnDividers(loc);
+ contents = obj.Contents_;
+ oldPixelWidths = [contents(ic).Position(3); contents(jc).Position(3)];
+ minimumWidths = obj.MinimumWidths_(iw:jw,:);
+ if delta < 0 % limit to minimum distance from left neighbor
+ delta = max( delta, minimumWidths(1) - oldPixelWidths(1) );
+ else % limit to minimum distance from right neighbor
+ delta = min( delta, oldPixelWidths(2) - minimumWidths(2) );
+ end
+ oldWidths = obj.Widths_(iw:jw);
+ newPixelWidths = oldPixelWidths + delta * [1;-1];
+ if oldWidths(1) < 0 && oldWidths(2) < 0 % weight, weight
+ newWidths = oldWidths .* newPixelWidths ./ oldPixelWidths;
+ elseif oldWidths(1) < 0 && oldWidths(2) >= 0 % weight, pixels
+ newWidths = [oldWidths(1) * newPixelWidths(1) / ...
+ oldPixelWidths(1); newPixelWidths(2)];
+ elseif oldWidths(1) >= 0 && oldWidths(2) < 0 % pixels, weight
+ newWidths = [newPixelWidths(1); oldWidths(2) * ...
+ newPixelWidths(2) / oldPixelWidths(2)];
+ else % sizes(1) >= 0 && sizes(2) >= 0 % pixels, pixels
+ newWidths = newPixelWidths;
+ end
+ obj.Widths_(iw:jw) = newWidths;
+ else
+ return
+ end
+
+ % Deactivate divider
+ obj.FrontDivider.Visible = 'off';
+ divider.Visible = 'on';
+
+ % Reset state at button down
+ obj.ActiveDivider = 0;
+ obj.ActiveDividerPosition = [NaN NaN NaN NaN];
+ obj.MousePressLocation = [NaN NaN];
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onMouseRelease
+
+ function onMouseMotion( obj, source, eventData )
+ %onMouseMotion Handler for WindowMouseMotion events
+
+ loc = obj.ActiveDivider;
+ if loc == 0 % hovering, update pointer
+ obj.updateMousePointer( source, eventData );
+ else % dragging column divider
+ root = groot();
+ delta = root.PointerLocation(1) - obj.MousePressLocation(1);
+ iw = loc;
+ jw = loc + 1;
+ ic = loc;
+ jc = loc + 1;
+ contents = obj.Contents_;
+ oldPixelWidths = [contents(ic).Position(3); contents(jc).Position(3)];
+ minimumWidths = obj.MinimumWidths_(iw:jw,:);
+ if delta < 0 % limit to minimum distance from left neighbor
+ delta = max( delta, minimumWidths(1) - oldPixelWidths(1) );
+ else % limit to minimum distance from right neighbor
+ delta = min( delta, oldPixelWidths(2) - minimumWidths(2) );
+ end
+ obj.FrontDivider.Position = ...
+ obj.ActiveDividerPosition + [delta 0 0 0];
+ end
+
+ end % onMouseMotion
+
+ function onBackgroundColorChange( obj, ~, ~ )
+ %onBackgroundColorChange Handler for BackgroundColor changes
+
+ backgroundColor = obj.BackgroundColor;
+ highlightColor = min( [backgroundColor / 0.75; 1 1 1] );
+ shadowColor = max( [backgroundColor * 0.75; 0 0 0] );
+ columnDividers = obj.ColumnDividers;
+ for jj = 1:numel( columnDividers )
+ columnDivider = columnDividers(jj);
+ columnDivider.BackgroundColor = backgroundColor;
+ columnDivider.HighlightColor = highlightColor;
+ columnDivider.ShadowColor = shadowColor;
+ end
+ frontDivider = obj.FrontDivider;
+ frontDivider.BackgroundColor = shadowColor;
+
+ end % onBackgroundColorChange
+
+ end % event handlers
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw contents
+ %
+ % c.redraw() redraws the container c.
+
+ % Call superclass method
+ redraw@uix.HBox( obj )
+
+ % Create or destroy column dividers
+ b = numel( obj.ColumnDividers ); % current number of dividers
+ c = max( [numel( obj.Widths_ )-1 0] ); % required number of dividers
+ if b < c % create
+ for ii = b+1:c
+ divider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'vertical', ...
+ 'BackgroundColor', obj.BackgroundColor );
+ obj.ColumnDividers(ii,:) = divider;
+ end
+ elseif b > c % destroy
+ % Destroy dividers
+ delete( obj.ColumnDividers(c+1:b,:) )
+ obj.ColumnDividers(c+1:b,:) = [];
+ % Update pointer
+ if c == 0 && strcmp( obj.Pointer, 'left' )
+ obj.unsetPointer()
+ end
+ end
+
+ % Compute container bounds
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+
+ % Retrieve size properties
+ widths = obj.Widths_;
+ minimumWidths = obj.MinimumWidths_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+
+ % Compute column divider positions
+ xColumnSizes = uix.calcPixelSizes( bounds(3), widths, ...
+ minimumWidths, padding, spacing );
+ xColumnPositions = [cumsum( xColumnSizes(1:c,:) ) + padding + ...
+ spacing * transpose( 0:c-1 ) + 1, repmat( spacing, [c 1] )];
+ yColumnPositions = [padding + 1, max( bounds(4) - 2 * padding, 1 )];
+ yColumnPositions = repmat( yColumnPositions, [c 1] );
+ columnPositions = [xColumnPositions(:,1), yColumnPositions(:,1), ...
+ xColumnPositions(:,2), yColumnPositions(:,2)];
+
+ % Position column dividers
+ for ii = 1:c
+ columnDivider = obj.ColumnDividers(ii);
+ columnDivider.Position = columnPositions(ii,:);
+ switch obj.DividerMarkings_
+ case 'on'
+ columnDivider.Markings = columnPositions(ii,4)/2;
+ case 'off'
+ columnDivider.Markings = zeros( [0 1] );
+ end
+ end
+
+ end % redraw
+
+ function reparent( obj, oldFigure, newFigure )
+ %reparent Reparent container
+ %
+ % c.reparent(a,b) reparents the container c from the figure a
+ % to the figure b.
+
+ % Update listeners
+ if isempty( newFigure )
+ mousePressListener = event.listener.empty( [0 0] );
+ mouseReleaseListener = event.listener.empty( [0 0] );
+ mouseMotionListener = event.listener.empty( [0 0] );
+ else
+ mousePressListener = event.listener( newFigure, ...
+ 'WindowMousePress', @obj.onMousePress );
+ mouseReleaseListener = event.listener( newFigure, ...
+ 'WindowMouseRelease', @obj.onMouseRelease );
+ mouseMotionListener = event.listener( newFigure, ...
+ 'WindowMouseMotion', @obj.onMouseMotion );
+ end
+ obj.MousePressListener = mousePressListener;
+ obj.MouseReleaseListener = mouseReleaseListener;
+ obj.MouseMotionListener = mouseMotionListener;
+
+ % Call superclass method
+ reparent@uix.HBox( obj, oldFigure, newFigure )
+
+ % Update pointer
+ if ~isempty( oldFigure ) && ~strcmp( obj.Pointer, 'unset' )
+ obj.unsetPointer()
+ end
+
+ end % reparent
+
+ end % template methods
+
+ methods( Access = protected )
+
+ function updateMousePointer ( obj, source, eventData )
+
+ oldPointer = obj.Pointer;
+ if any( obj.ColumnDividers.isMouseOver( eventData ) )
+ newPointer = 'left';
+ else
+ newPointer = 'unset';
+ end
+ switch newPointer
+ case oldPointer % no change
+ % do nothing
+ case 'unset' % change, unset
+ obj.unsetPointer()
+ otherwise % change, set
+ obj.setPointer( source, newPointer )
+ end
+
+ end % updateMousePointer
+
+ end % helpers methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HButtonBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HButtonBox.m
new file mode 100644
index 0000000..d1441c2
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/HButtonBox.m
@@ -0,0 +1,100 @@
+classdef HButtonBox < uix.ButtonBox
+ %uix.HButtonBox Horizontal button box
+ %
+ % b = uix.HButtonBox(p1,v1,p2,v2,...) constructs a horizontal button
+ % box and sets parameter p1 to value v1, etc.
+ %
+ % A horizontal button box lays out equally sized buttons from left to
+ % right.
+ %
+ % See also: uix.VButtonBox
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ methods
+
+ function obj = HButtonBox( varargin )
+ %uix.HButtonBox Horizontal button box constructor
+ %
+ % b = uix.HButtonBox() constructs a horizontal button box.
+ %
+ % b = uix.HButtonBox(p1,v1,p2,v2,...) sets parameter p1 to
+ % value v1, etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ buttonSize = obj.ButtonSize_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+ c = numel( obj.Contents_ );
+ if 2 * padding + (c-1) * spacing + c * buttonSize(1) > bounds(3)
+ xSizes = uix.calcPixelSizes( bounds(3), -ones( [c 1] ), ...
+ ones( [c 1] ), padding, spacing ); % shrink to fit
+ else
+ xSizes = repmat( buttonSize(1), [c 1] );
+ end
+ switch obj.HorizontalAlignment
+ case 'left'
+ xPositions = [cumsum( [0; xSizes(1:c-1,:)] ) + ...
+ padding + spacing * transpose( 0:c-1 ) + 1, xSizes];
+ case 'center'
+ xPositions = [cumsum( [0; xSizes(1:c-1,:)] ) + ...
+ spacing * transpose( 0:c-1 ) + bounds(3) / 2 - ...
+ sum( xSizes ) / 2 - spacing * (c-1) / 2 + 1, ...
+ xSizes];
+ case 'right'
+ xPositions = [cumsum( [0; xSizes(1:c-1,:)] ) + ...
+ spacing * transpose( 0:c-1 ) + bounds(3) - ...
+ sum( xSizes ) - spacing * (c-1) - padding + 1, ...
+ xSizes];
+ end
+ if 2 * padding + buttonSize(2) > bounds(4)
+ ySizes = repmat( uix.calcPixelSizes( bounds(4), -1, 1, ...
+ padding, spacing ), [c 1] ); % shrink to fit
+ else
+ ySizes = repmat( buttonSize(2), [c 1] );
+ end
+ switch obj.VerticalAlignment
+ case 'top'
+ yPositions = [bounds(4) - ySizes - padding + 1, ySizes];
+ case 'middle'
+ yPositions = [(bounds(4) - ySizes) / 2 + 1, ySizes];
+ case 'bottom'
+ yPositions = [repmat( padding, [c 1] ) + 1, ySizes];
+ end
+ positions = [xPositions(:,1), yPositions(:,1), ...
+ xPositions(:,2), yPositions(:,2)];
+
+ % Set positions
+ children = obj.Contents_;
+ for ii = 1:numel( children )
+ uix.setPosition( children(ii), positions(ii,:), 'pixels' )
+ end
+
+ end % redraw
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Node.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Node.m
new file mode 100644
index 0000000..c4a140e
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Node.m
@@ -0,0 +1,94 @@
+classdef ( Hidden ) Node < dynamicprops
+ %uix.Node Node
+ %
+ % n = uix.Node(o) creates a node for the handle o.
+ %
+ % Node is a helper class for managing trees of objects and associated
+ % listeners.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1165 $ $Date: 2015-12-06 03:09:17 -0500 (Sun, 06 Dec 2015) $
+
+ properties( SetAccess = private )
+ Object % object
+ Children = uix.Node.empty( [0 1] ) % children
+ end
+
+ properties( Access = private )
+ ChildListeners = event.listener.empty( [0 1] ) % internal listeners
+ end
+
+ methods
+
+ function obj = Node( object )
+ %uix.Node Node
+ %
+ % n = uix.Node(o) creates a node for the handle o.
+
+ % Check
+ assert( isa( object, 'handle' ) && ...
+ isequal( size( object ), [1 1] ) && isvalid( object ), ...
+ 'uix:InvalidArgument', 'Object must be a handle.' )
+
+ % Set properties
+ obj.Object = object;
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % n.addChild(c) adds the child node c to the parent node n.
+
+ % Check
+ assert( isa( child, 'uix.Node' ) && ...
+ isequal( size( child ), [1 1] ), ...
+ 'uix:InvalidArgument', 'Invalid node.' )
+
+ % Add
+ childListener = event.listener( child, ...
+ 'ObjectBeingDestroyed', @obj.onChildDeleted );
+ obj.Children(end+1,:) = child;
+ obj.ChildListeners(end+1,:) = childListener;
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % n.removeChild(c) removes the child node c from the parent
+ % node n.
+
+ % Check
+ assert( isa( child, 'uix.Node' ) && ...
+ isequal( size( child ), [1 1] ), ...
+ 'uix:InvalidArgument', 'Invalid node.' )
+ assert( ismember( child, obj.Children ), ...
+ 'uix:ItemNotFound', 'Node not found.' )
+
+ % Remove
+ tf = child == obj.Children;
+ obj.Children(tf,:) = [];
+ obj.ChildListeners(tf,:) = [];
+
+ end % removeChild
+
+ end % public methods
+
+ methods( Access = private )
+
+ function onChildDeleted( obj, source, ~ )
+ %onChildDeleted Event handler for deletion of child nodes
+
+ % Remove
+ obj.removeChild( source )
+
+ end % onChildDeleted
+
+ end % event handlers
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Panel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Panel.m
new file mode 100644
index 0000000..bb677c2
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Panel.m
@@ -0,0 +1,63 @@
+classdef Panel < matlab.ui.container.Panel & uix.mixin.Panel
+ %uix.Panel Standard panel
+ %
+ % b = uix.Panel(p1,v1,p2,v2,...) constructs a standard panel and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A card panel is a standard panel (uipanel) that shows one its
+ % contents and hides the others.
+ %
+ % See also: uix.CardPanel, uix.BoxPanel, uipanel
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ methods
+
+ function obj = Panel( varargin )
+ %uix.Panel Standard panel constructor
+ %
+ % p = uix.Panel() constructs a standard panel.
+ %
+ % p = uix.Panel(p1,v1,p2,v2,...) sets parameter p1 to value
+ % v1, etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ padding = obj.Padding_;
+ xSizes = uix.calcPixelSizes( bounds(3), -1, 1, padding, 0 );
+ ySizes = uix.calcPixelSizes( bounds(4), -1, 1, padding, 0 );
+ position = [padding+1 padding+1 xSizes ySizes];
+
+ % Redraw contents
+ selection = obj.Selection_;
+ if selection ~= 0
+ uix.setPosition( obj.Contents_(selection), position, 'pixels' )
+ end
+
+ end % redraw
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/PointerManager.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/PointerManager.m
new file mode 100644
index 0000000..2afd129
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/PointerManager.m
@@ -0,0 +1,153 @@
+classdef ( Hidden, Sealed ) PointerManager < handle
+ %uix.PointerManager Pointer manager
+
+ % Copyright 2016 The MathWorks, Inc.
+ % $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+ properties( SetAccess = private )
+ Figure % figure
+ end
+
+ properties( Access = private )
+ Tokens % tokens
+ Pointers % pointers
+ NextToken % next token
+ PointerListener % listener
+ end
+
+ methods( Access = private )
+
+ function obj = PointerManager( figure )
+ %uix.PointerManager Create pointer manager
+ %
+ % m = uix.PointerManager(f) creates a pointer manager for the
+ % figure f.
+
+ obj.Figure = figure;
+ obj.Tokens = 0;
+ obj.Pointers = {figure.Pointer};
+ obj.NextToken = 1;
+ obj.PointerListener = event.proplistener( figure, ...
+ findprop( figure, 'Pointer' ), 'PostSet', ...
+ @obj.onPointerChanged );
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = private )
+
+ function doSetPointer( obj, token, pointer )
+ %doSetPointer Set pointer
+ %
+ % m.doSetPointer(t,p) sets the pointer to p with the token t.
+
+ % Remove old entry
+ tf = obj.Tokens == token;
+ obj.Tokens(tf) = [];
+ obj.Pointers(tf) = [];
+
+ % Add new entry
+ obj.Tokens(end+1) = token;
+ obj.Pointers{end+1} = pointer;
+
+ % Set pointer
+ obj.PointerListener.Enabled = false;
+ obj.Figure.Pointer = pointer;
+ obj.PointerListener.Enabled = true;
+
+ end % doSetPointer
+
+ function doUnsetPointer( obj, token )
+ %doUnsetPointer Unset pointer
+ %
+ % m.doUnsetPointer(s) unsets the pointer with the token t.
+
+ % Remove old entry
+ tf = obj.Tokens == token;
+ obj.Tokens(tf) = [];
+ obj.Pointers(tf) = [];
+
+ % Update pointer
+ obj.PointerListener.Enabled = false;
+ obj.Figure.Pointer = obj.Pointers{end};
+ obj.PointerListener.Enabled = true;
+
+ end % doUnsetPointer
+
+ end % private methods
+
+ methods
+
+ function onPointerChanged( obj, ~, ~ )
+ %onPointerChanged Event handler
+
+ % Log as unknown setter
+ obj.doSetPointer( 0, obj.Figure.Pointer )
+
+ end % onPointerChanged
+
+ end % event handlers
+
+ methods( Static )
+
+ function token = setPointer( figure, pointer )
+ %setPointer Set pointer
+ %
+ % t = uix.PointerManager.setPointer(f,p) sets the pointer of
+ % the figure f to p. The returned token t can be used
+ % subsequently to unset the pointer.
+
+ % Get pointer manager
+ obj = uix.PointerManager.getInstance( figure );
+
+ % Retrieve token
+ token = obj.NextToken;
+
+ % Set
+ obj.doSetPointer( token, pointer )
+
+ % Increment token
+ obj.NextToken = token + 1;
+
+ end % setPointer
+
+ function unsetPointer( figure, token )
+ %unsetPointer Unset pointer
+ %
+ % uix.PointerManager.unsetPointer(f,t) unsets the pointer of
+ % the figure f using the token t.
+
+ % Check ID
+ validateattributes( token, {'numeric'}, {'scalar','integer','>',0} )
+
+ % Get pointer manager
+ obj = uix.PointerManager.getInstance( figure );
+
+ % Unset
+ obj.doUnsetPointer( token )
+
+ end % unsetPointer
+
+ function obj = getInstance( figure )
+ %getInstance Get pointer manager
+ %
+ % m = uix.PointerManager.getInstance(f) gets the pointer
+ % manager for the figure f.
+
+ % Get pointer manager
+ name = 'UIxPointerManager';
+ if isprop( figure, name ) % existing, retrieve
+ obj = figure.( name );
+ else % new, create and store
+ obj = uix.PointerManager( figure );
+ p = addprop( figure, name );
+ p.Hidden = true;
+ figure.( name ) = obj;
+ end
+
+ end % getInstance
+
+ end % static methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NoEdge_NotSelected.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NoEdge_NotSelected.png
new file mode 100644
index 0000000..30d4bb4
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NoEdge_NotSelected.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NoEdge_Selected.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NoEdge_Selected.png
new file mode 100644
index 0000000..c0c8b56
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NoEdge_Selected.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_NoEdge.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_NoEdge.png
new file mode 100644
index 0000000..30bf1da
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_NoEdge.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_NotSelected.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_NotSelected.png
new file mode 100644
index 0000000..c6aca7c
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_NotSelected.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_Selected.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_Selected.png
new file mode 100644
index 0000000..e96782b
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_NotSelected_Selected.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_Selected_NoEdge.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_Selected_NoEdge.png
new file mode 100644
index 0000000..f23a1b0
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_Selected_NoEdge.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_Selected_NotSelected.png b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_Selected_NotSelected.png
new file mode 100644
index 0000000..4758ca3
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Resources/tab_Selected_NotSelected.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ScrollingPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ScrollingPanel.m
new file mode 100644
index 0000000..091bcbe
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/ScrollingPanel.m
@@ -0,0 +1,645 @@
+classdef ScrollingPanel < uix.Container & uix.mixin.Panel
+ %uix.ScrollingPanel Scrolling panel
+ %
+ % p = uix.ScrollingPanel(p1,v1,p2,v2,...) constructs a scrolling panel
+ % and sets parameter p1 to value v1, etc.
+ %
+ % A scrolling panel is a standard container (uicontainer) that shows
+ % one its contents and hides the others.
+ %
+ % See also: uix.Panel, uix.BoxPanel, uix.TabPanel, uicontainer
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1455 $ $Date: 2017-01-26 20:34:18 +0000 (Thu, 26 Jan 2017) $
+
+ properties( Dependent )
+ Heights % heights of contents, in pixels and/or weights
+ MinimumHeights % minimum heights of contents, in pixels
+ VerticalOffsets % vertical offsets of contents, in pixels
+ VerticalSteps % vertical slider steps, in pixels
+ Widths % widths of contents, in pixels and/or weights
+ MinimumWidths % minimum widths of contents, in pixels
+ HorizontalOffsets % horizontal offsets of contents, in pixels
+ HorizontalSteps % horizontal slider steps, in pixels
+ MouseWheelEnabled % mouse wheel scrolling enabled [on|off]
+ end
+
+ properties( Access = protected )
+ Heights_ = zeros( [0 1] ) % backing for Heights
+ MinimumHeights_ = zeros( [0 1] ) % backing for MinimumHeights
+ Widths_ = zeros( [0 1] ) % backing for Widths
+ MinimumWidths_ = zeros( [0 1] ) % backing for MinimumWidths
+ HorizontalSliders = matlab.ui.control.UIControl.empty( [0 1] ) % sliders
+ VerticalSliders = matlab.ui.control.UIControl.empty( [0 1] ) % sliders
+ BlankingPlates = matlab.ui.control.UIControl.empty( [0 1] ) % blanking plates
+ HorizontalSteps_ = zeros( [0 1] ) % steps
+ VerticalSteps_ = zeros( [0 1] ) % steps
+ end
+
+ properties( Access = private )
+ MouseWheelListener = [] % mouse listener
+ MouseWheelEnabled_ = 'on' %
+ SliderListener = [] % slider listener
+ end
+
+ properties( Constant, Access = protected )
+ SliderSize = 20 % slider size, in pixels
+ SliderStep = 10 % slider step, in pixels
+ end
+
+ methods
+
+ function obj = ScrollingPanel( varargin )
+ %uix.ScrollingPanel Scrolling panel constructor
+ %
+ % p = uix.ScrollingPanel() constructs a scrolling panel.
+ %
+ % p = uix.ScrollingPanel(p1,v1,p2,v2,...) sets parameter p1 to
+ % value v1, etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Heights( obj )
+
+ value = obj.Heights_;
+
+ end % get.Heights
+
+ function set.Heights( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Heights'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''Heights'' must be real and finite.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''Heights'' must match size of contents.' )
+
+ % Set
+ obj.Heights_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Heights
+
+ function value = get.MinimumHeights( obj )
+
+ value = obj.MinimumHeights_;
+
+ end % get.MinimumHeights
+
+ function set.MinimumHeights( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''MinimumHeights'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ all( value >= 0 ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''MinimumHeights'' must be non-negative.' )
+ assert( isequal( size( value ), size( obj.Heights_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''MinimumHeights'' must match size of contents.' )
+
+ % Set
+ obj.MinimumHeights_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.MinimumHeights
+
+ function value = get.VerticalOffsets( obj )
+
+ sliders = obj.VerticalSliders;
+ if isempty( sliders )
+ value = zeros( size( sliders ) );
+ else
+ value = -vertcat( sliders.Value ) - 1;
+ value(value<0) = 0;
+ end
+
+ end % get.VerticalOffsets
+
+ function set.VerticalOffsets( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''VerticalOffsets'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''VerticalOffsets'' must be real and finite.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''VerticalOffsets'' must match size of contents.' )
+
+ % Set
+ sliders = obj.VerticalSliders;
+ heights = obj.Heights_;
+ for ii = 1:numel( sliders )
+ if heights(ii) > 0
+ sliders(ii).Value = -value(ii) - 1;
+ end
+ end
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.VerticalOffsets
+
+ function value = get.VerticalSteps( obj )
+
+ value = obj.VerticalSteps_;
+
+ end % get.VerticalSteps
+
+ function set.VerticalSteps( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''VerticalSteps'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ) && all( value > 0 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''VerticalSteps'' must be real, finite and positive.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''VerticalSteps'' must match size of contents.' )
+
+ % Set
+ obj.VerticalSteps_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.VerticalSteps
+
+ function value = get.Widths( obj )
+
+ value = obj.Widths_;
+
+ end % get.Widths
+
+ function set.Widths( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Widths'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''Widths'' must be real and finite.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''Widths'' must match size of contents.' )
+
+ % Set
+ obj.Widths_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Widths
+
+ function value = get.MinimumWidths( obj )
+
+ value = obj.MinimumWidths_;
+
+ end % get.MinimumWidths
+
+ function set.MinimumWidths( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''MinimumWidths'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ all( value >= 0 ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''MinimumWidths'' must be non-negative.' )
+ assert( isequal( size( value ), size( obj.Widths_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''MinimumWidths'' must match size of contents.' )
+
+ % Set
+ obj.MinimumWidths_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.MinimumWidths
+
+ function value = get.HorizontalOffsets( obj )
+
+ sliders = obj.HorizontalSliders;
+ if isempty( sliders )
+ value = zeros( size( sliders ) );
+ else
+ value = vertcat( sliders.Value );
+ value(value<0) = 0;
+ end
+
+ end % get.HorizontalOffsets
+
+ function set.HorizontalOffsets( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''HorizontalOffsets'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''HorizontalOffsets'' must be real and finite.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''HorizontalOffsets'' must match size of contents.' )
+
+ % Set
+ sliders = obj.HorizontalSliders;
+ widths = obj.Widths_;
+ for ii = 1:numel( sliders )
+ if widths(ii) > 0
+ sliders(ii).Value = value(ii);
+ end
+ end
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.HorizontalOffsets
+
+ function value = get.HorizontalSteps( obj )
+
+ value = obj.HorizontalSteps_;
+
+ end % get.HorizontalSteps
+
+ function set.HorizontalSteps( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''HorizontalSteps'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ) && all( value > 0 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''HorizontalSteps'' must be real, finite and positive.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''HorizontalSteps'' must match size of contents.' )
+
+ % Set
+ obj.HorizontalSteps_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.HorizontalSteps
+
+ function value = get.MouseWheelEnabled( obj )
+
+ value = obj.MouseWheelEnabled_;
+
+ end % get.MouseWheelEnabled
+
+ function set.MouseWheelEnabled( obj, value )
+
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uix:InvalidArgument', ...
+ 'Property ''MouseWheelEnabled'' must ''on'' or ''off''.' )
+ listener = obj.MouseWheelListener;
+ if ~isempty( listener )
+ listener.Enabled = strcmp( value, 'on' );
+ end
+ obj.MouseWheelEnabled_ = value;
+
+ end % set.MouseWheelEnabled
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw
+
+ % Return if no contents
+ selection = obj.Selection_;
+ if selection == 0, return, end
+
+ % Retrieve width and height of selected contents
+ contentsWidth = obj.Widths_(selection);
+ minimumWidth = obj.MinimumWidths_(selection);
+ contentsHeight = obj.Heights_(selection);
+ minimumHeight = obj.MinimumHeights_(selection);
+
+ % Retrieve selected contents and corresponding decorations
+ child = obj.Contents_(selection);
+ vSlider = obj.VerticalSliders(selection);
+ hSlider = obj.HorizontalSliders(selection);
+ plate = obj.BlankingPlates(selection);
+
+ % Compute dimensions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ width = bounds(3);
+ height = bounds(4);
+ sliderSize = obj.SliderSize; % slider size
+ vSliderWidth = sliderSize * ...
+ (contentsHeight > height | ...
+ minimumHeight > height); % first pass
+ hSliderHeight = sliderSize * ...
+ (contentsWidth > width - vSliderWidth | ...
+ minimumWidth > width - vSliderWidth);
+ vSliderWidth = sliderSize * ...
+ (contentsHeight > height - hSliderHeight | ...
+ minimumHeight > height - hSliderHeight); % second pass
+ vSliderWidth = min( vSliderWidth, width ); % limit
+ hSliderHeight = min( hSliderHeight, height ); % limit
+ vSliderHeight = height - hSliderHeight;
+ hSliderWidth = width - vSliderWidth;
+ widths = uix.calcPixelSizes( width, ...
+ [contentsWidth;vSliderWidth], ...
+ [minimumWidth;vSliderWidth], 0, 0 );
+ contentsWidth = widths(1); % to be offset
+ heights = uix.calcPixelSizes( height, ...
+ [contentsHeight;hSliderHeight], ...
+ [minimumHeight;hSliderHeight], 0, 0 );
+ contentsHeight = heights(1); % to be offset
+
+ % Compute positions
+ contentsPosition = [1 1+hSliderHeight+vSliderHeight-contentsHeight contentsWidth contentsHeight];
+ vSliderPosition = [1+hSliderWidth 1+hSliderHeight vSliderWidth vSliderHeight];
+ hSliderPosition = [1 1 hSliderWidth hSliderHeight];
+ platePosition = [1+hSliderWidth 1 vSliderWidth hSliderHeight];
+
+ % Compute and set vertical slider properties
+ if vSliderWidth == 0 || vSliderHeight == 0 || vSliderHeight <= vSliderWidth
+ % Slider is invisible or incorrectly oriented
+ set( vSlider, 'Style', 'text', 'Enable', 'inactive', ...
+ 'Position', vSliderPosition, ...
+ 'Min', 0, 'Max', 1, 'Value', 1 )
+ else
+ % Compute properties
+ vSliderMin = 0;
+ vSliderMax = contentsHeight - vSliderHeight;
+ vSliderValue = -vSlider.Value; % negative sign convention
+ vSliderValue = max( vSliderValue, vSliderMin ); % limit
+ vSliderValue = min( vSliderValue, vSliderMax ); % limit
+ vStep = obj.VerticalSteps_(selection);
+ vSliderStep(1) = min( vStep / vSliderMax, 1 );
+ vSliderStep(2) = max( vSliderHeight / vSliderMax, vSliderStep(1) );
+ contentsPosition(2) = contentsPosition(2) + vSliderValue;
+ % Set properties
+ set( vSlider, 'Style', 'slider', 'Enable', 'on', ...
+ 'Position', vSliderPosition, ...
+ 'Min', -vSliderMax, 'Max', -vSliderMin, ...
+ 'Value', -vSliderValue, 'SliderStep', vSliderStep )
+ end
+
+ % Compute and set horizontal slider properties
+ if hSliderHeight == 0 || hSliderWidth == 0 || hSliderWidth <= hSliderHeight
+ % Slider is invisible or incorrectly oriented
+ set( hSlider, 'Style', 'text', 'Enable', 'inactive', ...
+ 'Position', hSliderPosition, ...
+ 'Min', -1, 'Max', 0, 'Value', -1 )
+ else
+ % Compute properties
+ hSliderMin = 0;
+ hSliderMax = contentsWidth - hSliderWidth;
+ hSliderValue = hSlider.Value; % positive sign convention
+ hSliderValue = max( hSliderValue, hSliderMin ); % limit
+ hSliderValue = min( hSliderValue, hSliderMax ); % limit
+ hStep = obj.HorizontalSteps_(selection);
+ hSliderStep(1) = min( hStep / hSliderMax, 1 );
+ hSliderStep(2) = max( hSliderWidth / hSliderMax, hSliderStep(1) );
+ contentsPosition(1) = contentsPosition(1) - hSliderValue;
+ % Set properties
+ set( hSlider, 'Style', 'slider', 'Enable', 'on', ...
+ 'Position', hSliderPosition, ...
+ 'Min', hSliderMin, 'Max', hSliderMax, ...
+ 'Value', hSliderValue, 'SliderStep', hSliderStep )
+ end
+
+ % Set contents and blanking plate positions
+ uix.setPosition( child, contentsPosition, 'pixels' )
+ set( plate, 'Position', platePosition )
+
+ end % redraw
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % c.addChild(d) adds the child d to the container c.
+
+ % Add to sizes
+ obj.Widths_(end+1,:) = -1;
+ obj.MinimumWidths_(end+1,:) = -1;
+ obj.Heights_(end+1,:) = -1;
+ obj.MinimumHeights_(end+1,:) = -1;
+ obj.VerticalSliders(end+1,:) = uicontrol( ...
+ 'Internal', true, 'Parent', obj, 'Units', 'pixels', ...
+ 'Style', 'slider' );
+ obj.HorizontalSliders(end+1,:) = uicontrol( ...
+ 'Internal', true, 'Parent', obj, 'Units', 'pixels', ...
+ 'Style', 'slider' );
+ obj.BlankingPlates(end+1,:) = uicontrol( ...
+ 'Internal', true, 'Parent', obj, 'Units', 'pixels', ...
+ 'Style', 'text', 'Enable', 'inactive' );
+ obj.VerticalSteps_(end+1,:) = obj.SliderStep;
+ obj.HorizontalSteps_(end+1,:) = obj.SliderStep;
+ obj.updateSliderListener()
+
+ % Call superclass method
+ addChild@uix.mixin.Panel( obj, child )
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % c.removeChild(d) removes the child d from the container c.
+
+ % Remove from sizes
+ tf = obj.Contents_ == child;
+ obj.Widths_(tf,:) = [];
+ obj.MinimumWidths_(tf,:) = [];
+ obj.Heights_(tf,:) = [];
+ obj.MinimumHeights_(tf,:) = [];
+ obj.VerticalSliders(tf,:) = [];
+ obj.HorizontalSliders(tf,:) = [];
+ obj.BlankingPlates(tf,:) = [];
+ obj.VerticalSteps_(tf,:) = [];
+ obj.HorizontalSteps_(tf,:) = [];
+ obj.updateSliderListener()
+
+ % Call superclass method
+ removeChild@uix.mixin.Panel( obj, child )
+
+ end % removeChild
+
+ function reparent( obj, ~, newFigure )
+ %reparent Reparent container
+ %
+ % c.reparent(a,b) reparents the container c from the figure a
+ % to the figure b.
+
+ if isempty( newFigure )
+ obj.MouseWheelListener = [];
+ else
+ listener = event.listener( newFigure, ...
+ 'WindowScrollWheel', @obj.onMouseScrolled );
+ listener.Enabled = strcmp( obj.MouseWheelEnabled_, 'on' );
+ obj.MouseWheelListener = listener;
+ end
+
+ end % reparent
+
+ function reorder( obj, indices )
+ %reorder Reorder contents
+ %
+ % c.reorder(i) reorders the container contents using indices
+ % i, c.Contents = c.Contents(i).
+
+ % Reorder
+ obj.Widths_ = obj.Widths_(indices,:);
+ obj.MinimumWidths_ = obj.MinimumWidths_(indices,:);
+ obj.Heights_ = obj.Heights_(indices,:);
+ obj.MinimumHeights_ = obj.MinimumWidths_(indices,:);
+ obj.VerticalSliders = obj.VerticalSliders(indices,:);
+ obj.HorizontalSliders = obj.HorizontalSliders(indices,:);
+ obj.BlankingPlates = obj.BlankingPlates(indices,:);
+ obj.VerticalSteps_ = obj.VerticalSteps_(indices,:);
+ obj.HorizontalSteps_ = obj.HorizontalSteps_(indices,:);
+
+ % Call superclass method
+ reorder@uix.mixin.Panel( obj, indices )
+
+ end % reorder
+
+ function showSelection( obj )
+ %showSelection Show selected child, hide the others
+ %
+ % c.showSelection() shows the selected child of the container
+ % c, and hides the others.
+
+ % Call superclass method
+ showSelection@uix.mixin.Panel( obj )
+
+ % Show and hide sliders based on selection
+ selection = obj.Selection_;
+ for ii = 1:numel( obj.Contents_ )
+ if ii == selection
+ obj.VerticalSliders(ii).Visible = 'on';
+ obj.HorizontalSliders(ii).Visible = 'on';
+ obj.BlankingPlates(ii).Visible = 'on';
+ else
+ obj.VerticalSliders(ii).Visible = 'off';
+ obj.HorizontalSliders(ii).Visible = 'off';
+ obj.BlankingPlates(ii).Visible = 'off';
+ end
+ end
+
+ end % showSelection
+
+ end % template methods
+
+ methods( Access = private )
+
+ function onSliderValueChanged( obj, ~, ~ )
+ %onSliderValueChanged Event handler
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onSliderValueChanged
+
+ function onMouseScrolled( obj, ~, eventData )
+ %onMouseScrolled Event handler
+
+ sel = obj.Selection_;
+ if sel == 0
+ return
+ else
+ % Get pointer position and panel bounds
+ pp = getpixelposition( obj, true );
+ f = ancestor( obj, 'figure' );
+ cp = f.CurrentPoint;
+ % Check that pointer is over panel
+ if cp(1) < pp(1) || cp(1) > pp(1) + pp(3) || ...
+ cp(2) < pp(2) || cp(2) > pp(2) + pp(4), return, end
+ % Compute delta
+ delta = eventData.VerticalScrollCount * ...
+ eventData.VerticalScrollAmount * obj.VerticalSteps(sel);
+ % Scroll
+ if obj.Heights_(sel) > 0 % scroll vertically
+ obj.VerticalOffsets(sel) = obj.VerticalOffsets(sel) + delta;
+ elseif obj.Widths_(sel) > 0 % scroll horizontally
+ obj.HorizontalOffsets(sel) = obj.HorizontalOffsets(sel) + delta;
+ end
+ end
+
+ end % onMouseScrolled
+
+ end % event handlers
+
+ methods( Access = private )
+
+ function updateSliderListener( obj )
+ %updateSliderListener Update listener to slider events
+
+ if isempty( obj.VerticalSliders )
+ obj.SliderListener = [];
+ else
+ obj.SliderListener = event.listener( ...
+ [obj.VerticalSliders; obj.HorizontalSliders], ...
+ 'ContinuousValueChange', @obj.onSliderValueChanged );
+ end
+
+ end % updateSliderListener
+
+ end % helpers
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/SelectionData.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/SelectionData.m
new file mode 100644
index 0000000..b52dd69
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/SelectionData.m
@@ -0,0 +1,31 @@
+classdef( Hidden, Sealed ) SelectionData < event.EventData
+ %uix.SelectionData Event data for selection event
+ %
+ % e = uix.SelectionData(o,n) creates event data including the old
+ % value o and the new value n.
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1165 $ $Date: 2015-12-06 03:09:17 -0500 (Sun, 06 Dec 2015) $
+
+ properties( SetAccess = private )
+ OldValue % old value
+ NewValue % newValue
+ end
+
+ methods
+
+ function obj = SelectionData( oldValue, newValue )
+ %uix.SelectionData Event data for selection event
+ %
+ % e = uix.SelectionData(o,n) creates event data including the
+ % old value o and the new value n.
+
+ % Set properties
+ obj.OldValue = oldValue;
+ obj.NewValue = newValue;
+
+ end % constructor
+
+ end % structors
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/TabPanel.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/TabPanel.m
new file mode 100644
index 0000000..95f60fd
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/TabPanel.m
@@ -0,0 +1,951 @@
+classdef TabPanel < uix.Container & uix.mixin.Panel
+ %uix.TabPanel Tab panel
+ %
+ % p = uix.TabPanel(p1,v1,p2,v2,...) constructs a tab panel and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A tab panel shows one of its contents and hides the others according
+ % to which tab is selected.
+ %
+ % From R2014b, MATLAB provides uitabgroup and uitab as standard
+ % components. Consider using uitabgroup and uitab for new code if
+ % these meet your requirements.
+ %
+ % See also: uitabgroup, uitab, uix.CardPanel
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ FontAngle % font angle
+ FontName % font name
+ FontSize % font size
+ FontWeight % font weight
+ FontUnits % font weight
+ ForegroundColor % tab text color [RGB]
+ HighlightColor % border highlight color [RGB]
+ ShadowColor % border shadow color [RGB]
+ end
+
+ properties
+ SelectionChangedFcn = '' % selection change callback
+ end
+
+ properties( Access = public, Dependent, AbortSet )
+ TabEnables % tab enable states
+ TabLocation % tab location [top|bottom]
+ TabTitles % tab titles
+ TabContextMenus % tab context menus
+ TabWidth % tab width
+ end
+
+ properties( Access = private )
+ FontAngle_ = get( 0, 'DefaultUicontrolFontAngle' ) % backing for FontAngle
+ FontName_ = get( 0, 'DefaultUicontrolFontName' ) % backing for FontName
+ FontSize_ = get( 0, 'DefaultUicontrolFontSize' ) % backing for FontSize
+ FontWeight_ = get( 0, 'DefaultUicontrolFontWeight' ) % backing for FontWeight
+ FontUnits_ = get( 0, 'DefaultUicontrolFontUnits' ) % backing for FontUnits
+ ForegroundColor_ = get( 0, 'DefaultUicontrolForegroundColor' ) % backing for ForegroundColor
+ HighlightColor_ = [1 1 1] % backing for HighlightColor
+ ShadowColor_ = [0.7 0.7 0.7] % backing for ShadowColor
+ ParentBackgroundColor = get( 0, 'DefaultUicontrolForegroundColor' ) % default parent background color
+ Tabs = gobjects( [0 1] ) % tabs
+ TabListeners = event.listener.empty( [0 1] ) % tab listeners
+ TabLocation_ = 'top' % backing for TabPosition
+ TabHeight = -1 % cache of tab height (-1 denotes stale cache)
+ TabWidth_ = 50 % backing for TabWidth
+ Dividers % tab dividers
+ BackgroundColorListener % listener
+ SelectionChangedListener % listener
+ ParentListener % listener
+ ParentBackgroundColorListener % listener
+ end
+
+ properties( Access = private, Constant )
+ FontNames = listfonts() % all available font names
+ DividerMask = uix.TabPanel.getDividerMask() % divider image data
+ DividerWidth = 8 % divider width
+ TabMinimumHeight = 9 % tab minimum height
+ Tint = 0.85 % tint factor for unselected tabs
+ end
+
+ methods
+
+ function obj = TabPanel( varargin )
+ %uix.TabPanel Tab panel constructor
+ %
+ % p = uix.TabPanel() constructs a tab panel.
+ %
+ % p = uix.TabPanel(p1,v1,p2,v2,...) sets parameter p1 to value
+ % v1, etc.
+
+ % Create dividers
+ dividers = matlab.ui.control.UIControl( 'Internal', true, ...
+ 'Parent', obj, 'Units', 'pixels', 'Style', 'checkbox',...
+ 'Tag', 'TabPanelDividers' );
+
+ % Create listeners
+ backgroundColorListener = event.proplistener( obj, ...
+ findprop( obj, 'BackgroundColor' ), 'PostSet', ...
+ @obj.onBackgroundColorChange );
+ selectionChangedListener = event.listener( obj, ...
+ 'SelectionChanged', @obj.onSelectionChanged );
+ parentListener = event.proplistener( obj, ...
+ findprop( obj, 'Parent' ), 'PostSet', ...
+ @obj.onParentChanged );
+
+ % Store properties
+ obj.Dividers = dividers;
+ obj.BackgroundColorListener = backgroundColorListener;
+ obj.SelectionChangedListener = selectionChangedListener;
+ obj.ParentListener = parentListener;
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.FontAngle( obj )
+
+ value = obj.FontAngle_;
+
+ end % get.FontAngle
+
+ function set.FontAngle( obj, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'normal','italic','oblique'} ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''FontAngle'' must be ''normal'', ''italic'' or ''oblique''.' )
+
+ % Set
+ obj.FontAngle_ = value;
+
+ % Update existing tabs
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tab = tabs(ii);
+ tab.FontAngle = value;
+ end
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+ obj.Dirty = true;
+
+ end % set.FontAngle
+
+ function value = get.FontName( obj )
+
+ value = obj.FontName_;
+
+ end % get.FontName
+
+ function set.FontName( obj, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, obj.FontNames ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''FontName'' must be a valid font name.' )
+
+ % Set
+ obj.FontName_ = value;
+
+ % Update existing tabs
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tab = tabs(ii);
+ tab.FontName = value;
+ end
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+ obj.Dirty = true;
+
+ end % set.FontName
+
+ function value = get.FontSize( obj )
+
+ value = obj.FontSize_;
+
+ end % get.FontSize
+
+ function set.FontSize( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ) && isscalar( value ) && ...
+ isreal( value ) && ~isinf( value ) && ...
+ ~isnan( value ) && value > 0, ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''FontSize'' must be a positive scalar.' )
+
+ % Set
+ obj.FontSize_ = value;
+
+ % Update existing tabs
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tab = tabs(ii);
+ tab.FontSize = value;
+ end
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+ obj.Dirty = true;
+
+ end % set.FontSize
+
+ function value = get.FontWeight( obj )
+
+ value = obj.FontWeight_;
+
+ end % get.FontWeight
+
+ function set.FontWeight( obj, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'normal','bold'} ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''FontWeight'' must be ''normal'' or ''bold''.' )
+
+ % Set
+ obj.FontWeight_ = value;
+
+ % Update existing tabs
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tab = tabs(ii);
+ tab.FontWeight = value;
+ end
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+ obj.Dirty = true;
+
+ end % set.FontWeight
+
+ function value = get.FontUnits( obj )
+
+ value = obj.FontUnits_;
+
+ end % get.FontUnits
+
+ function set.FontUnits( obj, value )
+
+ % Check
+ assert( ischar( value ) && ...
+ any( strcmp( value, {'inches','centimeters','points','pixels'} ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''FontUnits'' must be ''inches'', ''centimeters'', ''points'' or ''pixels''.' )
+
+ % Compute size in new units
+ oldUnits = obj.FontUnits_;
+ oldSize = obj.FontSize_;
+ newUnits = value;
+ newSize = oldSize * convert( oldUnits ) / convert( newUnits );
+
+ % Set size and units
+ obj.FontSize_ = newSize;
+ obj.FontUnits_ = newUnits;
+
+ % Update existing tabs
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tab = tabs(ii);
+ tab.FontUnits = newUnits;
+ end
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+ obj.Dirty = true;
+
+ function factor = convert( units )
+ %convert Compute conversion factor to points
+ %
+ % f = convert(u) computes the conversion factor from units
+ % u to points. For example, convert('inches') since 1
+ % inch equals 72 points.
+
+ persistent SCREEN_PIXELS_PER_INCH
+ if isequal( SCREEN_PIXELS_PER_INCH, [] ) % uninitialized
+ SCREEN_PIXELS_PER_INCH = get( 0, 'ScreenPixelsPerInch' );
+ end
+
+ switch units
+ case 'inches'
+ factor = 72;
+ case 'centimeters'
+ factor = 72 / 2.54;
+ case 'points'
+ factor = 1;
+ case 'pixels'
+ factor = 72 / SCREEN_PIXELS_PER_INCH;
+ end
+
+ end % convert
+
+ end % set.FontUnits
+
+ function value = get.ForegroundColor( obj )
+
+ value = obj.ForegroundColor_;
+
+ end % get.ForegroundColor
+
+ function set.ForegroundColor( obj, value )
+
+ % Check
+ assert( isnumeric( value ) && isequal( size( value ), [1 3] ) && ...
+ all( isreal( value ) ) && all( value >= 0 ) && all( value <= 1 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''ForegroundColor'' must be an RGB triple.' )
+
+ % Set
+ obj.ForegroundColor_ = value;
+
+ % Update existing tabs
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tab = tabs(ii);
+ tab.ForegroundColor = value;
+ end
+
+ end % set.ForegroundColor
+
+ function value = get.HighlightColor( obj )
+
+ value = obj.HighlightColor_;
+
+ end % get.HighlightColor
+
+ function set.HighlightColor( obj, value )
+
+ % Check
+ assert( isnumeric( value ) && isequal( size( value ), [1 3] ) && ...
+ all( isreal( value ) ) && all( value >= 0 ) && all( value <= 1 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''HighlightColor'' must be an RGB triple.' )
+
+ % Set
+ obj.HighlightColor_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.HighlightColor
+
+ function set.SelectionChangedFcn( obj, value )
+
+ % Check
+ if ischar( value ) % string
+ % OK
+ elseif isa( value, 'function_handle' ) && ...
+ isequal( size( value ), [1 1] ) % function handle
+ % OK
+ elseif iscell( value ) && ndims( value ) == 2 && ...
+ size( value, 1 ) == 1 && size( value, 2 ) > 0 && ...
+ isa( value{1}, 'function_handle' ) && ...
+ isequal( size( value{1} ), [1 1] ) %#ok % cell callback
+ % OK
+ else
+ error( 'uix:InvalidPropertyValue', ...
+ 'Property ''SelectionChangedFcn'' must be a valid callback.' )
+ end
+
+ % Set
+ obj.SelectionChangedFcn = value;
+
+ end % set.SelectionChangedFcn
+
+ function value = get.ShadowColor( obj )
+
+ value = obj.ShadowColor_;
+
+ end % get.ShadowColor
+
+ function set.ShadowColor( obj, value )
+
+ % Check
+ assert( isnumeric( value ) && isequal( size( value ), [1 3] ) && ...
+ all( isreal( value ) ) && all( value >= 0 ) && all( value <= 1 ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''ShadowColor'' must be an RGB triple.' )
+
+ % Set
+ obj.ShadowColor_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.ShadowColor
+
+ function value = get.TabEnables( obj )
+
+ value = get( obj.Tabs, {'Enable'} );
+ value(strcmp( value, 'inactive' )) = {'on'};
+
+ end % get.TabEnables
+
+ function set.TabEnables( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Retrieve tabs
+ tabs = obj.Tabs;
+ tabListeners = obj.TabListeners;
+
+ % Check
+ assert( iscellstr( value ) && ...
+ isequal( size( value ), size( tabs ) ) && ...
+ all( strcmp( value, 'on' ) | strcmp( value, 'off' ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''TabEnables'' should be a cell array of strings ''on'' or ''off'', one per tab.' )
+
+ % Set
+ tf = strcmp( value, 'on' );
+ value(tf) = {'inactive'};
+ for ii = 1:numel( tabs )
+ tabs(ii).Enable = value{ii};
+ tabListeners(ii).Enabled = tf(ii);
+ end
+
+ % Show selected child
+ obj.showSelection()
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.TabEnables
+
+ function value = get.TabLocation( obj )
+
+ value = obj.TabLocation_;
+
+ end % get.TabLocation
+
+ function set.TabLocation( obj, value )
+
+ % Check
+ assert( ischar( value ) && ...
+ any( strcmp( value, {'top','bottom'} ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''TabLocation'' should be ''top'' or ''bottom''.' )
+
+ % Set
+ obj.TabLocation_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.TabLocation
+
+ function value = get.TabTitles( obj )
+
+ value = get( obj.Tabs, {'String'} );
+
+ end % get.TabTitles
+
+ function set.TabTitles( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Retrieve tabs
+ tabs = obj.Tabs;
+
+ % Check
+ assert( iscellstr( value ) && ...
+ isequal( size( value ), size( tabs ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''TabTitles'' should be a cell array of strings, one per tab.' )
+
+ % Set
+ n = numel( tabs );
+ for ii = 1:n
+ tabs(ii).String = value{ii};
+ end
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+ obj.Dirty = true;
+
+ end % set.TabTitles
+
+ function value = get.TabContextMenus( obj )
+
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ value = cell( [n 1] );
+ for ii = 1:n
+ value{ii} = tabs(ii).UIContextMenu;
+ end
+
+ end % get.TabContextMenus
+
+ function set.TabContextMenus( obj, value )
+
+ tabs = obj.Tabs;
+ n = numel( tabs );
+ for ii = 1:n
+ tabs(ii).UIContextMenu = value{ii};
+ end
+
+ end % set.TabContextMenus
+
+ function value = get.TabWidth( obj )
+
+ value = obj.TabWidth_;
+
+ end % get.TabWidth
+
+ function set.TabWidth( obj, value )
+
+ % Check
+ assert( isa( value, 'double' ) && isscalar( value ) && ...
+ isreal( value ) && ~isinf( value ) && ...
+ ~isnan( value ) && value ~= 0, ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''TabWidth'' must be a non-zero scalar.' )
+
+ % Set
+ obj.TabWidth_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.TabWidth
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ w = ceil( bounds(1) + bounds(3) ) - floor( bounds(1) ); % width
+ h = ceil( bounds(2) + bounds(4) ) - floor( bounds(2) ); % height
+ p = obj.Padding_; % padding
+ tabs = obj.Tabs;
+ n = numel( tabs ); % number of tabs
+ tH = obj.TabHeight; % tab height
+ if tH == -1 % cache stale, refresh
+ if n > 0
+ cTabExtents = get( tabs, {'Extent'} );
+ tabExtents = vertcat( cTabExtents{:} );
+ tH = max( tabExtents(:,4) );
+ end
+ tH = max( tH, obj.TabMinimumHeight ); % apply minimum
+ tH = ceil( tH ); % round up
+ obj.TabHeight = tH; % store
+ end
+ cH = max( [h - 2 * p - tH, 1] ); % contents height
+ switch obj.TabLocation_
+ case 'top'
+ cY = 1 + p; % contents y
+ tY = cY + cH + p; % tab y
+ case 'bottom'
+ tY = 1; % tab y
+ cY = tY + tH + p; % contents y
+ end
+ cX = 1 + p; % contents x
+ cW = max( [w - 2 * p, 1] ); % contents width
+ tW = obj.TabWidth_; % tab width
+ dW = obj.DividerWidth; % tab divider width
+ if tW < 0 && n > 0 % relative
+ tW = max( ( w - (n+1) * dW ) / n, 1 );
+ end
+ tW = ceil( tW ); % round up
+ for ii = 1:n
+ tabs(ii).Position = [1 + (ii-1) * tW + ii * dW, tY, tW, tH];
+ end
+ obj.Dividers.Position = [0 tY w+1 tH];
+ contentsPosition = [cX cY cW cH];
+
+ % Redraw tabs
+ obj.redrawTabs()
+
+ % Redraw contents
+ selection = obj.Selection_;
+ if selection ~= 0 && strcmp( obj.TabEnables{selection}, 'on' )
+ uix.setPosition( obj.Contents_(selection), contentsPosition, 'pixels' )
+ end
+
+ end % redraw
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % c.addChild(d) adds the child d to the container c.
+
+ % Create new tab
+ n = numel( obj.Tabs );
+ tab = matlab.ui.control.UIControl( 'Internal', true, ...
+ 'Parent', obj, 'Style', 'text', 'Enable', 'inactive', ...
+ 'Units', 'pixels', 'FontUnits', obj.FontUnits_, ...
+ 'FontSize', obj.FontSize_, 'FontName', obj.FontName_, ...
+ 'FontAngle', obj.FontAngle_, 'FontWeight', obj.FontWeight_, ...
+ 'ForegroundColor', obj.ForegroundColor_, ...
+ 'String', sprintf( 'Page %d', n + 1 ) );
+ tabListener = event.listener( tab, 'ButtonDown', @obj.onTabClicked );
+ obj.Tabs(n+1,:) = tab;
+ obj.TabListeners(n+1,:) = tabListener;
+
+ % Mark as dirty
+ obj.TabHeight = -1;
+
+ % Check for bug
+ if verLessThan( 'MATLAB', '8.5' ) && strcmp( child.Visible, 'off' )
+ obj.G1218142 = true;
+ end
+
+ % Select new content
+ oldSelection = obj.Selection_;
+ if numel( obj.Contents_ ) == 0
+ newSelection = 1;
+ obj.Selection_ = newSelection;
+ else
+ newSelection = oldSelection;
+ end
+
+ % Call superclass method
+ addChild@uix.mixin.Container( obj, child )
+
+ % Show selected child
+ obj.showSelection()
+
+ % Notify selection change
+ if oldSelection ~= newSelection
+ obj.notify( 'SelectionChanged', ...
+ uix.SelectionData( oldSelection, newSelection ) )
+ end
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % c.removeChild(d) removes the child d from the container c.
+
+ % Find index of removed child
+ contents = obj.Contents_;
+ index = find( contents == child );
+
+ % Remove tab
+ delete( obj.Tabs(index) )
+ obj.Tabs(index,:) = [];
+ obj.TabListeners(index,:) = [];
+
+ % Call superclass method
+ removeChild@uix.mixin.Panel( obj, child )
+
+ end % removeChild
+
+ function reorder( obj, indices )
+ %reorder Reorder contents
+ %
+ % c.reorder(i) reorders the container contents using indices
+ % i, c.Contents = c.Contents(i).
+
+ % Reorder
+ obj.Tabs = obj.Tabs(indices,:);
+ obj.TabListeners = obj.TabListeners(indices,:);
+
+ % Call superclass method
+ reorder@uix.mixin.Panel( obj, indices )
+
+ end % reorder
+
+ function reparent( obj, oldFigure, newFigure )
+ %reparent Reparent container
+ %
+ % c.reparent(a,b) reparents the container c from the figure a
+ % to the figure b.
+
+ if ~isequal( oldFigure, newFigure )
+ contextMenus = obj.TabContextMenus;
+ for ii = 1:numel( contextMenus )
+ contextMenu = contextMenus{ii};
+ if ~isempty( contextMenu )
+ contextMenu.Parent = newFigure;
+ end
+ end
+ end
+
+ % Call superclass method
+ reparent@uix.mixin.Panel( obj, oldFigure, newFigure )
+
+ end % reparent
+
+ function showSelection( obj )
+ %showSelection Show selected child, hide the others
+ %
+ % c.showSelection() shows the selected child of the container
+ % c, and hides the others.
+
+ % Call superclass method
+ showSelection@uix.mixin.Panel( obj )
+
+ % If not enabled, hide selected contents too
+ selection = obj.Selection_;
+ if selection ~= 0 && strcmp( obj.TabEnables{selection}, 'off' )
+ child = obj.Contents_(selection);
+ child.Visible = 'off';
+ if isa( child, 'matlab.graphics.axis.Axes' )
+ child.ContentsVisible = 'off';
+ end
+ % As a remedy for g1100294, move off-screen too
+ margin = 1000;
+ if isa( child, 'matlab.graphics.axis.Axes' ) ...
+ && strcmp(child.ActivePositionProperty, 'outerposition' )
+ child.OuterPosition(1) = -child.OuterPosition(3)-margin;
+ else
+ child.Position(1) = -child.Position(3)-margin;
+ end
+ end
+
+ end % showSelection
+
+ end % template methods
+
+ methods( Access = private )
+
+ function redrawTabs( obj )
+ %redrawTabs Redraw tabs
+ %
+ % p.redrawTabs() redraws the tabs.
+
+ % Get relevant properties
+ selection = obj.Selection_;
+ tabs = obj.Tabs;
+ t = numel( tabs );
+ dividers = obj.Dividers;
+
+ % Handle no tabs as a special case
+ if t == 0
+ dividers.Visible = 'off'; % hide
+ return
+ end
+
+ % Repaint tabs
+ backgroundColor = obj.BackgroundColor;
+ for ii = 1:t
+ tab = tabs(ii);
+ if ii == selection
+ tab.BackgroundColor = backgroundColor;
+ else
+ tab.BackgroundColor = obj.Tint * backgroundColor;
+ end
+ end
+
+ % Repaint dividers
+ d = t + 1;
+ dividerNames = repmat( 'F', [d 2] ); % initialize
+ dividerNames(1,1) = 'E'; % end
+ dividerNames(end,2) = 'E'; % end
+ if selection ~= 0
+ dividerNames(selection,2) = 'T'; % selected
+ dividerNames(selection+1,1) = 'T'; % selected
+ end
+ tH = obj.TabHeight;
+ assert( tH >= obj.TabMinimumHeight, 'uix:InvalidState', ...
+ 'Cannot redraw tabs with invalid TabHeight.' )
+ tW = obj.Tabs(1).Position(3);
+ dW = obj.DividerWidth;
+ allCData = zeros( [tH 0 3] ); % initialize
+ map = [obj.ShadowColor; obj.BackgroundColor; ...
+ obj.Tint * obj.BackgroundColor; obj.HighlightColor;...
+ obj.ParentBackgroundColor];
+ for ii = 1:d
+ % Select mask
+ iMask = obj.DividerMask.( dividerNames(ii,:) );
+ % Resize
+ iData = repmat( iMask(5,:), [tH 1] );
+ iData(1:4,:) = iMask(1:4,:);
+ iData(end-3:end,:) = iMask(end-3:end,:);
+ % Convert to RGB
+ cData = ind2rgb( iData+1, map );
+ % Orient
+ switch obj.TabLocation_
+ case 'bottom'
+ cData = flipud( cData );
+ end
+ % Insert
+ allCData(1:tH,(ii-1)*(dW+tW)+(1:dW),:) = cData; % center
+ if ii > 1 % extend left under transparent uicontrol edge
+ allCData(1:tH,(ii-1)*(dW+tW),:) = cData(:,1,:);
+ end
+ if ii < d % extend right under transparent uicontrol edge
+ allCData(1:tH,(ii-1)*(dW+tW)+dW+1,:) = cData(:,end,:);
+ end
+ end
+ dividers.CData = allCData; % paint
+ dividers.BackgroundColor = obj.ParentBackgroundColor;
+ dividers.Visible = 'on'; % show
+
+ end % redrawTabs
+
+ end % helper methods
+
+ methods( Access = private )
+
+ function onTabClicked( obj, source, ~ )
+
+ % Update selection
+ oldSelection = obj.Selection_;
+ newSelection = find( source == obj.Tabs );
+ if oldSelection == newSelection, return, end % abort set
+ obj.Selection_ = newSelection;
+
+ % Show selected child
+ obj.showSelection()
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ % Notify selection change
+ obj.notify( 'SelectionChanged', ...
+ uix.SelectionData( oldSelection, newSelection ) )
+
+ end % onTabClicked
+
+ function onBackgroundColorChange( obj, ~, ~ )
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onBackgroundColorChange
+
+ function onSelectionChanged( obj, source, eventData )
+
+ % Call callback
+ callback = obj.SelectionChangedFcn;
+ if ischar( callback ) && isequal( callback, '' )
+ % do nothing
+ elseif ischar( callback )
+ feval( callback, source, eventData )
+ elseif isa( callback, 'function_handle' )
+ callback( source, eventData )
+ elseif iscell( callback )
+ feval( callback{1}, source, eventData, callback{2:end} )
+ end
+
+ end % onSelectionChanged
+
+ function onParentChanged( obj, ~, ~ )
+
+ % Update ParentBackgroundColor and ParentBackgroundColor
+ if isprop( obj.Parent, 'BackgroundColor' )
+ prop = 'BackgroundColor';
+ elseif isprop( obj.Parent, 'Color' )
+ prop = 'Color';
+ else
+ prop = [];
+ end
+
+ if ~isempty( prop )
+ obj.ParentBackgroundColorListener = event.proplistener( obj.Parent, ...
+ findprop( obj.Parent, prop ), 'PostSet', ...
+ @( src, evt ) obj.updateParentBackgroundColor( prop ) );
+ else
+ obj.ParentBackgroundColorListener = [];
+ end
+
+ obj.updateParentBackgroundColor( prop );
+
+ end % onParentChanged
+
+ function updateParentBackgroundColor( obj, prop )
+
+ if isempty( prop )
+ obj.ParentBackgroundColor = obj.BackgroundColor;
+ else
+ obj.ParentBackgroundColor = obj.Parent.(prop);
+ end
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end
+
+ end % event handlers
+
+ methods( Access = private, Static )
+
+ function mask = getDividerMask()
+ %getDividerMask Get divider image data
+ %
+ % m = uix.TabPanel.getDividerMask() returns the image masks
+ % for tab panel dividers. Mask entries are 0 (shadow), 1
+ % (background), 2 (tint) and 3 (highlight).
+
+ mask.EF = indexColor( uix.loadIcon( 'tab_NoEdge_NotSelected.png' ) );
+ mask.ET = indexColor( uix.loadIcon( 'tab_NoEdge_Selected.png' ) );
+ mask.FE = indexColor( uix.loadIcon( 'tab_NotSelected_NoEdge.png' ) );
+ mask.FF = indexColor( uix.loadIcon( 'tab_NotSelected_NotSelected.png' ) );
+ mask.FT = indexColor( uix.loadIcon( 'tab_NotSelected_Selected.png' ) );
+ mask.TE = indexColor( uix.loadIcon( 'tab_Selected_NoEdge.png' ) );
+ mask.TF = indexColor( uix.loadIcon( 'tab_Selected_NotSelected.png' ) );
+
+ function mask = indexColor( rgbMap )
+ %indexColor Returns a map of index given an RGB map
+ %
+ % mask = indexColor( rgbMap ) returns a mask of color
+ % index based on the supplied rgbMap.
+ % black : 0
+ % red : 1
+ % yellow : 2
+ % white : 3
+ % blue : 4
+ mask = nan( size( rgbMap, 1 ),size( rgbMap, 2 ) );
+ % Black
+ colorIndex = isColor( rgbMap, [0 0 0] );
+ mask(colorIndex) = 0;
+ % Red
+ colorIndex = isColor( rgbMap, [1 0 0] );
+ mask(colorIndex) = 1;
+ % Yellow
+ colorIndex = isColor( rgbMap, [1 1 0] );
+ mask(colorIndex) = 2;
+ % White
+ colorIndex = isColor( rgbMap, [1 1 1] );
+ mask(colorIndex) = 3;
+ % Blue
+ colorIndex = isColor( rgbMap, [0 0 1] );
+ mask(colorIndex) = 4;
+ % Nested
+ function boolMap = isColor( map, color )
+ %isColor Return a map of boolean where map is equal to color
+ boolMap = all( bsxfun( @eq, map, permute( color, [1 3 2] ) ), 3 );
+ end
+ end
+
+ end % getDividerMask
+
+ end % static helper methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Text.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Text.m
new file mode 100644
index 0000000..855d5c1
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/Text.m
@@ -0,0 +1,546 @@
+classdef Text < matlab.mixin.SetGet
+ %uix.Text Text control
+ %
+ % t = uix.Text(p1,v1,p2,v2,...) constructs a text control and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A text control adds functionality to a uicontrol of Style text:
+ % * Set VerticalAlignment to 'top', 'middle' or 'bottom'
+ % * Fire a Callback when the user clicks on the text
+ %
+ % See also: uicontrol
+
+ % Copyright 2009-2015 The MathWorks, Inc.
+ % $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Dependent )
+ BackgroundColor
+ end
+
+ properties( Dependent, SetAccess = private )
+ BeingDeleted
+ end
+
+ properties( Dependent )
+ Callback
+ DeleteFcn
+ Enable
+ end
+
+ properties( Dependent, SetAccess = private )
+ Extent
+ end
+
+ properties( Dependent )
+ FontAngle
+ FontName
+ FontSize
+ FontUnits
+ FontWeight
+ ForegroundColor
+ HandleVisibility
+ HorizontalAlignment
+ Parent
+ Position
+ String
+ Tag
+ TooltipString
+ end
+
+ properties( Dependent, SetAccess = private )
+ Type
+ end
+
+ properties( Dependent )
+ UIContextMenu
+ Units
+ UserData
+ VerticalAlignment
+ Visible
+ end
+
+ properties( Access = private )
+ Container % container
+ Checkbox % checkbox, used for label
+ Screen % text, used for covering checkbox
+ VerticalAlignment_ = 'top' % backing for VerticalAlignment
+ Dirty = false % flag
+ FigureObserver % observer
+ FigureListener % listener
+ end
+
+ properties( Constant, Access = private )
+ Margin = checkBoxLabelOffset() % checkbox size
+ end
+
+ methods
+
+ function obj = Text( varargin )
+ %uix.Text Text control
+ %
+ % t = uix.Text(p1,v1,p2,v2,...) constructs a text control and
+ % sets parameter p1 to value v1, etc.
+
+ % Create graphics
+ container = uicontainer( 'Parent', [], ...
+ 'Units', get( 0, 'DefaultUicontrolUnits' ), ...
+ 'Position', get( 0, 'DefaultUicontrolPosition' ), ...
+ 'SizeChangedFcn', @obj.onResized );
+ checkbox = uicontrol( 'Parent', container, ...
+ 'HandleVisibility', 'off', ...
+ 'Style', 'checkbox', 'Units', 'pixels', ...
+ 'HorizontalAlignment', 'center', ...
+ 'Enable', 'inactive' );
+ screen = uicontrol( 'Parent', container, ...
+ 'HandleVisibility', 'off', ...
+ 'Style', 'text', 'Units', 'pixels' );
+
+ % Create observers and listeners
+ figureObserver = uix.FigureObserver( container );
+ figureListener = event.listener( figureObserver, ...
+ 'FigureChanged', @obj.onFigureChanged );
+
+ % Store properties
+ obj.Container = container;
+ obj.Checkbox = checkbox;
+ obj.Screen = screen;
+ obj.FigureObserver = figureObserver;
+ obj.FigureListener = figureListener;
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ function delete( obj )
+ %delete Destructor
+
+ delete( obj.Container )
+
+ end % destructor
+
+ end % structors
+
+ methods
+
+ function value = get.BackgroundColor( obj )
+
+ value = obj.Checkbox.BackgroundColor;
+
+ end % get.BackgroundColor
+
+ function set.BackgroundColor( obj, value )
+
+ obj.Container.BackgroundColor = value;
+ obj.Checkbox.BackgroundColor = value;
+ obj.Screen.BackgroundColor = value;
+
+ end % set.BackgroundColor
+
+ function value = get.BeingDeleted( obj )
+
+ value = obj.Checkbox.BeingDeleted;
+
+ end % get.BeingDeleted
+
+ function value = get.Callback( obj )
+
+ value = obj.Checkbox.Callback;
+
+ end % get.Callback
+
+ function set.Callback( obj, value )
+
+ obj.Checkbox.Callback = value;
+
+ end % set.Callback
+
+ function value = get.DeleteFcn( obj )
+
+ value = obj.Checkbox.DeleteFcn;
+
+ end % get.DeleteFcn
+
+ function set.DeleteFcn( obj, value )
+
+ obj.Checkbox.DeleteFcn = value;
+
+ end % set.DeleteFcn
+
+ function value = get.Enable( obj )
+
+ value = obj.Checkbox.Enable;
+
+ end % get.Enable
+
+ function set.Enable( obj, value )
+
+ obj.Checkbox.Enable = value;
+
+ end % set.Enable
+
+ function value = get.Extent( obj )
+
+ value = obj.Checkbox.Extent;
+
+ end % get.Extent
+
+ function value = get.FontAngle( obj )
+
+ value = obj.Checkbox.FontAngle;
+
+ end % get.FontAngle
+
+ function set.FontAngle( obj, value )
+
+ % Set
+ obj.Checkbox.FontAngle = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.FontAngle
+
+ function value = get.FontName( obj )
+
+ value = obj.Checkbox.FontName;
+
+ end % get.FontName
+
+ function set.FontName( obj, value )
+
+ % Set
+ obj.Checkbox.FontName = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.FontName
+
+ function value = get.FontSize( obj )
+
+ value = obj.Checkbox.FontSize;
+
+ end % get.FontSize
+
+ function set.FontSize( obj, value )
+
+ % Set
+ obj.Checkbox.FontSize = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.FontSize
+
+ function value = get.FontUnits( obj )
+
+ value = obj.Checkbox.FontUnits;
+
+ end % get.FontUnits
+
+ function set.FontUnits( obj, value )
+
+ obj.Checkbox.FontUnits = value;
+
+ end % set.FontUnits
+
+ function value = get.FontWeight( obj )
+
+ value = obj.Checkbox.FontWeight;
+
+ end % get.FontWeight
+
+ function set.FontWeight( obj, value )
+
+ % Set
+ obj.Checkbox.FontWeight = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.FontWeight
+
+ function value = get.ForegroundColor( obj )
+
+ value = obj.Checkbox.ForegroundColor;
+
+ end % get.ForegroundColor
+
+ function set.ForegroundColor( obj, value )
+
+ obj.Checkbox.ForegroundColor = value;
+
+ end % set.ForegroundColor
+
+ function value = get.HandleVisibility( obj )
+
+ value = obj.Container.HandleVisibility;
+
+ end % get.HandleVisibility
+
+ function set.HandleVisibility( obj, value )
+
+ obj.Container.HandleVisibility = value;
+
+ end % set.HandleVisibility
+
+ function value = get.HorizontalAlignment( obj )
+
+ value = obj.Checkbox.HorizontalAlignment;
+
+ end % get.HorizontalAlignment
+
+ function set.HorizontalAlignment( obj, value )
+
+ % Set
+ obj.Checkbox.HorizontalAlignment = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.HorizontalAlignment
+
+ function value = get.Parent( obj )
+
+ value = obj.Container.Parent;
+
+ end % get.Parent
+
+ function set.Parent( obj, value )
+
+ obj.Container.Parent = value;
+
+ end % set.Parent
+
+ function value = get.Position( obj )
+
+ value = obj.Container.Position;
+
+ end % get.Position
+
+ function set.Position( obj, value )
+
+ obj.Container.Position = value;
+
+ end % set.Position
+
+ function value = get.String( obj )
+
+ value = obj.Checkbox.String;
+
+ end % get.String
+
+ function set.String( obj, value )
+
+ % Set
+ obj.Checkbox.String = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.String
+
+ function value = get.Tag( obj )
+
+ value = obj.Checkbox.Tag;
+
+ end % get.Tag
+
+ function set.Tag( obj, value )
+
+ obj.Checkbox.Tag = value;
+
+ end % set.Tag
+
+ function value = get.TooltipString( obj )
+
+ value = obj.Checkbox.TooltipString;
+
+ end % get.TooltipString
+
+ function set.TooltipString( obj, value )
+
+ obj.Checkbox.TooltipString = value;
+
+ end % set.TooltipString
+
+ function value = get.Type( obj )
+
+ value = obj.Checkbox.Type;
+
+ end % get.Type
+
+ function value = get.UIContextMenu( obj )
+
+ value = obj.Checkbox.UIContextMenu;
+
+ end % get.UIContextMenu
+
+ function set.UIContextMenu( obj, value )
+
+ obj.Checkbox.UIContextMenu = value;
+
+ end % set.UIContextMenu
+
+ function value = get.Units( obj )
+
+ value = obj.Container.Units;
+
+ end % get.Units
+
+ function set.Units( obj, value )
+
+ obj.Container.Units = value;
+
+ end % set.Units
+
+ function value = get.UserData( obj )
+
+ value = obj.Checkbox.UserData;
+
+ end % get.UserData
+
+ function set.UserData( obj, value )
+
+ obj.Checkbox.UserData = value;
+
+ end % set.UserData
+
+ function value = get.VerticalAlignment( obj )
+
+ value = obj.VerticalAlignment_;
+
+ end % get.VerticalAlignment
+
+ function set.VerticalAlignment( obj, value )
+
+ % Check
+ assert( ischar( value ) && ...
+ any( strcmp( value, {'top','middle','bottom'} ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Property ''VerticalAlignment'' must be ''top'', ''middle'' or ''bottom''.' )
+
+ % Set
+ obj.VerticalAlignment_ = value;
+
+ % Mark as dirty
+ obj.setDirty()
+
+ end % set.VerticalAlignment
+
+ function value = get.Visible( obj )
+
+ value = obj.Container.Visible;
+
+ end % get.Visible
+
+ function set.Visible( obj, value )
+
+ obj.Container.Visible = value;
+
+ end % set.Visible
+
+ end % accessors
+
+ methods( Access = private )
+
+ function onResized( obj, ~, ~ )
+ %onResized Event handler
+
+ % Rooted, so redraw
+ obj.redraw()
+
+ end % onResized
+
+ function onFigureChanged( obj, ~, eventData )
+
+ % If rooted, redraw
+ if isempty( eventData.OldFigure ) && ...
+ ~isempty( eventData.NewFigure ) && obj.Dirty
+ obj.redraw()
+ end
+
+ end % onFigureChanged
+
+ end % event handlers
+
+ methods( Access = private )
+
+ function setDirty( obj )
+ %setDirty Mark as dirty
+ %
+ % t.setDirty() marks the text control t as dirty. If the text
+ % control is rooted then it is redrawn immediately. If not
+ % then the redraw is queued for when it is next rooted.
+
+ if isempty( obj.FigureObserver.Figure )
+ obj.Dirty = true; % set flag
+ else
+ obj.Dirty = false; % unset flag
+ obj.redraw() % redraw
+ end
+
+ end % setDirty
+
+ function redraw( obj )
+ %redraw Redraw
+ %
+ % t.redraw() redraws the text control t. Note that this
+ % requires the text control to be rooted. Methods should
+ % request redraws using setDirty, rather than calling redraw
+ % directly.
+
+ c = obj.Container;
+ b = obj.Checkbox;
+ s = obj.Screen;
+ bo = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', c ); % bounds
+ m = obj.Margin;
+ e = b.Extent;
+ switch b.HorizontalAlignment
+ case 'left'
+ x = 1 - m;
+ case 'center'
+ x = 1 + bo(3)/2 - e(3)/2 - m;
+ case 'right'
+ x = 1 + bo(3) - e(3) - m;
+ end
+ w = e(3) + m;
+ switch obj.VerticalAlignment_
+ case 'top'
+ y = 1 + bo(4) - e(4);
+ case 'middle'
+ y = 1 + bo(4)/2 - e(4)/2;
+ case 'bottom'
+ y = 1;
+ end
+ h = e(4);
+ b.Position = [x y w h];
+ s.Position = [x y m h];
+
+ end % redraw
+
+ end % helpers
+
+end % classdef
+
+function o = checkBoxLabelOffset()
+%checkBoxLabelOffset Horizontal offset to checkbox label
+
+if verLessThan( 'MATLAB', '8.6' ) % R2015b
+ o = 18;
+else
+ o = 16;
+end
+
+end % margin
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VBox.m
new file mode 100644
index 0000000..386f909
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VBox.m
@@ -0,0 +1,194 @@
+classdef VBox < uix.Box
+ %uix.VBox Vertical box
+ %
+ % b = uix.VBox(p1,v1,p2,v2,...) constructs a vertical box and sets
+ % parameter p1 to value v1, etc.
+ %
+ % A vertical box lays out contents from top to bottom.
+ %
+ % See also: uix.HBox, uix.Grid, uix.VButtonBox, uix.VBoxFlex
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ Heights % heights of contents, in pixels and/or weights
+ MinimumHeights % minimum heights of contents, in pixels
+ end
+
+ properties( Access = protected )
+ Heights_ = zeros( [0 1] ) % backing for Heights
+ MinimumHeights_ = zeros( [0 1] ) % backing for MinimumHeights
+ end
+
+ methods
+
+ function obj = VBox( varargin )
+ %uix.VBox Vertical box constructor
+ %
+ % b = uix.VBox() constructs a horizontal box.
+ %
+ % b = uix.VBox(p1,v1,p2,v2,...) sets parameter p1 to value v1,
+ % etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.Heights( obj )
+
+ value = obj.Heights_;
+
+ end % get.Heights
+
+ function set.Heights( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''Heights'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ ~any( isnan( value ) ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''Heights'' must be real and finite.' )
+ assert( isequal( size( value ), size( obj.Contents_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''Heights'' must match size of contents.' )
+
+ % Set
+ obj.Heights_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.Heights
+
+ function value = get.MinimumHeights( obj )
+
+ value = obj.MinimumHeights_;
+
+ end % get.MinimumHeights
+
+ function set.MinimumHeights( obj, value )
+
+ % For those who can't tell a column from a row...
+ if isrow( value )
+ value = transpose( value );
+ end
+
+ % Check
+ assert( isa( value, 'double' ), 'uix:InvalidPropertyValue', ...
+ 'Property ''MinimumHeights'' must be of type double.' )
+ assert( all( isreal( value ) ) && ~any( isinf( value ) ) && ...
+ all( value >= 0 ), 'uix:InvalidPropertyValue', ...
+ 'Elements of property ''MinimumHeights'' must be non-negative.' )
+ assert( isequal( size( value ), size( obj.Heights_ ) ), ...
+ 'uix:InvalidPropertyValue', ...
+ 'Size of property ''MinimumHeights'' must match size of contents.' )
+
+ % Set
+ obj.MinimumHeights_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.MinimumHeights
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw
+ %
+ % c.redraw() redraws the container c.
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ heights = obj.Heights_;
+ minimumHeights = obj.MinimumHeights_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+ r = numel( heights );
+ xPositions = [padding + 1, max( bounds(3) - 2 * padding, 1 )];
+ xPositions = repmat( xPositions, [r 1] );
+ ySizes = uix.calcPixelSizes( bounds(4), heights, ...
+ minimumHeights, padding, spacing );
+ yPositions = [bounds(4) - cumsum( ySizes ) - padding - ...
+ spacing * transpose( 0:r-1 ) + 1, ySizes];
+ positions = [xPositions(:,1), yPositions(:,1), ...
+ xPositions(:,2), yPositions(:,2)];
+
+ % Set positions
+ children = obj.Contents_;
+ for ii = 1:numel( children )
+ uix.setPosition( children(ii), positions(ii,:), 'pixels' )
+ end
+
+ end % redraw
+
+ function addChild( obj, child )
+ %addChild Add child
+ %
+ % c.addChild(d) adds the child d to the container c.
+
+ % Add to sizes
+ obj.Heights_(end+1,:) = -1;
+ obj.MinimumHeights_(end+1,:) = 1;
+
+ % Call superclass method
+ addChild@uix.Box( obj, child )
+
+ end % addChild
+
+ function removeChild( obj, child )
+ %removeChild Remove child
+ %
+ % c.removeChild(d) removes the child d from the container c.
+
+ % Remove from sizes
+ tf = obj.Contents_ == child;
+ obj.Heights_(tf,:) = [];
+ obj.MinimumHeights_(tf,:) = [];
+
+ % Call superclass method
+ removeChild@uix.Box( obj, child )
+
+ end % removeChild
+
+ function reorder( obj, indices )
+ %reorder Reorder contents
+ %
+ % c.reorder(i) reorders the container contents using indices
+ % i, c.Contents = c.Contents(i).
+
+ % Reorder
+ obj.Heights_ = obj.Heights_(indices,:);
+ obj.MinimumHeights_ = obj.MinimumHeights_(indices,:);
+
+ % Call superclass method
+ reorder@uix.Box( obj, indices )
+
+ end % reorder
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VBoxFlex.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VBoxFlex.m
new file mode 100644
index 0000000..71163ce
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VBoxFlex.m
@@ -0,0 +1,349 @@
+classdef VBoxFlex < uix.VBox & uix.mixin.Flex
+ %uix.VBoxFlex Flexible vertical box
+ %
+ % b = uix.VBoxFlex(p1,v1,p2,v2,...) constructs a flexible vertical box
+ % and sets parameter p1 to value v1, etc.
+ %
+ % A vertical box lays out contents from top to bottom. Users can
+ % resize contents by dragging the dividers.
+ %
+ % See also: uix.HBoxFlex, uix.GridFlex, uix.VBox, uix.VButtonBox
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ properties( Access = public, Dependent, AbortSet )
+ DividerMarkings % divider markings [on|off]
+ end
+
+ properties( Access = private )
+ RowDividers = uix.Divider.empty( [0 1] ) % row dividers
+ FrontDivider % front divider
+ DividerMarkings_ = 'on' % backing for DividerMarkings
+ MousePressListener = event.listener.empty( [0 0] ) % mouse press listener
+ MouseReleaseListener = event.listener.empty( [0 0] ) % mouse release listener
+ MouseMotionListener = event.listener.empty( [0 0] ) % mouse motion listener
+ ActiveDivider = 0 % active divider index
+ ActiveDividerPosition = [NaN NaN NaN NaN] % active divider position
+ MousePressLocation = [NaN NaN] % mouse press location
+ BackgroundColorListener % background color listener
+ end
+
+ methods
+
+ function obj = VBoxFlex( varargin )
+ %uix.VBoxFlex Flexible vertical box constructor
+ %
+ % b = uix.VBoxFlex() constructs a flexible vertical box.
+ %
+ % b = uix.VBoxFlex(p1,v1,p2,v2,...) sets parameter p1 to value
+ % v1, etc.
+
+ % Create front divider
+ frontDivider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'horizontal', ...
+ 'BackgroundColor', obj.BackgroundColor * 0.75, ...
+ 'Visible', 'off' );
+
+ % Create listeners
+ backgroundColorListener = event.proplistener( obj, ...
+ findprop( obj, 'BackgroundColor' ), 'PostSet', ...
+ @obj.onBackgroundColorChange );
+
+ % Store properties
+ obj.FrontDivider = frontDivider;
+ obj.BackgroundColorListener = backgroundColorListener;
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods
+
+ function value = get.DividerMarkings( obj )
+
+ value = obj.DividerMarkings_;
+
+ end % get.DividerMarkings
+
+ function set.DividerMarkings( obj, value )
+
+ % Check
+ assert( ischar( value ) && any( strcmp( value, {'on','off'} ) ), ...
+ 'uix:InvalidArgument', ...
+ 'Property ''DividerMarkings'' must be ''on'' or ''off'.' )
+
+ % Set
+ obj.DividerMarkings_ = value;
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % set.DividerMarkings
+
+ end % accessors
+
+ methods( Access = protected )
+
+ function onMousePress( obj, source, eventData )
+ %onMousePress Handler for WindowMousePress events
+
+ % Check whether mouse is over a divider
+ loc = find( obj.RowDividers.isMouseOver( eventData ) );
+ if isempty( loc ), return, end
+
+ % Capture state at button down
+ divider = obj.RowDividers(loc);
+ obj.ActiveDivider = loc;
+ obj.ActiveDividerPosition = divider.Position;
+ root = groot();
+ obj.MousePressLocation = root.PointerLocation;
+
+ % Make sure the pointer is appropriate
+ obj.updateMousePointer( source, eventData );
+
+ % Activate divider
+ frontDivider = obj.FrontDivider;
+ frontDivider.Position = divider.Position;
+ divider.Visible = 'off';
+ frontDivider.Parent = [];
+ frontDivider.Parent = obj;
+ frontDivider.Visible = 'on';
+
+ end % onMousePress
+
+ function onMouseRelease( obj, ~, ~ )
+ %onMousePress Handler for WindowMouseRelease events
+
+ % Compute new positions
+ loc = obj.ActiveDivider;
+ if loc > 0
+ root = groot();
+ delta = root.PointerLocation(2) - obj.MousePressLocation(2);
+ ih = loc;
+ jh = loc + 1;
+ ic = loc;
+ jc = loc + 1;
+ divider = obj.RowDividers(loc);
+ contents = obj.Contents_;
+ oldPixelHeights = [contents(ic).Position(4); contents(jc).Position(4)];
+ minimumHeights = obj.MinimumHeights_(ih:jh,:);
+ if delta < 0 % limit to minimum distance from lower neighbor
+ delta = max( delta, minimumHeights(2) - oldPixelHeights(2) );
+ else % limit to minimum distance from upper neighbor
+ delta = min( delta, oldPixelHeights(1) - minimumHeights(1) );
+ end
+ oldHeights = obj.Heights_(loc:loc+1);
+ newPixelHeights = oldPixelHeights - delta * [1;-1];
+ if oldHeights(1) < 0 && oldHeights(2) < 0 % weight, weight
+ newHeights = oldHeights .* newPixelHeights ./ oldPixelHeights;
+ elseif oldHeights(1) < 0 && oldHeights(2) >= 0 % weight, pixels
+ newHeights = [oldHeights(1) * newPixelHeights(1) / ...
+ oldPixelHeights(1); newPixelHeights(2)];
+ elseif oldHeights(1) >= 0 && oldHeights(2) < 0 % pixels, weight
+ newHeights = [newPixelHeights(1); oldHeights(2) * ...
+ newPixelHeights(2) / oldPixelHeights(2)];
+ else % sizes(1) >= 0 && sizes(2) >= 0 % pixels, pixels
+ newHeights = newPixelHeights;
+ end
+ obj.Heights_(loc:loc+1) = newHeights;
+ else
+ return
+ end
+
+ % Deactivate divider
+ obj.FrontDivider.Visible = 'off';
+ divider.Visible = 'on';
+
+ % Reset state at button down
+ obj.ActiveDivider = 0;
+ obj.ActiveDividerPosition = [NaN NaN NaN NaN];
+ obj.MousePressLocation = [NaN NaN];
+
+ % Mark as dirty
+ obj.Dirty = true;
+
+ end % onMouseRelease
+
+ function onMouseMotion( obj, source, eventData )
+ %onMouseMotion Handler for WindowMouseMotion events
+
+ loc = obj.ActiveDivider;
+ if loc == 0 % hovering, update pointer
+ obj.updateMousePointer( source, eventData );
+ else % dragging row divider
+ root = groot();
+ delta = root.PointerLocation(2) - obj.MousePressLocation(2);
+ ih = loc;
+ jh = loc + 1;
+ ic = loc;
+ jc = loc + 1;
+ contents = obj.Contents_;
+ oldPixelHeights = [contents(ic).Position(4); contents(jc).Position(4)];
+ minimumHeights = obj.MinimumHeights_(ih:jh,:);
+ if delta < 0 % limit to minimum distance from lower neighbor
+ delta = max( delta, minimumHeights(2) - oldPixelHeights(2) );
+ else % limit to minimum distance from upper neighbor
+ delta = min( delta, oldPixelHeights(1) - minimumHeights(1) );
+ end
+ obj.FrontDivider.Position = ...
+ obj.ActiveDividerPosition + [0 delta 0 0];
+ end
+
+ end % onMouseMotion
+
+ function onBackgroundColorChange( obj, ~, ~ )
+ %onBackgroundColorChange Handler for BackgroundColor changes
+
+ backgroundColor = obj.BackgroundColor;
+ highlightColor = min( [backgroundColor / 0.75; 1 1 1] );
+ shadowColor = max( [backgroundColor * 0.75; 0 0 0] );
+ rowDividers = obj.RowDividers;
+ for ii = 1:numel( rowDividers )
+ rowDivider = rowDividers(ii);
+ rowDivider.BackgroundColor = backgroundColor;
+ rowDivider.HighlightColor = highlightColor;
+ rowDivider.ShadowColor = shadowColor;
+ end
+ frontDivider = obj.FrontDivider;
+ frontDivider.BackgroundColor = shadowColor;
+
+ end % onBackgroundColorChange
+
+ end % event handlers
+
+ methods( Access = protected )
+
+ function redraw( obj )
+ %redraw Redraw contents
+ %
+ % c.redraw() redraws the container c.
+
+ % Call superclass method
+ redraw@uix.VBox( obj )
+
+ % Create or destroy row dividers
+ q = numel( obj.RowDividers ); % current number of dividers
+ r = max( [numel( obj.Heights_ )-1 0] ); % required number of dividers
+ if q < r % create
+ for ii = q+1:r
+ divider = uix.Divider( 'Parent', obj, ...
+ 'Orientation', 'horizontal', ...
+ 'BackgroundColor', obj.BackgroundColor );
+ obj.RowDividers(ii,:) = divider;
+ end
+ elseif q > r % destroy
+ % Destroy dividers
+ delete( obj.RowDividers(r+1:q,:) )
+ obj.RowDividers(r+1:q,:) = [];
+ % Update pointer
+ if r == 0 && strcmp( obj.Pointer, 'top' )
+ obj.unsetPointer()
+ end
+ end
+
+ % Compute container bounds
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+
+ % Retrieve size properties
+ heights = obj.Heights_;
+ minimumHeights = obj.MinimumHeights_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+
+ % Compute row divider positions
+ xRowPositions = [padding + 1, max( bounds(3) - 2 * padding, 1 )];
+ xRowPositions = repmat( xRowPositions, [r 1] );
+ yRowSizes = uix.calcPixelSizes( bounds(4), heights, ...
+ minimumHeights, padding, spacing );
+ yRowPositions = [bounds(4) - cumsum( yRowSizes(1:r,:) ) - padding - ...
+ spacing * transpose( 1:r ) + 1, repmat( spacing, [r 1] )];
+ rowPositions = [xRowPositions(:,1), yRowPositions(:,1), ...
+ xRowPositions(:,2), yRowPositions(:,2)];
+
+ % Position row dividers
+ for ii = 1:r
+ rowDivider = obj.RowDividers(ii);
+ rowDivider.Position = rowPositions(ii,:);
+ switch obj.DividerMarkings_
+ case 'on'
+ rowDivider.Markings = rowPositions(ii,3)/2;
+ case 'off'
+ rowDivider.Markings = zeros( [0 1] );
+ end
+ end
+
+ end % redraw
+
+ function reparent( obj, oldFigure, newFigure )
+ %reparent Reparent container
+ %
+ % c.reparent(a,b) reparents the container c from the figure a
+ % to the figure b.
+
+ % Update listeners
+ if isempty( newFigure )
+ mousePressListener = event.listener.empty( [0 0] );
+ mouseReleaseListener = event.listener.empty( [0 0] );
+ mouseMotionListener = event.listener.empty( [0 0] );
+ else
+ mousePressListener = event.listener( newFigure, ...
+ 'WindowMousePress', @obj.onMousePress );
+ mouseReleaseListener = event.listener( newFigure, ...
+ 'WindowMouseRelease', @obj.onMouseRelease );
+ mouseMotionListener = event.listener( newFigure, ...
+ 'WindowMouseMotion', @obj.onMouseMotion );
+ end
+ obj.MousePressListener = mousePressListener;
+ obj.MouseReleaseListener = mouseReleaseListener;
+ obj.MouseMotionListener = mouseMotionListener;
+
+ % Call superclass method
+ reparent@uix.VBox( obj, oldFigure, newFigure )
+
+ % Update pointer
+ if ~isempty( oldFigure ) && ~strcmp( obj.Pointer, 'unset' )
+ obj.unsetPointer()
+ end
+
+ end % reparent
+
+ end % template methods
+
+ methods( Access = protected )
+
+ function updateMousePointer ( obj, source, eventData )
+
+ oldPointer = obj.Pointer;
+ if any( obj.RowDividers.isMouseOver( eventData ) )
+ newPointer = 'top';
+ else
+ newPointer = 'unset';
+ end
+ switch newPointer
+ case oldPointer % no change
+ % do nothing
+ case 'unset' % change, unset
+ obj.unsetPointer()
+ otherwise % change, set
+ obj.setPointer( source, newPointer )
+ end
+
+ end % updateMousePointer
+
+ end % helpers methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VButtonBox.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VButtonBox.m
new file mode 100644
index 0000000..22419fa
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/VButtonBox.m
@@ -0,0 +1,98 @@
+classdef VButtonBox < uix.ButtonBox
+ %uix.VButtonBox Vertical button box
+ %
+ % b = uix.VButtonBox(p1,v1,p2,v2,...) constructs a vertical button box
+ % and sets parameter p1 to value v1, etc.
+ %
+ % A vertical button box lays out equally sized buttons from top to
+ % bottom.
+ %
+ % See also: uix.HButtonBox
+
+ % Copyright 2009-2016 The MathWorks, Inc.
+ % $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+ methods
+
+ function obj = VButtonBox( varargin )
+ %uix.VButtonBox Vertical button box constructor
+ %
+ % b = uix.VButtonBox() constructs a vertical button box.
+ %
+ % b = uix.VButtonBox(p1,v1,p2,v2,...) sets parameter p1 to
+ % value v1, etc.
+
+ % Set properties
+ if nargin > 0
+ try
+ assert( rem( nargin, 2 ) == 0, 'uix:InvalidArgument', ...
+ 'Parameters and values must be provided in pairs.' )
+ set( obj, varargin{:} )
+ catch e
+ delete( obj )
+ e.throwAsCaller()
+ end
+ end
+
+ end % constructor
+
+ end % structors
+
+ methods( Access = protected )
+
+ function redraw( obj )
+
+ % Compute positions
+ bounds = hgconvertunits( ancestor( obj, 'figure' ), ...
+ [0 0 1 1], 'normalized', 'pixels', obj );
+ buttonSize = obj.ButtonSize_;
+ padding = obj.Padding_;
+ spacing = obj.Spacing_;
+ r = numel( obj.Contents_ );
+ if 2 * padding + buttonSize(1) > bounds(3)
+ xSizes = repmat( uix.calcPixelSizes( bounds(3), -1, 1, ...
+ padding, spacing ), [r 1] ); % shrink to fit
+ else
+ xSizes = repmat( buttonSize(1), [r 1] );
+ end
+ switch obj.HorizontalAlignment
+ case 'left'
+ xPositions = [repmat( padding, [r 1] ) + 1, xSizes];
+ case 'center'
+ xPositions = [(bounds(3) - xSizes) / 2 + 1, xSizes];
+ case 'right'
+ xPositions = [bounds(3) - xSizes - padding + 1, xSizes];
+ end
+ if 2 * padding + (r-1) * spacing + r * buttonSize(2) > bounds(4)
+ ySizes = uix.calcPixelSizes( bounds(4), -ones( [r 1] ), ...
+ ones( [r 1] ), padding, spacing ); % shrink to fit
+ else
+ ySizes = repmat( buttonSize(2), [r 1] );
+ end
+ switch obj.VerticalAlignment
+ case 'top'
+ yPositions = [bounds(4) - padding - cumsum( ySizes ) - ...
+ spacing * transpose( 0:r-1 ) + 1, ySizes];
+ case 'middle'
+ yPositions = [bounds(4) / 2 + sum( ySizes ) / 2 + ...
+ spacing * (r-1) / 2 - cumsum( ySizes ) - ...
+ spacing * transpose( 0:r-1 ) + 1, ySizes];
+ case 'bottom'
+ yPositions = [sum( ySizes ) + spacing * (r-1) - ...
+ cumsum( ySizes ) - spacing * transpose( 0:r-1 ) + ...
+ padding + 1, ySizes];
+ end
+ positions = [xPositions(:,1), yPositions(:,1), ...
+ xPositions(:,2), yPositions(:,2)];
+
+ % Set positions
+ children = obj.Contents_;
+ for ii = 1:numel( children )
+ uix.setPosition( children(ii), positions(ii,:), 'pixels' )
+ end
+
+ end % redraw
+
+ end % template methods
+
+end % classdef
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/calcPixelSizes.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/calcPixelSizes.m
new file mode 100644
index 0000000..bda8744
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/calcPixelSizes.m
@@ -0,0 +1,47 @@
+function pSizes = calcPixelSizes( pTotal, mSizes, pMinima, pPadding, pSpacing )
+%calcPixelSizes Calculate child sizes in pixels
+%
+% pSizes = uix.calcPixelSizes(total,mSizes,minSizes,padding,spacing)
+% computes child sizes (in pixels) given total available size (in pixels),
+% child sizes (in pixels and/or relative), minimum child sizes (in
+% pixels), padding (in pixels) and spacing (in pixels).
+%
+% Notes:
+% * All children are at least as large as the minimum specified size
+% * Relative sizes are respected for children larger than then minimum
+% specified size
+% * Children may extend beyond the total available size if the minimum
+% sizes, padding and spacing are too large
+
+% Copyright 2009-2015 The MathWorks, Inc.
+% $Revision: 1182 $ $Date: 2015-12-07 14:27:30 -0500 (Mon, 07 Dec 2015) $
+
+% Initialize
+pSizes = NaN( size( mSizes ) ); % output
+n = numel( mSizes ); % need this later
+
+% Apply absolute sizes
+a = mSizes >= 0; % absolute
+pSizes(a) = max( mSizes(a), pMinima(a) );
+
+while true
+
+ u = isnan( pSizes ); % unsolved
+ pUnsolvedTotal = pTotal - max( (n-1), 0 ) * pSpacing ...
+ - 2 * sign( n ) * pPadding - sum( pSizes(~u) );
+ pUnsolvedSizes = mSizes(u) / sum( mSizes(u) ) * pUnsolvedTotal;
+ pUnsolvedMinima = pMinima(u);
+ s = pUnsolvedSizes < pUnsolvedMinima; % small
+ if any( s )
+ pUnsolvedSizes(s) = pUnsolvedMinima(s);
+ pUnsolvedSizes(~s) = NaN;
+ pSizes(u) = pUnsolvedSizes;
+ % repeat
+ else
+ pSizes(u) = pUnsolvedSizes;
+ break % done
+ end
+
+end
+
+end % calcPixelSizes
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/loadIcon.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/loadIcon.m
new file mode 100644
index 0000000..0499a92
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/loadIcon.m
@@ -0,0 +1,102 @@
+function cdata = loadIcon( filename, bgcol )
+%loadIcon Load an icon and set the transparent color
+%
+% cdata = uix.loadIcon(filename) loads the icon from the specified
+% filename. For PNG files with transparency, the transparent pixels are
+% set to NaN. For other files, pixels that are pure green are set to
+% transparent (i.e., "green screen"). The resulting cdata is an RGB
+% double array.
+%
+% cdata = uix.loadIcon(filename,bgcol) tries to merge the color data with
+% the specified background colour bgcol. Fully transparent pixels are
+% still set to NaN, but partially transparent pixels are merged with the
+% background.
+%
+% See also: imread
+
+% Copyright 2009-2016 The MathWorks, Inc.
+% $Revision: 1436 $ $Date: 2016-11-17 17:53:29 +0000 (Thu, 17 Nov 2016) $
+
+% Check inputs
+narginchk( 1, 2 )
+if nargin < 2
+ bgcol = get( 0, 'DefaultUIControlBackgroundColor' );
+end
+
+% First try normally
+thisDir = fileparts( mfilename( 'fullpath' ) );
+iconDir = fullfile( thisDir, 'Resources' );
+if exist( filename, 'file' )
+ [cdata, map, alpha] = imread( filename );
+elseif exist( fullfile( iconDir, filename ), 'file' )
+ [cdata, map, alpha] = imread( fullfile( iconDir, filename ) );
+else
+ error( 'uix:FileNotFound', 'Cannot open file ''%s''.', filename )
+end
+
+% Convert indexed images to RGB
+if ~isempty( map )
+ cdata = ind2rgb( cdata, map );
+end
+
+% Convert to double before applying transparency
+cdata = convertToDouble( cdata );
+
+% Handle transparency
+[rows, cols, ~] = size( cdata );
+if ~isempty( alpha )
+
+ % Transparency specified
+ alpha = convertToDouble( alpha );
+ f = find( alpha==0 );
+ if ~isempty( f )
+ cdata(f) = NaN;
+ cdata(f + rows*cols) = NaN;
+ cdata(f + 2*rows*cols) = NaN;
+ end
+ % Now blend partial alphas
+ f = find( alpha(:)>0 & alpha(:)<1 );
+ if ~isempty(f)
+ cdata(f) = cdata(f).*alpha(f) + bgcol(1)*(1-alpha(f));
+ cdata(f + rows*cols) = cdata(f + rows*cols).*alpha(f) + bgcol(2)*(1-alpha(f));
+ cdata(f + 2*rows*cols) = cdata(f + 2*rows*cols).*alpha(f) + bgcol(3)*(1-alpha(f));
+ end
+
+else
+
+ % Do a "green screen", treating anything pure-green as transparent
+ f = find( cdata(:,:,1)==0 & cdata(:,:,2)==1 & cdata(:,:,3)==0 );
+ cdata(f) = NaN;
+ cdata(f + rows*cols) = NaN;
+ cdata(f + 2*rows*cols) = NaN;
+
+end
+
+end % uix.loadIcon
+
+% -------------------------------------------------------------------------
+
+function cdata = convertToDouble( cdata )
+%convertToDouble Convert image data to double in the range [0,1]
+%
+% cdata = convertToDouble(cData)
+
+switch lower( class( cdata ) )
+ case 'double'
+ % do nothing
+ case 'single'
+ cdata = double( cdata );
+ case 'uint8'
+ cdata = double( cdata ) / 255;
+ case 'uint16'
+ cdata = double( cdata ) / 65535;
+ case 'int8'
+ cdata = ( double( cdata ) + 128 ) / 255;
+ case 'int16'
+ cdata = ( double( cdata ) + 32768 ) / 65535;
+ otherwise
+ error( 'uix:InvalidArgument', ...
+ 'Image data of type ''%s'' is not supported.', class( cdata ) )
+end
+
+end % convertToDouble
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/setPosition.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/setPosition.m
new file mode 100644
index 0000000..6b76995
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/setPosition.m
@@ -0,0 +1,29 @@
+function setPosition( o, p, u )
+%setPosition Set position of graphics object
+%
+% setPosition(o,p,u) sets the position of a graphics object o to value p
+% with units u.
+%
+% In contrast to setting the Position property directly, this function
+% honors the ActivePositionProperty of axes.
+
+% Copyright 2009-2016 The MathWorks, Inc.
+% $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+o.Units = u;
+if isa( o, 'matlab.graphics.axis.Axes' )
+ switch o.ActivePositionProperty
+ case 'position'
+ o.Position = p;
+ case 'outerposition'
+ o.OuterPosition = p;
+ otherwise
+ error( 'uix:InvalidState', ...
+ 'Unknown value ''%s'' for property ''ActivePositionProperty'' of %s.', ...
+ o.ActivePositionProperty, class( o ) )
+ end
+else
+ o.Position = p;
+end
+
+end % setPosition
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/tracking.m b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/tracking.m
new file mode 100644
index 0000000..c8403a8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/+uix/tracking.m
@@ -0,0 +1,229 @@
+function varargout = tracking( varargin )
+%tracking Track anonymized usage data
+%
+% tracking(p,v,id) tracks usage to the property p for the product version
+% v and identifier id. No personally identifiable information is tracked.
+%
+% r = tracking(...) returns the server response r, for debugging purposes.
+%
+% tracking('on') turns tracking on. tracking('off') turns tracking off.
+% tracking('query') returns the tracking state.
+
+% tracking('spoof') sets the tracking settings -- domain, language,
+% client, MATLAB version, operating system version -- to spoof values.
+% tracking('reset') sets the tracking settings to normal values.
+%
+% [t,s] = tracking('query') returns the tracking state t and settings s.
+
+% Copyright 2016 The MathWorks, Inc.
+% $Revision: 1435 $ $Date: 2016-11-17 17:50:34 +0000 (Thu, 17 Nov 2016) $
+
+persistent STATE USERNAME DOMAIN LANGUAGE CLIENT MATLAB OS
+if isempty( STATE )
+ STATE = getpref( 'Tracking', 'State', 'on' );
+ if strcmp( STATE, 'snooze' ) % deprecated
+ setpref( 'Tracking', 'State', 'on' )
+ STATE = 'on';
+ end
+ if ispref( 'Tracking', 'Date' ) % deprecated
+ rmpref( 'Tracking', 'Date' )
+ end
+ USERNAME = getenv( 'USERNAME' );
+ reset()
+end % initialize
+
+switch nargin
+ case 1
+ switch varargin{1}
+ case {'on','off'}
+ STATE = varargin{1};
+ setpref( 'Tracking', 'State', varargin{1} ) % persist
+ case 'spoof'
+ spoof()
+ case 'reset'
+ reset()
+ case 'query'
+ varargout{1} = STATE;
+ varargout{2} = query();
+ otherwise
+ error( 'tracking:InvalidArgument', ...
+ 'Valid options are ''on'', ''off'' and ''query''.' )
+ end
+ case 3
+ switch nargout
+ case 0
+ if strcmp( STATE, 'off' ), return, end
+ uri = 'https://www.google-analytics.com/collect';
+ track( uri, varargin{:} );
+ case 1
+ uri = 'https://www.google-analytics.com/debug/collect';
+ varargout{1} = track( uri, varargin{:} );
+ otherwise
+ nargoutchk( 0, 1 )
+ end
+ otherwise
+ narginchk( 3, 3 )
+end % switch
+
+ function reset()
+ %reset Set normal settings
+
+ DOMAIN = lower( getenv( 'USERDOMAIN' ) );
+ LANGUAGE = char( java.util.Locale.getDefault() );
+ CLIENT = getpref( 'Tracking', 'Client', uuid() );
+ MATLAB = matlab();
+ OS = os();
+
+ end % reset
+
+ function spoof()
+ %spoof Set spoof settings
+
+ DOMAIN = randomDomain();
+ LANGUAGE = randomLanguage();
+ CLIENT = randomClient();
+ MATLAB = randomMatlab();
+ OS = randomOs();
+
+ end % spoof
+
+ function s = query()
+ %query Return settings
+
+ s.Username = USERNAME;
+ s.Domain = DOMAIN;
+ s.Language = LANGUAGE;
+ s.Client = CLIENT;
+ s.Matlab = MATLAB;
+ s.Os = OS;
+
+ end % query
+
+ function varargout = track( uri, p, v, s )
+ %track Do tracking
+
+ a = sprintf( '%s/%s (%s)', MATLAB, v, OS );
+ if isdeployed()
+ ds = 'deployed';
+ elseif strcmp( DOMAIN, 'mathworks' )
+ ds = DOMAIN;
+ else
+ ds = 'unknown';
+ end
+ pv = {'v', '1', 'tid', p, 'ua', escape( a ), 'ul', LANGUAGE, ...
+ 'cid', CLIENT, 'ht', 'pageview', ...
+ 'dp', sprintf( '/%s', s ), 'ds', ds};
+ [varargout{1:nargout}] = urlread( uri, 'Post', pv );
+
+ end % track
+
+end % tracking
+
+function s = randomDomain()
+%randomDomain Random domain string
+
+switch randi( 4 )
+ case 1
+ s = 'mathworks';
+ otherwise
+ s = hash( uuid() );
+end
+
+end % randomDomain
+
+function s = randomLanguage()
+%randomLanguage Random language string
+
+lo = java.util.Locale.getAvailableLocales();
+s = char( lo(randi( numel( lo ) )) );
+
+end % randomLanguage
+
+function s = randomClient()
+%randomClient Random client identifier
+
+s = uuid();
+
+end % randomClient
+
+function s = matlab()
+%matlab MATLAB version string
+
+v = ver( 'MATLAB' );
+s = v.Release;
+s(s=='('|s==')') = [];
+
+end % matlab
+
+function s = randomMatlab()
+%randomMatlab Random MATLAB version string
+
+releases = {'R2014b' 'R2015a' 'R2015b' 'R2016a' 'R2016b'};
+s = releases{randi( numel( releases ) )};
+
+end % randomMatlab
+
+function s = os()
+%os Operating system string
+
+if ispc()
+ s = sprintf( 'Windows NT %s', ...
+ char( java.lang.System.getProperty( 'os.version' ) ) );
+elseif isunix()
+ s = 'Linux x86_64';
+elseif ismac()
+ s = sprintf( 'Macintosh; Intel OS X %s', ...
+ strrep( char( java.lang.System.getProperty( 'os.version' ) ), ' ', '_' ) );
+else
+ s = 'unknown';
+end
+
+end % os
+
+function s = randomOs()
+%randomOs Random operating system string
+
+switch randi( 3 )
+ case 1
+ versions = [5.1 5.2 6 6.1 6.2 6.3 10];
+ s = sprintf( 'Windows NT %.1f', ...
+ versions(randi( numel( versions ) )) );
+ case 2
+ s = 'Linux x86_64';
+ case 3
+ s = sprintf( 'Macintosh; Intel OS X 10_%d', ...
+ randi( [10 12] ) );
+end
+
+end % randomOs
+
+function s = escape( s )
+%escape Escape string
+
+s = char( java.net.URLEncoder.encode( s, 'UTF-8' ) );
+
+end % escape
+
+function h = hash( s )
+%hash Hash string
+%
+% See also: rptgen.hash
+
+persistent MD5
+if isempty( MD5 )
+ MD5 = java.security.MessageDigest.getInstance( 'MD5' );
+end
+
+MD5.update( uint8( s(:) ) );
+h = typecast( MD5.digest, 'uint8' );
+h = dec2hex( h )';
+h = lower( h(:) )';
+
+end % hash
+
+function s = uuid()
+%uuid Unique identifier
+
+s = char( java.util.UUID.randomUUID() );
+
+end % uuid
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/Contents.m b/widgets/GUI Layout Toolbox 2.3.1/layout/Contents.m
new file mode 100644
index 0000000..d686e37
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/Contents.m
@@ -0,0 +1,29 @@
+% GUI Layout Toolbox
+% Version 2.3.1 (R2016b) 24-November-2016
+%
+% Panels
+% uix.Panel - arrange a single element inside a standard panel
+% uix.CardPanel - show one element from a list
+% uix.BoxPanel - arrange a single element inside a panel with a boxed title
+% uix.TabPanel - arrange elements in a panel with tabs for selecting which is visible
+% uix.ScrollingPanel - arrange a single element inside a scrollable panel
+%
+% Boxes
+% uix.HBox - arrange elements horizontally in a single row
+% uix.VBox - arrange elements vertically in a single column
+% uix.HBoxFlex - arrange elements horizontally with draggable dividers
+% uix.VBoxFlex - arrange elements vertically with draggable dividers
+% uix.HButtonBox - arrange buttons horizontally in a single row
+% uix.VButtonBox - arrange buttons vertically in a single column
+%
+% Grids
+% uix.Grid - arrange elements in a two-dimensional grid
+% uix.GridFlex - arrange elements in a two-dimensional grid with draggable dividers
+%
+% Other
+% uix.Empty - create an empty space
+% uix.tracking - track anonymized usage data
+% uix.Text - create an alignable, clickable text control
+
+% Copyright 2009-2016 The MathWorks, Inc.
+% $Revision: 1434 $ $Date: 2016-11-17 17:44:45 +0000 (Thu, 17 Nov 2016) $
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layout/layoutRoot.m b/widgets/GUI Layout Toolbox 2.3.1/layout/layoutRoot.m
new file mode 100644
index 0000000..791f99e
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layout/layoutRoot.m
@@ -0,0 +1,18 @@
+function folder = layoutRoot()
+%layoutRoot Folder containing the GUI Layout Toolbox
+%
+% folder = layoutRoot() returns the full path to the folder containing
+% the GUI Layout Toolbox.
+%
+% Examples:
+% >> folder = layoutRoot()
+% folder = 'C:\tools\layouts2\layout'
+%
+% See also: layoutVersion
+
+% Copyright 2009-2014 The MathWorks, Inc.
+% $Revision: 980 $ $Date: 2014-09-28 14:27:26 -0400 (Sun, 28 Sep 2014) $
+
+folder = fileparts( mfilename( 'fullpath' ) );
+
+end % layoutRoot
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/AxesExample.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/AxesExample.html
new file mode 100644
index 0000000..22c0653
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/AxesExample.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/AxesLegendsColorbars.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/AxesLegendsColorbars.html
new file mode 100644
index 0000000..5ad8c1f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/AxesLegendsColorbars.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/BoxPanelFancyStuff.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/BoxPanelFancyStuff.html
new file mode 100644
index 0000000..e7551e3
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/BoxPanelFancyStuff.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Compiling.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Compiling.html
new file mode 100644
index 0000000..14b7298
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Compiling.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/ExampleApp.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/ExampleApp.html
new file mode 100644
index 0000000..6a276b5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/ExampleApp.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples.html
new file mode 100644
index 0000000..e060671
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+ Examples
+
+
+
+
+
+
+
+
+ Examples
+
+ The following examples are provided as part of this documentation. Click
+ the name of any example to go to the corresponding page.
+
+ Basics
+
+ Layout hierarchy
+ Using layouts inside layouts to produce more complex designs
+
+
+ Using axes
+
+ Positioning axes
+ Using the different axes position properties.
+
+ Axes legends and colorbars
+ How to work with axes that may also have legends and/or colorbars.
+
+
+ Using panels
+
+ Context help
+ Adding context-sensitive help using panels.
+
+ Minimize and maximize
+ Creating a user interface with panels that can be minimized and
+ maximized.
+
+ Dock and undock
+ Creating a user interface with panels that can be undocked into
+ separate windows.
+
+
+ Visible
+
+ Show and hide
+ Showing and hiding a layout and its contents.
+
+
+ Applications
+
+ Building a complete application
+ Using layouts together to produce a complete application.
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/axesexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/axesexample.m
new file mode 100644
index 0000000..5801555
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/axesexample.m
@@ -0,0 +1,41 @@
+%% Axes inside layouts
+% This example demonstrates how axes are affected by being placed into
+% layouts. The layouts take into account the "ActivePositionProperty" in
+% order to determine whether to set the "Position" or "OuterPosition"
+% (default) property of the axes.
+%
+% Copyright 2009-2013 The MathWorks, Inc.
+
+%% Open the window
+% Open a new figure window and remove the toolbar and menus
+window = figure( 'Name', 'Axes inside layouts', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'NumberTitle', 'off' );
+
+%% Create the layout
+% The layout involves two axes side by side. This is done using a
+% flexible horizontal box. The left-hand axes is left with the
+% ActivePositionProperty set to "outerposition", but the right-hand axes is
+% switched to use "Position"
+hbox = uix.HBoxFlex('Parent', window, 'Spacing', 3);
+axes1 = axes( 'Parent', hbox, ...
+ 'ActivePositionProperty', 'outerposition' );
+axes2 = axes( 'Parent', hbox, ...
+ 'ActivePositionProperty', 'Position' );
+set( hbox, 'Widths', [-2 -1] );
+
+%% Fill the axes
+% Using "OuterPosition" (left-hand axes) is the normal mode and looks good
+% for virtually any plot type. Using "Position" is only really useful for
+% 2D plots with the axes turned off, such as images
+x = membrane( 1, 15 );
+surf( axes1, x );
+lighting( axes1, 'gouraud' );
+shading( axes1, 'interp' );
+l = light( 'Parent', axes1 );
+camlight( l, 'head' );
+axis( axes1, 'tight' );
+
+imagesc( x, 'Parent', axes2 );
+set( axes2, 'xticklabel', [], 'yticklabel', [] );
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/callbackexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/callbackexample.m
new file mode 100644
index 0000000..036d3b6
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/callbackexample.m
@@ -0,0 +1,47 @@
+function callbackexample()
+
+% Copyright 2009-2013 The MathWorks, Inc.
+
+% Create application data
+colorNames = {
+ 'Red'
+ 'Orange'
+ 'Yellow'
+ 'Green'
+ 'Blue'
+ 'Indigo'
+ 'Violet'
+ };
+colorValues = [
+ 1.0 0.2 0.2
+ 1.0 0.6 0.2
+ 1.0 1.0 0.4
+ 0.6 1.0 0.6
+ 0.2 0.4 1.0
+ 0.4 0.1 0.6
+ 0.7 0.5 1.0
+ ];
+
+% Layout the interface
+f = figure();
+p = uix.Panel( 'Parent', f, 'Title', 'A Panel', 'TitlePosition', 'CenterTop');
+b = uix.HBoxFlex( 'Parent', p, 'Spacing', 5, 'Padding', 5 );
+hList = uicontrol( 'Style', 'listbox', 'Parent', b, ...
+ 'String', colorNames, ...
+ 'Back', 'w' );
+hButton = uicontrol( 'Parent', b, ...
+ 'Background', colorValues(1,:), ...
+ 'String', colorNames{1} );
+set( b, 'Widths', [-1 -3] );
+
+% Add user interactions
+set( hList, 'Callback', @onChangeColor );
+
+
+ function onChangeColor( source, ~ )
+ idx = get( source, 'Value' );
+ set( hButton, 'Background', colorValues(idx,:), 'String', colorNames{idx} )
+ end % onChangeColor
+
+
+end % main
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/colorbarexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/colorbarexample.m
new file mode 100644
index 0000000..05233f8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/colorbarexample.m
@@ -0,0 +1,29 @@
+%% Axes with colorbars inside layouts
+% This example demonstrates how to correctly layout axes that have
+% associated legends or colorbars by grouping them together using a
+% uicontainer.
+%
+% Copyright 2014 The MathWorks, Inc.
+
+%% Open the window
+% Open a new figure window and remove the toolbar and menus
+window = figure( 'Name', 'Axes legend and colorbars', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'NumberTitle', 'off' );
+
+%% Create the layout
+% The layout involves two axes side by side. Each axes is placed into a
+% uicontainer so that the legend and colorbar are "grouped" with the axes.
+hbox = uix.VBoxFlex('Parent', window, 'Spacing', 3);
+axes1 = axes( 'Parent', uicontainer('Parent', hbox) );
+axes2 = axes( 'Parent', uicontainer('Parent', hbox) );
+
+%% Add decorations
+% Give the first axes a colorbar and the second axes a legend.
+surf( axes1, membrane( 1, 15 ) );
+colorbar( axes1 );
+
+theta = 0:360;
+plot( axes2, theta, sind(theta), theta, cosd(theta) );
+legend( axes2, 'sin', 'cos', 'Location', 'NorthWestOutside' );
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/demoBrowser.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/demoBrowser.m
new file mode 100644
index 0000000..ccf4d89
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/demoBrowser.m
@@ -0,0 +1,209 @@
+function demoBrowser()
+%demoBrowser: an example of using layouts to build a user interface
+%
+% demoBrowser() opens a simple GUI that allows several of MATLAB's
+% built-in demos to be viewed. It aims to demonstrate how multiple
+% layouts can be used to create a good-looking user interface that
+% retains the correct proportions when resized. It also shows how to
+% hook-up callbacks to interpret user interaction.
+%
+% See also: Layouts
+
+% Copyright 2010-2013 The MathWorks, Inc.
+
+% Data is shared between all child functions by declaring the variables
+% here (they become global to the function). We keep things tidy by putting
+% all GUI stuff in one structure and all data stuff in another. As the app
+% grows, we might consider making these objects rather than structures.
+data = createData();
+gui = createInterface( data.DemoNames );
+
+% Now update the GUI with the current data
+updateInterface();
+redrawDemo();
+
+% Explicitly call the demo display so that it gets included if we deploy
+displayEndOfDemoMessage('')
+
+%-------------------------------------------------------------------------%
+ function data = createData()
+ % Create the shared data-structure for this application
+ demoList = {
+ 'Complex surface' 'cplxdemo'
+ 'Cruller' 'cruller'
+ 'Earth' 'earthmap'
+ 'Four linked tori' 'tori4'
+ 'Klein bottle' 'xpklein'
+ 'Klein bottle (1)' 'klein1'
+ 'Knot' 'knot'
+ 'Logo' 'logo'
+ 'Spherical Surface Harmonic' 'spharm2'
+ 'Werner Boy''s Surface' 'wernerboy'
+ };
+ selectedDemo = 8;
+ data = struct( ...
+ 'DemoNames', {demoList(:,1)'}, ...
+ 'DemoFunctions', {demoList(:,2)'}, ...
+ 'SelectedDemo', selectedDemo );
+ end % createData
+
+%-------------------------------------------------------------------------%
+ function gui = createInterface( demoList )
+ % Create the user interface for the application and return a
+ % structure of handles for global use.
+ gui = struct();
+ % Open a window and add some menus
+ gui.Window = figure( ...
+ 'Name', 'Gallery browser', ...
+ 'NumberTitle', 'off', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'HandleVisibility', 'off' );
+
+ % + File menu
+ gui.FileMenu = uimenu( gui.Window, 'Label', 'File' );
+ uimenu( gui.FileMenu, 'Label', 'Exit', 'Callback', @onExit );
+
+ % + View menu
+ gui.ViewMenu = uimenu( gui.Window, 'Label', 'View' );
+ for ii=1:numel( demoList )
+ uimenu( gui.ViewMenu, 'Label', demoList{ii}, 'Callback', @onMenuSelection );
+ end
+
+ % + Help menu
+ helpMenu = uimenu( gui.Window, 'Label', 'Help' );
+ uimenu( helpMenu, 'Label', 'Documentation', 'Callback', @onHelp );
+
+
+ % Arrange the main interface
+ mainLayout = uix.HBoxFlex( 'Parent', gui.Window, 'Spacing', 3 );
+
+ % + Create the panels
+ controlPanel = uix.BoxPanel( ...
+ 'Parent', mainLayout, ...
+ 'Title', 'Select a demo:' );
+ gui.ViewPanel = uix.BoxPanel( ...
+ 'Parent', mainLayout, ...
+ 'Title', 'Viewing: ???', ...
+ 'HelpFcn', @onDemoHelp );
+ gui.ViewContainer = uicontainer( ...
+ 'Parent', gui.ViewPanel );
+
+ % + Adjust the main layout
+ set( mainLayout, 'Widths', [-1,-2] );
+
+
+ % + Create the controls
+ controlLayout = uix.VBox( 'Parent', controlPanel, ...
+ 'Padding', 3, 'Spacing', 3 );
+ gui.ListBox = uicontrol( 'Style', 'list', ...
+ 'BackgroundColor', 'w', ...
+ 'Parent', controlLayout, ...
+ 'String', demoList(:), ...
+ 'Value', 1, ...
+ 'Callback', @onListSelection);
+ gui.HelpButton = uicontrol( 'Style', 'PushButton', ...
+ 'Parent', controlLayout, ...
+ 'String', 'Help for ', ...
+ 'Callback', @onDemoHelp );
+ set( controlLayout, 'Heights', [-1 28] ); % Make the list fill the space
+
+ % + Create the view
+ p = gui.ViewContainer;
+ gui.ViewAxes = axes( 'Parent', p );
+
+
+ end % createInterface
+
+%-------------------------------------------------------------------------%
+ function updateInterface()
+ % Update various parts of the interface in response to the demo
+ % being changed.
+
+ % Update the list and menu to show the current demo
+ set( gui.ListBox, 'Value', data.SelectedDemo );
+ % Update the help button label
+ demoName = data.DemoNames{ data.SelectedDemo };
+ set( gui.HelpButton, 'String', ['Help for ',demoName] );
+ % Update the view panel title
+ set( gui.ViewPanel, 'Title', sprintf( 'Viewing: %s', demoName ) );
+ % Untick all menus
+ menus = get( gui.ViewMenu, 'Children' );
+ set( menus, 'Checked', 'off' );
+ % Use the name to work out which menu item should be ticked
+ whichMenu = strcmpi( demoName, get( menus, 'Label' ) );
+ set( menus(whichMenu), 'Checked', 'on' );
+ end % updateInterface
+
+%-------------------------------------------------------------------------%
+ function redrawDemo()
+ % Draw a demo into the axes provided
+
+ % We first clear the existing axes ready to build a new one
+ if ishandle( gui.ViewAxes )
+ delete( gui.ViewAxes );
+ end
+
+ % Some demos create their own figure. Others don't.
+ fcnName = data.DemoFunctions{data.SelectedDemo};
+ switch upper( fcnName )
+ case 'LOGO'
+ % These demos open their own windows
+ evalin( 'base', fcnName );
+ gui.ViewAxes = gca();
+ fig = gcf();
+ set( fig, 'Visible', 'off' );
+
+ otherwise
+ % These demos need a window opening
+ fig = figure( 'Visible', 'off' );
+ evalin( 'base', fcnName );
+ gui.ViewAxes = gca();
+ end
+ % Now copy the axes from the demo into our window and restore its
+ % state.
+ cmap = colormap( gui.ViewAxes );
+ set( gui.ViewAxes, 'Parent', gui.ViewContainer );
+ colormap( gui.ViewAxes, cmap );
+ rotate3d( gui.ViewAxes, 'on' );
+ % Get rid of the demo figure
+ close( fig );
+ end % redrawDemo
+
+%-------------------------------------------------------------------------%
+ function onListSelection( src, ~ )
+ % User selected a demo from the list - update "data" and refresh
+ data.SelectedDemo = get( src, 'Value' );
+ updateInterface();
+ redrawDemo();
+ end % onListSelection
+
+%-------------------------------------------------------------------------%
+ function onMenuSelection( src, ~ )
+ % User selected a demo from the menu - work out which one
+ demoName = get( src, 'Label' );
+ data.SelectedDemo = find( strcmpi( demoName, data.DemoNames ), 1, 'first' );
+ updateInterface();
+ redrawDemo();
+ end % onMenuSelection
+
+
+%-------------------------------------------------------------------------%
+ function onHelp( ~, ~ )
+ % User has asked for the documentation
+ doc layout
+ end % onHelp
+
+%-------------------------------------------------------------------------%
+ function onDemoHelp( ~, ~ )
+ % User wnats documentation for the current demo
+ showdemo( data.DemoFunctions{data.SelectedDemo} );
+ end % onDemoHelp
+
+%-------------------------------------------------------------------------%
+ function onExit( ~, ~ )
+ % User wants to quit out of the application
+ delete( gui.Window );
+ end % onExit
+
+end % EOF
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/displayEndOfDemoMessage.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/displayEndOfDemoMessage.m
new file mode 100644
index 0000000..772873f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/displayEndOfDemoMessage.m
@@ -0,0 +1,4 @@
+function displayEndOfDemoMessage(filename)
+% Dummy function - do nothing.
+%
+% Copyright 2009-2013 The MathWorks, Inc.
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/dockexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/dockexample.m
new file mode 100644
index 0000000..08e0b1c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/dockexample.m
@@ -0,0 +1,74 @@
+function dockexample()
+%DOCKEXAMPLE: An example of using the panelbox dock/undock functionality
+
+% Copyright 2009-2013 The MathWorks Ltd.
+
+% Create the window and main layout
+fig = figure( 'Name', 'Dockable GUI example', ...'
+ 'NumberTitle', 'off', ...
+ 'Toolbar', 'none', ...
+ 'MenuBar', 'none', ...
+ 'CloseRequestFcn', @nCloseAll );
+box = uix.HBox( 'Parent', fig );
+
+% Add three panels to the box
+panel{1} = uix.BoxPanel( 'Title', 'Panel 1', 'Parent', box );
+panel{2} = uix.BoxPanel( 'Title', 'Panel 2', 'Parent', box );
+panel{3} = uix.BoxPanel( 'Title', 'Panel 3', 'Parent', box );
+
+% Add some contents
+uicontrol( 'Style', 'PushButton', 'String', 'Button 1', 'Parent', panel{1} );
+uicontrol( 'Style', 'PushButton', 'String', 'Button 2', 'Parent', panel{2} );
+box1 = uix.VBox( 'Parent', panel{3} );
+box2 = uix.HBox( 'Parent', box1 );
+uicontrol( 'Style', 'PushButton', 'String', 'Button 3', 'Parent', box1 );
+uicontrol( 'Style', 'PushButton', 'String', 'Button 4', 'Parent', box2 );
+uicontrol( 'Style', 'PushButton', 'String', 'Button 5', 'Parent', box2 );
+
+% Set the dock/undock callback
+set( panel{1}, 'DockFcn', {@nDock, 1} );
+set( panel{2}, 'DockFcn', {@nDock, 2} );
+set( panel{3}, 'DockFcn', {@nDock, 3} );
+
+%-------------------------------------------------------------------------%
+ function nDock( eventSource, eventData, whichpanel ) %#ok
+ % Set the flag
+ panel{whichpanel}.Docked = ~panel{whichpanel}.Docked;
+ if panel{whichpanel}.Docked
+ % Put it back into the layout
+ newfig = get( panel{whichpanel}, 'Parent' );
+ set( panel{whichpanel}, 'Parent', box );
+ delete( newfig );
+ else
+ % Take it out of the layout
+ pos = getpixelposition( panel{whichpanel} );
+ newfig = figure( ...
+ 'Name', get( panel{whichpanel}, 'Title' ), ...
+ 'NumberTitle', 'off', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'CloseRequestFcn', {@nDock, whichpanel} );
+ figpos = get( newfig, 'Position' );
+ set( newfig, 'Position', [figpos(1,1:2), pos(1,3:4)] );
+ set( panel{whichpanel}, 'Parent', newfig, ...
+ 'Units', 'Normalized', ...
+ 'Position', [0 0 1 1] );
+ end
+ end % nDock
+
+%-------------------------------------------------------------------------%
+ function nCloseAll( ~, ~ )
+ % User wished to close the application, so we need to tidy up
+
+ % Delete all windows, including undocked ones. We can do this by
+ % getting the window for each panel in turn and deleting it.
+ for ii=1:numel( panel )
+ if isvalid( panel{ii} ) && ~strcmpi( panel{ii}.BeingDeleted, 'on' )
+ figh = ancestor( panel{ii}, 'figure' );
+ delete( figh );
+ end
+ end
+
+ end % nCloseAll
+
+end % Main function
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/gridflexpositioning.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/gridflexpositioning.m
new file mode 100644
index 0000000..6a534e5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/gridflexpositioning.m
@@ -0,0 +1,25 @@
+% Copyright 2009-2013 The MathWorks Ltd.
+
+f = figure();
+
+% Box Panel
+p = uix.BoxPanel( 'Parent', f, 'Title', 'A BoxPanel', 'Padding', 5 );
+
+% HBox
+b = uix.HBox( 'Parent', p, 'Spacing', 5, 'Padding', 5 );
+
+% uicontrol
+uicontrol( 'Style', 'listbox', 'Parent', b, 'String', {'Item 1','Item 2'} );
+
+% Grid Flex
+g = uix.GridFlex( 'Parent', b, 'Spacing', 5 );
+uicontrol( 'Parent', g, 'Background', 'r' );
+uicontrol( 'Parent', g, 'Background', 'b' );
+uicontrol( 'Parent', g, 'Background', 'g' );
+uix.Empty( 'Parent', g );
+uicontrol( 'Parent', g, 'Background', 'c' );
+uicontrol( 'Parent', g, 'Background', 'y' );
+set( g, 'Widths', [-1 100 -2], 'Heights', [-1 -2] );
+
+% set HBox elements sizes
+set( b, 'Widths', [100 -1] );
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/guideApp.fig b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/guideApp.fig
new file mode 100644
index 0000000..1f1ceca
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/guideApp.fig differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/guideApp.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/guideApp.m
new file mode 100644
index 0000000..bcdda08
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/guideApp.m
@@ -0,0 +1,106 @@
+function varargout = guideApp(varargin)
+% GUIDEAPP MATLAB code for guideApp.fig
+% GUIDEAPP, by itself, creates a new GUIDEAPP or raises the existing
+% singleton*.
+%
+% H = GUIDEAPP returns the handle to a new GUIDEAPP or the handle to
+% the existing singleton*.
+%
+% GUIDEAPP('CALLBACK',hObject,eventData,handles,...) calls the local
+% function named CALLBACK in GUIDEAPP.M with the given input arguments.
+%
+% GUIDEAPP('Property','Value',...) creates a new GUIDEAPP or raises the
+% existing singleton*. Starting from the left, property value pairs are
+% applied to the GUI before guideApp_OpeningFcn gets called. An
+% unrecognized property name or invalid value makes property application
+% stop. All inputs are passed to guideApp_OpeningFcn via varargin.
+%
+% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
+% instance to run (singleton)".
+%
+% See also: GUIDE, GUIDATA, GUIHANDLES
+
+% Copyright 2009-2013 The MathWorks Ltd.
+
+% Edit the above text to modify the response to help guideApp
+
+% Last Modified by GUIDE v2.5 21-Jul-2010 07:36:25
+
+% Begin initialization code - DO NOT EDIT
+gui_Singleton = 1;
+gui_State = struct('gui_Name', mfilename, ...
+ 'gui_Singleton', gui_Singleton, ...
+ 'gui_OpeningFcn', @guideApp_OpeningFcn, ...
+ 'gui_OutputFcn', @guideApp_OutputFcn, ...
+ 'gui_LayoutFcn', [] , ...
+ 'gui_Callback', []);
+if nargin && ischar(varargin{1})
+ gui_State.gui_Callback = str2func(varargin{1});
+end
+
+if nargout
+ [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
+else
+ gui_mainfcn(gui_State, varargin{:});
+end
+% End initialization code - DO NOT EDIT
+
+
+% --- Executes just before guideApp is made visible.
+function guideApp_OpeningFcn(hObject, eventdata, handles, varargin)
+% This function has no output args, see OutputFcn.
+% hObject handle to figure
+% eventdata reserved - to be defined in a future version of MATLAB
+% handles structure with handles and user data (see GUIDATA)
+% varargin command line arguments to guideApp (see VARARGIN)
+
+% Choose default command line output for guideApp
+handles.output = hObject;
+
+% Update handles structure
+guidata(hObject, handles);
+
+% Put a layout in the panel
+g = uix.GridFlex( 'Parent', handles.uipanel1, ...
+ 'Units', 'Normalized', 'Position', [0 0 1 1], ...
+ 'Spacing', 5 );
+uix.BoxPanel( 'Parent', g, 'Title', 'Panel 1' );
+uix.BoxPanel( 'Parent', g, 'Title', 'Panel 2' );
+uix.BoxPanel( 'Parent', g, 'Title', 'Panel 3' );
+uix.BoxPanel( 'Parent', g, 'Title', 'Panel 4' );
+g.Heights = [-1 -1];
+
+% UIWAIT makes guideApp wait for user response (see UIRESUME)
+% uiwait(handles.figure1);
+
+
+% --- Outputs from this function are returned to the command line.
+function varargout = guideApp_OutputFcn(hObject, eventdata, handles)
+% varargout cell array for returning output args (see VARARGOUT);
+% hObject handle to figure
+% eventdata reserved - to be defined in a future version of MATLAB
+% handles structure with handles and user data (see GUIDATA)
+
+% Get default command line output from handles structure
+varargout{1} = handles.output;
+
+
+% --- Executes on button press in pushbutton1.
+function pushbutton1_Callback(hObject, eventdata, handles)
+% hObject handle to pushbutton1 (see GCBO)
+% eventdata reserved - to be defined in a future version of MATLAB
+% handles structure with handles and user data (see GUIDATA)
+
+
+% --- Executes on button press in pushbutton2.
+function pushbutton2_Callback(hObject, eventdata, handles)
+% hObject handle to pushbutton2 (see GCBO)
+% eventdata reserved - to be defined in a future version of MATLAB
+% handles structure with handles and user data (see GUIDATA)
+
+
+% --- Executes on button press in pushbutton3.
+function pushbutton3_Callback(hObject, eventdata, handles)
+% hObject handle to pushbutton3 (see GCBO)
+% eventdata reserved - to be defined in a future version of MATLAB
+% handles structure with handles and user data (see GUIDATA)
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/hierarchyexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/hierarchyexample.m
new file mode 100644
index 0000000..8446eb5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/hierarchyexample.m
@@ -0,0 +1,33 @@
+%% A Hierarchy of Layouts Example
+% This example shows how to use layouts within other layouts to achieve
+% more complex user interface designs with the right mix of variable and
+% fixed sized components.
+%
+% Copyright 2009-2014 The MathWorks Ltd.
+
+%% Open the window
+% Open a new figure window and remove the toolbar and menus
+window = figure( 'Name', 'A Layout Hierarchy Example', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'NumberTitle', 'off', ...
+ 'Position', 200*ones(1,4) );
+
+%% Create the first layout (vertical box)
+% Inside this vertical box we place the axes
+vbox = uix.VBox( 'Parent', window );
+axes( 'Parent', vbox );
+
+%% Create the second layout (horizontal box)
+% Inside this horizontal box we place two buttons
+hbox = uix.HButtonBox( 'Parent', vbox, 'Padding', 5 );
+uicontrol( 'Parent', hbox, ...
+ 'String', 'Button 1' );
+uicontrol( 'Parent', hbox, ...
+ 'String', 'Button 2' );
+
+%% Set the sizes
+% We want the axes to grow with the window so set the first size to be -1
+% (which means variable size with wieght 1) and the buttons to stay fixed
+% height so set the second size to 35 (fixed height of 35 pixels)
+set( vbox, 'Heights', [-1 35] )
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/minimizeexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/minimizeexample.m
new file mode 100644
index 0000000..45b7590
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/minimizeexample.m
@@ -0,0 +1,54 @@
+function minimizeexample()
+%MINIMIZEEXAMPLE: An example of using the panelbox minimize/maximize
+
+% Copyright 2010-2013 The MathWorks Ltd.
+
+width = 200;
+pheightmin = 20;
+pheightmax = 100;
+
+% Create the window and main layout
+fig = figure( 'Name', 'Collapsable GUI', ...'
+ 'NumberTitle', 'off', ...
+ 'Toolbar', 'none', ...
+ 'MenuBar', 'none' );
+box = uix.VBox( 'Parent', fig );
+
+panel{1} = uix.BoxPanel( 'Title', 'Panel 1', 'Parent', box );
+panel{2} = uix.BoxPanel( 'Title', 'Panel 2', 'Parent', box );
+panel{3} = uix.BoxPanel( 'Title', 'Panel 3', 'Parent', box );
+set( box, 'Heights', pheightmax*ones(1,3) );
+
+% Add some contents
+uicontrol( 'Style', 'PushButton', 'String', 'Button 1', 'Parent', panel{1} );
+uicontrol( 'Style', 'PushButton', 'String', 'Button 2', 'Parent', panel{2} );
+uicontrol( 'Style', 'PushButton', 'String', 'Button 3', 'Parent', panel{3} );
+
+% Resize the window
+pos = get( fig, 'Position' );
+set( fig, 'Position', [pos(1,1:2),width,sum(box.Heights)] );
+
+% Hook up the minimize callback
+set( panel{1}, 'MinimizeFcn', {@nMinimize, 1} );
+set( panel{2}, 'MinimizeFcn', {@nMinimize, 2} );
+set( panel{3}, 'MinimizeFcn', {@nMinimize, 3} );
+
+%-------------------------------------------------------------------------%
+ function nMinimize( eventSource, eventData, whichpanel ) %#ok
+ % A panel has been maximized/minimized
+ s = get( box, 'Heights' );
+ pos = get( fig, 'Position' );
+ panel{whichpanel}.Minimized = ~panel{whichpanel}.Minimized;
+ if panel{whichpanel}.Minimized
+ s(whichpanel) = pheightmin;
+ else
+ s(whichpanel) = pheightmax;
+ end
+ set( box, 'Heights', s );
+
+ % Resize the figure, keeping the top stationary
+ delta_height = pos(1,4) - sum( box.Heights );
+ set( fig, 'Position', pos(1,:) + [0 delta_height 0 -delta_height] );
+ end % nMinimize
+
+end % EOF
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/paneltabexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/paneltabexample.m
new file mode 100644
index 0000000..54e377a
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/paneltabexample.m
@@ -0,0 +1,59 @@
+%% A TabPanel Example
+% This example shows how to use tabs within a layout. It also shows how to
+% use the TabPanel Callback property to update other GUI elements when the
+% visible tab is changed.
+%
+% Copyright 2009-2013 The MathWorks, Inc.
+
+%% Open the window
+% Open a new figure window and remove the toolbar and menus
+window = figure( 'Name', 'A TabPanel example', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'NumberTitle', 'off' );
+
+%% Create the layout
+% The layout involves two panels side by side. This is done using a
+% flexible horizontal box. The left-hand side is filled with a standard
+% panel and the right-hand side with some tabs.
+hbox = uix.HBoxFlex('Parent', window, 'Spacing', 3);
+panel = uix.Panel( ...
+ 'Parent', hbox, ...
+ 'Padding', 5, ...
+ 'Title', 'Left' );
+tabpanel = uix.TabPanel( 'Parent', ...
+ hbox, ...
+ 'Padding', 0);
+
+%% Add a list on the left
+% Note that we link the callbacks from the list to the tab selection and
+% the tab callback to the list such that they are kept in sync.
+panellist = uicontrol( 'Style', 'list', ...
+ 'Parent', panel, ...
+ 'String', {'1', '2', '3'}, ...
+ 'BackgroundColor', 'w', ...
+ 'Callback', @(a,b) set( tabpanel, 'Selection', get( a, 'Value' ) ) );
+set( tabpanel, 'SelectionChangedFcn', @(a,b) set( panellist, 'Value', b.NewValue ) );
+
+%% Create some contents
+% Each tab is filled with a list box showing some numbers
+htab1 = uix.Panel( 'Parent', tabpanel, 'Padding', 5, 'Title', '1');
+uicontrol( 'Style', 'listbox', 'Parent', htab1, ...
+ 'String', {'1', '1', '1'}, ...
+ 'BackgroundColor', 'w' );
+
+htab2 = uix.Panel( 'Parent', tabpanel, 'Padding', 5, 'Title', '2');
+uicontrol( 'Style', 'listbox', 'Parent', htab2, ...
+ 'String', {'2', '2', '2'}, ...
+ 'BackgroundColor', 'w' );
+
+htab3 = uix.Panel( 'Parent', tabpanel, 'Padding', 5, 'Title', '3');
+uicontrol( 'Style', 'listbox', 'Parent', htab3, ...
+ 'String', {'3', '3', '3'}, ...
+ 'BackgroundColor', 'w' );
+
+%% Update the tab titles
+tabpanel.TabTitles = {'1', '2', '3'};
+
+%% Show the first tab
+tabpanel.Selection = 1;
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/visibleexample.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/visibleexample.m
new file mode 100644
index 0000000..8a6f628
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Examples/visibleexample.m
@@ -0,0 +1,30 @@
+%% Showing/hiding a panel
+%
+% This example opens a simple user-interface with a panel full of
+% buttons. We can then show/hide the entire panel in one go. Note
+% that the previous state of the buttons is preserved.
+%
+% Copyright 2009-2013 The MathWorks, Inc.
+
+%% Open a window and add a panel
+fig = figure( 'Name', 'Visible example', ...
+ 'Position', [100 100 150 250], ...
+ 'MenuBar', 'none', ...
+ 'ToolBar', 'none', ...
+ 'NumberTitle', 'off' );
+panel = uix.BoxPanel( 'Parent', fig, 'Title', 'Panel' );
+
+%% Put some buttons inside the panel
+box = uix.VButtonBox( 'Parent', panel );
+uicontrol( 'Parent', box, 'String', 'Button 1' );
+uicontrol( 'Parent', box, 'String', 'Button 2' );
+uicontrol( 'Parent', box, 'String', 'Button 3', 'Visible', 'off' );
+uicontrol( 'Parent', box, 'String', 'Button 4' );
+uicontrol( 'Parent', box, 'String', 'Button 5', 'Visible', 'off' );
+uicontrol( 'Parent', box, 'String', 'Button 6' );
+
+%% Try disabling the panel
+set( panel, 'Visible', 'off' );
+
+%% Try enabling the panel
+set( panel, 'Visible', 'on' );
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference.html
new file mode 100644
index 0000000..0dcbbd7
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference.html
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+ Function reference
+
+
+
+
+
+
+
+
+ Function reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_1.html
new file mode 100644
index 0000000..5276a8a
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_1.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+ uix.Panel
+
+
+
+
+
+
+
+
+
+ 1.1: uix.Panel
+
+
+
+
+ Arrange a single element inside a standard panel
+
+ obj
= uix.Panel(
)
+ creates a standard uipanel
object but with automatic management
+ of the contained widget or layout. The properties available are largely
+ the same as the builtin uipanel
object. Where more than one child is
+ added, the currently visible child is determined using the Selection property.
+
+ obj
= uix.Panel(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.Panel properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. BorderType
none | etchedin | etchedout | beveledin | beveledout | line Type of border around the uipanel area. BorderWidth
positive integer Width of the panel border. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. FontAngle
normal | italic | oblique Title font angle. FontName
string Title font name (e.g. Arial, Helvetica etc). FontSize
positive integer Title font size. FontUnits
inches | centimeters | normalized | points | pixels Title font units for measuring size. FontWeight
light | normal | demi | bold Title font weight. ForegroundColor
colorspec
Title font color and/or color of 2-D border line. HighlightColor
colorspec
3-D frame highlight color. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Selection
positive integer or empty Which child is visible. ShadowColor
colorspec
3-D frame shadow color. Tag
string Tag to associate with layout. Title
string Title string. TitlePosition
lefttop | centertop | righttop | leftbottom | centerbottom | rightbottom Location of title string in relation to the panel. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+p = uix.Panel
( 'Parent'
, f, 'Title'
, 'A Panel'
, 'Padding'
, 5 );
+uicontrol
( 'Parent'
, p, 'Background'
, 'r'
)
+
+
+
+
+ f = figure
();
+p = uix.Panel
( 'Parent'
, f, 'Title'
, 'A Panel'
, 'TitlePosition'
, 'CenterTop');
+b = uix.HBox
( 'Parent'
, p, 'Spacing'
, 5, 'Padding'
, 5 );
+uicontrol
( 'Style', 'listbox', 'Parent'
, b, 'String'
, {'Item 1'
,'Item 2'
} );
+uicontrol
( 'Parent'
, b, 'Background'
, 'b'
);
+set
( b, 'Widths'
, [100 -1] );
+
+
+
+
+
+ See also:
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_2.html
new file mode 100644
index 0000000..1472165
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_2.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+ uix.CardPanel
+
+
+
+
+
+
+
+
+
+ 1.2: uix.CardPanel
+
+
+
+
+ Show one element (card) from a list
+
+ obj
= uix.CardPanel(
)
+ creates a new card panel which allows
+ selection between the different child objects contained, making the
+ selected child fill the space available and all other children
+ invisible. This is commonly used for creating wizards or quick
+ switching between different views of a single data-set.
+
+ obj
= uix.CardPanel(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.CardPanel properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Selection
positive integer or empty Which child is visible. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+p = uix.CardPanel
( 'Parent'
, f, 'Padding'
, 5 );
+uicontrol
( 'Parent'
, p, 'Background'
, 'r'
);
+uicontrol
( 'Parent'
, p, 'Background'
, 'b'
);
+uicontrol
( 'Parent'
, p, 'Background'
, 'g'
);
+p.Selection = 2;
+
+
+
+
+
+ See also:
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_3.html
new file mode 100644
index 0000000..be81c96
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_3.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ uix.BoxPanel
+
+
+
+
+
+
+
+
+
+ 1.3: uix.BoxPanel
+
+
+
+
+ Arrange a single element in a panel with boxed title
+
+ obj
= uix.BoxPanel(
)
+ creates a box-styled panel object with
+ automatic management of the contained widget or layout. The
+ properties available are largely the same as the builtin UIPANEL
+ object. Where more than one child is added, the currently visible
+ child is determined using the Selection property.
+
+ obj
= uix.BoxPanel(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.BoxPanel properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. BorderType
none | etchedin | etchedout | beveledin | beveledout | line Type of border around the title and content areas. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. CloseRequestFcn
function_handle
Function to call when the panel close icon is clicked. Note that if empty, no close button is shown. DeleteFcn
function_handle
Function to call when the layout is being deleted. DockFcn
function handle Function to call when panel is docked or undocked. Note that if empty, no dock button is shown. See advanced maneuvers with panels for details. FontAngle
normal | italic | oblique Title font angle. FontName
string Title font name (e.g. Arial, Helvetica etc). FontSize
positive integer Title font size. FontUnits
inches | centimeters | normalized | points | pixels Title font units for measuring size. FontWeight
light | normal | demi | bold Title font weight. ForegroundColor
colorspec
Title font color and/or color of 2-D border line. HelpFcn
function handle Function to call when the help icon is clicked. Note that if empty, no help button is shown. See advanced maneuvers with panels for details. HighlightColor
colorspec
3-D frame highlight color. IsDocked
logical Is this panel in a docked state. See advanced maneuvers with panels for details. Minimized
logical Is this panel in a minimized state. See advanced maneuvers with panels for details. MinimizeFcn
function handle Function to call when panel is minimized or maximized. Note that if empty, no minimize button is shown. See advanced maneuvers with panels for details. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Selection
positive integer or empty Which child is visible. ShadowColor
colorspec
3-D frame shadow color. Tag
string Tag to associate with layout. Title
string Title string. TitleColor
colorspec
color for the title bar background. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility. See the visible example for more details.
+
+ For example:
+ f = figure
();
+p = uix.BoxPanel
( 'Parent'
, f, 'Title'
, 'A BoxPanel', 'Padding'
, 5 );
+uicontrol
( 'Parent'
, p, 'Background'
, 'r'
)
+
+
+
+
+ f = figure
();
+p = uix.BoxPanel
( 'Parent'
, f, 'Title'
, 'A BoxPanel', 'Padding'
, 5 );
+b = uix.HBox
( 'Parent'
, p, 'Spacing'
, 5, 'Padding'
, 5 );
+uicontrol
( 'Style', 'listbox', 'Parent'
, b, 'String'
, {'Item 1','Item 2'} );
+uicontrol
( 'Parent'
, b, 'Background'
, 'b'
);
+set
( b, 'Widths'
, [100 -1] );
+p.FontSize = 12;
+p.FontWeight = 'bold';
+p.HelpFcn = @(x,y) disp('Help me!');
+
+
+
+
+
+ See also:
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_4.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_4.html
new file mode 100644
index 0000000..910b8f4
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_4.html
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+ uix.TabPanel
+
+
+
+
+
+
+
+
+
+ 1.4: uix.TabPanel
+
+
+
+
+ Arrange elements in a panel with tabs for selecting which is visible
+
+ obj
= uix.TabPanel(
)
+ creates a panel with tabs along one edge
+ to allow selection between the different child objects contained.
+
+ obj
= uix.TabPanel(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.TabPanel properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. FontAngle
normal | italic | oblique Title font angle. FontName
string Title font name (e.g. Arial, Helvetica etc). FontSize
positive integer Title font size. FontUnits
inches | centimeters | normalized | points | pixels Title font units for measuring size. FontWeight
light | normal | demi | bold Title font weight. ForegroundColor
colorspec
Title font color and/or color of 2-D border line. HighlightColor
colorspec
3-D frame highlight color. ShadowColor
colorspec
3-D frame shadow color. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Selection
positive integer or empty Which child is visible. SelectionChangedFcn
function_handle
Function to call when the selected tab is changed. The event-data supplied has fields OldValue
and NewValue
giving the previously selected and newly selected tab indices. TabContextMenus
cell array of context menus The context menu (or []) for each tab. TabEnables
cell array of on | off A list of the enabled state of each tab (default is all 'on'). TabTitles
cell array of strings A list of the names of the tabs with one entry per tab. TabWidth
positive integer Width of each tab in pixels (default 50). Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+p = uix.TabPanel
( 'Parent'
, f, 'Padding'
, 5 );
+uicontrol
( 'Parent'
, p, 'Background'
, 'r'
);
+uicontrol
( 'Parent'
, p, 'Background'
, 'b'
);
+uicontrol
( 'Parent'
, p, 'Background'
, 'g'
);
+p.TabTitles = {'Red'
, 'Blue'
, 'Green'
};
+p.Selection = 2;
+
+
+
+
+
+ See also:
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_5.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_5.html
new file mode 100644
index 0000000..5739395
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference1_5.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+ uix.ScrollingPanel
+
+
+
+
+
+
+
+
+
+ 1.5: uix.ScrollingPanel
+
+
+
+
+ Arrange a single element inside a panel and provide scrollbars if the panel is smaller than the element
+
+ obj
= uix.ScrollingPanel(
)
+ creates a new scrolling panel.
+
+ obj
= uix.ScrollingPanel(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.ScrollingPanel properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. Heights
double vector Height of each of the children. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. The size of this vector must always match the size of Contents. HorizontalOffsets
double vector Horizontal offset of each of the children. Each value is limited to between 0 and the difference between the width of child and the width of the panel. The size of this vector must always match the size of Contents. HorizontalSteps
positive double vector Horizontal slider step for each of the children. The size of this vector must always match the size of Contents. MinimumHeights
double vector Minimum height in pixels of each of the children. The size of this vector must match the size of Contents. MinimumWidths
double vector Minimum width in pixels of each of the children. The size of this vector must match the size of Contents. MouseWheelEnabled
on | off Mouse wheel scrolling status (default 'on'). Padding
positive integer This property is not honored by this class. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Selection
positive integer or empty Which child is visible. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. VerticalOffsets
double vector Vertical offset of each of the children. Each value is limited to between 0 and the difference between the height of child and the height of the panel. The size of this vector must always match the size of Contents. VerticalSteps
positive double vector Vertical slider step for each of the children. The size of this vector must always match the size of Contents. Visible
on | off Visibility. Widths
double vector Width of each of the children. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. The size of this vector must always match the size of Contents.
+
+ For example:
+ f = figure
( 'Name', 'uix.ScrollingPanel Help Example' );
+f.Position(3:4) = 400;
+p = uix.ScrollingPanel
( 'Parent', f );
+a = axes
( 'Parent', p );
+[x, y, z] = peaks
();
+surf( a, x, y, z )
+a.ActivePositionProperty = 'position';
+set
( p, 'Widths', 600, 'Heights', 600, 'HorizontalOffsets', 100, 'VerticalOffsets', 100 )
+
+
+
+
+
+ See also:
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_1.html
new file mode 100644
index 0000000..a3a79e8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_1.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+ uix.HBox
+
+
+
+
+
+
+
+
+
+ 2.1: uix.HBox
+
+
+
+
+
+
+
+ Arrange elements horizontally in a single row
+
+ obj
= uix.HBox(
)
+ creates a new horizontal box layout with all properties set to defaults.
+ The output is a new layout object that can be used as the parent for other user-interface components.
+
+ obj
= uix.HBox(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.HBox properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. MinimumWidths
double vector Minimum width in pixels of each of the children. The size of this vector must match the size of Contents. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility. Widths
double vector Width of each of the children. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. The size of this vector must always match the size of Contents.
+
+ For example:
+ f = figure
();
+b = uix.HBox
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b, 'Background'
, 'r'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'b'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'g'
)
+set
( b, 'Widths'
, [-1 100 -2], 'Spacing'
, 5 );
+
+
+
+
+ f = figure
();
+b1 = uix.VBox
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b1, 'Background'
, 'r'
)
+b2 = uix.HBox
( 'Parent'
, b1, 'Padding'
, 5, 'Spacing'
, 5 );
+uicontrol
( 'Parent'
, b2, 'String'
, 'Button1'
)
+uicontrol
( 'Parent'
, b2, 'String'
, 'Button2'
)
+set
( b1, 'Widths'
, [30 -1] );
+
+
+
+
+
+ See also: uix.VBox
- for creating a vertical arrangementuix.HBoxFlex
- for creating a horizontal arrangement with draggable dividers
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_2.html
new file mode 100644
index 0000000..95fba30
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_2.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ uix.VBox
+
+
+
+
+
+
+
+
+
+ 2.2: uix.VBox
+
+
+
+
+
+
+ Arrange elements vertically in a single column
+
+ obj
= uix.VBox(
)
+ creates a new vertical box layout with all properties set to defaults.
+ The output is a new layout object that can be used as the parent for other user-interface components.
+
+ obj
= uix.VBox(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.VBox properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. Heights
double vector Height of each of the children. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. The size of this vector must always match the size of Contents. MinimumHeights
double vector Minimum height in pixels of each of the children. The size of this vector must match the size of Contents. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+b = uix.VBox
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b, 'Background'
, 'r'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'b'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'g'
)
+set
( b, 'Heights'
, [-1 100 -2], 'Spacing'
, 5 );
+
+
+
+
+ f = figure
();
+b1 = uix.VBox
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b1, 'Background'
, 'r'
)
+b2 = uix.HBox
( 'Parent'
, b1, 'Padding'
, 5, 'Spacing'
, 5 );
+uicontrol
( 'Parent'
, b2, 'String'
, 'Button1'
)
+uicontrol
( 'Parent'
, b2, 'String'
, 'Button2'
)
+set
( b1, 'Heights'
, [30 -1] );
+
+
+
+
+
+ See also: uix.HBox
- for creating a horizontal arrangementuix.VBoxFlex
- for creating a vertical arrangement with draggable dividers
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_3.html
new file mode 100644
index 0000000..9b70851
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_3.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+ uix.HBoxFlex
+
+
+
+
+
+
+
+
+
+ 2.3: uix.HBoxFlex
+
+
+
+
+
+
+
+
+ Arrange elements horizontally with draggable dividers
+
+ obj
= uix.HBoxFlex(
)
+ creates a new horizontal box layout with draggable dividers and with all properties set to defaults.
+ The output is a new layout object that can be used as the parent for other user-interface components.
+
+ obj
= uix.HBoxFlex(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.HBoxFlex properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. DividerMarkings
on | off Show markings on the draggable dividers (default 'on'). MinimumWidths
double vector Minimum width in pixels of each of the children. The size of this vector must match the size of Contents. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility. Widths
double vector Width of each of the children. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. The size of this vector must always match the size of Contents.
+
+ For example:
+ f = figure
( 'Name'
, 'uix.HBoxFlex example'
);
+b = uix.HBoxFlex
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b, 'Background'
, 'r'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'b'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'g'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'y'
)
+set
( b, 'Widths'
, [-1 100 -2 -1], 'Spacing'
, 5 );
+
+
+
+
+
+ See also: uix.HBox
- for creating a horizontal arrangementuix.VBoxFlex
- for creating a vertical arrangement with draggable dividers
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_4.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_4.html
new file mode 100644
index 0000000..d405aac
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_4.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+ uix.VBoxFlex
+
+
+
+
+
+
+
+
+
+ 2.4: uix.VBoxFlex
+
+
+
+
+
+
+
+
+ Arrange elements vertically with draggable dividers
+
+ obj
= uix.VBoxFlex(
)
+ creates a new vertical box layout with draggable dividers and with all properties set to defaults.
+ The output is a new layout object that can be used as the parent for other user-interface components.
+
+ obj
= uix.VBoxFlex(
prop
,
value
,
...
)
+ also sets one or more property values from the list below.
+
+
+ uix.VBoxFlex properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. DividerMarkings
on | off Show markings on the draggable dividers (default 'on'). Heights
double vector Height of each of the children. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. The size of this vector must always match the size of Contents. MinimumHeights
double vector Minimum height in pixels of each of the children. The size of this vector must match the size of Contents. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility.
+
+
+ For example:
+ f = figure
( 'Name'
, 'uix.VBoxFlex example'
);
+b = uix.VBoxFlex
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b, 'Background'
, 'r'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'b'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'g'
)
+uicontrol
( 'Parent'
, b, 'Background'
, 'y'
)
+set
( b, 'Heights'
, [-1 100 -2 -1], 'Spacing'
, 5 );
+
+
+
+
+
+ See also: uix.VBox
- for creating a vertical arrangementuix.HBoxFlex
- for creating a horizontal arrangement with draggable dividers
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_5.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_5.html
new file mode 100644
index 0000000..51602ac
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_5.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+ uix.HButtonBox
+
+
+
+
+
+
+
+
+
+ 2.5: uix.HButtonBox
+
+
+
+
+
+
+
+ Arrange buttons horizontally in a single row
+
+ obj
= uix.HButtonBox(
)
+ is a type of HBox specialised for
+ arranging a row of buttons, check-boxes or similar graphical
+ elements. All buttons are given equal size and by default are
+ centered in the drawing area. The justification can be changed as
+ required.
+
+ obj
= uix.HButtonBox(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.HButtonBox properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. ButtonSize
[w h] The size for the buttons (all are given equal size). Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. HorizontalAlignment
left | center | right The horizontal position of the buttons. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. VerticalAlignment
top | middle | bottom The vertical position of the buttons. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+b = uix.HButtonBox
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b, 'String'
, 'One' );
+uicontrol
( 'Parent'
, b, 'String'
, 'Two' );
+uicontrol
( 'Parent'
, b, 'String'
, 'Three' );
+set
( b, 'ButtonSize'
, [130 35], 'Spacing'
, 5 );
+
+
+
+
+
+ See also: uix.VButtonBox
- for creating a vertical arrangement of buttonsuix.HBox
- for creating a general horizontal arrangement
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_6.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_6.html
new file mode 100644
index 0000000..544ec25
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference2_6.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+ uix.VButtonBox
+
+
+
+
+
+
+
+
+
+ 2.6: uix.VButtonBox
+
+
+
+
+
+
+
+ Arrange buttons vertically in a single column
+
+ obj
= uix.VButtonBox(
)
+ is a type of VBox specialised for
+ arranging a column of buttons, check-boxes or similar graphical
+ elements. All buttons are given equal size and by default are
+ centered in the drawing area. The justification can be changed as
+ required.
+
+ obj
= uix.VButtonBox(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.VButtonBox properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. ButtonSize
[w h] The size for the buttons (all are given equal size). Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. HorizontalAlignment
left | center | right The horizontal position of the buttons. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. VerticalAlignment
top | middle | bottom The vertical position of the buttons. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+b = uix.VButtonBox
( 'Parent'
, f );
+uicontrol
( 'Parent'
, b, 'String'
, 'One' );
+uicontrol
( 'Parent'
, b, 'String'
, 'Two' );
+uicontrol
( 'Parent'
, b, 'String'
, 'Three' );
+set
( b, 'ButtonSize'
, [130 35], 'Spacing'
, 5 );
+
+
+
+
+
+ See also: uix.HButtonBox
- for creating a horizontal arrangement of buttonsuix.VBox
- for creating a general vertical arrangement
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference3_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference3_1.html
new file mode 100644
index 0000000..4e91d7c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference3_1.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+ uix.Grid
+
+
+
+
+
+
+
+
+
+ 3.1: uix.Grid
+
+
+
+
+ Arrange elements in a two dimensional grid
+
+ obj
= uix.Grid(
)
+ creates a new new grid layout with all properties set to defaults. The number of rows and
+ columns to use is determined from the number of elements in the
+ Heights and Widths properties respectively. Child elements are
+ arranged down column one first, then column two etc. If there are insufficient
+ columns then a new one is added.
+ The output is a new layout object that can be used as the parent for other user-interface components.
+
+ obj
= uix.Grid(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.Grid properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. Heights
double vector Height of each of the rows. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility. Widths
double vector Width of each of the columns. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing.
+
+ For example:
+ f = figure
();
+g = uix.Grid
( 'Parent'
, f, 'Spacing'
, 5 );
+uicontrol
( 'Parent'
, g, 'Background'
, 'r'
)
+uicontrol
( 'Parent'
, g, 'Background'
, 'b'
)
+uicontrol
( 'Parent'
, g, 'Background'
, 'g'
)
+uix.Empty
( 'Parent'
, g )
+uicontrol
( 'Parent'
, g, 'Background'
, 'c'
)
+uicontrol
( 'Parent'
, g, 'Background'
, 'y'
)
+set
( g, 'Widths'
, [-1 100 -2], 'Heights'
, [-1 100] );
+
+
+
+
+
+ See also: uix.GridFlex
- for creating a grid arrangement with draggable dividers
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference3_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference3_2.html
new file mode 100644
index 0000000..10574b1
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference3_2.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+ uix.GridFlex
+
+
+
+
+
+
+
+
+
+ 3.2: uix.GridFlex
+
+
+
+
+
+ Arrange elements in a two dimensional grid with draggable dividers
+
+ obj
= uix.GridFlex(
)
+ creates a new new grid layout with draggable dividers between elements. The number of rows and
+ columns to use is determined from the number of elements in the
+ Heights and Widths properties respectively. Child elements are
+ arranged down column one first, then column two etc. If there are insufficient
+ columns then a new one is added.
+ The output is a new layout object that can be used as the parent for other user-interface components.
+
+ obj
= uix.GridFlex(
prop
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+
+ uix.GridFlex properties
+ Property Value Description BackgroundColor
colorspec
Color to use for exposed areas of the layout background. This can be an RGB triple (e.g. [0 0 1]) or a colour name (e.g. 'b'). BeingDeleted
on | off Deletion status. Contents
empty GraphicsPlaceholder array | array of graphics objects Children within this layout, regardless of HandleVisibility. Note that this can only be set to permutations of itself. DeleteFcn
function_handle
Function to call when the layout is being deleted. DividerMarkings
on | off Show markings on the draggable dividers (default 'on'). Heights
double vector Height of each of the rows. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing. Padding
positive integer Number of pixels of extra space around the outside of the layout. Parent
empty GraphicsPlaceholder array | figure | container Parent of the layout. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Spacing
positive integer Number of pixels of extra space to leave between elements in the layout. Tag
string Tag to associate with layout. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility. Widths
double vector Width of each of the columns. Positive entries indicate fixed sizes in pixels, negative values indicate relative weights for resizing.
+
+ For example:
+ f = figure
();
+g = uix.GridFlex
( 'Parent'
, f, 'Spacing'
, 5 );
+uicontrol
( 'Parent'
, g, 'Background'
, 'r'
)
+uicontrol
( 'Parent'
, g, 'Background'
, 'b'
)
+uicontrol
( 'Parent'
, g, 'Background'
, 'g'
)
+uix.Empty
( 'Parent'
, g )
+uicontrol
( 'Parent'
, g, 'Background'
, 'c'
)
+uicontrol
( 'Parent'
, g, 'Background'
, 'y'
)
+set
( g, 'Widths'
, [-1 100 -2], 'Heights'
, [-1 -2] );
+
+
+
+
+
+ See also: uix.Grid
- for creating a grid arrangement
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_1.html
new file mode 100644
index 0000000..69f06ee
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_1.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ uix.Empty
+
+
+
+
+
+
+
+
+
+ 4.1: uix.Empty
+
+
+ Create an empty space
+
+ obj
= uix.Empty(
)
+ creates an empty space object that can be
+ used in layouts to add gaps between other elements.
+
+ obj
= uix.Empty(
param
,
value
,
...
)
+ also sets one or more property values.
+
+
+
+ uix.Empty properties
+ The empty space is achieved using a container that monitors
+ its parent's color and changes its own to match.
+ Property Value Description BeingDeleted
on | off Deletion status. HandleVisibility
on | off Visibility of the object. Parent
empty GraphicsPlaceholder array | figure | container Parent of the object. Position
[x y w h] Position (x,y) and size (w,h) within figure or container. Tag
string Tag to associate with object. Type
string Type of graphics object. Units
inches | centimeters | normalized | points | pixels | characters Position units. Visible
on | off Visibility.
+
+ For example:
+ f = figure
();
+box = uix.HBox
( 'Parent'
, f, 'Spacing'
, 5 );
+uicontrol
( 'Parent'
, box, 'Background'
, 'r'
)
+uix.Empty
( 'Parent'
, box )
+uicontrol
( 'Parent'
, box, 'Background'
, 'g'
)
+
+
+ See also: uix.HBox
- for arranging widgets horizontally
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_2.html
new file mode 100644
index 0000000..17a5ce7
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_2.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+ uix.tracking
+
+
+
+
+
+
+
+
+
+ 4.2: uix.tracking
+
+
+ tracks anonymized usage data
+
+ uix.tracking(
p
,
v
,
id
)
+ tracks usage to the property p for the version v and identifier id using Google Analytics.
+ uix.tracking(
state
)
+ turns tracking on or off.
+ state
= uix.tracking(
'query'
)
+ queries whether tracking is on or off.
+
+
+
+ For example:
+ uix.tracking
('UA-45678-9'
,'1.2.3'
,'featurename'
)
+
+ uix.tracking
('on'
)
+
+ state = uix.tracking
('query'
)
+ state = 'on'
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_3.html
new file mode 100644
index 0000000..6507148
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Function_reference4_3.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+ layoutRoot
+
+
+
+
+
+
+
+
+
+ 4.3: layoutRoot
+
+
+
+
+ returns the folder containing the GUI layout toolbox
+
+ folder
= layoutRoot(
)
+ returns the full path to the folder containing the GUI Layout Toolbox.
+
+
+
+ For example:
+ folder = layoutRoot
()
+ folder = 'C:\tools\glt2'
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+>
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/GUI Layout.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/GUI Layout.html
new file mode 100644
index 0000000..4afaab9
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/GUI Layout.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started.html
new file mode 100644
index 0000000..f9e5952
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+ Getting Started
+
+
+
+
+
+
+
+
+ Getting Started
+
+ This chapter gives an overview of this package, including its purpose,
+how to install it and any known issues at the time of release.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contents
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started1.html
new file mode 100644
index 0000000..a409dec
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started1.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ What is GUI Layout Toolbox?
+
+
+
+
+
+
+
+ 1: What is GUI Layout Toolbox?
+
+
+ GUI Layout Toolbox provides a package of MATLAB objects that allow for complex
+ arrangement of graphical user interface elements within a figure window. The
+ main capabilities provided are:
+
+ Automatic element arrangement horizontally, vertically or in grids
+ Ability to specify fixed sizes or resizing weights for each element
+ Ability to "nest" layouts to produce virtually any element arrangement
+ Divider bars for user-resizing of elements
+
+ These element arrangement capabilities are designed to match those found as
+ standard in other user-interface toolkits such as Java Swing, GTK, QT etc.
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started2.html
new file mode 100644
index 0000000..35df2fe
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started2.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+ Compatibility considerations
+
+
+
+
+
+
+
+ 2: Compatibility considerations
+
+
+
+
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+ 2.1: Minimum MATLAB version
+
+ This is version 2 of GUI Layout Toolbox, designed to work with the new
+ MATLAB graphics system that was introduced in R2014b.
+ Version 1 works with MATLAB releases prior to R2014b that use the old
+ graphics system.
+
+
+ 2.2: Compatibility with version 1
+
+ If you are upgrading from version 1, there are a number of compatibility
+ considerations:
+
+Package name
+Version 1 classes were contained in the package "uiextras". Version 2 classes are
+contained in the package "uix". In version 2, a package "uiextras" is included
+to provide support for legacy code. Classes in "uiextras" extend
+corresponding classes in "uix", and contain only compatibility-related
+code.
+
+Contents property
+The contents of version 1 objects were accessible via the property Children
.
+The contents of version 2 objects are accessible via the property Contents
.
+Version 2 objects also provide a property Children
, but this controls the
+vertical stacking order rather than the layout order. Legacy code that accesses
+Children
will run without error, but will not achieve the desired change in
+layout order, and should be modified to access Contents
instead.
+
+An upcoming release of version 1 will include support for code that references
+contents via Contents
. That way, code modified to work in version 2 will also
+work in version 1.
+
+The background to this change is as follows. Version 1 objects were wrappers
+for built-in graphics objects, and presented contents in layout order via
+the property Children
. Version 2 objects extend built-in graphics objects,
+and as such, inherit properties, methods and events. One such property is
+Children
which is used to control the top-to-bottom stacking order.
+MATLAB stacking rules, e.g. controls are always on top of axes, mean that
+some reasonable layout orders may be invalid stacking orders, so a new
+property for layout order is required.
+
+Auto-parenting
+The new MATLAB graphics system introduces unparented objects, i.e. those with property Parent
+empty. The new system also introduces a separation between formal class constructors, e.g.
+matlab.ui.container.Panel
, and informal construction functions, e.g. uipanel
.
+Construction functions are auto-parenting, i.e. if Parent
is not specified then it is set to
+gcf
, whereas class constructors return objects with Parent
empty unless
+explicitly specified. Version 2 presents a formal interface of class constructors which follow this new
+convention.
+
+Classes in "uiextras" are auto-parenting so the behavior of legacy code is
+unchanged. However, best practice is to specify parent explicitly during
+construction.
+
+Defaults mechanism
+Version 1 provided a defaults mechanism (uiextras.get
, uiextras.set
+and uiextras.unset
) that mimicked get
and set
in the MATLAB
+graphics system itself. This feature has been removed from version 2. Users should use an
+alternative programming pattern, e.g. factory function, to create objects with standard settings.
+
+Enable and disable
+Version 1 provided a mechanism to enable and disable container contents using the property
+Enable
. This feature has been removed from version 2. Users should enable and disable
+controls directly rather than via containers.
+For more commentary, see this article .
+
+Other property name changes
+A number of property names have changed to achieve greater consistency
+across the package. For example, RowSizes
and ColumnSizes
in
+uiextras.Grid are now Heights
and Widths
in uix.Grid. The package
+"uiextras" provides support for legacy property names.
+
+ RowSizes
in "uiextras" is Heights
in "uix"
+ ColumnSizes
in "uiextras" is Widths
in "uix"
+ ShowMarkings
in "uiextras" is DividerMarkings
in "uix"
+
+
+Property shape changes
+Version 2 contents companion properties are now of the same size as Contents
,
+i.e. column vectors. In version 1, these properties were row vectors. The
+package "uiextras" provides support for legacy property values.
+
+ Tab selection behavior
+ In version 1, after adding a tab to a tab panel, the new tab is selected.
+ In version 2, the original selection is preserved, except if the tab panel was
+ empty, in which case the new tab is selected. This is consistent with the
+ behavior of uitabgroup
.
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started3.html
new file mode 100644
index 0000000..ef65040
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started3.html
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+ Release notes
+
+
+
+
+
+
+
+ 3: Release notes
+
+
+ The GUI Layout Toolbox version numbers take the form major.minor.iter
. The
+ current version you have installed can be checked by typing ver
+ at the MATLAB command prompt.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+ 3.1: Version 2.3.1
+
+
+ Released 1 February 2017
+ Specify minimum width and height of contents in uix.ScrollingPanel
+ Update contents position while dragging uix.ScrollingPanel scrollbox
+ Scroll uix.ScrollingPanel using mouse wheel
+ Updated toolbox logo
+ Updated documentation
+
+
+
+ 3.2: Version 2.3
+
+
+ Released 24 November 2016
+ Added scrolling panel
+ Expand and collapse box panel by clicking on title
+ Fixed G1493103 "Error on construction behavior is inconstistent with builtin objects"
+ Updated documentation
+
+
+
+ 3.3: Version 2.2.2
+
+
+ Released 22 August 2016
+ Fixed G1175938 "Cannot use data cursor mode with GUI Layout Toolbox containers"
+ Fixed G1367337 "Update flex container pointer on mouse press event"
+ Fixed G1380756 "Space behind TabPanel tabs should match parent color"
+ Updated documentation
+ Added anonymous tracking of version, operating system and usage to help
+ us prioritize the improvements we should work on
+
+
+
+ 3.4: Version 2.2.1
+
+
+ Released 26 February 2016
+ Fixed G1346921 "Mouse pointer gets confused when moving between adjacent flex containers"
+ Fixed G1357340 "BoxPanel property ForegroundColor is initialized incorrectly"
+
+
+
+ 3.5: Version 2.2
+
+
+ Released 18 December 2015
+ Improved box panel title bar appearance
+ Changed selection behavior of uix.TabGroup to match that of uitabgroup when the selected tab is removed
+ Fixed G1253937 "uix.TabPanel/redrawTabs fails" (R2015b)
+ Fixed G1292238 "uix.BoxPanel/redrawBorders fails" (R2015b)
+ Fixed G1330841 "mouse-over-divider detection does not work for docked figures" (all)
+ Fixed G1332109 "uix.Empty background color does not match that of its Parent" (all)
+ Fixed G1334867 "cannot add axes to container" (R2016a prerelease)
+ Removed internal helper classes uix.AncestryObserver, uix.LocationObserver, uix.VisibilityObserver
+ Updated documentation
+
+
+
+ 3.6: Version 2.1.2
+
+
+ Released 29 May 2015
+ Fixed G1250248 "uix.Empty becomes visible in a panel"
+ Fixed G1250249 "missing property Selection of uix.BoxPanel"
+ Fixed G1250808 "uix.TabPanel context menus are orphaned when reparenting to a different figure"
+ Updated documentation
+
+
+
+ 3.7: Version 2.1.1
+
+
+ Released 15 May 2015
+ Added context menus on uix.TabPanel tab labels (G1245669)
+ Fixed G1164656 "cannot set relative tab widths"
+ Fixed G1019441 "property RowSizes of uiextras.GridFlex sets heights not widths"
+ Fixed G1165274 "missing properties RowSizes, MinimumRowSizes, ColumnSizes,
+ MinimumColumnSizes of uiextras.Grid, uiextras.GridFlex"
+ Fixed G1218142 "contents are lost when reordering via property Children"
+ Protected against G1136196 "segv when setting child visibility from 'off' to 'on' in response to being reparented"
+ Updated documentation
+
+
+
+ 3.8: Version 2.1
+
+
+ Released 2 October 2014
+ Initial version for MATLAB R2014b
+ Versions 2.0.x were for prerelease testing
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started4.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started4.html
new file mode 100644
index 0000000..bdbd888
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started4.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+ Installation
+
+
+
+
+
+
+
+ 4: Installation
+
+
+
+ GUI Layout Toolbox is provided as a MATLAB toolbox file (.mltbx
).
+
+
+ For instructions on installing and uninstalling, see the section on
+ managing toolboxes
+ in the MATLAB documentation.
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started5.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started5.html
new file mode 100644
index 0000000..f10756e
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started5.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+ Support
+
+
+
+
+
+
+
+ 5: Support
+
+
+
+ This toolbox is not a MathWorks supported product. However, if you
+ have problems, suggestions or other comments, please contact the
+ authors:
+
+
+ If you like this toolbox, help others to find it by leaving a rating
+ and comment on the MATLAB Central File Exchange .
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started6.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started6.html
new file mode 100644
index 0000000..e3930c3
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Getting_Started6.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ Acknowledgements
+
+
+
+
+
+
+
+ 6: Acknowledgements
+
+ The authors wish to acknowledge the earlier contributions of the following MathWorks
+ consultants to this area:
+
+ Brad Phelan
+ Malcolm Wood
+ Richard Lang
+ Paul Kerr-Delworth
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+>
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/HierarchyExample.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/HierarchyExample.html
new file mode 100644
index 0000000..c4c9f48
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/HierarchyExample.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Border.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Border.png
new file mode 100644
index 0000000..0e58e8a
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Border.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxInBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxInBox.png
new file mode 100644
index 0000000..799d725
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxInBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanel.png
new file mode 100644
index 0000000..e261f75
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanel2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanel2.png
new file mode 100644
index 0000000..6a0a067
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanel2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample1.png
new file mode 100644
index 0000000..5b4334d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample2.png
new file mode 100644
index 0000000..71710ba
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample3.png
new file mode 100644
index 0000000..684c3b1
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample4.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample4.png
new file mode 100644
index 0000000..ce1e8db
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelDockExample4.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelHelpExample.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelHelpExample.png
new file mode 100644
index 0000000..2ed2506
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelHelpExample.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample1.png
new file mode 100644
index 0000000..739539d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample2.png
new file mode 100644
index 0000000..38ef843
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample3.png
new file mode 100644
index 0000000..d0c77cd
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/BoxPanelMinimizeExample3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/CardPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/CardPanel.png
new file mode 100644
index 0000000..9d6708d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/CardPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/CombineBoxes.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/CombineBoxes.png
new file mode 100644
index 0000000..8156ba3
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/CombineBoxes.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsFigure.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsFigure.png
new file mode 100644
index 0000000..e0446a1
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsFigure.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsSystem1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsSystem1.png
new file mode 100644
index 0000000..2c228e4
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsSystem1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsSystem2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsSystem2.png
new file mode 100644
index 0000000..1065eac
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/DefaultsSystem2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Empty.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Empty.png
new file mode 100644
index 0000000..4f47041
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Empty.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample1.png
new file mode 100644
index 0000000..0f46c6f
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample2.png
new file mode 100644
index 0000000..3d8be82
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample3.png
new file mode 100644
index 0000000..b3f62e7
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/EnableExample3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Grid.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Grid.png
new file mode 100644
index 0000000..47ab781
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Grid.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/GridFlex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/GridFlex.png
new file mode 100644
index 0000000..76b64c5
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/GridFlex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HBox.png
new file mode 100644
index 0000000..943f481
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HBoxFlex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HBoxFlex.png
new file mode 100644
index 0000000..884a88e
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HBoxFlex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HButtonBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HButtonBox.png
new file mode 100644
index 0000000..6f87b71
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/HButtonBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Panel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Panel.png
new file mode 100644
index 0000000..a50979d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Panel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Panel2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Panel2.png
new file mode 100644
index 0000000..3b2a564
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/Panel2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/ScrollingPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/ScrollingPanel.png
new file mode 100644
index 0000000..5ea6ecf
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/ScrollingPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/TabPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/TabPanel.png
new file mode 100644
index 0000000..2b42615
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/TabPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VBox.png
new file mode 100644
index 0000000..eb3ec85
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VBoxFlex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VBoxFlex.png
new file mode 100644
index 0000000..31275e3
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VBoxFlex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VButtonBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VButtonBox.png
new file mode 100644
index 0000000..f8c57aa
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VButtonBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample1.png
new file mode 100644
index 0000000..1948bca
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample2.png
new file mode 100644
index 0000000..7b75ae1
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample3.png
new file mode 100644
index 0000000..23af1ba
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/VisibleExample3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_inner.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_inner.png
new file mode 100644
index 0000000..e6dcf35
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_inner.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_layout_example_2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_layout_example_2.png
new file mode 100644
index 0000000..db9a72c
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_layout_example_2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_layout_example_3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_layout_example_3.png
new file mode 100644
index 0000000..22e90cc
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_layout_example_3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_outer.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_outer.png
new file mode 100644
index 0000000..096b7fc
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/axes_outer.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example2.png
new file mode 100644
index 0000000..92367ba
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example3.png
new file mode 100644
index 0000000..186d1d4
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example4.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example4.png
new file mode 100644
index 0000000..c32320b
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example4.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example5.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example5.png
new file mode 100644
index 0000000..ad06ede
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example5.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example6.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example6.png
new file mode 100644
index 0000000..4bbe18b
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example6.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example_tab.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example_tab.png
new file mode 100644
index 0000000..c5bd41c
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example_tab.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example_vbox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example_vbox.png
new file mode 100644
index 0000000..d4a4294
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/basics_example_vbox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_BorderLayout.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_BorderLayout.png
new file mode 100644
index 0000000..665011d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_BorderLayout.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_BoxPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_BoxPanel.png
new file mode 100644
index 0000000..dc9bb2a
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_BoxPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_CardPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_CardPanel.png
new file mode 100644
index 0000000..1d0166a
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_CardPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_Grid.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_Grid.png
new file mode 100644
index 0000000..afec6e5
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_Grid.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_GridFlex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_GridFlex.png
new file mode 100644
index 0000000..69e854f
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_GridFlex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HBox.png
new file mode 100644
index 0000000..916a497
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HBoxFlex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HBoxFlex.png
new file mode 100644
index 0000000..c161f95
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HBoxFlex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HButtonBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HButtonBox.png
new file mode 100644
index 0000000..3a327a3
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_HButtonBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_Panel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_Panel.png
new file mode 100644
index 0000000..ccfcff5
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_Panel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_ScrollingPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_ScrollingPanel.png
new file mode 100644
index 0000000..7f1ff08
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_ScrollingPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_TabPanel.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_TabPanel.png
new file mode 100644
index 0000000..412b0de
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_TabPanel.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VBox.png
new file mode 100644
index 0000000..14b5e5b
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VBoxFlex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VBoxFlex.png
new file mode 100644
index 0000000..867daf8
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VBoxFlex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VButtonBox.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VButtonBox.png
new file mode 100644
index 0000000..53bbaaf
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bigicon_VButtonBox.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bookicon.gif b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bookicon.gif
new file mode 100644
index 0000000..7f86c41
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/bookicon.gif differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/colorbar_example_2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/colorbar_example_2.png
new file mode 100644
index 0000000..cf35f19
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/colorbar_example_2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/colorbar_example_3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/colorbar_example_3.png
new file mode 100644
index 0000000..e80b616
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/colorbar_example_3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser1.png
new file mode 100644
index 0000000..6186138
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser2.png
new file mode 100644
index 0000000..88b579a
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser3.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser3.png
new file mode 100644
index 0000000..096d9ef
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser3.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser4.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser4.png
new file mode 100644
index 0000000..5129b57
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoBrowser4.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoicon.gif b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoicon.gif
new file mode 100644
index 0000000..c89e7ac
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/demoicon.gif differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/deploy.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/deploy.png
new file mode 100644
index 0000000..eae1f87
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/deploy.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/greenarrowicon.gif b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/greenarrowicon.gif
new file mode 100644
index 0000000..5c5d0e4
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/greenarrowicon.gif differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/guide1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/guide1.png
new file mode 100644
index 0000000..ce9b11e
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/guide1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/guide2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/guide2.png
new file mode 100644
index 0000000..4e328f4
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/guide2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/header.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/header.png
new file mode 100644
index 0000000..9e38e4e
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/header.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/headerBG.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/headerBG.png
new file mode 100644
index 0000000..9f01b70
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/headerBG.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_ex.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_ex.png
new file mode 100644
index 0000000..50c5df2
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_ex.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_fx.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_fx.png
new file mode 100644
index 0000000..5ac8b7b
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_fx.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_gs.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_gs.png
new file mode 100644
index 0000000..2ab3896
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_gs.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_rn.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_rn.png
new file mode 100644
index 0000000..142c6c0
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_rn.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_ug.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_ug.png
new file mode 100644
index 0000000..68381b5
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/help_ug.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/leftarrow.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/leftarrow.png
new file mode 100644
index 0000000..b8ffd42
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/leftarrow.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/pageicon.gif b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/pageicon.gif
new file mode 100644
index 0000000..3d35fdb
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/pageicon.gif differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/pagesicon.gif b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/pagesicon.gif
new file mode 100644
index 0000000..9278b1f
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/pagesicon.gif differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/reficon.gif b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/reficon.gif
new file mode 100644
index 0000000..44b0548
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/reficon.gif differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/rightarrow.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/rightarrow.png
new file mode 100644
index 0000000..4bdf3ec
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/rightarrow.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/titleimage.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/titleimage.png
new file mode 100644
index 0000000..b9cd50b
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/titleimage.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/uparrow.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/uparrow.png
new file mode 100644
index 0000000..4590b67
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/uparrow.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_fixed1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_fixed1.png
new file mode 100644
index 0000000..f0f7bed
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_fixed1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_fixed2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_fixed2.png
new file mode 100644
index 0000000..1b05edd
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_fixed2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout0_1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout0_1.png
new file mode 100644
index 0000000..1b38859
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout0_1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout0_2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout0_2.png
new file mode 100644
index 0000000..80a686d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout0_2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout1.png
new file mode 100644
index 0000000..80a686d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout2.png
new file mode 100644
index 0000000..b6e7fa1
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout_anno1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout_anno1.png
new file mode 100644
index 0000000..30119a8
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout_anno1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout_anno2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout_anno2.png
new file mode 100644
index 0000000..dda9012
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_layout_anno2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_normalized1.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_normalized1.png
new file mode 100644
index 0000000..638ccb9
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_normalized1.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_normalized2.png b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_normalized2.png
new file mode 100644
index 0000000..54e91d0
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/Images/why_normalized2.png differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/LayoutsGUIDE.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/LayoutsGUIDE.html
new file mode 100644
index 0000000..0237f5e
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/LayoutsGUIDE.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelDock.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelDock.html
new file mode 100644
index 0000000..d760e22
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelDock.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelHelp.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelHelp.html
new file mode 100644
index 0000000..b7d130a
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelHelp.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelMinimize.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelMinimize.html
new file mode 100644
index 0000000..f3cabb3
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/PanelMinimize.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide.html
new file mode 100644
index 0000000..81098f6
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+ User guide
+
+
+
+
+
+
+
+
+ User guide
+
+ This chapter describes the purpose and overall design of the layout
+ tools that the toolbox provides. It also provides some examples of
+ creating some user interfaces using layouts.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contents
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1.html
new file mode 100644
index 0000000..bf24b35
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+ Understanding layouts
+
+
+
+
+
+
+
+ 1: Understanding layouts
+
+ The purpose of a "layout" is to manage the positioning of one
+ or more user-interface components. This means that instead of
+ worrying about the exact position of each user interface component
+ you instead worry about the relative positioning of them; are they
+ arranged in a vertical list, horizontal list, a grid pattern, etc.
+ The best way to understand what layouts are and why they are a good user-interface
+ design tool is to see some examples. The sections below go through the
+ basics of building an interface using layouts and how to build complex
+ interfaces using them.
+
+
+
+
+
+
+
+
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_1.html
new file mode 100644
index 0000000..e073dde
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_1.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+ Layout basics
+
+
+
+
+
+
+
+
+
+ 1.1: Layout basics
+
+ To see how layouts work, let's use the most basic layout,
+ a horizontal list (or box). We first create a window:
+
+ f = figure
();
+
+
+ Now let's create the horizontal layout and add it to the figure. Note
+ that in common with other MATLAB graphics objects, one object is added to
+ another by setting the Parent
property - this will automatically
+ adjust the list of Children
in the parent object. The job of a
+ horizontal box layout is to arrange its contents in a horizontal line,
+ setting the position of each element to best fill the space:
+
+ layout = uix.HBox
( 'Parent', f );
+
+ Nothing's changed! That's because the layout is for arranging
+ other user-interface components - it doesn't draw anything itself. Let's
+ add some buttons. Note how after creating each button the existing contents
+ of the box make room for the new addition; we don't need to set the position of
+ any user-interface component!
+
+ uicontrol
( 'String', 'Button 1', 'Parent', layout );
+uicontrol
( 'String', 'Button 2', 'Parent', layout );
+uicontrol
( 'String', 'Button 3', 'Parent', layout );
+
. .
+
+ Other layouts work in exactly the same way, although visually
+ the end-result is quite different:
+
+ f = figure
();
+layout = uix.VBox
( 'Parent', f );
+uicontrol
( 'String', 'Button 1', 'Parent', layout );
+uicontrol
( 'String', 'Button 2', 'Parent', layout );
+uicontrol
( 'String', 'Button 3', 'Parent', layout );
+
+
+
+ f = figure
();
+layout = uix.TabPanel
( 'Parent', f );
+uicontrol
( 'String', 'Button 1', 'Parent', layout );
+uicontrol
( 'String', 'Button 2', 'Parent', layout );
+uicontrol
( 'String', 'Button 3', 'Parent', layout );
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_2.html
new file mode 100644
index 0000000..c4ebeab
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_2.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+ Types of layout
+
+
+
+
+
+
+
+
+
+ 1.2: Types of layout
+
+ The layouts in this toolbox come in three forms:
+
+ Panels : show a single child element with some decoration. Other children
+ of the layout are hidden from view. The visible child can be switched. Available
+ panels include
+ Panel ,
+ CardPanel ,
+ BoxPanel ,
+ TabPanel and
+ ScrollingPanel .
+
+ Boxes : arrange children linearly in a single row or column. Available boxes include
+ HBox ,
+ VBox ,
+ HBoxFlex and
+ VBoxFlex .
+
+ Grids : (also known as tables) arrange children in a two-dimensional grid. Available grids include
+ Grid and
+ GridFlex .
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_3.html
new file mode 100644
index 0000000..42fc9b9
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_3.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+ Sizes and units
+
+
+
+
+
+
+
+
+
+ 1.3: Sizes and units
+
+ In the previous section we noted that when using layouts
+ you never need to set the position or size of a user-interface
+ component yourself - the layouts take care of it. So how do
+ you control the sizes of the components?
+ Each layout that arranges multiple items within its drawing area
+ has a sizing property: for horizontal boxes this is Widths
+ and for vertical boxes Heights
; for grids we have both Widths
+ and Heights
. These all obey the same convention:
+
+ Positive numbers indicate sizes in pixels (similar to "pixel" units)
+ Negative numbers indicate a weighting for variable sizing (similar to "normalized" units)
+
+ By default all sizes are set to -1 (variable size with unit weighting).
+ Let's take a simple example:
+
+ f = figure
();
+layout = uix.HBox
( 'Parent', f );
+uicontrol
( 'String', 'Button 1', 'Parent', layout );
+uicontrol
( 'String', 'Button 2', 'Parent', layout );
+uicontrol
( 'String', 'Button 3', 'Parent', layout );
+
+
+ We can set the middle element to be twice as wide as the others
+ (but still variable width) by setting its weight to -2 with the others at -1:
+
+ layout.Widths = [-1 -2 -1]
+
+
+ Alternatively we might want the first element to have a
+ fixed width of 100 pixels with the others filling any remaining
+ space equally:
+
+ layout.Widths = [100 -1 -1]
+
+
+
+ This ability to mix fixed and variable sized elements is
+ crucial in interface design. It really comes into its own when building
+ a hierarchy of layouts, described next.
+
+
+
+
+ 1.3.1:
+ Minimum sizes
+ Many of the multi-element layouts also provide a MinimumWidths
+ or MinimumHeights
+ property to prevent an element becoming too small. This is measured in
+ pixels and defaults to one pixel. Take care to ensure that the available
+ space is at least the sum of the minimum sizes, plus any padding and
+ spacing.
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_4.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_4.html
new file mode 100644
index 0000000..0d9620c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_4.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ Layout hierarchies
+
+
+
+
+
+
+
+
+
+ 1.4: Layout hierarchies
+
+ Consider the following simple interface:
+
+ Instead of thinking of this in terms of three elements that need
+ positioning, we can break it up into two simple linear ("box") arrangements:
+ a vertical box with the axes at the top and a control area at the bottom and
+ a horizontal box containing two buttons:
+ .
+ By placing the second layout (horizontal box) inside the first (vertical box)
+ we arrive at the complete layout. Since the sizes of the elements in each list
+ can be set to be fixed or flexible we can achieve a user-interface that is not just
+ arranged correctly when created, but also behaves well when resized.
+
+ Note that the buttons have stayed fixed height as the window grows and the
+ axes grow to fill the remaining space.
+
+
+
+ 1.4.1:
+ Code:
+ The example above can be created programmically pretty
+ much as described in text
+ (the completed example code is here:
+ [ view
+ | edit
+ | run ]
+ )
+ 1. Open a window
+ f = figure
( 'Position', 200*ones(1,4) );
+ 2. Create the first layout (vertical box) Inside this vertical box
+ we place the axes
+ vbox = uix.VBox
( 'Parent', f );
+axes( 'Parent', vbox );
+
+
+ 3. Create the second layout (horizontal box) Inside this horizontal box
+ we place two buttons
+hbox = uix.HButtonBox
( 'Parent', vbox, 'Padding', 5 );
+uicontrol
( 'Parent', hbox, ...
+ 'String', 'Button 1' );
+uicontrol
( 'Parent', hbox, ...
+ 'String', 'Button 2' );
+
+
+ 4. Set the sizes We want the axes to grow with the window so
+ set the first size to be -1 (which means variable size with wieght 1) and the buttons to stay fixed height so set the
+second size to 35 (fixed height of 35 pixels)
+set( vbox, 'Heights', [-1 35] )
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_5.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_5.html
new file mode 100644
index 0000000..db44733
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide1_5.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+ Why use layouts?
+
+
+
+
+
+
+
+
+
+ 1.5: Why use layouts?
+
+ MATLAB ships with a GUI design tool called GUIDE
. This
+ doesn't use layouts, but forces users to manually position each element. This approach
+ is a much faster way to build simple user-interfaces, so why would you want to
+use layouts?
+ The over-riding reason for using layouts or layout managers is
+ to gain control of the resizing behaviour of the interface without
+ having to write a complex "ResizeFcn". If you simply position user-interface elements
+ directly (either using GUIDE
or programmatically), you
+ have two choices about what happens when the window resizes:
+
+ For example:
+ 1. The user-interface components scale with the window (normalised units) We didn't really want the buttons to grow but everything resizes in proportion.
+ f = figure
( 'Position', 200*ones(1,4) );
+axes
( 'Parent', f, ...
+ 'Units', 'Normalized', ...
+ 'OuterPosition', [0.02 0.2 0.96 0.8] );
+uicontrol
( 'Parent', f, ...
+ 'Units', 'Normalized', ...
+ 'Position', [0.02 0.02 0.46 0.16], ...
+ 'String', 'Button 1' );
+uicontrol
( 'Parent', f, ...
+ 'Units', 'Normalized', ...
+ 'Position', [0.52 0.02 0.46 0.16], ...
+ 'String', 'Button 2' );
+
.
+
+ 2. The user-interface components stay fixed and the window resize creates empty space (pixel units) Although the buttons don't now grow, neither does the axes, which looks very odd.
+ f = figure
( 'Position', 200*ones(1,4) );
+axes
( 'Parent', f, ...
+ 'Units', 'Pixels', ...
+ 'OuterPosition', [10 35 190 175] );
+uicontrol
( 'Parent', f, ...
+ 'Units', 'Pixels', ...
+ 'Position', [5 5 90 25], ...
+ 'String', 'Button 1' );
+uicontrol
( 'Parent', f, ...
+ 'Units', 'Pixels', ...
+ 'Position', [105 5 90 25], ...
+ 'String', 'Button 2' );
+
.
+
+ Neither of these alternatives is particularly useful for a serious
+ user-interface. Typically there are user-interface components that should
+ be fixed size: icons, buttons, selectors etc; and others that should resize
+ with the window: graphs, images, prose text etc. To achieve this one needs
+ to be able to specify which interface components should be fixed size and
+ which variable. Over the last two decades, layouts have been shown to be
+ the method of choice for achieving this.
+ For example:
+ Using layouts, some user-interface components scale with the window, others stay fixed
+ f = figure
( 'Position', 200*ones(1,4) );
+vbox = uix.VBox
( 'Parent', f );
+axes( 'Parent', vbox );
+hbox = uix.HButtonBox
( 'Parent', vbox, 'Padding', 5 );
+uicontrol
( 'Parent', hbox, ...
+ 'String', 'Button 1' );
+uicontrol
( 'Parent', hbox, ...
+ 'String', 'Button 2' );
+set( vbox, 'Heights', [-1 35] )
+
.
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2.html
new file mode 100644
index 0000000..82cab7c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+ Positioning axes
+
+
+
+
+
+
+
+ 2: Positioning axes
+
+
+
+ Unlike other MATLAB user interface components, axes
+ have two position properties: Position
and
+ OuterPosition
. This means one has some extra
+ options as to how the layout will arrange the axes.
+
+
+
+
+
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_1.html
new file mode 100644
index 0000000..8fecb51
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_1.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ Position vs OuterPosition
+
+
+
+
+
+
+
+
+
+ 2.1: Position vs OuterPosition
+
+ Typically one
+ would position some axes using their OuterPosition
so that the
+ axis labels, title and other annotations are all contained within the
+ specified area. Sometimes, particularly if drawing images, one might want
+ to instead make the axes canvas (the white bit!) fill the specified area.
+ This is done by setting the Position
property instead.
+
+
+ For example:
+ figure
+axes
( 'Units', 'Normalized', 'OuterPosition', [0 0 1 1] )
+
+
+
+ figure
+axes
( 'Units', 'Normalized', 'Position', [0 0 1 1] )
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_2.html
new file mode 100644
index 0000000..ea7fdb7
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_2.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ Axes inside layouts
+
+
+
+
+
+
+
+
+
+ 2.2: Axes inside layouts
+
+ (The code for this example can be found here:
+ [ view
+ | edit
+ | run ]
+ )
+
+ When using layouts to position axes, the position property
+ is set by the layout, not the user. Whether the Position
+ or OuterPosition
property is used is determined by the
+ ActivePositionProperty
property of the axes
.
+ Note that the default setting is "outerposition".
+
+
+ The following example illustrates the two usages.
+
+
+ Open a window
+ Open a new figure window and remove the toolbar and menus.
+ window = figure
( 'Name', 'Axes inside layouts', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'NumberTitle', 'off' );
+
+ Create the layout
+ The layout involves two axes side by side. This is done using a flexible horizontal box. The left-hand axes is left with the ActivePositionProperty
set to "outerposition", but the right-hand axes is switched to use Position
.
+ hbox = uix.HBoxFlex
('Parent', window, 'Spacing', 3);
+axes1 = axes
( 'Parent', hbox, ...
+ 'ActivePositionProperty', 'outerposition' );
+axes2 = axes
( 'Parent', hbox, ...
+ 'ActivePositionProperty', 'Position' );
+set( hbox, 'Widths', [-2 -1] );
+
+
+
+ Fill the axes
+ Using OuterPosition
(left-hand axes) is the normal mode and looks good for virtually any plot type. Using Position
is only really useful for 2D plots with the axes turned off, such as images.
+ x = membrane( 1, 15 );
+surf
( axes1, x );
+lighting
( axes1, 'gouraud' );
+shading
( axes1, 'interp' );
+l = light
( 'Parent', axes1 );
+camlight
( l, 'head' );
+axis
( axes1, 'tight' );
+
+imagesc
( x, 'Parent', axes2 );
+set( axes2, 'xticklabel', [], 'yticklabel', [] );
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_3.html
new file mode 100644
index 0000000..5543bd9
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide2_3.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ Colorbars and legends
+
+
+
+
+
+
+
+
+
+ 2.3: Colorbars and legends
+
+ (The code for this example can be found here:
+ [ view
+ | edit
+ | run ]
+ )
+
+ When using layouts to position axes that can also have a
+ colorbar or legend it is very important to group the axes
+ with its colorbar and legend by putting them inside a uicontainer
.
+
+
+ The following example illustrates this.
+
+
+ Open a window
+ Open a new figure window and remove the toolbar and menus.
+ window = figure
( 'Name', 'Axes legend and colorbars', ...
+ 'MenuBar', 'none', ...
+ 'Toolbar', 'none', ...
+ 'NumberTitle', 'off' );
+
+
+ Create the layout
+ The layout involves two axes side by side. Each axes is placed into a uicontainer so that the legend and colorbar are "grouped" with the axes.
+ hbox = uix.HBoxFlex
('Parent', window, 'Spacing', 3);
+axes1 = axes
( 'Parent', uicontainer
('Parent', hbox) );
+axes2 = axes
( 'Parent', uicontainer
('Parent', hbox) );
+
+
+
+ Add decorations
+ Give the first axes a colorbar and the second axes a legend.
+ surf
( axes1, membrane
( 1, 15 ) );
+colorbar
( axes1 );
+
+theta = 0:360;
+plot
( axes2, theta, sind
(theta), theta, cosd
(theta) );
+legend
( axes2, 'sin', 'cos', 'Location', 'NorthWestOutside' );
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide3.html
new file mode 100644
index 0000000..b88926c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide3.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+ Controlling visibility
+
+
+
+
+
+
+
+ 3: Controlling visibility
+
+ The examples in this section show the effect of setting the
+ Visible
property on a layout object.
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide3_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide3_1.html
new file mode 100644
index 0000000..4536042
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide3_1.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+ Visible example
+
+
+
+
+
+
+
+
+
+ 3.1: Visible example
+
+ (The code for this example can be found here:
+ [ view
+ | edit
+ | run ]
+ )
+
+ This example shows how the Visible
property can be
+ used to hide whole sections of an interface.
+
+
+ Open a window and add a panel
+ fig = figure
( 'Name', 'Visible example', ...
+ 'Position', [100 100 150 250], ...
+ 'MenuBar', 'none', ...
+ 'ToolBar', 'none', ...
+ 'NumberTitle', 'off' );
+panel = uix.BoxPanel
( 'Parent', fig, 'Title', 'Panel' );
+
+
+
+ Put some buttons inside the panel
+ box = uix.VButtonBox
( 'Parent', panel );
+uicontrol
( 'Parent', box, 'String', 'Button 1' );
+uicontrol
( 'Parent', box, 'String', 'Button 2' );
+uicontrol
( 'Parent', box, 'String', 'Button 3', 'Visible', 'off' );
+uicontrol
( 'Parent', box, 'String', 'Button 4' );
+uicontrol
( 'Parent', box, 'String', 'Button 5', 'Visible', 'off' );
+uicontrol
( 'Parent', box, 'String', 'Button 6' );
+
+
+
+ Try hiding the panel
+ set( panel, 'Visible', 'off' );
+
+
+
+ Try showing the panel. Note that the original Visible
state of each button is remembered.
+ set( panel, 'Visible', 'on' );
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4.html
new file mode 100644
index 0000000..a801d9c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ Advanced maneuvers with panels
+
+
+
+
+
+
+
+ 4: Advanced maneuvers with panels
+
+
+ The uix.BoxPanel
provides some extra buttons
+ and callbacks that can be used to design advanced user-interface
+ layouts. In particular, the sections below illustrate how to create
+ interfaces with context help, and panels that can be minimized or undocked.
+
+
+
+
+
+
+
+
+
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_1.html
new file mode 100644
index 0000000..0eb56a7
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_1.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ Context help
+
+
+
+
+
+
+
+
+
+ 4.1: Context help
+
+
+ When a uix.BoxPanel
has its HelpFcn
+ filled in, a help button (?) is shown in the upper-right of the
+ title-bar. When the user clicks this button the specified function
+ is called.
+
+ For example:
+ Here we hookup the HelpFcn to simply bring up
+ the MATLAB documentation for each command. Clicking any of the "?" buttons
+ will cause the MATLAB help browser to open.
+ f = figure
( 'Name', 'uix.BoxPanel Help Example' );
+b = uix.HBox
( 'Parent', f );
+uix.BoxPanel
( 'Parent', b, 'Title', 'sin', 'HelpFcn', @(a,b) doc('sin') );
+uix.BoxPanel
( 'Parent', b, 'Title', 'cos', 'HelpFcn', @(a,b) doc('cos') );
+uix.BoxPanel
( 'Parent', b, 'Title', 'tan', 'HelpFcn', @(a,b) doc('tan') );
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_2.html
new file mode 100644
index 0000000..809963f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_2.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+ Minimize and maximize
+
+
+
+
+
+
+
+
+
+ 4.2: Minimize and maximize
+
+
+ When a uix.BoxPanel
has its MinimizeFcn
+ filled in, a minimize/maximize button (â–´/â–¾) is shown in the upper-right of the
+ title-bar. When the user clicks this button the specified function
+ is called. Since the behaviour of the parent container is
+ different in different use-cases, it is up to the user to write
+ some code to actually resize the panel. Note that minimizing
+ a panel to its title-bar only really makes sense inside a
+ uix.VBox
or uix.VBoxFlex
.
+
+ The following simple example shows how to add minimize/maximize
+ functionality to a box full of panels. Save the code into
+ a file called "minimizeexample.m" to run it.
+
+ (The code for this example can be found here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+ Create the layout with three panels
+ Open a new figure window and add three panels.
+ function
minimizeexample()
+width = 200;
+pheightmin = 20;
+pheightmax = 100;
+
+
+fig = figure
( 'Name'
, 'Collapsable GUI example'
, ...
+ 'NumberTitle'
, 'off'
, ...
+ 'Toolbar'
, 'none'
, ...
+ 'MenuBar'
, 'none'
);
+box = uix.VBox
( 'Parent', fig );
+
+panel{1} = uix.BoxPanel
( 'Title'
, 'Panel 1'
, 'Parent'
, box );
+panel{2} = uix.BoxPanel
( 'Title'
, 'Panel 2'
, 'Parent'
, box );
+panel{3} = uix.BoxPanel
( 'Title'
, 'Panel 3'
, 'Parent'
, box );
+set
( box, 'Heights', pheightmax*ones(1,3) );
+
+.
+uicontrol
( 'Style'
, 'PushButton'
, 'String'
, 'Button 1'
, 'Parent'
, panel{1} );
+uicontrol
( 'Style'
, 'PushButton'
, 'String'
, 'Button 2'
, 'Parent'
, panel{2} );
+uicontrol
( 'Style'
, 'PushButton'
, 'String'
, 'Button 3'
, 'Parent'
, panel{3} );
+
+
+pos = get
( fig, 'Position'
);
+set
( fig, 'Position'
, [pos(1,1:2),width,sum(box.Heights)] );
+
+
+
+ Add the minimize/maximize callback
+ We set each panel to call the same minimize/maximize function.
+ This function is nested inside the main function so that it has access
+ to the main function's variables. A better way to do this is to make the
+main function into a class, but this nested-function approach is fine
+for simple applications.
+ Note that as soon as we set the "MinimizeFcn" property the minimize/maximize
+ icon appears in the top-right of each panel. We use a cell-array to pass an
+ extra argument, the panel number, to the minimize function. This extra argument appears after the usual
+ eventSource
and eventData
arguments.
+ .
+set
( panel{1}, 'MinimizeFcn'
, {@nMinimize, 1} );
+set
( panel{2}, 'MinimizeFcn'
, {@nMinimize, 2} );
+set
( panel{3}, 'MinimizeFcn'
, {@nMinimize, 3} );
+
+
+ function
nMinimize( eventSource, eventData, whichpanel )
+
+ s = get
( box, 'Heights'
);
+ pos = get
( fig, 'Position'
);
+ panel{whichpanel}.Minimized = ~panel{whichpanel}.Minimized;
+ if
panel{whichpanel}.Minimized
+ s(whichpanel) = pheightmin;
+ else
+ s(whichpanel) = pheightmax;
+ end
+ set
( box, 'Heights'
, s );
+
+
+ delta_height = pos(1,4) - sum
( box.Heights );
+ set
( fig, 'Position'
, pos(1,:) + [0 delta_height 0 -delta_height] );
+ end
+
+end
+
+
+
+
+ Click the minimize buttons
+ Minimizing the middle panel causes it to shrink to just its
+ title-bar and the window shrinks accordingly. The
+ "Minimize" icon is replaced by a "Maximise" icon.
+
+ Re-maximizing the panel would
+ cause it to re-appear in full and the window to grow again.
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_3.html
new file mode 100644
index 0000000..b32cb4b
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide4_3.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+ Dock and undock
+
+
+
+
+
+
+
+
+
+ 4.3: Dock and undock
+
+
+
+ When a uix.BoxPanel
has its DockFcn
+ filled in, a dock/undock button (↘/↗) is shown in the upper-right of the
+ title-bar. When the user clicks this button the specified function
+ is called. Since re-docking the panel into its previous parent
+ depends on the type of parent, it is up to the user to write
+ some code to actually extract or insert the panel.
+
+ The following simple example shows how to add dock/undock
+ functionality to a box full of panels. Save the code into
+ a file called "dockexample.m" to run it.
+
+ (The code for this example can be found here:
+ [ view
+ | edit
+ | run ]
+ )
+
+ Create the layout with three panels
+ Open a new figure window and add three panels.
+ function
dockexample()
+
+fig = figure
( 'Name'
, 'Dockable GUI example'
, ...
+ 'NumberTitle'
, 'off'
, ...
+ 'Toolbar'
, 'none'
, ...
+ 'MenuBar'
, 'none'
, ...
+ 'CloseRequestFcn'
, @nCloseAll );
+box = uix.HBox
( 'Parent'
, fig );
+
+
+panel{1} = uix.BoxPanel
( 'Title'
, 'Panel 1'
, 'Parent'
, box );
+panel{2} = uix.BoxPanel
( 'Title'
, 'Panel 2'
, 'Parent'
, box );
+panel{3} = uix.BoxPanel
( 'Title'
, 'Panel 3'
, 'Parent'
, box );
+
+
+uicontrol
( 'Style'
, 'PushButton'
, 'String'
, 'Button 1'
, 'Parent'
, panel{1} );
+uicontrol
( 'Style'
, 'PushButton'
, 'String'
, 'Button 2'
, 'Parent'
, panel{2} );
+uicontrol
( 'Style'
, 'PushButton'
, 'String'
, 'Button 3'
, 'Parent'
, panel{3} );
+
+
+
+ Add the dock/undock callback
+ We set each panel to call the same dock/undock function.
+ This function is nested inside the main function so that it has access
+ to the main function's variables. A better way to do this is to make the
+main function into a class, but this nested-function approach is fine
+for simple applications.
+ Note that as soon as we set the "DockFcn" property the Dock/Undock
+ icon appears in the top-right of each panel. We use a cell-array to pass an
+ extra argument, the panel number, to the minimize function. This extra argument appears after the usual
+ eventSource
and eventData
arguments.
+
+set
( panel{1}, 'DockFcn'
, {@nDock, 1} );
+set
( panel{2}, 'DockFcn'
, {@nDock, 2} );
+set
( panel{3}, 'DockFcn'
, {@nDock, 3} );
+
+
+ function
nDock( eventSource, eventData, whichpanel )
+
+ panel{whichpanel}.IsDocked = ~panel{whichpanel}.IsDocked;
+ if
panel{whichpanel}.IsDocked
+
+ newfig = get
( panel{whichpanel}, 'Parent'
);
+ set
( panel{whichpanel}, 'Parent'
, box );
+ delete
( newfig );
+ else
+
+ pos = getpixelposition
( panel{whichpanel} );
+ newfig = figure
( ...
+ 'Name'
, get
( panel{whichpanel}, 'Title'
), ...
+ 'NumberTitle'
, 'off'
, ...
+ 'MenuBar'
, 'none'
, ...
+ 'Toolbar'
, 'none'
, ...
+ 'CloseRequestFcn'
, {@nDock, whichpanel} );
+ figpos = get
( newfig, 'Position'
);
+ set
( newfig, 'Position'
, [figpos(1,1:2), pos(1,3:4)] );
+ set
( p{whichpanel}, 'Parent'
, newfig, ...
+ 'Units'
, 'Normalized'
, ...
+ 'Position'
, [0 0 1 1] );
+ end
+ end
+
+
+ Add the close callback
+ If the user closes the main window we need to also close any
+ other windows that were created. This can be done by finding
+ the window that contains each panel and deleting it.
+
+ function
nCloseAll( ~, ~ )
+ for
ii=1:numel
( panel )
+ if
isvalid
( panel{ii} ) && ~strcmpi
( panel{ii}.BeingDeleted, 'on'
)
+ figh = ancestor
( panel{ii}, 'figure'
);
+ delete
( figh );
+ end
+ end
+
+ end
+end
+
+
+
+ Click the dock buttons
+ Undocking the middle panel causes the other two to fill the
+ vacated space. The undocked panel appears in its own window, with the
+ "Undock" icon replaced by a "Dock" icon.
+
.
+ Re-docking the panel would
+ cause it to be appended to the right of the list in the original window. Closing the main window
+ causes all panels, docked or undocked, and their enclosing windows to be closed.
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide5.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide5.html
new file mode 100644
index 0000000..e368e38
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide5.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+ Using layouts inside GUIDE GUIs
+
+
+
+
+
+
+
+ 5: Using layouts inside GUIDE GUIs
+
+
+ Whilst the layouts in this toolbox do not integrate into the
+ MATLAB Graphical User Interface Design Environment (GUIDE
), it
+ is possible to insert layouts into a GUIDE-built GUI as follows:
+ Create the GUIDE GUI
+ Create you GUIDE application as usual, placing a panel where you
+ want to insert the layout. You can turn the panel border and title
+ off if you do not want them.
+
+
+ Insert the layout
+ Edit the "OpeningFcn" in the GUIDE-created code and insert your
+ layout into the panel, making it fill the space. In the example below
+four boxpanels are inserted into a grid, which itself is placed inside
+ uipanel1
:
+
+
+function
guideApp_OpeningFcn(hObject, eventdata, handles, varargin)
+
+
+handles.output = hObject;
+
+
+guidata(hObject, handles);
+
+
+g = uix.GridFlex
( 'Parent'
, handles.uipanel1, ...
+ 'Units'
, 'Normalized'
, 'Position'
, [0 0 1 1], ...
+ 'Spacing'
, 5 );
+uix.BoxPanel
( 'Parent'
, g, 'Title'
, 'Panel 1'
);
+uix.BoxPanel
( 'Parent'
, g, 'Title'
, 'Panel 2'
);
+uix.BoxPanel
( 'Parent'
, g, 'Title'
, 'Panel 3'
);
+uix.BoxPanel
( 'Parent'
, g, 'Title'
, 'Panel 4'
);
+g.Heights = [-1 -1];
+
+
+ (Full source code for this application is available here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide6.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide6.html
new file mode 100644
index 0000000..cb1f4bb
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide6.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ Deploying GUIs using the MATLAB Compiler
+
+
+
+
+
+
+
+ 6: Deploying GUIs using the MATLAB Compiler
+
+
+
+ Applications built using these layout tools can be deployed as standalone
+ executables using the MATLAB Compiler in
+ the same way as any other MATLAB application. There is, however, one thing to watch out for:
+
+ You must explicitly include the "Resources" folder within the +uix package
+
+ Example
+ Below is a screen-shot of the deploytool
setup
+ used to build the example application .
+ The "Resources" folder from the toolbox has been explicitly added as a
+shared resource so that the mouse-pointers and panel icons continue to work.
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7.html
new file mode 100644
index 0000000..9a26e56
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ A complete example
+
+
+
+
+
+
+
+ 7: A complete example
+
+
+
+
+ The following example application uses many of the layout features
+ discussed above in order to create a good-looking user interface that
+ scales well when resized. It is not designed to showcase all the
+ layout functionality, but shows how callbacks are added to provide
+ user interaction. It also exemplifies separating the data from the GUI,
+ a fundamental part of creating modular and maintainable applications.
+ The full application is available here:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Section contents:
+
+
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_1.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_1.html
new file mode 100644
index 0000000..62d544b
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_1.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+ Application structure
+
+
+
+
+
+
+
+
+
+ 7.1: Application structure
+
+
+ There are many ways to build graphical applications in MATLAB, but
+ here we will take a very simple approach. If the application were to become
+larger and more complex, this approach would be changed to better mitigate
+ the complexity. Some notes on this are contained at the end .
+
+ The application is structured as a single function with callbacks and other helper
+ functions stored as "nested" subfunctions, i.e. functions inside the main function. This has
+ the advantage that the nested subfunctions can share access to any variables
+ declared in the main function. This is also a risk as anything we accidentally
+ declare in the main function becomes "global" within the application. For that reason
+ all logic is put into subfunctions and we restrict the main
+ function to just declaring two shared variables:
+
+ data : a structure containing all shared data
+ gui : a structure containing handles to GUI widgets
+
+
+function
demoBrowser()
+
+
+ data = createData();
+ gui = createInterface( data.DemoNames );
+
+
+ updateInterface();
+ redrawDemo();
+
+ .
+ function
data = createData() ... end
;
+ function
gui = createInterface(names) ... end
;
+ function
updateInterface() ... end
;
+ function
redrawDemo() ... end
;
+
+ .
+ function
onMenuSelection() ... end
;
+ function
onListSelection() ... end
;
+ function
onDemoHelp() ... end
;
+ function
onHelp() ... end
;
+ function
onExit() ... end
;
+
+end
+
+
+Note that all of the work is done in subfunctions. Most subfunctions
+are callbacks executed when a button is pressed or a menu selected. The four used
+at startup are helper functions:
+
+ createData : build the structure which contains all application data
+ createInterface : build the user interface
+ updateInterface : update selectors etc in response to a change in the data
+ redrawDemo : redraw the plot part of the interface
+
+ We will not dig into all the subfunctions and callbacks, but instead
+ concentrate on the GUI creation (createInterface )
+ and update (updateInterface ).
+
+ (Full source code for this application is available here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_2.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_2.html
new file mode 100644
index 0000000..b6bc4d2
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_2.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+ createInterface
+
+
+
+
+
+
+
+
+
+ 7.2: createInterface
+
+ The interface creation is handled in the createInterface
+ subfunction. This has two distinct sections: menu building and widget arrangement.
+ The menus are built using the standard MATLAB menu building command uimenu
,
+ so let's concentrate on the widget arrangement.
+
+ The top-level layout is a horizontal arrangement, placing the controls
+to the left of the main plot. We make the layout draggable by using the
+"flex" variant of HBox, and put a panel in each side. Note that setting the
+"HelpFcn" for the view panel adds a small "?" icon for bringing up help. See
+here for more details.
+
+
+mainLayout = uix.HBoxFlex
( 'Parent'
, gui.Window, 'Spacing'
, 3 );
+
+
+controlPanel = uix.BoxPanel
( ...
+ 'Parent'
, mainLayout, ...
+ 'Title'
, 'Select a demo:'
);
+gui.ViewPanel = uix.BoxPanel
( ...
+ 'Parent'
, mainLayout, ...
+ 'Title'
, 'Viewing: ???'
, ...
+ 'HelpFcn'
, @onDemoHelp );
+
+
+set
( mainLayout, 'Widths'
, [-1,-2] );
+
+
+
+The controls panel is filled with a vertical layout containing the listbox
+and a button. Note the callbacks that are specified for both the list and button. These
+both call further subfunctions that are able to access the common "data" and "gui"
+shared structures.
+
+
+controlLayout = uix.VBox
( 'Parent'
, controlPanel, ...
+ 'Padding'
, 3, 'Spacing'
, 3 );
+gui.ListBox = uicontrol
( 'Style'
, 'list'
, ...
+ 'BackgroundColor'
, 'w'
, ...
+ 'Parent'
, controlLayout, ...
+ 'String'
, demoList(:), ...
+ 'Value'
, 1, ...
+ 'Callback'
, @onListSelection);
+gui.HelpButton = uicontrol
( 'Style'
, 'PushButton'
, ...
+ 'Parent'
, controlLayout, ...
+ 'String'
, 'Help for <demo>'
, ...
+ 'Callback'
, @onDemoHelp );
+set
( controlLayout, 'Heights'
, [-1 28] );
+
+
+
+Finally, the view itself is simply an axes placed inside the view panel:
+
+
+gui.ViewAxes = axes
( 'Parent'
, gui.ViewPanel );
+
+
+
+ (Full source code for this application is available here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_3.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_3.html
new file mode 100644
index 0000000..ac4a701
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_3.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+ updateInterface
+
+
+
+
+
+
+
+
+
+ 7.3: updateInterface
+
+ The second subfunction we will look at, updateInterface
, uses the
+ current selections to update the interface. This uses the structure
+ "data" to update various parts of the interface. For this simple example this just means:
+
+ 1. Update the selected item in the listbox
+ set( gui.ListBox, 'Value'
, data.SelectedDemo );
+ 2. Update the help button label
+ demoName = data.DemoNames{ data.SelectedDemo };set
( gui.HelpButton, 'String'
, ['Help for '
,demoName] );
+ 3. Update the view panel title
+ set
( gui.ViewPanel, 'Title'
, sprintf
( 'Viewing: %s'
, demoName ) );
+ 4. Update the ticked menu
+ menus = get
( gui.ViewMenu, 'Children'
);
+set
( menus, 'Checked'
, 'off'
);
+
+whichMenu = strcmpi
( demoName, get
( menus, 'Label'
) );
+set
( menus(whichMenu), 'Checked'
, 'on'
);
+
+
+ In general, this update function is called whenever the underlying
+ shared "data" structure is changed. This happens when the user clicks
+ a button, selects a list item or a menu. Next we will look at a typical
+ callback.
+ (Full source code for this application is available here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_4.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_4.html
new file mode 100644
index 0000000..3690840
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_4.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+ onListSelection
+
+
+
+
+
+
+
+
+
+ 7.4: onListSelection
+
+ Finally, let's have a look at how one of the callbacks works: "onListSelection", the function
+ that is called when an item is selected in the listbox. The other
+ callbacks obey the same pattern.
+ The basic rule of thumb is that a callback should not update any part of
+ the user interface directly - it's job is to respond to user interaction by changing the "data" structure.
+ In this example, each callback changes the underlying data structure
+ then asks the interface to refresh. This might mean that things update in the
+interface that don't need to, but ensures the callbacks remain simple and that all
+interface update logic is in one place. Extending this to more granular interface updates
+ is straightforward. See Scalability for more details.
+ For the listbox callback, the "src" argument is a handle to the
+ listbox and we simply need to update the SelectedDemo field of "data"
+ to reflect the new selection. We then ask the rest of the interface to
+ update in response to the change.
+
+
+
+data.SelectedDemo = get
( src, 'Value'
);
+updateInterface();
+redrawDemo();
+
+
+ (Full source code for this application is available here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_5.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_5.html
new file mode 100644
index 0000000..02585fe
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_5.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+ Running it
+
+
+
+
+
+
+
+
+
+ 7.5: Running it
+
+ When the main function is launched (click
+ here )
+ it first creates the data, then the GUI, then updates the GUI using the data. At this point the
+ function exits and control is returned to the command prompt. Note, however,
+ that the GUI is still onscreen and will still respond to user interaction.
+ This works because the "shared" variables in the main function are not cleared when the
+ function exits. They are only cleared once the GUI is closed. This is a slightly
+ unusual, but very useful, feature of using nested functions for building
+ applications.
+ For example:
+ >> demoBrowser
+
+
+ (Full source code for this application is available here:
+ [ view
+ | edit
+ | run ]
+ )
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_6.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_6.html
new file mode 100644
index 0000000..67e27af
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/User_guide7_6.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+ Scalability
+
+
+
+
+
+
+
+
+
+ 7.6: Scalability
+
+ As applications get bigger the code gets more complex. The simple
+ application structure used here does not scale well to large applications,
+ however some small adjustments can make life much better:
+
+ Convert the "data" structure into a handle object . This allows
+ a single "data" object to be shared between mutliple graphical interfaces, and in turn means that the interface
+ need not be built as a single monolithic entity.
+ Use the events system to trigger updates
+ to specific parts of the GUI in response to bits of the data object changing. This removes the need
+ for a single large "UpdateInterface" function and reduces coupling between parts of the interface. For example,
+ the "SelectedDemo" property would have an associated event such that when it is changed by a callback (or from the command-line) it
+ notifies other interface components of the change. Each interface component (or group thereof) can
+ just listen for the events that affect it.
+
+ Advice on how to build large-scale applications is beyond the scope
+ of this document. If you need help in this area, please contact your MathWorks
+ account manager who will be able to put you in touch with a technical specialist.
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
+
+>
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/VisibleExample.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/VisibleExample.html
new file mode 100644
index 0000000..40b442f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/VisibleExample.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/about.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/about.html
new file mode 100644
index 0000000..a02d59c
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/about.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/atoz.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/atoz.html
new file mode 100644
index 0000000..ef7cd82
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/atoz.html
@@ -0,0 +1,181 @@
+
+
+
+
+ GUI Layout Toolbox documentation: Index
+
+
+
+ Alphabetical index
+
+ A -
+ B -
+ C -
+ D -
+ E -
+ F -
+ G -
+ H -
+ I -
+ J -
+ K -
+ L -
+ M
+
+ N -
+ O -
+ P -
+ Q -
+ R -
+ S -
+ T -
+ U -
+ V -
+ W -
+ X -
+ Y -
+ Z
+
+
+
+
+ © 2017 The MathWorks Inc
+ Terms of Use
+ Patents
+ Trademarks
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/compatibility.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/compatibility.html
new file mode 100644
index 0000000..4bd600f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/compatibility.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserCreateInterface.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserCreateInterface.html
new file mode 100644
index 0000000..735ccd9
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserCreateInterface.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserOnListSelection.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserOnListSelection.html
new file mode 100644
index 0000000..b21cd6d
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserOnListSelection.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserRun.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserRun.html
new file mode 100644
index 0000000..8f8ee68
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserRun.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserScalability.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserScalability.html
new file mode 100644
index 0000000..aa267c5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserScalability.html
@@ -0,0 +1 @@
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserStructure.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserStructure.html
new file mode 100644
index 0000000..893c5dc
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserStructure.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserUpdateInterface.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserUpdateInterface.html
new file mode 100644
index 0000000..036fb84
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/demoBrowserUpdateInterface.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/doc.css b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/doc.css
new file mode 100644
index 0000000..8a52a82
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/doc.css
@@ -0,0 +1,95 @@
+ H4 { color: rgb(153,0,0);
+ font-family: Arial,Helvetica,sans-serif;
+ font-weight: bold;
+ font-size: smallnormal;
+ }
+
+ H3 { color: rgb(153,0,0);
+ font-family: Arial,Helvetica,sans-serif;
+ font-weight: bold;
+ font-size: large;
+ }
+
+ H2 { color: rgb(153,0,0);
+ font-weight: bold;
+ font-size: x-large;
+ font-family: Arial,Helvetica,sans-serif;
+ }
+
+ H1 { color: rgb(10,0,0);
+ font-weight: bold;
+ font-size: xx-large;
+ font-family: Arial,Helvetica,sans-serif;
+ }
+
+ P { font-weight: normal;
+ font-style: normal;
+ color: rgb(0, 0, 32);
+ font-family: Arial,Helvetica,sans-serif;
+ text-decoration: none;
+ }
+
+ LI { font-weight: normal;
+ font-style: normal;
+ color: rgb(0, 0, 32);
+ font-family: Arial,Helvetica,sans-serif;
+ text-decoration: none;
+ }
+
+ A { font-weight: normal;
+ font-style: normal;
+ color: rgb(0,0,180, 0, 0);
+ font-family: Arial,Helvetica,sans-serif;
+ text-decoration: none;
+ }
+
+ CODE { font-family: Courier New,Courier,monospace;
+ color: #000044;
+ font-size: -1;
+ }
+CODE.FUNCTION {
+ color: #0000EE;
+ font-weight: bold;
+}
+CODE.INARG {
+ color: #008800;
+ font-weight: bold;
+}
+CODE.OUTARG {
+ color: #880000;
+ font-weight: bold;
+ }
+CODE.COMMENT {
+ color: #008800;
+}
+CODE.STRING {
+ color: #DD00FF;
+}
+
+TABLE.PROPERTYTABLE {
+ border-width: 3;
+ border-style: inset;
+ border-color: #777777;
+ cellpadding: 4;
+ cellspacing: 0;
+}
+TH.PROPERTYTABLE {
+ font-weight: bold;
+ color: #000000;
+ border-width: 2;
+ border-style: inset;
+ background-color: #b2b2b2;
+}
+TD.PROPERTYTABLE {
+ font-weight: normal;
+ color: #000000;
+ border-width: 2;
+ border-style: inset;
+ background-color: #f2f2f2;
+}
+
+PRE { font-family: Courier New,Courier,monospace;
+ color: #000044;
+ font-size: -1;
+}
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/frames.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/frames.html
new file mode 100644
index 0000000..3b236e2
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/frames.html
@@ -0,0 +1,12 @@
+
+
+
+ GUI Layout Documentation
+
+
+
+
+
+
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpindex.xml b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpindex.xml
new file mode 100644
index 0000000..8d82852
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpindex.xml
@@ -0,0 +1,118 @@
+
+
+
+
+A complete example
+About
+Acknowledgements
+Advanced maneuvers with panels
+Application design
+Application structure
+axes
+Axes inside layouts
+Box
+ uix.HBox (Function reference: 2.1)
+ uix.VBox (Function reference: 2.2)
+ uix.HBoxFlex (Function reference: 2.3)
+ uix.VBoxFlex (Function reference: 2.4)
+
+Boxes
+BoxPanel
+Button box
+ uix.HButtonBox (Function reference: 2.5)
+ uix.VButtonBox (Function reference: 2.6)
+
+Callbacks
+CardPanel
+Colorbars and legends
+Compatibility considerations
+Compiler
+Context help
+Controlling visibility
+createInterface
+Deploying GUIs using the MATLAB Compiler
+Dock and undock
+Draggable dividers
+ uix.HBoxFlex (Function reference: 2.3)
+ uix.VBoxFlex (Function reference: 2.4)
+ uix.GridFlex (Function reference: 3.2)
+
+Empty
+Examples
+Flexible layout
+ uix.HBoxFlex (Function reference: 2.3)
+ uix.VBoxFlex (Function reference: 2.4)
+
+Folder
+Function reference
+Getting Started
+Grid
+GridFlex
+Grids
+GUIDE
+HBox
+HBoxFlex
+HButtonBox
+Help
+Horizontal button layout
+Horizontal layout
+ uix.HBox (Function reference: 2.1)
+ uix.HBoxFlex (Function reference: 2.3)
+
+Installation
+Installation folder
+Layout basics
+Layout hierarchies
+layoutRoot
+MATLAB Compiler
+Minimize and maximize
+Minimum sizes
+onListSelection
+Other functions
+Panel
+Panels
+Position vs OuterPosition
+Positioning axes
+Release notes
+Root
+Running it
+Scalability
+ScrollingPanel
+Sizes and units
+Support
+TabPanel
+Tracking
+Types of layout
+uix.BoxPanel
+uix.CardPanel
+uix.Empty
+uix.Grid
+uix.GridFlex
+uix.HBox
+uix.HBoxFlex
+uix.HButtonBox
+uix.Panel
+uix.ScrollingPanel
+uix.TabPanel
+uix.tracking
+uix.VBox
+uix.VBoxFlex
+uix.VButtonBox
+Understanding layouts
+Undock
+Uninstall
+updateInterface
+User guide
+Using layouts inside GUIDE GUIs
+VBox
+VBoxFlex
+VButtonBox
+Vertical button layout
+Vertical layout
+ uix.VBox (Function reference: 2.2)
+ uix.VBoxFlex (Function reference: 2.4)
+
+Visible example
+What is GUI Layout Toolbox?
+Why use layouts?
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.cfe b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.cfe
new file mode 100644
index 0000000..b0d78a1
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.cfe differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.cfs b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.cfs
new file mode 100644
index 0000000..9c7c92d
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.cfs differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.si b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.si
new file mode 100644
index 0000000..ada183a
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/_0.si differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/segments.gen b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/segments.gen
new file mode 100644
index 0000000..63a7ec9
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/segments.gen differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/segments_1 b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/segments_1
new file mode 100644
index 0000000..da81286
Binary files /dev/null and b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helpsearch-v3/segments_1 differ
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helptoc.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helptoc.html
new file mode 100644
index 0000000..2e1b12f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helptoc.html
@@ -0,0 +1,37 @@
+
+
+
+ Table of Contents
+
+
+
+
+ GUI Layout
+
+ Getting Started
+ 1. What is GUI Layout Toolbox?
+ 2. Compatibility considerations
+ 3. Release notes
+ 4. Installation
+ 5. Support
+ 6. Acknowledgements
+
+
+ Examples
+
+
+ User guide
+ 1. Understanding layouts
+ 2. Positioning axes
+ 3. Controlling visibility
+ 4. Advanced maneuvers with panels
+ 5. Using layouts inside GUIDE GUIs
+ 6. Deploying GUIs using the MATLAB Compiler
+ 7. A complete example
+
+
+ Function reference
+
+ Index
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helptoc.xml b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helptoc.xml
new file mode 100644
index 0000000..1d3398e
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/helptoc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ GUI Layout
+ Getting Started1. What is GUI Layout Toolbox? 2. Compatibility considerations 3. Release notes 4. Installation 5. Support 6. Acknowledgements
+ Examples
+ User guide1. Understanding layouts1.1. Layout basics 1.2. Types of layout 1.3. Sizes and units 1.4. Layout hierarchies 1.5. Why use layouts? 2. Positioning axes2.1. Position vs OuterPosition 2.2. Axes inside layouts 2.3. Colorbars and legends 3. Controlling visibility3.1. Visible example 4. Advanced maneuvers with panels4.1. Context help 4.2. Minimize and maximize 4.3. Dock and undock 5. Using layouts inside GUIDE GUIs 6. Deploying GUIs using the MATLAB Compiler 7. A complete example7.1. Application structure 7.2. createInterface 7.3. updateInterface 7.4. onListSelection 7.5. Running it 7.6. Scalability
+ Function reference1. Panels1.1. uix.Panel 1.2. uix.CardPanel 1.3. uix.BoxPanel 1.4. uix.TabPanel 1.5. uix.ScrollingPanel 2. Boxes2.1. uix.HBox 2.2. uix.VBox 2.3. uix.HBoxFlex 2.4. uix.VBoxFlex 2.5. uix.HButtonBox 2.6. uix.VButtonBox 3. Grids3.1. uix.Grid 3.2. uix.GridFlex 4. Other functions4.1. uix.Empty 4.2. uix.tracking 4.3. layoutRoot
+ Index
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/index.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/index.html
new file mode 100644
index 0000000..8cd9683
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/index.html
@@ -0,0 +1,59 @@
+
+
+
+ GUI Layout Toolbox documentation
+
+
+
+
+
+
+
+
+ © 2017 The MathWorks Ltd
+ Terms of Use
+ Patents
+ Trademarks
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/info.xml b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/info.xml
new file mode 100644
index 0000000..ef78de7
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/info.xml
@@ -0,0 +1,11 @@
+
+
+
+
+14
+GUI Layout
+toolbox
+$toolbox/matlab/icons/bookicon.gif
+../layoutdoc
+
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/layoutDocRoot.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/layoutDocRoot.m
new file mode 100644
index 0000000..3ae3cc1
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/layoutDocRoot.m
@@ -0,0 +1,12 @@
+function folder = layoutDocRoot()
+%layoutDocRoot Return the location of the GUI Layout Toolbox documentation.
+%
+% folder = layoutDocRoot()
+%
+% See also: layoutRoot
+
+% Copyright 2014 The MathWorks, Inc.
+
+folder = fileparts( mfilename( 'fullpath' ) );
+
+end % layoutDocRoot
\ No newline at end of file
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/layoutRoot.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/layoutRoot.html
new file mode 100644
index 0000000..d4d7d4f
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/layoutRoot.html
@@ -0,0 +1 @@
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/releasenotes.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/releasenotes.html
new file mode 100644
index 0000000..03a81bd
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/releasenotes.html
@@ -0,0 +1 @@
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/termsOfUse.m b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/termsOfUse.m
new file mode 100644
index 0000000..386c744
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/termsOfUse.m
@@ -0,0 +1,8 @@
+function termsOfUse
+ if verLessThan('matlab','8.5')
+ helpview([matlabroot,'/license.txt'])
+ else
+ helpview([matlabroot,'/license_agreement.txt'])
+ end
+end
+
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.BoxPanel.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.BoxPanel.html
new file mode 100644
index 0000000..c4083d8
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.BoxPanel.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.CardPanel.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.CardPanel.html
new file mode 100644
index 0000000..d19809b
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.CardPanel.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Empty.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Empty.html
new file mode 100644
index 0000000..0d6f382
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Empty.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Grid.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Grid.html
new file mode 100644
index 0000000..2c92912
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Grid.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.GridFlex.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.GridFlex.html
new file mode 100644
index 0000000..43a2b15
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.GridFlex.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HBox.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HBox.html
new file mode 100644
index 0000000..ea3c133
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HBox.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HBoxFlex.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HBoxFlex.html
new file mode 100644
index 0000000..b35fc1b
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HBoxFlex.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HButtonBox.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HButtonBox.html
new file mode 100644
index 0000000..2979fc5
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.HButtonBox.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Panel.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Panel.html
new file mode 100644
index 0000000..4e88b49
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.Panel.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.ScrollingPanel.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.ScrollingPanel.html
new file mode 100644
index 0000000..f38fdba
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.ScrollingPanel.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.TabPanel.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.TabPanel.html
new file mode 100644
index 0000000..ba04145
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.TabPanel.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VBox.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VBox.html
new file mode 100644
index 0000000..c22b1ce
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VBox.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VBoxFlex.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VBoxFlex.html
new file mode 100644
index 0000000..eecfb87
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VBoxFlex.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VButtonBox.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VButtonBox.html
new file mode 100644
index 0000000..f694b56
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.VButtonBox.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.tracking.html b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.tracking.html
new file mode 100644
index 0000000..d83a06d
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/layoutdoc/uix.tracking.html
@@ -0,0 +1 @@
+ >
diff --git a/widgets/GUI Layout Toolbox 2.3.1/license.txt b/widgets/GUI Layout Toolbox 2.3.1/license.txt
new file mode 100644
index 0000000..4e88af6
--- /dev/null
+++ b/widgets/GUI Layout Toolbox 2.3.1/license.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2017, The MathWorks, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * 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.
+ * In all cases, the software is, and all modifications and derivatives
+ of the software shall be, licensed to you solely for use in conjunction
+ with MathWorks products and service offerings.
+
+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 OWNER 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.