> [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

Reply via email to