popupmenu class
Provides a popup menu.
Inherits
object widget
Description
This widget can be used to display a popup menu. Technically, a popup menu consists of a list of menu items.
You add items with insertItem(). An item can be a string. In addition, items can have an optional icon drawn on the very left side.
Functions
$insertItem(<text:string>,[icon_id:string])
Inserts menu items into a popup menu with optional icon and return the popup identifier.
$addMenu(<popupmenu:hobject,[idx:uinteger])
Add a popupmenu. With the optional parameter idx the popup will be inserted.
$setTitle(<text:string>)
Sets the popupmenu title to text.
$exec([<widget:objects>,<x:uinteger>,<y:integer>])
If called without parameters show the popup menu at the current pointer position.
With the optional parameters show the popup menu at the coordinate x,y widget parameter relative.
$removeItem(<popup_id:Uinteger>)
Removes the menu item that has the identifier ID.
$removeItemAt(<index:uinteger>)
Removes the menu item at position index.
$insertSeparator(<index:uinteger>)
Inserts a separator at position index.
If the index is negative the separator becomes the last menu item.
$activatedEvent(<popup_id:uinteger>)
This function is called when a menu item and return the the item ID.
The default implementation emits the $activated() signal.
$highligthtedEvent(<popup_id:uinteger>)
This function is called when a menu item is highlighted (hovered) and return the item ID.
The default implementation emits the $highlighted() signal.
Signals
$activated()
This signal is emitted by the default implementation of $activatedEvent().
$highlighted()
This signal is emitted by the default implementation of $highlightedEvent().
Examples

# First we define a class inherited from popupmenu
class(menu,popupmenu)
{
    constructor()
    {
        # We store the item's ID for checking in activatedEvent
        @%tile_id=@$insertItem("Tile",118)
        @%cascade_id=@$insertItem("Cascade",115)
        @$insertSeparator(3)
        @%closeactw_id=@$insertItem("Close Active Window",08)
        @%closeallw_id=@$insertItem("Close All Window",58)
    }
    activatedEvent()
    {
        # Now we emit a signals to the relative to the user choice
        %id=$0
        if (%id==@%tile_id) @$emit("tile")
        else if(%id==@%cascade_id) @$emit("cascade")
        else if (%id==@%closeactw_id) @$emit("closeactive")
        else @$emit("closeallwindows")
        # Deleting the popup
        delete $$
    }
}
class (ws,widget)

{
    In the constructor we create everything that belong to the single widget.
    constructor()
    {
        # Here we generate a loop to create our labels inside the widget.
        %lay=$new(layout,$$)
        we use a vbox to managing labels in vertical orientation
        %vb=$new(vbox,$$)
        # Then add the vbox to the main layout
        %lay->$addWidget(%vb,0,0)
        # Let's create our colorful labels
        for(%i=0;%i<15;%i++)
        {
            @%label=$new(label,%vb)
            @%label->$settext("Another class by N\&G")
            # We set our foreground's colors using the hex array in a random way.
            @%label->$setforegroundcolor($array($rand(255),$rand(255),$rand(255)))
        }
    }
    customContextMenuRequestedEvent()
    {
        # We create the popupmenu relative to this widget at runtime.
        %p=$new(menu,$$)
        objects.connect %p tile @$parent tile
        objects.connect %p cascade @$parent cascade
        objects.connect %p closeactive @$parent closeactivewindow
        objects.connect %p closeallwindows @$parent closeallwindows
        %p->$exec($$,$($0+10),$($1+10))
    }
}
# We create the workspace widget
%Workspace=$new(workspace)
# We use as space as we have
%size[]=%Workspace->$screenResolution()
# Resize it
%Workspace->$resize(%size[0],%size[1])
# Then create 20 subwidget
for(%i=0;%i<20;%i++)
{
    %w=$new(ws,%Workspace)
    # Let's add every widget to the workspace
    %Workspace->$addSubWindow(%w)
    # Then "shake it" a little bit around :-)
    %w->$move($rand($(%size[0]-50)),$rand($(%size[1]-50)))
}
# Reimplement closeEvent to delete all this :-)
privateimpl(%Workspace,closeEvent)
{
    delete $$
}
# Let's show!
%Workspace->$show()

Index, Object Classes