OpenCPN Partial API docs
Loading...
Searching...
No Matches
mark_info.h
Go to the documentation of this file.
1/**************************************************************************
2 * Copyright (C) 2010 by David S. Register *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, see <https://www.gnu.org/licenses/>. *
16 **************************************************************************/
17
24#ifndef _MARKINFO_H_
25#define _MARKINFO_H_
26
27#include <memory>
28
32#include <wx/bmpcbox.h>
33#include <wx/choice.h>
34#include <wx/clrpicker.h>
35#include <wx/combobox.h>
36#include <wx/datectrl.h>
37#include <wx/dateevt.h>
38#include <wx/dialog.h>
39#include <wx/filesys.h>
40#include <wx/gbsizer.h>
41#include <wx/htmllbox.h>
42#include <wx/hyperlink.h> // toh, 2009.02.08
43#include <wx/listctrl.h>
44#include <wx/list.h>
45#include <wx/notebook.h>
46#include <wx/odcombo.h>
47#include <wx/spinctrl.h>
48#include <wx/tglbtn.h>
49#include <wx/timectrl.h>
50
51#include "libgui/field_text.h"
52#include "libgui/form_grid.h"
53
54#include "model/hyperlink.h"
55#include "model/route.h"
56
57#include "link_prop_dlg.h"
58#include "route_validator.h"
59#include "tcmgr.h"
60
61#ifdef __WXGTK__
62// wxTimePickerCtrl is completely broken in Gnome based desktop environments as
63// of wxGTK 3.0
64#include "time_textbox.h"
65#endif
66
67class MarkInfoDlg; // forward
70#ifdef __WXOSX__
71#define DIALOG_PARENT wxFrame
72#else
73#define DIALOG_PARENT wxDialog
74#endif
75
76#define ID_WPT_RANGERINGS_NO 7507
77#define ID_RCLK_MENU_COPY_TEXT 7013
78#define ID_RCLK_MENU_DELETE 7015
79#define ID_RCLK_MENU_COPY 7016
80#define ID_RCLK_MENU_COPY_LL 7017
81#define ID_RCLK_MENU_PASTE 7018
82#define ID_RCLK_MENU_PASTE_LL 7019
83#define ID_RCLK_MENU_DELETE_LINK 7023
84#define ID_RCLK_MENU_EDIT_LINK 7024
85#define ID_RCLK_MENU_ADD_LINK 7025
86
92
93#define ID_MARKPROP 8000
94#define SYMBOL_MARKPROP_STYLE \
95 wxCAPTION | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCLOSE_BOX
96#define SYMBOL_MARKPROP_TITLE _("Waypoint Properties")
97#define SYMBOL_MARKPROP_IDNAME ID_MARKPROP
98#define SYMBOL_MARKPROP_SIZE wxSize(200, 300)
99#define SYMBOL_MARKPROP_POSITION wxDefaultPosition
100#define ID_MARKPROP_CANCEL 8001
101#define ID_MARKPROP_OK 8002
102#define ID_ICONCTRL 8003
103#define ID_LATCTRL 8004
104#define ID_LONCTRL 8005
105#define ID_SHOWNAMECHECKBOXBASIC 8006
106#define ID_BITMAPCOMBOCTRL 8007
107#define ID_NAMECTRL 8008
108#define wxID_HTMLLIST 8009
109#define ID_DESCR_CTR_DESC 8010
110#define ID_DESCR_CTR_BASIC 8011
111#define ID_BTN_DESC_BASIC 8012
112#define ID_ETA_DATEPICKERCTRL 8013
113#define ID_ETA_TIMEPICKERCTRL 8014
114#define ID_SHOWNAMECHECKBOX_EXT 8015
115#define ID_CHECKBOX_VIS_EXT 8016
116#define ID_CHECKBOX_SCAMIN_VIS 8017
117#define ID_SET_DEFAULT_ICON 8018
118#define ID_SET_DEFAULT_RANGERINGS 8019
119#define ID_SET_DEFAULT_ARRIVALRADIUS 8020
120#define ID_SET_DEFAULT_SCAMIN 8021
121#define ID_SET_DEFAULT_NAMEVIS 8022
122#define ID_SET_DEFAULT_ALL 8023
123#define ID_BTN_LINK_MENU 8024
124#define ID_DEFAULT 8025
125#define ID_BTN_SHOW_TIDES 8026
126
128
133#ifndef wxCLOSE_BOX
134#define wxCLOSE_BOX 0x1000
135#endif
136#ifndef wxFIXED_MINSIZE
137#define wxFIXED_MINSIZE 0
138#endif
139
140class OCPNIconCombo; // forward
141class SaveDefaultsDialog; // forward
142
143WX_DECLARE_OBJARRAY(wxBitmap, ArrayOfBitmaps);
144
150class OCPNIconCombo : public wxOwnerDrawnComboBox {
151public:
152 OCPNIconCombo(wxWindow* parent, wxWindowID id, const wxString& value = "",
153 const wxPoint& pos = wxDefaultPosition,
154 const wxSize& size = wxDefaultSize, int n = 0,
155 const wxString choices[] = NULL, long style = 0,
156 const wxValidator& validator = wxDefaultValidator,
157 const wxString& name = "OCPNIconCombo");
158
160
161 void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const;
162 wxCoord OnMeasureItem(size_t item) const;
163 wxCoord OnMeasureItemWidth(size_t item) const;
164
165 int Append(const wxString& item, wxBitmap bmp);
166 void Clear();
167
168private:
169 int itemHeight;
170 ArrayOfBitmaps bmpArray;
171};
172
173// LatLonTextCtrl Specification
174// We need a derived wxText control for lat/lon input in the MarkProp dialog
175// Specifically, we need to catch loss-of-focus events and signal the parent
176// dialog to update the mark's lat/lon dynamically.
177
178// DECLARE_EVENT_TYPE(EVT_LLCHANGE, -1)
179extern /*expdecl*/ const wxEventType EVT_LLCHANGE;
180
181class LatLonTextCtrl : public wxTextCtrl {
182 DECLARE_EVENT_TABLE()
183
184public:
185 LatLonTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value = "",
186 const wxPoint& pos = wxDefaultPosition,
187 const wxSize& size = wxDefaultSize, long style = 0,
188 const wxValidator& validator = wxDefaultValidator,
189 const wxString& name = wxTextCtrlNameStr);
190
191 void OnKillFocus(wxFocusEvent& event);
192
193 wxEvtHandler* m_pParentEventHandler;
194};
195
202class MarkInfoDlg : public DIALOG_PARENT {
203 DECLARE_EVENT_TABLE()
204 friend class SaveDefaultsDialog;
205
206private:
227 RoutePoint* m_pRoutePoint;
228 static bool instanceFlag;
229 int i_htmlList_item;
230
231 bool m_bShowName_save;
232 wxString m_Name_save;
233 wxString m_IconName_save;
234 int m_current_icon_Index;
235 double m_lat_save;
236 double m_lon_save;
237 wxString m_Description_save;
238 HyperlinkList* m_pMyLinkList;
239 bool m_bIsVisible_save;
240 bool m_bUseScaMin_save;
241 int m_iScaminVal_save;
242 int m_iScamaxVal_save;
243 bool m_bShowWaypointRangeRings_save;
244 int m_iWaypointRangeRingsNumber_save;
245 float m_fWaypointRangeRingsStep_save;
246 wxColour m_wxcWaypointRangeRingsColour_save;
247 double m_WaypointArrivalRadius_save;
248 float m_PlannedSpeed_save;
249 wxDateTime m_ArrETA_save;
250 std::map<double, const IDX_entry*> m_tss;
251 wxString m_lasttspos;
252
253protected:
254 OCPNIconCombo* m_bcomboBoxIcon;
255 wxBoxSizer* bSizerBasicProperties;
256 wxBoxSizer* bSizerLinks;
257 wxButton* m_buttonOkay;
258 wxButton* m_buttonExtDescription;
259 wxButton* m_buttonLinksMenu;
260 wxBitmapButton* m_buttonShowTides;
261 wxButton* DefaultsBtn;
262 wxCheckBox* m_checkBoxScaMin;
263 wxCheckBox* m_checkBoxShowName;
264 wxCheckBox* m_checkBoxShowNameExt;
265 wxCheckBox* m_checkBoxVisible;
266 wxChoice* m_choiceWaypointRangeRingsUnits;
267 wxColourPickerCtrl* m_PickColor;
285 wxCheckBox* m_cbEtdPresent;
286 wxBoxSizer* bMainSizer;
287 FormGrid* fSizerBasicProperties;
288 wxFlexGridSizer* waypointradarGrid;
289 wxFlexGridSizer* waypointrrSelect;
290 wxGridBagSizer* bGB_SizerProperties;
291 wxFlexGridSizer* gbSizerInnerProperties;
292 wxNotebook* m_notebookProperties;
293 wxObject* m_contextObject;
294 wxScrolledWindow* m_panelBasicProperties;
295 wxPanel* m_panelDescription;
296 wxScrolledWindow* m_panelExtendedProperties;
297 wxSimpleHtmlListBox* m_htmlList;
298 wxSize m_defaultClientSize;
299 wxChoice* m_ChoiceWaypointRangeRingsNumber;
300 wxStaticBitmap* m_bitmapIcon;
301 wxStaticBoxSizer* sbS_Description;
302 wxStaticBoxSizer* sbSizerExtProperties;
303 wxStaticBoxSizer* sbSizerLinks;
304 wxStaticBoxSizer* sbSizerBasicProperties;
305 wxStaticBoxSizer* sbRangeRingsExtProperties;
306 wxStaticBoxSizer* sbSizerDescription;
307 wxStaticText* m_staticTextArrivalRadius;
308 wxStaticText* m_staticTextDescription;
309 wxStaticText* m_staticTextEditEnabled;
310 wxStaticText* m_staticTextGpx;
311 wxStaticText* m_staticTextGuid;
312 wxStaticText* m_staticTextTideStation;
313 wxStaticText* m_staticTextIcon;
314 wxStaticText* m_staticTextLatitude;
315 wxStaticText* m_staticTextLayer;
316 wxStaticText* m_staticTextLongitude;
317 wxStaticText* m_staticTextName;
318 wxStaticText* m_staticTextScaMin;
319 wxStaticText* m_staticTextScaMax;
320 wxStaticText* m_staticTextShowNameExt;
321 wxStaticText* m_staticTextRR1;
322 wxStaticText* m_staticTextRR2;
323 wxChoice* m_RangeRingUnits;
324 wxStaticText* m_staticTextRR4;
325 wxStaticText* m_staticTextArrivalUnits;
326 wxStaticText* m_staticTextPlSpeed;
328 wxStaticText* m_staticTextEtd;
329 wxStaticText* m_staticTextPlSpeedUnits;
330 wxStdDialogButtonSizer* m_sdbSizerButtons;
331 wxTextCtrl* m_textArrivalRadius;
332 wxTextCtrl* m_textCtrlExtDescription;
333 wxTextCtrl* m_textCtrlGpx;
334 wxTextCtrl* m_textCtrlGuid;
335 wxScrolledWindow* m_scrolledWindowLinks;
336 wxHyperlinkCtrl* m_hyperlink17;
337 wxMenu* m_menuLink;
338 wxToggleButton* m_toggleBtnEdit;
339 wxButton* m_buttonAddLink;
340
341#ifdef __ANDROID__
342 wxChoice* m_comboBoxTideStation;
343#else
344 wxComboBox* m_comboBoxTideStation;
345#endif
346 wxTextCtrl* m_textDescription;
347 wxTextCtrl* m_textLatitude;
348 wxTextCtrl* m_textLongitude;
349 TextField* m_textName;
350 std::unique_ptr<RoutePointNameValidator> m_name_validator;
351 wxTextCtrl* m_textScaMin;
352 wxTextCtrl* m_textScaMax;
353 wxTextCtrl* m_textWaypointRangeRingsStep;
362 wxTextCtrl* m_textCtrlPlSpeed;
363 wxBitmap _img_MUI_settings_svg;
364 wxButton* m_sdbSizerButtonsCancel;
365 wxButton* m_sdbSizerButtonsOK;
366
374 wxDatePickerCtrl* m_EtdDatePickerCtrl;
375#ifdef __WXGTK__
377#else
385 wxTimePickerCtrl* m_EtdTimePickerCtrl;
386#endif
387 wxArrayString m_choiceTideChoices;
388 wxBitmap m_bmTide;
389 int m_sizeMetric;
390 wxHyperlinkCtrl* m_pEditedLink;
391
392 void initialize_images();
393 void OnBitmapCombClick(wxCommandEvent& event);
394 void OnPositionCtlUpdated(wxCommandEvent& event);
395 void OnFocusEvent(wxFocusEvent& event);
396 void OnExtDescriptionClick(wxCommandEvent& event);
397 void OnDescChangedExt(wxCommandEvent& event);
398 void OnDescChangedBasic(wxCommandEvent& event);
399 void OnMarkInfoCancelClick(wxCommandEvent& event);
400 void OnMarkInfoOKClick(wxCommandEvent& event);
401 void OnShowWaypointNameSelectBasic(wxCommandEvent& event);
402 void OnShowWaypointNameSelectExt(wxCommandEvent& event);
403 void OnSelectScaMinExt(wxCommandEvent& event);
404 void OnWptRangeRingsNoChange(wxCommandEvent& event);
405 void OnCopyPasteLatLon(wxCommandEvent& event);
406 void OnWaypointRangeRingSelect(wxCommandEvent& event);
407 void m_htmlListContextMenuBtn(wxCommandEvent& event);
408 void m_htmlListContextMenu(wxMouseEvent& event);
409 void OnRightClickLatLon(wxCommandEvent& event);
410 void OnHtmlLinkClicked(wxHtmlLinkEvent& event);
411 void OnHyperLinkClick(wxHyperlinkEvent& event);
412 void OnLayoutResize(wxCommandEvent& event);
413
414 void On_html_link_popupmenu_Click(wxCommandEvent& event);
415 void DefautlBtnClicked(wxCommandEvent& event);
416 void OnNotebookPageChanged(wxNotebookEvent& event);
417 void OnTimeChanged(wxDateEvent& event) { m_cbEtdPresent->SetValue(true); }
418 void OnTideStationCombobox(wxCommandEvent& event);
419 void OnClose(wxCloseEvent& event);
420 void ShowTidesBtnClicked(wxCommandEvent& event);
421 void OnAddLink(wxCommandEvent& event);
422
423public:
424 MarkInfoDlg(wxWindow* parent, wxWindowID id = wxID_ANY,
425 const wxString& title = _("Waypoint Properties"),
426 const wxPoint& pos = wxDefaultPosition,
427 const wxSize& size = wxSize(-1, -1),
428 long style = FRAME_WITH_LINKS_STYLE);
429 ~MarkInfoDlg();
430 void Create();
431 void InitialFocus();
432 void RecalculateSize();
433 RoutePoint* GetRoutePoint() { return m_pRoutePoint; }
434 void SetColorScheme(ColorScheme cs);
435 void SetRoutePoint(RoutePoint* pRP);
436 void ClearData();
437 void SetBulkEdit(bool bBulkEdit);
438 void UpdateHtmlList();
439 void SetDialogTitle(const wxString& title) { SetTitle(title); }
440 bool UpdateProperties(bool positionOnly = false);
441 void ValidateMark();
442 bool SaveChanges();
443 void OnActivate(wxActivateEvent& event);
444
445 wxSimpleHtmlListBox* GetSimpleBox() {
446 return dynamic_cast<wxSimpleHtmlListBox*>(m_htmlList);
447 }
448 void OnHtmlCellClicked(wxHtmlCellEvent& event);
449
450 SaveDefaultsDialog* m_SaveDefaultDlg;
451};
452
458class SaveDefaultsDialog : public wxDialog {
459 friend class MarkInfoDlg;
460
461protected:
462 //(*Declarations(SaveDefaultsDialog)
463 wxCheckBox* RangRingsCB;
464 wxCheckBox* ArrivalRCB;
465 wxCheckBox* IconCB;
466 wxCheckBox* NameCB;
467 wxCheckBox* ScaleCB;
468 wxStaticText* stRR;
469 wxStaticText* stArrivalR;
470 wxStaticText* stIcon;
471 wxStaticText* stName;
472 wxStaticText* stScale;
473 wxStaticText* StaticText1;
474 //*)
475
476public:
478};
479
480#endif // _MARKINFO_H_
Grid layout with 2 columns for form labels and fields.
Definition form_grid.h:28
Dialog for displaying and editing waypoint properties.
Definition mark_info.h:202
wxDatePickerCtrl * m_EtdDatePickerCtrl
Date picker control for setting the Estimated Time of Departure (ETD).
Definition mark_info.h:374
wxStaticText * m_staticTextEtd
Label for the Estimated Time of Departure field.
Definition mark_info.h:328
wxCheckBox * m_cbEtdPresent
Checkbox control that enables/disables manual ETD setting for a waypoint.
Definition mark_info.h:285
wxTextCtrl * m_textCtrlPlSpeed
Text control for waypoint planned speed.
Definition mark_info.h:362
wxTimePickerCtrl * m_EtdTimePickerCtrl
Time picker control for setting the Estimated Time of Departure (ETD).
Definition mark_info.h:385
Custom combobox for selecting waypoint icons.
Definition mark_info.h:150
Represents a waypoint or mark within the navigation system.
Definition route_point.h:71
Dialog for saving default waypoint properties.
Definition mark_info.h:458
Text field with validator and error handler.
Definition field_text.h:38
Text field classes and text validator base classes.
MarkInfoDlg * g_pMarkInfoDialog
global instance
Definition mark_info.cpp:77
const wxEventType EVT_LLCHANGE
Route abstraction.
Route dialog validation checks.
Tide and Current Manager @TODO Add original author copyright.
Time textbox to replace broken wxTimePickerCtrl on wxGTK.