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