/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/Tools/Libs/GuiFoundation/ActionViews/Implementation/ToolBarActionMapView.cpp
154 строки
5 KB
Jan Krassnigg
Added asset specific help buttons (#1540)
20 апр 2025, 14:17
Не верифицирован
20 апр 2025, 14:17
ba2f80c
Код
Авторство
О чём код?
#include <GuiFoundation/GuiFoundationPCH.h> #include <Foundation/Strings/TranslationLookup.h> #include <GuiFoundation/Action/ActionManager.h> #include <GuiFoundation/Action/ActionMapManager.h> #include <GuiFoundation/ActionViews/MenuActionMapView.moc.h> #include <GuiFoundation/ActionViews/QtProxy.moc.h> #include <GuiFoundation/ActionViews/ToolBarActionMapView.moc.h> #include <GuiFoundation/UIServices/UIServices.moc.h> #include <QMenu> #include <QToolButton> ezQtToolBarActionMapView::ezQtToolBarActionMapView(QString sTitle, QWidget* pParent) : QToolBar(sTitle, pParent) { setIconSize(QSize(16, 16)); setFloatable(false); toggleViewAction()->setEnabled(false); } ezQtToolBarActionMapView::~ezQtToolBarActionMapView() { ClearView(); } void ezQtToolBarActionMapView::SetActionContext(const ezActionContext& context) { auto pMap = ezActionMapManager::GetActionMap(context.m_sMapping); EZ_ASSERT_DEV(pMap != nullptr, "The given mapping '{0}' does not exist", context.m_sMapping); m_pActionMap = pMap; m_Context = context; CreateView(); } void ezQtToolBarActionMapView::setVisible(bool bVisible) { QToolBar::setVisible(true); } void ezQtToolBarActionMapView::ClearView() { m_Proxies.Clear(); } void ezQtToolBarActionMapView::CreateView() { ClearView(); auto pObject = m_pActionMap->BuildActionTree(); CreateView(pObject); if (!actions().isEmpty() && actions().back()->isSeparator()) { QAction* pAction = actions().back(); removeAction(pAction); pAction->deleteLater(); } } void ezQtToolBarActionMapView::CreateView(const ezActionMap::TreeNode* pObject) { for (auto pChild : pObject->GetChildren()) { auto pDesc = m_pActionMap->GetDescriptor(pChild); QSharedPointer<ezQtProxy> pProxy = ezQtProxy::GetProxy(m_Context, pDesc->m_hAction); m_Proxies[pChild->GetGuid()] = pProxy; switch (pDesc->m_hAction.GetDescriptor()->m_Type) { case ezActionType::Action: { QAction* pQtAction = static_cast<ezQtActionProxy*>(pProxy.data())->GetQAction(); addAction(pQtAction); } break; case ezActionType::Category: { if (!actions().isEmpty() && !actions().back()->isSeparator()) addSeparator()->setParent(pProxy.data()); CreateView(pChild); if (!actions().isEmpty() && !actions().back()->isSeparator()) addSeparator()->setParent(pProxy.data()); } break; case ezActionType::Menu: { ezNamedAction* pNamed = static_cast<ezNamedAction*>(pProxy->GetAction()); QMenu* pQtMenu = static_cast<ezQtMenuProxy*>(pProxy.data())->GetQMenu(); // TODO pButton leaks! QToolButton* pButton = new QToolButton(this); pButton->setMenu(pQtMenu); pButton->setPopupMode(QToolButton::ToolButtonPopupMode::InstantPopup); pButton->setText(pQtMenu->title()); pButton->setIcon(ezQtUiServices::GetCachedIconResource(pNamed->GetIconPath())); ezStringBuilder sTooltip = ezTranslateTooltip(pNamed->GetName()); if (sTooltip.IsEmpty()) { sTooltip = ezTranslate(pNamed->GetName()); sTooltip.ReplaceAll("&", ""); } pButton->setToolTip(ezMakeQString(sTooltip)); pNamed->m_StatusUpdateEvent.AddEventHandler([=](ezAction* pAction) { pButton->setIcon(ezQtUiServices::GetCachedIconResource(pNamed->GetIconPath())); }); // TODO addWidget return value of QAction leaks! QAction* pToolButtonAction = addWidget(pButton); pToolButtonAction->setParent(pQtMenu); ezQtMenuActionMapView::AddDocumentObjectToMenu(m_Proxies, m_Context, m_pActionMap, pQtMenu, pChild); } break; case ezActionType::ActionAndMenu: { ezNamedAction* pNamed = static_cast<ezNamedAction*>(pProxy->GetAction()); QMenu* pQtMenu = static_cast<ezQtDynamicActionAndMenuProxy*>(pProxy.data())->GetQMenu(); QAction* pQtAction = static_cast<ezQtDynamicActionAndMenuProxy*>(pProxy.data())->GetQAction(); // TODO pButton leaks! QToolButton* pButton = new QToolButton(this); pButton->setDefaultAction(pQtAction); pButton->setMenu(pQtMenu); pButton->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); ezStringBuilder sTooltip = ezTranslateTooltip(pNamed->GetName()); if (sTooltip.IsEmpty()) { sTooltip = ezTranslate(pNamed->GetName()); sTooltip.ReplaceAll("&", ""); } pButton->setToolTip(ezMakeQString(sTooltip)); // TODO addWidget return value of QAction leaks! QAction* pToolButtonAction = addWidget(pButton); pToolButtonAction->setParent(pQtMenu); ezQtMenuActionMapView::AddDocumentObjectToMenu(m_Proxies, m_Context, m_pActionMap, pQtMenu, pChild); } break; } } }