Hello Henry,


  I think this new API looks really nice, just one question - will it be possible to use it declaratively as well? I.e. smth like


<contextmenu caption="SomeCaption" menu right-clicked")">

       <contextmenuitem caption="Item1" item1")"/>

</contextmenu>



>

This is a proposed API for the right-click 'context menu' feature. The

feature is currently implemented in the runtime by having the users

basically directly the calling of the Flash ContextMenu API. It would

be better to have a slightly more modular API which could also be

portable other runtimes.  This proposal calls for a new API which adds

two new runtime classes, LzContextMenu, and LzContextMenuItem.


The major design issue is how to get callbacks; this design proposes

two mechanisms: the menu-item class and the menu class itself will get

"onselect" events when they are selected, and the API also supports,

as a convenience, passing an LzDelegate object to a menu or menu item

which will get installed, and is executed when the menu or menu-item

is selected.



An example usage looks like this:


<view width="100" height="100" bgcolor="#cccccc" name="v1">

  <method event="oninit">

    var cm = new LzContextMenu();

    // Set up a LzDelegate as a callback 

    var item1 = cm.makeMenuItem('Item1', new LzDelegate(this, "handlerightclick"));

    cm.addItem(item1);


    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 "onselect" when they are selected

    new LzDelegate(this, "showdialog", item5, "onselect");


    this.setContextMenu(cm);


    // "onselect" event is to a LzContextMenu 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");


    // "onselect" event is sent to an LzContextMenuItem when it is selected from the menu

    new LzDelegate(this, "menuitemselected", item1, "onselect");


    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>



The API looks like this:


//-----------------------------------------------------------------------------

// LzContextMenu.setCaption

//

// Sets the text string which is displayed for the menu item

// @param String caption: text string to display

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenuItem.setCaption = function (caption) {


//-----------------------------------------------------------------------------

// LzContextMenu.setEnabled

//

// @param boolean val: if false, menu item is grayed out and will not respond to clicks

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenuItem.setEnabled = function (val) {



//-----------------------------------------------------------------------------

// LzContextMenu.setVisible

//

// Sets the function which will be called when the menu item is selected

// @param boolean val: sets visibility

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenuItem.setSeparatorBefore = function (val) {


//-----------------------------------------------------------------------------

// LzContextMenu.setVisible

//

// Sets the function which will be called when the menu item is selected

// @param boolean val: sets visibility

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenuItem.setVisible = function (val) {



//-----------------------------------------------------------------------------

// LzContextMenu.setDelegate

//

// Sets the delegate which will be called when the menu item is selected

// @param LzDelegate delegate: delegate which is executed when item is selected. An

// onselect event is also sent.

// 

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenuItem.setDelegate = function (delegate) {


//-----------------------------------------------------------------------------

// LzContextMenu.makeMenuItem

//

// create a new menu item for a LzContextMenu

// @param String title: menu item name

// @param LzDelegate callback:  delegate to execute when item is selected

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenu.makeMenuItem = function (title, callback) {


//-----------------------------------------------------------------------------

// LzContextMenu.addItem

//

// Adds a menu items into a menu

// @param LzContextMenuItem item: LzContextMenuItem to install on this menu

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenu.addItem = function (item) {


//-----------------------------------------------------------------------------

// LzContextMenu.hideBuiltInItems

//

// Removes Flash-installed default menu items

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenu.hideBuiltInItems = function () {


//-----------------------------------------------------------------------------

// LzContextMenu.clearItems

//

// Remove all custom items from a menu

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenu.clearItems = function () {


//-----------------------------------------------------------------------------

// LzContextMenu.getItems

//

// Return list of custom items

// @keywords public

//-----------------------------------------------------------------------------

LzContextMenu.getItems = function () {




-- 

Henry Minsky

Software Architect

[EMAIL PROTECTED]






-- 

Best regards,

 Michael                            mailto:[EMAIL PROTECTED]

_______________________________________________
Laszlo-user mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-user

Reply via email to