mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 08:32:43 +00:00 
			
		
		
		
	HackStudio: Add a factory function for DebugInfoWidget
Thanks to this patch we now do error propagation in the DebugInfoWidget creation and as a result we get rid of 4 FIXMEs :)
This commit is contained in:
		
							parent
							
								
									55a903911b
								
							
						
					
					
						commit
						4c732abed5
					
				
					 4 changed files with 29 additions and 13 deletions
				
			
		|  | @ -22,21 +22,21 @@ | ||||||
| 
 | 
 | ||||||
| namespace HackStudio { | namespace HackStudio { | ||||||
| 
 | 
 | ||||||
| void DebugInfoWidget::init_toolbar() | ErrorOr<void> DebugInfoWidget::init_toolbar() | ||||||
| { | { | ||||||
|     m_continue_action = GUI::Action::create("Continue", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-continue.png"sv).release_value_but_fixme_should_propagate_errors(), [](auto&) { |     m_continue_action = GUI::Action::create("Continue", TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-continue.png"sv)), [](auto&) { | ||||||
|         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::Continue); |         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::Continue); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_singlestep_action = GUI::Action::create("Step Over", { Mod_None, Key_F10 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-over.png"sv).release_value_but_fixme_should_propagate_errors(), [](auto&) { |     m_singlestep_action = GUI::Action::create("Step Over", { Mod_None, Key_F10 }, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-over.png"sv)), [](auto&) { | ||||||
|         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOver); |         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOver); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_step_in_action = GUI::Action::create("Step In", { Mod_None, Key_F11 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-in.png"sv).release_value_but_fixme_should_propagate_errors(), [](auto&) { |     m_step_in_action = GUI::Action::create("Step In", { Mod_None, Key_F11 }, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-in.png"sv)), [](auto&) { | ||||||
|         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceSingleStep); |         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceSingleStep); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_step_out_action = GUI::Action::create("Step Out", { Mod_Shift, Key_F11 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-out.png"sv).release_value_but_fixme_should_propagate_errors(), [](auto&) { |     m_step_out_action = GUI::Action::create("Step Out", { Mod_Shift, Key_F11 }, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/debug-step-out.png"sv)), [](auto&) { | ||||||
|         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOut); |         Debugger::the().set_requested_debugger_action(Debugger::DebuggerAction::SourceStepOut); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  | @ -46,14 +46,25 @@ void DebugInfoWidget::init_toolbar() | ||||||
|     m_toolbar->add_action(*m_step_out_action); |     m_toolbar->add_action(*m_step_out_action); | ||||||
| 
 | 
 | ||||||
|     set_debug_actions_enabled(false); |     set_debug_actions_enabled(false); | ||||||
|  | 
 | ||||||
|  |     return {}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ErrorOr<NonnullRefPtr<DebugInfoWidget>> DebugInfoWidget::create() | ||||||
|  | { | ||||||
|  |     auto debuginfo_widget = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) DebugInfoWidget)); | ||||||
|  | 
 | ||||||
|  |     auto& toolbar_container = debuginfo_widget->add<GUI::ToolbarContainer>(); | ||||||
|  |     debuginfo_widget->m_toolbar = toolbar_container.add<GUI::Toolbar>(); | ||||||
|  | 
 | ||||||
|  |     TRY(debuginfo_widget->init_toolbar()); | ||||||
|  | 
 | ||||||
|  |     return debuginfo_widget; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DebugInfoWidget::DebugInfoWidget() | DebugInfoWidget::DebugInfoWidget() | ||||||
| { | { | ||||||
|     set_layout<GUI::VerticalBoxLayout>(); |     set_layout<GUI::VerticalBoxLayout>(); | ||||||
|     auto& toolbar_container = add<GUI::ToolbarContainer>(); |  | ||||||
|     m_toolbar = toolbar_container.add<GUI::Toolbar>(); |  | ||||||
|     init_toolbar(); |  | ||||||
|     auto& bottom_box = add<GUI::Widget>(); |     auto& bottom_box = add<GUI::Widget>(); | ||||||
|     bottom_box.set_layout<GUI::HorizontalBoxLayout>(); |     bottom_box.set_layout<GUI::HorizontalBoxLayout>(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ namespace HackStudio { | ||||||
| class DebugInfoWidget final : public GUI::Widget { | class DebugInfoWidget final : public GUI::Widget { | ||||||
|     C_OBJECT(DebugInfoWidget) |     C_OBJECT(DebugInfoWidget) | ||||||
| public: | public: | ||||||
|  |     static ErrorOr<NonnullRefPtr<DebugInfoWidget>> create(); | ||||||
|     virtual ~DebugInfoWidget() override { } |     virtual ~DebugInfoWidget() override { } | ||||||
| 
 | 
 | ||||||
|     void update_state(Debug::ProcessInspector&, PtraceRegisters const&); |     void update_state(Debug::ProcessInspector&, PtraceRegisters const&); | ||||||
|  | @ -34,7 +35,7 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     explicit DebugInfoWidget(); |     explicit DebugInfoWidget(); | ||||||
|     void init_toolbar(); |     ErrorOr<void> init_toolbar(); | ||||||
| 
 | 
 | ||||||
|     NonnullRefPtr<GUI::Widget> build_variables_tab(); |     NonnullRefPtr<GUI::Widget> build_variables_tab(); | ||||||
|     NonnullRefPtr<GUI::Widget> build_registers_tab(); |     NonnullRefPtr<GUI::Widget> build_registers_tab(); | ||||||
|  |  | ||||||
|  | @ -125,7 +125,7 @@ ErrorOr<NonnullRefPtr<HackStudioWidget>> HackStudioWidget::create(DeprecatedStri | ||||||
|     widget->m_save_as_action = widget->create_save_as_action(); |     widget->m_save_as_action = widget->create_save_as_action(); | ||||||
|     widget->m_new_project_action = widget->create_new_project_action(); |     widget->m_new_project_action = widget->create_new_project_action(); | ||||||
| 
 | 
 | ||||||
|     widget->create_action_tab(*widget->m_right_hand_splitter); |     TRY(widget->create_action_tab(*widget->m_right_hand_splitter)); | ||||||
| 
 | 
 | ||||||
|     widget->m_add_editor_tab_widget_action = widget->create_add_editor_tab_widget_action(); |     widget->m_add_editor_tab_widget_action = widget->create_add_editor_tab_widget_action(); | ||||||
|     widget->m_add_editor_action = widget->create_add_editor_action(); |     widget->m_add_editor_action = widget->create_add_editor_action(); | ||||||
|  | @ -1300,7 +1300,7 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_run_action() | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void HackStudioWidget::create_action_tab(GUI::Widget& parent) | ErrorOr<void> HackStudioWidget::create_action_tab(GUI::Widget& parent) | ||||||
| { | { | ||||||
|     m_action_tab_widget = parent.add<GUI::TabWidget>(); |     m_action_tab_widget = parent.add<GUI::TabWidget>(); | ||||||
| 
 | 
 | ||||||
|  | @ -1317,7 +1317,9 @@ void HackStudioWidget::create_action_tab(GUI::Widget& parent) | ||||||
|     m_find_in_files_widget = m_action_tab_widget->add_tab<FindInFilesWidget>("Find in files"); |     m_find_in_files_widget = m_action_tab_widget->add_tab<FindInFilesWidget>("Find in files"); | ||||||
|     m_todo_entries_widget = m_action_tab_widget->add_tab<ToDoEntriesWidget>("TODO"); |     m_todo_entries_widget = m_action_tab_widget->add_tab<ToDoEntriesWidget>("TODO"); | ||||||
|     m_terminal_wrapper = m_action_tab_widget->add_tab<TerminalWrapper>("Console", false); |     m_terminal_wrapper = m_action_tab_widget->add_tab<TerminalWrapper>("Console", false); | ||||||
|     m_debug_info_widget = m_action_tab_widget->add_tab<DebugInfoWidget>("Debug"); |     auto debug_info_widget = TRY(DebugInfoWidget::create()); | ||||||
|  |     TRY(m_action_tab_widget->add_tab(debug_info_widget, "Debug")); | ||||||
|  |     m_debug_info_widget = debug_info_widget; | ||||||
| 
 | 
 | ||||||
|     m_debug_info_widget->on_backtrace_frame_selection = [this](Debug::DebugInfo::SourcePosition const& source_position) { |     m_debug_info_widget->on_backtrace_frame_selection = [this](Debug::DebugInfo::SourcePosition const& source_position) { | ||||||
|         open_file(get_absolute_path(source_position.file_path), source_position.line_number - 1); |         open_file(get_absolute_path(source_position.file_path), source_position.line_number - 1); | ||||||
|  | @ -1334,6 +1336,8 @@ void HackStudioWidget::create_action_tab(GUI::Widget& parent) | ||||||
|     ToDoEntries::the().on_update = [this]() { |     ToDoEntries::the().on_update = [this]() { | ||||||
|         m_todo_entries_widget->refresh(); |         m_todo_entries_widget->refresh(); | ||||||
|     }; |     }; | ||||||
|  | 
 | ||||||
|  |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void HackStudioWidget::create_project_tab(GUI::Widget& parent) | void HackStudioWidget::create_project_tab(GUI::Widget& parent) | ||||||
|  |  | ||||||
|  | @ -145,7 +145,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     void create_open_files_view(GUI::Widget& parent); |     void create_open_files_view(GUI::Widget& parent); | ||||||
|     void create_toolbar(GUI::Widget& parent); |     void create_toolbar(GUI::Widget& parent); | ||||||
|     void create_action_tab(GUI::Widget& parent); |     ErrorOr<void> create_action_tab(GUI::Widget& parent); | ||||||
|     void create_file_menu(GUI::Window&); |     void create_file_menu(GUI::Window&); | ||||||
|     void update_recent_projects_submenu(); |     void update_recent_projects_submenu(); | ||||||
|     void create_edit_menu(GUI::Window&); |     void create_edit_menu(GUI::Window&); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Baitinq
						Baitinq