// @topic T02330 GUI Window Demo // @brief CAppWindow class implementation #include "CAppWindow.h" #include "train.h" CAppWindow::CAppWindow( Train& train ) : Fl_Double_Window( 451, 110 ), m_train( train ), vect_original_track( BOX_ARRAY_SIZE, FL_GREEN ), vect_current_display( BOX_ARRAY_SIZE, FL_GREEN ) { // The following code was origianlly generated by FLTK Fluid: Fl_Button* o = new Fl_Button(40, 60, 75, 25, "Animate"); o->callback((Fl_Callback*)cb_btn_animate, this); int idx = 0; for ( idx = 0; idx < BOX_ARRAY_SIZE; ++idx ) { out_box[ idx ] = new Fl_Output( OUTBOX_TOP_LEFT_X + idx * OUTBOX_WIDTH, OUTBOX_TOP_LEFT_Y, OUTBOX_WIDTH, OUTBOX_HEIGHT ); out_box[ idx ]->color( vect_current_display[ idx ] ); } end(); resizable( this ); } // invoked by the operating system when the user clicks the button void CAppWindow::cb_btn_animate(Fl_Widget* btn, void* pwin) { CAppWindow* pAppWindow = static_cast< CAppWindow*>( pwin ); pAppWindow->btn_animate(); } // button re-entry point void CAppWindow::btn_animate() { // Let business objects perform animation steps: m_train.move( vect_original_track, vect_current_display ); // update colors of output boxes: int idx = 0; for ( idx = 0; idx < BOX_ARRAY_SIZE; ++idx ) { out_box[ idx ]->color( vect_current_display[ idx ] ); } // redraw the window: Fl::redraw(); }