mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 19:42:43 +00:00 
			
		
		
		
	 ecf8f243a6
			
		
	
	
		ecf8f243a6
		
	
	
	
	
		
			
			Since there's only one global toolbox, it makes sense to store the active tool in here, since we don't really have control over the deletion of an editor.
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			893 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			893 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/NonnullOwnPtrVector.h>
 | |
| #include <LibGUI/ActionGroup.h>
 | |
| #include <LibGUI/Widget.h>
 | |
| 
 | |
| namespace PixelPaint {
 | |
| 
 | |
| class Tool;
 | |
| 
 | |
| class ToolboxWidget final : public GUI::Widget {
 | |
|     C_OBJECT(ToolboxWidget);
 | |
| 
 | |
| public:
 | |
|     virtual ~ToolboxWidget() override;
 | |
| 
 | |
|     Function<void(Tool*)> on_tool_selection;
 | |
| 
 | |
|     template<typename Callback>
 | |
|     void for_each_tool(Callback callback)
 | |
|     {
 | |
|         for (auto& tool : m_tools)
 | |
|             callback(tool);
 | |
|     }
 | |
| 
 | |
|     Tool* active_tool() const { return m_active_tool; }
 | |
| 
 | |
| private:
 | |
|     friend class ToolButton;
 | |
| 
 | |
|     void setup_tools();
 | |
| 
 | |
|     explicit ToolboxWidget();
 | |
|     RefPtr<GUI::Toolbar> m_toolbar;
 | |
|     GUI::ActionGroup m_action_group;
 | |
|     NonnullOwnPtrVector<Tool> m_tools;
 | |
|     Tool* m_active_tool { nullptr };
 | |
| };
 | |
| 
 | |
| }
 |