/* LICENSE:
  =========================================================================
    CMPack'04 Source Code Release for OPEN-R SDK 1.1.5-r2 for ERS7
    Copyright (C) 2004 Multirobot Lab [Project Head: Manuela Veloso]
    School of Computer Science, Carnegie Mellon University
    All rights reserved.
  ========================================================================= */

#ifndef INCLUDED_GlobalView_h
#define INCLUDED_GlobalView_h

#include <semaphore.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#include "../DataInterface.h"
#include "../RobotViewData.h"

#include "GuiState.h"

#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/fl_draw.H>

class ChokeChainCP;

/*------------------------------------------------------------------
CLASS
  GlobalView

DESCRIPTION
  Window showing data in a global reference frame.
------------------------------------------------------------------*/
class GlobalView : public Fl_Double_Window {
private:
  void setSizeWorldView(int width, int height);

  // Draw the field
  void drawWVField          ();

  // Our position
  void drawWVRobot               (int robot_id);
  // Our derived ball position
  void drawWVWMBall              (int robot_id);
  // Our vision observation
  void drawWVVisBall             (int robot_id);
  void drawWVVisMarkers          (int robot_id);
  void drawWVWMRedRobot          (int robot_id);
  void drawWVWMBlueRobot         (int robot_id);
  // Our teammate's observations
  void drawWVWMTeammate          (int robot_id);
  void drawWVWMTeammateBall      (int robot_id);
  void drawWVWMTeammateRedRobot  (int robot_id);
  void drawWVWMTeammateBlueRobot (int robot_id);
  // Output from the tracker
  void drawWVWMTracker           (int robot_id);
  //  void drawWVWMGoals             (int robot_id);
  //  void drawWVWMOpponent    (int robot_id);
  void drawWVWMDebug             (int robot_id);
  
  void drawWVAllRobot          ();
  void drawWVAllWMBall         ();
  void drawWVAllVisBall        ();
  void drawWVAllVisMarkers     ();
  //  void drawWVAllWMOpponent    ();
  //  void drawWVAllWMGoals       ();
  void drawWVAllWMRobot        ();
  void drawWVAllWMTeammate     ();
  void drawWVAllWMTeammateBall ();
  void drawWVAllWMTeammateRobot();
  void drawWVAllWMTracker      ();
  void drawWVAllWMDebug        ();

  void drawDev(int x, int y,
               double major, double minor, double theta);
  void drawDev2(double x, double y,
               double major, double minor, double theta,
		int std_dev);

  WorldViewState wvState;

  ChokeChainCP * cp;

public:
  GlobalView(ChokeChainCP * _cp,int width,int height);

  ~GlobalView();

  /// Resize the window
  virtual void resize(int x,int y,int w,int h);

  /// Override the default draw method
  virtual void draw();

  /// Handle events
  virtual int handle(int event);
private:
};


#endif
