#pragma once #include #include #include #include "Blueprint.h" #include "BlueprintModeExitedEvent.h" #include "BuildingBlocksChangedEvent.h" #include "BuildingId.h" #include "EventHandler.h" #include "GameConfig.h" #include "SelectionChangedEvent.h" #include "TemporaryBlueprintRequestedEvent.h" #include "Tick.h" class Simulation; class QPushButton; class QScrollArea; class QVBoxLayout; class BlueprintPanel : public QWidget, public CombinedEventHandler { Q_OBJECT public: BlueprintPanel(Simulation* sim, const GameConfig* config, QWidget* parent = nullptr); ~BlueprintPanel() override; private: void handleEvent(std::shared_ptr event) override; void handleEvent(std::shared_ptr event) override; void handleEvent(std::shared_ptr event) override; void handleEvent(std::shared_ptr event) override; private slots: void onCreateClicked(); void onDeleteBlueprintClicked(int index); void onBlueprintButtonClicked(int index); private: void onSelectionChanged(const std::vector& ids); void clearActiveBlueprintButton(); Blueprint createBlueprintFromSelection() const; int computeBlueprintCost(const Blueprint& bp) const; void rebuildButtons(); void refreshButtonStates(); void loadFromDisk(); void saveToDisk() const; Simulation* m_sim; const GameConfig* m_config; std::vector m_selectedBuildingIds; int m_currentBlocks; std::optional m_activeIndex; // nullopt = no blueprint selected std::vector m_blueprints; std::vector m_blueprintButtons; QPushButton* m_createBtn; QWidget* m_buttonsContainer; QVBoxLayout* m_buttonsLayout; };