OpenCPN Partial API docs
Loading...
Searching...
No Matches
GoToPositionDialog.cpp
1/******************************************************************************
2 *
3 * Project: OpenCPN
4 *
5 ***************************************************************************
6 * Copyright (C) 2013 by David S. Register *
7 * *
8 * This program is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU General Public License as published by *
10 * the Free Software Foundation; either version 2 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This program is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU General Public License *
19 * along with this program; if not, write to the *
20 * Free Software Foundation, Inc., *
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
22 ***************************************************************************
23 */
24
25#include <wx/wxprec.h>
26#include <wx/sizer.h>
27#include <wx/stattext.h>
28#include <wx/button.h>
29#include <wx/textctrl.h>
30#include <wx/clipbrd.h>
31
32#include "GoToPositionDialog.h"
33#include "model/position_parser.h"
34#include "MarkInfo.h"
35#include "navutil.h"
36#include "chcanv.h"
37#include "ocpn_frame.h"
38
39extern MyFrame* gFrame;
40
41GoToPositionDialog* pGoToPositionDialog;
42
50BEGIN_EVENT_TABLE(GoToPositionDialog, wxDialog)
51
52
53
54EVT_BUTTON(ID_GOTOPOS_CANCEL, GoToPositionDialog::OnGoToPosCancelClick)
55EVT_BUTTON(ID_GOTOPOS_OK, GoToPositionDialog::OnGoToPosOkClick)
56EVT_COMMAND(ID_LATCTRL, EVT_LLCHANGE, GoToPositionDialog::OnPositionCtlUpdated)
57EVT_COMMAND(ID_LONCTRL, EVT_LLCHANGE, GoToPositionDialog::OnPositionCtlUpdated)
58
59
60
61END_EVENT_TABLE()
62
63
68
69GoToPositionDialog::GoToPositionDialog(wxWindow* parent, wxWindowID id,
70 const wxString& caption,
71 const wxPoint& pos, const wxSize& size,
72 long style) {
73 long wstyle =
74 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxFRAME_FLOAT_ON_PARENT;
75
76 Create(parent, id, caption, pos, size, wstyle);
77}
78
79GoToPositionDialog::~GoToPositionDialog() {
80 delete m_MarkLatCtl;
81 delete m_MarkLonCtl;
82}
83
88bool GoToPositionDialog::Create(wxWindow* parent, wxWindowID id,
89 const wxString& caption, const wxPoint& pos,
90 const wxSize& size, long style) {
91 SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS);
92 wxDialog::Create(parent, id, caption, pos, size, style);
93
94 m_hostCanvas = NULL;
95
97 GetSizer()->SetSizeHints(this);
98 Centre();
99
100 return TRUE;
101}
102
108 GoToPositionDialog* itemDialog1 = this;
109
110 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
111 itemDialog1->SetSizer(itemBoxSizer2);
112
113 wxStaticBox* itemStaticBoxSizer4Static =
114 new wxStaticBox(itemDialog1, wxID_ANY, _("Position"));
115
116 wxStaticBoxSizer* itemStaticBoxSizer4 =
117 new wxStaticBoxSizer(itemStaticBoxSizer4Static, wxVERTICAL);
118 itemBoxSizer2->Add(itemStaticBoxSizer4, 0, wxEXPAND | wxALL, 5);
119
120 wxStaticText* itemStaticText5 =
121 new wxStaticText(itemDialog1, wxID_STATIC, _("Latitude"),
122 wxDefaultPosition, wxDefaultSize, 0);
123 itemStaticBoxSizer4->Add(itemStaticText5, 0,
124 wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP, 5);
125
126 m_MarkLatCtl = new wxTextCtrl(itemDialog1, ID_LATCTRL, "", wxDefaultPosition,
127 wxSize(180, -1), 0);
128 itemStaticBoxSizer4->Add(
129 m_MarkLatCtl, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND,
130 5);
131
132 wxStaticText* itemStaticText6 =
133 new wxStaticText(itemDialog1, wxID_STATIC, _("Longitude"),
134 wxDefaultPosition, wxDefaultSize, 0);
135 itemStaticBoxSizer4->Add(itemStaticText6, 0,
136 wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP, 5);
137
138 m_MarkLonCtl = new wxTextCtrl(itemDialog1, ID_LONCTRL, "", wxDefaultPosition,
139 wxSize(180, -1), 0);
140 itemStaticBoxSizer4->Add(
141 m_MarkLonCtl, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND,
142 5);
143
144 wxBoxSizer* itemBoxSizer16 = new wxBoxSizer(wxHORIZONTAL);
145 itemBoxSizer2->Add(itemBoxSizer16, 0, wxALIGN_RIGHT | wxALL, 5);
146
147 m_CancelButton = new wxButton(itemDialog1, ID_GOTOPOS_CANCEL, _("Cancel"),
148 wxDefaultPosition, wxDefaultSize, 0);
149 itemBoxSizer16->Add(m_CancelButton, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
150
151 m_OKButton = new wxButton(itemDialog1, ID_GOTOPOS_OK, _("OK"),
152 wxDefaultPosition, wxDefaultSize, 0);
153 itemBoxSizer16->Add(m_OKButton, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
154 m_OKButton->SetDefault();
155
156 SetColorScheme((ColorScheme)0);
157}
158
159void GoToPositionDialog::SetColorScheme(ColorScheme cs) { DimeControl(this); }
160
161bool GoToPositionDialog::ShowToolTips() { return TRUE; }
162
163void GoToPositionDialog::OnGoToPosCancelClick(wxCommandEvent& event) {
164 Hide();
165 if (m_hostCanvas) m_hostCanvas->ReloadVP();
166
167 event.Skip();
168}
169
170void GoToPositionDialog::OnGoToPosOkClick(wxCommandEvent& event) {
171 double lat, lon;
172
173 if (m_MarkLatCtl->GetValue().Length() == 0) goto noGo;
174 if (m_MarkLonCtl->GetValue().Length() == 0) goto noGo;
175
176 lat = fromDMM(m_MarkLatCtl->GetValue());
177 lon = fromDMM(m_MarkLonCtl->GetValue());
178
179 if (lat == 0.0 && lon == 0.0) goto noGo;
180 if (lat > 80.0 || lat < -80.0) goto noGo;
181 if (lon > 180.0 || lon < -180.0) goto noGo;
182
183 if (m_hostCanvas)
184 gFrame->JumpToPosition(m_hostCanvas, lat, lon, m_hostCanvas->GetVPScale());
185 Hide();
186 event.Skip();
187 return;
188
189noGo:
190 wxBell();
191 event.Skip();
192 return;
193}
194
195void GoToPositionDialog::CheckPasteBufferForPosition() {
196 if (wxTheClipboard->Open()) {
197 wxTextDataObject data;
198 wxTheClipboard->GetData(data);
199 wxString pasteBuf = data.GetText();
200
201 PositionParser pparse(pasteBuf);
202
203 if (pparse.IsOk()) {
204 m_MarkLatCtl->SetValue(pparse.GetLatitudeString());
205 m_MarkLonCtl->SetValue(pparse.GetLongitudeString());
206 }
207 wxTheClipboard->Close();
208 }
209}
210
211void GoToPositionDialog::OnPositionCtlUpdated(wxCommandEvent& event) {
212 // We do not want to change the position on lat/lon now
213}
Generic Chart canvas base.
float GetVPScale()
Return the ViewPort scale factor, in physical pixels per meter.
Definition chcanv.h:466
bool Create(wxWindow *parent, wxWindowID id=SYMBOL_GOTOPOS_IDNAME, const wxString &caption=SYMBOL_GOTOPOS_TITLE, const wxPoint &pos=SYMBOL_GOTOPOS_POSITION, const wxSize &size=SYMBOL_GOTOPOS_SIZE, long style=SYMBOL_GOTOPOS_STYLE)
Creation.
GoToPositionDialog()
Constructors.
static bool ShowToolTips()
Should we show tooltips?
Main application frame.
Definition ocpn_frame.h:138