111 MyFrame(
const wxString& title,
const wxPoint& pos,
const wxSize& size,
112 RestServer& rest_server, wxAuiDefaultDockArt* pauidockart,
113 OpenFileFunc open_gpx_file);
117 void SetGPSCompassScale()
override;
118 void FastClose()
override;
119 void RefreshAllCanvas(
bool bErase =
true)
override;
120 void UpdateStatusBar()
override;
121 void ToggleFullScreen()
override;
122 Track* TrackOff(
bool do_add_point =
false)
override;
123 void TrackOn(
void)
override;
124 void ProcessOptionsDialog(
int resultFlags)
override {
125 ProcessOptionsDialog(resultFlags,
nullptr);
128 void SetAlertString(wxString msg)
override {
129 GetPrimaryCanvas()->SetAlertString(msg);
132 void JumpToPosition(
double lat,
double lon)
override {
133 if (!GetFocusCanvas())
return;
134 JumpToPosition(GetFocusCanvas(), lat, lon, GetFocusCanvas()->GetVPScale());
137 void JumpToPosition(
double lat,
double lon,
double scale)
override {
138 if (!GetFocusCanvas())
return;
139 JumpToPosition(GetFocusCanvas(), lat, lon,
scale);
143 double scale)
override {
147 JumpToPosition(cc, lat, lon,
scale);
150 double lon)
override {
154 JumpToPosition(cc, lat, lon, GetFocusCanvas()->GetVPScale());
158 return GetPrimaryCanvas();
162 return GetFocusCanvas();
166 return SwitchKBFocusCanvas(
dynamic_cast<ChartCanvas*
>(acc));
169 double GetCanvasTrueScale()
override {
170 return GetPrimaryCanvas()->GetCanvasTrueScale();
173 double GetPixPerMM()
override {
return GetPrimaryCanvas()->
GetPixPerMM(); }
175 double GetContentScaleFactor()
override {
176 if (GetPrimaryCanvas())
177 return GetPrimaryCanvas()->GetContentScaleFactor();
182 void RequestNewToolbars(
bool bforcenew =
false)
override;
184 bool GetCanvasPointPix(
double rlat,
double rlon, wxPoint* r)
override {
188 virtual wxSize GetFocusCanvasSize()
override {
189 return GetFocusCanvas() ? GetFocusCanvas()->GetSize() : wxSize(0, 0);
192 void CancelAllMouseRoute()
override;
193 void InvalidateAllCanvasUndo()
override;
194 void PositionConsole()
override;
195 void InvalidateAllGL()
override;
197 auto chart =
dynamic_cast<ChartBase*
>(arg);
199 return GetPrimaryCanvas()->GetBestVPScale(chart);
204 void LoadHarmonics()
override;
206 bool DropMarker(
bool atOwnShip =
true)
override;
207 double GetMag(
double a,
double lat,
double lon)
override;
208 void SetMasterToolbarItemState(
int tool_id,
bool state)
override;
209 bool DoChartUpdate()
override;
210 void ProcessCanvasResize()
override;
211 bool SetGlobalToolbarViz(
bool viz)
override;
217 UpdateGlobalMenuItems(
dynamic_cast<ChartCanvas*
>(acc));
219 void UpdateGlobalMenuItems()
override;
221 RefreshCanvasOther(
dynamic_cast<ChartCanvas*
>(ccThis));
223 virtual double* GetCOGTable()
override {
return COGTable; }
224 virtual void StartCogTimer()
override {
225 FrameCOGTimer.Start(100, wxTIMER_CONTINUOUS);
228 wxWindow* GetPrimaryCanvasWindow()
override {
return GetPrimaryCanvas(); }
229 void ApplyGlobalSettings(
bool bnewtoolbar)
override;
230 void SetMenubarItemState(
int item_id,
bool state)
override;
231 void ToggleColorScheme()
override;
232 void ActivateMOB()
override;
233 void ToggleTestPause()
override;
238 void DoSettings()
override;
240 void UpdateRotationState(
double rotation)
override;
241 void SetChartUpdatePeriod()
override;
242 wxStatusBar* GetStatusBar()
override {
return wxFrame::GetStatusBar(); }
243 wxStatusBar* GetFrameStatusBar()
const override {
return m_pStatusBar; }
245 enum _DisCat nset)
override {
246 SetENCDisplayCategory(
dynamic_cast<ChartCanvas*
>(acc), nset);
248 int GetCanvasIndexUnderMouse()
override;
250 double GetCanvasRefScale()
override {
251 return GetPrimaryCanvas()->GetVP().
ref_scale;
256 void SendGlJsonConfigMsg()
override {
257 if (GetPrimaryCanvas() && GetPrimaryCanvas()->GetglCanvas())
258 GetPrimaryCanvas()->GetglCanvas()->SendJSONConfigMessage();
260 bool CanAccelerateGlPanning()
override {
261 return GetPrimaryCanvas()->GetglCanvas()->CanAcceleratePanning();
263 void SetupGlCompression()
override {
264 GetPrimaryCanvas()->GetglCanvas()->SetupCompression();
266 wxString GetGlVersionString()
override {
267 return GetPrimaryCanvas()->GetglCanvas()->GetVersionString();
269 wxGLCanvas* GetWxGlCanvas()
override {
270 return GetPrimaryCanvas()->GetglCanvas();
274 void SendGlJsonConfigMsg()
override {}
275 bool CanAccelerateGlPanning()
override {
return false; }
276 void SetupGlCompression()
override {}
277 wxString GetGlVersionString()
override {
return ""; }
278 wxGLCanvas* GetWxGlCanvas()
override {
return nullptr; }
281 int GetNextToolbarToolId()
override {
282 return m_next_available_plugin_tool_id;
284 void SetToolbarItemBitmaps(
int tool_id, wxBitmap* bitmap,
285 wxBitmap* bmpDisabled)
override;
286 void SetToolbarItemSVG(
int tool_id, wxString normalSVGfile,
287 wxString rolloverSVGfile,
288 wxString toggledSVGfile)
override;
289 void UpdateAllFonts()
override;
290 void ScheduleReconfigAndSettingsReload(
bool reload,
bool new_dialog)
override;
291 void ScheduleReloadCharts()
override;
292 void ChartsRefresh()
override;
293 void FreezeCharts()
override;
294 void ThawCharts()
override;
296 void ScheduleDeleteSettingsDialog()
override;
298 void BeforeUndoableAction(UndoType undo_type,
RoutePoint* point,
299 UndoBeforePointerType pointer_type,
300 UndoItemPointer pointer)
override {
301 if (!GetPrimaryCanvas())
return;
302 GetPrimaryCanvas()->undo->BeforeUndoableAction(undo_type, point,
303 pointer_type, pointer);
306 virtual void AfterUndoableAction(UndoItemPointer pointer)
override {
307 GetPrimaryCanvas()->undo->AfterUndoableAction(pointer);
309 virtual void TouchAISActive()
override;
310 virtual void UpdateAISMOBRoute(
const AisTargetData* ptarget)
override;
311 virtual void ActivateAISMOBRoute(
const AisTargetData* ptarget)
override;
312 void EnableSettingsTool(
bool _enable)
override {
313 if (m_pMenuBar) m_pMenuBar->Enable(wxID_PREFERENCES, _enable);
320 void OnToolLeftClick(wxCommandEvent& event)
override;
322 bool DisableTbarTooltips();
323 void EnableTbarTooltips();
324 void HideTbarTooltip();
326 void SetENCDisplayCategory(
ChartCanvas* cc,
enum _DisCat nset);
329 wxFont* GetFont(wxFont* font,
double scale)
override;
330 wxFont* GetDefaultFont(wxString label,
int Ptsize)
override;
331 wxFont* GetScaledFont(
int pointSize, wxFontFamily family, wxFontStyle style,
332 wxFontWeight weight,
const wxString faceName,
333 double scale)
override;
335 int GetApplicationMemoryUse(
void);
337 void OnEraseBackground(wxEraseEvent& event);
338 void OnMaximize(wxMaximizeEvent& event);
339 void OnCloseWindow(wxCloseEvent& event);
340 void OnExit(wxCommandEvent& event);
341 void OnSize(wxSizeEvent& event);
342 void OnMove(wxMoveEvent& event);
343 void OnInitTimer(wxTimerEvent& event);
356 void OnMemFootTimer(wxTimerEvent& event);
357 void OnRecaptureTimer(wxTimerEvent& event);
359 void OnIconize(wxIconizeEvent& event);
360 void OnBellsFinished(wxCommandEvent& event);
375#ifdef wxHAS_POWER_EVENTS
376 void OnSuspending(wxPowerEvent& event);
377 void OnSuspended(wxPowerEvent& event);
378 void OnSuspendCancel(wxPowerEvent& event);
379 void OnResume(wxPowerEvent& event);
383 void selectChartDisplay(
int type,
int family);
384 void applySettingsString(wxString settings);
385 void setStringVP(wxString VPS);
386 void InvalidateAllQuilts();
394 void NotifyChildrenResize();
397 void DoSettingsNew(
void);
400 void TriggerRecaptureTimer();
402 void MouseEvent(wxMouseEvent& event);
403 void CenterView(
ChartCanvas* cc,
const LLBBox& bbox);
407 void BuildMenuBar(
void);
408 void RegisterGlobalMenuItems();
410 void DoOptionsDialog();
411 void ProcessOptionsDialog(
int resultFlags, ArrayOfCDI* pNewDirArray);
412 void PrepareOptionsClose(
options* settings,
int settings_return_value);
424 void ToggleRocks(
void);
433 void TrackDailyRestart(
void);
434 bool ShouldRestartTrack();
435 void InitializeTrackRestart();
439 void SubmergeAllCanvasToolbars(
void);
440 void SurfaceAllCanvasToolbars(
void);
441 void SetAllToolbarScale(
void);
443 void RefreshGroupIndices(
void);
445 double GetBestVPScale(
ChartBase* pchart);
447 DataMonitor* GetDataMonitor()
const {
return m_data_monitor; }
449 void SetAndApplyColorScheme(ColorScheme cs);
451 void OnFrameTCTimer(wxTimerEvent& event);
452 void OnFrameCOGTimer(wxTimerEvent& event);
454 void HandleBasicNavMsg(std::shared_ptr<const BasicNavDataMsg> msg);
455 void HandleGPSWatchdogMsg(std::shared_ptr<const GPSWatchdogMsg> msg);
457 bool CheckGroup(
int igroup);
458 bool SendJSON_WMM_Var_Request(
double lat,
double lon, wxDateTime date);
460 void DestroyPersistentDialogs();
461 void UpdateAISTool(
void);
462 wxMenuBar* m_pMenuBar;
469 wxTimer FrameTCTimer;
471 wxTimer FrameCOGTimer;
472 wxTimer MemFootTimer;
473 wxTimer m_resizeTimer;
474 wxTimer FrameTenHzTimer;
479 wxGenericProgressDialog* Updateprog =
nullptr;
482 void RequestNewToolbarArgEvent(wxCommandEvent& WXUNUSED(event)) {
483 return RequestNewMasterToolbar();
486 void UpdateGPSCompassStatusBoxes(
bool b_force_new =
false);
488 bool UpdateChartDatabaseInplace(ArrayOfCDI& DirArray,
bool b_force,
490 const wxString& ChartListFileName);
491 void FinalizeChartDBUpdate();
493 bool m_bdefer_resize;
495 double COGTable[kMaxCogAverageSeconds];
497 void CreateCanvasLayout(
bool b_useStoredSize =
false);
499 void SetCanvasSizes(wxSize frameSize);
502 void RequestNewMasterToolbar(
bool bforcenew =
true);
503 bool CheckAndAddPlugInTool();
504 bool AddDefaultPositionPlugInTools();
506 void UpdateCanvasConfigDescriptors();
507 void ScheduleSettingsDialog();
508 void ScheduleSettingsDialogNew();
509 static bool StartRebuildChartDatabase();
510 void PositionIENCToolbar();
512 void InitAppMsgBusListener();
514 void ReleaseApiListeners();
515 void ConfigureStatusBar();
518 void ProcessUnitTest();
519 bool ProcessQuitFlag();
520 void ProcessDeferredTrackOn();
521 void SendFixToPlugins();
522 void ProcessAnchorWatch();
523 void ProcessLogAndBells();
524 void CalculateCOGAverage();
525 void CheckToolbarPosition();
527 void ODoSetSize(
void);
530 void UpdateAllToolbars(ColorScheme cs);
532 void FilterCogSog(
void);
534 void ApplyGlobalColorSchemetoStatusBar(
void);
536 bool ScrubGroupArray();
538 void OnToolbarAnimateTimer(wxTimerEvent& event);
539 bool CollapseGlobalToolbar();
541 int m_StatusBarFieldCount;
543 wxDateTime m_MMEAeventTime;
544 unsigned long m_ulLastNMEATicktime;
546 wxDateTime m_fix_start_time;
548 wxString m_last_reported_chart_name;
549 wxString m_last_reported_chart_pubdate;
551 wxString m_lastAISiconName;
554 int m_next_available_plugin_tool_id;
556 double COGFilterTable[kMaxCogsogFilterSeconds];
557 double SOGFilterTable[kMaxCogsogFilterSeconds];
559 int m_ChartUpdatePeriod;
560 bool m_last_bGPSValid;
561 bool m_last_bVelocityValid;
564 wxString prev_locale;
576 wxDateTime m_target_rotate_time;
578 wxTimer ToolbarAnimateTimer;
579 int m_nMasterToolCountShown;
580 wxTimer m_recaptureTimer;
582 std::unique_ptr<LoadErrorsDlgCtrl> m_load_errors_dlg_ctrl;
583 wxString m_gshhg_chart_loc;
586 ObservableListener listener_basic_navdata;
587 ObservableListener listener_gps_watchdog;
588 obs::Listener m_on_raise_listener;
589 obs::Listener m_on_quit_listener;
590 obs::Listener m_routes_update_listener;
591 obs::Listener m_evt_drv_msg_listener;
592 obs::Listener m_update_statusbar_listener;
593 obs::Listener m_center_aistarget_listener;
594 obs::Listener m_reload_charts_listener;
597 wxStatusBar* m_pStatusBar;
599 bool m_need_new_options;
600 wxArrayString pathArray;
601 double restoreScale[4];
602 unsigned int last_canvasConfig;
604 wxAuiDefaultDockArt* m_pauidockart;
606 OpenFileFunc m_open_gpx_file;
608 void CenterAisTarget(
const std::shared_ptr<const AisTargetData>& ais_target);
610 DECLARE_EVENT_TABLE()