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"));
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() {
98 this->Disconnect(wxEVT_TIMER,
99 wxTimerEventHandler(iENCToolbar::StateTimerEvent), NULL,
103void iENCToolbar::SetColorScheme(ColorScheme cs) {
105 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
106 SetRangeToolBitmap();
107 ocpnFloatingToolbarDialog::SetColorScheme(cs);
108 m_ptoolbar->InvalidateBitmaps();
113void iENCToolbar::LoadToolBitmaps() {
114 wxString svgDir = g_Platform->GetSharedDataDir() +
"uidata" +
115 wxFileName::GetPathSeparator();
120 if (::wxFileExists(svgDir +
"iENC_All.svg")) {
121 m_bmAll =
LoadSVG(svgDir +
"iENC_All.svg", w, h);
122 m_bmMinimum =
LoadSVG(svgDir +
"iENC_Minimum.svg", w, h);
123 m_bmStandard =
LoadSVG(svgDir +
"iENC_Standard.svg", w, h);
124 m_bmUStd =
LoadSVG(svgDir +
"iENC_UserStd.svg", w, h);
125 m_bmRPlus =
LoadSVG(svgDir +
"iENC_RPlus.svg", w, h);
126 m_bmRMinus =
LoadSVG(svgDir +
"iENC_RMinus.svg", w, h);
128 wxLogMessage(
"Cannot find iENC icons at: " + svgDir);
130 m_bmMinimum = wxBitmap(96, 32);
131 m_bmStandard = wxBitmap(96, 32);
132 m_bmAll = wxBitmap(96, 32);
133 m_bmUStd = wxBitmap(96, 32);
134 m_bmRPlus = wxBitmap(96, 32);
135 m_bmRMinus = wxBitmap(96, 32);
139void iENCToolbar::OnToolLeftClick(wxCommandEvent &event) {
140 int itemId =
event.GetId();
144 enum _DisCat nset = STANDARD;
150 if (++m_nDensity > 3) m_nDensity = 0;
152 SetDensityToolBitmap(m_nDensity);
154 switch (m_nDensity) {
165 nset = MARINERS_STANDARD;
172 top_frame::Get()->SetENCDisplayCategory(acc, nset);
177 range = acc->GetCanvasRangeMeters();
178 range = wxRound(range * 10) / 10.;
180 if (range > 8000.) acc->SetCanvasRangeMeters(8000.);
182 acc->SetCanvasRangeMeters(4000.);
183 else if (range > 2000.)
184 acc->SetCanvasRangeMeters(2000.);
185 else if (range > 1600.)
186 acc->SetCanvasRangeMeters(1600.);
187 else if (range > 1200.)
188 acc->SetCanvasRangeMeters(1200.);
189 else if (range > 800.)
190 acc->SetCanvasRangeMeters(800.);
191 else if (range > 500.)
192 acc->SetCanvasRangeMeters(500.);
193 else if (range > 300.)
194 acc->SetCanvasRangeMeters(300.);
199 range = acc->GetCanvasRangeMeters();
200 range = wxRound(range * 10) / 10.;
203 acc->SetCanvasRangeMeters(300.);
204 else if (range < 500.)
205 acc->SetCanvasRangeMeters(500.);
206 else if (range < 800.)
207 acc->SetCanvasRangeMeters(800.);
208 else if (range < 1200.)
209 acc->SetCanvasRangeMeters(1200.);
210 else if (range < 1600.)
211 acc->SetCanvasRangeMeters(1600.);
212 else if (range < 2000.)
213 acc->SetCanvasRangeMeters(2000.);
214 else if (range < 4000.)
215 acc->SetCanvasRangeMeters(4000.);
216 else if (range < 8000.)
217 acc->SetCanvasRangeMeters(8000.);
224 m_ptoolbar->InvalidateBitmaps();
228void iENCToolbar::SetDensityToolBitmap(
int nDensity) {
229 int toolID = m_toolDensity->GetId();
232 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmMinimum, &m_bmMinimum);
233 else if (nDensity == 1)
234 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmStandard, &m_bmStandard);
235 else if (nDensity == 2)
236 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmAll, &m_bmAll);
237 else if (nDensity == 3)
238 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmUStd, &m_bmUStd);
241void iENCToolbar::SetRangeToolBitmap() {
243 dc.SelectObject(*m_pbmScratch);
244 dc.SetBackground(wxBrush(GetGlobalColor(
"DILG0")));
246 dc.DrawBitmap(m_bmRMinus, wxPoint(0, 0));
249 m_rangeFont = wxTheFontList->FindOrCreateFont(
250 12, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
252 wxString range_string;
253 range_string.Printf(
"%4.0fm", m_range);
255 dc.SetFont(*m_rangeFont);
259 int target_points = 12;
260 while (!good && (target_points > 4)) {
262 dc.GetTextExtent(range_string, &width, &height);
268 m_rangeFont = wxTheFontList->FindOrCreateFont(
269 target_points, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL,
270 wxFONTWEIGHT_NORMAL);
271 dc.SetFont(*m_rangeFont);
275 dc.SetTextForeground(*wxBLACK);
276 dc.SetBackgroundMode(wxTRANSPARENT);
278 dc.DrawText(range_string, 42, 8);
280 dc.SelectObject(wxNullBitmap);
282 m_ptoolbar->SetToolBitmaps(ID_RMINUS, m_pbmScratch, m_pbmScratch);
285void iENCToolbar::StateTimerEvent(wxTimerEvent &event) {
289 bool bRefresh =
false;
294 switch (acc->GetENCDisplayCategory()) {
304 case (MARINERS_STANDARD):
312 if (nset != m_nDensity) {
315 SetDensityToolBitmap(m_nDensity);
325 double range = acc->GetCanvasRangeMeters();
327 if (range != m_range) {
329 SetRangeToolBitmap();
335 m_ptoolbar->InvalidateBitmaps();
340 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.