1 /*************************************************************************** 2 * 3 * Project: OpenCPN 4 * Purpose: Options Dialog 5 * Author: David Register 6 * 7 *************************************************************************** 8 * Copyright (C) 2010 by David S. Register * 9 * * 10 * This program is free software; you can redistribute it and/or modify * 11 * it under the terms of the GNU General Public License as published by * 12 * the Free Software Foundation; either version 2 of the License, or * 13 * (at your option) any later version. * 14 * * 15 * This program is distributed in the hope that it will be useful, * 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 18 * GNU General Public License for more details. * 19 * * 20 * You should have received a copy of the GNU General Public License * 21 * along with this program; if not, write to the * 22 * Free Software Foundation, Inc., * 23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 24 **************************************************************************/ 25 26 #ifndef _OPTIONS_H_ 27 #define _OPTIONS_H_ 28 29 #ifdef __MINGW32__ 30 #undef IPV6STRICT // mingw FTBS fix: missing struct ip_mreq 31 #include <windows.h> 32 #endif 33 34 #include <wx/listbook.h> 35 #include <wx/dirctrl.h> 36 #include <wx/spinctrl.h> 37 #include <wx/listctrl.h> 38 #include <wx/choice.h> 39 #include <wx/collpane.h> 40 #include <wx/clrpicker.h> 41 #include <wx/colourdata.h> 42 43 #if wxUSE_TIMEPICKCTRL 44 #include <wx/timectrl.h> 45 #endif 46 47 #ifdef __WXGTK__ 48 //wxTimePickerCtrl is completely broken in Gnome based desktop environments as of wxGTK 3.0 49 #include "time_textbox.h" 50 #endif 51 52 #include <vector> 53 54 #if wxCHECK_VERSION(2, 9, 0) 55 #include <wx/frame.h> 56 #else 57 #include "scrollingdialog.h" 58 #endif 59 60 #include "datastream.h" 61 #include "pluginmanager.h" // FIXME: Refactor 62 63 #ifndef __OCPN__ANDROID__ 64 #define __OCPN__OPTIONS_USE_LISTBOOK__ 65 #endif 66 67 // Forward Declarations 68 class wxGenericDirCtrl; 69 class MyConfig; 70 class ChartGroupsUI; 71 class ConnectionParams; 72 class PluginListPanel; 73 class ChartGroupArray; 74 class ChartGroup; 75 class MMSI_Props_Panel; 76 class MMSIProperties; 77 class OCPNCheckedListCtrl; 78 class CanvasConfigSelect; 79 class OCPNIconCombo; 80 class OCPNColourPickerCtrl; 81 82 #define ID_DIALOG 10001 83 #define SYMBOL_OPTIONS_STYLE \ 84 wxCAPTION | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCLOSE_BOX 85 #define SYMBOL_OPTIONS_TITLE _("Options") 86 #define SYMBOL_OPTIONS_IDNAME ID_DIALOG 87 #define SYMBOL_OPTIONS_SIZE wxSize(500, 500) 88 #define SYMBOL_OPTIONS_POSITION wxDefaultPosition 89 90 enum { 91 ID_AISALERTAUDIO = 10000, 92 ID_AISALERTDIALOG, 93 ID_AISALERTSELECTSOUND, 94 ID_AISALERTTESTSOUND, 95 ID_APPLY, 96 ID_ATONTEXTCHECKBOX, 97 ID_AUTOANCHORMARKBOX1, 98 ID_BELLSCHECKBOX, 99 ID_BUTTONADD, 100 ID_BUTTONDELETE, 101 ID_BUTTONCOMPRESS, 102 ID_BUTTONFONTCHOOSE, 103 ID_BUTTONFONTCOLOR, 104 ID_BUTTONGROUP, 105 ID_BUTTONREBUILD, 106 ID_BUTTONTCDATA, 107 ID_CHECKLISTBOX, 108 ID_CHECK_DISPLAYGRID, 109 ID_CHECK_LOOKAHEAD, 110 ID_CHOICE_AIS, 111 ID_CHOICE_AP, 112 ID_CHOICE_FONTELEMENT, 113 ID_CHOICE_LANG, 114 ID_CHOICE_NMEA_BAUD, 115 ID_CLEARLIST, 116 ID_CM93CHECKBOX1, 117 ID_CM93ZOOM, 118 ID_COURSEUPCHECKBOX, 119 ID_DAILYCHECKBOX, 120 ID_DEBUGCHECKBOX1, 121 ID_DECLTEXTCHECKBOX, 122 ID_DIRCTRL, 123 ID_DRAGGINGCHECKBOX, 124 ID_FILTERNMEA, 125 ID_FSTOOLBARCHECKBOX, 126 ID_FULLSCREENQUILT, 127 ID_GARMINHOST, 128 ID_RADARRINGS, 129 ID_GRIBCHECKBOX, 130 ID_GROUPAVAILABLE, 131 ID_GROUPDELETEGROUP, 132 ID_GROUPINSERTDIR, 133 ID_GROUPNEWGROUP, 134 ID_GROUPNOTEBOOK, 135 ID_GROUPREMOVEDIR, 136 ID_IMPTEXTCHECKBOX, 137 ID_LDISTEXTCHECKBOX, 138 ID_LISTBOX, 139 ID_METACHECKBOX, 140 ID_NOTEBOOK, 141 ID_OPENGLBOX, 142 ID_OPENGLOPTIONS, 143 ID_SHIPICONTYPE, 144 ID_OUTLINECHECKBOX1, 145 ID_PANEL, 146 ID_PANEL2, 147 ID_PANEL3, 148 ID_PANELADVANCED, 149 ID_PANELAIS, 150 ID_PANELMMSI, 151 ID_PANELFONT, 152 ID_PANELPIM, 153 ID_PRESERVECHECKBOX, 154 ID_PRINTCHECKBOX1, 155 ID_QUILTCHECKBOX1, 156 ID_RADARDISTUNIT, 157 ID_RASTERCHECKBOX1, 158 ID_SCAMINCHECKBOX, 159 ID_SCANCHECKBOX, 160 ID_SDMMFORMATCHOICE, 161 ID_DISTANCEUNITSCHOICE, 162 ID_SPEEDUNITSCHOICE, 163 ID_DEPTHUNITSCHOICE, 164 ID_SELECTLIST, 165 ID_SHOWDEPTHUNITSBOX1, 166 ID_SHOWGPSWINDOW, 167 ID_SKEWCOMPBOX, 168 ID_SMOOTHPANZOOMBOX, 169 ID_SOUNDGCHECKBOX, 170 ID_STYLESCOMBOBOX, 171 ID_TCDATAADD, 172 ID_TCDATADEL, 173 ID_TEXTCHECKBOX, 174 ID_OPTEXTCTRL, 175 ID_TIDESELECTED, 176 ID_TRACKCHECKBOX, 177 ID_TRACKHILITE, 178 ID_TRANSTOOLBARCHECKBOX, 179 ID_UPDCHECKBOX, 180 ID_PARSEENCBUTTON, 181 ID_VECTORCHECKBOX1, 182 ID_ZTCCHECKBOX, 183 ID_DELETECHECKBOX, 184 ID_NATIONALTEXTCHECKBOX, 185 ID_TRUESHOWCHECKBOX, 186 ID_MAGSHOWCHECKBOX, 187 ID_MAGAPBCHECKBOX, 188 ID_MOBILEBOX, 189 ID_REPONSIVEBOX, 190 ID_SIZEMANUALRADIOBUTTON, 191 ID_OPWAYPOINTRANGERINGS, 192 xID_OK, 193 ID_BT_SCANTIMER, 194 ID_TRACKROTATETIME, 195 ID_TRACKROTATEUTC, 196 ID_TRACKROTATELMT, 197 ID_TRACKROTATECOMPUTER, 198 ID_SETSTDLIST, 199 ID_VECZOOM, 200 ID_INLANDECDISBOX, 201 ID_ROLLOVERBOX, 202 ID_SOGCOGFROMLLCHECKBOX, 203 ID_SOGCOGDAMPINTTEXTCTRL, 204 // LIVE ETA OPTION 205 ID_CHECK_LIVEETA, 206 ID_DEFAULT_BOAT_SPEED, 207 ID_DARKDECORATIONSBOX, 208 ID_SCREENCONFIG1, 209 ID_SCREENCONFIG2, 210 ID_CONFIGEDIT_OK, 211 ID_CONFIGEDIT_CANCEL, 212 ID_ZOOMBUTTONS, 213 ID_RASTERZOOM 214 }; 215 216 /* Define an int bit field for dialog return value 217 * to indicate which types of settings have changed */ 218 #define GENERIC_CHANGED 1 219 #define S52_CHANGED 1 << 1 220 #define FONT_CHANGED 1 << 2 221 #define FORCE_UPDATE 1 << 3 222 #define VISIT_CHARTS 1 << 4 223 #define LOCALE_CHANGED 1 << 5 224 #define TOOLBAR_CHANGED 1 << 6 225 #define CHANGE_CHARTS 1 << 7 226 #define SCAN_UPDATE 1 << 8 227 #define GROUPS_CHANGED 1 << 9 228 #define STYLE_CHANGED 1 << 10 229 #define TIDES_CHANGED 1 << 11 230 #define GL_CHANGED 1 << 12 231 #define REBUILD_RASTER_CACHE 1 << 13 232 #define NEED_NEW_OPTIONS 1 << 14 233 #define PARSE_ENC 1 << 15 234 #define CONFIG_CHANGED 1 << 16 235 236 #ifndef wxCLOSE_BOX 237 #define wxCLOSE_BOX 0x1000 238 #endif 239 #ifndef wxFIXED_MINSIZE 240 #define wxFIXED_MINSIZE 0 241 #endif 242 243 #include <wx/arrimpl.cpp> 244 WX_DEFINE_ARRAY_PTR(wxGenericDirCtrl *, ArrayOfDirCtrls); 245 246 class Uncopyable { 247 protected: Uncopyable(void)248 Uncopyable(void) {} ~Uncopyable(void)249 ~Uncopyable(void) {} 250 251 private: 252 Uncopyable(const Uncopyable &); 253 Uncopyable &operator=(const Uncopyable &); 254 }; 255 256 #ifndef bert // wxCHECK_VERSION(2, 9, 0) 257 class options : private Uncopyable, 258 public wxDialog 259 #else 260 class options : private Uncopyable, 261 public wxScrollingDialog 262 #endif 263 { 264 public: 265 explicit options(MyFrame *parent, wxWindowID id = SYMBOL_OPTIONS_IDNAME, 266 const wxString &caption = SYMBOL_OPTIONS_TITLE, 267 const wxPoint &pos = SYMBOL_OPTIONS_POSITION, 268 const wxSize &size = SYMBOL_OPTIONS_SIZE, 269 long style = SYMBOL_OPTIONS_STYLE); 270 271 ~options(void); 272 #if wxCHECK_VERSION(3,0,0) 273 bool SendIdleEvents(wxIdleEvent &event ); 274 #endif 275 void SetInitialPage(int page_sel, int sub_page = -1); 276 void Finish(void); 277 278 void OnClose(wxCloseEvent &event); 279 280 void CreateListbookIcons(); 281 void CreateControls(void); 282 size_t CreatePanel(const wxString &title); 283 wxScrolledWindow *AddPage(size_t parent, const wxString &title); 284 bool DeletePluginPage(wxScrolledWindow *page); 285 void SetColorScheme(ColorScheme cs); 286 void RecalculateSize(void); 287 SetInitChartDir(const wxString & dir)288 void SetInitChartDir(const wxString &dir) { m_init_chart_dir = dir; } 289 void SetInitialSettings(void); 290 void SetInitialVectorSettings(void); 291 SetCurrentDirList(ArrayOfCDI p)292 void SetCurrentDirList(ArrayOfCDI p) { m_CurrentDirList = p; } SetWorkDirListPtr(ArrayOfCDI * p)293 void SetWorkDirListPtr(ArrayOfCDI *p) { m_pWorkDirList = p; } GetWorkDirListPtr(void)294 ArrayOfCDI *GetWorkDirListPtr(void) { return m_pWorkDirList; } 295 296 void AddChartDir(const wxString &dir); 297 298 void UpdateDisplayedChartDirList(ArrayOfCDI p); 299 void UpdateOptionsUnits(void); 300 SetConfigPtr(MyConfig * p)301 void SetConfigPtr(MyConfig *p) { m_pConfig = p; } 302 void OnDebugcheckbox1Click(wxCommandEvent &event); 303 void OnDirctrlSelChanged(wxTreeEvent &event); 304 void OnButtonaddClick(wxCommandEvent &event); 305 void OnButtondeleteClick(wxCommandEvent &event); 306 void OnButtonParseENC(wxCommandEvent &event); 307 void OnButtoncompressClick(wxCommandEvent &event); 308 void OnRadioboxSelected(wxCommandEvent &event); 309 void OnApplyClick(wxCommandEvent &event); 310 void OnXidOkClick(wxCommandEvent &event); 311 void OnCancelClick(wxCommandEvent &event); 312 void OnChooseFont(wxCommandEvent &event); 313 void OnFontChoice(wxCommandEvent &event); 314 void OnCPAWarnClick(wxCommandEvent &event); 315 void OnSizeAutoButton(wxCommandEvent &event); 316 void OnSizeManualButton(wxCommandEvent &event); 317 318 #if defined(__WXGTK__) || defined(__WXQT__) 319 void OnChooseFontColor(wxCommandEvent &event); 320 #endif 321 void OnGLClicked(wxCommandEvent &event); 322 void OnOpenGLOptions(wxCommandEvent &event); 323 void OnDisplayCategoryRadioButton(wxCommandEvent &event); 324 void OnButtonClearClick(wxCommandEvent &event); 325 void OnButtonSelectClick(wxCommandEvent &event); 326 void OnButtonSetStd(wxCommandEvent& event); 327 328 void OnPageChange(wxListbookEvent &event); 329 void OnTopNBPageChange(wxNotebookEvent &event); 330 void OnSubNBPageChange(wxNotebookEvent &event); 331 void DoOnPageChange(size_t page); 332 333 void OnButtonSelectSound(wxCommandEvent &event); 334 void OnButtonTestSound(wxCommandEvent &event); 335 void OnShowGpsWindowCheckboxClick(wxCommandEvent &event); 336 void OnZTCCheckboxClick(wxCommandEvent &event); 337 void OnRadarringSelect(wxCommandEvent &event); 338 void OnWaypointRangeRingSelect(wxCommandEvent &event); 339 void OnShipTypeSelect(wxCommandEvent &event); 340 void OnButtonGroups(wxCommandEvent &event); 341 void OnInsertTideDataLocation(wxCommandEvent &event); 342 void OnRemoveTideDataLocation(wxCommandEvent &event); 343 void OnCharHook(wxKeyEvent &event); 344 void OnChartsPageChange(wxListbookEvent &event); 345 void OnChartDirListSelect(wxCommandEvent &event); 346 void OnUnitsChoice(wxCommandEvent &event); 347 void OnScanBTClick(wxCommandEvent &event); 348 void onBTScanTimer(wxTimerEvent &event); 349 void StopBTScan(void); 350 351 void UpdateWorkArrayFromTextCtl(void); 352 353 void OnCreateConfig( wxCommandEvent &event); 354 void OnEditConfig( wxCommandEvent &event); 355 void OnDeleteConfig( wxCommandEvent &event); 356 void OnApplyConfig( wxCommandEvent &event); 357 void SetConfigButtonState(); 358 void ClearConfigList(); 359 void BuildConfigList(); 360 void OnConfigMouseSelected( wxMouseEvent &event); 361 362 void SetSelectedConnectionPanel( ConnectionParamsPanel *panel ); 363 GetNeedNew()364 bool GetNeedNew(){ return m_bneedNew; } SetNeedNew(bool bnew)365 void SetNeedNew( bool bnew ){ m_bneedNew =bnew; } GetScrollRate()366 int GetScrollRate(){ return m_scrollRate; } 367 368 // Should we show tooltips? 369 static bool ShowToolTips(void); 370 371 #ifdef __OCPN__OPTIONS_USE_LISTBOOK__ 372 wxListbook *m_pListbook; 373 #else 374 wxNotebook *m_pListbook; 375 #endif 376 377 size_t m_pageDisplay, m_pageConnections, m_pageCharts, m_pageShips; 378 size_t m_pageUI, m_pagePlugins; 379 int lastPage, lastSubPage; 380 wxPoint lastWindowPos; 381 wxSize lastWindowSize; 382 wxButton *m_ApplyButton, *m_OKButton, *m_CancelButton; 383 384 ChartGroupArray *m_pGroupArray; 385 int m_groups_changed; 386 387 // Sizer flags 388 wxSizerFlags inputFlags, verticleInputFlags, labelFlags, groupInputFlags; 389 wxSizerFlags groupLabelFlags, groupLabelFlagsHoriz; 390 391 // For general options 392 wxScrolledWindow *pDisplayPanel; 393 wxCheckBox *pShowStatusBar, *pShowMenuBar, *pShowChartBar, *pShowCompassWin; 394 wxCheckBox *pPrintShowIcon, *pCDOOutlines, *pSDepthUnits, *pSDisplayGrid; 395 wxCheckBox *pAutoAnchorMark, *pCDOQuilting, *pCBRaster, *pCBVector; 396 wxCheckBox *pCBCM93, *pCBLookAhead, *pSkewComp, *pOpenGL, *pSmoothPanZoom; 397 wxCheckBox *pFullScreenQuilt, *pMobile, *pResponsive, *pOverzoomEmphasis; 398 // wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis, *pRollover; 399 wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis, *pRollover, *pDarkDecorations; 400 wxCheckBox *pZoomButtons; 401 wxTextCtrl *pCOGUPUpdateSecs, *m_pText_OSCOG_Predictor, *pScreenMM; 402 wxTextCtrl *pToolbarHideSecs, *m_pText_OSHDT_Predictor; 403 404 wxTextCtrl *pCmdSoundString; 405 406 wxChoice *m_pShipIconType, *m_pcTCDatasets; 407 wxSlider *m_pSlider_Zoom, *m_pSlider_GUI_Factor, *m_pSlider_Chart_Factor, *m_pSlider_Ship_Factor, *m_pSlider_Text_Factor; 408 wxSlider *m_pSlider_Zoom_Vector; 409 wxSlider *m_pSlider_CM93_Zoom; 410 // LIVE ETA OPTION 411 wxCheckBox *pSLiveETA; 412 wxTextCtrl *pSDefaultBoatSpeed; 413 414 wxRadioButton *pCBCourseUp, *pCBNorthUp, *pRBSizeAuto, *pRBSizeManual; 415 int k_tides; 416 417 // For the GPS page 418 wxButton *m_buttonAdd, *m_buttonRemove, *m_buttonScanBT, *m_btnInputStcList; 419 wxButton *m_btnOutputStcList, *m_sdbSizerDlgButtonsOK; 420 wxButton *m_sdbSizerDlgButtonsApply, *m_sdbSizerDlgButtonsCancel; 421 wxStaticBoxSizer *sbSizerConnectionProps, *sbSizerInFilter; 422 wxStaticBoxSizer *sbSizerOutFilter; 423 wxRadioButton *m_rbTypeSerial, *m_rbTypeNet, *m_rbTypeInternalGPS; 424 wxRadioButton *m_rbTypeInternalBT, *m_rbNetProtoTCP, *m_rbNetProtoUDP; 425 wxRadioButton *m_rbNetProtoGPSD, *m_rbIAccept, *m_rbIIgnore, *m_rbOAccept; 426 wxRadioButton *m_rbNetProtoSignalK; 427 wxRadioButton *m_rbOIgnore; 428 wxStaticText *m_stBTPairs, *m_stNetProto, *m_stNetAddr, *m_stNetPort; 429 wxStaticText *m_stSerPort, *m_stSerBaudrate, *m_stSerProtocol; 430 wxStaticText *m_stPriority, *m_stFilterSec, *m_stPrecision; 431 wxStaticText *m_stTalkerIdText; 432 wxStaticText *m_stNetComment, *m_stSerialComment; 433 wxTextCtrl *m_tNetComment, *m_tSerialComment; 434 wxStaticBox *m_sbConnEdit; 435 wxChoice *m_choiceBTDataSources, *m_choiceBaudRate, *m_choiceSerialProtocol; 436 wxChoice *m_choicePriority, *m_choicePrecision; 437 wxScrolledWindow *m_scrollWinConnections; 438 wxBoxSizer *boxSizerConnections; 439 ConnectionParams *mSelectedConnection; 440 441 // For the Display\Units page 442 wxStaticText* itemStaticTextUserVar; 443 wxStaticText* itemStaticTextUserVar2; 444 445 wxGridSizer *gSizerNetProps, *gSizerSerProps; 446 wxTextCtrl *m_tNetAddress, *m_tNetPort, *m_tFilterSec, *m_tcInputStc; 447 wxTextCtrl *m_tcOutputStc, *m_TalkerIdText; 448 wxCheckBox *m_cbCheckCRC, *m_cbGarminHost, *m_cbGarminUploadHost, *m_cbCheckSKDiscover; 449 wxCheckBox *m_cbFurunoGP3X, *m_cbNMEADebug, *m_cbFilterSogCog, *m_cbInput; 450 wxCheckBox *m_cbOutput, *m_cbAPBMagnetic; 451 wxComboBox *m_comboPort; 452 wxStdDialogButtonSizer *m_sdbSizerDlgButtons; 453 wxButton *m_configDeleteButton, *m_configApplyButton, *m_ButtonSKDiscover; 454 wxStaticText *m_StaticTextSKServerStatus; 455 456 void OnSelectDatasource(wxListEvent &event); 457 void OnAddDatasourceClick(wxCommandEvent &event); 458 void OnRemoveDatasourceClick(wxCommandEvent &event); 459 460 void OnTypeSerialSelected(wxCommandEvent &event); 461 void OnTypeNetSelected(wxCommandEvent &event); 462 void OnTypeGPSSelected(wxCommandEvent &event); 463 void OnTypeBTSelected(wxCommandEvent &event); 464 465 void OnNetProtocolSelected(wxCommandEvent &event); OnBaudrateChoice(wxCommandEvent & event)466 void OnBaudrateChoice(wxCommandEvent &event) { OnConnValChange(event); } OnProtocolChoice(wxCommandEvent & event)467 void OnProtocolChoice(wxCommandEvent &event) { OnConnValChange(event); } OnCrcCheck(wxCommandEvent & event)468 void OnCrcCheck(wxCommandEvent &event) { OnValChange(event); } 469 void OnRbAcceptInput(wxCommandEvent &event); 470 void OnRbIgnoreInput(wxCommandEvent &event); 471 void OnBtnIStcs(wxCommandEvent &event); 472 void OnCbInput(wxCommandEvent &event); 473 void OnCbOutput(wxCommandEvent &event); 474 void OnRbOutput(wxCommandEvent &event); 475 void OnBtnOStcs(wxCommandEvent &event); 476 void OnConnValChange(wxCommandEvent &event); 477 void OnValChange(wxCommandEvent &event); 478 void OnUploadFormatChange(wxCommandEvent &event); 479 void EnableConnection( ConnectionParams *conn, bool value); 480 void OnDiscoverButton(wxCommandEvent &event); 481 void UpdateDiscoverStatus( wxString stat); 482 void OnAISRolloverClick(wxCommandEvent &event); 483 484 void OnCanvasConfigSelectClick( int ID, bool selected); 485 486 bool connectionsaved; 487 bool m_connection_enabled; 488 489 bool b_haveWMM; 490 bool b_oldhaveWMM; 491 ColorScheme m_cs; 492 493 // For "S57" page 494 wxBoxSizer *vectorPanel; 495 wxScrolledWindow *ps57Ctl; 496 497 // #if defined(__WXMSW__) || defined(__WXOSX__) 498 // wxCheckListBox *ps57CtlListBox; 499 // #else 500 OCPNCheckedListCtrl *ps57CtlListBox; 501 // #endif 502 503 wxChoice *pDispCat, *pPointStyle, *pBoundStyle, *p24Color; 504 wxButton *itemButtonClearList, *itemButtonSelectList, *itemButtonSetStd; 505 wxCheckBox *pCheck_SOUNDG, *pCheck_META, *pCheck_SHOWIMPTEXT; 506 wxCheckBox *pCheck_SCAMIN, *pCheck_ATONTEXT, *pCheck_LDISTEXT; 507 wxCheckBox *pCheck_XLSECTTEXT, *pCheck_DECLTEXT, *pCheck_NATIONALTEXT; 508 wxCheckBox *pSEnableCM93Offset; 509 wxTextCtrl *m_ShallowCtl, *m_SafetyCtl, *m_DeepCtl; 510 wxStaticText *m_depthUnitsShal, *m_depthUnitsSafe, *m_depthUnitsDeep; 511 int k_vectorcharts; 512 513 // For "Units" page 514 wxChoice *pSDMMFormat, *pDistanceFormat, *pSpeedFormat, *pDepthUnitSelect; 515 wxCheckBox *pCBTrueShow, *pCBMagShow; 516 wxTextCtrl *pMagVar; 517 518 // For "Charts" page 519 wxStaticBoxSizer *activeSizer; 520 wxBoxSizer *chartPanel; 521 wxTextCtrl *pSelCtl; 522 wxListCtrl *pActiveChartsList; 523 wxStaticBox *itemActiveChartStaticBox; 524 wxCheckBox *pUpdateCheckBox, *pScanCheckBox; 525 wxButton *pParseENCButton; 526 wxButton *m_removeBtn, *m_compressBtn; 527 int k_charts; 528 int m_nCharWidthMax; 529 530 // For the "Charts->Display Options" page 531 wxScrolledWindow *m_ChartDisplayPage; 532 533 // For the "AIS" page 534 wxCheckBox *m_pCheck_CPA_Max, *m_pCheck_CPA_Warn, *m_pCheck_CPA_WarnT; 535 wxCheckBox *m_pCheck_Mark_Lost, *m_pCheck_Remove_Lost, *m_pCheck_Show_COG; 536 wxCheckBox *m_pCheck_Show_Tracks, *m_pCheck_Hide_Moored, *m_pCheck_Scale_Priority; 537 wxCheckBox *m_pCheck_AlertDialog, *m_pCheck_AlertAudio; 538 wxCheckBox *m_pCheck_Alert_Moored, *m_pCheck_Rollover_Class; 539 wxCheckBox *m_pCheck_Rollover_COG, *m_pCheck_Rollover_CPA; 540 wxCheckBox *m_pCheck_Ack_Timout, *m_pCheck_Show_Area_Notices; 541 wxCheckBox *m_pCheck_Draw_Target_Size, *m_pCheck_Draw_Realtime_Prediction; 542 wxCheckBox *m_pCheck_Show_Target_Name; 543 wxCheckBox *m_pCheck_Wpl_Aprs, *m_pCheck_ShowAllCPA; 544 wxTextCtrl *m_pText_CPA_Max, *m_pText_CPA_Warn, *m_pText_CPA_WarnT; 545 wxTextCtrl *m_pText_Mark_Lost, *m_pText_Remove_Lost, *m_pText_COG_Predictor; 546 wxTextCtrl *m_pText_Track_Length, *m_pText_Moored_Speed, *m_pText_Scale_Priority; 547 wxTextCtrl *m_pText_ACK_Timeout, *m_pText_Show_Target_Name_Scale; 548 wxTextCtrl *m_pText_RealtPred_Speed; 549 550 // For Display->Configs page... 551 wxScrolledWindow *m_DisplayConfigsPage; 552 553 CanvasConfigSelect *m_sconfigSelect_single; 554 CanvasConfigSelect *m_sconfigSelect_twovertical; 555 556 // For Configuration Template panel 557 wxScrolledWindow *m_scrollWinConfigList; 558 wxStaticText *m_templateTitleText; 559 wxStaticText *m_staticTextLastAppled; 560 wxStaticBoxSizer *m_templateStatusBoxSizer; 561 562 // For the ship page 563 wxFlexGridSizer *realSizes; 564 wxTextCtrl *m_pOSLength, *m_pOSWidth, *m_pOSGPSOffsetX, *m_pOSGPSOffsetY; 565 wxTextCtrl *m_pOSMinSize, *m_pText_ACRadius; 566 wxStaticBoxSizer *dispOptions, *dispWaypointOptions; 567 wxScrolledWindow *itemPanelShip, *itemPanelRoutes; 568 wxBoxSizer *ownShip, *Routes; 569 570 OCPNIconCombo *pWaypointDefaultIconChoice; 571 OCPNIconCombo *pRoutepointDefaultIconChoice; 572 wxCheckBox *pScaMinChckB, *pScaMinOverruleChckB; 573 wxTextCtrl* m_pText_ScaMin; 574 575 // For the font page 576 wxBoxSizer *m_itemBoxSizerFontPanel; 577 wxChoice *m_itemFontElementListBox, *m_itemStyleListBox, *m_itemLangListBox; 578 wxStaticText *m_textSample; 579 bool m_bVisitLang; 580 581 // For "AIS Options" 582 wxComboBox *m_itemAISListBox; 583 584 // For "PlugIns" Panel 585 PluginListPanel *m_pPlugInCtrl; 586 AddPluginPanel* m_AddPluginPanel; 587 CatalogMgrPanel *m_PluginCatalogMgrPanel; 588 wxScrolledWindow *itemPanelPlugins; 589 wxBoxSizer *itemBoxSizerPanelPlugins; 590 wxFlexGridSizer *radarGrid, *waypointradarGrid; 591 wxChoice *pNavAidRadarRingsNumberVisible, *pWaypointRangeRingsNumber; 592 OCPNColourPickerCtrl *m_colourOwnshipRangeRingColour; 593 wxChoice *m_itemRadarRingsUnits, *m_itemWaypointRangeRingsUnits; 594 OCPNColourPickerCtrl *m_colourTrackLineColour;; 595 wxChoice *pTrackPrecision; 596 wxTextCtrl *pNavAidRadarRingsStep, *pWaypointRangeRingsStep; 597 wxCheckBox *pSogCogFromLLCheckBox; 598 wxSpinCtrl *pSogCogFromLLDampInterval; 599 wxTextCtrl *m_pText_TP_Secs, *m_pText_TP_Dist; 600 wxCheckBox *pWayPointPreventDragging, *pConfirmObjectDeletion; 601 wxCheckBox *pEnableZoomToCursor, *pPreserveScale, *pPlayShipsBells; 602 wxCheckBox *pTransparentToolbar; 603 wxCheckBox *pAdvanceRouteWaypointOnArrivalOnly, *pTrackShowIcon; 604 wxCheckBox *pTrackDaily, *pTrackHighlite; 605 wxStaticText* pStatic_CallSign; 606 607 #if wxCHECK_VERSION(2, 9, 0) 608 #if wxUSE_TIMEPICKCTRL 609 #ifdef __WXGTK__ 610 TimeCtrl *pTrackRotateTime; 611 #else 612 wxTimePickerCtrl *pTrackRotateTime; 613 #endif 614 #endif 615 #endif 616 wxRadioButton *pTrackRotateComputerTime, *pTrackRotateUTC, *pTrackRotateLMT; 617 OCPNColourPickerCtrl *m_colourWaypointRangeRingsColour; 618 wxChoice *pSoundDeviceIndex; 619 wxStaticText *stSoundDeviceIndex; 620 621 wxArrayPtrVoid OBJLBoxArray; 622 wxString m_init_chart_dir; 623 wxArrayString *m_pSerialArray; 624 625 ArrayOfCDI m_CurrentDirList, *m_pWorkDirList; 626 MyConfig *m_pConfig; 627 MyFrame *pParent; 628 629 int k_plugins; 630 631 private: 632 void Init(void); 633 void CreatePanel_MMSI(size_t parent, int border_size, int group_item_spacing); 634 void CreatePanel_AIS(size_t parent, int border_size, int group_item_spacing); 635 void CreatePanel_Ownship(size_t parent, int border_size, int group_item_spacing); 636 void CreatePanel_NMEA(size_t parent, int border_size, int group_item_spacing); 637 void CreatePanel_NMEA_Compact(size_t parent, int border_size, int group_item_spacing); 638 void CreatePanel_ChartsLoad(size_t parent, int border_size, int group_item_spacing); 639 void CreatePanel_VectorCharts(size_t parent, int border_size, int group_item_spacing); 640 void CreatePanel_TidesCurrents(size_t parent, int border_size, int group_item_spacing); 641 void CreatePanel_ChartGroups(size_t parent, int border_size, int group_item_spacing); 642 void CreatePanel_Display(size_t parent, int border_size, int group_item_spacing); 643 void CreatePanel_UI(size_t parent, int border_size, int group_item_spacing); 644 void CreatePanel_Units(size_t parent, int border_size, int group_item_spacing); 645 void CreatePanel_Advanced(size_t parent, int border_size, int group_item_spacing); 646 void CreatePanel_Configs(size_t parent, int border_size, int group_item_spacing); 647 void CreatePanel_Routes(size_t parent, int border_size, int group_item_spacing); 648 649 void UpdateTemplateTitleText(); 650 void CheckDeviceAccess(wxString &path); 651 int m_returnChanges; 652 wxListCtrl *tcDataSelected; 653 std::vector<int> marinersStdXref; 654 ChartGroupsUI *groupsPanel; 655 wxImageList *m_topImgList; 656 657 wxScrolledWindow *m_pNMEAForm; 658 void ShowNMEACommon(bool visible); 659 660 void ShowNMEASerial(bool visible); 661 void ShowNMEANet(bool visible); 662 void ShowNMEAGPS(bool visible); 663 void ShowNMEABT(bool visible); 664 665 void SetNMEAFormToSerial(void); 666 void SetNMEAFormToNet(void); 667 void SetNMEAFormToGPS(void); 668 void SetNMEAFormToBT(void); 669 670 void ClearNMEAForm(void); 671 bool m_bNMEAParams_shown; 672 673 void resetMarStdList(bool bsetConfig, bool bsetStd); 674 675 void SetConnectionParams(ConnectionParams *cp); 676 void SetDefaultConnectionParams(void); 677 void SetDSFormRWStates(); 678 void SetDSFormOptionVizStates(); 679 void FillSourceList(); 680 void UpdateSourceList( bool bResort ); 681 bool SortSourceList(void); 682 683 ConnectionParams *CreateConnectionParamsFromSelectedItem(); 684 ConnectionParams *UpdateConnectionParamsFromSelectedItem(ConnectionParams *pConnectionParams); 685 686 int m_screenConfig; 687 688 wxNotebookPage *m_groupsPage; 689 wxFont *dialogFont, *dialogFontPlus; 690 wxFont smallFont; 691 // wxFont *dialogFont; 692 wxSize m_small_button_size; 693 wxTimer m_BTScanTimer; 694 wxArrayString m_BTscan_results; 695 696 bool m_bcompact; 697 int m_fontHeight, m_scrollRate, m_BTscanning, m_btNoChangeCounter; 698 int m_btlastResultCount; 699 bool m_bfontChanged; 700 bool m_bVectorInit; 701 702 wxBoxSizer *m_boxSizerConfigs; 703 wxColour m_panelBackgroundUnselected; 704 wxString m_selectedConfigPanelGUID; 705 wxSize m_colourPickerDefaultSize; 706 707 wxSize m_sliderSize; 708 bool m_bneedNew; 709 710 DECLARE_EVENT_TABLE() 711 }; 712 713 class CanvasConfigSelect: public wxPanel 714 { 715 public: 716 CanvasConfigSelect( wxWindow *parent, options *parentOptions, int id, wxBitmap &bmp, 717 const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize ); 718 ~CanvasConfigSelect(); 719 720 void OnMouseSelected( wxMouseEvent &event ); 721 void SetSelected( bool selected ); 722 void OnPaint( wxPaintEvent &event ); 723 GetSelected()724 bool GetSelected(){ return m_bSelected; } 725 726 private: 727 options *m_parentOptions; 728 bool m_bSelected; 729 wxColour m_boxColour; 730 wxBitmap m_bmpNormal; 731 int m_borderWidth; 732 733 DECLARE_EVENT_TABLE() 734 }; 735 736 class ChartGroupsUI : private Uncopyable, public wxScrolledWindow { 737 public: 738 explicit ChartGroupsUI(wxWindow *parent); 739 ~ChartGroupsUI(void); 740 741 void CreatePanel(size_t parent, int border_size, int group_item_spacing); 742 void CompletePanel(void); SetDBDirs(ArrayOfCDI & array)743 void SetDBDirs(ArrayOfCDI &array) { m_db_dirs = array; } SetGroupArray(ChartGroupArray * pGroupArray)744 void SetGroupArray(ChartGroupArray *pGroupArray) { 745 m_pGroupArray = pGroupArray; 746 } 747 void SetInitialSettings(void); 748 void CompleteInitialSettings(void); 749 void PopulateTrees(void); 750 void PopulateTreeCtrl(wxTreeCtrl *ptc, const wxArrayString &dir_array, 751 const wxColour &col, wxFont *pFont = NULL); 752 void BuildNotebookPages(ChartGroupArray *pGroupArray); 753 void EmptyChartGroupArray(ChartGroupArray *s); 754 void ClearGroupPages(); 755 756 757 void OnNodeExpanded(wxTreeEvent &event); 758 void OnAvailableSelection(wxTreeEvent &event); 759 void OnInsertChartItem(wxCommandEvent &event); 760 void OnRemoveChartItem(wxCommandEvent &event); 761 void OnGroupPageChange(wxNotebookEvent &event); 762 void OnNewGroup(wxCommandEvent &event); 763 void OnDeleteGroup(wxCommandEvent &event); 764 765 ChartGroupArray *CloneChartGroupArray(ChartGroupArray *s); 766 wxTreeCtrl *AddEmptyGroupPage(const wxString &label); 767 768 bool modified, m_UIcomplete, m_settingscomplete, m_treespopulated; 769 770 wxScrolledWindow *m_panel; 771 772 private: 773 int FindGroupBranch(ChartGroup *pGroup, wxTreeCtrl *ptree, wxTreeItemId item, 774 wxString *pbranch_adder); 775 776 wxWindow *pParent; 777 wxFlexGridSizer *groupsSizer; 778 wxButton *m_pAddButton, *m_pRemoveButton, *m_pNewGroupButton; 779 wxButton *m_pDeleteGroupButton; 780 wxGenericDirCtrl *allAvailableCtl, *defaultAllCtl; 781 wxTreeCtrl *m_pActiveChartsTree, *lastSelectedCtl; 782 wxTreeItemId lastDeletedItem; 783 wxNotebook *m_GroupNB; 784 wxFont *iFont; 785 wxFont *dialogFont; 786 787 ArrayOfCDI m_db_dirs; 788 ArrayOfDirCtrls m_DirCtrlArray; 789 ChartGroupArray *m_pGroupArray; 790 791 int m_border_size, m_group_item_spacing, m_GroupSelectedPage; 792 793 wxBoxSizer *m_topSizer; 794 795 DECLARE_EVENT_TABLE() 796 }; 797 798 799 class SentenceListDlg : private Uncopyable, public wxDialog { 800 public: 801 explicit SentenceListDlg(wxWindow *parent, FilterDirection dir, ListType type, 802 const wxArrayString &list); 803 wxString GetSentences(void); 804 805 private: 806 void OnAddClick(wxCommandEvent &event); 807 void OnDeleteClick(wxCommandEvent &event); 808 void OnCLBSelect(wxCommandEvent &event); 809 void OnCheckAllClick(wxCommandEvent &event); 810 void OnClearAllClick(wxCommandEvent &event); 811 812 void Populate(const wxArrayString &list); 813 wxString GetBoxLabel(void) const; 814 815 wxCheckListBox *m_clbSentences; 816 wxButton *m_btnDel; 817 818 ListType m_type; 819 FilterDirection m_dir; 820 wxArrayString m_sentences; 821 }; 822 823 #ifdef ocpnUSE_GL 824 class OpenGLOptionsDlg : private Uncopyable, public wxDialog { 825 public: 826 explicit OpenGLOptionsDlg(wxWindow *parent); 827 bool GetAcceleratedPanning(void) const; 828 bool GetTextureCompression(void) const; 829 bool GetPolygonSmoothing(void) const; 830 bool GetLineSmoothing(void) const; 831 bool GetShowFPS(void) const; 832 bool GetSoftwareGL(void) const; 833 bool GetTextureCompressionCaching(void) const; 834 bool GetRebuildCache(void) const; 835 int GetTextureMemorySize(void) const; 836 837 private: 838 void Populate(void); 839 void OnButtonRebuild(wxCommandEvent &event); 840 void OnButtonClear(wxCommandEvent &event); 841 wxString GetTextureCacheSize(void); 842 843 wxCheckBox *m_cbUseAcceleratedPanning, *m_cbTextureCompression; 844 wxCheckBox *m_cbTextureCompressionCaching, *m_cbShowFPS, *m_cbSoftwareGL, 845 *m_cbPolygonSmoothing, *m_cbLineSmoothing; 846 wxSpinCtrl *m_sTextureDimension, *m_sTextureMemorySize; 847 wxStaticText *m_cacheSize, *m_memorySize; 848 849 bool m_brebuild_cache; 850 851 DECLARE_EVENT_TABLE() 852 }; 853 #endif 854 855 #define ID_MMSI_PROPS_LIST 10073 856 857 enum { 858 mlMMSI = 0, 859 mlTrackMode, 860 mlIgnore, 861 mlMOB, 862 mlVDM, 863 mlFollower, 864 mlShipName 865 }; // MMSIListCtrl Columns; 866 867 class MMSIListCtrl : private Uncopyable, public wxListCtrl { 868 public: 869 explicit MMSIListCtrl(wxWindow *parent, wxWindowID id, const wxPoint &pos, 870 const wxSize &size, long style); 871 ~MMSIListCtrl(void); 872 873 wxString OnGetItemText(long item, long column) const; 874 void OnListItemClick(wxListEvent &event); 875 void OnListItemActivated(wxListEvent &event); 876 void OnListItemRightClick(wxListEvent &event); 877 void PopupMenuHandler(wxCommandEvent &event); 878 879 wxWindow *m_parent; 880 int m_context_item; 881 882 DECLARE_EVENT_TABLE() 883 }; 884 885 #define ID_MMSIEDIT_OK 8191 886 #define ID_MMSIEDIT_CANCEL 8192 887 #define ID_MMSI_CTL 8193 888 #define ID_DEF_MENU_MMSI_EDIT 8194 889 #define ID_DEF_MENU_MMSI_DELETE 8195 890 891 class MMSIEditDialog : private Uncopyable, public wxDialog { 892 public: 893 explicit MMSIEditDialog(MMSIProperties *props, wxWindow *parent, 894 wxWindowID id = wxID_ANY, 895 const wxString &caption = wxEmptyString, 896 const wxPoint &pos = wxDefaultPosition, 897 const wxSize &size = wxDefaultSize, long style = 0); 898 ~MMSIEditDialog(void); 899 900 void SetColorScheme(ColorScheme cs); 901 void CreateControls(void); 902 void OnMMSIEditCancelClick(wxCommandEvent &event); 903 void OnMMSIEditOKClick(wxCommandEvent &event); 904 void OnCtlUpdated(wxCommandEvent &event); 905 906 MMSIProperties *m_props; 907 wxTextCtrl *m_MMSICtl, m_ShipNameCtl; //Has ToDo take away? 908 wxRadioButton *m_rbTypeTrackDefault, *m_rbTypeTrackAlways; 909 wxRadioButton *m_rbTypeTrackNever; 910 wxCheckBox *m_cbTrackPersist, *m_IgnoreButton, *m_MOBButton, *m_VDMButton, *m_FollowerButton; 911 wxButton *m_CancelButton, *m_OKButton; 912 913 private: 914 void Persist(); 915 916 DECLARE_EVENT_TABLE() 917 }; 918 919 class MMSI_Props_Panel : private Uncopyable, public wxPanel { 920 public: 921 explicit MMSI_Props_Panel(wxWindow *parent); 922 ~MMSI_Props_Panel(); 923 924 void OnNewButton(wxCommandEvent &event); 925 void SetColorScheme(ColorScheme cs); 926 void UpdateMMSIList(void); 927 928 MMSIListCtrl *m_pListCtrlMMSI; 929 wxButton *m_pButtonNew; 930 931 private: 932 wxWindow *m_pparent; 933 }; 934 935 class ConfigCreateDialog : private Uncopyable, public wxDialog 936 { 937 public: 938 explicit ConfigCreateDialog(wxWindow *parent, wxWindowID id = wxID_ANY, 939 const wxString &caption = wxEmptyString, 940 const wxPoint &pos = wxDefaultPosition, 941 const wxSize &size = wxDefaultSize, long style = 0); 942 ~ConfigCreateDialog(void); 943 944 void SetColorScheme(ColorScheme cs); 945 void CreateControls(void); 946 void OnConfigEditCancelClick(wxCommandEvent& event); 947 void OnConfigEditOKClick(wxCommandEvent& event); GetCreatedTemplateGUID()948 wxString GetCreatedTemplateGUID(){ return m_createdTemplateGUID; } 949 950 wxTextCtrl *m_TitleCtl, *m_DescriptionCtl; 951 wxButton *m_CancelButton, *m_OKButton; 952 wxString m_createdTemplateGUID; 953 DECLARE_EVENT_TABLE() 954 }; 955 956 #endif 957 // _OPTIONS_H_ 958