Code covered by the BSD License  

Highlights from
propertiesGUI - display properties in an editable context-aware table

5.0

5.0 | 3 ratings Rate this file 32 Downloads (last 30 days) File Size: 11.1 KB File ID: #38864
image thumbnail

propertiesGUI - display properties in an editable context-aware table

by

 

31 Oct 2012 (Updated )

propertiesGUI processes and displays a list of data properties in a context-aware GUI table

| Watch this File

File Information
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,
     font, struct and 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. Improve the editor for time, numeric and cell arrays
     2. Enable more control over appearance and functionality via
        propertiesGUI's input parameters
     3. Add new cell editors/renderers: slider, point, rectangle (=position), ...
 
  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/

Acknowledgements

Property Grid Using Jide Implementation and Uiinspect Display Methods Properties Callbacks Of An Object inspired this file.

Required Products MATLAB
MATLAB release MATLAB 7.11 (R2010b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (9)
09 Apr 2014 Yair Altman

Sebastian - you can modify the propUpdatedCallback() function in propertiesGUI.m and where it is used within the code. It's pretty straight-forward.

03 Apr 2014 Sebastian Hölz

Hi Yair,

is it possible to trigger a callback, if one of the items in the generated list is selected? I have a potentially complicated tree structure generated from a collection of graphical objects. As the user selects an item in the list, I would like to high-light the according graphics object.

Sebastian

07 Feb 2013 Andrew Ness

I just commented out that statement and things have been working.

05 Feb 2013 Andrew Ness

This looks like a nice utility. Unfortunately I am experiencing an error in R2012b, even when running just the demo multiple times. If I execute it twice, selecting cancel each time, there isn't a problem, however on the third try I receive this error:

>> propertiesGUI
>> propertiesGUI
>> propertiesGUI
Dot name reference on non-scalar structure.

Error in propertiesGUI (line 224)
pane.setBorderColor(pane.getBackground);

19 Nov 2012 Yair Altman

@Izhar - you can easily modify the preparePropsList() sub-function, specifically lines #303-314 to handle a non-scalar numeric vector

19 Nov 2012 izhar karbat

Hi Yair,
1) +1.

2) one of my fields contains an array of float values. only the first value is displayed in the table. is there any obvious workaround ?

03 Nov 2012 Yair Altman

@Julien -

1. MATLAB uses JIDE internaly in numerous places, including uitable. You can use them freely, as part of the MATLAB license. For this reason I do not think there is any issue. But if you insist then you could ask MathWorks about it.

2. You can process objects using the standard struct() method, as follows:

params = struct(myClassObject);
[hPropsPane,params] = propertiesGUI(hParent, params);

03 Nov 2012 Julien

Very nice utility, thanks !
Do you know the terms of JIDE's license about using such components in deployed applications? Or maybe should I ask Mathworks directly?
Moreover, I have a suggestion : it would be nice to support matlab's classes in addition to structures. Do you plan to expand this?

01 Nov 2012 Cristiano  
Updates
07 Nov 2012

Accept any object having properties/fields as input parameter; support multi-level properties

14 Jan 2013

fixes for file/folder/date/color properties

23 Apr 2013

Fixed case of empty ([]) data, handled class objects & numeric/cell arrays, fixed error reported by Andrew Ness

24 Dec 2013

Fixes for R2013b and R2014a; added support for Font property

Contact us