propertiesGUI

PURPOSE ^

propertiesGUI displays formatted editable list of properties

SYNOPSIS ^

function [hPropsPane,parameters] = propertiesGUI(hParent, parameters)

DESCRIPTION ^

 propertiesGUI displays formatted editable list of properties

 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, IPAddress, 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 or object 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/

 Change log:
    2013-04-23: Fixed case of empty ([]) data, handled class objects & numeric/cell arrays, fixed error reported by Andrew Ness
    2013-01-26: Updated help section
    2012-11-07: Minor fix for file/folder properties
    2012-11-07: Accept any object having properties/fields as input parameter; support multi-level properties
    2012-10-31: First version posted on <a href="http://www.mathworks.com/matlabcentral/fileexchange/authors/27420">MathWorks File Exchange</a>

 See also:
    inspect, uiinspect (#17935 on the MathWorks File Exchange)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:
Generated on Sun 13-Oct-2013 13:32:39 by m2html © 2005