// first we define a class inherited from popupmenu
class(menu,popupmenu)
{
constructor()
{
// we store the item's id for checkit 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 avery 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()
|