30#include <wx/dcmemory.h>
32#include <wx/glcanvas.h>
33#include <wx/notebook.h>
37#include "model/ais_decoder.h"
39#include "model/idents.h"
40#include "model/multiplexer.h"
42#include "model/own_ship.h"
44#include "model/route.h"
45#include "model/track.h"
52#include "glChartCanvas.h"
56#include "OCPN_AUIManager.h"
57#include "ocpn_frame.h"
58#include "OCPNPlatform.h"
62#include "pluginmanager.h"
63#include "routemanagerdialog.h"
64#include "routeman_gui.h"
66#include "SoundFactory.h"
68#include "SystemCmdSound.h"
70#include "waypointman_gui.h"
71#include "shapefile_basemap.h"
78#if wxUSE_XLOCALE || !wxCHECK_VERSION(3, 0, 0)
79extern wxLocale* plocale_def_lang;
88extern bool g_bShowChartBar;
92extern RouteList* pRouteList;
93extern std::vector<Track*> g_TrackList;
95extern s52plib* ps52plib;
96extern wxString ChartListFileName;
98extern ColorScheme global_color_scheme;
99extern wxArrayString g_locale_catalog_array;
100extern int g_GUIScaleFactor;
101extern int g_ChartScaleFactor;
105extern int g_chart_zoom_modifier_raster;
106extern int g_chart_zoom_modifier_vector;
108extern bool g_bopengl;
110extern ChartGroupArray* g_pGroupArray;
114extern unsigned int g_canvasConfig;
116extern wxString g_CmdSoundString;
118unsigned int gs_plib_flags;
121extern bool g_bquiting;
122extern bool g_disable_main_toolbar;
123extern bool g_btenhertz;
124extern bool g_CanvasHideNotificationIcon;
125extern wxString g_default_wp_icon;
126extern bool g_bhide_route_console;
127extern bool g_bhide_context_menus;
128extern int g_maxzoomin;
130WX_DEFINE_ARRAY_PTR(
ChartCanvas*, arrayofCanvasPtr);
131extern arrayofCanvasPtr g_canvasArray;
133void NotifySetupOptionsPlugin(
const PlugInData* pic);
148 wxItemKind kind, wxString shortHelp, wxString longHelp,
149 wxObject* clientData,
int position,
int tool_sel,
152 return s_ppim->AddToolbarTool(label, bitmap, bmpRollover, kind, shortHelp,
153 longHelp, clientData, position, tool_sel,
160 if (s_ppim) s_ppim->RemoveToolbarTool(tool_id);
164 if (s_ppim) s_ppim->SetToolbarToolViz(item, viz);
168 if (s_ppim) s_ppim->SetToolbarItemState(item, toggle);
172 if (s_ppim) s_ppim->SetToolbarItemBitmaps(item, bitmap, bmpRollover);
176 wxString SVGfileRollover, wxString SVGfileToggled,
177 wxItemKind kind, wxString shortHelp, wxString longHelp,
178 wxObject* clientData,
int position,
int tool_sel,
181 return s_ppim->AddToolbarTool(label, SVGfile, SVGfileRollover,
182 SVGfileToggled, kind, shortHelp, longHelp,
183 clientData, position, tool_sel, pplugin);
189 wxString SVGfileRollover,
190 wxString SVGfileToggled) {
192 s_ppim->SetToolbarItemBitmaps(item, SVGfile, SVGfileRollover,
200 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin, name,
false);
206 if (s_ppim) s_ppim->SetCanvasContextMenuItemViz(item, viz, name);
210 if (s_ppim) s_ppim->SetCanvasContextMenuItemGrey(item, grey, name);
214 if (s_ppim) s_ppim->RemoveCanvasContextMenuItem(item, name);
220 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin,
"",
false);
235int AddCanvasContextMenuItemExt(wxMenuItem* pitem,
opencpn_plugin* pplugin,
236 const std::string object_type) {
239 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin,
240 object_type.c_str(),
true);
248 return reinterpret_cast<wxFileConfig*
>(
255 wxWindow* pret = NULL;
257 MyFrame* pFrame = s_ppim->GetParentFrame();
258 pret = (wxWindow*)pFrame->GetPrimaryCanvas();
264 if (win) win->Refresh(
true);
324 return FontMgr::Get().GetFontLegacy(TextElement, default_size);
327wxFont* GetOCPNScaledFont_PlugIn(wxString TextElement,
int default_size) {
328 return FontMgr::Get().GetFontLegacy(TextElement, default_size);
332 return g_Platform->GetToolbarScaleFactor(GUIScaleFactor);
336 return g_Platform->GetToolbarScaleFactor(g_GUIScaleFactor);
340 return g_Platform->GetChartScaleFactorExp(g_ChartScaleFactor);
348 return FontMgr::Get().
AddAuxKey(TextElement);
353 return g_StyleManager->GetCurrentStyle()->name;
359 unsigned int height) {
360 wxBitmap bmp = LoadSVG(filename, width, height);
368 SVGDocumentPixelSize(filename, w, h);
369 if (w == 0 || h == 0) {
376 return LoadSVG(filename, w, h);
387 return g_Platform->GetSharedDataDirPtr();
391 if (!g_pAIS)
return NULL;
393 ArrayOfPlugIn_AIS_Targets* pret =
new ArrayOfPlugIn_AIS_Targets;
396 for (
const auto& it : g_pAIS->GetTargetList()) {
405 td.n_alarm_state = AIS_ALARM_SET;
415 SendMessageToAllPlugins(message_id, message_body);
423 Nevent.SetID(message_id);
424 Nevent.SetJSONText(message_body);
425 gFrame->GetEventHandler()->AddPendingEvent(Nevent);
431 gFrame->JumpToPosition(gFrame->GetFocusCanvas(), lat, lon,
scale);
436#if wxUSE_XLOCALE || !wxCHECK_VERSION(3, 0, 0)
438 if (plocale_def_lang) {
440 g_locale_catalog_array.Add(catalog);
442 return plocale_def_lang->AddCatalog(catalog);
452 std::string full_sentence = buf.ToStdString();
454 if ((full_sentence[0] ==
'$') || (full_sentence[0] ==
'!')) {
455 std::string identifier;
457 identifier = full_sentence.substr(1, 5);
461 auto address = std::make_shared<NavAddr0183>(
"virtual");
463 std::make_shared<const Nmea0183Msg>(identifier, full_sentence, address);
464 auto msg_all = std::make_shared<const Nmea0183Msg>(*msg,
"ALL");
466 auto& msgbus = NavMsgBus::GetInstance();
468 msgbus.Notify(std::move(msg));
469 msgbus.Notify(std::move(msg_all));
475 wxXmlDocument doc = ChartData->GetXMLDescription(dbIndex, b_getGeom);
481 bool b_ProgressDialog) {
483 ArrayOfCDI ChartDirArray;
484 for (
unsigned int i = 0; i < dir_array.GetCount(); i++) {
485 wxString dirname = dir_array[i];
487 cdi.fullpath = dirname;
488 cdi.magic_number = _T(
"");
489 ChartDirArray.Add(cdi);
491 bool b_ret = gFrame->UpdateChartDatabaseInplace(ChartDirArray, b_force_update,
493 ChartData->GetDBFileName());
494 gFrame->ChartsRefresh();
499 return ChartData->GetChartDirArrayString();
504 wxFileName fn(full_path);
505 wxString fdir = fn.GetPath();
509 bret = ChartData->AddSingleChart(full_path);
513 pConfig->UpdateChartDirs(ChartData->GetChartDirArray());
514 ChartData->SaveBinary(ChartListFileName);
517 ArrayOfCDI XnewChartDirArray;
518 pConfig->LoadChartDirArray(XnewChartDirArray);
521 ChartData->
LoadBinary(ChartListFileName, XnewChartDirArray);
524 if (g_pGroupArray) ChartData->ApplyGroupArray(g_pGroupArray);
526 if (g_options && g_options->IsShown())
527 g_options->UpdateDisplayedChartDirList(ChartData->GetChartDirArray());
529 if (b_RefreshCanvas || !gFrame->GetPrimaryCanvas()->GetQuiltMode()) {
530 gFrame->ChartsRefresh();
540 bret = ChartData->RemoveSingleChart(full_path);
543 pConfig->UpdateChartDirs(ChartData->GetChartDirArray());
544 ChartData->SaveBinary(ChartListFileName);
547 ArrayOfCDI XnewChartDirArray;
548 pConfig->LoadChartDirArray(XnewChartDirArray);
551 ChartData->
LoadBinary(ChartListFileName, XnewChartDirArray);
554 if (g_pGroupArray) ChartData->ApplyGroupArray(g_pGroupArray);
556 if (g_options && g_options->IsShown())
557 g_options->UpdateDisplayedChartDirList(ChartData->GetChartDirArray());
559 gFrame->ChartsRefresh();
569 if (!g_pOptions)
return NULL;
574 parentid = g_pOptions->m_pageDisplay;
577 parentid = g_pOptions->m_pageConnections;
580 parentid = g_pOptions->m_pageCharts;
583 parentid = g_pOptions->m_pageShips;
586 parentid = g_pOptions->m_pageUI;
589 parentid = g_pOptions->m_pagePlugins;
593 _T(
"Error in PluginManager::AddOptionsPage: Unknown parent"));
598 return g_pOptions->AddPage(parentid, title);
602 if (!g_pOptions)
return false;
603 return g_pOptions->DeletePluginPage(page);
607 wxString* accumulator) {
608 if (!pos)
return false;
611 AisError nerr = AIS_GENERIC_ERROR;
612 if (g_pAIS) nerr = g_pAIS->DecodeSingleVDO(str, &gpd, accumulator);
613 if (nerr == AIS_NoError) {
634 if (g_bShowChartBar) {
636 if (cc && cc->GetPiano()) {
637 val = cc->GetPiano()->GetHeight();
643bool GetRoutepointGPX(
RoutePoint* pRoutePoint,
char* buffer,
644 unsigned int buffer_length) {
648 pgpx->AddGPXWaypoint(pRoutePoint);
649 wxString gpxfilename = wxFileName::CreateTempFileName(wxT(
"gpx"));
650 pgpx->SaveFile(gpxfilename);
653 wxFFile gpxfile(gpxfilename);
655 if (gpxfile.ReadAll(&s)) {
656 if (s.Length() < buffer_length) {
657 strncpy(buffer, (
const char*)s.mb_str(wxConvUTF8), buffer_length - 1);
663 ::wxRemoveFile(gpxfilename);
669 if (g_pRouteMan->IsAnyRouteActive())
670 return GetRoutepointGPX(g_pRouteMan->GetpActivePoint(), buffer,
677 double dist,
double* dlat,
679 PositionBearingDistanceMercator(lat, lon, brg, dist, dlat, dlon);
683 double lon1,
double* brg,
double* dist) {
684 DistanceBearingMercator(lat0, lon0, lat1, lon1, brg, dist);
689 return DistGreatCircle(slat, slon, dlat, dlon);
692void toTM_Plugin(
float lat,
float lon,
float lat0,
float lon0,
double* x,
694 toTM(lat, lon, lat0, lon0, x, y);
697void fromTM_Plugin(
double x,
double y,
double lat0,
double lon0,
double* lat,
699 fromTM(x, y, lat0, lon0, lat, lon);
702void toSM_Plugin(
double lat,
double lon,
double lat0,
double lon0,
double* x,
704 toSM(lat, lon, lat0, lon0, x, y);
707void fromSM_Plugin(
double x,
double y,
double lat0,
double lon0,
double* lat,
709 fromSM(x, y, lat0, lon0, lat, lon);
713 double* x,
double* y) {
714 toSM_ECC(lat, lon, lat0, lon0, x, y);
718 double* lat,
double* lon) {
719 fromSM_ECC(x, y, lat0, lon0, lat, lon);
723 return toUsrDistance(nm_distance,
unit);
727 return fromUsrDistance(usr_distance,
unit);
731 return toUsrSpeed(kts_speed,
unit);
735 return toUsrWindSpeed(kts_speed,
unit);
739 return fromUsrSpeed(usr_speed,
unit);
743 return fromUsrWindSpeed(usr_wspeed,
unit);
747 return toUsrTemp(cel_temp,
unit);
751 return fromUsrTemp(usr_temp,
unit);
755 return getUsrDistanceUnit(
unit);
761 return getUsrWindSpeedUnit(
unit);
770 return toUsrDepth(m_depth,
unit);
774 return fromUsrDepth(usr_depth,
unit);
788 static bool loaded =
false;
790 gshhsCrossesLandInit();
793 return gshhsCrossesLand(lat1, lon1, lat2, lon2);
809 const wxString& icon_ident,
810 const wxString& wp_name,
811 const wxString& GUID) {
812 wxDateTime now = wxDateTime::Now();
823PlugIn_Waypoint::~PlugIn_Waypoint() {}
826PlugIn_Route::PlugIn_Route(
void) {
pWaypointList =
new Plugin_WaypointList; }
828PlugIn_Route::~PlugIn_Route(
void) {
836PlugIn_Track::PlugIn_Track(
void) {
pWaypointList =
new Plugin_WaypointList; }
838PlugIn_Track::~PlugIn_Track(
void) {
848 wxString description) {
849 wxImage image = pimage->ConvertToImage();
850 WayPointmanGui(*pWayPointMan).ProcessIcon(image, key, description);
859 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
865 h->Link = link->
Link;
866 h->LType = link->
Type;
870 linknode = linknode->GetNext();
880 bool b_unique =
true;
881 wxRoutePointListNode* prpnode = pWayPointMan->GetWaypointList()->GetFirst();
889 prpnode = prpnode->GetNext();
892 if (!b_unique)
return false;
900 cloneHyperlinkList(pWP, pwaypoint);
910 pWP->
m_btemp = (b_permanent ==
false);
912 pSelect->AddSelectableRoutePoint(pwaypoint->
m_lat, pwaypoint->
m_lon, pWP);
915 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
918 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
919 pRouteManagerDialog->UpdateWptListCtrl();
926 bool b_found =
false;
927 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
929 if (prp) b_found =
true;
932 pWayPointMan->DestroyWaypoint(prp);
933 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
934 pRouteManagerDialog->UpdateWptListCtrl();
942 bool b_found =
false;
945 if (prp) b_found =
true;
948 double lat_save = prp->m_lat;
949 double lon_save = prp->m_lon;
951 prp->m_lat = pwaypoint->
m_lat;
952 prp->m_lon = pwaypoint->
m_lon;
965 wxPlugin_HyperlinkListNode* linknode =
972 h->Link = link->
Link;
973 h->LType = link->
Type;
977 linknode = linknode->GetNext();
982 if (prp) prp->ReLoadIcon();
984 auto canvas = gFrame->GetPrimaryCanvas();
985 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
986 canvas->GetScaleValue());
988 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
990 pFind->m_slat = pwaypoint->
m_lat;
991 pFind->m_slon = pwaypoint->
m_lon;
996 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
999 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1000 pRouteManagerDialog->UpdateWptListCtrl();
1009 dst->
m_lat = src->m_lat;
1010 dst->
m_lon = src->m_lon;
1033 h->
Link = link->Link;
1034 h->
Type = link->LType;
1038 linknode = linknode->GetNext();
1045 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
1047 if (!prp)
return false;
1049 PlugInFromRoutePoint(pwaypoint, prp);
1055 wxArrayString result;
1056 const RoutePointList* list = pWayPointMan->GetWaypointList();
1058 wxRoutePointListNode* prpnode = list->GetFirst();
1063 prpnode = prpnode->GetNext();
1070 wxArrayString result;
1071 RouteList* list = pRouteList;
1073 wxRouteListNode* prpnode = list->GetFirst();
1075 Route* proute = prpnode->GetData();
1076 result.Add(proute->
m_GUID);
1078 prpnode = prpnode->GetNext();
1085 wxArrayString result;
1086 for (
Track* ptrack : g_TrackList) {
1087 result.Add(ptrack->m_GUID);
1094 wxArrayString result;
1095 const RoutePointList* list = pWayPointMan->GetWaypointList();
1097 wxRoutePointListNode* prpnode = list->GetFirst();
1112 prpnode = prpnode->GetNext();
1119 wxArrayString result;
1120 RouteList* list = pRouteList;
1122 wxRouteListNode* prpnode = list->GetFirst();
1124 Route* proute = prpnode->GetData();
1127 result.Add(proute->
m_GUID);
1137 prpnode = prpnode->GetNext();
1144 wxArrayString result;
1145 for (
Track* ptrack : g_TrackList) {
1148 result.Add(ptrack->m_GUID);
1151 if (!ptrack->m_bIsInLayer) result.Add(ptrack->m_GUID);
1154 if (ptrack->m_bIsInLayer) result.Add(ptrack->m_GUID);
1163 wxArrayString result;
1165 for (
int i = 0; i < pWayPointMan->GetNumIcons(); i++) {
1166 wxString* ps = pWayPointMan->GetIconKey(i);
1178 wxDateTime plannedDeparture;
1180 wxPlugin_WaypointListNode* pwpnode = proute->
pWaypointList->GetFirst();
1182 pwp = pwpnode->GetData();
1188 cloneHyperlinkList(pWP, pwp);
1193 route->AddPoint(pWP);
1195 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
1198 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
1199 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
1206 pwpnode = pwpnode->GetNext();
1214 if (!proute->
m_GUID.IsEmpty()) {
1217 route->
m_btemp = (b_permanent ==
false);
1219 pRouteList->Append(route);
1223 NavObj_dB::GetInstance().InsertRoute(route);
1225 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1226 pRouteManagerDialog->UpdateRouteListCtrl();
1232 bool b_found =
false;
1235 Route* pRoute = g_pRouteMan->FindRouteByGUID(GUID);
1244 bool b_found =
false;
1247 Route* pRoute = g_pRouteMan->FindRouteByGUID(proute->
m_GUID);
1248 if (pRoute) b_found =
true;
1251 bool b_permanent = (pRoute->
m_btemp ==
false);
1266 wxPlugin_WaypointListNode* pwpnode = ptrack->
pWaypointList->GetFirst();
1268 pwp = pwpnode->GetData();
1273 track->AddPoint(pWP);
1276 pSelect->AddSelectableTrackSegment(pWP_src->m_lat, pWP_src->m_lon,
1277 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
1282 pwpnode = pwpnode->GetNext();
1288 track->m_GUID = ptrack->
m_GUID;
1289 track->m_btemp = (b_permanent ==
false);
1291 g_TrackList.push_back(track);
1292 if (b_permanent) NavObj_dB::GetInstance().InsertTrack(track);
1295 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1296 pRouteManagerDialog->UpdateTrkListCtrl();
1302 bool b_found =
false;
1305 Track* pTrack = g_pRouteMan->FindTrackByGUID(GUID);
1307 NavObj_dB::GetInstance().DeleteTrack(pTrack);
1312 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1313 pRouteManagerDialog->UpdateTrkListCtrl();
1319 bool b_found =
false;
1322 Track* pTrack = g_pRouteMan->FindTrackByGUID(ptrack->
m_GUID);
1323 if (pTrack) b_found =
true;
1326 bool b_permanent = (pTrack->m_btemp ==
false);
1327 NavObj_dB::GetInstance().DeleteTrack(pTrack);
1341 return glChartCanvas::HasNormalizedViewPort(ocpn_vp);
1367 glChartCanvas::NormalizedViewPort(ocpn_vp, lat, lon);
1386 pret->
MMSI = ptarget->MMSI;
1387 pret->
Class = ptarget->Class;
1389 pret->
SOG = ptarget->SOG;
1390 pret->
COG = ptarget->COG;
1391 pret->
HDG = ptarget->HDG;
1392 pret->
Lon = ptarget->Lon;
1393 pret->
Lat = ptarget->Lat;
1394 pret->
ROTAIS = ptarget->ROTAIS;
1395 pret->
ShipType = ptarget->ShipType;
1396 pret->
IMO = ptarget->IMO;
1398 pret->
Range_NM = ptarget->Range_NM;
1399 pret->
Brg = ptarget->Brg;
1403 pret->
TCPA = ptarget->TCPA;
1404 pret->
CPA = ptarget->CPA;
1408 memcpy(pret->CallSign, ptarget->CallSign,
sizeof(ptarget->CallSign) - 1);
1409 memcpy(pret->ShipName, ptarget->ShipName,
sizeof(ptarget->ShipName) - 1);
1428 gFrame->GetPrimaryCanvas()->DoRotateCanvas(rotation);
1434 gFrame->GetPrimaryCanvas()->DoTiltCanvas(tilt);
1438 gFrame->GetPrimaryCanvas()->SetVPProjection(projection);
1441OcpnSound* g_PluginSound = SoundFactory();
1442static void onPlugInPlaySoundExFinished(
void* ptr) {}
1446 bool ok = g_PluginSound->Load(sound_file, deviceIndex);
1448 wxLogWarning(
"Cannot load sound file: %s", sound_file);
1451 auto cmd_sound =
dynamic_cast<SystemCmdSound*
>(g_PluginSound);
1452 if (cmd_sound) cmd_sound->SetCmd(g_CmdSoundString.mb_str(wxConvUTF8));
1454 g_PluginSound->SetFinishedCallback(onPlugInPlaySoundExFinished, NULL);
1455 ok = g_PluginSound->Play();
1457 wxLogWarning(
"Cannot play sound file: %s", sound_file);
1463 return gFrame->GetPrimaryCanvas()->CheckEdgePan(x, y, dragging, margin,
1469 return style->GetIcon(name);
1473 gFrame->GetPrimaryCanvas()->pPlugIn_Cursor = pCursor;
1478 g_options->AddChartDir(path);
1484 g_options->pScanCheckBox->SetValue(
true);
1485 g_options->pUpdateCheckBox->SetValue(
true);
1491 g_options->pUpdateCheckBox->SetValue(
true);
1498 wxString Title, wxString initDir) {
1499 return g_Platform->DoDirSelectorDialog(parent, file_spec, Title, initDir);
1503 wxString Title, wxString initDir,
1504 wxString suggestedName, wxString wildcard) {
1505 return g_Platform->DoFileSelectorDialog(parent, file_spec, Title, initDir,
1506 suggestedName, wildcard);
1529 if (gFrame->GetPrimaryCanvas())
1530 vp.
ref_scale = gFrame->GetPrimaryCanvas()->GetVP().ref_scale;
1541 ViewPort ocpn_vp = CreateCompatibleViewportEx(vp);
1546 AISDraw(dc, ocpn_vp, NULL);
1550 return FontMgr::Get().
SetFontColor(TextElement, color);
1560 wxFontStyle style, wxFontWeight weight,
1561 bool underline,
const wxString& facename,
1562 wxFontEncoding encoding) {
1564 underline, facename, encoding);
1567int PluginGetMinAvailableGshhgQuality() {
1568 return gFrame->GetPrimaryCanvas()->GetMinAvailableGshhgQuality();
1570int PluginGetMaxAvailableGshhgQuality() {
1571 return gFrame->GetPrimaryCanvas()->GetMaxAvailableGshhgQuality();
1576 g_bPluginHandleAutopilotRoute = enable;
1579bool LaunchDefaultBrowser_Plugin(wxString url) {
1580 if (g_Platform) g_Platform->platformLaunchDefaultBrowser(url);
1590 if (cc && cc->GetSelectedRoutePoint()) {
1591 return cc->GetSelectedRoutePoint()->
m_GUID;
1593 return wxEmptyString;
1598 if (cc && cc->GetSelectedRoute()) {
1599 return cc->GetSelectedRoute()->
m_GUID;
1601 return wxEmptyString;
1606 if (cc && cc->GetSelectedTrack()) {
1607 return cc->GetSelectedTrack()->m_GUID;
1609 return wxEmptyString;
1619 std::unique_ptr<PlugIn_Route> r;
1620 Route* route = g_pRouteMan->FindRouteByGUID(GUID);
1621 if (route ==
nullptr)
return r;
1631 src_wp = node->GetData();
1634 PlugInFromRoutePoint(dst_wp, src_wp);
1638 node = node->GetNext();
1649 std::unique_ptr<PlugIn_Track> t;
1651 Track* pTrack = g_pRouteMan->FindTrackByGUID(GUID);
1652 if (!pTrack)
return t;
1654 std::unique_ptr<PlugIn_Track> tk =
1659 dst_track->
m_EndString = pTrack->m_TrackEndString;
1660 dst_track->
m_GUID = pTrack->m_GUID;
1662 for (
int i = 0; i < pTrack->GetnPoints(); i++) {
1667 dst_wp->
m_lat = ptp->m_lat;
1668 dst_wp->
m_lon = ptp->m_lon;
1681 return g_overlayCanvas;
1687 auto oCanvas =
dynamic_cast<ChartCanvas*
>(canvas);
1688 if (oCanvas) gFrame->JumpToPosition(oCanvas, lat, lon,
scale);
1696 ChartCanvas* l_canvas = gFrame->GetCanvasUnderMouse();
1698 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); ++i) {
1699 if (l_canvas == g_canvasArray[i])
return i;
1717 if (g_canvasConfig == 0)
1718 return gFrame->GetPrimaryCanvas();
1720 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1721 return g_canvasArray[canvasIndex];
1729 if (g_canvasConfig == 0)
1730 return gFrame->GetPrimaryCanvas()->CheckEdgePan(x, y, dragging, margin,
1733 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1734 return g_canvasArray[canvasIndex]->CheckEdgePan(x, y, dragging, margin,
1743 if (g_canvasConfig == 0)
1744 gFrame->GetPrimaryCanvas()->pPlugIn_Cursor = pCursor;
1746 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1747 g_canvasArray[canvasIndex]->pPlugIn_Cursor = pCursor;
1753 if (g_canvasConfig == 1)
return 2;
1762 return g_MainToolbar->GetToolbarRect();
1764 return wxRect(0, 0, 1, 1);
1773 g_pRouteMan->ZeroCurrentXTEToActivePoint();
1794 pivp.
lat_min = tvp.GetBBox().GetMinLat();
1795 pivp.
lat_max = tvp.GetBBox().GetMaxLat();
1796 pivp.
lon_min = tvp.GetBBox().GetMinLon();
1797 pivp.
lon_max = tvp.GetBBox().GetMaxLon();
1799 pivp.
bValid = tvp.IsValid();
1804ListOfPI_S57Obj* PlugInManager::GetLightsObjRuleListVisibleAtLatLon(
1806 ListOfPI_S57Obj* list = NULL;
1820 list = picbx->GetLightsObjRuleListVisibleAtLatLon(zlat, zlon, &pi_vp);
1831#include <wx/listimpl.cpp>
1832WX_DEFINE_LIST(Plugin_WaypointExList)
1835PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex() {
InitDefaults(); }
1837PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex(
1838 double lat,
double lon,
const wxString& icon_ident,
const wxString& wp_name,
1839 const wxString& GUID,
const double ScaMin,
const bool bNameVisible,
1840 const int nRangeRings,
const double RangeDistance,
1841 const wxColor RangeColor) {
1873 if (!prp)
return false;
1875 if (prp->
m_bIsInRoute && !prp->IsShared())
return false;
1886 wxRouteListNode* node = pRouteList->GetFirst();
1888 Route* proute = node->GetData();
1892 if (prp == pWP) nCount++;
1893 pnode = pnode->GetNext();
1896 node = node->GetNext();
1902PlugIn_Waypoint_Ex::~PlugIn_Waypoint_Ex() {}
1904WX_DEFINE_LIST(Plugin_WaypointExV2List)
1906PlugIn_Waypoint_ExV2::PlugIn_Waypoint_ExV2() {
InitDefaults(); }
1908PlugIn_Waypoint_ExV2::PlugIn_Waypoint_ExV2(
1909 double lat,
double lon,
const wxString& icon_ident,
const wxString& wp_name,
1910 const wxString& GUID,
const double ScaMin,
const double ScaMax,
1911 const bool bNameVisible,
const int nRangeRings,
const double RangeDistance,
1912 const int RangeDistanceUnits,
const wxColor RangeColor,
1913 const double WaypointArrivalRadius,
const bool ShowWaypointRangeRings,
1914 const double PlannedSpeed,
const wxString TideStation) {
1960PlugIn_Waypoint_ExV2::~PlugIn_Waypoint_ExV2() {}
1964 if (!prp)
return false;
1965 if (prp->
m_bIsInRoute && !prp->IsShared())
return false;
1975 wxRouteListNode* node = pRouteList->GetFirst();
1977 Route* proute = node->GetData();
1981 if (prp == pWP) nCount++;
1982 pnode = pnode->GetNext();
1985 node = node->GetNext();
1991PlugIn_Route_ExV2::PlugIn_Route_ExV2() {
2003 wxDateTime now = wxDateTime::Now();
2004 m_GUID = wxString::Format(
"RT%d%d%d%d", (
int)now.GetMillisecond(),
2005 (
int)now.GetSecond(), (
int)now.GetMinute(),
2006 (
int)now.GetHour());
2010PlugIn_Route_ExV2::~PlugIn_Route_ExV2() {
2020 dst->
m_lat = src->m_lat;
2021 dst->
m_lon = src->m_lon;
2022 dst->
IconName = src->GetIconName();
2025 dst->
IconDescription = pWayPointMan->GetIconDescription(src->GetIconName());
2044 h->
Link = link->Link;
2045 h->
Type = link->LType;
2049 linknode = linknode->GetNext();
2063 dst->
scamin = src->GetScaMin();
2067 dst->
scamax = src->GetScaMax();
2076 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
2078 if (!prp)
return false;
2080 PlugInExV2FromRoutePoint(pwaypoint, prp);
2085static void cloneHyperlinkListExV2(
RoutePoint* dst,
2091 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
2097 h->Link = link->
Link;
2098 h->LType = link->
Type;
2102 linknode = linknode->GetNext();
2113 cloneHyperlinkListExV2(pWP, src);
2123 pWP->
m_btemp = (b_permanent ==
false);
2132 pWP->SetScaMin(src->
scamin);
2139 pWP->SetScaMax(src->
scamax);
2141 if (src->
m_ETD.IsValid())
2144 pWP->
SetETD(wxEmptyString);
2154 bool b_unique =
true;
2155 wxRoutePointListNode* prpnode = pWayPointMan->GetWaypointList()->GetFirst();
2163 prpnode = prpnode->GetNext();
2166 if (!b_unique)
return false;
2168 RoutePoint* pWP = CreateNewPoint(pwaypointex, b_permanent);
2170 pWP->SetShowWaypointRangeRings(pwaypointex->
nrange_rings > 0);
2172 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2175 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
2178 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2179 pRouteManagerDialog->UpdateWptListCtrl();
2186 bool b_found =
false;
2189 if (prp) b_found =
true;
2192 double lat_save = prp->m_lat;
2193 double lon_save = prp->m_lon;
2195 prp->m_lat = pwaypoint->
m_lat;
2196 prp->m_lon = pwaypoint->
m_lon;
2197 prp->SetIconName(pwaypoint->
IconName);
2209 wxPlugin_HyperlinkListNode* linknode =
2216 h->Link = link->
Link;
2217 h->LType = link->
Type;
2221 linknode = linknode->GetNext();
2227 prp->SetWaypointRangeRingsNumber(pwaypoint->
nrange_rings);
2232 prp->SetScaMin(pwaypoint->
scamin);
2236 prp->SetShowWaypointRangeRings(pwaypoint->
nrange_rings > 0);
2238 if (prp) prp->ReLoadIcon();
2240 auto canvas = gFrame->GetPrimaryCanvas();
2241 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
2242 canvas->GetScaleValue());
2244 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
2246 pFind->m_slat = pwaypoint->
m_lat;
2247 pFind->m_slon = pwaypoint->
m_lon;
2252 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
2255 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2256 pRouteManagerDialog->UpdateWptListCtrl();
2259 if (pwaypoint->
m_ETD.IsValid())
2262 prp->
SetETD(wxEmptyString);
2265 prp->SetScaMax(pwaypoint->
scamax);
2272 const wxString& GUID) {
2284 wxDateTime plannedDeparture;
2286 wxPlugin_WaypointExV2ListNode* pwpnode = proute->
pWaypointList->GetFirst();
2288 pwaypointex = pwpnode->GetData();
2290 pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->
m_GUID);
2292 pWP = CreateNewPoint(pwaypointex, b_permanent);
2296 route->AddPoint(pWP);
2298 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2301 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
2302 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
2309 pwpnode = pwpnode->GetNext();
2317 if (!proute->
m_GUID.IsEmpty()) {
2320 route->
m_btemp = (b_permanent ==
false);
2324 pRouteList->Append(route);
2328 NavObj_dB::GetInstance().InsertRoute(route);
2331 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2332 pRouteManagerDialog->UpdateRouteListCtrl();
2338 bool b_found =
false;
2341 Route* pRoute = g_pRouteMan->FindRouteByGUID(proute->
m_GUID);
2342 if (pRoute) b_found =
true;
2345 bool b_permanent = !pRoute->
m_btemp;
2355 std::unique_ptr<PlugIn_Route_ExV2> r;
2356 Route* route = g_pRouteMan->FindRouteByGUID(GUID);
2357 if (route ==
nullptr)
return r;
2366 src_wp = node->GetData();
2369 PlugInExV2FromRoutePoint(dst_wp, src_wp);
2373 node = node->GetNext();
2379 dst_route->
m_isActive = g_pRouteMan->GetpActiveRoute() == route;
2387PlugIn_Route_Ex::PlugIn_Route_Ex(
void) {
2391PlugIn_Route_Ex::~PlugIn_Route_Ex(
void) {
2403 dst->
m_lat = src->m_lat;
2404 dst->
m_lon = src->m_lon;
2405 dst->
IconName = src->GetIconName();
2408 dst->
IconDescription = pWayPointMan->GetIconDescription(src->GetIconName());
2427 h->
Link = link->Link;
2428 h->
Type = link->LType;
2432 linknode = linknode->GetNext();
2444 dst->
scamin = src->GetScaMin();
2449static void cloneHyperlinkListEx(
RoutePoint* dst,
2455 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
2461 h->Link = link->
Link;
2462 h->LType = link->
Type;
2466 linknode = linknode->GetNext();
2477 cloneHyperlinkListEx(pWP, src);
2487 pWP->
m_btemp = (b_permanent ==
false);
2494 pWP->SetScaMin(src->
scamin);
2503 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
2505 if (!prp)
return false;
2507 PlugInExFromRoutePoint(pwaypoint, prp);
2517 bool b_unique =
true;
2518 wxRoutePointListNode* prpnode = pWayPointMan->GetWaypointList()->GetFirst();
2526 prpnode = prpnode->GetNext();
2529 if (!b_unique)
return false;
2531 RoutePoint* pWP = CreateNewPoint(pwaypointex, b_permanent);
2533 pWP->SetShowWaypointRangeRings(pwaypointex->
nrange_rings > 0);
2535 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2538 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
2540 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2541 pRouteManagerDialog->UpdateWptListCtrl();
2548 bool b_found =
false;
2551 if (prp) b_found =
true;
2554 double lat_save = prp->m_lat;
2555 double lon_save = prp->m_lon;
2557 prp->m_lat = pwaypoint->
m_lat;
2558 prp->m_lon = pwaypoint->
m_lon;
2559 prp->SetIconName(pwaypoint->
IconName);
2571 wxPlugin_HyperlinkListNode* linknode =
2578 h->Link = link->
Link;
2579 h->LType = link->
Type;
2583 linknode = linknode->GetNext();
2589 prp->SetWaypointRangeRingsNumber(pwaypoint->
nrange_rings);
2592 prp->SetScaMin(pwaypoint->
scamin);
2596 prp->SetShowWaypointRangeRings(pwaypoint->
nrange_rings > 0);
2598 if (prp) prp->ReLoadIcon();
2600 auto canvas = gFrame->GetPrimaryCanvas();
2601 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
2602 canvas->GetScaleValue());
2604 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
2606 pFind->m_slat = pwaypoint->
m_lat;
2607 pFind->m_slon = pwaypoint->
m_lon;
2612 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
2615 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2616 pRouteManagerDialog->UpdateWptListCtrl();
2628 wxDateTime plannedDeparture;
2630 wxPlugin_WaypointExListNode* pwpnode = proute->
pWaypointList->GetFirst();
2632 pwaypointex = pwpnode->GetData();
2634 pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->
m_GUID);
2636 pWP = CreateNewPoint(pwaypointex, b_permanent);
2640 route->AddPoint(pWP);
2642 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2645 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
2646 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
2653 pwpnode = pwpnode->GetNext();
2661 if (!proute->
m_GUID.IsEmpty()) {
2664 route->
m_btemp = (b_permanent ==
false);
2668 pRouteList->Append(route);
2672 NavObj_dB::GetInstance().InsertRoute(route);
2675 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2676 pRouteManagerDialog->UpdateRouteListCtrl();
2682 bool b_found =
false;
2685 Route* pRoute = g_pRouteMan->FindRouteByGUID(proute->
m_GUID);
2686 if (pRoute) b_found =
true;
2689 bool b_permanent = !pRoute->
m_btemp;
2704 std::unique_ptr<PlugIn_Route_Ex> r;
2705 Route* route = g_pRouteMan->FindRouteByGUID(GUID);
2706 if (route ==
nullptr)
return r;
2716 src_wp = node->GetData();
2719 PlugInExFromRoutePoint(dst_wp, src_wp);
2723 node = node->GetNext();
2729 dst_route->
m_isActive = g_pRouteMan->GetpActiveRoute() == route;
2738 RoutePoint* rp = g_pRouteMan->GetpActivePoint();
2740 return wxEmptyString;
2747 Route* rt = g_pRouteMan->GetpActiveRoute();
2749 return wxEmptyString;
2759 MyApp& app = wxGetApp();
2760 return (app.m_comm_bridge.GetPriorityMaps());
2764 MyApp& app = wxGetApp();
2765 app.m_comm_bridge.UpdateAndApplyMaps(map);
2769 std::vector<std::string> result;
2771 MyApp& app = wxGetApp();
2774 app.m_comm_bridge.GetPriorityContainer(
"position").active_source;
2775 result.push_back(
id);
2776 id = app.m_comm_bridge.GetPriorityContainer(
"velocity").active_source;
2777 result.push_back(
id);
2778 id = app.m_comm_bridge.GetPriorityContainer(
"heading").active_source;
2779 result.push_back(
id);
2780 id = app.m_comm_bridge.GetPriorityContainer(
"variation").active_source;
2781 result.push_back(
id);
2782 id = app.m_comm_bridge.GetPriorityContainer(
"satellites").active_source;
2783 result.push_back(
id);
2790#if defined(__WXOSX__) || defined(__WXGTK3__)
2792 if (gFrame) rv = gFrame->GetContentScaleFactor();
2797 double scaler = 1.0;
2799 if (gFrame) scaler = (double)(gFrame->ToDIP(100)) / 100.;
2816 bool state = gFrame->IsFullScreen();
2817 if (set_full_screen_on && !state)
2818 gFrame->ToggleFullScreen();
2819 else if (!set_full_screen_on && state)
2820 gFrame->ToggleFullScreen();
2823extern bool g_useMUI;
2825 bool current_mui_state = g_useMUI;
2828 if (enable && !current_mui_state) {
2830 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2832 if (cc) cc->CreateMUIBar();
2834 }
else if (!enable && current_mui_state) {
2836 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2838 if (cc) cc->DestroyMuiBar();
2847 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2848 if (cc) cc->SetShowGPSCompassWindow(enable);
2854 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2856 return cc->GetShowGPSCompassWindow();
2863extern bool g_bShowStatusBar;
2865 g_bShowStatusBar = enable;
2866 gFrame->ConfigureStatusBar();
2872 bool current_chartbar_state = g_bShowChartBar;
2873 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2875 if (current_chartbar_state && !enable) {
2876 gFrame->ToggleChartBar(cc);
2877 g_bShowChartBar = current_chartbar_state;
2878 }
else if (!current_chartbar_state && enable) {
2879 gFrame->ToggleChartBar(cc);
2880 g_bShowChartBar = current_chartbar_state;
2883 g_bShowChartBar = enable;
2888extern bool g_bShowMenuBar;
2891 if (g_bShowMenuBar) {
2892 g_bShowMenuBar =
false;
2893 if (gFrame->m_pMenuBar) {
2894 gFrame->SetMenuBar(NULL);
2895 gFrame->m_pMenuBar->Destroy();
2896 gFrame->m_pMenuBar = NULL;
2900 g_bShowMenuBar =
true;
2901 gFrame->BuildMenuBar();
2908 if (ps52plib) ps52plib->m_chartSymbols.UpdateTableColor(table, name, color);
2912 wxColor ret = wxColor(*wxRED);
2914 int i_table = ps52plib->m_chartSymbols.FindColorTable(map_name.c_str());
2915 ret = ps52plib->m_chartSymbols.GetwxColor(name.c_str(), i_table);
2922 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2923 if (cc) cc->SetShowGrid(enable);
2929 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2930 if (cc) cc->SetShowOutlines(enable);
2936 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2937 if (cc) cc->SetShowDepthUnits(enable);
2943 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2944 if (cc) cc->SetShowAIS(enable);
2950 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2951 if (cc) cc->ShowTides(enable);
2957 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2958 if (cc) cc->ShowCurrents(enable);
2964 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2965 if (cc) cc->SetShowENCText(enable);
2971 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2972 if (cc) cc->SetShowENCDepth(enable);
2978 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2979 if (cc) cc->SetShowENCBuoyLabels(enable);
2985 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2986 if (cc) cc->SetShowENCLights(enable);
2992 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2993 if (cc) cc->SetShowENCLightDesc(enable);
2998 int valSet = STANDARD;
3001 valSet = DISPLAYBASE;
3010 valSet = MARINERS_STANDARD;
3017 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3018 if (cc) cc->SetENCDisplayCategory(valSet);
3022 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3024 return ((
PI_DisCat)cc->GetENCDisplayCategory());
3026 return PI_DisCat::PI_STANDARD;
3030 int newMode = NORTH_UP_MODE;
3032 newMode = COURSE_UP_MODE;
3034 newMode = HEAD_UP_MODE;
3037 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3038 if (cc) cc->SetUpMode(newMode);
3043 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3044 if (cc)
return ((
PI_NavMode)cc->GetUpMode());
3046 return PI_NavMode::PI_NORTH_UP_MODE;
3051 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3052 if (cc)
return (cc->GetShowGrid());
3059 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3060 if (cc)
return (cc->GetShowOutlines());
3067 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3068 if (cc)
return (cc->GetShowDepthUnits());
3075 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3076 if (cc)
return (cc->GetShowAIS());
3083 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3084 if (cc)
return (cc->GetbShowTide());
3091 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3092 if (cc)
return (cc->GetbShowCurrent());
3099 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3100 if (cc)
return (cc->GetShowENCText());
3107 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3108 if (cc)
return (cc->GetShowENCDepth());
3115 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3116 if (cc)
return (cc->GetShowENCBuoyLabels());
3123 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3124 if (cc)
return (cc->GetShowENCLights());
3129bool GetShowENCLightDesc(
int CanvasIndex) {
3131 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3132 if (cc)
return (cc->GetbShowCurrent());
3143 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3144 if (cc) cc->ToggleLookahead();
3150 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3151 if (cc)
return (cc->GetLookahead());
3156extern bool g_bTrackActive;
3158 if (!g_bTrackActive && enable)
3160 else if (g_bTrackActive && !enable)
3166 gFrame->SetAndApplyColorScheme((ColorScheme)cs);
3173 if (win) win->Refresh(eraseBackground);
3177 if (g_canvasConfig == 1) {
3182 gFrame->CreateCanvasLayout();
3183 gFrame->DoChartUpdate();
3188 gFrame->CreateCanvasLayout();
3189 gFrame->DoChartUpdate();
3200 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3207 g_disable_main_toolbar = !enable;
3208 if (g_MainToolbar) g_MainToolbar->RefreshToolbar();
3212 if (gFrame) gFrame->ScheduleSettingsDialog();
3217 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3219 bool bfollow = cc->GetbFollow();
3220 cc->ResetOwnshipOffset();
3224 cc->JumpToPosition(gLat, gLon, cc->
GetVPScale());
3231 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3233 if (cc->GetbFollow() != enable_follow) cc->TogglebFollow();
3240 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3241 if (cc)
return cc->GetbFollow();
3248 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3249 if (cc) cc->SetShowFocusBar(enable);
3254 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3255 if (cc)
return (cc->GetShowFocusBar());
3269 pConfig->LoadMyConfigRaw(
false);
3272 pConfig->LoadCanvasConfigs(
false);
3273 auto& config_array = ConfigMgr::Get().GetCanvasConfigArray();
3274 for (
auto pcc : config_array) {
3275 if (pcc && pcc->canvas) {
3276 pcc->canvas->ApplyCanvasConfig(pcc);
3277 pcc->canvas->Refresh();
3287 g_CanvasHideNotificationIcon = !enable;
3296wxString DropMarkPI(
double lat,
double lon) {
3297 if ((fabs(lat) > 80.0) || (fabs(lon) > 180.))
return "";
3300 new RoutePoint(lat, lon, g_default_wp_icon, wxEmptyString, wxEmptyString);
3302 pSelect->AddSelectableRoutePoint(lat, lon, pWP);
3303 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
3307wxString RouteCreatePI(
int canvas_index,
bool start) {
3308 if ((
size_t)canvas_index < g_canvasArray.GetCount()) {
3309 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3315 return cc->FinishRoute();
3322bool DoMeasurePI(
int canvas_index,
bool start) {
3323 if ((
size_t)canvas_index < g_canvasArray.GetCount()) {
3324 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3327 cc->StartMeasureRoute();
3330 cc->CancelMeasureRoute();
3339wxString NavToHerePI(
double lat,
double lon) {
3341 new RoutePoint(lat, lon, g_default_wp_icon, wxEmptyString, wxEmptyString);
3342 pSelect->AddSelectableRoutePoint(lat, lon, pWP_dest);
3345 wxEmptyString, wxEmptyString);
3346 pSelect->AddSelectableRoutePoint(gLat, gLon, pWP_src);
3349 pRouteList->Append(temp_route);
3351 temp_route->AddPoint(pWP_src);
3352 temp_route->AddPoint(pWP_dest);
3354 pSelect->AddSelectableRouteSegment(gLat, gLon, lat, lon, pWP_src, pWP_dest,
3362 if (g_pRouteMan->GetpActiveRoute()) g_pRouteMan->DeactivateRoute();
3365 return temp_route->
m_GUID;
3368bool ActivateRoutePI(wxString route_guid,
bool activate) {
3369 Route* route = g_pRouteMan->FindRouteByGUID(route_guid);
3370 if (!route)
return false;
3373 if (g_pRouteMan->GetpActiveRoute()) g_pRouteMan->DeactivateRoute();
3375 g_pRouteMan->FindBestActivatePoint(route, gLat, gLon, gCog, gSog);
3380 g_pRouteMan->DeactivateRoute();
3387void EnableDefaultConsole(
bool enable) { g_bhide_route_console = !enable; }
3388void EnableDefaultContextMenus(
bool enable) { g_bhide_context_menus = !enable; }
3390void SetMinZoomScale(
double min_scale) {
3391 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
3393 cc->SetAbsoluteMinScale(min_scale);
3397void SetMaxZoomScale(
double max_scale) {
3398 g_maxzoomin = wxRound(wxMax(max_scale, 100.));
3401std::shared_ptr<PI_PointContext> GetContextAtPoint(
int x,
int y,
3403 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3405 return cc->GetCanvasContextAtPoint(x, y);
3407 auto rstruct = std::make_shared<PI_PointContext>();
3408 rstruct->object_type = OBJECT_UNKNOWN;
3409 rstruct->object_ident =
"";
3414wxBitmap GetObjectIcon_PlugIn(
const wxString& name) {
3416 return *pWayPointMan->GetIconBitmap(name);
3418 return wxNullBitmap;
ChartCanvas - Main chart display and interaction component.
float GetVPScale()
Return the ViewPort scale factor, in physical pixels per meter.
void ZoomCanvasSimple(double factor)
Perform an immediate zoom operation without smooth transitions.
Manages the chart database and provides access to chart data.
bool LoadBinary(const wxString &filename, ArrayOfCDI &dir_array_check)
Load the chart database from a binary file.
Wrapper class for plugin-based charts.
wxFont * FindOrCreateFont(int point_size, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underline=false, const wxString &facename=wxEmptyString, wxFontEncoding encoding=wxFONTENCODING_DEFAULT)
Creates or finds a matching font in the font cache.
wxColour GetFontColor(const wxString &TextElement) const
Gets the text color for a UI element.
bool AddAuxKey(wxString key)
Adds new plugin-defined font configuration key.
bool SetFontColor(const wxString &TextElement, const wxColour color) const
Sets the text color for a UI element.
static wxString GetUUID(void)
Return a unique RFC4122 version 4 compliant GUID string.
Extended OpenGL-optimized chart base class with additional querying capabilities.
virtual ListOfPI_S57Obj * GetLightsObjRuleListVisibleAtLatLon(float lat, float lon, PlugIn_ViewPort *VPoint)
Gets list of visible light objects at specified position.
Basic data for a loaded plugin, trivially copyable.
AIS target information accessible to plugins.
double HDG
Heading in degrees true.
int ROTAIS
Rate of turn as indicated in AIS message.
unsigned char ShipType
Ship type as per ITU-R M.1371.
double Lat
Latitude in decimal degrees.
int MMSI
Maritime Mobile Service Identity number.
bool bCPA_Valid
True if CPA calculation is valid.
double Brg
Bearing to target in degrees true.
double Lon
Longitude in decimal degrees.
double CPA
Closest Point of Approach in nautical miles.
int Class
AIS class (Class A: 0, Class B: 1)
double SOG
Speed over ground in knots.
double Range_NM
Range to target in nautical miles.
int NavStatus
Navigational status (0-15 as per ITU-R M.1371)
int IMO
IMO ship identification number.
double TCPA
Time to Closest Point of Approach in minutes.
double COG
Course over ground in degrees.
plugin_ais_alarm_type alarm_state
Current alarm state for this target.
Extended position fix information.
int nSats
Number of satellites used in the fix.
double Var
Magnetic variation in degrees, typically from RMC message.
double Cog
Course over ground in degrees [0-360).
double Lat
Latitude in decimal degrees.
double Hdm
Heading magnetic in degrees [0-360).
time_t FixTime
UTC time of fix.
double Lon
Longitude in decimal degrees.
double Sog
Speed over ground in knots.
double Hdt
Heading true in degrees [0-360).
Enhanced route class for working with PlugIn_Waypoint_ExV2 waypoints.
bool m_isVisible
True if route should be displayed.
Plugin_WaypointExV2List * pWaypointList
List of waypoints making up this route in order.
wxString m_StartString
Description of route start point.
wxString m_Description
Optional route description/notes.
wxString m_NameString
User-visible name of the route.
bool m_isActive
True if this is the active route.
wxString m_GUID
Globally unique identifier.
wxString m_EndString
Description of route end point.
Extended route class for managing complex route features.
wxString m_Description
Optional route description/notes.
wxString m_EndString
Description of route end point.
Plugin_WaypointExList * pWaypointList
List of waypoints making up this route in order.
wxString m_NameString
User-visible name of the route.
bool m_isVisible
True if route should be displayed.
wxString m_GUID
Globally unique identifier.
bool m_isActive
True if this is the active route.
wxString m_StartString
Description of route start point.
Plugin route class for managing ordered waypoint collections.
wxString m_GUID
Globally unique identifier.
wxString m_EndString
Name/description of ending point.
wxString m_NameString
Route name.
Plugin_WaypointList * pWaypointList
List of waypoints making up this route in order.
wxString m_StartString
Name/description of starting point.
Plugin track class for managing recorded track data.
Plugin_WaypointList * pWaypointList
List of waypoints making up this track in chronological order.
wxString m_GUID
Globally unique identifier.
wxString m_EndString
Description of track end point/time.
wxString m_StartString
Description of track start point/time.
wxString m_NameString
Display name of the track.
Contains view parameters and status information for a chart display viewport.
double view_scale_ppm
Display scale in pixels per meter.
wxRect rv_rect
Rectangle defining the rendered view area.
int pix_width
Viewport width in pixels.
double lon_max
Maximum longitude of the viewport.
double clon
Center longitude of the viewport in decimal degrees.
double lat_max
Maximum latitude of the viewport.
int pix_height
Viewport height in pixels.
double clat
Center latitude of the viewport in decimal degrees.
double skew
Display skew angle in radians.
double rotation
Display rotation angle in radians.
bool bValid
True if this viewport is valid and can be used for rendering.
double lon_min
Minimum longitude of the viewport.
double lat_min
Minimum latitude of the viewport.
int m_projection_type
Chart projection type (PROJECTION_MERCATOR, etc.)
bool b_quilt
True if the viewport is in quilt mode (showing multiple charts)
float chart_scale
Conventional chart displayed scale (e.g., 1:50000)
wxDateTime m_ETD
Estimated departure time in UTC, or wxInvalidDateTime if not set.
wxString m_MarkDescription
Optional description text.
int GetRouteMembershipCount()
Gets number of routes containing this waypoint.
wxString m_GUID
Globally unique identifier.
wxString m_TideStation
Tide Station Identifier.
void InitDefaults()
Initializes waypoint properties to default values.
wxDateTime m_CreateTime
Creation timestamp in UTC.
bool m_bShowWaypointRangeRings
True to show range rings on chart.
wxString IconDescription
User-friendly description of icon.
double m_lat
Latitude in decimal degrees.
wxColour RangeRingColor
Color to draw range rings.
bool IsActive
Active state (e.g. destination)
Plugin_HyperlinkList * m_HyperlinkList
List of hyperlinks associated with this waypoint.
double scamin
Minimum display scale (1:X) for waypoint visibility.
double scamax
Maximum display scale (1:X) for waypoint visibility.
bool b_useScamin
True to enable scale-dependent visibility.
wxString IconName
Name of icon to use for waypoint symbol.
bool IsNameVisible
True to show waypoint name on chart.
double m_PlannedSpeed
Planned speed for next leg (knots)
double RangeRingSpace
Distance between range rings in preferred units.
double m_lon
Longitude in decimal degrees.
double m_WaypointArrivalRadius
Arrival radius in nautical miles.
int RangeRingSpaceUnits
Units for range ring spacing - 0:nm, 1:km.
wxString m_MarkName
Display name of waypoint.
bool IsVisible
Visibility state on chart.
int nrange_rings
Number of range rings to display around waypoint.
bool GetFSStatus()
Gets "free-standing" status of waypoint.
Extended waypoint class with additional navigation features.
bool GetFSStatus()
Gets "free-standing" status of waypoint.
wxDateTime m_CreateTime
Creation timestamp in UTC.
wxColour RangeRingColor
Color to draw range rings.
int nrange_rings
Number of range rings to display around waypoint.
wxString IconDescription
User-friendly description of icon.
bool b_useScamin
True to enable scale-dependent visibility.
double RangeRingSpace
Distance between range rings in preferred units.
Plugin_HyperlinkList * m_HyperlinkList
List of hyperlinks associated with this waypoint.
wxString m_MarkName
Display name of waypoint.
wxString m_GUID
Globally unique identifier.
double m_lon
Longitude in decimal degrees.
wxString IconName
Name of icon to use for waypoint symbol.
void InitDefaults()
Initializes waypoint properties to default values.
double scamin
Minimum display scale (1:X) for waypoint visibility.
bool IsNameVisible
True to show waypoint name on chart.
double m_lat
Latitude in decimal degrees.
wxString m_MarkDescription
Optional description text.
int GetRouteMembershipCount()
Gets number of routes containing this waypoint.
bool IsActive
Active state (e.g. destination)
bool IsVisible
Visibility state on chart.
Plugin waypoint class providing core waypoint/mark functionality.
double m_lon
Longitude in decimal degrees.
wxString m_IconName
Icon identifier.
wxString m_MarkDescription
Optional description.
wxString m_GUID
Globally unique identifier.
bool m_IsVisible
Visibility state.
PlugIn_Waypoint()
Default constructor - creates waypoint at 0,0.
wxDateTime m_CreateTime
Creation timestamp in UTC.
wxString m_MarkName
Display name.
double m_lat
Latitude in decimal degrees.
Plugin_HyperlinkList * m_HyperlinkList
List of associated hyperlinks.
Class representing a hyperlink associated with a waypoint or route.
wxString Link
The actual URL or file path.
wxString DescrText
User-visible description of the link.
wxString Type
Link type identifier (e.g., "Website", "Chart", "Image")
Represents a waypoint or mark within the navigation system.
HyperlinkList * m_HyperlinkList
List of hyperlinks associated with this waypoint.
wxColour m_wxcWaypointRangeRingsColour
Color for the range rings display.
wxString m_MarkDescription
Description text for the waypoint.
int m_iWaypointRangeRingsNumber
Number of range rings to display around the waypoint.
void SetCreateTime(wxDateTime dt)
Sets the create time of this RoutePoint in UTC.
wxString m_GUID
Globally Unique Identifier for the waypoint.
bool m_bIsolatedMark
Flag indicating if the waypoint is a standalone mark.
bool m_bIsActive
Flag indicating if this waypoint is active for navigation.
wxDateTime GetManualETD()
Retrieves the manually set Estimated Time of Departure for this waypoint, in UTC.
bool m_bIsInRoute
Flag indicating if this waypoint is part of a route.
bool m_bShowName
Flag indicating if the waypoint name should be shown.
double GetPlannedSpeed()
Return the planned speed associated with this waypoint.
bool m_bIsInLayer
Flag indicating if the waypoint belongs to a layer.
bool m_btemp
Flag indicating if this is a temporary waypoint.
int m_iWaypointRangeRingsStepUnits
Units for the range rings step (0=nm, 1=km).
wxDateTime GetCreateTime(void)
Returns the Create Time of this RoutePoint in UTC.
float m_fWaypointRangeRingsStep
Distance between consecutive range rings.
wxString m_TideStation
Associated tide station identifier.
void SetETD(const wxDateTime &etd)
Sets the Estimated Time of Departure for this waypoint, in UTC.
Represents a navigational route in the navigation system.
bool m_bRtIsSelected
Flag indicating whether this route is currently selected in the UI.
wxString m_RouteStartString
Name or description of the route's starting point.
wxString m_RouteDescription
Additional descriptive information about the route.
RoutePointList * pRoutePointList
Ordered list of waypoints (RoutePoints) that make up this route.
bool m_bDeleteOnArrival
Flag indicating whether the route should be deleted once navigation reaches the end.
wxString m_RouteEndString
Name or description of the route's ending point.
bool m_btemp
Flag indicating if this is a temporary route.
wxString m_RouteNameString
User-assigned name for the route.
wxString m_GUID
Globally unique identifier for this route.
wxDateTime m_PlannedDeparture
Planned departure time for the route, in UTC.
bool m_bIsInLayer
Flag indicating whether this route belongs to a layer.
bool DeleteRoute(Route *pRoute)
bool ActivateRoute(Route *pRouteToActivate, RoutePoint *pStartPoint=NULL)
Activates a route for navigation.
Manages a set of ShapeBaseChart objects at different resolutions.
Represents a single point in a track.
wxDateTime GetCreateTime(void)
Retrieves the creation timestamp of a track point as a wxDateTime object.
void SetCreateTime(wxDateTime dt)
Sets the creation timestamp for a track point.
Represents a track, which is a series of connected track points.
ViewPort - Core geographic projection and coordinate transformation engine.
double view_scale_ppm
Requested view scale in physical pixels per meter (ppm), before applying projections.
double ref_scale
The nominal scale of the "reference chart" for this view.
int pix_height
Height of the viewport in physical pixels.
void SetBoxes(void)
Computes the bounding box coordinates for the current viewport.
double rotation
Rotation angle of the viewport in radians.
int pix_width
Width of the viewport in physical pixels.
wxPoint2DDouble GetDoublePixFromLL(double lat, double lon)
Convert latitude and longitude on the ViewPort to physical pixel coordinates with double precision.
double skew
Angular distortion (shear transform) applied to the viewport in radians.
void GetLLFromPix(const wxPoint &p, double *lat, double *lon)
Convert physical pixel coordinates on the ViewPort to latitude and longitude.
double clon
Center longitude of the viewport in degrees.
double clat
Center latitude of the viewport in degrees.
wxPoint GetPixFromLL(double lat, double lon)
Convert latitude and longitude on the ViewPort to physical pixel coordinates.
double chart_scale
Chart scale denominator (e.g., 50000 for a 1:50000 scale).
Device context class that can use either wxDC or OpenGL for drawing.
Base class for OpenCPN plugins.
Raw messages layer, supports sending and recieving navmsg messages.
wxFont GetOCPNGUIScaledFont(wxString item)
Retrieves a font optimized for touch and high-resolution interfaces.
General purpose GUI support.
Class NotificationManager.
PlugIn Object Definition/API.
@ OBJECTS_ALL
Return all objects including those in layers.
@ OBJECTS_ONLY_LAYERS
Return only objects that are in layers.
@ OBJECTS_NO_LAYERS
Exclude objects that are in layers.
plugin_ais_alarm_type
Enumeration of AIS alarm states.
enum _PI_DisCat PI_DisCat
Display categories for S52 chart features.
PI_ColorScheme
Enumeration of color schemes.
@ PI_COURSE_UP_MODE
Course Up Mode - Current course over ground at the top.
@ PI_HEAD_UP_MODE
Head Up Mode - Current vessel heading at the top.
@ PI_OTHER
Other - additional features for detailed navigation.
@ PI_DISPLAYBASE
Display Base - features that must always be shown.
@ PI_STANDARD
Standard - default features for safe navigation.
@ PI_MARINERS_STANDARD
Mariner specified standard features.
enum _PI_NavMode PI_NavMode
Navigation mode options for chart display orientation.
enum _OBJECT_LAYER_REQ OBJECT_LAYER_REQ
Filter options for object queries.
OptionsParentPI
Enum defining parent pages in OpenCPN options dialog where plugins can add panels.
@ PI_OPTIONS_PARENT_DISPLAY
Display settings section.
@ PI_OPTIONS_PARENT_UI
User Interface section.
@ PI_OPTIONS_PARENT_SHIPS
Ships section.
@ PI_OPTIONS_PARENT_CHARTS
Charts section.
@ PI_OPTIONS_PARENT_PLUGINS
Plugins section.
@ PI_OPTIONS_PARENT_CONNECTIONS
Connections section.
void EnableNotificationCanvasIcon(bool enable)
Plugin Notification Framework GUI support.
void SetCanvasContextMenuItemGrey(int item, bool grey)
Sets menu item enabled/disabled state.
bool UpdateSingleWaypoint(PlugIn_Waypoint *pwaypoint)
Updates a single waypoint.
bool PlugInHasNormalizedViewPort(PlugIn_ViewPort *vp)
Checks if viewport has been normalized.
void PluginCenterOwnship(int CanvasIndex)
Center the chart view on the own ship position for a specific canvas.
void SetCanvasRotation(double rotation)
Sets chart display rotation angle.
wxString GetSelectedWaypointGUID_Plugin()
Gets GUID of currently selected waypoint.
int GetChartbarHeight(void)
Gets height of chart bar in pixels.
void RemovePlugInTool(int tool_id)
Removes a tool from OpenCPN's toolbar.
void SetCanvasProjection(int projection)
Sets chart projection type.
wxString * GetpSharedDataLocation(void)
Gets shared application data location.
double toUsrTemp_Plugin(double cel_temp, int unit)
Converts Celsius to user's preferred temperature unit.
wxWindow * PluginGetFocusCanvas()
Gets the currently focused chart canvas.
int AddChartToDBInPlace(wxString &full_path, bool b_RefreshCanvas)
Adds a chart to the database without full rebuild.
void fromSM_Plugin(double x, double y, double lat0, double lon0, double *lat, double *lon)
Converts Simple Mercator coordinates to geographic.
wxWindow * GetOCPNCanvasWindow()
Gets OpenCPN's main canvas window.
bool GetEnableLatLonGrid(int CanvasIndex)
Gets latitude/longitude grid visibility state.
bool UpdatePlugInRouteEx(PlugIn_Route_Ex *proute)
Updates an existing extended route.
void SetCanvasContextMenuItemViz(int item, bool viz)
Temporarily changes context menu item visibility.
int PlatformDirSelectorDialog(wxWindow *parent, wxString *file_spec, wxString Title, wxString initDir)
Shows platform-optimized directory selector dialog.
bool GetTouchMode()
Gets touch interface mode state.
int GetCanvasCount()
Gets total number of chart canvases.
bool GetSingleWaypointExV2(wxString GUID, PlugIn_Waypoint_ExV2 *pwaypoint)
Gets extended waypoint data by GUID.
ArrayOfPlugIn_AIS_Targets * GetAISTargetArray(void)
Gets array of AIS targets.
wxString getUsrWindSpeedUnit_Plugin(int unit)
Gets display string for user's preferred wind speed unit.
void SetCanvasMenuItemViz(int item, bool viz, const char *name)
Temporarily changes context menu item visibility.
void PlugInMultMatrixViewport(PlugIn_ViewPort *vp, float lat, float lon)
Applies viewport transformation matrix.
wxFont * OCPNGetFont(wxString TextElement, int default_size)
Gets a font for UI elements.
bool GetEnableMainToolbar()
Check if the main toolbar is enabled.
bool GetEnableENCTextDisplay(int CanvasIndex)
Gets ENC text label visibility.
bool UpdateSingleWaypointEx(PlugIn_Waypoint_Ex *pwaypoint)
Updates an existing extended waypoint.
wxArrayString GetTrackGUIDArray(void)
Gets array of track GUIDs.
wxString getUsrDistanceUnit_Plugin(int unit)
Gets display string for user's preferred distance unit.
bool DeletePlugInTrack(wxString &GUID)
Deletes a track.
bool DeletePlugInRoute(wxString &GUID)
Deletes a route.
void EnableSplitScreenLayout(bool enable)
Enable or disable the split-screen layout.
double toUsrWindSpeed_Plugin(double kts_speed, int unit)
Converts knots to user's preferred wind speed unit.
bool GetEnableLightsDisplay(int CanvasIndex)
Gets light icon visibility.
wxFont GetOCPNGUIScaledFont_PlugIn(wxString item)
Gets a uniquely scaled font copy for responsive UI elements.
wxBitmap GetBitmapFromSVGFile(wxString filename, unsigned int width, unsigned int height)
Creates bitmap from SVG file.
wxFont * FindOrCreateFont_PlugIn(int point_size, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underline, const wxString &facename, wxFontEncoding encoding)
Creates or finds a font in the font cache.
int GetGlobalWatchdogTimoutSeconds()
Comm Global Watchdog Query
wxColour GetFontColour_PlugIn(wxString TextElement)
Gets color configured for a UI text element.
void EnableChartBar(bool enable, int CanvasIndex)
Controls visibility of chart info bar.
void PositionBearingDistanceMercator_Plugin(double lat, double lon, double brg, double dist, double *dlat, double *dlon)
Calculates destination point given starting point, bearing and distance.
double toUsrDistance_Plugin(double nm_distance, int unit)
Converts nautical miles to user's preferred distance unit.
void SetENCDisplayCategory(PI_DisCat cat, int CanvasIndex)
Sets ENC (Electronic Navigation Chart) feature display category.
void toSM_Plugin(double lat, double lon, double lat0, double lon0, double *x, double *y)
Converts geographic coordinates to Simple Mercator projection.
PI_DisCat GetENCDisplayCategory(int CanvasIndex)
Gets current ENC display category.
void EnableTouchMode(bool enable)
Enables/disables touch interface mode.
void EnableCurrentStationsDisplay(bool enable, int CanvasIndex)
Controls current station icon display.
void EnableChartOutlines(bool enable, int CanvasIndex)
Controls chart outline display.
void EnableMUIBar(bool enable, int CanvasIndex)
Controls visibility of MUI (Mobile/Touch User Interface) bar.
double OCPN_GetDisplayContentScaleFactor()
Gets content scaling factor for current display.
double DistGreatCircle_Plugin(double slat, double slon, double dlat, double dlon)
Calculates great circle distance between two points.
bool AddSingleWaypointExV2(PlugIn_Waypoint_ExV2 *pwaypointex, bool b_permanent)
Adds a waypoint with extended V2 properties.
void EnableLookaheadMode(bool enable, int CanvasIndex)
Enables/disables look-ahead mode for a canvas.
bool PluginGetFollowMode(int CanvasIndex)
Get the current follow mode status for a specific canvas.
wxArrayString GetRouteGUIDArray(void)
Gets array of route GUIDs.
wxScrolledWindow * AddOptionsPage(OptionsParentPI parent, wxString title)
Adds a new preferences page to OpenCPN options dialog.
void EnableLightsDisplay(bool enable, int CanvasIndex)
Controls light icon display.
void PlugInHandleAutopilotRoute(bool enable)
Controls autopilot route handling.
wxString getUsrDepthUnit_Plugin(int unit)
Gets display string for user's preferred depth unit.
void RemoveCanvasMenuItem(int item, const char *name)
Removes a context menu item completely.
void JumpToPosition(double lat, double lon, double scale)
Centers chart display on specified position at given scale.
int InsertPlugInToolSVG(wxString label, wxString SVGfile, wxString SVGfileRollover, wxString SVGfileToggled, wxItemKind kind, wxString shortHelp, wxString longHelp, wxObject *clientData, int position, int tool_sel, opencpn_plugin *pplugin)
Adds a tool using SVG graphics.
bool GetEnableCurrentStationsDisplay(int CanvasIndex)
Gets current station icon visibility.
wxDialog * GetActiveOptionsDialog()
Gets pointer to active options dialog.
wxString getUsrSpeedUnit_Plugin(int unit)
Gets display string for user's preferred speed unit.
std::unique_ptr< PlugIn_Waypoint > GetWaypoint_Plugin(const wxString &GUID)
Gets waypoint details by GUID.
bool GetEnableLookaheadMode(int CanvasIndex)
Gets look-ahead mode state for a canvas.
void EnableTideStationsDisplay(bool enable, int CanvasIndex)
Controls tide station icon display.
bool GetEnableChartBar(int CanvasIndex)
Gets chart bar visibility state.
wxBitmap GetIcon_PlugIn(const wxString &name)
Gets icon bitmap by name.
wxArrayString GetIconNameArray(void)
Gets array of available waypoint icons.
bool PlugIn_GSHHS_CrossesLand(double lat1, double lon1, double lat2, double lon2)
Checks if a great circle route crosses land.
void SetNavigationMode(PI_NavMode mode, int CanvasIndex)
Sets the navigation mode for a specific chart canvas.
bool GetEnableStatusBar()
Gets status bar visibility state.
bool GetEnableDepthUnitDisplay(int CanvasIndex)
Gets depth unit display state.
int InsertPlugInTool(wxString label, wxBitmap *bitmap, wxBitmap *bmpRollover, wxItemKind kind, wxString shortHelp, wxString longHelp, wxObject *clientData, int position, int tool_sel, opencpn_plugin *pplugin)
Adds a tool to OpenCPN's toolbar.
void EnableENCDepthSoundingsDisplay(bool enable, int CanvasIndex)
Controls ENC depth sounding display.
void PlugInAISDrawGL(wxGLCanvas *glcanvas, const PlugIn_ViewPort &vp)
Renders AIS targets on a secondary OpenGL canvas.
double GetCanvasTilt()
Gets current canvas tilt angle.
void AddChartDirectory(wxString &path)
Adds a chart directory to OpenCPN's chart database.
double fromDMM_PlugIn(wxString sdms)
Parse a formatted coordinate string to get decimal degrees.
double toUsrDepth_Plugin(double m_depth, int unit)
Converts meters to user's preferred depth unit.
bool GetActiveRoutepointGPX(char *buffer, unsigned int buffer_length)
Gets GPX representation of active route waypoint.
std::unique_ptr< PlugIn_Waypoint_ExV2 > GetWaypointExV2_Plugin(const wxString &GUID)
Gets complete waypoint details by GUID.
double PlugInGetDisplaySizeMM()
Gets physical display size in millimeters.
bool UpdatePlugInRoute(PlugIn_Route *proute)
Updates an existing route.
void SetToolbarToolBitmaps(int item, wxBitmap *bitmap, wxBitmap *bmpRollover)
Updates toolbar tool bitmaps.
void EnableBuoyLightLabelsDisplay(bool enable, int CanvasIndex)
Controls buoy/light name label display.
wxString GetActiveWaypointGUID(void)
Gets GUID of currently active waypoint.
void ConfigFlushAndReload()
Flush configuration changes to disk and reload settings.
void EnableAisTargetDisplay(bool enable, int CanvasIndex)
Controls AIS target display.
int PlatformFileSelectorDialog(wxWindow *parent, wxString *file_spec, wxString Title, wxString initDir, wxString suggestedName, wxString wildcard)
Shows platform-optimized file selector dialog.
bool CheckMUIEdgePan_PlugIn(int x, int y, bool dragging, int margin, int delta, int canvasIndex)
Checks if chart should pan when cursor near edge.
std::unique_ptr< PlugIn_Route_ExV2 > GetRouteExV2_Plugin(const wxString &GUID)
Gets route details with V2 waypoints by GUID.
double fromUsrDepth_Plugin(double usr_depth, int unit)
Converts from user's preferred depth unit to meters.
bool AddPlugInRoute(PlugIn_Route *proute, bool b_permanent)
Adds a new route.
wxString GetNewGUID(void)
Generates a new globally unique identifier (GUID).
double fromDMM_Plugin(wxString sdms)
Converts degrees/decimal minutes string to decimal degrees.
void EnableENCTextDisplay(bool enable, int CanvasIndex)
Controls ENC text label display.
int GetCanvasIndexUnderMouse(void)
Gets index of chart canvas under mouse cursor.
void EnableTenHertzUpdate(bool enable)
Enable or disable 10 Hz update rate.
wxRect GetMasterToolbarRect()
Gets bounding rectangle of master toolbar.
void toTM_Plugin(float lat, float lon, float lat0, float lon0, double *x, double *y)
Converts geographic coordinates to Transverse Mercator projection.
void CanvasJumpToPosition(wxWindow *canvas, double lat, double lon, double scale)
Centers specified canvas on given position at given scale.
bool GetGlobalColor(wxString colorName, wxColour *pcolour)
Gets a global color value.
double fromUsrSpeed_Plugin(double usr_speed, int unit)
Converts from user's preferred speed unit to knots.
void GetDoubleCanvasPixLL(PlugIn_ViewPort *vp, wxPoint2DDouble *pp, double lat, double lon)
Converts lat/lon to canvas pixels with double precision.
std::unique_ptr< PlugIn_Track > GetTrack_Plugin(const wxString &GUID)
Gets track details by GUID.
bool PlugInPlaySoundEx(wxString &sound_file, int deviceIndex)
Start playing a sound file asynchronously.
void EnableCompassGPSIcon(bool enable, int CanvasIndex)
Controls visibility of compass/GPS status icon.
wxString GetActiveRouteGUID(void)
Gets GUID of currently active route.
void EnableDepthUnitDisplay(bool enable, int CanvasIndex)
Controls depth unit display.
bool GetEnableTideStationsDisplay(int CanvasIndex)
Gets tide station icon visibility.
bool PlugInSetFontColor(const wxString TextElement, const wxColour color)
Sets text color for a UI element.
wxWindow * GetCanvasUnderMouse(void)
Gets canvas window under mouse cursor.
std::unique_ptr< PlugIn_Waypoint_Ex > GetWaypointEx_Plugin(const wxString &GUID)
Gets extended waypoint by GUID.
bool GetTrackingMode()
Get the current tracking mode status.
bool GetEnableChartOutlines(int CanvasIndex)
Gets chart outline visibility state.
void GetCanvasPixLL(PlugIn_ViewPort *vp, wxPoint *pp, double lat, double lon)
Converts lat/lon to canvas physical pixel coordinates.
wxColor GetGlobalColorD(std::string map_name, std::string name)
Gets a color from the global color scheme.
bool GetEnableCompassGPSIcon(int CanvasIndex)
Gets compass icon visibility state.
void SetMUICursor_PlugIn(wxCursor *pCursor, int canvasIndex)
Sets mouse cursor for specific canvas.
void EnableMenu(bool enable)
Shows/hides the main menu bar.
void DimeWindow(wxWindow *win)
Applies system color scheme to window.
bool GetEnableAisTargetDisplay(int CanvasIndex)
Gets AIS target display state.
bool AddPlugInRouteExV2(PlugIn_Route_ExV2 *proute, bool b_permanent)
Adds a new route with V2 waypoints.
std::vector< std::string > GetPriorityMaps()
Comm Priority query support methods
double GetOCPNGUIToolScaleFactor_PlugIn()
Gets current global GUI scaling factor.
void SetToolbarToolBitmapsSVG(int item, wxString SVGfile, wxString SVGfileRollover, wxString SVGfileToggled)
Updates SVG graphics for toolbar tool.
wxString getUsrTempUnit_Plugin(int unit)
Gets display string for user's preferred temperature unit.
bool AddSingleWaypointEx(PlugIn_Waypoint_Ex *pwaypointex, bool b_permanent)
Adds a waypoint with extended properties.
wxArrayString GetWaypointGUIDArray(void)
Gets array of all waypoint/marks GUIDs.
int AddCanvasContextMenuItem(wxMenuItem *pitem, opencpn_plugin *pplugin)
Adds item to chart canvas context menu.
wxString GetActiveStyleName()
Gets name of currently active style sheet.
wxArrayString GetChartDBDirArrayString()
Gets chart database directory list.
void SetCursor_PlugIn(wxCursor *pCursor)
Sets mouse cursor.
bool GetEnableTenHertzUpdate()
Check if 10 Hz update rate is enabled.
wxString GetLocaleCanonicalName()
Gets system locale canonical name.
wxWindow * PluginGetOverlayRenderCanvas()
Gets the canvas currently designated for overlay rendering.
bool AddPersistentFontKey(wxString TextElement)
Registers a new font configuration element.
bool AddPlugInTrack(PlugIn_Track *ptrack, bool b_permanent)
Adds a new track.
bool UpdateChartDBInplace(wxArrayString dir_array, bool b_force_update, bool b_ProgressDialog)
Updates chart database in place.
void UpdateAndApplyPriorityMaps(std::vector< std::string > map)
Sets and applies new priority mapping scheme.
void RequestWindowRefresh(wxWindow *win, bool eraseBackground)
Requests window refresh.
void EnableLatLonGrid(bool enable, int CanvasIndex)
Controls latitude/longitude grid display.
void SetAppColorScheme(PI_ColorScheme cs)
Set the application color scheme.
bool DeleteSingleWaypoint(wxString &GUID)
Deletes a single waypoint.
void RemoveCanvasContextMenuItem(int item)
Removes a context menu item completely.
bool DecodeSingleVDOMessage(const wxString &str, PlugIn_Position_Fix_Ex *pos, wxString *accumulator)
Decodes a single VDO (Own Ship AIS) message.
bool AddCustomWaypointIcon(wxBitmap *pimage, wxString key, wxString description)
Adds a custom waypoint icon.
bool CheckEdgePan_PlugIn(int x, int y, bool dragging, int margin, int delta)
Checks if chart should pan when cursor near edge.
double toUsrSpeed_Plugin(double kts_speed, int unit)
Converts knots to user's preferred speed unit.
std::unique_ptr< PlugIn_Route_Ex > GetRouteEx_Plugin(const wxString &GUID)
Gets extended route by GUID.
bool UpdatePlugInRouteExV2(PlugIn_Route_ExV2 *proute)
Updates existing route with V2 waypoints.
std::vector< std::string > GetActivePriorityIdentifiers()
Gets list of active priority identifiers.
bool GetEnableENCDepthSoundingsDisplay(int CanvasIndex)
Gets ENC depth sounding visibility.
void SetToolbarItemState(int item, bool toggle)
Sets toolbar item toggle state.
bool DeleteOptionsPage(wxScrolledWindow *page)
Remove a previously added options page.
void EnableLightDescriptionsDisplay(bool enable, int CanvasIndex)
Controls light description text display.
float GetOCPNChartScaleFactor_Plugin()
Gets chart rendering scale factor.
PI_NavMode GetNavigationMode(int CanvasIndex)
Gets current navigation mode for a canvas.
int AddCanvasMenuItem(wxMenuItem *pitem, opencpn_plugin *pplugin, const char *name)
Adds item to canvas context menu.
int RemoveChartFromDBInPlace(wxString &full_path)
Removes a chart from database without full rebuild.
void PlugInNormalizeViewport(PlugIn_ViewPort *vp, float lat, float lon)
Normalizes viewport parameters.
PI_ColorScheme GetAppColorScheme()
Get the current application color scheme.
void ExitOCPN()
Exits OpenCPN application.
wxWindow * GetCanvasByIndex(int canvasIndex)
Gets chart canvas window by index.
void fromTM_Plugin(double x, double y, double lat0, double lon0, double *lat, double *lon)
Converts Transverse Mercator coordinates to geographic.
double OCPN_GetWinDIPScaleFactor()
Gets Windows-specific DPI scaling factor.
void PushNMEABuffer(wxString buf)
Pushes NMEA sentence to the system.
void SetEnableMainToolbar(bool enable)
Show or hide the main toolbar.
void SetFullScreen(bool set_full_screen_on)
Sets full screen mode.
bool GetEnableMenu()
Gets menu bar visibility state.
void SetCanvasMenuItemGrey(int item, bool grey, const char *name)
Sets menu item enabled/disabled state.
bool GetEnableBuoyLightLabelsDisplay(int CanvasIndex)
Gets buoy/light label visibility.
double fromUsrWindSpeed_Plugin(double usr_wspeed, int unit)
Converts from user's preferred wind speed unit to knots.
bool GetEnableCanvasFocusBar(int CanvasIndex)
Gets focus indicator visibility state.
wxXmlDocument GetChartDatabaseEntryXML(int dbIndex, bool b_getGeom)
Gets chart database entry as XML.
wxAuiManager * GetFrameAuiManager(void)
Gets main frame AUI manager.
void SendPluginMessage(wxString message_id, wxString message_body)
Sends message to other plugins.
bool AddPlugInRouteEx(PlugIn_Route_Ex *proute, bool b_permanent)
Adds a route with extended features.
void fromSM_ECC_Plugin(double x, double y, double lat0, double lon0, double *lat, double *lon)
Converts Elliptical Simple Mercator coordinates to geographic.
void EnableStatusBar(bool enable)
Shows/hides the status bar.
void RequestRefresh(wxWindow *win)
Requests window refresh.
bool UpdateSingleWaypointExV2(PlugIn_Waypoint_ExV2 *pwaypoint)
Updates an existing extended V2 waypoint.
void PluginZoomCanvas(int CanvasIndex, double factor)
Zoom a specific chart canvas by the given factor.
int GetLatLonFormat()
Gets currently selected latitude/longitude display format.
bool AddSingleWaypoint(PlugIn_Waypoint *pwaypoint, bool b_permanent)
Adds a single waypoint.
bool IsTouchInterface_PlugIn(void)
Checks if touch interface mode is enabled.
bool GetSingleWaypoint(wxString GUID, PlugIn_Waypoint *pwaypoint)
Gets waypoint data by GUID.
void SetToolbarToolViz(int item, bool viz)
Temporarily changes toolbar tool visibility.
double fromUsrTemp_Plugin(double usr_temp, int unit)
Converts from user's preferred temperature unit to Celsius.
void SetCanvasTilt(double tilt)
Gets current canvas tilt angle.
std::unique_ptr< PlugIn_Route > GetRoute_Plugin(const wxString &GUID)
Gets route details by GUID.
bool GetEnableMUIBar(int CanvasIndex)
Gets MUI bar visibility state.
bool AddLocaleCatalog(wxString catalog)
Adds a locale catalog for translations.
bool GetFullScreen()
Gets full screen state.
void SetTrackingMode(bool enable)
Enable or disable tracking mode.
wxString g_locale
Global locale setting for OpenCPN UI.
void PluginSetFollowMode(int CanvasIndex, bool enable_follow)
Set follow mode for a specific canvas.
void ShowGlobalSettingsDialog()
Display the global settings dialog.
void toSM_ECC_Plugin(double lat, double lon, double lat0, double lon0, double *x, double *y)
Converts geographic coordinates to Elliptical Simple Mercator projection.
bool UpdatePlugInTrack(PlugIn_Track *ptrack)
Updates an existing track.
double fromUsrDistance_Plugin(double usr_distance, int unit)
Converts from user's preferred distance unit to nautical miles.
wxString GetSelectedTrackGUID_Plugin()
Gets GUID of currently selected track.
wxFileConfig * GetOCPNConfigObject(void)
Gets OpenCPN's configuration object.
void DistanceBearingMercator_Plugin(double lat0, double lon0, double lat1, double lon1, double *brg, double *dist)
Calculates bearing and distance between two points using Mercator projection.
void SetGlobalColor(std::string table, std::string name, wxColor color)
Sets a color in the global color scheme.
void ZeroXTE()
Resets cross track error to zero.
void PlugInPlaySound(wxString &sound_file)
Plays a sound file asynchronously.
void GetCanvasLLPix(PlugIn_ViewPort *vp, wxPoint p, double *plat, double *plon)
Converts canvas physical pixel coordinates to lat/lon.
void EnableCanvasFocusBar(bool enable, int CanvasIndex)
Controls visibility of canvas focus indicator.
wxString GetSelectedRouteGUID_Plugin()
Gets GUID of currently selected route.
double g_display_size_mm
The width of the physical screen in millimeters.
void ForceChartDBUpdate()
Forces an update of the chart database.
bool GetSingleWaypointEx(wxString GUID, PlugIn_Waypoint_Ex *pwaypoint)
Gets extended waypoint data by GUID.
bool ShuttingDown(void)
Checks if OpenCPN is in shutdown process.
void ForceChartDBRebuild()
Forces complete rebuild of chart database.
Tools to send data to plugins.
A generic position and navigation data structure.
double kCog
Course over ground in degrees.
double kHdt
True heading in degrees.
double kLat
Latitude in decimal degrees.
double kSog
Speed over ground in knots.
double kLon
Longitude in decimal degrees.