/*
-
-POI table definitions:
-
--- public POIs from different sources
--- (Fuel, pubs, museums, etc)
---
-create table poi (
- poi_id integer PRIMARY KEY,
- cat_id integer,
- source int,
- source_id int,
- type int,
- lat real,
- lon real,
- elev real,
- label text,
- desc text,
- wikipedia text,
- url text,
- phone varchar(64),
- email varchar(64),
-);
-
--- type:
--- 0=POI
--- 1=Landmark
-
--- Shared categories for POIs and landmarks
-create table category (
- cat_id integer PRIMARY KEY,
- priority int,
- label text,
- desc text,
- color char(6),
- icon varchar(32),
- enabled integer
-);
-
-*/
+ * POI definitions
+ *
+ * See docs for table definitions.
+ */
#ifndef _MAPPER_POI_H
#define _MAPPER_POI_H
+#include <glib.h>
#include <sqlite3.h>
typedef enum {
POI_TYPE_LANDMARK=1,
} poi_types_e;
-typedef struct _PoiDb PoiDb;
-struct _PoiDb {
+typedef enum {
+ POI_SEARCH_NEAR=0,
+ POI_SEARCH_TEXT,
+ POI_SEARCH_TEXT_CAT,
+ POI_SEARCH_CAT,
+} poi_search_type;
+
+typedef enum {
+ POI_SOURCE_USER=0,
+ POI_SOURCE_OSM=1,
+ POI_SOURCE_GPX_IMPORT=2,
+} poi_source;
+
+typedef struct _poi_db poi_db;
+struct _poi_db {
sqlite3 *db;
gchar *file;
guint zoom;
};
-typedef struct _PoiData PoiData;
-struct _PoiData {
- gfloat lat;
- gfloat lon;
- gchar *name;
+/**
+ * Data to describe a POI.
+ */
+typedef struct _poi_info poi_info;
+struct _poi_info {
+ guint poi_id;
+ guint cat_id;
+ guint is_in_c;
+ guint is_in_p;
+ guint source;
+ time_t addtime;
+ gdouble lat;
+ gdouble lon;
+ gboolean public;
+ gchar *label;
+ gchar *desc;
+ gchar *cat_label;
+ gchar *cat_desc;
+ gchar *postal_code;
+ gchar *url;
+};
+
+/**
+ * Data used during action: add or edit category/poi
+ */
+typedef struct _delete_poi delete_poi;
+struct _delete_poi {
+ GtkWidget *dialog;
+ gchar *txt_label;
+ guint id;
+};
+
+/**
+ * Data describing a single POI category
+ */
+typedef struct _poi_category poi_category;
+struct _poi_category {
+ guint id;
+ gboolean enabled;
+ gboolean warning;
+ gchar *label;
gchar *desc;
};
-/** POI */
-sqlite3 *_db;
-gchar *_poi_db;
+/* POI SQL */
+struct sql_poi_stmt {
+ sqlite3_stmt *select_poi;
+ sqlite3_stmt *select_poi_by_id;
+ sqlite3_stmt *select_nearest_poi;
+ sqlite3_stmt *select_poi_search;
+ sqlite3_stmt *select_poi_search_cat;
+ sqlite3_stmt *select_poi_by_cat;
+ sqlite3_stmt *insert_poi;
+ sqlite3_stmt *update_poi;
+ sqlite3_stmt *delete_poi;
+ sqlite3_stmt *delete_poi_by_catid;
+ sqlite3_stmt *select_cat;
+ sqlite3_stmt *insert_cat;
+ sqlite3_stmt *update_cat;
+ sqlite3_stmt *delete_cat;
+ sqlite3_stmt *toggle_cat;
+ sqlite3_stmt *selall_cat;
+ sqlite3_stmt *select_quick_cat;
+};
+struct sql_poi_stmt poisql;
+
guint _poi_zoom;
-sqlite3_stmt *_stmt_select_poi;
-sqlite3_stmt *_stmt_select_nearest_poi;
-sqlite3_stmt *_stmt_insert_poi;
-sqlite3_stmt *_stmt_update_poi;
-sqlite3_stmt *_stmt_delete_poi;
-sqlite3_stmt *_stmt_delete_poi_by_catid;
-sqlite3_stmt *_stmt_nextlabel_poi;
-
-sqlite3_stmt *_stmt_select_cat;
-sqlite3_stmt *_stmt_insert_cat;
-sqlite3_stmt *_stmt_update_cat;
-sqlite3_stmt *_stmt_delete_cat;
-sqlite3_stmt *_stmt_toggle_cat;
-sqlite3_stmt *_stmt_selall_cat;
+gboolean poi_init(sqlite3 **db);
+void poi_deinit(sqlite3 *db);
+
+gboolean poi_db_create(sqlite3 *db);
+gboolean poi_db_prepare(sqlite3 *db);
+
+poi_info *poi_new(void);
+void poi_free(poi_info *p);
+
+gboolean poi_get_list_near_unit(guint unitx, guint unity, guint range, GtkListStore **store, guint *num_poi);
+gboolean poi_get_list_inside(gdouble lat1, gdouble lon1, gdouble lat2, gdouble lon2, GtkListStore **store, guint *num_poi);
+
+poi_info *poi_get_by_id(guint id);
+
+gboolean poi_update(poi_info *p);
+gboolean poi_add(poi_info *p);
+gboolean poi_delete(guint id);
+
+gboolean poi_search(poi_search_type pst, gdouble lat, gdouble lon, gchar *text, guint cat, GtkListStore **store);
+poi_info *poi_find_nearest(gdouble lat, gdouble lon);
+
+gboolean poi_get_list_near_unit(guint unitx, guint unity, guint range, GtkListStore **store, guint *num_poi);
+
+poi_category *poi_category_new(void);
+void poi_category_free(poi_category *c);
+
+gboolean poi_category_get(guint cat_id, poi_category **c);
+gboolean poi_category_delete(guint id);
+gboolean poi_category_update(guint cat_id, poi_category *c);
+gboolean poi_category_toggle(guint cat_id, gboolean cat_enabled);
+
+GdkPixbuf *poi_get_icon(gchar *icon, gboolean big);
+
+GtkListStore *poi_category_generate_store(void);
#endif