51#include "androidUTIL.h"
60#define GLOBAL_SETTINGS_INPUT 3
63#define DISPLAY_FORMAT 2
64#define TIMESTAMP_FORMAT 3
70bool TrackPropDlg::instanceFlag =
false;
72TrackPropDlg* TrackPropDlg::getInstance(wxWindow* parent, wxWindowID
id,
73 const wxString& title,
74 const wxPoint& pos,
const wxSize& size,
77 single =
new TrackPropDlg(parent,
id, title, pos, size, style);
85TrackPropDlg::TrackPropDlg(wxWindow* parent, wxWindowID
id,
86 const wxString& title,
const wxPoint& pos,
87 const wxSize& size,
long style)
88 : DIALOG_PARENT(parent, id, title, pos, size, style) {
92 SetWindowStyleFlag(style);
94 m_scrolledWindowLinks = NULL;
95 m_tDescription = NULL;
101 CreateControlsCompact();
111 m_sdbBtmBtnsSizerCancel->Connect(
112 wxEVT_COMMAND_BUTTON_CLICKED,
113 wxCommandEventHandler(TrackPropDlg::OnCancelBtnClick), NULL,
this);
114 m_sdbBtmBtnsSizerOK->Connect(
115 wxEVT_COMMAND_BUTTON_CLICKED,
116 wxCommandEventHandler(TrackPropDlg::OnOKBtnClick), NULL,
this);
117 if (m_sdbBtmBtnsSizerPrint)
118 m_sdbBtmBtnsSizerPrint->Connect(
119 wxEVT_COMMAND_BUTTON_CLICKED,
120 wxCommandEventHandler(TrackPropDlg::OnPrintBtnClick), NULL,
this);
121 m_sdbBtmBtnsSizerSplit->Connect(
122 wxEVT_COMMAND_BUTTON_CLICKED,
123 wxCommandEventHandler(TrackPropDlg::OnSplitBtnClick), NULL,
this);
124 m_sdbBtmBtnsSizerExtend->Connect(
125 wxEVT_COMMAND_BUTTON_CLICKED,
126 wxCommandEventHandler(TrackPropDlg::OnExtendBtnClick), NULL,
this);
127 m_sdbBtmBtnsSizerToRoute->Connect(
128 wxEVT_COMMAND_BUTTON_CLICKED,
129 wxCommandEventHandler(TrackPropDlg::OnToRouteBtnClick), NULL,
this);
130 if (m_sdbBtmBtnsSizerExport)
131 m_sdbBtmBtnsSizerExport->Connect(
132 wxEVT_COMMAND_BUTTON_CLICKED,
133 wxCommandEventHandler(TrackPropDlg::OnExportBtnClick), NULL,
this);
134 m_lcPoints->Connect(wxEVT_COMMAND_LIST_ITEM_SELECTED,
135 wxListEventHandler(TrackPropDlg::OnTrackPropListClick),
137 Connect(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK,
138 wxListEventHandler(TrackPropDlg::OnTrackPropRightClick), NULL,
this);
139 Connect(wxEVT_COMMAND_MENU_SELECTED,
140 wxCommandEventHandler(TrackPropDlg::OnTrackPropMenuSelected), NULL,
144 Connect(wxEVT_ACTIVATE, wxActivateEventHandler(TrackPropDlg::OnActivate),
149 m_buttonAddLink->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
150 wxCommandEventHandler(TrackPropDlg::OnAddLink),
152 m_toggleBtnEdit->Connect(
153 wxEVT_COMMAND_TOGGLEBUTTON_CLICKED,
154 wxCommandEventHandler(TrackPropDlg::OnEditLinkToggle), NULL,
this);
158 m_rbShowTimeUTC->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED,
159 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ),
162 m_rbShowTimePC->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED,
163 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ),
165 if (m_rbShowTimeLocal)
166 m_rbShowTimeLocal->Connect(
167 wxEVT_COMMAND_RADIOBUTTON_SELECTED,
168 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ), NULL,
this);
170 if (m_rbShowTimeGlobalSettings)
171 m_rbShowTimeGlobalSettings->Connect(
172 wxEVT_COMMAND_RADIOBUTTON_SELECTED,
173 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ), NULL,
this);
175 m_pMyLinkList = NULL;
178TrackPropDlg::~TrackPropDlg() {
180 m_sdbBtmBtnsSizerCancel->Disconnect(
181 wxEVT_COMMAND_BUTTON_CLICKED,
182 wxCommandEventHandler(TrackPropDlg::OnCancelBtnClick), NULL,
this);
183 m_sdbBtmBtnsSizerOK->Disconnect(
184 wxEVT_COMMAND_BUTTON_CLICKED,
185 wxCommandEventHandler(TrackPropDlg::OnOKBtnClick), NULL,
this);
186 if (m_sdbBtmBtnsSizerPrint)
187 m_sdbBtmBtnsSizerPrint->Disconnect(
188 wxEVT_COMMAND_BUTTON_CLICKED,
189 wxCommandEventHandler(TrackPropDlg::OnPrintBtnClick), NULL,
this);
190 m_sdbBtmBtnsSizerSplit->Disconnect(
191 wxEVT_COMMAND_BUTTON_CLICKED,
192 wxCommandEventHandler(TrackPropDlg::OnSplitBtnClick), NULL,
this);
193 m_sdbBtmBtnsSizerExtend->Disconnect(
194 wxEVT_COMMAND_BUTTON_CLICKED,
195 wxCommandEventHandler(TrackPropDlg::OnExtendBtnClick), NULL,
this);
196 m_sdbBtmBtnsSizerToRoute->Disconnect(
197 wxEVT_COMMAND_BUTTON_CLICKED,
198 wxCommandEventHandler(TrackPropDlg::OnToRouteBtnClick), NULL,
this);
199 if (m_sdbBtmBtnsSizerExport)
200 m_sdbBtmBtnsSizerExport->Disconnect(
201 wxEVT_COMMAND_BUTTON_CLICKED,
202 wxCommandEventHandler(TrackPropDlg::OnExportBtnClick), NULL,
this);
203 m_lcPoints->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED,
204 wxListEventHandler(TrackPropDlg::OnTrackPropListClick),
206 Disconnect(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK,
207 wxListEventHandler(TrackPropDlg::OnTrackPropRightClick), NULL,
209 Disconnect(wxEVT_COMMAND_MENU_SELECTED,
210 wxCommandEventHandler(TrackPropDlg::OnTrackPropMenuSelected), NULL,
213 Disconnect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
214 wxCommandEventHandler(TrackPropDlg::OnDeleteLink));
215 Disconnect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
216 wxCommandEventHandler(TrackPropDlg::OnEditLink));
217 Disconnect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
218 wxCommandEventHandler(TrackPropDlg::OnAddLink));
221 m_buttonAddLink->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED,
222 wxCommandEventHandler(TrackPropDlg::OnAddLink),
224 m_toggleBtnEdit->Disconnect(
225 wxEVT_COMMAND_TOGGLEBUTTON_CLICKED,
226 wxCommandEventHandler(TrackPropDlg::OnEditLinkToggle), NULL,
this);
230 m_rbShowTimeUTC->Disconnect(
231 wxEVT_COMMAND_RADIOBUTTON_SELECTED,
232 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ), NULL,
this);
235 wxEVT_COMMAND_RADIOBUTTON_SELECTED,
236 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ), NULL,
this);
239 wxEVT_COMMAND_RADIOBUTTON_SELECTED,
240 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ), NULL,
this);
243 wxEVT_COMMAND_RADIOBUTTON_SELECTED,
244 wxCommandEventHandler(TrackPropDlg::OnShowTimeTZ), NULL,
this);
246 instanceFlag =
false;
249static wxString getDatetimeTimezoneSelector(
int selection) {
263void TrackPropDlg::OnActivate(wxActivateEvent& event) {
264 auto pWin =
dynamic_cast<DIALOG_PARENT*
>(
event.GetEventObject());
265 long int style = pWin->GetWindowStyle();
266 if (event.GetActive())
267 pWin->SetWindowStyle(style | wxSTAY_ON_TOP);
269 pWin->SetWindowStyle(style ^ wxSTAY_ON_TOP);
272void TrackPropDlg::RecalculateSize() {
276 esize.x = GetCharWidth() * 110;
277 esize.y = GetCharHeight() * 40;
279 wxSize dsize = GetParent()->GetClientSize();
280 esize.y = wxMin(esize.y, dsize.y - (2 * GetCharHeight()));
281 esize.x = wxMin(esize.x, dsize.x - (2 * GetCharHeight()));
282 SetClientSize(esize);
284 wxSize fsize = GetSize();
285 fsize.y = wxMin(fsize.y, dsize.y - (2 * GetCharHeight()));
286 fsize.x = wxMin(fsize.x, dsize.x - (2 * GetCharHeight()));
290 int sy = GetCharHeight() * m_lcPoints->GetItemCount();
293 m_lcPoints->SetSize(wxSize(GetClientSize().x - 40, sy));
295 if (m_lcPoints->GetItemCount()) Layout();
301static void addColumns(wxListCtrl* lctrl,
int dx) {
302 lctrl->InsertColumn(0, _(
"Leg"), wxLIST_FORMAT_LEFT, dx * 6);
303 lctrl->InsertColumn(1, _(
"Distance"), wxLIST_FORMAT_LEFT, dx * 11);
304 lctrl->InsertColumn(2, _(
"Bearing"), wxLIST_FORMAT_LEFT, dx * 8);
306 lctrl->InsertColumn(3, _(
"Latitude"), wxLIST_FORMAT_LEFT, dx * 15);
307 lctrl->InsertColumn(4, _(
"Longitude"), wxLIST_FORMAT_LEFT, dx * 15);
310 lctrl->InsertColumn(5, _(
"Timestamp"), wxLIST_FORMAT_LEFT, dx * 26);
311 lctrl->InsertColumn(6, _(
"Speed"), wxLIST_FORMAT_CENTER, dx * 8);
313 lctrl->SetMinSize(wxSize(-1, 50));
316void TrackPropDlg::CreateControlsCompact() {
317 wxBoxSizer* itemBoxSizer1 =
new wxBoxSizer(wxVERTICAL);
318 SetSizer(itemBoxSizer1);
320 itemDialog1 =
new wxScrolledWindow(
this, wxID_ANY, wxDefaultPosition,
321 wxSize(-1, -1), wxVSCROLL);
322 itemDialog1->SetScrollRate(0, 1);
328 wxString wqs = getFontQtStylesheet(qFont);
329 wxCharBuffer sbuf = wqs.ToUTF8();
330 QString qsb = QString(sbuf.data());
332 QString qsbq = getQtStyleSheet();
334 itemDialog1->GetHandle()->setStyleSheet(qsb +
338 itemBoxSizer1->Add(itemDialog1, 1, wxEXPAND | wxALL, 0);
340 wxBoxSizer* itemBoxSizer2 =
new wxBoxSizer(wxVERTICAL);
341 itemDialog1->SetSizer(itemBoxSizer2);
343 wxStaticText* itemStaticText4 =
new wxStaticText(
344 itemDialog1, wxID_STATIC, _(
"Name"), wxDefaultPosition, wxDefaultSize, 0);
345 itemBoxSizer2->Add(itemStaticText4, 0,
346 wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP, 5);
348 m_tName =
new wxTextCtrl(itemDialog1, wxID_ANY,
"", wxDefaultPosition,
350 itemBoxSizer2->Add(m_tName, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM, 5);
352 wxStaticText* itemStaticText7 =
353 new wxStaticText(itemDialog1, wxID_STATIC, _(
"Depart From"),
354 wxDefaultPosition, wxDefaultSize, 0);
355 itemBoxSizer2->Add(itemStaticText7, 0,
356 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT,
359 m_tFrom =
new wxTextCtrl(itemDialog1, wxID_ANY,
"", wxDefaultPosition,
361 itemBoxSizer2->Add(m_tFrom, 0,
362 wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
363 wxLEFT | wxRIGHT | wxBOTTOM,
366 wxStaticText* itemStaticText8 =
367 new wxStaticText(itemDialog1, wxID_STATIC, _(
"Destination"),
368 wxDefaultPosition, wxDefaultSize, 0);
369 itemBoxSizer2->Add(itemStaticText8, 0,
370 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT,
373 m_tTo =
new wxTextCtrl(itemDialog1, wxID_ANY,
"", wxDefaultPosition,
375 itemBoxSizer2->Add(m_tTo, 0,
376 wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
377 wxLEFT | wxRIGHT | wxBOTTOM,
380 m_cbShow =
new wxCheckBox(itemDialog1, wxID_ANY, _(
"Show on chart"),
381 wxDefaultPosition, wxDefaultSize, 0);
382 itemBoxSizer2->Add(m_cbShow, 0, wxALL, 5);
384 wxFlexGridSizer* itemFlexGridSizer6a =
new wxFlexGridSizer(4, 2, 0, 0);
385 itemFlexGridSizer6a->AddGrowableCol(1, 0);
387 itemBoxSizer2->Add(itemFlexGridSizer6a, 0, wxEXPAND | wxALIGN_LEFT | wxALL,
390 wxStaticText* itemStaticText11 =
391 new wxStaticText(itemDialog1, wxID_STATIC, _(
"Total distance"),
392 wxDefaultPosition, wxDefaultSize, 0);
393 itemFlexGridSizer6a->Add(
395 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxTOP, 5);
397 m_tTotDistance =
new wxTextCtrl(itemDialog1, wxID_ANY,
"", wxDefaultPosition,
398 wxSize(-1, -1), wxTE_READONLY);
399 itemFlexGridSizer6a->Add(m_tTotDistance, 0,
400 wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
401 wxLEFT | wxRIGHT | wxBOTTOM,
404 m_stAvgSpeed =
new wxStaticText(itemDialog1, wxID_STATIC, _(
"Avg. speed"),
405 wxDefaultPosition, wxDefaultSize, 0);
406 itemFlexGridSizer6a->Add(
408 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxTOP, 5);
410 m_tAvgSpeed =
new wxTextCtrl(itemDialog1, wxID_ANY,
"", wxDefaultPosition,
411 wxSize(150, -1), wxTE_PROCESS_ENTER);
412 itemFlexGridSizer6a->Add(
414 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
417 new wxStaticText(itemDialog1, wxID_STATIC, _(
"Time Enroute"),
418 wxDefaultPosition, wxDefaultSize, 0);
419 itemFlexGridSizer6a->Add(
421 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxTOP, 5);
423 m_tTimeEnroute =
new wxTextCtrl(itemDialog1, wxID_ANY,
"", wxDefaultPosition,
424 wxSize(-1, -1), wxTE_READONLY);
425 itemFlexGridSizer6a->Add(m_tTimeEnroute, 0,
426 wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
427 wxLEFT | wxRIGHT | wxBOTTOM,
444 wxString pDispTimeZone[] = {_(
"UTC"), _(
"Local Time"), _(
"LMT@Location"),
445 _(
"Honor Global Settings")};
447 wxStaticText* itemStaticText12b =
448 new wxStaticText(itemDialog1, wxID_STATIC, _(
"Time shown as"),
449 wxDefaultPosition, wxDefaultSize, 0);
450 itemBoxSizer2->Add(itemStaticText12b, 0, wxEXPAND | wxALL, 5);
453 new wxRadioButton(itemDialog1, wxID_ANY, _(
"UTC"), wxDefaultPosition,
454 wxDefaultSize, wxRB_GROUP);
457 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
459 m_rbShowTimePC =
new wxRadioButton(itemDialog1, wxID_ANY, _(
"Local Time"));
462 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
465 new wxRadioButton(itemDialog1, wxID_ANY, _(
"LMT@Location"));
468 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
471 new wxRadioButton(itemDialog1, wxID_ANY, _(
"Honor Global Settings"));
474 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
476 wxFlexGridSizer* itemFlexGridSizer6b =
new wxFlexGridSizer(3, 2, 0, 0);
477 itemBoxSizer2->Add(itemFlexGridSizer6b, 0, wxEXPAND | wxALIGN_LEFT | wxALL,
480 wxStaticText* m_staticText1 =
481 new wxStaticText(itemDialog1, wxID_ANY, _(
"Color") +
":",
482 wxDefaultPosition, wxDefaultSize, 0);
483 itemFlexGridSizer6b->Add(m_staticText1, 0, wxALIGN_CENTER_VERTICAL | wxALL,
486 wxString m_chColorChoices[] = {
487 _(
"Default color"), _(
"Black"), _(
"Dark Red"), _(
"Dark Green"),
488 _(
"Dark Yellow"), _(
"Dark Blue"), _(
"Dark Magenta"), _(
"Dark Cyan"),
489 _(
"Light Gray"), _(
"Dark Gray"), _(
"Red"), _(
"Green"),
490 _(
"Yellow"), _(
"Blue"), _(
"Magenta"), _(
"Cyan"),
492 int m_chColorNChoices =
sizeof(m_chColorChoices) /
sizeof(wxString);
494 new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(250, -1),
495 m_chColorNChoices, m_chColorChoices, 0);
496 m_cColor->SetSelection(0);
497 itemFlexGridSizer6b->Add(m_cColor, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
499 wxStaticText* staticTextStyle =
500 new wxStaticText(itemDialog1, wxID_ANY, _(
"Style") +
":",
501 wxDefaultPosition, wxDefaultSize, 0);
502 itemFlexGridSizer6b->Add(staticTextStyle, 0, wxALIGN_CENTER_VERTICAL | wxALL,
505 wxString m_chStyleChoices[] = {_(
"Default"), _(
"Solid"), _(
"Dot"),
506 _(
"Long dash"), _(
"Short dash")};
507 int m_chStyleNChoices =
sizeof(m_chStyleChoices) /
sizeof(wxString);
509 new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxDefaultSize,
510 m_chStyleNChoices, m_chStyleChoices, 0);
511 m_cStyle->SetSelection(0);
512 itemFlexGridSizer6b->Add(m_cStyle, 0,
513 wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL, 5);
516 staticTextStyle->Hide();
520 m_stWidth =
new wxStaticText(itemDialog1, wxID_ANY, _(
"Width") +
":",
521 wxDefaultPosition, wxDefaultSize, 0);
522 itemFlexGridSizer6b->Add(m_stWidth, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
524 wxString m_chWidthChoices[] = {_(
"Default"), _(
"1 pixel"), _(
"2 pixels"),
525 _(
"3 pixels"), _(
"4 pixels"), _(
"5 pixels"),
526 _(
"6 pixels"), _(
"7 pixels"), _(
"8 pixels"),
527 _(
"9 pixels"), _(
"10 pixels")};
528 int m_chWidthNChoices =
sizeof(m_chWidthChoices) /
sizeof(wxString);
530 new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(150, -1),
531 m_chWidthNChoices, m_chWidthChoices, 0);
532 m_cWidth->SetSelection(0);
533 itemFlexGridSizer6b->Add(m_cWidth, 0,
534 wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL, 5);
536 wxStaticBox* itemStaticBoxSizer14Static =
537 new wxStaticBox(itemDialog1, wxID_ANY, _(
"Waypoints"));
538 wxStaticBoxSizer* m_pListSizer =
539 new wxStaticBoxSizer(itemStaticBoxSizer14Static, wxVERTICAL);
540 itemBoxSizer2->Add(m_pListSizer, 1, wxEXPAND | wxALL, 1);
542 wxScrolledWindow* itemlistWin =
543 new wxScrolledWindow(itemDialog1, wxID_ANY, wxDefaultPosition,
544 wxDefaultSize, wxHSCROLL | wxVSCROLL);
545 itemlistWin->SetScrollRate(2, 2);
547 m_pListSizer->Add(itemlistWin, 0, wxEXPAND | wxALL, 6);
549 long flags = wxLC_REPORT | wxLC_HRULES | wxLC_VRULES | wxLC_EDIT_LABELS;
551 flags |= wxLC_VIRTUAL;
555 wxSize(100, 500), flags);
556 addColumns(m_lcPoints, GetCharWidth());
561 m_lcPoints->GetHandle()->setStyleSheet(getQtStyleSheet());
566 wxBoxSizer* itemBoxSizerBottom =
new wxBoxSizer(wxVERTICAL);
567 itemBoxSizer1->Add(itemBoxSizerBottom, 0, wxALIGN_LEFT | wxALL | wxEXPAND, 5);
571 wxFlexGridSizer* itemBoxSizerAux =
new wxFlexGridSizer(0, n_col, 0, 0);
572 itemBoxSizerAux->SetFlexibleDirection(wxBOTH);
573 itemBoxSizerAux->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
575 itemBoxSizerBottom->Add(itemBoxSizerAux, 1, wxALIGN_LEFT | wxALL, 5);
579 m_sdbBtmBtnsSizerPrint =
new wxButton(
this, wxID_ANY, _(
"Print"),
580 wxDefaultPosition, wxDefaultSize, 0);
581 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerPrint, 0,
582 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
583 m_sdbBtmBtnsSizerPrint->Enable(
true);
585 m_sdbBtmBtnsSizerPrint = NULL;
588 m_sdbBtmBtnsSizerSplit =
new wxButton(
this, wxID_ANY, _(
"Split"),
589 wxDefaultPosition, wxDefaultSize, 0);
590 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerSplit, 0,
591 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
592 m_sdbBtmBtnsSizerSplit->Enable(
false);
594 m_sdbBtmBtnsSizerExtend =
new wxButton(
this, wxID_ANY, _(
"Extend"),
595 wxDefaultPosition, wxDefaultSize, 0);
596 m_sdbBtmBtnsSizerExtend->SetToolTip(
597 _(
"Extends this track by connecting it to another track.\n"
598 "Disabled when the track is active, the track is in a layer, or no "
599 "suitable track to connect to exists.\n"
600 "A suitable track is one that is visible, is different from this "
601 "track, and has its last point's timestamp earlier than or equal to "
602 "this track's first point's timestamp."));
603 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerExtend, 0,
604 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
606 m_sdbBtmBtnsSizerToRoute =
new wxButton(
this, wxID_ANY, _(
"To route"),
607 wxDefaultPosition, wxDefaultSize, 0);
608 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerToRoute, 0,
609 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
611 m_sdbBtmBtnsSizerExport = NULL;
617 wxBoxSizer* itemBoxSizer16 =
new wxBoxSizer(wxHORIZONTAL);
618 itemBoxSizerBottom->Add(itemBoxSizer16, 0, wxALIGN_RIGHT | wxALL, 5);
620 m_sdbBtmBtnsSizerCancel =
new wxButton(
this, wxID_CANCEL, _(
"Cancel"),
621 wxDefaultPosition, wxDefaultSize, 0);
622 itemBoxSizer16->Add(m_sdbBtmBtnsSizerCancel, 0,
623 wxALIGN_RIGHT | wxALIGN_BOTTOM | wxALL, 5);
625 m_sdbBtmBtnsSizerOK =
626 new wxButton(
this, wxID_OK, _(
"OK"), wxDefaultPosition, wxDefaultSize, 0);
627 itemBoxSizer16->Add(m_sdbBtmBtnsSizerOK, 0,
628 wxALIGN_RIGHT | wxALIGN_BOTTOM | wxALL, 5);
629 m_sdbBtmBtnsSizerOK->SetDefault();
631 int char_size = GetCharWidth();
636 SetSizeHints(-1, -1, width - 100, height - 100);
639void TrackPropDlg::CreateControls() {
640 wxBoxSizer* bSizerMain;
641 bSizerMain =
new wxBoxSizer(wxVERTICAL);
642 SetSizer(bSizerMain);
645 new wxNotebook(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
647 bSizerMain->Add(m_notebook1, 1, wxEXPAND | wxALL, 5);
650 new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize);
651 m_notebook1->AddPage(m_panel0, _(
"Basic"),
true);
653 wxBoxSizer* bSizer0 =
new wxBoxSizer(wxVERTICAL);
654 m_panel0->SetSizer(bSizer0);
656 wxBoxSizer* bSizer1 =
new wxBoxSizer(wxVERTICAL);
657 bSizer0->Add(bSizer1, 1, wxEXPAND | wxALL, 5);
659 m_panelBasic =
new wxScrolledWindow(m_panel0, wxID_ANY, wxDefaultPosition,
661 wxHSCROLL | wxVSCROLL | wxTAB_TRAVERSAL);
667 wxString wqs = getFontQtStylesheet(qFont);
668 wxCharBuffer sbuf = wqs.ToUTF8();
669 QString qsb = QString(sbuf.data());
671 QString qsbq = getQtStyleSheet();
673 m_panelBasic->GetHandle()->setStyleSheet(qsb +
682 wxBoxSizer* bSizerBasic =
new wxBoxSizer(wxVERTICAL);
683 m_panelBasic->SetSizer(bSizerBasic);
685 bSizer1->Add(m_panelBasic, 1, wxEXPAND | wxALL, 5);
687 wxBoxSizer* bSizerName;
688 bSizerName =
new wxBoxSizer(wxHORIZONTAL);
689 bSizerBasic->Add(bSizerName, 0, wxALL | wxEXPAND, 5);
691 m_stName =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"Name"),
692 wxDefaultPosition, wxDefaultSize, 0);
694 bSizerName->Add(m_stName, 0, wxALL, 5);
696 m_tName =
new wxTextCtrl(m_panelBasic, wxID_ANY,
"", wxDefaultPosition,
698 bSizerName->Add(m_tName, 1, 0, 5);
700 wxBoxSizer* bSizerFromTo;
701 bSizerFromTo =
new wxBoxSizer(wxHORIZONTAL);
702 bSizerBasic->Add(bSizerFromTo, 0, wxALL | wxEXPAND, 5);
704 m_stFrom =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"From"),
705 wxDefaultPosition, wxDefaultSize, 0);
707 bSizerFromTo->Add(m_stFrom, 0, wxALL, 5);
709 m_tFrom =
new wxTextCtrl(m_panelBasic, wxID_ANY,
"", wxDefaultPosition,
711 bSizerFromTo->Add(m_tFrom, 1, 0, 5);
713 m_stTo =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"To"), wxDefaultPosition,
716 bSizerFromTo->Add(m_stTo, 0, wxALL, 5);
718 m_tTo =
new wxTextCtrl(m_panelBasic, wxID_ANY,
"", wxDefaultPosition,
720 bSizerFromTo->Add(m_tTo, 1, 0, 5);
722 wxStaticBoxSizer* sbSizerParams;
723 sbSizerParams =
new wxStaticBoxSizer(
724 new wxStaticBox(m_panelBasic, wxID_ANY, _(
"Display parameters")),
726 bSizerBasic->Add(sbSizerParams, 0, wxALL | wxEXPAND, 5);
728 m_cbShow =
new wxCheckBox(m_panelBasic, wxID_ANY, _(
"Show on chart"),
729 wxDefaultPosition, wxDefaultSize, 0);
730 sbSizerParams->Add(m_cbShow, 0, wxALL, 5);
732 m_stColor =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"Color"),
733 wxDefaultPosition, wxDefaultSize, 0);
735 sbSizerParams->Add(m_stColor, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
737 wxString m_cColorChoices[] = {
738 _(
"Default color"), _(
"Black"), _(
"Dark Red"), _(
"Dark Green"),
739 _(
"Dark Yellow"), _(
"Dark Blue"), _(
"Dark Magenta"), _(
"Dark Cyan"),
740 _(
"Light Gray"), _(
"Dark Gray"), _(
"Red"), _(
"Green"),
741 _(
"Yellow"), _(
"Blue"), _(
"Magenta"), _(
"Cyan"),
743 int m_cColorNChoices =
sizeof(m_cColorChoices) /
sizeof(wxString);
744 m_cColor =
new wxChoice(m_panelBasic, wxID_ANY, wxDefaultPosition,
745 wxDefaultSize, m_cColorNChoices, m_cColorChoices, 0);
746 m_cColor->SetSelection(0);
747 sbSizerParams->Add(m_cColor, 1, 0, 5);
749 m_stStyle =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"Style"),
750 wxDefaultPosition, wxDefaultSize, 0);
752 sbSizerParams->Add(m_stStyle, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
754 wxString m_cStyleChoices[] = {_(
"Default"), _(
"Solid"), _(
"Dot"),
755 _(
"Long dash"), _(
"Short dash")};
756 int m_cStyleNChoices =
sizeof(m_cStyleChoices) /
sizeof(wxString);
757 m_cStyle =
new wxChoice(m_panelBasic, wxID_ANY, wxDefaultPosition,
758 wxDefaultSize, m_cStyleNChoices, m_cStyleChoices, 0);
759 m_cStyle->SetSelection(0);
760 sbSizerParams->Add(m_cStyle, 1, 0, 5);
762 m_stWidth =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"Width"),
763 wxDefaultPosition, wxDefaultSize, 0);
765 sbSizerParams->Add(m_stWidth, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
767 wxString m_cWidthChoices[] = {_(
"Default"), _(
"1 pixel"), _(
"2 pixels"),
768 _(
"3 pixels"), _(
"4 pixels"), _(
"5 pixels"),
769 _(
"6 pixels"), _(
"7 pixels"), _(
"8 pixels"),
770 _(
"9 pixels"), _(
"10 pixels")};
771 int m_cWidthNChoices =
sizeof(m_cWidthChoices) /
sizeof(wxString);
772 m_cWidth =
new wxChoice(m_panelBasic, wxID_ANY, wxDefaultPosition,
773 wxDefaultSize, m_cWidthNChoices, m_cWidthChoices, 0);
774 m_cWidth->SetSelection(0);
775 sbSizerParams->Add(m_cWidth, 1, 0, 5);
777 wxStaticBoxSizer* sbSizerStats;
778 sbSizerStats =
new wxStaticBoxSizer(
779 new wxStaticBox(m_panelBasic, wxID_ANY, _(
"Statistics")), wxVERTICAL);
780 bSizerBasic->Add(sbSizerStats, 0, wxALL | wxEXPAND, 5);
782 wxBoxSizer* bSizerStats;
783 bSizerStats =
new wxBoxSizer(wxHORIZONTAL);
786 new wxStaticText(m_panelBasic, wxID_ANY, _(
"Total distance"),
787 wxDefaultPosition, wxDefaultSize, 0);
789 bSizerStats->Add(m_stTotDistance, 0, wxALL, 5);
791 m_tTotDistance =
new wxTextCtrl(m_panelBasic, wxID_ANY,
"", wxDefaultPosition,
792 wxDefaultSize, wxTE_READONLY);
793 bSizerStats->Add(m_tTotDistance, 1, 0, 5);
795 m_stAvgSpeed =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"Avg. speed"),
796 wxDefaultPosition, wxDefaultSize, 0);
798 bSizerStats->Add(m_stAvgSpeed, 0, wxALL, 5);
800 m_tAvgSpeed =
new wxTextCtrl(m_panelBasic, wxID_ANY,
"", wxDefaultPosition,
801 wxDefaultSize, wxTE_READONLY);
802 bSizerStats->Add(m_tAvgSpeed, 1, 0, 5);
804 m_stTimeEnroute =
new wxStaticText(m_panelBasic, wxID_ANY, _(
"Time enroute"),
805 wxDefaultPosition, wxDefaultSize, 0);
807 bSizerStats->Add(m_stTimeEnroute, 0, wxALL, 5);
809 m_tTimeEnroute =
new wxTextCtrl(m_panelBasic, wxID_ANY,
"", wxDefaultPosition,
810 wxDefaultSize, wxTE_READONLY);
811 bSizerStats->Add(m_tTimeEnroute, 2, 0, 5);
813 sbSizerStats->Add(bSizerStats, 0, wxEXPAND, 5);
815 wxStaticBoxSizer* sbSizerPoints;
816 sbSizerPoints =
new wxStaticBoxSizer(
817 new wxStaticBox(m_panel0, wxID_ANY, _(
"Recorded points")), wxVERTICAL);
818 bSizer1->Add(sbSizerPoints, 1, wxALL | wxEXPAND, 5);
820 wxBoxSizer* bSizerShowTime;
821 bSizerShowTime =
new wxBoxSizer(wxHORIZONTAL);
823 m_stShowTime =
new wxStaticText(m_panel0, wxID_ANY, _(
"Time shown as"),
824 wxDefaultPosition, wxDefaultSize, 0);
826 bSizerShowTime->Add(m_stShowTime, 0, wxALL, 5);
828 m_rbShowTimeUTC =
new wxRadioButton(m_panel0, wxID_ANY, _(
"UTC"),
829 wxDefaultPosition, wxDefaultSize, 0);
830 bSizerShowTime->Add(m_rbShowTimeUTC, 0,
831 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT,
834 m_rbShowTimePC =
new wxRadioButton(m_panel0, wxID_ANY, _(
"Local Time"),
835 wxDefaultPosition, wxDefaultSize, 0);
837 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT,
841 new wxRadioButton(m_panel0, wxID_ANY, _(
"LMT@Track Start"),
842 wxDefaultPosition, wxDefaultSize, 0);
844 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT,
848 new wxRadioButton(m_panel0, wxID_ANY, _(
"Honor Global Settings"),
849 wxDefaultPosition, wxDefaultSize, 0);
851 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT,
856 sbSizerPoints->Add(bSizerShowTime, 0, wxEXPAND, 5);
858 long flags = wxLC_REPORT | wxLC_HRULES | wxLC_VRULES | wxLC_EDIT_LABELS;
860 flags |= wxLC_VIRTUAL;
864 wxDefaultSize, flags);
865 addColumns(m_lcPoints, GetCharWidth());
867 sbSizerPoints->Add(m_lcPoints, 1, wxALL | wxEXPAND, 5);
870 m_lcPoints->GetHandle()->setStyleSheet(getQtStyleSheet());
884 m_panelAdvanced =
new wxScrolledWindow(
885 m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
887 wxBoxSizer* bSizerAdvanced;
888 bSizerAdvanced =
new wxBoxSizer(wxVERTICAL);
891 new wxStaticText(m_panelAdvanced, wxID_ANY, _(
"Description"),
892 wxDefaultPosition, wxDefaultSize, 0);
894 bSizerAdvanced->Add(m_stDescription, 0, wxALL, 5);
897 new wxTextCtrl(m_panelAdvanced, wxID_ANY,
"", wxDefaultPosition,
898 wxDefaultSize, wxTE_MULTILINE);
899 bSizerAdvanced->Add(m_tDescription, 1, wxALL | wxEXPAND, 5);
901 sbSizerLinks =
new wxStaticBoxSizer(
902 new wxStaticBox(m_panelAdvanced, wxID_ANY, _(
"Links")), wxVERTICAL);
904 m_scrolledWindowLinks =
905 new wxScrolledWindow(m_panelAdvanced, wxID_ANY, wxDefaultPosition,
906 wxDefaultSize, wxHSCROLL | wxVSCROLL);
907 m_scrolledWindowLinks->SetScrollRate(5, 5);
908 bSizerLinks =
new wxBoxSizer(wxVERTICAL);
911 new wxHyperlinkCtrl(m_scrolledWindowLinks, wxID_ANY, _(
"wxFB Website"),
912 "http://www.wxformbuilder.org", wxDefaultPosition,
913 wxDefaultSize, wxHL_DEFAULT_STYLE);
914 m_menuLink =
new wxMenu();
915 m_menuItemEdit =
new wxMenuItem(m_menuLink, ID_TRK_MENU_EDIT,
916 wxString(_(
"Edit")),
"", wxITEM_NORMAL);
917 m_menuLink->Append(m_menuItemEdit);
919 m_menuItemAdd =
new wxMenuItem(m_menuLink, ID_TRK_MENU_ADD,
920 wxString(_(
"Add new")),
"", wxITEM_NORMAL);
921 m_menuLink->Append(m_menuItemAdd);
923 m_menuItemDelete =
new wxMenuItem(m_menuLink, ID_TRK_MENU_DELETE,
924 wxString(_(
"Delete")),
"", wxITEM_NORMAL);
925 m_menuLink->Append(m_menuItemDelete);
927 m_hyperlink1->Connect(
929 wxMouseEventHandler(TrackPropDlg::m_hyperlink1OnContextMenu), NULL,
this);
931 bSizerLinks->Add(m_hyperlink1, 0, wxALL, 5);
933 m_scrolledWindowLinks->SetSizer(bSizerLinks);
934 m_scrolledWindowLinks->Layout();
935 bSizerLinks->Fit(m_scrolledWindowLinks);
936 sbSizerLinks->Add(m_scrolledWindowLinks, 1, wxEXPAND | wxALL, 5);
938 wxBoxSizer* bSizerLinkBtns;
939 bSizerLinkBtns =
new wxBoxSizer(wxHORIZONTAL);
942 new wxButton(m_panelAdvanced, wxID_ANY, _(
"Add"), wxDefaultPosition,
943 wxDefaultSize, wxBU_EXACTFIT);
944 bSizerLinkBtns->Add(m_buttonAddLink, 0, wxALL, 5);
946 m_toggleBtnEdit =
new wxToggleButton(m_panelAdvanced, wxID_ANY, _(
"Edit"),
947 wxDefaultPosition, wxDefaultSize, 0);
948 bSizerLinkBtns->Add(m_toggleBtnEdit, 0, wxALL, 5);
950 m_staticTextEditEnabled =
new wxStaticText(
951 m_panelAdvanced, wxID_ANY, _(
"Links are opened in the default browser."),
952 wxDefaultPosition, wxDefaultSize, 0);
954 bSizerLinkBtns->Add(m_staticTextEditEnabled, 0,
955 wxALIGN_CENTER_VERTICAL | wxALL, 5);
957 sbSizerLinks->Add(bSizerLinkBtns, 0, wxEXPAND, 5);
959 bSizerAdvanced->Add(sbSizerLinks, 1, wxEXPAND, 5);
961 m_panelAdvanced->SetSizer(bSizerAdvanced);
962 m_notebook1->AddPage(m_panelAdvanced, _(
"Advanced"),
false);
966 wxBoxSizer* itemBoxSizerBottom =
new wxBoxSizer(wxVERTICAL);
967 bSizerMain->Add(itemBoxSizerBottom, 0, wxALIGN_LEFT | wxALL | wxEXPAND, 5);
973 wxFlexGridSizer* itemBoxSizerAux =
new wxFlexGridSizer(0, n_col, 0, 0);
974 itemBoxSizerAux->SetFlexibleDirection(wxBOTH);
975 itemBoxSizerAux->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
977 itemBoxSizerBottom->Add(itemBoxSizerAux, 1, wxALIGN_LEFT | wxALL, 5);
981 m_sdbBtmBtnsSizerPrint =
new wxButton(
this, wxID_ANY, _(
"Print"),
982 wxDefaultPosition, wxDefaultSize, 0);
983 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerPrint, 0,
984 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
985 m_sdbBtmBtnsSizerPrint->Enable(
true);
987 m_sdbBtmBtnsSizerPrint = NULL;
990 m_sdbBtmBtnsSizerSplit =
new wxButton(
this, wxID_ANY, _(
"Split"),
991 wxDefaultPosition, wxDefaultSize, 0);
992 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerSplit, 0,
993 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
994 m_sdbBtmBtnsSizerSplit->Enable(
false);
996 m_sdbBtmBtnsSizerExtend =
new wxButton(
this, wxID_ANY, _(
"Extend track"),
997 wxDefaultPosition, wxDefaultSize, 0);
998 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerExtend, 0,
999 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
1001 m_sdbBtmBtnsSizerToRoute =
new wxButton(
this, wxID_ANY, _(
"To route"),
1002 wxDefaultPosition, wxDefaultSize, 0);
1003 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerToRoute, 0,
1004 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
1006 m_sdbBtmBtnsSizerExport =
new wxButton(
this, wxID_ANY, _(
"Export"),
1007 wxDefaultPosition, wxDefaultSize, 0);
1008 itemBoxSizerAux->Add(m_sdbBtmBtnsSizerExport, 0,
1009 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5);
1011 wxBoxSizer* itemBoxSizer16 =
new wxBoxSizer(wxHORIZONTAL);
1012 itemBoxSizerBottom->Add(itemBoxSizer16, 0, wxALIGN_RIGHT | wxALL, 5);
1014 m_sdbBtmBtnsSizerCancel =
new wxButton(
this, wxID_CANCEL, _(
"Cancel"),
1015 wxDefaultPosition, wxDefaultSize, 0);
1016 itemBoxSizer16->Add(m_sdbBtmBtnsSizerCancel, 0, wxALIGN_BOTTOM | wxALL, 5);
1018 m_sdbBtmBtnsSizerOK =
1019 new wxButton(
this, wxID_OK, _(
"OK"), wxDefaultPosition, wxDefaultSize, 0);
1020 itemBoxSizer16->Add(m_sdbBtmBtnsSizerOK, 0, wxALIGN_BOTTOM | wxALL, 5);
1021 m_sdbBtmBtnsSizerOK->SetDefault();
1025 ((wxWindowBase*)m_stName)->GetSize(&w1, &h);
1026 ((wxWindowBase*)m_stFrom)->GetSize(&w2, &h);
1027 ((wxWindowBase*)m_stName)->SetMinSize(wxSize(wxMax(w1, w2), h));
1028 ((wxWindowBase*)m_stFrom)->SetMinSize(wxSize(wxMax(w1, w2), h));
1030 m_panelBasic->SetScrollRate(5, 5);
1031 m_panelAdvanced->SetScrollRate(5, 5);
1034void TrackPropDlg::SetTrackAndUpdate(
Track* pt) {
1037 m_lcPoints->DeleteAllItems();
1039 if (m_pMyLinkList)
delete m_pMyLinkList;
1040 m_pMyLinkList =
new HyperlinkList();
1042 for (
Hyperlink* link : *m_pTrack->m_TrackHyperlinkList) {
1044 h->DescrText = link->DescrText;
1045 h->Link = link->Link;
1046 h->LType = link->LType;
1048 m_pMyLinkList->push_back(h);
1056void TrackPropDlg::InitializeList() {
1057 if (NULL == m_pTrack)
return;
1059 m_lcPoints->m_pTrack = m_pTrack;
1061 if (m_pTrack->GetnPoints()) {
1064 m_lcPoints->m_LMT_Offset = long((prp->m_lon) * 3600. / 15.);
1066 m_lcPoints->m_LMT_Offset = 0;
1069 if (m_lcPoints->IsVirtual())
1070 m_lcPoints->SetItemCount(m_pTrack->GetnPoints());
1073 for (
int in = 0; in < m_pTrack->GetnPoints(); in++) {
1077 m_lcPoints->InsertItem(item);
1078 for (
int j = 0; j < 7; j++) {
1080 item.SetText(m_lcPoints->OnGetItemText(in, j));
1081 m_lcPoints->SetItem(item);
1088 if (NULL == m_pTrack)
return false;
1090 ::wxBeginBusyCursor();
1092 if (m_scrolledWindowLinks) {
1093 wxWindowList kids = m_scrolledWindowLinks->GetChildren();
1094 for (
unsigned int i = 0; i < kids.GetCount(); i++) {
1095 wxWindowListNode* node = kids.Item(i);
1096 wxWindow* win = node->GetData();
1098 auto link_win =
dynamic_cast<wxHyperlinkCtrl*
>(win);
1100 link_win->Disconnect(
1101 wxEVT_COMMAND_HYPERLINK,
1102 wxHyperlinkEventHandler(TrackPropDlg::OnHyperLinkClick));
1103 link_win->Disconnect(
1105 wxMouseEventHandler(TrackPropDlg::m_hyperlinkContextMenu));
1110 int NbrOfLinks = m_pTrack->m_TrackHyperlinkList->size();
1111 HyperlinkList* list = m_pTrack->m_TrackHyperlinkList;
1113 if (NbrOfLinks > 0) {
1114 for (
auto it = list->begin(); it != list->end(); ++it) {
1116 wxString Link = link->Link;
1117 wxString Descr = link->DescrText;
1119 wxHyperlinkCtrl* ctrl =
new wxHyperlinkCtrl(
1120 m_scrolledWindowLinks, wxID_ANY, Descr, Link, wxDefaultPosition,
1121 wxDefaultSize, wxHL_DEFAULT_STYLE);
1122 ctrl->Connect(wxEVT_COMMAND_HYPERLINK,
1123 wxHyperlinkEventHandler(TrackPropDlg::OnHyperLinkClick),
1125 if (!m_pTrack->m_bIsInLayer)
1128 wxMouseEventHandler(TrackPropDlg::m_hyperlinkContextMenu), NULL,
1131 bSizerLinks->Add(ctrl, 0, wxALL, 5);
1134 bSizerLinks->Fit(m_scrolledWindowLinks);
1137 m_tName->SetValue(m_pTrack->GetName());
1138 m_tFrom->SetValue(m_pTrack->m_TrackStartString);
1139 m_tTo->SetValue(m_pTrack->m_TrackEndString);
1140 if (m_tDescription) m_tDescription->SetValue(m_pTrack->m_TrackDescription);
1142 m_tTotDistance->SetValue(
"");
1143 m_tTimeEnroute->SetValue(
"");
1145 m_sdbBtmBtnsSizerSplit->Enable(
false);
1146 m_sdbBtmBtnsSizerExtend->Enable(
false);
1149 TrackPoint* last_point = m_pTrack->GetLastPoint();
1150 TrackPoint* first_point = m_pTrack->GetPoint(0);
1151 double trackLength = m_pTrack->Length();
1152 double total_seconds = 0.;
1154 wxString speed(
"--");
1156 if (last_point && first_point) {
1163 if (total_seconds != 0.) {
1164 m_avgspeed = trackLength / total_seconds * 3600;
1168 speed.Printf(
"%5.2f", toUsrSpeed(m_avgspeed));
1172 m_tAvgSpeed->SetValue(speed);
1176 slen.Printf(
"%5.2f " + getUsrDistanceUnit(),
toUsrDistance(trackLength));
1178 m_tTotDistance->SetValue(slen);
1182 wxTimeSpan time(0, 0, (
int)total_seconds, 0);
1184 if (total_seconds > 3600. * 24.)
1185 time_form = time.Format(
"%H:%M");
1186 else if (total_seconds > 0.)
1187 time_form = time.Format(
"%H:%M");
1190 m_tTimeEnroute->SetValue(time_form);
1192 m_cbShow->SetValue(m_pTrack->IsVisible());
1194 if (m_pTrack->m_Colour ==
"")
1195 m_cColor->Select(0);
1197 for (
unsigned int i = 0; i <
sizeof(::GpxxColorNames) /
sizeof(wxString);
1199 if (m_pTrack->m_Colour == ::GpxxColorNames[i]) {
1200 m_cColor->Select(i + 1);
1206 for (
unsigned int i = 0; i <
sizeof(::StyleValues) /
sizeof(
int); i++) {
1207 if (m_pTrack->m_style == ::StyleValues[i]) {
1208 m_cStyle->Select(i);
1213 for (
unsigned int i = 0; i <
sizeof(::WidthValues) /
sizeof(
int); i++) {
1214 if (m_pTrack->m_width == ::WidthValues[i]) {
1215 m_cWidth->Select(i);
1220 if (m_pTrack->m_bIsInLayer) {
1221 m_tName->SetEditable(
false);
1222 m_tFrom->SetEditable(
false);
1223 m_tTo->SetEditable(
false);
1224 if (m_tDescription) m_tDescription->SetEditable(
false);
1225 m_cbShow->Enable(
false);
1226 m_cColor->Enable(
false);
1227 m_cStyle->Enable(
false);
1228 m_cWidth->Enable(
false);
1229 m_sdbBtmBtnsSizerExtend->Enable(
false);
1230 m_sdbBtmBtnsSizerSplit->Enable(
false);
1231 SetTitle(wxString::Format(
"%s, %s: %d", _(
"Track properties"),
"Layer",
1232 m_pTrack->m_LayerID));
1234 m_tName->SetEditable(
true);
1235 m_tFrom->SetEditable(
true);
1236 m_tTo->SetEditable(
true);
1237 if (m_tDescription) m_tDescription->SetEditable(
true);
1238 m_cbShow->Enable(
true);
1239 m_cColor->Enable(
true);
1240 m_cStyle->Enable(
true);
1241 m_cWidth->Enable(
true);
1243 m_sdbBtmBtnsSizerExtend->Enable(IsThisTrackExtendable());
1245 SetTitle(_(
"Track properties"));
1248 ::wxEndBusyCursor();
1253bool TrackPropDlg::IsThisTrackExtendable() {
1254 m_pExtendTrack = NULL;
1255 m_pExtendPoint = NULL;
1260 TrackPoint* pLastPoint = m_pTrack->GetPoint(0);
1266 if (ptrack->IsVisible() && (ptrack->m_GUID != m_pTrack->m_GUID)) {
1267 TrackPoint* track_node = ptrack->GetLastPoint();
1271 if (!m_pExtendPoint ||
1273 m_pExtendPoint = track_node;
1274 m_pExtendTrack = ptrack;
1281 if (m_pExtendTrack) {
1282 return (!m_pExtendTrack->m_bIsInLayer);
1288void TrackPropDlg::OnExtendBtnClick(wxCommandEvent& event) {
1289 TrackPoint* pFirstPoint = m_pTrack->GetPoint(0);
1291 if (IsThisTrackExtendable()) {
1296 pSelect->DeleteAllSelectableTrackSegments(m_pExtendTrack);
1297 m_pExtendTrack->Clone(m_pTrack, begin, m_pTrack->GetnPoints(), _(
"_plus"));
1298 pSelect->AddAllSelectableTrackSegments(m_pExtendTrack);
1299 pSelect->DeleteAllSelectableTrackSegments(m_pTrack);
1300 NavObj_dB::GetInstance().DeleteTrack(m_pTrack);
1303 SetTrackAndUpdate(m_pExtendTrack);
1304 NavObj_dB::GetInstance().UpdateTrack(m_pTrack);
1307 if (pRouteManagerDialog && pRouteManagerDialog->IsShown()) {
1308 pRouteManagerDialog->UpdateTrkListCtrl();
1313void TrackPropDlg::OnSplitBtnClick(wxCommandEvent& event) {
1314 m_sdbBtmBtnsSizerSplit->Enable(
false);
1316 if (m_pTrack->m_bIsInLayer) {
1320 if ((m_nSelected > 1) && (m_nSelected < m_pTrack->GetnPoints())) {
1323 pHead->Clone(m_pTrack, 0, m_nSelected - 1, _(
"_A"));
1324 pTail->Clone(m_pTrack, m_nSelected - 1, m_pTrack->GetnPoints(), _(
"_B"));
1327 NavObj_dB::GetInstance().InsertTrack(pHead);
1330 NavObj_dB::GetInstance().InsertTrack(pTail);
1332 NavObj_dB::GetInstance().DeleteTrack(m_pTrack);
1334 pSelect->DeleteAllSelectableTrackSegments(m_pTrack);
1336 pSelect->AddAllSelectableTrackSegments(pTail);
1337 pSelect->AddAllSelectableTrackSegments(pHead);
1339 SetTrackAndUpdate(pTail);
1342 if (pRouteManagerDialog && pRouteManagerDialog->IsShown()) {
1343 pRouteManagerDialog->UpdateTrkListCtrl();
1348void TrackPropDlg::OnTrackPropCopyTxtClick(wxCommandEvent& event) {
1349 wxString tab(
"\t", wxConvUTF8);
1350 wxString eol(
"\n", wxConvUTF8);
1353 csvString << this->GetTitle() << eol << _(
"Name") << tab
1354 << m_pTrack->GetName() << eol << _(
"Depart From") << tab
1355 << m_pTrack->m_TrackStartString << eol << _(
"Destination") << tab
1356 << m_pTrack->m_TrackEndString << eol << _(
"Total distance") << tab
1357 << m_tTotDistance->GetValue() << eol << _(
"Speed") << tab
1358 << m_tAvgSpeed->GetValue() << eol
1359 << _(
"Departure Time") +
" " + _(
"(m/d/y h:m)") << tab
1361 << _(
"Time enroute") << tab << m_tTimeEnroute->GetValue() << eol
1366 noCols = m_lcPoints->GetColumnCount();
1367 noRows = m_lcPoints->GetItemCount();
1369 item.SetMask(wxLIST_MASK_TEXT);
1371 for (
int i = 0; i < noCols; i++) {
1372 m_lcPoints->GetColumn(i, item);
1373 csvString << item.GetText() << tab;
1377 for (
int j = 0; j < noRows; j++) {
1379 for (
int i = 0; i < noCols; i++) {
1381 m_lcPoints->GetItem(item);
1382 csvString << item.GetText() << tab;
1387 if (wxTheClipboard->Open()) {
1388 wxTextDataObject* data =
new wxTextDataObject;
1389 data->SetText(csvString);
1390 wxTheClipboard->SetData(data);
1391 wxTheClipboard->Close();
1395void TrackPropDlg::OnPrintBtnClick(wxCommandEvent& event) {
1396 static std::set<int> s_options;
1398 int result = dlg.ShowModal();
1400 if (result == wxID_OK) {
1401 dlg.GetSelected(s_options);
1404 printer.Initialize(wxPORTRAIT);
1405 printer.EnablePageNumbers(
true);
1406 printer.Print(
this, &printout);
1410void TrackPropDlg::OnTrackPropRightClick(wxListEvent& event) {
1413 wxMenuItem* copyItem =
1414 menu.Append(ID_RCLK_MENU_COPY_TEXT, _(
"&Copy all as text"));
1419void TrackPropDlg::OnTrackPropListClick(wxListEvent& event) {
1425 m_lcPoints->GetNextItem(itemno, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
1429 selected_no = itemno;
1431 m_pTrack->m_HighlightedTrackPoint = -1;
1434 TrackPoint* prp = m_pTrack->GetPoint(itemno);
1436 m_pTrack->m_HighlightedTrackPoint = itemno;
1438 if (!(m_pTrack->m_bIsInLayer) && !(m_pTrack ==
g_pActiveTrack)) {
1439 m_nSelected = selected_no + 1;
1440 m_sdbBtmBtnsSizerSplit->Enable(
true);
1442 if (gFrame->GetFocusCanvas()) {
1443 gFrame->JumpToPosition(gFrame->GetFocusCanvas(), prp->m_lat, prp->m_lon,
1447 if (m_lcPoints) m_lcPoints->SetFocus();
1451 if (selected_no == 0 || selected_no == m_pTrack->GetnPoints() - 1)
1452 m_sdbBtmBtnsSizerSplit->Enable(
false);
1455void TrackPropDlg::OnTrackPropMenuSelected(wxCommandEvent& event) {
1456 switch (event.GetId()) {
1457 case ID_RCLK_MENU_COPY_TEXT:
1458 OnTrackPropCopyTxtClick(event);
1463void TrackPropDlg::OnToRouteBtnClick(wxCommandEvent& event) {
1464 pRouteManagerDialog->TrackToRoute(m_pTrack);
1465 if (NULL != pRouteManagerDialog && pRouteManagerDialog->IsVisible())
1466 pRouteManagerDialog->UpdateRouteListCtrl();
1469void TrackPropDlg::OnExportBtnClick(wxCommandEvent& event) {
1470 wxString suggested_name = _(
"track");
1471 std::vector<Track*> list = {m_pTrack};
1472 if (m_pTrack->GetName() !=
"") suggested_name = m_pTrack->GetName();
1473 ExportGPXTracks(
this, &list, suggested_name);
1476void TrackPropDlg::m_hyperlinkContextMenu(wxMouseEvent& event) {
1477 m_pEditedLink = (wxHyperlinkCtrl*)event.GetEventObject();
1479 wxEVT_COMMAND_MENU_SELECTED,
1480 (wxObjectEventFunction)(wxEventFunction)&TrackPropDlg::PopupMenuHandler);
1481 m_scrolledWindowLinks->PopupMenu(
1482 m_menuLink, m_pEditedLink->GetPosition().x + event.GetPosition().x,
1483 m_pEditedLink->GetPosition().y + event.GetPosition().y);
1486void TrackPropDlg::PopupMenuHandler(wxCommandEvent& event) {
1487 switch (event.GetId()) {
1488 case ID_TRK_MENU_ADD:
1491 case ID_TRK_MENU_EDIT:
1494 case ID_TRK_MENU_DELETE:
1495 OnDeleteLink(event);
1502void TrackPropDlg::OnDeleteLink(wxCommandEvent& event) {
1503 wxString findurl = m_pEditedLink->GetURL();
1504 wxString findlabel = m_pEditedLink->GetLabel();
1506 wxWindowList kids = m_scrolledWindowLinks->GetChildren();
1507 for (
unsigned int i = 0; i < kids.GetCount(); i++) {
1508 wxWindowListNode* node = kids.Item(i);
1509 wxWindow* win = node->GetData();
1511 auto link_win =
dynamic_cast<wxHyperlinkCtrl*
>(win);
1513 link_win->Disconnect(
1514 wxEVT_COMMAND_HYPERLINK,
1515 wxHyperlinkEventHandler(TrackPropDlg::OnHyperLinkClick));
1516 link_win->Disconnect(
1518 wxMouseEventHandler(TrackPropDlg::m_hyperlinkContextMenu));
1523 HyperlinkList* list = m_pTrack->m_TrackHyperlinkList;
1524 auto nodeToDelete = list->end();
1525 for (
auto it = list->begin(); it != list->end(); it++) {
1527 wxString Link = link->Link;
1528 wxString Descr = link->DescrText;
1529 if (Link == findurl &&
1530 (Descr == findlabel || (Link == findlabel && Descr ==
"")))
1533 wxHyperlinkCtrl* ctrl =
new wxHyperlinkCtrl(
1534 m_scrolledWindowLinks, wxID_ANY, Descr, Link, wxDefaultPosition,
1535 wxDefaultSize, wxHL_DEFAULT_STYLE);
1536 ctrl->Connect(wxEVT_COMMAND_HYPERLINK,
1537 wxHyperlinkEventHandler(TrackPropDlg::OnHyperLinkClick),
1539 ctrl->Connect(wxEVT_RIGHT_DOWN,
1540 wxMouseEventHandler(TrackPropDlg::m_hyperlinkContextMenu),
1543 bSizerLinks->Add(ctrl, 0, wxALL, 5);
1546 if (nodeToDelete != list->end()) list->erase(nodeToDelete);
1547 m_scrolledWindowLinks->InvalidateBestSize();
1548 m_scrolledWindowLinks->Layout();
1549 sbSizerLinks->Layout();
1553void TrackPropDlg::OnEditLink(wxCommandEvent& event) {
1554 wxString findurl = m_pEditedLink->GetURL();
1555 wxString findlabel = m_pEditedLink->GetLabel();
1558 LinkPropDlg->m_textCtrlLinkDescription->SetValue(findlabel);
1559 LinkPropDlg->m_textCtrlLinkUrl->SetValue(findurl);
1560 DimeControl(LinkPropDlg);
1561 LinkPropDlg->ShowWindowModalThenDo([
this, LinkPropDlg, findurl,
1562 findlabel](
int retcode) {
1563 if (retcode == wxID_OK) {
1564 int NbrOfLinks = m_pTrack->m_TrackHyperlinkList->size();
1565 HyperlinkList* list = m_pTrack->m_TrackHyperlinkList;
1567 if (NbrOfLinks > 0) {
1568 for (
auto it = list->begin(); it != list->end(); it++) {
1570 wxString Link = link->Link;
1571 wxString Descr = link->DescrText;
1572 if (Link == findurl &&
1573 (Descr == findlabel || (Link == findlabel && Descr ==
""))) {
1574 link->Link = LinkPropDlg->m_textCtrlLinkUrl->GetValue();
1576 LinkPropDlg->m_textCtrlLinkDescription->GetValue();
1577 wxHyperlinkCtrl* h =
1578 (wxHyperlinkCtrl*)m_scrolledWindowLinks->FindWindowByLabel(
1581 h->SetLabel(LinkPropDlg->m_textCtrlLinkDescription->GetValue());
1582 h->SetURL(LinkPropDlg->m_textCtrlLinkUrl->GetValue());
1588 m_scrolledWindowLinks->InvalidateBestSize();
1589 m_scrolledWindowLinks->Layout();
1590 sbSizerLinks->Layout();
1596void TrackPropDlg::OnAddLink(wxCommandEvent& event) {
1598 LinkPropDlg->m_textCtrlLinkDescription->SetValue(
"");
1599 LinkPropDlg->m_textCtrlLinkUrl->SetValue(
"");
1600 DimeControl(LinkPropDlg);
1601 LinkPropDlg->ShowWindowModalThenDo([
this, LinkPropDlg](
int retcode) {
1602 if (retcode == wxID_OK) {
1603 wxString desc = LinkPropDlg->m_textCtrlLinkDescription->GetValue();
1604 if (desc ==
"") desc = LinkPropDlg->m_textCtrlLinkUrl->GetValue();
1605 wxHyperlinkCtrl* ctrl =
new wxHyperlinkCtrl(
1606 m_scrolledWindowLinks, wxID_ANY, desc,
1607 LinkPropDlg->m_textCtrlLinkUrl->GetValue(), wxDefaultPosition,
1608 wxDefaultSize, wxHL_DEFAULT_STYLE);
1609 ctrl->Connect(wxEVT_COMMAND_HYPERLINK,
1610 wxHyperlinkEventHandler(TrackPropDlg::OnHyperLinkClick),
1612 ctrl->Connect(wxEVT_RIGHT_DOWN,
1613 wxMouseEventHandler(TrackPropDlg::m_hyperlinkContextMenu),
1616 bSizerLinks->Add(ctrl, 0, wxALL, 5);
1617 bSizerLinks->Fit(m_scrolledWindowLinks);
1621 h->DescrText = LinkPropDlg->m_textCtrlLinkDescription->GetValue();
1622 h->Link = LinkPropDlg->m_textCtrlLinkUrl->GetValue();
1624 m_pTrack->m_TrackHyperlinkList->push_back(h);
1629 m_scrolledWindowLinks->InvalidateBestSize();
1630 m_scrolledWindowLinks->Layout();
1631 sbSizerLinks->Layout();
1636void TrackPropDlg::OnEditLinkToggle(wxCommandEvent& event) {
1637 if (m_toggleBtnEdit->GetValue())
1638 m_staticTextEditEnabled->SetLabel(_(
"Links are opened for editing."));
1640 m_staticTextEditEnabled->SetLabel(
1641 _(
"Links are opened in the default browser."));
1645void TrackPropDlg::OnHyperLinkClick(wxHyperlinkEvent& event) {
1646 if (m_toggleBtnEdit->GetValue()) {
1647 m_pEditedLink = (wxHyperlinkCtrl*)event.GetEventObject();
1662 wxString cc =
event.GetURL();
1663 if (cc.Find(
"#") != wxNOT_FOUND) {
1664 wxRegKey RegKey(wxString(
"HKEY_CLASSES_ROOT\\HTTP\\shell\\open\\command"));
1665 if (RegKey.Exists()) {
1666 wxString command_line;
1667 RegKey.QueryValue(wxString(
""), command_line);
1670 command_line.Replace(wxString(
"\""), wxString(
""));
1673 int l = command_line.Find(
".exe");
1674 if (wxNOT_FOUND == l) l = command_line.Find(
".EXE");
1676 if (wxNOT_FOUND != l) {
1677 wxString cl = command_line.Mid(0, l + 4);
1688 wxString url =
event.GetURL();
1689 url.Replace(
" ",
"%20");
1690 ::wxLaunchDefaultBrowser(url);
1695void TrackPropDlg::OnShowTimeTZ(wxCommandEvent& event) {
1696 if (m_rbShowTimeUTC && m_rbShowTimeUTC->GetValue())
1705 throw std::logic_error(
"Unexpected time zone selection");
1706 m_lcPoints->DeleteAllItems();
1710bool TrackPropDlg::SaveChanges() {
1711 if (m_pTrack && !m_pTrack->m_bIsInLayer) {
1713 m_pTrack->SetName(m_tName->GetValue());
1714 m_pTrack->m_TrackStartString = m_tFrom->GetValue();
1715 m_pTrack->m_TrackEndString = m_tTo->GetValue();
1717 m_pTrack->m_TrackDescription = m_tDescription->GetValue();
1718 m_pTrack->SetVisible(m_cbShow->GetValue());
1719 if (m_cColor->GetSelection() == 0)
1720 m_pTrack->m_Colour =
"";
1722 m_pTrack->m_Colour = ::GpxxColorNames[m_cColor->GetSelection() - 1];
1723 m_pTrack->m_style = (wxPenStyle)::StyleValues[m_cStyle->GetSelection()];
1724 m_pTrack->m_width = ::WidthValues[m_cWidth->GetSelection()];
1726 NavObj_dB::GetInstance().UpdateDBTrackAttributes(m_pTrack);
1728 pConfig->UpdateSettings();
1731 if (m_pTrack && m_pTrack->IsRunning()) {
1733 v[
"Changed"] =
true;
1734 v[
"Name"] = m_pTrack->GetName();
1735 v[
"GUID"] = m_pTrack->m_GUID;
1736 wxString msg_id(
"OCPN_TRK_ACTIVATED");
1737 SendJSONMessageToAllPlugins(msg_id, v);
1743void TrackPropDlg::OnOKBtnClick(wxCommandEvent& event) {
1750 if (b_found_track) {
1752 m_pTrack->ClearHighlights();
1755 m_bStartNow =
false;
1757 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1758 pRouteManagerDialog->UpdateTrkListCtrl();
1761 gFrame->InvalidateAllGL();
1762 gFrame->RefreshAllCanvas(
false);
1767void TrackPropDlg::OnCancelBtnClick(wxCommandEvent& event) {
1771 if (b_found_track) m_pTrack->ClearHighlights();
1774 gFrame->InvalidateAllGL();
1775 gFrame->RefreshAllCanvas(
false);
1784OCPNTrackListCtrl::OCPNTrackListCtrl(wxWindow* parent, wxWindowID
id,
1785 const wxPoint& pos,
const wxSize& size,
1787 : wxListCtrl(parent, id, pos, size, style) {
1793OCPNTrackListCtrl::~OCPNTrackListCtrl() {}
1796 if (m_pTrack->GetnPoints()) {
1798 if (prp)
return prp->m_lon;
1803wxString OCPNTrackListCtrl::OnGetItemText(
long item,
long column)
const {
1806 if (item < 0 || item >= m_pTrack->GetnPoints())
return "";
1808 TrackPoint* this_point = m_pTrack->GetPoint(item);
1809 TrackPoint* prev_point = item > 0 ? m_pTrack->GetPoint(item - 1) : NULL;
1811 if (!this_point)
return "";
1813 double gt_brg, gt_leg_dist;
1819 slat = prev_point->m_lat;
1820 slon = prev_point->m_lon;
1828 ret.Printf(
"%ld", item);
1832 DistanceBearingMercator(this_point->m_lat, this_point->m_lon, slat, slon,
1833 >_brg, >_leg_dist);
1835 ret.Printf(
"%6.2f " + getUsrDistanceUnit(),
toUsrDistance(gt_leg_dist));
1839 DistanceBearingMercator(this_point->m_lat, this_point->m_lon, slat, slon,
1840 >_brg, >_leg_dist);
1841 ret.Printf(
"%03.0f %cT", gt_brg, 0x00B0);
1845 ret = toSDMM(1, this_point->m_lat, 1);
1849 ret = toSDMM(2, this_point->m_lon, 1);
1854 if (timestamp.IsValid()) {
1859 ret = ocpn::toUsrDateTimeFormat(timestamp.FromUTC(), opts);
1867 DistanceBearingMercator(this_point->m_lat, this_point->m_lon, slat,
1868 slon, >_brg, >_leg_dist);
1875 if (seconds > 0.) speed = gt_leg_dist / seconds * 3600;
1877 ret.Printf(
"%5.2f", toUsrSpeed(speed));
1889int OCPNTrackListCtrl::OnGetItemColumnImage(
long item,
long column)
const {
Generic Chart canvas base.
float GetVPScale()
Return the ViewPort scale factor, in physical pixels per meter.
int m_tz_selection
The timezone to use when formatting date/time.
double getStartPointLongitude() const
Return the longitude at the start point of the track.
static PrintDialog & GetInstance()
Get instance to handle the print process,.
Represents a single point in a track.
wxDateTime GetCreateTime(void)
Retrieves the creation timestamp of a track point as a wxDateTime object.
Input dialog with track print selection.
Printout a table with track selected information.
wxRadioButton * m_rbShowTimeLocal
Use Local Mean Time (LMT) at the location to format date/time.
wxRadioButton * m_rbShowTimePC
Use system timezone to format date/time, i.e.
wxRadioButton * m_rbShowTimeGlobalSettings
Honor OpenCPN global setting to format date/time.
Represents a track, which is a series of connected track points.
The JSON value class implementation.
std::vector< OCPN_MonitorInfo > g_monitor_info
Information about the monitors connected to the system.
wxFont * GetOCPNScaledFont(wxString item, int default_size)
Retrieves a font from FontMgr, optionally scaled for physical readability.
General purpose GUI support.
size_t g_current_monitor
Current monitor displaying main application frame.
Miscellaneous globals primarely used by gui layer, not persisted in configuration file.
MySQL based storage for routes, tracks, etc.
double toUsrDistance(double nm_distance, int unit)
Convert a distance from nautical miles (NMi) to user display units.
Navigation Utility Functions without GUI dependencies.
double gLat
Vessel's current latitude in decimal degrees.
double gLon
Vessel's current longitude in decimal degrees.
Position, course, speed, etc.
Tools to send data to plugins.
PlugInManager and helper classes – Mostly gui parts (dialogs) and plugin API stuff.
Generic, styled prit dialog.
#define LMTINPUT
Format date/time using the remote location LMT time.
#define GLOBAL_SETTINGS_INPUT
Format date/time according to global OpenCPN settings.
#define UTCINPUT
Format date/time in UTC.
#define LTINPUT
Format date/time using timezone configured in the operating system./*#end#*/.
Select * pSelect
Global instance.
Selected route, segment, waypoint, etc.
ActiveTrack * g_pActiveTrack
global instance
std::vector< Track * > g_TrackList
Global instance.
Recorded track abstraction.
#define LMTINPUT
Format date/time using Local Mean Time (LMT) at a given point./*#end#*/.
#define GLOBAL_SETTINGS_INPUT
Format date/time according to global OpenCPN settings.
#define UTCINPUT
Format date/time in UTC.
#define LTINPUT
Format date/time using timezone configured in the operating system./*#end#*/.
TrackPropDlg * pTrackPropDialog
Global instance.