OpenCPN Partial API docs
Loading...
Searching...
No Matches
MarkInfo.h
1/***************************************************************************
2 *
3 * Project: OpenCPN
4 * Purpose: Mark Properties Support
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 _MARKINFO_H_
27#define _MARKINFO_H_
28
29#include <memory>
30
34#include <wx/listctrl.h>
35#include "ocpn_frame.h" //FIXME (dave ) // for ColorScheme
36#include <wx/hyperlink.h> // toh, 2009.02.08
37#include <wx/choice.h>
38#include <wx/tglbtn.h>
39#include <wx/bmpcbox.h>
40#include <wx/notebook.h>
41#include <wx/filesys.h>
42#include <wx/clrpicker.h>
43#include <wx/odcombo.h>
44#include <wx/gbsizer.h>
45#include <wx/spinctrl.h>
46#include "LinkPropDlg.h"
47#include "model/hyperlink.h"
48#include <wx/htmllbox.h>
49#include <wx/datectrl.h>
50#include <wx/timectrl.h>
51#include <wx/dateevt.h>
52#include <wx/list.h>
53#include <wx/combobox.h>
54
55#include <wx/dialog.h>
56#include "field_text.h"
57#include "form_grid.h"
58
59#include "route_validator.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
67#ifdef __WXOSX__
68#define DIALOG_PARENT wxFrame
69#else
70#define DIALOG_PARENT wxDialog
71#endif
72
73#define ID_WPT_RANGERINGS_NO 7507
74#define ID_RCLK_MENU_COPY_TEXT 7013
75#define ID_RCLK_MENU_DELETE 7015
76#define ID_RCLK_MENU_COPY 7016
77#define ID_RCLK_MENU_COPY_LL 7017
78#define ID_RCLK_MENU_PASTE 7018
79#define ID_RCLK_MENU_PASTE_LL 7019
80#define ID_RCLK_MENU_DELETE_LINK 7023
81#define ID_RCLK_MENU_EDIT_LINK 7024
82#define ID_RCLK_MENU_ADD_LINK 7025
83
84#include "tcmgr.h"
85#include "OCPNPlatform.h"
86
91class wxListCtrl;
92class Route;
93class RoutePoint;
94class HyperlinkList;
95class OCPNIconCombo;
96
102
103#define ID_MARKPROP 8000
104#define SYMBOL_MARKPROP_STYLE \
105 wxCAPTION | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCLOSE_BOX
106#define SYMBOL_MARKPROP_TITLE _("Waypoint Properties")
107#define SYMBOL_MARKPROP_IDNAME ID_MARKPROP
108#define SYMBOL_MARKPROP_SIZE wxSize(200, 300)
109#define SYMBOL_MARKPROP_POSITION wxDefaultPosition
110#define ID_MARKPROP_CANCEL 8001
111#define ID_MARKPROP_OK 8002
112#define ID_ICONCTRL 8003
113#define ID_LATCTRL 8004
114#define ID_LONCTRL 8005
115#define ID_SHOWNAMECHECKBOXBASIC 8006
116#define ID_BITMAPCOMBOCTRL 8007
117#define ID_NAMECTRL 8008
118#define wxID_HTMLLIST 8009
119#define ID_DESCR_CTR_DESC 8010
120#define ID_DESCR_CTR_BASIC 8011
121#define ID_BTN_DESC_BASIC 8012
122#define ID_ETA_DATEPICKERCTRL 8013
123#define ID_ETA_TIMEPICKERCTRL 8014
124#define ID_SHOWNAMECHECKBOX_EXT 8015
125#define ID_CHECKBOX_VIS_EXT 8016
126#define ID_CHECKBOX_SCAMIN_VIS 8017
127#define ID_SET_DEFAULT_ICON 8018
128#define ID_SET_DEFAULT_RANGERINGS 8019
129#define ID_SET_DEFAULT_ARRIVALRADIUS 8020
130#define ID_SET_DEFAULT_SCAMIN 8021
131#define ID_SET_DEFAULT_NAMEVIS 8022
132#define ID_SET_DEFAULT_ALL 8023
133#define ID_BTN_LINK_MENU 8024
134#define ID_DEFAULT 8025
135#define ID_BTN_SHOW_TIDES 8026
136
138
143#ifndef wxCLOSE_BOX
144#define wxCLOSE_BOX 0x1000
145#endif
146#ifndef wxFIXED_MINSIZE
147#define wxFIXED_MINSIZE 0
148#endif
149
150WX_DECLARE_OBJARRAY(wxBitmap, ArrayOfBitmaps);
151
153
159class OCPNIconCombo : public wxOwnerDrawnComboBox {
160public:
161 OCPNIconCombo(wxWindow* parent, wxWindowID id, const wxString& value = _T(""),
162 const wxPoint& pos = wxDefaultPosition,
163 const wxSize& size = wxDefaultSize, int n = 0,
164 const wxString choices[] = NULL, long style = 0,
165 const wxValidator& validator = wxDefaultValidator,
166 const wxString& name = _T("OCPNIconCombo"));
167
169
170 void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const;
171 wxCoord OnMeasureItem(size_t item) const;
172 wxCoord OnMeasureItemWidth(size_t item) const;
173
174 int Append(const wxString& item, wxBitmap bmp);
175 void Clear(void);
176
177private:
178 int itemHeight;
179 ArrayOfBitmaps bmpArray;
180};
181
182// LatLonTextCtrl Specification
183// We need a derived wxText control for lat/lon input in the MarkProp dialog
184// Specifically, we need to catch loss-of-focus events and signal the parent
185// dialog to update the mark's lat/lon dynamically.
186
187// DECLARE_EVENT_TYPE(EVT_LLCHANGE, -1)
188extern /*expdecl*/ const wxEventType EVT_LLCHANGE;
189
190class LatLonTextCtrl : public wxTextCtrl {
191 DECLARE_EVENT_TABLE()
192
193public:
194 LatLonTextCtrl(wxWindow* parent, wxWindowID id,
195 const wxString& value = _T(""),
196 const wxPoint& pos = wxDefaultPosition,
197 const wxSize& size = wxDefaultSize, long style = 0,
198 const wxValidator& validator = wxDefaultValidator,
199 const wxString& name = wxTextCtrlNameStr);
200
201 void OnKillFocus(wxFocusEvent& event);
202
203 wxEvtHandler* m_pParentEventHandler;
204};
205
212class MarkInfoDlg : public DIALOG_PARENT {
213 DECLARE_EVENT_TABLE()
214 friend class SaveDefaultsDialog;
215
216private:
217 RoutePoint* m_pRoutePoint;
218 static bool instanceFlag;
219 int i_htmlList_item;
220
221 bool m_bShowName_save;
222 wxString m_Name_save;
223 wxString m_IconName_save;
224 int m_current_icon_Index;
225 double m_lat_save;
226 double m_lon_save;
227 wxString m_Description_save;
228 HyperlinkList* m_pMyLinkList;
229 bool m_bIsVisible_save;
230 bool m_bUseScaMin_save;
231 int m_iScaminVal_save;
232 bool m_bShowWaypointRangeRings_save;
233 int m_iWaypointRangeRingsNumber_save;
234 float m_fWaypointRangeRingsStep_save;
235 wxColour m_wxcWaypointRangeRingsColour_save;
236 double m_WaypointArrivalRadius_save;
237 float m_PlannedSpeed_save;
238 wxDateTime m_ArrETA_save;
239 std::map<double, const IDX_entry*> m_tss;
240 wxString m_lasttspos;
241
242protected:
243 OCPNIconCombo* m_bcomboBoxIcon;
244 wxBoxSizer* bSizerBasicProperties;
245 wxBoxSizer* bSizerLinks;
246 wxButton* m_buttonOkay;
247 wxButton* m_buttonExtDescription;
248 wxButton* m_buttonLinksMenu;
249 wxBitmapButton* m_buttonShowTides;
250 wxButton* DefaultsBtn;
251 wxCheckBox* m_checkBoxScaMin;
252 wxCheckBox* m_checkBoxShowName;
253 wxCheckBox* m_checkBoxShowNameExt;
254 wxCheckBox* m_checkBoxVisible;
255 wxChoice* m_choiceWaypointRangeRingsUnits;
256 wxColourPickerCtrl* m_PickColor;
257 wxCheckBox* m_cbEtaPresent;
258 wxBoxSizer* bMainSizer;
259 FormGrid* fSizerBasicProperties;
260 wxFlexGridSizer* waypointradarGrid;
261 wxFlexGridSizer* waypointrrSelect;
262 wxGridBagSizer* bGB_SizerProperties;
263 wxFlexGridSizer* gbSizerInnerProperties;
264 wxNotebook* m_notebookProperties;
265 wxObject* m_contextObject;
266 wxScrolledWindow* m_panelBasicProperties;
267 wxPanel* m_panelDescription;
268 wxScrolledWindow* m_panelExtendedProperties;
269 wxSimpleHtmlListBox* m_htmlList;
270 wxSize m_defaultClientSize;
271 wxChoice* m_ChoiceWaypointRangeRingsNumber;
272 wxStaticBitmap* m_bitmapIcon;
273 wxStaticBoxSizer* sbS_Description;
274 wxStaticBoxSizer* sbSizerExtProperties;
275 wxStaticBoxSizer* sbSizerLinks;
276 wxStaticBoxSizer* sbSizerBasicProperties;
277 wxStaticBoxSizer* sbRangeRingsExtProperties;
278 wxStaticBoxSizer* sbSizerDescription;
279 wxStaticText* m_staticTextArrivalRadius;
280 wxStaticText* m_staticTextDescription;
281 wxStaticText* m_staticTextEditEnabled;
282 wxStaticText* m_staticTextGpx;
283 wxStaticText* m_staticTextGuid;
284 wxStaticText* m_staticTextTideStation;
285 wxStaticText* m_staticTextIcon;
286 wxStaticText* m_staticTextLatitude;
287 wxStaticText* m_staticTextLayer;
288 wxStaticText* m_staticTextLongitude;
289 wxStaticText* m_staticTextName;
290 wxStaticText* m_staticTextScaMin;
291 wxStaticText* m_staticTextShowNameExt;
292 wxStaticText* m_staticTextRR1;
293 wxStaticText* m_staticTextRR2;
294 wxChoice* m_RangeRingUnits;
295 wxStaticText* m_staticTextRR4;
296 wxStaticText* m_staticTextArrivalUnits;
297 wxStaticText* m_staticTextPlSpeed;
298 wxStaticText* m_staticTextEta;
299 wxStaticText* m_staticTextPlSpeedUnits;
300 wxStdDialogButtonSizer* m_sdbSizerButtons;
301 wxTextCtrl* m_textArrivalRadius;
302 wxTextCtrl* m_textCtrlExtDescription;
303 wxTextCtrl* m_textCtrlGpx;
304 wxTextCtrl* m_textCtrlGuid;
305 wxScrolledWindow* m_scrolledWindowLinks;
306 wxHyperlinkCtrl* m_hyperlink17;
307 wxMenu* m_menuLink;
308 wxToggleButton* m_toggleBtnEdit;
309 wxButton* m_buttonAddLink;
310
311#ifdef __OCPN__ANDROID__
312 wxChoice* m_comboBoxTideStation;
313#else
314 wxComboBox* m_comboBoxTideStation;
315#endif
316 wxTextCtrl* m_textDescription;
317 wxTextCtrl* m_textLatitude;
318 wxTextCtrl* m_textLongitude;
319 TextField* m_textName;
320 std::unique_ptr<RoutePointNameValidator> m_name_validator;
321 wxTextCtrl* m_textScaMin;
322 wxTextCtrl* m_textWaypointRangeRingsStep;
323 wxTextCtrl* m_textCtrlPlSpeed;
324 wxBitmap _img_MUI_settings_svg;
325 wxButton* m_sdbSizerButtonsCancel;
326 wxButton* m_sdbSizerButtonsOK;
327
328 wxDatePickerCtrl* m_EtaDatePickerCtrl;
329#ifdef __WXGTK__
330 TimeCtrl* m_EtaTimePickerCtrl;
331#else
332 wxTimePickerCtrl* m_EtaTimePickerCtrl;
333#endif
334 wxArrayString m_choiceTideChoices;
335 wxBitmap m_bmTide;
336 int m_sizeMetric;
337 wxHyperlinkCtrl* m_pEditedLink;
338
339 void initialize_images(void);
340 void OnBitmapCombClick(wxCommandEvent& event);
341 void OnPositionCtlUpdated(wxCommandEvent& event);
342 void OnFocusEvent(wxFocusEvent& event);
343 void OnExtDescriptionClick(wxCommandEvent& event);
344 void OnDescChangedExt(wxCommandEvent& event);
345 void OnDescChangedBasic(wxCommandEvent& event);
346 void OnMarkInfoCancelClick(wxCommandEvent& event);
347 void OnMarkInfoOKClick(wxCommandEvent& event);
348 void OnShowWaypointNameSelectBasic(wxCommandEvent& event);
349 void OnShowWaypointNameSelectExt(wxCommandEvent& event);
350 void OnSelectScaMinExt(wxCommandEvent& event);
351 void OnWptRangeRingsNoChange(wxCommandEvent& event);
352 void OnCopyPasteLatLon(wxCommandEvent& event);
353 void OnWaypointRangeRingSelect(wxCommandEvent& event);
354 void m_htmlListContextMenuBtn(wxCommandEvent& event);
355 void m_htmlListContextMenu(wxMouseEvent& event);
356 void OnRightClickLatLon(wxCommandEvent& event);
357 void OnHtmlLinkClicked(wxHtmlLinkEvent& event);
358 void OnHyperLinkClick(wxHyperlinkEvent& event);
359 void OnLayoutResize(wxCommandEvent& event);
360
361 void On_html_link_popupmenu_Click(wxCommandEvent& event);
362 void DefautlBtnClicked(wxCommandEvent& event);
363 void OnNotebookPageChanged(wxNotebookEvent& event);
364 void OnTimeChanged(wxDateEvent& event) { m_cbEtaPresent->SetValue(true); }
365 void OnTideStationCombobox(wxCommandEvent& event);
366 void OnClose(wxCloseEvent& event);
367 void ShowTidesBtnClicked(wxCommandEvent& event);
368 void OnAddLink(wxCommandEvent& event);
369
370public:
371 MarkInfoDlg(wxWindow* parent, wxWindowID id = wxID_ANY,
372 const wxString& title = _("Waypoint Properties"),
373 const wxPoint& pos = wxDefaultPosition,
374 const wxSize& size = wxSize(-1, -1),
375 long style = FRAME_WITH_LINKS_STYLE);
376 ~MarkInfoDlg();
377 void Create();
378 void InitialFocus(void);
379 void RecalculateSize(void);
380 RoutePoint* GetRoutePoint(void) { return m_pRoutePoint; }
381 void SetColorScheme(ColorScheme cs);
382 void SetRoutePoint(RoutePoint* pRP);
383 void ClearData();
384 void SetBulkEdit(bool bBulkEdit);
385 void UpdateHtmlList();
386 void SetDialogTitle(const wxString& title) { SetTitle(title); }
387 bool UpdateProperties(bool positionOnly = false);
388 void ValidateMark(void);
389 bool SaveChanges();
390 void OnActivate(wxActivateEvent& event);
391
392 wxSimpleHtmlListBox* GetSimpleBox() {
393 return dynamic_cast<wxSimpleHtmlListBox*>(m_htmlList);
394 }
395 void OnHtmlCellClicked(wxHtmlCellEvent& event);
396
397 SaveDefaultsDialog* m_SaveDefaultDlg;
398};
399
405class SaveDefaultsDialog : public wxDialog {
406 friend class MarkInfoDlg;
407
408protected:
409 //(*Declarations(SaveDefaultsDialog)
410 wxCheckBox* RangRingsCB;
411 wxCheckBox* ArrivalRCB;
412 wxCheckBox* IconCB;
413 wxCheckBox* NameCB;
414 wxCheckBox* ScaleCB;
415 wxStaticText* stRR;
416 wxStaticText* stArrivalR;
417 wxStaticText* stIcon;
418 wxStaticText* stName;
419 wxStaticText* stScale;
420 wxStaticText* StaticText1;
421 //*)
422
423public:
425};
426
427#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 MarkInfo.h:212
Custom combobox for selecting waypoint icons.
Definition MarkInfo.h:159
Definition route.h:75
Dialog for saving default waypoint properties.
Definition MarkInfo.h:405
Text field with validator and error handler.
Definition field_text.h:38
Text field classes and text validator base classes.
Route validators for dialog validation.