> [OK, but only as long as the the menu_item name is not modified... :-( ]
It's also possible to use callback pointer or userdata value entry:
//----------------------------------------------------------------------------
// Menu using additional "foo" name:
//
Menu.add("&File",0,0,0,FL_SUBMENU);
Menu.add("File/Konvert1", 0, 0, (void*) "Konvert1");
Menu.add("File/Konvert2", 0, 0, (void*) "Konvert2");
Menu.add("File/Calc Linear", 0, 0, (void*) "Linear");
Menu.add("File/&Quit", 0, 0, (void*) "Quit");
//----------------------------------------------------------------------------
// Subroutines to get menuitem by value or by foo (also usable for
Fl_Choice):
//
Fl_Menu_Item* Choice_Value(Fl_Menu_* pChoice, void* Val)
{
if (pChoice) for (int i= 0; i< pChoice->size(); ++i)
if (pChoice->menu()[i].user_data_== Val)
{
pChoice->value(i);
pChoice->redraw();
return const_cast< Fl_Menu_Item* >(&pChoice->menu()[i]);
}
return 0;
}
//------------------------------------------------------------------------------
Fl_Menu_Item* Choice_Foo(Fl_Menu_* pChoice, const char* Foo)
{
if (pChoice && Foo) for (int i= 0; i< pChoice->size(); ++i)
{
const char* pFoo= (const char*) pChoice->menu()[i].user_data_;
if (pFoo && strcmp(pFoo, Foo)== 0)
{
pChoice->value(i);
pChoice->redraw();
return const_cast< Fl_Menu_Item* >(&pChoice->menu()[i]);
}
}
return 0;
}
//----------------------------------------------------------------------------
// Examples of using subroutines:
//
void dlg_main::Menu_Toggle(string Foo, bool An, bool Only)
{
if (Fl_Menu_Item* pMI= Choice_Foo(pMenu, Foo.c_str()))
{
if (Only) pMI->setonly();
else if (An) pMI->set();
else pMI->clear();
}
}
//----------------------------------------------------------------------------
bool dlg_main::Menu_Value(string Foo)
{
if (Fl_Menu_Item* pMI= Choice_Foo(pMenu, Foo.c_str()))
return pMI->value();
else return false;
}
//----------------------------------------------------------------------------
void dlg_main::Menu_Deactivate(string Foo)
{
if (Fl_Menu_Item* pMI= Choice_Foo(pMenu, Foo.c_str()))
pMI->deactivate();
}
//----------------------------------------------------------------------------
void dlg_main::Cb_Menu()
{ // Callback of Menu:
string Foo;
if (const Fl_Menu_Item* pV= pMenu->mvalue())
{
if (const char* pU= (const char*) pV->user_data()) Foo= pU;
else return;
}
else return;
// Evaluate valid callback:
if (Foo== "Quit") Close();
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk