34#include <wx/datetime.h>
53enum eMenuItems { ID_NAVLEG = 1, ID_NAVROUTE, ID_NAVHIGHWAY } menuItems;
61EVT_PAINT(ConsoleCanvasWin::OnPaint)
62EVT_SHOW(ConsoleCanvasWin::OnShow)
63EVT_CONTEXT_MENU(ConsoleCanvasWin::OnContextMenu)
64EVT_MENU(ID_NAVLEG, ConsoleCanvasWin::OnContextMenuSelection)
65EVT_MENU(ID_NAVROUTE, ConsoleCanvasWin::OnContextMenuSelection)
66EVT_MENU(ID_NAVHIGHWAY, ConsoleCanvasWin::OnContextMenuSelection)
71 m_speedUsed = SPEED_SOG;
75 long style = wxSIMPLE_BORDER | wxCLIP_CHILDREN | wxFRAME_FLOAT_ON_PARENT;
78 style |= wxFRAME_NO_TASKBAR;
81 wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style);
85 m_pitemBoxSizerLeg =
new wxBoxSizer(wxVERTICAL);
87 pThisLegText =
new wxStaticText(
this, -1, _(
"This Leg"));
89 m_pitemBoxSizerLeg->Add(pThisLegText, 0, wxALIGN_CENTER_HORIZONTAL, 2);
94 qFont->GetPointSize(), wxFONTFAMILY_DEFAULT, qFont->GetStyle(),
95 wxFONTWEIGHT_BOLD,
false, qFont->GetFaceName());
96 pThisLegText->SetFont(*pThisLegFont);
98 pXTE =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
99 pXTE->SetALabel(
"XTE");
100 m_pitemBoxSizerLeg->Add(pXTE, 1, wxALIGN_LEFT | wxALL, 2);
102 pBRG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
103 pBRG->SetALabel(
"BRG");
104 m_pitemBoxSizerLeg->Add(pBRG, 1, wxALIGN_LEFT | wxALL, 2);
106 pVMG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
107 pVMG->SetALabel(
"VMG");
108 m_pitemBoxSizerLeg->Add(pVMG, 1, wxALIGN_LEFT | wxALL, 2);
110 pRNG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
111 pRNG->SetALabel(
"RNG");
112 m_pitemBoxSizerLeg->Add(pRNG, 1, wxALIGN_LEFT | wxALL, 2);
114 pTTG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
115 pTTG->SetALabel(
"TTG @VMG");
116 m_pitemBoxSizerLeg->Add(pTTG, 1, wxALIGN_LEFT | wxALL, 2);
120 pCDI =
new CDI(
this, -1, wxSIMPLE_BORDER,
"CDI");
121 m_pitemBoxSizerLeg->AddSpacer(5);
122 m_pitemBoxSizerLeg->Add(pCDI, 0, wxALL | wxEXPAND, 2);
124 SetSizer(m_pitemBoxSizerLeg);
125 m_pitemBoxSizerLeg->SetSizeHints(
this);
129 if (g_bShowRouteTotal)
130 pThisLegText->SetLabel(_(
"Route"));
132 pThisLegText->SetLabel(_(
"This Leg"));
137ConsoleCanvasWin::~ConsoleCanvasWin() {
delete pCDI; }
139void ConsoleCanvasWin::SetColorScheme(ColorScheme cs) {
140 pbackBrush = wxTheBrushList->FindOrCreateBrush(
141 GetGlobalColor(
"DILG1" ), wxBRUSHSTYLE_SOLID);
142 SetBackgroundColour(GetGlobalColor(
"DILG1" ));
144 if (g_bShowRouteTotal)
145 pThisLegText->SetLabel(_(
"Route"));
147 pThisLegText->SetLabel(_(
"This Leg"));
151 pThisLegText->SetBackgroundColour(GetGlobalColor(
"DILG1" ));
153 pXTE->SetColorScheme(cs);
154 pBRG->SetColorScheme(cs);
155 pRNG->SetColorScheme(cs);
156 pTTG->SetColorScheme(cs);
157 pVMG->SetColorScheme(cs);
159 pCDI->SetColorScheme(cs);
162void ConsoleCanvasWin::OnPaint(wxPaintEvent& event) {
167 pThisLegText->Refresh();
168 m_bNeedClear =
false;
172 if (!g_bShowActiveRouteHighway) pCDI->Hide();
175void ConsoleCanvasWin::OnShow(wxShowEvent& event) {
176 pCDI->Show(g_bShowActiveRouteHighway);
177 m_pitemBoxSizerLeg->SetSizeHints(
this);
180void ConsoleCanvasWin::LegRoute() {
181 if (g_bShowRouteTotal)
182 pThisLegText->SetLabel(_(
"Route"));
184 pThisLegText->SetLabel(_(
"This Leg"));
186 pThisLegText->Refresh(
true);
187 RefreshConsoleData();
190void ConsoleCanvasWin::OnContextMenu(wxContextMenuEvent& event) {
191 wxMenu* contextMenu =
new wxMenu();
193 new wxMenuItem(contextMenu, ID_NAVLEG, _(
"This Leg"),
"", wxITEM_RADIO);
194 wxMenuItem* btnRoute =
new wxMenuItem(contextMenu, ID_NAVROUTE,
195 _(
"Full Route"),
"", wxITEM_RADIO);
196 wxMenuItem* btnHighw =
new wxMenuItem(contextMenu, ID_NAVHIGHWAY,
197 _(
"Show Highway"),
"", wxITEM_CHECK);
198 contextMenu->Append(btnLeg);
199 contextMenu->Append(btnRoute);
200 contextMenu->AppendSeparator();
201 contextMenu->Append(btnHighw);
203 btnLeg->Check(!g_bShowRouteTotal);
204 btnRoute->Check(g_bShowRouteTotal);
205 btnHighw->Check(g_bShowActiveRouteHighway);
207 PopupMenu(contextMenu);
212void ConsoleCanvasWin::OnContextMenuSelection(wxCommandEvent& event) {
213 switch (event.GetId()) {
215 g_bShowRouteTotal =
false;
220 g_bShowRouteTotal =
true;
224 case ID_NAVHIGHWAY: {
225 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
226 if (g_bShowActiveRouteHighway) {
231 m_pitemBoxSizerLeg->SetSizeHints(
this);
237void ConsoleCanvasWin::ToggleShowHighway() {
238 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
239 if (g_bShowActiveRouteHighway) {
244 m_pitemBoxSizerLeg->SetSizeHints(
this);
252 if (g_bShowRouteTotal) {
253 g_bShowRouteTotal =
false;
254 m_speedUsed = SPEED_SOG;
256 if (m_speedUsed == SPEED_VMG) {
257 g_bShowRouteTotal =
true;
258 m_speedUsed = SPEED_SOG;
260 m_speedUsed = SPEED_VMG;
270 float rng =
g_pRouteMan->GetCurrentRngToActivePoint();
273 float dcog =
g_pRouteMan->GetCurrentBrgToActivePoint();
274 if (dcog >= 359.5) dcog = 0;
278 cogstr << wxString::Format(wxString(
"%6.0f", wxConvUTF8), dcog);
280 cogstr << wxString::Format(wxString(
"%6.0f(M)", wxConvUTF8),
283 pBRG->SetAValue(cogstr);
286 if (!std::isnan(
gCog) && !std::isnan(
gSog)) {
289 double vmg =
gSog * cos((BRG -
gCog) * PI / 180.);
290 str_buf.Printf(
"%6.2f", toUsrSpeed(vmg));
292 if (m_speedUsed == SPEED_VMG) {
303 pVMG->SetAValue(str_buf);
305 if (!g_bShowRouteTotal) {
306 float nrng =
g_pRouteMan->GetCurrentRngToActiveNormalArrival();
308 double deltarng = fabs(rng - nrng);
309 if ((deltarng > .01) && ((deltarng / rng) > .10) &&
325 pRNG->SetAValue(srng);
329 pXTE->SetAValue(str_buf);
331 pXTE->SetALabel(wxString(_(
"XTE L")));
333 pXTE->SetALabel(wxString(_(
"XTE R")));
338 if ((speed > 0.) && !std::isnan(
gCog) && !std::isnan(
gSog)) {
339 float ttg_sec = (rng / speed) * 3600.;
340 wxTimeSpan ttg_span(0, 0,
long(ttg_sec), 0);
341 ttg_s = ttg_span.Format();
345 pTTG->SetAValue(ttg_s);
346 if (m_speedUsed == SPEED_VMG) {
347 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
349 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
358 if (n_addflag) trng += prp->m_seg_len;
370 pRNG->SetAValue(strng);
376 wxTimeSpan tttg_span;
377 float tttg_sec = 0.0;
379 tttg_sec = (trng /
gSog) * 3600.;
380 tttg_span = wxTimeSpan::Seconds((
long)tttg_sec);
382 tttg_s = tttg_sec > SECONDS_PER_DAY ? tttg_span.Format(_(
"%Dd %H:%M"))
383 : tttg_span.Format(
"%H:%M:%S");
385 tttg_span = wxTimeSpan::Seconds(0);
389 pTTG->SetAValue(tttg_s);
392 wxDateTime dtnow, eta;
393 dtnow.SetToCurrent();
394 eta = dtnow.Add(tttg_span);
399 seta = tttg_sec > SECONDS_PER_DAY ? eta.Format(
"%d/%m %H:%M")
400 : eta.Format(
"%H:%M");
404 pXTE->SetAValue(seta);
405 if (m_speedUsed == SPEED_VMG) {
406 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
407 pXTE->SetALabel(wxString(_(
"ETA @VMG")));
409 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
410 pXTE->SetALabel(wxString(_(
"ETA @SOG")));
423void ConsoleCanvasWin::RefreshConsoleData() {
437 top_frame::Get()->PositionConsole();
441void ConsoleCanvasWin::UpdateFonts() {
442 pBRG->RefreshFonts();
443 pXTE->RefreshFonts();
444 pTTG->RefreshFonts();
445 pRNG->RefreshFonts();
446 pVMG->RefreshFonts();
448 m_pitemBoxSizerLeg->SetSizeHints(
this);
459EVT_PAINT(ConsoleCanvasFrame::OnPaint)
460EVT_SHOW(ConsoleCanvasFrame::OnShow)
461EVT_CONTEXT_MENU(ConsoleCanvasFrame::OnContextMenu)
462EVT_MENU(ID_NAVLEG, ConsoleCanvasFrame::OnContextMenuSelection)
463EVT_MENU(ID_NAVROUTE, ConsoleCanvasFrame::OnContextMenuSelection)
464EVT_MENU(ID_NAVHIGHWAY, ConsoleCanvasFrame::OnContextMenuSelection)
469 m_speedUsed = SPEED_SOG;
471 m_bNeedClear =
false;
473 long style = wxSIMPLE_BORDER | wxCLIP_CHILDREN | wxFRAME_FLOAT_ON_PARENT;
476 style |= wxFRAME_NO_TASKBAR;
479 wxFrame::Create(parent, wxID_ANY,
"", wxDefaultPosition, wxDefaultSize,
484 m_pitemBoxSizerLeg =
new wxBoxSizer(wxVERTICAL);
486 pThisLegText =
new wxStaticText(
this, -1, _(
"This Leg"));
488 m_pitemBoxSizerLeg->Add(pThisLegText, 0, wxALIGN_CENTER_HORIZONTAL, 2);
493 qFont->GetPointSize(), wxFONTFAMILY_DEFAULT, qFont->GetStyle(),
494 wxFONTWEIGHT_BOLD,
false, qFont->GetFaceName());
495 pThisLegText->SetFont(*pThisLegFont);
497 pXTE =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
498 pXTE->SetALabel(
"XTE");
499 m_pitemBoxSizerLeg->Add(pXTE, 1, wxALIGN_LEFT | wxALL, 2);
501 pBRG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
502 pBRG->SetALabel(
"BRG");
503 m_pitemBoxSizerLeg->Add(pBRG, 1, wxALIGN_LEFT | wxALL, 2);
505 pVMG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
506 pVMG->SetALabel(
"VMG");
507 m_pitemBoxSizerLeg->Add(pVMG, 1, wxALIGN_LEFT | wxALL, 2);
509 pRNG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
510 pRNG->SetALabel(
"RNG");
511 m_pitemBoxSizerLeg->Add(pRNG, 1, wxALIGN_LEFT | wxALL, 2);
513 pTTG =
new AnnunText(
this, -1, _(
"Console Legend"), _(
"Console Value"));
514 pTTG->SetALabel(
"TTG @VMG");
515 m_pitemBoxSizerLeg->Add(pTTG, 1, wxALIGN_LEFT | wxALL, 2);
519 pCDI =
new CDI(
this, -1, wxSIMPLE_BORDER,
"CDI");
520 m_pitemBoxSizerLeg->AddSpacer(5);
521 m_pitemBoxSizerLeg->Add(pCDI, 0, wxALL | wxEXPAND, 2);
523 SetSizer(m_pitemBoxSizerLeg);
524 m_pitemBoxSizerLeg->SetSizeHints(
this);
528 if (g_bShowRouteTotal)
529 pThisLegText->SetLabel(_(
"Route"));
531 pThisLegText->SetLabel(_(
"This Leg"));
536ConsoleCanvasFrame::~ConsoleCanvasFrame() {
delete pCDI; }
538void ConsoleCanvasFrame::SetColorScheme(ColorScheme cs) {
539 pbackBrush = wxTheBrushList->FindOrCreateBrush(
540 GetGlobalColor(
"DILG1" ), wxBRUSHSTYLE_SOLID);
541 SetBackgroundColour(GetGlobalColor(
"DILG1" ));
543 if (g_bShowRouteTotal)
544 pThisLegText->SetLabel(_(
"Route"));
546 pThisLegText->SetLabel(_(
"This Leg"));
550 pThisLegText->SetBackgroundColour(GetGlobalColor(
"DILG1" ));
552 pXTE->SetColorScheme(cs);
553 pBRG->SetColorScheme(cs);
554 pRNG->SetColorScheme(cs);
555 pTTG->SetColorScheme(cs);
556 pVMG->SetColorScheme(cs);
558 pCDI->SetColorScheme(cs);
561void ConsoleCanvasFrame::OnPaint(wxPaintEvent& event) {
566 pThisLegText->Refresh();
567 m_bNeedClear =
false;
572 if (!g_bShowActiveRouteHighway) pCDI->Hide();
575void ConsoleCanvasFrame::OnShow(wxShowEvent& event) {
576 pCDI->Show(g_bShowActiveRouteHighway);
577 m_pitemBoxSizerLeg->SetSizeHints(
this);
580void ConsoleCanvasFrame::LegRoute() {
581 if (g_bShowRouteTotal)
582 pThisLegText->SetLabel(_(
"Route"));
584 pThisLegText->SetLabel(_(
"This Leg"));
586 pThisLegText->Refresh(
true);
587 RefreshConsoleData();
590void ConsoleCanvasFrame::OnContextMenu(wxContextMenuEvent& event) {
591 wxMenu* contextMenu =
new wxMenu();
593 new wxMenuItem(contextMenu, ID_NAVLEG, _(
"This Leg"),
"", wxITEM_RADIO);
594 wxMenuItem* btnRoute =
new wxMenuItem(contextMenu, ID_NAVROUTE,
595 _(
"Full Route"),
"", wxITEM_RADIO);
596 wxMenuItem* btnHighw =
new wxMenuItem(contextMenu, ID_NAVHIGHWAY,
597 _(
"Show Highway"),
"", wxITEM_CHECK);
601 btnLeg->SetFont(sFont);
602 btnRoute->SetFont(sFont);
603 btnHighw->SetFont(sFont);
606 contextMenu->Append(btnLeg);
607 contextMenu->Append(btnRoute);
608 contextMenu->AppendSeparator();
609 contextMenu->Append(btnHighw);
611 btnLeg->Check(!g_bShowRouteTotal);
612 btnRoute->Check(g_bShowRouteTotal);
613 btnHighw->Check(g_bShowActiveRouteHighway);
615 PopupMenu(contextMenu);
620void ConsoleCanvasFrame::OnContextMenuSelection(wxCommandEvent& event) {
621 switch (event.GetId()) {
623 g_bShowRouteTotal =
false;
628 g_bShowRouteTotal =
true;
632 case ID_NAVHIGHWAY: {
633 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
634 if (g_bShowActiveRouteHighway) {
639 m_pitemBoxSizerLeg->SetSizeHints(
this);
645void ConsoleCanvasFrame::ToggleShowHighway() {
646 g_bShowActiveRouteHighway = !g_bShowActiveRouteHighway;
647 if (g_bShowActiveRouteHighway) {
652 m_pitemBoxSizerLeg->SetSizeHints(
this);
660 if (g_bShowRouteTotal) {
661 g_bShowRouteTotal =
false;
662 m_speedUsed = SPEED_SOG;
664 if (m_speedUsed == SPEED_VMG) {
665 g_bShowRouteTotal =
true;
666 m_speedUsed = SPEED_SOG;
668 m_speedUsed = SPEED_VMG;
679 float rng =
g_pRouteMan->GetCurrentRngToActivePoint();
682 float dcog =
g_pRouteMan->GetCurrentBrgToActivePoint();
683 if (dcog >= 359.5) dcog = 0;
687 cogstr << wxString::Format(wxString(
"%6.0f", wxConvUTF8), dcog);
689 cogstr << wxString::Format(wxString(
"%6.0f(M)", wxConvUTF8),
692 pBRG->SetAValue(cogstr);
695 if (!std::isnan(
gCog) && !std::isnan(
gSog)) {
698 double vmg =
gSog * cos((BRG -
gCog) * PI / 180.);
699 str_buf.Printf(
"%6.2f", toUsrSpeed(vmg));
701 if (m_speedUsed == SPEED_VMG) {
712 pVMG->SetAValue(str_buf);
714 if (!g_bShowRouteTotal) {
715 float nrng =
g_pRouteMan->GetCurrentRngToActiveNormalArrival();
717 double deltarng = fabs(rng - nrng);
718 if ((deltarng > .01) && ((deltarng / rng) > .10) &&
734 pRNG->SetAValue(srng);
738 pXTE->SetAValue(str_buf);
740 pXTE->SetALabel(wxString(_(
"XTE L")));
742 pXTE->SetALabel(wxString(_(
"XTE R")));
747 if ((speed > 0.) && !std::isnan(
gCog) && !std::isnan(
gSog)) {
748 float ttg_sec = (rng / speed) * 3600.;
749 wxTimeSpan ttg_span(0, 0,
long(ttg_sec), 0);
750 ttg_s = ttg_span.Format();
754 pTTG->SetAValue(ttg_s);
755 if (m_speedUsed == SPEED_VMG) {
756 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
758 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
767 if (n_addflag) trng += prp->m_seg_len;
779 pRNG->SetAValue(strng);
785 wxTimeSpan tttg_span;
786 float tttg_sec = 0.0;
788 tttg_sec = (trng /
gSog) * 3600.;
789 tttg_span = wxTimeSpan::Seconds((
long)tttg_sec);
791 tttg_s = tttg_sec > SECONDS_PER_DAY ? tttg_span.Format(_(
"%Dd %H:%M"))
792 : tttg_span.Format(
"%H:%M:%S");
794 tttg_span = wxTimeSpan::Seconds(0);
798 pTTG->SetAValue(tttg_s);
801 wxDateTime dtnow, eta;
802 dtnow.SetToCurrent();
803 eta = dtnow.Add(tttg_span);
808 seta = tttg_sec > SECONDS_PER_DAY ? eta.Format(
"%d/%m %H:%M")
809 : eta.Format(
"%H:%M");
813 pXTE->SetAValue(seta);
814 if (m_speedUsed == SPEED_VMG) {
815 pTTG->SetALabel(wxString(_(
"TTG @VMG")));
816 pXTE->SetALabel(wxString(_(
"ETA @VMG")));
818 pTTG->SetALabel(wxString(_(
"TTG @SOG")));
819 pXTE->SetALabel(wxString(_(
"ETA @SOG")));
832void ConsoleCanvasFrame::RefreshConsoleData() {
847 top_frame::Get()->PositionConsole();
851void ConsoleCanvasFrame::UpdateFonts() {
852 pBRG->RefreshFonts();
853 pXTE->RefreshFonts();
854 pTTG->RefreshFonts();
855 pRNG->RefreshFonts();
856 pVMG->RefreshFonts();
858 m_pitemBoxSizerLeg->SetSizeHints(
this);
869EVT_PAINT(AnnunText::OnPaint)
870EVT_MOUSE_EVENTS(AnnunText::MouseEvent)
874 const wxString& LegendElement,
875 const wxString& ValueElement)
876 : wxWindow(parent,
id, wxDefaultPosition, wxDefaultSize, wxNO_BORDER) {
881 14, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, FALSE,
882 wxString(
"Arial Bold"));
884 24, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, FALSE,
885 wxString(
"helvetica"), wxFONTENCODING_ISO8859_1);
887 m_LegendTextElement = LegendElement;
888 m_ValueTextElement = ValueElement;
893AnnunText::~AnnunText() {}
894void AnnunText::MouseEvent(wxMouseEvent& event) {
897 if (event.RightDown()) {
898 wxContextMenuEvent cevt;
899 cevt.SetPosition(event.GetPosition());
900 ccpw->OnContextMenu(cevt);
901 }
else if (event.LeftDown()) {
907 if (event.RightDown()) {
908 wxContextMenuEvent cevt;
909 cevt.SetPosition(event.GetPosition());
910 ccpf->OnContextMenu(cevt);
911 }
else if (event.LeftDown()) {
918void AnnunText::CalculateMinSize() {
927 GetTextExtent(
"TTG @SOG", &wl, &hl, NULL, NULL, m_plabelFont);
930 GetTextExtent(
"123.4567", &wv, &hv, NULL, NULL, m_pvalueFont);
941 min.x = wxMax(min.x, wl * 1.2);
942 min.y = (int)((hl + hv) * 1.2);
948 if (style->consoleTextBackground.IsOk()) {
949 wxImage img = style->consoleTextBackground.ConvertToImage();
950 style->consoleTextBackground = wxBitmap(img.Rescale(min.x, min.y));
954void AnnunText::SetColorScheme(ColorScheme cs) {
956 m_backBrush = *wxTheBrushList->FindOrCreateBrush(GetGlobalColor(
"UBLCK"),
959 m_default_text_color = style->consoleFontColor;
963void AnnunText::RefreshFonts() {
964 wxFont* pl = FontMgr::Get().
GetFont(m_LegendTextElement);
967 pl->GetStyle(), pl->GetWeight(), FALSE, pl->GetFaceName());
969 wxFont* pv = FontMgr::Get().
GetFont(m_ValueTextElement);
972 pv->GetStyle(), pv->GetWeight(), FALSE, pv->GetFaceName());
974 m_legend_color = FontMgr::Get().
GetFontColor(_(
"Console Legend"));
975 m_val_color = FontMgr::Get().
GetFontColor(_(
"Console Value"));
981 if (m_backBrush.IsOk()) {
982 wxColour back_color = m_backBrush.GetColour();
984 wxColour legend_color = m_legend_color;
985 if ((abs(legend_color.Red() - back_color.Red()) < 5) &&
986 (abs(legend_color.Green() - back_color.Blue()) < 5) &&
987 (abs(legend_color.Blue() - back_color.Blue()) < 5))
988 m_legend_color = m_default_text_color;
990 wxColour value_color = m_val_color;
991 if ((abs(value_color.Red() - back_color.Red()) < 5) &&
992 (abs(value_color.Green() - back_color.Blue()) < 5) &&
993 (abs(value_color.Blue() - back_color.Blue()) < 5))
994 m_val_color = m_default_text_color;
998void AnnunText::SetLegendElement(
const wxString& element) {
999 m_LegendTextElement = element;
1002void AnnunText::SetValueElement(
const wxString& element) {
1003 m_ValueTextElement = element;
1006void AnnunText::SetALabel(
const wxString& l) { m_label = l; }
1008void AnnunText::SetAValue(
const wxString& v) { m_value = v; }
1010void AnnunText::OnPaint(wxPaintEvent& event) {
1012 GetClientSize(&sx, &sy);
1019 wxBitmap m_bitmap(sx, sy, -1);
1020 mdc.SelectObject(m_bitmap);
1021 mdc.SetBackground(m_backBrush);
1024 if (style->consoleTextBackground.IsOk())
1025 mdc.DrawBitmap(style->consoleTextBackground, 0, 0);
1027 mdc.SetTextForeground(m_default_text_color);
1030 mdc.SetFont(*m_plabelFont);
1031 mdc.SetTextForeground(m_legend_color);
1032 mdc.DrawText(m_label, 5, 2);
1036 mdc.SetFont(*m_pvalueFont);
1037 mdc.SetTextForeground(m_val_color);
1040 mdc.GetTextExtent(m_value, &w, &h);
1042 mdc.GetSize(&cw, &ch);
1044 mdc.DrawText(m_value, cw - w - 2, ch - h - 2);
1048 dc.Blit(0, 0, sx, sy, &mdc, 0, 0);
1053BEGIN_EVENT_TABLE(
CDI, wxWindow)
1055EVT_MOUSE_EVENTS(CDI::MouseEvent)
1058CDI::
CDI(wxWindow* parent, wxWindowID
id,
long style, const wxString& name)
1059 : wxWindow(parent,
id, wxDefaultPosition, wxDefaultSize, style, name)
1062 SetMinSize(wxSize(10, 150));
1065void CDI::MouseEvent(wxMouseEvent& event) {
1067 if (event.RightDown()) {
1068 qDebug() <<
"right down";
1070 wxContextMenuEvent cevt;
1071 cevt.SetPosition(event.GetPosition());
1074 if (ccp) ccp->OnContextMenu(cevt);
1079void CDI::SetColorScheme(ColorScheme cs) {
1080 m_pbackBrush = wxTheBrushList->FindOrCreateBrush(GetGlobalColor(
"DILG2"),
1081 wxBRUSHSTYLE_SOLID);
1082 m_proadBrush = wxTheBrushList->FindOrCreateBrush(GetGlobalColor(
"DILG1"),
1083 wxBRUSHSTYLE_SOLID);
1084 m_proadPen = wxThePenList->FindOrCreatePen(GetGlobalColor(
"CHBLK"), 1,
1090 GetClientSize(&sx, &sy);
1096 wxBitmap m_bitmap(sx, sy, -1);
1097 mdc.SelectObject(m_bitmap);
1098 mdc.SetBackground(*m_pbackBrush);
1102 int yp = sy * 9 / 10;
1104 int path_length = sy * 3;
1105 int pix_per_xte = 120;
1110 double dy = path_length * sin(angle * PI / 180.);
1111 double dx = path_length * cos(angle * PI / 180.);
1115 double xte =
g_pRouteMan->GetCurrentXTEToActivePoint();
1117 double ddy = xtedir * pix_per_xte * xte * sin((90 - angle) * PI / 180.);
1118 double ddx = xtedir * pix_per_xte * xte * cos((90 - angle) * PI / 180.);
1120 int ddxi = (int)ddx;
1121 int ddyi = (int)ddy;
1123 int xc1 = xp - (int)(dx / 2) + ddxi;
1124 int yc1 = yp + (int)(dy / 2) + ddyi;
1125 int xc2 = xp + (int)(dx / 2) + ddxi;
1126 int yc2 = yp - (int)(dy / 2) + ddyi;
1130 int road_top_width = 10;
1131 int road_bot_width = 40;
1133 road[0].x = xc1 - (int)(road_bot_width * cos((90 - angle) * PI / 180.));
1134 road[0].y = yc1 - (int)(road_bot_width * sin((90 - angle) * PI / 180.));
1136 road[1].x = xc2 - (int)(road_top_width * cos((90 - angle) * PI / 180.));
1137 road[1].y = yc2 - (int)(road_top_width * sin((90 - angle) * PI / 180.));
1139 road[2].x = xc2 + (int)(road_top_width * cos((90 - angle) * PI / 180.));
1140 road[2].y = yc2 + (int)(road_top_width * sin((90 - angle) * PI / 180.));
1142 road[3].x = xc1 + (int)(road_bot_width * cos((90 - angle) * PI / 180.));
1143 road[3].y = yc1 + (int)(road_bot_width * sin((90 - angle) * PI / 180.));
1145 mdc.SetBrush(*m_proadBrush);
1146 mdc.SetPen(*m_proadPen);
1147 mdc.DrawPolygon(4, road, 0, 0, wxODDEVEN_RULE);
1151 mdc.DrawLine(0, yp, sx, yp);
1152 mdc.DrawCircle(xp, yp, 6);
1153 mdc.DrawLine(xp, yp + 5, xp, yp - 5);
1157 dc.Blit(0, 0, sx, sy, &mdc, 0, 0);
1160#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__ANDROID__)
1161APConsole::APConsole(wxWindow* parent) {
1164APConsole::~APConsole() {}
1165void APConsole::SetColorScheme(ColorScheme cs) {
1166 m_con_frame->SetColorScheme(cs);
1168bool APConsole::IsShown() {
return m_con_frame->IsShown(); }
1169void APConsole::UpdateFonts() { m_con_frame->UpdateFonts(); }
1170void APConsole::RefreshConsoleData() { m_con_frame->RefreshConsoleData(); }
1171void APConsole::Raise() { m_con_frame->Raise(); }
1173void APConsole::Show(
bool bshow) { m_con_frame->Show(bshow); }
1174CDI* APConsole::GetCDI() {
return m_con_frame->pCDI; }
1175wxSize APConsole::GetSize() {
return m_con_frame->GetSize(); }
1176void APConsole::ToggleShowHighway() { m_con_frame->ToggleShowHighway(); }
1177void APConsole::Move(wxPoint p) { m_con_frame->Move(p); }
1181APConsole::APConsole(wxWindow* parent) {
1184APConsole::~APConsole() {}
1185void APConsole::SetColorScheme(ColorScheme cs) {
1186 m_con_win->SetColorScheme(cs);
1188bool APConsole::IsShown() {
return m_con_win->IsShown(); }
1189void APConsole::UpdateFonts() { m_con_win->UpdateFonts(); }
1190void APConsole::RefreshConsoleData() { m_con_win->RefreshConsoleData(); }
1191void APConsole::Raise() {}
1193void APConsole::Show(
bool bshow) { m_con_win->Show(bshow); }
1194CDI* APConsole::GetCDI() {
return m_con_win->pCDI; }
1195wxSize APConsole::GetSize() {
return m_con_win->GetSize(); }
1196void APConsole::ToggleShowHighway() { m_con_win->ToggleShowHighway(); }
1197void 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.
Global color handling by name.
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.
Abstract gFrame/MyFrame interface.