Customize System Block Dialog Box Programmatically
You can customize the dialog box for a MATLAB System block by adding properties and methods in the corresponding System object™. You can add tabs, organized properties into groups and sections, add block descriptions, simulation type control, and add custom buttons.
Note
From R2022b, use the Mask Editor to design a MATLAB System dialog box. You can
also migrate existing dialog box customizations to the Mask Editor. This capability
eliminates the need to develop or maintain the
getPropertyGroupsImpl
method in a System object file. For more information, see Customize MATLAB System Icon and Dialog Box Using Mask Editor.
Define Block Dialog Tabs, Sections, and Order of Properties
This example customizes the block dialog box for the MultipleGroupsWithTabs
MATLAB System block by specifying property display names and modifying the getPropertyGroupImpl
method.
Change Property Label
To change the property label that appears on the dialog box, add comments before each property in this format %PropertyName Block Dialog Label
with no space between the comment and the property name. For example, to display the StartValue
property as Start Value, specify:
%StartValue Start Value
StartValue = 0
The MultipleGroupsWithTabs
System object™ in this example relabels each property for display in the MATLAB System block dialog.
Organize Dialog Box
The MutlitpleGroupsWithTabs
System object class defines a getPropertyGroupsImpl
method. Inside the getPropertyGroupsImpl
method, this example defines two tabs (section groups) and three parameter groupings (sections).
classdef MultipleGroupsWithTabs < matlab.System % MultipleGroupsWithTabs Customize block dialog with multiple tabs and parameter groups. % Public, tunable properties properties %StartValue Start Value StartValue = 0 %EndValue End Value EndValue = 10 Threshold = 1 %BlockLimit Limit BlockLimit = 55 end % Public Nontunable properties(Nontunable) %IC1 First initial condition IC1 = 0 %IC2 Second initial condition IC2 = 10 %IC3 Third initial condition IC3 = 100 %UseThreshold Use threshold UseThreshold (1,1) logical = true end methods (Static, Access = protected) function groups = getPropertyGroupsImpl % Section to always display above any tabs. alwaysSection = matlab.system.display.Section(... 'Title','','PropertyList',{'BlockLimit'}); % Group with no sections initTab = matlab.system.display.SectionGroup(... 'Title','Initial conditions', ... 'PropertyList',{'IC1','IC2','IC3'}); % Section for the value parameters valueSection = matlab.system.display.Section(... 'Title','Value parameters',... 'PropertyList',{'StartValue','EndValue'}); % Section for the threshold parameters thresholdSection = matlab.system.display.Section(... 'Title','Threshold parameters',... 'PropertyList',{'Threshold','UseThreshold'}); % Group with two sections: the valueSection and thresholdSection sections mainTab = matlab.system.display.SectionGroup(... 'Title','Main', ... 'Sections',[valueSection,thresholdSection]); % Return an array with the group-less section, the group with % two sections, and the group with no sections. groups = [alwaysSection,mainTab,initTab]; end end end
Resulting Dialog Box
load_system('ShowSystemBlockDialog') open_system('ShowSystemBlockDialog/MATLAB System')
Define Property Sections
This example customizes the block dialog box for a MATLAB System block by specifying property display names and modifying the getPropertyGroupImpl
method. This customization is demonstrated with the System object™ AddPropertySections
.
Change Property Labels
To change the property label that appears on the dialog box, add comments before each property in this format %PropertyName Block Dialog Label
with no space between the percent sign and the property name. For example, to display the UseAlpha
property as Use alpha, specify:
%UseAlpha Use alpha
UseAlpha = 0
The AddPropertySections
System object included with this example relabels properties for display in the MATLAB System block dialog.
Organize Dialog Box
To organize the properties on the dialog box, the AddPropertySections
System object class defines a getPropertyGroupsImpl
method. Inside the getPropertyGroupsImpl
method, this example defines two sections, each with two properties.
classdef AddPropertySections < matlab.System % AddPropertySections Customized dialog with two parameter sections % Public, tunable properties properties %NumberOfShapes Number of shapes NumberOfShapes = 10 Alpha = 0.75 end % Public, nontunable properties properties(Nontunable) Coloring (1, 1) {mustBeMember(Coloring,["red","blue","green"])} = "red" %UseAlpha Use alpha UseAlpha (1,1) logical = false end methods (Static, Access = protected) function groups = getPropertyGroupsImpl % Section for the value parameters valueSection = matlab.system.display.Section(... 'Title','Shape parameters',... 'PropertyList',{'NumberOfShapes','Coloring'}); % Section for the threshold parameters shadingSection = matlab.system.display.Section(... 'Title','Shading parameters',... 'PropertyList',{'UseAlpha','Alpha'}); % Return an array with the two sections. groups = [valueSection, shadingSection]; end end end
Resulting Dialog Box
load_system('CustomSystemBlockDialog') open_system('CustomSystemBlockDialog/MATLAB System')
Add Header Description
Add a header panel to a MATLAB System block by
adding the getHeaderImpl
method to your System object.
Use getHeaderImpl
to specify a panel title and text for the
MyCounter
System object. If you do not specify the getHeaderImpl
, the block
does not display any title or text for the panel.
As for all Impl
methods, set the getHeaderImpl
method access to protected
because the method is only called
internally.
methods (Static, Access = protected) function header = getHeaderImpl header = matlab.system.display.Header('MyCounter',... 'Title','My Enhanced Counter'); end end
Control Simulation Type in MATLAB System Block
Specify a simulation type and whether the Simulate
using parameter appears on the Simulink®
MATLAB System block dialog box. The simulation options are
'Code generation'
and 'Interpreted
mode'
.
If you do not include the getSimulateUsingImpl
method in your
class definition file, the System object allows both simulation modes and defaults to 'Code
generation'
. If you do not include the
showSimulateUsingImpl
method, the Simulate
using parameter appears on the block dialog box.
You must set the getSimulateUsingImpl
and
showSimulateUsingImpl
methods to static
and
the access for these methods to protected
.
Use getSimulateUsingImpl
to specify that only interpreted
execution is allowed for the System object.
methods(Static,Access = protected) function simMode = getSimulateUsingImpl simMode = 'Interpreted execution'; end end
The resulting dialog box with the Simulate using parameter:
Add Custom Button to MATLAB System Block
Add a button to the MATLAB System block dialog box. This button opens a figure that plots a ramp function.
Use matlab.system.display.Action
to define the MATLAB® function or code associated with a button in the MATLAB
System block dialog box. The example also shows how to set button
options and use an actionData
object input to store a figure
handle. This part of the code example uses the same figure when the button is
clicked multiple times, rather than opening a new figure for each button
click.
methods(Static,Access = protected) function group = getPropertyGroupsImpl group = matlab.system.display.Section(mfilename('class')); group.Actions = matlab.system.display.Action(@(actionData,obj)... visualize(obj,actionData),'Label','Visualize'); end end methods function obj = ActionDemo(varargin) setProperties(obj,nargin,varargin{:}); end function visualize(obj,actionData) f = actionData.UserData; if isempty(f) || ~ishandle(f) f = figure; actionData.UserData = f; else figure(f); % Make figure current end d = 1:obj.RampLimit; plot(d); end end
Complete Class Definition File for Dialog Button
The resulting dialog box with the Visualize button:
See Also
getPropertyGroupsImpl
| matlab.system.display.Section
| matlab.system.display.SectionGroup
| getSimulateUsingImpl
| showSimulateUsingImpl
| getHeaderImpl
| matlab.system.display.Header