[Laszlo-dev] Fwd: proposed contextmenu API
Henry Minsky
henry.minsky at gmail.com
Tue Nov 29 17:58:26 PST 2005
Note, for now I punted on the LZX'ified API, (<contextmenu> and
<contextmenuitem>) because I couldn't come up with an acceptably elegant way
to support that and also have an orthogonal and easy to use API for
instantiating the classes manually in script.
---------- Forwarded message ----------
From: Henry Minsky <henry.minsky at gmail.com>
Date: Nov 29, 2005 8:56 PM
Subject: proposed contextmenu API
To: Elliot Winard <enw at laszlosystems.com>
Here's a more fleshed out example of the API I am working on. There are two
independent ways to get the callback when someone clicks on an item.
You can pass a delegate that will get executed, or you can listen for a
"onselectitem"
event from an LzContextMenuItem.
The LzContextMenu itself sends a "onselect" event just when the user right
clicks, so you have a little time to dynamically rearrange the menu before
it displays.
<canvas width="100%" height="80%" >
<debug fontsize="12"/>
<simplelayout/>
<view width="100" height="100" bgcolor="#cccccc" name="v1">
<method event="oninit">
var cm = new LzContextMenu();
var item1 = cm.makeMenuItem('Item1', new LzDelegate(this,
"handlerightclick"));
cm.addItem(item1);
var item2 = cm.makeMenuItem('Item2', new LzDelegate(this,
"handlerightclick"));
cm.addItem(item2);
var item3 = cm.makeMenuItem('Item3', new LzDelegate(this,
"handlerightclick"));
item3.setEnabled(false);
cm.addItem(item3);
var item4 = cm.makeMenuItem('Item4', new LzDelegate(this,
"handlerightclick"));
item4.setSeparatorBefore(true);
cm.addItem(item4);
var item5 = cm.makeMenuItem('Show Dialog', new LzDelegate(this,
"handlerightclick"));
cm.addItem(item5);
// Menu items generate a "onselectitem" when they are selected
new LzDelegate(this, "showdialog", item5, "onselectitem");
this.setContextMenu(cm);
// "onselect" event is sent as soon as the menu gets a mousedown on the
right button.
// This gives you a chance to (quickly) rearrange the menu on the fly.
new LzDelegate(this, "menuselected", cm, "onselect");
// "onselectitem" event is sent when an item is selected from the menu
new LzDelegate(this, "menuitemselected", item1, "onselectitem");
Debug.write(cm);
</method>
<method name="menuselected" args="val">
Debug.write("A right click on the menu was detected, val= ", val);
</method>
<method name="menuitemselected" args="val">
Debug.write("A right click on an item was detected, val= ", val);
</method>
<method name="handlerightclick" args="val">
Debug.write("handle item handlerightclick, val=", val);
</method>
<method name="showdialog">
md.open();
</method>
</view>
<modaldialog id="md" width="200" height="200">
<simplelayout/>
<text>This is your dialog</text>
<button onclick="md.close()" isdefault="true">OK</button>
</modaldialog>
</canvas>
--
Henry Minsky
Software Architect
hminsky at laszlosystems.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://openlaszlo.org/pipermail/laszlo-dev/attachments/20051129/23073971/attachment.html
More information about the Laszlo-dev
mailing list