#ifndef _GTCACA_MAP_H_
#define _GTCACA_MAP_H_
#include <stdint.h>
#include <gtcaca/main.h>
#include <gtcaca/widget.h>
typedef struct {
double lat, lon;
uint32_t glyph;
uint8_t colour;
char *label;
} gtcaca_map_point_t;
typedef struct {
double *lonlat;
int n;
uint8_t colour;
} gtcaca_map_poly_t;
typedef struct _gtcaca_map_widget_t gtcaca_map_widget_t;
struct _gtcaca_map_widget_t {
gtcaca_widget_type_t type;
unsigned int id;
int has_focus;
int is_visible;
int x;
int y;
int width;
int height;
uint8_t color_focus_fg;
uint8_t color_focus_bg;
uint8_t color_nonfocus_fg;
uint8_t color_nonfocus_bg;
gtcaca_widget_t *parent;
gtcaca_widget_t *children;
struct _gtcaca_map_widget_t *prev;
struct _gtcaca_map_widget_t *next;
double lon_min, lon_max, lat_min, lat_max;
gtcaca_map_point_t *points;
int npoints, cappoints;
gtcaca_map_poly_t *polys;
int npolys, cappolys;
int graticule;
int sel;
char *title;
};
typedef struct { const char *name; double lat, lon; } gtcaca_map_city_t;
const gtcaca_map_city_t *gtcaca_map_cities(int *count);
const gtcaca_map_city_t *gtcaca_map_find_city(const char *name);
gtcaca_map_widget_t *gtcaca_map_new(gtcaca_widget_t *parent, int x, int y, int width, int height);
void gtcaca_map_draw(gtcaca_map_widget_t *m);
void gtcaca_map_set_bounds(gtcaca_map_widget_t *m, double lon_min, double lon_max,
double lat_min, double lat_max);
void gtcaca_map_add_point(gtcaca_map_widget_t *m, double lat, double lon,
uint32_t glyph, uint8_t colour, const char *label);
int gtcaca_map_add_city(gtcaca_map_widget_t *m, const char *name,
uint32_t glyph, uint8_t colour);
void gtcaca_map_add_polyline(gtcaca_map_widget_t *m, const double *lonlat, int n, uint8_t colour);
void gtcaca_map_add_world(gtcaca_map_widget_t *m, uint8_t colour);
void gtcaca_map_clear(gtcaca_map_widget_t *m);
void gtcaca_map_set_graticule(gtcaca_map_widget_t *m, int on);
void gtcaca_map_set_title(gtcaca_map_widget_t *m, const char *title);
int gtcaca_map_project(gtcaca_map_widget_t *m, double lon, double lat, int *sx, int *sy);
int gtcaca_map_key(gtcaca_map_widget_t *m, int key, void *userdata);
int gtcaca_map_selected(gtcaca_map_widget_t *m);
void gtcaca_map_free(gtcaca_map_widget_t *m);
#endif