34#include <wx/dcmemory.h>
37#include <wx/filename.h>
51#include "user_colors.h"
59iENCToolbar::iENCToolbar(wxWindow *parent, wxPoint pos,
long orient,
64 wxSize a = m_bmMinimum.GetSize();
65 m_ptoolbar->SetToolBitmapSize(a);
67 m_pbmScratch =
new wxBitmap(a.x, a.y);
69 m_bmTemplate = m_bmRMinus;
72 m_ptoolbar->AddTool(ID_DENSITY,
"Density", m_bmMinimum, m_bmMinimum);
73 m_ptoolbar->AddTool(ID_RPLUS,
"RangePlus", m_bmRPlus, m_bmRPlus);
74 m_ptoolbar->AddTool(ID_RMINUS,
"RangeMinus", m_bmRMinus, m_bmRMinus);
76 SetCanToggleOrientation(
false);
77 EnableRolloverBitmaps(
false);
81 SetDensityToolBitmap(m_nDensity);
84 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
90 m_state_timer.SetOwner(
this, STATE_TIMER);
91 m_state_timer.Start(100, wxTIMER_CONTINUOUS);
92 this->Connect(wxEVT_TIMER, wxTimerEventHandler(iENCToolbar::StateTimerEvent),
96iENCToolbar::~iENCToolbar() {}
98void iENCToolbar::SetColorScheme(ColorScheme cs) {
100 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
101 SetRangeToolBitmap();
102 ocpnFloatingToolbarDialog::SetColorScheme(cs);
103 m_ptoolbar->InvalidateBitmaps();
108void iENCToolbar::LoadToolBitmaps() {
109 wxString svgDir = g_Platform->GetSharedDataDir() +
"uidata" +
110 wxFileName::GetPathSeparator();
115 if (::wxFileExists(svgDir +
"iENC_All.svg")) {
116 m_bmAll =
LoadSVG(svgDir +
"iENC_All.svg", w, h);
117 m_bmMinimum =
LoadSVG(svgDir +
"iENC_Minimum.svg", w, h);
118 m_bmStandard =
LoadSVG(svgDir +
"iENC_Standard.svg", w, h);
119 m_bmUStd =
LoadSVG(svgDir +
"iENC_UserStd.svg", w, h);
120 m_bmRPlus =
LoadSVG(svgDir +
"iENC_RPlus.svg", w, h);
121 m_bmRMinus =
LoadSVG(svgDir +
"iENC_RMinus.svg", w, h);
123 wxLogMessage(
"Cannot find iENC icons at: " + svgDir);
125 m_bmMinimum = wxBitmap(96, 32);
126 m_bmStandard = wxBitmap(96, 32);
127 m_bmAll = wxBitmap(96, 32);
128 m_bmUStd = wxBitmap(96, 32);
129 m_bmRPlus = wxBitmap(96, 32);
130 m_bmRMinus = wxBitmap(96, 32);
134void iENCToolbar::OnToolLeftClick(wxCommandEvent &event) {
135 int itemId =
event.GetId();
139 enum _DisCat nset = STANDARD;
145 if (++m_nDensity > 3) m_nDensity = 0;
147 SetDensityToolBitmap(m_nDensity);
149 switch (m_nDensity) {
160 nset = MARINERS_STANDARD;
167 top_frame::Get()->SetENCDisplayCategory(acc, nset);
172 range = acc->GetCanvasRangeMeters();
173 range = wxRound(range * 10) / 10.;
175 if (range > 8000.) acc->SetCanvasRangeMeters(8000.);
177 acc->SetCanvasRangeMeters(4000.);
178 else if (range > 2000.)
179 acc->SetCanvasRangeMeters(2000.);
180 else if (range > 1600.)
181 acc->SetCanvasRangeMeters(1600.);
182 else if (range > 1200.)
183 acc->SetCanvasRangeMeters(1200.);
184 else if (range > 800.)
185 acc->SetCanvasRangeMeters(800.);
186 else if (range > 500.)
187 acc->SetCanvasRangeMeters(500.);
188 else if (range > 300.)
189 acc->SetCanvasRangeMeters(300.);
194 range = acc->GetCanvasRangeMeters();
195 range = wxRound(range * 10) / 10.;
198 acc->SetCanvasRangeMeters(300.);
199 else if (range < 500.)
200 acc->SetCanvasRangeMeters(500.);
201 else if (range < 800.)
202 acc->SetCanvasRangeMeters(800.);
203 else if (range < 1200.)
204 acc->SetCanvasRangeMeters(1200.);
205 else if (range < 1600.)
206 acc->SetCanvasRangeMeters(1600.);
207 else if (range < 2000.)
208 acc->SetCanvasRangeMeters(2000.);
209 else if (range < 4000.)
210 acc->SetCanvasRangeMeters(4000.);
211 else if (range < 8000.)
212 acc->SetCanvasRangeMeters(8000.);
219 m_ptoolbar->InvalidateBitmaps();
223void iENCToolbar::SetDensityToolBitmap(
int nDensity) {
224 int toolID = m_toolDensity->GetId();
227 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmMinimum, &m_bmMinimum);
228 else if (nDensity == 1)
229 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmStandard, &m_bmStandard);
230 else if (nDensity == 2)
231 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmAll, &m_bmAll);
232 else if (nDensity == 3)
233 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmUStd, &m_bmUStd);
236void iENCToolbar::SetRangeToolBitmap() {
238 dc.SelectObject(*m_pbmScratch);
239 dc.SetBackground(wxBrush(GetGlobalColor(
"DILG0")));
241 dc.DrawBitmap(m_bmRMinus, wxPoint(0, 0));
244 m_rangeFont = wxTheFontList->FindOrCreateFont(
245 12, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
247 wxString range_string;
248 range_string.Printf(
"%4.0fm", m_range);
250 dc.SetFont(*m_rangeFont);
254 int target_points = 12;
255 while (!good && (target_points > 4)) {
257 dc.GetTextExtent(range_string, &width, &height);
263 m_rangeFont = wxTheFontList->FindOrCreateFont(
264 target_points, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL,
265 wxFONTWEIGHT_NORMAL);
266 dc.SetFont(*m_rangeFont);
270 dc.SetTextForeground(*wxBLACK);
271 dc.SetBackgroundMode(wxTRANSPARENT);
273 dc.DrawText(range_string, 42, 8);
275 dc.SelectObject(wxNullBitmap);
277 m_ptoolbar->SetToolBitmaps(ID_RMINUS, m_pbmScratch, m_pbmScratch);
280void iENCToolbar::StateTimerEvent(wxTimerEvent &event) {
284 bool bRefresh =
false;
289 auto acc = top_frame::Get()->GetAbstractPrimaryCanvas();
290 switch (acc->GetENCDisplayCategory()) {
300 case (MARINERS_STANDARD):
308 if (nset != m_nDensity) {
311 SetDensityToolBitmap(m_nDensity);
321 double range = acc->GetCanvasRangeMeters();
323 if (range != m_range) {
325 SetRangeToolBitmap();
331 m_ptoolbar->InvalidateBitmaps();
336 m_state_timer.Start(500, wxTIMER_CONTINUOUS);
Generic Chart canvas base.
Minimal ChartCAnvas interface with very little dependencies.
PlugInManager and helper classes – Mostly gui parts (dialogs) and plugin API stuff.
wxBitmap LoadSVG(const wxString filename, const unsigned int width, const unsigned int height, wxBitmap *default_bitmap, bool use_cache)
Load SVG file and return it's bitmap representation of requested size In case file can't be loaded an...
Abstract gFrame/MyFrame interface.