Pop-up menu
TGUI 0.7 is no longer supported, use a newer TGUI version instead.
TGUI does not yet support right click events or has a Pop-up Menu. However, the menu itself does not has to be anything more than a ListBox and it takes only a small effort to show and hide it on events. So below you can find the code needed to implement a Pop-up menu in your own code.
Note that this example uses the optional unbound parameter feature of the connect function, it will not compile on VS2013.
#include <TGUI/TGUI.hpp>
tgui :: ListBox :: Ptr popumMenu ;
// Called when selecting an item in the pop-up menu
void popupMenuCallback ( std :: string item )
{
std :: cout << item << std :: endl ;
}
void rightClickCallback ( tgui :: Gui & gui , sf :: Vector2f position )
{
popumMenu = tgui :: ListBox :: create ();
popumMenu -> addItem ( "Option 1" );
popumMenu -> addItem ( "Option 2" );
popumMenu -> addItem ( "Option 3" );
popumMenu -> addItem ( "Option 4" );
popumMenu -> setItemHeight ( 20 );
popumMenu -> setPosition ( position );
popumMenu -> setSize ( 120 , popumMenu -> getItemHeight () * popumMenu -> getItemCount ());
popumMenu -> connect ( "ItemSelected" , popupMenuCallback );
gui . add ( popumMenu );
}
int main ()
{
sf :: RenderWindow window ( sf :: VideoMode ( 800 , 600 ), "TGUI window" );
tgui :: Gui gui ( window );
gui . setFont ( "TGUI/fonts/DejaVuSans.ttf" );
while ( window . isOpen ())
{
sf :: Event event ;
while ( window . pollEvent ( event ))
{
if ( event . type == sf :: Event :: Closed )
window . close ();
// Check if there is a pop-up menu
if ( popumMenu )
{
// When mouse is released, remove the pop-up menu
if ( event . type == sf :: Event :: MouseButtonReleased && event . mouseButton . button == sf :: Mouse :: Left )
{
gui . remove ( popumMenu );
popumMenu = nullptr ;
}
// When mouse is pressed, remove the pop-up menu only when the mouse is not on top of the menu
if ( event . type == sf :: Event :: MouseButtonPressed )
{
if ( ! popumMenu -> mouseOnWidget ( event . mouseButton . x , event . mouseButton . y ))
{
gui . remove ( popumMenu );
popumMenu = nullptr ;
}
}
}
// Perhaps we have to open a menu
else if ( event . type == sf :: Event :: MouseButtonPressed && event . mouseButton . button == sf :: Mouse :: Right )
{
rightClickCallback ( gui , sf :: Vector2f ( event . mouseButton . x , event . mouseButton . y ));
}
gui . handleEvent ( event );
}
window . clear ();
gui . draw ();
window . display ();
}
}