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() {
101void iENCToolbar::SetColorScheme(ColorScheme cs) {
103 m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"DILG0"));
104 SetRangeToolBitmap();
105 ocpnFloatingToolbarDialog::SetColorScheme(cs);
106 m_ptoolbar->InvalidateBitmaps();
111void iENCToolbar::LoadToolBitmaps() {
112 wxString svgDir = g_Platform->GetSharedDataDir() +
"uidata" +
113 wxFileName::GetPathSeparator();
118 if (::wxFileExists(svgDir +
"iENC_All.svg")) {
119 m_bmAll =
LoadSVG(svgDir +
"iENC_All.svg", w, h);
120 m_bmMinimum =
LoadSVG(svgDir +
"iENC_Minimum.svg", w, h);
121 m_bmStandard =
LoadSVG(svgDir +
"iENC_Standard.svg", w, h);
122 m_bmUStd =
LoadSVG(svgDir +
"iENC_UserStd.svg", w, h);
123 m_bmRPlus =
LoadSVG(svgDir +
"iENC_RPlus.svg", w, h);
124 m_bmRMinus =
LoadSVG(svgDir +
"iENC_RMinus.svg", w, h);
126 wxLogMessage(
"Cannot find iENC icons at: " + svgDir);
128 m_bmMinimum = wxBitmap(96, 32);
129 m_bmStandard = wxBitmap(96, 32);
130 m_bmAll = wxBitmap(96, 32);
131 m_bmUStd = wxBitmap(96, 32);
132 m_bmRPlus = wxBitmap(96, 32);
133 m_bmRMinus = wxBitmap(96, 32);
137void iENCToolbar::OnToolLeftClick(wxCommandEvent &event) {
138 int itemId =
event.GetId();
142 enum _DisCat nset = STANDARD;
148 if (++m_nDensity > 3) m_nDensity = 0;
150 SetDensityToolBitmap(m_nDensity);
152 switch (m_nDensity) {
163 nset = MARINERS_STANDARD;
170 top_frame::Get()->SetENCDisplayCategory(acc, nset);
175 range = acc->GetCanvasRangeMeters();
176 range = wxRound(range * 10) / 10.;
178 if (range > 8000.) acc->SetCanvasRangeMeters(8000.);
180 acc->SetCanvasRangeMeters(4000.);
181 else if (range > 2000.)
182 acc->SetCanvasRangeMeters(2000.);
183 else if (range > 1600.)
184 acc->SetCanvasRangeMeters(1600.);
185 else if (range > 1200.)
186 acc->SetCanvasRangeMeters(1200.);
187 else if (range > 800.)
188 acc->SetCanvasRangeMeters(800.);
189 else if (range > 500.)
190 acc->SetCanvasRangeMeters(500.);
191 else if (range > 300.)
192 acc->SetCanvasRangeMeters(300.);
197 range = acc->GetCanvasRangeMeters();
198 range = wxRound(range * 10) / 10.;
201 acc->SetCanvasRangeMeters(300.);
202 else if (range < 500.)
203 acc->SetCanvasRangeMeters(500.);
204 else if (range < 800.)
205 acc->SetCanvasRangeMeters(800.);
206 else if (range < 1200.)
207 acc->SetCanvasRangeMeters(1200.);
208 else if (range < 1600.)
209 acc->SetCanvasRangeMeters(1600.);
210 else if (range < 2000.)
211 acc->SetCanvasRangeMeters(2000.);
212 else if (range < 4000.)
213 acc->SetCanvasRangeMeters(4000.);
214 else if (range < 8000.)
215 acc->SetCanvasRangeMeters(8000.);
222 m_ptoolbar->InvalidateBitmaps();
226void iENCToolbar::SetDensityToolBitmap(
int nDensity) {
227 int toolID = m_toolDensity->GetId();
230 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmMinimum, &m_bmMinimum);
231 else if (nDensity == 1)
232 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmStandard, &m_bmStandard);
233 else if (nDensity == 2)
234 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmAll, &m_bmAll);
235 else if (nDensity == 3)
236 m_ptoolbar->SetToolBitmaps(ID_DENSITY, &m_bmUStd, &m_bmUStd);
239void iENCToolbar::SetRangeToolBitmap() {
241 dc.SelectObject(*m_pbmScratch);
242 dc.SetBackground(wxBrush(GetGlobalColor(
"DILG0")));
244 dc.DrawBitmap(m_bmRMinus, wxPoint(0, 0));
247 m_rangeFont = wxTheFontList->FindOrCreateFont(
248 12, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
250 wxString range_string;
251 range_string.Printf(
"%4.0fm", m_range);
253 dc.SetFont(*m_rangeFont);
257 int target_points = 12;
258 while (!good && (target_points > 4)) {
260 dc.GetTextExtent(range_string, &width, &height);
266 m_rangeFont = wxTheFontList->FindOrCreateFont(
267 target_points, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL,
268 wxFONTWEIGHT_NORMAL);
269 dc.SetFont(*m_rangeFont);
273 dc.SetTextForeground(*wxBLACK);
274 dc.SetBackgroundMode(wxTRANSPARENT);
276 dc.DrawText(range_string, 42, 8);
278 dc.SelectObject(wxNullBitmap);
280 m_ptoolbar->SetToolBitmaps(ID_RMINUS, m_pbmScratch, m_pbmScratch);
283void iENCToolbar::StateTimerEvent(wxTimerEvent &event) {
287 bool bRefresh =
false;
292 switch (acc->GetENCDisplayCategory()) {
302 case (MARINERS_STANDARD):
310 if (nset != m_nDensity) {
313 SetDensityToolBitmap(m_nDensity);
323 double range = acc->GetCanvasRangeMeters();
325 if (range != m_range) {
327 SetRangeToolBitmap();
333 m_ptoolbar->InvalidateBitmaps();
338 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.