| Description |
Syntax:
[hPropsPane,parameters] = propertiesGUI(hParent, parameters)
Description:
propertiesGUI processes a list of data properties and displays
them in a GUI table, where each parameter value has a unique
associated editor.
propertiesGUI by itself, with no input parameters, displays a demo
By default, propertiesGUI identifies and processes the following
field types: signed, unsigned, float, file, folder, text or string, color,
IP Address, password, date, boolean, cell-array, numeric array,
class object.
Inputs:
hParent - optional handle of a parent GUI container (figure/uipanel
/uitab) in which the properties table will appear.
If missing or empty or 0, the table will be shown in a
new modal dialog window; otherwise it will be embedded
in the parent container.
parameters - struct with data fields. The fields are processed
separately to determine their corresponding cell editor.
If parameters is not specified, then the global test_data
will be used. If test_data is also empty, then a demo of
several different data types will be used.
Outputs:
hPropsPane - handle of the properties panel widget, which can be
customized to display field descriptions, toolbar, etc.
parameters - the resulting (possibly-updated) parameters struct.
Naturally, this is only relevant in case of a modal dialog.
(global test_data) - this global variable is updated internally when
the <OK> button is clicked. It is meant to enable easy data
passing between the properties GUI and other application
component. Using global vars is generally discouraged as
bad programming, but it simplifies component interaction.
Customization:
This utility is meant to be used either as stand-alone, or as a
template for customization. For example, you can attach a unique
description to each property that will be shown in an internal
sub-panel: see the customizePropertyPane() and preparePropsList()
sub-functions.
When passing the properties in an input parameters struct, the
utility automatically inspects each struct field and assigns a
corresponding cell-editor with no description and a field label
that reflects the field name. The properties are automatically
set as modifiable (editable) and assigned a default callback
function (propUpdatedCallback() sub-function).
See the demoParameters() sub-function for some examples.
You can have specific control over each property's description,
label, editability, cell-editor and callback function. See the
preparePropsList() sub-functions for some examples. You can add
additional cell-editors/renderers in the newProperty() sub-function.
You can place specific control over the acceptable property values
by entering custom code into the checkProp() sub-function.
Future development:
1. Fix the renderer/editor for numeric and cell arrays
2. Enable more control over appearance and functionality via
propertiesGUI's input parameters
3. Add additional built-in cell editors/renderers: time, slider,
point, rectangle (=position), font, ...
Example:
propertiesGUI; % displays the demo
params.name = 'Yair';
params.age = uint8(41);
params.folder = pwd;
params.date = now;
params.size.width = 10;
params.size.height = 20;
[hPropsPane, params] = propertiesGUI(params);
Bugs and suggestions:
Please send to Yair Altman (altmany at gmail dot com)
Warning:
This code heavily relies on undocumented and unsupported Matlab
functionality. It works on Matlab 7+, but use at your own risk!
A technical description of the implementation can be found at:
http://undocumentedmatlab.com/blog/propertiesGUI/
http://undocumentedmatlab.com/blog/jide-property-grids/
http://undocumentedmatlab.com/blog/advanced-jide-property-grids/ |