35#include "iENCToolbar.h"
41#include "OCPNPlatform.h"
44#include "ocpn_frame.h"
46extern s52plib *ps52plib;
55iENCToolbar::iENCToolbar(wxWindow *parent, wxPoint position,
long orient,
60 wxSize a = m_bmMinimum.GetSize();
61 m_ptoolbar->SetToolBitmapSize(a);
63 m_pbmScratch =
new wxBitmap(a.x, a.y);
65 m_bmTemplate = m_bmRMinus;
68 m_ptoolbar->AddTool(ID_DENSITY,
"Density", m_bmMinimum, m_bmMinimum);
69 m_ptoolbar->AddTool(ID_RPLUS,
"RangePlus", m_bmRPlus, m_bmRPlus);
70 m_ptoolbar->AddTool(ID_RMINUS,
"RangeMinus", m_bmRMinus, m_bmRMinus);
72 SetCanToggleOrientation(
false);
73 EnableRolloverBitmaps(
false);
77 SetDensityToolBitmap(m_nDensity);
80 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
86 m_state_timer.SetOwner(
this, STATE_TIMER);
87 m_state_timer.Start(100, wxTIMER_CONTINUOUS);
88 this->Connect(wxEVT_TIMER, wxTimerEventHandler(iENCToolbar::StateTimerEvent),
92iENCToolbar::~iENCToolbar() {}
94void iENCToolbar::SetColorScheme(ColorScheme cs) {
96 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
98 ocpnFloatingToolbarDialog::SetColorScheme(cs);
99 m_ptoolbar->InvalidateBitmaps();
104void iENCToolbar::LoadToolBitmaps() {
105 wxString svgDir = g_Platform->GetSharedDataDir() +
"uidata" +
106 wxFileName::GetPathSeparator();
111 if (::wxFileExists(svgDir +
"iENC_All.svg")) {
112 m_bmAll = LoadSVG(svgDir +
"iENC_All.svg", w, h);
113 m_bmMinimum = LoadSVG(svgDir +
"iENC_Minimum.svg", w, h);
114 m_bmStandard = LoadSVG(svgDir +
"iENC_Standard.svg", w, h);
115 m_bmUStd = LoadSVG(svgDir +
"iENC_UserStd.svg", w, h);
116 m_bmRPlus = LoadSVG(svgDir +
"iENC_RPlus.svg", w, h);
117 m_bmRMinus = LoadSVG(svgDir +
"iENC_RMinus.svg", w, h);
119 wxLogMessage(
"Cannot find iENC icons at: " + svgDir);
121 m_bmMinimum = wxBitmap(96, 32);
122 m_bmStandard = wxBitmap(96, 32);
123 m_bmAll = wxBitmap(96, 32);
124 m_bmUStd = wxBitmap(96, 32);
125 m_bmRPlus = wxBitmap(96, 32);
126 m_bmRMinus = wxBitmap(96, 32);
130void iENCToolbar::OnToolLeftClick(wxCommandEvent &event) {
131 int itemId =
event.GetId();
135 enum _DisCat nset = STANDARD;
141 if (++m_nDensity > 3) m_nDensity = 0;
143 SetDensityToolBitmap(m_nDensity);
145 switch (m_nDensity) {
156 nset = MARINERS_STANDARD;
163 gFrame->SetENCDisplayCategory(cc, nset);
168 range = cc->GetCanvasRangeMeters();
169 range = wxRound(range * 10) / 10.;
171 if (range > 8000.) cc->SetCanvasRangeMeters(8000.);
173 cc->SetCanvasRangeMeters(4000.);
174 else if (range > 2000.)
175 cc->SetCanvasRangeMeters(2000.);
176 else if (range > 1600.)
177 cc->SetCanvasRangeMeters(1600.);
178 else if (range > 1200.)
179 cc->SetCanvasRangeMeters(1200.);
180 else if (range > 800.)
181 cc->SetCanvasRangeMeters(800.);
182 else if (range > 500.)
183 cc->SetCanvasRangeMeters(500.);
184 else if (range > 300.)
185 cc->SetCanvasRangeMeters(300.);
190 range = cc->GetCanvasRangeMeters();
191 range = wxRound(range * 10) / 10.;
194 cc->SetCanvasRangeMeters(300.);
195 else if (range < 500.)
196 cc->SetCanvasRangeMeters(500.);
197 else if (range < 800.)
198 cc->SetCanvasRangeMeters(800.);
199 else if (range < 1200.)
200 cc->SetCanvasRangeMeters(1200.);
201 else if (range < 1600.)
202 cc->SetCanvasRangeMeters(1600.);
203 else if (range < 2000.)
204 cc->SetCanvasRangeMeters(2000.);
205 else if (range < 4000.)
206 cc->SetCanvasRangeMeters(4000.);
207 else if (range < 8000.)
208 cc->SetCanvasRangeMeters(8000.);
215 m_ptoolbar->InvalidateBitmaps();
219void iENCToolbar::SetDensityToolBitmap(
int nDensity) {
220 int toolID = m_toolDensity->GetId();
223 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmMinimum, &m_bmMinimum);
224 else if (nDensity == 1)
225 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmStandard, &m_bmStandard);
226 else if (nDensity == 2)
227 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmAll, &m_bmAll);
228 else if (nDensity == 3)
229 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmUStd, &m_bmUStd);
232void iENCToolbar::SetRangeToolBitmap() {
234 dc.SelectObject(*m_pbmScratch);
235 dc.SetBackground(wxBrush(GetGlobalColor(
"DILG0")));
237 dc.DrawBitmap(m_bmRMinus, wxPoint(0, 0));
240 m_rangeFont = wxTheFontList->FindOrCreateFont(
241 12, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
243 wxString range_string;
244 range_string.Printf(
"%4.0fm", m_range);
246 dc.SetFont(*m_rangeFont);
250 int target_points = 12;
251 while (!good && (target_points > 4)) {
253 dc.GetTextExtent(range_string, &width, &height);
259 m_rangeFont = wxTheFontList->FindOrCreateFont(
260 target_points, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL,
261 wxFONTWEIGHT_NORMAL);
262 dc.SetFont(*m_rangeFont);
266 dc.SetTextForeground(*wxBLACK);
267 dc.SetBackgroundMode(wxTRANSPARENT);
269 dc.DrawText(range_string, 42, 8);
271 dc.SelectObject(wxNullBitmap);
273 m_ptoolbar->SetToolBitmaps(ID_RMINUS, m_pbmScratch, m_pbmScratch);
276void iENCToolbar::StateTimerEvent(wxTimerEvent &event) {
280 bool bRefresh =
false;
285 switch (gFrame->GetPrimaryCanvas()->GetENCDisplayCategory()) {
295 case (MARINERS_STANDARD):
303 if (nset != m_nDensity) {
306 SetDensityToolBitmap(m_nDensity);
316 double range = cc->GetCanvasRangeMeters();
318 if (range != m_range) {
320 SetRangeToolBitmap();
326 m_ptoolbar->InvalidateBitmaps();
331 m_state_timer.Start(500, wxTIMER_CONTINUOUS);
Generic Chart canvas base.
ChartCanvas - Main chart display and interaction component.
PlugInManager and helper classes – Mostly gui parts (dialogs) and plugin API stuff.