OpenCPN Partial API docs
Loading...
Searching...
No Matches
nav_object_database.h
1/******************************************************************************
2 *
3 * Project: OpenCPN
4 *
5 ***************************************************************************
6 * Copyright (C) 2010 by David S. Register *
7 * *
8 * This program is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU General Public License as published by *
10 * the Free Software Foundation; either version 2 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This program is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU General Public License *
19 * along with this program; if not, write to the *
20 * Free Software Foundation, Inc., *
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
22 ***************************************************************************
23 */
24
25#ifndef _NAVOBJECTCOLLECTION_H__
26#define _NAVOBJECTCOLLECTION_H__
27
28#include <memory>
29#include <vector>
30
31#include <wx/checkbox.h>
32#include <wx/string.h>
33
34#include "pugixml.hpp"
35#include "bbox.h"
36#include "observable_evtvar.h"
37
38class Track;
39class TrackPoint;
40class RouteList;
41class RoutePointList;
42class Route;
43class RoutePoint;
44
45// Bitfield definition controlling the GPX nodes output for point objects
46#define OUT_TYPE 1 << 1 // Output point type
47#define OUT_TIME 1 << 2 // Output time as ISO string
48#define OUT_NAME 1 << 3 // Output point name if defined
49#define OUT_NAME_FORCE 1 << 4 // Output point name, even if empty
50#define OUT_DESC 1 << 5 // Output description if defined
51#define OUT_DESC_FORCE 1 << 6 // Output description, even if empty
52#define OUT_SYM_FORCE 1 << 7 // Output symbol name, using "empty" if undefined
53#define OUT_GUID 1 << 8 // Output GUID if defined
54#define OUT_VIZ 1 << 9 // Output point viz, if non-zero(true)
55#define OUT_VIZ_NAME 1 << 10 // Output point name viz, if non-zero(true)
56#define OUT_SHARED 1 << 11 // Output point shared state, if non-zero(true)
57#define OUT_HYPERLINKS 1 << 13 // Output point Hyperlinks, if present
58#define OUT_ACTION_ADD 1 << 14 // opencpn:action node support
59#define OUT_ACTION_DEL 1 << 15
60#define OUT_ACTION_UPD 1 << 16
61#define OUT_EXTENSION 1 << 17
62#define OUT_ARRIVAL_RADIUS 1 << 18
63#define OUT_WAYPOINT_RANGE_RINGS 1 << 19
64#define OUT_WAYPOINT_SCALE 1 << 20
65#define OUT_TIDE_STATION 1 << 21
66#define OUT_RTE_PROPERTIES 1 << 22
67
68#define OPT_TRACKPT OUT_TIME
69#define OPT_WPT \
70 (OUT_TYPE) + (OUT_TIME) + (OUT_NAME) + (OUT_DESC) + (OUT_SYM_FORCE) + \
71 (OUT_GUID) + (OUT_VIZ) + (OUT_VIZ_NAME) + (OUT_SHARED) + \
72 (OUT_HYPERLINKS) + (OUT_ARRIVAL_RADIUS) + (OUT_WAYPOINT_RANGE_RINGS) + \
73 (OUT_WAYPOINT_SCALE) + (OUT_TIDE_STATION)
74#define OPT_ROUTEPT OPT_WPT + (OUT_RTE_PROPERTIES)
75
76// Bitfield definitions controlling the GPX nodes output for Route.Track
77// objects
78#define RT_OUT_ACTION_ADD 1 << 1 // opencpn:action node support
79#define RT_OUT_ACTION_DEL 1 << 2
80#define RT_OUT_ACTION_UPD 1 << 3
81#define RT_OUT_NO_RTPTS 1 << 4
82
83class NavObjectCollection1; // forward
84
85bool WptIsInRouteList(RoutePoint *pr);
86RoutePoint *WaypointExists(const wxString &name, double lat, double lon);
87RoutePoint *WaypointExists(const wxString &guid);
88Route *RouteExists(const wxString &guid);
89Route *RouteExists(Route *pTentRoute);
90Track *TrackExists(const wxString &guid);
91
92Route *FindRouteContainingWaypoint(RoutePoint *pWP);
93
94Route *GPXLoadRoute1(pugi::xml_node &wpt_node, bool b_fullviz, bool b_layer,
95 bool b_layerviz, int layer_id, bool b_change,
96 bool load_points = true);
97
98RoutePoint *GPXLoadWaypoint1(pugi::xml_node &wpt_node, wxString symbol_name,
99 wxString GUID, bool b_fullviz, bool b_layer,
100 bool b_layerviz, int layer_id);
101
102bool InsertRouteA(Route *pTentRoute, NavObjectCollection1 *navobj);
103bool InsertTrack(Track *pTentTrack, bool bApplyChanges = false);
104bool InsertWpt(RoutePoint *pWp, bool overwrite);
105
106Track *GPXLoadTrack1(pugi::xml_node &trk_node, bool b_fullviz, bool b_layer,
107 bool b_layerviz, int layer_id);
108
110public:
112 virtual ~NavObjectCollection1();
113
114 bool CreateNavObjGPXPoints(void);
115 bool CreateNavObjGPXRoutes(void);
116 bool CreateNavObjGPXTracks(void);
117
118 void AddGPXRoutesList(RouteList *pRoutes);
119 void AddGPXTracksList(std::vector<Track *> *pTracks);
120 bool AddGPXPointsList(RoutePointList *pRoutePoints);
121 bool AddGPXRoute(Route *pRoute);
122 bool AddGPXTrack(Track *pTrk);
123 bool AddGPXWaypoint(RoutePoint *pWP);
124
125 bool CreateAllGPXObjects();
126 bool LoadAllGPXObjects(bool b_full_viz, int &wpt_duplicates,
127 bool b_compute_bbox = false);
128 int LoadAllGPXObjectsAsLayer(int layer_id, bool b_layerviz,
129 wxCheckBoxState b_namesviz);
130
131 bool SaveFile(const wxString filename);
132
133 void SetRootGPXNode(void);
134 bool IsOpenCPN();
135 LLBBox &GetBBox() { return BBox; };
136
137 LLBBox BBox;
138 bool m_bSkipChangeSetUpdate;
139};
140
142 friend class MyConfig;
143
144public:
145 static std::unique_ptr<NavObjectChanges> getTempInstance() {
146 return std::unique_ptr<NavObjectChanges>(new NavObjectChanges());
147 }
148
149 static NavObjectChanges *getInstance() {
150 static NavObjectChanges *instance = 0;
151 if (!instance) instance = new NavObjectChanges();
152 return instance;
153 }
154
155 void Init(const wxString &path) {
156 m_filename = path;
157 m_changes_file = fopen(m_filename.mb_str(), "a");
158 }
159
160 NavObjectChanges(const NavObjectChanges &) = delete;
161 void operator=(const NavObjectChanges &) = delete;
163
164 void AddRoute(Route *pr, const char *action); // support "changes" file set
165 void AddTrack(Track *pr, const char *action);
166 void AddWP(RoutePoint *pr, const char *action);
167 void AddTrackPoint(TrackPoint *pWP, const char *action,
168 const wxString &parent_GUID);
169
170 virtual void AddNewRoute(Route *pr);
171 virtual void UpdateRoute(Route *pr);
172 virtual void DeleteConfigRoute(Route *pr);
173
174 virtual void AddNewTrack(Track *pt);
175 virtual void UpdateTrack(Track *pt);
176 virtual void DeleteConfigTrack(Track *pt);
177
178 virtual void AddNewWayPoint(RoutePoint *pWP, int ConfigRouteNum = -1);
179 virtual void UpdateWayPoint(RoutePoint *pWP);
180 virtual void DeleteWayPoint(RoutePoint *pWP);
181 virtual void AddNewTrackPoint(TrackPoint *pWP, const wxString &parent_GUID);
182
183 bool ApplyChanges(void);
184 bool IsDirty() { return m_bdirty; }
185
196
197private:
199 m_changes_file = 0;
200 m_bdirty = false;
201 }
202 NavObjectChanges(wxString file_name);
203
204 wxString m_filename;
205 FILE *m_changes_file;
206 bool m_bdirty;
207};
208
209#endif // _NAVOBJECTCOLLECTION_H__
Generic event handling between MVC Model and Controller based on a shared EventVar variable.
EventVar evt_delete_track
Notified when Routeman (?) should delete a track.
EventVar evt_delete_route
Notified when Routeman (?) should delete a Route*.
Definition route.h:75
Represents a single point in a track.
Definition track.h:52
Represents a track, which is a series of connected track points.
Definition track.h:78