#ifndef _FleetButton_h_ #define _FleetButton_h_ #include #include #include class Fleet; class RotatingGraphic; class ScanlineControl; /** represents one or more fleets of an empire at a location on the map. */ class FleetButton : public GG::Button { public: enum class SizeType { NONE, TINY, SMALL, MEDIUM, LARGE }; /** \name Structors */ //@{ FleetButton(const std::vector& fleet_IDs, SizeType size_type = SizeType::LARGE); FleetButton(int fleet_id, SizeType size_type = SizeType::LARGE); void CompleteConstruction() override; virtual ~FleetButton(); //@} /** \name Accessors */ //@{ /** Returns true if \a pt is within or over the button. */ bool InWindow(const GG::Pt& pt) const override; const std::vector& Fleets() const { return m_fleets; } ///< returns the fleets represented by this control bool Selected() const { return m_selected; } ///< returns whether this button has been marked selected //@} /** \name Mutators */ //@{ void MouseHere(const GG::Pt& pt, GG::Flags mod_keys) override; void SizeMove(const GG::Pt& ul, const GG::Pt& lr) override; void SetSelected(bool selected = true); ///< sets selection status of button. if selected = true, marks button as selected. otherwise marks button as not selected //@} static void PlayFleetButtonOpenSound(); static void PlayFleetButtonRolloverSound(); protected: /** \name Mutators */ //@{ void RenderUnpressed() override; void RenderPressed() override; void RenderRollover() override; //@} private: void LayoutIcons(); std::vector m_fleets; ///< the fleets represented by this button std::vector> m_icons; std::shared_ptr m_selection_indicator; std::shared_ptr m_scanline_control; bool m_selected = false; ///< should this button render itself specially to show that it is selected? bool m_fleet_blockaded = false; }; /* returns head icon for passed fleet at passed icon size */ std::vector> FleetHeadIcons(std::shared_ptr, FleetButton::SizeType size_type); /* returns head icon for passed fleets at passed icon size */ std::vector> FleetHeadIcons(const std::vector>& fleets, FleetButton::SizeType size_type); /* returns size icon for passed fleet at passed icon size */ std::shared_ptr FleetSizeIcon(std::shared_ptr fleet, FleetButton::SizeType size_type); /* returns head icon for passed fleet size at passed icon size */ std::shared_ptr FleetSizeIcon(unsigned int fleet_size, FleetButton::SizeType size_type); /* returns blockade icon if a fleet is being blockaded */ std::shared_ptr FleetBlockadedIcon(FleetButton::SizeType size_type); /* returns icon for indication fleet icon selection */ std::shared_ptr FleetSelectionIndicatorIcon(); #endif // _FleetButton_h_