| 971 | menu->show(); |
| 972 | } |
| 973 | void DebuggerPlugin::buildStatusBar() { |
| 974 | if ( mProjectPath.empty() ) { |
| 975 | hideStatusBarElement(); |
| 976 | return; |
| 977 | } |
| 978 | if ( getPluginContext()->getStatusBar() ) { |
| 979 | auto but = getPluginContext()->getStatusBar()->find( "status_app_debugger" ); |
| 980 | if ( but ) { |
| 981 | but->setVisible( true ); |
| 982 | return; |
| 983 | } |
| 984 | } |
| 985 | |
| 986 | auto context = getPluginContext(); |
| 987 | UIStatusBar* statusBar = context->getStatusBar(); |
| 988 | |
| 989 | auto debuggerStatusElem = std::make_shared<StatusDebuggerController>( |
| 990 | context->getMainSplitter(), getUISceneNode(), context ); |
| 991 | |
| 992 | statusBar->insertStatusBarElement( "status_app_debugger", i18n( "debugger", "Debugger" ), |
| 993 | "icon(debug, 11dp)", debuggerStatusElem ); |
| 994 | |
| 995 | debuggerStatusElem->onWidgetCreated = [this]( StatusDebuggerController* sdc, UIWidget* ) { |
| 996 | UITreeView* uiExpressions = sdc->getUIExpressions(); |
| 997 | uiExpressions->setModel( mExpressionsHolder->getModel() ); |
| 998 | uiExpressions->removeEventsOfType( Event::OnModelEvent ); |
| 999 | uiExpressions->onModelEvent( [this]( const ModelEvent* modelEvent ) { |
| 1000 | if ( modelEvent->getModelEventType() == Abstract::ModelEventType::OpenMenu ) { |
| 1001 | openExpressionMenu( modelEvent->getModelIndex() ); |
| 1002 | } else if ( mDebugger && mListener && |
| 1003 | modelEvent->getModelEventType() == Abstract::ModelEventType::OpenTree ) { |
| 1004 | ModelVariableNode* node = |
| 1005 | static_cast<ModelVariableNode*>( modelEvent->getModelIndex().internalData() ); |
| 1006 | mDebugger->variables( |
| 1007 | node->var.variablesReference, Variable::Type::Both, |
| 1008 | [this]( const int variablesReference, std::vector<Variable>&& vars ) { |
| 1009 | mExpressionsHolder->addVariables( variablesReference, std::move( vars ) ); |
| 1010 | } ); |
| 1011 | mExpressionsHolder->saveExpandedState( modelEvent->getModelIndex(), true ); |
| 1012 | } else if ( mDebugger && mListener && |
| 1013 | modelEvent->getModelEventType() == Abstract::ModelEventType::CloseTree ) { |
| 1014 | mExpressionsHolder->removeExpandedState( modelEvent->getModelIndex(), true ); |
| 1015 | } |
| 1016 | } ); |
| 1017 | uiExpressions->removeEventsOfType( Event::MouseClick ); |
| 1018 | uiExpressions->onClick( [this]( const MouseEvent* ) { openExpressionMenu( {} ); }, |
| 1019 | MouseButton::EE_BUTTON_RIGHT ); |
| 1020 | |
| 1021 | auto uiBreakpoints = sdc->getUIBreakpoints(); |
| 1022 | if ( nullptr == uiBreakpoints->onBreakpointEnabledChange ) { |
| 1023 | uiBreakpoints->onBreakpointEnabledChange = [this]( const std::string& filePath, |
| 1024 | int line, bool enabled ) { |
| 1025 | breakpointSetEnabled( filePath, line, enabled ); |
| 1026 | }; |
| 1027 | } |
| 1028 | |
| 1029 | if ( nullptr == uiBreakpoints->onBreakpointRemove ) { |
| 1030 | uiBreakpoints->onBreakpointRemove = [this]( const std::string& filePath, int line ) { |
nothing calls this directly
no test coverage detected