/* 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_UI_h
#define INCLUDED_UI_h

#include <gtk/gtk.h>

#include "GuiState.h"

/*------------------------------------------------------------------
CLASS
  UI

DESCRIPTION
  Generic holder for UI functions.
------------------------------------------------------------------*/
class UI {
public:
  void drawWorldView(GdkWindow *win,GdkGC *gc);
  void drawEgoView(GdkWindow *win,GdkGC *gc);
  void setSizeWorldView(gint width, gint height);
  void setSizeEgoView(gint width, gint height);
  void drawVisRLE(GdkWindow *win,GdkGC *gc);
  void setSizeVisRLE(gint width, gint height);
private:
  void drawWVField     (GdkWindow *win,GdkGC *gc);

  void drawWVRobot     (int robot_id,GdkWindow *win,GdkGC *gc);
  void drawWVWMBall    (int robot_id,GdkWindow *win,GdkGC *gc);
  void drawWVVisBall   (int robot_id,GdkWindow *win,GdkGC *gc);
  void drawWVVisMarkers(int robot_id,GdkWindow *win,GdkGC *gc);
  void drawWVWMOpponent(int robot_id,GdkWindow *win,GdkGC *gc);
  void drawWVWMTeammate(int robot_id,GdkWindow *win,GdkGC *gc);
  void drawWVWMGoals(int robot_id,GdkWindow *win,GdkGC *gc);

  void drawWVAllRobot     (GdkWindow *win,GdkGC *gc);
  void drawWVAllWMBall    (GdkWindow *win,GdkGC *gc);
  void drawWVAllVisBall   (GdkWindow *win,GdkGC *gc);
  void drawWVAllVisMarkers(GdkWindow *win,GdkGC *gc);
  void drawWVAllWMOpponent(GdkWindow *win, GdkGC *gc);
  void drawWVAllWMTeammate(GdkWindow *win, GdkGC *gc);
  void drawWVAllWMGoals   (GdkWindow *win,GdkGC *gc);

  void drawEVBackground      (GdkWindow *win,GdkGC *gc);

  void drawEVVisBall         (int robot_id,GdkWindow *win,GdkGC *gc);
  void drawEVVisRadial       (GdkWindow *win,GdkGC *gc,int robot_id);
  template<class RadialMap,class RadialObject>
  void drawEVRadialObjectData(GdkWindow *win,GdkGC *gc,RadialMap *map,int robot_id,int robj_idx);
  void drawEVRadialPoint     (GdkWindow *win,GdkGC *gc,double angle,double distance);

  void drawVisRLEImg   (int robot_id,GdkWindow *win,GdkGC *gc);
  void drawVisRLEAllImg(GdkWindow *win,GdkGC *gc);

  void drawDev(GdkWindow *win,GdkGC *gc,
               gint x, gint y,
               double major, double minor, double theta);

  WorldViewState wvState;
  EgoViewState evState;
  VisRLEState vrleState;
};

#endif
