Is this a bug?

Richard Gaskin ambassador at fourthworld.com
Mon Jan 22 15:22:59 EST 2007


Chipp Walters wrote:

> Mark, your example also demonstrates the power of same named instances of
> object. I guess it all boils down to each of us trying our best to create
> reusable grouped components, each with the same codebase. A most difficult
> task.

In the absence of parentScripts (a shared library that is specific to 
assigned objects) I have yet to find an ideal solution, but here's a 
convention Ken and I tend to use for custom controls and other reusable 
groups, with three parts:

- a prefab template object
- an inspector for copying it and manipulating its properties
- a library to drive it

I have a table object that best exemplifies this arrangement.  The 
library stack also contains a group which is coped by the inspector onto 
the card to create a new one.

The template object has almost no code; where needed it has stub 
handlers that just make calls to the library.  For example, the column 
resizing controls simply contain mousedown, mouseMove, mouseUp, and 
mouseRelease handlers which call _lib4wTableHeaderMouseDown, 
_lib4wTableHeaderMouseMove, _lib4wTableHeaderMouseUp, and 
_lib4wTableHeaderMouseRelease messages, respectively.

Note the preceding underscore.  That distinguishes handlers in the 
library which are used internally only, as opposed to those which are 
part of the API (when we get truly private handlers that convention can 
go away).

Most of the object's behaviors are established as property settings. 
For example, setting the ufwTableData of the group puts the specified 
columnar data into the table; setting the ufwTableHeaderInfo of the 
control sets up the column heading labels and widths; setting the 
ufwTableSortColumn of the group establishes which column the data is 
currently sorted by, and colors that heading differently from the others 
as per the OS HIG.

These property settings are handled in getProp/setProp handlers in the 
library.  They keep track of the target object, so any number of tables 
can be used in a layout without conflict.


Having as much code as possible in the library means I never need to 
update any controls to enhance functionality.

Having a template object means all instances get implemented 
consistently with reasonable default settings.

Having an inspector means I get to install tables and modify their 
settings quickly without having to write a line of code.


If I get some time I'll publish my table widget, but with my current 
workload it's hard to say exactly when that'll be....

-- 
  Richard Gaskin
  Fourth World Media Corporation
  ___________________________________________________________
  Ambassador at FourthWorld.com       http://www.FourthWorld.com




More information about the use-livecode mailing list