in reply to Cross-platform GUI for UNIX based scripts
«Any ideas are welcome»
OK, if so - and you want that your GUI looks really cool, please take a look at Flex as well as ActionScript.
IMHO this stuff has some benefits:
- Very easy handling of that asynchronous HTTP stuff
- Nice data binding concept
- Each class you create can have two incarnations: (M)XML and ActionScript code. This goes far beyond that "MarkUp for the Visual Things/Code For The Logic" approach. You can very easily do something similar to Code-Behind.
- If you do this and then think about doing some "micro MVC" stuff, things become interesting. Do the basic layout in MXML. Write your classes in ActionScript, based on <s:Group>. E.g. one containing a button, another a data grid for displaying your data and one with some of the XML list objects of Flex for the data and a http service for the fetch as a kind of delegate. A group doesn't listen for any events by default. edit: Bullshit, forgot my own cheated stuff ;-(
So overwrite the built-in event dispatcher class see example below, define your custom events , build the listeners and the corresponding handlers, instantiate your AS classes as MXML and the fun begins...
(Simplified, i know...)
Note that addEventListener only takes functions as listeners, not
Also remember that class methods are bound to their instances so w
+hen used as
listeners, 'this' in the event call still references the orginal c
instance no matter what object dispatched the event.
By extending the EventDispatcher class or any class that inherits
it like Sprite (all DisplayObjects are inherently EventDispatchers
your class gains access to the EventDispatcher methods.
Then, other instances (or the class instance itself) can
add methods to instances of that class using addEventListener
and in turn they can call those events through dispatchEvent.
If there is some reason your class cannot inherit from the EventDi
class for example, if its already inheriting from another class w
does not inherit from EventDispatcher), then you can use the Event
constructor to intialize your class instance with the methods of E
via aggregation (composition).
Just make sure you implement the IEventDispatcher interface (flash
public class MyDispatcher implements IEventDispatcher
private var eventDispatcher:EventDispatcher;
public function MyDispatcher()
trace("new " + getQualifiedClassName(this));
public function addEventListener(type:String, listener:Functio
+n, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean
eventDispatcher.addEventListener(type, listener, useCaptur
+e, priority, useWeakReference);
public function dispatchEvent(event:Event):Boolean
public function hasEventListener(type:String):Boolean
public function removeEventListener(type:String, listener:Func
eventDispatcher.removeEventListener(type, listener, useCap
public function willTrigger(type:String):Boolean
public final class MyEventDispatcher extends MyDispatcher
private static var _instance:MyEventDispatcher;
public function MyEventDispatcher(dummy:Dummy):void
if (dummy === null)
throw new Error("Call CustomEventDispatcher as CustomE
public static function get instance():MyEventDispatcher
if (_instance === null)
_instance=new MyEventDispatcher(new Dummy());
trace("new instance " + getQualifiedClassName(_instanc
trace("get instance " + getQualifiedClassName(_instance));
internal class Dummy
The price you have to pay for this: it's Shockwave/Flash :-(
OK, nobody is perfect.
You can do this stuff using vi or emacs or better use FlashBuilder, a tool based on Eclipse. Some free GUIs are around - i didn' use them yet.
Best regards, Karl
«The Crux of the Biscuit is the Apostrophe»