void wxGISToolBar::Serialize(IApplication* pApp, wxXmlNode* pNode, bool bStore) { if(bStore) { pNode->AddProperty(wxT("size"), wxString::Format(wxT("%u"), GetToolBitmapSize().GetWidth())); pNode->AddProperty(wxT("LeftDockable"), m_bLDock == true ? wxT("t") : wxT("f")); pNode->AddProperty(wxT("RightDockable"), m_bRDock == true ? wxT("t") : wxT("f")); wxGISCommandBar::Serialize(pApp, pNode, bStore); } else { m_bLDock = pNode->GetPropVal(wxT("LeftDockable"), wxT("f")) == wxT("f") ? false : true; m_bRDock = pNode->GetPropVal(wxT("RightDockable"), wxT("f")) == wxT("f") ? false : true; short iSize = wxAtoi(pNode->GetPropVal(wxT("size"), wxT("16"))); SetToolBitmapSize(wxSize(iSize,iSize)); wxAuiToolBarItemArray prepend_items; wxAuiToolBarItemArray append_items; ICommand* pCmd = pApp->GetCommand(wxT("wxGISCommonCmd"), 2); if(pCmd) { wxAuiToolBarItem item; item.SetKind(wxITEM_SEPARATOR); append_items.Add(item); item.SetKind(pCmd->GetKind()); item.SetId(pCmd->GetID()); item.SetLabel(pCmd->GetCaption()); append_items.Add(item); } SetCustomOverflowItems(prepend_items, append_items); wxGISCommandBar::Serialize(pApp, pNode, bStore); Realize(); } }
void CToolBar::MakeTool(char const* id, std::wstring const& art, wxString const& tooltip, wxString const& help, wxItemKind type) { if (help.empty() && !tooltip.empty()) { MakeTool(id, art, tooltip, tooltip, type); return; } wxBitmap bmp = CThemeProvider::Get()->CreateBitmap(art, wxART_TOOLBAR, GetToolBitmapSize()); wxToolBar::AddTool(XRCID(id), wxString(), bmp, wxBitmap(), type, tooltip, help); }
bool CToolBar::Realize() { wxASSERT(HasFlag(wxTB_NOICONS)); bool ret = wxToolBar::Realize(); if (!ret) { return false; } wxSize const size = GetToolBitmapSize(); wxASSERT(size.x > 0 && size.y > 0); auto toolImages = std::make_unique<wxImageList>(size.x, size.y, false, 0); auto disabledToolImages = std::make_unique<wxImageList>(size.x, size.y, false, 0); HWND hwnd = GetHandle(); auto hImgList = reinterpret_cast<HIMAGELIST>(toolImages->GetHIMAGELIST()); auto hDisabledImgList = reinterpret_cast<HIMAGELIST>(disabledToolImages->GetHIMAGELIST()); ::SendMessage(hwnd, TB_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(hImgList)); ::SendMessage(hwnd, TB_SETDISABLEDIMAGELIST, 0, reinterpret_cast<LPARAM>(hDisabledImgList)); toolImages_ = std::move(toolImages); disabledToolImages_ = std::move(disabledToolImages); for (size_t i = 0; i < GetToolsCount(); ++i) { auto tool = GetToolByPos(static_cast<int>(i)); if (!tool || tool->GetStyle() != wxTOOL_STYLE_BUTTON) { continue; } auto bmp = tool->GetBitmap(); if (!bmp.IsOk()) { continue; } int image = toolImages_->Add(bmp); auto disabled = tool->GetDisabledBitmap(); if (!disabled.IsOk()) { disabled = wxBitmap(bmp.ConvertToImage().ConvertToGreyscale()); } disabledToolImages_->Add(disabled); TBBUTTONINFO btn{}; btn.cbSize = sizeof(TBBUTTONINFO); btn.dwMask = TBIF_BYINDEX; int index = ::SendMessage(hwnd, TB_GETBUTTONINFO, i, reinterpret_cast<LPARAM>(&btn)); if (index != static_cast<int>(i)) { return false; } btn.dwMask = TBIF_BYINDEX | TBIF_IMAGE; btn.iImage = image; if (::SendMessage(hwnd, TB_SETBUTTONINFO, i, reinterpret_cast<LPARAM>(&btn)) == 0) { return false; } } ::SendMessage(hwnd, TB_SETINDENT, ConvertDialogToPixels(wxPoint(1, 0)).x, 0); return true; }