34#include <wx/dcmemory.h>
37#include <wx/filename.h>
45#include "ocpn_frame.h"
46#include "OCPNPlatform.h"
58iENCToolbar::iENCToolbar(wxWindow *parent, wxPoint position,
long orient,
63 wxSize a = m_bmMinimum.GetSize();
64 m_ptoolbar->SetToolBitmapSize(a);
66 m_pbmScratch =
new wxBitmap(a.x, a.y);
68 m_bmTemplate = m_bmRMinus;
71 m_ptoolbar->AddTool(ID_DENSITY,
"Density", m_bmMinimum, m_bmMinimum);
72 m_ptoolbar->AddTool(ID_RPLUS,
"RangePlus", m_bmRPlus, m_bmRPlus);
73 m_ptoolbar->AddTool(ID_RMINUS,
"RangeMinus", m_bmRMinus, m_bmRMinus);
75 SetCanToggleOrientation(
false);
76 EnableRolloverBitmaps(
false);
80 SetDensityToolBitmap(m_nDensity);
83 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
89 m_state_timer.SetOwner(
this, STATE_TIMER);
90 m_state_timer.Start(100, wxTIMER_CONTINUOUS);
91 this->Connect(wxEVT_TIMER, wxTimerEventHandler(iENCToolbar::StateTimerEvent),
95iENCToolbar::~iENCToolbar() {}
97void iENCToolbar::SetColorScheme(ColorScheme cs) {
99 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
100 SetRangeToolBitmap();
101 ocpnFloatingToolbarDialog::SetColorScheme(cs);
102 m_ptoolbar->InvalidateBitmaps();
107void iENCToolbar::LoadToolBitmaps() {
108 wxString svgDir = g_Platform->GetSharedDataDir() +
"uidata" +
109 wxFileName::GetPathSeparator();
114 if (::wxFileExists(svgDir +
"iENC_All.svg")) {
115 m_bmAll = LoadSVG(svgDir +
"iENC_All.svg", w, h);
116 m_bmMinimum = LoadSVG(svgDir +
"iENC_Minimum.svg", w, h);
117 m_bmStandard = LoadSVG(svgDir +
"iENC_Standard.svg", w, h);
118 m_bmUStd = LoadSVG(svgDir +
"iENC_UserStd.svg", w, h);
119 m_bmRPlus = LoadSVG(svgDir +
"iENC_RPlus.svg", w, h);
120 m_bmRMinus = LoadSVG(svgDir +
"iENC_RMinus.svg", w, h);
122 wxLogMessage(
"Cannot find iENC icons at: " + svgDir);
124 m_bmMinimum = wxBitmap(96, 32);
125 m_bmStandard = wxBitmap(96, 32);
126 m_bmAll = wxBitmap(96, 32);
127 m_bmUStd = wxBitmap(96, 32);
128 m_bmRPlus = wxBitmap(96, 32);
129 m_bmRMinus = wxBitmap(96, 32);
133void iENCToolbar::OnToolLeftClick(wxCommandEvent &event) {
134 int itemId =
event.GetId();
138 enum _DisCat nset = STANDARD;
144 if (++m_nDensity > 3) m_nDensity = 0;
146 SetDensityToolBitmap(m_nDensity);
148 switch (m_nDensity) {
159 nset = MARINERS_STANDARD;
166 gFrame->SetENCDisplayCategory(cc, nset);
171 range = cc->GetCanvasRangeMeters();
172 range = wxRound(range * 10) / 10.;
174 if (range > 8000.) cc->SetCanvasRangeMeters(8000.);
176 cc->SetCanvasRangeMeters(4000.);
177 else if (range > 2000.)
178 cc->SetCanvasRangeMeters(2000.);
179 else if (range > 1600.)
180 cc->SetCanvasRangeMeters(1600.);
181 else if (range > 1200.)
182 cc->SetCanvasRangeMeters(1200.);
183 else if (range > 800.)
184 cc->SetCanvasRangeMeters(800.);
185 else if (range > 500.)
186 cc->SetCanvasRangeMeters(500.);
187 else if (range > 300.)
188 cc->SetCanvasRangeMeters(300.);
193 range = cc->GetCanvasRangeMeters();
194 range = wxRound(range * 10) / 10.;
197 cc->SetCanvasRangeMeters(300.);
198 else if (range < 500.)
199 cc->SetCanvasRangeMeters(500.);
200 else if (range < 800.)
201 cc->SetCanvasRangeMeters(800.);
202 else if (range < 1200.)
203 cc->SetCanvasRangeMeters(1200.);
204 else if (range < 1600.)
205 cc->SetCanvasRangeMeters(1600.);
206 else if (range < 2000.)
207 cc->SetCanvasRangeMeters(2000.);
208 else if (range < 4000.)
209 cc->SetCanvasRangeMeters(4000.);
210 else if (range < 8000.)
211 cc->SetCanvasRangeMeters(8000.);
218 m_ptoolbar->InvalidateBitmaps();
222void iENCToolbar::SetDensityToolBitmap(
int nDensity) {
223 int toolID = m_toolDensity->GetId();
226 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmMinimum, &m_bmMinimum);
227 else if (nDensity == 1)
228 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmStandard, &m_bmStandard);
229 else if (nDensity == 2)
230 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmAll, &m_bmAll);
231 else if (nDensity == 3)
232 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmUStd, &m_bmUStd);
235void iENCToolbar::SetRangeToolBitmap() {
237 dc.SelectObject(*m_pbmScratch);
238 dc.SetBackground(wxBrush(GetGlobalColor(
"DILG0")));
240 dc.DrawBitmap(m_bmRMinus, wxPoint(0, 0));
243 m_rangeFont = wxTheFontList->FindOrCreateFont(
244 12, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
246 wxString range_string;
247 range_string.Printf(
"%4.0fm", m_range);
249 dc.SetFont(*m_rangeFont);
253 int target_points = 12;
254 while (!good && (target_points > 4)) {
256 dc.GetTextExtent(range_string, &width, &height);
262 m_rangeFont = wxTheFontList->FindOrCreateFont(
263 target_points, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL,
264 wxFONTWEIGHT_NORMAL);
265 dc.SetFont(*m_rangeFont);
269 dc.SetTextForeground(*wxBLACK);
270 dc.SetBackgroundMode(wxTRANSPARENT);
272 dc.DrawText(range_string, 42, 8);
274 dc.SelectObject(wxNullBitmap);
276 m_ptoolbar->SetToolBitmaps(ID_RMINUS, m_pbmScratch, m_pbmScratch);
279void iENCToolbar::StateTimerEvent(wxTimerEvent &event) {
283 bool bRefresh =
false;
288 switch (gFrame->GetPrimaryCanvas()->GetENCDisplayCategory()) {
298 case (MARINERS_STANDARD):
306 if (nset != m_nDensity) {
309 SetDensityToolBitmap(m_nDensity);
319 double range = cc->GetCanvasRangeMeters();
321 if (range != m_range) {
323 SetRangeToolBitmap();
329 m_ptoolbar->InvalidateBitmaps();
334 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.