We used to have code that would have resulted in each separate LyXView having 
its own set of dialogs.

Lars created guiapi.C and moved all the dialogs into singleton classes  that 
could be accessed through the various functions. Eg

extern "C" {
        void gui_ShowAboutlyx(LyXView & lv, Dialogs & d)
        {
                static GUI<ControlAboutlyx, FormAboutlyx,
                        OkCancelPolicy, xformsBC> cal(lv, d);
                cal.controller().show();
        }
}

and, indeed, that's just what Dialogs now does. Eg:

void Dialogs::showAboutlyx()
{
        gui_ShowAboutlyx(*dialogs_lyxview, *this);
}


I'd like to turn this round. Ie, let Dialogs.h store a bunch of 
boost::functions. Eg:
        boost::function0<void> showAboutlyx;

Connect these boost::functions to the appropriate methods hidden deep within 
frontends. Eg
        showAboutLyX=boost::bind(&ControlAboutLyX::show, this);
(I'd like to do this in the Dialogs c-tor, but we'll see...)

and allow guiapi to access these boost::functions. Eg

extern "C" {
        void gui_ShowAboutlyx(LyXView & lv, Dialogs & d)
        {
                d.showAboutLyX();
        }
}

Ths gives us back the ability to have per-LyXView dialogs and is cleaner code 
too I believe.

Lars?

Angus

Reply via email to