OpenCPN Partial API docs
Loading...
Searching...
No Matches
route_prop_dlg.cpp
1
2// C++ code generated with wxFormBuilder (version Oct 26 2018)
3// http://www.wxformbuilder.org/
4//
5// PLEASE DO *NOT* EDIT THIS FILE! //did that. despite warning.
7
8#include <wx/button.h>
9#include <wx/choice.h>
10#include <wx/dataview.h>
11#include <wx/datectrl.h>
12#include <wx/datetime.h>
13#include <wx/font.h>
14#include <wx/gdicmn.h>
15#include <wx/menuitem.h>
16#include <wx/notebook.h>
17#include <wx/scrolwin.h>
18#include <wx/sizer.h>
19#include <wx/stattext.h>
20#include <wx/string.h>
21#include <wx/textctrl.h>
22#include <wx/timectrl.h>
23#include <wx/window.h>
24
25#include "model/nav_object_database.h"
26#include "model/ocpn_types.h"
27
28#include "gui_lib.h"
29#include "model/routeman.h"
30#include "routemanagerdialog.h"
31#include "routeman_gui.h"
32#include "route_prop_dlg.h"
33#include "route_prop_dlg_impl.h"
34#include "styles.h"
35
36#if wxCHECK_VERSION(3, 1, 2)
37#define CELL_EDITABLE wxDATAVIEW_CELL_EDITABLE
38#else
39#define CELL_EDITABLE wxDATAVIEW_CELL_INERT
40#endif
41
43BEGIN_EVENT_TABLE(RoutePropDlg, DIALOG_PARENT)
44#ifdef __ANDROID__
45EVT_CHAR(RoutePropDlg::OnKeyChar)
46#endif
47END_EVENT_TABLE()
48
49RoutePropDlgCtx RoutePropDlg::GetDlgCtx() {
50 struct RoutePropDlgCtx ctx;
51 ctx.set_route_and_update = [&](Route* r) {
52 if (pRoutePropDialog && (pRoutePropDialog->IsShown())) {
53 pRoutePropDialog->SetRouteAndUpdate(r, true);
54 }
55 };
56 ctx.set_enroute_point = [&](Route* r, RoutePoint* rt) {
57 if (pRoutePropDialog && pRoutePropDialog->IsShown()) {
58 if (pRoutePropDialog->GetRoute() == r) {
59 pRoutePropDialog->SetEnroutePoint(rt);
60 }
61 }
62 };
63 ctx.hide = [&](Route* r) {
64 if (pRoutePropDialog && (pRoutePropDialog->IsShown()) &&
65 (r == pRoutePropDialog->GetRoute())) {
66 pRoutePropDialog->Hide();
67 }
68 };
69 auto RouteMgrDlgUpdateListCtrl = [&]() {
70 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
71 pRouteManagerDialog->UpdateRouteListCtrl();
72 };
73 return ctx;
74}
75
76RoutePropDlg::RoutePropDlg(wxWindow* parent, wxWindowID id,
77 const wxString& title, const wxPoint& pos,
78 const wxSize& size, long style)
79 : DIALOG_PARENT(parent, id, title, pos, size, style) {
80 wxFont* qFont = GetOCPNScaledFont(_("Dialog"));
81 SetFont(*qFont);
82
83 this->SetSizeHints(wxSize(300, 300), wxDefaultSize);
84
85 wxBoxSizer* bSizerMain;
86 bSizerMain = new wxBoxSizer(wxVERTICAL);
87
88 m_ntbRteProp =
89 new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
90 m_pnlBasic = new wxPanel(m_ntbRteProp, wxID_ANY, wxDefaultPosition,
91 wxDefaultSize, wxTAB_TRAVERSAL);
92 wxBoxSizer* bSizerData;
93 bSizerData = new wxBoxSizer(wxVERTICAL);
94
95 wxBoxSizer* bSizerName;
96 bSizerName = new wxBoxSizer(wxHORIZONTAL);
97
98 m_stName = new wxStaticText(m_pnlBasic, wxID_ANY, _("Name"),
99 wxDefaultPosition, wxDefaultSize, 0);
100 m_stName->Wrap(-1);
101 bSizerName->Add(m_stName, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
102
103 m_tcName = new wxTextCtrl(m_pnlBasic, wxID_ANY, "", wxDefaultPosition,
104 wxDefaultSize, 0);
105 bSizerName->Add(m_tcName, 1, wxALL, 5);
106
107 bSizerData->Add(bSizerName, 0, wxEXPAND, 5);
108
109 wxBoxSizer* bSizerFromTo;
110 bSizerFromTo = new wxBoxSizer(wxHORIZONTAL);
111
112 m_stFrom = new wxStaticText(m_pnlBasic, wxID_ANY, _("From"),
113 wxDefaultPosition, wxDefaultSize, 0);
114 m_stFrom->Wrap(-1);
115 bSizerFromTo->Add(m_stFrom, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
116
117 m_tcFrom = new wxTextCtrl(m_pnlBasic, wxID_ANY, "", wxDefaultPosition,
118 wxDefaultSize, 0);
119 bSizerFromTo->Add(m_tcFrom, 1, wxALL, 5);
120
121 m_stTo = new wxStaticText(m_pnlBasic, wxID_ANY, _("To"), wxDefaultPosition,
122 wxDefaultSize, 0);
123 m_stTo->Wrap(-1);
124 bSizerFromTo->Add(m_stTo, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
125
126 m_tcTo = new wxTextCtrl(m_pnlBasic, wxID_ANY, "", wxDefaultPosition,
127 wxDefaultSize, 0);
128 bSizerFromTo->Add(m_tcTo, 1, wxALL, 5);
129
130 bSizerData->Add(bSizerFromTo, 0, wxEXPAND, 5);
131
132 wxWrapSizer* wSizerParams;
133 wSizerParams = new wxWrapSizer(wxHORIZONTAL, wxEXTEND_LAST_ON_EACH_LINE |
134 wxREMOVE_LEADING_SPACES |
135 wxWRAPSIZER_DEFAULT_FLAGS);
136
137 int maxFieldSize = GetCharWidth() * 10;
138
139 wxBoxSizer* bSizerDistance;
140 bSizerDistance = new wxBoxSizer(wxVERTICAL);
141
142 m_stDistTotal = new wxStaticText(m_pnlBasic, wxID_ANY, _("Distance"),
143 wxDefaultPosition, wxDefaultSize, 0);
144 m_stDistTotal->Wrap(-1);
145 bSizerDistance->Add(m_stDistTotal, 0, wxALL, 5);
146
147 m_tcDistance = new wxTextCtrl(m_pnlBasic, wxID_ANY, "", wxDefaultPosition,
148 wxDefaultSize, wxTE_READONLY);
149 m_tcDistance->SetToolTip(
150 _("Total route distance calculated using rhumb line (Mercator) distances "
151 "between waypoints. Rhumb lines maintain a constant bearing but may "
152 "not represent the shortest path between points."));
153 m_tcDistance->SetMaxSize(wxSize(maxFieldSize, -1));
154 m_tcDistance->SetMinSize(wxSize(maxFieldSize, -1));
155
156 bSizerDistance->Add(m_tcDistance, 0, wxALL | wxEXPAND, 5);
157
158 wSizerParams->Add(bSizerDistance, 1, wxEXPAND, 0);
159
160 wxBoxSizer* bSizerSpeed;
161 bSizerSpeed = new wxBoxSizer(wxVERTICAL);
162
163 m_stPlanSpeed = new wxStaticText(m_pnlBasic, wxID_ANY, _("Plan speed"),
164 wxDefaultPosition, wxDefaultSize, 0);
165 m_stPlanSpeed->Wrap(-1);
166 bSizerSpeed->Add(m_stPlanSpeed, 0, wxALL, 5);
167
168 m_tcPlanSpeed = new wxTextCtrl(m_pnlBasic, wxID_ANY, "", wxDefaultPosition,
169 wxDefaultSize, wxTE_PROCESS_ENTER);
170 m_tcPlanSpeed->SetToolTip(
171 _("Default speed in knots used for route time calculations. This speed "
172 "is used for all legs unless individual waypoints have their own "
173 "planned speed values. Time calculations use both the planned speed "
174 "and the rhumb line distances between waypoints."));
175 m_tcPlanSpeed->SetMaxSize(wxSize(maxFieldSize, -1));
176 m_tcPlanSpeed->SetMinSize(wxSize(maxFieldSize, -1));
177
178 bSizerSpeed->Add(m_tcPlanSpeed, 0, wxALL, 5);
179
180 wSizerParams->Add(bSizerSpeed, 1, wxEXPAND, 0);
181
182 //
183 wxBoxSizer* bSizerEnroute;
184 bSizerEnroute = new wxBoxSizer(wxVERTICAL);
185
186 m_stEnroute = new wxStaticText(m_pnlBasic, wxID_ANY, _("Enroute"),
187 wxDefaultPosition, wxDefaultSize, 0);
188 m_stEnroute->Wrap(-1);
189 bSizerEnroute->Add(m_stEnroute, 0, wxALL, 5);
190
191 m_tcEnroute = new wxTextCtrl(m_pnlBasic, wxID_ANY, "", wxDefaultPosition,
192 wxDefaultSize, wxTE_READONLY);
193 m_tcEnroute->SetToolTip(
194 _("Estimated total time to complete the route based on planned speeds "
195 "and rhumb line distances. For each leg, the calculation uses the "
196 "waypoint's planned speed if available, or the route's default speed "
197 "if not specified. The time is calculated as: distance รท speed for "
198 "each leg, then summed for the entire route."));
199 m_tcEnroute->SetMaxSize(wxSize(maxFieldSize, -1));
200 m_tcEnroute->SetMinSize(wxSize(maxFieldSize, -1));
201
202 bSizerEnroute->Add(m_tcEnroute, 0, wxALL, 5);
203
204 wSizerParams->Add(bSizerEnroute, 1, wxEXPAND, 0);
205
206 //
207 wxBoxSizer* bSizerDeparture;
208 bSizerDeparture = new wxBoxSizer(wxVERTICAL);
209
210 m_stDeparture = new wxStaticText(m_pnlBasic, wxID_ANY, _("Departure"),
211 wxDefaultPosition, wxDefaultSize, 0);
212 m_stDeparture->Wrap(-1);
213 bSizerDeparture->Add(m_stDeparture, 0, wxALL, 5);
214
215 wxBoxSizer* bSizerDepartureTS;
216 bSizerDepartureTS = new wxBoxSizer(wxHORIZONTAL);
217 bSizerDeparture->Add(bSizerDepartureTS, 0, 0, 5);
218
219 m_dpDepartureDate =
220 new wxDatePickerCtrl(m_pnlBasic, wxID_ANY, wxDefaultDateTime,
221 wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT);
222 bSizerDepartureTS->Add(m_dpDepartureDate, 0, wxALIGN_CENTER_VERTICAL | wxALL,
223 5);
224#ifdef __ANDROID__
225 int ys = GetCharHeight();
226 m_dpDepartureDate->SetMinSize(wxSize(-1, ys * 15 / 10));
227#endif
228
229#ifdef __WXGTK__
230 m_tpDepartureTime = new TimeCtrl(m_pnlBasic, wxID_ANY, wxDefaultDateTime,
231 wxDefaultPosition, wxDefaultSize);
232#else
233 m_tpDepartureTime =
234 new wxTimePickerCtrl(m_pnlBasic, wxID_ANY, wxDefaultDateTime,
235 wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT);
236#endif
237 bSizerDepartureTS->Add(m_tpDepartureTime, 0, wxALIGN_CENTER_VERTICAL | wxALL,
238 5);
239
240 wSizerParams->Add(bSizerDeparture, 1, wxEXPAND, 0);
241
242 wxBoxSizer* bSizerTime;
243 bSizerTime = new wxBoxSizer(wxVERTICAL);
244
245 m_stTimeZone = new wxStaticText(m_pnlBasic, wxID_ANY, _("Time"),
246 wxDefaultPosition, wxDefaultSize, 0);
247 m_stTimeZone->Wrap(-1);
248 bSizerTime->Add(m_stTimeZone, 0, wxALL, 5);
249
250 // Timezone for departure time and ETA display.
251 wxString m_choiceTimezoneChoices[] = {
252 _("UTC"), _("Local Time"), _("LMT@Location"), _("Honor Global Settings")};
253 int m_choiceTimezoneNChoices =
254 sizeof(m_choiceTimezoneChoices) / sizeof(wxString);
255 m_choiceTimezone =
256 new wxChoice(m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize,
257 m_choiceTimezoneNChoices, m_choiceTimezoneChoices, 0);
258 m_choiceTimezone->SetSelection(3 /*Honor Global Settings*/);
259 m_choiceTimezone->SetMaxSize(wxSize(GetCharWidth() * 12, -1));
260
261 bSizerTime->Add(m_choiceTimezone, 0, wxALL, 5);
262
263 wSizerParams->Add(bSizerTime, 1, wxEXPAND, 0);
264
265 wxBoxSizer* bSizerColor;
266 bSizerColor = new wxBoxSizer(wxVERTICAL);
267
268 m_staticTextColor = new wxStaticText(m_pnlBasic, wxID_ANY, _("Color"),
269 wxDefaultPosition, wxDefaultSize, 0);
270 m_staticTextColor->Wrap(-1);
271 bSizerColor->Add(m_staticTextColor, 0, wxALL, 5);
272
273 wxString m_choiceColorChoices[] = {
274 _("Default color"), _("Black"), _("Dark Red"), _("Dark Green"),
275 _("Dark Yellow"), _("Dark Blue"), _("Dark Magenta"), _("Dark Cyan"),
276 _("Light Gray"), _("Dark Gray"), _("Red"), _("Green"),
277 _("Yellow"), _("Blue"), _("Magenta"), _("Cyan"),
278 _("White")};
279 int m_choiceColorNChoices = sizeof(m_choiceColorChoices) / sizeof(wxString);
280 m_choiceColor =
281 new wxChoice(m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize,
282 m_choiceColorNChoices, m_choiceColorChoices, 0);
283 m_choiceColor->SetSelection(0);
284 bSizerColor->Add(m_choiceColor, 0, wxALL, 5);
285
286 wSizerParams->Add(bSizerColor, 1, wxEXPAND, 5);
287
288 wxBoxSizer* bSizerStyle;
289 bSizerStyle = new wxBoxSizer(wxVERTICAL);
290
291 m_stStyle = new wxStaticText(m_pnlBasic, wxID_ANY, _("Style"),
292 wxDefaultPosition, wxDefaultSize, 0);
293 m_stStyle->Wrap(-1);
294 bSizerStyle->Add(m_stStyle, 0, wxALL, 5);
295
296 wxString m_choiceStyleChoices[] = {_("Default"), _("Solid"), _("Dot"),
297 _("Long dash"), _("Short dash")};
298 int m_choiceStyleNChoices = sizeof(m_choiceStyleChoices) / sizeof(wxString);
299 m_choiceStyle =
300 new wxChoice(m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize,
301 m_choiceStyleNChoices, m_choiceStyleChoices, 0);
302 m_choiceStyle->SetSelection(0);
303 bSizerStyle->Add(m_choiceStyle, 0, wxALL, 5);
304
305 wSizerParams->Add(bSizerStyle, 1, wxEXPAND, 5);
306
307 wxBoxSizer* bSizerWidth;
308 bSizerWidth = new wxBoxSizer(wxVERTICAL);
309
310 m_stWidth = new wxStaticText(m_pnlBasic, wxID_ANY, _("Width"),
311 wxDefaultPosition, wxDefaultSize, 0);
312 m_stWidth->Wrap(-1);
313 bSizerWidth->Add(m_stWidth, 0, wxALL, 5);
314
315 wxString m_choiceWidthChoices[] = {
316 _("Default"), _("1 px"), _("2px"), _("3 px"), _("4 px"), _("5 px"),
317 _("6 px"), _("7 px"), _("8 px"), _("9 px"), _("10 px")};
318 int m_choiceWidthNChoices = sizeof(m_choiceWidthChoices) / sizeof(wxString);
319 m_choiceWidth =
320 new wxChoice(m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize,
321 m_choiceWidthNChoices, m_choiceWidthChoices, 0);
322 m_choiceWidth->SetSelection(0);
323 bSizerWidth->Add(m_choiceWidth, 0, wxALL, 5);
324
325 wSizerParams->Add(bSizerWidth, 1, wxEXPAND, 5);
326
327 // wxDataViewListCtrl has some platform dependent variability
328 // We account for this here...
329
330 wxString toLabel = _("To waypoint");
331
332#ifdef __WXQT__ // includes Android
333 int columWidths[] = {
334 wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE,
335 wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE,
336 wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE,
337 wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE,
338 wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE, wxCOL_WIDTH_AUTOSIZE};
339 int colFlags = 0;
340 toLabel = _("To WP");
341
342#else
343 int columWidths[] = {
344 30, // Leg
345 80, // To waypoint
346 70, // Distance to waypoint
347 60, // Bearing to waypoint
348 100, // Total Distance
349 90, // Latitude
350 90, // Longitude
351 80, // Estimated Time Enroute (ETE), i.e., duration of travel.
352 120, // Estimated Time of Arrival (ETA)
353 60, // Speed
354 100, // Next tide event
355 -1, // Description
356 80, // Course
357 120, // Estimated Time of Departure (ETD)
358 -1};
359 int colFlags = wxDATAVIEW_COL_RESIZABLE;
360
361#endif
362
363 bSizerData->Add(wSizerParams, 0, wxEXPAND, 0);
364
365 m_dvlcWaypoints =
366 new wxDataViewListCtrl(m_pnlBasic, wxID_ANY, wxDefaultPosition,
367 wxDefaultSize, wxDV_VERT_RULES | wxDV_HORIZ_RULES);
368 m_dataViewListColumnLeg = m_dvlcWaypoints->AppendTextColumn(
369 _("Leg"), wxDATAVIEW_CELL_INERT, columWidths[0],
370 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
371 m_dataViewListColumnLeg->GetRenderer()->EnableEllipsize(wxELLIPSIZE_NONE);
372 m_dataViewListColumnToWpt = m_dvlcWaypoints->AppendTextColumn(
373 toLabel, wxDATAVIEW_CELL_INERT, columWidths[1],
374 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
375 m_dataViewListColumnToWpt->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
376 m_dataViewListColumnDistance = m_dvlcWaypoints->AppendTextColumn(
377 _("Distance"), wxDATAVIEW_CELL_INERT, columWidths[2],
378 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
379 m_dataViewListColumnDistance->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
380 m_dataViewListColumnBearing = m_dvlcWaypoints->AppendTextColumn(
381 _("Bearing"), wxDATAVIEW_CELL_INERT, columWidths[3],
382 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
383 m_dataViewListColumnBearing->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
384 m_dataViewListColumnTotalDistance = m_dvlcWaypoints->AppendTextColumn(
385 _("Total Distance"), wxDATAVIEW_CELL_INERT, columWidths[4],
386 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
387 m_dataViewListColumnTotalDistance->GetRenderer()->EnableEllipsize(
388 wxELLIPSIZE_END);
389 m_dataViewListColumnLat = m_dvlcWaypoints->AppendTextColumn(
390 _("Latitude"), wxDATAVIEW_CELL_INERT, columWidths[5],
391 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
392 m_dataViewListColumnLat->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
393 m_dataViewListColumnLon = m_dvlcWaypoints->AppendTextColumn(
394 _("Longitude"), wxDATAVIEW_CELL_INERT, columWidths[6],
395 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
396 m_dataViewListColumnLon->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
397 m_dataViewListColumnETE = m_dvlcWaypoints->AppendTextColumn(
398 _("ETE"), wxDATAVIEW_CELL_INERT, columWidths[7],
399 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
400 m_dataViewListColumnETE->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
401 m_dataViewListColumnETA = m_dvlcWaypoints->AppendTextColumn(
402 _("ETA"), wxDATAVIEW_CELL_INERT, columWidths[8],
403 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
404 m_dataViewListColumnETA->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
405 m_dataViewListColumnSpeed = m_dvlcWaypoints->AppendTextColumn(
406 _("Speed"), CELL_EDITABLE, columWidths[9],
407 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
408 m_dataViewListColumnSpeed->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
409 m_dataViewListColumnNTE = m_dvlcWaypoints->AppendTextColumn(
410 _("Next tide event"), wxDATAVIEW_CELL_INERT, columWidths[10],
411 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
412 m_dataViewListColumnNTE->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
413 m_dataViewListColumnDesc = m_dvlcWaypoints->AppendTextColumn(
414 _("Description"), wxDATAVIEW_CELL_INERT, columWidths[11],
415 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
416 m_dataViewListColumnDesc->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
417 m_dataViewListColumnCourse = m_dvlcWaypoints->AppendTextColumn(
418 _("Course"), wxDATAVIEW_CELL_INERT, columWidths[12],
419 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
420 m_dataViewListColumnCourse->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
421 m_dataViewListColumnETD = m_dvlcWaypoints->AppendTextColumn(
422 _("ETD"), CELL_EDITABLE, columWidths[13],
423 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
424 m_dataViewListColumnETD->GetRenderer()->EnableEllipsize(wxELLIPSIZE_END);
425 m_dataViewListColumnEmpty = m_dvlcWaypoints->AppendTextColumn(
426 "", wxDATAVIEW_CELL_INERT, columWidths[14],
427 static_cast<wxAlignment>(wxALIGN_LEFT), colFlags);
428 bSizerData->Add(m_dvlcWaypoints, 1, wxALL | wxEXPAND, 5);
429
430 m_pnlBasic->SetSizer(bSizerData);
431 m_pnlBasic->Layout();
432 bSizerData->Fit(m_pnlBasic);
433 m_ntbRteProp->AddPage(m_pnlBasic, _("Basic"), false);
434 m_pnlAdvanced = new wxPanel(m_ntbRteProp, wxID_ANY, wxDefaultPosition,
435 wxDefaultSize, wxTAB_TRAVERSAL);
436 wxBoxSizer* bSizerAdvanced;
437 bSizerAdvanced = new wxBoxSizer(wxVERTICAL);
438
439 m_stDescription = new wxStaticText(m_pnlAdvanced, wxID_ANY, _("Description"),
440 wxDefaultPosition, wxDefaultSize, 0);
441 m_stDescription->Wrap(-1);
442 bSizerAdvanced->Add(m_stDescription, 0, wxALL, 5);
443
444 m_tcDescription =
445 new wxTextCtrl(m_pnlAdvanced, wxID_ANY, "", wxDefaultPosition,
446 wxDefaultSize, wxTE_MULTILINE);
447 bSizerAdvanced->Add(m_tcDescription, 0, wxALL | wxEXPAND, 5);
448
449 wxStaticBoxSizer* sbSizerLinks;
450 sbSizerLinks = new wxStaticBoxSizer(
451 new wxStaticBox(m_pnlAdvanced, wxID_ANY, _("Links")), wxVERTICAL);
452
453 m_scrolledWindowLinks = new wxScrolledWindow(
454 sbSizerLinks->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize,
455 wxHSCROLL | wxVSCROLL);
456 m_scrolledWindowLinks->SetScrollRate(5, 5);
457 wxBoxSizer* bSizerLinksWnd;
458 bSizerLinksWnd = new wxBoxSizer(wxVERTICAL);
459
460 bSizerLinks = new wxBoxSizer(wxVERTICAL);
461
462 m_hyperlink1 =
463 new wxHyperlinkCtrl(m_scrolledWindowLinks, wxID_ANY, _("wxFB Website"),
464 "http://www.wxformbuilder.org", wxDefaultPosition,
465 wxDefaultSize, wxHL_DEFAULT_STYLE);
466 m_hyperlink1->Enable(false);
467 m_hyperlink1->Hide();
468
469 m_menuLink = new wxMenu();
470 wxMenuItem* m_menuItemEdit;
471 m_menuItemEdit = new wxMenuItem(m_menuLink, wxID_ANY, wxString(_("Edit")), "",
472 wxITEM_NORMAL);
473 m_menuLink->Append(m_menuItemEdit);
474
475 wxMenuItem* m_menuItemAdd;
476 m_menuItemAdd = new wxMenuItem(m_menuLink, wxID_ANY, wxString(_("Add new")),
477 "", wxITEM_NORMAL);
478 m_menuLink->Append(m_menuItemAdd);
479
480 wxMenuItem* m_menuItemDelete;
481 m_menuItemDelete = new wxMenuItem(m_menuLink, wxID_ANY, wxString(_("Delete")),
482 "", wxITEM_NORMAL);
483 m_menuLink->Append(m_menuItemDelete);
484
485 m_hyperlink1->Connect(
486 wxEVT_RIGHT_DOWN,
487 wxMouseEventHandler(RoutePropDlg::m_hyperlink1OnContextMenu), NULL, this);
488
489 bSizerLinks->Add(m_hyperlink1, 0, wxALL, 5);
490
491 bSizerLinksWnd->Add(bSizerLinks, 1, wxEXPAND, 5);
492
493 wxBoxSizer* bSizerLinkBtns;
494 bSizerLinkBtns = new wxBoxSizer(wxHORIZONTAL);
495
496 m_btnAddLink = new wxButton(m_scrolledWindowLinks, wxID_ANY, _("Add"),
497 wxDefaultPosition, wxDefaultSize, 0);
498 bSizerLinkBtns->Add(m_btnAddLink, 0, wxALL, 5);
499
500 m_toggleBtnEdit =
501 new wxToggleButton(m_scrolledWindowLinks, wxID_ANY, _("Edit"),
502 wxDefaultPosition, wxDefaultSize, 0);
503 bSizerLinkBtns->Add(m_toggleBtnEdit, 0, wxALL, 5);
504
505 m_stEditEnabled =
506 new wxStaticText(m_scrolledWindowLinks, wxID_ANY,
507 _("Links are opened in the default browser."),
508 wxDefaultPosition, wxDefaultSize, 0);
509 m_stEditEnabled->Wrap(-1);
510 bSizerLinkBtns->Add(m_stEditEnabled, 0, wxALL, 5);
511
512 bSizerLinksWnd->Add(bSizerLinkBtns, 0, wxEXPAND, 5);
513
514 m_scrolledWindowLinks->SetSizer(bSizerLinksWnd);
515 m_scrolledWindowLinks->Layout();
516 bSizerLinksWnd->Fit(m_scrolledWindowLinks);
517 m_menuLinks = new wxMenu();
518 wxMenuItem* m_menuItemAddLink;
519 m_menuItemAddLink = new wxMenuItem(m_menuLinks, wxID_ANY,
520 wxString(_("Add new")), "", wxITEM_NORMAL);
521 m_menuLinks->Append(m_menuItemAddLink);
522
523 m_scrolledWindowLinks->Connect(
524 wxEVT_RIGHT_DOWN,
525 wxMouseEventHandler(RoutePropDlg::m_scrolledWindowLinksOnContextMenu),
526 NULL, this);
527
528 sbSizerLinks->Add(m_scrolledWindowLinks, 1, wxEXPAND | wxALL, 5);
529
530 bSizerAdvanced->Add(sbSizerLinks, 1, wxEXPAND, 5);
531
532 m_pnlAdvanced->SetSizer(bSizerAdvanced);
533 m_pnlAdvanced->Layout();
534 bSizerAdvanced->Fit(m_pnlAdvanced);
535 m_ntbRteProp->AddPage(m_pnlAdvanced, _("Advanced"), false);
536
537 bSizerMain->Add(m_ntbRteProp, 1, wxEXPAND | wxALL, 5);
538
539 wxWrapSizer* wSizerCustomBtns;
540 wSizerCustomBtns = new wxWrapSizer(wxHORIZONTAL, wxWRAPSIZER_DEFAULT_FLAGS);
541
542 m_btnPrint = new wxButton(this, wxID_ANY, _("Print"), wxDefaultPosition,
543 wxDefaultSize, 0);
544 wSizerCustomBtns->Add(m_btnPrint, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
545
546#ifdef __ANDROID__
547 m_btnPrint->Hide();
548#endif
549
550 m_btnExtend = new wxButton(this, wxID_ANY, _("Extend"), wxDefaultPosition,
551 wxDefaultSize, 0);
552 m_btnExtend->SetToolTip(_(
553 "Extend this route by connecting it to another route. The button is "
554 "disabled when: the route is active, is part of a layer, or there is no "
555 "suitable route to connect to. A suitable route must be visible, "
556 "different from this route, and share a common waypoint with this route "
557 "(or have a waypoint very close to the last point of this route)."));
558 wSizerCustomBtns->Add(m_btnExtend, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
559
560 m_btnSplit = new wxButton(this, wxID_ANY, _("Split"), wxDefaultPosition,
561 wxDefaultSize, 0);
562 wSizerCustomBtns->Add(m_btnSplit, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
563
564 wSizerCustomBtns->Add(0, 0, 1, wxEXPAND, 5);
565
566 m_sdbSizerBtns = new wxStdDialogButtonSizer();
567 m_sdbSizerBtnsOK = new wxButton(this, wxID_OK);
568 m_sdbSizerBtns->AddButton(m_sdbSizerBtnsOK);
569 m_sdbSizerBtnsCancel = new wxButton(this, wxID_CANCEL, _("Cancel"));
570 m_sdbSizerBtns->AddButton(m_sdbSizerBtnsCancel);
571 m_sdbSizerBtns->Realize();
572
573 wSizerCustomBtns->Add(m_sdbSizerBtns, 1, wxEXPAND, 5);
574
575 bSizerMain->Add(wSizerCustomBtns, 0, wxEXPAND, 0);
576
577 this->SetSizer(bSizerMain);
578 this->Layout();
579
580 this->Centre(wxBOTH);
581
582 // Connect Events
583 this->Connect(wxEVT_CLOSE_WINDOW,
584 wxCloseEventHandler(RoutePropDlg::RoutePropDlgOnClose));
585 this->Connect(wxEVT_SIZE,
586 wxSizeEventHandler(RoutePropDlg::RoutePropDlgOnSize));
587 m_ntbRteProp->Connect(
588 wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
589 wxNotebookEventHandler(RoutePropDlg::RoutePropDlgOnNotebookPageChanged),
590 NULL, this);
591 m_tcPlanSpeed->Connect(
592 wxEVT_KILL_FOCUS, wxFocusEventHandler(RoutePropDlg::PlanSpeedOnKillFocus),
593 NULL, this);
594 m_tcPlanSpeed->Connect(
595 wxEVT_COMMAND_TEXT_ENTER,
596 wxCommandEventHandler(RoutePropDlg::PlanSpeedOnTextEnter), NULL, this);
597 m_tcPlanSpeed->Connect(
598 wxEVT_COMMAND_TEXT_UPDATED,
599 wxCommandEventHandler(RoutePropDlg::PlanSpeedOnTextEnter), NULL, this);
600 m_dpDepartureDate->Connect(
601 wxEVT_DATE_CHANGED,
602 wxDateEventHandler(RoutePropDlg::DepartureDateOnDateChanged), NULL, this);
603 m_tpDepartureTime->Connect(
604 wxEVT_TIME_CHANGED,
605 wxDateEventHandler(RoutePropDlg::DepartureTimeOnTimeChanged), NULL, this);
606 m_choiceTimezone->Connect(
607 wxEVT_COMMAND_CHOICE_SELECTED,
608 wxCommandEventHandler(RoutePropDlg::TimezoneOnChoice), NULL, this);
609 m_dvlcWaypoints->Connect(
610 wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU,
611 wxDataViewEventHandler(
612 RoutePropDlg::WaypointsOnDataViewListCtrlItemContextMenu),
613 NULL, this);
614 m_dvlcWaypoints->Connect(
615 wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE,
616 wxDataViewEventHandler(
617 RoutePropDlg::WaypointsOnDataViewListCtrlItemEditingDone),
618 NULL, this);
619 m_dvlcWaypoints->Connect(
620 wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED,
621 wxDataViewEventHandler(
622 RoutePropDlg::WaypointsOnDataViewListCtrlItemValueChanged),
623 NULL, this);
624 m_dvlcWaypoints->Connect(
625 wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,
626 wxDataViewEventHandler(
627 RoutePropDlg::WaypointsOnDataViewListCtrlSelectionChanged),
628 NULL, this);
629 m_menuLink->Bind(wxEVT_COMMAND_MENU_SELECTED,
630 wxCommandEventHandler(RoutePropDlg::ItemEditOnMenuSelection),
631 this, m_menuItemEdit->GetId());
632 m_menuLink->Bind(wxEVT_COMMAND_MENU_SELECTED,
633 wxCommandEventHandler(RoutePropDlg::ItemAddOnMenuSelection),
634 this, m_menuItemAdd->GetId());
635 m_menuLink->Bind(
636 wxEVT_COMMAND_MENU_SELECTED,
637 wxCommandEventHandler(RoutePropDlg::ItemDeleteOnMenuSelection), this,
638 m_menuItemDelete->GetId());
639 m_btnAddLink->Connect(
640 wxEVT_COMMAND_BUTTON_CLICKED,
641 wxCommandEventHandler(RoutePropDlg::AddLinkOnButtonClick), NULL, this);
642 m_toggleBtnEdit->Connect(
643 wxEVT_COMMAND_TOGGLEBUTTON_CLICKED,
644 wxCommandEventHandler(RoutePropDlg::BtnEditOnToggleButton), NULL, this);
645 m_menuLinks->Bind(wxEVT_COMMAND_MENU_SELECTED,
646 wxCommandEventHandler(RoutePropDlg::ItemAddOnMenuSelection),
647 this, m_menuItemAddLink->GetId());
648 m_btnPrint->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
649 wxCommandEventHandler(RoutePropDlg::PrintOnButtonClick),
650 NULL, this);
651 m_btnExtend->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
652 wxCommandEventHandler(RoutePropDlg::ExtendOnButtonClick),
653 NULL, this);
654 m_btnSplit->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
655 wxCommandEventHandler(RoutePropDlg::SplitOnButtonClick),
656 NULL, this);
657 m_sdbSizerBtnsCancel->Connect(
658 wxEVT_COMMAND_BUTTON_CLICKED,
659 wxCommandEventHandler(RoutePropDlg::BtnsOnCancelButtonClick), NULL, this);
660 m_sdbSizerBtnsOK->Connect(
661 wxEVT_COMMAND_BUTTON_CLICKED,
662 wxCommandEventHandler(RoutePropDlg::BtnsOnOKButtonClick), NULL, this);
663
664#if 0
665 auto navobj = NavObjectChanges::getInstance();
666 wxDEFINE_EVENT(EVT_ROUTEMAN_DEL_TRK, ObservedEvt);
667 navobj_del_track_listener.Listen(navobj->evt_delete_track, this,
668 EVT_ROUTEMAN_DEL_TRK);
669 Bind(EVT_ROUTEMAN_DEL_TRK, [&](ObservedEvt& ev) {
670 auto t = std::const_pointer_cast<Track>(UnpackEvtPointer<Track>(ev));
671 RoutemanGui(*g_pRouteMan).DeleteTrack(t.get());
672 });
673 wxDEFINE_EVENT(EVT_ROUTEMAN_DEL_ROUTE, ObservedEvt);
674 navobj_del_route_listener.Listen(navobj->evt_delete_route, this,
675 EVT_ROUTEMAN_DEL_ROUTE);
676 Bind(EVT_ROUTEMAN_DEL_ROUTE, [&](ObservedEvt& ev) {
677 auto r = std::const_pointer_cast<Route>(UnpackEvtPointer<Route>(ev));
678 g_pRouteMan->DeleteRoute(r.get(), navobj);
679 });
680#endif
681}
682
683RoutePropDlg::~RoutePropDlg() {
684 // Disconnect Events
685 this->Disconnect(wxEVT_CLOSE_WINDOW,
686 wxCloseEventHandler(RoutePropDlg::RoutePropDlgOnClose));
687 this->Disconnect(wxEVT_SIZE,
688 wxSizeEventHandler(RoutePropDlg::RoutePropDlgOnSize));
689 m_ntbRteProp->Disconnect(
690 wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
691 wxNotebookEventHandler(RoutePropDlg::RoutePropDlgOnNotebookPageChanged),
692 NULL, this);
693 m_tcPlanSpeed->Disconnect(
694 wxEVT_KILL_FOCUS, wxFocusEventHandler(RoutePropDlg::PlanSpeedOnKillFocus),
695 NULL, this);
696 m_tcPlanSpeed->Disconnect(
697 wxEVT_COMMAND_TEXT_ENTER,
698 wxCommandEventHandler(RoutePropDlg::PlanSpeedOnTextEnter), NULL, this);
699 m_tcPlanSpeed->Disconnect(
700 wxEVT_COMMAND_TEXT_UPDATED,
701 wxCommandEventHandler(RoutePropDlg::PlanSpeedOnTextEnter), NULL, this);
702 m_dpDepartureDate->Disconnect(
703 wxEVT_DATE_CHANGED,
704 wxDateEventHandler(RoutePropDlg::DepartureDateOnDateChanged), NULL, this);
705 m_tpDepartureTime->Disconnect(
706 wxEVT_TIME_CHANGED,
707 wxDateEventHandler(RoutePropDlg::DepartureTimeOnTimeChanged), NULL, this);
708 m_choiceTimezone->Disconnect(
709 wxEVT_COMMAND_CHOICE_SELECTED,
710 wxCommandEventHandler(RoutePropDlg::TimezoneOnChoice), NULL, this);
711 m_dvlcWaypoints->Disconnect(
712 wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU,
713 wxDataViewEventHandler(
714 RoutePropDlg::WaypointsOnDataViewListCtrlItemContextMenu),
715 NULL, this);
716 m_dvlcWaypoints->Disconnect(
717 wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE,
718 wxDataViewEventHandler(
719 RoutePropDlg::WaypointsOnDataViewListCtrlItemEditingDone),
720 NULL, this);
721 m_dvlcWaypoints->Disconnect(
722 wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED,
723 wxDataViewEventHandler(
724 RoutePropDlg::WaypointsOnDataViewListCtrlItemValueChanged),
725 NULL, this);
726 m_dvlcWaypoints->Disconnect(
727 wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,
728 wxDataViewEventHandler(
729 RoutePropDlg::WaypointsOnDataViewListCtrlSelectionChanged),
730 NULL, this);
731 m_btnAddLink->Disconnect(
732 wxEVT_COMMAND_BUTTON_CLICKED,
733 wxCommandEventHandler(RoutePropDlg::AddLinkOnButtonClick), NULL, this);
734 m_toggleBtnEdit->Disconnect(
735 wxEVT_COMMAND_TOGGLEBUTTON_CLICKED,
736 wxCommandEventHandler(RoutePropDlg::BtnEditOnToggleButton), NULL, this);
737 m_btnPrint->Disconnect(
738 wxEVT_COMMAND_BUTTON_CLICKED,
739 wxCommandEventHandler(RoutePropDlg::PrintOnButtonClick), NULL, this);
740 m_btnExtend->Disconnect(
741 wxEVT_COMMAND_BUTTON_CLICKED,
742 wxCommandEventHandler(RoutePropDlg::ExtendOnButtonClick), NULL, this);
743 m_btnSplit->Disconnect(
744 wxEVT_COMMAND_BUTTON_CLICKED,
745 wxCommandEventHandler(RoutePropDlg::SplitOnButtonClick), NULL, this);
746 m_sdbSizerBtnsCancel->Disconnect(
747 wxEVT_COMMAND_BUTTON_CLICKED,
748 wxCommandEventHandler(RoutePropDlg::BtnsOnCancelButtonClick), NULL, this);
749 m_sdbSizerBtnsOK->Disconnect(
750 wxEVT_COMMAND_BUTTON_CLICKED,
751 wxCommandEventHandler(RoutePropDlg::BtnsOnOKButtonClick), NULL, this);
752
753 delete m_menuLink;
754 delete m_menuLinks;
755}
756
757void RoutePropDlg::OnKeyChar(wxKeyEvent& event) {
758 int key_char = event.GetKeyCode();
759 int yyp = 4;
760}
Custom event class for OpenCPN's notification system.
Represents a waypoint or mark within the navigation system.
Definition route_point.h:71
Class RoutePropDlg.
wxTimePickerCtrl * m_tpDepartureTime
The time picker for the departure time of the route.
wxDatePickerCtrl * m_dpDepartureDate
The date picker for the departure date of the route.
Represents a navigational route in the navigation system.
Definition route.h:99
bool DeleteRoute(Route *pRoute)
Definition routeman.cpp:762
wxFont * GetOCPNScaledFont(wxString item, int default_size)
Retrieves a font from FontMgr, optionally scaled for physical readability.
Definition gui_lib.cpp:59
General purpose GUI support.
Navigation data types.
RoutePropDlgImpl * pRoutePropDialog
Global instance.
Route properties dialog.
Routeman * g_pRouteMan
Global instance.
Definition routeman.cpp:60
Route Manager.
Routeman drawing stuff.
Manage routes dialog.
Callbacks for RoutePropDlg.
Definition routeman.h:80
Chart Symbols.