322 lines
9.2 KiB
Matlab
322 lines
9.2 KiB
Matlab
classdef EDFMGuideComponent < handle
|
|
%EDFMGUIDECOMPONENT Compatibility adapter from GUIDE/uicontrol to App Designer-style properties.
|
|
|
|
properties (Constant, Access = private)
|
|
NumericFieldType = 'numeric'
|
|
end
|
|
|
|
properties (SetAccess = private)
|
|
Handle
|
|
end
|
|
|
|
properties (Dependent)
|
|
Value
|
|
Items
|
|
Text
|
|
Position
|
|
Visible
|
|
Enable
|
|
Editable
|
|
Data
|
|
ColumnName
|
|
ColumnWidth
|
|
RowName
|
|
ColumnEditable
|
|
ValueChangedFcn
|
|
ButtonPushedFcn
|
|
CellSelectionCallback
|
|
Limits
|
|
MajorTicks
|
|
MinorTicks
|
|
UserData
|
|
end
|
|
|
|
properties (Access = private)
|
|
StoredMajorTicks = []
|
|
StoredMinorTicks = []
|
|
IsNumericEditField logical = false
|
|
end
|
|
|
|
methods
|
|
function obj = EDFMGuideComponent(handleObj)
|
|
obj.Handle = handleObj;
|
|
obj.IsNumericEditField = obj.detectNumericEditField();
|
|
end
|
|
|
|
function value = get.Value(obj)
|
|
if isa(obj.Handle, 'matlab.ui.control.Table')
|
|
value = get(obj.Handle, 'Data');
|
|
return;
|
|
end
|
|
style = obj.getStyle();
|
|
switch style
|
|
case 'popupmenu'
|
|
items = obj.Items;
|
|
idx = get(obj.Handle, 'Value');
|
|
if isempty(items)
|
|
value = '';
|
|
else
|
|
idx = min(max(1, idx), numel(items));
|
|
value = items{idx};
|
|
end
|
|
case 'slider'
|
|
value = get(obj.Handle, 'Value');
|
|
case 'edit'
|
|
if obj.isNumericEditField()
|
|
value = str2double(string(get(obj.Handle, 'String')));
|
|
if isnan(value)
|
|
value = NaN;
|
|
end
|
|
else
|
|
raw = get(obj.Handle, 'String');
|
|
if ischar(raw)
|
|
value = cellstr(raw);
|
|
else
|
|
value = raw;
|
|
end
|
|
end
|
|
otherwise
|
|
value = get(obj.Handle, 'Value');
|
|
end
|
|
end
|
|
|
|
function set.Value(obj, value)
|
|
if isa(obj.Handle, 'matlab.ui.control.Table')
|
|
set(obj.Handle, 'Data', value);
|
|
return;
|
|
end
|
|
style = obj.getStyle();
|
|
switch style
|
|
case 'popupmenu'
|
|
items = obj.Items;
|
|
textValue = char(string(value));
|
|
idx = find(strcmp(items, textValue), 1);
|
|
if isempty(idx)
|
|
items{end + 1} = textValue;
|
|
obj.Items = items;
|
|
idx = numel(items);
|
|
end
|
|
set(obj.Handle, 'Value', idx);
|
|
case 'slider'
|
|
set(obj.Handle, 'Value', double(value));
|
|
case 'edit'
|
|
if obj.isNumericEditField()
|
|
if isempty(value)
|
|
set(obj.Handle, 'String', '');
|
|
else
|
|
set(obj.Handle, 'String', num2str(double(value)));
|
|
end
|
|
else
|
|
if isstring(value)
|
|
value = cellstr(value);
|
|
end
|
|
set(obj.Handle, 'String', value);
|
|
end
|
|
otherwise
|
|
set(obj.Handle, 'Value', value);
|
|
end
|
|
end
|
|
|
|
function value = get.Items(obj)
|
|
raw = get(obj.Handle, 'String');
|
|
if ischar(raw)
|
|
value = cellstr(raw);
|
|
else
|
|
value = raw;
|
|
end
|
|
end
|
|
|
|
function set.Items(obj, value)
|
|
if isstring(value)
|
|
value = cellstr(value);
|
|
end
|
|
if isempty(value)
|
|
value = {''};
|
|
end
|
|
set(obj.Handle, 'String', value, 'Value', min(get(obj.Handle, 'Value'), numel(value)));
|
|
end
|
|
|
|
function value = get.Text(obj)
|
|
value = get(obj.Handle, 'String');
|
|
end
|
|
|
|
function set.Text(obj, value)
|
|
set(obj.Handle, 'String', char(string(value)));
|
|
end
|
|
|
|
function value = get.Position(obj)
|
|
value = get(obj.Handle, 'Position');
|
|
end
|
|
|
|
function set.Position(obj, value)
|
|
set(obj.Handle, 'Position', value);
|
|
end
|
|
|
|
function value = get.Visible(obj)
|
|
value = get(obj.Handle, 'Visible');
|
|
end
|
|
|
|
function set.Visible(obj, value)
|
|
set(obj.Handle, 'Visible', obj.onOff(value));
|
|
end
|
|
|
|
function value = get.Enable(obj)
|
|
value = get(obj.Handle, 'Enable');
|
|
end
|
|
|
|
function set.Enable(obj, value)
|
|
set(obj.Handle, 'Enable', obj.onOff(value));
|
|
end
|
|
|
|
function value = get.Editable(obj)
|
|
if isprop(obj.Handle, 'Editable')
|
|
value = get(obj.Handle, 'Editable');
|
|
else
|
|
value = strcmp(get(obj.Handle, 'Enable'), 'on');
|
|
end
|
|
end
|
|
|
|
function set.Editable(obj, value)
|
|
if isprop(obj.Handle, 'Editable')
|
|
set(obj.Handle, 'Editable', obj.onOff(value));
|
|
else
|
|
set(obj.Handle, 'Enable', obj.onOff(value));
|
|
end
|
|
end
|
|
|
|
function value = get.Data(obj)
|
|
value = get(obj.Handle, 'Data');
|
|
end
|
|
|
|
function set.Data(obj, value)
|
|
set(obj.Handle, 'Data', value);
|
|
end
|
|
|
|
function value = get.ColumnName(obj)
|
|
value = get(obj.Handle, 'ColumnName');
|
|
end
|
|
|
|
function set.ColumnName(obj, value)
|
|
set(obj.Handle, 'ColumnName', value);
|
|
end
|
|
|
|
function value = get.ColumnWidth(obj)
|
|
value = get(obj.Handle, 'ColumnWidth');
|
|
end
|
|
|
|
function set.ColumnWidth(obj, value)
|
|
set(obj.Handle, 'ColumnWidth', value);
|
|
end
|
|
|
|
function value = get.RowName(obj)
|
|
value = get(obj.Handle, 'RowName');
|
|
end
|
|
|
|
function set.RowName(obj, value)
|
|
set(obj.Handle, 'RowName', value);
|
|
end
|
|
|
|
function value = get.ColumnEditable(obj)
|
|
value = get(obj.Handle, 'ColumnEditable');
|
|
end
|
|
|
|
function set.ColumnEditable(obj, value)
|
|
set(obj.Handle, 'ColumnEditable', value);
|
|
end
|
|
|
|
function value = get.ValueChangedFcn(obj)
|
|
value = get(obj.Handle, 'Callback');
|
|
end
|
|
|
|
function set.ValueChangedFcn(obj, value)
|
|
set(obj.Handle, 'Callback', value);
|
|
end
|
|
|
|
function value = get.ButtonPushedFcn(obj)
|
|
value = get(obj.Handle, 'Callback');
|
|
end
|
|
|
|
function set.ButtonPushedFcn(obj, value)
|
|
set(obj.Handle, 'Callback', value);
|
|
end
|
|
|
|
function value = get.CellSelectionCallback(obj)
|
|
value = get(obj.Handle, 'CellSelectionCallback');
|
|
end
|
|
|
|
function set.CellSelectionCallback(obj, value)
|
|
set(obj.Handle, 'CellSelectionCallback', value);
|
|
end
|
|
|
|
function value = get.Limits(obj)
|
|
value = [get(obj.Handle, 'Min'), get(obj.Handle, 'Max')];
|
|
end
|
|
|
|
function set.Limits(obj, value)
|
|
set(obj.Handle, 'Min', value(1), 'Max', value(2));
|
|
end
|
|
|
|
function value = get.UserData(obj)
|
|
value = get(obj.Handle, 'UserData');
|
|
end
|
|
|
|
function set.UserData(obj, value)
|
|
set(obj.Handle, 'UserData', value);
|
|
end
|
|
|
|
function value = get.MajorTicks(obj)
|
|
value = obj.StoredMajorTicks;
|
|
end
|
|
|
|
function set.MajorTicks(obj, value)
|
|
obj.StoredMajorTicks = value;
|
|
end
|
|
|
|
function value = get.MinorTicks(obj)
|
|
value = obj.StoredMinorTicks;
|
|
end
|
|
|
|
function set.MinorTicks(obj, value)
|
|
obj.StoredMinorTicks = value;
|
|
end
|
|
end
|
|
|
|
methods (Access = private)
|
|
function style = getStyle(obj)
|
|
if isprop(obj.Handle, 'Style')
|
|
style = get(obj.Handle, 'Style');
|
|
else
|
|
style = '';
|
|
end
|
|
end
|
|
|
|
function tf = isNumericEditField(obj)
|
|
tf = obj.IsNumericEditField;
|
|
end
|
|
|
|
function tf = detectNumericEditField(obj)
|
|
userData = get(obj.Handle, 'UserData');
|
|
tf = isstruct(userData) && isfield(userData, 'Type') && strcmp(userData.Type, obj.NumericFieldType);
|
|
end
|
|
end
|
|
|
|
methods (Static, Access = private)
|
|
function value = onOff(input)
|
|
if islogical(input)
|
|
if input
|
|
value = 'on';
|
|
else
|
|
value = 'off';
|
|
end
|
|
else
|
|
value = char(string(input));
|
|
if strcmpi(value, 'true')
|
|
value = 'on';
|
|
elseif strcmpi(value, 'false')
|
|
value = 'off';
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|