Hi,

my application has a main window that has several nested Fl_Tiles, so that the
user can adjust the workspace to his preferences. The following two functions
serve to preserve the arrangement between application restarts. Pass a
Fl_Preferences sub-group, and the main window as arguments.

Maybe it is useful to other fltk developers.

Cheers
-Richard

--------------------------

#include <FL/Fl_Preferences.H>
#include <FL/Fl_Group.H>

void fltk_save_layout( Fl_Preferences* p, Fl_Group* g ) {
        p->set( "group_x", g->x() );
        p->set( "group_y", g->y() );
        p->set( "group_w", g->w() );
        p->set( "group_h", g->h() );
        int num = g->children();
        for ( int i = 0; i < num; i++ ) {
                Fl_Group* gg = dynamic_cast<Fl_Group*>(g->child(i));
                if ( gg ) {
                        fltk_save_layout( new Fl_Preferences( *p,
Fl_Preferences::Name( "group_%d", i ) ), gg );
                } else {
                        p->set( Fl_Preferences::Name( "child_%d_x", i ),
g->child(i)->x() );
                        p->set( Fl_Preferences::Name( "child_%d_y", i ),
g->child(i)->y() );
                        p->set( Fl_Preferences::Name( "child_%d_w", i ),
g->child(i)->w() );
                        p->set( Fl_Preferences::Name( "child_%d_h", i ),
g->child(i)->h() );
                }
        }
}

void fltk_load_layout( Fl_Preferences* p, Fl_Group* g) {
        int x, y, w, h;
        p->get( "group_x", x, g->x() );
        p->get( "group_y", y, g->y() );
        p->get( "group_w", w, g->w() );
        p->get( "group_h", h, g->h() );
        g->resize( x, y, w, h );
        int num = g->children();
        for ( int i = 0; i < num; i++ ) {
                Fl_Group* gg = dynamic_cast<Fl_Group*>(g->child(i));
                if ( gg ) {
                        fltk_load_layout( new Fl_Preferences( *p,
Fl_Preferences::Name( "group_%d", i ) ), gg );
                } else {
                        p->get( Fl_Preferences::Name( "child_%d_x", i ), x,
g->child(i)->x() );
                        p->get( Fl_Preferences::Name( "child_%d_y", i ), y,
g->child(i)->y() );
                        p->get( Fl_Preferences::Name( "child_%d_w", i ), w,
g->child(i)->w() );
                        p->get( Fl_Preferences::Name( "child_%d_h", i ), h,
g->child(i)->h() );
                        g->child(i)->resize( x, y, w, h );
                }
        }
        g->init_sizes();
}

_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to