52#include "user_colors.h"
55#include "androidUTIL.h"
63extern GLenum g_texture_rectangle_format;
71 const wxBitmap &bmpNormal,
const wxBitmap &bmpRollover,
72 wxItemKind kind, wxObject *clientData,
73 const wxString &shortHelp,
const wxString &longHelp)
74 : wxToolBarToolBase((wxToolBarBase *)tbar,
id, label, bmpNormal,
75 bmpRollover, kind, clientData, shortHelp, longHelp) {
80 m_btooltip_hiviz =
false;
90 pluginNormalIcon = bmpNormal;
91 pluginRolloverIcon = bmpRollover;
96 const wxBitmap &bmpRollover, wxItemKind kind,
97 wxObject *clientData,
const wxString &shortHelp,
98 const wxString &longHelp)
99 : wxToolBarToolBase((wxToolBarBase *)tbar,
id,
"", bmpNormal, bmpRollover,
100 kind, clientData, shortHelp, longHelp) {
104 m_btooltip_hiviz =
false;
105 isPluginTool =
false;
107 m_bmpNormal = bmpNormal;
111 void SetSize(
const wxSize &size) {
116 wxCoord GetWidth()
const {
return m_width; }
118 wxCoord GetHeight()
const {
return m_height; }
120 wxString GetToolname() {
return toolname; }
122 void SetIconName(wxString name) { iconName = name; }
123 wxString GetIconName() {
return iconName; }
125 void SetTooltipHiviz(
bool enable) { m_btooltip_hiviz = enable; }
134 wxBitmap pluginNormalIcon;
135 wxBitmap pluginRolloverIcon;
136 const wxBitmap *pluginToggledIcon;
143 bool m_btooltip_hiviz;
145 wxString pluginNormalIconSVG;
146 wxString pluginRolloverIconSVG;
147 wxString pluginToggledIconSVG;
148 wxBitmap m_activeBitmap;
155ocpnFloatingToolbarDialog::ocpnFloatingToolbarDialog(wxWindow *parent,
165 m_position = position;
167 m_sizefactor = size_factor;
170 m_bAutoHideToolbar =
false;
171 m_nAutoHideToolbar = 5;
172 m_toolbar_scale_tools_shown =
false;
173 m_backcolorString =
"GREY3";
174 m_toolShowMask =
"XXXXXXXXXXXXXXXX";
175 n_toolbarHideMethod = TOOLBAR_HIDE_TO_GRABBER;
176 b_canToggleOrientation =
true;
177 m_enableRolloverBitmaps =
true;
180 m_ptoolbar = CreateNewToolbar();
181 if (m_ptoolbar) m_ptoolbar->SetBackgroundColour(GetGlobalColor(
"GREY3"));
182 m_cs = (ColorScheme)-1;
184 m_style = g_StyleManager->GetCurrentStyle();
186 SetULDockPosition(wxPoint(4, g_maintoolbar_y));
188 SetULDockPosition(wxPoint(4, 4));
191 SetGeometry(
false, wxRect());
200 m_marginsInvisible = m_style->marginsInvisible;
202 m_FloatingToolbarConfigMenu = NULL;
204 m_fade_timer.SetOwner(
this);
205 this->Connect(wxEVT_TIMER,
206 wxTimerEventHandler(ocpnFloatingToolbarDialog::FadeTimerEvent),
209 if (m_bAutoHideToolbar && (m_nAutoHideToolbar > 0))
210 m_fade_timer.Start(m_nAutoHideToolbar * 1000);
212 m_bsubmerged =
false;
213 m_benableSubmerge =
true;
216ocpnFloatingToolbarDialog::~ocpnFloatingToolbarDialog() {
217 delete m_FloatingToolbarConfigMenu;
222void ocpnFloatingToolbarDialog::FadeTimerEvent(wxTimerEvent &event) {
223 if (n_toolbarHideMethod == TOOLBAR_HIDE_TO_FIRST_TOOL) {
224 if (g_bmasterToolbarFull) {
225 if (m_bAutoHideToolbar && (m_nAutoHideToolbar > 0) ) {
228 top_frame::Get()->GetAbstractPrimaryCanvas()->ScreenToClient(
229 ::wxGetMousePosition());
231 wxRect r = GetToolbarRect();
232 if (r.Contains(mp))
return;
234 wxCommandEvent event;
235 event.SetId(ID_MASTERTOGGLE);
236 top_frame::Get()->OnToolLeftClick(event);
243 m_Items.push_back(item);
246int ocpnFloatingToolbarDialog::RebuildToolbar() {
253 for (
auto it = m_Items.cbegin(); it != m_Items.cend(); it++) {
257 bool bEnabled = _toolbarConfigMenuUtil(tic);
260 wxToolBarToolBase *tool =
261 tb->AddTool(tic->m_ID, tic->m_label, tic->m_bmpNormal,
262 tic->m_bmpDisabled, tic->m_toolKind, tic->m_tipString);
267 if (!tic->m_NormalIconSVG.IsEmpty()) {
268 tb->SetToolBitmapsSVG(tic->m_ID, tic->m_NormalIconSVG,
269 tic->m_RolloverIconSVG, tic->m_ToggledIconSVG);
279void ocpnFloatingToolbarDialog::SetULDockPosition(wxPoint position) {
280 if (position.x >= 0) m_dock_min_x = position.x;
281 if (position.y >= 0) m_dock_min_y = position.y;
284size_t ocpnFloatingToolbarDialog::GetToolCount() {
286 return m_ptoolbar->GetToolsCount();
291void ocpnFloatingToolbarDialog::SetToolShowMask(wxString mask) {}
293void ocpnFloatingToolbarDialog::SetToolShowCount(
int count) {
295 m_ptoolbar->SetToolShowCount(count);
296 m_ptoolbar->SetDirty(
true);
300int ocpnFloatingToolbarDialog::GetToolShowCount() {
302 return m_ptoolbar->GetToolShowCount();
307void ocpnFloatingToolbarDialog::SetBackGroundColorString(wxString colorRef) {
308 m_backcolorString = colorRef;
309 SetColorScheme(m_cs);
312void ocpnFloatingToolbarDialog::OnKeyDown(wxKeyEvent &event) {
event.Skip(); }
314void ocpnFloatingToolbarDialog::OnKeyUp(wxKeyEvent &event) {
event.Skip(); }
316void ocpnFloatingToolbarDialog::CreateConfigMenu() {
317 if (m_FloatingToolbarConfigMenu)
delete m_FloatingToolbarConfigMenu;
318 m_FloatingToolbarConfigMenu =
new wxMenu();
321bool ocpnFloatingToolbarDialog::_toolbarConfigMenuUtil(
323 if (m_FloatingToolbarConfigMenu) {
324 wxMenuItem *menuitem;
326 if (tic->m_ID == ID_MOB && g_bPermanentMOBIcon)
return true;
328 if (tic->m_bRequired)
return true;
329 if (tic->m_bPlugin)
return true;
336 int menuItemId = tic->m_ID + idOffset;
338 menuitem = m_FloatingToolbarConfigMenu->FindItem(menuItemId);
341 return menuitem->IsChecked();
344 menuitem = m_FloatingToolbarConfigMenu->AppendCheckItem(menuItemId,
346 size_t n = m_FloatingToolbarConfigMenu->GetMenuItemCount();
347 menuitem->Check(m_configString.Len() >= n
348 ? m_configString.GetChar(n - 1) ==
'X'
350 return menuitem->IsChecked();
355void ocpnFloatingToolbarDialog::EnableTool(
int toolid,
bool enable) {
356 if (m_ptoolbar) m_ptoolbar->EnableTool(toolid, enable);
359void ocpnFloatingToolbarDialog::SetColorScheme(ColorScheme cs) {
361 wxColour back_color = GetGlobalColor(m_backcolorString);
364 m_ptoolbar->SetToggledBackgroundColour(GetGlobalColor(
"GREY1"));
365 m_ptoolbar->SetColorScheme(cs);
369wxSize ocpnFloatingToolbarDialog::GetToolSize() {
370 wxSize style_tool_size;
372 style_tool_size = m_style->GetToolSize();
374 style_tool_size.x *= m_sizefactor;
375 style_tool_size.y *= m_sizefactor;
377 style_tool_size.x = 32;
378 style_tool_size.y = 32;
381 return style_tool_size;
384void ocpnFloatingToolbarDialog::SetGeometry(
bool bAvoid, wxRect rectAvoid) {
386 wxSize style_tool_size = m_style->GetToolSize();
388 style_tool_size.x *= m_sizefactor;
389 style_tool_size.y *= m_sizefactor;
391 m_ptoolbar->SetToolBitmapSize(style_tool_size);
393 wxSize tool_size = m_ptoolbar->GetToolBitmapSize();
394 int grabber_width = m_style->GetIcon(
"grabber").GetWidth();
401 m_pparent->GetClientSize().x -
402 (tool_size.x + m_style->GetToolSeparation()) * 2;
403 if (bAvoid && !rectAvoid.IsEmpty()) {
404 avoid_start = m_pparent->GetClientSize().x - rectAvoid.width -
408 max_rows = (m_pparent->GetClientSize().y /
409 (tool_size.y + m_style->GetToolSeparation())) -
412 max_cols = (avoid_start - grabber_width) /
413 (tool_size.x + m_style->GetToolSeparation());
416 if (m_orient == wxTB_VERTICAL)
417 max_rows = wxMax(max_rows, 2);
419 max_cols = wxMax(max_cols, 2);
422 if (m_orient == wxTB_VERTICAL)
423 m_ptoolbar->SetMaxRowsCols(max_rows, 100);
425 m_ptoolbar->SetMaxRowsCols(100, max_cols);
426 m_ptoolbar->SetSizeFactor(m_sizefactor);
430void ocpnFloatingToolbarDialog::SetDefaultPosition() {
433 if (m_pparent && m_ptoolbar) {
434 wxSize cs = m_pparent->GetClientSize();
436 m_position.x = m_dock_min_x;
437 else if (1 == m_dock_x)
438 m_position.x = cs.x - m_ptoolbar->m_maxWidth;
441 m_position.y = m_dock_min_y;
442 else if (1 == m_dock_y)
443 m_position.y = cs.y - m_ptoolbar->m_maxHeight;
445 m_position.x = wxMin(cs.x - m_ptoolbar->m_maxWidth, m_position.x);
446 m_position.y = wxMin(cs.y - m_ptoolbar->m_maxHeight, m_position.y);
448 m_position.x = wxMax(m_dock_min_x, m_position.x);
449 m_position.y = wxMax(m_dock_min_y, m_position.y);
451 m_position.y += m_auxOffsetY;
453 g_maintoolbar_x = m_position.x;
454 g_maintoolbar_y = m_position.y;
475void ocpnFloatingToolbarDialog::Submerge() {
478 if (m_ptoolbar) m_ptoolbar->KillTooltip();
481void ocpnFloatingToolbarDialog::HideTooltip() {
483 if (m_ptoolbar) m_ptoolbar->HideTooltip();
487void ocpnFloatingToolbarDialog::ShowTooltips() {
489 if (m_ptoolbar) m_ptoolbar->EnableTooltips();
493void ocpnFloatingToolbarDialog::ToggleOrientation() {}
495wxRect ocpnFloatingToolbarDialog::GetToolbarRect() {
496 return wxRect(m_position.x, m_position.y, m_ptoolbar->m_maxWidth,
497 m_ptoolbar->m_maxHeight);
500wxSize ocpnFloatingToolbarDialog::GetToolbarSize() {
501 return wxSize(m_ptoolbar->m_maxWidth, m_ptoolbar->m_maxHeight);
504wxPoint ocpnFloatingToolbarDialog::GetToolbarPosition() {
505 return wxPoint(m_position.x, m_position.y);
508bool ocpnFloatingToolbarDialog::MouseEvent(wxMouseEvent &event) {
509 if (g_disable_main_toolbar)
return false;
511 bool bproc = m_ptoolbar->OnMouseEvent(event, m_position);
512 if (bproc) m_ptoolbar->CreateBitmap();
518void ocpnFloatingToolbarDialog::RefreshToolbar() {
520 if (m_ptoolbar->IsDirty()) {
522 top_frame::Get()->GetAbstractPrimaryCanvas()->Refresh();
527void ocpnFloatingToolbarDialog::SetAutoHideTimer(
int time) {
528 m_nAutoHideToolbar = time;
529 if (m_bAutoHideToolbar) {
531 m_fade_timer.Start(m_nAutoHideToolbar * 1000);
535void ocpnFloatingToolbarDialog::RefreshFadeTimer() {
536 if (m_bAutoHideToolbar && (m_nAutoHideToolbar > 0)) {
537 m_fade_timer.Start(m_nAutoHideToolbar * 1000);
541void ocpnFloatingToolbarDialog::SetToolShortHelp(
int id,
const wxString &help) {
542 if (m_ptoolbar) m_ptoolbar->SetToolShortHelp(
id, help);
545void ocpnFloatingToolbarDialog::Realize() {
547 m_ptoolbar->Realize();
548 m_ptoolbar->CreateBitmap();
549 m_toolbar_image.Destroy();
553void ocpnFloatingToolbarDialog::DrawDC(
ocpnDC &dc,
double displayScale) {
555 m_ptoolbar->CreateBitmap();
556 if (m_ptoolbar->GetBitmap().IsOk()) {
557 dc.DrawBitmap(m_ptoolbar->GetBitmap(), m_position.x, m_position.y,
false);
558 m_ptoolbar->SetDirty(
false);
563void ocpnFloatingToolbarDialog::DrawGL(
ocpnDC &gldc,
double displayScale) {
564 if (g_disable_main_toolbar)
return;
567 if (!m_ptoolbar)
return;
569 wxColour backColor = GetGlobalColor(
"GREY3");
570 gldc.SetBrush(wxBrush(backColor));
571 gldc.SetPen(wxPen(backColor));
573 wxRect r = GetToolbarRect();
574 int m_end_margin = wxMin(GetToolSize().x, GetToolSize().y) / 8;
576 if (m_orient == wxHORIZONTAL)
577 gldc.DrawRoundedRectangle(
578 (r.x - m_end_margin / 2) * displayScale, (r.y - 1) * displayScale,
579 (r.width + m_end_margin) * displayScale, (r.height + 2) * displayScale,
580 (m_end_margin * 1) * displayScale);
582 gldc.DrawRoundedRectangle(
583 (r.x - 1) * displayScale, (r.y - m_end_margin / 2) * displayScale,
584 (r.width + 2) * displayScale, (r.height + m_end_margin) * displayScale,
585 (m_end_margin * 1.5) * displayScale);
587 int width = GetToolbarSize().x;
588 int height = GetToolbarSize().y;
590 m_ptoolbar->CreateBitmap(displayScale);
594 glGenTextures(1, &m_texture);
596 glBindTexture(g_texture_rectangle_format, m_texture);
597 glTexParameterf(g_texture_rectangle_format, GL_TEXTURE_MIN_FILTER,
599 glTexParameteri(g_texture_rectangle_format, GL_TEXTURE_MAG_FILTER,
601 glTexParameteri(g_texture_rectangle_format, GL_TEXTURE_WRAP_S,
603 glTexParameteri(g_texture_rectangle_format, GL_TEXTURE_WRAP_T,
606 glBindTexture(g_texture_rectangle_format, m_texture);
609 if (!m_toolbar_image.IsOk()) {
611 m_toolbar_image = m_ptoolbar->GetBitmap().ConvertToImage();
613 unsigned char *d = m_toolbar_image.GetData();
614 unsigned char *e =
new unsigned char[4 * width * height];
615 for (
int y = 0; y < height; y++)
616 for (
int x = 0; x < width; x++) {
617 int i = y * width + x;
618 memcpy(e + 4 * i, d + 3 * i, 3);
621 glTexImage2D(g_texture_rectangle_format, 0, GL_RGBA, width, height, 0,
622 GL_RGBA, GL_UNSIGNED_BYTE, e);
624 glDisable(g_texture_rectangle_format);
630 glEnable(g_texture_rectangle_format);
631 glBindTexture(g_texture_rectangle_format, m_texture);
634 int x0 = GetToolbarPosition().x, x1 = x0 + width;
635 int y0 = GetToolbarPosition().y - 0, y1 = y0 + height;
642 if (GL_TEXTURE_RECTANGLE_ARB == g_texture_rectangle_format)
643 tx = width, ty = height;
670 m_callbacks.render_gl_textures(gldc, coords, uv);
671 glDisable(g_texture_rectangle_format);
672 glBindTexture(g_texture_rectangle_format, 0);
680void ocpnFloatingToolbarDialog::OnToolLeftClick(wxCommandEvent &event) {
684 m_pparent->GetEventHandler()->AddPendingEvent(event);
686 wxTheApp->GetTopWindow()->Raise();
692 m_ptoolbar = CreateNewToolbar();
699 long winstyle = wxNO_BORDER | wxTB_FLAT;
700 winstyle |= m_orient;
707 m_ptoolbar->SetToggledBackgroundColour(GetGlobalColor(
"GREY1"));
708 m_ptoolbar->SetColorScheme(m_cs);
709 m_ptoolbar->EnableRolloverBitmaps(GetEnableRolloverBitmaps());
714void ocpnFloatingToolbarDialog::DestroyToolBar() {
715 g_toolbarConfig = GetToolConfigString();
718 m_ptoolbar->ClearTools();
723 for (
auto it = m_Items.cbegin(); it != m_Items.cend(); it++) {
733 int n_tools = tb->GetToolsCount();
737 ArrayOfPlugInToolbarTools tool_array =
740 for (
unsigned int i = 0; i < tool_array.GetCount(); i++) {
742 if (pttc->position == n_tools) {
746 case GLOBAL_COLOR_SCHEME_DAY:
747 ptool_bmp = pttc->bitmap_day;
750 case GLOBAL_COLOR_SCHEME_DUSK:
751 ptool_bmp = pttc->bitmap_dusk;
753 case GLOBAL_COLOR_SCHEME_NIGHT:
754 ptool_bmp = pttc->bitmap_night;
757 ptool_bmp = pttc->bitmap_day;
762 wxToolBarToolBase *tool =
763 tb->AddTool(pttc->id, wxString(pttc->label), *(ptool_bmp),
764 wxString(pttc->shortHelp), pttc->kind);
766 tb->SetToolBitmapsSVG(pttc->id, pttc->pluginNormalIconSVG,
767 pttc->pluginRolloverIconSVG,
768 pttc->pluginToggledIconSVG);
777 while (CheckAndAddPlugInTool(tb)) {
783void ocpnFloatingToolbarDialog::EnableRolloverBitmaps(
bool bEnable) {
784 m_enableRolloverBitmaps = bEnable;
785 if (m_ptoolbar) m_ptoolbar->EnableRolloverBitmaps(bEnable);
795EVT_TIMER(TOOLTIPON_TIMER, ocpnToolBarSimple::OnToolTipTimerEvent)
796EVT_TIMER(TOOLTIPOFF_TIMER, ocpnToolBarSimple::OnToolTipOffTimerEvent)
804 int id, const wxString &label, const wxBitmap &bmpNormal,
805 const wxBitmap &bmpDisabled, wxItemKind kind, wxObject *clientData,
806 const wxString &shortHelp, const wxString &longHelp) {
807 if (m_style->NativeToolIconExists(label)) {
808 return new ocpnToolBarTool(
this,
id, label, bmpNormal, bmpDisabled, kind,
809 clientData, shortHelp, longHelp);
811 wxString testToolname =
g_pi_manager->GetToolOwnerCommonName(
id);
813 if (testToolname ==
"") {
815 clientData, shortHelp, longHelp);
817 return new ocpnToolBarTool(
this,
id, label, bmpNormal, bmpDisabled, kind,
818 clientData, shortHelp, longHelp);
827void ocpnToolBarSimple::Init() {
828 m_currentRowsOrColumns = 0;
830 m_lastX = m_lastY = 0;
832 m_maxWidth = m_maxHeight = 0;
834 m_pressedTool = m_currentTool = -1;
836 m_xPos = m_yPos = wxDefaultCoord;
838 m_style = g_StyleManager->GetCurrentStyle();
841 m_defaultHeight = 15;
843 m_toggle_bg_color = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
844 m_toolOutlineColour.Set(
"BLACK");
845 m_last_ro_tool = NULL;
847 m_btoolbar_is_zooming =
false;
850 m_last_plugin_down_id = -1;
857 m_tbenableRolloverBitmaps =
false;
860wxToolBarToolBase *ocpnToolBarSimple::DoAddTool(
861 int id,
const wxString &label,
const wxBitmap &bitmap,
862 const wxBitmap &bmpDisabled, wxItemKind kind,
const wxString &shortHelp,
863 const wxString &longHelp, wxObject *clientData, wxCoord xPos,
870 return InsertTool(GetToolsCount(),
id, label, bitmap, bmpDisabled, kind,
871 shortHelp, longHelp, clientData);
876wxToolBarToolBase *ocpnToolBarSimple::AddTool(
877 int toolid,
const wxString &label,
const wxBitmap &bitmap,
878 const wxBitmap &bmpDisabled, wxItemKind kind,
const wxString &shortHelp,
879 const wxString &longHelp, wxObject *data) {
882 GetToolsCount(), toolid, label, bitmap, bmpDisabled, kind, shortHelp,
887wxToolBarToolBase *ocpnToolBarSimple::InsertTool(
888 size_t pos,
int id,
const wxString &label,
const wxBitmap &bitmap,
889 const wxBitmap &bmpDisabled, wxItemKind kind,
const wxString &shortHelp,
890 const wxString &longHelp, wxObject *clientData) {
891 wxCHECK_MSG(pos <= GetToolsCount(), (wxToolBarToolBase *)NULL,
892 "invalid position in wxToolBar::InsertTool()");
894 wxToolBarToolBase *tool = CreateTool(
id, label, bitmap, bmpDisabled, kind,
895 clientData, shortHelp, longHelp);
897 if (!InsertTool(pos, tool)) {
906wxToolBarToolBase *ocpnToolBarSimple::InsertTool(
size_t pos,
907 wxToolBarToolBase *tool) {
908 wxCHECK_MSG(pos <= GetToolsCount(), (wxToolBarToolBase *)NULL,
909 "invalid position in wxToolBar::InsertTool()");
911 if (!tool || !DoInsertTool(pos, tool)) {
915 m_tools.Insert(pos, tool);
921bool ocpnToolBarSimple::DoInsertTool(
size_t WXUNUSED(pos),
922 wxToolBarToolBase *toolBase) {
928 if (tool->isPluginTool) {
929 for (
unsigned int i = 0; i < GetToolsCount(); i++) {
930 if (tool->GetToolname() ==
932 tool->toolname <<
"1";
938 if (tool->m_x == wxDefaultCoord) tool->m_x = m_style->GetLeftMargin();
941 if (tool->m_y == wxDefaultCoord) tool->m_y = m_style->GetTopMargin();
943 if (tool->IsButton()) {
944 tool->SetSize(GetToolSize());
947 if ((tool->m_x + tool->GetNormalBitmap().GetWidth() +
948 m_style->GetLeftMargin()) > m_maxWidth)
950 (wxCoord)((tool->m_x + tool->GetWidth() + m_style->GetLeftMargin()));
952 if ((tool->m_y + tool->GetNormalBitmap().GetHeight() +
953 m_style->GetTopMargin()) > m_maxHeight)
955 (wxCoord)((tool->m_y + tool->GetHeight() + m_style->GetTopMargin()));
958 else if (tool->IsControl()) {
959 tool->SetSize(tool->GetControl()->GetSize());
962 tool->b_hilite =
false;
967bool ocpnToolBarSimple::DoDeleteTool(
size_t WXUNUSED(pos),
968 wxToolBarToolBase *tool) {
972 if (m_last_ro_tool == tool) m_last_ro_tool = NULL;
980 const wxPoint &pos,
const wxSize &size,
981 long style,
int orient) {
982 m_parentContainer = parent;
1001 m_tooltip_timer.SetOwner(
this, TOOLTIPON_TIMER);
1002 m_tooltipoff_timer.SetOwner(
this, TOOLTIPOFF_TIMER);
1003 m_tooltip_off = 3000;
1005 m_tbenableRolloverBitmaps =
false;
1010ocpnToolBarSimple::~ocpnToolBarSimple() {}
1012void ocpnToolBarSimple::EnableTooltips() {
1014 m_btooltip_show =
true;
1018bool ocpnToolBarSimple::DisableTooltips() {
1020 bool ret = ocpnToolBarSimple::m_btooltip_show;
1021 ocpnToolBarSimple::m_btooltip_show =
false;
1028void ocpnToolBarSimple::KillTooltip() {
1032 m_tooltip_timer.Stop();
1034 wxTheApp->GetTopWindow()->Raise();
1035 top_frame::Get()->GetAbstractFocusCanvas()->TriggerDeferredFocus();
1038void ocpnToolBarSimple::HideTooltip() {
1044void ocpnToolBarSimple::SetColorScheme(ColorScheme cs) {
1048 m_toolOutlineColour = GetGlobalColor(
"UIBDR");
1050 m_currentColorScheme = cs;
1053bool ocpnToolBarSimple::Realize() {
1055 m_style->SetOrientation(wxTB_VERTICAL);
1057 m_style->SetOrientation(wxTB_HORIZONTAL);
1059 wxSize toolSize = wxSize(-1, -1);
1060 int separatorSize = m_style->GetToolSeparation() * m_sizefactor;
1061 int topMargin = m_style->GetTopMargin() * m_sizefactor;
1062 int leftMargin = m_style->GetLeftMargin() * m_sizefactor;
1064 m_currentRowsOrColumns = 0;
1066 m_lastX = leftMargin;
1067 m_lastY = topMargin;
1072 bool firstNode =
true;
1073 wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1078 if (iNode >= m_nShowTools)
break;
1084 if (toolSize.x == -1) {
1085 if (!tool->IsSeparator()) {
1086 toolSize.x = tool->m_width;
1087 toolSize.y = tool->m_height;
1091 tool->firstInLine = firstNode;
1092 tool->lastInLine =
false;
1095 tool->last_rect.width = 0;
1097 if (tool->IsSeparator()) {
1106 if (m_currentRowsOrColumns >= m_maxRows)
1107 m_lastX += separatorSize;
1109 m_lastY += separatorSize;
1111 }
else if (tool->IsButton()) {
1112 if (!IsVertical()) {
1113 if (m_currentRowsOrColumns >= m_maxCols) {
1114 tool->firstInLine =
true;
1115 if (lastTool && m_LineCount > 1) lastTool->lastInLine =
true;
1117 m_currentRowsOrColumns = 0;
1118 m_lastX = leftMargin;
1119 m_lastY += toolSize.y + topMargin;
1121 tool->m_x = (wxCoord)m_lastX;
1122 tool->m_y = (wxCoord)m_lastY;
1124 tool->trect = wxRect(tool->m_x, tool->m_y, toolSize.x, toolSize.y);
1125 tool->trect.Inflate(separatorSize / 2, topMargin);
1127 m_lastX += toolSize.x + separatorSize;
1129 if (m_currentRowsOrColumns >= m_maxRows) {
1130 tool->firstInLine =
true;
1131 if (lastTool) lastTool->lastInLine =
true;
1133 m_currentRowsOrColumns = 0;
1134 m_lastX += toolSize.x + leftMargin;
1135 m_lastY = topMargin;
1137 tool->m_x = (wxCoord)m_lastX;
1138 tool->m_y = (wxCoord)m_lastY;
1140 tool->trect = wxRect(tool->m_x, tool->m_y, toolSize.x, toolSize.y);
1141 tool->trect.Inflate((separatorSize / 2), topMargin);
1143 m_lastY += toolSize.y + separatorSize;
1145 m_currentRowsOrColumns++;
1160 if (m_lastX > m_maxWidth) m_maxWidth = m_lastX;
1161 if (m_lastY > m_maxHeight) m_maxHeight = m_lastY;
1164 node = node->GetNext();
1167 if (lastTool && (m_LineCount > 1 || IsVertical()))
1168 lastTool->lastInLine =
true;
1170 if (!IsVertical()) {
1171 m_maxHeight += toolSize.y;
1172 m_maxHeight += m_style->GetBottomMargin();
1174 m_maxWidth += toolSize.x;
1175 m_maxWidth += m_style->GetRightMargin() * m_sizefactor;
1178 m_bitmap = wxNullBitmap;
1183wxBitmap &ocpnToolBarSimple::CreateBitmap(
double display_scale) {
1184 if (m_bitmap.IsOk())
return m_bitmap;
1187 int width = m_maxWidth;
1188 int height = m_maxHeight;
1191 wxBitmap bm(width, height);
1192 mdc.SelectObject(bm);
1193 mdc.SetBackground(wxBrush(GetBackgroundColour()));
1197 for (wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1198 node; node = node->GetNext()) {
1199 wxToolBarToolBase *tool = node->GetData();
1201 wxRect toolRect = tools->trect;
1202 CreateToolBitmap(tool);
1204 if (tools->m_activeBitmap.IsOk()) {
1205 mdc.DrawBitmap(tools->m_activeBitmap, tools->m_x, tools->m_y,
false);
1210 mdc.SelectObject(wxNullBitmap);
1216void ocpnToolBarSimple::OnToolTipTimerEvent(wxTimerEvent &event) {
1217 if (!top_frame::Get())
1222 if (m_btooltip_show ) {
1223 if (m_last_ro_tool) {
1224 wxString s = m_last_ro_tool->GetShortHelp();
1228 wxPoint pos_in_toolbar(m_last_ro_tool->m_x, m_last_ro_tool->m_y);
1229 pos_in_toolbar.x += m_last_ro_tool->m_width + 2;
1231 wxPoint screenPosition =
1232 top_frame::Get()->GetAbstractPrimaryCanvas()->ClientToScreen(
1237 top_frame::Get()->GetAbstractPrimaryCanvas()->GetWindow(), s,
1238 screenPosition, m_last_ro_tool->m_btooltip_hiviz);
1241 wxTheApp->GetTopWindow()->Raise();
1245 if (g_btouch) m_tooltipoff_timer.Start(m_tooltip_off, wxTIMER_ONE_SHOT);
1252void ocpnToolBarSimple::OnToolTipOffTimerEvent(wxTimerEvent &event) {
1256bool ocpnToolBarSimple::OnMouseEvent(wxMouseEvent &event, wxPoint &position) {
1258 event.GetPosition(&x, &y);
1261 wxRect r = wxRect(position, wxSize(m_maxWidth, m_maxHeight));
1262 if (!r.Contains(x, y)) {
1267 m_parentContainer->RefreshFadeTimer();
1270 (
ocpnToolBarTool *)FindToolForPosition(x - position.x, y - position.y);
1272 m_tooltipoff_timer.Start(m_tooltip_off, wxTIMER_ONE_SHOT);
1275 m_tooltipoff_timer.Stop();
1278 if (tool && tool->IsButton() ) {
1279 if (m_btooltip_show) {
1280 if (tool != m_last_ro_tool) {
1286 if (!m_tooltip_timer.IsRunning()) {
1287 m_tooltip_timer.Start(m_one_shot, wxTIMER_ONE_SHOT);
1294 m_last_ro_tool = tool;
1297 if (event.LeftIsDown()) m_leftDown =
true;
1299 if (event.LeftDown() && tool->IsEnabled()) {
1300 if (tool->CanBeToggled()) {
1302 tool->bitmapOK =
false;
1304 m_bitmap = wxNullBitmap;
1310 ArrayOfPlugInToolbarTools tool_array =
1312 for (
unsigned int i = 0; i < tool_array.GetCount(); i++) {
1314 if (tool->GetId() == pttc->id) {
1319 m_last_plugin_down_id = pttc->id;
1324 }
else if (event.RightDown()) {
1325 OnRightClick(tool->GetId(), x, y);
1338 if (event.LeftUp() && tool->IsEnabled() && (m_leftDown || g_btouch)) {
1340 if (!OnLeftClick(tool->GetId(), tool->IsToggled()) &&
1341 tool->CanBeToggled()) {
1345 tool->bitmapOK =
false;
1360void ocpnToolBarSimple::CreateToolBitmap(wxToolBarToolBase *toolBase) {
1363 wxBitmap bmp = wxNullBitmap;
1365 bool bNeedClear = !tool->bitmapOK;
1367 if (tool->bitmapOK) {
1368 if (tool->IsEnabled()) {
1369 bmp = tool->GetNormalBitmap();
1372 m_style->GetToolIcon(tool->GetToolname(), TOOLICON_NORMAL,
1373 tool->rollover, tool->m_width, tool->m_height);
1374 tool->SetNormalBitmap(bmp);
1375 tool->bitmapOK =
true;
1378 bmp = tool->GetDisabledBitmap();
1380 bmp = m_style->GetToolIcon(tool->GetToolname(), TOOLICON_DISABLED,
1381 false, tool->m_width, tool->m_height);
1382 tool->SetDisabledBitmap(bmp);
1383 tool->bitmapOK =
true;
1387 if (tool->isPluginTool) {
1388 int toggleFlag = tool->IsToggled() ? TOOLICON_TOGGLED : TOOLICON_NORMAL;
1395 wxString svgFile = tool->pluginNormalIconSVG;
1397 if (tool->pluginToggledIconSVG.Length())
1398 svgFile = tool->pluginToggledIconSVG;
1400 if (tool->rollover) {
1401 if (tool->pluginRolloverIconSVG.Length())
1402 svgFile = tool->pluginRolloverIconSVG;
1405 if (!svgFile.IsEmpty()) {
1407 bmp =
LoadSVG(svgFile, tool->m_width, tool->m_height);
1409 bmp = m_style->BuildPluginIcon(bmp, toggleFlag, m_sizefactor);
1412 m_style->BuildPluginIcon(tool->pluginNormalIcon, TOOLICON_NORMAL);
1416 if (!bmp.IsOk() || bmp.IsNull()) {
1417 if (m_style->NativeToolIconExists(tool->GetToolname())) {
1418 bmp = m_style->GetToolIcon(tool->GetToolname(), toggleFlag,
1419 tool->rollover, tool->m_width,
1427 bmp = tool->pluginNormalIcon;
1428 if (fabs(m_sizefactor - 1.0) > 0.01) {
1429 if (tool->m_width && tool->m_height) {
1430 wxImage scaled_image = bmp.ConvertToImage();
1431 bmp = wxBitmap(scaled_image.Scale(tool->m_width, tool->m_height,
1432 wxIMAGE_QUALITY_HIGH));
1437 tool->SetNormalBitmap(bmp);
1438 tool->bitmapOK =
true;
1440 bmp = tool->GetNormalBitmap();
1441 if (tool->IsEnabled()) {
1442 if (tool->IsToggled()) {
1443 if (!tool->bitmapOK) {
1444 if (m_style->NativeToolIconExists(tool->GetToolname())) {
1445 bmp = m_style->GetToolIcon(tool->GetToolname(), TOOLICON_TOGGLED,
1446 tool->rollover, tool->m_width,
1448 tool->SetNormalBitmap(bmp);
1454 if (!tool->bitmapOK) {
1455 if (m_style->NativeToolIconExists(tool->GetToolname())) {
1456 bmp = m_style->GetToolIcon(tool->GetIconName(), TOOLICON_NORMAL,
1457 tool->rollover, tool->m_width,
1459 tool->SetNormalBitmap(bmp);
1464 tool->bitmapOK =
true;
1466 bmp = m_style->GetToolIcon(tool->GetToolname(), TOOLICON_DISABLED,
1467 false, tool->m_width, tool->m_height);
1468 tool->SetDisabledBitmap(bmp);
1469 tool->bitmapOK =
true;
1473 tool->m_activeBitmap = bmp;
1479void ocpnToolBarSimple::DrawTool(wxDC &dc, wxToolBarToolBase *toolBase) {
1483 wxPoint drawAt(tool->m_x, tool->m_y);
1484 wxBitmap bmp = wxNullBitmap;
1486 bool bNeedClear = !tool->bitmapOK;
1488 if (tool->bitmapOK) {
1489 if (tool->IsEnabled()) {
1490 bmp = tool->GetNormalBitmap();
1493 m_style->GetToolIcon(tool->GetToolname(), TOOLICON_NORMAL,
1494 tool->rollover, tool->m_width, tool->m_height);
1495 tool->SetNormalBitmap(bmp);
1496 tool->bitmapOK =
true;
1499 bmp = tool->GetDisabledBitmap();
1501 bmp = m_style->GetToolIcon(tool->GetToolname(), TOOLICON_DISABLED,
1502 false, tool->m_width, tool->m_height);
1503 tool->SetDisabledBitmap(bmp);
1504 tool->bitmapOK =
true;
1508 if (tool->isPluginTool) {
1509 int toggleFlag = tool->IsToggled() ? TOOLICON_TOGGLED : TOOLICON_NORMAL;
1516 wxString svgFile = tool->pluginNormalIconSVG;
1518 if (tool->pluginToggledIconSVG.Length())
1519 svgFile = tool->pluginToggledIconSVG;
1521 if (tool->rollover) {
1522 if (tool->pluginRolloverIconSVG.Length())
1523 svgFile = tool->pluginRolloverIconSVG;
1526 if (!svgFile.IsEmpty()) {
1528 bmp =
LoadSVG(svgFile, tool->m_width, tool->m_height);
1530 bmp = m_style->BuildPluginIcon(bmp, toggleFlag, m_sizefactor);
1533 m_style->BuildPluginIcon(tool->pluginNormalIcon, TOOLICON_NORMAL);
1537 if (!bmp.IsOk() || bmp.IsNull()) {
1538 if (m_style->NativeToolIconExists(tool->GetToolname())) {
1539 bmp = m_style->GetToolIcon(tool->GetToolname(), toggleFlag,
1540 tool->rollover, tool->m_width,
1547 if (tool->rollover) {
1549 m_style->BuildPluginIcon(tool->pluginRolloverIcon, toggleFlag);
1552 m_style->BuildPluginIcon(tool->pluginNormalIcon, toggleFlag);
1555 bmp = m_style->BuildPluginIcon(tool->pluginNormalIcon, toggleFlag);
1557 if (fabs(m_sizefactor - 1.0) > 0.01) {
1558 if (tool->m_width && tool->m_height) {
1559 wxImage scaled_image = bmp.ConvertToImage();
1560 bmp = wxBitmap(scaled_image.Scale(tool->m_width, tool->m_height,
1561 wxIMAGE_QUALITY_HIGH));
1566 tool->SetNormalBitmap(bmp);
1567 tool->bitmapOK =
true;
1569 bmp = tool->GetNormalBitmap();
1570 if (tool->IsEnabled()) {
1571 if (tool->IsToggled()) {
1572 if (!tool->bitmapOK) {
1573 if (m_style->NativeToolIconExists(tool->GetToolname())) {
1574 bmp = m_style->GetToolIcon(tool->GetToolname(), TOOLICON_TOGGLED,
1575 tool->rollover, tool->m_width,
1577 tool->SetNormalBitmap(bmp);
1583 if (!tool->bitmapOK) {
1584 if (m_style->NativeToolIconExists(tool->GetToolname())) {
1585 bmp = m_style->GetToolIcon(tool->GetIconName(), TOOLICON_NORMAL,
1586 tool->rollover, tool->m_width,
1588 tool->SetNormalBitmap(bmp);
1593 tool->bitmapOK =
true;
1595 bmp = m_style->GetToolIcon(tool->GetToolname(), TOOLICON_DISABLED,
1596 false, tool->m_width, tool->m_height);
1597 tool->SetDisabledBitmap(bmp);
1598 tool->bitmapOK =
true;
1603 if (tool->firstInLine) {
1604 m_style->DrawToolbarLineStart(bmp, m_sizefactor);
1606 if (tool->lastInLine) {
1607 m_style->DrawToolbarLineEnd(bmp, m_sizefactor);
1610 if (bmp.GetWidth() != m_style->GetToolSize().x ||
1611 bmp.GetHeight() != m_style->GetToolSize().y) {
1617 if ((tool->last_rect.width &&
1618 (tool->last_rect.x != drawAt.x || tool->last_rect.y != drawAt.y)) ||
1620 wxBrush bb(GetGlobalColor(
"GREY3"));
1622 dc.SetPen(*wxTRANSPARENT_PEN);
1623 dc.DrawRectangle(tool->last_rect.x, tool->last_rect.y,
1624 tool->last_rect.width, tool->last_rect.height);
1631 wxImage scaled_image = bmp.ConvertToImage();
1632 wxBitmap sbmp = wxBitmap(scaled_image.Scale(tool->m_width, tool->m_height,
1633 wxIMAGE_QUALITY_HIGH));
1634 dc.DrawBitmap(sbmp, drawAt);
1636 wxRect(drawAt.x, drawAt.y, sbmp.GetWidth(), sbmp.GetHeight());
1639 dc.DrawBitmap(bmp, drawAt);
1641 wxRect(drawAt.x, drawAt.y, bmp.GetWidth(), bmp.GetHeight());
1649wxToolBarToolBase *ocpnToolBarSimple::FindToolForPosition(wxCoord x,
1651 wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1654 if ((x >= tool->m_x) && (y >= tool->m_y) &&
1655 (x < (tool->m_x + tool->GetWidth())) &&
1656 (y < (tool->m_y + tool->GetHeight()))) {
1660 node = node->GetNext();
1663 return (wxToolBarToolBase *)NULL;
1666void ocpnToolBarSimple::InvalidateBitmaps() {
1667 wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1670 tool->bitmapOK =
false;
1671 node = node->GetNext();
1673 m_bitmap = wxNullBitmap;
1676wxRect ocpnToolBarSimple::GetToolRect(
int tool_id) {
1678 wxToolBarToolBase *tool = FindById(tool_id);
1681 if (otool) rect = otool->trect;
1691void ocpnToolBarSimple::DoEnableTool(wxToolBarToolBase *tool,
1692 bool WXUNUSED(enable)) {
1694 t->bitmapOK =
false;
1697void ocpnToolBarSimple::DoToggleTool(wxToolBarToolBase *tool,
1698 bool WXUNUSED(toggle)) {
1700 t->bitmapOK =
false;
1708wxString ocpnToolBarSimple::GetToolShortHelp(
int id)
const {
1709 wxToolBarToolBase *tool = FindById(
id);
1710 wxCHECK_MSG(tool,
"",
"no such tool");
1712 return tool->GetShortHelp();
1715wxString ocpnToolBarSimple::GetToolLongHelp(
int id)
const {
1716 wxToolBarToolBase *tool = FindById(
id);
1717 wxCHECK_MSG(tool,
"",
"no such tool");
1719 return tool->GetLongHelp();
1722void ocpnToolBarSimple::SetToolShortHelp(
int id,
const wxString &help) {
1723 wxToolBarToolBase *tool = FindById(
id);
1725 (void)tool->SetShortHelp(help);
1729void ocpnToolBarSimple::SetToolLongHelp(
int id,
const wxString &help) {
1730 wxToolBarToolBase *tool = FindById(
id);
1732 (void)tool->SetLongHelp(help);
1736int ocpnToolBarSimple::GetToolPos(
int id)
const {
1738 wxToolBarToolsList::compatibility_iterator node;
1740 for (node = m_tools.GetFirst(); node; node = node->GetNext()) {
1741 if (node->GetData()->GetId() == id)
return pos;
1748bool ocpnToolBarSimple::GetToolState(
int id)
const {
1749 wxToolBarToolBase *tool = FindById(
id);
1750 wxCHECK_MSG(tool,
false,
"no such tool");
1752 return tool->IsToggled();
1755bool ocpnToolBarSimple::GetToolEnabled(
int id)
const {
1756 wxToolBarToolBase *tool = FindById(
id);
1757 wxCHECK_MSG(tool,
false,
"no such tool");
1759 return tool->IsEnabled();
1762void ocpnToolBarSimple::ToggleTool(
int id,
bool toggle) {
1763 wxToolBarToolBase *tool = FindById(
id);
1765 if (tool && tool->CanBeToggled() && tool->Toggle(toggle)) {
1766 DoToggleTool(tool, toggle);
1767 InvalidateBitmaps();
1768 top_frame::Get()->GetAbstractPrimaryCanvas()->Refresh(
true);
1772wxObject *ocpnToolBarSimple::GetToolClientData(
int id)
const {
1773 wxToolBarToolBase *tool = FindById(
id);
1774 return tool ? tool->GetClientData() : (wxObject *)NULL;
1777void ocpnToolBarSimple::SetToolClientData(
int id, wxObject *clientData) {
1778 wxToolBarToolBase *tool = FindById(
id);
1780 wxCHECK_RET(tool,
"no such tool in wxToolBar::SetToolClientData");
1782 tool->SetClientData(clientData);
1785void ocpnToolBarSimple::EnableTool(
int id,
bool enable) {
1786 wxToolBarToolBase *tool = FindById(
id);
1788 if (tool->Enable(enable)) {
1789 DoEnableTool(tool, enable);
1794 if (parent && parent->m_FloatingToolbarConfigMenu) {
1795 wxMenuItem *configItem = parent->m_FloatingToolbarConfigMenu->FindItem(
id);
1796 if (configItem) configItem->Check(
true);
1800void ocpnToolBarSimple::SetToolTooltipHiViz(
int id,
bool b_hiviz) {
1803 tool->SetTooltipHiviz(b_hiviz);
1807void ocpnToolBarSimple::ClearTools() {
1808 while (GetToolsCount()) {
1813int ocpnToolBarSimple::GetVisibleToolCount() {
1815 wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1819 node = node->GetNext();
1824bool ocpnToolBarSimple::DeleteToolByPos(
size_t pos) {
1825 wxCHECK_MSG(pos < GetToolsCount(),
false,
1826 "invalid position in wxToolBar::DeleteToolByPos()");
1828 wxToolBarToolsList::compatibility_iterator node = m_tools.Item(pos);
1830 if (!DoDeleteTool(pos, node->GetData())) {
1834 delete node->GetData();
1835 m_tools.Erase(node);
1840bool ocpnToolBarSimple::DeleteTool(
int id) {
1842 wxToolBarToolsList::compatibility_iterator node;
1843 for (node = m_tools.GetFirst(); node; node = node->GetNext()) {
1844 if (node->GetData()->GetId() == id)
break;
1849 if (!node || !DoDeleteTool(pos, node->GetData())) {
1853 delete node->GetData();
1854 m_tools.Erase(node);
1859wxToolBarToolBase *ocpnToolBarSimple::AddSeparator() {
1860 return InsertSeparator(GetToolsCount());
1863wxToolBarToolBase *ocpnToolBarSimple::InsertSeparator(
size_t pos) {
1864 wxCHECK_MSG(pos <= GetToolsCount(), (wxToolBarToolBase *)NULL,
1865 "invalid position in wxToolBar::InsertSeparator()");
1867 wxToolBarToolBase *tool =
1868 CreateTool(wxID_SEPARATOR,
"", wxNullBitmap, wxNullBitmap,
1869 wxITEM_SEPARATOR, (wxObject *)NULL,
"",
"");
1871 if (!tool || !DoInsertTool(pos, tool)) {
1877 m_tools.Insert(pos, tool);
1883wxToolBarToolBase *ocpnToolBarSimple::RemoveTool(
int id) {
1885 wxToolBarToolsList::compatibility_iterator node;
1886 for (node = m_tools.GetFirst(); node; node = node->GetNext()) {
1887 if (node->GetData()->GetId() == id)
break;
1895 return (wxToolBarToolBase *)NULL;
1898 wxToolBarToolBase *tool = node->GetData();
1899 if (!DoDeleteTool(pos, tool)) {
1900 return (wxToolBarToolBase *)NULL;
1903 m_tools.Erase(node);
1908wxControl *ocpnToolBarSimple::FindControl(
int id) {
1909 for (wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1910 node; node = node->GetNext()) {
1911 const wxToolBarToolBase *
const tool = node->GetData();
1912 if (tool->IsControl()) {
1913 wxControl *
const control = tool->GetControl();
1916 wxFAIL_MSG(
"NULL control in toolbar?");
1917 }
else if (control->GetId() ==
id) {
1927wxToolBarToolBase *ocpnToolBarSimple::FindById(
int id)
const {
1928 wxToolBarToolBase *tool = (wxToolBarToolBase *)NULL;
1930 for (wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
1931 node; node = node->GetNext()) {
1932 tool = node->GetData();
1933 if (tool->GetId() == id) {
1950bool ocpnToolBarSimple::OnLeftClick(
int id,
bool toggleDown) {
1951 wxCommandEvent event(wxEVT_COMMAND_TOOL_CLICKED,
id);
1955 event.SetInt((
int)toggleDown);
1958 event.SetExtraLong((
long)toggleDown);
1960 top_frame::Get()->GetEventHandler()->AddPendingEvent(event);
1966void ocpnToolBarSimple::OnRightClick(
int id,
long WXUNUSED(x),
1970 if (m_parentContainer) {
1971 if (m_parentContainer->m_FloatingToolbarConfigMenu) {
1974 wxDefaultPosition, wxSize(100, 100));
1975 int rc = dlg->ShowModal();
1978 if (rc == wxID_OK) {
1979 wxCommandEvent event(wxEVT_COMMAND_TOOL_RCLICKED,
id);
1980 event.SetEventObject(
this);
1983 top_frame::Get()->GetEventHandler()->AddPendingEvent(event);
1989void ocpnToolBarSimple::DoPluginToolUp() {
1994 ArrayOfPlugInToolbarTools tool_array =
1996 for (
unsigned int i = 0; i < tool_array.GetCount(); i++) {
1998 if (m_last_plugin_down_id == pttc->id) {
2005 m_last_plugin_down_id = -1;
2008void ocpnToolBarSimple::SetToolNormalBitmapEx(wxToolBarToolBase *tool,
2009 const wxString &iconName) {
2015 wxBitmap bmp = style->GetToolIcon(iconName, TOOLICON_NORMAL,
false,
2016 otool->m_width, otool->m_height);
2017 tool->SetNormalBitmap(bmp);
2018 otool->SetIconName(iconName);
2023void ocpnToolBarSimple::SetToolNormalBitmapSVG(wxToolBarToolBase *tool,
2028 otool->pluginNormalIconSVG = fileSVG;
2033void ocpnToolBarSimple::SetToolBitmaps(
int id, wxBitmap *bmp,
2034 wxBitmap *bmpRollover) {
2037 if (tool->isPluginTool) {
2038 if (bmp->GetWidth() != tool->GetWidth()) {
2040 wxImage ibmp = bmp->ConvertToImage();
2041 ibmp.Rescale(tool->GetWidth(), tool->GetHeight(),
2042 wxIMAGE_QUALITY_HIGH);
2043 wxBitmap sbmp = wxBitmap(ibmp);
2044 tool->pluginNormalIcon = sbmp;
2047 tool->pluginNormalIcon = *bmp;
2050 if (bmpRollover->GetWidth() != tool->GetWidth()) {
2051 if (bmpRollover->IsOk()) {
2052 wxImage ibmp = bmpRollover->ConvertToImage();
2053 ibmp.Rescale(tool->GetWidth(), tool->GetHeight(),
2054 wxIMAGE_QUALITY_HIGH);
2055 wxBitmap sbmp = wxBitmap(ibmp);
2056 tool->pluginRolloverIcon = sbmp;
2059 tool->pluginRolloverIcon = *bmpRollover;
2061 tool->bitmapOK =
false;
2064 tool->SetNormalBitmap(*bmp);
2065 tool->bitmapOK =
true;
2067 InvalidateBitmaps();
2071void ocpnToolBarSimple::SetToolBitmapsSVG(
int id, wxString fileSVGNormal,
2072 wxString fileSVGRollover,
2073 wxString fileSVGToggled) {
2076 tool->pluginNormalIconSVG = fileSVGNormal;
2077 tool->pluginRolloverIconSVG = fileSVGRollover;
2078 tool->pluginToggledIconSVG = fileSVGToggled;
2079 tool->bitmapOK =
false;
2080 InvalidateBitmaps();
2086ToolbarMOBDialog::ToolbarMOBDialog(wxWindow *parent)
2087 : wxDialog(parent, wxID_ANY, _(
"OpenCPN Alert"), wxDefaultPosition,
2089 wxBoxSizer *topSizer =
new wxBoxSizer(wxVERTICAL);
2091 wxBoxSizer *sizer =
new wxBoxSizer(wxVERTICAL);
2092 topSizer->Add(sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5);
2095 new wxRadioButton(
this, 0, _(
"No, I don't want to hide it."),
2096 wxDefaultPosition, wxDefaultSize, wxRB_GROUP));
2098 choices.push_back(
new wxRadioButton(
2099 this, 1, _(
"No, and permanently remove the option to hide it."),
2100 wxDefaultPosition));
2103 new wxRadioButton(
this, 2, _(
"Yes, hide it."), wxDefaultPosition));
2105 wxStdDialogButtonSizer *buttonSizer =
2106 CreateStdDialogButtonSizer(wxOK | wxCANCEL);
2108 wxStaticText *textCtrl =
2109 new wxStaticText(
this, wxID_ANY,
2110 _(
"The Man Over Board button could be an important "
2111 "safety feature.\nAre you sure you want to hide it?"));
2113 sizer->Add(textCtrl, 0, wxEXPAND | wxALL, 5);
2114 sizer->Add(choices[0], 0, wxEXPAND | wxALL, 5);
2115 sizer->Add(choices[1], 0, wxEXPAND | wxALL, 5);
2116 sizer->Add(choices[2], 0, wxEXPAND | wxALL, 5);
2117 sizer->Add(buttonSizer, 0, wxEXPAND | wxTOP, 5);
2119 topSizer->SetSizeHints(
this);
2123int ToolbarMOBDialog::GetSelection() {
2124 for (
unsigned int i = 0; i < choices.size(); i++) {
2125 if (choices[i]->GetValue())
return choices[i]->GetId();
2145 const wxString &caption,
2147 const wxSize &size,
long style) {
2148 long wstyle = wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER;
2149 wxDialog::Create(parent,
id, caption, pos, size, wstyle);
2151 m_configMenu = NULL;
2152 m_ToolbarDialogAncestor = sponsor;
2154 if (m_ToolbarDialogAncestor)
2155 m_configMenu = m_ToolbarDialogAncestor->m_FloatingToolbarConfigMenu;
2158 GetSizer()->Fit(
this);
2163ToolbarChoicesDialog::~ToolbarChoicesDialog() {}
2170 wxBoxSizer *itemBoxSizer1 =
new wxBoxSizer(wxVERTICAL);
2171 SetSizer(itemBoxSizer1);
2173 wxScrolledWindow *itemDialog1 =
new wxScrolledWindow(
2174 this, wxID_ANY, wxDefaultPosition, wxSize(-1, -1), wxHSCROLL | wxVSCROLL);
2175 itemDialog1->SetScrollRate(2, 2);
2182 wxString wqs = getFontQtStylesheet(qFont);
2183 wxCharBuffer sbuf = wqs.ToUTF8();
2184 QString qsb = QString(sbuf.data());
2186 QString qsbq = getQtStyleSheet();
2188 this->GetHandle()->setStyleSheet(qsb + qsbq);
2191 itemBoxSizer1->Add(itemDialog1, 2, wxEXPAND | wxALL, 0);
2193 wxBoxSizer *itemBoxSizer2 =
new wxBoxSizer(wxVERTICAL);
2194 itemDialog1->SetSizer(itemBoxSizer2);
2196 wxStaticBox *itemStaticBoxSizer3Static =
2197 new wxStaticBox(itemDialog1, wxID_ANY, _(
"Choose Toolbar Icons"));
2198 wxStaticBoxSizer *itemStaticBoxSizer3 =
2199 new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL);
2200 itemBoxSizer2->Add(itemStaticBoxSizer3, 0, wxEXPAND | wxALL, 5);
2205 nitems = m_configMenu->GetMenuItemCount();
2208 for (
int i = 0; i < nitems; i++) {
2209 if (i + ID_ZOOMIN == ID_MOB && g_bPermanentMOBIcon)
continue;
2210 wxMenuItem *item = m_configMenu->FindItemByPosition(i);
2212 wxString label = item->GetItemLabel();
2213 int l = label.Len();
2214 max_width = wxMax(max_width, l);
2216 wxString windowName =
"";
2217 if (item->GetId() == ID_MOB + 100) windowName =
"MOBCheck";
2220 new wxCheckBox(itemDialog1, -1, label, wxDefaultPosition,
2221 wxDefaultSize, 0, wxDefaultValidator, windowName);
2223 itemStaticBoxSizer3->Add(cb, 0, wxALL | wxEXPAND, 2);
2224 cb->SetValue(item->IsChecked());
2226 cboxes.push_back(cb);
2230 itemBoxSizer1->SetMinSize((max_width + 20) * GetCharWidth(),
2231 (nitems + 4) * GetCharHeight() * 2);
2233 wxBoxSizer *itemBoxSizerBottom =
new wxBoxSizer(wxHORIZONTAL);
2234 itemBoxSizer1->Add(itemBoxSizerBottom, 0, wxALL | wxEXPAND, 5);
2236 wxBoxSizer *itemBoxSizerAux =
new wxBoxSizer(wxHORIZONTAL);
2237 itemBoxSizerBottom->Add(itemBoxSizerAux, 1, wxALL, 3);
2239 wxBoxSizer *itemBoxSizer16 =
new wxBoxSizer(wxHORIZONTAL);
2240 itemBoxSizerBottom->Add(itemBoxSizer16, 0, wxALL, 3);
2243 new wxButton(
this, -1, _(
"Cancel"), wxDefaultPosition, wxDefaultSize, 0);
2244 itemBoxSizer16->Add(m_CancelButton, 0, wxALIGN_CENTER_VERTICAL | wxALL, 1);
2247 new wxButton(
this, -1, _(
"OK"), wxDefaultPosition, wxDefaultSize, 0);
2248 itemBoxSizer16->Add(m_OKButton, 0, wxALIGN_CENTER_VERTICAL | wxALL, 1);
2249 m_OKButton->SetDefault();
2251 m_CancelButton->Connect(
2252 wxEVT_COMMAND_BUTTON_CLICKED,
2253 wxCommandEventHandler(ToolbarChoicesDialog::OnCancelClick), NULL,
this);
2254 m_OKButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
2255 wxCommandEventHandler(ToolbarChoicesDialog::OnOkClick),
2258 SetColorScheme((ColorScheme)0);
2261void ToolbarChoicesDialog::SetColorScheme(ColorScheme cs) { DimeControl(
this); }
2263void ToolbarChoicesDialog::OnCancelClick(wxCommandEvent &event) {
2264 EndModal(wxID_CANCEL);
2267void ToolbarChoicesDialog::OnOkClick(wxCommandEvent &event) {
2268 unsigned int ncheck = 0;
2270 wxString toolbarConfigSave = m_ToolbarDialogAncestor->GetToolConfigString();
2271 wxString new_toolbarConfig = toolbarConfigSave;
2273 for (
unsigned int i = 0; i < cboxes.size(); i++) {
2274 wxCheckBox *cb = cboxes[i];
2275 wxString cbName = cb->GetName();
2277 if (cbName.IsSameAs(
"MOBCheck") && !cb->IsChecked()) {
2280 int dialog_ret = mdlg.ShowModal();
2281 int answer = mdlg.GetSelection();
2282 if (dialog_ret == wxID_OK) {
2284 g_bPermanentMOBIcon =
true;
2286 }
else if (answer == 0) {
2290 new_toolbarConfig = toolbarConfigSave;
2295 wxMenuItem *item = m_configMenu->FindItemByPosition(i);
2296 if (new_toolbarConfig.Len() > i) {
2297 new_toolbarConfig.SetChar(i, cb->IsChecked() ?
'X' :
'.');
2299 new_toolbarConfig.Append(cb->IsChecked() ?
'X' :
'.');
2301 item->Check(cb->IsChecked());
2302 if (cb->IsChecked()) ncheck++;
2309 new_toolbarConfig.SetChar( ID_SETTINGS -ID_ZOOMIN ,
'X' );
2311 int idOffset = ID_PLUGIN_BASE - ID_ZOOMIN + 100;
2314 wxMenuItem *item = m_configMenu->FindItem(ID_SETTINGS + idOffset);
2316 item->Check(
true );
2320 m_ToolbarDialogAncestor->SetToolConfigString(new_toolbarConfig);
2325void ToolbarChoicesDialog::RecalculateSize() {
2326 wxSize esize = GetSize();
2329 wxSize dsize = GetParent()->GetClientSize();
2330 esize.y = wxMin(esize.y, dsize.y - (4 * GetCharHeight()));
2331 esize.x = wxMin(esize.x, dsize.x - (2 * GetCharHeight()));
2337 fsize.y = wxMin(esize.y, fsize.y - (4 * GetCharHeight()));
2338 fsize.x = wxMin(esize.x, fsize.x - (2 * GetCharHeight()));
2342 Move(GetPosition().x, 10);
Global state for AIS decoder.
Charts database management
Generic Chart canvas base.
Device context class that can use either wxDC or OpenGL for drawing.
virtual void OnToolbarToolDownCallback(int id)
Handles toolbar button press.
virtual void OnToolbarToolUpCallback(int id)
Handles toolbar button release.
Global variables stored in configuration file.
OpenGL chart rendering canvas.
wxFont * GetOCPNScaledFont(wxString item, int default_size)
Retrieves a font from FontMgr, optionally scaled for physical readability.
General purpose GUI support.
Miscellaneous globals primarely used by gui layer, not persisted in configuration file.
GUI constant definitions.
PlugInManager * g_pi_manager
Global instance.
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.