10 #ifndef LINKGRAPH_GUI_H
11 #define LINKGRAPH_GUI_H
13 #include "../company_func.h"
14 #include "../station_base.h"
15 #include "../widget_type.h"
16 #include "../window_gui.h"
43 typedef std::map<StationID, LinkProperties> StationLinkMap;
44 typedef std::map<StationID, StationLinkMap> LinkMap;
45 typedef std::vector<std::pair<StationID, uint> > StationSupplyList;
65 bool ShowTooltip(
Point pt, TooltipCloseCondition close_cond);
98 static void DrawVertex(
int x,
int y,
int size,
int colour,
int border_colour);
109 void SetOverlay(std::shared_ptr<LinkGraphOverlay> overlay);
112 void DrawWidget(
const Rect &r,
WidgetID widget)
const override;
113 bool OnTooltip([[maybe_unused]]
Point pt,
WidgetID widget, TooltipCloseCondition close_cond)
override;
114 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override;
118 std::shared_ptr<LinkGraphOverlay> overlay;
uint8_t CargoID
Cargo slots to indicate a cargo type within a game.
Handles drawing of links into some window.
bool IsPointVisible(Point pt, const DrawPixelInfo *dpi, int padding=0) const
Determine if a certain point is inside the given DPI, with some lee way.
void SetCargoMask(CargoTypes cargo_mask)
Set a new cargo mask and rebuild the cache.
CargoTypes cargo_mask
Bitmask of cargos to be displayed.
static void DrawVertex(int x, int y, int size, int colour, int border_colour)
Draw a square symbolizing a producer of cargo.
CompanyMask GetCompanyMask()
Get a bitmask of the currently shown companies.
Window * window
Window to be drawn into.
void DrawLinks(const DrawPixelInfo *dpi) const
Draw the cached links or part of them into the given area.
void SetCompanyMask(CompanyMask company_mask)
Set a new company mask and rebuild the cache.
static const uint8_t LINK_COLOURS[][12]
Colours for the various "load" states of links.
LinkGraphOverlay(Window *w, WidgetID wid, CargoTypes cargo_mask, CompanyMask company_mask, uint scale)
Create a link graph overlay for the specified window.
CargoTypes GetCargoMask()
Get a bitmask of the currently shown cargoes.
StationSupplyList cached_stations
Cache for stations to be drawn.
LinkMap cached_links
Cache for links to reduce recalculation.
bool IsLinkVisible(Point pta, Point ptb, const DrawPixelInfo *dpi, int padding=0) const
Determine if a certain link crosses through the area given by the dpi with some lee way.
Point GetStationMiddle(const Station *st) const
Determine the middle of a station in the current window.
void Draw(const DrawPixelInfo *dpi)
Draw the linkgraph overlay or some part of it, in the area given.
bool dirty
Set if overlay should be rebuilt.
const WidgetID widget_id
ID of Widget in Window to be drawn to.
void DrawContent(Point pta, Point ptb, const LinkProperties &cargo) const
Draw one specific link.
CompanyMask company_mask
Bitmask of companies to be displayed.
uint scale
Width of link lines.
void GetWidgetDpi(DrawPixelInfo *dpi) const
Get a DPI for the widget we will be drawing to.
static void AddStats(CargoID new_cargo, uint new_cap, uint new_usg, uint new_flow, uint32_t time, bool new_shared, LinkProperties &cargo)
Add information from a given pair of link stat and flow stat to the given link properties.
void AddLinks(const Station *sta, const Station *stb)
Add all "interesting" links between the given stations to the cache.
void DrawStationDots(const DrawPixelInfo *dpi) const
Draw dots for stations into the smallmap.
void SetDirty()
Mark the linkgraph dirty to be rebuilt next time Draw() is called.
void RebuildCache()
Rebuild the cache and recalculate which links and stations to be shown.
Some typedefs for the main game.
void ShowLinkGraphLegend()
Open a link graph legend window.
Dimensions (a width and height) of a rectangle in 2D.
Data about how and where to blit pixels.
Menu window to select cargoes and companies to show in a link graph overlay.
void OnInvalidateData(int data=0, bool gui_scope=true) override
Invalidate the data of this window if the cargoes or companies have changed.
void SetOverlay(std::shared_ptr< LinkGraphOverlay > overlay)
Set the overlay belonging to this menu and import its company/cargo settings.
void UpdateOverlayCompanies()
Update the overlay with the new company selection.
void UpdateOverlayCargoes()
Update the overlay with the new cargo selection.
Monthly statistics for a link between two stations.
uint usage
Actual usage of the link.
bool shared
If this is a shared link to be drawn dashed.
CargoID cargo
Cargo type of the link.
uint planned
Planned usage of the link.
uint Usage() const
Return the usage of the link to display.
uint capacity
Capacity of the link.
uint32_t time
Travel time of the link.
Coordinates of a point in 2D.
Specification of a rectangle with absolute coordinates of all edges.
High level window description.
Data structure for an opened window.
ResizeInfo resize
Resize information.
WindowNumber window_number
Window number within the window class.