30#include <wx/artprov.h>
31#include <wx/statline.h>
42#include "androidUTIL.h"
48extern s52plib* ps52plib;
59EVT_CLOSE(CanvasOptions::OnClose)
72 long mstyle = wxNO_BORDER | wxFRAME_NO_TASKBAR;
74 mstyle |= wxSTAY_ON_TOP;
77 wxDialog::Create(parent, wxID_ANY,
"", wxDefaultPosition, wxDefaultSize,
80 wxBoxSizer* topsizer =
new wxBoxSizer(wxVERTICAL);
83 m_sWindow =
new wxScrolledWindow(
this, wxID_ANY, wxDefaultPosition,
84 wxDefaultSize, wxVSCROLL | wxSUNKEN_BORDER);
85 topsizer->Add(m_sWindow, 1, wxEXPAND);
87 m_sWindow->SetScrollRate(0, 5);
90 int group_item_spacing = 0;
91 int interGroupSpace = border_size * 2;
93 wxSizerFlags verticalInputFlags = wxSizerFlags(0)
96 .Border(wxALL, group_item_spacing);
97 wxSizerFlags inputFlags =
98 wxSizerFlags(0).Align(wxALIGN_LEFT).Border(wxALL, group_item_spacing);
100 wxScrolledWindow* pDisplayPanel = m_sWindow;
102 wxBoxSizer* generalSizer =
new wxBoxSizer(wxVERTICAL);
103 pDisplayPanel->SetSizer(generalSizer);
106 wxStaticText* optionsLabelBox =
107 new wxStaticText(pDisplayPanel, wxID_ANY, _(
"Chart Panel Options"));
108 generalSizer->Add(optionsLabelBox, 0, wxALL | wxEXPAND, border_size);
109 wxStaticLine* m_staticLine121 =
110 new wxStaticLine(pDisplayPanel, wxID_ANY, wxDefaultPosition,
111 wxDefaultSize, wxLI_HORIZONTAL);
112 generalSizer->Add(m_staticLine121, 0, wxALL | wxEXPAND, border_size);
115 generalSizer->Add(0, interGroupSpace);
131 wxStaticBoxSizer* boxNavMode =
new wxStaticBoxSizer(
132 new wxStaticBox(pDisplayPanel, wxID_ANY, _(
"Navigation Mode")),
134 generalSizer->Add(boxNavMode, 0, wxALL | wxEXPAND, border_size);
136 wxBoxSizer* rowOrientation =
new wxBoxSizer(wxVERTICAL);
137 boxNavMode->Add(rowOrientation);
139 pCBNorthUp =
new wxRadioButton(pDisplayPanel, wxID_ANY, _(
"North Up"),
140 wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
141 rowOrientation->Add(pCBNorthUp, inputFlags);
142 pCBNorthUp->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED,
143 wxCommandEventHandler(CanvasOptions::OnOptionChange),
148 rowOrientation->Add(pCBCourseUp, wxSizerFlags(0)
150 .Border(wxLEFT, group_item_spacing * 2));
151 pCBCourseUp->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED,
152 wxCommandEventHandler(CanvasOptions::OnOptionChange),
157 rowOrientation->Add(pCBHeadUp, wxSizerFlags(0)
159 .Border(wxLEFT, group_item_spacing * 2));
160 pCBHeadUp->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED,
161 wxCommandEventHandler(CanvasOptions::OnOptionChange), NULL,
166 boxNavMode->Add(pCBLookAhead, verticalInputFlags);
167 pCBLookAhead->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
168 wxCommandEventHandler(CanvasOptions::OnOptionChange),
172 generalSizer->Add(0, interGroupSpace);
175 wxStaticBoxSizer* boxDisp =
new wxStaticBoxSizer(
176 new wxStaticBox(pDisplayPanel, wxID_ANY, _(
"Display Options")),
178 generalSizer->Add(boxDisp, 0, wxALL | wxEXPAND, border_size);
181 _(
"Enable Chart Quilting"));
182 boxDisp->Add(pCDOQuilting, verticalInputFlags);
183 pCDOQuilting->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
184 wxCommandEventHandler(CanvasOptions::OnOptionChange),
189 boxDisp->Add(pSDisplayGrid, verticalInputFlags);
190 pSDisplayGrid->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
191 wxCommandEventHandler(CanvasOptions::OnOptionChange),
195 _(
"Show Chart Outlines"));
196 boxDisp->Add(pCDOOutlines, verticalInputFlags);
197 pCDOOutlines->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
198 wxCommandEventHandler(CanvasOptions::OnOptionChange),
202 _(
"Show Depth Units"));
203 boxDisp->Add(pSDepthUnits, verticalInputFlags);
204 pSDepthUnits->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
205 wxCommandEventHandler(CanvasOptions::OnOptionChange),
209 wxStaticBoxSizer* boxAIS =
new wxStaticBoxSizer(
210 new wxStaticBox(pDisplayPanel, wxID_ANY, _(
"AIS")), wxVERTICAL);
211 generalSizer->Add(boxAIS, 0, wxALL | wxEXPAND, border_size);
214 _(
"Show AIS targets"));
215 boxAIS->Add(pCBShowAIS, verticalInputFlags);
216 pCBShowAIS->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
217 wxCommandEventHandler(CanvasOptions::OnOptionChange),
221 _(
"Minimize less critical targets"));
222 boxAIS->Add(pCBAttenAIS, verticalInputFlags);
223 pCBAttenAIS->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
224 wxCommandEventHandler(CanvasOptions::OnOptionChange),
228 generalSizer->Add(0, interGroupSpace);
231 wxStaticBoxSizer* boxTC =
new wxStaticBoxSizer(
232 new wxStaticBox(pDisplayPanel, wxID_ANY, _(
"Tides and Currents")),
234 generalSizer->Add(boxTC, 0, wxALL | wxEXPAND, border_size);
237 _(
"Show Tide stations"));
238 boxTC->Add(pCDOTides, verticalInputFlags);
239 pCDOTides->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
240 wxCommandEventHandler(CanvasOptions::OnOptionChange), NULL,
245 boxTC->Add(pCDOCurrents, verticalInputFlags);
246 pCDOCurrents->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
247 wxCommandEventHandler(CanvasOptions::OnOptionChange),
251 generalSizer->Add(0, interGroupSpace);
254 wxStaticBoxSizer* boxENC =
new wxStaticBoxSizer(
255 new wxStaticBox(pDisplayPanel, wxID_ANY, _(
"Vector Charts")), wxVERTICAL);
256 generalSizer->Add(boxENC, 0, wxALL | wxEXPAND, border_size);
260 boxENC->Add(pCDOENCText, verticalInputFlags);
261 pCDOENCText->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
262 wxCommandEventHandler(CanvasOptions::OnOptionChange),
267 boxENC->Add(pCBENCDepth, verticalInputFlags);
268 pCBENCDepth->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
269 wxCommandEventHandler(CanvasOptions::OnOptionChange),
273 _(
"Buoy/Light Labels"));
274 boxENC->Add(pCBENCBuoyLabels, verticalInputFlags);
275 pCBENCBuoyLabels->Connect(
276 wxEVT_COMMAND_CHECKBOX_CLICKED,
277 wxCommandEventHandler(CanvasOptions::OnOptionChange), NULL,
this);
281 boxENC->Add(pCBENCLights, verticalInputFlags);
282 pCBENCLights->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
283 wxCommandEventHandler(CanvasOptions::OnOptionChange),
287 _(
"Light Descriptions"));
288 boxENC->Add(pCBENCLightDesc, verticalInputFlags);
289 pCBENCLightDesc->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
290 wxCommandEventHandler(CanvasOptions::OnOptionChange),
294 _(
"Anchoring Info"));
295 boxENC->Add(pCBENCAnchorDetails, verticalInputFlags);
296 pCBENCAnchorDetails->Connect(
297 wxEVT_COMMAND_CHECKBOX_CLICKED,
298 wxCommandEventHandler(CanvasOptions::OnOptionChange), NULL,
this);
300 pCBENCVisibleSectors =
302 _(
"Show visible sector lights"));
303 boxENC->Add(pCBENCVisibleSectors, verticalInputFlags);
304 pCBENCVisibleSectors->Connect(
305 wxEVT_COMMAND_CHECKBOX_CLICKED,
306 wxCommandEventHandler(CanvasOptions::OnOptionChange), NULL,
this);
310 _(
"Show chart data quality"));
311 boxENC->Add(pCBENCDataQuality, verticalInputFlags);
312 pCBENCDataQuality->Connect(
313 wxEVT_COMMAND_CHECKBOX_CLICKED,
314 wxCommandEventHandler(CanvasOptions::OnOptionChange), NULL,
this);
317 boxENC->Add(0, interGroupSpace);
320 boxENC->Add(
new wxStaticText(pDisplayPanel, wxID_ANY, _(
"Display Category")),
322 wxString pDispCatStrings[] = {_(
"Base"), _(
"Standard"), _(
"All"),
324 m_pDispCat =
new wxChoice(pDisplayPanel,
ID_CODISPCAT, wxDefaultPosition,
325 wxDefaultSize, 4, pDispCatStrings);
326 boxENC->Add(m_pDispCat, 0, wxALIGN_CENTER_HORIZONTAL, 0);
327 m_pDispCat->Connect(wxEVT_COMMAND_CHOICE_SELECTED,
328 wxCommandEventHandler(CanvasOptions::OnOptionChange),
332 GetHandle()->setStyleSheet(getAdjustedDialogStyleSheet());
335 RefreshControlValues();
342void CanvasOptions::OnEraseBackground(wxEraseEvent& event) {}
344void CanvasOptions::OnClose(wxCloseEvent& event) {
349void CanvasOptions::OnOptionChange(wxCommandEvent& event) {
350 UpdateCanvasOptions();
353void CanvasOptions::RefreshControlValues() {
354 auto parentCanvas =
dynamic_cast<ChartCanvas*
>(m_parent);
356 if (!parentCanvas)
return;
358 m_bmode_change_while_hidden = !wxWindow::IsShown();
364 int mode = parentCanvas->GetUpMode();
365 if (mode == NORTH_UP_MODE)
366 pCBNorthUp->SetValue(
true);
367 else if (mode == COURSE_UP_MODE)
368 pCBCourseUp->SetValue(
true);
370 pCBHeadUp->SetValue(
true);
372 pCBLookAhead->SetValue(parentCanvas->GetLookahead());
375 pCDOQuilting->SetValue(parentCanvas->GetQuiltMode());
376 pSDisplayGrid->SetValue(parentCanvas->GetShowGrid());
377 pCDOOutlines->SetValue(parentCanvas->GetShowOutlines());
378 pSDepthUnits->SetValue(parentCanvas->GetShowDepthUnits());
381 pCBShowAIS->SetValue(parentCanvas->GetShowAIS());
382 pCBAttenAIS->SetValue(parentCanvas->GetAttenAIS());
385 pCDOTides->SetValue(parentCanvas->GetbShowTide());
386 pCDOCurrents->SetValue(parentCanvas->GetbShowCurrent());
390 pCDOENCText->SetValue(parentCanvas->GetShowENCText());
391 pCBENCDepth->SetValue(parentCanvas->GetShowENCDepth());
392 pCBENCLightDesc->SetValue(parentCanvas->GetShowENCLightDesc());
393 pCBENCBuoyLabels->SetValue(parentCanvas->GetShowENCBuoyLabels());
394 pCBENCLights->SetValue(parentCanvas->GetShowENCLights());
395 pCBENCAnchorDetails->SetValue(parentCanvas->GetShowENCAnchor());
396 pCBENCVisibleSectors->SetValue(parentCanvas->GetShowVisibleSectors());
397 pCBENCDataQuality->SetValue(parentCanvas->GetShowENCDataQual());
403 switch (parentCanvas->GetENCDisplayCategory()) {
413 case (MARINERS_STANDARD):
420 m_pDispCat->SetSelection(nset);
424 pCDOENCText->Enable(m_ENCAvail);
425 pCBENCDepth->Enable(m_ENCAvail);
426 pCBENCLightDesc->Enable(m_ENCAvail && parentCanvas->GetShowENCLights());
427 pCBENCBuoyLabels->Enable(m_ENCAvail);
428 pCBENCLights->Enable(m_ENCAvail);
429 pCBENCVisibleSectors->Enable(m_ENCAvail);
433 pCBENCDataQuality->Enable(m_ENCAvail && (nset > 1));
434 pCBENCAnchorDetails->Enable(m_ENCAvail && (nset > 1));
438 pCDOENCText->Disable();
439 pCBENCDepth->Disable();
440 pCBENCLightDesc->Disable();
441 pCBENCBuoyLabels->Disable();
442 pCBENCLights->Disable();
443 pCBENCVisibleSectors->Disable();
444 pCBENCDataQuality->Disable();
447 m_pDispCat->Enable(m_ENCAvail);
450 pCBENCLightDesc->Enable(pCDOENCText->GetValue());
451 pCBENCBuoyLabels->Enable(pCDOENCText->GetValue());
454void CanvasOptions::SetENCAvailable(
bool avail) {
456 RefreshControlValues();
459void CanvasOptions::UpdateCanvasOptions() {
460 auto parentCanvas =
dynamic_cast<ChartCanvas*
>(m_parent);
461 if (!parentCanvas)
return;
463 bool b_needRefresh =
false;
464 bool b_needReLoad =
false;
471 if (pCDOQuilting->GetValue() != parentCanvas->GetQuiltMode()) {
472 parentCanvas->ToggleCanvasQuiltMode();
475 if (pSDisplayGrid->GetValue() != parentCanvas->GetShowGrid()) {
476 parentCanvas->SetShowGrid(pSDisplayGrid->GetValue());
477 b_needRefresh =
true;
480 if (pCDOOutlines->GetValue() != parentCanvas->GetShowOutlines()) {
481 parentCanvas->SetShowOutlines(pCDOOutlines->GetValue());
482 b_needRefresh =
true;
484 if (pSDepthUnits->GetValue() != parentCanvas->GetShowDepthUnits()) {
485 parentCanvas->SetShowDepthUnits(pSDepthUnits->GetValue());
486 b_needRefresh =
true;
489 if (pCBShowAIS->GetValue() != parentCanvas->GetShowAIS()) {
490 parentCanvas->SetShowAIS(pCBShowAIS->GetValue());
491 b_needRefresh =
true;
494 if (pCBAttenAIS->GetValue() != parentCanvas->GetAttenAIS()) {
495 parentCanvas->SetAttenAIS(pCBAttenAIS->GetValue());
496 b_needRefresh =
true;
499 if (pCDOTides->GetValue() != parentCanvas->GetbShowTide()) {
500 parentCanvas->ShowTides(pCDOTides->GetValue());
501 b_needRefresh =
true;
503 if (pCDOCurrents->GetValue() != parentCanvas->GetbShowCurrent()) {
504 parentCanvas->ShowCurrents(pCDOCurrents->GetValue());
505 b_needRefresh =
true;
509 if (pCDOENCText->GetValue() != parentCanvas->GetShowENCText()) {
510 parentCanvas->SetShowENCText(pCDOENCText->GetValue());
514 if (pCBENCDepth->GetValue() != parentCanvas->GetShowENCDepth()) {
515 parentCanvas->SetShowENCDepth(pCBENCDepth->GetValue());
519 if (pCBENCLightDesc->GetValue() != parentCanvas->GetShowENCLightDesc()) {
520 parentCanvas->SetShowENCLightDesc(pCBENCLightDesc->GetValue());
524 if (pCBENCBuoyLabels->GetValue() != parentCanvas->GetShowENCBuoyLabels()) {
525 parentCanvas->SetShowENCBuoyLabels(pCBENCBuoyLabels->GetValue());
529 if (pCBENCLights->GetValue() != parentCanvas->GetShowENCLights()) {
530 parentCanvas->SetShowENCLights(pCBENCLights->GetValue());
534 if (pCBENCAnchorDetails->GetValue() != parentCanvas->GetShowENCAnchor()) {
535 parentCanvas->SetShowENCAnchor(pCBENCAnchorDetails->GetValue());
539 if (pCBENCVisibleSectors->GetValue() !=
540 parentCanvas->GetShowVisibleSectors()) {
541 parentCanvas->SetShowVisibleSectors(pCBENCVisibleSectors->GetValue());
545 if (pCBENCDataQuality->GetValue() != parentCanvas->GetShowENCDataQual()) {
546 parentCanvas->SetShowENCDataQual(pCBENCDataQuality->GetValue());
551 if (pCBENCDataQuality->GetValue()) {
552 if (ps52plib) ps52plib->m_bShowMeta =
true;
553 parentCanvas->UpdateCanvasS52PLIBConfig();
556 if (!m_bmode_change_while_hidden) {
557 int newMode = NORTH_UP_MODE;
558 if (pCBCourseUp->GetValue())
559 newMode = COURSE_UP_MODE;
560 else if (pCBHeadUp->GetValue())
561 newMode = HEAD_UP_MODE;
563 if (newMode != parentCanvas->GetUpMode()) {
564 parentCanvas->SetUpMode(newMode);
569 if (pCBLookAhead->GetValue() != parentCanvas->GetLookahead()) {
570 parentCanvas->ToggleLookahead();
571 parentCanvas->UpdateFollowButtonState();
576 switch (parentCanvas->GetENCDisplayCategory()) {
586 case (MARINERS_STANDARD):
594 if (m_pDispCat->GetSelection() != nset) {
595 int valSet = STANDARD;
596 int newSet = m_pDispCat->GetSelection();
599 valSet = DISPLAYBASE;
608 valSet = MARINERS_STANDARD;
614 parentCanvas->SetENCDisplayCategory(valSet);
619 pCBENCAnchorDetails->Enable(newSet > 1);
623 parentCanvas->ReloadVP();
624 }
else if (b_needRefresh) {
625 parentCanvas->Refresh(
true);
626 parentCanvas->InvalidateGL();
629 RefreshControlValues();
Class CanvasOptions and helpers – Canvas options Window/Dialog.
@ IDCO_QUILTCHECKBOX1
ID for checkbox to enable chart quilting.
@ IDCO_ENCTEXT_CHECKBOX1
ID for checkbox to show ENC (Electronic Navigational Chart) text.
@ IDCO_CURRENTS_CHECKBOX
ID for checkbox to show currents.
@ IDCO_ENCVISIBLESECTORS_CHECKBOX1
ID for checkbox to show ENC visible light sectors.
@ IDCO_SHOW_AIS_CHECKBOX
ID for checkbox to show AIS (Automatic Identification System) targets.
@ ID_CODISPCAT
ID for control to set ENC display category.
@ IDCO_ENCDEPTH_CHECKBOX1
ID for checkbox to show ENC depths.
@ IDCO_TIDES_CHECKBOX
ID for checkbox to show tides.
@ IDCO_OUTLINECHECKBOX1
ID for checkbox to show chart outlines.
@ IDCO_ATTEN_AIS_CHECKBOX
ID for checkbox to attenuate AIS targets.
@ IDCO_ENCDATAQUALITY_CHECKBOX
ID for checkbox to show ENC data quality indicators.
@ IDCO_ENCBUOYLABEL_CHECKBOX1
ID for checkbox to show ENC buoy labels.
@ IDCO_HEADUPCHECKBOX
ID for checkbox to set head-up orientation.
@ IDCO_ENCBUOY_CHECKBOX1
ID for checkbox to show ENC buoys.
@ IDCO_ENCANCHOR_CHECKBOX1
ID for checkbox to show ENC anchor details.
@ IDCO_CHECK_LOOKAHEAD
ID for checkbox to enable look-ahead mode.
@ IDCO_COURSEUPCHECKBOX
ID for checkbox to set course-up orientation.
@ IDCO_CHECK_DISPLAYGRID
ID for checkbox to display grid.
@ IDCO_SHOWDEPTHUNITSBOX1
ID for checkbox to show depth units.
Basic chart info storage.
Generic Chart canvas base.
Represents the Canvas Options dialog.
ChartCanvas - Main chart display and interaction component.
wxFont * GetOCPNScaledFont(wxString item, int default_size)
Retrieves a font from FontMgr, optionally scaled for physical readability.
General purpose GUI support.