1
0
Fork 0

(svn r27905) -Fix [FS#6585]: Keep the "link" between industry chain and smallmap windows whenever possible

release/1.8
adf88 2017-08-31 06:48:55 +00:00
parent 88726f71b6
commit 74e1fe130c
2 changed files with 18 additions and 4 deletions

View File

@ -572,6 +572,12 @@ static const byte _vehicle_type_colours[6] = {
}; };
/** Notify the industry chain window to stop sending newly selected industries. */
/* static */ void SmallMapWindow::BreakIndustryChainLink()
{
InvalidateWindowClassesData(WC_INDUSTRY_CARGOES, NUM_INDUSTRYTYPES);
}
inline Point SmallMapWindow::SmallmapRemapCoords(int x, int y) const inline Point SmallMapWindow::SmallmapRemapCoords(int x, int y) const
{ {
Point pt; Point pt;
@ -1069,6 +1075,12 @@ SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(des
this->SetOverlayCargoMask(); this->SetOverlayCargoMask();
} }
SmallMapWindow::~SmallMapWindow()
{
delete this->overlay;
this->BreakIndustryChainLink();
}
/** /**
* Rebuilds the colour indices used for fast access to the smallmap contour colours based on the heightlevel. * Rebuilds the colour indices used for fast access to the smallmap contour colours based on the heightlevel.
*/ */
@ -1278,6 +1290,7 @@ void SmallMapWindow::SwitchMapType(SmallMapType map_type)
this->SetupWidgetData(); this->SetupWidgetData();
if (map_type == SMT_LINKSTATS) this->overlay->RebuildCache(); if (map_type == SMT_LINKSTATS) this->overlay->RebuildCache();
if (map_type != SMT_INDUSTRY) this->BreakIndustryChainLink();
this->SetDirty(); this->SetDirty();
} }
@ -1329,6 +1342,8 @@ void SmallMapWindow::SelectLegendItem(int click_pos, LegendAndColour *legend, in
} else { } else {
legend[click_pos].show_on_map = !legend[click_pos].show_on_map; legend[click_pos].show_on_map = !legend[click_pos].show_on_map;
} }
if (this->map_type == SMT_INDUSTRY) this->BreakIndustryChainLink();
} }
/** /**
@ -1383,9 +1398,6 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
/* virtual */ void SmallMapWindow::OnClick(Point pt, int widget, int click_count) /* virtual */ void SmallMapWindow::OnClick(Point pt, int widget, int click_count)
{ {
/* User clicked something, notify the industry chain window to stop sending newly selected industries. */
InvalidateWindowClassesData(WC_INDUSTRY_CARGOES, NUM_INDUSTRYTYPES);
switch (widget) { switch (widget) {
case WID_SM_MAP: { // Map window case WID_SM_MAP: { // Map window
/* /*
@ -1473,6 +1485,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
switch (this->map_type) { switch (this->map_type) {
case SMT_INDUSTRY: case SMT_INDUSTRY:
tbl = _legend_from_industries; tbl = _legend_from_industries;
this->BreakIndustryChainLink();
break; break;
case SMT_OWNER: case SMT_OWNER:
tbl = &(_legend_land_owners[NUM_NO_COMPANY_ENTRIES]); tbl = &(_legend_land_owners[NUM_NO_COMPANY_ENTRIES]);

View File

@ -82,6 +82,7 @@ protected:
uint8 refresh; ///< Refresh counter, zeroed every FORCE_REFRESH_PERIOD ticks. uint8 refresh; ///< Refresh counter, zeroed every FORCE_REFRESH_PERIOD ticks.
LinkGraphOverlay *overlay; LinkGraphOverlay *overlay;
static void BreakIndustryChainLink();
Point SmallmapRemapCoords(int x, int y) const; Point SmallmapRemapCoords(int x, int y) const;
/** /**
@ -173,7 +174,7 @@ public:
friend class NWidgetSmallmapDisplay; friend class NWidgetSmallmapDisplay;
SmallMapWindow(WindowDesc *desc, int window_number); SmallMapWindow(WindowDesc *desc, int window_number);
virtual ~SmallMapWindow() { delete this->overlay; } virtual ~SmallMapWindow();
void SmallMapCenterOnCurrentPos(); void SmallMapCenterOnCurrentPos();
Point GetStationMiddle(const Station *st) const; Point GetStationMiddle(const Station *st) const;