On Mar 19, 2008, at 8:25 AM, viktoras didziulis wrote:

I would like to define a class, an object (the both with their properties) and methods that are not a part of graphical user interface or Revolution engine...

Let's say I need an object "City" having properties: minLatitude, maxLatitude, minLongitude, maxLongitude, area, populationSize, growthRate, dateFounded, currentDate so it can be handled using specific handlers and functions (e.g. its methods). Or, well, it would be more correct to start with creation of a class "City" or "templateCity" and then use it to create new "city" objects (NewYork, Paris, etc...) that can be processed by their functions like "populationGrowth(Paris, start_year, end_year)" and so on...

The three approaches that I can imagine are somehow inter-tangled: (1) creating an object as a custom property set of a stack or (2) creating it as an array or (3) creating it as an invisible control with custom properties. But all these have their drawbacks.

Just some quick notes from methods I've tried. You probably won't find any consensus on this since Rev does not have an elegant way of extending the xtalk syntax to our own custom objects. Hopefully one day...

1) This could work but I have found it easier to work with individual objects. I just pass button references around to my "class" handlers. See point 3 notes.

2) This can be useful in some circumstances but it is easier to inspect the custom props of a button during debugging.

3) I prefer this approach. I create a stack that I use as a library. I then create "classes" using handler prefixes:

put city.getProp (pLongIDofButton, "growth rate") into theGrowthRate
city.setProp pLongIDofButton, "growth rate", "1"
put city.Serialize (pLongIDofButton) into theSerializedCity

Each handler takes a reference to a button whose uObjectProps custom property set represent the object properties. So calling city.getProp would return the uObjectProps["growth rate"] custom property for example. Calling city.setProp would set the uObjectProps["growth rate"] value after having performed integrity checks.

I create buttons on hidden stacks or just hide the button itself on a visible stack. Depends on my needs.

I prefer to define city.getProp/setProp handlers since I hate writing out city.getGrowthRate, city.setGrowthRate every time I want to add a new property.

I never use Revolution's getProp/setProp handlers when dealing with custom objects unless they are GUI elements. getProp/setProp fails to be called when messages are locked which is not very robust.

The (1) and (3) approach allows attaching handlers to custom properties and allows accessing object (e.g. a custom property set) properties using both an array notation (somehow an equivalent to an array-like behavior of objects in javascript) and in a way consistent with handling of properties in Rev e.g. "set the .. of .. to ..." or "get .. the .. of ...". Unfortunately (1) allows only a single object to be active and thus accessible. The (3) is a dirty one, because object is created using empty controls with their own additional properties and methods. The (2) looks promising, one can create a class, write a constructor function that would create new objects from the class, etc... But it lacks consistency with the existing OOP style in Rev - e.g. you can not get or set an element of an array using "get the <element/property> of <array/object>" or "set the <element/property> of <array/object> to <value>". Besides you can not use getProp or setProp handlers with array's elements.

Not being able to define our own objects that have the same elegant syntax that is native to Rev is the real drawback.

Did anyone try doing something like this kind of OOP in Rev? I would appreciate if you can share your thoughts, warnings, tricks and approaches :-). I am not looking for a complex C++ like style of OOP in Rev. Anything simpler like the OOP model of javascript would be OK. In general, I think, it would be nice if one could treat and access Revolution arrays as objects with custom properties, with all the getProp, setProp and templateObject stuff... Or is it possible somehow? If not, is this already posted to QC as an enhancement request - I would vote for it? Otherwise going to post it there myself...

Just some thoughts. I have tried a few different approaches myself and the above is what I have settled on for the time being.

Regards,

--
Trevor DeVore
Blue Mango Learning Systems
www.bluemangolearning.com    -    www.screensteps.com

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to