1 #ifndef _FleetButton_h_ 2 #define _FleetButton_h_ 3 4 5 #include <GG/Button.h> 6 #include <GG/StaticGraphic.h> 7 8 #include <memory> 9 10 11 class Fleet; 12 class RotatingGraphic; 13 class ScanlineControl; 14 15 /** represents one or more fleets of an empire at a location on the map. */ 16 class FleetButton : public GG::Button { 17 public: 18 enum class SizeType { 19 NONE, 20 TINY, 21 SMALL, 22 MEDIUM, 23 LARGE 24 }; 25 26 /** \name Structors */ //@{ 27 FleetButton(const std::vector<int>& fleet_IDs, SizeType size_type = SizeType::LARGE); 28 FleetButton(int fleet_id, SizeType size_type = SizeType::LARGE); 29 void CompleteConstruction() override; 30 virtual ~FleetButton(); 31 //@} 32 33 /** \name Accessors */ //@{ 34 /** Returns true if \a pt is within or over the button. */ 35 bool InWindow(const GG::Pt& pt) const override; 36 Fleets()37 const std::vector<int>& Fleets() const { return m_fleets; } ///< returns the fleets represented by this control Selected()38 bool Selected() const { return m_selected; } ///< returns whether this button has been marked selected 39 //@} 40 41 /** \name Mutators */ //@{ 42 void MouseHere(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) override; 43 44 void SizeMove(const GG::Pt& ul, const GG::Pt& lr) override; 45 46 void SetSelected(bool selected = true); ///< sets selection status of button. if selected = true, marks button as selected. otherwise marks button as not selected 47 //@} 48 49 static void PlayFleetButtonOpenSound(); 50 static void PlayFleetButtonRolloverSound(); 51 52 protected: 53 /** \name Mutators */ //@{ 54 void RenderUnpressed() override; 55 void RenderPressed() override; 56 void RenderRollover() override; 57 //@} 58 59 private: 60 void LayoutIcons(); 61 62 std::vector<int> m_fleets; ///< the fleets represented by this button 63 std::vector<std::shared_ptr<GG::StaticGraphic>> m_icons; 64 std::shared_ptr<RotatingGraphic> m_selection_indicator; 65 std::shared_ptr<ScanlineControl> m_scanline_control; 66 bool m_selected = false; ///< should this button render itself specially to show that it is selected? 67 bool m_fleet_blockaded = false; 68 }; 69 70 /* returns head icon for passed fleet at passed icon size */ 71 std::vector<std::shared_ptr<GG::Texture>> FleetHeadIcons(std::shared_ptr<const Fleet>, FleetButton::SizeType size_type); 72 73 /* returns head icon for passed fleets at passed icon size */ 74 std::vector<std::shared_ptr<GG::Texture>> FleetHeadIcons(const std::vector<std::shared_ptr<const Fleet>>& fleets, FleetButton::SizeType size_type); 75 76 /* returns size icon for passed fleet at passed icon size */ 77 std::shared_ptr<GG::Texture> FleetSizeIcon(std::shared_ptr<const Fleet> fleet, FleetButton::SizeType size_type); 78 79 /* returns head icon for passed fleet size at passed icon size */ 80 std::shared_ptr<GG::Texture> FleetSizeIcon(unsigned int fleet_size, FleetButton::SizeType size_type); 81 82 /* returns blockade icon if a fleet is being blockaded */ 83 std::shared_ptr<GG::Texture> FleetBlockadedIcon(FleetButton::SizeType size_type); 84 85 /* returns icon for indication fleet icon selection */ 86 std::shared_ptr<GG::Texture> FleetSelectionIndicatorIcon(); 87 88 #endif // _FleetButton_h_ 89