MacArthur, Ian (SELEX GALILEO, UK) wrote a nice sample
> I'm not sure what the exact syntax for fltk-2 is, but it is basically
> similar.

it is nearly the same,
Sample for fltk2 without fluid but with membercallback and own window:

/*
  * fltk2-config --compile button_callback.cxx
  */
#include <fltk/Window.h>
#include <fltk/Button.h>
#include <fltk/run.h>
#include <fltk/events.h>
#include <stdio.h>

using namespace fltk;

//  --- Switchboard.h --------------------------------------------
template<class T> class Switchboard
     {
     typedef void (T::*MCB)(fltk::Widget*);
     T* parent;
     struct Stub
         {
         T* self; // current instance (class pointer)
         MCB mcb; // member callback (function pointer)
         Stub* next; // pointer to next stub
         Stub(T* self, MCB 
mcb,Stub*next=0):self(self),mcb(mcb),next(next) {}
         void operator()(fltk::Widget* arg) const {(self->*mcb)(arg);}
         }* list;
     static void exec(fltk::Widget* w, void*p) {(*(Stub*)p)(w);}
public:
     ~Switchboard() {for(Stub*p;(p=list);list=list->next,delete p){};};
     Switchboard(T*parent):parent(parent),list(0){};
     void* stub(MCB mcb) {return list=new Stub(parent,mcb,list);}
     fltk::Callback *operator()() { return &Switchboard<T>::exec;}
     void connect(fltk::Widget*w, MCB mcb) {w->callback(&exec, stub(mcb));}
     void operator()(fltk::Widget*w, MCB mcb) {w->callback(&exec, 
stub(mcb));}
     };
// --------------------------------------------------------------------

class MyWin:public Window
        {
        Switchboard<MyWin> connect;
        Button b;
        void onButton(Widget*w)
                {
                printf("event=%d\n",event());
                }
public: 
        MyWin(int w, int h):Window(USEDEFAULT,USEDEFAULT,w,h,0,true)
                ,connect(this)
                ,b(25,25,80,40,"Quit")
                {
                end();
                b.when(WHEN_CHANGED);
                connect(&b,&MyWin::onButton);
                }
        int run(int argc, char*argv[])
                {
                show(argc,argv);
                return fltk::run();
                }
        };

int main(int argc, char* argv[])
        {
        MyWin* win=new MyWin(376,278);
        return win->run(argc,argv);
        }
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to