33#include <wx/datetime.h>
52enum eMenuItems { ID_NAVLEG = 1, ID_NAVROUTE, ID_NAVHIGHWAY } menuItems;
60EVT_PAINT(ConsoleCanvasWin::OnPaint)
61EVT_SHOW(ConsoleCanvasWin::OnShow)
62EVT_CONTEXT_MENU(ConsoleCanvasWin::OnContextMenu)
63EVT_MENU(ID_NAVLEG, ConsoleCanvasWin::OnContextMenuSelection)
64EVT_MENU(ID_NAVROUTE, ConsoleCanvasWin::OnContextMenuSelection)
65EVT_MENU(ID_NAVHIGHWAY, ConsoleCanvasWin::OnContextMenuSelection)
70 m_speedUsed = SPEED_SOG;
74 long style = wxSIMPLE_BORDER | wxCLIP_CHILDREN | wxFRAME_FLOAT_ON_PARENT;
77 style |= wxFRAME_NO_TASKBAR;
80 wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style);
84 m_pitemBoxSizerLeg =
new wxBoxSizer(wxVERTICAL);
86 pThisLegText =
new wxStaticText(
this, -1, _(
"This Leg"));
88 m_pitemBoxSizerLeg->Add(pThisLegText, 0, wxALIGN_CENTER_HORIZONTAL, 2);
93 qFont->GetPointSize(), wxFONTFAMILY_DEFAULT, qFont->GetStyle(),
94 wxFONTWEIGHT_BOLD,
false, qFont->GetFaceName());
95 pThisLegText->SetFont(*pThisLegFont);
97 pXTE =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
98 pXTE->SetALabel(
"XTE");
99 m_pitemBoxSizerLeg->Add(pXTE, 1, wxALIGN_LEFT | wxALL, 2);
101 pBRG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
102 pBRG->SetALabel(
"BRG");
103 m_pitemBoxSizerLeg->Add(pBRG, 1, wxALIGN_LEFT | wxALL, 2);
105 pVMG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
106 pVMG->SetALabel(
"VMG");
107 m_pitemBoxSizerLeg->Add(pVMG, 1, wxALIGN_LEFT | wxALL, 2);
109 pRNG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
110 pRNG->SetALabel(
"RNG");
111 m_pitemBoxSizerLeg->Add(pRNG, 1, wxALIGN_LEFT | wxALL, 2);
113 pTTG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
114 pTTG->SetALabel(
"TTG @VMG");
115 m_pitemBoxSizerLeg->Add(pTTG, 1, wxALIGN_LEFT | wxALL, 2);
119 pCDI =
new CDI(
this, -1, wxSIMPLE_BORDER,
"CDI");
120 m_pitemBoxSizerLeg->AddSpacer(5);
121 m_pitemBoxSizerLeg->Add(pCDI, 0, wxALL | wxEXPAND, 2);
123 SetSizer(m_pitemBoxSizerLeg);
124 m_pitemBoxSizerLeg->SetSizeHints(
this);
128 if (g_bShowRouteTotal)
129 pThisLegText->SetLabel(_(
"Route"));
131 pThisLegText->SetLabel(_(
"This Leg"));
136ConsoleCanvasWin::~ConsoleCanvasWin() {
delete pCDI; }
138void ConsoleCanvasWin::SetColorScheme(ColorScheme cs) {
139 pbackBrush = wxTheBrushList->FindOrCreateBrush(
140 GetGlobalColor(
"DILG1" ), wxBRUSHSTYLE_SOLID);
141 SetBackgroundColour(GetGlobalColor(
"DILG1" ));
143 if (g_bShowRouteTotal)
144 pThisLegText->SetLabel(_(
"Route"));
146 pThisLegText->SetLabel(_(
"This Leg"));
150 pThisLegText->SetBackgroundColour(GetGlobalColor(
"DILG1" ));
152 pXTE->SetColorScheme(cs);
153 pBRG->SetColorScheme(cs);
154 pRNG->SetColorScheme(cs);
155 pTTG->SetColorScheme(cs);
156 pVMG->SetColorScheme(cs);
158 pCDI->SetColorScheme(cs);
161void ConsoleCanvasWin::OnPaint(wxPaintEvent& event) {
166 pThisLegText->Refresh();
167 m_bNeedClear =
false;
171 if (!g_bShowActiveRouteHighway) pCDI->Hide();
174void ConsoleCanvasWin::OnShow(wxShowEvent& event) {
175 pCDI->Show(g_bShowActiveRouteHighway);
176 m_pitemBoxSizerLeg->SetSizeHints(
this);
179void ConsoleCanvasWin::LegRoute() {
180 if (g_bShowRouteTotal)
181 pThisLegText->SetLabel(_(
"Route"));
183 pThisLegText->SetLabel(_(
"This Leg"));
185 pThisLegText->Refresh(
true);
186 RefreshConsoleData();
189void ConsoleCanvasWin::OnContextMenu(wxContextMenuEvent& event) {
190 wxMenu* contextMenu =
new wxMenu();
192 new wxMenuItem(contextMenu, ID_NAVLEG, _(
"This Leg"),
"", wxITEM_RADIO);
193 wxMenuItem* btnRoute =
new wxMenuItem(contextMenu, ID_NAVROUTE,
194 _(
"Full Route"),
"", wxITEM_RADIO);
195 wxMenuItem* btnHighw =
new wxMenuItem(contextMenu, ID_NAVHIGHWAY,
196 _(
"Show Highway"),
"", wxITEM_CHECK);
197 contextMenu->Append(btnLeg);
198 contextMenu->Append(btnRoute);
199 contextMenu->AppendSeparator();
200 contextMenu->Append(btnHighw);
202 btnLeg->Check(!g_bShowRouteTotal);
203 btnRoute->Check(g_bShowRouteTotal);
204 btnHighw->Check(g_bShowActiveRouteHighway);
206 PopupMenu(contextMenu);
211void ConsoleCanvasWin::OnContextMenuSelection(wxCommandEvent& event) {
212 switch (event.GetId()) {
214 g_bShowRouteTotal =
false;
219 g_bShowRouteTotal =
true;
223 case ID_NAVHIGHWAY: {
224 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
225 if (g_bShowActiveRouteHighway) {
230 m_pitemBoxSizerLeg->SetSizeHints(
this);
236void ConsoleCanvasWin::ToggleShowHighway() {
237 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
238 if (g_bShowActiveRouteHighway) {
243 m_pitemBoxSizerLeg->SetSizeHints(
this);
251 if (g_bShowRouteTotal) {
252 g_bShowRouteTotal =
false;
253 m_speedUsed = SPEED_SOG;
255 if (m_speedUsed == SPEED_VMG) {
256 g_bShowRouteTotal =
true;
257 m_speedUsed = SPEED_SOG;
259 m_speedUsed = SPEED_VMG;
269 float rng =
g_pRouteMan->GetCurrentRngToActivePoint();
272 float dcog =
g_pRouteMan->GetCurrentBrgToActivePoint();
273 if (dcog >= 359.5) dcog = 0;
277 cogstr << wxString::Format(wxString(
"%6.0f", wxConvUTF8), dcog);
279 cogstr << wxString::Format(wxString(
"%6.0f(M)", wxConvUTF8),
282 pBRG->SetAValue(cogstr);
285 if (!std::isnan(
gCog) && !std::isnan(
gSog)) {
288 double vmg =
gSog * cos((BRG -
gCog) * PI / 180.);
289 str_buf.Printf(
"%6.2f", toUsrSpeed(vmg));
291 if (m_speedUsed == SPEED_VMG) {
302 pVMG->SetAValue(str_buf);
304 if (!g_bShowRouteTotal) {
305 float nrng =
g_pRouteMan->GetCurrentRngToActiveNormalArrival();
307 double deltarng = fabs(rng - nrng);
308 if ((deltarng > .01) && ((deltarng / rng) > .10) &&
324 pRNG->SetAValue(srng);
328 pXTE->SetAValue(str_buf);
330 pXTE->SetALabel(wxString(_(
"XTE L")));
332 pXTE->SetALabel(wxString(_(
"XTE R")));
337 if ((speed > 0.) && !std::isnan(
gCog) && !std::isnan(
gSog)) {
338 float ttg_sec = (rng / speed) * 3600.;
339 wxTimeSpan ttg_span(0, 0,
long(ttg_sec), 0);
340 ttg_s = ttg_span.Format();
344 pTTG->SetAValue(ttg_s);
345 if (m_speedUsed == SPEED_VMG) {
346 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
348 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
357 if (n_addflag) trng += prp->m_seg_len;
369 pRNG->SetAValue(strng);
375 wxTimeSpan tttg_span;
376 float tttg_sec = 0.0;
378 tttg_sec = (trng /
gSog) * 3600.;
379 tttg_span = wxTimeSpan::Seconds((
long)tttg_sec);
381 tttg_s = tttg_sec > SECONDS_PER_DAY ? tttg_span.Format(_(
"%Dd %H:%M"))
382 : tttg_span.Format(
"%H:%M:%S");
384 tttg_span = wxTimeSpan::Seconds(0);
388 pTTG->SetAValue(tttg_s);
391 wxDateTime dtnow, eta;
392 dtnow.SetToCurrent();
393 eta = dtnow.Add(tttg_span);
398 seta = tttg_sec > SECONDS_PER_DAY ? eta.Format(
"%d/%m %H:%M")
399 : eta.Format(
"%H:%M");
403 pXTE->SetAValue(seta);
404 if (m_speedUsed == SPEED_VMG) {
405 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
406 pXTE->SetALabel(wxString(_(
"ETA @VMG")));
408 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
409 pXTE->SetALabel(wxString(_(
"ETA @SOG")));
422void ConsoleCanvasWin::RefreshConsoleData() {
436 gFrame->PositionConsole();
440void ConsoleCanvasWin::UpdateFonts() {
441 pBRG->RefreshFonts();
442 pXTE->RefreshFonts();
443 pTTG->RefreshFonts();
444 pRNG->RefreshFonts();
445 pVMG->RefreshFonts();
447 m_pitemBoxSizerLeg->SetSizeHints(
this);
458EVT_PAINT(ConsoleCanvasFrame::OnPaint)
459EVT_SHOW(ConsoleCanvasFrame::OnShow)
460EVT_CONTEXT_MENU(ConsoleCanvasFrame::OnContextMenu)
461EVT_MENU(ID_NAVLEG, ConsoleCanvasFrame::OnContextMenuSelection)
462EVT_MENU(ID_NAVROUTE, ConsoleCanvasFrame::OnContextMenuSelection)
463EVT_MENU(ID_NAVHIGHWAY, ConsoleCanvasFrame::OnContextMenuSelection)
468 m_speedUsed = SPEED_SOG;
470 m_bNeedClear =
false;
472 long style = wxSIMPLE_BORDER | wxCLIP_CHILDREN | wxFRAME_FLOAT_ON_PARENT;
475 style |= wxFRAME_NO_TASKBAR;
478 wxFrame::Create(parent, wxID_ANY,
"", wxDefaultPosition, wxDefaultSize,
483 m_pitemBoxSizerLeg =
new wxBoxSizer(wxVERTICAL);
485 pThisLegText =
new wxStaticText(
this, -1, _(
"This Leg"));
487 m_pitemBoxSizerLeg->Add(pThisLegText, 0, wxALIGN_CENTER_HORIZONTAL, 2);
492 qFont->GetPointSize(), wxFONTFAMILY_DEFAULT, qFont->GetStyle(),
493 wxFONTWEIGHT_BOLD,
false, qFont->GetFaceName());
494 pThisLegText->SetFont(*pThisLegFont);
496 pXTE =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
497 pXTE->SetALabel(
"XTE");
498 m_pitemBoxSizerLeg->Add(pXTE, 1, wxALIGN_LEFT | wxALL, 2);
500 pBRG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
501 pBRG->SetALabel(
"BRG");
502 m_pitemBoxSizerLeg->Add(pBRG, 1, wxALIGN_LEFT | wxALL, 2);
504 pVMG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
505 pVMG->SetALabel(
"VMG");
506 m_pitemBoxSizerLeg->Add(pVMG, 1, wxALIGN_LEFT | wxALL, 2);
508 pRNG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
509 pRNG->SetALabel(
"RNG");
510 m_pitemBoxSizerLeg->Add(pRNG, 1, wxALIGN_LEFT | wxALL, 2);
512 pTTG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
513 pTTG->SetALabel(
"TTG @VMG");
514 m_pitemBoxSizerLeg->Add(pTTG, 1, wxALIGN_LEFT | wxALL, 2);
518 pCDI =
new CDI(
this, -1, wxSIMPLE_BORDER,
"CDI");
519 m_pitemBoxSizerLeg->AddSpacer(5);
520 m_pitemBoxSizerLeg->Add(pCDI, 0, wxALL | wxEXPAND, 2);
522 SetSizer(m_pitemBoxSizerLeg);
523 m_pitemBoxSizerLeg->SetSizeHints(
this);
527 if (g_bShowRouteTotal)
528 pThisLegText->SetLabel(_(
"Route"));
530 pThisLegText->SetLabel(_(
"This Leg"));
535ConsoleCanvasFrame::~ConsoleCanvasFrame() {
delete pCDI; }
537void ConsoleCanvasFrame::SetColorScheme(ColorScheme cs) {
538 pbackBrush = wxTheBrushList->FindOrCreateBrush(
539 GetGlobalColor(
"DILG1" ), wxBRUSHSTYLE_SOLID);
540 SetBackgroundColour(GetGlobalColor(
"DILG1" ));
542 if (g_bShowRouteTotal)
543 pThisLegText->SetLabel(_(
"Route"));
545 pThisLegText->SetLabel(_(
"This Leg"));
549 pThisLegText->SetBackgroundColour(GetGlobalColor(
"DILG1" ));
551 pXTE->SetColorScheme(cs);
552 pBRG->SetColorScheme(cs);
553 pRNG->SetColorScheme(cs);
554 pTTG->SetColorScheme(cs);
555 pVMG->SetColorScheme(cs);
557 pCDI->SetColorScheme(cs);
560void ConsoleCanvasFrame::OnPaint(wxPaintEvent& event) {
565 pThisLegText->Refresh();
566 m_bNeedClear =
false;
571 if (!g_bShowActiveRouteHighway) pCDI->Hide();
574void ConsoleCanvasFrame::OnShow(wxShowEvent& event) {
575 pCDI->Show(g_bShowActiveRouteHighway);
576 m_pitemBoxSizerLeg->SetSizeHints(
this);
579void ConsoleCanvasFrame::LegRoute() {
580 if (g_bShowRouteTotal)
581 pThisLegText->SetLabel(_(
"Route"));
583 pThisLegText->SetLabel(_(
"This Leg"));
585 pThisLegText->Refresh(
true);
586 RefreshConsoleData();
589void ConsoleCanvasFrame::OnContextMenu(wxContextMenuEvent& event) {
590 wxMenu* contextMenu =
new wxMenu();
592 new wxMenuItem(contextMenu, ID_NAVLEG, _(
"This Leg"),
"", wxITEM_RADIO);
593 wxMenuItem* btnRoute =
new wxMenuItem(contextMenu, ID_NAVROUTE,
594 _(
"Full Route"),
"", wxITEM_RADIO);
595 wxMenuItem* btnHighw =
new wxMenuItem(contextMenu, ID_NAVHIGHWAY,
596 _(
"Show Highway"),
"", wxITEM_CHECK);
600 btnLeg->SetFont(sFont);
601 btnRoute->SetFont(sFont);
602 btnHighw->SetFont(sFont);
605 contextMenu->Append(btnLeg);
606 contextMenu->Append(btnRoute);
607 contextMenu->AppendSeparator();
608 contextMenu->Append(btnHighw);
610 btnLeg->Check(!g_bShowRouteTotal);
611 btnRoute->Check(g_bShowRouteTotal);
612 btnHighw->Check(g_bShowActiveRouteHighway);
614 PopupMenu(contextMenu);
619void ConsoleCanvasFrame::OnContextMenuSelection(wxCommandEvent& event) {
620 switch (event.GetId()) {
622 g_bShowRouteTotal =
false;
627 g_bShowRouteTotal =
true;
631 case ID_NAVHIGHWAY: {
632 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
633 if (g_bShowActiveRouteHighway) {
638 m_pitemBoxSizerLeg->SetSizeHints(
this);
644void ConsoleCanvasFrame::ToggleShowHighway() {
645 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
646 if (g_bShowActiveRouteHighway) {
651 m_pitemBoxSizerLeg->SetSizeHints(
this);
659 if (g_bShowRouteTotal) {
660 g_bShowRouteTotal =
false;
661 m_speedUsed = SPEED_SOG;
663 if (m_speedUsed == SPEED_VMG) {
664 g_bShowRouteTotal =
true;
665 m_speedUsed = SPEED_SOG;
667 m_speedUsed = SPEED_VMG;
678 float rng =
g_pRouteMan->GetCurrentRngToActivePoint();
681 float dcog =
g_pRouteMan->GetCurrentBrgToActivePoint();
682 if (dcog >= 359.5) dcog = 0;
686 cogstr << wxString::Format(wxString(
"%6.0f", wxConvUTF8), dcog);
688 cogstr << wxString::Format(wxString(
"%6.0f(M)", wxConvUTF8),
691 pBRG->SetAValue(cogstr);
694 if (!std::isnan(
gCog) && !std::isnan(
gSog)) {
697 double vmg =
gSog * cos((BRG -
gCog) * PI / 180.);
698 str_buf.Printf(
"%6.2f", toUsrSpeed(vmg));
700 if (m_speedUsed == SPEED_VMG) {
711 pVMG->SetAValue(str_buf);
713 if (!g_bShowRouteTotal) {
714 float nrng =
g_pRouteMan->GetCurrentRngToActiveNormalArrival();
716 double deltarng = fabs(rng - nrng);
717 if ((deltarng > .01) && ((deltarng / rng) > .10) &&
733 pRNG->SetAValue(srng);
737 pXTE->SetAValue(str_buf);
739 pXTE->SetALabel(wxString(_(
"XTE L")));
741 pXTE->SetALabel(wxString(_(
"XTE R")));
746 if ((speed > 0.) && !std::isnan(
gCog) && !std::isnan(
gSog)) {
747 float ttg_sec = (rng / speed) * 3600.;
748 wxTimeSpan ttg_span(0, 0,
long(ttg_sec), 0);
749 ttg_s = ttg_span.Format();
753 pTTG->SetAValue(ttg_s);
754 if (m_speedUsed == SPEED_VMG) {
755 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
757 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
766 if (n_addflag) trng += prp->m_seg_len;
778 pRNG->SetAValue(strng);
784 wxTimeSpan tttg_span;
785 float tttg_sec = 0.0;
787 tttg_sec = (trng /
gSog) * 3600.;
788 tttg_span = wxTimeSpan::Seconds((
long)tttg_sec);
790 tttg_s = tttg_sec > SECONDS_PER_DAY ? tttg_span.Format(_(
"%Dd %H:%M"))
791 : tttg_span.Format(
"%H:%M:%S");
793 tttg_span = wxTimeSpan::Seconds(0);
797 pTTG->SetAValue(tttg_s);
800 wxDateTime dtnow, eta;
801 dtnow.SetToCurrent();
802 eta = dtnow.Add(tttg_span);
807 seta = tttg_sec > SECONDS_PER_DAY ? eta.Format(
"%d/%m %H:%M")
808 : eta.Format(
"%H:%M");
812 pXTE->SetAValue(seta);
813 if (m_speedUsed == SPEED_VMG) {
814 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
815 pXTE->SetALabel(wxString(_(
"ETA @VMG")));
817 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
818 pXTE->SetALabel(wxString(_(
"ETA @SOG")));
831void ConsoleCanvasFrame::RefreshConsoleData() {
846 gFrame->PositionConsole();
850void ConsoleCanvasFrame::UpdateFonts() {
851 pBRG->RefreshFonts();
852 pXTE->RefreshFonts();
853 pTTG->RefreshFonts();
854 pRNG->RefreshFonts();
855 pVMG->RefreshFonts();
857 m_pitemBoxSizerLeg->SetSizeHints(
this);
868EVT_PAINT(AnnunText::OnPaint)
869EVT_MOUSE_EVENTS(AnnunText::MouseEvent)
873 const wxString& LegendElement,
874 const wxString& ValueElement)
875 : wxWindow(parent,
id, wxDefaultPosition, wxDefaultSize, wxNO_BORDER) {
880 14, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, FALSE,
881 wxString(
"Arial Bold"));
883 24, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, FALSE,
884 wxString(
"helvetica"), wxFONTENCODING_ISO8859_1);
886 m_LegendTextElement = LegendElement;
887 m_ValueTextElement = ValueElement;
892AnnunText::~AnnunText() {}
893void AnnunText::MouseEvent(wxMouseEvent& event) {
896 if (event.RightDown()) {
897 wxContextMenuEvent cevt;
898 cevt.SetPosition(event.GetPosition());
899 ccpw->OnContextMenu(cevt);
900 }
else if (event.LeftDown()) {
906 if (event.RightDown()) {
907 wxContextMenuEvent cevt;
908 cevt.SetPosition(event.GetPosition());
909 ccpf->OnContextMenu(cevt);
910 }
else if (event.LeftDown()) {
917void AnnunText::CalculateMinSize() {
926 GetTextExtent(
"TTG @SOG", &wl, &hl, NULL, NULL, m_plabelFont);
929 GetTextExtent(
"123.4567", &wv, &hv, NULL, NULL, m_pvalueFont);
939 min.x = wxMax(min.x, wl * 1.2);
940 min.y = (int)((hl + hv) * 1.2);
946 if (style->consoleTextBackground.IsOk()) {
947 wxImage img = style->consoleTextBackground.ConvertToImage();
948 style->consoleTextBackground = wxBitmap(img.Rescale(min.x, min.y));
952void AnnunText::SetColorScheme(ColorScheme cs) {
954 m_backBrush = *wxTheBrushList->FindOrCreateBrush(GetGlobalColor(
"UBLCK"),
957 m_default_text_color = style->consoleFontColor;
961void AnnunText::RefreshFonts() {
962 wxFont* pl = FontMgr::Get().
GetFont(m_LegendTextElement);
965 pl->GetStyle(), pl->GetWeight(), FALSE, pl->GetFaceName());
967 wxFont* pv = FontMgr::Get().
GetFont(m_ValueTextElement);
970 pv->GetStyle(), pv->GetWeight(), FALSE, pv->GetFaceName());
972 m_legend_color = FontMgr::Get().
GetFontColor(_(
"Console Legend"));
973 m_val_color = FontMgr::Get().
GetFontColor(_(
"Console Value"));
979 if (m_backBrush.IsOk()) {
980 wxColour back_color = m_backBrush.GetColour();
982 wxColour legend_color = m_legend_color;
983 if ((abs(legend_color.Red() - back_color.Red()) < 5) &&
984 (abs(legend_color.Green() - back_color.Blue()) < 5) &&
985 (abs(legend_color.Blue() - back_color.Blue()) < 5))
986 m_legend_color = m_default_text_color;
988 wxColour value_color = m_val_color;
989 if ((abs(value_color.Red() - back_color.Red()) < 5) &&
990 (abs(value_color.Green() - back_color.Blue()) < 5) &&
991 (abs(value_color.Blue() - back_color.Blue()) < 5))
992 m_val_color = m_default_text_color;
996void AnnunText::SetLegendElement(
const wxString& element) {
997 m_LegendTextElement = element;
1000void AnnunText::SetValueElement(
const wxString& element) {
1001 m_ValueTextElement = element;
1004void AnnunText::SetALabel(
const wxString& l) { m_label = l; }
1006void AnnunText::SetAValue(
const wxString& v) { m_value = v; }
1008void AnnunText::OnPaint(wxPaintEvent& event) {
1010 GetClientSize(&sx, &sy);
1017 wxBitmap m_bitmap(sx, sy, -1);
1018 mdc.SelectObject(m_bitmap);
1019 mdc.SetBackground(m_backBrush);
1022 if (style->consoleTextBackground.IsOk())
1023 mdc.DrawBitmap(style->consoleTextBackground, 0, 0);
1025 mdc.SetTextForeground(m_default_text_color);
1028 mdc.SetFont(*m_plabelFont);
1029 mdc.SetTextForeground(m_legend_color);
1030 mdc.DrawText(m_label, 5, 2);
1034 mdc.SetFont(*m_pvalueFont);
1035 mdc.SetTextForeground(m_val_color);
1038 mdc.GetTextExtent(m_value, &w, &h);
1040 mdc.GetSize(&cw, &ch);
1042 mdc.DrawText(m_value, cw - w - 2, ch - h - 2);
1046 dc.Blit(0, 0, sx, sy, &mdc, 0, 0);
1051BEGIN_EVENT_TABLE(
CDI, wxWindow)
1053EVT_MOUSE_EVENTS(CDI::MouseEvent)
1056CDI::
CDI(wxWindow* parent, wxWindowID
id,
long style, const wxString& name)
1057 : wxWindow(parent,
id, wxDefaultPosition, wxDefaultSize, style, name)
1060 SetMinSize(wxSize(10, 150));
1063void CDI::MouseEvent(wxMouseEvent& event) {
1065 if (event.RightDown()) {
1066 qDebug() <<
"right down";
1068 wxContextMenuEvent cevt;
1069 cevt.SetPosition(event.GetPosition());
1072 if (ccp) ccp->OnContextMenu(cevt);
1077void CDI::SetColorScheme(ColorScheme cs) {
1078 m_pbackBrush = wxTheBrushList->FindOrCreateBrush(GetGlobalColor(
"DILG2"),
1079 wxBRUSHSTYLE_SOLID);
1080 m_proadBrush = wxTheBrushList->FindOrCreateBrush(GetGlobalColor(
"DILG1"),
1081 wxBRUSHSTYLE_SOLID);
1082 m_proadPen = wxThePenList->FindOrCreatePen(GetGlobalColor(
"CHBLK"), 1,
1088 GetClientSize(&sx, &sy);
1094 wxBitmap m_bitmap(sx, sy, -1);
1095 mdc.SelectObject(m_bitmap);
1096 mdc.SetBackground(*m_pbackBrush);
1100 int yp = sy * 9 / 10;
1102 int path_length = sy * 3;
1103 int pix_per_xte = 120;
1108 double dy = path_length * sin(angle * PI / 180.);
1109 double dx = path_length * cos(angle * PI / 180.);
1113 double xte =
g_pRouteMan->GetCurrentXTEToActivePoint();
1115 double ddy = xtedir * pix_per_xte * xte * sin((90 - angle) * PI / 180.);
1116 double ddx = xtedir * pix_per_xte * xte * cos((90 - angle) * PI / 180.);
1118 int ddxi = (int)ddx;
1119 int ddyi = (int)ddy;
1121 int xc1 = xp - (int)(dx / 2) + ddxi;
1122 int yc1 = yp + (int)(dy / 2) + ddyi;
1123 int xc2 = xp + (int)(dx / 2) + ddxi;
1124 int yc2 = yp - (int)(dy / 2) + ddyi;
1128 int road_top_width = 10;
1129 int road_bot_width = 40;
1131 road[0].x = xc1 - (int)(road_bot_width * cos((90 - angle) * PI / 180.));
1132 road[0].y = yc1 - (int)(road_bot_width * sin((90 - angle) * PI / 180.));
1134 road[1].x = xc2 - (int)(road_top_width * cos((90 - angle) * PI / 180.));
1135 road[1].y = yc2 - (int)(road_top_width * sin((90 - angle) * PI / 180.));
1137 road[2].x = xc2 + (int)(road_top_width * cos((90 - angle) * PI / 180.));
1138 road[2].y = yc2 + (int)(road_top_width * sin((90 - angle) * PI / 180.));
1140 road[3].x = xc1 + (int)(road_bot_width * cos((90 - angle) * PI / 180.));
1141 road[3].y = yc1 + (int)(road_bot_width * sin((90 - angle) * PI / 180.));
1143 mdc.SetBrush(*m_proadBrush);
1144 mdc.SetPen(*m_proadPen);
1145 mdc.DrawPolygon(4, road, 0, 0, wxODDEVEN_RULE);
1149 mdc.DrawLine(0, yp, sx, yp);
1150 mdc.DrawCircle(xp, yp, 6);
1151 mdc.DrawLine(xp, yp + 5, xp, yp - 5);
1155 dc.Blit(0, 0, sx, sy, &mdc, 0, 0);
1158#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__ANDROID__)
1159APConsole::APConsole(wxWindow* parent) {
1162APConsole::~APConsole() {}
1163void APConsole::SetColorScheme(ColorScheme cs) {
1164 m_con_frame->SetColorScheme(cs);
1166bool APConsole::IsShown() {
return m_con_frame->IsShown(); }
1167void APConsole::UpdateFonts() { m_con_frame->UpdateFonts(); }
1168void APConsole::RefreshConsoleData() { m_con_frame->RefreshConsoleData(); }
1169void APConsole::Raise() { m_con_frame->Raise(); }
1171void APConsole::Show(
bool bshow) { m_con_frame->Show(bshow); }
1172CDI* APConsole::GetCDI() {
return m_con_frame->pCDI; }
1173wxSize APConsole::GetSize() {
return m_con_frame->GetSize(); }
1174void APConsole::ToggleShowHighway() { m_con_frame->ToggleShowHighway(); }
1175void APConsole::Move(wxPoint p) { m_con_frame->Move(p); }
1179APConsole::APConsole(wxWindow* parent) {
1182APConsole::~APConsole() {}
1183void APConsole::SetColorScheme(ColorScheme cs) {
1184 m_con_win->SetColorScheme(cs);
1186bool APConsole::IsShown() {
return m_con_win->IsShown(); }
1187void APConsole::UpdateFonts() { m_con_win->UpdateFonts(); }
1188void APConsole::RefreshConsoleData() { m_con_win->RefreshConsoleData(); }
1189void APConsole::Raise() {}
1191void APConsole::Show(
bool bshow) { m_con_win->Show(bshow); }
1192CDI* APConsole::GetCDI() {
return m_con_win->pCDI; }
1193wxSize APConsole::GetSize() {
return m_con_win->GetSize(); }
1194void APConsole::ToggleShowHighway() { m_con_win->ToggleShowHighway(); }
1195void APConsole::Move(wxPoint p) { m_con_win->Move(p); }
Annunciator Text display.
Course Deviation Indicator display.
void OnPaint(wxPaintEvent &event)
void ToggleRouteTotalDisplay()
Toggles between route total and current leg display modes.
void ShowWithFreshFonts(void)
Recomputes and applies new fonts to console elements.
void UpdateRouteData()
Updates route-related data displays.
Primary navigation console display for route and vessel tracking.
void UpdateRouteData()
Updates route-related data displays.
void ShowWithFreshFonts(void)
Recomputes and applies new fonts to console elements.
void ToggleRouteTotalDisplay()
Toggles between route total and current leg display modes.
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.
wxFont * GetFont(const wxString &TextElement, int requested_font_size=0)
Get a font object for a UI element.
Represents a waypoint or mark within the navigation system.
Represents a navigational route in the navigation system.
RoutePointList * pRoutePointList
Ordered list of waypoints (RoutePoints) that make up this route.
RoutePoint * m_pRouteActivePoint
Pointer to the currently active waypoint within this route.
APConsole * console
Global instance.
Primary navigation console display for route and vessel tracking.
Global variables stored in configuration file.
wxFont * GetOCPNScaledFont(wxString item, int default_size)
Retrieves a font from FontMgr, optionally scaled for physical readability.
wxFont GetOCPNGUIScaledFont(wxString item)
Retrieves a font optimized for touch and high-resolution interfaces.
General purpose GUI support.
double toUsrDistance(double nm_distance, int unit)
Convert a distance from nautical miles (NMi) to user display units.
Navigation Utility Functions without GUI dependencies.
PlugIn Object Definition/API.
double OCPN_GetWinDIPScaleFactor()
Gets Windows-specific DPI scaling factor.
double gCog
Course over ground in degrees (0-359.99).
double gSog
Speed over ground in knots.
Position, course, speed, etc.
Routeman * g_pRouteMan
Global instance.