31#include <wx/dcmemory.h>
33#include <wx/glcanvas.h>
34#include <wx/notebook.h>
71#include "SoundFactory.h"
72#include "SystemCmdSound.h"
78#if wxUSE_XLOCALE || !wxCHECK_VERSION(3, 0, 0)
79extern wxLocale* plocale_def_lang;
84extern arrayofCanvasPtr g_canvasArray;
86int g_canvas_context_Menu_Disable_Mask;
88void NotifySetupOptionsPlugin(
const PlugInData* pic);
103 wxItemKind kind, wxString shortHelp, wxString longHelp,
104 wxObject* clientData,
int position,
int tool_sel,
107 return s_ppim->AddToolbarTool(label, bitmap, bmpRollover, kind, shortHelp,
108 longHelp, clientData, position, tool_sel,
115 if (s_ppim) s_ppim->RemoveToolbarTool(tool_id);
119 if (s_ppim) s_ppim->SetToolbarToolViz(item, viz);
123 if (s_ppim) s_ppim->SetToolbarItemState(item, toggle);
127 if (s_ppim) s_ppim->SetToolbarItemBitmaps(item, bitmap, bmpRollover);
131 wxString SVGfileRollover, wxString SVGfileToggled,
132 wxItemKind kind, wxString shortHelp, wxString longHelp,
133 wxObject* clientData,
int position,
int tool_sel,
136 return s_ppim->AddToolbarTool(label, SVGfile, SVGfileRollover,
137 SVGfileToggled, kind, shortHelp, longHelp,
138 clientData, position, tool_sel, pplugin);
144 wxString SVGfileRollover,
145 wxString SVGfileToggled) {
147 s_ppim->SetToolbarItemBitmaps(item, SVGfile, SVGfileRollover,
155 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin, name,
false);
161 if (s_ppim) s_ppim->SetCanvasContextMenuItemViz(item, viz, name);
165 if (s_ppim) s_ppim->SetCanvasContextMenuItemGrey(item, grey, name);
169 if (s_ppim) s_ppim->RemoveCanvasContextMenuItem(item, name);
175 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin,
"",
false);
190int AddCanvasContextMenuItemExt(wxMenuItem* pitem,
opencpn_plugin* pplugin,
191 const std::string object_type) {
194 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin,
195 object_type.c_str(),
true);
203 return reinterpret_cast<wxFileConfig*
>(
210 wxWindow* pret = NULL;
212 MyFrame* pFrame = s_ppim->GetParentFrame();
213 pret = (wxWindow*)pFrame->GetPrimaryCanvas();
219 if (win) win->Refresh(
true);
279 return FontMgr::Get().GetFontLegacy(TextElement, default_size);
282wxFont* GetOCPNScaledFont_PlugIn(wxString TextElement,
int default_size) {
283 return FontMgr::Get().GetFontLegacy(TextElement, default_size);
287 return g_Platform->GetToolbarScaleFactor(GUIScaleFactor);
291 return g_Platform->GetToolbarScaleFactor(g_GUIScaleFactor);
295 return g_Platform->GetChartScaleFactorExp(g_ChartScaleFactor);
303 return FontMgr::Get().
AddAuxKey(TextElement);
308 return g_StyleManager->GetCurrentStyle()->name;
314 unsigned int height) {
315 wxBitmap bmp =
LoadSVG(filename, width, height);
324 if (w == 0 || h == 0) {
331 return LoadSVG(filename, w, h);
346 ArrayOfPlugIn_AIS_Targets* pret =
new ArrayOfPlugIn_AIS_Targets;
349 for (
const auto& it :
g_pAIS->GetTargetList()) {
358 td.n_alarm_state = AIS_ALARM_SET;
368 SendMessageToAllPlugins(message_id, message_body);
376 Nevent.SetID(message_id);
377 Nevent.SetJSONText(message_body);
378 gFrame->GetEventHandler()->AddPendingEvent(Nevent);
384 gFrame->JumpToPosition(gFrame->GetFocusCanvas(), lat, lon,
scale);
389#if wxUSE_XLOCALE || !wxCHECK_VERSION(3, 0, 0)
391 if (plocale_def_lang) {
395 return plocale_def_lang->AddCatalog(catalog);
405 std::string full_sentence = buf.ToStdString();
407 if ((full_sentence[0] ==
'$') || (full_sentence[0] ==
'!')) {
409 std::string
id = full_sentence.substr(1, 5);
412 auto address = std::make_shared<NavAddr0183>(
"virtual");
413 auto msg = std::make_shared<const Nmea0183Msg>(
id, full_sentence, address);
414 NavMsgBus::GetInstance().
Notify(std::move(msg));
420 wxXmlDocument doc =
ChartData->GetXMLDescription(dbIndex, b_getGeom);
426 bool b_ProgressDialog) {
428 ArrayOfCDI ChartDirArray;
429 for (
unsigned int i = 0; i < dir_array.GetCount(); i++) {
430 wxString dirname = dir_array[i];
432 cdi.fullpath = dirname;
433 cdi.magic_number =
"";
434 ChartDirArray.Add(cdi);
436 bool b_ret = gFrame->UpdateChartDatabaseInplace(
437 ChartDirArray, b_force_update, b_ProgressDialog, ChartListFileName);
438 gFrame->RefreshGroupIndices();
439 gFrame->ChartsRefresh();
444 return ChartData->GetChartDirArrayString();
449 wxFileName fn(full_path);
450 wxString fdir = fn.GetPath();
454 bret =
ChartData->AddSingleChart(full_path);
458 pConfig->UpdateChartDirs(
ChartData->GetChartDirArray());
459 ChartData->SaveBinary(ChartListFileName);
462 ArrayOfCDI XnewChartDirArray;
463 pConfig->LoadChartDirArray(XnewChartDirArray);
474 if (b_RefreshCanvas || !gFrame->GetPrimaryCanvas()->GetQuiltMode()) {
475 gFrame->ChartsRefresh();
485 bret =
ChartData->RemoveSingleChart(full_path);
488 pConfig->UpdateChartDirs(
ChartData->GetChartDirArray());
489 ChartData->SaveBinary(ChartListFileName);
492 ArrayOfCDI XnewChartDirArray;
493 pConfig->LoadChartDirArray(XnewChartDirArray);
504 gFrame->ChartsRefresh();
514 if (!g_pOptions)
return NULL;
519 parentid = g_pOptions->m_pageDisplay;
522 parentid = g_pOptions->m_pageConnections;
525 parentid = g_pOptions->m_pageCharts;
528 parentid = g_pOptions->m_pageShips;
531 parentid = g_pOptions->m_pageUI;
534 parentid = g_pOptions->m_pagePlugins;
537 wxLogMessage(
"Error in PluginManager::AddOptionsPage: Unknown parent");
542 return g_pOptions->AddPage(parentid, title);
546 if (!g_pOptions)
return false;
547 return g_pOptions->DeletePluginPage(page);
551 wxString* accumulator) {
552 if (!pos)
return false;
555 AisError nerr = AIS_GENERIC_ERROR;
556 if (
g_pAIS) nerr =
g_pAIS->DecodeSingleVDO(str, &gpd, accumulator);
557 if (nerr == AIS_NoError) {
578 if (g_bShowChartBar) {
580 if (cc && cc->GetPiano()) {
581 val = cc->GetPiano()->GetHeight();
587bool GetRoutepointGPX(
RoutePoint* pRoutePoint,
char* buffer,
588 unsigned int buffer_length) {
592 pgpx->AddGPXWaypoint(pRoutePoint);
593 wxString gpxfilename = wxFileName::CreateTempFileName(
"gpx");
594 pgpx->SaveFile(gpxfilename);
597 wxFFile gpxfile(gpxfilename);
599 if (gpxfile.ReadAll(&s)) {
600 if (s.Length() < buffer_length) {
601 strncpy(buffer, (
const char*)s.mb_str(wxConvUTF8), buffer_length - 1);
607 ::wxRemoveFile(gpxfilename);
614 return GetRoutepointGPX(
g_pRouteMan->GetpActivePoint(), buffer,
621 double dist,
double* dlat,
623 PositionBearingDistanceMercator(lat, lon, brg, dist, dlat, dlon);
627 double lon1,
double* brg,
double* dist) {
628 DistanceBearingMercator(lat0, lon0, lat1, lon1, brg, dist);
633 return DistGreatCircle(slat, slon, dlat, dlon);
636void toTM_Plugin(
float lat,
float lon,
float lat0,
float lon0,
double* x,
638 toTM(lat, lon, lat0, lon0, x, y);
641void fromTM_Plugin(
double x,
double y,
double lat0,
double lon0,
double* lat,
643 fromTM(x, y, lat0, lon0, lat, lon);
646void toSM_Plugin(
double lat,
double lon,
double lat0,
double lon0,
double* x,
648 toSM(lat, lon, lat0, lon0, x, y);
651void fromSM_Plugin(
double x,
double y,
double lat0,
double lon0,
double* lat,
653 fromSM(x, y, lat0, lon0, lat, lon);
657 double* x,
double* y) {
658 toSM_ECC(lat, lon, lat0, lon0, x, y);
662 double* lat,
double* lon) {
663 fromSM_ECC(x, y, lat0, lon0, lat, lon);
675 return toUsrSpeed(kts_speed,
unit);
679 return toUsrWindSpeed(kts_speed,
unit);
683 return fromUsrSpeed(usr_speed,
unit);
687 return fromUsrWindSpeed(usr_wspeed,
unit);
695 return fromUsrTemp(usr_temp,
unit);
699 return getUsrDistanceUnit(
unit);
705 return getUsrWindSpeedUnit(
unit);
718 return fromUsrDepth(usr_depth,
unit);
745 static bool loaded =
false;
747 gshhsCrossesLandInit();
750 return gshhsCrossesLand(lat1, lon1, lat2, lon2);
766 const wxString& icon_ident,
767 const wxString& wp_name,
768 const wxString& GUID) {
769 wxDateTime now = wxDateTime::Now();
780PlugIn_Waypoint::~PlugIn_Waypoint() {}
783PlugIn_Route::PlugIn_Route() {
pWaypointList =
new Plugin_WaypointList; }
785PlugIn_Route::~PlugIn_Route() {
793PlugIn_Track::PlugIn_Track() {
pWaypointList =
new Plugin_WaypointList; }
795PlugIn_Track::~PlugIn_Track() {
805 wxString description) {
806 wxImage image = pimage->ConvertToImage();
807 WayPointmanGui(*pWayPointMan).ProcessIcon(image, key, description);
816 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
822 h->Link = link->
Link;
823 h->LType = link->
Type;
827 linknode = linknode->GetNext();
837 bool b_unique =
true;
838 for (
RoutePoint* prp : *pWayPointMan->GetWaypointList()) {
839 if (prp->m_GUID == pwaypoint->
m_GUID) {
845 if (!b_unique)
return false;
853 cloneHyperlinkList(pWP, pwaypoint);
863 pWP->
m_btemp = (b_permanent ==
false);
868 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
871 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
872 pRouteManagerDialog->UpdateWptListCtrl();
879 bool b_found =
false;
880 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
882 if (prp) b_found =
true;
885 pWayPointMan->DestroyWaypoint(prp);
886 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
887 pRouteManagerDialog->UpdateWptListCtrl();
895 bool b_found =
false;
898 if (prp) b_found =
true;
901 double lat_save = prp->m_lat;
902 double lon_save = prp->m_lon;
904 prp->m_lat = pwaypoint->
m_lat;
905 prp->m_lon = pwaypoint->
m_lon;
918 wxPlugin_HyperlinkListNode* linknode =
925 h->Link = link->
Link;
926 h->LType = link->
Type;
930 linknode = linknode->GetNext();
935 if (prp) prp->ReLoadIcon();
937 auto canvas = gFrame->GetPrimaryCanvas();
938 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
939 canvas->GetScaleValue());
941 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
943 pFind->m_slat = pwaypoint->
m_lat;
944 pFind->m_slon = pwaypoint->
m_lon;
949 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
952 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
953 pRouteManagerDialog->UpdateWptListCtrl();
962 dst->
m_lat = src->m_lat;
963 dst->
m_lon = src->m_lon;
979 for (
Hyperlink* link : *src->m_HyperlinkList) {
983 h->
Type = link->LType;
992 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
994 if (!prp)
return false;
996 PlugInFromRoutePoint(pwaypoint, prp);
1002 wxArrayString result;
1003 for (
RoutePoint* prp : *pWayPointMan->GetWaypointList()) {
1004 result.Add(prp->m_GUID);
1010 wxArrayString result;
1012 result.Add(proute->m_GUID);
1018 wxArrayString result;
1020 result.Add(ptrack->m_GUID);
1027 wxArrayString result;
1028 for (
RoutePoint* prp : *pWayPointMan->GetWaypointList()) {
1031 result.Add(prp->m_GUID);
1034 if (!prp->m_bIsInLayer) result.Add(prp->m_GUID);
1037 if (prp->m_bIsInLayer) result.Add(prp->m_GUID);
1045 wxArrayString result;
1050 result.Add(proute->m_GUID);
1053 if (!proute->m_bIsInLayer) result.Add(proute->m_GUID);
1056 if (proute->m_bIsInLayer) result.Add(proute->m_GUID);
1065 wxArrayString result;
1069 result.Add(ptrack->m_GUID);
1072 if (!ptrack->m_bIsInLayer) result.Add(ptrack->m_GUID);
1075 if (ptrack->m_bIsInLayer) result.Add(ptrack->m_GUID);
1084 wxArrayString result;
1086 for (
int i = 0; i < pWayPointMan->GetNumIcons(); i++) {
1087 wxString* ps = pWayPointMan->GetIconKey(i);
1099 wxDateTime plannedDeparture;
1101 wxPlugin_WaypointListNode* pwpnode = proute->
pWaypointList->GetFirst();
1103 pwp = pwpnode->GetData();
1109 cloneHyperlinkList(pWP, pwp);
1114 route->AddPoint(pWP);
1116 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
1119 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
1120 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
1127 pwpnode = pwpnode->GetNext();
1135 if (!proute->
m_GUID.IsEmpty()) {
1138 route->
m_btemp = (b_permanent ==
false);
1144 NavObj_dB::GetInstance().InsertRoute(route);
1146 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1147 pRouteManagerDialog->UpdateRouteListCtrl();
1153 bool b_found =
false;
1165 bool b_found =
false;
1169 if (pRoute) b_found =
true;
1172 bool b_permanent = (pRoute->
m_btemp ==
false);
1187 wxPlugin_WaypointListNode* pwpnode = ptrack->
pWaypointList->GetFirst();
1189 pwp = pwpnode->GetData();
1194 track->AddPoint(pWP);
1197 pSelect->AddSelectableTrackSegment(pWP_src->m_lat, pWP_src->m_lon,
1198 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
1203 pwpnode = pwpnode->GetNext();
1209 track->m_GUID = ptrack->
m_GUID;
1210 track->m_btemp = (b_permanent ==
false);
1213 if (b_permanent) NavObj_dB::GetInstance().InsertTrack(track);
1216 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1217 pRouteManagerDialog->UpdateTrkListCtrl();
1223 bool b_found =
false;
1228 NavObj_dB::GetInstance().DeleteTrack(pTrack);
1233 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1234 pRouteManagerDialog->UpdateTrkListCtrl();
1240 bool b_found =
false;
1244 if (pTrack) b_found =
true;
1247 bool b_permanent = (pTrack->m_btemp ==
false);
1248 NavObj_dB::GetInstance().DeleteTrack(pTrack);
1262 return glChartCanvas::HasNormalizedViewPort(ocpn_vp);
1288 glChartCanvas::NormalizedViewPort(ocpn_vp, lat, lon);
1307 pret->
MMSI = ptarget->MMSI;
1308 pret->
Class = ptarget->Class;
1310 pret->
SOG = ptarget->SOG;
1311 pret->
COG = ptarget->COG;
1312 pret->
HDG = ptarget->HDG;
1313 pret->
Lon = ptarget->Lon;
1314 pret->
Lat = ptarget->Lat;
1315 pret->
ROTAIS = ptarget->ROTAIS;
1316 pret->
ShipType = ptarget->ShipType;
1317 pret->
IMO = ptarget->IMO;
1319 pret->
Range_NM = ptarget->Range_NM;
1320 pret->
Brg = ptarget->Brg;
1324 pret->
TCPA = ptarget->TCPA;
1325 pret->
CPA = ptarget->CPA;
1329 memcpy(pret->CallSign, ptarget->CallSign,
sizeof(ptarget->CallSign) - 1);
1330 memcpy(pret->ShipName, ptarget->ShipName,
sizeof(ptarget->ShipName) - 1);
1349 gFrame->GetPrimaryCanvas()->DoRotateCanvas(rotation);
1355 gFrame->GetPrimaryCanvas()->DoTiltCanvas(tilt);
1359 gFrame->GetPrimaryCanvas()->SetVPProjection(projection);
1362OcpnSound* g_PluginSound = SoundFactory();
1363static void onPlugInPlaySoundExFinished(
void* ptr) {}
1367 bool ok = g_PluginSound->Load(sound_file, deviceIndex);
1369 wxLogWarning(
"Cannot load sound file: %s", sound_file);
1372 auto cmd_sound =
dynamic_cast<SystemCmdSound*
>(g_PluginSound);
1373 if (cmd_sound) cmd_sound->SetCmd(g_CmdSoundString.mb_str(wxConvUTF8));
1375 g_PluginSound->SetFinishedCallback(onPlugInPlaySoundExFinished, NULL);
1376 ok = g_PluginSound->Play();
1378 wxLogWarning(
"Cannot play sound file: %s", sound_file);
1384 return gFrame->GetPrimaryCanvas()->CheckEdgePan(x, y, dragging, margin,
1390 return style->GetIcon(name);
1394 gFrame->GetPrimaryCanvas()->pPlugIn_Cursor = pCursor;
1405 g_options->pScanCheckBox->SetValue(
true);
1406 g_options->pUpdateCheckBox->SetValue(
true);
1412 g_options->pUpdateCheckBox->SetValue(
true);
1419 wxString Title, wxString initDir) {
1420 return g_Platform->DoDirSelectorDialog(parent, file_spec, Title, initDir);
1424 wxString Title, wxString initDir,
1425 wxString suggestedName, wxString wildcard) {
1426 return g_Platform->DoFileSelectorDialog(parent, file_spec, Title, initDir,
1427 suggestedName, wildcard);
1450 if (gFrame->GetPrimaryCanvas())
1462 ViewPort ocpn_vp = CreateCompatibleViewportEx(vp);
1467 AISDraw(dc, ocpn_vp, NULL);
1471 return FontMgr::Get().
SetFontColor(TextElement, color);
1481 wxFontStyle style, wxFontWeight weight,
1482 bool underline,
const wxString& facename,
1483 wxFontEncoding encoding) {
1485 underline, facename, encoding);
1488int PluginGetMinAvailableGshhgQuality() {
1489 return gFrame->GetPrimaryCanvas()->GetMinAvailableGshhgQuality();
1491int PluginGetMaxAvailableGshhgQuality() {
1492 return gFrame->GetPrimaryCanvas()->GetMaxAvailableGshhgQuality();
1500bool LaunchDefaultBrowser_Plugin(wxString url) {
1501 if (g_Platform) g_Platform->platformLaunchDefaultBrowser(url);
1511 if (cc && cc->GetSelectedRoutePoint()) {
1512 return cc->GetSelectedRoutePoint()->
m_GUID;
1514 return wxEmptyString;
1519 if (cc && cc->GetSelectedRoute()) {
1520 return cc->GetSelectedRoute()->
m_GUID;
1522 return wxEmptyString;
1527 if (cc && cc->GetSelectedTrack()) {
1528 return cc->GetSelectedTrack()->m_GUID;
1530 return wxEmptyString;
1540 std::unique_ptr<PlugIn_Route> r;
1542 if (route ==
nullptr)
return r;
1551 PlugInFromRoutePoint(dst_wp, src_wp);
1563 std::unique_ptr<PlugIn_Track> t;
1566 if (!pTrack)
return t;
1568 std::unique_ptr<PlugIn_Track> tk =
1573 dst_track->
m_EndString = pTrack->m_TrackEndString;
1574 dst_track->
m_GUID = pTrack->m_GUID;
1576 for (
int i = 0; i < pTrack->GetnPoints(); i++) {
1581 dst_wp->
m_lat = ptp->m_lat;
1582 dst_wp->
m_lon = ptp->m_lon;
1601 auto oCanvas =
dynamic_cast<ChartCanvas*
>(canvas);
1602 if (oCanvas) gFrame->JumpToPosition(oCanvas, lat, lon,
scale);
1610 ChartCanvas* l_canvas = gFrame->GetCanvasUnderMouse();
1612 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); ++i) {
1613 if (l_canvas == g_canvasArray[i])
return i;
1631 if (g_canvasConfig == 0)
1632 return gFrame->GetPrimaryCanvas();
1634 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1635 return g_canvasArray[canvasIndex];
1643 if (g_canvasConfig == 0)
1644 return gFrame->GetPrimaryCanvas()->CheckEdgePan(x, y, dragging, margin,
1647 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1648 return g_canvasArray[canvasIndex]->CheckEdgePan(x, y, dragging, margin,
1657 if (g_canvasConfig == 0)
1658 gFrame->GetPrimaryCanvas()->pPlugIn_Cursor = pCursor;
1660 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1661 g_canvasArray[canvasIndex]->pPlugIn_Cursor = pCursor;
1667 if (g_canvasConfig == 1)
return 2;
1678 return wxRect(0, 0, 1, 1);
1708 pivp.
lat_min = tvp.GetBBox().GetMinLat();
1709 pivp.
lat_max = tvp.GetBBox().GetMaxLat();
1710 pivp.
lon_min = tvp.GetBBox().GetMinLon();
1711 pivp.
lon_max = tvp.GetBBox().GetMaxLon();
1713 pivp.
bValid = tvp.IsValid();
1718ListOfPI_S57Obj* PlugInManager::GetLightsObjRuleListVisibleAtLatLon(
1720 ListOfPI_S57Obj* list = NULL;
1734 list = picbx->GetLightsObjRuleListVisibleAtLatLon(zlat, zlon, &pi_vp);
1745#include <wx/listimpl.cpp>
1746WX_DEFINE_LIST(Plugin_WaypointExList)
1749PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex() {
InitDefaults(); }
1751PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex(
1752 double lat,
double lon,
const wxString& icon_ident,
const wxString& wp_name,
1753 const wxString& GUID,
const double ScaMin,
const bool bNameVisible,
1754 const int nRangeRings,
const double RangeDistance,
1755 const wxColor RangeColor) {
1787 if (!prp)
return false;
1789 if (prp->
m_bIsInRoute && !prp->IsShared())
return false;
1801 for (
RoutePoint* prp : *proute->pRoutePointList) {
1802 if (prp == pWP) nCount++;
1808PlugIn_Waypoint_Ex::~PlugIn_Waypoint_Ex() {}
1810WX_DEFINE_LIST(Plugin_WaypointExV2List)
1812PlugIn_Waypoint_ExV2::PlugIn_Waypoint_ExV2() {
InitDefaults(); }
1814PlugIn_Waypoint_ExV2::PlugIn_Waypoint_ExV2(
1815 double lat,
double lon,
const wxString& icon_ident,
const wxString& wp_name,
1816 const wxString& GUID,
const double ScaMin,
const double ScaMax,
1817 const bool bNameVisible,
const int nRangeRings,
const double RangeDistance,
1818 const int RangeDistanceUnits,
const wxColor RangeColor,
1819 const double WaypointArrivalRadius,
const bool ShowWaypointRangeRings,
1820 const double PlannedSpeed,
const wxString TideStation) {
1866PlugIn_Waypoint_ExV2::~PlugIn_Waypoint_ExV2() {}
1870 if (!prp)
return false;
1871 if (prp->
m_bIsInRoute && !prp->IsShared())
return false;
1882 for (
RoutePoint* prp : *proute->pRoutePointList) {
1883 if (prp == pWP) nCount++;
1890PlugIn_Route_ExV2::PlugIn_Route_ExV2() {
1902 wxDateTime now = wxDateTime::Now();
1903 m_GUID = wxString::Format(
"RT%d%d%d%d", (
int)now.GetMillisecond(),
1904 (
int)now.GetSecond(), (
int)now.GetMinute(),
1905 (
int)now.GetHour());
1909PlugIn_Route_ExV2::~PlugIn_Route_ExV2() {
1919 dst->
m_lat = src->m_lat;
1920 dst->
m_lon = src->m_lon;
1921 dst->
IconName = src->GetIconName();
1924 dst->
IconDescription = pWayPointMan->GetIconDescription(src->GetIconName());
1937 for (
Hyperlink* link : *src->m_HyperlinkList) {
1941 h->
Type = link->LType;
1956 dst->
scamin = src->GetScaMin();
1960 dst->
scamax = src->GetScaMax();
1969 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
1971 if (!prp)
return false;
1973 PlugInExV2FromRoutePoint(pwaypoint, prp);
1978static void cloneHyperlinkListExV2(
RoutePoint* dst,
1984 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
1990 h->Link = link->
Link;
1991 h->LType = link->
Type;
1995 linknode = linknode->GetNext();
2006 cloneHyperlinkListExV2(pWP, src);
2016 pWP->
m_btemp = (b_permanent ==
false);
2025 pWP->SetScaMin(src->
scamin);
2032 pWP->SetScaMax(src->
scamax);
2034 if (src->
m_ETD.IsValid())
2037 pWP->
SetETD(wxEmptyString);
2047 bool b_unique =
true;
2048 for (
RoutePoint* prp : *pWayPointMan->GetWaypointList()) {
2049 if (prp->m_GUID == pwaypointex->
m_GUID) {
2055 if (!b_unique)
return false;
2057 RoutePoint* pWP = CreateNewPoint(pwaypointex, b_permanent);
2059 pWP->SetShowWaypointRangeRings(pwaypointex->
nrange_rings > 0);
2061 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2064 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
2067 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2068 pRouteManagerDialog->UpdateWptListCtrl();
2075 bool b_found =
false;
2078 if (prp) b_found =
true;
2081 double lat_save = prp->m_lat;
2082 double lon_save = prp->m_lon;
2084 prp->m_lat = pwaypoint->
m_lat;
2085 prp->m_lon = pwaypoint->
m_lon;
2086 prp->SetIconName(pwaypoint->
IconName);
2100 h->Link = link->
Link;
2101 h->LType = link->
Type;
2107 prp->SetWaypointRangeRingsNumber(pwaypoint->
nrange_rings);
2112 prp->SetScaMin(pwaypoint->
scamin);
2116 prp->SetShowWaypointRangeRings(pwaypoint->
nrange_rings > 0);
2118 if (prp) prp->ReLoadIcon();
2120 auto canvas = gFrame->GetPrimaryCanvas();
2121 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
2122 canvas->GetScaleValue());
2124 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
2126 pFind->m_slat = pwaypoint->
m_lat;
2127 pFind->m_slon = pwaypoint->
m_lon;
2132 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
2135 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2136 pRouteManagerDialog->UpdateWptListCtrl();
2139 if (pwaypoint->
m_ETD.IsValid())
2142 prp->
SetETD(wxEmptyString);
2145 prp->SetScaMax(pwaypoint->
scamax);
2152 const wxString& GUID) {
2164 wxDateTime plannedDeparture;
2166 wxPlugin_WaypointExV2ListNode* pwpnode = proute->
pWaypointList->GetFirst();
2168 pwaypointex = pwpnode->GetData();
2170 pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->
m_GUID);
2172 pWP = CreateNewPoint(pwaypointex, b_permanent);
2176 route->AddPoint(pWP);
2178 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2181 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
2182 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
2189 pwpnode = pwpnode->GetNext();
2197 if (!proute->
m_GUID.IsEmpty()) {
2200 route->
m_btemp = (b_permanent ==
false);
2208 NavObj_dB::GetInstance().InsertRoute(route);
2211 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2212 pRouteManagerDialog->UpdateRouteListCtrl();
2218 bool b_found =
false;
2222 if (pRoute) b_found =
true;
2225 bool b_permanent = !pRoute->
m_btemp;
2235 std::unique_ptr<PlugIn_Route_ExV2> r;
2237 if (route ==
nullptr)
return r;
2244 PlugInExV2FromRoutePoint(dst_wp, src_wp);
2259PlugIn_Route_Ex::PlugIn_Route_Ex() {
2263PlugIn_Route_Ex::~PlugIn_Route_Ex() {
2275 dst->
m_lat = src->m_lat;
2276 dst->
m_lon = src->m_lon;
2277 dst->
IconName = src->GetIconName();
2280 dst->
IconDescription = pWayPointMan->GetIconDescription(src->GetIconName());
2292 for (
Hyperlink* link : *src->m_HyperlinkList) {
2296 h->
Type = link->LType;
2309 dst->
scamin = src->GetScaMin();
2314static void cloneHyperlinkListEx(
RoutePoint* dst,
2320 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
2326 h->Link = link->
Link;
2327 h->LType = link->
Type;
2331 linknode = linknode->GetNext();
2342 cloneHyperlinkListEx(pWP, src);
2352 pWP->
m_btemp = (b_permanent ==
false);
2359 pWP->SetScaMin(src->
scamin);
2368 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
2370 if (!prp)
return false;
2372 PlugInExFromRoutePoint(pwaypoint, prp);
2382 bool b_unique =
true;
2383 for (
RoutePoint* prp : *pWayPointMan->GetWaypointList()) {
2384 if (prp->m_GUID == pwaypointex->
m_GUID) {
2390 if (!b_unique)
return false;
2392 RoutePoint* pWP = CreateNewPoint(pwaypointex, b_permanent);
2394 pWP->SetShowWaypointRangeRings(pwaypointex->
nrange_rings > 0);
2396 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2399 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
2401 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2402 pRouteManagerDialog->UpdateWptListCtrl();
2409 bool b_found =
false;
2412 if (prp) b_found =
true;
2415 double lat_save = prp->m_lat;
2416 double lon_save = prp->m_lon;
2418 prp->m_lat = pwaypoint->
m_lat;
2419 prp->m_lon = pwaypoint->
m_lon;
2420 prp->SetIconName(pwaypoint->
IconName);
2432 wxPlugin_HyperlinkListNode* linknode =
2439 h->Link = link->
Link;
2440 h->LType = link->
Type;
2444 linknode = linknode->GetNext();
2450 prp->SetWaypointRangeRingsNumber(pwaypoint->
nrange_rings);
2453 prp->SetScaMin(pwaypoint->
scamin);
2457 prp->SetShowWaypointRangeRings(pwaypoint->
nrange_rings > 0);
2459 if (prp) prp->ReLoadIcon();
2461 auto canvas = gFrame->GetPrimaryCanvas();
2462 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
2463 canvas->GetScaleValue());
2465 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
2467 pFind->m_slat = pwaypoint->
m_lat;
2468 pFind->m_slon = pwaypoint->
m_lon;
2473 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
2476 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2477 pRouteManagerDialog->UpdateWptListCtrl();
2489 wxDateTime plannedDeparture;
2491 wxPlugin_WaypointExListNode* pwpnode = proute->
pWaypointList->GetFirst();
2493 pwaypointex = pwpnode->GetData();
2495 pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->
m_GUID);
2497 pWP = CreateNewPoint(pwaypointex, b_permanent);
2501 route->AddPoint(pWP);
2503 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2506 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
2507 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
2514 pwpnode = pwpnode->GetNext();
2522 if (!proute->
m_GUID.IsEmpty()) {
2525 route->
m_btemp = (b_permanent ==
false);
2533 NavObj_dB::GetInstance().InsertRoute(route);
2536 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2537 pRouteManagerDialog->UpdateRouteListCtrl();
2543 bool b_found =
false;
2547 if (pRoute) b_found =
true;
2550 bool b_permanent = !pRoute->
m_btemp;
2565 std::unique_ptr<PlugIn_Route_Ex> r;
2567 if (route ==
nullptr)
return r;
2576 PlugInExFromRoutePoint(dst_wp, src_wp);
2595 return wxEmptyString;
2604 return wxEmptyString;
2614 MyApp& app = wxGetApp();
2615 return (app.m_comm_bridge.GetPriorityMaps());
2619 MyApp& app = wxGetApp();
2620 app.m_comm_bridge.UpdateAndApplyMaps(map);
2624 std::vector<std::string> result;
2626 MyApp& app = wxGetApp();
2629 app.m_comm_bridge.GetPriorityContainer(
"position").active_source;
2630 result.push_back(
id);
2631 id = app.m_comm_bridge.GetPriorityContainer(
"velocity").active_source;
2632 result.push_back(
id);
2633 id = app.m_comm_bridge.GetPriorityContainer(
"heading").active_source;
2634 result.push_back(
id);
2635 id = app.m_comm_bridge.GetPriorityContainer(
"variation").active_source;
2636 result.push_back(
id);
2637 id = app.m_comm_bridge.GetPriorityContainer(
"satellites").active_source;
2638 result.push_back(
id);
2645#if defined(__WXOSX__) || defined(__WXGTK3__)
2647 if (gFrame) rv = gFrame->GetContentScaleFactor();
2652 double scaler = 1.0;
2654 if (gFrame) scaler = (double)(gFrame->ToDIP(100)) / 100.;
2671 bool state = gFrame->IsFullScreen();
2672 if (set_full_screen_on && !state)
2673 gFrame->ToggleFullScreen();
2674 else if (!set_full_screen_on && state)
2675 gFrame->ToggleFullScreen();
2678extern bool g_useMUI;
2680 bool current_mui_state = g_useMUI;
2683 if (enable && !current_mui_state) {
2685 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2687 if (cc) cc->CreateMUIBar();
2689 }
else if (!enable && current_mui_state) {
2691 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2693 if (cc) cc->DestroyMuiBar();
2702 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2703 if (cc) cc->SetShowGPSCompassWindow(enable);
2709 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2711 return cc->GetShowGPSCompassWindow();
2718extern bool g_bShowStatusBar;
2720 g_bShowStatusBar = enable;
2721 gFrame->ConfigureStatusBar();
2727 bool current_chartbar_state = g_bShowChartBar;
2728 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2730 if (current_chartbar_state && !enable) {
2731 gFrame->ToggleChartBar(cc);
2732 g_bShowChartBar = current_chartbar_state;
2733 }
else if (!current_chartbar_state && enable) {
2734 gFrame->ToggleChartBar(cc);
2735 g_bShowChartBar = current_chartbar_state;
2738 g_bShowChartBar = enable;
2743extern bool g_bShowMenuBar;
2746 if (g_bShowMenuBar) {
2747 g_bShowMenuBar =
false;
2748 if (gFrame->m_pMenuBar) {
2749 gFrame->SetMenuBar(NULL);
2750 gFrame->m_pMenuBar->Destroy();
2751 gFrame->m_pMenuBar = NULL;
2755 g_bShowMenuBar =
true;
2756 gFrame->BuildMenuBar();
2763 if (ps52plib) ps52plib->m_chartSymbols.UpdateTableColor(table, name, color);
2767 wxColor ret = wxColor(*wxRED);
2769 int i_table = ps52plib->m_chartSymbols.FindColorTable(map_name.c_str());
2770 ret = ps52plib->m_chartSymbols.GetwxColor(name.c_str(), i_table);
2777 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2778 if (cc) cc->SetShowGrid(enable);
2784 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2785 if (cc) cc->SetShowOutlines(enable);
2791 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2792 if (cc) cc->SetShowDepthUnits(enable);
2798 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2799 if (cc) cc->SetShowAIS(enable);
2805 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2806 if (cc) cc->ShowTides(enable);
2812 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2813 if (cc) cc->ShowCurrents(enable);
2819 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2820 if (cc) cc->SetShowENCText(enable);
2826 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2827 if (cc) cc->SetShowENCDepth(enable);
2833 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2834 if (cc) cc->SetShowENCBuoyLabels(enable);
2840 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2841 if (cc) cc->SetShowENCLights(enable);
2847 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2848 if (cc) cc->SetShowENCLightDesc(enable);
2853 int valSet = STANDARD;
2856 valSet = DISPLAYBASE;
2865 valSet = MARINERS_STANDARD;
2872 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2873 if (cc) cc->SetENCDisplayCategory(valSet);
2877 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2879 return ((
PI_DisCat)cc->GetENCDisplayCategory());
2881 return PI_DisCat::PI_STANDARD;
2885 int newMode = NORTH_UP_MODE;
2887 newMode = COURSE_UP_MODE;
2889 newMode = HEAD_UP_MODE;
2892 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2893 if (cc) cc->SetUpMode(newMode);
2898 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2899 if (cc)
return ((
PI_NavMode)cc->GetUpMode());
2901 return PI_NavMode::PI_NORTH_UP_MODE;
2906 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2907 if (cc)
return (cc->GetShowGrid());
2914 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2915 if (cc)
return (cc->GetShowOutlines());
2922 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2923 if (cc)
return (cc->GetShowDepthUnits());
2930 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2931 if (cc)
return (cc->GetShowAIS());
2938 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2939 if (cc)
return (cc->GetbShowTide());
2946 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2947 if (cc)
return (cc->GetbShowCurrent());
2954 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2955 if (cc)
return (cc->GetShowENCText());
2962 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2963 if (cc)
return (cc->GetShowENCDepth());
2970 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2971 if (cc)
return (cc->GetShowENCBuoyLabels());
2978 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2979 if (cc)
return (cc->GetShowENCLights());
2984bool GetShowENCLightDesc(
int CanvasIndex) {
2986 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2987 if (cc)
return (cc->GetbShowCurrent());
2998 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2999 if (cc) cc->ToggleLookahead();
3005 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3006 if (cc)
return (cc->GetLookahead());
3011extern bool g_bTrackActive;
3013 if (!g_bTrackActive && enable)
3015 else if (g_bTrackActive && !enable)
3021 gFrame->SetAndApplyColorScheme((ColorScheme)cs);
3028 if (win) win->Refresh(eraseBackground);
3032 if (g_canvasConfig == 1) {
3037 gFrame->CreateCanvasLayout();
3038 gFrame->DoChartUpdate();
3043 gFrame->CreateCanvasLayout();
3044 gFrame->DoChartUpdate();
3055 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3062 g_disable_main_toolbar = !enable;
3067 if (gFrame) gFrame->ScheduleSettingsDialog();
3072 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3074 bool bfollow = cc->GetbFollow();
3075 cc->ResetOwnshipOffset();
3086 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3088 if (cc->GetbFollow() != enable_follow) cc->TogglebFollow();
3095 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3096 if (cc)
return cc->GetbFollow();
3103 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3104 if (cc) cc->SetShowFocusBar(enable);
3109 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3110 if (cc)
return (cc->GetShowFocusBar());
3124 pConfig->LoadMyConfigRaw(
false);
3127 pConfig->LoadCanvasConfigs(
false);
3128 auto& config_array = ConfigMgr::Get().GetCanvasConfigArray();
3129 for (
auto pcc : config_array) {
3130 if (pcc && pcc->canvas) {
3131 pcc->canvas->ApplyCanvasConfig(pcc);
3132 pcc->canvas->Refresh();
3142 g_CanvasHideNotificationIcon = !enable;
3151wxString DropMarkPI(
double lat,
double lon) {
3152 if ((fabs(lat) > 80.0) || (fabs(lon) > 180.))
return "";
3155 new RoutePoint(lat, lon, g_default_wp_icon, wxEmptyString, wxEmptyString);
3157 pSelect->AddSelectableRoutePoint(lat, lon, pWP);
3158 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
3162wxString RouteCreatePI(
int canvas_index,
bool start) {
3163 if ((
size_t)canvas_index < g_canvasArray.GetCount()) {
3164 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3170 return cc->FinishRoute();
3177bool DoMeasurePI(
int canvas_index,
bool start) {
3178 if ((
size_t)canvas_index < g_canvasArray.GetCount()) {
3179 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3182 cc->StartMeasureRoute();
3185 cc->CancelMeasureRoute();
3194wxString NavToHerePI(
double lat,
double lon) {
3196 new RoutePoint(lat, lon, g_default_wp_icon, wxEmptyString, wxEmptyString);
3197 pSelect->AddSelectableRoutePoint(lat, lon, pWP_dest);
3200 wxEmptyString, wxEmptyString);
3206 temp_route->AddPoint(pWP_src);
3207 temp_route->AddPoint(pWP_dest);
3209 pSelect->AddSelectableRouteSegment(
gLat,
gLon, lat, lon, pWP_src, pWP_dest,
3220 return temp_route->
m_GUID;
3223bool ActivateRoutePI(wxString route_guid,
bool activate) {
3225 if (!route)
return false;
3242void EnableDefaultConsole(
bool enable) { g_bhide_route_console = !enable; }
3243void EnableDefaultContextMenus(
bool enable) { g_bhide_context_menus = !enable; }
3245void SetMinZoomScale(
double min_scale) {
3246 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
3248 cc->SetAbsoluteMinScale(min_scale);
3252void SetMaxZoomScale(
double max_scale) {
3253 g_maxzoomin = wxRound(wxMax(max_scale, 100.));
3256std::shared_ptr<PI_PointContext> GetContextAtPoint(
int x,
int y,
3258 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3260 return cc->GetCanvasContextAtPoint(x, y);
3262 auto rstruct = std::make_shared<PI_PointContext>();
3263 rstruct->object_type = OBJECT_UNKNOWN;
3264 rstruct->object_ident =
"";
3269wxBitmap GetObjectIcon_PlugIn(
const wxString& name) {
3271 return *pWayPointMan->GetIconBitmap(name);
3273 return wxNullBitmap;
3276bool IsRouteActive(wxString route_guid) {
3283void SetBoatPosition(
double zlat,
double zlon) {
3286 gFrame->UpdateStatusBar();
3289void RouteInsertWaypoint(
int canvas_index, wxString route_guid,
double zlat,
3293 if (!parent)
return;
3301 if ((seltype & SELTYPE_ROUTESEGMENT) != SELTYPE_ROUTESEGMENT)
return;
3303 bool rename =
false;
3304 route->InsertPointAfter(parent->GetFoundRoutepoint(), zlat, zlon, rename);
3306 pSelect->DeleteAllSelectableRoutePoints(route);
3307 pSelect->DeleteAllSelectableRouteSegments(route);
3308 pSelect->AddAllSelectableRouteSegments(route);
3309 pSelect->AddAllSelectableRoutePoints(route);
3311 NavObj_dB::GetInstance().UpdateRoute(route);
3314void RouteAppendWaypoint(
int canvas_index, wxString route_guid) {
3320 if (!parent)
return;
3322 parent->m_pMouseRoute = route;
3323 parent->m_routeState = route->GetnPoints() + 1;
3325 parent->m_pMouseRoute->SetHiLite(50);
3327 auto pLast = route->GetLastPoint();
3329 parent->m_prev_rlat = pLast->m_lat;
3330 parent->m_prev_rlon = pLast->m_lon;
3331 parent->m_prev_pMousePoint = pLast;
3333 parent->m_bAppendingRoute =
true;
3336void FinishRoute(
int canvas_index) {
3339 if (!parent)
return;
3341 parent->FinishRoute();
3344bool IsRouteBeingCreated(
int canvas_index) {
3347 if (!parent)
return false;
3348 return !(parent->m_pMouseRoute == NULL);
3351bool AreRouteWaypointNamesVisible(wxString route_guid) {
3353 if (!route)
return false;
3354 return route->AreWaypointNamesVisible();
3357void ShowRouteWaypointNames(wxString route_guid,
bool show) {
3360 route->ShowWaypointNames(show);
3363void NavigateToWaypoint(wxString waypoint_guid) {
3364 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(waypoint_guid);
3368 wxEmptyString, wxEmptyString);
3374 temp_route->AddPoint(pWP_src);
3375 temp_route->AddPoint(prp);
3376 prp->SetShared(
true);
3378 pSelect->AddSelectableRouteSegment(
gLat,
gLon, prp->m_lat, prp->m_lon,
3379 pWP_src, prp, temp_route);
3381 wxString name = prp->GetName();
3382 if (name.IsEmpty()) name = _(
"(Unnamed Waypoint)");
3383 wxString rteName = _(
"Go to ");
3384 rteName.Append(name);
3395bool IsAISTrackVisible(wxString ais_mmsi) {
3397 ais_mmsi.ToLong(&mmsi);
3398 auto myptarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3400 return myptarget->b_show_track;
3405void AISToggleShowTrack(wxString ais_mmsi) {
3407 ais_mmsi.ToLong(&mmsi);
3408 auto myptarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3409 if (myptarget) myptarget->ToggleShowTrack();
3412bool IsAIS_CPAVisible(wxString ais_mmsi) {
3414 ais_mmsi.ToLong(&mmsi);
3415 auto myptarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3417 return myptarget->b_show_AIS_CPA;
3422void AISToggleShowCPA(wxString ais_mmsi) {
3424 ais_mmsi.ToLong(&mmsi);
3425 auto myptarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3426 if (myptarget) myptarget->Toggle_AIS_CPA();
3429void ShowAISTargetQueryDialog(
int canvas_index, wxString ais_mmsi) {
3432 if (!parent)
return;
3435 ais_mmsi.ToLong(&mmsi);
3436 ShowAISTargetQueryDialog(parent, mmsi);
3439void ShowAISTargetList(
int canvas_index) {
3442 if (!parent)
return;
3443 parent->ShowAISTargetList();
3446bool IsMeasureActive(
int canvas_index) {
3449 if (!parent)
return false;
3450 return parent->m_bMeasure_Active;
3453void CancelMeasure(
int canvas_index) {
3456 if (!parent)
return;
3457 parent->CancelMeasureRoute();
3460void SetDepthUnitVisible(
bool bviz) { g_bhide_depth_units = !bviz; }
3462void SetOverzoomFlagVisible(
bool bviz) { g_bhide_overzoom_flag = !bviz; }
3465void AddNoShowDirectory(std::string chart_dir) {
3468void RemoveNoShowDirectory(std::string chart_dir) {
3475const std::vector<std::string>& GetNoShowVector() {
3481void CenterToAisTarget(wxString ais_mmsi) {
3483 if (ais_mmsi.ToLong(&mmsi)) {
3484 std::shared_ptr<AisTargetData> pAISTarget = NULL;
3485 if (
g_pAIS) pAISTarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3490 gFrame->JumpToPosition(gFrame->GetFocusCanvas(), pAISTarget->Lat,
3491 pAISTarget->Lon,
scale);
3496 double factor = cc->GetScaleValue() / 5000.0;
3497 gFrame->JumpToPosition(gFrame->GetFocusCanvas(), pAISTarget->Lat,
3498 pAISTarget->Lon,
scale * factor);
3505void AisTargetCreateWpt(wxString ais_mmsi) {
3507 if (ais_mmsi.ToLong(&mmsi)) {
3508 std::shared_ptr<AisTargetData> pAISTarget = NULL;
3509 if (
g_pAIS) pAISTarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3513 new RoutePoint(pAISTarget->Lat, pAISTarget->Lon, g_default_wp_icon,
3514 wxEmptyString, wxEmptyString);
3516 pSelect->AddSelectableRoutePoint(pAISTarget->Lat, pAISTarget->Lon, pWP);
3517 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
3519 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
3520 pRouteManagerDialog->UpdateWptListCtrl();
3525void AisShowAllTracks(
bool show) {
3527 for (
const auto& it :
g_pAIS->GetTargetList()) {
3528 auto pAISTarget = it.second;
3529 if (NULL != pAISTarget) {
3530 pAISTarget->b_show_track = show;
3533 std::map<int, Track*>::iterator itt;
3534 itt =
g_pAIS->m_persistent_tracks.find(pAISTarget->MMSI);
3535 if (itt !=
g_pAIS->m_persistent_tracks.end()) {
3536 pAISTarget->b_show_track_old = show;
3544void AisToggleTrack(wxString ais_mmsi) {
3546 if (ais_mmsi.ToLong(&mmsi)) {
3547 std::shared_ptr<AisTargetData> pAISTarget = NULL;
3548 if (
g_pAIS) pAISTarget =
g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3551 pAISTarget->b_show_track_old =
3552 pAISTarget->b_show_track;
3553 pAISTarget->b_show_track =
3554 !pAISTarget->b_show_track;
3560int GetContextMenuMask() {
return g_canvas_context_Menu_Disable_Mask; }
3561void SetContextMenuMask(
int mask) { g_canvas_context_Menu_Disable_Mask = mask; }
AisDecoder * g_pAIS
Global instance.
Class AisDecoder and helpers.
std::vector< std::string > ChartDirectoryExcludedVector
Global instance.
ChartDB * ChartData
Global instance.
Charts database management
ChartGroupArray * g_pGroupArray
Global instance.
ChartCanvas * g_focusCanvas
Global instance.
ChartCanvas * g_overlayCanvas
Global instance.
Generic Chart canvas base.
ChartCanvas - Main chart display and interaction component.
int PrepareContextSelections(double lat, double lon)
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.
void Notify(std::shared_ptr< const NavMsg > message)
Accept message received by driver, make it available for upper layers.
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_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.
int m_lastMousePointIndex
Index of the most recently interacted with route point.
bool DeleteRoute(Route *pRoute)
bool ActivateRoute(Route *pRouteToActivate, RoutePoint *pStartPoint=NULL)
Activates a route for navigation.
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.
void SetBoxes()
Computes the bounding box coordinates for the current viewport.
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.
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.
Config file user configuration interface.
OpenGL chart rendering canvas.
wxFont GetOCPNGUIScaledFont(wxString item)
Retrieves a font optimized for touch and high-resolution interfaces.
General purpose GUI support.
Miscellaneous globals primarely used by gui layer, not persisted in configuration file.
GUI constant definitions.
Multiplexer class and helpers.
MySQL based storage for routes, tracks, etc.
wxString getUsrHeightUnit(int unit)
Get the abbreviation for the preferred height unit.
double toUsrHeight(double m_height, int unit)
Convert height from meters to preferred height units.
double fromUsrDistance(double usr_distance, int unit, int default_val)
Convert distance from user units to nautical miles.
double fromUsrHeight(double usr_height, int unit)
Convert height from preferred height units to meters.
double toUsrDepth(double m_depth, int unit)
Convert a depth from meters to user display units.
double toUsrTemp(double cel_temp, int unit)
Convert a temperature from Celsius to user display units.
double toUsrDistance(double nm_distance, int unit)
Convert a distance from nautical miles (NMi) to user display units.
User notifications manager.
OCPN_AUIManager * g_pauimgr
Global instance.
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
Color schemes for different lighting conditions.
@ 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.
void RemovePlugInTool(int tool_id)
Removes a tool from OpenCPN's toolbar.
void SetCanvasProjection(int projection)
Sets chart projection type.
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.
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.
wxString getUsrDistanceUnit_Plugin(int unit)
Gets display string for user's preferred distance unit.
bool DeletePlugInTrack(wxString &GUID)
Deletes a track.
wxFileConfig * GetOCPNConfigObject()
Gets OpenCPN's configuration object.
wxString getUsrHeightUnit_Plugin(int unit)
Gets display string for user's preferred height unit.
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.
wxArrayString GetIconNameArray()
Gets array of available waypoint icons.
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.
bool ShuttingDown()
Checks if OpenCPN is in shutdown process.
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.
wxArrayString GetTrackGUIDArray()
Gets array of track GUIDs.
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.
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.
ArrayOfPlugIn_AIS_Targets * GetAISTargetArray()
Gets array of AIS targets.
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.
double fromDMM_Plugin(wxString sdms)
Converts degrees/decimal minutes string to decimal degrees.
void EnableENCTextDisplay(bool enable, int CanvasIndex)
Controls ENC text label display.
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 functionally-named color for a specific UI purpose.
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.
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.
double toUsrHeight_Plugin(double m_height, int unit)
Height Conversion Functions.
wxColor GetGlobalColorD(std::string map_name, std::string name)
Gets a color from the global color scheme.
wxString GetNewGUID()
Generates a new globally unique identifier (GUID).
bool GetEnableCompassGPSIcon(int CanvasIndex)
Gets compass icon visibility state.
void SetMUICursor_PlugIn(wxCursor *pCursor, int canvasIndex)
Sets mouse cursor for specific canvas.
wxString * GetpSharedDataLocation()
Gets shared application data location.
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.
wxWindow * GetCanvasUnderMouse()
Gets canvas window under mouse cursor.
wxArrayString GetRouteGUIDArray()
Gets array of route GUIDs.
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.
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.
int GetCanvasIndexUnderMouse()
Gets index of chart canvas under mouse cursor.
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.
wxAuiManager * GetFrameAuiManager()
Gets main frame AUI manager.
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.
int GetChartbarHeight()
Gets height of chart bar in pixels.
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.
wxArrayString GetWaypointGUIDArray()
Gets array of all waypoint/marks GUIDs.
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.
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.
bool IsTouchInterface_PlugIn()
Checks if touch interface mode is enabled.
int GetLatLonFormat()
Gets currently selected latitude/longitude display format.
bool AddSingleWaypoint(PlugIn_Waypoint *pwaypoint, bool b_permanent)
Adds a single waypoint.
bool GetSingleWaypoint(wxString GUID, PlugIn_Waypoint *pwaypoint)
Gets waypoint data by GUID.
double fromUsrHeight_Plugin(double usr_height, int unit)
Converts from user's preferred height unit to meters.
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.
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.
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.
void ForceChartDBUpdate()
Forces an update of the chart database.
bool GetSingleWaypointEx(wxString GUID, PlugIn_Waypoint_Ex *pwaypoint)
Gets extended waypoint data by GUID.
void ForceChartDBRebuild()
Forces complete rebuild of chart database.
options * g_options
Global instance.
double gLat
Vessel's current latitude in decimal degrees.
double gCog
Course over ground in degrees (0-359.99).
double gSog
Speed over ground in knots.
double gLon
Vessel's current longitude in decimal degrees.
Position, course, speed, etc.
Tools to send data to plugins.
PlugInManager and helper classes – Mostly gui parts (dialogs) and plugin API stuff.
Routeman * g_pRouteMan
Global instance.
RouteList * pRouteList
Global instance.
bool g_bPluginHandleAutopilotRoute
Global instance.
Select * pSelect
Global instance.
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.
wxBitmap LoadSVG(const wxString filename, const unsigned int width, const unsigned int height, wxBitmap *default_bitmap, bool use_cache)
Load SVG file and return it's bitmap representation of requested size In case file can't be loaded an...
bool SVGDocumentPixelSize(const wxString filename, unsigned int &width, unsigned int &height)
Return the size of the SVG document in standard 96 DPI pixels https://developer.mozilla....
std::vector< Track * > g_TrackList
Global instance.
Recorded track abstraction.
WaypointMan drawing stuff.