J
Artchi schrieb:
Ja, das ist halt der Nachteil eines minimalistischen Designs. Man kann nicht alles haben.
Ja, das stimmt wohl. Da Libraries wie libsig++ nicht ohne Eingriffe in die FLTK-Sourcen arbeiten würden, habe ich mir eine kleine functor-Lösung als Callback-Klasse selbstgebacken. Damit fallen die ätzenden static-Methoden weg. Ein Schnippsel würde dann so aussehen:
class MainWindow_UI
{
Fl_Double_Window *theMainWindow;
Fl_Button *btn_Menu;
Fl_SimpleCallback<MainWindow_UI> cb_BtnMenu;
protected:
void OnMenu (void *data);
}
btn_Menu muss nicht unbedingt als Attribut in der Klasse enthalten sein. Aber ich habe den Zugriff gebraucht. Ansonsten muss ich leider den Callback explizit definieren. Der eigentliche Callback ist die normale Methode OnMenu(). Was von FLTK noch bleibt, ist der Parameter mit dem "universellen" Typ void*.
Fl_Double_Window* MainWindow_UI::make_window()
{
btn_Menu = new Fl_Button(18,24,35,25);
cb_BtnMenu.addCallback(this,&MainWindow_UI::OnMenu,btn_Menu);
}
Beim Erzeugen des Fensters mit der Methode make_window() muss ich nach dem Erzeugen des Buttons nur noch den Callback initialisieren. Für den Functor brauche ich den Pointer auf das Objekt (this) und den Methodenpointer (hier &MainWindow_UI::OnMenu) sowie das Widget selbst.
Wenn jemand Interesse an der Klasse hat, kann ich sie gerne (unter der LGPL) zur Verfügung stellen.