summaryrefslogtreecommitdiff
path: root/src/toolbar_gui.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-01-23 22:18:06 +0000
committerrubidium <rubidium@openttd.org>2009-01-23 22:18:06 +0000
commit04709f279809125e24c3652f182eac0e56c1d90f (patch)
treeaf25f72d8f74dc4f3847b4a36733b273b2c642b0 /src/toolbar_gui.cpp
parenta1d4b792e8b412f9b4a3525554257fada2302124 (diff)
downloadopenttd-04709f279809125e24c3652f182eac0e56c1d90f.tar.xz
(svn r15242) -Feature: allow moving clients between companies/spectators by the server and the clients themselves (dihedral)
Diffstat (limited to 'src/toolbar_gui.cpp')
-rw-r--r--src/toolbar_gui.cpp50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index dcea1efc9..96f9b312d 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -45,6 +45,7 @@
#include "network/network.h"
#include "network/network_gui.h"
+#include "network/network_func.h"
#include "table/strings.h"
#include "table/sprites.h"
@@ -199,6 +200,13 @@ static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count
SndPlayFx(SND_15_BEEP);
}
+/** Enum for the Company Toolbar's network related buttons */
+enum {
+ CTMN_CLIENT_LIST = -1, ///< Show the client list
+ CTMN_NEW_COMPANY = -2, ///< Create a new company
+ CTMN_SPECTATE = -3, ///< Become spectator
+};
+
/**
* Pop up a generic company list menu.
*/
@@ -206,17 +214,25 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0)
{
DropDownList *list = new DropDownList();
+#ifdef ENABLE_NETWORK
if (widget == TBN_COMPANIES && _networking) {
/* Add the client list button for the companies menu */
- list->push_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST, -1, false));
+ list->push_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST, CTMN_CLIENT_LIST, false));
+
+ if (_local_company == COMPANY_SPECTATOR) {
+ list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached()));
+ } else {
+ list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached()));
+ }
}
+#endif /* ENABLE_NETWORK */
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
if (!IsValidCompanyID(c)) continue;
list->push_back(new DropDownListCompanyItem(c, false, HasBit(grey, c)));
}
- ShowDropDownList(w, list, _local_company == COMPANY_SPECTATOR ? -1 : _local_company, widget, 240, true, true);
+ ShowDropDownList(w, list, _local_company == COMPANY_SPECTATOR ? CTMN_CLIENT_LIST : _local_company, widget, 240, true, true);
SndPlayFx(SND_15_BEEP);
}
@@ -448,11 +464,33 @@ static void ToolbarCompaniesClick(Window *w)
static void MenuClickCompany(int index)
{
- if (_networking && index == -1) {
- ShowClientList();
- } else {
- ShowCompany((CompanyID)index);
+#ifdef ENABLE_NETWORK
+ if (_networking) {
+ switch (index) {
+ case CTMN_CLIENT_LIST:
+ ShowClientList();
+ return;
+
+ case CTMN_NEW_COMPANY:
+ if (_network_server) {
+ DoCommandP(0, 0, _network_own_client_id, CMD_COMPANY_CTRL);
+ } else {
+ NetworkSend_Command(0, 0, 0, CMD_COMPANY_CTRL, NULL, NULL);
+ }
+ return;
+
+ case CTMN_SPECTATE:
+ if (_network_server) {
+ NetworkServerDoMove(CLIENT_ID_SERVER, COMPANY_SPECTATOR);
+ MarkWholeScreenDirty();
+ } else {
+ NetworkClientRequestMove(COMPANY_SPECTATOR);
+ }
+ return;
+ }
}
+#endif /* ENABLE_NETWORK */
+ ShowCompany((CompanyID)index);
}
/* --- Graphs button menu --- */