// @topic W010303 FLTK FLUID -- maze navigation
// @brief class CMazeWindow implementation -- generated by FLUID

// generated by Fast Light User Interface Designer (fluid) version 1.0302

#include "MazeWindow.h"

CMazeWindow::CMazeWindow( Room* entry_room ) {
  { m_double_window = new
      Fl_Double_Window(493, 400, "Maze Navigation App");
      //Fl_Double_Window( 483, 410 );
    //m_double_window->user_data((void*)(this));
    { canvas = new
        Drawing2D(25, 25, 445, 321);
        //Drawing2D(170, 30, 300, 190, entry_room);
      canvas->box(FL_DOWN_BOX);
      canvas->color(FL_BACKGROUND_COLOR);
      canvas->selection_color(FL_BACKGROUND_COLOR);
      canvas->labeltype(FL_NORMAL_LABEL);
      canvas->labelfont(0);
      canvas->labelsize(14);
      canvas->labelcolor(FL_FOREGROUND_COLOR);
      canvas->callback((Fl_Callback*)animation_begin, (void*)(canvas));
      canvas->align(Fl_Align(FL_ALIGN_CENTER));
      canvas->when(FL_WHEN_RELEASE);
    } // Drawing2D* canvas
    { button_right = new Fl_Button(125, 360, 80, 25, "- - >");
        //Fl_Button( 30, 15, 100, 25, "->" );
      button_right->callback((Fl_Callback*)cb_btn_right, (void*)(canvas));
    } // Fl_Button* button_right
    { button_left = new Fl_Button(30, 360, 80, 25, "< - -");
        //Fl_Button( 40, 60, 75, 25, "<-" );
      button_left->callback((Fl_Callback*)cb_btn_left, (void*)(canvas));
    } // Fl_Button* button_left
    m_double_window->end();
    m_double_window->resizable( *m_double_window );
  } // Fl_Double_Window* m_double_window
}

void CMazeWindow::cb_btn_right( Fl_Widget* btn, void* userdata ) {
  Drawing2D* pcanvas = static_cast< Drawing2D* >( userdata );
  pcanvas->turn_head_right();
  Fl::redraw();
}

void CMazeWindow::cb_btn_left( Fl_Widget* btn, void* userdata ) {
  Drawing2D* pcanvas = static_cast< Drawing2D* >( userdata );
  pcanvas->turn_head_left();
  Fl::redraw();
}

/**
   timer animation
*/
void CMazeWindow::animation_begin( Fl_Widget* widg, void* userdata ) {
  Drawing2D* pcanvas = static_cast< Drawing2D* >( userdata );
  if ( pcanvas->animate_door_entry() ) {
      Fl::add_timeout( TICK_TIMEOUT, animation_continue, userdata );
  }
}

void CMazeWindow::animation_continue( void* userdata ) {
  Drawing2D* pcanvas = static_cast< Drawing2D* >( userdata );
  if ( pcanvas->animate_door_entry() ) {
      Fl::redraw();
      Fl::add_timeout( TICK_TIMEOUT, animation_continue, userdata );
  } else {
      Fl::redraw();
  }
}

void CMazeWindow::show( Room* entry_room ) {
  canvas->initialize_room( entry_room );
  m_double_window->show();
}