summaryrefslogtreecommitdiff
path: root/src/company_gui.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2013-02-04 20:29:38 +0000
committerrubidium <rubidium@openttd.org>2013-02-04 20:29:38 +0000
commit99a08e1e8cec3d73bf802e64b9e460e71f47cb43 (patch)
treebe103dfa43a828c12444678bce7fe67c679b372f /src/company_gui.cpp
parent26adb854e05d781f05f29c4584c5c58d92461cce (diff)
downloadopenttd-99a08e1e8cec3d73bf802e64b9e460e71f47cb43.tar.xz
(svn r24968) -Fix [FS#5379]: company window was not updated when shared were enabled/disabled
Diffstat (limited to 'src/company_gui.cpp')
-rw-r--r--src/company_gui.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index c6ddd6bd0..7a6f93a20 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -1987,6 +1987,7 @@ struct CompanyWindow : Window
{
this->InitNested(desc, window_number);
this->owner = (Owner)this->window_number;
+ this->OnInvalidateData();
}
virtual void OnPaint()
@@ -2055,25 +2056,6 @@ struct CompanyWindow : Window
}
}
- if (!local) {
- if (_settings_game.economy.allow_shares) { // Shares are allowed
- /* If all shares are owned by someone (none by nobody), disable buy button */
- this->SetWidgetDisabledState(WID_C_BUY_SHARE, GetAmountOwnedBy(c, INVALID_OWNER) == 0 ||
- /* Only 25% left to buy. If the company is human, disable buying it up.. TODO issues! */
- (GetAmountOwnedBy(c, INVALID_OWNER) == 1 && !c->is_ai) ||
- /* Spectators cannot do anything of course */
- _local_company == COMPANY_SPECTATOR);
-
- /* If the company doesn't own any shares, disable sell button */
- this->SetWidgetDisabledState(WID_C_SELL_SHARE, (GetAmountOwnedBy(c, _local_company) == 0) ||
- /* Spectators cannot do anything of course */
- _local_company == COMPANY_SPECTATOR);
- } else { // Shares are not allowed, disable buy/sell buttons
- this->DisableWidget(WID_C_BUY_SHARE);
- this->DisableWidget(WID_C_SELL_SHARE);
- }
- }
-
this->DrawWidgets();
}
@@ -2396,6 +2378,36 @@ struct CompanyWindow : Window
#endif /* ENABLE_NETWORK */
}
}
+
+
+ /**
+ * Some data on this window has become invalid.
+ * @param data Information about the changed data.
+ * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
+ */
+ virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
+ {
+ if (this->window_number == _local_company) return;
+
+ if (_settings_game.economy.allow_shares) { // Shares are allowed
+ const Company *c = Company::Get(this->window_number);
+
+ /* If all shares are owned by someone (none by nobody), disable buy button */
+ this->SetWidgetDisabledState(WID_C_BUY_SHARE, GetAmountOwnedBy(c, INVALID_OWNER) == 0 ||
+ /* Only 25% left to buy. If the company is human, disable buying it up.. TODO issues! */
+ (GetAmountOwnedBy(c, INVALID_OWNER) == 1 && !c->is_ai) ||
+ /* Spectators cannot do anything of course */
+ _local_company == COMPANY_SPECTATOR);
+
+ /* If the company doesn't own any shares, disable sell button */
+ this->SetWidgetDisabledState(WID_C_SELL_SHARE, (GetAmountOwnedBy(c, _local_company) == 0) ||
+ /* Spectators cannot do anything of course */
+ _local_company == COMPANY_SPECTATOR);
+ } else { // Shares are not allowed, disable buy/sell buttons
+ this->DisableWidget(WID_C_BUY_SHARE);
+ this->DisableWidget(WID_C_SELL_SHARE);
+ }
+ }
};
static const WindowDesc _company_desc(