1 ///////////////////////////////////////////////////////////////////////////
2 // C++ code generated with wxFormBuilder (version Oct 26 2018)
3 // http://www.wxformbuilder.org/
4 //
5 // PLEASE DO *NOT* EDIT THIS FILE!
6 ///////////////////////////////////////////////////////////////////////////
7 
8 #include "RoutePropDlg.h"
9 #include "chart1.h"
10 
11 #if wxCHECK_VERSION(3, 1, 2)
12   #define CELL_EDITABLE wxDATAVIEW_CELL_EDITABLE
13 #else
14   #define CELL_EDITABLE wxDATAVIEW_CELL_INERT
15 #endif
16 
17 ///////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(RoutePropDlg,wxFrame)18 BEGIN_EVENT_TABLE ( RoutePropDlg, wxFrame )
19 #ifdef __OCPN__ANDROID__
20     EVT_CHAR(RoutePropDlg::OnKeyChar)
21 #endif
22 END_EVENT_TABLE()
23 
24 RoutePropDlg::RoutePropDlg( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
25 {
26         wxFont *qFont = GetOCPNScaledFont(_("Dialog"));
27         SetFont( *qFont );
28 
29 	this->SetSizeHints( wxSize( 300,300 ), wxDefaultSize );
30 
31 	wxBoxSizer* bSizerMain;
32 	bSizerMain = new wxBoxSizer( wxVERTICAL );
33 
34 	m_ntbRteProp = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
35 	m_pnlBasic = new wxPanel( m_ntbRteProp, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
36 	wxBoxSizer* bSizerData;
37 	bSizerData = new wxBoxSizer( wxVERTICAL );
38 
39 	wxBoxSizer* bSizerName;
40 	bSizerName = new wxBoxSizer( wxHORIZONTAL );
41 
42 	m_stName = new wxStaticText( m_pnlBasic, wxID_ANY, _("Name"), wxDefaultPosition, wxDefaultSize, 0 );
43 	m_stName->Wrap( -1 );
44 	bSizerName->Add( m_stName, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
45 
46 	m_tcName = new wxTextCtrl( m_pnlBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
47 	bSizerName->Add( m_tcName, 1, wxALL, 5 );
48 
49 
50 	bSizerData->Add( bSizerName, 0, wxEXPAND, 5 );
51 
52 	wxBoxSizer* bSizerFromTo;
53 	bSizerFromTo = new wxBoxSizer( wxHORIZONTAL );
54 
55 	m_stFrom = new wxStaticText( m_pnlBasic, wxID_ANY, _("From"), wxDefaultPosition, wxDefaultSize, 0 );
56 	m_stFrom->Wrap( -1 );
57 	bSizerFromTo->Add( m_stFrom, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
58 
59 	m_tcFrom = new wxTextCtrl( m_pnlBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
60 	bSizerFromTo->Add( m_tcFrom, 1, wxALL, 5 );
61 
62 	m_stTo = new wxStaticText( m_pnlBasic, wxID_ANY, _("To"), wxDefaultPosition, wxDefaultSize, 0 );
63 	m_stTo->Wrap( -1 );
64 	bSizerFromTo->Add( m_stTo, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
65 
66 	m_tcTo = new wxTextCtrl( m_pnlBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
67 	bSizerFromTo->Add( m_tcTo, 1, wxALL, 5 );
68 
69 
70 	bSizerData->Add( bSizerFromTo, 0, wxEXPAND, 5 );
71 
72 	wxWrapSizer* wSizerParams;
73 	wSizerParams = new wxWrapSizer( wxHORIZONTAL, wxEXTEND_LAST_ON_EACH_LINE|wxREMOVE_LEADING_SPACES|wxWRAPSIZER_DEFAULT_FLAGS );
74 
75         int maxFieldSize = GetCharWidth() * 10;
76 
77 	wxBoxSizer* bSizerDistance;
78 	bSizerDistance = new wxBoxSizer( wxVERTICAL );
79 
80 	m_stDistTotal = new wxStaticText( m_pnlBasic, wxID_ANY, _("Distance"), wxDefaultPosition, wxDefaultSize, 0 );
81 	m_stDistTotal->Wrap( -1 );
82 	bSizerDistance->Add( m_stDistTotal, 0, wxALL, 5 );
83 
84 	m_tcDistance = new wxTextCtrl( m_pnlBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
85 	m_tcDistance->SetMaxSize( wxSize( maxFieldSize,-1 ) );
86 
87 	bSizerDistance->Add( m_tcDistance, 0, wxALL|wxEXPAND, 5 );
88 
89 
90 	wSizerParams->Add( bSizerDistance, 1, wxEXPAND, 0 );
91 
92 	wxBoxSizer* bSizerSpeed;
93 	bSizerSpeed = new wxBoxSizer( wxVERTICAL );
94 
95 	m_stPlanSpeed = new wxStaticText( m_pnlBasic, wxID_ANY, _("Plan speed"), wxDefaultPosition, wxDefaultSize, 0 );
96 	m_stPlanSpeed->Wrap( -1 );
97 	bSizerSpeed->Add( m_stPlanSpeed, 0, wxALL, 5 );
98 
99 	m_tcPlanSpeed = new wxTextCtrl( m_pnlBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
100 	m_tcPlanSpeed->SetMaxSize( wxSize( maxFieldSize,-1 ) );
101 
102 	bSizerSpeed->Add( m_tcPlanSpeed, 0, wxALL, 5 );
103 
104 
105 	wSizerParams->Add( bSizerSpeed, 1, wxEXPAND, 0 );
106 
107 	wxBoxSizer* bSizerEnroute;
108 	bSizerEnroute = new wxBoxSizer( wxVERTICAL );
109 
110 	m_stEnroute = new wxStaticText( m_pnlBasic, wxID_ANY, _("Enroute"), wxDefaultPosition, wxDefaultSize, 0 );
111 	m_stEnroute->Wrap( -1 );
112 	bSizerEnroute->Add( m_stEnroute, 0, wxALL, 5 );
113 
114 	m_tcEnroute = new wxTextCtrl( m_pnlBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
115 	m_tcEnroute->SetMaxSize( wxSize( maxFieldSize,-1 ) );
116 
117 	bSizerEnroute->Add( m_tcEnroute, 0, wxALL, 5 );
118 
119 
120 	wSizerParams->Add( bSizerEnroute, 1, wxEXPAND, 0 );
121 
122 	wxBoxSizer* bSizerDeparture;
123 	bSizerDeparture = new wxBoxSizer( wxVERTICAL );
124 
125 	m_stDeparture = new wxStaticText( m_pnlBasic, wxID_ANY, _("Departure"), wxDefaultPosition, wxDefaultSize, 0 );
126 	m_stDeparture->Wrap( -1 );
127 	bSizerDeparture->Add( m_stDeparture, 0, wxALL, 5 );
128 
129         wxBoxSizer* bSizerDepartureTS;
130         bSizerDepartureTS = new wxBoxSizer( wxHORIZONTAL );
131         bSizerDeparture->Add( bSizerDepartureTS, 0, 0, 5 );
132 
133 #ifndef __OCPN__ANDROID__
134 	m_dpDepartureDate = new wxDatePickerCtrl( m_pnlBasic, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT );
135 	bSizerDepartureTS->Add( m_dpDepartureDate, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
136 
137 #ifdef __WXGTK__
138         m_tpDepartureTime = new TimeCtrl( m_pnlBasic, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize );
139 #else
140         m_tpDepartureTime = new wxTimePickerCtrl( m_pnlBasic, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT );
141 #endif
142         bSizerDepartureTS->Add( m_tpDepartureTime, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
143 
144 	wSizerParams->Add( bSizerDeparture, 1, wxEXPAND, 0 );
145 #endif
146 
147 	wxBoxSizer* bSizerTime;
148 	bSizerTime = new wxBoxSizer( wxVERTICAL );
149 
150 	m_stTimeZone = new wxStaticText( m_pnlBasic, wxID_ANY, _("Time"), wxDefaultPosition, wxDefaultSize, 0 );
151 	m_stTimeZone->Wrap( -1 );
152 	bSizerTime->Add( m_stTimeZone, 0, wxALL, 5 );
153 
154 	wxString m_choiceTimezoneChoices[] = { _("UTC"), _("Local@PC"), _("LMT@Location") };
155 	int m_choiceTimezoneNChoices = sizeof( m_choiceTimezoneChoices ) / sizeof( wxString );
156 	m_choiceTimezone = new wxChoice( m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceTimezoneNChoices, m_choiceTimezoneChoices, 0 );
157 	m_choiceTimezone->SetSelection( 0 );
158 	m_choiceTimezone->SetMaxSize( wxSize( GetCharWidth() * 12, -1 ) );
159 
160 	bSizerTime->Add( m_choiceTimezone, 0, wxALL, 5 );
161 
162 
163 	wSizerParams->Add( bSizerTime, 1, wxEXPAND, 0 );
164 
165 	wxBoxSizer* bSizerColor;
166 	bSizerColor = new wxBoxSizer( wxVERTICAL );
167 
168 	m_staticTextColor = new wxStaticText( m_pnlBasic, wxID_ANY, _("Color"), wxDefaultPosition, wxDefaultSize, 0 );
169 	m_staticTextColor->Wrap( -1 );
170 	bSizerColor->Add( m_staticTextColor, 0, wxALL, 5 );
171 
172 	wxString m_choiceColorChoices[] = { _("Default color"), _("Black"), _("Dark Red"), _("Dark Green"), _("Dark Yellow"), _("Dark Blue"), _("Dark Magenta"), _("Dark Cyan"), _("Light Gray"), _("Dark Gray"), _("Red"), _("Green"), _("Yellow"), _("Blue"), _("Magenta"), _("Cyan"), _("White") };
173 	int m_choiceColorNChoices = sizeof( m_choiceColorChoices ) / sizeof( wxString );
174 	m_choiceColor = new wxChoice( m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceColorNChoices, m_choiceColorChoices, 0 );
175 	m_choiceColor->SetSelection( 0 );
176 	bSizerColor->Add( m_choiceColor, 0, wxALL, 5 );
177 
178 
179 	wSizerParams->Add( bSizerColor, 1, wxEXPAND, 5 );
180 
181 	wxBoxSizer* bSizerStyle;
182 	bSizerStyle = new wxBoxSizer( wxVERTICAL );
183 
184 	m_stStyle = new wxStaticText( m_pnlBasic, wxID_ANY, _("Style"), wxDefaultPosition, wxDefaultSize, 0 );
185 	m_stStyle->Wrap( -1 );
186 	bSizerStyle->Add( m_stStyle, 0, wxALL, 5 );
187 
188 	wxString m_choiceStyleChoices[] = { _("Default"), _("Solid"), _("Dot"), _("Long dash"), _("Short dash"), _("Dot dash") };
189 	int m_choiceStyleNChoices = sizeof( m_choiceStyleChoices ) / sizeof( wxString );
190 	m_choiceStyle = new wxChoice( m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceStyleNChoices, m_choiceStyleChoices, 0 );
191 	m_choiceStyle->SetSelection( 0 );
192 	bSizerStyle->Add( m_choiceStyle, 0, wxALL, 5 );
193 
194 
195 	wSizerParams->Add( bSizerStyle, 1, wxEXPAND, 5 );
196 
197 	wxBoxSizer* bSizerWidth;
198 	bSizerWidth = new wxBoxSizer( wxVERTICAL );
199 
200 	m_stWidth = new wxStaticText( m_pnlBasic, wxID_ANY, _("Width"), wxDefaultPosition, wxDefaultSize, 0 );
201 	m_stWidth->Wrap( -1 );
202 	bSizerWidth->Add( m_stWidth, 0, wxALL, 5 );
203 
204 	wxString m_choiceWidthChoices[] = { _("Default"), _("1 px"), _("2px"), _("3 px"), _("4 px"), _("5 px"), _("6 px"), _("7 px"), _("8 px"), _("9 px"), _("10 px") };
205 	int m_choiceWidthNChoices = sizeof( m_choiceWidthChoices ) / sizeof( wxString );
206 	m_choiceWidth = new wxChoice( m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceWidthNChoices, m_choiceWidthChoices, 0 );
207 	m_choiceWidth->SetSelection( 0 );
208 	bSizerWidth->Add( m_choiceWidth, 0, wxALL, 5 );
209 
210 
211 	wSizerParams->Add( bSizerWidth, 1, wxEXPAND, 5 );
212 
213         // wxDataViewListCtrl has some platform dependent variability
214         // We account for this here...
215 
216         wxString toLabel = _("To waypoint");
217 
218 #ifdef __WXQT__                         // includes Android
219         int columWidths[] = {
220             wxCOL_WIDTH_AUTOSIZE,
221             wxCOL_WIDTH_AUTOSIZE,
222             wxCOL_WIDTH_AUTOSIZE,
223             wxCOL_WIDTH_AUTOSIZE,
224             wxCOL_WIDTH_AUTOSIZE,
225             wxCOL_WIDTH_AUTOSIZE,
226             wxCOL_WIDTH_AUTOSIZE,
227             wxCOL_WIDTH_AUTOSIZE,
228             wxCOL_WIDTH_AUTOSIZE,
229             wxCOL_WIDTH_AUTOSIZE,
230             wxCOL_WIDTH_AUTOSIZE,
231             wxCOL_WIDTH_AUTOSIZE,
232             wxCOL_WIDTH_AUTOSIZE,
233             wxCOL_WIDTH_AUTOSIZE
234         };
235         int colFlags = 0;
236         toLabel = _("To WP");
237 
238 #else
239         int columWidths[] = {
240             30,
241             80,
242             70,
243             60,
244             90,
245             90,
246             80,
247             120,
248             60,                 // Speed
249             100,                // Next tide event
250             -1,
251             80,
252             120,
253             -1
254         };
255         int colFlags = wxDATAVIEW_COL_RESIZABLE;
256 
257 #endif
258 
259 	bSizerData->Add( wSizerParams, 0, wxEXPAND, 0 );
260 
261 	m_dvlcWaypoints = new wxDataViewListCtrl( m_pnlBasic, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_VERT_RULES | wxDV_HORIZ_RULES );
262 	m_dataViewListColumnLeg = m_dvlcWaypoints->AppendTextColumn( _("Leg"), wxDATAVIEW_CELL_INERT, columWidths[0], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
263 	m_dataViewListColumnLeg->GetRenderer()->EnableEllipsize( wxELLIPSIZE_NONE );
264 	m_dataViewListColumnToWpt = m_dvlcWaypoints->AppendTextColumn( toLabel, wxDATAVIEW_CELL_INERT, columWidths[1], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
265 	m_dataViewListColumnToWpt->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
266 	m_dataViewListColumnDistance = m_dvlcWaypoints->AppendTextColumn( _("Distance"), wxDATAVIEW_CELL_INERT, columWidths[2], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
267 	m_dataViewListColumnDistance->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
268 	m_dataViewListColumnBearing = m_dvlcWaypoints->AppendTextColumn( _("Bearing"), wxDATAVIEW_CELL_INERT, columWidths[3], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
269 	m_dataViewListColumnBearing->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
270 	m_dataViewListColumnLat = m_dvlcWaypoints->AppendTextColumn( _("Latitude"), wxDATAVIEW_CELL_INERT, columWidths[4], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
271 	m_dataViewListColumnLat->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
272 	m_dataViewListColumnLon = m_dvlcWaypoints->AppendTextColumn( _("Longitude"), wxDATAVIEW_CELL_INERT, columWidths[5], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
273 	m_dataViewListColumnLon->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
274 	m_dataViewListColumnETE = m_dvlcWaypoints->AppendTextColumn( _("ETE"), wxDATAVIEW_CELL_INERT, columWidths[6], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
275 	m_dataViewListColumnETE->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
276 	m_dataViewListColumnETA = m_dvlcWaypoints->AppendTextColumn( _("ETA"), wxDATAVIEW_CELL_INERT, columWidths[7], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
277 	m_dataViewListColumnETA->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
278 	m_dataViewListColumnSpeed = m_dvlcWaypoints->AppendTextColumn( _("Speed"), CELL_EDITABLE, columWidths[8], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
279 	m_dataViewListColumnSpeed->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
280 	m_dataViewListColumnNTE = m_dvlcWaypoints->AppendTextColumn( _("Next tide event"), wxDATAVIEW_CELL_INERT, columWidths[9], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
281 	m_dataViewListColumnNTE->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
282 	m_dataViewListColumnDesc = m_dvlcWaypoints->AppendTextColumn( _("Description"), wxDATAVIEW_CELL_INERT, columWidths[10], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
283 	m_dataViewListColumnDesc->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
284 	m_dataViewListColumnCourse = m_dvlcWaypoints->AppendTextColumn( _("Course"), wxDATAVIEW_CELL_INERT, columWidths[11], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
285 	m_dataViewListColumnCourse->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
286 	m_dataViewListColumnETD = m_dvlcWaypoints->AppendTextColumn( _("ETD"), CELL_EDITABLE, columWidths[12], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
287 	m_dataViewListColumnETD->GetRenderer()->EnableEllipsize( wxELLIPSIZE_END );
288 	m_dataViewListColumnEmpty = m_dvlcWaypoints->AppendTextColumn( wxEmptyString, wxDATAVIEW_CELL_INERT, columWidths[13], static_cast<wxAlignment>(wxALIGN_LEFT), colFlags );
289 	bSizerData->Add( m_dvlcWaypoints, 1, wxALL|wxEXPAND, 5 );
290 
291 
292 	m_pnlBasic->SetSizer( bSizerData );
293 	m_pnlBasic->Layout();
294 	bSizerData->Fit( m_pnlBasic );
295 	m_ntbRteProp->AddPage( m_pnlBasic, _("Basic"), false );
296 	m_pnlAdvanced = new wxPanel( m_ntbRteProp, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
297 	wxBoxSizer* bSizerAdvanced;
298 	bSizerAdvanced = new wxBoxSizer( wxVERTICAL );
299 
300 	m_stDescription = new wxStaticText( m_pnlAdvanced, wxID_ANY, _("Description"), wxDefaultPosition, wxDefaultSize, 0 );
301 	m_stDescription->Wrap( -1 );
302 	bSizerAdvanced->Add( m_stDescription, 0, wxALL, 5 );
303 
304 	m_tcDescription = new wxTextCtrl( m_pnlAdvanced, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
305 	bSizerAdvanced->Add( m_tcDescription, 0, wxALL|wxEXPAND, 5 );
306 
307 	wxStaticBoxSizer* sbSizerLinks;
308 	sbSizerLinks = new wxStaticBoxSizer( new wxStaticBox( m_pnlAdvanced, wxID_ANY, _("Links") ), wxVERTICAL );
309 
310 	m_scrolledWindowLinks = new wxScrolledWindow( sbSizerLinks->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
311 	m_scrolledWindowLinks->SetScrollRate( 5, 5 );
312 	wxBoxSizer* bSizerLinksWnd;
313 	bSizerLinksWnd = new wxBoxSizer( wxVERTICAL );
314 
315 	bSizerLinks = new wxBoxSizer( wxVERTICAL );
316 
317 	m_hyperlink1 = new wxHyperlinkCtrl( m_scrolledWindowLinks, wxID_ANY, _("wxFB Website"), wxT("http://www.wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
318 	m_hyperlink1->Enable( false );
319 	m_hyperlink1->Hide();
320 
321 	m_menuLink = new wxMenu();
322 	wxMenuItem* m_menuItemEdit;
323 	m_menuItemEdit = new wxMenuItem( m_menuLink, wxID_ANY, wxString( _("Edit") ) , wxEmptyString, wxITEM_NORMAL );
324 	m_menuLink->Append( m_menuItemEdit );
325 
326 	wxMenuItem* m_menuItemAdd;
327 	m_menuItemAdd = new wxMenuItem( m_menuLink, wxID_ANY, wxString( _("Add new") ) , wxEmptyString, wxITEM_NORMAL );
328 	m_menuLink->Append( m_menuItemAdd );
329 
330 	wxMenuItem* m_menuItemDelete;
331 	m_menuItemDelete = new wxMenuItem( m_menuLink, wxID_ANY, wxString( _("Delete") ) , wxEmptyString, wxITEM_NORMAL );
332 	m_menuLink->Append( m_menuItemDelete );
333 
334 	m_hyperlink1->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( RoutePropDlg::m_hyperlink1OnContextMenu ), NULL, this );
335 
336 	bSizerLinks->Add( m_hyperlink1, 0, wxALL, 5 );
337 
338 
339 	bSizerLinksWnd->Add( bSizerLinks, 1, wxEXPAND, 5 );
340 
341 	wxBoxSizer* bSizerLinkBtns;
342 	bSizerLinkBtns = new wxBoxSizer( wxHORIZONTAL );
343 
344 	m_btnAddLink = new wxButton( m_scrolledWindowLinks, wxID_ANY, _("Add"), wxDefaultPosition, wxDefaultSize, 0 );
345 	bSizerLinkBtns->Add( m_btnAddLink, 0, wxALL, 5 );
346 
347 	m_toggleBtnEdit = new wxToggleButton( m_scrolledWindowLinks, wxID_ANY, _("Edit"), wxDefaultPosition, wxDefaultSize, 0 );
348 	bSizerLinkBtns->Add( m_toggleBtnEdit, 0, wxALL, 5 );
349 
350 	m_stEditEnabled = new wxStaticText( m_scrolledWindowLinks, wxID_ANY, _("Links are opened in the default browser."), wxDefaultPosition, wxDefaultSize, 0 );
351 	m_stEditEnabled->Wrap( -1 );
352 	bSizerLinkBtns->Add( m_stEditEnabled, 0, wxALL, 5 );
353 
354 
355 	bSizerLinksWnd->Add( bSizerLinkBtns, 0, wxEXPAND, 5 );
356 
357 
358 	m_scrolledWindowLinks->SetSizer( bSizerLinksWnd );
359 	m_scrolledWindowLinks->Layout();
360 	bSizerLinksWnd->Fit( m_scrolledWindowLinks );
361 	m_menuLinks = new wxMenu();
362 	wxMenuItem* m_menuItemAddLink;
363 	m_menuItemAddLink = new wxMenuItem( m_menuLinks, wxID_ANY, wxString( _("Add new") ) , wxEmptyString, wxITEM_NORMAL );
364 	m_menuLinks->Append( m_menuItemAddLink );
365 
366 	m_scrolledWindowLinks->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( RoutePropDlg::m_scrolledWindowLinksOnContextMenu ), NULL, this );
367 
368 	sbSizerLinks->Add( m_scrolledWindowLinks, 1, wxEXPAND | wxALL, 5 );
369 
370 
371 	bSizerAdvanced->Add( sbSizerLinks, 1, wxEXPAND, 5 );
372 
373 
374 	m_pnlAdvanced->SetSizer( bSizerAdvanced );
375 	m_pnlAdvanced->Layout();
376 	bSizerAdvanced->Fit( m_pnlAdvanced );
377 	m_ntbRteProp->AddPage( m_pnlAdvanced, _("Advanced"), false );
378 
379 	bSizerMain->Add( m_ntbRteProp, 1, wxEXPAND | wxALL, 5 );
380 
381 	wxWrapSizer* wSizerCustomBtns;
382 	wSizerCustomBtns = new wxWrapSizer( wxHORIZONTAL, wxWRAPSIZER_DEFAULT_FLAGS );
383 
384 	m_btnPrint = new wxButton( this, wxID_ANY, _("Print"), wxDefaultPosition, wxDefaultSize, 0 );
385 	wSizerCustomBtns->Add( m_btnPrint, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
386 
387 	m_btnExtend = new wxButton( this, wxID_ANY, _("Extend"), wxDefaultPosition, wxDefaultSize, 0 );
388 	wSizerCustomBtns->Add( m_btnExtend, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
389 
390 	m_btnSplit = new wxButton( this, wxID_ANY, _("Split"), wxDefaultPosition, wxDefaultSize, 0 );
391 	wSizerCustomBtns->Add( m_btnSplit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
392 
393 
394 	wSizerCustomBtns->Add( 0, 0, 1, wxEXPAND, 5 );
395 
396 	m_sdbSizerBtns = new wxStdDialogButtonSizer();
397 	m_sdbSizerBtnsOK = new wxButton( this, wxID_OK );
398 	m_sdbSizerBtns->AddButton( m_sdbSizerBtnsOK );
399 	m_sdbSizerBtnsCancel = new wxButton( this, wxID_CANCEL, _("Cancel") );
400 	m_sdbSizerBtns->AddButton( m_sdbSizerBtnsCancel );
401 	m_sdbSizerBtns->Realize();
402 
403 	wSizerCustomBtns->Add( m_sdbSizerBtns, 1, wxEXPAND, 5 );
404 
405 
406 	bSizerMain->Add( wSizerCustomBtns, 0, wxEXPAND, 0 );
407 
408 
409 	this->SetSizer( bSizerMain );
410 	this->Layout();
411 
412 	this->Centre( wxBOTH );
413 
414 	// Connect Events
415 	this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( RoutePropDlg::RoutePropDlgOnClose ) );
416 	this->Connect( wxEVT_SIZE, wxSizeEventHandler( RoutePropDlg::RoutePropDlgOnSize ) );
417 	m_ntbRteProp->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( RoutePropDlg::RoutePropDlgOnNotebookPageChanged ), NULL, this );
418 	m_tcPlanSpeed->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( RoutePropDlg::PlanSpeedOnKillFocus ), NULL, this );
419 	m_tcPlanSpeed->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( RoutePropDlg::PlanSpeedOnTextEnter ), NULL, this );
420     m_tcPlanSpeed->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( RoutePropDlg::PlanSpeedOnTextEnter ), NULL, this );
421 #ifndef __OCPN__ANDROID__
422 	m_dpDepartureDate->Connect( wxEVT_DATE_CHANGED, wxDateEventHandler( RoutePropDlg::DepartureDateOnDateChanged ), NULL, this );
423 	m_tpDepartureTime->Connect( wxEVT_TIME_CHANGED, wxDateEventHandler( RoutePropDlg::DepartureTimeOnTimeChanged ), NULL, this );
424 #endif
425 	m_choiceTimezone->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( RoutePropDlg::TimezoneOnChoice ), NULL, this );
426 	m_dvlcWaypoints->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlItemContextMenu ), NULL, this );
427 	m_dvlcWaypoints->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlItemEditingDone ), NULL, this );
428 	m_dvlcWaypoints->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlItemValueChanged ), NULL, this );
429 	m_dvlcWaypoints->Connect( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlSelectionChanged ), NULL, this );
430 	m_menuLink->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( RoutePropDlg::ItemEditOnMenuSelection ), this, m_menuItemEdit->GetId());
431 	m_menuLink->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( RoutePropDlg::ItemAddOnMenuSelection ), this, m_menuItemAdd->GetId());
432 	m_menuLink->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( RoutePropDlg::ItemDeleteOnMenuSelection ), this, m_menuItemDelete->GetId());
433 	m_btnAddLink->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::AddLinkOnButtonClick ), NULL, this );
434 	m_toggleBtnEdit->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::BtnEditOnToggleButton ), NULL, this );
435 	m_menuLinks->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( RoutePropDlg::ItemAddOnMenuSelection ), this, m_menuItemAddLink->GetId());
436 	m_btnPrint->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::PrintOnButtonClick ), NULL, this );
437 	m_btnExtend->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::ExtendOnButtonClick ), NULL, this );
438 	m_btnSplit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::SplitOnButtonClick ), NULL, this );
439 	m_sdbSizerBtnsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::BtnsOnCancelButtonClick ), NULL, this );
440 	m_sdbSizerBtnsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::BtnsOnOKButtonClick ), NULL, this );
441 }
442 
~RoutePropDlg()443 RoutePropDlg::~RoutePropDlg()
444 {
445 	// Disconnect Events
446 	this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( RoutePropDlg::RoutePropDlgOnClose ) );
447 	this->Disconnect( wxEVT_SIZE, wxSizeEventHandler( RoutePropDlg::RoutePropDlgOnSize ) );
448 	m_ntbRteProp->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( RoutePropDlg::RoutePropDlgOnNotebookPageChanged ), NULL, this );
449 	m_tcPlanSpeed->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( RoutePropDlg::PlanSpeedOnKillFocus ), NULL, this );
450 	m_tcPlanSpeed->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( RoutePropDlg::PlanSpeedOnTextEnter ), NULL, this );
451         m_tcPlanSpeed->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( RoutePropDlg::PlanSpeedOnTextEnter ), NULL, this );
452 #ifndef __OCPN__ANDROID__
453 	m_dpDepartureDate->Disconnect( wxEVT_DATE_CHANGED, wxDateEventHandler( RoutePropDlg::DepartureDateOnDateChanged ), NULL, this );
454 	m_tpDepartureTime->Disconnect( wxEVT_TIME_CHANGED, wxDateEventHandler( RoutePropDlg::DepartureTimeOnTimeChanged ), NULL, this );
455 #endif
456 	m_choiceTimezone->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( RoutePropDlg::TimezoneOnChoice ), NULL, this );
457 	m_dvlcWaypoints->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlItemContextMenu ), NULL, this );
458 	m_dvlcWaypoints->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlItemEditingDone ), NULL, this );
459 	m_dvlcWaypoints->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlItemValueChanged ), NULL, this );
460 	m_dvlcWaypoints->Disconnect( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler( RoutePropDlg::WaypointsOnDataViewListCtrlSelectionChanged ), NULL, this );
461 	m_btnAddLink->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::AddLinkOnButtonClick ), NULL, this );
462 	m_toggleBtnEdit->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::BtnEditOnToggleButton ), NULL, this );
463 	m_btnPrint->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::PrintOnButtonClick ), NULL, this );
464 	m_btnExtend->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::ExtendOnButtonClick ), NULL, this );
465 	m_btnSplit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::SplitOnButtonClick ), NULL, this );
466 	m_sdbSizerBtnsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::BtnsOnCancelButtonClick ), NULL, this );
467 	m_sdbSizerBtnsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( RoutePropDlg::BtnsOnOKButtonClick ), NULL, this );
468 
469 	delete m_menuLink;
470 	delete m_menuLinks;
471 }
472 
OnKeyChar(wxKeyEvent & event)473 void RoutePropDlg::OnKeyChar( wxKeyEvent &event )
474 {
475     int key_char = event.GetKeyCode();
476     int yyp = 4;
477 }
478